[tuxdroid-svn] r444 - daemon/trunk/libs
Status: Beta
Brought to you by:
ks156
From: neimad <c2m...@c2...> - 2007-06-24 16:51:35
|
Author: neimad Date: 2007-06-24 18:51:33 +0200 (Sun, 24 Jun 2007) New Revision: 444 Modified: daemon/trunk/libs/USBDaemon_command_tux.c Log: * Reordered functions to avoid unnecessary prototypes. Modified: daemon/trunk/libs/USBDaemon_command_tux.c =================================================================== --- daemon/trunk/libs/USBDaemon_command_tux.c 2007-06-24 16:49:21 UTC (rev 443) +++ daemon/trunk/libs/USBDaemon_command_tux.c 2007-06-24 16:51:33 UTC (rev 444) @@ -42,14 +42,6 @@ /*_____________________ F U N C T I O N S __________________________________*/ static void tux_connection(unsigned char const data[], unsigned char result[]); -static int disconnect_from_tux(void); -static int connect_to_tux(uint16_t id); -static int id_request(uint16_t *id); -static int id_lookup(uint16_t *id); -static int change_id(uint16_t id); -static int wakeup_tux(const uint16_t id); -static int avoid_wifi_channel(int wifi_channel); -static int random_tux_connection(void); static void sub_daemon_cmd_struct(unsigned char const data[], unsigned char result[], @@ -640,173 +632,6 @@ } /** - * tux connection commands - */ -static void tux_connection(unsigned char const data[], unsigned char result[]) -{ - result[0] = data[0]; - switch (data[0]) - { - case TUX_CONNECTION_DISCONNECT: - if (disconnect_from_tux() == 0) - result[1] = TUX_CONNECTION_ACK; - else - result[1] = TUX_CONNECTION_NACK; - break; - case TUX_CONNECTION_CONNECT: - { - union_uint16_t id; - id.b[1] = data[1]; - id.b[0] = data[2]; - if (connect_to_tux(id.w) == 0) - result[1] = TUX_CONNECTION_ACK; - else - result[1] = TUX_CONNECTION_NACK; - } - break; - case TUX_CONNECTION_ID_REQUEST: - { - union_uint16_t id; - if (id_request((uint16_t *)&id) == 0) - { - result[1] = TUX_CONNECTION_ACK; - result[2] = id.b[1]; /* MSB */ - result[3] = id.b[0]; /* LSB */ - } - else - result[1] = TUX_CONNECTION_NACK; - } - break; - case TUX_CONNECTION_ID_LOOKUP: - { - union_uint16_t id; - if (id_lookup((uint16_t *)&id) == 0) - { - result[1] = TUX_CONNECTION_ACK; - result[2] = id.b[1]; /* MSB */ - result[3] = id.b[0]; /* LSB */ - } - else - result[1] = TUX_CONNECTION_NACK; - } - break; - case TUX_CONNECTION_CHANGE_ID: - { - union_uint16_t id; - id.b[0] = data[2]; /* LSB */ - id.b[1] = data[1]; /* MSB */ - if (change_id(id.w) >= 0) - result[1] = TUX_CONNECTION_ACK; - else - result[1] = TUX_CONNECTION_NACK; - } - break; - case TUX_CONNECTION_SLEEP: - if (send_usb_tux_cmd(SLEEP_CMD, 0, SLEEP_MODE, 0) == ACK_CMD_OK) - result[1] = TUX_CONNECTION_ACK; - else - result[1] = TUX_CONNECTION_NACK; - break; - case TUX_CONNECTION_WAKEUP: - { - union_uint16_t id; - id.b[0] = data[2]; /* LSB */ - id.b[1] = data[1]; /* MSB */ - if (wakeup_tux(id.w) == 0) - result[1] = TUX_CONNECTION_ACK; - else - result[1] = TUX_CONNECTION_NACK; - } - break; - case TUX_CONNECTION_RANDOM: - if (random_tux_connection() == 0) - result[1] = TUX_CONNECTION_ACK; - else - result[1] = TUX_CONNECTION_NACK; - break; - case TUX_CONNECTION_WIRELESS_CHANNEL: - if (avoid_wifi_channel(data[1]) == 0) - result[1] = TUX_CONNECTION_ACK; - else - result[1] = TUX_CONNECTION_NACK; - break; - } -} - -/************************************************************************ */ -/* tux_req_info() */ -/************************************************************************ */ -static void tux_req_info(unsigned char const data[], unsigned char result[]) -{ - result[0] = data[0]; - - if (data[0] == TUX_REQ_INFO_VERSION) - { - version_t *ver = &hw_version[data[1]]; - revision_t *rev = &hw_revision[data[1]]; - author_t *auth = &hw_author[data[1]]; - - result[1] = CPU_VER_MAJ(ver->cpu_ver_maj); - result[2] = ver->ver_minor; - result[3] = ver->ver_update; - result[4] = (unsigned char)((rev->revision & 0xFF00) >> 8); - result[5] = (unsigned char)(rev->revision & 0x00FF); - result[6] = (unsigned char)((auth->author_id & 0xFF00) >> 8); - result[7] = (unsigned char)(auth->author_id & 0x00FF); - } -} - -/************************************************************************** */ -/* TUX USB */ -/************************************************************************** */ - -/************************************************************************ */ -/* send_usb_tuxcmd() */ -/************************************************************************ */ -unsigned char send_usb_tux_cmd(unsigned char cmd, unsigned char param1, - unsigned char param2, unsigned char param3) -{ - unsigned char usb_frame[TUX_SEND_LENGTH]; - - usb_frame[0] = 0; - usb_frame[1] = cmd; - usb_frame[2] = param1; - usb_frame[3] = param2; - usb_frame[4] = param3; - return usb_send_TuxDroid(usb_frame); -} - -/************************************************************************ */ -/* send_usb_donglecmd() */ -/************************************************************************ */ -unsigned char send_usb_dongle_cmd(usb_dongle_commands_t cmd, - unsigned char param1, unsigned char param2, unsigned char param3) -{ - unsigned char data[TUX_SEND_LENGTH]; - - data[0] = USB_DONGLE_CMD; - data[1] = cmd; - data[2] = param1; - data[3] = param2; - data[4] = param3; - log_debug("USB PC->Dongle: %#x, %#x, %#x, %#x, %#x\n", data[0], data[1], - data[2], data[3], data[4]); - - return usb_write_TuxDroid(data, TUX_SEND_LENGTH); -} - -/** - * Initialize audio. - */ -void tux_audio_init(void) -{ - /* Resets audio channel selection; there are 2 audio interfaces in the - * dongle, the second is dedicated to TTS. */ - send_usb_dongle_cmd(USB_AUDIO_CMD, 0, 0, 0); - current_audio_channel = 0; -} - -/** * Disconnect from tux * * The return value only tells whether the command has been sent successfully @@ -847,25 +672,6 @@ } /** - * Connect to the first tux discovered - * - * Catch any disconnected tux, request its ID and connect to it. - * - * \return 0 if successful, -1 otherwise - */ -static int random_tux_connection(void) -{ - uint16_t id; - if (id_lookup((uint16_t *)&id) < 0) - return -1; - - if (connect_to_tux(id) < 0) - return -1; - - return 0; -} - -/** * Get the ID of tux currently connected * * \param *id pointer where the id should be returned @@ -998,6 +804,25 @@ } /** + * Connect to the first tux discovered + * + * Catch any disconnected tux, request its ID and connect to it. + * + * \return 0 if successful, -1 otherwise + */ +static int random_tux_connection(void) +{ + uint16_t id; + if (id_lookup((uint16_t *)&id) < 0) + return -1; + + if (connect_to_tux(id) < 0) + return -1; + + return 0; +} + +/** * Wake-up a tux if it's in sleep mode. * * \return 0 if successful, -1 otherwise @@ -1019,6 +844,7 @@ return -1; } + /** * Configure the RF module to avoid a given wifi channel * @@ -1054,3 +880,170 @@ else return -1; } + +/** + * tux connection commands + */ +static void tux_connection(unsigned char const data[], unsigned char result[]) +{ + result[0] = data[0]; + switch (data[0]) + { + case TUX_CONNECTION_DISCONNECT: + if (disconnect_from_tux() == 0) + result[1] = TUX_CONNECTION_ACK; + else + result[1] = TUX_CONNECTION_NACK; + break; + case TUX_CONNECTION_CONNECT: + { + union_uint16_t id; + id.b[1] = data[1]; + id.b[0] = data[2]; + if (connect_to_tux(id.w) == 0) + result[1] = TUX_CONNECTION_ACK; + else + result[1] = TUX_CONNECTION_NACK; + } + break; + case TUX_CONNECTION_ID_REQUEST: + { + union_uint16_t id; + if (id_request((uint16_t *)&id) == 0) + { + result[1] = TUX_CONNECTION_ACK; + result[2] = id.b[1]; /* MSB */ + result[3] = id.b[0]; /* LSB */ + } + else + result[1] = TUX_CONNECTION_NACK; + } + break; + case TUX_CONNECTION_ID_LOOKUP: + { + union_uint16_t id; + if (id_lookup((uint16_t *)&id) == 0) + { + result[1] = TUX_CONNECTION_ACK; + result[2] = id.b[1]; /* MSB */ + result[3] = id.b[0]; /* LSB */ + } + else + result[1] = TUX_CONNECTION_NACK; + } + break; + case TUX_CONNECTION_CHANGE_ID: + { + union_uint16_t id; + id.b[0] = data[2]; /* LSB */ + id.b[1] = data[1]; /* MSB */ + if (change_id(id.w) >= 0) + result[1] = TUX_CONNECTION_ACK; + else + result[1] = TUX_CONNECTION_NACK; + } + break; + case TUX_CONNECTION_SLEEP: + if (send_usb_tux_cmd(SLEEP_CMD, 0, SLEEP_MODE, 0) == ACK_CMD_OK) + result[1] = TUX_CONNECTION_ACK; + else + result[1] = TUX_CONNECTION_NACK; + break; + case TUX_CONNECTION_WAKEUP: + { + union_uint16_t id; + id.b[0] = data[2]; /* LSB */ + id.b[1] = data[1]; /* MSB */ + if (wakeup_tux(id.w) == 0) + result[1] = TUX_CONNECTION_ACK; + else + result[1] = TUX_CONNECTION_NACK; + } + break; + case TUX_CONNECTION_RANDOM: + if (random_tux_connection() == 0) + result[1] = TUX_CONNECTION_ACK; + else + result[1] = TUX_CONNECTION_NACK; + break; + case TUX_CONNECTION_WIRELESS_CHANNEL: + if (avoid_wifi_channel(data[1]) == 0) + result[1] = TUX_CONNECTION_ACK; + else + result[1] = TUX_CONNECTION_NACK; + break; + } +} + +/************************************************************************ */ +/* tux_req_info() */ +/************************************************************************ */ +static void tux_req_info(unsigned char const data[], unsigned char result[]) +{ + result[0] = data[0]; + + if (data[0] == TUX_REQ_INFO_VERSION) + { + version_t *ver = &hw_version[data[1]]; + revision_t *rev = &hw_revision[data[1]]; + author_t *auth = &hw_author[data[1]]; + + result[1] = CPU_VER_MAJ(ver->cpu_ver_maj); + result[2] = ver->ver_minor; + result[3] = ver->ver_update; + result[4] = (unsigned char)((rev->revision & 0xFF00) >> 8); + result[5] = (unsigned char)(rev->revision & 0x00FF); + result[6] = (unsigned char)((auth->author_id & 0xFF00) >> 8); + result[7] = (unsigned char)(auth->author_id & 0x00FF); + } +} + +/************************************************************************** */ +/* TUX USB */ +/************************************************************************** */ + +/************************************************************************ */ +/* send_usb_tuxcmd() */ +/************************************************************************ */ +unsigned char send_usb_tux_cmd(unsigned char cmd, unsigned char param1, + unsigned char param2, unsigned char param3) +{ + unsigned char usb_frame[TUX_SEND_LENGTH]; + + usb_frame[0] = 0; + usb_frame[1] = cmd; + usb_frame[2] = param1; + usb_frame[3] = param2; + usb_frame[4] = param3; + return usb_send_TuxDroid(usb_frame); +} + +/************************************************************************ */ +/* send_usb_donglecmd() */ +/************************************************************************ */ +unsigned char send_usb_dongle_cmd(usb_dongle_commands_t cmd, + unsigned char param1, unsigned char param2, unsigned char param3) +{ + unsigned char data[TUX_SEND_LENGTH]; + + data[0] = USB_DONGLE_CMD; + data[1] = cmd; + data[2] = param1; + data[3] = param2; + data[4] = param3; + log_debug("USB PC->Dongle: %#x, %#x, %#x, %#x, %#x\n", data[0], data[1], + data[2], data[3], data[4]); + + return usb_write_TuxDroid(data, TUX_SEND_LENGTH); +} + +/** + * Initialize audio. + */ +void tux_audio_init(void) +{ + /* Resets audio channel selection; there are 2 audio interfaces in the + * dongle, the second is dedicated to TTS. */ + send_usb_dongle_cmd(USB_AUDIO_CMD, 0, 0, 0); + current_audio_channel = 0; +} |