void main() { char a; USB_Reset(); // Schaltet USB ab printf("Testprogramm USB Restart\n\r");// Sende an USART DELAY_MS(10000); //Wartet 10sek while(!USB_Verbunden) USB_Verbinde(); // Baut USB-Verbindung auf while(1) { a=USB_Char_empf(); //Empange ein zeichen über USB if (a==0x80) //Wenn sich der Bootloader meldet { #asm goto 0x1002 //Bootloader starten #endasm } } }
int SystemIntoUDisk() { int ret,i; SysDisableWaitMode(3); SysIntoHighSpeed(); MaxLUN = -1; R_NAND_Present=0; R_SDC_Present=0; //no have SD modify by haoyu 2007.1.29 for(i=0 ; i<10 ; i++) { ret = DrvSDCInitial(); if(ret==0) { R_SDC_Present=1; // SD Card Initial Success MaxLUN++; break; _deviceunmount(0); } } USB_TimeOut_Enable(); USB_Initial(); USB_Reset(); USB_ServiceLoop(1); *P_USBD_Config=0x00; *P_USBD_INTEN=0x00; if(1 == R_SDC_Present) { _devicemount(0); } SysEnableWaitMode( 3 ); return 0; }
int SystemIntoUDisk(unsigned int serviceloop) { extern flash *RHM_FlashPtr; //RHM , *FP_RHM_FlashPtr; int i; #ifdef USBRP int fl_size = USB_Flash_init((flash *)0, 0); flash FL; int flash_execution_buf[fl_size]; RHM_FlashPtr = &FL; for(i=0; i<N_USB_LUN; i++) { FP_USB_Lun_Define[i] = &USB_Lun_Define[i]; if( USB_Lun_Define[i].unLunType == LunType_NOR) { USB_Lun_Define[i].rhmLunData = (unsigned long) RHM_FlashPtr; } } FL.flash_exe_buf = (void *) &flash_execution_buf[0]; USB_Flash_init(&FL, 1); #endif SysDisableWaitMode(3); SetSystemClockRate(48); if(serviceloop) { R_NAND_Present=0; MaxLUN = 0; R_SDC_Present=1; _deviceunmount(0); USB_TimeOut_Enable(); USB_Initial(); USB_Reset(); if(serviceloop == USB_CLIENT_SETUP_ONLY) { return(1); } } if(!serviceloop) { int tmp; long j; tmp = R_USB_State_Machine; for(j=0; j<100000; j++) { USB_ServiceLoop(0); if(R_USB_State_Machine > 0 && R_USB_State_Machine <= SCSI_CSW_Stage) { goto xxx; } else { if (!(j % 50)) { context.keystroke = keyCheck(0); if (context.keystroke) break; } } } if (tmp == 0 && R_USB_State_Machine == 0) { SetSystemClockRate(CLOCK_RATE); return(2); } if(R_USB_State_Machine == 0xf5f5) { SetSystemClockRate(CLOCK_RATE); return(2); } if(!(R_USB_State_Machine > 0 && R_USB_State_Machine <= SCSI_CSW_Stage)) { SysEnableWaitMode(3); RHM_FlashPtr = 0; SetSystemClockRate(CLOCK_RATE); return 1; } } xxx: if (LED_GREEN) setLED(LED_GREEN,FALSE); else // for USB before reading config file, or if config corrupted setLED(0x040,FALSE); if (LED_RED) setLED(LED_RED,TRUE); else // for USB before reading config file, or if config corrupted setLED(0x200,TRUE); //TODO: log entering USB device mode USB_ServiceLoop(1); *P_USBD_Config=0x00; *P_USBD_INTEN=0x00; if(1 == R_SDC_Present) { _devicemount(0); } SysEnableWaitMode( 3 ); R_USB_State_Machine == 0xf5f5; //CS: THIS LOOKS LIKE A BUG -- A TEST; NOT AN ASSIGNMENT! RHM_FlashPtr = 0; if (LED_RED) setLED(LED_RED,FALSE); else // for USB before reading config file, or if config corrupted setLED(0x200,FALSE); SetSystemClockRate(CLOCK_RATE); return 0; }
void USB_LP_IRQHandler (void) { U32 istr, num, val; istr = ISTR; /* USB Reset Request */ if (istr & ISTR_RESET) { USB_Reset(); #if USB_RESET_EVENT USB_Reset_Event(); #endif ISTR = ~ISTR_RESET; } /* USB Suspend Request */ if (istr & ISTR_SUSP) { USB_Suspend(); #if USB_SUSPEND_EVENT USB_Suspend_Event(); #endif ISTR = ~ISTR_SUSP; } /* USB Wakeup */ if (istr & ISTR_WKUP) { USB_WakeUp(); #if USB_RESUME_EVENT USB_Resume_Event(); #endif ISTR = ~ISTR_WKUP; } /* Start of Frame */ if (istr & ISTR_SOF) { #if USB_SOF_EVENT USB_SOF_Event(); #endif ISTR = ~ISTR_SOF; } #if USB_ERROR_EVENT /* PMA Over/underrun */ if (istr & ISTR_PMAOVR) { USB_Error_Event(1); ISTR = ~ISTR_PMAOVR; } /* Error: No Answer, CRC Error, Bit Stuff Error, Frame Format Error */ if (istr & ISTR_ERR) { USB_Error_Event(0); ISTR = ~ISTR_ERR; } #endif /* Endpoint Interrupts */ while ((istr = ISTR) & ISTR_CTR) { ISTR = ~ISTR_CTR; num = istr & ISTR_EP_ID; val = EPxREG(num); if (val & EP_CTR_RX) { EPxREG(num) = val & ~EP_CTR_RX & EP_MASK; if (USB_P_EP[num]) { if (val & EP_SETUP) { USB_P_EP[num](USB_EVT_SETUP); } else { USB_P_EP[num](USB_EVT_OUT); } } } if (val & EP_CTR_TX) { EPxREG(num) = val & ~EP_CTR_TX & EP_MASK; if (USB_P_EP[num]) { USB_P_EP[num](USB_EVT_IN); } } } }
int SystemIntoUDisk(unsigned int serviceloop) { extern flash *RHM_FlashPtr; //RHM , *FP_RHM_FlashPtr; int i; char strLog[60]; #ifdef USBRP int fl_size = USB_Flash_init((flash *)0, 0); flash FL; int flash_execution_buf[fl_size]; RHM_FlashPtr = &FL; if(vCur_1 < V_MIN_USB_VOLTAGE) { refuse_lowvoltage(0); return(2); } for(i=0; i<N_USB_LUN; i++) { FP_USB_Lun_Define[i] = &USB_Lun_Define[i]; if( USB_Lun_Define[i].unLunType == LunType_NOR) { USB_Lun_Define[i].rhmLunData = (unsigned long) RHM_FlashPtr; } } FL.flash_exe_buf = (void *) &flash_execution_buf[0]; USB_Flash_init(&FL, 1); #endif SysDisableWaitMode(3); SetSystemClockRate(48); if(serviceloop) { R_NAND_Present=0; MaxLUN = 0; R_SDC_Present=1; _deviceunmount(0); USB_TimeOut_Enable(); USB_Initial(); USB_Reset(); if(serviceloop == USB_CLIENT_SETUP_ONLY) { return(1); } } if(!serviceloop) { int tmp; long j; tmp = R_USB_State_Machine; for(j=0; j<100000; j++) { USB_ServiceLoop(0); if(R_USB_State_Machine > 0 && R_USB_State_Machine <= SCSI_CSW_Stage) { goto xxx; } else { KeyScan_ServiceLoop(); if (!(j % 0x40)) { context.keystroke = keyCheck(0); if (context.keystroke) break; } } } if (tmp == 0 && R_USB_State_Machine == 0) { SetSystemClockRate(CLOCK_RATE); _devicemount(0); return(2); } if(R_USB_State_Machine == 0xf5f5) { SetSystemClockRate(CLOCK_RATE); _devicemount(0); return(2); } if(!(R_USB_State_Machine > 0 && R_USB_State_Machine <= SCSI_CSW_Stage)) { SysEnableWaitMode(3); RHM_FlashPtr = 0; SetSystemClockRate(CLOCK_RATE); return 1; } } xxx: if (LED_GREEN) setLED(LED_GREEN,FALSE); else // for USB before reading config file, or if config corrupted setLED(0x040,FALSE); if (LED_RED) setLED(LED_RED,TRUE); else // for USB before reading config file, or if config corrupted setLED(0x200,TRUE); USB_ServiceLoop(1); *P_USBD_Config=0x00; *P_USBD_INTEN=0x00; if(1 == R_SDC_Present) { _devicemount(0); } SysEnableWaitMode( 3 ); RHM_FlashPtr = 0; strcpy(strLog, "returned from USB Device Mode"); logString(strLog, ASAP, LOG_NORMAL); if (LED_RED) setLED(LED_RED,FALSE); else // for USB before reading config file, or if config corrupted setLED(0x200,FALSE); SetSystemClockRate(CLOCK_RATE); return 0; }
int main(void) { uint8_t buf[HID_OUT_BUFFER_SIZE-1]; IRMP_DATA myIRData; int8_t ret; LED_Switch_init(); Systick_Init(); USB_Reset(); USB_HID_Init(); USB_DISC_release(); IRMP_Init(); irsnd_init(); FLASH_Unlock(); EE_Init(); irmp_set_callback_ptr (led_callback); while (1) { if (!AlarmValue) Wakeup(); if (!send_ir_on_delay) send_magic(); wakeup_reset(); /* test if USB is connected to PC, sendtransfer is complete and configuration command is received */ if (USB_HID_GetStatus() == CONFIGURED && PrevXferComplete && USB_HID_ReceiveData(buf) == RX_READY && buf[0] == STAT_CMD) { switch ((enum access) buf[1]) { case ACC_GET: ret = get_handler(buf); break; case ACC_SET: ret = set_handler(buf); break; case ACC_RESET: ret = reset_handler(buf); break; default: ret = -1; } if (ret == -1) { buf[0] = STAT_FAILURE; ret = 3; } else { buf[0] = STAT_SUCCESS; } /* send configuration data */ USB_HID_SendData(REPORT_ID_CONFIG, buf, ret); blink_LED(); if(Reboot) reboot(); } /* poll IR-data */ if (irmp_get_data(&myIRData)) { myIRData.flags = myIRData.flags & IRMP_FLAG_REPETITION; if (!(myIRData.flags)) { store_wakeup(&myIRData); check_macros(&myIRData); check_wakeups(&myIRData); check_resets(&myIRData); check_reboot(&myIRData); } /* send IR-data */ USB_HID_SendData(REPORT_ID_IR, (uint8_t *) &myIRData, sizeof(myIRData)); } } }
void CmtUsbDev::Init() { USB_Reset(); }
void CmtUsbDev::IrqHandler() { uint32 istr, num, val; istr = ISTR; /* USB Reset Request */ if (istr & ISTR_RESET) { USB_Reset(); ISTR = ~ISTR_RESET; } /* USB Suspend Request */ if (istr & ISTR_SUSP) { USB_Suspend(); ISTR = ~ISTR_SUSP; } /* USB Wakeup */ if (istr & ISTR_WKUP) { USB_WakeUp(); ISTR = ~ISTR_WKUP; } /* Start of Frame */ if (istr & ISTR_SOF) { USB_StartOfFrame(); ISTR = ~ISTR_SOF; } /* PMA Over/underrun */ if (istr & ISTR_PMAOVR) { USB_Error(1); ISTR = ~ISTR_PMAOVR; } /* Error: No Answer, CRC Error, Bit Stuff Error, Frame Format Error */ if (istr & ISTR_ERR) { USB_Error(0); ISTR = ~ISTR_ERR; } /* Endpoint Interrupts */ while( (istr = ISTR) & ISTR_CTR) { ISTR = ~ISTR_CTR; num = istr & ISTR_EP_ID; val = EPxREG(num); if (val & EP_CTR_RX) { EPxREG(num) = val & ~EP_CTR_RX & EP_MASK; switch( num ) { case 0 : EndPoint0( val & EP_SETUP ? USB_EVT_SETUP : USB_EVT_OUT ); break; case 1 : EndPoint1( USB_EVT_OUT ); break; case 2 : EndPoint2( USB_EVT_OUT ); break; case 3 : EndPoint3( USB_EVT_OUT ); break; case 4 : EndPoint4( USB_EVT_OUT ); break; case 5 : EndPoint5( USB_EVT_OUT ); break; case 6 : EndPoint6( USB_EVT_OUT ); break; case 7 : EndPoint7( USB_EVT_OUT ); break; case 8 : EndPoint8( USB_EVT_OUT ); break; case 9 : EndPoint9( USB_EVT_OUT ); break; case 10 : EndPoint10( USB_EVT_OUT ); break; case 11 : EndPoint11( USB_EVT_OUT ); break; case 12 : EndPoint12( USB_EVT_OUT ); break; case 13 : EndPoint13( USB_EVT_OUT ); break; case 14 : EndPoint14( USB_EVT_OUT ); break; case 15 : EndPoint15( USB_EVT_OUT ); break; } } if (val & EP_CTR_TX) { EPxREG(num) = val & ~EP_CTR_TX & EP_MASK; switch( num ) { case 0 : EndPoint0( USB_EVT_IN ); break; case 1 : EndPoint1( USB_EVT_IN ); break; case 2 : EndPoint2( USB_EVT_IN ); break; case 3 : EndPoint3( USB_EVT_IN ); break; case 4 : EndPoint4( USB_EVT_IN ); break; case 5 : EndPoint5( USB_EVT_IN ); break; case 6 : EndPoint6( USB_EVT_IN ); break; case 7 : EndPoint7( USB_EVT_IN ); break; case 8 : EndPoint8( USB_EVT_IN ); break; case 9 : EndPoint9( USB_EVT_IN ); break; case 10 : EndPoint10( USB_EVT_IN ); break; case 11 : EndPoint11( USB_EVT_IN ); break; case 12 : EndPoint12( USB_EVT_IN ); break; case 13 : EndPoint13( USB_EVT_IN ); break; case 14 : EndPoint14( USB_EVT_IN ); break; case 15 : EndPoint15( USB_EVT_IN ); break; } } } }