📄 mainloop.c
字号:
///////////////////////////////////////////////////////////////////////
#include "Common.h"
#include "Hal4Sys.h"
#include "Hal4d12.h"
#include "mainloop.h"
#include "chap_9.h"
#include "d12_hal.h"
#include "conio.h"
///////////////////////////////////////////////////////////////////////
void usb_isr(void);
DEVICE_REQUEST setup_pkt;
u8 UsbReq_Recipient;
u8 UsbReq_Type;
u8 UsbReq_Request;
u8 UsbReq_Dir;
u8 UsbReq_Ep_Dir;
///////////////////////////////////////////////////////////////////////
void (*std_handler[])(void) =
{
Chap9_GetStatus,
Chap9_ClearFeature,
Hal4D12_StallEP0,
Chap9_SetFeature,
Hal4D12_StallEP0,
Chap9_SetAddress,
Chap9_GetDescriptor,
Hal4D12_StallEP0,
Chap9_GetConfiguration,
Chap9_SetConfiguration,
Chap9_GetInterface,
Chap9_SetInterface,
};
void (*class_handler[])(void) =
{
HID_GetReport,
HID_GetIDLE,
HID_GetProtocol,
HID_SetReport,
HID_SetIDLE,
HID_SetProtocol
};
///////////////////////////////////////////////////////////////////////
void usb_main(void)
{
u8 exit_flag=0;
u8 s[16]={0,0,0,0};
printf("Starting...\n");
printf("PDIUSBD12 test...\n");
if(Hal4D12_ReadChipID()==0x1210)
printf(" PDIUSBD12 found, ChipID=%04x\n",Hal4D12_ReadChipID());
else
{
printf(" No PDIUSBD12 found.\n");
return;
}
Hal4Sys_InitD12();
usb_reconnect();
ep0_state = ST_IDLE;
// Connect to USB Host
printf("\nEnter main loop ...Press Enter/Space to exit\n");
while(!exit_flag)
{
////////////////////////////////////////////
if(s[0]!=0)
{
s[0]=0x00; s[1]=0; s[2]=0; s[3]=0;
Hal4D12_ReadLastTransactionStatus(3);
Hal4D12_WriteEndpoint(3,4,s);
}
if(kbhit())
{
switch(getch())
{
case '\n':
case '\r':
case ' ':
exit_flag=1;
break;
case 0x00: // BC31 ArrowKey
case 0xe0: // VC60 ArrowKey
switch(getch())
{
case 0x4b: // Left Arrow Key
s[0]=0x00; s[1]=-10; s[2]=0; s[3]=0;
break;
case 0x48: // Up Arrow Key
s[0]=0x00; s[1]=0; s[2]=-10; s[3]=0;
break;
case 0x4d: // Right Arrow Key
s[0]=0x00; s[1]=10; s[2]=0; s[3]=0;
break;
case 0x50: // Down Arrow Key
s[0]=0x00; s[1]=0; s[2]=10; s[3]=0;
break;
case 0x53: // Delete Key
s[0]=0x01; s[1]=0; s[2]=0; s[3]=0;
break;
case 0x51: // End Key
s[0]=0x02; s[1]=0; s[2]=0; s[3]=0;
break;
case 0x4f: // PageDown Key
s[0]=0x04; s[1]=0; s[2]=0; s[3]=0;
break;
default:
break;
}
Hal4D12_ReadLastTransactionStatus(3);
Hal4D12_WriteEndpoint(3,4,s);
delay_ms(50);
break;
default:
break;
}
}
////////////////////////////////////////////
if(D12_INT()==0)
usb_isr();
if (ep0_state==ST_SETUP)
setup_handler();
}
usb_disconnect();
}
///////////////////////////////////////////////////////////////////////
void usb_disconnect(void)
{
Hal4D12_SetMode(D12_NOLAZYCLOCK, D12_SETTOONE | D12_CLOCK_4M);
}
///////////////////////////////////////////////////////////////////////
void usb_connect(void)
{
Hal4D12_SetMode(D12_NOLAZYCLOCK|D12_SOFTCONNECT, D12_SETTOONE | D12_CLOCK_4M);
}
///////////////////////////////////////////////////////////////////////
void usb_reconnect(void)
{
usb_disconnect();
delay_ms(1000);
usb_connect();
}
///////////////////////////////////////////////////////////////////////
void setup_handler(void)
{
u8 len;
len = Hal4D12_ReadEndpoint(0, sizeof(DEVICE_REQUEST),(u8 *)(&(setup_pkt)));
if(len != sizeof(DEVICE_REQUEST))
{
Hal4D12_StallEP0();
return;
}
UsbReq_Dir=(setup_pkt.bmRequestType & 0x80)?1:0;
UsbReq_Ep_Dir=(setup_pkt.wIndex & 0x80)?1:0;
UsbReq_Recipient = setup_pkt.bmRequestType & USB_RECIPIENT;
UsbReq_Type = setup_pkt.bmRequestType & USB_REQUEST_TYPE_MASK;
UsbReq_Request = setup_pkt.bRequest & USB_REQUEST_MASK;
if ( UsbReq_Dir || (setup_pkt.wLength == 0))
Hal4D12_AcknowledgeSETUP();
if (UsbReq_Type == USB_STANDARD_REQUEST)
{
if(UsbReq_Request<MAX_STD_REQUEST)
(*std_handler[UsbReq_Request])();
}
else if(UsbReq_Type == USB_CLASS_REQUEST)
{
if(UsbReq_Request>0x03)
UsbReq_Request-=0x05;
(*class_handler[UsbReq_Request-1])();
}
else
{
ep0_state = ST_STALL;
Hal4D12_StallEP0();
return;
}
if ((!UsbReq_Dir) && (setup_pkt.wLength != 0))
Hal4D12_AcknowledgeSETUP();
}
///////////////////////////////////////////////////////////////////////
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -