📄 my_appli.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 + -