[tuxdroid-svn] r904 - in firmware/fuxusb/branches/0.3: . modules/usb
Status: Beta
Brought to you by:
ks156
From: Paul_R <c2m...@c2...> - 2008-02-08 10:12:16
|
Author: Paul_R Date: 2008-02-08 11:12:08 +0100 (Fri, 08 Feb 2008) New Revision: 904 Modified: firmware/fuxusb/branches/0.3/config.h firmware/fuxusb/branches/0.3/global.c firmware/fuxusb/branches/0.3/global.h firmware/fuxusb/branches/0.3/modules/usb/usb_task.c Log: * Improved the status and commands endpoints (CMD_IN_EP and CMD_OUT_EP). Modified: firmware/fuxusb/branches/0.3/config.h =================================================================== --- firmware/fuxusb/branches/0.3/config.h 2008-02-07 09:57:59 UTC (rev 903) +++ firmware/fuxusb/branches/0.3/config.h 2008-02-08 10:12:08 UTC (rev 904) @@ -30,6 +30,7 @@ //#define MAIN_DEBUG //#define USB_TASK_DEBUG //#define BOOTLOAD_DEBUG +//#define FIFO_DEBUG #define DEBUG_1 P3_6 #define DEBUG_2 P4_0 Modified: firmware/fuxusb/branches/0.3/global.c =================================================================== --- firmware/fuxusb/branches/0.3/global.c 2008-02-07 09:57:59 UTC (rev 903) +++ firmware/fuxusb/branches/0.3/global.c 2008-02-08 10:12:08 UTC (rev 904) @@ -39,7 +39,7 @@ bit usb_connected_Flag; bit CMD_OUT_usb_Bank; // To store the number of the Bank used for the CMD_OUT Endpoint -char CMD_IN_Bank_Nb; +unsigned char CMD_IN_Bank_Nb; bit USB_ParserProcess_Permit_Flag; bit USB_StatusProcess_Permit_Flag; Modified: firmware/fuxusb/branches/0.3/global.h =================================================================== --- firmware/fuxusb/branches/0.3/global.h 2008-02-07 09:57:59 UTC (rev 903) +++ firmware/fuxusb/branches/0.3/global.h 2008-02-08 10:12:08 UTC (rev 904) @@ -48,7 +48,7 @@ extern bit usb_connected_Flag; extern bit CMD_OUT_usb_Bank; // To store the number of the Bank used for the CMD_OUT Endpoint -extern char CMD_IN_Bank_Nb; +extern unsigned char CMD_IN_Bank_Nb; extern bit USB_ParserProcess_Permit_Flag; extern bit USB_StatusProcess_Permit_Flag; Modified: firmware/fuxusb/branches/0.3/modules/usb/usb_task.c =================================================================== --- firmware/fuxusb/branches/0.3/modules/usb/usb_task.c 2008-02-07 09:57:59 UTC (rev 903) +++ firmware/fuxusb/branches/0.3/modules/usb/usb_task.c 2008-02-08 10:12:08 UTC (rev 904) @@ -91,6 +91,12 @@ Configure_led(0,LED_PORT_10MA); Led_0_off(); + + Usb_select_ep(EP_CMD_IN); + UEPRST |= 0x10; + Usb_clear_tx_complete(); + Usb_clear_tx_ready(); + UEPRST &= ~0x10; ReadStatus_USBRequest_Flag = 0; @@ -125,51 +131,58 @@ *****************************************************************************/ void usb_Satus_command_process_task(void) { - data Uchar i; - - - - if((USB_Status_NewCmd_Flag)&&(USB_StatusProcess_Permit_Flag)&&(!(spi_master_config & RF_2FRAMES_HDR)) ) + + if((USB_Status_NewCmd_Flag) && (CMD_IN_Bank_Nb < 2)&&(!(spi_master_config & RF_2FRAMES_HDR)) && (USB_StatusProcess_Permit_Flag)) { + // + /* + * If the bank number == 2, that means that both banks has been filled. + */ + //if(CMD_IN_Bank_Nb < 2) + //{ +#ifdef FIFO_DEBUG +// printf("bank : %BX\n", CMD_IN_Bank_Nb); +#endif + /* + * Bank == 2 --> Bank 0 && Bank 1 full. + * So, we cant fill the fifo + */ + Usb_select_ep(EP_CMD_IN); + Usb_write_byte(0); + + if (RF_OFFLINE) + Usb_write_byte(0); + else + Usb_write_byte(1); - if(CMD_IN_Bank_Nb<2) - { - //Led_0_off(); - Usb_select_ep(EP_CMD_IN); - Usb_write_byte(0); - - if(RF_OFFLINE) - Usb_write_byte(0); - else - Usb_write_byte(1); - - Usb_write_byte(RF_Status); - - Usb_write_byte((FifoIn_STT_Idx/4)); - - //printf ("USB Request::Read Status from RF :: Sent\n"); + Usb_write_byte(RF_Status); + if (FifoIn_STT_Idx) + Usb_write_byte ((FifoIn_STT_Idx/4)); + else + Usb_write_byte (0); + - for(i=0;i<FifoIn_STT_Idx;i++) - Usb_write_byte(FIFO_STT_get()); - - if(FifoIn_STT_Idx!=60) - for(i=FifoIn_STT_Idx;i<60;i++) - Usb_write_byte(0); - - CMDIN_ToSend_Flag = 1; // Synchronize the Sending command With USB - ReadStatus_USBRequest_Flag = 0; - FIFO_STT_flush(); - RF_Status = 0; -// CMD_IN_Bank_Nb ++; - //Led_0_on(); - USB_Status_NewCmd_Flag = FALSE; - } - else + for(i=0;i<FifoIn_STT_Idx;i++) { - CMD_IN_Bank_Nb = 0; - FIFO_STT_flush(); + Usb_write_byte(FIFO_STT_get()); } + + //if(FifoIn_STT_Idx!=60) + //{ + for(i=FifoIn_STT_Idx;i<60;i++) + Usb_write_byte(i); + //} +#ifdef FIFO_DEBUG +// printf("sent : %BX\n", i); +#endif + CMDIN_ToSend_Flag = 1; // Synchronize the Sending command With USB + CMD_IN_Bank_Nb ++; // Increase the bank number + ReadStatus_USBRequest_Flag = 0; + FIFO_STT_flush(); + RF_Status = 0; + USB_Status_NewCmd_Flag = FALSE; + //} } } @@ -264,15 +277,6 @@ if (commands[i] == INFO_FUXUSB_CMD) // { - //Usb_select_ep(EP_CMD_IN); - FIFO_STT_put(0); - if(RF_OFFLINE) - FIFO_STT_put(0); - else - FIFO_STT_put(1); - FIFO_STT_put(RF_Status); - FIFO_STT_put((3)); - // VERSION_CMD //------------------------------------- FIFO_STT_put(info_version.version_cmd); @@ -293,11 +297,6 @@ FIFO_STT_put((info_author.author_id&0xFF00)>>8); FIFO_STT_put((info_author.author_id&0x00FF)); FIFO_STT_put(info_author.variation); - - - //CMDIN_ToSend_Flag = 1; // Synchronize the Sending command With USB - //ReadStatus_USBRequest_Flag = 0; - } i+=4; @@ -408,28 +407,23 @@ //-------------------------------------------------------------------------- if (Usb_sof()) { - Usb_clear_sof(); + Usb_clear_sof(); usb_sof_counter ++; // == 0xFF == 250ms - + /* + * If CMDIN_ToSend_Flag is set, that means that some data must be sent over USB + * So, the tx ready flag is set. + */ if ((CMDIN_ToSend_Flag == 1)) - { - if(CMD_IN_Bank_Nb<2) - { -#ifdef USB_TASK_DEBUG - printf ("SOF:: CMD_IN_Bank_Nb::%BX Usb_set_tx_ready \n",CMD_IN_Bank_Nb); - printf ("HIDCommand Sent \n"); -#endif + { Usb_select_ep(EP_CMD_IN); - Usb_set_tx_ready(); + if (!Usb_tx_ready()) + { + Usb_set_tx_ready(); + CMDIN_ToSend_Flag = 0; + } + } - CMDIN_ToSend_Flag = 0; - } -#ifdef USB_TASK_DEBUG - else - printf ("CMD_IN_Bank_Nb %B Full \n",CMD_IN_Bank_Nb); -#endif - } if(spi_watchdog_ctr) { @@ -496,8 +490,6 @@ } } } - - } //-------------------------------------------------------------------------- @@ -552,24 +544,31 @@ // -> Usb_clear_tx_complete() // -> CMDIN_ToSend_Flag = 0; // -> Authorize a new loading of the FIFO + // + // When the EP complete flag is set, if the other bank has been filled, the + // CMDIN_ToSend_Flag is set to indicate that the other bank can be sent. + // + // If the CMD_IN_Bank_Nb is equal to 0, no more data has to be sent. + // + // The TX ready flag is set on the SOF part. //-------------------------------------------------------------------------- if (Usb_test_it_ep(EP_CMD_IN)) { - Usb_select_ep(EP_CMD_IN); if(Usb_tx_complete()) { +#ifdef FIFO_DEBUG +// printf("TX complete\n"); +#endif Usb_clear_tx_complete(); - // printf ("LIBUSB EP:: clear_tx:: CMD_IN_Bank_Nb::%BX ",CMD_IN_Bank_Nb); - if (CMD_IN_Bank_Nb == 0) - CMD_IN_Bank_Nb = 1; - else - CMD_IN_Bank_Nb = 0; - //CMD_IN_Bank_Nb--; - //if (CMD_IN_Bank_Nb<0) CMD_IN_Bank_Nb = 0; - // printf ("Dec CMD_IN_Bank_Nb => %BX \n",CMD_IN_Bank_Nb); - // CMDIN_ToSend_Flag = 0; - //Led_1_off(); + CMD_IN_Bank_Nb --; + if (CMD_IN_Bank_Nb) + { +#ifdef FIFO_DEBUG +// printf("Other bank\n"); +#endif + CMDIN_ToSend_Flag = 1; + } } } @@ -674,9 +673,14 @@ // //-------------------------------------------------------------------------- if(USB_ParserProcess_Permit_Flag) + { if(Usb_test_it_ep(EP_CMD_OUT)) { +#ifdef FIFO_DEBUG +printf("CMD OUT\n"); +#endif + // printf ("if(Usb_test_it_ep(EP_CMD_OUT)) \n"); if(!USBCommand_NewRequest_Flag) /* XXX can lock in case the RF is not responding, check this for bootloader */ { @@ -699,7 +703,8 @@ if(USBCommand_Header == LIBUSB_TUX_CMD_HDR) { // printf (" LIBUSB_TUX_CMD_HDR \n"); - USBCommand_NewRequest_Flag = 1; // to inform SPI_task that a new command is arrived + if (!RF_OFFLINE) + USBCommand_NewRequest_Flag = 1; // to inform SPI_task that a new command is arrived for(i=0;i<(USBCommand_Ctr-1);i++) USBCommand_ForRF[i] = Usb_read_byte(); tux_command_parser(USBCommand_ForRF, USBCommand_Ctr); @@ -713,7 +718,9 @@ { for(i=0;i<(USBCommand_Ctr-1);i++) USBCommand_ForDongle[i] = Usb_read_byte(); - +#ifdef FIFO_DEBUG +printf("usb command parser\n"); +#endif usb_command_parser(); USBCommand_NewRequest_Flag = 0; /* re-enable USB to get the next value */ } @@ -818,7 +825,7 @@ } } } //if(Usb_endpoint_interrupt()) - + } } @@ -963,9 +970,12 @@ { if (USBCommand_NewRequest_Flag) // { + spi_slave_config = RF_CMD_HDR; // Config byte SPDAT = spi_slave_config; // Header byte -// printf ("CMD For RF \n"); +#ifdef FIFO_DEBUG + printf ("CMD For RF \n"); +#endif } else { @@ -1117,6 +1127,7 @@ } else // if RF_OFFLINE { +// USBCommand_NewRequest_Flag = 0; if (Cpu_reset) { Cpu_reset=0; @@ -1125,6 +1136,7 @@ while(tc) tc--; rf_reset_signal = 1; + } } } |