tux-droid-svn Mailing List for Tux Droid CE (Page 197)
Status: Beta
Brought to you by:
ks156
You can subscribe to this list here.
2007 |
Jan
|
Feb
(32) |
Mar
(108) |
Apr
(71) |
May
(38) |
Jun
(128) |
Jul
(1) |
Aug
(14) |
Sep
(77) |
Oct
(104) |
Nov
(90) |
Dec
(71) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2008 |
Jan
(81) |
Feb
(18) |
Mar
(40) |
Apr
(102) |
May
(151) |
Jun
(74) |
Jul
(151) |
Aug
(257) |
Sep
(447) |
Oct
(379) |
Nov
(404) |
Dec
(430) |
2009 |
Jan
(173) |
Feb
(236) |
Mar
(519) |
Apr
(300) |
May
(112) |
Jun
(232) |
Jul
(314) |
Aug
(58) |
Sep
(203) |
Oct
(293) |
Nov
(26) |
Dec
(109) |
2010 |
Jan
(19) |
Feb
(25) |
Mar
(33) |
Apr
(1) |
May
|
Jun
(3) |
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: Paul_R <c2m...@c2...> - 2008-05-06 06:44:58
|
Author: Paul_R Date: 2008-05-06 08:44:57 +0200 (Tue, 06 May 2008) New Revision: 1106 Added: firmware/fuxusb/branches/usb_cleanup/rf.c firmware/fuxusb/branches/usb_cleanup/rf.h Modified: firmware/fuxusb/branches/usb_cleanup/bootloader/bootloading.c firmware/fuxusb/branches/usb_cleanup/bootloader/bootloading.h firmware/fuxusb/branches/usb_cleanup/fuxusb.Uv2 firmware/fuxusb/branches/usb_cleanup/usb/usb_task.c firmware/fuxusb/branches/usb_cleanup/usb/usb_task.h Log: * Moved the bootloader functions into bootloading module * Created a module rf Modified: firmware/fuxusb/branches/usb_cleanup/bootloader/bootloading.c =================================================================== --- firmware/fuxusb/branches/usb_cleanup/bootloader/bootloading.c 2008-05-05 20:04:46 UTC (rev 1105) +++ firmware/fuxusb/branches/usb_cleanup/bootloader/bootloading.c 2008-05-06 06:44:57 UTC (rev 1106) @@ -5,9 +5,13 @@ * -------------------------------------------------------- * $Id$ */ - +#include "usb/usb_task.h" +#include "usb/usb_drv.h" +#include "modules/fifo_stt/fifo_stt.h" #include "bootloading.h" #include "config.h" +#include "global.h" +#include "rf.h" uint8_t Command_FromUSB_bootload_cmd; uint8_t cpu_address; @@ -16,6 +20,7 @@ uint8_t packets_per_page; uint8_t address_idx; uint8_t packet_idx; +uint16_t address_tracking; blHeader_t blHeader; /* header for bootloading */ @@ -59,3 +64,222 @@ #endif i2cMasterStart(); } + + +void usb_Bootloader_command_process_task(void) +{ + data Uchar i; + if((USB_Bootloader_NewCmd_Flag) && (CMD_IN_Bank_Nb < 2)) + { + Usb_select_ep(EP_CMD_IN); + +#ifdef BOOTLOAD_USB_DEBUG + printf ("BUSB: TX ready, UEPSTAX=0x%BX\n", UEPSTAX); +#endif + for(i=0;i<FifoIn_STT_Idx;i++) + { + Usb_write_byte(FIFO_STT_get()); + } + FIFO_STT_flush(); + CMD_IN_Bank_Nb ++; // Increase the bank number + USB_Bootloader_NewCmd_Flag = FALSE; + data_to_send(); + } +} + + + +void bootloader_exit(void) +{ + /* Restore normal mode and reset the RF. */ + i2c_bootloading_Flag = 0; + rf_reset(); +} + +/* + * Acknowledge or not a bootloader command. + * \param ack Send an ACK if ack is set, NACK otherwise + * \param p1, p2, p3: optional paramaters + */ +#define B_ACK 0 +#define B_NACK 1 +void usb_Bootloader_acknowledge(uint8_t ack, uint8_t p1, uint8_t p2, uint8_t p3) +{ +#ifdef BOOTLOAD_DEBUG + printf ("BOOT: %s\n", ack ? "ACK" : "NACK"); +#endif + FIFO_STT_flush(); + FIFO_STT_put(BOOTLOADER_CMD); + if (ack) + FIFO_STT_put(B_ACK); + else + FIFO_STT_put(B_NACK); + FIFO_STT_put(p1); + FIFO_STT_put(p2); + FIFO_STT_put(p3); + USB_Bootloader_NewCmd_Flag = TRUE; + usb_Bootloader_command_process_task(); +} + + +void bootloader_task(void) +{ + uint8_t i; + /* Request processed */ + USBCommand_NewRequest_Flag = 0; + /* Disables the spi task and enables I2C + * bootloading */ + spi_task_on_Flag = 0; + /* First byte after the header is the + * bootloading command */ + Command_FromUSB_bootload_cmd = Usb_read_byte(); + + /* Initialize bootloading */ + if (Command_FromUSB_bootload_cmd == BOOT_INIT) + { +#ifdef BOOTLOAD_DEBUG + printf ("BOOT: BOOT_INIT "); +#endif + /* Clear pending IN data */ + /* XXX the following reset doesn't work + * correctly, we couldn't fix it yet. It + * ensures that nothing is in the IN EP + * when starting bootloading. */ + //Usb_select_ep(EP_CMD_IN); + //Usb_clear_tx_ready(); + //Usb_clear_tx_complete(); + //CMD_IN_Bank_Nb = 0; + //usb_reset_endpoint(EP_CMD_IN); + //Usb_select_ep(EP_CMD_OUT); + /* Wait 250ms before first I2C + * communication for the RF to boot */ + i2c_wait_counter = 250; + /* Initialize the bootloader */ + bl_init(); + rf_start_bootloader(); + i2c_bootloading_Flag = 1; + + /* Get SLA (LSB=0 for write mode) */ + blHeader.slave_address = \ + (Usb_read_byte() << 1); + page_size = Usb_read_byte(); + packets_per_page = Usb_read_byte(); +#ifdef BOOTLOAD_DEBUG + printf ("SLA: %BX, page size: %BX, "\ + "packets per page: %BX\n", \ + blHeader.slave_address, page_size, \ + packets_per_page); +#endif + address_tracking = 0; + address_idx = 0; + packet_idx = 0; + } + + /* INIT not done, report error */ + else if (!i2c_bootloading_Flag) + usb_Bootloader_acknowledge(FALSE, 1, 0, 0); + + /* Exit bootloading */ + else if (Command_FromUSB_bootload_cmd == + BOOT_EXIT) + { +#ifdef BOOTLOAD_DEBUG + printf ("BOOT: BOOT_EXIT\n"); +#endif + bootloader_exit(); + usb_Bootloader_acknowledge(TRUE, 2, 0, 0); + } + + /* Get bootload data */ + else if (Command_FromUSB_bootload_cmd == + BOOT_FILLPAGE) + { +#ifdef BOOTLOAD_DEBUG + printf ("BOOT: BOOT_FILLPAGE %BX", \ + packet_idx); +#endif + /* Get the address on the first packet */ + if (packet_idx == 0) + { + blHeader.page_address = \ + Usb_read_byte() << 8; + blHeader.page_address += \ + Usb_read_byte(); + /* Check if address is correct and we + * got the right number of data. + * 0x1DC0 and 0x0EC0 are the last + * segments of the flash where the + * version number is, so it's possible + * to have a gap between the end of + * code and these addresses. EEPROM + * addresses start at 0x8000 so remove + * that bit too. */ + /* Workaround for the old tuxup that + * sent BOOT_FILLPAGE instead of + * BOOT_EXIT at the end of bootloading. + */ + if (USBCommand_Ctr == 5) + bootloader_exit(); + else if (((blHeader.page_address & ~0x8000) \ + != address_tracking && + blHeader.page_address != 0x1DC0 && + blHeader.page_address != 0x0EC0) || + USBCommand_Ctr != 36) + { + usb_Bootloader_acknowledge(FALSE, + 3, 0, 0); + bootloader_exit(); + } + +#ifdef BOOTLOAD_DEBUG + printf (" page_address: 0x%X", \ + blHeader.page_address); +#endif + for(i=0; i<(USBCommand_Ctr - 4); i++) + blHeader.blData[address_idx++] = \ + Usb_read_byte(); + } + /* Other packets hold data only */ + else + { + /* Check if we got the right number of + * data */ + if (USBCommand_Ctr != 34) + { + /* Exit bootloader mode */ + usb_Bootloader_acknowledge(FALSE, + 4, 0, 0); + bootloader_exit(); + } + + for(i=0; i<(USBCommand_Ctr - 2); i++) + blHeader.blData[address_idx++] = \ + Usb_read_byte(); + } +#ifdef BOOTLOAD_DEBUG + printf ("\n"); +#endif + packet_idx++; + } + /* All data received */ + if ((packet_idx == packets_per_page) && \ + (address_idx == page_size)) + { + address_tracking += page_size; + address_idx = 0; + packet_idx = 0; + /* Execute I2C bootloading */ + i2c_task_on_Flag = 1; + } + else if (packet_idx >= packets_per_page) + { +#ifdef BOOTLOAD_DEBUG + printf ("\nBOOT: ERROR too much data\n"); +#endif + /* Exit bootloader mode */ + usb_Bootloader_acknowledge(FALSE, 5, 0, 0); + bootloader_exit(); + } + /* Request processed */ + USBCommand_NewRequest_Flag = 0; +} Modified: firmware/fuxusb/branches/usb_cleanup/bootloader/bootloading.h =================================================================== --- firmware/fuxusb/branches/usb_cleanup/bootloader/bootloading.h 2008-05-05 20:04:46 UTC (rev 1105) +++ firmware/fuxusb/branches/usb_cleanup/bootloader/bootloading.h 2008-05-06 06:44:57 UTC (rev 1106) @@ -2,7 +2,7 @@ * Copyright (c) 2006, C2ME S.A. * All rights reserved. * - * $Id:$ + * $Id$ */ #ifndef _BOOTLOADING_H_ @@ -41,8 +41,9 @@ */ void bl_init(void); - +void bootloader_task(void); void bl_senddata(blHeader_t blHeader, uint8_t dataLength); +void usb_Bootloader_command_process_task(void); extern uint8_t Command_FromUSB_bootload_cmd; extern uint8_t cpu_address; Modified: firmware/fuxusb/branches/usb_cleanup/fuxusb.Uv2 =================================================================== --- firmware/fuxusb/branches/usb_cleanup/fuxusb.Uv2 2008-05-05 20:04:46 UTC (rev 1105) +++ firmware/fuxusb/branches/usb_cleanup/fuxusb.Uv2 2008-05-06 06:44:57 UTC (rev 1106) @@ -13,6 +13,7 @@ File 1,1,<.\main.c><main.c> 0x0 File 1,1,<.\global.c><global.c> 0x0 +File 1,1,<.\rf.c><rf.c> 0x0 File 2,1,<.\usb\usb_task.c><usb_task.c> 0x0 File 2,1,<.\usb\usb_enum.c><usb_enum.c> 0x0 File 2,1,<.\usb\usb_drv.c><usb_drv.c> 0x0 @@ -53,7 +54,7 @@ EnvLib () EnvReg () OrgReg () - TgStat=0 + TgStat=11 OutDir (.\obj\) OutName (fuxusb.aof) GenApp=1 Added: firmware/fuxusb/branches/usb_cleanup/rf.c =================================================================== --- firmware/fuxusb/branches/usb_cleanup/rf.c (rev 0) +++ firmware/fuxusb/branches/usb_cleanup/rf.c 2008-05-06 06:44:57 UTC (rev 1106) @@ -0,0 +1,31 @@ +#include "config.h" +#include "global.h" +#include "spi/spi_lib.h" +#include "rf.h" + +/** + * Restart the RF in bootloader mode + */ +void rf_start_bootloader(void) +{ + uint16_t i; + /* Reset the RF module to set it in bootloader mode, SPI_CS has to be low + * at reset to enter bootloading in the RF module. */ + SPI_CSn = 0; + rf_reset_signal = 0; + for (i=0; i<32000; i++); + rf_reset_signal = 1; +} + +/** + * Reset the RF in normal mode + */ +void rf_reset(void) +{ + uint16_t i; + /* Don't forget to set SPI_CSn otherwise bootlodar mode is entered. */ + SPI_CSn = 1; + rf_reset_signal = 0; + for (i=0; i<32000; i++); + rf_reset_signal = 1; +} Property changes on: firmware/fuxusb/branches/usb_cleanup/rf.c ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:keywords + Id Name: svn:eol-style + native Added: firmware/fuxusb/branches/usb_cleanup/rf.h =================================================================== --- firmware/fuxusb/branches/usb_cleanup/rf.h (rev 0) +++ firmware/fuxusb/branches/usb_cleanup/rf.h 2008-05-06 06:44:57 UTC (rev 1106) @@ -0,0 +1,2 @@ +void rf_reset(void); +void rf_start_bootloader(void); Property changes on: firmware/fuxusb/branches/usb_cleanup/rf.h ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:keywords + Id Name: svn:eol-style + native Modified: firmware/fuxusb/branches/usb_cleanup/usb/usb_task.c =================================================================== --- firmware/fuxusb/branches/usb_cleanup/usb/usb_task.c 2008-05-05 20:04:46 UTC (rev 1105) +++ firmware/fuxusb/branches/usb_cleanup/usb/usb_task.c 2008-05-06 06:44:57 UTC (rev 1106) @@ -12,7 +12,7 @@ #include "config.h" #include "global.h" - +#include "rf.h" #include "spi\spi_lib.h" #include "usb\usb_drv.h" #include "lib_mcu\fa-usb\flash_api.h" @@ -42,8 +42,8 @@ #endif bit EP_AUDIOIN_Loaded = 0; bit i2c_bootloading_Flag = 0; /* bootloader mode */ -uint16_t address_tracking; + bit ReadStatus_USBRequest_Flag = 0; bit Cpu_reset = 0; bit Speaker_TTS_Select_Flag = 0; @@ -112,32 +112,7 @@ USB_Bootloader_NewCmd_Flag = FALSE; } -/** - * Restart the RF in bootloader mode - */ -void rf_start_bootloader(void) -{ - uint16_t i; - /* Reset the RF module to set it in bootloader mode, SPI_CS has to be low - * at reset to enter bootloading in the RF module. */ - SPI_CSn = 0; - rf_reset_signal = 0; - for (i=0; i<32000; i++); - rf_reset_signal = 1; -} -/** - * Reset the RF in normal mode - */ -void rf_reset(void) -{ - uint16_t i; - /* Don't forget to set SPI_CSn otherwise bootlodar mode is entered. */ - SPI_CSn = 1; - rf_reset_signal = 0; - for (i=0; i<32000; i++); - rf_reset_signal = 1; -} /*F************************************************************************** * NAME: usb_command_parser @@ -202,26 +177,7 @@ } } -void usb_Bootloader_command_process_task(void) -{ - data Uchar i; - if((USB_Bootloader_NewCmd_Flag) && (CMD_IN_Bank_Nb < 2)) - { - Usb_select_ep(EP_CMD_IN); -#ifdef BOOTLOAD_USB_DEBUG - printf ("BUSB: TX ready, UEPSTAX=0x%BX\n", UEPSTAX); -#endif - for(i=0;i<FifoIn_STT_Idx;i++) - { - Usb_write_byte(FIFO_STT_get()); - } - FIFO_STT_flush(); - CMD_IN_Bank_Nb ++; // Increase the bank number - USB_Bootloader_NewCmd_Flag = FALSE; - data_to_send(); - } -} void data_to_send(void) { @@ -233,37 +189,7 @@ } } -/* - * Acknowledge or not a bootloader command. - * \param ack Send an ACK if ack is set, NACK otherwise - * \param p1, p2, p3: optional paramaters - */ -#define B_ACK 0 -#define B_NACK 1 -void usb_Bootloader_acknowledge(uint8_t ack, uint8_t p1, uint8_t p2, uint8_t p3) -{ -#ifdef BOOTLOAD_DEBUG - printf ("BOOT: %s\n", ack ? "ACK" : "NACK"); -#endif - FIFO_STT_flush(); - FIFO_STT_put(BOOTLOADER_CMD); - if (ack) - FIFO_STT_put(B_ACK); - else - FIFO_STT_put(B_NACK); - FIFO_STT_put(p1); - FIFO_STT_put(p2); - FIFO_STT_put(p3); - USB_Bootloader_NewCmd_Flag = TRUE; - usb_Bootloader_command_process_task(); -} -void bootloader_exit(void) -{ - /* Restore normal mode and reset the RF. */ - i2c_bootloading_Flag = 0; - rf_reset(); -} /*F************************************************************************** * NAME: usb_command_parser @@ -775,164 +701,9 @@ else if(USBCommand_Header == LIBUSB_BOOTLOADER_CMD_HDR) { - /* Request processed */ - USBCommand_NewRequest_Flag = 0; - /* Disables the spi task and enables I2C - * bootloading */ - spi_task_on_Flag = 0; - /* First byte after the header is the - * bootloading command */ - Command_FromUSB_bootload_cmd = Usb_read_byte(); - - /* Initialize bootloading */ - if (Command_FromUSB_bootload_cmd == BOOT_INIT) - { -#ifdef BOOTLOAD_DEBUG - printf ("BOOT: BOOT_INIT "); -#endif - /* Clear pending IN data */ - /* XXX the following reset doesn't work - * correctly, we couldn't fix it yet. It - * ensures that nothing is in the IN EP - * when starting bootloading. */ - //Usb_select_ep(EP_CMD_IN); - //Usb_clear_tx_ready(); - //Usb_clear_tx_complete(); - //CMD_IN_Bank_Nb = 0; - //usb_reset_endpoint(EP_CMD_IN); - //Usb_select_ep(EP_CMD_OUT); - /* Wait 250ms before first I2C - * communication for the RF to boot */ - i2c_wait_counter = 250; - /* Initialize the bootloader */ - bl_init(); - rf_start_bootloader(); - i2c_bootloading_Flag = 1; - - /* Get SLA (LSB=0 for write mode) */ - blHeader.slave_address = \ - (Usb_read_byte() << 1); - page_size = Usb_read_byte(); - packets_per_page = Usb_read_byte(); -#ifdef BOOTLOAD_DEBUG - printf ("SLA: %BX, page size: %BX, "\ - "packets per page: %BX\n", \ - blHeader.slave_address, page_size, \ - packets_per_page); -#endif - address_tracking = 0; - address_idx = 0; - packet_idx = 0; - } - - /* INIT not done, report error */ - else if (!i2c_bootloading_Flag) - usb_Bootloader_acknowledge(FALSE, 1, 0, 0); - - /* Exit bootloading */ - else if (Command_FromUSB_bootload_cmd == - BOOT_EXIT) - { -#ifdef BOOTLOAD_DEBUG - printf ("BOOT: BOOT_EXIT\n"); -#endif - bootloader_exit(); - usb_Bootloader_acknowledge(TRUE, 2, 0, 0); - } - - /* Get bootload data */ - else if (Command_FromUSB_bootload_cmd == - BOOT_FILLPAGE) - { -#ifdef BOOTLOAD_DEBUG - printf ("BOOT: BOOT_FILLPAGE %BX", \ - packet_idx); -#endif - /* Get the address on the first packet */ - if (packet_idx == 0) - { - blHeader.page_address = \ - Usb_read_byte() << 8; - blHeader.page_address += \ - Usb_read_byte(); - /* Check if address is correct and we - * got the right number of data. - * 0x1DC0 and 0x0EC0 are the last - * segments of the flash where the - * version number is, so it's possible - * to have a gap between the end of - * code and these addresses. EEPROM - * addresses start at 0x8000 so remove - * that bit too. */ - /* Workaround for the old tuxup that - * sent BOOT_FILLPAGE instead of - * BOOT_EXIT at the end of bootloading. - */ - if (USBCommand_Ctr == 5) - bootloader_exit(); - else if (((blHeader.page_address & ~0x8000) \ - != address_tracking && - blHeader.page_address != 0x1DC0 && - blHeader.page_address != 0x0EC0) || - USBCommand_Ctr != 36) - { - usb_Bootloader_acknowledge(FALSE, - 3, 0, 0); - bootloader_exit(); - } - -#ifdef BOOTLOAD_DEBUG - printf (" page_address: 0x%X", \ - blHeader.page_address); -#endif - for(i=0; i<(USBCommand_Ctr - 4); i++) - blHeader.blData[address_idx++] = \ - Usb_read_byte(); - } - /* Other packets hold data only */ - else - { - /* Check if we got the right number of - * data */ - if (USBCommand_Ctr != 34) - { - /* Exit bootloader mode */ - usb_Bootloader_acknowledge(FALSE, - 4, 0, 0); - bootloader_exit(); - } - - for(i=0; i<(USBCommand_Ctr - 2); i++) - blHeader.blData[address_idx++] = \ - Usb_read_byte(); - } -#ifdef BOOTLOAD_DEBUG - printf ("\n"); -#endif - packet_idx++; - } - /* All data received */ - if ((packet_idx == packets_per_page) && \ - (address_idx == page_size)) - { - address_tracking += page_size; - address_idx = 0; - packet_idx = 0; - /* Execute I2C bootloading */ - i2c_task_on_Flag = 1; - } - else if (packet_idx >= packets_per_page) - { -#ifdef BOOTLOAD_DEBUG - printf ("\nBOOT: ERROR too much data\n"); -#endif - /* Exit bootloader mode */ - usb_Bootloader_acknowledge(FALSE, 5, 0, 0); - bootloader_exit(); - } - /* Request processed */ - USBCommand_NewRequest_Flag = 0; + bootloader_task(); } + /* Clear the bank */ Usb_select_ep(EP_CMD_OUT); Modified: firmware/fuxusb/branches/usb_cleanup/usb/usb_task.h =================================================================== --- firmware/fuxusb/branches/usb_cleanup/usb/usb_task.h 2008-05-05 20:04:46 UTC (rev 1105) +++ firmware/fuxusb/branches/usb_cleanup/usb/usb_task.h 2008-05-06 06:44:57 UTC (rev 1106) @@ -10,7 +10,7 @@ #ifndef _USB_TASK_H_ #define _USB_TASK_H_ - +#include "config.h" /*_____ I N C L U D E S ____________________________________________________*/ @@ -25,9 +25,12 @@ /*_____ D E C L A R A T I O N ______________________________________________*/ extern bit Cpu_reset; +extern bit i2c_bootloading_Flag; +void data_to_send(void); void usb_task_init (void); void usb_task (void); void usb_Satus_command_process_task(void); +void usb_Bootloader_acknowledge(uint8_t ack, uint8_t p1, uint8_t p2, uint8_t p3); #endif /* _USB_TASK_H_ */ |
From: eFfeM <c2m...@c2...> - 2008-05-05 20:04:44
|
Author: eFfeM Date: 2008-05-05 22:04:46 +0200 (Mon, 05 May 2008) New Revision: 1105 Modified: software_suite_v2/middleware/tuxdriver/trunk/src/tux_cmd_parser.c software_suite_v2/middleware/tuxdriver/trunk/src/tux_types.h Log: finished rewriting the parser; still need to add execute function; (then test; then remove old code). The current code is still fully operational (but has one warning) Modified: software_suite_v2/middleware/tuxdriver/trunk/src/tux_cmd_parser.c =================================================================== --- software_suite_v2/middleware/tuxdriver/trunk/src/tux_cmd_parser.c 2008-05-05 19:56:40 UTC (rev 1104) +++ software_suite_v2/middleware/tuxdriver/trunk/src/tux_cmd_parser.c 2008-05-05 20:04:46 UTC (rev 1105) @@ -201,6 +201,45 @@ /** * */ +static bool +str_to_state_t(const char *conststr, state_t *state) +{ + if (!strcmp(conststr, "UNDEFINED")) + { + *state = UNDEFINED; + return true; + } + if (!strcmp(conststr, "OPEN")) + { + *state = OPENED; + return true; + } + if (!strcmp(conststr, "UP")) + { + return 1; + *state = OPENED; + } + if (!strcmp(conststr, "CLOSE")) + { + *state = CLOSED; + return true; + } + if (!strcmp(conststr, "DOWN")) + { + *state = CLOSED; + return true; + } + if (!strcmp(conststr, "STOP")) + { + *state = STOP; + return true; + } + return false; +} + +/** + * + */ static unsigned char conststr_to_ledval(const char *conststr) { @@ -226,6 +265,35 @@ /** * */ +static bool +str_to_leds_t(const char *conststr, leds_t *leds) +{ + if (!strcmp(conststr, "LED_NONE")) + { + *leds = LED_NONE; + return true; + } + if (!strcmp(conststr, "LED_LEFT")) + { + *leds = LED_LEFT; + return true; + } + if (!strcmp(conststr, "LED_RIGHT")) + { + *leds = LED_RIGHT; + return true; + } + if (!strcmp(conststr, "LED_BOTH")) + { + *leds = LED_BOTH; + return true; + } + return false; +} + +/** + * + */ static unsigned char conststr_to_effectval(const char *conststr) { @@ -268,6 +336,55 @@ * */ static bool +str_to_effect_type(const char *conststr, effect_type_t *effect_type) +{ + if (!strcmp(conststr, "UNAFFECTED")) + { + *effect_type = UNAFFECTED; + return true; + } + if (!strcmp(conststr, "LAST")) + { + *effect_type = LAST; + return true; + } + if (!strcmp(conststr, "NONE")) + { + *effect_type = NONE; + return true; + } + if (!strcmp(conststr, "DEFAULT")) + { + *effect_type = DEFAULT; + return true; + } + if (!strcmp(conststr, "FADE_DURATION")) + { + *effect_type = FADE_DURATION; + return true; + } + if (!strcmp(conststr, "FADE_RATE")) + { + *effect_type = FADE_RATE; + return true; + } + if (!strcmp(conststr, "GRADIENT_NBR")) + { + *effect_type = GRADIENT_NBR; + return true; + } + if (!strcmp(conststr, "GRADIENT_DELTA")) + { + *effect_type = GRADIENT_DELTA; + return true; + } + return false; +} + +/** + * + */ +static bool tux_cmd_parser_parse_raw_cmd(tokens_t tokens, int nr_tokens) { raw_frame data = {0, 0, 0, 0}; @@ -779,12 +896,11 @@ executed directly todo: -define data structure for parameters -write data to parameters -some functions do not have a check for correctness -(reading effect_type and final_state); add execute function +enter cmd in queue +retrieve cmd and execute it remove old code (cmd param in struct, old parsing code etc) +test! */ @@ -808,10 +924,8 @@ } else if (strcmp(tokens[2], "MUTE") == 0) { - bool value; - cmd->sub_command = MUTE; - if (str_to_bool(tokens[3], &value)) + if (str_to_bool(tokens[3], &cmd->audio_parameters.muteflag)) { // write to struct ret = E_TUXDRV_NOERROR; @@ -840,29 +954,19 @@ } else if (strcmp(tokens[2], "ON") == 0) { - unsigned char counter; - cmd->sub_command = ON; - if (str_to_uint8(tokens[3], &counter)) + if (str_to_uint8(tokens[3], &cmd->eyes_parameters.nr_movements) && + str_to_state_t(tokens[4], &cmd->eyes_parameters.state)) { - unsigned char final_state; - - final_state = tux_movement_conststr_to_val(tokens[4]); - // write to struct ret = E_TUXDRV_NOERROR; } } else if (strcmp(tokens[2], "ON_DURING") == 0) { - float timeout = 0; - cmd->sub_command = ON_DURING; - if (str_to_float(tokens[3], &timeout)) + if (str_to_float(tokens[3], &cmd->eyes_parameters.duration) && + str_to_state_t(tokens[4], &cmd->eyes_parameters.state)) { - unsigned char final_state; - - final_state = tux_movement_conststr_to_val(tokens[4]); - // write to struct ret = E_TUXDRV_NOERROR; } } @@ -895,12 +999,8 @@ else if (strcmp(tokens[2], "SEND") == 0) { cmd->sub_command = SEND; - unsigned char address; - unsigned char command; - - // write to struct - if (str_to_uint8(tokens[3], &address) && - str_to_uint8(tokens[4], &command)) + if (str_to_uint8(tokens[3], &cmd->ir_parameters.address) && + str_to_uint8(tokens[4], &cmd->ir_parameters.command)) { ret = E_TUXDRV_NOERROR; } @@ -916,68 +1016,52 @@ parse_tux_led_command(tokens_t tokens, delay_cmd_t *cmd) { TuxDrvError ret = E_TUXDRV_INVALIDCOMMAND; - leds_t leds; - leds = conststr_to_ledval(tokens[3]); // check if ok - - if (strcmp(tokens[2], "BLINK") == 0) + if (str_to_leds_t(tokens[3], &cmd->led_parameters.leds)) { - unsigned char pulse_count; - float pulse_period; - - cmd->sub_command = BLINK; - if (str_to_uint8(tokens[4], &pulse_count) && - str_to_float(tokens[5], &pulse_period)) + if (strcmp(tokens[2], "BLINK") == 0) { - ret = E_TUXDRV_NOERROR; + cmd->sub_command = BLINK; + if (str_to_uint8(tokens[4], &cmd->led_parameters.nr_blinks) && + str_to_float(tokens[5], &cmd->led_parameters.duration)) + { + ret = E_TUXDRV_NOERROR; + } } - } - else if (strcmp(tokens[2], "OFF") == 0) - { - cmd->sub_command = OFF; - ret = E_TUXDRV_NOERROR; - } - else if (strcmp(tokens[2], "ON") == 0) - { - cmd->sub_command = ON; - ret = E_TUXDRV_NOERROR; - } - else if (strcmp(tokens[2], "PULSE") == 0) - { - float min_intensity; - float max_intensity; - unsigned char pulse_count; - float pulse_period; - unsigned char effect_type; - float effect_speed; - unsigned char effect_step; - - cmd->sub_command = PULSE; - effect_type = conststr_to_effectval(tokens[8]); - if (str_to_float(tokens[4], &min_intensity) && - str_to_float(tokens[5], &max_intensity) && - str_to_uint8(tokens[6], &pulse_count) && - str_to_float(tokens[7], &pulse_period) && - str_to_float(tokens[9], &effect_speed) && - str_to_uint8(tokens[10], &effect_step)) + else if (strcmp(tokens[2], "OFF") == 0) { + cmd->sub_command = OFF; ret = E_TUXDRV_NOERROR; } - } - else if (strcmp(tokens[2], "SET") == 0) - { - float intensity; - unsigned char effect_type; - float effect_speed; - unsigned char effect_step; - - cmd->sub_command = SET; - effect_type = conststr_to_effectval(tokens[5]); - if (str_to_float(tokens[4], &intensity) && - str_to_float(tokens[6], &effect_speed) && - str_to_uint8(tokens[7], &effect_step)) + else if (strcmp(tokens[2], "ON") == 0) { + cmd->sub_command = ON; ret = E_TUXDRV_NOERROR; } + else if (strcmp(tokens[2], "PULSE") == 0) + { + cmd->sub_command = PULSE; + if (str_to_float(tokens[4], &cmd->led_parameters.min_intensity) && + str_to_float(tokens[5], &cmd->led_parameters.max_intensity) && + str_to_uint8(tokens[6], &cmd->led_parameters.pulse_count) && + str_to_float(tokens[7], &cmd->led_parameters.pulse_period) && + str_to_effect_type(tokens[8], &cmd->led_parameters.effect_type) && + str_to_float(tokens[9], &cmd->led_parameters.effect_speed) && + str_to_uint8(tokens[10], &cmd->led_parameters.effect_step)) + { + ret = E_TUXDRV_NOERROR; + } + } + else if (strcmp(tokens[2], "SET") == 0) + { + cmd->sub_command = SET; + if (str_to_float(tokens[4], &cmd->led_parameters.intensity) && + str_to_effect_type(tokens[5], &cmd->led_parameters.effect_type) && + str_to_float(tokens[6], &cmd->led_parameters.effect_speed) && + str_to_uint8(tokens[7], &cmd->led_parameters.effect_step)) + { + ret = E_TUXDRV_NOERROR; + } + } } return ret; } @@ -1002,29 +1086,19 @@ } else if (strcmp(tokens[2], "ON") == 0) { - unsigned char counter; - cmd->sub_command = ON; - if (str_to_uint8(tokens[3], &counter)) + if (str_to_uint8(tokens[3], &cmd->mouth_parameters.nr_movements) && + str_to_state_t(tokens[4], &cmd->mouth_parameters.state)) { - unsigned char final_state; - - final_state = tux_movement_conststr_to_val(tokens[4]); - // write to struct ret = E_TUXDRV_NOERROR; } } else if (strcmp(tokens[2], "ON_DURING") == 0) { - float timeout = 0; - cmd->sub_command = ON_DURING; - if (str_to_float(tokens[3], &timeout)) + if (str_to_float(tokens[3], &cmd->mouth_parameters.duration) && + str_to_state_t(tokens[4], &cmd->mouth_parameters.state)) { - unsigned char final_state; - - final_state = tux_movement_conststr_to_val(tokens[4]); - // write to struct ret = E_TUXDRV_NOERROR; } } @@ -1046,12 +1120,9 @@ if (strcmp(tokens[2], "PLAY") == 0) { - unsigned char track_num = 1; - float volume = 0; - cmd->sub_command = PLAY; - if (str_to_uint8(tokens[3], &track_num) && - str_to_float(tokens[4], &volume)) + if (str_to_uint8(tokens[3], &cmd->sound_flash_parameters.track) && + str_to_float(tokens[4], &cmd->sound_flash_parameters.volume)) { ret = E_TUXDRV_NOERROR; } @@ -1069,40 +1140,32 @@ if (strcmp(tokens[2], "LEFT_ON") == 0) { - unsigned char speed; - cmd->sub_command = LEFT_ON; - if (str_to_uint8(tokens[3], &speed)) + if (str_to_uint8(tokens[3], &cmd->spinning_parameters.nr_qturns)) { ret = E_TUXDRV_NOERROR; } } else if (strcmp(tokens[2], "LEFT_ON_DURING") == 0) { - float timeout; - cmd->sub_command = LEFT_ON_DURING; - if (str_to_float(tokens[3], &timeout)) + if (str_to_float(tokens[3], &cmd->spinning_parameters.duration)) { ret = E_TUXDRV_NOERROR; } } else if (strcmp(tokens[2], "RIGHT_ON") == 0) { - unsigned char speed; - cmd->sub_command = RIGHT_ON; - if (str_to_uint8(tokens[3], &speed)) + if (str_to_uint8(tokens[3], &cmd->spinning_parameters.nr_qturns)) { ret = E_TUXDRV_NOERROR; } } else if (strcmp(tokens[2], "RIGHT_ON_DURING") == 0) { - float timeout; - cmd->sub_command = RIGHT_ON_DURING; - if (str_to_float(tokens[3], &timeout)) + if (str_to_float(tokens[3], &cmd->spinning_parameters.duration)) { ret = E_TUXDRV_NOERROR; } @@ -1114,10 +1177,8 @@ } else if (strcmp(tokens[2], "SPEED") == 0) { - unsigned char speed; - cmd->sub_command = SPEED; - if (str_to_uint8(tokens[3], &speed)) + if (str_to_uint8(tokens[3], &cmd->spinning_parameters.speed)) { ret = E_TUXDRV_NOERROR; } @@ -1145,29 +1206,19 @@ } else if (strcmp(tokens[2], "ON") == 0) { - unsigned char counter; - cmd->sub_command = ON; - if (str_to_uint8(tokens[3], &counter)) + if (str_to_uint8(tokens[3], &cmd->wings_parameters.nr_movements) && + str_to_state_t(tokens[4], &cmd->wings_parameters.state)) { - unsigned char final_state; - - final_state = tux_movement_conststr_to_val(tokens[4]); - // write to struct ret = E_TUXDRV_NOERROR; } } else if (strcmp(tokens[2], "ON_DURING") == 0) { - float timeout = 0; - cmd->sub_command = ON_DURING; - if (str_to_float(tokens[3], &timeout)) + if (str_to_float(tokens[3], &cmd->wings_parameters.duration) && + str_to_state_t(tokens[4], &cmd->wings_parameters.state)) { - unsigned char final_state; - - final_state = tux_movement_conststr_to_val(tokens[4]); - // write to struct ret = E_TUXDRV_NOERROR; } cmd->sub_command = ON_DURING; @@ -1180,10 +1231,8 @@ } else if (strcmp(tokens[2], "SPEED") == 0) { - unsigned char speed; - cmd->sub_command = SPEED; - if (str_to_uint8(tokens[3], &speed)) + if (str_to_uint8(tokens[3], &cmd->wings_parameters.speed)) { ret = E_TUXDRV_NOERROR; } @@ -1249,11 +1298,21 @@ parse_raw_command(tokens_t tokens, delay_cmd_t *cmd) { TuxDrvError ret = E_TUXDRV_INVALIDCOMMAND; + int r = 0; + int i; - /* - tokens [1] to tokens[6] should be hex - */ - ret = E_TUXDRV_NOERROR; + for (i = 0; i < TUX_SEND_LENGTH; i++) + { + if (hex_to_uint8(tokens[i], &cmd->raw_parameters.raw[i])) + { + r++; + } + } + + if (r == TUX_SEND_LENGTH) + { + ret = E_TUXDRV_NOERROR; + } return ret; } Modified: software_suite_v2/middleware/tuxdriver/trunk/src/tux_types.h =================================================================== --- software_suite_v2/middleware/tuxdriver/trunk/src/tux_types.h 2008-05-05 19:56:40 UTC (rev 1104) +++ software_suite_v2/middleware/tuxdriver/trunk/src/tux_types.h 2008-05-05 20:04:46 UTC (rev 1105) @@ -68,9 +68,10 @@ } tux_sub_command_t; typedef enum { + UNDEFINED, CLOSED, - NDEF, - OPENED + OPENED, + STOP } state_t; typedef struct { @@ -97,7 +98,7 @@ float max_intensity; unsigned char pulse_count; float pulse_period; - // effect type + effect_type_t effect_type; float effect_speed; unsigned char effect_step; } led_parameters_t; @@ -105,6 +106,7 @@ typedef struct { unsigned char nr_movements; state_t state; + float duration; } mouth_parameters_t; typedef struct { @@ -121,6 +123,8 @@ typedef struct { unsigned char nr_movements; state_t state; + float duration; + unsigned char speed; } wings_parameters_t; typedef struct { @@ -146,7 +150,7 @@ spinning_parameters_t spinning_parameters; wings_parameters_t wings_parameters; raw_parameters_t raw_parameters; - } parameters; + }; char cmd[CMDSIZE]; } delay_cmd_t; |
From: eFfeM <c2m...@c2...> - 2008-05-05 19:56:50
|
Author: eFfeM Date: 2008-05-05 21:56:40 +0200 (Mon, 05 May 2008) New Revision: 1104 Modified: software_suite_v2/middleware/tuxdriver/trunk/src/tux_leds.h Log: turned effect_type_t into a type (was a plain enum) Modified: software_suite_v2/middleware/tuxdriver/trunk/src/tux_leds.h =================================================================== --- software_suite_v2/middleware/tuxdriver/trunk/src/tux_leds.h 2008-05-05 12:23:15 UTC (rev 1103) +++ software_suite_v2/middleware/tuxdriver/trunk/src/tux_leds.h 2008-05-05 19:56:40 UTC (rev 1104) @@ -42,7 +42,7 @@ } leds_t; /** Types of effects applied when changing the intensity of the LEDs. */ -enum effect_type_t +typedef enum { UNAFFECTED, /**< Don't update the effect parameters. This can either be the last effect set by software, or by firmware in the @@ -67,7 +67,7 @@ GRADIENT_DELTA, /**< Gradient effect, the intensity changes by a delta value of 'effect.step'. 'effect.speed' represents the number of seconds it should take to apply the effect. */ -}; +} effect_type_t; /** Fading or gradient effect. This structure holds the type of effect and the * corresponding parameters. @@ -75,7 +75,7 @@ * effect_type_t. */ typedef struct { - enum effect_type_t type; /**< Type of effect. */ + effect_type_t type; /**< Type of effect. */ float speed; /**< Speed of the effect, used in both gradients and fading effects. */ int step; /**< Intensity step of the gradient effect. Not |
From: Paul_R <c2m...@c2...> - 2008-05-05 12:23:11
|
Author: Paul_R Date: 2008-05-05 14:23:15 +0200 (Mon, 05 May 2008) New Revision: 1103 Modified: firmware/fuxusb/branches/usb_cleanup/fuxusb.Uv2 Log: * Minor reorganisation of the project Modified: firmware/fuxusb/branches/usb_cleanup/fuxusb.Uv2 =================================================================== --- firmware/fuxusb/branches/usb_cleanup/fuxusb.Uv2 2008-05-05 12:20:45 UTC (rev 1102) +++ firmware/fuxusb/branches/usb_cleanup/fuxusb.Uv2 2008-05-05 12:23:15 UTC (rev 1103) @@ -13,26 +13,25 @@ File 1,1,<.\main.c><main.c> 0x0 File 1,1,<.\global.c><global.c> 0x0 -File 2,1,<.\usb\usb_drv.c><usb_drv.c> 0x0 -File 2,1,<.\usb\usb_enum.c><usb_enum.c> 0x0 File 2,1,<.\usb\usb_task.c><usb_task.c> 0x0 +File 2,1,<.\usb\usb_enum.c><usb_enum.c> 0x0 +File 2,1,<.\usb\usb_drv.c><usb_drv.c> 0x0 File 3,1,<.\spi\spi_task.c><spi_task.c> 0x0 File 3,1,<.\spi\spi_lib.c><spi_lib.c> 0x0 -File 4,1,<.\bootloader\i2c.c><i2c.c> 0x0 File 4,1,<.\bootloader\bootloading.c><bootloading.c> 0x0 +File 4,1,<.\bootloader\i2c.c><i2c.c> 0x0 File 5,1,<.\modules\timer_soft\timer_soft.c><timer_soft.c> 0x0 +File 5,1,<.\modules\fifo\fifo.c><fifo.c> 0x0 File 5,1,<.\modules\fifo\fifo_spk.c><fifo_spk.c> 0x0 File 5,1,<.\modules\fifo\fifo_mic.c><fifo_mic.c> 0x0 -File 5,1,<.\modules\fifo\fifo.c><fifo.c> 0x0 File 5,1,<.\modules\fifo_stt\fifo_stt.c><fifo_stt.c> 0x0 File 6,1,<.\lib_mcu\uart\uart_lib.c><uart_lib.c> 0x0 File 6,1,<.\lib_mcu\fa-usb\flash_api.c><flash_api.c> 0x0 File 7,5,<.\config.h><config.h> 0x0 +File 7,5,<.\global.h><global.h> 0x0 File 7,5,<.\lib_mcu\reg_5131.h><reg_5131.h> 0x0 File 7,5,<.\lib_mcu\ext_5131.h><ext_5131.h> 0x0 File 7,5,<.\lib_mcu\5131_drv.h><5131_drv.h> 0x0 -File 7,5,<.\global.h><global.h> 0x0 -File 7,5,<.\bootloading.h><bootloading.h> 0x0 Options 1,0,0 // Target 'fuxusb' @@ -54,7 +53,7 @@ EnvLib () EnvReg () OrgReg () - TgStat=9 + TgStat=0 OutDir (.\obj\) OutName (fuxusb.aof) GenApp=1 |
From: Paul_R <c2m...@c2...> - 2008-05-05 12:20:45
|
Author: Paul_R Date: 2008-05-05 14:20:45 +0200 (Mon, 05 May 2008) New Revision: 1102 Modified: firmware/fuxusb/branches/usb_cleanup/spi/spi_task.c firmware/fuxusb/branches/usb_cleanup/usb/usb_task.c firmware/fuxusb/branches/usb_cleanup/usb/usb_task.h Log: * Moved the spi_task from usb_task.c to spi_task.c Modified: firmware/fuxusb/branches/usb_cleanup/spi/spi_task.c =================================================================== --- firmware/fuxusb/branches/usb_cleanup/spi/spi_task.c 2008-05-05 10:48:26 UTC (rev 1101) +++ firmware/fuxusb/branches/usb_cleanup/spi/spi_task.c 2008-05-05 12:20:45 UTC (rev 1102) @@ -12,8 +12,13 @@ #include "global.h" #include "config.h" +#include "usb/usb_task.h" #include "spi\spi_lib.h" #include "spi\spi_task.h" +#include "modules\fifo\fifo_spk.h" +#include "modules\fifo\fifo_mic.h" +#include "modules\fifo\fifo.h" +#include "modules\fifo_stt\fifo_stt.h" #include "global.h" /*_____ M A C R O S ________________________________________________________*/ @@ -144,3 +149,232 @@ } +void spi_task(void) +{ + data unsigned char Spi_Overflow_Ctr; + uint8_t i; + data unsigned char received_status[4]; + data unsigned char received_data[34]; + Cpu_reset=1; + if(spi_task_on_Flag) + { + //-------------------------------------------------------------------------- + // + // Wait the START Event + // + //-------------------------------------------------------------------------- + if ((SPI_START) && (spi_enable)) // Wait start + { + spi_watchdog_ctr = SPI_WATCHDOG_MAX; + spi_ready = 0; + spi_count = 0; // Reset spi counter + spi_slave = HEADERS; // Set state machine + spi_master = HEADERM; + spi_enable = 0; // Communication in progress + + SPI_CSn = 0; // Chip select + spi_Start_Flag = 1; + USB_ParserProcess_Permit_Flag = FALSE; + USB_StatusProcess_Permit_Flag = FALSE; + } + + //-------------------------------------------------------------------------- + // + // SPI Streaming Analyze + // + //-------------------------------------------------------------------------- + if(spi_Start_Flag) + { + //-------------------------------------------------------------------------- + // + // Excecute When RF Module is Ready + // + // Falling Edge on spi_ready + // + //-------------------------------------------------------------------------- + if(spi_ready) + { + Spi_Overflow_Ctr = 0; + do + { + spi_ready = 0; + //-------------------------------------------------------------------------- + // Prepare the Byte to Send + //-------------------------------------------------------------------------- + if (spi_slave == HEADERS) + { + if (Fifoready_SPK) // FIFO ready to be empty + { + if (USBCommand_NewRequest_Flag) // + { + spi_slave_config = RF_AUDIO_HDR | + RF_CMD_HDR; // Config byte + SPDAT = spi_slave_config; // Header byte + } + else + { + // Config byte + spi_slave_config = RF_AUDIO_HDR; + // Header byte + SPDAT = spi_slave_config; + } + } + else + { + if (USBCommand_NewRequest_Flag) + { + // Config byte + spi_slave_config = RF_CMD_HDR; + // Header byte + SPDAT = spi_slave_config; +#ifdef FIFO_DEBUG + printf ("CMD For RF \n"); +#endif + } + else + { + spi_slave_config = 0x00; // Config byte + SPDAT = spi_slave_config; // Header byte + } + } + spi_slave = GET_SOUND_FIFO; // Next state + } + else if (spi_slave == GET_SOUND_FIFO) + { + if (spi_count == 17) + spi_slave = PUT_COMMAND; // Next state + if (spi_slave_config & RF_AUDIO_HDR) + { + SPDAT = FIFO_SPK_get(); // Get data from FIFO + } + else + SPDAT = 0x00; // No data to transmit + + } + else if (spi_slave == PUT_COMMAND) + { + if (spi_count == 21) + { + if(spi_slave_config & RF_CMD_HDR) + { + + USBCommand_NewRequest_Flag = 0; + } + spi_slave = DUMMY; // Next state + } + if (spi_slave_config & RF_CMD_HDR) + { + SPDAT =USBCommand_ForRF[spi_count-18]; + } + else + SPDAT = 0x00; // No command to transmit + } + else if (spi_slave == DUMMY) + { + SPDAT = 0x00; // Dummy byte in case of big frame + } + + spi_count++; + //-------------------------------------------------------------------------- + // Analyze the byte received + //-------------------------------------------------------------------------- + if (spi_master == HEADERM) + { + while (!(SPSTA == 0x80)) // Wait SPI response + if(RF_OFFLINE) + return; + + spi_master_config = SPDAT; + + + if (SPDAT & RF_2FRAMES_HDR) // Double frame + spi_lenght_data = 34; + else + spi_lenght_data = 17; + spi_master = PUT_SOUND_FIFO; // Go to the next state + } + else if (spi_master == PUT_SOUND_FIFO) + { + while (!(SPSTA == 0x80)) // Wait SPI response + if(RF_OFFLINE) + return; + + if (spi_master_config & RF_AUDIO_HDR) + { + P1_0 = 1; + received_data[spi_count-2] = SPDAT; + } + if (spi_count == (spi_lenght_data + 1)) + // Go to the next state + spi_master = READ_COMMAND; + } + else if (spi_master == READ_COMMAND) + { + while (!(SPSTA == 0x80)) // Wait SPI response + if(RF_OFFLINE) + return; + if (spi_master_config & RF_CMD_HDR) + { + if (spi_count <= spi_lenght_data + 5) + received_status[spi_count - \ + spi_lenght_data - 2] = SPDAT; + + if (spi_count == spi_lenght_data + 6) + { + RF_Status_Temp = SPDAT; + if(RF_Status < RF_Status_Temp) + RF_Status = RF_Status_Temp; + } + } + if (spi_count == spi_lenght_data + 6) + { + + USB_ParserProcess_Permit_Flag = TRUE; + USB_StatusProcess_Permit_Flag = TRUE; + spi_Start_Flag = 0; + SPI_CSn = 1; // Chip deselect + spi_enable = 1; + + // + // Store Sound Data in the FIFO MIC + // + // Double frame + if (spi_master_config & (RF_2FRAMES_HDR | \ + RF_AUDIO_HDR)) + { + //Led_0_off(); + i = 0; + do + { + FIFO_MIC_put(received_data[i]); + i++; + } while(i<spi_lenght_data); + //Led_0_on(); + } + // + // Store STATUS in the FIFO + // + if (spi_master_config & RF_CMD_HDR) + { + if(received_status[0]) + { + //Led_0_off(); + i = 0; + do{ + FIFO_STT_put(received_status[i]); + i++; + }while(i<4); + } + //Led_0_on(); + } + //if (spi_slave_config & RF_CMD_HDR) + //printf("\n"); + return; + } + } + Spi_Overflow_Ctr++; + }while(spi_ready&&(Spi_Overflow_Ctr<5)); + } + } + } +} Modified: firmware/fuxusb/branches/usb_cleanup/usb/usb_task.c =================================================================== --- firmware/fuxusb/branches/usb_cleanup/usb/usb_task.c 2008-05-05 10:48:26 UTC (rev 1101) +++ firmware/fuxusb/branches/usb_cleanup/usb/usb_task.c 2008-05-05 12:20:45 UTC (rev 1102) @@ -1026,229 +1026,7 @@ else if(!RF_OFFLINE) { - Cpu_reset=1; - if(spi_task_on_Flag) - { -//-------------------------------------------------------------------------- -// -// Wait the START Event -// -//-------------------------------------------------------------------------- - if ((SPI_START) && (spi_enable)) // Wait start - { - spi_watchdog_ctr = SPI_WATCHDOG_MAX; - spi_ready = 0; - spi_count = 0; // Reset spi counter - spi_slave = HEADERS; // Set state machine - spi_master = HEADERM; - spi_enable = 0; // Communication in progress - - SPI_CSn = 0; // Chip select - spi_Start_Flag = 1; - USB_ParserProcess_Permit_Flag = FALSE; - USB_StatusProcess_Permit_Flag = FALSE; - } - -//-------------------------------------------------------------------------- -// -// SPI Streaming Analyze -// -//-------------------------------------------------------------------------- - if(spi_Start_Flag) - { -//-------------------------------------------------------------------------- -// -// Excecute When RF Module is Ready -// -// Falling Edge on spi_ready -// -//-------------------------------------------------------------------------- - if(spi_ready) - { - Spi_Overflow_Ctr = 0; - do - { - spi_ready = 0; -//-------------------------------------------------------------------------- -// Prepare the Byte to Send -//-------------------------------------------------------------------------- - if (spi_slave == HEADERS) - { - if (Fifoready_SPK) // FIFO ready to be empty - { - if (USBCommand_NewRequest_Flag) // - { - spi_slave_config = RF_AUDIO_HDR | - RF_CMD_HDR; // Config byte - SPDAT = spi_slave_config; // Header byte - } - else - { - // Config byte - spi_slave_config = RF_AUDIO_HDR; - // Header byte - SPDAT = spi_slave_config; - } - } - else - { - if (USBCommand_NewRequest_Flag) - { - // Config byte - spi_slave_config = RF_CMD_HDR; - // Header byte - SPDAT = spi_slave_config; -#ifdef FIFO_DEBUG - printf ("CMD For RF \n"); -#endif - } - else - { - spi_slave_config = 0x00; // Config byte - SPDAT = spi_slave_config; // Header byte - } - } - spi_slave = GET_SOUND_FIFO; // Next state - } - else if (spi_slave == GET_SOUND_FIFO) - { - if (spi_count == 17) - spi_slave = PUT_COMMAND; // Next state - if (spi_slave_config & RF_AUDIO_HDR) - { - SPDAT = FIFO_SPK_get(); // Get data from FIFO - } - else - SPDAT = 0x00; // No data to transmit - - } - else if (spi_slave == PUT_COMMAND) - { - if (spi_count == 21) - { - if(spi_slave_config & RF_CMD_HDR) - { - - USBCommand_NewRequest_Flag = 0; - } - spi_slave = DUMMY; // Next state - } - if (spi_slave_config & RF_CMD_HDR) - { - SPDAT =USBCommand_ForRF[spi_count-18]; - } - else - SPDAT = 0x00; // No command to transmit - } - else if (spi_slave == DUMMY) - { - SPDAT = 0x00; // Dummy byte in case of big frame - } - - spi_count++; -//-------------------------------------------------------------------------- -// Analyze the byte received -//-------------------------------------------------------------------------- - if (spi_master == HEADERM) - { - while (!(SPSTA == 0x80)) // Wait SPI response - if(RF_OFFLINE) - return; - - spi_master_config = SPDAT; - - - if (SPDAT & RF_2FRAMES_HDR) // Double frame - spi_lenght_data = 34; - else - spi_lenght_data = 17; - spi_master = PUT_SOUND_FIFO; // Go to the next state - } - else if (spi_master == PUT_SOUND_FIFO) - { - while (!(SPSTA == 0x80)) // Wait SPI response - if(RF_OFFLINE) - return; - - if (spi_master_config & RF_AUDIO_HDR) - { - P1_0 = 1; - received_data[spi_count-2] = SPDAT; - } - if (spi_count == (spi_lenght_data + 1)) - // Go to the next state - spi_master = READ_COMMAND; - } - else if (spi_master == READ_COMMAND) - { - while (!(SPSTA == 0x80)) // Wait SPI response - if(RF_OFFLINE) - return; - if (spi_master_config & RF_CMD_HDR) - { - if (spi_count <= spi_lenght_data + 5) - received_status[spi_count - \ - spi_lenght_data - 2] = SPDAT; - - if (spi_count == spi_lenght_data + 6) - { - RF_Status_Temp = SPDAT; - if(RF_Status < RF_Status_Temp) - RF_Status = RF_Status_Temp; - } - } - if (spi_count == spi_lenght_data + 6) - { - - USB_ParserProcess_Permit_Flag = TRUE; - USB_StatusProcess_Permit_Flag = TRUE; - spi_Start_Flag = 0; - SPI_CSn = 1; // Chip deselect - spi_enable = 1; - - // - // Store Sound Data in the FIFO MIC - // - // Double frame - if (spi_master_config & (RF_2FRAMES_HDR | \ - RF_AUDIO_HDR)) - { - //Led_0_off(); - i = 0; - do - { - FIFO_MIC_put(received_data[i]); - i++; - } while(i<spi_lenght_data); - //Led_0_on(); - } - // - // Store STATUS in the FIFO - // - if (spi_master_config & RF_CMD_HDR) - { - if(received_status[0]) - { - //Led_0_off(); - i = 0; - do{ - FIFO_STT_put(received_status[i]); - i++; - }while(i<4); - } - //Led_0_on(); - } - //if (spi_slave_config & RF_CMD_HDR) - //printf("\n"); - return; - } - } - Spi_Overflow_Ctr++; - }while(spi_ready&&(Spi_Overflow_Ctr<5)); - } - } - } - + spi_task(); } else // if RF_OFFLINE { Modified: firmware/fuxusb/branches/usb_cleanup/usb/usb_task.h =================================================================== --- firmware/fuxusb/branches/usb_cleanup/usb/usb_task.h 2008-05-05 10:48:26 UTC (rev 1101) +++ firmware/fuxusb/branches/usb_cleanup/usb/usb_task.h 2008-05-05 12:20:45 UTC (rev 1102) @@ -24,8 +24,8 @@ /*_____ D E C L A R A T I O N ______________________________________________*/ +extern bit Cpu_reset; - void usb_task_init (void); void usb_task (void); void usb_Satus_command_process_task(void); |
From: Paul_R <c2m...@c2...> - 2008-05-05 10:48:28
|
Author: Paul_R Date: 2008-05-05 12:48:26 +0200 (Mon, 05 May 2008) New Revision: 1101 Added: firmware/fuxusb/branches/usb_cleanup/bootloader/ firmware/fuxusb/branches/usb_cleanup/bootloader/bootloading.c firmware/fuxusb/branches/usb_cleanup/bootloader/bootloading.h firmware/fuxusb/branches/usb_cleanup/bootloader/i2c.c firmware/fuxusb/branches/usb_cleanup/bootloader/i2c.h firmware/fuxusb/branches/usb_cleanup/bootloader/twi.h firmware/fuxusb/branches/usb_cleanup/spi/ firmware/fuxusb/branches/usb_cleanup/spi/spi_lib.c firmware/fuxusb/branches/usb_cleanup/spi/spi_lib.h firmware/fuxusb/branches/usb_cleanup/spi/spi_task.c firmware/fuxusb/branches/usb_cleanup/spi/spi_task.h firmware/fuxusb/branches/usb_cleanup/usb/ firmware/fuxusb/branches/usb_cleanup/usb/usb_drv.c firmware/fuxusb/branches/usb_cleanup/usb/usb_drv.h firmware/fuxusb/branches/usb_cleanup/usb/usb_enum.c firmware/fuxusb/branches/usb_cleanup/usb/usb_enum.h firmware/fuxusb/branches/usb_cleanup/usb/usb_task.c firmware/fuxusb/branches/usb_cleanup/usb/usb_task.h Removed: firmware/fuxusb/branches/usb_cleanup/bootloading.c firmware/fuxusb/branches/usb_cleanup/bootloading.h firmware/fuxusb/branches/usb_cleanup/i2c.c firmware/fuxusb/branches/usb_cleanup/i2c.h firmware/fuxusb/branches/usb_cleanup/lib_mcu/spi/ firmware/fuxusb/branches/usb_cleanup/lib_mcu/twi/ firmware/fuxusb/branches/usb_cleanup/lib_mcu/usb/ firmware/fuxusb/branches/usb_cleanup/modules/spi/ firmware/fuxusb/branches/usb_cleanup/modules/usb/ firmware/fuxusb/branches/usb_cleanup/modules/usb_enum/ Modified: firmware/fuxusb/branches/usb_cleanup/fuxusb.Uv2 firmware/fuxusb/branches/usb_cleanup/main.c firmware/fuxusb/branches/usb_cleanup/modules/fifo/fifo_spk.c firmware/fuxusb/branches/usb_cleanup/modules/fifo_stt/fifo_stt.c Log: * Reorganised the project. Added: firmware/fuxusb/branches/usb_cleanup/bootloader/bootloading.c =================================================================== --- firmware/fuxusb/branches/usb_cleanup/bootloader/bootloading.c (rev 0) +++ firmware/fuxusb/branches/usb_cleanup/bootloader/bootloading.c 2008-05-05 10:48:26 UTC (rev 1101) @@ -0,0 +1,61 @@ +/* KySoH iTux agent + * + * Behavioural source code + * created on 2005/10/19 David Bourgeois + * -------------------------------------------------------- + * $Id$ + */ + +#include "bootloading.h" +#include "config.h" + +uint8_t Command_FromUSB_bootload_cmd; +uint8_t cpu_address; +uint8_t page_size; +uint8_t page_address; +uint8_t packets_per_page; +uint8_t address_idx; +uint8_t packet_idx; + +blHeader_t blHeader; /* header for bootloading */ + +/* + * Initialize i2c interface + */ +void bl_init(void) +{ + /* Set TWI bitrate */ + i2cSetBitrate(); + /* Initialize TWI interface */ + i2cInit(); + /* Connect the bootloader pointer to the I2C buffer */ + blHeader.blData = &i2cSendData[2]; +} + +/* + * Sends the data stored in i2cSendData array. Only the + * 'dataLength' first bytes are sent. + * + * Prepare the i2c communication and store the page address in the + * i2c buffer. Status can be followed with i2cFlags.i2c_busy which + * is set when the communication is in progress and cleared when + * done. i2cFlags.s_val is set when the bootload has succeded. + */ +void bl_senddata(blHeader_t blHeader, uint8_t dataLength) +{ + i2cFlags.s_val = 0; + i2cDeviceAddrRW = blHeader.slave_address; + i2cSendData[0] = blHeader.page_address >> 8; /* the first 2 bytes of the i2c frame are the page address */ + i2cSendData[1] = blHeader.page_address; + i2cSendDataLength = dataLength + 2; +#ifdef BOOTLOAD_DEBUG + { + unsigned char i; + printf("I2C: Page 0x%BX%BX:\n", i2cSendData[0], i2cSendData[1]); + for (i=2; i<i2cSendDataLength; i++) + printf("%BX", i2cSendData[i]); + printf("\n"); + } +#endif + i2cMasterStart(); +} Property changes on: firmware/fuxusb/branches/usb_cleanup/bootloader/bootloading.c ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:keywords + Id Name: svn:eol-style + native Added: firmware/fuxusb/branches/usb_cleanup/bootloader/bootloading.h =================================================================== --- firmware/fuxusb/branches/usb_cleanup/bootloader/bootloading.h (rev 0) +++ firmware/fuxusb/branches/usb_cleanup/bootloader/bootloading.h 2008-05-05 10:48:26 UTC (rev 1101) @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2006, C2ME S.A. + * All rights reserved. + * + * $Id:$ + */ + +#ifndef _BOOTLOADING_H_ +#define _BOOTLOADING_H_ + +#include "lib_c/stdint.h" +#include "bootloader\i2c.h" +#include "config.h" + +/** USB bootloader commands */ +#define BOOT_INIT 1 +#define BOOT_FILLPAGE 2 +#define BOOT_EXIT 3 + +#define BOOTLOADER_CMD (uint8_t)0xF0 /* Bootloader status command */ + +/** + * \brief Bootloading header structure which holds all information to initiate + * a bootloading communication + */ +typedef struct blHeader_s { + /* 7 bits slave address aligned left + rw bit */ + uint8_t slave_address; + /* 16 bits address of the first byte of the page to write */ + uint16_t page_address; + /* page length in multiple of 64 bytes */ + uint8_t page_length; + /* pointer to the bootloader data */ + uint8_t xdata *blData; +} blHeader_t; + +extern blHeader_t blHeader; + +/* + * Extern declarations + */ + +void bl_init(void); + +void bl_senddata(blHeader_t blHeader, uint8_t dataLength); + +extern uint8_t Command_FromUSB_bootload_cmd; +extern uint8_t cpu_address; +extern uint8_t page_size; +extern uint8_t page_address; +extern uint8_t packets_per_page; +extern uint8_t address_idx; +extern uint8_t packet_idx; + +#endif /* _BOOTLOADING_H_ */ Property changes on: firmware/fuxusb/branches/usb_cleanup/bootloader/bootloading.h ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:keywords + Id Name: svn:eol-style + native Added: firmware/fuxusb/branches/usb_cleanup/bootloader/i2c.c =================================================================== --- firmware/fuxusb/branches/usb_cleanup/bootloader/i2c.c (rev 0) +++ firmware/fuxusb/branches/usb_cleanup/bootloader/i2c.c 2008-05-05 10:48:26 UTC (rev 1101) @@ -0,0 +1,301 @@ +#include "bootloader\i2c.h" + +#define I2C_DEBUG 0 + +/* + * DEBUG + */ +//#define __debug__ + +/* I2C status and address variables */ +uint8_t i2cDeviceAddrRW; +volatile I2C_FLAGS i2cFlags; +/* send/transmit buffer (outgoing data) */ +uint8_t xdata i2cSendData[I2C_SEND_DATA_BUFFER_SIZE]; +uint8_t *i2cDataToSend; +uint8_t i2cSendDataIndex; +uint8_t i2cSendDataLength; +/* receive buffer (incoming data) */ +uint8_t xdata i2cReceiveData[I2C_RECEIVE_DATA_BUFFER_SIZE]; +uint8_t i2cReceiveDataIndex; +uint8_t i2cReceiveDataLength; + +/* function pointer to i2c receive routine */ +/* I2cSlaveReceive is called when this processor is addressed as a slave for + * writing */ +static void (*i2cSlaveReceive)(uint8_t receiveDataLength, uint8_t* recieveData); +/* I2cSlaveTransmit is called when this processor is addressed as a slave for + * reading */ +static uint8_t (*i2cSlaveTransmit)(uint8_t transmitDataLengthMax, uint8_t* transmitData); + +/* functions */ + +/* + * Set the TWI transaction bitrate + */ +void i2cSetBitrate(void) +{ + /* Setting SSCON based on TWI_SCAL defined in i2c.h */ + SSCON = TWI_SCAL_VALUE; /* twi intialisation */ +} + +/* + * This function initializes the TWI interface for i2c communication. You + * should use the definitions in i2c.h to select the mode you want. + * + * Note that you should set the i2cSlaveReceive and i2cSlaveTransmit handlers + * after this initialization otherwise they'll be cleared. + */ +void i2cInit(void) +{ + /* Set up twi */ + SSCON = TWI_SSIE | TWI_SCAL_VALUE; /* enable TWI */ +#ifdef TWI_INT_ENABLED + Enable_twi_interrupt(); +#endif + +#ifdef TWI_SLA_ENABLED /* If Slave mode: */ + /* Set local device address (used in slave mode only) */ + SSADR = I2C_SLA_ADD; + + /* Enabling Slave mode */ + TWI_SET_AA(); /* enable TWI ACK */ + i2cSlaveReceive = 0; /* XXX do we need those 2 lines? clear SlaveReceive and SlaveTransmit handler to null */ + i2cSlaveTransmit = 0; +#endif + +#ifdef TWI_M_ENABLED +#endif +} + +/* Set the user function which handles receiving (incoming) data as a slave */ +void i2cSetSlaveReceiveHandler(void (*i2cSlaveRx_func)(uint8_t receiveDataLength, uint8_t* recieveData)) +{ + i2cSlaveReceive = i2cSlaveRx_func; +} + +/* Set the user function which handles transmitting (outgoing) data as a slave */ +void i2cSetSlaveTransmitHandler(uint8_t (*i2cSlaveTx_func)(uint8_t transmitDataLengthMax, uint8_t* transmitData)) +{ + i2cSlaveTransmit = i2cSlaveTx_func; +} + +void i2cSendStart(void); +/* Start a Master transmission, i2cSendDataIndex is reset automatically here */ +void i2cMasterStart(void) +{ + i2cFlags.i2c_busy = 1; + i2cSendDataIndex = 0; /* don't forget to reset the index */ + i2cSendStart(); +} + +void i2cSendStart(void) +{ + TWI_SET_START(); +} + +void i2cSendStop(void) +{ + TWI_SET_STOP(); + i2cFlags.i2c_busy = 0; +} + +void i2cSendByte(uint8_t _data) +{ + SSDAT = _data; +} + +void i2cAckReceiveByte(void) +{ + TWI_SET_AA(); +} + +void i2cNackReceiveByte(void) +{ + TWI_CLEAR_AA(); +} + +#define TW_DATA SSDAT +uint8_t i2cGetReceivedByte(void) +{ + return SSDAT; +} + +uint8_t i2cGetStatus(void) +{ + return TW_STATUS; +} + +#ifdef __debug__ +uint8_t i2cStatus[20]; /* debug only */ +uint8_t i2cStatusIdx = 0; +#endif + +/* TWI interrupt service routine */ +#ifdef TWI_INT_ENABLED +void it_TWI(void) interrupt IRQ_TWI using 1 +{ +#ifdef __debug__ + i2cStatus[i2cStatusIdx++] = TW_STATUS; + if (i2cStatusIdx == 20) i2cStatusIdx = 0; +#endif + + + switch (TW_STATUS) + { + /* * * Master General * * */ + case TW_START: // 0x08: Sent start condition + case TW_REP_START: // 0x10: Sent repeated start condition +#if I2C_DEBUG +#endif + // send device address + TWI_CLEAR_START(); /* clear start condition */ + i2cSendByte(i2cDeviceAddrRW); + break; + + + /* * * Master Transmitter & Receiver status codes * * */ + + case TW_MT_SLA_ACK: // 0x18: Slave address acknowledged + case TW_MT_DATA_ACK: // 0x28: Data acknowledged +#if I2C_DEBUG +#endif + if(i2cSendDataIndex < i2cSendDataLength) + { + + i2cSendByte( i2cSendData[i2cSendDataIndex++] ); /* send data */ + } + else + { + i2cSendStop(); /* End of data stream */ + i2cFlags.s_val = 1; + } + break; + case TW_MR_DATA_NACK: // 0x58: Data received, NACK reply issued +#if I2C_DEBUG +#endif + i2cReceiveData[i2cReceiveDataIndex++] = TW_DATA; // store final received data byte + /* no break, continue to transmit STOP condition */ + case TW_MR_SLA_NACK: // 0x48: Slave address not acknowledged + case TW_MT_SLA_NACK: // 0x20: Slave address not acknowledged + case TW_MT_DATA_NACK: // 0x30: Data not acknowledged +#if I2C_DEBUG +#endif + i2cFlags.mt_nack = 1; + i2cSendStop(); + break; + case TW_MT_ARB_LOST: // 0x38: Bus arbitration lost + //case TW_MR_ARB_LOST: // 0x38: Bus arbitration lost +#if I2C_DEBUG +#endif + i2cInit(); + break; + case TW_MR_DATA_ACK: // 0x50: Data acknowledged +#if I2C_DEBUG +#endif + // store received data byte + i2cReceiveData[i2cReceiveDataIndex++] = TW_DATA; + // fall-through to see if more bytes will be received + case TW_MR_SLA_ACK: // 0x40: Slave address acknowledged +#if I2C_DEBUG +#endif + if(i2cReceiveDataIndex < (i2cReceiveDataLength-1)) + i2cAckReceiveByte(); /* receive more bytes */ + else + i2cNackReceiveByte(); /* receive the last byte */ + break; + + + /* * * Slave Receiver status codes * * */ + + case TW_SR_SLA_ACK: // 0x60: own SLA+W has been received, ACK has been returned + case TW_SR_ARB_LOST_SLA_ACK: // 0x68: own SLA+W has been received, ACK has been returned + case TW_SR_GCALL_ACK: // 0x70: GCA+W has been received, ACK has been returned + case TW_SR_ARB_LOST_GCALL_ACK: // 0x78: GCA+W has been received, ACK has been returned +#if I2C_DEBUG +#endif + /* we are being addressed as slave for writing (data will be received from master) */ + i2cFlags.i2c_busy = 1; + i2cReceiveDataIndex = 0; + i2cFlags.s_nack = 0; /* reset nack flag here, not in user app */ + i2cAckReceiveByte(); /* accept data */ + break; + case TW_SR_DATA_ACK: // 0x80: data byte has been received, ACK has been returned + case TW_SR_GCALL_DATA_ACK: // 0x90: data byte has been received, ACK has been returned +#if I2C_DEBUG +#endif + i2cReceiveData[i2cReceiveDataIndex++] = TW_DATA; /* get received data byte */ + /* check receive buffer status */ + if(i2cReceiveDataIndex < I2C_RECEIVE_DATA_BUFFER_SIZE) + { + i2cAckReceiveByte(); /* accept more data */ + } + else + { + i2cNackReceiveByte(); /* refuse more data */ + } + break; + case TW_SR_DATA_NACK: // 0x88: data byte has been received, NACK has been returned + case TW_SR_GCALL_DATA_NACK: // 0x98: data byte has been received, NACK has been returned +#if I2C_DEBUG +#endif + //i2cReceiveData[i2cReceiveDataIndex++] = TW_DATA; /* receive last byte XXX check if this is right */ + //i2cNackReceiveByte(); //XXX bug here? // receive data byte and return NACK + //i2cAckReceiveByte(); [> I should clear the interrupt and enable acknoledge for slave mode (disabled during previous nack) <] + i2cFlags.s_nack = 1; /* XXX check if this flag is reset in all possible conditions */ + //break; + /* pass along to restart slave mode */ + case TW_SR_STOP: // 0xA0: STOP or REPEATED START has been received while addressed as slave +#if I2C_DEBUG +#endif + i2cInit(); /* enable TWI ACK */ + if(i2cSlaveReceive) i2cSlaveReceive(i2cReceiveDataIndex, i2cReceiveData); /* i2c receive is complete, call i2cSlaveReceive */ + i2cFlags.i2c_busy = 0; /* XXX check if this flag is reset in all possible conditions */ + break; + + + /* * * Slave Transmitter * * */ + + case TW_ST_SLA_ACK: // 0xA8: own SLA+R has been received, ACK has been returned + case TW_ST_ARB_LOST_SLA_ACK: // 0xB0: GCA+R has been received, ACK has been returned +#if I2C_DEBUG +#endif + // we are being addressed as slave for reading (data must be transmitted back to master) + // request data from application + if(i2cSlaveTransmit) i2cSendDataLength = i2cSlaveTransmit(I2C_SEND_DATA_BUFFER_SIZE, i2cSendData); + i2cSendDataIndex = 0; /* reset data index */ + /* fall-through to transmit first data byte */ + case TW_ST_DATA_ACK: // 0xB8: data byte has been transmitted, ACK has been received +#if I2C_DEBUG +#endif + TW_DATA = i2cSendData[i2cSendDataIndex++]; /* transmit data byte */ + if(i2cSendDataIndex < i2cSendDataLength) + i2cAckReceiveByte(); /* expect ACK to data byte */ + else + i2cNackReceiveByte(); /* expect NACK to data byte */ + break; + case TW_ST_DATA_NACK: // 0xC0: data byte has been transmitted, NACK has been received + case TW_ST_LAST_DATA: // 0xC8: last data byte transmitted, ACK received +#if I2C_DEBUG +#endif + /* all done, switch to open slave */ + i2cInit(); /* enable TWI ACK */ + break; + + + /* * * Misc * * */ + + case TW_NO_INFO: // 0xF8: No relevant state information + /* do nothing */ +#if I2C_DEBUG +#endif + break; + case TW_BUS_ERROR: // 0x00: Bus error due to illegal start or stop condition +#if I2C_DEBUG +#endif + i2cSendStop(); /* reset internal hardware and release bus */ + break; + } + TWI_CLEAR_SI(); +} +#endif Property changes on: firmware/fuxusb/branches/usb_cleanup/bootloader/i2c.c ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:keywords + Id Name: svn:eol-style + native Added: firmware/fuxusb/branches/usb_cleanup/bootloader/i2c.h =================================================================== --- firmware/fuxusb/branches/usb_cleanup/bootloader/i2c.h (rev 0) +++ firmware/fuxusb/branches/usb_cleanup/bootloader/i2c.h 2008-05-05 10:48:26 UTC (rev 1101) @@ -0,0 +1,118 @@ +/* + * Copyright (c) 2006, C2ME S.A. + * All rights reserved. + * + * $Id:$ + */ + +#ifndef _I2C_H_ +#define _I2C_H_ + +#include "lib_c/stdint.h" +#include "bootloader/twi.h" +#include "config.h" + +#ifdef __debug__ +extern uint8_t i2cStatus[20]; /* XXX debug only */ +extern uint8_t i2cStatusIdx; +#endif + +/* * * include custom configuration here * * */ + +#define I2C_SEND_DATA_BUFFER_SIZE 130 +#define I2C_RECEIVE_DATA_BUFFER_SIZE 8 + +/* + * Choose operation mode, comment/uncomment lines + * For Slave only operation, choose Master and Slave + */ +#define TWI_INT_ENABLED /* comment if you don't want twi interrupts */ +#define TWI_M_ENABLED /* comment if you don't want twi master mode */ +//#define TWI_SLA_ENABLED /* comment if you don't want twi slave mode */ + +/* SSADR: TWI (Slave) Address Register + * Bits 7..1 : TWI (Slave) Address Register + * Bit 0 : TWI General Call Recognition Enable Bit */ +#define I2C_SLA_ADD ((0X55<<1) | 0x01) /* Only necessary in slave mode */ + +/* + * Initialise TWI clock + * + * Here we set SCL frequency in Master mode by defining TWI_SCAL: + * SCL_freq = F_CPU/TWI_SCAL + * + * TWI_SCAL value should be one of: 256 224 192 160 960 120 60 + */ + +//#define TWI_SCAL 160 /* TWI_SCAL value should be: 256 224 192 160 960 120 60 */ +#define TWI_SCAL 960 /* TWI_SCAL value should be: 256 224 192 160 960 120 60 */ + +/* * * END of code customisation * * */ + +#if TWI_SCAL == 256 +#define TWI_SCAL_VALUE TWI_RATIO_256 +#elif TWI_SCAL == 224 +#define TWI_SCAL_VALUE TWI_RATIO_224 +#elif TWI_SCAL == 192 +#define TWI_SCAL_VALUE TWI_RATIO_192 +#elif TWI_SCAL == 160 +#define TWI_SCAL_VALUE TWI_RATIO_160 +#elif TWI_SCAL == 960 +#define TWI_SCAL_VALUE TWI_RATIO_960 +#elif TWI_SCAL == 120 +#define TWI_SCAL_VALUE TWI_RATIO_120 +#elif TWI_SCAL == 60 +#define TWI_SCAL_VALUE TWI_RATIO_60 +#else +#error Incorrect TWI_SCAL value, should be: 256 224 192 160 960 120 60 +#define TWI_SCAL_VALUE +#endif + +/*! defines and constants */ +#define TWCR_CMD_MASK 0x0F + +/* + * Bits that are set inside interrupt routines, and watched outside in + * the program's main loop. + */ +typedef struct +{ + uint8_t i2c_busy: 1; /* set when twi hardware is busy, cleared after an i2c stop */ + uint8_t mt_nack: 1; /* error due to a nack received by the master transmitter */ + uint8_t s_nack: 1; /* error due to a nack replied by the slave */ + uint8_t sr_end: 1; /* set at the end of a receiver slave transmission if i2cSlaveReceive has not been defined */ + uint8_t st_end: 1; /* set at the end of a transmitter slave transmission if i2cSlaveTransmit has not been defined */ + uint8_t i2c_idx: 1; /* application side - can be used for data indexes status */ + uint8_t s_val: 1; /* application side - can be used for data validation */ +} +I2C_FLAGS; +extern volatile I2C_FLAGS i2cFlags; + +/*! types */ +typedef enum +{ + I2C_IDLE = 0, I2C_BUSY = 1, + I2C_MASTER_TX = 2, I2C_MASTER_RX = 3, + I2C_SLAVE_TX = 4, I2C_SLAVE_RX = 5 +} eI2cStateType; + +/* I2C state and address variables */ +extern uint8_t i2cDeviceAddrRW; +/* send/transmit buffer (outgoing data) */ +extern uint8_t xdata i2cSendData[]; +extern uint8_t i2cSendDataIndex; +extern uint8_t i2cSendDataLength; +/* receive buffer (incoming data) */ +extern uint8_t xdata i2cReceiveData[]; +extern uint8_t i2cReceiveDataIndex; +extern uint8_t i2cReceiveDataLength; + +/* Functions */ +void i2cSetBitrate(void); +void i2cInit(void); +void i2cSetSlaveReceiveHandler(void (*i2cSlaveRx_func)(uint8_t receiveDataLength, uint8_t* recieveData)); +void i2cSetSlaveTransmitHandler(uint8_t (*i2cSlaveTx_func)(uint8_t transmitDataLengthMax, uint8_t* transmitData)); +void i2cMasterStart(void); + +#endif + Property changes on: firmware/fuxusb/branches/usb_cleanup/bootloader/i2c.h ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:keywords + Id Name: svn:eol-style + native Added: firmware/fuxusb/branches/usb_cleanup/bootloader/twi.h =================================================================== --- firmware/fuxusb/branches/usb_cleanup/bootloader/twi.h (rev 0) +++ firmware/fuxusb/branches/usb_cleanup/bootloader/twi.h 2008-05-05 10:48:26 UTC (rev 1101) @@ -0,0 +1,229 @@ +/* $Id:$ */ + +#ifndef _LIBMCU_TWI_H_ +#define _LIBMCU_TWI_H_ 1 + +/* define register information */ +#define TWI_RATIO_256 0x00 +#define TWI_RATIO_224 0x01 +#define TWI_RATIO_192 0x02 +#define TWI_RATIO_160 0x03 +#define TWI_RATIO_960 0x80 +#define TWI_RATIO_120 0x81 +#define TWI_RATIO_60 0x82 +#define TWI_RATIO_TIMER1 0x83 + +#define TWI_CR2 0x80 +#define TWI_SSIE 0x40 +#define TWI_STA 0x20 +#define TWI_STO 0x10 +#define TWI_SI 0x08 +#define TWI_AA 0x04 +#define TWI_CR1 0x02 +#define TWI_CR0 0x01 + +#define TWI_WAIT_EVENT() while ( !(SSCON & TWI_SI) ) +#define TWI_WAIT_HW_STOP() while ( SSCON & TWI_STO ) +#define TWI_SET_START() ( SSCON |= TWI_STA ) +#define TWI_CLEAR_START() ( SSCON &= ~TWI_STA ) +#define TWI_SET_STOP() ( SSCON |= TWI_STO ) +#define TWI_SET_AA() ( SSCON |= TWI_AA ) +#define TWI_CLEAR_AA() ( SSCON &= ~TWI_AA ) +#define TWI_CLEAR_SI() ( SSCON &= ~TWI_SI ) + +/** \defgroup libmcu_twi "lib_mcu/twi/twi.h": TWI bit mask definitions + \code #include "lib_mcu/twi/twi.h" \endcode + + This header file contains bit mask definitions for use with + the ATMEL TWI interface. + */ +/** \name TWSR values + +Mnemonics: +<br>TW_MT_xxx - master transmitter +<br>TW_MR_xxx - master receiver +<br>TW_ST_xxx - slave transmitter +<br>TW_SR_xxx - slave receiver +*/ + +/*@{*/ +/* Master */ +/** \ingroup libmcu_twi + \def TW_START + start condition transmitted */ +#define TW_START 0x08 + +/** \ingroup libmcu_twi + \def TW_REP_START + repeated start condition transmitted */ +#define TW_REP_START 0x10 + +/* Master Transmitter */ +/** \ingroup libmcu_twi + \def TW_MT_SLA_ACK + SLA+W transmitted, ACK received */ +#define TW_MT_SLA_ACK 0x18 + +/** \ingroup libmcu_twi + \def TW_MT_SLA_NACK + SLA+W transmitted, NACK received */ +#define TW_MT_SLA_NACK 0x20 + +/** \ingroup libmcu_twi + \def TW_MT_DATA_ACK + data transmitted, ACK received */ +#define TW_MT_DATA_ACK 0x28 + +/** \ingroup libmcu_twi + \def TW_MT_DATA_NACK + data transmitted, NACK received */ +#define TW_MT_DATA_NACK 0x30 + +/** \ingroup libmcu_twi + \def TW_MT_ARB_LOST + arbitration lost in SLA+W or data */ +#define TW_MT_ARB_LOST 0x38 + +/* Master Receiver */ +/** \ingroup libmcu_twi + \def TW_MR_ARB_LOST + arbitration lost in SLA+R or NACK */ +#define TW_MR_ARB_LOST 0x38 + +/** \ingroup libmcu_twi + \def TW_MR_SLA_ACK + SLA+R transmitted, ACK received */ +#define TW_MR_SLA_ACK 0x40 + +/** \ingroup libmcu_twi + \def TW_MR_SLA_NACK + SLA+R transmitted, NACK received */ +#define TW_MR_SLA_NACK 0x48 + +/** \ingroup libmcu_twi + \def TW_MR_DATA_ACK + data received, ACK returned */ +#define TW_MR_DATA_ACK 0x50 + +/** \ingroup libmcu_twi + \def TW_MR_DATA_NACK + data received, NACK returned */ +#define TW_MR_DATA_NACK 0x58 + +/* Slave Transmitter */ +/** \ingroup libmcu_twi + \def TW_ST_SLA_ACK + SLA+R received, ACK returned */ +#define TW_ST_SLA_ACK 0xA8 + +/** \ingroup libmcu_twi + \def TW_ST_ARB_LOST_SLA_ACK + arbitration lost in SLA+RW, SLA+R received, ACK returned */ +#define TW_ST_ARB_LOST_SLA_ACK 0xB0 + +/** \ingroup libmcu_twi + \def TW_ST_DATA_ACK + data transmitted, ACK received */ +#define TW_ST_DATA_ACK 0xB8 + +/** \ingroup libmcu_twi + \def TW_ST_DATA_NACK + data transmitted, NACK received */ +#define TW_ST_DATA_NACK 0xC0 + +/** \ingroup libmcu_twi + \def TW_ST_LAST_DATA + last data byte transmitted, ACK received */ +#define TW_ST_LAST_DATA 0xC8 + +/* Slave Receiver */ +/** \ingroup libmcu_twi + \def TW_SR_SLA_ACK + SLA+W received, ACK returned */ +#define TW_SR_SLA_ACK 0x60 + +/** \ingroup libmcu_twi + \def TW_SR_ARB_LOST_SLA_ACK + arbitration lost in SLA+RW, SLA+W received, ACK returned */ +#define TW_SR_ARB_LOST_SLA_ACK 0x68 + +/** \ingroup libmcu_twi + \def TW_SR_GCALL_ACK + general call received, ACK returned */ +#define TW_SR_GCALL_ACK 0x70 + +/** \ingroup libmcu_twi + \def TW_SR_ARB_LOST_GCALL_ACK + arbitration lost in SLA+RW, general call received, ACK returned */ +#define TW_SR_ARB_LOST_GCALL_ACK 0x78 + +/** \ingroup libmcu_twi + \def TW_SR_DATA_ACK + data received, ACK returned */ +#define TW_SR_DATA_ACK 0x80 + +/** \ingroup libmcu_twi + \def TW_SR_DATA_NACK + data received, NACK returned */ +#define TW_SR_DATA_NACK 0x88 + +/** \ingroup libmcu_twi + \def TW_SR_GCALL_DATA_ACK + general call data received, ACK returned */ +#define TW_SR_GCALL_DATA_ACK 0x90 + +/** \ingroup libmcu_twi + \def TW_SR_GCALL_DATA_NACK + general call data received, NACK returned */ +#define TW_SR_GCALL_DATA_NACK 0x98 + +/** \ingroup libmcu_twi + \def TW_SR_STOP + stop or repeated start condition received while selected */ +#define TW_SR_STOP 0xA0 + +/* Misc */ +/** \ingroup libmcu_twi + \def TW_NO_INFO + no state information available */ +#define TW_NO_INFO 0xF8 + +/** \ingroup libmcu_twi + \def TW_BUS_ERROR + illegal start or stop condition */ +#define TW_BUS_ERROR 0x00 + + +/** + * \ingroup libmcu_twi + * \def TW_STATUS_MASK + * The lower 3 bits of TWSR are reserved on the ATmega163. + * The 2 LSB carry the prescaler bits on the newer ATmegas. + */ +#define TW_STATUS_MASK 0xF8 +/** + * \ingroup libmcu_twi + * \def TW_STATUS + * + * TWSR, masked by TW_STATUS_MASK + */ +#define TW_STATUS (SSCS) +/*@}*/ + +/** + * \name R/~W bit in SLA+R/W address field. + */ + +/*@{*/ +/** \ingroup libmcu_twi + \def TW_READ + SLA+R address */ +#define TW_READ 1 + +/** \ingroup libmcu_twi + \def TW_WRITE + SLA+W address */ +#define TW_WRITE 0 +/*@}*/ + +#endif /* _LIBMCU_TWI_H_ */ Property changes on: firmware/fuxusb/branches/usb_cleanup/bootloader/twi.h ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:keywords + Id Name: svn:eol-style + native Deleted: firmware/fuxusb/branches/usb_cleanup/bootloading.c =================================================================== --- firmware/fuxusb/branches/usb_cleanup/bootloading.c 2008-05-05 08:34:42 UTC (rev 1100) +++ firmware/fuxusb/branches/usb_cleanup/bootloading.c 2008-05-05 10:48:26 UTC (rev 1101) @@ -1,61 +0,0 @@ -/* KySoH iTux agent - * - * Behavioural source code - * created on 2005/10/19 David Bourgeois - * -------------------------------------------------------- - * $Id: main.c 28 2006-01-12 16:51:01Z david $ - */ - -#include "bootloading.h" -#include "config.h" - -uint8_t Command_FromUSB_bootload_cmd; -uint8_t cpu_address; -uint8_t page_size; -uint8_t page_address; -uint8_t packets_per_page; -uint8_t address_idx; -uint8_t packet_idx; - -blHeader_t blHeader; /* header for bootloading */ - -/* - * Initialize i2c interface - */ -void bl_init(void) -{ - /* Set TWI bitrate */ - i2cSetBitrate(); - /* Initialize TWI interface */ - i2cInit(); - /* Connect the bootloader pointer to the I2C buffer */ - blHeader.blData = &i2cSendData[2]; -} - -/* - * Sends the data stored in i2cSendData array. Only the - * 'dataLength' first bytes are sent. - * - * Prepare the i2c communication and store the page address in the - * i2c buffer. Status can be followed with i2cFlags.i2c_busy which - * is set when the communication is in progress and cleared when - * done. i2cFlags.s_val is set when the bootload has succeded. - */ -void bl_senddata(blHeader_t blHeader, uint8_t dataLength) -{ - i2cFlags.s_val = 0; - i2cDeviceAddrRW = blHeader.slave_address; - i2cSendData[0] = blHeader.page_address >> 8; /* the first 2 bytes of the i2c frame are the page address */ - i2cSendData[1] = blHeader.page_address; - i2cSendDataLength = dataLength + 2; -#ifdef BOOTLOAD_DEBUG - { - unsigned char i; - printf("I2C: Page 0x%BX%BX:\n", i2cSendData[0], i2cSendData[1]); - for (i=2; i<i2cSendDataLength; i++) - printf("%BX", i2cSendData[i]); - printf("\n"); - } -#endif - i2cMasterStart(); -} Deleted: firmware/fuxusb/branches/usb_cleanup/bootloading.h =================================================================== --- firmware/fuxusb/branches/usb_cleanup/bootloading.h 2008-05-05 08:34:42 UTC (rev 1100) +++ firmware/fuxusb/branches/usb_cleanup/bootloading.h 2008-05-05 10:48:26 UTC (rev 1101) @@ -1,55 +0,0 @@ -/* - * Copyright (c) 2006, C2ME S.A. - * All rights reserved. - * - * $Id:$ - */ - -#ifndef _BOOTLOADING_H_ -#define _BOOTLOADING_H_ - -#include "lib_c/stdint.h" -#include "i2c.h" -#include "config.h" - -/** USB bootloader commands */ -#define BOOT_INIT 1 -#define BOOT_FILLPAGE 2 -#define BOOT_EXIT 3 - -#define BOOTLOADER_CMD (uint8_t)0xF0 /* Bootloader status command */ - -/** - * \brief Bootloading header structure which holds all information to initiate - * a bootloading communication - */ -typedef struct blHeader_s { - /* 7 bits slave address aligned left + rw bit */ - uint8_t slave_address; - /* 16 bits address of the first byte of the page to write */ - uint16_t page_address; - /* page length in multiple of 64 bytes */ - uint8_t page_length; - /* pointer to the bootloader data */ - uint8_t xdata *blData; -} blHeader_t; - -extern blHeader_t blHeader; - -/* - * Extern declarations - */ - -void bl_init(void); - -void bl_senddata(blHeader_t blHeader, uint8_t dataLength); - -extern uint8_t Command_FromUSB_bootload_cmd; -extern uint8_t cpu_address; -extern uint8_t page_size; -extern uint8_t page_address; -extern uint8_t packets_per_page; -extern uint8_t address_idx; -extern uint8_t packet_idx; - -#endif /* _BOOTLOADING_H_ */ Modified: firmware/fuxusb/branches/usb_cleanup/fuxusb.Uv2 =================================================================== --- firmware/fuxusb/branches/usb_cleanup/fuxusb.Uv2 2008-05-05 08:34:42 UTC (rev 1100) +++ firmware/fuxusb/branches/usb_cleanup/fuxusb.Uv2 2008-05-05 10:48:26 UTC (rev 1101) @@ -4,35 +4,35 @@ Target (fuxusb), 0x0000 // Tools: 'MCS-51' Group (system) +Group (usb) +Group (spi) +Group (bootloader) Group (modules) Group (lib_mcu) Group (headers) File 1,1,<.\main.c><main.c> 0x0 File 1,1,<.\global.c><global.c> 0x0 -File 1,1,<.\modules\usb\usb_task.c><usb_task.c> 0x0 -File 1,1,<.\modules\spi\spi_task.c><spi_task.c> 0x0 -File 1,1,<.\bootloading.c><bootloading.c> 0x0 -File 1,1,<.\i2c.c><i2c.c> 0x0 -File 2,1,<.\modules\timer_soft\timer_soft.c><timer_soft.c> 0x0 -File 2,1,<.\modules\usb_enum\usb_enum.c><usb_enum.c> 0x0 -File 2,1,<.\modules\fifo\fifo_spk.c><fifo_spk.c> 0x0 -File 2,1,<.\modules\fifo\fifo_mic.c><fifo_mic.c> 0x0 -File 2,1,<.\modules\fifo\fifo.c><fifo.c> 0x0 -File 2,1,<.\modules\fifo_stt\fifo_stt.c><fifo_stt.c> 0x0 -File 3,1,<.\lib_mcu\usb\usb_drv.c><usb_drv.c> 0x0 -File 3,1,<.\lib_mcu\uart\uart_lib.c><uart_lib.c> 0x0 -File 3,1,<.\lib_mcu\spi\spi_lib.c><spi_lib.c> 0x0 -File 3,1,<.\lib_mcu\fa-usb\flash_api.c><flash_api.c> 0x0 -File 4,5,<.\config.h><config.h> 0x0 -File 4,5,<.\lib_mcu\reg_5131.h><reg_5131.h> 0x0 -File 4,5,<.\lib_mcu\ext_5131.h><ext_5131.h> 0x0 -File 4,5,<.\lib_mcu\5131_drv.h><5131_drv.h> 0x0 -File 4,5,<.\lib_mcu\usb\usb_drv.h><usb_drv.h> 0x0 -File 4,5,<.\global.h><global.h> 0x0 -File 4,5,<.\bootloading.h><bootloading.h> 0x0 -File 4,5,<.\i2c.h><i2c.h> 0x0 -File 4,5,<.\lib_mcu\twi\twi.h><twi.h> 0x0 +File 2,1,<.\usb\usb_drv.c><usb_drv.c> 0x0 +File 2,1,<.\usb\usb_enum.c><usb_enum.c> 0x0 +File 2,1,<.\usb\usb_task.c><usb_task.c> 0x0 +File 3,1,<.\spi\spi_task.c><spi_task.c> 0x0 +File 3,1,<.\spi\spi_lib.c><spi_lib.c> 0x0 +File 4,1,<.\bootloader\i2c.c><i2c.c> 0x0 +File 4,1,<.\bootloader\bootloading.c><bootloading.c> 0x0 +File 5,1,<.\modules\timer_soft\timer_soft.c><timer_soft.c> 0x0 +File 5,1,<.\modules\fifo\fifo_spk.c><fifo_spk.c> 0x0 +File 5,1,<.\modules\fifo\fifo_mic.c><fifo_mic.c> 0x0 +File 5,1,<.\modules\fifo\fifo.c><fifo.c> 0x0 +File 5,1,<.\modules\fifo_stt\fifo_stt.c><fifo_stt.c> 0x0 +File 6,1,<.\lib_mcu\uart\uart_lib.c><uart_lib.c> 0x0 +File 6,1,<.\lib_mcu\fa-usb\flash_api.c><flash_api.c> 0x0 +File 7,5,<.\config.h><config.h> 0x0 +File 7,5,<.\lib_mcu\reg_5131.h><reg_5131.h> 0x0 +File 7,5,<.\lib_mcu\ext_5131.h><ext_5131.h> 0x0 +File 7,5,<.\lib_mcu\5131_drv.h><5131_drv.h> 0x0 +File 7,5,<.\global.h><global.h> 0x0 +File 7,5,<.\bootloading.h><bootloading.h> 0x0 Options 1,0,0 // Target 'fuxusb' @@ -54,7 +54,7 @@ EnvLib () EnvReg () OrgReg () - TgStat=0 + TgStat=9 OutDir (.\obj\) OutName (fuxusb.aof) GenApp=1 Deleted: firmware/fuxusb/branches/usb_cleanup/i2c.c =================================================================== --- firmware/fuxusb/branches/usb_cleanup/i2c.c 2008-05-05 08:34:42 UTC (rev 1100) +++ firmware/fuxusb/branches/usb_cleanup/i2c.c 2008-05-05 10:48:26 UTC (rev 1101) @@ -1,301 +0,0 @@ -#include "i2c.h" - -#define I2C_DEBUG 0 - -/* - * DEBUG - */ -//#define __debug__ - -/* I2C status and address variables */ -uint8_t i2cDeviceAddrRW; -volatile I2C_FLAGS i2cFlags; -/* send/transmit buffer (outgoing data) */ -uint8_t xdata i2cSendData[I2C_SEND_DATA_BUFFER_SIZE]; -uint8_t *i2cDataToSend; -uint8_t i2cSendDataIndex; -uint8_t i2cSendDataLength; -/* receive buffer (incoming data) */ -uint8_t xdata i2cReceiveData[I2C_RECEIVE_DATA_BUFFER_SIZE]; -uint8_t i2cReceiveDataIndex; -uint8_t i2cReceiveDataLength; - -/* function pointer to i2c receive routine */ -/* I2cSlaveReceive is called when this processor is addressed as a slave for - * writing */ -static void (*i2cSlaveReceive)(uint8_t receiveDataLength, uint8_t* recieveData); -/* I2cSlaveTransmit is called when this processor is addressed as a slave for - * reading */ -static uint8_t (*i2cSlaveTransmit)(uint8_t transmitDataLengthMax, uint8_t* transmitData); - -/* functions */ - -/* - * Set the TWI transaction bitrate - */ -void i2cSetBitrate(void) -{ - /* Setting SSCON based on TWI_SCAL defined in i2c.h */ - SSCON = TWI_SCAL_VALUE; /* twi intialisation */ -} - -/* - * This function initializes the TWI interface for i2c communication. You - * should use the definitions in i2c.h to select the mode you want. - * - * Note that you should set the i2cSlaveReceive and i2cSlaveTransmit handlers - * after this initialization otherwise they'll be cleared. - */ -void i2cInit(void) -{ - /* Set up twi */ - SSCON = TWI_SSIE | TWI_SCAL_VALUE; /* enable TWI */ -#ifdef TWI_INT_ENABLED - Enable_twi_interrupt(); -#endif - -#ifdef TWI_SLA_ENABLED /* If Slave mode: */ - /* Set local device address (used in slave mode only) */ - SSADR = I2C_SLA_ADD; - - /* Enabling Slave mode */ - TWI_SET_AA(); /* enable TWI ACK */ - i2cSlaveReceive = 0; /* XXX do we need those 2 lines? clear SlaveReceive and SlaveTransmit handler to null */ - i2cSlaveTransmit = 0; -#endif - -#ifdef TWI_M_ENABLED -#endif -} - -/* Set the user function which handles receiving (incoming) data as a slave */ -void i2cSetSlaveReceiveHandler(void (*i2cSlaveRx_func)(uint8_t receiveDataLength, uint8_t* recieveData)) -{ - i2cSlaveReceive = i2cSlaveRx_func; -} - -/* Set the user function which handles transmitting (outgoing) data as a slave */ -void i2cSetSlaveTransmitHandler(uint8_t (*i2cSlaveTx_func)(uint8_t transmitDataLengthMax, uint8_t* transmitData)) -{ - i2cSlaveTransmit = i2cSlaveTx_func; -} - -void i2cSendStart(void); -/* Start a Master transmission, i2cSendDataIndex is reset automatically here */ -void i2cMasterStart(void) -{ - i2cFlags.i2c_busy = 1; - i2cSendDataIndex = 0; /* don't forget to reset the index */ - i2cSendStart(); -} - -void i2cSendStart(void) -{ - TWI_SET_START(); -} - -void i2cSendStop(void) -{ - TWI_SET_STOP(); - i2cFlags.i2c_busy = 0; -} - -void i2cSendByte(uint8_t _data) -{ - SSDAT = _data; -} - -void i2cAckReceiveByte(void) -{ - TWI_SET_AA(); -} - -void i2cNackReceiveByte(void) -{ - TWI_CLEAR_AA(); -} - -#define TW_DATA SSDAT -uint8_t i2cGetReceivedByte(void) -{ - return SSDAT; -} - -uint8_t i2cGetStatus(void) -{ - return TW_STATUS; -} - -#ifdef __debug__ -uint8_t i2cStatus[20]; /* debug only */ -uint8_t i2cStatusIdx = 0; -#endif - -/* TWI interrupt service routine */ -#ifdef TWI_INT_ENABLED -void it_TWI(void) interrupt IRQ_TWI using 1 -{ -#ifdef __debug__ - i2cStatus[i2cStatusIdx++] = TW_STATUS; - if (i2cStatusIdx == 20) i2cStatusIdx = 0; -#endif - - - switch (TW_STATUS) - { - /* * * Master General * * */ - case TW_START: // 0x08: Sent start condition - case TW_REP_START: // 0x10: Sent repeated start condition -#if I2C_DEBUG -#endif - // send device address - TWI_CLEAR_START(); /* clear start condition */ - i2cSendByte(i2cDeviceAddrRW); - break; - - - /* * * Master Transmitter & Receiver status codes * * */ - - case TW_MT_SLA_ACK: // 0x18: Slave address acknowledged - case TW_MT_DATA_ACK: // 0x28: Data acknowledged -#if I2C_DEBUG -#endif - if(i2cSendDataIndex < i2cSendDataLength) - { - - i2cSendByte( i2cSendData[i2cSendDataIndex++] ); /* send data */ - } - else - { - i2cSendStop(); /* End of data stream */ - i2cFlags.s_val = 1; - } - break; - case TW_MR_DATA_NACK: // 0x58: Data received, NACK reply issued -#if I2C_DEBUG -#endif - i2cReceiveData[i2cReceiveDataIndex++] = TW_DATA; // store final received data byte - /* no break, continue to transmit STOP condition */ - case TW_MR_SLA_NACK: // 0x48: Slave address not acknowledged - case TW_MT_SLA_NACK: // 0x20: Slave address not acknowledged - case TW_MT_DATA_NACK: // 0x30: Data not acknowledged -#if I2C_DEBUG -#endif - i2cFlags.mt_nack = 1; - i2cSendStop(); - break; - case TW_MT_ARB_LOST: // 0x38: Bus arbitration lost - //case TW_MR_ARB_LOST: // 0x38: Bus arbitration lost -#if I2C_DEBUG -#endif - i2cInit(); - break; - case TW_MR_DATA_ACK: // 0x50: Data acknowledged -#if I2C_DEBUG -#endif - // store received data byte - i2cReceiveData[i2cReceiveDataIndex++] = TW_DATA; - // fall-through to see if more bytes will be received - case TW_MR_SLA_ACK: // 0x40: Slave address acknowledged -#if I2C_DEBUG -#endif - if(i2cReceiveDataIndex < (i2cReceiveDataLength-1)) - i2cAckReceiveByte(); /* receive more bytes */ - else - i2cNackReceiveByte(); /* receive the last byte */ - break; - - - /* * * Slave Receiver status codes * * */ - - case TW_SR_SLA_ACK: // 0x60: own SLA+W has been received, ACK has been returned - case TW_SR_ARB_LOST_SLA_ACK: // 0x68: own SLA+W has been received, ACK has been returned - case TW_SR_GCALL_ACK: // 0x70: GCA+W has been received, ACK has been returned - case TW_SR_ARB_LOST_GCALL_ACK: // 0x78: GCA+W has been received, ACK has been returned -#if I2C_DEBUG -#endif - /* we are being addressed as slave for writing (data will be received from master) */ - i2cFlags.i2c_busy = 1; - i2cReceiveDataIndex = 0; - i2cFlags.s_nack = 0; /* reset nack flag here, not in user app */ - i2cAckReceiveByte(); /* accept data */ - break; - case TW_SR_DATA_ACK: // 0x80: data byte has been received, ACK has been returned - case TW_SR_GCALL_DATA_ACK: // 0x90: data byte has been received, ACK has been returned -#if I2C_DEBUG -#endif - i2cReceiveData[i2cReceiveDataIndex++] = TW_DATA; /* get received data byte */ - /* check receive buffer status */ - if(i2cReceiveDataIndex < I2C_RECEIVE_DATA_BUFFER_SIZE) - { - i2cAckReceiveByte(); /* accept more data */ - } - else - { - i2cNackReceiveByte(); /* refuse more data */ - } - break; - case TW_SR_DATA_NACK: // 0x88: data byte has been received, NACK has been returned - case TW_SR_GCALL_DATA_NACK: // 0x98: data byte has been received, NACK has been returned -#if I2C_DEBUG -#endif - //i2cReceiveData[i2cReceiveDataIndex++] = TW_DATA; /* receive last byte XXX check if this is right */ - //i2cNackReceiveByte(); //XXX bug here? // receive data byte and return NACK - //i2cAckReceiveByte(); [> I should clear the interrupt and enable acknoledge for slave mode (disabled during previous nack) <] - i2cFlags.s_nack = 1; /* XXX check if this flag is reset in all possible conditions */ - //break; - /* pass along to restart slave mode */ - case TW_SR_STOP: // 0xA0: STOP or REPEATED START has been received while addressed as slave -#if I2C_DEBUG -#endif - i2cInit(); /* enable TWI ACK */ - if(i2cSlaveReceive) i2cSlaveReceive(i2cReceiveDataIndex, i2cReceiveData); /* i2c receive is complete, call i2cSlaveReceive */ - i2cFlags.i2c_busy = 0; /* XXX check if this flag is reset in all possible conditions */ - break; - - - /* * * Slave Transmitter * * */ - - case TW_ST_SLA_ACK: // 0xA8: own SLA+R has been received, ACK has been returned - case TW_ST_ARB_LOST_SLA_ACK: // 0xB0: GCA+R has been received, ACK has been returned -#if I2C_DEBUG -#endif - // we are being addressed as slave for reading (data must be transmitted back to master) - // request data from application - if(i2cSlaveTransmit) i2cSendDataLength = i2cSlaveTransmit(I2C_SEND_DATA_BUFFER_SIZE, i2cSendData); - i2cSendDataIndex = 0; /* reset data index */ - /* fall-through to transmit first data byte */ - case TW_ST_DATA_ACK: // 0xB8: data byte has been transmitted, ACK has been received -#if I2C_DEBUG -#endif - TW_DATA = i2cSendData[i2cSendDataIndex++]; /* transmit data byte */ - if(i2cSendDataIndex < i2cSendDataLength) - i2cAckReceiveByte(); /* expect ACK to data byte */ - else - i2cNackReceiveByte(); /* expect NACK to data byte */ - break; - case TW_ST_DATA_NACK: // 0xC0: data byte has been transmitted, NACK has been received - case TW_ST_LAST_DATA: // 0xC8: last data byte transmitted, ACK received -#if I2C_DEBUG -#endif - /* all done, switch to open slave */ - i2cInit(); /* enable TWI ACK */ - break; - - - /* * * Misc * * */ - - case TW_NO_INFO: // 0xF8: No relevant state information - /* do nothing */ -#if I2C_DEBUG -#endif - break; - case TW_BUS_ERROR: // 0x00: Bus error due to illegal start or stop condition -#if I2C_DEBUG -#endif - i2cSendStop(); /* reset internal hardware and release bus */ - break; - } - TWI_CLEAR_SI(); -} -#endif Deleted: firmware/fuxusb/branches/usb_cleanup/i2c.h =================================================================== --- firmware/fuxusb/branches/usb_cleanup/i2c.h 2008-05-05 08:34:42 UTC (rev 1100) +++ firmware/fuxusb/branches/usb_cleanup/i2c.h 2008-05-05 10:48:26 UTC (rev 1101) @@ -1,118 +0,0 @@ -/* - * Copyright (c) 2006, C2ME S.A. - * All rights reserved. - * - * $Id:$ - */ - -#ifndef _I2C_H_ -#define _I2C_H_ - -#include "lib_c/stdint.h" -#include "lib_mcu/twi/twi.h" -#include "config.h" - -#ifdef __debug__ -extern uint8_t i2cStatus[20]; /* XXX debug only */ -extern uint8_t i2cStatusIdx; -#endif - -/* * * include custom configuration here * * */ - -#define I2C_SEND_DATA_BUFFER_SIZE 130 -#define I2C_RECEIVE_DATA_BUFFER_SIZE 8 - -/* - * Choose operation mode, comment/uncomment lines - * For Slave only operation, choose Master and Slave - */ -#define TWI_INT_ENABLED /* comment if you don't want twi interrupts */ -#define TWI_M_ENABLED /* comment if you don't want twi master mode */ -//#define TWI_SLA_ENABLED /* comment if you don't want twi slave mode */ - -/* SSADR: TWI (Slave) Address Register - * Bits 7..1 : TWI (Slave) Address Register - * Bit 0 : TWI General Call Recognition Enable Bit */ -#define I2C_SLA_ADD ((0X55<<1) | 0x01) /* Only necessary in slave mode */ - -/* - * Initialise TWI clock - * - * Here we set SCL frequency in Master mode by defining TWI_SCAL: - * SCL_freq = F_CPU/TWI_SCAL - * - * TWI_SCAL value should be one of: 256 224 192 160 960 120 60 - */ - -//#define TWI_SCAL 160 /* TWI_SCAL value should be: 256 224 192 160 960 120 60 */ -#define TWI_SCAL 960 /* TWI_SCAL value should be: 256 224 192 160 960 120 60 */ - -/* * * END of code customisation * * */ - -#if TWI_SCAL == 256 -#define TWI_SCAL_VALUE TWI_RATIO_256 -#elif TWI_SCAL == 224 -#define TWI_SCAL_VALUE TWI_RATIO_224 -#elif TWI_SCAL == 192 -#define TWI_SCAL_VALUE TWI_RATIO_192 -#elif TWI_SCAL == 160 -#define TWI_SCAL_VALUE TWI_RATIO_160 -#elif TWI_SCAL == 960 -#define TWI_SCAL_VALUE TWI_RATIO_960 -#elif TWI_SCAL == 120 -#define TWI_SCAL_VALUE TWI_RATIO_120 -#elif TWI_SCAL == 60 -#define TWI_SCAL_VALUE TWI_RATIO_60 -#else -#error Incorrect TWI_SCAL value, should be: 256 224 192 160 960 120 60 -#define TWI_SCAL_VALUE -#endif - -/*! defines and constants */ -#define TWCR_CMD_MASK 0x0F - -/* - * Bits that are set inside interrupt routines, and watched outside in - * the program's main loop. - */ -typedef struct -{ - uint8_t i2c_busy: 1; /* set when twi hardware is busy, cleared after an i2c stop */ - uint8_t mt_nack: 1; /* error due to a nack received by the master transmitter */ - uint8_t s_nack: 1; /* error due to a nack replied by the slave */ - uint8_t sr_end: 1; /* set at the end of a receiver slave transmission if i2cSlaveReceive has not been defined */ - uint8_t st_end: 1; /* set at the end of a transmitter slave transmission if i2cSlaveTransmit has not been defined */ - uint8_t i2c_idx: 1; /* application side - can be used for data indexes status */ - uint8_t s_val: 1; /* application side - can be used for data validation */ -} -I2C_FLAGS; -extern volatile I2C_FLAGS i2cFlags; - -/*! types */ -typedef enum -{ - I2C_IDLE = 0, I2C_BUSY = 1, - I2C_MASTER_TX = 2, I2C_MASTER_RX = 3, - I2C_SLAVE_TX = 4, I2C_SLAVE_RX = 5 -} eI2cStateType; - -/* I2C state and address variables */ -extern uint8_t i2cDeviceAddrRW; -/* send/transmit buffer (outgoing data) */ -extern uint8_t xdata i2cSendData[]; -extern uint8_t i2cSendDataIndex; -extern uint8_t i2cSendDataLength; -/* receive buffer (incoming data) */ -extern uint8_t xdata i2cReceiveData[]; -extern uint8_t i2cReceiveDataIndex; -extern uint8_t i2cReceiveDataLength; - -/* Functions */ -void i2cSetBitrate(void); -void i2cInit(void); -void i2cSetSlaveReceiveHandler(void (*i2cSlaveRx_func)(uint8_t receiveDataLength, uint8_t* recieveData)); -void i2cSetSlaveTransmitHandler(uint8_t (*i2cSlaveTx_func)(uint8_t transmitDataLengthMax, uint8_t* transmitData)); -void i2cMasterStart(void); - -#endif - Modified: firmware/fuxusb/branches/usb_cleanup/main.c =================================================================== --- firmware/fuxusb/branches/usb_cleanup/main.c 2008-05-05 08:34:42 UTC (rev 1100) +++ firmware/fuxusb/branches/usb_cleanup/main.c 2008-05-05 10:48:26 UTC (rev 1101) @@ -15,7 +15,7 @@ #include "config.h" #include "lib_c/stdint.h" #include "global.h" -#include "modules\usb\usb_task.h" +#include "usb\usb_task.h" #ifdef MAIN_DEBUG #include "lib_mcu\uart\uart_lib.h" Modified: firmware/fuxusb/branches/usb_cleanup/modules/fifo/fifo_spk.c =================================================================== --- firmware/fuxusb/branches/usb_cleanup/modules/fifo/fifo_spk.c 2008-05-05 08:34:42 UTC (rev 1100) +++ firmware/fuxusb/branches/usb_cleanup/modules/fifo/fifo_spk.c 2008-05-05 10:48:26 UTC (rev 1101) @@ -13,7 +13,7 @@ #include "config.h" #include "fifo_spk.h" -#include "lib_mcu\usb\usb_drv.h" +#include "usb\usb_drv.h" unsigned char FifoTbl_SPK[FIFOTBL_SPK_MAX]; Modified: firmware/fuxusb/branches/usb_cleanup/modules/fifo_stt/fifo_stt.c =================================================================== --- firmware/fuxusb/branches/usb_cleanup/modules/fifo_stt/fifo_stt.c 2008-05-05 08:34:42 UTC (rev 1100) +++ firmware/fuxusb/branches/usb_cleanup/modules/fifo_stt/fifo_stt.c 2008-05-05 10:48:26 UTC (rev 1101) @@ -13,7 +13,7 @@ #include "config.h" #include "fifo_stt.h" -#include "lib_mcu\usb\usb_drv.h" +#include "usb\usb_drv.h" unsigned char FifoTbl_Stt[FIFOTBL_STT_MAX]; Added: firmware/fuxusb/branches/usb_cleanup/spi/spi_lib.c =================================================================== --- firmware/fuxusb/branches/usb_cleanup/spi/spi_lib.c (rev 0) +++ firmware/fuxusb/branches/usb_cleanup/spi/spi_lib.c 2008-05-05 10:48:26 UTC (rev 1101) @@ -0,0 +1,52 @@ +/*C************************************************************************** + * NAME: spi_lib.c + *---------------------------------------------------------------------------- + * Copyright (c) 2006 C2me. + *---------------------------------------------------------------------------- + * RELEASE: c5131-usb-RF Dongle + * REVISION: 1.3 + *---------------------------------------------------------------------------- + * PURPOSE: + * This file provides the function to initiate the SPI interface + *****************************************************************************/ + +/*_____ I N C L U D E S ____________________________________________________*/ +#include "config.h" +#include "spi\spi_lib.h" + + +/*_____ G L O B A L D E F I N I T I O N _________________________________*/ + + +/*_____ D E F I N I T I O N ________________________________________________*/ + + +/*_____ M A C R O S ________________________________________________________*/ + + +/*_____ D E C L A R A T I O N ______________________________________________*/ + +/*F************************************************************************** + * NAME: spi_init + *---------------------------------------------------------------------------- + * PARAMS: + * delay: none + * return: none + *---------------------------------------------------------------------------- + * PURPOSE: + * This function initializes the UART USB library. + *---------------------------------------------------------------------------- + * EXAMPLE: + *---------------------------------------------------------------------------- + * NOTE: + *---------------------------------------------------------------------------- + * REQUIREMENTS: + *****************************************************************************/ + + +unsigned char spi_SendByte(Uchar Data) +{ + SPDAT = Data; + while(!(SPSTA&0x80)); + return 1; +} Property changes on: firmware/fuxusb/branches/usb_cleanup/spi/spi_lib.c ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:keywords + Id Name: svn:eol-style + native Added: firmware/fuxusb/branches/usb_cleanup/spi/spi_lib.h =================================================================== --- firmware/fuxusb/branches/usb_cleanup/spi/spi_lib.h (rev 0) +++ firmware/fuxusb/branches/usb_cleanup/spi/spi_lib.h 2008-05-05 10:48:26 UTC (rev 1101) @@ -0,0 +1,31 @@ +/*H************************************************************************** +* NAME: uart_lib.h +*---------------------------------------------------------------------------- +* Copyright (c) 2006 C2me s.a. +*---------------------------------------------------------------------------- +* RELEASE: +* REVISION: +*---------------------------------------------------------------------------- +* PURPOSE: +* SPI lib header file +*****************************************************************************/ + +#ifndef _SPI_LIB_H_ +#define _SPI_LIB_H_ + +/*_____ C O N F I G U R A T I O N _________________________________________*/ + +/*_____ D E F I N I T I O N S ______________________________________________*/ + +/*_____ D E C L A R A T I O N ______________________________________________*/ + +/*_____ M A C R O S ________________________________________________________*/ + +#define SPI_CSn P1_1 + +/*_____ P R O T O T Y P E S ____________________________________________________________*/ + +extern void spi_init(void); +extern unsigned char spi_SendByte(Uchar Data); + +#endif Property changes on: firmware/fuxusb/branches/usb_cleanup/spi/spi_lib.h ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:keywords + Id Name: svn:eol-style + native Added: firmware/fuxusb/branches/usb_cleanup/spi/spi_task.c =================================================================== --- firmware/fuxusb/branches/usb_cleanup/spi/spi_task.c (rev 0) +++ firmware/fuxusb/branches/usb_cleanup/spi/spi_task.c 2008-05-05 10:48:26 UTC (rev 1101) @@ -0,0 +1,146 @@ +/*C************************************************************************** + * NAME: spi_task.c + *---------------------------------------------------------------------------- + * Copyright (c) 2006 C2me. + *---------------------------------------------------------------------------- + * PURPOSE: + * This file controls + *---------------------------------------------------------------------------- + * $Id$ + *****************************************************************************/ +/*_____ I N C L U D E S ____________________________________________________*/ + +#include "global.h" +#include "config.h" +#include "spi\spi_lib.h" +#include "spi\spi_task.h" +#include "global.h" + +/*_____ M A C R O S ________________________________________________________*/ + +/*_____ D E F I N I T I O N ________________________________________________*/ + + +/*_____ D E C L A R A T I O N ______________________________________________*/ + + +data STM_SPI_MASTER_SLAVE_TYPE spi_slave; +data STM_SPI_SLAVE_MASTER_TYPE spi_master; +data unsigned char spi_slave_config; +data unsigned char spi_master_config; +data unsigned char spi_count; +data unsigned char spi_lenght_data; + +bit spi_enable = 1; +bit spi_ready = 0; +bit spi_Start_Flag = 0; + +unsigned char spi_TestCtr ; // Debug + + +/*F************************************************************************** + * NAME: spi_task_reset + *---------------------------------------------------------------------------- + * PARAMS: + * delay: none + * return: none + *---------------------------------------------------------------------------- + * PURPOSE: + * Reset the ASM of spi-task if watchdog or RFOFFLINE + *---------------------------------------------------------------------------- + * EXAMPLE: + *---------------------------------------------------------------------------- + * NOTE: + *---------------------------------------------------------------------------- + * REQUIREMENTS: + *****************************************************************************/ + +void spi_task_reset(void) +{ + spi_slave = HEADERS; // Set state machine + spi_master = HEADERM; + spi_enable = 1; // Communication Authorized + SPI_CSn = 1; // Chip select + spi_Start_Flag = 0; + spi_ready = 0; +} + +/*F************************************************************************** + * NAME: spi_task_init + *---------------------------------------------------------------------------- + * PARAMS: + * delay: none + * return: none + *---------------------------------------------------------------------------- + * PURPOSE: + * This function initializes the SPI controller and the associated variables. + *---------------------------------------------------------------------------- + * EXAMPLE: + *---------------------------------------------------------------------------- + * NOTE: + *---------------------------------------------------------------------------- + * REQUIREMENTS: + *****************************************************************************/ + + +void spi_task_init(void) +{ + +#ifdef X2_MODE + Set_spi_x2_mode(); +#endif + SPCON |= MSK_MSTR; /* Master mode */ + +#ifdef SPI_Clock_Div128 + SPCON |= 0x82; /* Fclk Periph/128 */ +#endif +#ifdef SPI_Clock_Div4 + SPCON |= 0x01; /* Fclk Periph/4 */ +#endif +#ifdef SPI_Clock_Div8 + SPCON |= 0x02; /* Fclk Periph/8 */ +#endif +#ifdef SPI_Clock_Div16 + SPCON |= 0x03; /* Fclk Periph/8 */ +#endif + SPCON &= ~MSK_CPOL; /* CPOL=0; transmit mode example */ + SPCON &= ~MSK_CPHA; /* CPHA=0; transmit mode example */ + SPCON |= MSK_SSDIS; + SPCON |= MSK_SPEN; /* run spi */ + + SPI_DREADY = 1; + SPI_START = 1; + SPI_CSn = 1; + IT0 = 1; // Falling Edge On Int0 + EX0 = 1; /* enable Int0 interrupt */ + + spi_slave = 0; // Reset State Machine of spi_task() + spi_master = 0; // Reset State Machine of spi_task() + + spi_task_on_Flag = 0; +} + + +/*F************************************************************************** + * NAME: it_INT0 + *---------------------------------------------------------------------------- + * PARAMS: + * delay: none + * return: none + *---------------------------------------------------------------------------- + * PURPOSE: + * Interrupt manages the DREADY Signal From RF Module + *---------------------------------------------------------------------------- + * EXAMPLE: + *---------------------------------------------------------------------------- + * NOTE: + *---------------------------------------------------------------------------- + * REQUIREMENTS: + *****************************************************************************/ + +void it_INT0(void) interrupt IRQ_INT0 +{ + spi_ready = 1; +} + + Property changes on: firmware/fuxusb/branches/usb_cleanup/spi/spi_task.c ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:keywords + Id Name: svn:eol-style + native Added: firmware/fuxusb/branches/usb_cleanup/spi/spi_task.h =================================================================== --- firmware/fuxusb/branches/usb_cleanup/spi/spi_task.h (rev 0) +++ firmware/fuxusb/branches/usb_cleanup/spi/spi_task.h 2008-05-05 10:48:26 UTC (rev 1101) @@ -0,0 +1,50 @@ +/*C************************************************************************** +* NAME: spi_task.h +*---------------------------------------------------------------------------- +* Copyright (c) 2006 C2me. +*---------------------------------------------------------------------------- +* RELEASE: c5131-usb-RF Dongle +* REVISION: 1.3 +*---------------------------------------------------------------------------- +* PURPOSE: +* +*****************************************************************************/ + +#ifndef _SPITASK_H_ +#define _SPITASK_H_ + +/*_____ I N C L U D E S ____________________________________________________*/ +... [truncated message content] |
From: Paul_R <c2m...@c2...> - 2008-05-05 08:34:44
|
Author: Paul_R Date: 2008-05-05 10:34:42 +0200 (Mon, 05 May 2008) New Revision: 1100 Added: firmware/fuxusb/branches/usb_cleanup/ Log: * Added a new branch (usb_cleanup). This branch will be used to clean, reorganize and modularise the code. Copied: firmware/fuxusb/branches/usb_cleanup (from rev 1099, firmware/fuxusb/branches/0.3) |
From: eFfeM <c2m...@c2...> - 2008-05-04 20:42:41
|
Author: eFfeM Date: 2008-05-04 22:42:43 +0200 (Sun, 04 May 2008) New Revision: 1099 Modified: software_suite_v2/middleware/tuxdriver/trunk/src/tux_cmd_parser.c software_suite_v2/middleware/tuxdriver/trunk/src/tux_types.h Log: intermediate commit for the new parser code (fully functional) Modified: software_suite_v2/middleware/tuxdriver/trunk/src/tux_cmd_parser.c =================================================================== --- software_suite_v2/middleware/tuxdriver/trunk/src/tux_cmd_parser.c 2008-05-04 19:01:13 UTC (rev 1098) +++ software_suite_v2/middleware/tuxdriver/trunk/src/tux_cmd_parser.c 2008-05-04 20:42:43 UTC (rev 1099) @@ -777,18 +777,46 @@ it is a valid command when executing the command does not need to be parsed any more but can be executed directly + +todo: +define data structure for parameters +write data to parameters +some functions do not have a check for correctness +(reading effect_type and final_state); +add execute function +remove old code (cmd param in struct, old parsing code etc) */ + /** * */ static TuxDrvError -parse_tux_audio_command(const char *cmd_str, delay_cmd_t *cmd) +parse_tux_audio_command(tokens_t tokens, delay_cmd_t *cmd) { TuxDrvError ret = E_TUXDRV_INVALIDCOMMAND; - char *p; - int len; + if (strcmp(tokens[2], "CHANNEL_GENERAL") == 0) + { + cmd->sub_command = CHANNEL_GENERAL; + ret = E_TUXDRV_NOERROR; + } + else if (strcmp(tokens[2], "CHANNEL_TTS") == 0) + { + cmd->sub_command = CHANNEL_TTS; + ret = E_TUXDRV_NOERROR; + } + else if (strcmp(tokens[2], "MUTE") == 0) + { + bool value; + + cmd->sub_command = MUTE; + if (str_to_bool(tokens[3], &value)) + { + // write to struct + ret = E_TUXDRV_NOERROR; + } + } return ret; } @@ -796,12 +824,53 @@ * */ static TuxDrvError -parse_tux_eyes_command(const char *cmd_str, delay_cmd_t *cmd) +parse_tux_eyes_command(tokens_t tokens, delay_cmd_t *cmd) { TuxDrvError ret = E_TUXDRV_INVALIDCOMMAND; - char *p; - int len; + if (strcmp(tokens[2], "CLOSE") == 0) + { + cmd->sub_command = CLOSE; + ret = E_TUXDRV_NOERROR; + } + else if (strcmp(tokens[2], "OFF") == 0) + { + cmd->sub_command = OFF; + ret = E_TUXDRV_NOERROR; + } + else if (strcmp(tokens[2], "ON") == 0) + { + unsigned char counter; + + cmd->sub_command = ON; + if (str_to_uint8(tokens[3], &counter)) + { + unsigned char final_state; + + final_state = tux_movement_conststr_to_val(tokens[4]); + // write to struct + ret = E_TUXDRV_NOERROR; + } + } + else if (strcmp(tokens[2], "ON_DURING") == 0) + { + float timeout = 0; + + cmd->sub_command = ON_DURING; + if (str_to_float(tokens[3], &timeout)) + { + unsigned char final_state; + + final_state = tux_movement_conststr_to_val(tokens[4]); + // write to struct + ret = E_TUXDRV_NOERROR; + } + } + else if (strcmp(tokens[2], "OPEN") == 0) + { + cmd->sub_command = OPEN; + ret = E_TUXDRV_NOERROR; + } return ret; } @@ -809,12 +878,34 @@ * */ static TuxDrvError -parse_tux_ir_command(const char *cmd_str, delay_cmd_t *cmd) +parse_tux_ir_command(tokens_t tokens, delay_cmd_t *cmd) { TuxDrvError ret = E_TUXDRV_INVALIDCOMMAND; - char *p; - int len; + if (strcmp(tokens[2], "ON") == 0) + { + cmd->sub_command = ON; + ret = E_TUXDRV_NOERROR; + } + else if (strcmp(tokens[2], "OFF") == 0) + { + cmd->sub_command = OFF; + ret = E_TUXDRV_NOERROR; + } + else if (strcmp(tokens[2], "SEND") == 0) + { + cmd->sub_command = SEND; + unsigned char address; + unsigned char command; + + // write to struct + if (str_to_uint8(tokens[3], &address) && + str_to_uint8(tokens[4], &command)) + { + ret = E_TUXDRV_NOERROR; + } + } + return ret; } @@ -822,12 +913,72 @@ * */ static TuxDrvError -parse_tux_led_command(const char *cmd_str, delay_cmd_t *cmd) +parse_tux_led_command(tokens_t tokens, delay_cmd_t *cmd) { TuxDrvError ret = E_TUXDRV_INVALIDCOMMAND; - char *p; - int len; + leds_t leds; + leds = conststr_to_ledval(tokens[3]); // check if ok + if (strcmp(tokens[2], "BLINK") == 0) + { + unsigned char pulse_count; + float pulse_period; + + cmd->sub_command = BLINK; + if (str_to_uint8(tokens[4], &pulse_count) && + str_to_float(tokens[5], &pulse_period)) + { + ret = E_TUXDRV_NOERROR; + } + } + else if (strcmp(tokens[2], "OFF") == 0) + { + cmd->sub_command = OFF; + ret = E_TUXDRV_NOERROR; + } + else if (strcmp(tokens[2], "ON") == 0) + { + cmd->sub_command = ON; + ret = E_TUXDRV_NOERROR; + } + else if (strcmp(tokens[2], "PULSE") == 0) + { + float min_intensity; + float max_intensity; + unsigned char pulse_count; + float pulse_period; + unsigned char effect_type; + float effect_speed; + unsigned char effect_step; + + cmd->sub_command = PULSE; + effect_type = conststr_to_effectval(tokens[8]); + if (str_to_float(tokens[4], &min_intensity) && + str_to_float(tokens[5], &max_intensity) && + str_to_uint8(tokens[6], &pulse_count) && + str_to_float(tokens[7], &pulse_period) && + str_to_float(tokens[9], &effect_speed) && + str_to_uint8(tokens[10], &effect_step)) + { + ret = E_TUXDRV_NOERROR; + } + } + else if (strcmp(tokens[2], "SET") == 0) + { + float intensity; + unsigned char effect_type; + float effect_speed; + unsigned char effect_step; + + cmd->sub_command = SET; + effect_type = conststr_to_effectval(tokens[5]); + if (str_to_float(tokens[4], &intensity) && + str_to_float(tokens[6], &effect_speed) && + str_to_uint8(tokens[7], &effect_step)) + { + ret = E_TUXDRV_NOERROR; + } + } return ret; } @@ -835,12 +986,53 @@ * */ static TuxDrvError -parse_tux_mouth_command(const char *cmd_str, delay_cmd_t *cmd) +parse_tux_mouth_command(tokens_t tokens, delay_cmd_t *cmd) { TuxDrvError ret = E_TUXDRV_INVALIDCOMMAND; - char *p; - int len; + if (strcmp(tokens[2], "CLOSE") == 0) + { + cmd->sub_command = CLOSE; + ret = E_TUXDRV_NOERROR; + } + else if (strcmp(tokens[2], "OFF") == 0) + { + cmd->sub_command = OFF; + ret = E_TUXDRV_NOERROR; + } + else if (strcmp(tokens[2], "ON") == 0) + { + unsigned char counter; + + cmd->sub_command = ON; + if (str_to_uint8(tokens[3], &counter)) + { + unsigned char final_state; + + final_state = tux_movement_conststr_to_val(tokens[4]); + // write to struct + ret = E_TUXDRV_NOERROR; + } + } + else if (strcmp(tokens[2], "ON_DURING") == 0) + { + float timeout = 0; + + cmd->sub_command = ON_DURING; + if (str_to_float(tokens[3], &timeout)) + { + unsigned char final_state; + + final_state = tux_movement_conststr_to_val(tokens[4]); + // write to struct + ret = E_TUXDRV_NOERROR; + } + } + else if (strcmp(tokens[2], "OPEN") == 0) + { + cmd->sub_command = SET; + ret = E_TUXDRV_NOERROR; + } return ret; } @@ -848,12 +1040,22 @@ * */ static TuxDrvError -parse_tux_sound_flash_command(const char *cmd_str, delay_cmd_t *cmd) +parse_tux_sound_flash_command(tokens_t tokens, delay_cmd_t *cmd) { TuxDrvError ret = E_TUXDRV_INVALIDCOMMAND; - char *p; - int len; + if (strcmp(tokens[2], "PLAY") == 0) + { + unsigned char track_num = 1; + float volume = 0; + + cmd->sub_command = PLAY; + if (str_to_uint8(tokens[3], &track_num) && + str_to_float(tokens[4], &volume)) + { + ret = E_TUXDRV_NOERROR; + } + } return ret; } @@ -861,12 +1063,65 @@ * */ static TuxDrvError -parse_tux_spinning_command(const char *cmd_str, delay_cmd_t *cmd) +parse_tux_spinning_command(tokens_t tokens, delay_cmd_t *cmd) { TuxDrvError ret = E_TUXDRV_INVALIDCOMMAND; - char *p; - int len; + if (strcmp(tokens[2], "LEFT_ON") == 0) + { + unsigned char speed; + + cmd->sub_command = LEFT_ON; + if (str_to_uint8(tokens[3], &speed)) + { + ret = E_TUXDRV_NOERROR; + } + } + else if (strcmp(tokens[2], "LEFT_ON_DURING") == 0) + { + float timeout; + + cmd->sub_command = LEFT_ON_DURING; + if (str_to_float(tokens[3], &timeout)) + { + ret = E_TUXDRV_NOERROR; + } + } + else if (strcmp(tokens[2], "RIGHT_ON") == 0) + { + unsigned char speed; + + cmd->sub_command = RIGHT_ON; + if (str_to_uint8(tokens[3], &speed)) + { + ret = E_TUXDRV_NOERROR; + } + } + else if (strcmp(tokens[2], "RIGHT_ON_DURING") == 0) + { + float timeout; + + cmd->sub_command = RIGHT_ON_DURING; + if (str_to_float(tokens[3], &timeout)) + { + ret = E_TUXDRV_NOERROR; + } + } + else if (strcmp(tokens[2], "OFF") == 0) + { + cmd->sub_command = OFF; + ret = E_TUXDRV_NOERROR; + } + else if (strcmp(tokens[2], "SPEED") == 0) + { + unsigned char speed; + + cmd->sub_command = SPEED; + if (str_to_uint8(tokens[3], &speed)) + { + ret = E_TUXDRV_NOERROR; + } + } return ret; } @@ -874,12 +1129,65 @@ * */ static TuxDrvError -parse_tux_wings_command(const char *cmd_str, delay_cmd_t *cmd) +parse_tux_wings_command(tokens_t tokens, delay_cmd_t *cmd) { TuxDrvError ret = E_TUXDRV_INVALIDCOMMAND; - char *p; - int len; + if (strcmp(tokens[2], "DOWN") == 0) + { + cmd->sub_command = DOWN; + ret = E_TUXDRV_NOERROR; + } + else if (strcmp(tokens[2], "OFF") == 0) + { + cmd->sub_command = OFF; + ret = E_TUXDRV_NOERROR; + } + else if (strcmp(tokens[2], "ON") == 0) + { + unsigned char counter; + + cmd->sub_command = ON; + if (str_to_uint8(tokens[3], &counter)) + { + unsigned char final_state; + + final_state = tux_movement_conststr_to_val(tokens[4]); + // write to struct + ret = E_TUXDRV_NOERROR; + } + } + else if (strcmp(tokens[2], "ON_DURING") == 0) + { + float timeout = 0; + + cmd->sub_command = ON_DURING; + if (str_to_float(tokens[3], &timeout)) + { + unsigned char final_state; + + final_state = tux_movement_conststr_to_val(tokens[4]); + // write to struct + ret = E_TUXDRV_NOERROR; + } + cmd->sub_command = ON_DURING; + ret = E_TUXDRV_NOERROR; + } + else if (strcmp(tokens[2], "UP") == 0) + { + cmd->sub_command = UP; + ret = E_TUXDRV_NOERROR; + } + else if (strcmp(tokens[2], "SPEED") == 0) + { + unsigned char speed; + + cmd->sub_command = SPEED; + if (str_to_uint8(tokens[3], &speed)) + { + ret = E_TUXDRV_NOERROR; + } + } return ret; } @@ -887,54 +1195,49 @@ * */ static TuxDrvError -parse_tux_command(const char *cmd_str, delay_cmd_t *cmd) +parse_tux_command(tokens_t tokens, delay_cmd_t *cmd) { TuxDrvError ret = E_TUXDRV_INVALIDCOMMAND; - char *p; - int len; - p = strchr(cmd_str, ':'); - len = p - cmd_str; - - if (strncmp(cmd_str, "AUDIO", len) == 0) + if (strcmp(tokens[1], "AUDIO") == 0) { cmd->command = AUDIO; - ret = parse_tux_audio_command(p, cmd); + ret = parse_tux_audio_command(tokens, cmd); } - else if (strncmp(cmd_str, "EYES", len) == 0) + else if (strcmp(tokens[1], "EYES") == 0) { cmd->command = EYES; - ret = parse_tux_eyes_command(p, cmd); + ret = parse_tux_eyes_command(tokens, cmd); } - else if (strncmp(cmd_str, "IR", len) == 0) + else if (strcmp(tokens[1], "IR") == 0) { cmd->command = IR; - ret = parse_tux_ir_command(p, cmd); + ret = parse_tux_ir_command(tokens, cmd); } - else if (strncmp(cmd_str, "LED", len) == 0) + else if (strcmp(tokens[1], "LED") == 0) { cmd->command = LED; - ret = parse_tux_led_command(p, cmd); + ret = parse_tux_led_command(tokens, cmd); } - else if (strncmp(cmd_str, "MOUTH", len) == 0) + else if (strcmp(tokens[1], "MOUTH") == 0) { cmd->command = MOUTH; - ret = parse_tux_mouth_command(p, cmd); + ret = parse_tux_mouth_command(tokens, cmd); } - else if (strncmp(cmd_str, "SOUND_FLASH", len) == 0) + else if (strcmp(tokens[1], "SOUND_FLASH") == 0) { cmd->command = SOUND_FLASH; - ret = parse_tux_sound_flash_command(p, cmd); + ret = parse_tux_sound_flash_command(tokens, cmd); } - else if (strncmp(cmd_str, "SPINNING", len) == 0) + else if (strcmp(tokens[1], "SPINNING") == 0) { cmd->command = SPINNING; - ret = parse_tux_spinning_command(p, cmd); + ret = parse_tux_spinning_command(tokens, cmd); } - else if (strncmp(cmd_str, "WINGS", len) == 0) + else if (strcmp(tokens[1], "WINGS") == 0) { cmd->command = WINGS; - ret = parse_tux_wings_command(p, cmd); + ret = parse_tux_wings_command(tokens, cmd); } return ret; } @@ -943,16 +1246,13 @@ * */ static TuxDrvError -parse_raw_command(const char *cmd_str, delay_cmd_t *cmd) +parse_raw_command(tokens_t tokens, delay_cmd_t *cmd) { TuxDrvError ret = E_TUXDRV_INVALIDCOMMAND; -/* - char *p; - int len; - p = strchr(cmd_str, ':'); - len = p - cmd_str; -*/ + /* + tokens [1] to tokens[6] should be hex + */ ret = E_TUXDRV_NOERROR; return ret; } @@ -964,20 +1264,28 @@ parse_command(const char *cmd_str, delay_cmd_t *cmd) { TuxDrvError ret = E_TUXDRV_INVALIDCOMMAND; - char *p; - int len; + tokens_t tokens; + int nr_tokens; + + /* If the parser is not enabled then fail */ + if (!cmd_parser_enable) + { + return E_TUXDRV_PARSERISDISABLED; + } + + log_debug("Parse command : [%s]", cmd_str); + memset(&tokens, 0, sizeof(tokens_t)); + nr_tokens = tux_cmd_parser_get_tokens(cmd_str, &tokens, 32, ":,"); - p = strchr(cmd_str, ':'); - len = p - cmd_str; - if (strncmp(cmd_str, "TUX_CMD", len) == 0) + if (strcmp(tokens[0], "TUX_CMD") == 0) { cmd->command_group = TUX_CMD; - ret = parse_tux_command(p, cmd); + ret = parse_tux_command(tokens, cmd); } - else if (strncmp(cmd_str, "RAW_CMD", len) == 0) + else if (strcmp(tokens[0], "RAW_CMD") == 0) { cmd->command_group = RAW_CMD; - ret = parse_raw_command(p, cmd); + ret = parse_raw_command(tokens, cmd); } return ret; } @@ -996,7 +1304,7 @@ { if (!strcmp(stack->cmd_list[i].cmd, "")) { - parse_command(cmd_str, &(stack->cmd_list[i])); + //parse_command(cmd_str, &(stack->cmd_list[i])); strcpy(stack->cmd_list[i].cmd, cmd_str); stack->cmd_list[i].timeout = delay + curtime; ret = E_TUXDRV_NOERROR; Modified: software_suite_v2/middleware/tuxdriver/trunk/src/tux_types.h =================================================================== --- software_suite_v2/middleware/tuxdriver/trunk/src/tux_types.h 2008-05-04 19:01:13 UTC (rev 1098) +++ software_suite_v2/middleware/tuxdriver/trunk/src/tux_types.h 2008-05-04 20:42:43 UTC (rev 1099) @@ -21,6 +21,8 @@ #ifndef _TUX_TYPES_H_ #define _TUX_TYPES_H_ +#include "tux_leds.h" + typedef unsigned char data_frame[4]; typedef unsigned char raw_frame[5]; @@ -29,7 +31,7 @@ typedef enum { TUX_CMD, RAW_CMD -} tux_command_group; +} tux_command_group_t; typedef enum { AUDIO, @@ -40,21 +42,111 @@ SOUND_FLASH, SPINNING, WINGS -} tux_command; +} tux_command_t; typedef enum { - xON, // to be completed -} tux_sub_command; + BLINK, + CHANNEL_GENERAL, + CHANNEL_TTS, + CLOSE, + DOWN, + LEFT_ON, + LEFT_ON_DURING, + MUTE, + OFF, + ON, + ON_DURING, + OPEN, + PLAY, + PULSE, + RIGHT_ON, + RIGHT_ON_DURING, + SEND, + SET, + SPEED, + UP +} tux_sub_command_t; +typedef enum { + CLOSED, + NDEF, + OPENED +} state_t; + +typedef struct { + bool muteflag; +} audio_parameters_t; + +typedef struct { + unsigned char nr_movements; + state_t state; + float duration; +} eyes_parameters_t; + +typedef struct { + unsigned char address; + unsigned char command; +} ir_parameters_t; + +typedef struct { + leds_t leds; + unsigned char nr_blinks; + float duration; + float intensity; + float min_intensity; + float max_intensity; + unsigned char pulse_count; + float pulse_period; + // effect type + float effect_speed; + unsigned char effect_step; +} led_parameters_t; + +typedef struct { + unsigned char nr_movements; + state_t state; +} mouth_parameters_t; + +typedef struct { + unsigned char track; + float volume; +} sound_flash_parameters_t; + +typedef struct { + unsigned char nr_qturns; + float duration; + unsigned char speed; +} spinning_parameters_t; + +typedef struct { + unsigned char nr_movements; + state_t state; +} wings_parameters_t; + +typedef struct { + unsigned char raw[5]; +} raw_parameters_t; + /* this struct is still under development plan is to split cmd into various fields (making it typed) */ typedef struct { double timeout; - tux_command_group command_group; - tux_command command; - tux_sub_command sub_command; + tux_command_group_t command_group; + tux_command_t command; + tux_sub_command_t sub_command; + union { + audio_parameters_t audio_parameters; + eyes_parameters_t eyes_parameters; + ir_parameters_t ir_parameters; + led_parameters_t led_parameters; + mouth_parameters_t mouth_parameters; + sound_flash_parameters_t sound_flash_parameters; + spinning_parameters_t spinning_parameters; + wings_parameters_t wings_parameters; + raw_parameters_t raw_parameters; + } parameters; char cmd[CMDSIZE]; } delay_cmd_t; |
From: eFfeM <c2m...@c2...> - 2008-05-04 19:01:09
|
Author: eFfeM Date: 2008-05-04 21:01:13 +0200 (Sun, 04 May 2008) New Revision: 1098 Modified: software_suite_v2/middleware/tuxdriver/trunk/src/tux_leds.c Log: changed enum value to avoid conflicts with parser enum values Modified: software_suite_v2/middleware/tuxdriver/trunk/src/tux_leds.c =================================================================== --- software_suite_v2/middleware/tuxdriver/trunk/src/tux_leds.c 2008-05-04 10:39:10 UTC (rev 1097) +++ software_suite_v2/middleware/tuxdriver/trunk/src/tux_leds.c 2008-05-04 19:01:13 UTC (rev 1098) @@ -31,13 +31,13 @@ typedef enum { - ON, - OFF, - CHANGING, + LED_ON, + LED_OFF, + LED_CHANGING, } led_state_t; -static led_state_t left_led_state = OFF; -static led_state_t right_led_state = OFF; +static led_state_t left_led_state = LED_OFF; +static led_state_t right_led_state = LED_OFF; static bool led_set(leds_t leds, int intensity, led_effect_t *effect); static bool led_pulse(leds_t leds, int min_intensity, int max_intensity, @@ -74,29 +74,29 @@ /* Get on / off state */ if (hw_status_table.led.left_led_intensity < 50) { - left_led_state = OFF; + left_led_state = LED_OFF; } else { - left_led_state = ON; + left_led_state = LED_ON; } /* Get changing state */ if (hw_status_table.led.effect_status.bits.left_led_fading || hw_status_table.led.effect_status.bits.left_led_pulsing) { - left_led_state = CHANGING; + left_led_state = LED_CHANGING; } /* State to string */ switch (left_led_state) { - case ON: + case LED_ON: new_left_state = STRING_VALUE_ON; break; - case OFF: + case LED_OFF: new_left_state = STRING_VALUE_OFF; break; - case CHANGING: + case LED_CHANGING: new_left_state = STRING_VALUE_CHANGING; break; } @@ -123,29 +123,29 @@ /* Get on / off state */ if (hw_status_table.led.right_led_intensity < 50) { - right_led_state = OFF; + right_led_state = LED_OFF; } else { - right_led_state = ON; + right_led_state = LED_ON; } /* Get changing state */ if (hw_status_table.led.effect_status.bits.right_led_fading || hw_status_table.led.effect_status.bits.right_led_pulsing) { - right_led_state = CHANGING; + right_led_state = LED_CHANGING; } /* State to string */ switch (right_led_state) { - case ON: + case LED_ON: new_right_state = STRING_VALUE_ON; break; - case OFF: + case LED_OFF: new_right_state = STRING_VALUE_OFF; break; - case CHANGING: + case LED_CHANGING: new_right_state = STRING_VALUE_CHANGING; break; } |
From: eFfeM <c2m...@c2...> - 2008-05-04 10:39:12
|
Author: eFfeM Date: 2008-05-04 12:39:10 +0200 (Sun, 04 May 2008) New Revision: 1097 Modified: software_suite_v2/middleware/tuxdriver/trunk/src/tux_cmd_parser.c software_suite_v2/middleware/tuxdriver/trunk/src/tux_types.h Log: updating the parser code work in progress (but still fully functional) Modified: software_suite_v2/middleware/tuxdriver/trunk/src/tux_cmd_parser.c =================================================================== --- software_suite_v2/middleware/tuxdriver/trunk/src/tux_cmd_parser.c 2008-05-03 13:10:10 UTC (rev 1096) +++ software_suite_v2/middleware/tuxdriver/trunk/src/tux_cmd_parser.c 2008-05-04 10:39:10 UTC (rev 1097) @@ -41,7 +41,6 @@ #include "tux_user_inputs.h" #include "tux_wings.h" -#define CMDSIZE 1024 #define NRCMDS 256 @@ -51,11 +50,6 @@ return E_TUXDRV_INVALIDPARAMETER; typedef struct { - double timeout; - char cmd[CMDSIZE]; -} delay_cmd_t; - -typedef struct { delay_cmd_t cmd_list[NRCMDS]; int cmd_count; } cmd_stack_t; @@ -777,7 +771,218 @@ return E_TUXDRV_INVALIDCOMMAND; } +/* +WORK IN PROGRESS +idea is to parse a command when it is inserted and put it in the queue only if +it is a valid command +when executing the command does not need to be parsed any more but can be +executed directly +*/ + /** + * + */ +static TuxDrvError +parse_tux_audio_command(const char *cmd_str, delay_cmd_t *cmd) +{ + TuxDrvError ret = E_TUXDRV_INVALIDCOMMAND; + char *p; + int len; + + return ret; +} + +/** + * + */ +static TuxDrvError +parse_tux_eyes_command(const char *cmd_str, delay_cmd_t *cmd) +{ + TuxDrvError ret = E_TUXDRV_INVALIDCOMMAND; + char *p; + int len; + + return ret; +} + +/** + * + */ +static TuxDrvError +parse_tux_ir_command(const char *cmd_str, delay_cmd_t *cmd) +{ + TuxDrvError ret = E_TUXDRV_INVALIDCOMMAND; + char *p; + int len; + + return ret; +} + +/** + * + */ +static TuxDrvError +parse_tux_led_command(const char *cmd_str, delay_cmd_t *cmd) +{ + TuxDrvError ret = E_TUXDRV_INVALIDCOMMAND; + char *p; + int len; + + return ret; +} + +/** + * + */ +static TuxDrvError +parse_tux_mouth_command(const char *cmd_str, delay_cmd_t *cmd) +{ + TuxDrvError ret = E_TUXDRV_INVALIDCOMMAND; + char *p; + int len; + + return ret; +} + +/** + * + */ +static TuxDrvError +parse_tux_sound_flash_command(const char *cmd_str, delay_cmd_t *cmd) +{ + TuxDrvError ret = E_TUXDRV_INVALIDCOMMAND; + char *p; + int len; + + return ret; +} + +/** + * + */ +static TuxDrvError +parse_tux_spinning_command(const char *cmd_str, delay_cmd_t *cmd) +{ + TuxDrvError ret = E_TUXDRV_INVALIDCOMMAND; + char *p; + int len; + + return ret; +} + +/** + * + */ +static TuxDrvError +parse_tux_wings_command(const char *cmd_str, delay_cmd_t *cmd) +{ + TuxDrvError ret = E_TUXDRV_INVALIDCOMMAND; + char *p; + int len; + + return ret; +} + +/** + * + */ +static TuxDrvError +parse_tux_command(const char *cmd_str, delay_cmd_t *cmd) +{ + TuxDrvError ret = E_TUXDRV_INVALIDCOMMAND; + char *p; + int len; + + p = strchr(cmd_str, ':'); + len = p - cmd_str; + + if (strncmp(cmd_str, "AUDIO", len) == 0) + { + cmd->command = AUDIO; + ret = parse_tux_audio_command(p, cmd); + } + else if (strncmp(cmd_str, "EYES", len) == 0) + { + cmd->command = EYES; + ret = parse_tux_eyes_command(p, cmd); + } + else if (strncmp(cmd_str, "IR", len) == 0) + { + cmd->command = IR; + ret = parse_tux_ir_command(p, cmd); + } + else if (strncmp(cmd_str, "LED", len) == 0) + { + cmd->command = LED; + ret = parse_tux_led_command(p, cmd); + } + else if (strncmp(cmd_str, "MOUTH", len) == 0) + { + cmd->command = MOUTH; + ret = parse_tux_mouth_command(p, cmd); + } + else if (strncmp(cmd_str, "SOUND_FLASH", len) == 0) + { + cmd->command = SOUND_FLASH; + ret = parse_tux_sound_flash_command(p, cmd); + } + else if (strncmp(cmd_str, "SPINNING", len) == 0) + { + cmd->command = SPINNING; + ret = parse_tux_spinning_command(p, cmd); + } + else if (strncmp(cmd_str, "WINGS", len) == 0) + { + cmd->command = WINGS; + ret = parse_tux_wings_command(p, cmd); + } + return ret; +} + +/** + * + */ +static TuxDrvError +parse_raw_command(const char *cmd_str, delay_cmd_t *cmd) +{ + TuxDrvError ret = E_TUXDRV_INVALIDCOMMAND; +/* + char *p; + int len; + + p = strchr(cmd_str, ':'); + len = p - cmd_str; +*/ + ret = E_TUXDRV_NOERROR; + return ret; +} + +/** + * + */ +static TuxDrvError +parse_command(const char *cmd_str, delay_cmd_t *cmd) +{ + TuxDrvError ret = E_TUXDRV_INVALIDCOMMAND; + char *p; + int len; + + p = strchr(cmd_str, ':'); + len = p - cmd_str; + if (strncmp(cmd_str, "TUX_CMD", len) == 0) + { + cmd->command_group = TUX_CMD; + ret = parse_tux_command(p, cmd); + } + else if (strncmp(cmd_str, "RAW_CMD", len) == 0) + { + cmd->command_group = RAW_CMD; + ret = parse_raw_command(p, cmd); + } + return ret; +} + +/** * */ static TuxDrvError @@ -791,6 +996,7 @@ { if (!strcmp(stack->cmd_list[i].cmd, "")) { + parse_command(cmd_str, &(stack->cmd_list[i])); strcpy(stack->cmd_list[i].cmd, cmd_str); stack->cmd_list[i].timeout = delay + curtime; ret = E_TUXDRV_NOERROR; Modified: software_suite_v2/middleware/tuxdriver/trunk/src/tux_types.h =================================================================== --- software_suite_v2/middleware/tuxdriver/trunk/src/tux_types.h 2008-05-03 13:10:10 UTC (rev 1096) +++ software_suite_v2/middleware/tuxdriver/trunk/src/tux_types.h 2008-05-04 10:39:10 UTC (rev 1097) @@ -24,4 +24,38 @@ typedef unsigned char data_frame[4]; typedef unsigned char raw_frame[5]; +#define CMDSIZE 1024 + +typedef enum { + TUX_CMD, + RAW_CMD +} tux_command_group; + +typedef enum { + AUDIO, + EYES, + IR, + LED, + MOUTH, + SOUND_FLASH, + SPINNING, + WINGS +} tux_command; + +typedef enum { + xON, // to be completed +} tux_sub_command; + +/* +this struct is still under development +plan is to split cmd into various fields (making it typed) +*/ +typedef struct { + double timeout; + tux_command_group command_group; + tux_command command; + tux_sub_command sub_command; + char cmd[CMDSIZE]; +} delay_cmd_t; + #endif /* _TUX_TYPES_H_ */ |
From: remi <c2m...@c2...> - 2008-05-03 13:10:11
|
Author: remi Date: 2008-05-03 15:10:10 +0200 (Sat, 03 May 2008) New Revision: 1096 Modified: software_suite_v2/middleware/tuxdriver/trunk/AUTHORS Log: updated the AUTHORS file. Modified: software_suite_v2/middleware/tuxdriver/trunk/AUTHORS =================================================================== --- software_suite_v2/middleware/tuxdriver/trunk/AUTHORS 2008-05-03 10:07:16 UTC (rev 1095) +++ software_suite_v2/middleware/tuxdriver/trunk/AUTHORS 2008-05-03 13:10:10 UTC (rev 1096) @@ -1,10 +1,9 @@ tux_driver was written by: Remi Jocaille <rem...@c2...> + Frans Meulenbroeks aka eFfeM Contributors: David Bourgeois <da...@ja...> Paul Rathgeb <pau...@c2...> - Frans Meulenbroeks aka eFfeM - |
From: eFfeM <c2m...@c2...> - 2008-05-03 10:07:12
|
Author: eFfeM Date: 2008-05-03 12:07:16 +0200 (Sat, 03 May 2008) New Revision: 1095 Modified: software_suite_v2/middleware/tuxdriver/trunk/src/tux_hid_unix.c software_suite_v2/middleware/tuxdriver/trunk/src/tux_hid_unix.h software_suite_v2/middleware/tuxdriver/trunk/src/tux_hid_win32.c software_suite_v2/middleware/tuxdriver/trunk/src/tux_hid_win32.h Log: added const Modified: software_suite_v2/middleware/tuxdriver/trunk/src/tux_hid_unix.c =================================================================== --- software_suite_v2/middleware/tuxdriver/trunk/src/tux_hid_unix.c 2008-05-03 10:03:36 UTC (rev 1094) +++ software_suite_v2/middleware/tuxdriver/trunk/src/tux_hid_unix.c 2008-05-03 10:07:16 UTC (rev 1095) @@ -42,7 +42,7 @@ static struct hiddev_report_info rinfo_out; static bool -find_dongle_from_path(char *path, int vendor_id, int product_id) +find_dongle_from_path(const char *path, int vendor_id, int product_id) { DIR* dir; struct dirent *dinfo; @@ -117,7 +117,7 @@ } bool LIBLOCAL -tux_hid_write(int size, char *buffer) +tux_hid_write(int size, const char *buffer) { int i; int err; Modified: software_suite_v2/middleware/tuxdriver/trunk/src/tux_hid_unix.h =================================================================== --- software_suite_v2/middleware/tuxdriver/trunk/src/tux_hid_unix.h 2008-05-03 10:03:36 UTC (rev 1094) +++ software_suite_v2/middleware/tuxdriver/trunk/src/tux_hid_unix.h 2008-05-03 10:07:16 UTC (rev 1095) @@ -29,7 +29,7 @@ extern bool tux_hid_capture(int vendor_id, int product_id); extern void tux_hid_release(void); -extern bool tux_hid_write(int size, char *buffer); +extern bool tux_hid_write(int size, const char *buffer); extern bool tux_hid_read(int size, char *buffer); #endif /* _TUX_HID_H_ */ Modified: software_suite_v2/middleware/tuxdriver/trunk/src/tux_hid_win32.c =================================================================== --- software_suite_v2/middleware/tuxdriver/trunk/src/tux_hid_win32.c 2008-05-03 10:03:36 UTC (rev 1094) +++ software_suite_v2/middleware/tuxdriver/trunk/src/tux_hid_win32.c 2008-05-03 10:07:16 UTC (rev 1095) @@ -143,7 +143,7 @@ } bool LIBLOCAL -tux_hid_write(int size, char *buffer) +tux_hid_write(int size, const char *buffer) { int wrt_count; char report[65] = { [0 ... 64] = 0 }; Modified: software_suite_v2/middleware/tuxdriver/trunk/src/tux_hid_win32.h =================================================================== --- software_suite_v2/middleware/tuxdriver/trunk/src/tux_hid_win32.h 2008-05-03 10:03:36 UTC (rev 1094) +++ software_suite_v2/middleware/tuxdriver/trunk/src/tux_hid_win32.h 2008-05-03 10:07:16 UTC (rev 1095) @@ -27,7 +27,7 @@ extern bool tux_hid_capture(int vendor_id, int product_id); extern void tux_hid_release(void); -extern bool tux_hid_write(int size, char *buffer); +extern bool tux_hid_write(int size, const char *buffer); extern bool tux_hid_read(int size, char *buffer); #endif /* _TUX_HID_H_ */ |
From: eFfeM <c2m...@c2...> - 2008-05-03 10:03:32
|
Author: eFfeM Date: 2008-05-03 12:03:36 +0200 (Sat, 03 May 2008) New Revision: 1094 Modified: software_suite_v2/middleware/tuxdriver/trunk/src/tux_hid_unix.c Log: ran through dos2unix to make line termination unix compliant Modified: software_suite_v2/middleware/tuxdriver/trunk/src/tux_hid_unix.c =================================================================== --- software_suite_v2/middleware/tuxdriver/trunk/src/tux_hid_unix.c 2008-05-03 10:02:16 UTC (rev 1093) +++ software_suite_v2/middleware/tuxdriver/trunk/src/tux_hid_unix.c 2008-05-03 10:03:36 UTC (rev 1094) @@ -1,23 +1,23 @@ -/* - * Tux Droid - Hid interface (only for unix) - * Copyright (C) 2008 C2ME Sa - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA - * 02111-1307, USA. - */ - +/* + * Tux Droid - Hid interface (only for unix) + * Copyright (C) 2008 C2ME Sa + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + * 02111-1307, USA. + */ + #ifndef WIN32 #include <stdlib.h> @@ -87,8 +87,8 @@ return false; } -bool LIBLOCAL -tux_hid_capture(int vendor_id, int product_id) +bool LIBLOCAL +tux_hid_capture(int vendor_id, int product_id) { /* Normal path to scan is /dev/usb */ if (find_dongle_from_path("/dev/usb", vendor_id, product_id)) @@ -116,8 +116,8 @@ } } -bool LIBLOCAL -tux_hid_write(int size, char *buffer) +bool LIBLOCAL +tux_hid_write(int size, char *buffer) { int i; int err; @@ -154,8 +154,8 @@ return true; } -bool LIBLOCAL -tux_hid_read(int size, char *buffer) +bool LIBLOCAL +tux_hid_read(int size, char *buffer) { int i; int err; @@ -194,4 +194,3 @@ } #endif /* Not WIN32 */ - |
From: eFfeM <c2m...@c2...> - 2008-05-03 10:02:11
|
Author: eFfeM Date: 2008-05-03 12:02:16 +0200 (Sat, 03 May 2008) New Revision: 1093 Modified: software_suite_v2/middleware/tuxdriver/trunk/src/tux_types.h Log: removed 2 unused types Modified: software_suite_v2/middleware/tuxdriver/trunk/src/tux_types.h =================================================================== --- software_suite_v2/middleware/tuxdriver/trunk/src/tux_types.h 2008-05-03 10:00:52 UTC (rev 1092) +++ software_suite_v2/middleware/tuxdriver/trunk/src/tux_types.h 2008-05-03 10:02:16 UTC (rev 1093) @@ -22,8 +22,6 @@ #define _TUX_TYPES_H_ typedef unsigned char data_frame[4]; -typedef unsigned char tux_frame[5]; -typedef unsigned char fux_frame[5]; typedef unsigned char raw_frame[5]; #endif /* _TUX_TYPES_H_ */ |
From: eFfeM <c2m...@c2...> - 2008-05-03 10:00:47
|
Author: eFfeM Date: 2008-05-03 12:00:52 +0200 (Sat, 03 May 2008) New Revision: 1092 Modified: software_suite_v2/middleware/tuxdriver/trunk/src/tux_usb.c Log: added a missing set of {} Modified: software_suite_v2/middleware/tuxdriver/trunk/src/tux_usb.c =================================================================== --- software_suite_v2/middleware/tuxdriver/trunk/src/tux_usb.c 2008-05-03 09:57:42 UTC (rev 1091) +++ software_suite_v2/middleware/tuxdriver/trunk/src/tux_usb.c 2008-05-03 10:00:52 UTC (rev 1092) @@ -363,7 +363,9 @@ mutex_lock(__callback_mutex); #endif if (frame_callback_function) + { frame_callback_function((unsigned char*)packet_data); + } #ifdef USE_MUTEX mutex_unlock(__callback_mutex); #endif |
From: eFfeM <c2m...@c2...> - 2008-05-03 09:57:43
|
Author: eFfeM Date: 2008-05-03 11:57:42 +0200 (Sat, 03 May 2008) New Revision: 1091 Added: software_suite_v2/middleware/tuxdriver/trunk/src/tux_types.h Modified: software_suite_v2/middleware/tuxdriver/trunk/src/tux_audio.c software_suite_v2/middleware/tuxdriver/trunk/src/tux_cmd_parser.c software_suite_v2/middleware/tuxdriver/trunk/src/tux_eyes.c software_suite_v2/middleware/tuxdriver/trunk/src/tux_id.c software_suite_v2/middleware/tuxdriver/trunk/src/tux_leds.c software_suite_v2/middleware/tuxdriver/trunk/src/tux_mouth.c software_suite_v2/middleware/tuxdriver/trunk/src/tux_movements.c software_suite_v2/middleware/tuxdriver/trunk/src/tux_pong.c software_suite_v2/middleware/tuxdriver/trunk/src/tux_sound_flash.c software_suite_v2/middleware/tuxdriver/trunk/src/tux_spinning.c software_suite_v2/middleware/tuxdriver/trunk/src/tux_usb.c software_suite_v2/middleware/tuxdriver/trunk/src/tux_user_inputs.c software_suite_v2/middleware/tuxdriver/trunk/src/tux_wings.c Log: introduced tux_types.h created type for data_frame (4 bytes) and raw frame (5 bytes) Modified: software_suite_v2/middleware/tuxdriver/trunk/src/tux_audio.c =================================================================== --- software_suite_v2/middleware/tuxdriver/trunk/src/tux_audio.c 2008-05-03 09:40:13 UTC (rev 1090) +++ software_suite_v2/middleware/tuxdriver/trunk/src/tux_audio.c 2008-05-03 09:57:42 UTC (rev 1091) @@ -20,6 +20,7 @@ #include "tux_audio.h" #include "tux_hw_cmd.h" +#include "tux_types.h" #include "tux_usb.h" /** @@ -28,8 +29,7 @@ LIBLOCAL bool tux_audio_cmd_channel_general(void) { - unsigned char frame[TUX_SEND_LENGTH - 1] = - {USB_DONGLE_AUDIO_CMD, 0, 0, 0}; + data_frame frame = {USB_DONGLE_AUDIO_CMD, 0, 0, 0}; return tux_usb_send_to_dongle(frame); } @@ -39,8 +39,7 @@ LIBLOCAL bool tux_audio_cmd_channel_tts(void) { - unsigned char frame[TUX_SEND_LENGTH - 1] = - {USB_DONGLE_AUDIO_CMD, 1, 0, 0}; + data_frame frame = {USB_DONGLE_AUDIO_CMD, 1, 0, 0}; return tux_usb_send_to_dongle(frame); } @@ -50,8 +49,7 @@ LIBLOCAL bool tux_audio_cmd_mute(bool value) { - unsigned char frame[TUX_SEND_LENGTH - 1] = - {AUDIO_MUTE_CMD, 0, 0, 0}; + data_frame frame = {AUDIO_MUTE_CMD, 0, 0, 0}; if (value) { Modified: software_suite_v2/middleware/tuxdriver/trunk/src/tux_cmd_parser.c =================================================================== --- software_suite_v2/middleware/tuxdriver/trunk/src/tux_cmd_parser.c 2008-05-03 09:40:13 UTC (rev 1090) +++ software_suite_v2/middleware/tuxdriver/trunk/src/tux_cmd_parser.c 2008-05-03 09:57:42 UTC (rev 1091) @@ -36,6 +36,7 @@ #include "tux_sound_flash.h" #include "tux_spinning.h" #include "tux_sw_status.h" +#include "tux_types.h" #include "tux_usb.h" #include "tux_user_inputs.h" #include "tux_wings.h" @@ -275,7 +276,7 @@ static bool tux_cmd_parser_parse_raw_cmd(tokens_t tokens, int nr_tokens) { - unsigned char data[TUX_SEND_LENGTH] = {0, 0, 0, 0, 0}; + raw_frame data = {0, 0, 0, 0}; int r = 0; int i; Modified: software_suite_v2/middleware/tuxdriver/trunk/src/tux_eyes.c =================================================================== --- software_suite_v2/middleware/tuxdriver/trunk/src/tux_eyes.c 2008-05-03 09:40:13 UTC (rev 1090) +++ software_suite_v2/middleware/tuxdriver/trunk/src/tux_eyes.c 2008-05-03 09:57:42 UTC (rev 1091) @@ -27,6 +27,7 @@ #include "tux_misc.h" #include "tux_movements.h" #include "tux_sw_status.h" +#include "tux_types.h" #include "tux_usb.h" /** @@ -97,7 +98,7 @@ tux_eyes_cmd_on_during(float timeout, unsigned char final_state) { bool ret; - unsigned char frame[TUX_SEND_LENGTH - 1] = {EYES_BLINK_CMD, 0, 0, 0}; + data_frame frame = {EYES_BLINK_CMD, 0, 0, 0}; /* Short movements */ if (timeout < 0.3) Modified: software_suite_v2/middleware/tuxdriver/trunk/src/tux_id.c =================================================================== --- software_suite_v2/middleware/tuxdriver/trunk/src/tux_id.c 2008-05-03 09:40:13 UTC (rev 1090) +++ software_suite_v2/middleware/tuxdriver/trunk/src/tux_id.c 2008-05-03 09:57:42 UTC (rev 1091) @@ -25,6 +25,7 @@ #include "tux_hw_status.h" #include "tux_hw_cmd.h" #include "tux_misc.h" +#include "tux_types.h" #include "tux_usb.h" LIBLOCAL id_descriptor_t id_desc; @@ -65,7 +66,7 @@ LIBLOCAL void tux_id_get_descriptor(void) { - unsigned char frame[TUX_SEND_LENGTH - 1] = + data_frame frame = { USB_DONGLE_CONNECTION_CMD, USB_TUX_CONNECTION_ID_REQUEST, 0, 0}; @@ -79,7 +80,7 @@ LIBLOCAL bool tux_id_cmd_disconnect_from_tux(void) { - unsigned char frame[TUX_SEND_LENGTH - 1] = + data_frame frame = { USB_DONGLE_CONNECTION_CMD, USB_TUX_CONNECTION_DISCONNECT, 0, 0}; Modified: software_suite_v2/middleware/tuxdriver/trunk/src/tux_leds.c =================================================================== --- software_suite_v2/middleware/tuxdriver/trunk/src/tux_leds.c 2008-05-03 09:40:13 UTC (rev 1090) +++ software_suite_v2/middleware/tuxdriver/trunk/src/tux_leds.c 2008-05-03 09:57:42 UTC (rev 1091) @@ -26,6 +26,7 @@ #include "tux_hw_status.h" #include "tux_leds.h" #include "tux_sw_status.h" +#include "tux_types.h" #include "tux_usb.h" typedef enum @@ -188,7 +189,7 @@ config_fading(leds_t leds, float fading_delay) { int loops = fading_delay / FW_MAIN_LOOP_DELAY; - unsigned char frame[TUX_SEND_LENGTH - 1] = {0, 0, 0, 0}; + data_frame frame = {0, 0, 0, 0}; /* Can't go infinitely fast. */ if (loops == 0) @@ -242,7 +243,7 @@ static int config_gradient(leds_t leds, int delta, float gradient_delay) { - unsigned char frame[TUX_SEND_LENGTH - 1] = {0, 0, 0, 0}; + data_frame frame = {0, 0, 0, 0}; /* Preconditions. */ delta = bound_to_range(delta, 1, 255); @@ -279,7 +280,7 @@ int right_intensity_delta, led_effect_t *effect) { bool ret = false; - unsigned char frame[TUX_SEND_LENGTH - 1] = {0, 0, 0, 0}; + data_frame frame = {0, 0, 0, 0}; switch(effect->type) { @@ -473,7 +474,7 @@ */ static bool led_set(leds_t leds, int intensity, led_effect_t *effect) { - unsigned char frame[TUX_SEND_LENGTH - 1] = {0, 0, 0, 0}; + data_frame frame = {0, 0, 0, 0}; int left_intensity_delta, right_intensity_delta; bool ret; @@ -524,7 +525,7 @@ led_pulse(leds_t leds, int min_intensity, int max_intensity, int toggle_count, float pulse_period, led_effect_t *effect) { - unsigned char frame[TUX_SEND_LENGTH - 1] = {0, 0, 0, 0}; + data_frame frame = {0, 0, 0, 0}; bool ret; /* Pulse width or duration of the pulse, in hardware loops. The pulse * period is twice that number. */ Modified: software_suite_v2/middleware/tuxdriver/trunk/src/tux_mouth.c =================================================================== --- software_suite_v2/middleware/tuxdriver/trunk/src/tux_mouth.c 2008-05-03 09:40:13 UTC (rev 1090) +++ software_suite_v2/middleware/tuxdriver/trunk/src/tux_mouth.c 2008-05-03 09:57:42 UTC (rev 1091) @@ -27,6 +27,7 @@ #include "tux_mouth.h" #include "tux_movements.h" #include "tux_sw_status.h" +#include "tux_types.h" #include "tux_usb.h" /** @@ -97,7 +98,7 @@ tux_mouth_cmd_on_during(float timeout, unsigned char final_state) { bool ret; - unsigned char frame[TUX_SEND_LENGTH - 1] = {MOUTH_MOVE_CMD, 0, 0, 0}; + data_frame frame = {MOUTH_MOVE_CMD, 0, 0, 0}; /* Short movements */ if (timeout < 0.3) Modified: software_suite_v2/middleware/tuxdriver/trunk/src/tux_movements.c =================================================================== --- software_suite_v2/middleware/tuxdriver/trunk/src/tux_movements.c 2008-05-03 09:40:13 UTC (rev 1090) +++ software_suite_v2/middleware/tuxdriver/trunk/src/tux_movements.c 2008-05-03 09:57:42 UTC (rev 1091) @@ -24,6 +24,7 @@ #include "tux_hw_status.h" #include "tux_movements.h" #include "tux_sw_status.h" +#include "tux_types.h" #include "tux_usb.h" /* @@ -207,7 +208,7 @@ LIBLOCAL void single_movement(char motor, char final_state) { - unsigned char frame[TUX_SEND_LENGTH - 1] = {0, 0, 0, 0}; + data_frame frame = {0, 0, 0, 0}; switch (motor) { @@ -331,7 +332,7 @@ float timeout, move_speed_t speed, move_final_state_t final_state, bool refresh) { - unsigned char frame[TUX_SEND_LENGTH - 1] = {0, 0, 0, 0}; + data_frame frame = {0, 0, 0, 0}; int value; bool ret = false; char type = 0; Modified: software_suite_v2/middleware/tuxdriver/trunk/src/tux_pong.c =================================================================== --- software_suite_v2/middleware/tuxdriver/trunk/src/tux_pong.c 2008-05-03 09:40:13 UTC (rev 1090) +++ software_suite_v2/middleware/tuxdriver/trunk/src/tux_pong.c 2008-05-03 09:57:42 UTC (rev 1091) @@ -22,6 +22,7 @@ #include "tux_hw_cmd.h" #include "tux_pong.h" #include "tux_sw_status.h" +#include "tux_types.h" #include "tux_usb.h" #define STACK_SIZE 10 @@ -105,8 +106,7 @@ tux_pong_get(void) { static unsigned char get_count = 0; - const unsigned char frame[TUX_SEND_LENGTH - 1] = - { TUX_PONG_PING_CMD, 200, 0, 0}; + data_frame frame = { TUX_PONG_PING_CMD, 200, 0, 0}; get_count++; Modified: software_suite_v2/middleware/tuxdriver/trunk/src/tux_sound_flash.c =================================================================== --- software_suite_v2/middleware/tuxdriver/trunk/src/tux_sound_flash.c 2008-05-03 09:40:13 UTC (rev 1090) +++ software_suite_v2/middleware/tuxdriver/trunk/src/tux_sound_flash.c 2008-05-03 09:57:42 UTC (rev 1091) @@ -30,6 +30,7 @@ #include "tux_leds.h" #include "tux_sw_status.h" #include "tux_sound_flash.h" +#include "tux_types.h" #include "tux_usb.h" LIBLOCAL sound_flash_descriptor_t sound_flash_desc; @@ -290,7 +291,7 @@ LIBLOCAL bool tux_sound_flash_cmd_play(unsigned char track_num, float vol) { - unsigned char frame[TUX_SEND_LENGTH - 1] = {PLAY_SOUND_CMD, 0, 0, 0}; + data_frame frame = {PLAY_SOUND_CMD, 0, 0, 0}; unsigned char vol2 = 0; if (vol < 0.0) @@ -620,7 +621,7 @@ { bool rf_state = false; float full_time_sec = 0.0; - unsigned char frame[TUX_SEND_LENGTH - 1] = {0, 0, 0, 0}; + data_frame frame = {0, 0, 0, 0}; unsigned char curr_track_for_event = 0; /* Check fux connection and radio connection */ Modified: software_suite_v2/middleware/tuxdriver/trunk/src/tux_spinning.c =================================================================== --- software_suite_v2/middleware/tuxdriver/trunk/src/tux_spinning.c 2008-05-03 09:40:13 UTC (rev 1090) +++ software_suite_v2/middleware/tuxdriver/trunk/src/tux_spinning.c 2008-05-03 09:57:42 UTC (rev 1091) @@ -26,6 +26,7 @@ #include "tux_movements.h" #include "tux_spinning.h" #include "tux_sw_status.h" +#include "tux_types.h" #include "tux_usb.h" /** @@ -128,7 +129,7 @@ move_body_part_t movement) { bool ret; - unsigned char frame[TUX_SEND_LENGTH - 1] = {cmd, 0, 5, 0}; + data_frame frame = {cmd, 0, 5, 0}; /* Short movements */ if (timeout < 0.3) Added: software_suite_v2/middleware/tuxdriver/trunk/src/tux_types.h =================================================================== --- software_suite_v2/middleware/tuxdriver/trunk/src/tux_types.h (rev 0) +++ software_suite_v2/middleware/tuxdriver/trunk/src/tux_types.h 2008-05-03 09:57:42 UTC (rev 1091) @@ -0,0 +1,29 @@ +/* + * Tux Droid - tux types + * Copyright (C) 2008 C2ME Sa + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + * 02111-1307, USA. + */ + +#ifndef _TUX_TYPES_H_ +#define _TUX_TYPES_H_ + +typedef unsigned char data_frame[4]; +typedef unsigned char tux_frame[5]; +typedef unsigned char fux_frame[5]; +typedef unsigned char raw_frame[5]; + +#endif /* _TUX_TYPES_H_ */ Modified: software_suite_v2/middleware/tuxdriver/trunk/src/tux_usb.c =================================================================== --- software_suite_v2/middleware/tuxdriver/trunk/src/tux_usb.c 2008-05-03 09:40:13 UTC (rev 1090) +++ software_suite_v2/middleware/tuxdriver/trunk/src/tux_usb.c 2008-05-03 09:57:42 UTC (rev 1091) @@ -27,6 +27,7 @@ #else # include "tux_hid_unix.h" #endif +#include "tux_types.h" #include "tux_usb.h" #ifdef USE_MUTEX @@ -586,8 +587,7 @@ LIBLOCAL bool tux_usb_send_to_tux(const unsigned char* data) { - unsigned char frame[TUX_SEND_LENGTH] = {0, data[0], data[1], - data[2], data[3]}; + raw_frame frame = {0, data[0], data[1], data[2], data[3]}; return tux_usb_send_raw(frame); } @@ -599,8 +599,7 @@ LIBLOCAL bool tux_usb_send_to_dongle(const unsigned char* data) { - unsigned char frame[TUX_SEND_LENGTH] = {1, data[0], data[1], - data[2], data[3]}; + raw_frame frame = {1, data[0], data[1], data[2], data[3]}; return tux_usb_send_raw(frame); } Modified: software_suite_v2/middleware/tuxdriver/trunk/src/tux_user_inputs.c =================================================================== --- software_suite_v2/middleware/tuxdriver/trunk/src/tux_user_inputs.c 2008-05-03 09:40:13 UTC (rev 1090) +++ software_suite_v2/middleware/tuxdriver/trunk/src/tux_user_inputs.c 2008-05-03 09:57:42 UTC (rev 1091) @@ -23,6 +23,7 @@ #include "tux_hw_cmd.h" #include "tux_hw_status.h" #include "tux_sw_status.h" +#include "tux_types.h" #include "tux_usb.h" #include "tux_user_inputs.h" @@ -340,7 +341,7 @@ LIBLOCAL bool tux_user_inputs_cmd_ir_on(void) { - unsigned char frame[TUX_SEND_LENGTH - 1] = {TURN_IR_ON_CMD, 0, 0, 0}; + data_frame frame = {TURN_IR_ON_CMD, 0, 0, 0}; return tux_usb_send_to_tux(frame); } @@ -351,7 +352,7 @@ LIBLOCAL bool tux_user_inputs_cmd_ir_off(void) { - unsigned char frame[TUX_SEND_LENGTH - 1] = {TURN_IR_OFF_CMD, 0, 0, 0}; + data_frame frame = {TURN_IR_OFF_CMD, 0, 0, 0}; return tux_usb_send_to_tux(frame); } @@ -362,7 +363,7 @@ LIBLOCAL bool tux_user_inputs_cmd_ir_send(unsigned char address, unsigned char command) { - unsigned char frame[TUX_SEND_LENGTH - 1] = {IR_SEND_RC5_CMD, 0, 0, 0}; + data_frame frame = {IR_SEND_RC5_CMD, 0, 0, 0}; frame[1] = address; frame[2] = command; Modified: software_suite_v2/middleware/tuxdriver/trunk/src/tux_wings.c =================================================================== --- software_suite_v2/middleware/tuxdriver/trunk/src/tux_wings.c 2008-05-03 09:40:13 UTC (rev 1090) +++ software_suite_v2/middleware/tuxdriver/trunk/src/tux_wings.c 2008-05-03 09:57:42 UTC (rev 1091) @@ -25,6 +25,7 @@ #include "tux_hw_cmd.h" #include "tux_movements.h" #include "tux_sw_status.h" +#include "tux_types.h" #include "tux_usb.h" #include "tux_wings.h" @@ -99,7 +100,7 @@ tux_wings_cmd_on_during(float timeout, unsigned char final_state) { bool ret; - unsigned char frame[TUX_SEND_LENGTH - 1] = {WINGS_WAVE_CMD, 0, 5, 0}; + data_frame frame = {WINGS_WAVE_CMD, 0, 5, 0}; /* Short movements */ if (timeout < 0.3) |
From: eFfeM <c2m...@c2...> - 2008-05-03 09:40:09
|
Author: eFfeM Date: 2008-05-03 11:40:13 +0200 (Sat, 03 May 2008) New Revision: 1090 Modified: software_suite_v2/middleware/tuxdriver/trunk/src/tux_descriptor.c software_suite_v2/middleware/tuxdriver/trunk/src/tux_firmware.c software_suite_v2/middleware/tuxdriver/trunk/src/tux_firmware.h software_suite_v2/middleware/tuxdriver/trunk/src/tux_id.c software_suite_v2/middleware/tuxdriver/trunk/src/tux_id.h software_suite_v2/middleware/tuxdriver/trunk/src/tux_sound_flash.c software_suite_v2/middleware/tuxdriver/trunk/src/tux_sound_flash.h Log: changed descriptor outputting all dump_descriptor functions now assume that they can write to the beginning of the string given as argument and return a pointer to the end of the string This avoids having to seek to the end of the string every time (with strlen or strcat) Modified: software_suite_v2/middleware/tuxdriver/trunk/src/tux_descriptor.c =================================================================== --- software_suite_v2/middleware/tuxdriver/trunk/src/tux_descriptor.c 2008-05-03 09:28:35 UTC (rev 1089) +++ software_suite_v2/middleware/tuxdriver/trunk/src/tux_descriptor.c 2008-05-03 09:40:13 UTC (rev 1090) @@ -57,19 +57,22 @@ LIBLOCAL void tux_descriptor_dump(void) { - char descriptor[4096] = ""; + char descriptor[4096]; + char *p; /* points to the end of the string */ FILE *desc_file; - strcpy(descriptor, "Tux droid descriptor\n--------------------\n\n"); + p = descriptor; + strcpy(p, "Tux droid descriptor\n--------------------\n\n"); + p = p + strlen(p); /* Firmware descriptors */ - tux_firmware_dump_descriptor(descriptor); + p = tux_firmware_dump_descriptor(p); /* Sound flash descriptor */ - tux_sound_flash_dump_descriptor(descriptor); + p = tux_sound_flash_dump_descriptor(p); /* ID connection descriptor */ - tux_id_dump_descriptor(descriptor); + p = tux_id_dump_descriptor(p); desc_file = fopen(DESCRIPTOR_FILE_PATH, "w"); Modified: software_suite_v2/middleware/tuxdriver/trunk/src/tux_firmware.c =================================================================== --- software_suite_v2/middleware/tuxdriver/trunk/src/tux_firmware.c 2008-05-03 09:28:35 UTC (rev 1089) +++ software_suite_v2/middleware/tuxdriver/trunk/src/tux_firmware.c 2008-05-03 09:40:13 UTC (rev 1090) @@ -223,11 +223,10 @@ /** * */ -LIBLOCAL void -tux_firmware_dump_descriptor(char *descriptor) +LIBLOCAL char * +tux_firmware_dump_descriptor(char *p) { int i; - char *p; /* p points to the end of the string */ char *versionstring; if (firmware_release_desc.version_string[0] == '\0') @@ -239,7 +238,6 @@ versionstring = firmware_release_desc.version_string; } - p = descriptor + strlen(descriptor); /* point to the end */ p = p + sprintf(p, "- Firmwares\n" " - %s : \t[%s]\n", @@ -253,7 +251,7 @@ p = dump_descriptor_of_cpu(p, &firmwares_desc[i]); } - return; + return p; } /** Modified: software_suite_v2/middleware/tuxdriver/trunk/src/tux_firmware.h =================================================================== --- software_suite_v2/middleware/tuxdriver/trunk/src/tux_firmware.h 2008-05-03 09:28:35 UTC (rev 1089) +++ software_suite_v2/middleware/tuxdriver/trunk/src/tux_firmware.h 2008-05-03 09:40:13 UTC (rev 1090) @@ -89,7 +89,7 @@ extern char knowed_tuxrf_symbolic_version[VERSION_STRING_LENGTH]; extern void tux_firmware_init_descriptor(void); -extern void tux_firmware_dump_descriptor(char* descriptor); +extern char *tux_firmware_dump_descriptor(char* descriptor); extern void tux_firmware_update_version(void); extern void tux_firmware_update_revision(void); extern void tux_firmware_update_author(void); Modified: software_suite_v2/middleware/tuxdriver/trunk/src/tux_id.c =================================================================== --- software_suite_v2/middleware/tuxdriver/trunk/src/tux_id.c 2008-05-03 09:28:35 UTC (rev 1089) +++ software_suite_v2/middleware/tuxdriver/trunk/src/tux_id.c 2008-05-03 09:40:13 UTC (rev 1090) @@ -41,16 +41,12 @@ /** * */ -LIBLOCAL void -tux_id_dump_descriptor(char *descriptor) +LIBLOCAL char * +tux_id_dump_descriptor(char *p) { - char *p; - - p = descriptor + strlen(descriptor); /* point to the end of the string */ - - sprintf(p, "- ID connection\n - number : \t[%d]\n", id_desc.number); + p = p + sprintf(p, "- ID connection\n - number : \t[%d]\n", id_desc.number); - return; + return p; } /** Modified: software_suite_v2/middleware/tuxdriver/trunk/src/tux_id.h =================================================================== --- software_suite_v2/middleware/tuxdriver/trunk/src/tux_id.h 2008-05-03 09:28:35 UTC (rev 1089) +++ software_suite_v2/middleware/tuxdriver/trunk/src/tux_id.h 2008-05-03 09:40:13 UTC (rev 1090) @@ -29,7 +29,7 @@ extern id_descriptor_t id_desc; extern void tux_id_init_descriptor(void); -extern void tux_id_dump_descriptor(char *descriptor); +extern char *tux_id_dump_descriptor(char *descriptor); extern void tux_id_update_number(void); extern void tux_id_get_descriptor(void); extern bool tux_id_cmd_disconnect_from_tux(void); Modified: software_suite_v2/middleware/tuxdriver/trunk/src/tux_sound_flash.c =================================================================== --- software_suite_v2/middleware/tuxdriver/trunk/src/tux_sound_flash.c 2008-05-03 09:28:35 UTC (rev 1089) +++ software_suite_v2/middleware/tuxdriver/trunk/src/tux_sound_flash.c 2008-05-03 09:40:13 UTC (rev 1090) @@ -89,15 +89,10 @@ /** * Dump the sound flash descriptor part. */ -LIBLOCAL void -tux_sound_flash_dump_descriptor(char *descriptor) +LIBLOCAL char * +tux_sound_flash_dump_descriptor(char *p) { - char *p; - - p = descriptor + strlen(descriptor); /* point to the end of the string */ - - - sprintf(p, + p = p + sprintf(p, "- Sound flash\n" " Number of sounds : %d\n" " Last used block : %d\n" @@ -107,7 +102,7 @@ sound_flash_desc.available_record_time ); - return; + return p; } /** Modified: software_suite_v2/middleware/tuxdriver/trunk/src/tux_sound_flash.h =================================================================== --- software_suite_v2/middleware/tuxdriver/trunk/src/tux_sound_flash.h 2008-05-03 09:28:35 UTC (rev 1089) +++ software_suite_v2/middleware/tuxdriver/trunk/src/tux_sound_flash.h 2008-05-03 09:40:13 UTC (rev 1090) @@ -37,7 +37,7 @@ extern char knowed_track_num[128]; extern void tux_sound_flash_init_descriptor(void); -extern void tux_sound_flash_dump_descriptor(char *descriptor); +extern char *tux_sound_flash_dump_descriptor(char *descriptor); extern void tux_sound_flash_update_flash_play(void); extern void tux_sound_flash_update_general_play(void); extern void tux_sound_flash_update_prog_current_track(void); |
From: eFfeM <c2m...@c2...> - 2008-05-03 09:28:33
|
Author: eFfeM Date: 2008-05-03 11:28:35 +0200 (Sat, 03 May 2008) New Revision: 1089 Modified: software_suite_v2/middleware/tuxdriver/trunk/src/tux_sw_status.c Log: improved 2 functions (same way as previous commits) Modified: software_suite_v2/middleware/tuxdriver/trunk/src/tux_sw_status.c =================================================================== --- software_suite_v2/middleware/tuxdriver/trunk/src/tux_sw_status.c 2008-05-03 09:20:10 UTC (rev 1088) +++ software_suite_v2/middleware/tuxdriver/trunk/src/tux_sw_status.c 2008-05-03 09:28:35 UTC (rev 1089) @@ -447,22 +447,16 @@ LIBLOCAL void tux_sw_status_get_all_state_str(char *state) { + char *p; + + p = state; /* p always points to the end of the string */ char tmp_state[256] = ""; - char tmp_str[256] = ""; int i; for (i = 0; i < SW_STATUS_NUMBER; i++) { tux_sw_status_get_state_str(i, tmp_state); - if (i == 0) - { - sprintf(state, "%s\n", tmp_state); - } - else - { - sprintf(tmp_str, "%s\n", tmp_state); - strcat(state, tmp_str); - } + p = p + sprintf(p, "%s\n", tmp_state); } } @@ -579,30 +573,33 @@ { int i; char status_doc[8192] = ""; - char tmp_str[256] = ""; char value_str[256] = ""; FILE *doc_file; - - strcpy(status_doc, "Tux status documentation :\n"); - strcat(status_doc, "--------------------------\n\n"); + char *p; + p = status_doc; /* point to the end of the string */ + strcpy(p, "Tux status documentation :\n" + "--------------------------\n\n"); + + p = p + strlen(p); + for (i = 0; i < SW_STATUS_NUMBER; i++) { - sprintf(tmp_str, "Status %.2d:\n", i); - strcat(status_doc, tmp_str); - sprintf(tmp_str, " ID : %d\n", i); - strcat(status_doc, tmp_str); - sprintf(tmp_str, " Name : %s\n", sw_status_table[i].name); - strcat(status_doc, tmp_str); - sprintf(tmp_str, " Value type : %s\n", - tux_sw_status_value_fmt_from_id(sw_status_table[i].value_fmt)); - strcat(status_doc, tmp_str); - sprintf(tmp_str, " Possible values : %s\n", - sw_status_table[i].value_doc); - strcat(status_doc, tmp_str); tux_sw_status_get_state_str(i, value_str); - sprintf(tmp_str, " Default state : [%s]\n\n", value_str); - strcat(status_doc, tmp_str); + p = p + sprintf(p, + "Status %.2d:\n" + " ID : %d\n" + " Name : %s\n" + " Value type : %s\n" + " Possible values : %s\n" + " Default state : [%s]\n\n", + i, + i, + sw_status_table[i].name, + tux_sw_status_value_fmt_from_id(sw_status_table[i].value_fmt), + sw_status_table[i].value_doc, + value_str + ); } doc_file = fopen(STATUS_DOC_FILE_PATH, "w"); |
From: eFfeM <c2m...@c2...> - 2008-05-03 09:20:05
|
Author: eFfeM Date: 2008-05-03 11:20:10 +0200 (Sat, 03 May 2008) New Revision: 1088 Modified: software_suite_v2/middleware/tuxdriver/trunk/src/tux_sound_flash.c Log: function tux_sound_flash_dump_descriptor: removed temp buffer, improved performance Modified: software_suite_v2/middleware/tuxdriver/trunk/src/tux_sound_flash.c =================================================================== --- software_suite_v2/middleware/tuxdriver/trunk/src/tux_sound_flash.c 2008-05-03 09:17:03 UTC (rev 1087) +++ software_suite_v2/middleware/tuxdriver/trunk/src/tux_sound_flash.c 2008-05-03 09:20:10 UTC (rev 1088) @@ -92,22 +92,21 @@ LIBLOCAL void tux_sound_flash_dump_descriptor(char *descriptor) { - char tmp_str[80] = ""; + char *p; - strcat(descriptor, "- Sound flash\n"); + p = descriptor + strlen(descriptor); /* point to the end of the string */ - sprintf(tmp_str, " Number of sounds : %d\n", - sound_flash_desc.number_of_sounds); - strcat(descriptor, tmp_str); - - sprintf(tmp_str, " Last used block : %d\n", - sound_flash_desc.flash_usage); - strcat(descriptor, tmp_str); - - sprintf(tmp_str, " Available record time (sec) : %d\n", - sound_flash_desc.available_record_time); - strcat(descriptor, tmp_str); + sprintf(p, + "- Sound flash\n" + " Number of sounds : %d\n" + " Last used block : %d\n" + " Available record time (sec) : %d\n", + sound_flash_desc.number_of_sounds, + sound_flash_desc.flash_usage, + sound_flash_desc.available_record_time + ); + return; } |
From: eFfeM <c2m...@c2...> - 2008-05-03 09:17:01
|
Author: eFfeM Date: 2008-05-03 11:17:03 +0200 (Sat, 03 May 2008) New Revision: 1087 Modified: software_suite_v2/middleware/tuxdriver/trunk/src/tux_id.c Log: removed temp buffer in tux_id_dump_descriptor, improved performance Modified: software_suite_v2/middleware/tuxdriver/trunk/src/tux_id.c =================================================================== --- software_suite_v2/middleware/tuxdriver/trunk/src/tux_id.c 2008-05-03 09:13:16 UTC (rev 1086) +++ software_suite_v2/middleware/tuxdriver/trunk/src/tux_id.c 2008-05-03 09:17:03 UTC (rev 1087) @@ -44,11 +44,11 @@ LIBLOCAL void tux_id_dump_descriptor(char *descriptor) { - char tmp_str[80]; + char *p; - strcat(descriptor, "- ID connection\n"); - sprintf(tmp_str, " - number : \t[%d]\n", id_desc.number); - strcat(descriptor, tmp_str); + p = descriptor + strlen(descriptor); /* point to the end of the string */ + + sprintf(p, "- ID connection\n - number : \t[%d]\n", id_desc.number); return; } |
From: eFfeM <c2m...@c2...> - 2008-05-03 09:13:11
|
Author: eFfeM Date: 2008-05-03 11:13:16 +0200 (Sat, 03 May 2008) New Revision: 1086 Modified: software_suite_v2/middleware/tuxdriver/trunk/src/tux_firmware.c Log: reworked tux_firmware_dump_descriptor Modified: software_suite_v2/middleware/tuxdriver/trunk/src/tux_firmware.c =================================================================== --- software_suite_v2/middleware/tuxdriver/trunk/src/tux_firmware.c 2008-05-03 09:03:27 UTC (rev 1085) +++ software_suite_v2/middleware/tuxdriver/trunk/src/tux_firmware.c 2008-05-03 09:13:16 UTC (rev 1086) @@ -184,14 +184,14 @@ } /** - * + * dumps descriptor, returns pointer to the next free place */ -static void +static char * dump_descriptor_of_cpu(char *descriptor, const firmware_descriptor_t *desc) { char *p = descriptor + strlen(descriptor); - sprintf(p, + p = p + sprintf(p, " CPU id : \t\t\t%d\n" " CPU name : \t\t\t%s\n" " Version major : \t\t%d\n" @@ -217,7 +217,7 @@ desc->variation, desc->version_string ); - return; + return p; } /** @@ -226,32 +226,33 @@ LIBLOCAL void tux_firmware_dump_descriptor(char *descriptor) { - char tmp_str[80] = ""; int i; + char *p; /* p points to the end of the string */ + char *versionstring; - strcat(descriptor, "- Firmwares\n"); - if (firmware_release_desc.version_string[0] == '\0') { - sprintf(tmp_str, " - %s : \t[%s]\n", - RELEASE_STR_NAME, UNOFFICIAL_RELEASE_STR); - strcat(descriptor, tmp_str); + versionstring = UNOFFICIAL_RELEASE_STR; } else { - sprintf(tmp_str, " - %s : \t[%s]\n", - RELEASE_STR_NAME, firmware_release_desc.version_string); - strcat(descriptor, tmp_str); + versionstring = firmware_release_desc.version_string; } + p = descriptor + strlen(descriptor); /* point to the end */ + p = p + sprintf(p, + "- Firmwares\n" + " - %s : \t[%s]\n", + RELEASE_STR_NAME, + versionstring + ); + for (i = 0; i < NUMBER_OF_CPU; i++) { - sprintf(tmp_str, " - CPU %d\n", i + 1); - strcat(descriptor, tmp_str); + p = p + sprintf(p, " - CPU %d\n", i + 1); - dump_descriptor_of_cpu(descriptor, &firmwares_desc[i]); + p = dump_descriptor_of_cpu(p, &firmwares_desc[i]); } - return; } |
From: eFfeM <c2m...@c2...> - 2008-05-03 09:03:26
|
Author: eFfeM Date: 2008-05-03 11:03:27 +0200 (Sat, 03 May 2008) New Revision: 1085 Modified: software_suite_v2/middleware/tuxdriver/trunk/src/tux_firmware.c Log: rewrote dump_descriptor_of_cpu (improved efficiency & readability) Modified: software_suite_v2/middleware/tuxdriver/trunk/src/tux_firmware.c =================================================================== --- software_suite_v2/middleware/tuxdriver/trunk/src/tux_firmware.c 2008-05-02 17:34:18 UTC (rev 1084) +++ software_suite_v2/middleware/tuxdriver/trunk/src/tux_firmware.c 2008-05-03 09:03:27 UTC (rev 1085) @@ -189,45 +189,34 @@ static void dump_descriptor_of_cpu(char *descriptor, const firmware_descriptor_t *desc) { - char tmp_str[80] = ""; + char *p = descriptor + strlen(descriptor); - sprintf(tmp_str, " CPU id : \t\t\t%d\n", - desc->cpu_id); - strcat(descriptor, tmp_str); - sprintf(tmp_str, " CPU name : \t\t\t%s\n", - cpu_id_to_name(desc->cpu_id)); - strcat(descriptor, tmp_str); - sprintf(tmp_str, " Version major : \t\t%d\n", - desc->version_major); - strcat(descriptor, tmp_str); - sprintf(tmp_str, " Version minor : \t\t%d\n", - desc->version_minor); - strcat(descriptor, tmp_str); - sprintf(tmp_str, " Version update : \t\t%d\n", - desc->version_update); - strcat(descriptor, tmp_str); - sprintf(tmp_str, " Revision : \t\t\t%d\n", - desc->revision); - strcat(descriptor, tmp_str); - sprintf(tmp_str, " Released : \t\t\t%s\n", - desc->release ? "True" : "False"); - strcat(descriptor, tmp_str); - sprintf(tmp_str, " Local modification : \t%s\n", - desc->local_modification ? "True" : "False"); - strcat(descriptor, tmp_str); - sprintf(tmp_str, " Mixed revisions : \t\t%s\n", - desc->mixed_revisions ? "True" : "False"); - strcat(descriptor, tmp_str); - sprintf(tmp_str, " Author id : \t\t%d\n", - desc->author); - strcat(descriptor, tmp_str); - sprintf(tmp_str, " Variation : \t\t%d\n", - desc->variation); - strcat(descriptor, tmp_str); - sprintf(tmp_str, " Symbolic version : \t\t[%s]\n", - desc->version_string); - strcat(descriptor, tmp_str); - + sprintf(p, + " CPU id : \t\t\t%d\n" + " CPU name : \t\t\t%s\n" + " Version major : \t\t%d\n" + " Version minor : \t\t%d\n" + " Version update : \t\t%d\n" + " Revision : \t\t\t%d\n" + " Released : \t\t\t%s\n" + " Local modification : \t%s\n" + " Mixed revisions : \t\t%s\n" + " Author id : \t\t%d\n" + " Variation : \t\t%d\n" + " Symbolic version : \t\t[%s]\n", + desc->cpu_id, + cpu_id_to_name(desc->cpu_id), + desc->version_major, + desc->version_minor, + desc->version_update, + desc->revision, + desc->release ? "True" : "False", + desc->local_modification ? "True" : "False", + desc->mixed_revisions ? "True" : "False", + desc->author, + desc->variation, + desc->version_string + ); return; } |
From: eFfeM <c2m...@c2...> - 2008-05-02 17:34:17
|
Author: eFfeM Date: 2008-05-02 19:34:18 +0200 (Fri, 02 May 2008) New Revision: 1084 Modified: software_suite_v2/middleware/tuxdriver/trunk/test/descriptor.txt software_suite_v2/middleware/tuxdriver/trunk/test/main.c software_suite_v2/middleware/tuxdriver/trunk/test/test_macro.txt Log: fixed typo, improved layout Modified: software_suite_v2/middleware/tuxdriver/trunk/test/descriptor.txt =================================================================== --- software_suite_v2/middleware/tuxdriver/trunk/test/descriptor.txt 2008-05-02 14:50:32 UTC (rev 1083) +++ software_suite_v2/middleware/tuxdriver/trunk/test/descriptor.txt 2008-05-02 17:34:18 UTC (rev 1084) @@ -1,77 +1,77 @@ -Tux droid descriptor --------------------- - -- Firmwares - - Global release package : [Unofficial package] - - CPU 1 - CPU id : 0 - CPU name : Tuxcore - Version major : 0 - Version minor : 4 - Version update : 0 - Revision : 938 - Released : True - Local modification : False - Mixed revisions : False - Author id : 0 - Variation : 0 - Symbolic version : [Tuxcore_0.4.0] - - CPU 2 - CPU id : 1 - CPU name : Tuxaudio - Version major : 0 - Version minor : 4 - Version update : 0 - Revision : 764 - Released : True - Local modification : False - Mixed revisions : False - Author id : 0 - Variation : 0 - Symbolic version : [Tuxaudio_0.4.0] - - CPU 3 - CPU id : 2 - CPU name : TuxRF - Version major : 0 - Version minor : 3 - Version update : 0 - Revision : 681 - Released : True - Local modification : False - Mixed revisions : False - Author id : 0 - Variation : 0 - Symbolic version : [TuxRF_0.3.0] - - CPU 4 - CPU id : 3 - CPU name : FuxRF - Version major : 0 - Version minor : 3 - Version update : 0 - Revision : 681 - Released : True - Local modification : False - Mixed revisions : False - Author id : 0 - Variation : 0 - Symbolic version : [FuxRF_0.3.0] - - CPU 5 - CPU id : 4 - CPU name : FuxUSB - Version major : 0 - Version minor : 3 - Version update : 1 - Revision : 0 - Released : True - Local modification : False - Mixed revisions : False - Author id : 0 - Variation : 0 - Symbolic version : [FuxUSB_0.3.1] -- Sound flash - Number of sounds : 0 - Last used block : 0 - Available record time (sec) : 64 -- ID connection - - number : [0] - +Tux droid descriptor +-------------------- + +- Firmwares + - Global release package : [tuxdroid firmware release 0.4.0] + - CPU 1 + CPU id : 0 + CPU name : Tuxcore + Version major : 0 + Version minor : 4 + Version update : 0 + Revision : 938 + Released : True + Local modification : False + Mixed revisions : False + Author id : 0 + Variation : 0 + Symbolic version : [Tuxcore_0.4.0] + - CPU 2 + CPU id : 1 + CPU name : Tuxaudio + Version major : 0 + Version minor : 4 + Version update : 0 + Revision : 764 + Released : True + Local modification : False + Mixed revisions : False + Author id : 0 + Variation : 0 + Symbolic version : [Tuxaudio_0.4.0] + - CPU 3 + CPU id : 2 + CPU name : TuxRF + Version major : 0 + Version minor : 3 + Version update : 0 + Revision : 681 + Released : True + Local modification : False + Mixed revisions : False + Author id : 0 + Variation : 0 + Symbolic version : [TuxRF_0.3.0] + - CPU 4 + CPU id : 3 + CPU name : FuxRF + Version major : 0 + Version minor : 3 + Version update : 0 + Revision : 681 + Released : True + Local modification : False + Mixed revisions : False + Author id : 0 + Variation : 0 + Symbolic version : [FuxRF_0.3.0] + - CPU 5 + CPU id : 4 + CPU name : FuxUSB + Version major : 0 + Version minor : 4 + Version update : 0 + Revision : 0 + Released : True + Local modification : False + Mixed revisions : False + Author id : 0 + Variation : 0 + Symbolic version : [FuxUSB_0.4.0] +- Sound flash + Number of sounds : 10 + Last used block : 9 + Available record time (sec) : 59 +- ID connection + - number : [0] + Modified: software_suite_v2/middleware/tuxdriver/trunk/test/main.c =================================================================== --- software_suite_v2/middleware/tuxdriver/trunk/test/main.c 2008-05-02 14:50:32 UTC (rev 1083) +++ software_suite_v2/middleware/tuxdriver/trunk/test/main.c 2008-05-02 17:34:18 UTC (rev 1084) @@ -177,7 +177,7 @@ { fprintf(stderr, "Usage: %s [-d -s -S]\n", progname); fprintf(stderr, " -d: prints descriptor\n"); - fprintf(stderr, " -s: prints status messages except light_senser\n"); + fprintf(stderr, " -s: prints status messages except light_sensor\n"); fprintf(stderr, " -S: prints all status messages\n"); } @@ -197,13 +197,13 @@ { switch (ch) { case 'd': - print_descriptor = 1; + print_descriptor = 1; break; case 's': - print_status = 1; + print_status = 1; break; case 'S': - print_status = 2; + print_status = 2; break; case '?': default: Modified: software_suite_v2/middleware/tuxdriver/trunk/test/test_macro.txt =================================================================== --- software_suite_v2/middleware/tuxdriver/trunk/test/test_macro.txt 2008-05-02 14:50:32 UTC (rev 1083) +++ software_suite_v2/middleware/tuxdriver/trunk/test/test_macro.txt 2008-05-02 17:34:18 UTC (rev 1084) @@ -1,5 +1,7 @@ -# ----------------- Macro -------------------- # -1.0:TUX_CMD:LED:OFF:LED_BOTH -2.0:TUX_CMD:LED:SET:LED_BOTH,1.0,GRADIENT_DELTA,3.0,30 -1.0:TUX_CMD:SOUND_FLASH:PLAY:1:100 -1.0:TUX_CMD:WINGS:ON_DURING:2.0,DOWN \ No newline at end of file +# ----------------- Macro -------------------- # +1.0:TUX_CMD:LED:OFF:LED_BOTH +2.0:TUX_CMD:LED:SET:LED_BOTH,1.0,GRADIENT_DELTA,3.0,30 +1.0:TUX_CMD:SOUND_FLASH:PLAY:1:100 +1.0:TUX_CMD:WINGS:ON_DURING:2.0,DOWN +#3.0:TUX_CMD:SPINNING:LEFT_ON:5 +#5.0:TUX_CMD:SPINNING:RIGHT_ON:5 |
From: remi <c2m...@c2...> - 2008-05-02 14:50:31
|
Author: remi Date: 2008-05-02 16:50:32 +0200 (Fri, 02 May 2008) New Revision: 1083 Modified: software_suite_v2/middleware/tuxdriver/trunk/include/tux_driver.py software_suite_v2/middleware/tuxdriver/trunk/unix/Makefile Log: changed the shared library name (for unix) to libtuxdriver.so updated the python header. Modified: software_suite_v2/middleware/tuxdriver/trunk/include/tux_driver.py =================================================================== --- software_suite_v2/middleware/tuxdriver/trunk/include/tux_driver.py 2008-05-02 14:46:30 UTC (rev 1082) +++ software_suite_v2/middleware/tuxdriver/trunk/include/tux_driver.py 2008-05-02 14:50:32 UTC (rev 1083) @@ -375,7 +375,7 @@ if os.name == 'nt': tux_drv = TuxDrv('../win32/libtuxdriver.dll') else: - tux_drv = TuxDrv('../unix/tux_driver.so') + tux_drv = TuxDrv('../unix/libtuxdriver.so') tux_drv.SetLogLevel(LOG_LEVEL_INFO) tux_drv.SetStatusCallback(on_status_event) Modified: software_suite_v2/middleware/tuxdriver/trunk/unix/Makefile =================================================================== --- software_suite_v2/middleware/tuxdriver/trunk/unix/Makefile 2008-05-02 14:46:30 UTC (rev 1082) +++ software_suite_v2/middleware/tuxdriver/trunk/unix/Makefile 2008-05-02 14:50:32 UTC (rev 1083) @@ -3,11 +3,11 @@ ## Copyright (c) 2005 by Parinya Thipchart ################################################################# -PROJECT = tux_driver.so +PROJECT = libtuxdriver.so CC = "/usr/bin/gcc" OBJ_DIR = ../obj OUTPUT_DIR = ../unix -TARGET = tux_driver.so +TARGET = libtuxdriver.so C_INCLUDE_DIRS = -I"../../../../../../../usr/local/include" C_PREPROC = CFLAGS = -pipe -std=gnu99 -DUSB_DEBUG0 -DSHOW_EVENTS -DNO_MOTORS_CHECK -DNO_THREAD -Wall -g0 -O2 -fPIC @@ -61,17 +61,17 @@ .PHONY: clean cleanall cleanall: - @echo Deleting intermediate files for 'tux_driver.so' + @echo Deleting intermediate files for 'libtuxdriver.so' -@rm -rf "$(OBJ_DIR)" -@rm -rf "$(OUTPUT_DIR)/$(TARGET)" -@rmdir "$(OUTPUT_DIR)" clean: - @echo Deleting intermediate files for 'tux_driver.so' + @echo Deleting intermediate files for 'libtuxdriver.so' -@rm -rf "$(OBJ_DIR)" print_header: - @echo ----------Configuration: tux_driver.so---------- + @echo ----------Configuration: libtuxdriver.so---------- directories: -@if [ ! -d "$(OUTPUT_DIR)" ]; then mkdir "$(OUTPUT_DIR)"; fi |
From: remi <c2m...@c2...> - 2008-05-02 14:46:25
|
Author: remi Date: 2008-05-02 16:46:30 +0200 (Fri, 02 May 2008) New Revision: 1082 Modified: software_suite_v2/middleware/tuxdriver/trunk/include/tux_driver.pas software_suite_v2/middleware/tuxdriver/trunk/include/tux_driver.py software_suite_v2/middleware/tuxdriver/trunk/win32/Makefile software_suite_v2/middleware/tuxdriver/trunk/win32/compile.bat Log: changed the shared library name (for win32) to libtuxdriver.dll updated the python and pascal header. Modified: software_suite_v2/middleware/tuxdriver/trunk/include/tux_driver.pas =================================================================== --- software_suite_v2/middleware/tuxdriver/trunk/include/tux_driver.pas 2008-05-02 14:40:29 UTC (rev 1081) +++ software_suite_v2/middleware/tuxdriver/trunk/include/tux_driver.pas 2008-05-02 14:46:30 UTC (rev 1082) @@ -27,7 +27,7 @@ const - DLL_NAME = 'tux_driver.dll'; + DLL_NAME = 'libtuxdriver.dll'; {** * Error codes enumeration. Modified: software_suite_v2/middleware/tuxdriver/trunk/include/tux_driver.py =================================================================== --- software_suite_v2/middleware/tuxdriver/trunk/include/tux_driver.py 2008-05-02 14:40:29 UTC (rev 1081) +++ software_suite_v2/middleware/tuxdriver/trunk/include/tux_driver.py 2008-05-02 14:46:30 UTC (rev 1082) @@ -373,7 +373,7 @@ print tux_drv.GetStatusState(0) if os.name == 'nt': - tux_drv = TuxDrv('../win32/tux_driver.dll') + tux_drv = TuxDrv('../win32/libtuxdriver.dll') else: tux_drv = TuxDrv('../unix/tux_driver.so') Modified: software_suite_v2/middleware/tuxdriver/trunk/win32/Makefile =================================================================== --- software_suite_v2/middleware/tuxdriver/trunk/win32/Makefile 2008-05-02 14:40:29 UTC (rev 1081) +++ software_suite_v2/middleware/tuxdriver/trunk/win32/Makefile 2008-05-02 14:46:30 UTC (rev 1082) @@ -3,11 +3,11 @@ ## Copyright (c) 2002-2004 by Parinya Thipchart ################################################################# -PROJECT = tux_driver.dll +PROJECT = libtuxdriver.dll CC = "E:\MinGWStudio\MinGW\bin\gcc.exe" OBJ_DIR = ..\obj OUTPUT_DIR = ..\win32 -TARGET = tux_driver.dll +TARGET = libtuxdriver.dll C_INCLUDE_DIRS = -I"E:\MinGWStudio\MinGW\include\ddk" C_PREPROC = CFLAGS = -pipe -Wall -g2 -O0 @@ -68,7 +68,7 @@ .PHONY: clean cleanall cleanall: - @echo Deleting intermediate files for 'tux_driver.dll' + @echo Deleting intermediate files for 'libtuxdriver.dll' -@del $(OBJ_DIR)\*.o -@del "$(OUTPUT_DIR)\$(TARGET)" -@del "$(OBJ_DIR)\$(PROJECT).def" @@ -76,7 +76,7 @@ -@rmdir "$(OUTPUT_DIR)" clean: - @echo Deleting intermediate files for 'tux_driver.dll' + @echo Deleting intermediate files for 'libtuxdriver.dll' -@del $(OBJ_DIR)\*.o print_header: Modified: software_suite_v2/middleware/tuxdriver/trunk/win32/compile.bat =================================================================== --- software_suite_v2/middleware/tuxdriver/trunk/win32/compile.bat 2008-05-02 14:40:29 UTC (rev 1081) +++ software_suite_v2/middleware/tuxdriver/trunk/win32/compile.bat 2008-05-02 14:46:30 UTC (rev 1082) @@ -1,8 +1,7 @@ set MAKEPATH=E:\MinGWStudio\MinGW\bin\mingw32-make.exe -set OSLPATH=F:\Shared\Developpement\Boulot\tuxdroid_cross_dev\tux_driver +set OSLPATH=F:\Shared\Developpement\Boulot\svn_tuxisalive_com\software_suite_v2\middleware\tuxdriver\trunk C: %MAKEPATH% -C %OSLPATH%\win32 -f %OSLPATH%\win32\Makefile del /Q %OSLPATH%\obj\*.o -del /Q %OSLPATH%\obj\*.a cmd \ No newline at end of file |