[tuxdroid-svn] r147 - daemon/trunk/libs
Status: Beta
Brought to you by:
ks156
From: jaguarondi <c2m...@c2...> - 2007-03-12 16:18:16
|
Author: jaguarondi Date: 2007-03-12 17:17:30 +0100 (Mon, 12 Mar 2007) New Revision: 147 Modified: daemon/trunk/libs/USBDaemon_command_tux.c daemon/trunk/libs/USBDaemon_command_tux.h daemon/trunk/libs/USBDaemon_globals.h daemon/trunk/libs/USBDaemon_status_table.c daemon/trunk/libs/USBDaemon_status_table.h daemon/trunk/libs/USBDaemon_tcp_server.c daemon/trunk/libs/USBDaemon_tcp_server.h daemon/trunk/libs/USBDaemon_usb_enum.c daemon/trunk/libs/USBDaemon_usb_enum.h daemon/trunk/libs/USBDaemon_usb_readWrite.c daemon/trunk/libs/USBDaemon_usb_readWrite.h Log: - CLN: patch submitted by Srikanta, it changes the code to follow the new coding guidelines published on www.tuxisalive.com. No functionality changes. Modified: daemon/trunk/libs/USBDaemon_command_tux.c =================================================================== --- daemon/trunk/libs/USBDaemon_command_tux.c 2007-03-09 15:12:39 UTC (rev 146) +++ daemon/trunk/libs/USBDaemon_command_tux.c 2007-03-12 16:17:30 UTC (rev 147) @@ -18,6 +18,7 @@ * 02111-1307, USA. */ /* $Id$ */ + /*_____________________ I N C L U D E S____________________________________ */ #include <stdio.h> #include <usb.h> @@ -32,621 +33,647 @@ // *************************************************************************** // COMMANDS FROM CLIENTS DISPATCHER // *************************************************************************** - void - commands_dispatcher( - unsigned char client_id, // Client source - unsigned char src_trame[16] // Source trame - ) +void commands_dispatcher( + unsigned char client_id, // Client source + unsigned char src_trame[16]) // Source trame +{ + unsigned char ACK_DP; // daemon processing ack + unsigned char data[12]; // data part of source trame + unsigned char result[12]; // result data to return + unsigned char tcp_trame[16];// tcp trame to send + unsigned char ack_dp_trame[16]; + unsigned char i; + unsigned char no_ack; + + + no_ack = 0; + // Cut data part of source trame + for(i = 0; i < 12; i++) { - unsigned char ACK_DP; // daemon processing ack - unsigned char data[12]; // data part of source trame - unsigned char result[12]; // result data to return - unsigned char tcp_trame[16];// tcp trame to send - unsigned char ack_dp_trame[16]; - unsigned char i; - unsigned char no_ack; - + result[i] = 0; + data[i] = src_trame[i + 4]; + } + // Make source header + tcp_trame[0] = src_trame[0]; // return source + tcp_trame[1] = src_trame[1]; // return sub source - no_ack=0; - // Cut data part of source trame - for(i=0;i<12;i++){ - result[i]=0; - data[i]=src_trame[i+4]; - } - // Make source header - tcp_trame[0]=src_trame[0]; // return source - tcp_trame[1]=src_trame[1]; // return sub source - - // -------------------- Data disencapsulation ----------------------// - ACK_DP=ACK_DP_OK; // Init ACK daemon processing - // B1 ---- : Destination - switch(src_trame[0]){ - // To Master Daemon ---------------------------------------------- - case DEST_MASTER_DAEMON: - // Not implemented - ACK_DP=ACK_DP_NI; - break; - // To Sub Daemon ------------------------------------------------- - case DEST_SUB_DAEMON: - // B3 ---- Data Type - switch(src_trame[2]){ - // Data type command - case DATA_TP_CMD: - // B4 ---- Command type - tcp_trame[2]=DATA_TP_ACK_CMD; - tcp_trame[3]=src_trame[3]; - switch(src_trame[3]){ - // Command type raw - case SUBDATA_TP_RAW: - // Not implemented - ACK_DP=ACK_DP_NI; - break; + //--------------------Data disencapsulation---------------------- // + ACK_DP = ACK_DP_OK; // Init ACK daemon processing + // B1----: Destination + switch(src_trame[0]) + { + // To Master Daemon---------------------------------------------- + case DEST_MASTER_DAEMON: + // Not implemented + ACK_DP = ACK_DP_NI; + break; + // To Sub Daemon------------------------------------------------- + case DEST_SUB_DAEMON: + // B3----Data Type + switch(src_trame[2]) + { + // Data type command + case DATA_TP_CMD: + // B4----Command type + tcp_trame[2] = DATA_TP_ACK_CMD; + tcp_trame[3] = src_trame[3]; + switch(src_trame[3]) + { + // Command type raw + case SUBDATA_TP_RAW: + // Not implemented + ACK_DP = ACK_DP_NI; + break; // Command type structured - case SUBDATA_TP_STRUCT: - sub_daemon_cmd_struct(data,result,client_id); - if(result[0]==ACK_CMD_NO_ACK) no_ack=1; - break; + case SUBDATA_TP_STRUCT: + sub_daemon_cmd_struct(data, result, client_id); + if(result[0] == ACK_CMD_NO_ACK) no_ack = 1; + break; // Unknowed command type - default: - ACK_DP=ACK_DP_UKN_SUBDATA_TP; - break; - } - break; + default: + ACK_DP = ACK_DP_UKN_SUBDATA_TP; + break; + } + break; // Data type request - case DATA_TP_REQ: - tcp_trame[2]=DATA_TP_RSP; - tcp_trame[3]=src_trame[3]; - // B4 ---- Request type - switch(src_trame[3]){ - // Request type status - case SUBDATA_TP_STATUS: - // Not implemented - ACK_DP=ACK_DP_NI; - break; + case DATA_TP_REQ: + tcp_trame[2] = DATA_TP_RSP; + tcp_trame[3] = src_trame[3]; + // B4----Request type + switch(src_trame[3]) + { + // Request type status + case SUBDATA_TP_STATUS: + // Not implemented + ACK_DP = ACK_DP_NI; + break; // Request type information - case SUBDATA_TP_INFO: - sub_daemon_req_info(data,result,client_id); - break; + case SUBDATA_TP_INFO: + sub_daemon_req_info(data, result, client_id); + break; // Unknowed request type - default: - ACK_DP=ACK_DP_UKN_SUBDATA_TP; - break; - } - break; + default: + ACK_DP = ACK_DP_UKN_SUBDATA_TP; + break; + } + break; // Unknowed data type - default: - ACK_DP=ACK_DP_UKN_DATA_TP; - break; - } - break; - // To Tux -------------------------------------------------------- - case DEST_TUX: - // TODO sub destinations - // B3 ---- Data Type - switch(src_trame[2]){ - // Data type command - case DATA_TP_CMD: - tcp_trame[2]=DATA_TP_ACK_CMD; - tcp_trame[3]=src_trame[3]; - // B4 ---- Command type - switch(src_trame[3]){ - // Command type raw - case SUBDATA_TP_RAW: - tux_cmd_raw(data,result); - break; + default: + ACK_DP = ACK_DP_UKN_DATA_TP; + break; + } + break; + // To Tux-------------------------------------------------------- + case DEST_TUX: + // TODO sub destinations + // B3----Data Type + switch(src_trame[2]) + { + // Data type command + case DATA_TP_CMD: + tcp_trame[2] = DATA_TP_ACK_CMD; + tcp_trame[3] = src_trame[3]; + // B4----Command type + switch(src_trame[3]) + { + // Command type raw + case SUBDATA_TP_RAW: + tux_cmd_raw(data, result); + break; // Command type structured - case SUBDATA_TP_STRUCT: - tux_cmd_struct(data,result); - break; + case SUBDATA_TP_STRUCT: + tux_cmd_struct(data, result); + break; // Unknowed command type - default: - ACK_DP=ACK_DP_UKN_SUBDATA_TP; - break; - } - break; + default: + ACK_DP = ACK_DP_UKN_SUBDATA_TP; + break; + } + break; // Data type request - case DATA_TP_REQ: - tcp_trame[2]=DATA_TP_RSP; - tcp_trame[3]=src_trame[3]; - // B4 ---- Request type - switch(src_trame[3]){ - // Request type status - case SUBDATA_TP_STATUS: - tux_req_status(data,result); - break; + case DATA_TP_REQ: + tcp_trame[2] = DATA_TP_RSP; + tcp_trame[3] = src_trame[3]; + // B4----Request type + switch(src_trame[3]) + { + // Request type status + case SUBDATA_TP_STATUS: + tux_req_status(data, result); + break; // Request type information - case SUBDATA_TP_INFO: - tux_req_info(data,result); - break; + case SUBDATA_TP_INFO: + tux_req_info(data, result); + break; // Unknowed request type - default: - ACK_DP=ACK_DP_UKN_SUBDATA_TP; - break; - } - break; + default: + ACK_DP = ACK_DP_UKN_SUBDATA_TP; + break; + } + break; // Unknowed data type - default: - ACK_DP=ACK_DP_UKN_DATA_TP; - break; - } - break; - // To Resource --------------------------------------------------- - case DEST_RESOURCE: - // Not implemented - ACK_DP=ACK_DP_NI; - break; - // To Client ----------------------------------------------------- - case DEST_CLIENT: - // Not implemented - ACK_DP=ACK_DP_NI; - break; - // Unknowed destination ------------------------------------------ - default: - ACK_DP=ACK_DP_UKN_DEST; - break; - } - - // Paste result treatement into tcp trame - for(i=0;i<12;i++) - tcp_trame[i+4]=result[i]; - // Send daemon processing ack to client - for(i=0;i<16;i++)ack_dp_trame[i]=0; - ack_dp_trame[0]=src_trame[0]; - ack_dp_trame[1]=src_trame[1]; - ack_dp_trame[2]=DATA_TP_ACK_DP; - ack_dp_trame[3]=src_trame[3]; - ack_dp_trame[4]=ACK_DP; - if(!no_ack){ - tcp_server_send_raw_to_client(client_id,ack_dp_trame, 16); - // Send tcp trame to client - if(ACK_DP==ACK_DP_OK){ - tcp_server_send_raw_to_client(client_id,tcp_trame, 16); + default: + ACK_DP = ACK_DP_UKN_DATA_TP; + break; } + break; + // To Resource--------------------------------------------------- + case DEST_RESOURCE: + // Not implemented + ACK_DP = ACK_DP_NI; + break; + // To Client----------------------------------------------------- + case DEST_CLIENT: + // Not implemented + ACK_DP = ACK_DP_NI; + break; + // Unknowed destination------------------------------------------ + default: + ACK_DP = ACK_DP_UKN_DEST; + break; + } + + // Paste result treatement into tcp trame + for(i = 0; i < 12; i++) + tcp_trame[i + 4] = result[i]; + // Send daemon processing ack to client + for(i = 0; i < 16; i++)ack_dp_trame[i] = 0; + ack_dp_trame[0] = src_trame[0]; + ack_dp_trame[1] = src_trame[1]; + ack_dp_trame[2] = DATA_TP_ACK_DP; + ack_dp_trame[3] = src_trame[3]; + ack_dp_trame[4] = ACK_DP; + if(!no_ack) + { + tcp_server_send_raw_to_client(client_id, ack_dp_trame, 16); + // Send tcp trame to client + if(ACK_DP == ACK_DP_OK) + { + tcp_server_send_raw_to_client(client_id, tcp_trame, 16); } } - +} + // *********************************************************************** // FOR Sub daemon // *********************************************************************** - - // ******************************************************************* - // sub_daemon_cmd_struct() - // ******************************************************************* - void - sub_daemon_cmd_struct( + +// ******************************************************************* +// sub_daemon_cmd_struct() +// ******************************************************************* +void sub_daemon_cmd_struct( unsigned char data[], unsigned char result[], int id_client - ) + ) +{ + unsigned char i; + int my_client_handle; + + switch(data[0]) { - unsigned char i; - int my_client_handle; - - switch(data[0]){ - case SUB_D_CMD_STRUC_DISCONNECT_CLIENT: - pthread_mutex_lock(&tcp_mutex); - // Byte 2 equal id client to disconnect - if (tcp_clients_handle[data[1]]!=0){ - tcp_clients_handle[data[1]]=0; - tcp_clients_count--; - printf("TCP socket : Client %d is disconnected\n",data[1]); - result[0]=ACK_CMD_OK; - }else{ // Bad id client - result[0]=ACK_CMD_KO; - } - pthread_mutex_unlock(&tcp_mutex); - break; - case SUB_D_CMD_STRUC_DISCONNECT_CLIENT_ME: - pthread_mutex_lock(&tcp_mutex); - my_client_handle=tcp_clients_handle[id_client]; - tcp_clients_handle[id_client]=0; + case SUB_D_CMD_STRUC_DISCONNECT_CLIENT: + pthread_mutex_lock(&tcp_mutex); + // Byte 2 equal id client to disconnect + if (tcp_clients_handle[data[1]] != 0) + { + tcp_clients_handle[data[1]] = 0; tcp_clients_count--; - printf("TCP socket : Client %d is disconnected\n",id_client); - close(my_client_handle); - result[0]=ACK_CMD_NO_ACK; - pthread_mutex_unlock(&tcp_mutex); - break; - case SUB_D_CMD_STRUC_KILL_DAEMON: - printf("WARNING : daemon killed by user\n"); - send_daemon_disconnected(); - result[0]=ACK_CMD_OK; - exit(0); - break; - case SUB_D_CMD_STRUC_DEFINE_CLIENT_NAME: - for(i=0;i<11;i++) - tcp_clients_name[id_client][i]=data[i+1]; - result[0]=ACK_CMD_OK; - printf("Name of client %d is %s\n",id_client,tcp_clients_name[id_client]); - break; - } + printf("TCP socket : Client %d is disconnected\n", data[1]); + result[0] = ACK_CMD_OK; + } + else + { // Bad id client + result[0] = ACK_CMD_KO; + } + pthread_mutex_unlock(&tcp_mutex); + break; + case SUB_D_CMD_STRUC_DISCONNECT_CLIENT_ME: + pthread_mutex_lock(&tcp_mutex); + my_client_handle = tcp_clients_handle[id_client]; + tcp_clients_handle[id_client] = 0; + tcp_clients_count--; + printf("TCP socket : Client %d is disconnected\n", id_client); + close(my_client_handle); + result[0] = ACK_CMD_NO_ACK; + pthread_mutex_unlock(&tcp_mutex); + break; + case SUB_D_CMD_STRUC_KILL_DAEMON: + printf("WARNING : daemon killed by user\n"); + send_daemon_disconnected(); + result[0] = ACK_CMD_OK; + exit(0); + break; + case SUB_D_CMD_STRUC_DEFINE_CLIENT_NAME: + for(i = 0; i < 11; i++) + tcp_clients_name[id_client][i] = data[i + 1]; + result[0] = ACK_CMD_OK; + printf("Name of client %d is %s\n", id_client, tcp_clients_name[id_client]); + break; } - - // *********************************************************************** - // sub_daemon_req_info() - // *********************************************************************** - void - sub_daemon_req_info( +} + +// *********************************************************************** +// sub_daemon_req_info() +// *********************************************************************** +void sub_daemon_req_info( unsigned char data[], unsigned char result[], int id_client - ) + ) +{ + unsigned char i; + + result[0] = data[0]; + switch(data[0]) { - unsigned char i; - - result[0]=data[0]; - switch(data[0]){ - case SUB_D_REQ_INFO_VERSION: - result[1]=version.major; - result[2]=version.minor; - result[3]=version.release; - break; - case SUB_D_REQ_INFO_CLIENT_COUNT: - result[1]=tcp_clients_count; - break; - case SUB_D_REQ_INFO_CLIENT_NAME: - for(i=0;i<11;i++) - result[i+1]=tcp_clients_name[data[1]][i]; - break; - case SUB_D_REQ_INFO_MY_CLIENT_ID: - result[1]=id_client; - break; - case SUB_D_REQ_INFO_PID: - result[1]=(DAEMON_PID && 0xFF00)>>8; - result[2]=(DAEMON_PID && 0x00FF); - break; - } + case SUB_D_REQ_INFO_VERSION: + result[1] = version.major; + result[2] = version.minor; + result[3] = version.release; + break; + case SUB_D_REQ_INFO_CLIENT_COUNT: + result[1] = tcp_clients_count; + break; + case SUB_D_REQ_INFO_CLIENT_NAME: + for(i = 0; i < 11; i++) + result[i + 1] = tcp_clients_name[data[1]][i]; + break; + case SUB_D_REQ_INFO_MY_CLIENT_ID: + result[1] = id_client; + break; + case SUB_D_REQ_INFO_PID: + result[1] = (DAEMON_PID && 0xFF00)>>8; + result[2] = (DAEMON_PID && 0x00FF); + break; } - +} + // *************************************************************************** // FOR Tux droid // *************************************************************************** - - // *********************************************************************** - // tux_cmd_raw() - // *********************************************************************** - void - tux_cmd_raw( + +// *********************************************************************** +// tux_cmd_raw() +// *********************************************************************** +void tux_cmd_raw( unsigned char data[], unsigned char result[] - ) - { - unsigned char usb_send[5]; - unsigned char i; - - usb_send[0]=0; - for(i=1;i<5;i++) - usb_send[i]=data[i-1]; - result[0]=usb_write_TuxDroid(usb_send); - } - - // *********************************************************************** - // tux_cmd_struct() - // *********************************************************************** - void - tux_cmd_struct( + ) +{ + unsigned char usb_send[5]; + unsigned char i; + + usb_send[0] = 0; + for(i = 1; i < 5; i++) + usb_send[i] = data[i - 1]; + result[0] = usb_write_TuxDroid(usb_send); +} + +// *********************************************************************** +// tux_cmd_struct() +// *********************************************************************** +void tux_cmd_struct( unsigned char data[], unsigned char result[] - ) + ) +{ + unsigned char ACK; + + // Command type + switch(data[0]) { - unsigned char ACK; - - // Command type - switch(data[0]){ - case TUX_CMD_STRUCT_EYES: - switch(data[1]){ - case TUX_CMD_STRUCT_SUB_ON: - ACK=send_usb_tux_cmd(BLINK_EYES_CMD,data[2],0,0); - break; - case TUX_CMD_STRUCT_SUB_OFF: - ACK=send_usb_tux_cmd(STOP_EYES_CMD,0,0,0); - break; - } - break; - case TUX_CMD_STRUCT_MOUTH: - switch(data[1]){ - case TUX_CMD_STRUCT_SUB_ON: - ACK=send_usb_tux_cmd(MOVE_MOUTH_CMD,data[2],0,0); - break; - case TUX_CMD_STRUCT_SUB_OFF: - ACK=send_usb_tux_cmd(STOP_MOUTH_CMD,0,0,0); - break; - } - break; - case TUX_CMD_STRUCT_WINGS: - switch(data[1]){ - case TUX_CMD_STRUCT_SUB_ON: - ACK=send_usb_tux_cmd(WAVE_WINGS_CMD,data[2],data[3],0); - break; - case TUX_CMD_STRUCT_SUB_OFF: - ACK=send_usb_tux_cmd(STOP_WINGS_CMD,0,0,0); - break; - } - break; - case TUX_CMD_STRUCT_SPINL: - switch(data[1]){ - case TUX_CMD_STRUCT_SUB_ON: - ACK=send_usb_tux_cmd(SPIN_LEFT_CMD,data[2],data[3],0); - break; - case TUX_CMD_STRUCT_SUB_OFF: - ACK=send_usb_tux_cmd(STOP_SPIN_CMD,0,0,0); - break; - } - break; - case TUX_CMD_STRUCT_SPINR: - switch(data[1]){ - case TUX_CMD_STRUCT_SUB_ON: - ACK=send_usb_tux_cmd(SPIN_RIGHT_CMD,data[2],data[3],0); - break; - case TUX_CMD_STRUCT_SUB_OFF: - ACK=send_usb_tux_cmd(STOP_SPIN_CMD,0,0,0); - break; - } - break; - case TUX_CMD_STRUCT_IR: - switch(data[1]){ - case TUX_CMD_STRUCT_SUB_ON: - ACK=send_usb_tux_cmd(TURN_IR_ON_CMD,0,0,0); - break; - case TUX_CMD_STRUCT_SUB_OFF: - ACK=send_usb_tux_cmd(TURN_IR_OFF_CMD,0,0,0); - break; - case TUX_CMD_STRUCT_SUB_SEND: - ACK=send_usb_tux_cmd(IR_SEND_RC5_CMD,data[2],data[3],0); - break; - } - break; - case TUX_CMD_STRUCT_LEDS: - switch(data[1]){ - case TUX_CMD_STRUCT_SUB_ON: - ACK=send_usb_tux_cmd(LED_ON_CMD,0,0,0); - break; - case TUX_CMD_STRUCT_SUB_OFF: - ACK=send_usb_tux_cmd(LED_OFF_CMD,0,0,0); - break; - case TUX_CMD_STRUCT_SUB_BLINK: - ACK=send_usb_tux_cmd(LED_BLINK_CMD,data[2],data[3],0); - break; - } - break; - case TUX_CMD_STRUCT_LEDL: - switch(data[1]){ - case TUX_CMD_STRUCT_SUB_ON: - ACK=send_usb_tux_cmd(LED_L_ON_CMD,0,0,0); - break; - case TUX_CMD_STRUCT_SUB_OFF: - ACK=send_usb_tux_cmd(LED_L_OFF_CMD,0,0,0); - break; - } - break; - case TUX_CMD_STRUCT_LEDR: - switch(data[1]){ - case TUX_CMD_STRUCT_SUB_ON: - ACK=send_usb_tux_cmd(LED_R_ON_CMD,0,0,0); - break; - case TUX_CMD_STRUCT_SUB_OFF: - ACK=send_usb_tux_cmd(LED_R_OFF_CMD,0,0,0); - break; - } - break; - case TUX_CMD_STRUCT_SOUND: - switch(data[1]){ - case TUX_CMD_STRUCT_SUB_PLAY: - ACK=send_usb_tux_cmd(PLAY_SOUND_CMD,data[2],data[3],0); - break; - case TUX_CMD_STRUCT_SUB_STORING: - ACK=send_usb_tux_cmd(STORE_SOUND_CMD,data[2],0,0); - break; - case TUX_CMD_STRUCT_SUB_STORE_INDEX: - ACK=send_usb_tux_cmd(STORE_INDEX_CMD,data[2],data[3],data[4]); - break; - case TUX_CMD_STRUCT_SUB_TEST: - ACK=send_usb_tux_cmd(TEST_SOUND_CMD,0,0,0); - break; - } - break; - case TUX_CMD_STRUCT_PING: - pong_received=0; - ACK=send_usb_tux_cmd(PING_CMD,data[2],0,0); - break; - case TUX_CMD_STRUCT_SLEEP: - switch(data[1]){ - case TUX_CMD_STRUCT_SUB_ON: - ACK=send_usb_tux_cmd(0x20,0,0,0); - break; - case TUX_CMD_STRUCT_SUB_OFF: - ACK=send_usb_tux_cmd(0x21,0,0,0); - break; - } - break; - case TUX_CMD_STRUCT_AUDIO_CHANNEL: - switch(data[1]){ - case TUX_CMD_STRUCT_SUB_CH_GENERAL: - if(current_audio_channel!=0){ - ACK=send_usb_dongle_cmd(0x02,0,0,0); - current_audio_channel=0; - }else - ACK=ACK_CMD_OK; - break; - case TUX_CMD_STRUCT_SUB_CH_TTS: - if(current_audio_channel!=1){ - ACK=send_usb_dongle_cmd(0x02,1,0,0); - current_audio_channel=1; - }else - ACK=ACK_CMD_OK; - break; - } - break; - } - result[0]=ACK; + case TUX_CMD_STRUCT_EYES: + switch(data[1]) + { + case TUX_CMD_STRUCT_SUB_ON: + ACK = send_usb_tux_cmd(BLINK_EYES_CMD, data[2], 0, 0); + break; + case TUX_CMD_STRUCT_SUB_OFF: + ACK = send_usb_tux_cmd(STOP_EYES_CMD, 0, 0, 0); + break; + } + break; + case TUX_CMD_STRUCT_MOUTH: + switch(data[1]) + { + case TUX_CMD_STRUCT_SUB_ON: + ACK = send_usb_tux_cmd(MOVE_MOUTH_CMD, data[2], 0, 0); + break; + case TUX_CMD_STRUCT_SUB_OFF: + ACK = send_usb_tux_cmd(STOP_MOUTH_CMD, 0, 0, 0); + break; + } + break; + case TUX_CMD_STRUCT_WINGS: + switch(data[1]) + { + case TUX_CMD_STRUCT_SUB_ON: + ACK = send_usb_tux_cmd(WAVE_WINGS_CMD, data[2], data[3], 0); + break; + case TUX_CMD_STRUCT_SUB_OFF: + ACK = send_usb_tux_cmd(STOP_WINGS_CMD, 0, 0, 0); + break; + } + break; + case TUX_CMD_STRUCT_SPINL: + switch(data[1]) + { + case TUX_CMD_STRUCT_SUB_ON: + ACK = send_usb_tux_cmd(SPIN_LEFT_CMD, data[2], data[3], 0); + break; + case TUX_CMD_STRUCT_SUB_OFF: + ACK = send_usb_tux_cmd(STOP_SPIN_CMD, 0, 0, 0); + break; + } + break; + case TUX_CMD_STRUCT_SPINR: + switch(data[1]) + { + case TUX_CMD_STRUCT_SUB_ON: + ACK = send_usb_tux_cmd(SPIN_RIGHT_CMD, data[2], data[3], 0); + break; + case TUX_CMD_STRUCT_SUB_OFF: + ACK = send_usb_tux_cmd(STOP_SPIN_CMD, 0, 0, 0); + break; + } + break; + case TUX_CMD_STRUCT_IR: + switch(data[1]) + { + case TUX_CMD_STRUCT_SUB_ON: + ACK = send_usb_tux_cmd(TURN_IR_ON_CMD, 0, 0, 0); + break; + case TUX_CMD_STRUCT_SUB_OFF: + ACK = send_usb_tux_cmd(TURN_IR_OFF_CMD, 0, 0, 0); + break; + case TUX_CMD_STRUCT_SUB_SEND: + ACK = send_usb_tux_cmd(IR_SEND_RC5_CMD, data[2], data[3], 0); + break; + } + break; + case TUX_CMD_STRUCT_LEDS: + switch(data[1]) + { + case TUX_CMD_STRUCT_SUB_ON: + ACK = send_usb_tux_cmd(LED_ON_CMD, 0, 0, 0); + break; + case TUX_CMD_STRUCT_SUB_OFF: + ACK = send_usb_tux_cmd(LED_OFF_CMD, 0, 0, 0); + break; + case TUX_CMD_STRUCT_SUB_BLINK: + ACK = send_usb_tux_cmd(LED_BLINK_CMD, data[2], data[3], 0); + break; + } + break; + case TUX_CMD_STRUCT_LEDL: + switch(data[1]) + { + case TUX_CMD_STRUCT_SUB_ON: + ACK = send_usb_tux_cmd(LED_L_ON_CMD, 0, 0, 0); + break; + case TUX_CMD_STRUCT_SUB_OFF: + ACK = send_usb_tux_cmd(LED_L_OFF_CMD, 0, 0, 0); + break; + } + break; + case TUX_CMD_STRUCT_LEDR: + switch(data[1]) + { + case TUX_CMD_STRUCT_SUB_ON: + ACK = send_usb_tux_cmd(LED_R_ON_CMD, 0, 0, 0); + break; + case TUX_CMD_STRUCT_SUB_OFF: + ACK = send_usb_tux_cmd(LED_R_OFF_CMD, 0, 0, 0); + break; + } + break; + case TUX_CMD_STRUCT_SOUND: + switch(data[1]) + { + case TUX_CMD_STRUCT_SUB_PLAY: + ACK = send_usb_tux_cmd(PLAY_SOUND_CMD, data[2], data[3], 0); + break; + case TUX_CMD_STRUCT_SUB_STORING: + ACK = send_usb_tux_cmd(STORE_SOUND_CMD, data[2], 0, 0); + break; + case TUX_CMD_STRUCT_SUB_STORE_INDEX: + ACK = send_usb_tux_cmd(STORE_INDEX_CMD, data[2], data[3], data[4]); + break; + case TUX_CMD_STRUCT_SUB_TEST: + ACK = send_usb_tux_cmd(TEST_SOUND_CMD, 0, 0, 0); + break; + } + break; + case TUX_CMD_STRUCT_PING: + pong_received = 0; + ACK = send_usb_tux_cmd(PING_CMD, data[2], 0, 0); + break; + case TUX_CMD_STRUCT_SLEEP: + switch(data[1]) + { + case TUX_CMD_STRUCT_SUB_ON: + ACK = send_usb_tux_cmd(0x20, 0, 0, 0); + break; + case TUX_CMD_STRUCT_SUB_OFF: + ACK = send_usb_tux_cmd(0x21, 0, 0, 0); + break; + } + break; + case TUX_CMD_STRUCT_AUDIO_CHANNEL: + switch(data[1]) + { + case TUX_CMD_STRUCT_SUB_CH_GENERAL: + if(current_audio_channel != 0) + { + ACK = send_usb_dongle_cmd(0x02, 0, 0, 0); + current_audio_channel = 0; + } + else + ACK = ACK_CMD_OK; + break; + case TUX_CMD_STRUCT_SUB_CH_TTS: + if(current_audio_channel != 1) + { + ACK = send_usb_dongle_cmd(0x02, 1, 0, 0); + current_audio_channel = 1; + } + else + ACK = ACK_CMD_OK; + break; + } + break; } - - // *********************************************************************** - // tux_req_status() - // *********************************************************************** - void - tux_req_status( + result[0] = ACK; +} + +// *********************************************************************** +// tux_req_status() +// *********************************************************************** +void tux_req_status( unsigned char data[], unsigned char result[] - ) + ) +{ + result[0] = data[0]; + switch(data[0]) { - result[0]=data[0]; - switch(data[0]){ - case DATA_STATUS_WINGS_MOTOR_BACKWARD: - if (portb.bits.PB0){result[1]=1;}else{result[1]=0;} - break; - case DATA_STATUS_SPIN_MOTOR_BACKWARD: - if (portb.bits.PB1){result[1]=1;}else{result[1]=0;} - break; - case DATA_STATUS_SPIN_MOTOR_FORWARD: - if (portb.bits.PB2){result[1]=1;}else{result[1]=0;} - break; - case DATA_STATUS_MOUTH_OPEN_POSITION: - if (portb.bits.PB3){result[1]=1;}else{result[1]=0;} - break; - case DATA_STATUS_MOUTH_CLOSED_POSITION: - if (portb.bits.PB4){result[1]=1;}else{result[1]=0;} - break; - case DATA_STATUS_HEAD_PUSH_POSITION: - if (portb.bits.PB5){result[1]=1;}else{result[1]=0;} - break; - case DATA_STATUS_CHARGER_INHIBIT_SIGNAL: - result[0]=DATA_STATUS_CHARGER_INHIBIT_SIGNAL; - if (portb.bits.PB6){result[1]=1;}else{result[1]=0;} - break; - case DATA_STATUS_WINGS_POSITION_SWITCH: - if (portc.bits.PB0){result[1]=1;}else{result[1]=0;} - break; - case DATA_STATUS_MOTOR_FOR_WINGS: - if (portc.bits.PB1){result[1]=1;}else{result[1]=0;} - break; - case DATA_STATUS_LEFT_BLUE_LED: - if (portc.bits.PB2){result[1]=1;}else{result[1]=0;} - break; - case DATA_STATUS_HEAD_MOTOR_FOR_MOUTH: - if (portd.bits.PB1){result[1]=1;}else{result[1]=0;} - break; - case DATA_STATUS_HEAD_MOTOR_FOR_EYES: - result[0]=DATA_STATUS_HEAD_MOTOR_FOR_EYES; - if (portd.bits.PB0){result[1]=1;}else{result[1]=0;} - break; - case DATA_STATUS_SPIN_POSITION_SWITCH: - if (portd.bits.PB3){result[1]=1;}else{result[1]=0;} - break; - case DATA_STATUS_WINGS_MOTOR_FORWARD: - result[0]=DATA_STATUS_WINGS_MOTOR_FORWARD; - if (portd.bits.PB4){result[1]=1;}else{result[1]=0;} - break; - case DATA_STATUS_IR_LED: - if (portd.bits.PB5){result[1]=1;}else{result[1]=0;} - break; - case DATA_STATUS_EYES_OPEN_POSITION_SWITCH: - if (portd.bits.PB6){result[1]=1;}else{result[1]=0;} - break; - case DATA_STATUS_EYES_CLOSED_POSITION_SWITCH: - if (portd.bits.PB7){result[1]=1;}else{result[1]=0;} - break; - case DATA_STATUS_LEFT_WING_PUSH: - if (sensors1.bits.PB0){result[1]=1;}else{result[1]=0;} - break; - case DATA_STATUS_RIGHT_WING_PUSH: - if (sensors1.bits.PB1){result[1]=1;}else{result[1]=0;} - break; - case DATA_STATUS_POWER_PLUG_SWITCH: - if (sensors1.bits.PB2){result[1]=1;}else{result[1]=0;} - break; - case DATA_STATUS_HEAD_PUSH_SWITCH: - if (sensors1.bits.PB3){result[1]=1;}else{result[1]=0;} - break; - case DATA_STATUS_CHARGER_LED_STATUS: - if (sensors1.bits.PB4){result[1]=1;}else{result[1]=0;} - break; - case DATA_STATUS_MUTE_STATUS: - if (sensors1.bits.PB7){result[1]=1;}else{result[1]=0;} - break; - case DATA_STATUS_LIGHT_LEVEL: - result[1]=sensors2.level_light_high.Byte; - result[2]=sensors2.level_light_low.Byte; - result[3]=sensors2.light_mode.Byte; - break; - case DATA_STATUS_EYES_POSITION_COUNTER: - result[1]=position1.eyes_position.Byte; - break; - case DATA_STATUS_MOUTH_POSITION_COUNTER: - result[1]=position1.mouth_position.Byte; - break; - case DATA_STATUS_WINGS_POSITION_COUNTER: - result[1]=position1.wings_position.Byte; - break; - case DATA_STATUS_SPIN_POSITION_COUNTER: - result[1]=position2.Byte; - break; - case DATA_STATUS_RF_CONNECTED: - result[1]=RF_status; - break; - case DATA_STATUS_SOUND_COUNT: - result[1]=sound_flash_count; - break; - } + case DATA_STATUS_WINGS_MOTOR_BACKWARD: + if (portb.bits.PB0){result[1] = 1;}else{result[1] = 0;} + break; + case DATA_STATUS_SPIN_MOTOR_BACKWARD: + if (portb.bits.PB1){result[1] = 1;}else{result[1] = 0;} + break; + case DATA_STATUS_SPIN_MOTOR_FORWARD: + if (portb.bits.PB2){result[1] = 1;}else{result[1] = 0;} + break; + case DATA_STATUS_MOUTH_OPEN_POSITION: + if (portb.bits.PB3){result[1] = 1;}else{result[1] = 0;} + break; + case DATA_STATUS_MOUTH_CLOSED_POSITION: + if (portb.bits.PB4){result[1] = 1;}else{result[1] = 0;} + break; + case DATA_STATUS_HEAD_PUSH_POSITION: + if (portb.bits.PB5){result[1] = 1;}else{result[1] = 0;} + break; + case DATA_STATUS_CHARGER_INHIBIT_SIGNAL: + result[0] = DATA_STATUS_CHARGER_INHIBIT_SIGNAL; + if (portb.bits.PB6){result[1] = 1;}else{result[1] = 0;} + break; + case DATA_STATUS_WINGS_POSITION_SWITCH: + if (portc.bits.PB0){result[1] = 1;}else{result[1] = 0;} + break; + case DATA_STATUS_MOTOR_FOR_WINGS: + if (portc.bits.PB1){result[1] = 1;}else{result[1] = 0;} + break; + case DATA_STATUS_LEFT_BLUE_LED: + if (portc.bits.PB2){result[1] = 1;}else{result[1] = 0;} + break; + case DATA_STATUS_HEAD_MOTOR_FOR_MOUTH: + if (portd.bits.PB1){result[1] = 1;}else{result[1] = 0;} + break; + case DATA_STATUS_HEAD_MOTOR_FOR_EYES: + result[0] = DATA_STATUS_HEAD_MOTOR_FOR_EYES; + if (portd.bits.PB0){result[1] = 1;}else{result[1] = 0;} + break; + case DATA_STATUS_SPIN_POSITION_SWITCH: + if (portd.bits.PB3){result[1] = 1;}else{result[1] = 0;} + break; + case DATA_STATUS_WINGS_MOTOR_FORWARD: + result[0] = DATA_STATUS_WINGS_MOTOR_FORWARD; + if (portd.bits.PB4){result[1] = 1;}else{result[1] = 0;} + break; + case DATA_STATUS_IR_LED: + if (portd.bits.PB5){result[1] = 1;}else{result[1] = 0;} + break; + case DATA_STATUS_EYES_OPEN_POSITION_SWITCH: + if (portd.bits.PB6){result[1] = 1;}else{result[1] = 0;} + break; + case DATA_STATUS_EYES_CLOSED_POSITION_SWITCH: + if (portd.bits.PB7){result[1] = 1;}else{result[1] = 0;} + break; + case DATA_STATUS_LEFT_WING_PUSH: + if (sensors1.bits.PB0){result[1] = 1;}else{result[1] = 0;} + break; + case DATA_STATUS_RIGHT_WING_PUSH: + if (sensors1.bits.PB1){result[1] = 1;}else{result[1] = 0;} + break; + case DATA_STATUS_POWER_PLUG_SWITCH: + if (sensors1.bits.PB2){result[1] = 1;}else{result[1] = 0;} + break; + case DATA_STATUS_HEAD_PUSH_SWITCH: + if (sensors1.bits.PB3){result[1] = 1;}else{result[1] = 0;} + break; + case DATA_STATUS_CHARGER_LED_STATUS: + if (sensors1.bits.PB4){result[1] = 1;}else{result[1] = 0;} + break; + case DATA_STATUS_MUTE_STATUS: + if (sensors1.bits.PB7){result[1] = 1;}else{result[1] = 0;} + break; + case DATA_STATUS_LIGHT_LEVEL: + result[1] = sensors2.level_light_high.Byte; + result[2] = sensors2.level_light_low.Byte; + result[3] = sensors2.light_mode.Byte; + break; + case DATA_STATUS_EYES_POSITION_COUNTER: + result[1] = position1.eyes_position.Byte; + break; + case DATA_STATUS_MOUTH_POSITION_COUNTER: + result[1] = position1.mouth_position.Byte; + break; + case DATA_STATUS_WINGS_POSITION_COUNTER: + result[1] = position1.wings_position.Byte; + break; + case DATA_STATUS_SPIN_POSITION_COUNTER: + result[1] = position2.Byte; + break; + case DATA_STATUS_RF_CONNECTED: + result[1] = RF_status; + break; + case DATA_STATUS_SOUND_COUNT: + result[1] = sound_flash_count; + break; } - - // *********************************************************************** - // tux_req_info() - // *********************************************************************** - void - tux_req_info( +} + +// *********************************************************************** +// tux_req_info() +// *********************************************************************** +void tux_req_info( unsigned char data[], unsigned char result[] - ) + ) +{ + result[0] = data[0]; + switch(data[0]) { - result[0]=data[0]; - switch(data[0]){ - case TUX_REQ_INFO_VERSION: - result[1]=hw_version[data[1]].ver_major; - result[2]=hw_version[data[1]].ver_minor; - result[3]=hw_version[data[1]].ver_update; - result[4]=(unsigned char)((hw_revision[data[1]].revision)&0xFF00)>>8; - result[5]=(unsigned char)(hw_revision[data[1]].revision)&0x00FF; - result[6]=(unsigned char)((hw_author[data[1]].author_id)&0xFF00)>>8; - result[7]=(unsigned char)(hw_author[data[1]].author_id)&0x00FF; - break; - } + case TUX_REQ_INFO_VERSION: + result[1] = hw_version[data[1]].ver_major; + result[2] = hw_version[data[1]].ver_minor; + result[3] = hw_version[data[1]].ver_update; + result[4] = (unsigned char)((hw_revision[data[1]].revision)&0xFF00)>>8; + result[5] = (unsigned char)(hw_revision[data[1]].revision)&0x00FF; + result[6] = (unsigned char)((hw_author[data[1]].author_id)&0xFF00)>>8; + result[7] = (unsigned char)(hw_author[data[1]].author_id)&0x00FF; + break; } +} // *************************************************************************** // TUX USB // *************************************************************************** - // *********************************************************************** - // send_usb_tuxcmd() - // *********************************************************************** - unsigned char send_usb_tux_cmd( - unsigned char cmd, +// *********************************************************************** +// send_usb_tuxcmd() +// *********************************************************************** +unsigned char send_usb_tux_cmd( + unsigned char cmd, unsigned char param1, unsigned char param2, unsigned char param3 - ) - { - unsigned char usb_trame[TUX_SEND_LENGTH]; - - usb_trame[0]=0; - usb_trame[1]=cmd; - usb_trame[2]=param1; usb_trame[3]=param2; usb_trame[4]=param3; - return usb_write_TuxDroid(usb_trame); - } - - // *********************************************************************** - // send_usb_donglecmd() - // *********************************************************************** - unsigned char send_usb_dongle_cmd( - unsigned char cmd, + ) +{ + unsigned char usb_trame[TUX_SEND_LENGTH]; + + usb_trame[0] = 0; + usb_trame[1] = cmd; + usb_trame[2] = param1; usb_trame[3] = param2; usb_trame[4] = param3; + return usb_write_TuxDroid(usb_trame); +} + +// *********************************************************************** +// send_usb_donglecmd() +// *********************************************************************** +unsigned char send_usb_dongle_cmd( + unsigned char cmd, unsigned char param1, unsigned char param2, unsigned char param3 - ) - { - unsigned char usb_trame[TUX_SEND_LENGTH]; - - usb_trame[0]=1; - usb_trame[1]=cmd; - usb_trame[2]=param1; usb_trame[3]=param2; usb_trame[4]=param3; - return usb_write_TuxDroid(usb_trame); - } + ) +{ + unsigned char usb_trame[TUX_SEND_LENGTH]; + + usb_trame[0] = 1; + usb_trame[1] = cmd; + usb_trame[2] = param1; usb_trame[3] = param2; usb_trame[4] = param3; + return usb_write_TuxDroid(usb_trame); +} Modified: daemon/trunk/libs/USBDaemon_command_tux.h =================================================================== --- daemon/trunk/libs/USBDaemon_command_tux.h 2007-03-09 15:12:39 UTC (rev 146) +++ daemon/trunk/libs/USBDaemon_command_tux.h 2007-03-12 16:17:30 UTC (rev 147) @@ -18,20 +18,21 @@ * 02111-1307, USA. */ /* $Id$ */ + /*_____________________ I N C L U D E S____________________________________ */ /*_____________________ D E F I N E S ______________________________________*/ /*_____________________ F U N C T I O N S __________________________________*/ // COMMANDS FROM CLIENTS DISPATCHER -void commands_dispatcher(unsigned char client_id,unsigned char src_trame[16]); -void sub_daemon_cmd_struct(unsigned char data[],unsigned char result[],int id_client); -void sub_daemon_req_info(unsigned char data[],unsigned char result[],int id_client); -void tux_cmd_raw(unsigned char data[],unsigned char result[]); -void tux_cmd_struct(unsigned char data[],unsigned char result[]); -void tux_req_status(unsigned char data[],unsigned char result[]); -void tux_req_info(unsigned char data[],unsigned char result[]); +void commands_dispatcher(unsigned char client_id, unsigned char src_trame[16]); +void sub_daemon_cmd_struct(unsigned char data[], unsigned char result[], int id_client); +void sub_daemon_req_info(unsigned char data[], unsigned char result[], int id_client); +void tux_cmd_raw(unsigned char data[], unsigned char result[]); +void tux_cmd_struct(unsigned char data[], unsigned char result[]); +void tux_req_status(unsigned char data[], unsigned char result[]); +void tux_req_info(unsigned char data[], unsigned char result[]); // TUX PHYSICAL CHANGES -unsigned char send_usb_tux_cmd(unsigned char cmd, unsigned char param1,unsigned char param2,unsigned char param3); -unsigned char send_usb_dongle_cmd(unsigned char cmd, unsigned char param1,unsigned char param2,unsigned char param3); +unsigned char send_usb_tux_cmd(unsigned char cmd, unsigned char param1, unsigned char param2, unsigned char param3); +unsigned char send_usb_dongle_cmd(unsigned char cmd, unsigned char param1, unsigned char param2, unsigned char param3); unsigned char send_wave_wings(unsigned char count, unsigned char speed); unsigned char send_stop_wings(); unsigned char send_blink_eyes(unsigned char count); Modified: daemon/trunk/libs/USBDaemon_globals.h =================================================================== --- daemon/trunk/libs/USBDaemon_globals.h 2007-03-09 15:12:39 UTC (rev 146) +++ daemon/trunk/libs/USBDaemon_globals.h 2007-03-12 16:17:30 UTC (rev 147) @@ -18,12 +18,13 @@ * 02111-1307, USA. */ /* $Id$ */ + /*_____________________ I N C L U D E S____________________________________ */ #include <usb.h> #include <pthread.h> /*_____________________ D E F I N E S ______________________________________*/ #define TUX_PID 0xFF07 -#define TUX_VID 0x03EB +#define TUX_VID 0x03EB #define TUX_INTERFACE 0x03 #define TUX_RECV_LENGTH 0x05 #define TUX_SEND_LENGTH 0x05 @@ -38,7 +39,8 @@ unsigned char SHOW_RAW_STATUS; unsigned short DAEMON_PID; unsigned char SHOW_INVALID_RAW; -struct version_s { +struct version_s +{ int major; int minor; int release; Modified: daemon/trunk/libs/USBDaemon_status_table.c =================================================================== --- daemon/trunk/libs/USBDaemon_status_table.c 2007-03-09 15:12:39 UTC (rev 146) +++ daemon/trunk/libs/USBDaemon_status_table.c 2007-03-12 16:17:30 UTC (rev 147) @@ -18,6 +18,7 @@ * 02111-1307, USA. */ /* $Id$ */ + /*_____________________ I N C L U D E S____________________________________ */ #include <stdio.h> #include "USBDaemon_status_table.h" @@ -28,659 +29,715 @@ unsigned char pong_received; /*_____________________ F U N C T I O N S __________________________________*/ - // *********************************************************************** - // update_raw_status_table() - // *********************************************************************** - void - update_raw_status_table( - unsigned char new_status[TUX_RECV_LENGTH] - ) +// *********************************************************************** +// update_raw_status_table() +// *********************************************************************** +void update_raw_status_table(unsigned char new_status[TUX_RECV_LENGTH]) +{ + switch(new_status[0]) { - switch(new_status[0]){ - case STATUS_PORTS_CMD: - if(portb.Byte!=new_status[1]) portb_changed(new_status[1]); - if(portc.Byte!=new_status[2]) portc_changed(new_status[2]); - if(portd.Byte!=new_status[3]) portd_changed(new_status[3]); - break; - case STATUS_SENSORS1_CMD: - if(sensors1.Byte!=new_status[1]) sensors1_changed(new_status[1]); - break; - case STATUS_LIGHT_CMD: - if((sensors2.level_light_high.Byte!=new_status[1]) || (sensors2.level_light_low.Byte!=new_status[2]) ) sensors2_changed(new_status[1],new_status[2],new_status[3]); - break; - case STATUS_POSITION1_CMD: - if((position1.eyes_position.Byte!=new_status[1])||(position1.mouth_position.Byte!=new_status[2])||(position1.wings_position.Byte!=new_status[3])) position1_changed(new_status[1], new_status[2], new_status[3]); - break; - case STATUS_POSITION2_CMD: - if(position2.Byte!=new_status[1]) position2_changed(new_status[1]); - break; - case PONG_CMD: - pong_received++; - pong_event(new_status[1],pong_received); - break; - case VERSION_CMD: - update_version_table(new_status); - break; - case REVISION_CMD: - update_revision_table(new_status); - break; - case AUTHOR_CMD: - update_author_table(new_status); - break; - case SOUND_VAR_CMD: - update_sound_flash_count(new_status); - break; - case STATUS_IR_CMD: - update_ir(new_status); - break; - default: - if(SHOW_INVALID_RAW) - printf("%.2x %.2x %.2x %.2x\n", new_status[0],new_status[1],new_status[2],new_status[3]); - break; + case STATUS_PORTS_CMD: + if(portb.Byte != new_status[1]) portb_changed(new_status[1]); + if(portc.Byte != new_status[2]) portc_changed(new_status[2]); + if(portd.Byte != new_status[3]) portd_changed(new_status[3]); + break; + case STATUS_SENSORS1_CMD: + if(sensors1.Byte != new_status[1]) sensors1_changed(new_status[1]); + break; + case STATUS_LIGHT_CMD: + if((sensors2.level_light_high.Byte != new_status[1]) || (sensors2.level_light_low.Byte != new_status[2]) ) sensors2_changed(new_status[1], new_status[2], new_status[3]); + break; + case STATUS_POSITION1_CMD: + if((position1.eyes_position.Byte != new_status[1])||(position1.mouth_position.Byte != new_status[2])||(position1.wings_position.Byte != new_status[3])) position1_changed(new_status[1], new_status[2], new_status[3]); + break; + case STATUS_POSITION2_CMD: + if(position2.Byte != new_status[1]) position2_changed(new_status[1]); + break; + case PONG_CMD: + pong_received++; + pong_event(new_status[1], pong_received); + break; + case VERSION_CMD: + update_version_table(new_status); + break; + case REVISION_CMD: + update_revision_table(new_status); + break; + case AUTHOR_CMD: + update_author_table(new_status); + break; + case SOUND_VAR_CMD: + update_sound_flash_count(new_status); + break; + case STATUS_IR_CMD: + update_ir(new_status); + break; + default: + if(SHOW_INVALID_RAW) + printf("%.2x %.2x %.2x %.2x\n", new_status[0], new_status[1], new_status[2], new_status[3]); + break; + } +} + +// *********************************************************************** +// update_system_status_table() +// *********************************************************************** +void update_system_status_table(unsigned char new_status[4]) +{ + unsigned char tcp_trame[16]; + unsigned char i; + + for(i = 0;i < 16;i++)tcp_trame[i] = 0; + tcp_trame[0] = SOURCE_TUX; + tcp_trame[1] = SS_DEFAULT; + tcp_trame[2] = DATA_TP_RSP; + tcp_trame[3] = SUBDATA_TP_STATUS; + + DONGLE_status = new_status[0]; + //RF status change + if(RF_status != new_status[1]) + { + RF_status = new_status[1]; + tcp_trame[4] = DATA_STATUS_RF_CONNECTED; + tcp_trame[5] = RF_status; + tcp_server_send_raw(tcp_trame, 16); + } + // Command status change + if(CMD_status != new_status[2]) + { + CMD_status = new_status[2]; + if((CMD_status == 2)||(CMD_status == 3)) + CMD_STATUS_FLAG = 0; + } + NUMBER_trames = new_status[3]; +} + +// *********************************************************************** +// update_version_table() +// *********************************************************************** +void update_version_table(unsigned char new_status[4]) +{ + unsigned long tmp; + version_t *hw_ver; + + tmp = (new_status[3] << 24) + (new_status[2] << 16) + + (new_status[1] << 8) + (new_status[0]); + hw_ver = (version_t *) &tmp; + last_cpu_ver = hw_ver->cpu_nbr; + hw_version[last_cpu_ver] = *hw_ver; +} + +// *********************************************************************** +// update_revision_table() +// *********************************************************************** +void update_revision_table(unsigned char new_status[4]) +{ + unsigned long tmp; + revision_t *hw_rev; + + tmp = (new_status[3] << 24) + (new_status[2] << 16) + + (new_status[1] << 8) + (new_status[0]); + hw_rev = (revision_t *) &tmp; + hw_revision[last_cpu_ver] = *hw_rev; +} + +// *********************************************************************** +// update_author_table() +// *********************************************************************** +void update_author_table(unsigned char new_status[4]) +{ + unsigned long tmp; + author_t *hw_aut; + + tmp = (new_status[3] << 24) + (new_status[2] << 16) + + (new_status[1] << 8) + (new_status[0]); + hw_aut = (author_t *) &tmp; + hw_author[last_cpu_ver] = *hw_aut; +} + +// *********************************************************************** +// update_sound_flash_count() +// *********************************************************************** +void update_sound_flash_count(unsigned char new_status[4]) +{ + sound_flash_count = new_status[1]; +} + +// *********************************************************************** +// update_ir() +// *********************************************************************** +void update_ir(unsigned char new_status[4]) +{ + unsigned char code; + unsigned char toggle; + unsigned char check; + unsigned char new_code; + unsigned char tcp_trame[16]; + unsigned char i; + + code = new_status[1] & 0x3F; + toggle = new_status[1] & 0x40; + check = new_status[1] & 0x80; + if(last_remote_key == code) + { + if(last_toggle_key == toggle) + { + new_code = 0; } + else + { + last_remote_... [truncated message content] |