📄 mainloop.c
字号:
#include <reg51.h> //SFR declarations
#include "base_io.h"
#include "d12_comm_if.h"
#include "mainloop.h"
#include "usb_standard_request.h"
#include "usb_usr_request.h"
#include "myLED.h"
extern EPPFLAGS bEPPflags;
CONTROL_XFER ControlData;
/*
//*************************************************************************
// USB protocol function pointer arrays
//*************************************************************************
*/
code void (*StandardDeviceRequest[])(void) =
{
get_status,
clear_feature,
reserved,
set_feature,
reserved,
set_address,
get_descriptor,
reserved,
get_configuration,
set_configuration,
get_interface,
set_interface,
reserved,
reserved,
reserved,
reserved
};
code void (*VendorDeviceRequest[])(void) =
{
mini_nurse_LEDon_command,
mini_nurse_LEDoff_command,
reserved,
// mini_nurse_XXXXXX_command,
// mini_nurse_SPEAKER_command,
// mini_nurse_REMOTE_command,
// mini_nurse_SENSOR_command,
// mini_nurse_LCD_command
};
void connect_USB(void)
{
DISABLE;
bEPPflags.value=0;
ENABLE;
D12_SetMode(0x12,0x43);
//D12_SetMode(0x10,0x00);
LEDctl(LEDoff,LEDA);
}
void disconnect_USB(void)
{
D12_SetMode(0x44,0x43);
//D12_SetMode(0x0,0x0);
}
void reconnect_USB(void)
{
unsigned int tmpi;
LEDctl(LEDon,LEDA);
D12SUSPD=0;
disconnect_USB();
for(tmpi=0;tmpi<40960;tmpi++);
connect_USB();
LEDctl(LEDoff,LEDA);
}
void init_special_interrupts(void)
{
IT0 = 0;
EX0 = 1;
PX0 = 0;
}
void init_port()
{
P0 = 0xFF;
P1 = 0xFC;
P2 = 0xFF;
P3 = 0xFF;
MCU_D12CS =0x0;
D12SUSPD =0x0;
}
void main(void)
{
init_port();
init_special_interrupts();
MCU_D12CS = 0X1;
MCU_D12CS = 0X0;
//D12_ReadChipID(); //only for debug
bEPPflags.value=0;
/* Main program loop */
reconnect_USB();
//ENABLE;
while( TRUE ){
if (bEPPflags.bits.bus_reset) {
DISABLE;
bEPPflags.bits.bus_reset = 0;
ENABLE;
D12SUSPD = 0X1;
} // if bus reset
if (bEPPflags.bits.setup_packet){
DISABLE;
bEPPflags.bits.setup_packet = 0;
ENABLE;
control_handler();
D12SUSPD = 0X1;
} // if setup_packet
} // Main Loop
}
void stall_ep0(void)
{
D12_SetEndPStatus(0, 1);
D12_SetEndPStatus(1, 1);
}
void init_unconfig(void)
{
D12_SetEndPEN(0); /* Disable all endpoints but EPP0. */
}
void init_config(void)
{
D12_SetEndPEN(1); /* Enable generic/iso endpoints. */
}
void single_transmit(unsigned char * buf, unsigned char len)
{
if( len <= EP0_PACKET_SIZE) {
D12_WriteEndP(1, len, buf);
}
}
void code_transmit(unsigned char code * pRomData, unsigned short len)
{
ControlData.wCount = 0;
if(ControlData.wLength > len)
ControlData.wLength = len;
ControlData.pData = pRomData;
if( ControlData.wLength >= EP0_PACKET_SIZE) {
D12_WriteEndP(1, EP0_PACKET_SIZE, ControlData.pData);
ControlData.wCount += EP0_PACKET_SIZE;
DISABLE;
bEPPflags.bits.control_state = USB_TRANSMIT;
ENABLE;
}
else {
D12_WriteEndP(1, ControlData.wLength, pRomData);
ControlData.wCount += ControlData.wLength;
DISABLE;
bEPPflags.bits.control_state = USB_IDLE;
ENABLE;
}
}
void control_handler()
{
unsigned char type, req;
type = ControlData.DeviceRequest.bmRequestType & USB_REQUEST_TYPE_MASK;
req = ControlData.DeviceRequest.bRequest & USB_REQUEST_MASK;
//help_devreq(type, req); // print out device request
if (type == USB_STANDARD_REQUEST)
(*StandardDeviceRequest[req])();
else if (type == USB_VENDOR_REQUEST)
(*VendorDeviceRequest[req])();
else
stall_ep0();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -