⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 my_appli.c

📁 ST72T63游戏杆源程序
💻 C
字号:
/**************** (c) 1998            STMicroelectronics **********************

PROJECT : USB - ST7
COMPILER : ST7 HICROSS C (HIWARE)

MODULE  :  my_appli.c
VERSION :  V 1.0

CREATION DATE :  25/05/98

AUTHOR : / MICROCONTROLLER DIVISION / ST Rousset

-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-

DESCRIPTION : ST7263 USB Application.

-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-

MODIFICATIONS :


******************************************************************************/

#include "usb_var.h"
#include "usr_var.h"
#include "my_appli.h"
#include "define.h"
#include "hidef.h"
#include "map_7263.h"
#include "usb_ail.h"
#include "userio.h"
#include "lib_bits.h"


void USB_scan(void)
{ int POV_in, POV_out;

  if (bmRequest == 0x11)
  { if (FeatureArray[3] & 0x80)
      //ModeNum = (FeatureArray[3] & 0x30) >> 4;
       if (FeatureArray[3] & 0x40)
      ControllerID = FeatureArray[3] & 0x0F;
      
    if (FeatureArray[2] & 0x01)
    { AutofireState1 = FeatureArray[1];
      AutofireState2 = FeatureArray[2] & 0xC0;
    }  

    bmRequest = 0;
  } 

//***************************************************** 
  ReportIdLength = 8;
  ReportIdArray[0] = 0x01;          // Report ID
  ReportIdArray[1] = A_DATA[0].Packet[2];   // x-axis
  ReportIdArray[2] = B_DATA[0].Packet[2];   // y-axis
  ReportIdArray[3] = A_DATA[0].Packet[3];   // I-axis
  ReportIdArray[4] = B_DATA[0].Packet[3];   // J-axis
  
  POV_in = B_DATA[0].Packet[1] & 0x0F;
  switch (POV_in)
  { case 0x01 : POV_out = 0x01;
                break;
    case 0x09 : POV_out = 0x02;
                break;
    case 0x08 : POV_out = 0x03;
                break;
    case 0x0A : POV_out = 0x04;
                break;
    case 0x02 : POV_out = 0x05;
                break;
    case 0x06 : POV_out = 0x06;
                break;
    case 0x04 : POV_out = 0x07;
                break;
    case 0x05 : POV_out = 0x08;
                break;
    default   : POV_out = 0x00;              
                break;
  }                                                 // map POV
  
  ReportIdArray[5] = (A_DATA[0].Packet[1]<<4)| POV_out;  // map : Fire_F, Fire_G, Fire_H, Fire_I
  ReportIdArray[6] = ((B_DATA[0].Packet[1]&0x30)<<2)|((B_DATA[0].Packet[1]&0xc0)>>2)|(A_DATA[0].Packet[1]>>4);
  ReportIdArray[7] = (ControllerID & 0x0F)|(D_DATA[0].Packet[1]<<7);   //3-03-00

  TransmitEP1(&ReportIdArray[0], ReportIdLength);
  
  if(bmUsbState & SOF) // Start of frame occurs
  {
        bmUsbState &= ~SOF; // Reset the SOF bit
        UsbCounter++;
  }

  /*
  if(bmUsbState & ENUMERATED) // Device is enumerated
        BlinkLED();     // Count SOF
        
  */
  
  if( (bmUsbState&SUSPEND) && (ITRFRE==0))
  {
         PADR &= 0xf9;
	     PBDR &= 0x0f;
         PCDR &= 0xfd;           //PC1=0    1-26-00
         SetBit(PCDR,2);
         asm halt;
         //PADR &= 0xfe;           // HC126 control C 1 to 0;
         ClrBit(PCDR,2);
         PADR |= 0x04;
		 PBDR |= 0xf0;
         PCDR |= 0x02;           //PC1=1    1-26-00
       
  }
  
  if(bmUsbState & REMOTE_WAKEUP)
  {    
        RemoteWakeup();
  }
}


/*-----------------------------------------------------------------------------
ROUTINE NAME : MY_APPLICATION
INPUT/OUTPUT : 
DESCRIPTION               : 
-----------------------------------------------------------------------------*/
void MY_APPLICATION(void)
{
     // Analog to Digital Conversion
     if ((ADCCSR & COCO) == END_CONVERSION )         // Conversion complete  
     {
        AXIS[ADCsel].Current=0;
        
        ADCvalue=ADCDR;
        
        if (ADCvalue>(AXIS[ADCsel].Initial+Deadband))
        {   if ((ADCvalue-AXIS[ADCsel].Initial) >= Vrange)
               AXIS[ADCsel].Current=0xff;
            else {  ADCtemp = (ADCvalue-AXIS[ADCsel].Initial-Deadband)*127;
                    while (ADCtemp>0)
                    {     
                          ADCtemp = ADCtemp - Vrange + Deadband;
                          AXIS[ADCsel].Current ++;
                    }
                    AXIS[ADCsel].Current=AXIS[ADCsel].Current+127;
                 }
        }

        else if (ADCvalue<(AXIS[ADCsel].Initial-Deadband))
                if ((AXIS[ADCsel].Initial-ADCvalue) > Vrange)
                   AXIS[ADCsel].Current=0;
                else {  ADCtemp = (AXIS[ADCsel].Initial-Deadband-ADCvalue)*127;
                        while (ADCtemp>0)
                        {     
                              ADCtemp = ADCtemp - Vrange+Deadband;
                              AXIS[ADCsel].Current ++;
                        }
                        AXIS[ADCsel].Current=127-AXIS[ADCsel].Current;
                     }
              else AXIS[ADCsel].Current=0x7f;

        if ((AXIS[ADCsel].Current!=0) && (AXIS[ADCsel].Current!=0x7f) && (AXIS[ADCsel].Current!=0xff))
        {
           AXIS[ADCsel].Current=((int)AXIS[ADCsel].Record[0]+(int)AXIS[ADCsel].Record[1]
                                +(int)AXIS[ADCsel].Record[2]+(int)AXIS[ADCsel].Current)/4;
        
           AXIS[ADCsel].Record[0]=AXIS[ADCsel].Record[1];
           AXIS[ADCsel].Record[1]=AXIS[ADCsel].Record[2];
           AXIS[ADCsel].Record[2]=AXIS[ADCsel].Current;
        }
        
        if (ADCsel<3)
           ADCsel++;
        else  ADCsel=0;

        ADCCSR = 0x20+ADCsel;
     }

     A_DATA[0].Packet[2]=AXIS[3].Current;
     A_DATA[0].Packet[3]=AXIS[1].Current;
     B_DATA[0].Packet[2]=AXIS[2].Current;
     B_DATA[0].Packet[3]=AXIS[0].Current;

     asm SIM;
     A_DATA[0].Packet[1]= A.report + B.report*2 + C.report*4 + D.report*8;
     A_DATA[0].Packet[1] += (F.report + E.report*2 + L.report*4 + R.report*8)*16;
     B_DATA[0].Packet[1]= UP.report + DOWN.report*2 + LEFT.report*4 + RIGHT.report*8;
     B_DATA[0].Packet[1] += (MODE.report +PROFEDIT.report*2+ L1.report*4 + R1.report*8)*16;
     D_DATA[0].Packet[1]= MODESW.report+4;   
  	 D_DATA[0].Packet[2] = FWVersion1;   //FWVersion1   0x10
 	 D_DATA[0].Packet[3] = FWVersion2;  // FWVersion2   0x01            //6-23-00  Version: 1.01  
     
	 asm RIM;
     
     //if ((RTPRO>1)&&(PROFEDIT.report))
        // B_DATA[0].Packet[1]|=0x20;

     
  if (Timer)
  {  
     Timer=0;
     Toggle=!Toggle;

     KeyInit();
     GetInput();

   /*  if (AutofireEnable)
        if (AutofireFlash)
           AutofireLED(!AutofireLEDstate);
         
        else AutofireLED(1);
     else AutofireLED(0);*/
       
     GetInput();

     // To avoid accidental triggering of the profile editor window
     /*if (PROFEDIT.pressed)
     {  if (RTPRO<2)
            RTPRO++;
     }
     else RTPRO=0; */  
     
  
     GetInput();

     if (A.pressed==3)     if (A.autofire)       A.report=Toggle;        else A.report=1;     else A.report=0;
     if (B.pressed==3)     if (B.autofire)       B.report=Toggle;        else B.report=1;     else B.report=0;
     if (C.pressed==3)     if (C.autofire)       C.report=Toggle;        else C.report=1;     else C.report=0;
     if (D.pressed==3)     if (D.autofire)       D.report=Toggle;        else D.report=1;     else D.report=0;
     
	 if (E.pressed==3)     if (E.autofire)       E.report=Toggle;        else E.report=1;     else E.report=0;
     if (F.pressed==3)     if (F.autofire)       F.report=Toggle;        else F.report=1;     else F.report=0;
     if (R.pressed==3)     if (R.autofire)       R.report=Toggle;        else R.report=1;     else R.report=0;
     if (L.pressed==3)     if (L.autofire)       L.report=Toggle;        else L.report=1;     else L.report=0;
     if (L1.pressed==3)    if (L1.autofire)      L1.report=Toggle;       else L1.report=1;    else L1.report=0;
     if (R1.pressed==3)    if (R1.autofire)      R1.report=Toggle;       else R1.report=1;    else R1.report=0;
     if (UP.pressed==3)         UP.report=1;        else UP.report=0;
     if (DOWN.pressed==3)       DOWN.report=1;      else DOWN.report=0;
     if (LEFT.pressed==3)       LEFT.report=1;      else LEFT.report=0;
     if (RIGHT.pressed==3)      RIGHT.report=1;     else RIGHT.report=0;
     if (MODE.pressed==3)       MODE.report=1;      else MODE.report=0;
     if (PROFEDIT.pressed==3)   PROFEDIT.report=1;  else PROFEDIT.report=0;
     if (MODESW.pressed==3)     if (MODESW.autofire)       MODESW.report=Toggle;        else MODESW.report=1;     else MODESW.report=0;
    

  }     
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -