tux-droid-svn Mailing List for Tux Droid CE (Page 235)
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: remi <c2m...@c2...> - 2007-03-14 12:24:38
|
Author: remi Date: 2007-03-14 13:24:21 +0100 (Wed, 14 Mar 2007) New Revision: 155 Modified: api/python/trunk/tuxapi_const.py Log: UPD : - New defines for the remote control are added Modified: api/python/trunk/tuxapi_const.py =================================================================== --- api/python/trunk/tuxapi_const.py 2007-03-14 12:23:03 UTC (rev 154) +++ api/python/trunk/tuxapi_const.py 2007-03-14 12:24:21 UTC (rev 155) @@ -1,3 +1,25 @@ +# ----------------------------------------------------------------------------- +# Tux Droid - API constants +# Copyright (C) 2007 C2ME Sa <rem...@c2...> +# +# 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. +# ----------------------------------------------------------------------------- +# $Id$ +# ----------------------------------------------------------------------------- + #============================================================================== # BEHAVIOR USB DAEMON constants #============================================================================== @@ -88,6 +110,15 @@ K_MOUSE = 0X3B K_ALT = 0X3C +remote_bt_name=["K_0","K_1","K_2","K_3","K_4","K_5","K_6","K_7","K_8","K_9",\ +"None","None","K_STANDBY","K_MUTE","None","None","K_VOLUMEPLUS","K_VOLUMEMINUS",\ +"K_ESCAPE","K_YES","K_NO","K_BACKSPACE","K_STARTVOIP","K_RECEIVECALL","K_HANGUP",\ +"K_STAR","K_SHARP","K_RED","K_GREEN","K_BLUE","K_YELLOW","None","K_CHANNELPLUS",\ +"K_CHANNELMINUS","K_UP","K_DOWN","K_LEFT","K_RIGHT","K_OK","None","None","None","None",\ +"None","None","None","None","None","None","None","K_FASTREWIND","None",\ +"K_FASTFORWARD","K_PLAYPAUSE","K_STOP","K_RECORDING","K_PREVIOUS","K_NEXT",\ +"K_MENU","K_MOUSE","K_ALT","None","None","None"] + # Status datas DATAS_STATUS_WINGS_MOTOR_BACKWARD = 0x01 DATAS_STATUS_SPIN_MOTOR_BACKWARD = 0x02 @@ -124,6 +155,7 @@ DATAS_STATUS_RF_CONNECTED = 0x21 DATAS_STATUS_IR_CODE = 0x22 DATAS_STATUS_SOUND_COUNT = 0x23 +DATAS_STATUS_PONG = 0x24 # Datas TuxDroid DATAS_STATUS_DONGLE = 0x00 @@ -155,7 +187,8 @@ DATA_TP_CMD = 0x01 DATA_TP_REQ = 0x02 DATA_TP_RSP = 0x03 -DATA_TP_ACK = 0x04 +DATA_TP_ACK_CMD = 0x04 +DATA_TP_ACK_DP = 0x05 # Sub data types SUBDATA_TP_RAW = 0x01 SUBDATA_TP_STRUCT = 0x02 |
From: remi <c2m...@c2...> - 2007-03-14 12:23:22
|
Author: remi Date: 2007-03-14 13:23:03 +0100 (Wed, 14 Mar 2007) New Revision: 154 Modified: api/python/trunk/tuxapi_class.py Log: UPD : - The licence is added in the header. - New function to clarify the status is added - Some events are added - Some minor changes Modified: api/python/trunk/tuxapi_class.py =================================================================== --- api/python/trunk/tuxapi_class.py 2007-03-14 12:03:36 UTC (rev 153) +++ api/python/trunk/tuxapi_class.py 2007-03-14 12:23:03 UTC (rev 154) @@ -1,5 +1,27 @@ #!/usr/bin/python +# ----------------------------------------------------------------------------- +# Tux Droid - API Class +# Copyright (C) 2007 C2ME Sa <rem...@c2...> +# +# 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. +# ----------------------------------------------------------------------------- +# $Id$ +# ----------------------------------------------------------------------------- + import sys import os import time @@ -133,6 +155,109 @@ #------------------------------------------------------------------------------- #-------------------------------------------------------------------------- + ## Converting raw status to explicit string status + ## Return a string + #-------------------------------------------------------------------------- + def explicit_status(self): + value_onoff=0 + value_10=1 + value_8b=2 + value_16b=3 + value_np=4 + + value_type=value_onoff + line="" + status=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] + for i, data in enumerate(self.last_datas_for_event): + status[i]=ord(data) + # -- Tux status + if status[4]==DATAS_STATUS_WINGS_MOTOR_BACKWARD: + line=line+"Wings motor backward->" + if status[4]==DATAS_STATUS_SPIN_MOTOR_BACKWARD: + line=line+"Spin motor backward->" + if status[4]==DATAS_STATUS_SPIN_MOTOR_FORWARD: + line=line+"Spin motor forward->" + if status[4]==DATAS_STATUS_MOUTH_OPEN_POSITION: + line=line+"Mouth open position->" + if status[4]==DATAS_STATUS_MOUTH_CLOSED_POSITION: + line=line+"Mouth closed position->" + if status[4]==DATAS_STATUS_HEAD_PUSH_POSITION: + line=line+"Head push position->" + if status[4]==DATAS_STATUS_CHARGER_INHIBIT_SIGNAL: + line=line+"Charger inhibit signal->" + if status[4]==DATAS_STATUS_WINGS_POSITION_SWITCH: + line=line+"Wings position switch->" + if status[4]==DATAS_STATUS_MOTOR_FOR_WINGS: + line=line+"Motor for wings->" + if status[4]==DATAS_STATUS_LEFT_BLUE_LED: + line=line+"Left blue led->" + if status[4]==DATAS_STATUS_HEAD_MOTOR_FOR_MOUTH: + line=line+"Head motor for beack->" + if status[4]==DATAS_STATUS_HEAD_MOTOR_FOR_EYES: + line=line+"Head motor for eyes->" + if status[4]==DATAS_STATUS_IR_RECEIVER_SIGNAL: + line=line+"Ir receiver signal->" + if status[4]==DATAS_STATUS_SPIN_POSITION_SWITCH: + line=line+"Spin position switch->" + if status[4]==DATAS_STATUS_WINGS_MOTOR_FORWARD: + line=line+"Wings motor forward->" + if status[4]==DATAS_STATUS_IR_LED: + line=line+"IR led->" + if status[4]==DATAS_STATUS_EYES_OPEN_POSITION_SWITCH: + line=line+"Eyes open position switch->" + if status[4]==DATAS_STATUS_EYES_CLOSED_POSITION_SWITCH: + line=line+"Eyes closed position switch->" + if status[4]==DATAS_STATUS_LEFT_WING_PUSH: + line=line+"Left wing push->" + if status[4]==DATAS_STATUS_RIGHT_WING_PUSH: + line=line+"Right wing push->" + if status[4]==DATAS_STATUS_POWER_PLUG_SWITCH: + line=line+"Power plug switch->" + if status[4]==DATAS_STATUS_HEAD_PUSH_SWITCH: + line=line+"Head push switch->" + if status[4]==DATAS_STATUS_CHARGER_LED_STATUS: + line=line+"Charger led status->" + if status[4]==DATAS_STATUS_MUTE_STATUS: + line=line+"Audio mute->" + if status[4]==DATAS_STATUS_LIGHT_LEVEL: + line=line+"Light level->" + value_type=value_16b + if status[4]==DATAS_STATUS_EYES_POSITION_COUNTER: + line=line+"Eyes position counter->" + value_type=value_8b + if status[4]==DATAS_STATUS_MOUTH_POSITION_COUNTER: + line=line+"Mouth position counter->" + value_type=value_8b + if status[4]==DATAS_STATUS_WINGS_POSITION_COUNTER: + line=line+"Wings position counter->" + value_type=value_8b + if status[4]==DATAS_STATUS_SPIN_POSITION_COUNTER: + line=line+"Spin position counter->" + value_type=value_8b + if status[4]==DATAS_STATUS_RIGHT_BLUE_LED: + line=line+"Right blue led->" + if status[4]==DATAS_STATUS_RF_CONNECTED: + line=line+"RF connected->" + if status[4]==DATAS_STATUS_IR_CODE: + line=line+"IR code->%s"%remote_bt_name[status[5]] + value_type=value_np + if status[4]==DATAS_STATUS_SOUND_COUNT: + line=line+"Flash sounds count->" + if status[4]==DATAS_STATUS_PONG: + line=line+"Pong-> Received : %d Remaining : %d Average : %.0f %s"\ + %(status[6],status[5],((status[6]*100)/(200-status[5])),'%') + value_type=value_np + #-- Write value + if value_type==value_onoff: + if status[5]==0: line=line+"off" + else: line=line+"on" + if value_type==value_8b: + line=line+"%d"%status[5] + if value_type==value_16b: + line=line+"%d"%((status[5]*256)+status[6]) + return line + + #-------------------------------------------------------------------------- ## Pooling on data arrival from tcp server ## SYSTEM function #-------------------------------------------------------------------------- @@ -154,19 +279,12 @@ ## SYSTEM function #-------------------------------------------------------------------------- def dispatch_data_from_tcp_server(self): - if self.event.on_status!=None: - self.event.on_status() # from sdaemon if ord(self.last_datas_for_event[0])==SOURCE_SUB_DAEMON: self.dispatch_data_from_sdaemon() # from tux droid if ord(self.last_datas_for_event[0])==SOURCE_TUX: self.dispatch_data_from_tux() - #if ord(self.last_datas[1])==DATAS_STATUS_RF: - # if ord(self.last_datas[2])==0: - # self.RF_connected=False - # else: - # self.RF_connected=True #-------------------------------------------------------------------------- ## data from sub daemon @@ -189,7 +307,9 @@ # data type response if ord(self.last_datas_for_event[2])==DATA_TP_RSP: if ord(self.last_datas_for_event[3])==SUBDATA_TP_STATUS: - #head button + if self.event.on_status!=None: + self.event.on_status() + #Head button if ord(self.last_datas_for_event[4])==DATAS_STATUS_HEAD_PUSH_SWITCH: if ord(self.last_datas_for_event[5])==1: if self.event.on_head_bt_pushed!=None: @@ -201,7 +321,7 @@ self.event.on_head_bt_released() if self.event.on_bt_released!=None: self.event.on_bt_released() - #left wing button + #Left wing button if ord(self.last_datas_for_event[4])==DATAS_STATUS_LEFT_WING_PUSH: if ord(self.last_datas_for_event[5])==1: if self.event.on_lwing_bt_pushed!=None: @@ -213,7 +333,7 @@ self.event.on_lwing_bt_released() if self.event.on_bt_released!=None: self.event.on_bt_released() - #right wing button + #Right wing button if ord(self.last_datas_for_event[4])==DATAS_STATUS_RIGHT_WING_PUSH: if ord(self.last_datas_for_event[5])==1: if self.event.on_rwing_bt_pushed!=None: @@ -225,12 +345,90 @@ self.event.on_rwing_bt_released() if self.event.on_bt_released!=None: self.event.on_bt_released() - #remote button + #Remote button if ord(self.last_datas_for_event[4])==DATAS_STATUS_IR_CODE: if self.event.on_remote_bt[ord(self.last_datas_for_event[5])]!=None: self.event.on_remote_bt[ord(self.last_datas_for_event[5])]() if self.event.on_remote!=None: self.event.on_remote(ord(self.last_datas_for_event[5])) + #Mouth open + if ord(self.last_datas_for_event[4])==DATAS_STATUS_MOUTH_OPEN_POSITION: + if ord(self.last_datas_for_event[5])==1: + if self.event.on_mouth_open!=None: + self.event.on_mouth_open() + #Mouth close + if ord(self.last_datas_for_event[4])==DATAS_STATUS_MOUTH_CLOSED_POSITION: + if ord(self.last_datas_for_event[5])==1: + if self.event.on_mouth_close!=None: + self.event.on_mouth_close() + #Ledl + if ord(self.last_datas_for_event[4])==DATAS_STATUS_LEFT_BLUE_LED: + if ord(self.last_datas_for_event[5])==1: + if self.event.on_left_blue_led_on!=None: + self.event.on_left_blue_led_on() + else: + if self.event.on_left_blue_led_off!=None: + self.event.on_left_blue_led_off() + #Ledr + if ord(self.last_datas_for_event[4])==DATAS_STATUS_RIGHT_BLUE_LED: + if ord(self.last_datas_for_event[5])==1: + if self.event.on_right_blue_led_on!=None: + self.event.on_right_blue_led_on() + else: + if self.event.on_right_blue_led_off!=None: + self.event.on_right_blue_led_off() + #Eyes open/close + if ord(self.last_datas_for_event[4])==DATAS_STATUS_EYES_CLOSED_POSITION_SWITCH: + if ord(self.last_datas_for_event[5])==1: + if self.event.on_eyes_close!=None: + self.event.on_eyes_close() + else: + if self.event.on_eyes_open!=None: + self.event.on_eyes_open() + #Power plug switch + if ord(self.last_datas_for_event[4])==DATAS_STATUS_POWER_PLUG_SWITCH: + if ord(self.last_datas_for_event[5])==1: + if self.event.on_power_plugged!=None: + self.event.on_power_plugged() + else: + if self.event.on_power_unplugged!=None: + self.event.on_power_unplugged() + #RF status + if ord(self.last_datas_for_event[4])==DATAS_STATUS_RF_CONNECTED: + if ord(self.last_datas_for_event[5])==1: + if self.event.on_rf_connected!=None: + self.event.on_rf_connected() + else: + if self.event.on_rf_disconnected!=None: + self.event.on_rf_disconnected() + #PONG + if ord(self.last_datas_for_event[4])==DATAS_STATUS_PONG: + if self.event.on_pong_received!=None: + rcv=ord(self.last_datas_for_event[6]) + rem=ord(self.last_datas_for_event[5]) + avg=int((100*rcv)/(200-rem)) + self.event.on_pong_received(rcv,rem,avg) + #mouth stop + if ord(self.last_datas_for_event[4])==DATAS_STATUS_MOUTH_POSITION_COUNTER: + if ord(self.last_datas_for_event[5])==0: + if self.event.on_mouth_stop!=None: + self.event.on_mouth_stop() + #eyes stop + if ord(self.last_datas_for_event[4])==DATAS_STATUS_EYES_POSITION_COUNTER: + if ord(self.last_datas_for_event[5])==0: + if self.event.on_eyes_stop!=None: + self.event.on_eyes_stop() + + #wings stop + if ord(self.last_datas_for_event[4])==DATAS_STATUS_WINGS_POSITION_COUNTER: + if ord(self.last_datas_for_event[5])==0: + if self.event.on_wings_stop!=None: + self.event.on_wings_stop() + #spin stop + if ord(self.last_datas_for_event[4])==DATAS_STATUS_SPIN_POSITION_COUNTER: + if ord(self.last_datas_for_event[5])==0: + if self.event.on_spin_stop!=None: + self.event.on_spin_stop() #============================================================================== # TUXTCPCommunicator - sys - class @@ -351,6 +549,23 @@ self.on_light_level=None self.on_connected=None self.on_disconnected=None + self.on_mouth_open=None + self.on_mouth_close=None + self.on_power_plugged=None + self.on_power_unplugged=None + self.on_left_blue_led_on=None + self.on_left_blue_led_off=None + self.on_right_blue_led_on=None + self.on_right_blue_led_off=None + self.on_eyes_open=None + self.on_eyes_close=None + self.on_rf_connected=None + self.on_rf_disconnected=None + self.on_pong_received=None + self.on_mouth_stop=None + self.on_eyes_stop=None + self.on_wings_stop=None + self.on_spin_stop=None #-------------------------------------------------------------------------- ## store all events @@ -370,6 +585,23 @@ self.s_on_light_level=self.on_light_level self.s_on_connected=self.on_connected self.s_on_disconnected=self.on_disconnected + self.s_on_mouth_open=self.on_mouth_open + self.s_on_mouth_close=self.on_mouth_close + self.s_on_power_plugged=self.on_power_plugged + self.s_on_power_unplugged=self.on_power_unplugged + self.s_on_left_blue_led_on=self.on_left_blue_led_on + self.s_on_left_blue_led_off=self.on_left_blue_led_off + self.s_on_right_blue_led_on=self.on_right_blue_led_on + self.s_on_right_blue_led_off=self.on_right_blue_led_off + self.s_on_eyes_open=self.on_eyes_open + self.s_on_eyes_close=self.on_eyes_close + self.s_on_rf_connected=self.on_rf_connected + self.s_on_rf_disconnected=self.on_rf_disconnected + self.s_on_pong_received=self.on_pong_received + self.s_on_mouth_stop=on_mouth_stop + self.s_on_eyes_stop=on_eyes_stop + self.s_on_wings_stop=on_wings_stop + self.s_on_spin_stop=on_spin_stop #-------------------------------------------------------------------------- ## restore all events @@ -389,6 +621,23 @@ self.on_light_level=self.s_on_light_level self.on_connected=self.s_on_connected self.on_disconnected=self.s_on_disconnected + self.on_mouth_open=self.s_on_mouth_open + self.on_mouth_close=self.s_on_mouth_close + self.on_power_plugged=self.s_on_power_plugged + self.on_power_unplugged=self.s_on_power_unplugged + self.on_left_blue_led_on=self.s_on_left_blue_led_on + self.on_left_blue_led_off=self.s_on_left_blue_led_off + self.on_right_blue_led_on=self.s_on_right_blue_led_on + self.on_right_blue_led_off=self.s_on_right_blue_led_off + self.on_eyes_open=self.s_on_eyes_open + self.on_eyes_close=self.s_on_eyes_close + self.on_rf_connected=self.s_on_rf_connected + self.on_rf_disconnected=self.s_on_rf_disconnected + self.on_pong_received=self.s_on_pong_received + self.on_mouth_stop=s_on_mouth_stop + self.on_eyes_stop=s_on_eyes_stop + self.on_wings_stop=s_on_wings_stop + self.on_spin_stop=s_on_spin_stop #-------------------------------------------------------------------------- ## wait until status event arrival @@ -412,7 +661,6 @@ if ord(self.parent.last_datas[3])==SUBDATA_TP_STATUS: if ord(self.parent.last_datas[4])==DATA_STATUS: if ord(self.parent.last_datas[5])==DATA_VALUE: - #print self.parent.sys.time()-time_beginin return True if (self.parent.sys.time()-time_beginin)>=time_out and time_out!=9999: return False @@ -588,7 +836,7 @@ time.sleep(0.001) if ord(self.parent.last_datas[0])==SOURCE_TUX: if ord(self.parent.last_datas[1])==SS_DEFAULT: - if ord(self.parent.last_datas[2])==DATA_TP_ACK: + if ord(self.parent.last_datas[2])==DATA_TP_ACK_CMD: return ord(self.parent.last_datas[4]) if (self.parent.sys.time()-time_beginin)>=2: return ACK_CMD_TIMEOUT @@ -1073,7 +1321,7 @@ time.sleep(0.001) if ord(self.parent.last_datas[0])==SOURCE_SUB_DAEMON: if ord(self.parent.last_datas[1])==SS_DEFAULT: - if ord(self.parent.last_datas[2])==DATA_TP_ACK: + if ord(self.parent.last_datas[2])==DATA_TP_ACK_CMD: return ord(self.parent.last_datas[4]) if (self.parent.sys.time()-time_beginin)>=2: return ACK_CMD_TIMEOUT |
From: jaguarondi <c2m...@c2...> - 2007-03-14 12:03:54
|
Author: jaguarondi Date: 2007-03-14 13:03:36 +0100 (Wed, 14 Mar 2007) New Revision: 153 Modified: daemon/trunk/libs/USBDaemon_command_tux.c daemon/trunk/libs/USBDaemon_command_tux.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_usb_enum.c daemon/trunk/libs/USBDaemon_usb_readWrite.c daemon/trunk/main.c Log: - CLN: // comments changed to /* */ Modified: daemon/trunk/libs/USBDaemon_command_tux.c =================================================================== --- daemon/trunk/libs/USBDaemon_command_tux.c 2007-03-14 08:43:10 UTC (rev 152) +++ daemon/trunk/libs/USBDaemon_command_tux.c 2007-03-14 12:03:36 UTC (rev 153) @@ -30,173 +30,173 @@ #include "USBDaemon_tcp_server.h" /*_____________________ F U N C T I O N S __________________________________*/ -// *************************************************************************** -// COMMANDS FROM CLIENTS DISPATCHER -// *************************************************************************** +/************************************************************************** */ +/* COMMANDS FROM CLIENTS DISPATCHER */ +/************************************************************************** */ void commands_dispatcher( - unsigned char client_id, // Client source - unsigned char src_trame[16]) // Source trame + 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; /* 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 + /* 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 + /* 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 + /*--------------------Data disencapsulation---------------------- // */ + ACK_DP = ACK_DP_OK; /* Init ACK daemon processing */ + /* B1----: Destination */ switch(src_trame[0]) { - // To Master Daemon---------------------------------------------- + /* To Master Daemon---------------------------------------------- */ case DEST_MASTER_DAEMON: - // Not implemented + /* Not implemented */ ACK_DP = ACK_DP_NI; break; - // To Sub Daemon------------------------------------------------- + /* To Sub Daemon------------------------------------------------- */ case DEST_SUB_DAEMON: - // B3----Data Type + /* B3----Data Type */ switch(src_trame[2]) { - // Data type command + /* Data type command */ case DATA_TP_CMD: - // B4----Command type + /* B4----Command type */ tcp_trame[2] = DATA_TP_ACK_CMD; tcp_trame[3] = src_trame[3]; switch(src_trame[3]) { - // Command type raw + /* Command type raw */ case SUBDATA_TP_RAW: - // Not implemented + /* Not implemented */ ACK_DP = ACK_DP_NI; break; - // Command type structured + /* 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; - // Unknowed command type + /* Unknowed command type */ default: ACK_DP = ACK_DP_UKN_SUBDATA_TP; break; } break; - // Data type request + /* Data type request */ case DATA_TP_REQ: tcp_trame[2] = DATA_TP_RSP; tcp_trame[3] = src_trame[3]; - // B4----Request type + /* B4----Request type */ switch(src_trame[3]) { - // Request type status + /* Request type status */ case SUBDATA_TP_STATUS: - // Not implemented + /* Not implemented */ ACK_DP = ACK_DP_NI; break; - // Request type information + /* Request type information */ case SUBDATA_TP_INFO: sub_daemon_req_info(data, result, client_id); break; - // Unknowed request type + /* Unknowed request type */ default: ACK_DP = ACK_DP_UKN_SUBDATA_TP; break; } break; - // Unknowed data type + /* Unknowed data type */ default: ACK_DP = ACK_DP_UKN_DATA_TP; break; } break; - // To Tux-------------------------------------------------------- + /* To Tux-------------------------------------------------------- */ case DEST_TUX: - // TODO sub destinations - // B3----Data Type + /* TODO sub destinations */ + /* B3----Data Type */ switch(src_trame[2]) { - // Data type command + /* Data type command */ case DATA_TP_CMD: tcp_trame[2] = DATA_TP_ACK_CMD; tcp_trame[3] = src_trame[3]; - // B4----Command type + /* B4----Command type */ switch(src_trame[3]) { - // Command type raw + /* Command type raw */ case SUBDATA_TP_RAW: tux_cmd_raw(data, result); break; - // Command type structured + /* Command type structured */ case SUBDATA_TP_STRUCT: tux_cmd_struct(data, result); break; - // Unknowed command type + /* Unknowed command type */ default: ACK_DP = ACK_DP_UKN_SUBDATA_TP; break; } break; - // Data type request + /* Data type request */ case DATA_TP_REQ: tcp_trame[2] = DATA_TP_RSP; tcp_trame[3] = src_trame[3]; - // B4----Request type + /* B4----Request type */ switch(src_trame[3]) { - // Request type status + /* Request type status */ case SUBDATA_TP_STATUS: tux_req_status(data, result); break; - // Request type information + /* Request type information */ case SUBDATA_TP_INFO: tux_req_info(data, result); break; - // Unknowed request type + /* Unknowed request type */ default: ACK_DP = ACK_DP_UKN_SUBDATA_TP; break; } break; - // Unknowed data type + /* Unknowed data type */ default: ACK_DP = ACK_DP_UKN_DATA_TP; break; } break; - // To Resource--------------------------------------------------- + /* To Resource--------------------------------------------------- */ case DEST_RESOURCE: - // Not implemented + /* Not implemented */ ACK_DP = ACK_DP_NI; break; - // To Client----------------------------------------------------- + /* To Client----------------------------------------------------- */ case DEST_CLIENT: - // Not implemented + /* Not implemented */ ACK_DP = ACK_DP_NI; break; - // Unknowed destination------------------------------------------ + /* Unknowed destination------------------------------------------ */ default: ACK_DP = ACK_DP_UKN_DEST; break; } - // Paste result treatement into tcp trame + /* Paste result treatement into tcp trame */ for(i = 0; i < 12; i++) tcp_trame[i + 4] = result[i]; - // Send daemon processing ack to client + /* 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]; @@ -206,7 +206,7 @@ if(!no_ack) { tcp_server_send_raw_to_client(client_id, ack_dp_trame, 16); - // Send tcp trame to client + /* Send tcp trame to client */ if(ACK_DP == ACK_DP_OK) { tcp_server_send_raw_to_client(client_id, tcp_trame, 16); @@ -214,13 +214,13 @@ } } -// *********************************************************************** -// FOR Sub daemon -// *********************************************************************** +/************************************************************************ */ +/* FOR Sub daemon */ +/************************************************************************ */ -// ******************************************************************* -// sub_daemon_cmd_struct() -// ******************************************************************* +/******************************************************************** */ +/* sub_daemon_cmd_struct() */ +/******************************************************************** */ void sub_daemon_cmd_struct( unsigned char data[], unsigned char result[], @@ -230,11 +230,11 @@ unsigned char i; int my_client_handle; - switch(data[0]) + switch (data[0]) { case SUB_D_CMD_STRUC_DISCONNECT_CLIENT: pthread_mutex_lock(&tcp_mutex); - // Byte 2 equal id client to disconnect + /* Byte 2 equal id client to disconnect */ if (tcp_clients_handle[data[1]] != 0) { tcp_clients_handle[data[1]] = 0; @@ -243,7 +243,7 @@ result[0] = ACK_CMD_OK; } else - { // Bad id client + { /* Bad id client */ result[0] = ACK_CMD_KO; } pthread_mutex_unlock(&tcp_mutex); @@ -273,9 +273,9 @@ } } -// *********************************************************************** -// sub_daemon_req_info() -// *********************************************************************** +/************************************************************************ */ +/* sub_daemon_req_info() */ +/************************************************************************ */ void sub_daemon_req_info( unsigned char data[], unsigned char result[], @@ -309,13 +309,13 @@ } } -// *************************************************************************** -// FOR Tux droid -// *************************************************************************** +/************************************************************************** */ +/* FOR Tux droid */ +/************************************************************************** */ -// *********************************************************************** -// tux_cmd_raw() -// *********************************************************************** +/************************************************************************ */ +/* tux_cmd_raw() */ +/************************************************************************ */ void tux_cmd_raw( unsigned char data[], unsigned char result[] @@ -330,9 +330,9 @@ result[0] = usb_write_TuxDroid(usb_send); } -// *********************************************************************** -// tux_cmd_struct() -// *********************************************************************** +/************************************************************************ */ +/* tux_cmd_struct() */ +/************************************************************************ */ void tux_cmd_struct( unsigned char data[], unsigned char result[] @@ -340,7 +340,7 @@ { unsigned char ACK; - // Command type + /* Command type */ switch(data[0]) { case TUX_CMD_STRUCT_EYES: @@ -507,9 +507,9 @@ result[0] = ACK; } -// *********************************************************************** -// tux_req_status() -// *********************************************************************** +/************************************************************************ */ +/* tux_req_status() */ +/************************************************************************ */ void tux_req_status( unsigned char data[], unsigned char result[] @@ -616,9 +616,9 @@ } } -// *********************************************************************** -// tux_req_info() -// *********************************************************************** +/************************************************************************ */ +/* tux_req_info() */ +/************************************************************************ */ void tux_req_info( unsigned char data[], unsigned char result[] @@ -639,12 +639,12 @@ } } -// *************************************************************************** -// TUX USB -// *************************************************************************** -// *********************************************************************** -// send_usb_tuxcmd() -// *********************************************************************** +/************************************************************************** */ +/* TUX USB */ +/************************************************************************** */ +/************************************************************************ */ +/* send_usb_tuxcmd() */ +/************************************************************************ */ unsigned char send_usb_tux_cmd( unsigned char cmd, unsigned char param1, @@ -660,9 +660,9 @@ return usb_write_TuxDroid(usb_trame); } -// *********************************************************************** -// send_usb_donglecmd() -// *********************************************************************** +/************************************************************************ */ +/* send_usb_donglecmd() */ +/************************************************************************ */ unsigned char send_usb_dongle_cmd( unsigned char cmd, unsigned char param1, Modified: daemon/trunk/libs/USBDaemon_command_tux.h =================================================================== --- daemon/trunk/libs/USBDaemon_command_tux.h 2007-03-14 08:43:10 UTC (rev 152) +++ daemon/trunk/libs/USBDaemon_command_tux.h 2007-03-14 12:03:36 UTC (rev 153) @@ -22,7 +22,7 @@ /*_____________________ 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 +/* 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); @@ -30,7 +30,7 @@ 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 +/* 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_wave_wings(unsigned char count, unsigned char speed); Modified: daemon/trunk/libs/USBDaemon_status_table.c =================================================================== --- daemon/trunk/libs/USBDaemon_status_table.c 2007-03-14 08:43:10 UTC (rev 152) +++ daemon/trunk/libs/USBDaemon_status_table.c 2007-03-14 12:03:36 UTC (rev 153) @@ -29,9 +29,9 @@ unsigned char pong_received; /*_____________________ F U N C T I O N S __________________________________*/ -// *********************************************************************** -// update_raw_status_table() -// *********************************************************************** +/************************************************************************ */ +/* update_raw_status_table() */ +/************************************************************************ */ void update_raw_status_table(unsigned char new_status[TUX_RECV_LENGTH]) { switch(new_status[0]) @@ -79,9 +79,9 @@ } } -// *********************************************************************** -// update_system_status_table() -// *********************************************************************** +/************************************************************************ */ +/* update_system_status_table() */ +/************************************************************************ */ void update_system_status_table(unsigned char new_status[4]) { unsigned char tcp_trame[16]; @@ -94,7 +94,7 @@ tcp_trame[3] = SUBDATA_TP_STATUS; DONGLE_status = new_status[0]; - //RF status change + /*RF status change */ if(RF_status != new_status[1]) { RF_status = new_status[1]; @@ -102,7 +102,7 @@ tcp_trame[5] = RF_status; tcp_server_send_raw(tcp_trame, 16); } - // Command status change + /* Command status change */ if(CMD_status != new_status[2]) { CMD_status = new_status[2]; @@ -112,9 +112,9 @@ NUMBER_trames = new_status[3]; } -// *********************************************************************** -// update_version_table() -// *********************************************************************** +/************************************************************************ */ +/* update_version_table() */ +/************************************************************************ */ void update_version_table(unsigned char new_status[4]) { unsigned long tmp; @@ -127,9 +127,9 @@ hw_version[last_cpu_ver] = *hw_ver; } -// *********************************************************************** -// update_revision_table() -// *********************************************************************** +/************************************************************************ */ +/* update_revision_table() */ +/************************************************************************ */ void update_revision_table(unsigned char new_status[4]) { unsigned long tmp; @@ -141,9 +141,9 @@ hw_revision[last_cpu_ver] = *hw_rev; } -// *********************************************************************** -// update_author_table() -// *********************************************************************** +/************************************************************************ */ +/* update_author_table() */ +/************************************************************************ */ void update_author_table(unsigned char new_status[4]) { unsigned long tmp; @@ -155,17 +155,17 @@ hw_author[last_cpu_ver] = *hw_aut; } -// *********************************************************************** -// update_sound_flash_count() -// *********************************************************************** +/************************************************************************ */ +/* update_sound_flash_count() */ +/************************************************************************ */ void update_sound_flash_count(unsigned char new_status[4]) { sound_flash_count = new_status[1]; } -// *********************************************************************** -// update_ir() -// *********************************************************************** +/************************************************************************ */ +/* update_ir() */ +/************************************************************************ */ void update_ir(unsigned char new_status[4]) { unsigned char code; @@ -211,9 +211,9 @@ } } -// *********************************************************************** -// pong_event() -// *********************************************************************** +/************************************************************************ */ +/* pong_event() */ +/************************************************************************ */ void pong_event(unsigned char pong_number, unsigned char pong_received) { unsigned char tcp_trame[16]; @@ -231,9 +231,9 @@ tcp_server_send_raw(tcp_trame, 16); } -// *********************************************************************** -// portb_changed() -// *********************************************************************** +/************************************************************************ */ +/* portb_changed() */ +/************************************************************************ */ void portb_changed(unsigned char new_value) { unsigned char tcp_trame[16]; @@ -246,7 +246,7 @@ tcp_trame[2] = DATA_TP_RSP; tcp_trame[3] = SUBDATA_TP_STATUS; - // wings motor backward + /* wings motor backward */ if((portb.Byte & 0x01) != (new_value & 0x01)) { tcp_trame[4] = DATA_STATUS_WINGS_MOTOR_BACKWARD; @@ -262,7 +262,7 @@ } tcp_server_send_raw(tcp_trame, 16); } - // spin motor backward + /* spin motor backward */ if((portb.Byte & 0x02) != (new_value & 0x02)) { tcp_trame[4] = DATA_STATUS_SPIN_MOTOR_BACKWARD; @@ -278,7 +278,7 @@ } tcp_server_send_raw(tcp_trame, 16); } - // spin motor forward + /* spin motor forward */ if((portb.Byte & 0x04) != (new_value & 0x04)) { tcp_trame[4] = DATA_STATUS_SPIN_MOTOR_FORWARD; @@ -294,25 +294,25 @@ } tcp_server_send_raw(tcp_trame, 16); } - // mouth open position motor + /* mouth open position motor */ if((portb.Byte & 0x08) != (new_value & 0x08)) { tcp_trame[4] = DATA_STATUS_MOUTH_OPEN_POSITION ; if (portb.bits.PB3) { - // Up + /* Up */ printf("mouth open position 0\n"); tcp_trame[5] = 0; } else { - // Down + /* Down */ printf("mouth open position 1\n"); tcp_trame[5] = 1; } tcp_server_send_raw(tcp_trame, 16); } - // mouth close position motor + /* mouth close position motor */ if((portb.Byte & 0x10) != (new_value & 0x10)) { tcp_trame[4] = DATA_STATUS_MOUTH_CLOSED_POSITION; @@ -328,7 +328,7 @@ } tcp_server_send_raw(tcp_trame, 16); } - // charger inhibit signal + /* charger inhibit signal */ if((portb.Byte & 0x40) != (new_value & 0x40)) { tcp_trame[4] = DATA_STATUS_CHARGER_INHIBIT_SIGNAL ; @@ -347,9 +347,9 @@ portb.Byte = new_value; } -// *********************************************************************** -// portc_changed() -// *********************************************************************** +/************************************************************************ */ +/* portc_changed() */ +/************************************************************************ */ void portc_changed(unsigned char new_value) { unsigned char tcp_trame[16]; @@ -361,7 +361,7 @@ tcp_trame[1] = SS_DEFAULT; tcp_trame[2] = DATA_TP_RSP; tcp_trame[3] = SUBDATA_TP_STATUS; - // wings position switch + /* wings position switch */ if((portc.Byte & 0x02) != (new_value & 0x02)) { tcp_trame[4] = DATA_STATUS_WINGS_POSITION_SWITCH; @@ -377,7 +377,7 @@ } tcp_server_send_raw(tcp_trame, 16); } - // right blue led + /* right blue led */ if((portc.Byte & 0x04) != (new_value & 0x04)) { tcp_trame[4] = DATA_STATUS_RIGHT_BLUE_LED; @@ -393,7 +393,7 @@ } tcp_server_send_raw(tcp_trame, 16); } - // left blue led + /* left blue led */ if((portc.Byte & 0x08) != (new_value & 0x08)) { tcp_trame[4] = DATA_STATUS_LEFT_BLUE_LED; @@ -412,9 +412,9 @@ portc.Byte = new_value; } -// *********************************************************************** -// portd_changed() -// *********************************************************************** +/************************************************************************ */ +/* portd_changed() */ +/************************************************************************ */ void portd_changed(unsigned char new_value) { unsigned char tcp_trame[16]; @@ -426,7 +426,7 @@ tcp_trame[1] = SS_DEFAULT; tcp_trame[2] = DATA_TP_RSP; tcp_trame[3] = SUBDATA_TP_STATUS; - // head motor for eyes + /* head motor for eyes */ if((portd.Byte & 0x01) != (new_value & 0x01)) { tcp_trame[4] = DATA_STATUS_HEAD_MOTOR_FOR_EYES; @@ -442,7 +442,7 @@ } tcp_server_send_raw(tcp_trame, 16); } - // head motor for mouth + /* head motor for mouth */ if((portd.Byte & 0x02) != (new_value & 0x02)) { tcp_trame[4] = DATA_STATUS_HEAD_MOTOR_FOR_MOUTH; @@ -458,7 +458,7 @@ } tcp_server_send_raw(tcp_trame, 16);; } - // spin position switch + /* spin position switch */ if((portd.Byte & 0x08) != (new_value & 0x08)) { tcp_trame[4] = DATA_STATUS_SPIN_POSITION_SWITCH; @@ -474,7 +474,7 @@ } tcp_server_send_raw(tcp_trame, 16); } - // wings motor forward + /* wings motor forward */ if((portd.Byte & 0x10) != (new_value & 0x10)) { tcp_trame[4] = DATA_STATUS_WINGS_MOTOR_FORWARD; @@ -490,7 +490,7 @@ } tcp_server_send_raw(tcp_trame, 16); } - // IR led + /* IR led */ if((portd.Byte & 0x20) != (new_value & 0x20)) { tcp_trame[4] = DATA_STATUS_IR_LED; @@ -506,7 +506,7 @@ } tcp_server_send_raw(tcp_trame, 16); } - // eyes open position switch + /* eyes open position switch */ if((portd.Byte & 0x40) != (new_value & 0x40)) { tcp_trame[4] = DATA_STATUS_EYES_OPEN_POSITION_SWITCH; @@ -522,7 +522,7 @@ } tcp_server_send_raw(tcp_trame, 16); } - // eyes closed position switch + /* eyes closed position switch */ if((portd.Byte & 0x80) != (new_value & 0x80)) { tcp_trame[4] = DATA_STATUS_EYES_CLOSED_POSITION_SWITCH; @@ -541,9 +541,9 @@ portd.Byte = new_value; } -// *********************************************************************** -// sensors1_changed() -// *********************************************************************** +/************************************************************************ */ +/* sensors1_changed() */ +/************************************************************************ */ void sensors1_changed(unsigned char new_value) { unsigned char tcp_trame[16]; @@ -555,7 +555,7 @@ tcp_trame[1] = SS_DEFAULT; tcp_trame[2] = DATA_TP_RSP; tcp_trame[3] = SUBDATA_TP_STATUS; - // Left wing push + /* Left wing push */ if((sensors1.Byte & 0x01) != (new_value & 0x01)) { tcp_trame[4] = DATA_STATUS_LEFT_WING_PUSH; @@ -571,7 +571,7 @@ } tcp_server_send_raw(tcp_trame, 16); } - // Right wing push + /* Right wing push */ if((sensors1.Byte & 0x02) != (new_value & 0x02)) { tcp_trame[4] = DATA_STATUS_RIGHT_WING_PUSH; @@ -587,7 +587,7 @@ } tcp_server_send_raw(tcp_trame, 16); } - // power plug insertion switch + /* power plug insertion switch */ if((sensors1.Byte & 0x04) != (new_value & 0x04)) { tcp_trame[4] = DATA_STATUS_POWER_PLUG_SWITCH; @@ -603,7 +603,7 @@ } tcp_server_send_raw(tcp_trame, 16); } - // Head push + /* Head push */ if((sensors1.Byte & 0x08) != (new_value & 0x08)) { tcp_trame[4] = DATA_STATUS_HEAD_PUSH_SWITCH; @@ -619,7 +619,7 @@ } tcp_server_send_raw(tcp_trame, 16); } - // Led charger + /* Led charger */ if((sensors1.Byte & 0x10) != (new_value & 0x10)) { tcp_trame[4] = DATA_STATUS_CHARGER_LED_STATUS; @@ -635,7 +635,7 @@ } tcp_server_send_raw(tcp_trame, 16); } - // mute status + /* mute status */ if((sensors1.Byte & 0x80) != (new_value & 0x80)) { tcp_trame[4] = DATA_STATUS_MUTE_STATUS; @@ -654,9 +654,9 @@ sensors1.Byte = new_value; } -// *********************************************************************** -// sensors2_changed() -// *********************************************************************** +/************************************************************************ */ +/* sensors2_changed() */ +/************************************************************************ */ void sensors2_changed( unsigned char new_value_high, unsigned char new_value_low, @@ -680,9 +680,9 @@ tcp_trame[6] = new_value_low; } -// *********************************************************************** -// position1_changed() -// *********************************************************************** +/************************************************************************ */ +/* position1_changed() */ +/************************************************************************ */ void position1_changed( unsigned char eyes_position, unsigned char mouth_position, @@ -721,9 +721,9 @@ } } -// *********************************************************************** -// position2_changed() -// *********************************************************************** +/************************************************************************ */ +/* position2_changed() */ +/************************************************************************ */ void position2_changed(unsigned char spin_position) { unsigned char tcp_trame[16]; Modified: daemon/trunk/libs/USBDaemon_status_table.h =================================================================== --- daemon/trunk/libs/USBDaemon_status_table.h 2007-03-14 08:43:10 UTC (rev 152) +++ daemon/trunk/libs/USBDaemon_status_table.h 2007-03-14 12:03:36 UTC (rev 153) @@ -22,67 +22,67 @@ /*_____________________ I N C L U D E S____________________________________ */ #include "../tuxdefs/commands.h" /*_____________________ D E F I N E S ______________________________________*/ -// ------------------ Trame encapsulation --------------------------------- // -// ------ Destination header ------// -// Destinations +/* ------------------ Trame encapsulation --------------------------------- // */ +/* ------ Destination header ------// */ +/* Destinations */ #define DEST_MASTER_DAEMON 0x00 #define DEST_SUB_DAEMON 0x01 #define DEST_TUX 0x02 #define DEST_RESOURCE 0x03 #define DEST_CLIENT 0x04 -// Sub destination -#define SD_DEFAULT 0x00 // first sub dest -#define SD_ALL 0xFF // all sub dest -// ------ Source header ------/ -// Source +/* Sub destination */ +#define SD_DEFAULT 0x00 /* first sub dest */ +#define SD_ALL 0xFF /* all sub dest */ +/* ------ Source header ------/ */ +/* Source */ #define SOURCE_MASTER_DAEMON 0x00 #define SOURCE_SUB_DAEMON 0x01 #define SOURCE_TUX 0x02 #define SOURCE_RESOURCE 0x03 #define SOURCE_CLIENT 0x04 -// Sub source -#define SS_DEFAULT 0x00 // first sub source -// ------ Data header ------// -// Data types +/* Sub source */ +#define SS_DEFAULT 0x00 /* first sub source */ +/* ------ Data header ------// */ +/* Data types */ #define DATA_TP_CMD 0x01 #define DATA_TP_REQ 0x02 #define DATA_TP_RSP 0x03 #define DATA_TP_ACK_CMD 0x04 #define DATA_TP_ACK_DP 0x05 -// Sub data types +/* Sub data types */ #define SUBDATA_TP_RAW 0x01 #define SUBDATA_TP_STRUCT 0x02 #define SUBDATA_TP_STATUS 0x03 #define SUBDATA_TP_INFO 0x04 -// ------------------------------ ACK --------------------------------------// -// ACK daemon processing +/* ------------------------------ ACK --------------------------------------// */ +/* ACK daemon processing */ #define ACK_DP_OK 0x01 #define ACK_DP_UKN_DEST 0x02 #define ACK_DP_UKN_SUBDEST 0x03 #define ACK_DP_UKN_DATA_TP 0x04 #define ACK_DP_UKN_SUBDATA_TP 0x05 #define ACK_DP_NI 0xFF -// ACK CMD +/* ACK CMD */ #define ACK_CMD_DONGLE_NOT_PRESENT 0x00 #define ACK_CMD_TIMEOUT 0x01 #define ACK_CMD_OK 0x02 #define ACK_CMD_KO 0x03 #define ACK_CMD_NO_ACK 0x04 #define ACK_CMD_ERROR 0xFF -// ----------------------------- Sub daemon const --------------------------// -// Sub daemon commands +/* ----------------------------- Sub daemon const --------------------------// */ +/* Sub daemon commands */ #define SUB_D_CMD_STRUC_DISCONNECT_CLIENT 0x01 #define SUB_D_CMD_STRUC_KILL_DAEMON 0x02 #define SUB_D_CMD_STRUC_DEFINE_CLIENT_NAME 0x03 #define SUB_D_CMD_STRUC_DISCONNECT_CLIENT_ME 0x04 -// Sub daemon infos +/* Sub daemon infos */ #define SUB_D_REQ_INFO_VERSION 0x01 #define SUB_D_REQ_INFO_CLIENT_COUNT 0x02 #define SUB_D_REQ_INFO_CLIENT_NAME 0x03 #define SUB_D_REQ_INFO_MY_CLIENT_ID 0x04 #define SUB_D_REQ_INFO_PID 0x05 -// ----------------------------- TUX const ---------------------------------// -// Tux structured commands +/* ----------------------------- TUX const ---------------------------------// */ +/* Tux structured commands */ #define TUX_CMD_STRUCT_EYES 0x01 #define TUX_CMD_STRUCT_MOUTH 0x02 #define TUX_CMD_STRUCT_WINGS 0x03 @@ -96,7 +96,7 @@ #define TUX_CMD_STRUCT_PING 0x0B #define TUX_CMD_STRUCT_SLEEP 0x0C #define TUX_CMD_STRUCT_AUDIO_CHANNEL 0x0D -// Tux structured sub commands +/* Tux structured sub commands */ #define TUX_CMD_STRUCT_SUB_ON 0x01 #define TUX_CMD_STRUCT_SUB_OFF 0x02 #define TUX_CMD_STRUCT_SUB_ON_DURING 0x03 @@ -108,9 +108,9 @@ #define TUX_CMD_STRUCT_SUB_BLINK 0x09 #define TUX_CMD_STRUCT_SUB_CH_GENERAL 0x0A #define TUX_CMD_STRUCT_SUB_CH_TTS 0x0B -// Tux request information +/* Tux request information */ #define TUX_REQ_INFO_VERSION 0x01 -// Tux structured data status +/* Tux structured data status */ #define DATA_STATUS_WINGS_MOTOR_BACKWARD 0x01 #define DATA_STATUS_SPIN_MOTOR_BACKWARD 0x02 #define DATA_STATUS_SPIN_MOTOR_FORWARD 0x03 @@ -147,7 +147,7 @@ #define DATA_STATUS_IR_CODE 0x22 #define DATA_STATUS_SOUND_COUNT 0x23 #define DATA_STATUS_PONG 0x24 -// ------------------ Daemon to Application encapsulation ----------------- // +/* ------------------ Daemon to Application encapsulation ----------------- // */ /*_____________________ T Y P E _ D E F ____________________________________*/ Modified: daemon/trunk/libs/USBDaemon_tcp_server.c =================================================================== --- daemon/trunk/libs/USBDaemon_tcp_server.c 2007-03-14 08:43:10 UTC (rev 152) +++ daemon/trunk/libs/USBDaemon_tcp_server.c 2007-03-14 12:03:36 UTC (rev 153) @@ -34,9 +34,9 @@ pthread_mutex_t tcp_mutex; /*_____________________ F U N C T I O N S __________________________________*/ -// *********************************************************************** -// tcp_server_start_task() -// *********************************************************************** +/************************************************************************ */ +/* tcp_server_start_task() */ +/************************************************************************ */ void tcp_server_start_task() { int tmp_client; @@ -74,7 +74,7 @@ fcntl(tcp_server_handle, F_SETFL, O_NONBLOCK); while(tcp_server_handle) { - // Demande de connection d'un client + /* Demande de connection d'un client */ pthread_mutex_lock(&tcp_mutex); if ((tmp_client = accept(tcp_server_handle, (struct sockaddr *) NULL, NULL)) >= 0) { @@ -103,18 +103,18 @@ tcp_clients_count++; } } - // Reception de messages venant des clients + /* Reception de messages venant des clients */ if(tcp_clients_table_size > 0) { for(i = 0;i < tcp_clients_table_size;i++) { if(tcp_clients_handle[i] > 0) { - //rt_read = read(tcp_clients_handle[i], datas_recv, 16); + /*rt_read = read(tcp_clients_handle[i], datas_recv, 16); */ rt_read = recv(tcp_clients_handle[i], datas_recv, 16, 0); if(rt_read < 0) { - // No datas + /* No datas */ } else if(rt_read == 0) { @@ -141,9 +141,9 @@ } } -// *********************************************************************** -// tcp_server_send_raw() -// *********************************************************************** +/************************************************************************ */ +/* tcp_server_send_raw() */ +/************************************************************************ */ void tcp_server_send_raw( unsigned char datas[64], unsigned char datas_count) @@ -179,9 +179,9 @@ pthread_mutex_unlock(&tcp_mutex); } -// *********************************************************************** -// tcp_server_send_raw_to_client() -// *********************************************************************** +/************************************************************************ */ +/* tcp_server_send_raw_to_client() */ +/************************************************************************ */ void tcp_server_send_raw_to_client( int client_index, unsigned char datas[64], @@ -209,9 +209,9 @@ pthread_mutex_unlock(&tcp_mutex); } -// *********************************************************************** -// send_daemon_disconnected -// *********************************************************************** +/************************************************************************ */ +/* send_daemon_disconnected */ +/************************************************************************ */ void send_daemon_disconnected() { unsigned char send_data[64]; Modified: daemon/trunk/libs/USBDaemon_usb_enum.c =================================================================== --- daemon/trunk/libs/USBDaemon_usb_enum.c 2007-03-14 08:43:10 UTC (rev 152) +++ daemon/trunk/libs/USBDaemon_usb_enum.c 2007-03-14 12:03:36 UTC (rev 153) @@ -30,9 +30,9 @@ #include "USBDaemon_tcp_server.h" /*_____________________ F U N C T I O N S __________________________________*/ -// *********************************************************************** -// usb_find_TuxDroid() -// *********************************************************************** +/************************************************************************ */ +/* usb_find_TuxDroid() */ +/************************************************************************ */ struct usb_device* usb_find_TuxDroid() { struct usb_bus *bus; @@ -55,22 +55,22 @@ return NULL; } -// *********************************************************************** -// usb_open_TuxDroid() -// *********************************************************************** +/************************************************************************ */ +/* usb_open_TuxDroid() */ +/************************************************************************ */ struct usb_dev_handle* usb_open_TuxDroid(struct usb_device* tux_dev) { usb_dev_handle *tux_hdl; int error; - // Open usb device + /* Open usb device */ tux_hdl = usb_open(tux_dev); if (!tux_hdl) { printf("Can't open device: %s (%d)\n", strerror(errno), errno); return NULL; } - // Claim device interface + /* Claim device interface */ error = usb_claim_interface(tux_hdl, TUX_INTERFACE); if (error != 0) { @@ -82,7 +82,7 @@ return NULL; } } - // Set altinterface + /* Set altinterface */ error = usb_set_altinterface(tux_hdl, 0); if (error != 0) { @@ -92,14 +92,14 @@ return tux_hdl; } -// *********************************************************************** -// usb_start_task_TuxDroid() -// *********************************************************************** +/************************************************************************ */ +/* usb_start_task_TuxDroid() */ +/************************************************************************ */ void usb_start_task() { pthread_mutex_init(&usb_mutex, NULL); TUX_USB_STATUS = TUX_USB_DISCONNECTED; - // Find Tux + /* Find Tux */ do { tux_device = usb_find_TuxDroid(); @@ -110,18 +110,18 @@ sleep(1); }while(!tux_device); - // Old firmware should be discarded here + /* Old firmware should be discarded here */ if (tux_device->descriptor.bcdDevice < 0x100) { printf("\nERROR: Your dongle firmware is too old.\n"\ "This version is not compatible with this daemon, please update\n"\ "the firmware to version 1.00 or better.\n"\ - "Check http://www.tuxisalive.com/documentation/how-to/updating-the-firmware\n"\ + "Check http:/*www.tuxisalive.com/documentation/how-to/updating-the-firmware\n"\ */ "for details.\n"); exit(1); } - // Get Device handle + /* Get Device handle */ tux_handle = usb_open_TuxDroid(tux_device); if(tux_handle == NULL) { @@ -131,11 +131,11 @@ usleep(50000); TUX_USB_STATUS = TUX_USB_CONNECTED; - // Reinit audio channel + /* Reinit audio channel */ send_usb_dongle_cmd(0x02, 0, 0, 0); current_audio_channel = 0; busy_count = 0; - // Read loop + /* Read loop */ while(tux_handle) { usb_get_status_TuxDroid(); Modified: daemon/trunk/libs/USBDaemon_usb_readWrite.c =================================================================== --- daemon/trunk/libs/USBDaemon_usb_readWrite.c 2007-03-14 08:43:10 UTC (rev 152) +++ daemon/trunk/libs/USBDaemon_usb_readWrite.c 2007-03-14 12:03:36 UTC (rev 153) @@ -28,9 +28,9 @@ #include "USBDaemon_usb_readWrite.h" /*_____________________ F U N C T I O N S __________________________________*/ -// *********************************************************************** -// usb_read_TuxDroid() -// *********************************************************************** +/************************************************************************ */ +/* usb_read_TuxDroid() */ +/************************************************************************ */ void usb_read_TuxDroid() { unsigned char data[TUX_RECV_LENGTH]; @@ -50,9 +50,9 @@ } } -// *********************************************************************** -// usb_get_status_TuxDroid() -// *********************************************************************** +/************************************************************************ */ +/* usb_get_status_TuxDroid() */ +/************************************************************************ */ void usb_get_status_TuxDroid() { unsigned char data[64]; @@ -115,9 +115,9 @@ } pthread_mutex_unlock(&usb_mutex); } -// *********************************************************************** -// usb_write_TuxDroid() -// *********************************************************************** +/************************************************************************ */ +/* usb_write_TuxDroid() */ +/************************************************************************ */ unsigned char usb_write_TuxDroid(unsigned char data[TUX_SEND_LENGTH]) { int idx; @@ -130,7 +130,7 @@ pthread_mutex_unlock(&usb_mutex); return ACK_CMD_DONGLE_NOT_PRESENT; } - // Send data + /* Send data */ CMD_STATUS_FLAG = 1; idx = usb_interrupt_write(tux_handle, TUX_WRITE_EP, (char*)data, TUX_SEND_LENGTH, TUX_WRITE_TIMEOUT); counter = 0; Modified: daemon/trunk/main.c =================================================================== --- daemon/trunk/main.c 2007-03-14 08:43:10 UTC (rev 152) +++ daemon/trunk/main.c 2007-03-14 12:03:36 UTC (rev 153) @@ -42,26 +42,25 @@ struct version_s version = {0, 0, 0, "\0", "\0", 0}; -// *********************************************************************** -// Print_info_daemon -// *********************************************************************** -void -print_info_daemon() +/************************************************************************ */ +/* Print_info_daemon */ +/************************************************************************ */ +void print_info_daemon() { const char delimiters[] = " .-"; char cp[] = VERSION; char *token; - if ((token = strtok (cp, delimiters)) != NULL) - version.major = atoi (token); - if ((token = strtok (NULL, delimiters)) != NULL) - version.minor = atoi (token); - if ((token = strtok (NULL, delimiters)) != NULL) - version.release = atoi (token); - if ((token = strtok (NULL, delimiters)) != NULL) - strncpy (version.maturity, token, 10); - if ((token = strtok (NULL, delimiters)) != NULL) - strncpy (version.release_status, token, 20); + if ((token = strtok(cp, delimiters)) != NULL) + version.major = atoi(token); + if ((token = strtok(NULL, delimiters)) != NULL) + version.minor = atoi(token); + if ((token = strtok(NULL, delimiters)) != NULL) + version.release = atoi(token); + if ((token = strtok(NULL, delimiters)) != NULL) + strncpy(version.maturity, token, 10); + if ((token = strtok(NULL, delimiters)) != NULL) + strncpy(version.release_status, token, 20); printf("-----------------------------------\n"); printf("Tux USB Daemon version %s\n", VERSION); @@ -69,22 +68,20 @@ printf("-----------------------------------\n"); } -// *********************************************************************** -// On_close_daemon -// *********************************************************************** -void -on_close_daemon() +/************************************************************************ */ +/* On_close_daemon */ +/************************************************************************ */ +void on_close_daemon() { send_daemon_disconnected(); printf("Daemon closed\n"); exit(0); } -// *********************************************************************** -// Daemonizer -// *********************************************************************** -void -daemonize(unsigned char shell_view) +/************************************************************************ */ +/* Daemonizer */ +/************************************************************************ */ +void daemonize(unsigned char shell_view) { pid_t pid, sid; @@ -93,7 +90,7 @@ { case 0: break; - case -1: //erreur + case -1: /*erreur */ exit(1); break; default : @@ -101,20 +98,20 @@ } umask(0); sid = setsid(); - if(sid < 0) + if (sid < 0) { perror("sid"); exit(1); } - if(chdir("/") < 0) + if (chdir("/") < 0) { perror("chdir"); exit(1); } DAEMON_PID = (unsigned short)getpid(); printf("Daemon started : pid = %d\n", (int)getpid()); - // No shell - if(!shell_view) + /* No shell */ + if (!shell_view) { close(STDIN_FILENO); close(STDOUT_FILENO); @@ -122,11 +119,10 @@ } } -// *********************************************************************** -// Show usages of tux daemon -// *********************************************************************** -void -usage() +/************************************************************************ */ +/* Show usages of tux daemon */ +/************************************************************************ */ +void usage() { printf("usage : tuxdaemon [options]\n"); printf("options:\n"); @@ -138,11 +134,10 @@ printf(" -h show this usage list\n"); } -// *********************************************************************** -// USBDaemon main function -// *********************************************************************** -int -main(int argc, char *argv[]) +/************************************************************************ */ +/* USBDaemon main function */ +/************************************************************************ */ +int main(int argc, char *argv[]) { GMainLoop *loop; GThread *UsbThread; @@ -152,36 +147,36 @@ unsigned char shell_view; unsigned char daemonized; - // Print daemon informations + /* Print daemon informations */ print_info_daemon(); #ifdef USB_DEBUG - // Set libusb debug level + /* Set libusb debug level */ usb_set_debug(LIBUSB_DEBUG_LEVEL); usb_init(); #endif - // Program arguments + /* Program arguments */ daemonized = 0; shell_view = 0; SHOW_TRAMES = 0; SHOW_RAW_STATUS = 0; SHOW_INVALID_RAW = 0; - if(argc > 1) + if (argc > 1) { for (i = 1; i < argc; i++) { - if(!strcmp("-v", argv[i])) + if (!strcmp("-v", argv[i])) shell_view = 1; - else if(!strcmp("-d", argv[i])) + else if (!strcmp("-d", argv[i])) daemonized = 1; - else if(!strcmp("-st", argv[i])) + else if (!strcmp("-st", argv[i])) SHOW_TRAMES = 1; - else if(!strcmp("-sr", argv[i])) + else if (!strcmp("-sr", argv[i])) SHOW_RAW_STATUS = 1; - else if(!strcmp("-si", argv[i])) + else if (!strcmp("-si", argv[i])) SHOW_INVALID_RAW = 1; - else if(!strcmp("-h", argv[i])) + else if (!strcmp("-h", argv[i])) { usage(); exit(1); @@ -193,13 +188,13 @@ } } } - if(daemonized) + if (daemonized) daemonize(shell_view); - // On exiting + /* On exiting */ signal(SIGINT, on_close_daemon); signal(SIGKILL, on_close_daemon); - // Gestion Multithread - if (!g_thread_supported()) + /* Gestion Multithread */ + if (!g_thread_supported()) { g_thread_init(NULL); } @@ -216,14 +211,14 @@ last_toggle_key = 0xFF; sound_flash_count = 0; - // Start USB task thread + /* Start USB task thread */ if ((UsbThread = g_thread_create((GThreadFunc)usb_start_task, NULL, TRUE, &error)) == NULL ) { printf("Thread creation failed: %s \n", error->message); return 2; } - // Start TCP task thread + /* Start TCP task thread */ if ((TcpThread = g_thread_create((GThreadFunc)tcp_server_start_task, NULL, TRUE, &error)) == NULL ) { printf("Thread creation failed: %s \n", error->message); |
From: jaguarondi <c2m...@c2...> - 2007-03-14 08:43:48
|
Author: jaguarondi Date: 2007-03-14 09:43:10 +0100 (Wed, 14 Mar 2007) New Revision: 152 Added: sounds/original/ sounds/original/1.wav sounds/original/2.wav sounds/original/3.wav sounds/original/4.wav sounds/original/5.wav sounds/original/6.wav sounds/original/7.wav sounds/original/8.wav sounds/original/9.wav Removed: sounds/1.wav sounds/2.wav sounds/3.wav sounds/4.wav sounds/5.wav sounds/6.wav sounds/7.wav sounds/8.wav sounds/9.wav Log: moved sounds to a new folder Deleted: sounds/1.wav Deleted: sounds/2.wav Deleted: sounds/3.wav Deleted: sounds/4.wav Deleted: sounds/5.wav Deleted: sounds/6.wav Deleted: sounds/7.wav Deleted: sounds/8.wav Deleted: sounds/9.wav Copied: sounds/original/1.wav (from rev 116, sounds/1.wav) Copied: sounds/original/2.wav (from rev 116, sounds/2.wav) Copied: sounds/original/3.wav (from rev 116, sounds/3.wav) Copied: sounds/original/4.wav (from rev 116, sounds/4.wav) Copied: sounds/original/5.wav (from rev 116, sounds/5.wav) Copied: sounds/original/6.wav (from rev 116, sounds/6.wav) Copied: sounds/original/7.wav (from rev 116, sounds/7.wav) Copied: sounds/original/8.wav (from rev 116, sounds/8.wav) Copied: sounds/original/9.wav (from rev 116, sounds/9.wav) |
From: srikanta <c2m...@c2...> - 2007-03-13 15:19:07
|
Author: srikanta Date: 2007-03-13 16:18:53 +0100 (Tue, 13 Mar 2007) New Revision: 151 Modified: 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/main.c Log: Added enums for USB and TCP status for better readability Modified: daemon/trunk/libs/USBDaemon_tcp_server.c =================================================================== --- daemon/trunk/libs/USBDaemon_tcp_server.c 2007-03-13 14:09:44 UTC (rev 150) +++ daemon/trunk/libs/USBDaemon_tcp_server.c 2007-03-13 15:18:53 UTC (rev 151) @@ -47,7 +47,7 @@ int tmp_handle; pthread_mutex_init(&tcp_mutex, NULL); - TUX_TCP_STATUS = 0; + TUX_TCP_STATUS = TUX_TCP_STATUS_DOWN; if ((tcp_server_handle = socket(AF_INET, SOCK_STREAM, 0)) < 0 ) { printf("TCP socket : server error\n"); @@ -68,7 +68,7 @@ return; } printf("TCP socket : opened\n"); - TUX_TCP_STATUS = 1; + TUX_TCP_STATUS = TUX_TCP_STATUS_UP; tcp_clients_table_size = 0; tcp_clients_count = 0; fcntl(tcp_server_handle, F_SETFL, O_NONBLOCK); @@ -152,7 +152,7 @@ int tmp_handle; pthread_mutex_lock(&tcp_mutex); - if(TUX_TCP_STATUS == 0) + if(TUX_TCP_STATUS == TUX_TCP_STATUS_DOWN) { pthread_mutex_unlock(&tcp_mutex); return; @@ -190,7 +190,7 @@ int tmp_handle; pthread_mutex_lock(&tcp_mutex); - if(TUX_TCP_STATUS == 0) + if(TUX_TCP_STATUS == TUX_TCP_STATUS_DOWN) { pthread_mutex_unlock(&tcp_mutex); return; Modified: daemon/trunk/libs/USBDaemon_tcp_server.h =================================================================== --- daemon/trunk/libs/USBDaemon_tcp_server.h 2007-03-13 14:09:44 UTC (rev 150) +++ daemon/trunk/libs/USBDaemon_tcp_server.h 2007-03-13 15:18:53 UTC (rev 151) @@ -28,6 +28,12 @@ /*_____________________ D E F I N E S ______________________________________*/ #define TUX_SERVER_MAXLINES 4096 #define TUX_SERVER_PORT 5000 +/*_____________________ D E F I N E S ______________________________________*/ +typedef enum +{ + TUX_TCP_STATUS_DOWN = 0, + TUX_TCP_STATUS_UP = 1 +} TUX_TCP_CONN_STATUS; /*_____________________ T Y P E _ D E F ____________________________________*/ typedef unsigned char _client_name[16]; /*_____________________ V A R I A B L E S ___________________________________*/ @@ -37,7 +43,7 @@ unsigned char tcp_clients_count; _client_name tcp_clients_name[256]; struct sockaddr_in tcp_server_sockaddr; -int TUX_TCP_STATUS; +TUX_TCP_CONN_STATUS TUX_TCP_STATUS; pthread_mutex_t tcp_mutex; /*_____________________ F U N C T I O N S __________________________________*/ void tcp_server_start_task(); Modified: daemon/trunk/libs/USBDaemon_usb_enum.c =================================================================== --- daemon/trunk/libs/USBDaemon_usb_enum.c 2007-03-13 14:09:44 UTC (rev 150) +++ daemon/trunk/libs/USBDaemon_usb_enum.c 2007-03-13 15:18:53 UTC (rev 151) @@ -98,7 +98,7 @@ void usb_start_task() { pthread_mutex_init(&usb_mutex, NULL); - TUX_USB_STATUS = 0; + TUX_USB_STATUS = TUX_USB_DISCONNECTED; // Find Tux do { @@ -130,7 +130,7 @@ } usleep(50000); - TUX_USB_STATUS = 1; + TUX_USB_STATUS = TUX_USB_CONNECTED; // Reinit audio channel send_usb_dongle_cmd(0x02, 0, 0, 0); current_audio_channel = 0; Modified: daemon/trunk/libs/USBDaemon_usb_enum.h =================================================================== --- daemon/trunk/libs/USBDaemon_usb_enum.h 2007-03-13 14:09:44 UTC (rev 150) +++ daemon/trunk/libs/USBDaemon_usb_enum.h 2007-03-13 15:18:53 UTC (rev 151) @@ -22,10 +22,17 @@ /*_____________________ I N C L U D E S____________________________________ */ #include <usb.h> /*_____________________ D E F I N E S ______________________________________*/ +/*_____________________ E N U M S ______________________________________*/ +typedef enum +{ + TUX_USB_DISCONNECTED = 0, + TUX_USB_CONNECTED = 1 +} TUX_USB_CONN_STATUS; + /*_____________________ V A R I A B L E S __________________________________*/ usb_dev_handle *tux_handle; struct usb_device* tux_device; -int TUX_USB_STATUS; +TUX_USB_CONN_STATUS TUX_USB_STATUS; pthread_mutex_t usb_mutex; /*_____________________ F U N C T I O N S __________________________________*/ struct usb_device* usb_find_TuxDroid() ; Modified: daemon/trunk/libs/USBDaemon_usb_readWrite.c =================================================================== --- daemon/trunk/libs/USBDaemon_usb_readWrite.c 2007-03-13 14:09:44 UTC (rev 150) +++ daemon/trunk/libs/USBDaemon_usb_readWrite.c 2007-03-13 15:18:53 UTC (rev 151) @@ -37,7 +37,7 @@ int idx; int i; - if (!TUX_USB_STATUS) return; + if (TUX_USB_CONNECTED != TUX_USB_STATUS) return; for(i = 0;i < 5;i++) { pthread_mutex_lock(&usb_mutex); @@ -64,7 +64,7 @@ for(i = 0;i < 64;i++)data[i] = 0; cmd_send[0] = 0x01;cmd_send[1] = 0x01;cmd_send[2] = 0x00;cmd_send[3] = 0x00;cmd_send[4] = 0x00; pthread_mutex_lock(&usb_mutex); - if (!TUX_USB_STATUS) + if (TUX_USB_CONNECTED != TUX_USB_STATUS) { pthread_mutex_unlock(&usb_mutex); return; @@ -125,7 +125,7 @@ unsigned char CSF; pthread_mutex_lock(&usb_mutex); - if (!TUX_USB_STATUS) + if (TUX_USB_CONNECTED != TUX_USB_STATUS) { pthread_mutex_unlock(&usb_mutex); return ACK_CMD_DONGLE_NOT_PRESENT; Modified: daemon/trunk/main.c =================================================================== --- daemon/trunk/main.c 2007-03-13 14:09:44 UTC (rev 150) +++ daemon/trunk/main.c 2007-03-13 15:18:53 UTC (rev 151) @@ -209,8 +209,8 @@ return 1; } - TUX_USB_STATUS = 0; - TUX_TCP_STATUS = 0; + TUX_USB_STATUS = TUX_USB_DISCONNECTED; + TUX_TCP_STATUS = TUX_TCP_STATUS_DOWN; CLOSE_DAEMON = 0; last_remote_key = 0xFF; last_toggle_key = 0xFF; |
From: jaguarondi <c2m...@c2...> - 2007-03-13 14:10:26
|
Author: jaguarondi Date: 2007-03-13 15:09:44 +0100 (Tue, 13 Mar 2007) New Revision: 150 Modified: daemon/trunk/TODO Log: - UPD: some TODO stuff Modified: daemon/trunk/TODO =================================================================== --- daemon/trunk/TODO 2007-03-13 14:08:28 UTC (rev 149) +++ daemon/trunk/TODO 2007-03-13 14:09:44 UTC (rev 150) @@ -1,3 +1,6 @@ $Id$ +- Add 'install' and 'uninstall' targets for make, or better use autotools if someone knows how that work. +- Add options to choose the debug level at start time + |
From: jaguarondi <c2m...@c2...> - 2007-03-13 14:08:41
|
Author: jaguarondi Date: 2007-03-13 15:08:28 +0100 (Tue, 13 Mar 2007) New Revision: 149 Modified: daemon/trunk/libs/USBDaemon_usb_enum.c Log: - ADD: added an ERROR if the old dongle firmware is detected, the program points to the upgrade guide and exits Modified: daemon/trunk/libs/USBDaemon_usb_enum.c =================================================================== --- daemon/trunk/libs/USBDaemon_usb_enum.c 2007-03-13 14:07:04 UTC (rev 148) +++ daemon/trunk/libs/USBDaemon_usb_enum.c 2007-03-13 14:08:28 UTC (rev 149) @@ -110,6 +110,17 @@ sleep(1); }while(!tux_device); + // Old firmware should be discarded here + if (tux_device->descriptor.bcdDevice < 0x100) + { + printf("\nERROR: Your dongle firmware is too old.\n"\ + "This version is not compatible with this daemon, please update\n"\ + "the firmware to version 1.00 or better.\n"\ + "Check http://www.tuxisalive.com/documentation/how-to/updating-the-firmware\n"\ + "for details.\n"); + exit(1); + } + // Get Device handle tux_handle = usb_open_TuxDroid(tux_device); if(tux_handle == NULL) |
From: jaguarondi <c2m...@c2...> - 2007-03-13 14:07:18
|
Author: jaguarondi Date: 2007-03-13 15:07:04 +0100 (Tue, 13 Mar 2007) New Revision: 148 Modified: daemon/trunk/main.c Log: - CLN: main.c was not committed last time, same patch from srikanta Modified: daemon/trunk/main.c =================================================================== --- daemon/trunk/main.c 2007-03-12 16:17:30 UTC (rev 147) +++ daemon/trunk/main.c 2007-03-13 14:07:04 UTC (rev 148) @@ -18,6 +18,7 @@ * 02111-1307, USA. */ /* $Id$ */ + /*_____________________ I N C L U D E S____________________________________ */ #include <stdio.h> #include <stdlib.h> @@ -41,186 +42,194 @@ struct version_s version = {0, 0, 0, "\0", "\0", 0}; - // *********************************************************************** - // Print_info_daemon - // *********************************************************************** - void - print_info_daemon() - { - const char delimiters[] = " .-"; - char cp[] = VERSION; - char *token; +// *********************************************************************** +// Print_info_daemon +// *********************************************************************** +void +print_info_daemon() +{ + const char delimiters[] = " .-"; + char cp[] = VERSION; + char *token; - if ((token = strtok (cp, delimiters)) != NULL) - version.major = atoi (token); - if ((token = strtok (NULL, delimiters)) != NULL) - version.minor = atoi (token); - if ((token = strtok (NULL, delimiters)) != NULL) - version.release = atoi (token); - if ((token = strtok (NULL, delimiters)) != NULL) - strncpy (version.maturity, token, 10); - if ((token = strtok (NULL, delimiters)) != NULL) - strncpy (version.release_status, token, 20); + if ((token = strtok (cp, delimiters)) != NULL) + version.major = atoi (token); + if ((token = strtok (NULL, delimiters)) != NULL) + version.minor = atoi (token); + if ((token = strtok (NULL, delimiters)) != NULL) + version.release = atoi (token); + if ((token = strtok (NULL, delimiters)) != NULL) + strncpy (version.maturity, token, 10); + if ((token = strtok (NULL, delimiters)) != NULL) + strncpy (version.release_status, token, 20); - printf("-----------------------------------\n"); - printf("Tux USB Daemon version %s\n",VERSION); - printf("Kysoh 2007.\n"); - printf("-----------------------------------\n"); - } + printf("-----------------------------------\n"); + printf("Tux USB Daemon version %s\n", VERSION); + printf("Kysoh 2007.\n"); + printf("-----------------------------------\n"); +} - // *********************************************************************** - // On_close_daemon - // *********************************************************************** - void - on_close_daemon() +// *********************************************************************** +// On_close_daemon +// *********************************************************************** +void +on_close_daemon() +{ + send_daemon_disconnected(); + printf("Daemon closed\n"); + exit(0); +} + +// *********************************************************************** +// Daemonizer +// *********************************************************************** +void +daemonize(unsigned char shell_view) +{ + pid_t pid, sid; + + pid = fork(); + switch (pid) { - send_daemon_disconnected(); - printf("Daemon closed\n"); - exit(0); + case 0: + break; + case -1: //erreur + exit(1); + break; + default : + exit(0); } - - // *********************************************************************** - // Daemonizer - // *********************************************************************** - void - daemonize(unsigned char shell_view) + umask(0); + sid = setsid(); + if(sid < 0) { - pid_t pid,sid; - - pid=fork(); - switch(pid){ - case 0: - break; - case -1: //erreur - exit(1); - break; - default : - exit(0); - } - umask(0); - sid=setsid(); - if(sid<0){ - perror("sid"); - exit(1); - } - if(chdir("/")<0){ - perror("chdir"); - exit(1); - } - DAEMON_PID=(unsigned short)getpid(); - printf("Daemon started : pid=%d\n",(int)getpid()); - // No shell - if(!shell_view) - { - close(STDIN_FILENO); - close(STDOUT_FILENO); - close(STDERR_FILENO); - } + perror("sid"); + exit(1); } - - // *********************************************************************** - // Show usages of tux daemon - // *********************************************************************** - void - usage() + if(chdir("/") < 0) { - printf("usage : tuxdaemon [options]\n"); - printf("options:\n"); - printf(" -d start in daemon mode\n"); - printf(" -v view in shell ( for daemon mode )\n"); - printf(" -st show the structure of the usb trames\n"); - printf(" -sr show all raw statutes\n"); - printf(" -si show only invalid raw statutes\n"); - printf(" -h show this usage list\n"); + perror("chdir"); + exit(1); } - - // *********************************************************************** - // USBDaemon main function - // *********************************************************************** - int - main( - int argc, - char *argv[] - ) + DAEMON_PID = (unsigned short)getpid(); + printf("Daemon started : pid = %d\n", (int)getpid()); + // No shell + if(!shell_view) { - GMainLoop *loop; - GThread *UsbThread; - GThread *TcpThread; - GError *error=NULL; - unsigned char i; - unsigned char shell_view; - unsigned char daemonized; - - // Print daemon informations - print_info_daemon(); + close(STDIN_FILENO); + close(STDOUT_FILENO); + close(STDERR_FILENO); + } +} +// *********************************************************************** +// Show usages of tux daemon +// *********************************************************************** +void +usage() +{ + printf("usage : tuxdaemon [options]\n"); + printf("options:\n"); + printf(" -d start in daemon mode\n"); + printf(" -v view in shell ( for daemon mode )\n"); + printf(" -st show the structure of the usb trames\n"); + printf(" -sr show all raw statutes\n"); + printf(" -si show only invalid raw statutes\n"); + printf(" -h show this usage list\n"); +} + +// *********************************************************************** +// USBDaemon main function +// *********************************************************************** +int +main(int argc, char *argv[]) +{ + GMainLoop *loop; + GThread *UsbThread; + GThread *TcpThread; + GError *error = NULL; + unsigned char i; + unsigned char shell_view; + unsigned char daemonized; + + // Print daemon informations + print_info_daemon(); + #ifdef USB_DEBUG - // Set libusb debug level - usb_set_debug(LIBUSB_DEBUG_LEVEL); - usb_init(); + // Set libusb debug level + usb_set_debug(LIBUSB_DEBUG_LEVEL); + usb_init(); #endif - // Program arguments - daemonized=0; - shell_view=0; - SHOW_TRAMES=0; - SHOW_RAW_STATUS=0; - SHOW_INVALID_RAW=0; - if(argc>1){ - for(i=1;i<argc;i++){ - if(!strcmp("-v", argv[i])) - shell_view=1; - else if(!strcmp("-d", argv[i])) - daemonized=1; - else if(!strcmp("-st", argv[i])) - SHOW_TRAMES=1; - else if(!strcmp("-sr", argv[i])) - SHOW_RAW_STATUS=1; - else if(!strcmp("-si", argv[i])) - SHOW_INVALID_RAW=1; - else if(!strcmp("-h", argv[i])){ - usage(); - exit(1); - }else{ - usage(); - exit(1); - } + // Program arguments + daemonized = 0; + shell_view = 0; + SHOW_TRAMES = 0; + SHOW_RAW_STATUS = 0; + SHOW_INVALID_RAW = 0; + if(argc > 1) + { + for (i = 1; i < argc; i++) + { + if(!strcmp("-v", argv[i])) + shell_view = 1; + else if(!strcmp("-d", argv[i])) + daemonized = 1; + else if(!strcmp("-st", argv[i])) + SHOW_TRAMES = 1; + else if(!strcmp("-sr", argv[i])) + SHOW_RAW_STATUS = 1; + else if(!strcmp("-si", argv[i])) + SHOW_INVALID_RAW = 1; + else if(!strcmp("-h", argv[i])) + { + usage(); + exit(1); } + else + { + usage(); + exit(1); + } } - if(daemonized) - daemonize(shell_view); - // On exiting - signal(SIGINT, on_close_daemon); - signal(SIGKILL, on_close_daemon); - // Gestion Multithread - if (!g_thread_supported()) { - g_thread_init(NULL); - }else{ - printf("g_thread NOT supported\n"); - return 1; - } - - TUX_USB_STATUS=0; - TUX_TCP_STATUS=0; - CLOSE_DAEMON=0; - last_remote_key=0xFF; - last_toggle_key=0xFF; - sound_flash_count=0; - - // Start USB task thread - if ((UsbThread = g_thread_create((GThreadFunc)usb_start_task,NULL,TRUE,&error))== NULL ) { - printf("Thread creation failed: %s \n",error->message); - return 2; - } - - // Start TCP task thread - if ((TcpThread = g_thread_create((GThreadFunc)tcp_server_start_task,NULL,TRUE,&error))== NULL ) { - printf("Thread creation failed: %s \n",error->message); - return 2; - } - loop = g_main_loop_new(NULL,FALSE); - g_main_loop_run(loop); - return 0; } + if(daemonized) + daemonize(shell_view); + // On exiting + signal(SIGINT, on_close_daemon); + signal(SIGKILL, on_close_daemon); + // Gestion Multithread + if (!g_thread_supported()) + { + g_thread_init(NULL); + } + else + { + printf("g_thread NOT supported\n"); + return 1; + } - + TUX_USB_STATUS = 0; + TUX_TCP_STATUS = 0; + CLOSE_DAEMON = 0; + last_remote_key = 0xFF; + last_toggle_key = 0xFF; + sound_flash_count = 0; + + // Start USB task thread + if ((UsbThread = g_thread_create((GThreadFunc)usb_start_task, NULL, TRUE, &error)) == NULL ) + { + printf("Thread creation failed: %s \n", error->message); + return 2; + } + + // Start TCP task thread + if ((TcpThread = g_thread_create((GThreadFunc)tcp_server_start_task, NULL, TRUE, &error)) == NULL ) + { + printf("Thread creation failed: %s \n", error->message); + return 2; + } + loop = g_main_loop_new(NULL, FALSE); + g_main_loop_run(loop); + return 0; +} |
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] |
From: jaguarondi <c2m...@c2...> - 2007-03-09 15:12:59
|
Author: jaguarondi Date: 2007-03-09 16:12:39 +0100 (Fri, 09 Mar 2007) New Revision: 146 Modified: firmware/hex/fuxusb.hex Log: New fuxusb firmware: - BUG: fixed the status request problem that culd lead to lost commands - BUG: fixed the interrupts endpoints, now libusb should use interrupts and not bulk for read/write - ADD: a second audio interface has been added for TTS and a control interface to select which audio interface is active Modified: firmware/hex/fuxusb.hex =================================================================== --- firmware/hex/fuxusb.hex 2007-03-09 15:00:51 UTC (rev 145) +++ firmware/hex/fuxusb.hex 2007-03-09 15:12:39 UTC (rev 146) @@ -1,493 +1,519 @@ -:1017D700C281D2A3438F01D2AF1210B61200468046 -:0117E700FB06 -:0C188D00C8040101C9FFEE00CA00000001 -:04164100410228003A -:10164500C10AC107C109C106C10843022901022C0B -:100EFD00900229E0FBA3E0FAA3E0F922EF24FFFF23 -:100F0D00EE34FFFEED34FFFDEC34FFFC020796904E -:100F1D0002BEE0FF04F09002C5E0FCA3E02FF582D5 -:100F2D00E43CF583E5CFF0051A22E0FCA3E0FDA338 -:100F3D00E0FEA3E0FFEC4D4E4F22E493F5CFA3E48A -:100F4D0093FC740193FDECF5CFEDF5CF22E5122462 -:100F5D0006FFE433FEE515229001E1E0D3648094B1 -:0C0F6D008222900223E0FEA3E0FF4E224F -:1010B6009002CB1207A20000271012193E43BC80F3 -:1010C60043BC109002CB120F37601E9002CBA3A335 -:1010D600A3E024FFFFEE34FFFEED34FFFDEC34FF0A -:1010E600FC9002CB12079680DA53BCEF7D80E4FFBA -:1010F600121937E4FF12180A12002653F1FC43F1C5 -:1011060003D2B3C206C280C290C200E490019CF032 -:02111600C20312 -:0111180022B4 -:100C340090019DE064016003020D0EA3E0600302D5 -:100C44000D5DA3E06003020D5DA3E07072120F65F9 -:100C5400506D75C704E4F5CF30A304F5CF80037558 -:100C6400CF0190019CE0F5CF120EFD121873EF54E2 -:100C7400FC9002D4F0E01313543FF5CFE4F51B903D -:100C840002D4E0FFE51BC39F500C120EFD1214D9D1 -:100C94008FCF051B80E99002D4E0FFC3943C501031 -:100CA4008F1BE51BC3943C5007E4F5CF051B80F272 -:100CB400D20AC206E490019CF09001E1E004F090B5 -:100CC40001A0E0F46003020D5DF5A8F5B175C3144D -:100CD400FD7F401215087B017DF47F041216F79006 -:100CE40002D01207A20000271043BC109002D012B9 -:100CF4000F3760089002D0120F0980F053BCEF1236 -:100D0400192875A61E75A6E180FE90019DE0640673 -:100D1400704775C70490188D93F5CFA3E493FF54DF -:100D240007F5CFEF131313541FF5CFA3E493F5CFB7 -:100D3400A3E493F5CF901891120F47901894E4937D -:100D4400F5CF901895120F47901898E493F5CFD2E9 -:090D54000AC2069001E1E004F07E -:010D5D002273 -:10004600200519E5BD20E50302035753BCBFD205C1 -:1000560053BDFE53BDDF53BDF7020357E5BD543113 -:10006600602BE5BD30E00CC205D2B3C28153BDFEA4 -:1000760043BC40E5BD30E41553BDEF120026D20562 -:100086001215B412181B12182BD2B3C281E5BD206B -:10009600E30302015653BDF7900224E004F0700614 -:1000A600900223E004F0300A0D120F65500875C760 -:1000B6000443CE10C20A9001DEE07002A3E0601095 -:1000C6009001DFE024FFF09001DEE034FFF08010C5 -:1000D60020090DE4F514F513D20BD291C20CC20D12 -:1000E600900228E0600214F0300565900226E06078 -:1000F6005F30A32C20030F53F1FC43F101E490027F -:1001060023F0A3F0D203120F6F7002D2B3BE020522 -:10011600BFFF02C2B3EFF47003EE640370328027B0 -:1001260030030F53F1FC43F103E4900223F0A3F0F4 -:10013600C203120F6F7002D2B3EF64104E7002C288 -:10014600B3EF64204E700990022374FFF0A314F0FD -:1001560020071C900226E0601630101375C7017543 -:100166001A0812126C8FCFD51AF843CE10D207E5B3 -:10017600F87003020357E5F830E41D75C704E5CEB1 -:1001860030E01553CEFE9001E1E014F0E0C3648048 -:1001960094805002E4F0D2B5E5F830E00BE4F5C700 -:1001A600E5CE30E20312194CE5F830E20975C702D4 -:1001B60012140F53CEFDE5F830E10D75C701E5CEFB -:1001C60030E00553CEFEC207E5F820E503020357EB -:1001D60030010302035775C705E5CE54427003028A -:1001E600035712196E9001E0EFF0900225E5CFF06B -:1001F600E0FF7021D201F51A9001E0E014FEE51A45 -:10020600C39E400302033774E2251AF582E43401E3 -:10021600120F2F80E3EFB40125E4F51A9001E0E018 -:1002260014FFE51AC39F500E749D251AF582E43417 -:1002360001120F2F80E6120C34C20102033790021E -:1002460025E064026003020337D209C201C20090AE -:1002560002CAE5CFF0E064017042C281C291F51A8C -:10026600051AE51AB4FFF9E4F51A051AE51AB4FFFA -:10027600F9D2811217E8E5CF25E09002C1F090028D -:10028600C8E5CFF09002C0E5CFF0E49002BEF09052 -:1002960002C7F090022874FAF00203159002CAE031 -:0402A600FFB403118D -:0E02AA00C2099002CFE5CFF0E5CFF0E5CFF02E -:1002B800020315EF640270559002C7E07034AFCFA7 -:1002C8009002C2F0A3EFF0E0F8E4F0E89002C2F088 -:1002D800AFCFA3E02FF09002C2E03400F0E4F51AAB -:1002E8009001E0E024FCFFE51AC39F501A120F1C8E -:1002F80080EEE4F51A9001E0E024FEFFE51AC39FC2 -:100308005005120F1C80EE9002C7E004F09002C066 -:10031800E0FF9002C7E0B507149002C8E0FF900222 -:10032800BEE0B50708E4F09002C7F0D202C201753A -:10033800C70520040AE5CE30E11053CEFD800B300E -:100348000408E5CE30E60353CEBFA204B3920420DE -:1003580005030205C63009672002030205C6300AF4 -:10036800030205C6900228E060030205C678D07C27 -:10037800027D017B017A0279C1FE7F061206979001 -:1003880002D67440F012153690019AE020E0F990F8 -:1003980002287414F075C70475CFF090019AE0C470 -:1003A8001313540330E009E054BFF0E4F5CF8003A1 -:1003B80075CF01E4F5CFF5CFF5CFD20AC2022230CE -:1003C800A3030205A3D2082000030205C630B41C0B -:1003D800300B199001DE7417F0A37470F0C20DE4AD -:1003E800F515F514F513C20BC291D20C200C0302BB -:1003F80005C6200D030205C6C20DE5147023300F93 -:100408000D30010575110A8010751102800B30013D -:10041800057511088003E4F5118511C5751401806F -:100428004DE514B40114E515B41103751402E51172 -:1004380030E1381212B08FC58034E514640270269A -:10044800E515B4150AE51130E302C201751403E598 -:100458001130E31074D02515F582E43401F583E0FA -:10046800F5C5800A8005E514B40303E4F5C5051550 -:10047800E5137025AFC4BF8003D38001C3400430A7 -:10048800A3F22285C510E5C530E705751222800361 -:1004980075121175130102059CE51364017031AFE3 -:1004A800C4BF8003D38001C3400430A3F222E51007 -:1004B80030E107D290AFC512136BE5122401120F79 -:1004C8005E6F7001EE600302059C75130202059CC5 -:1004D800E5136402600302059CAFC4BF8003D380A8 -:1004E80001C3400430A3F222E51020E30302058B88 -:1004F800E5122405FFE433FEAD157C00D3ED9FEE35 -:100508006480F87480985016C3ED9512FBEC940043 -:10051800FA746C2BF58274023AF583E5C5F0ED6F39 -:100528007002EC6E7041120EFD121873EF540360E6 -:1005380015120EFD12185890026E74F9F0A3740487 -:10054800F0E4A3F0A3F0E4F51A120EFD746E251A78 -:10055800F582E43402F583E0FD7C00121562051A89 -:10056800E51AC3940440E2120F5AB50716E4B5061B -:1005780012900227E5C5F0E0FF90019CE0C39F5070 -:1005880002EFF0120F5AB5070BE4B50607C20CD2FA -:1005980091D20B22300D0302040022300820C20839 -:1005A800C2819002CB1207A200007D009002CB12FC -:0E05B8000F3760089002CB120F0980F0D2813D -:0105C6002212 -:06165500C18BC10DC10CA8 -:0E184A00E4F514F513D20BD291C20CC20D229C -:1015B40053AFFE43C31043C30253C3F753C3FB43A8 -:1015C400C32043C340D2B2D2B4D291D288D2A8E4C9 -:0715D400F514F513C200221B -:030003000219627D -:03196200D20D3271 -:1017E8001219521219309002C57401F0A37406F050 -:0117F80022CE -:1015360090019AE054BFF09002D0E090019BF090A9 -:1015460002D1E0FCA3E0FDEC900104F0A3EDF090E5 -:0C15560002D6E02402900199F002183B3C -:1012260090018DE0FF04F0748E2FF582E43401F511 -:1012360083E595F022E0FF04F074042FF582E43490 -:1012460001F58322900199E0FF900103E0C39F22FC -:10125600E0FBA3E0FAA3E0F9EA494B22A3E0FAA3F4 -:06126600E0F5828A8322FC -:0419520075938022E7 -:071930007593C043B10222D0 -:0C189900900186EBF0A3EAF0A3E9F02236 -:0C18A50090018AEBF0A3EAF0A3E9F02226 -:0F183B0090019AE04401F0E4900103F002195685 -:041956004393202275 -:0B18C90043931090019AE054FEF022BF -:031965008F952239 -:04195A00439304228D -:04195E005393FB2282 -:03196800AF952216 -:03196B00AF942214 -:0300430002098827 -:10098800C0E0C0F0C083C082C0D075D008AF94EF7B -:100998001207D30AD40009ED0809ED1009F5180A61 -:1009A800152009F5280A15300A1F380A25400A15A6 -:1009B800480A22500A12580A35600A35680A357002 -:1009C8000A35780A4B800A5D880A4B900A5D980AB6 -:1009D80064A00A90A80A90B00AB7B80A1FC00A1FF4 -:1009E800C800000AD75393DF90019B800812124A6F -:1009F800500B12123BE0FF121965020AD71218C9F0 -:100A080090019AE04440F0020AD712122690019A07 -:100A1800E04402F0020AD4020ACF12122690018999 -:100A2800E014FF90018DE0C39F5027802290019A27 -:100A3800E04401F090018DE4F090019AE054FBF05D -:100A4800020AC512122690018DE0C39408500302D1 -:100A58000AC5020ACA90019AE04404F012193090BB -:100A68000186121256601890018DE0FF7B017A0111 -:100A7800798EC00A900186121262D00A1207FD9080 -:100A8800019AE054FEF0804790018A121256601ACB -:100A98007B017A017904C00A90018A121262D00A95 -:100AA8007F821207FD900199EFF0900103E4F09026 -:100AB800010312123BE0F59512124A500512195A19 -:100AC800800D12195E800812193080031218C9535C -:0D0AD80093F7D0D0D082D083D0F0D0E032A0 -:10171100AE18AF19C39002F0E09FFF9002EFE09E78 -:09172100FED3EF94FFEE947F2249 -:1013DA00AC18AD19ED2FFFEC3E9002EFF0A3EFF041 -:1013EA0020AF1312171150047F0080027F01EF70A3 -:1013FA00131218DF80ED12171150047F0080027F4C -:04140A0001EF60F29C -:01140E0022BB -:10166000E4F519F518F517F5169002F1F0A3F0F569 -:0F1670008A758CF0438901438F02D28CD2A92254 -:0A18DF0020AF06308D0312105122D5 -:03000B000210518F -:10105100C0E0C0F0C083C082C0D075D000C000C065 -:1010610004C005C006C007C28D438CF09002F17424 -:101071000C75F04A12076AFEC3E5F0944AEE940C2F -:10108100E450047F0380027F02FEFDFCE5192FF589 -:1010910019E5183EF518E5173DF517E5163CF51667 -:1010A100D007D006D005D004D000D0D0D082D083D4 -:0510B100D0F0D0E03298 -:100AE5001201100100000020EB0307FF11000102B5 -:100AF50003011A03430032004D0045002000420067 -:100B050045004C004700490055004D001E035400A8 -:100B150055005800200052004600200044004F00B8 -:100B25004E0047004C00450020000C03310030000A -:100B3500300030003100040309041E035400550041 -:100B45005800200052004600200044004F004E008F -:100B550047004C00450020000902D700040104802D -:100B6500320904000000010100000A2401000146C9 -:100B7500000201020C240201010200010000000034 -:100B85000C240202010100010000000009240303F6 -:100B950001010005000924030401030006000924DE -:100BA50006050102030000092406060202030000EF -:100BB500090401000001020000090401010101020C -:100BC5000000072401030102000B240201010108B2 -:100BD50001401F00090581010800010000072501EA -:100BE50000000000090402000001020000090402DF -:100BF500010101020000072401020102000B240289 -:100C05000101010801401F0009050201080001005A -:100C15000007250100000000090403000200000090 -:0F0C250000070584034000000705050340000099 -:10111900E5CFF0A3E5CFF0A3E5CFF0A3E5CFF0222B -:10112900741E9002D0F09002B874FFF0A32253CE3F -:10113900FB43CE202253CE7F53CEFB43CE10225306 -:10114900CEFB43CE80229002B8E0FBA3E0FAA3E0F5 -:10115900F92253CEFD53CE7F2253CEDF53CEF72251 -:0F11690053CEFEE5CE544222E4F5CF43CE102202 -:10002600E49002BCF0A3F0A3F0900226F0C2059083 -:0C0036000223F0A3F09001E1F0C20422CC -:1014A9007D857F011219377F0112180A7D817F021C -:1014B9001219377F0212180A7D877F041219377FA4 -:1014C9000412180A7D837F051219377F0502180A4D -:06194C00E4F5C7020D5E88 -:100D5E009002B7E5CFF09002B6E5CFF0A3E0546075 -:100D6E00703A9002B6E024FB601924FD6010146006 -:100D7E001724FE6018240570191207FF80631216DF -:100D8E00BB805E1217438059120E7F80541213A33C -:100D9E00804F121137E5CE30E3FB80429002B7E070 -:100DAE005460642070309002B6E0247E600F1460B0 -:100DBE00111460132403701412167F802412169DD2 -:100DCE00801F1215FF801A1216208015121137E59A -:100DDE00CE30E3FB8008121137E5CE30E3FB121163 -:050DEE006253CE7F22DC -:10174300AFCF12114143BC01E5CE30E0FB53CEFED7 -:05175300EF4480F5C623 -:01175800226E -:100E7F00AFCF53CE7F53CEFBEFD39401505290029E -:100E8F0026EFF064017055C2819002D01207A200C4 -:100E9F00007D009002D0E0FCA3E0FDA3E0FEA3E004 -:100EAF00FFEC4D4E4F6018EF24FFFFEE34FFFEEDC9 -:100EBF0034FFFDEC34FFFC9002D012079680D4D2A1 -:100ECF0081C2B31215B412182B12181BD200800C4A -:100EDF0043CE20E5CE30E3FB1211622243CE10E564 -:0D0EEF00CE30E0FB53CEFE1214A943BC022E -:010EFC0022D3 -:1013A300AFCF9002D0E5CFF0AECFA3E5CFF053CED1 -:1013B3007F53CEFBEEB40313EF70109001E1F0C244 -:1013C300047F0412180A7F0512180A43CE10E5CED3 -:0613D30030E0FB53CEFEEA -:0113D90022F1 -:1007FF00C20EAFCFAECFEE24FE60191460282402D4 -:10080F0060030208A1741212112B740AF0A374E58D -:10081F00F00208B89002D074D712112E740BF0A307 -:10082F00745DF00208B8EF14601F14602D14603669 -:10083F001460442404704C9002D0740412112E746E -:10084F000BF0A3743BF00208B89002D0741A121187 -:10085F002E740AF0A374F7F0804F121129740BF065 -:10086F00A37411F080439002D0740C12112E740BEC -:10087F00F0A3742FF08032121129740BF0A3743F80 -:10088F00F08026121137E5CE20E314E5CE20E2F6F4 -:10089F00800D121137E5CE20E305E5CE20E2F653A9 -:1008AF00CEF753CEDF53CE7F22E5CFE5CF9002D2E6 -:1008BF00E5CFF09002D1E5CFF09002D0E0FFFDA39D -:1008CF00E0FAA3E0FBD39DEA9400400DEF541F70B4 -:1008DF0004D20E8009C20E80059002D0EBF01211E7 -:1008EF00489002D0E0D39420402112114F7D201266 -:1008FF0009799002D0E024E0F0E5CE54427005E58E -:10090F00CE30E0F512116960D8803D12114F900280 -:10091F00D0E0FD120979E49002D0F0E5CE54427098 -:10092F0005E5CE30E0F51211696002801B300E1D17 -:10093F0012114FE4FD1217C5E5CE54427005E5CEF6 -:10094F0030E0F5121169600553CEEF8019E5CE54F2 -:10095F00427005E5CE30E2F5E5CE20E20CE5CE544F -:09096F0042600653CE7F53CEFD19 -:10097800221217C59002B8EBF0A3EAF0A3E9F0221F -:10167F009002D0121119121148121171E5CE30E0FB -:0D168F00FB53CEFEE5CE544260FA12115B13 -:01169C00222B -:10169D009002D0121119121148121171E5CE30E0DD -:0D16AD00FB53CEFEE5CE544260FA12115BF5 -:0116BA00220D -:1015FF009002D012111912114875CF0A43CE10E57F -:10160F00CE30E0FB53CEFEE5CE544260FA12115BB2 -:01161F0022A8 -:101620009002D012111912114875CF0143CE10E566 -:10163000CE30E0FB53CEFEE5CE544260FA12115B91 -:011640002287 -:101759009002D812111912113EE5CE30E0FB53CE9A -:01176900FE81 -:01176A00225C -:10176B009002DC12111912113EE5CE30E0FB53CE84 -:01177B00FE6F -:01177C00224A -:10177D009002E012111912113EE5CE30E0FB53CE6E -:01178D00FE5D -:01178E002238 -:10178F009002E412111912113EE5CE30E0FB53CE58 -:01179F00FE4B -:0117A0002226 -:1016BB00121148900226E0F5CF43CE10E5CE30E074 -:0E16CB00FB53CEFEE5CE544260FA12115B22B4 -:1017A10012114843CE20E5CE30E3FB12116253CE35 -:0217B1007F2295 -:1011D600E5CFE5CFAFCF1211489002B7E0247F608C -:1011E6000C14600E2402701975CF018014E4F5CF3B -:1011F600800FEF547F24BBF582E43402F583E0F5DB -:10120600CF121171E5CE30E0FBE5CE20E2F653CEEB -:0F121600FEE5CE544260FAE5CE20E2F512115B00 -:0112250022A6 -:101178009002B7E0700B121137E5CE30E3FB53CE87 -:10118800DF9002B7E0B4010B121137E5CE30E3FB74 -:1011980053CEDF9002B7E064027032E5CF702EE5DF -:1011A800CFAFCFEF247F701A75C70143CE20E4F587 -:1011B800C79002BC04F0121141E5CE30E0FB53CEDB -:0E11C800FE22121137E5CE30E3FB1211622237 -:100F79009002B7E0700B121137E5CE30E3FB53CE88 -:100F8900DF9002B7E0B4010B121137E5CE30E3FB75 -:100F990053CEDF9002B7E064027042E5CF703EE5C0 -:100FA900CFAFCFEF6020247F702875C70153CEDF04 -:100FB9007F0112180AE4F5C79002BCF0121141E54D -:100FC900CE30E0FB8008121141E5CE30E0FB53CE74 -:0E0FD900FE22121137E5CE30E3FB53CEDF22AD -:02165B00C10FBD -:1016D900E02476F582E43402F58322900274E00472 -:0E16E900F0E0FEC3942022900274E014F02280 -:10181B00E4900274F0900273F0900272F0C20F2207 -:10140F007F081216E44002D20FEEB438041216F021 -:10141F0022AECFEE90027270081216D97401F080CE -:10142F00051216D9EEF0900272E004F0E0B4380223 -:04143F00E4F0DFCE28 -:011443002286 -:1015DB001216E44002D20FEEB438041216F0229029 -:1015EB0002721216D9EFF0900272E004F0E0B438F8 -:0415FB0002E4F022F4 -:1012B000900274E0FEC394105002C20FEE701A90B8 -:1012C0000273E0FE70069002ADE0FF2274752EF509 -:1012D00082E43402F583E0FF221216F090027312CA -:1012E00016D9E0FF900273E004F0E0B43802E4F0B5 -:0112F00022DB -:02165D00C110BA -:0B18D400E02403F582E43400F58322D9 -:10182B00E4900002F0900001F0900000F0C2102252 -:10136B00900002E004F0E0FEC394804002D210EE45 -:10137B00FD7C00BC010ABD0107900002E014F022C5 -:10138B009000001218D4EFF0900000E004F0E0B4ED -:08139B000005E4B40101F02299 -:10126C00900002E0FE7002C210EE701A900001E0D5 -:10127C00FE7006900102E0FF2274022EF582E43427 -:10128C0000F583E0FF22900002E014F090000112C0 -:10129C0018D4E0FF900001E004F0E0B40005E4B4E1 -:0312AC000101F04D -:0112AF00221C -:10147700E0FBA3E0FAA3E0F99000401206D6FF9044 -:1014870000410206D69000417401120703E9244186 -:10149700F9E43AFA1206BD543F02073690004002BB -:0214A70006D667 -:0E185800900040E4120748900041E402074867 -:10000E001214A304543F121485B507047F01800215 +:1018D300C281D2A3438F01D2AF12102712004680D8 +:0118E300FB09 +:0C199800C80C0000C9FFEE00CA000000EF +:0416A50041022800D6 +:1016A900C10EC10AC10DC109C10BC10C43022901F7 +:0216B900022C01 +:10116500E493F5CFA3E493F5CFA3E493F5CFA3E4FC +:1011750093F5CF22EF24FFFFEE34FFFEED34FFFDA4 +:10118500EC34FFFC0207DB9002F9E0FF04F090036A +:1011950000E0FCA3E02FF582E43CF583E5CFF00504 +:1011A5001A22E0FCA3E0FDA3E0FEA3E0FFEC4D4E18 +:1011B5004F229001E1E0D36480948222900223E0E3 +:0611C500FEA3E0FF4E2234 +:101027009003061207E700002710121A4943BC80F5 +:1010370043BC109003061211A7601E900306A3A3DA +:10104700A3E024FFFFEE34FFFEED34FFFDEC34FF99 +:10105700FC9003061207DB80DA53BCEF7D80E4FFC8 +:10106700121A42E4FF1219061217A153F1FC43F1B9 +:1010770003D2B3C209C280C290C200E490019CF0BF +:0A108700C203C20CD207D208C20651 +:01109100223C +:100F440030067130086EE51020E7691211B750645D +:100F540075C704E4F5CF30A304F5CF800375CF0142 +:100F640090019CE0F5CF90026EE01313543FF5CF4F +:100F7400E4F51B90026EE0FFE51BC39F50091219B4 +:100F8400468FCF051B80EC90026EE0FF643C60103E +:100F94008F1BE51BC3943C5007E4F5CF051B80F27F +:100FA400D20EC209121A77E490019CF09001E1E09C +:040FB40004F0C2067D +:010FB8002216 +:100CF90090019DE064017054A3E07050A3E0704C32 +:100D0900A3E0FF7002D206EFF47041F5A8F5B175C2 +:100D1900C314FD7F401215FB7B017DF47F0412177C +:100D2900F390030B1207E70000271043BC10900350 +:100D39000B1211A7600890030B12117980F053BCB4 +:100D4900EF121A3375A61E75A6E180FE90019DE08B +:100D5900FFB4020FA3E0FEB40103D20C22EE7038F7 +:100D6900C20C22EF6406703075C70490199893F588 +:100D7900CFA3E493FF5407F5CFEF131313541F12B6 +:100D8900116C90199C1211659019A0121165D20E5F +:080D9900C2099001E1E004F041 +:010DA100222F +:10004600200519E5BD20E50302039153BCBFD20587 +:1000560053BDFE53BDDF53BDF7020391E5BD5431D9 +:10006600602EE5BD30E00CC205D2B3C28153BDFEA1 +:1000760043BC40E5BD30E41853BDEF1217A1D205CD +:1000860012167E121917121927121A73D2B3C281C9 +:10009600E5BD20E30302015953BDF7900224E004B5 +:1000A600F07006900223E004F0300E0D1211B750E6 +:1000B6000875C70443CE10C20E9001DEE07002A39D +:1000C600E060109001DFE024FFF09001DEE034FFF5 +:1000D600F08010200D0DE4F514F513D20FD291C265 +:1000E60010C211900228E0600214F03005659002FB +:1000F60026E0605F30A32C20030F53F1FC43F1018F +:10010600E4900223F0A3F0D2031211C17002D2B31D +:10011600BE0205BFFF02C2B3EFF47003EE640370C4 +:1001260032802730030F53F1FC43F103E49002239E +:10013600F0A3F0C2031211C17002D2B3EF64104EE5 +:100146007002C2B3EF64204E700990022374FFF070 +:10015600A314F0120F44200A1C900226E060163009 +:10016600141375C701751A081213248FCFD51AF800 +:1001760043CE10D20AE5F87003020391E5F830E4A5 +:100186001B75C704E5CE30E01353CEFE9001E1E0C7 +:1001960014F0E0C3648094805002E4F0E5F830E0A7 +:1001A6000BE4F5C7E5CE30E203121A57E5F830E363 +:1001B6001A75C703121A87EF600E300C0B751A08F2 +:1001C600AFCF12159DD51AF853CEFDE5F830E21AD9 +:1001D60075C702121A87EF600E200C0B751A08AF4E +:1001E600CF12159DD51AF853CEFDE5F830E10D7501 +:1001F600C701E5CE30E00553CEFEC20A2007030252 +:100206000391E5F820E5030203913001030203910F +:1002160075C705E5CE54427003020391121A879002 +:1002260001E0EFF0900225E5CFF0E0FF7021D2016A +:10023600F51A9001E0E014FEE51AC39E400302039E +:100246007174E2251AF582E4340112119F80E3EFFE +:10025600B40125E4F51A9001E0E014FFE51AC39F06 +:10026600500E749D251AF582E4340112119F80E622 +:10027600120CF9C201020371900225E064026003C8 +:10028600020371D20DC201C200900305E5CFF0E072 +:1002960064017042C281C291F51A051AE51AB4FFCB +:1002A600F9E4F51A051AE51AB4FFF9D2811218E431 +:1002B600E5CF25E09002FCF0900303E5CFF0900235 +:1002C600FBE5CFF0E49002F9F0900302F0900228EB +:0E02D60074FAF002034F900305E0FFB4031129 +:0E02E400C20D90030AE5CFF0E5CFF0E5CFF0B4 +:1002F20002034FEF64027055900302E07034AFCFF7 +:100302009002FDF0A3EFF0E0F8E4F0E89002FDF0D7 +:10031200AFCFA3E02FF09002FDE03400F0E4F51A35 +:100322009001E0E024FCFFE51AC39F501A12118CE1 +:1003320080EEE4F51A9001E0E024FEFFE51AC39F87 +:10034200500512118C80EE900302E004F09002FB43 +:10035200E0FF900302E0B50714900303E0FF900270 +:10036200F9E0B50708E4F0900302F0D202C2017589 +:10037200C70520040AE5CE30E11053CEFD800B30D4 +:100382000408E5CE30E60353CEBFA204B3920420A4 +:10039200050302060B300D6720020302060B300E26 +:1003A2000302060B900228E0600302060B780B7C26 +:1003B200037D017B017A0279FCFE7F061206DC9046 +:1003C20003117440F012162990019AE020E0F9908E +:1003D20002287414F075C70475CFF090019AE0C436 +:1003E2001313540330E009E054BFF0E4F5CF800367 +:1003F20075CF01E4F5CFF5CFF5CFD20EC202223090 +:10040200A3030205E8D20B20000302060B30B4203E +:10041200300F1D9001DE7417F0A37470F0C211E466 +:10042200F515F514F513C20FC291D210C207C20816 +:1004320020100302060B20110302060BE4F54AC248 +:1004420011E514702330130D30010575110A801067 +:10045200751102800B3001057511088003E4F51156 +:100462008511C5751401804DE514B40114E515B468 +:100472001103751402E51130E1381213688FC5803B +:1004820034E51464027026E515B4150AE51130E36B +:1004920002C201751403E51130E31074D02515F57D +:1004A20082E43401F583E0F5C5800A8005E514B4E1 +:1004B2000303E4F5C50515E5137025AFC4BF80033A +:1004C200D38001C3400430A3F22285C510E5C530B4 +:1004D200E70575122280037512117513010205D802 +:1004E200E51364017036AFC4BF8003D38001C340FB +:1004F2000430A3F222E51030E109D29074222515CE +:10050200F8A6C5E5122401FFE433FEE5156F70017C +:10051200EE60030205D87513020205D8E5136402E2 +:1005220060030205D8AFC4BF8003D38001C3400477 +:1005320030A3F222E51030E347AF127E00EF24052C +:10054200FDEE33FCAB157A00D3EB9DEC6480F874BE +:100552008098500BC3EB9512FD74442DF8A6C5EF9D +:100562002406FFE43EFEEBB50716EAB5061290023A +:1005720027E5C5F0E0FF90019CE0C39F5002EFF039 +:10058200E5122406FFE433FEE5156F7001EE7046B6 +:10059200D207D208C210D291D20FE510548260164F +:1005A200E4F51A7424251AF8E6FF12145F051AE519 +:1005B2001AC3951240EDE51030E34EE546604AE479 +:1005C200F51A7446251AF8E6FF1217BD051AE51A40 +:1005D200C3940440ED22054A30112EE54AC3940526 +:1005E200500302044122300B20C20BC28190030649 +:1005F2001207E700007D009003061211A760089021 +:09060200030612117980F0D28187 +:01060B0022CC +:0616BB00C18FC111C11036 +:0E195500E4F514F513D20FD291C210C2112284 +:10167E0053AFFE43C31043C30253C3F753C3FB43DD +:10168E00C32043C340D2B2D2B4D291D288D2A8E4FE +:07169E00F514F513C2002250 +:03000300021A7B63 +:031A7B00D2113253 +:1018E400121A63121A3B9003007401F0A37406F0F9 +:0118F40022D1 +:1016290090019AE054BFF090030BE090019BF09079 +:10163900030CE0900104F090030DE0900105F09097 +:0C1649000311E02402900199F00219370F +:1012DE0090018DE0FF04F0748E2FF582E43401F559 +:1012EE0083E595F022E0FF04F074042FF582E434D8 +:1012FE0001F58322900199E0FF900103E0C39F2244 +:10130E00E0FBA3E0FAA3E0F9EA494B22A3E0FAA33B +:06131E00E0F5828A832243 +:041A630075938022D5 +:071A3B007593C043B10222C4 +:0C19A400900186EBF0A3EAF0A3E9F0222A +:0C19B00090018AEBF0A3EAF0A3E9F0221A +:0F19370090019AE04401F0E4900103F0021A6776 +:041A67004393202263 +:0B19D40043931090019AE054FEF022B3 +:031A7E008F95221F +:041A6B00439304227B +:041A6F005393FB2270 +:031A8100AF9522FC +:031A8400AF9422FA +:03004300020B9C11 +:100B9C00C0E0C0F0C083C082C0D075D008AF94EF65 +:100BAC001208180CE8000C01080C01100C09180CA8 +:100BBC0029200C09280C29300C33380C39400C290D +:100BCC00480C36500C26580C49600C49680C49707E +:100BDC000C49780C5F800C71880C5F900C71980C30 +:100BEC0078A00CA4A80CA4B00CCBB80C33C00C335C +:100BFC00C800000CEB5393DF90019B80081213028A +:100C0C00500B1212F3E0FF121A7E020CEB1219D4E5 +:100C1C0090019AE04440F0020CEB1212DE90019A23 +:100C2C00E04402F0020CE8020CE31212DE9001899F +:100C3C00E014FF90018DE0C39F5027802290019A11 +:100C4C00E04401F090018DE4F090019AE054FBF047 +:100C5C00020CD91212DE90018DE0C39408500302ED +:100C6C000CD9020CDE90019AE04404F0121A3B906D +:100C7C00018612130E601890018DE0FF7B017A0142 +:100C8C00798EC00A90018612131AD00A120842906B +:100C9C00019AE054FEF0804790018A12130E601AFC +:100CAC007B017A017904C00A90018A12131AD00AC6 +:100CBC007F82120842900199EFF0900103E4F090CA +:100CCC0001031212F3E0F5951213025005121A6B80 +:100CDC00800D121A6F8008121A3B80031219D4531C +:0D0CEC0093F7D0D0D082D083D0F0D0E0328A +:10180D00AE18AF19C390032DE09FFF90032CE09EFF +:09181D00FED3EF94FFEE947F224C +:1014CE00AC18AD19ED2FFFEC3E90032CF0A3EFF00E +:1014DE0020AF1312180D50047F0080027F01EF70B1 +:1014EE00131219EA80ED12180D50047F0080027F4E +:0414FE0001EF60F2A8 +:0115020022C6 +:10170A00E4F519F518F517F51690032EF0A3F0F580 +:0F171A008A758CF0438901438F02D28CD2A922A9 +:0A19EA0020AF06308D031211CB224E +:03000B000211CB14 +:1011CB00C0E0C0F0C083C082C0D075D000C000C0EA +:1011DB0004C005C006C007C28D438CF090032E746B +:1011EB000C75F04A1207AFFEC3E5F0944AEE940C6F +:1011FB00E450047F0380027F02FEFDFCE5192FF50E +:10120B0019E5183EF518E5173DF517E5163CF516EB +:10121B00D007D006D005D004D000D0D0D082D08358 +:05122B00D0F0D0E0321C +:100844001201100100000020EB0307FF0001010268 +:1008540003011A03430032004D004500200042000A +:1008640045004C004700490055004D001E0354004C +:1008740055005800200052004600200044004F005C +:100884004E0047004C00450020000C0331003000AE +:10089400300030003100040309041E0354005500E5 +:1008A4005800200052004600200044004F004E0033 +:1008B40047004C004500200009023B01060104806A +:1008C400320904000000010100000A24010001466D +:1008D400000201020C2402010102000100000000D8 +:1008E4000C2402020101000100000000092403039A +:1008F4000101000500092403040103000600092482 +:100904000605010203000009240606020203000092 +:1009140009040100000102000009040101010102AF +:100924000000072401030102000B24020101010855 +:1009340001401F000905810108000100000725018D +:100944000000000009040200000102000009040282 +:10095400010101020000072401020102000B24022C +:100964000101010801401F000905020108000100FE +:100974000007250100000000090403000200000034 +:100984000007058403400001070505034000010931 +:1009940004040000010100000924010001270001F2 +:1009A400050C2402070101000100000000092403D2 +:1009B40008010300090009240609070203000009CD +:1009C4000405000001020000090405010101020000 +:1009D40000072401070102000B24020101010801A0 +:1009E400401F00090503010800010000072501005C +:0309F40000000000 +:1010FC00E5CFF0A3E5CFF0A3E5CFF0A3E5CFF02249 +:10110C0090030BE4F0741EA3F09002F374FFF0A3B1 +:10111C002253CEFB43CE202253CE7F53CEFB43CE65 +:10112C00102253CEFB43CE80229002F3E0FBA3E0CF +:10113C00FAA3E0F92253CEFD53CE7F2253CEDF53D8 +:10114C00CEF72253CEFEE5CE54422290030BE4F0B0 +:09115C00A322E4F5CF43CE1022DA +:1017A100E49002F7F0A3F0A3F0900226F0C20590B6 +:0C17B1000223F0A3F09001E1F0C204223A +:1013EA007D857F01121A427F011219067D817F02D3 +:1013FA00121A427F021219067D817F03121A427F56 +:10140A00031219067D877F04121A427F04121906F5 +:0C141A007D837F05121A427F050219062F +:061A5700E4F5C7020DA238 +:100DA2009002F2E5CFF09002F1E5CFF0A3E05460BB +:100DB200703A9002F1E024FB601924FD6010146087 +:100DC2001724FE6018240570191209F780631217A0 +:100DD20065805E12183F8059120EC3805412149718 +:100DE200804F12111DE5CE30E3FB80429002F2E00B +:100DF2005460642070309002F1E0247E600F146031 +:100E02001114601324037014121729802412174737 +:100E1200801F1216C8801A1216E9801512111DE5DC +:100E2200CE30E3FB800812111DE5CE30E3FB121138 +:050E32004853CE7F22B1 +:10183F00AFCF12112743BC01E5CE30E0FB53CEFEF4 +:05184F00EF4480F5C626 +:011854002271 +:100EC300AFCF53CE7F53CEFBEFD394015055900257 +:100ED30026EFF064017058C28190030B1207E700FC +:100EE300007D0090030BE0FCA3E0FDA3E0FEA3E084 +:100EF300FFEC4D4E4F6018EF24FFFFEE34FFFEED85 +:100F030034FFFDEC34FFFC90030B1207DB80D4D2DB +:100F130081C2B312167E121927121917121A73D22D +:100F230000800C43CE20E5CE30E3FB121148224370 +:100F3300CE10E5CE30E0FB53CEFE1213EA43BC02E3 +:010F4300228B +:10149700AFCF90030BE5CFF0AECFA3E5CFF053CEA0 +:1014A7007F53CEFBEEB40313EF70109001E1F0C24F +:1014B700047F041219067F0512190643CE10E5CEE4 +:0614C70030E0FB53CEFEF5 +:0114CD0022FC +:1009F700C212AFCFAECFEE24FE601E1460312402C8 +:100A07006003020AA290030BE4F07412121113742C +:100A170008F0A37444F0020AB990030B7401F0A321 +:100A2700743B1211147408F0A374BCF0020AB9EFF6 +:100A370014601F14602D1460361460442404704C35 +:100A470012115774041211147408F0A3749AF00267 +:100A57000AB9121157741A1211147408F0A37456B4 +:100A6700F0804F12110C7408F0A37470F0804312D9 +:100A77001157740C1211147408F0A3748EF080329D +:100A870012110C7408F0A3749EF0802612111DE554 +:100A9700CE20E314E5CE20E2F6800D12111DE5CE3F +:100AA70020E305E5CE20E2F653CEF753CEDF53CE53 +:100AB7007F22E5CFE5CF90030EE5CFF090030DE55C +:100AC700CFF090030BE0FEA3E0FFA3E0FCA3E0FD63 +:100AD700D39FEC9E400DEF541F7004D212800CC2BE +:100AE70012800890030BECF0A3EDF012112ED390B7 +:100AF700030CE0942090030BE0940040281211357A +:100B07007D20120B8D90030CE024E0F090030BE0A6 +:100B170034FFF0E5CE54427005E5CE30E0F5121112 +:100B27004F60CB803F12113590030CE0FD120B8D07 +:100B3700E490030BF0A3F0E5CE54427005E5CE3008 +:100B4700E0F512114F6002801B30121D121135E4BF +:100B5700FD1218C1E5CE54427005E5CE30E0F5121E +:100B6700114F600553CEEF8019E5CE54427005E56D +:100B7700CE30E2F5E5CE20E20CE5CE5442600653D6 +:050B8700CE7F53CEFDFE +:100B8C00221218C19002F3EBF0A3EAF0A3E9F022D1 +:1017290090030B1210FC12112E12115EE5CE30E05F +:0D173900FB53CEFEE5CE544260FA12114182 +:011746002280 +:1017470090030B1210FC12112E12115EE5CE30E041 +:0D175700FB53CEFEE5CE544260FA12114164 +:011764002262 +:1016C80090030B1210FC12112E75CF0A43CE10E5B1 +:1016D800CE30E0FB53CEFEE5CE544260FA12114103 +:0116E80022DF +:1016E90090030B1210FC12112E75CF0143CE10E599 +:1016F900CE30E0FB53CEFEE5CE544260FA121141E2 +:0117090022BD +:101855009003121210FC121124E5CE30E0FB53CE9A +:01186500FE84 +:01186600225F +:101867009003161210FC121124E5CE30E0FB53CE84 +:01187700FE72 +:01187800224D +:1018790090031A1210FC121124E5CE30E0FB53CE6E +:01188900FE60 +:01188A00223B +:10188B0090031E1210FC121124E5CE30E0FB53CE58 +:01189B00FE4E +:01189C002229 +:1017650012112E900226E0F5CF43CE10E5CE30E0E3 +:0E177500FB53CEFEE5CE544260FA1211412223 +:10189D0012112E43CE20E5CE30E3FB12114853CE6C +:0218AD007F2298 +:10128E00E5CFE5CFAFCF12112E9002F2E0247F60B2 +:10129E000C14600E2402701975CF018014E4F5CF82 +:1012AE00800FEF547F24F6F582E43402F583E0F5E7 +:1012BE00CF12115EE5CE30E0FBE5CE20E2F653CE46 +:0F12CE00FEE5CE544260FAE5CE20E2F512114162 +:0112DD0022EE +:101230009002F2E0700B12111DE5CE30E3FB53CEAD +:10124000DF9002F2E0B4010B12111DE5CE30E3FB9A +:1012500053CEDF9002F2E064027032E5CF702EE5EB +:10126000CFAFCFEF247F701A75C70143CE20E4F5CE +:10127000C79002F704F0121127E5CE30E0FB53CE01 +:0E128000FE2212111DE5CE30E3FB12114822B2 +:100FB9009002F2E0700B12111DE5CE30E3FB53CE27 +:100FC900DF9002F2E0B4010B12111DE5CE30E3FB14 +:100FD90053CEDF9002F2E064027042E5CF703EE545 +:100FE900CFAFCFEF6020247F702875C70153CEDFC4 +:100FF9007F01121906E4F5C79002F7F0121127E5EF +:10100900CE30E0FB8008121127E5CE30E0FB53CE4D +:0E101900FE2212111DE5CE30E3FB53CEDF2286 +:0216C100C11353 +:10178300E024B1F582E43402F583229002AFE00451 +:0E179300F0E0FEC39420229002AFE014F0229A +:10191700E49002AFF09002AEF09002ADF0C2132255 +:101503007F0812178E4002D213EEB4380412179AD2 +:1015130022AECFEE9002AD70081217837401F080F3 +:1015230005121783EEF09002ADE004F0E0B4380248 +:04153300E4F0DFCE33 +:011537002291 +:10159D0012178E4002D213EEB4380412179A22EFAE +:1015AD009002AD70081217837401F0800512178335 +:0E15BD00EFF09002ADE004F0E0B43802E4F08C +:0115CB0022FD +:101368009002AFE0FEC394105002C213EE701A90C0 +:1013780002AEE0FE70069002E8E0FF2274B02EF59F +:1013880082E43402F583E0FF2212179A9002AE122B +:101398001783E0FF9002AEE004F0E0B43802E4F016 +:0113A8002222 +:0216C300C11450 +:0B19DF00E02403F582E43400F58322CD +:10192700E4900002F0900001F0900000F0C2142251 +:10145F00900002E004F0E0FEC394804002D214EE4C +:10146F00FD7C00BC010ABD0107900002E014F022D0 +:10147F009000001219DFEFF0900000E004F0E0B4EC +:08148F000005E4B40101F022A4 +:10132400900002E0FE7002C214EE701A900001E018 +:10133400FE7006900102E0FF2274022EF582E4346E +:1013440000F583E0FF22900002E014F09000011207 +:1013540019DFE0FF900001E004F0E0B40005E4B41C +:031364000101F094 +:011367002263 +:10156B00E0FBA3E0FAA3E0F990004012071BFF9009 +:10157B00004102071B9000417401120748E9244106 +:10158B00F9E43AFA120702543F02077B900040023B +:02159B00071B2C +:0E196300900040E412078D900041E402078DD1 +:10000E0012159704543F121579B507047F0180022B :03001E007F00223E -:0D18660012147FB507047F0180027F00226D -:0D187300121486FF1214A3C39F543FFF22DE -:081562009002D0ECF0A3EDF0C3 -:10156A001214A304543F1214856F6014900040EFC4 -:10157A001207489002D0A3E08F82758300120748B1 -:01158A00223E -:101444009002ECEBF0A3EAF0A3E9F09002EC1214A2 -:10145400776F601C12148C9002ECE0FBA3E0FAA3FB -:10146400E0F9121486F5827583001206D67F0022F5 -:031474007F0122D3 -:1014D9009002D5EBF0A3EAF0A3E9F09002D512143B -:1014E900776F600312148C9002D5E0FBA3E0FAA396 -:0F14F900E0F9121486F5827583001206D6FF22E1 -:1017B3001214865405FFB403081218739002F6EF4F -:0117C300F035 -:0117C4002202 -:0D1880001206BDF5CF740129F9E43AFA22F1 -:071937008FC7AF058FD4221A -:1013320030F805E4F5C7802E30F90575C70180261F -:1013420030FA0575C702801E30FB0575C70380168B -:1013520030FC0575C704800E30FD0575C705800693 -:0913620030FE0375C706AFC72277 -:03196E00AFE222C3 -:0918FD00AFE3EFFEADE2EDFF22C6 -:1017C500E4F5C7AF051DEF600512188080F543CE1F -:0217D5001022E0 -:0C18B100AF051DEF600512188080F522C5 -:1017F900AF051DEF600AE5CF12073612188580F094 -:0118090022BC -:091906008FC7E4F5CE43CE202288 -:10180A007401A807088002C333D8FCF5D5E4F5D5DE -:01181A0022AB -:07193E0075A41043A302226F -:0719450012193E43BC802291 -:10158B0041746D656C202852290A63353133312D36 -:10159B007573622D6364632D315F305F320A0A000D -:0915AB001B631B5B3F32356C0031 -:0B12F1009002E8EBF0A3EAF0A3E9F0A4 -:1012FC009002E8E0FBA3E475F001120780A9F0FA74 -:10130C001206BD9002EBF06013E0B40A057F0D12DB -:10131C0019189002EBE0FF12191880D47F0D1219E6 -:06132C00187F0A021918E7 -:09190F007BFF7A1579AB0212F19D -:100FE7009002F4EDF09002F3EFF070097F0D121903 -:100FF700187F0A80377F1B1219187F5B1219189008 -:1010070002F4E0FFD3940940031210459002F41252 -:1010170010377F3B1219189002F3E0FFD394094071 -:10102700031210459002F31210377F481219182245 -:10103700E075F00A84E5F02430FF12191822EF75E5 -:0A104700F00A842430FF1219182269 -:05000600A298921122F6 -:10172A00759840538FF7438F0175CBFF75CAF375D0 -:09173A00C834D2CA439812D3222C -:081918003099FDC2998F99225C -:071920003098FDAF99C29859 -:01192700229D -:0A18E9008FC5E5C430E7FB7F012244 -:0A18F30043A22012FFC053A2DF221F -:0C18BD008F1CAF058F1F1218F3AF1D2207 -:1016F700A2AF9212C2AF8F1CAF038F1FAF058F1D12 -:091707001218F3A21292AF7F0147 -:0117100022B6 -:081508009002D5EFF0A3EDF015 -:10151000A2AF9212C2AFE4FD7F081218BD9002D5AF -:10152000E0F45FFFA3E04FF51D751C071218F3A24E -:051530001292AF7F01E3 -:011535002293 -:08192800C2AF43A22002F4004B -:03000000020DF3FB -:0C0DF300787FE4F6D8FD758122020E3AEC -:1005C700E709F608DFFA8046E709F208DFFA803E16 -:1005D70088828C83E709F0A3DFFA8032E309F60803 -:1005E700DFFA8078E309F208DFFA807088828C836B -:1005F700E309F0A3DFFA806489828A83E0A3F6081F -:10060700DFFA805889828A83E0A3F208DFFA804CF8 -:1006170080D280FA80C680D4806980F280338010CF -:1006270080A680EA809A80A880DA80E280CA803338 -:1006370089828A83ECFAE493A3C8C582C8CCC583B0 -:10064700CCF0A3C8C582C8CCC583CCDFE9DEE78080 -:100657000D89828A83E493A3F608DFF9ECFAA9F0FF -:10066700EDFB2289828A83ECFAE0A3C8C582C8CC55 -:10067700C583CCF0A3C8C582C8CCC583CCDFEADE6E -:10068700E880DB89828A83E493A3F208DFF980CCD0 -:1006970088F0EF60010E4E60C388F0ED2402B404C9 -:1006A7000050B9F582EB2402B4040050AF23234570 -:0606B70082239006177378 -:1006BD00BB010689828A83E0225002E722BBFE023B -:0906CD00E32289828A83E493226E -:1006D600BB010CE58229F582E5833AF583E02250D9 -:1006E60006E92582F8E622BBFE06E92582F8E22223 -:0D06F600E58229F582E5833AF583E493223D -:10070300BB010FF8E58229F582E5833AF583E028FA -:10071300F0225009C58229F8E58226F622BBFE099C -:10072300C58229F8E22582F222F8EA2583F583E9D6 -:03073300932822E6 -:10073600BB010689828A83F0225002F722BBFE01A2 -:02074600F3229C -:10074800F8BB010DE58229F582E5833AF583E8F0E7 -:10075800225006E92582C8F622BBFE05E92582C893 -:02076800F2227B -:10076A00C5F0F8A3E028F0C5F0F8E582158270021A -:06077A001583E038F022B7 -:10078000A3F8E0C5F025F0F0E5821582700215832C -:06079000E0C838F0E82289 -:0C079600ECF0A3EDF0A3EEF0A3EFF022D6 -:1007A200A8828583F0D083D0821207B91207B912CA -:1007B20007B91207B9E473E493A3C583C5F0C583EF -:1007C200C8C582C8F0A3C583C5F0C583C8C582C8A1 -:0107D2002204 -:1007D300D083D082F8E4937012740193700DA3A3B5 -:1007E30093F8740193F5828883E4737402936860C9 -:0607F300EFA3A3A380DFC9 -:0607F9008A838982E4738B -:100DFF000217D7E493A3F8E493A34003F68001F21C -:100E0F0008DFF48029E493A3F85407240CC8C333F4 -:100E1F00C4540F4420C8834004F456800146F6DFC3 -:100E2F00E4800B0102040810204080901641E47EFC -:100E3F00019360BCA3FF543F30E509541FFEE493B8 -:100E4F00A360010ECF54C025E060A840B8E493A37F -:100E5F00FAE493A3F8E493A3C8C582C8CAC583CAAA -:100E6F00F0A3C8C582C8CAC583CADFE9DEE780BE62 -:01165F00008A +:0D197100121573B507047F0180027F00226C +:0D197E0012157AFF121597C39F543FFF22E8 +:1000260012159704543F1215796F6010900040EF37 +:0C00360012078D8F82758300ED12078D7C +:01004200229B +:10153800900326EBF0A3EAF0A3E9F0900326121536 +:101548006B6F601C121580900326E0FBA3E0FAA3E2 +:10155800E0F912157AF58275830012071B7F0022C5 +:031568007F0122DE +:1015CC00900329EBF0A3EAF0A3E9F090032912159C +:1015DC006B6F6003121580900329E0FBA3E0FAA364 +:0F15EC00E0F912157AF58275830012071BFF22B2 +:1018AF0012157A5405FFB4030812197E900333EF13 +:0118BF00F038 +:0118C0002205 +:0216C500C1154D +:1017D800E4900270F090026FF090026EF0C2152251 +:0B17E800E02471F582E43402F5832256 +:061A5D00A215E433FF2294 +:041A73001217D8224C +:041A77001217D82248 +:1017BD00301503121A7790026E1217E8EFF09002AF +:0B17CD006EE004F0E0B43C02D21522F4 +:0E19460090026F1217E8E0FF90026FE004F0CD +:011954002270 +:0D198B00120702F5CF740129F9E43AFA229F +:071A42008FC7AF058FD4220E +:1014260030F805E4F5C7802E30F90575C70180262A +:1014360030FA0575C702801E30FB0575C703801696 +:1014460030FC0575C704800E30FD0575C70580069E +:0914560030FE0375C706AFC72282 +:031A8700AFE222A9 +:091A0800AFE3EFFEADE2EDFF22B9 +:1018C100E4F5C7AF051DEF600512198B80F543CE16 +:0218D1001022E3 +:0C19BC00AF051DEF600512198B80F522AD +:1018F500AF051DEF600AE5CF12077B12199080F046 +:0119050022BF +:091A11008FC7E4F5CE43CE20227C +:101906007401A807088002C333D8FCF5D5E4F5D5E1 +:0119160022AE +:071A490075A41043A3022263 +:071A5000121A4943BC802279 +:1016550041746D656C202852290A63353133312D6B +:101665007573622D6364632D315F305F320A0A0042 +:091675001B631B5B3F32356C0066 +:0B13A900900322EBF0A3EAF0A3E9F0B0 +:1013B400900322E0FBA3E475F0011207C5A9F0FA3B +:1013C400120702900325F06013E0B40A057F0D12A2 +:1013D4001A23900325E0FF121A2380D47F0D121ADA +:0613E400237F0A021A2318 +:091A1A007BFF7A1679750213A90D +:10109200900331EDF0900330EFF070097F0D121ADA +:1010A200237F0A80377F1B121A237F5B121A239039 +:1010B2000331E0FFD3940940031210F09003311280 +:1010C20010E27F3B121A23900330E0FFD3940940D1 +:1010D200031210F09003301210E27F48121A2322FA +:1010E200E075F00A84E5F02430FF121A2322EF752E +:0A10F200F00A842430FF121A2322B2 +:05000600A298921622F1 +:10182600759840538FF7438F0175CBFF75CAF375D3 +:09183600C834D2CA439812D3222F +:081A23003099FDC2998F992250 +:071A2B003098FDAF99C2984D +:011A32002291 +:0A19F4008FC5E5C430E7FB7F012238 +:0A19FE0043A22012FFC053A2DF2213 +:0C19C8008F1CAF058F1F1219FEAF1D22EF +:1017F300A2AF9217C2AF8F1CAF038F1FAF058F1D10 +:091803001219FEA21792AF7F0139 +:01180C0022B9 +:0815FB0090030FEFF0A3EDF0E7 +:10160300A2AF9217C2AFE4FD7F081219C890030F6F +:10161300E0F45FFFA3E04FF51D751C071219FEA24E +:051623001792AF7F01EA +:01162800229F +:081A3300C2AF43A22002F4003F +:03000000020E37B6 +:0C0E3700787FE4F6D8FD75814A020E7E3B +:10060C00E709F608DFFA8046E709F208DFFA803ED0 +:10061C0088828C83E709F0A3DFFA8032E309F608BD +:10062C00DFFA8078E309F208DFFA807088828C8325 +:10063C00E309F0A3DFFA806489828A83E0A3F608D9 +:10064C00DFFA805889828A83E0A3F208DFFA804CB3 +:10065C0080D280FA80C680D4806980F2803380108A +:10066C0080A680EA809A80A880DA80E280CA8033F3 +:10067C0089828A83ECFAE493A3C8C582C8CCC5836B +:10068C00CCF0A3C8C582C8CCC583CCDFE9DEE7803B +:10069C000D89828A83E493A3F608DFF9ECFAA9F0BA +:1006AC00EDFB2289828A83ECFAE0A3C8C582C8CC10 +:1006BC00C583CCF0A3C8C582C8CCC583CCDFEADE29 +:1006CC00E880DB89828A83E493A3F208DFF980CC8B +:1006DC0088F0EF60010E4E60C388F0ED2402B40484 +:1006EC000050B9F582EB2402B4040050AF2323452B +:0606FC00822390065C73EE +:10070200BB010689828A83E0225002E722BBFE02F5 +:09071200E32289828A83E4932228 +:10071B00BB010CE58229F582E5833AF583E0225093 +:10072B0006E92582F8E622BBFE06E92582F8E222DD +:0D073B00E58229F582E5833AF583E49322F7 +:10074800BB010FF8E58229F582E5833AF583E028B5 +:10075800F0225009C58229F8E58226F622BBFE0957 +:10076800C58229F8E22582F222F8EA2583F583E991 +:03077800932822A1 +:10077B00BB010689828A83F0225002F722BBFE015D +:02078B00F32257 +:10078D00F8BB010DE58229F582E5833AF583E8F0A2 +:10079D00225006E92582C8F622BBFE05E92582C84E +:0207AD00F22236 +:1007AF00C5F0F8A3E028F0C5F0F8E58215827002D5 +:0607BF001583E038F02272 +:1007C500A3F8E0C5F025F0F0E582158270021583E7 +:0607D500E0C838F0E82244 +:0C07DB00ECF0A3EDF0A3EEF0A3EFF02291 +:1007E700A8828583F0D083D0821207FE1207FE12FB +:1007F70007FE1207FEE473E493A3C583C5F0C58320 +:10080700C8C582C8F0A3C583C5F0C583C8C582C85B +:0108170022BE +:10081800D083D082F8E4937012740193700DA3A36F +:1008280093F8740193F5828883E473740293686083 +:06083800EFA3A3A380DF83 +:06083E008A838982E47345 +:100E43000218D3E493A3F8E493A34003F68001F2DA +:100E530008DFF48029E493A3F85407240CC8C333B0 +:100E6300C4540F4420C8834004F456800146F6DF7F +:100E7300E4800B01020408102040809016A5E47E54 +:100E8300019360BCA3FF543F30E509541FFEE49374 +:100E9300A360010ECF54C025E060A840B8E493A33B +:100EA300FAE493A3F8E493A3C8C582C8CAC583CA66 +:100EB300F0A3C8C582C8CAC583CADFE9DEE780BE1E +:0116C7000022 :00000001FF |
From: jaguarondi <c2m...@c2...> - 2007-03-09 15:01:04
|
Author: jaguarondi Date: 2007-03-09 16:00:51 +0100 (Fri, 09 Mar 2007) New Revision: 145 Modified: firmware/tuxup/trunk/CHANGES firmware/tuxup/trunk/TODO Log: - UPD: TODO and CHANGES updated Modified: firmware/tuxup/trunk/CHANGES =================================================================== --- firmware/tuxup/trunk/CHANGES 2007-03-09 14:54:39 UTC (rev 144) +++ firmware/tuxup/trunk/CHANGES 2007-03-09 15:00:51 UTC (rev 145) @@ -7,7 +7,8 @@ ---------------------------------------------------------------------- Current: - * Connection now checks for 5 seconds before replying that Tu is not found. + * Uses interrupt usb requests and not bulk anymore, this is not compatible with the old firmware so to update it, you have to press the belly button when plugging. + * Connection now checks for 5 seconds before claiming that tux is not found. * Added autodetection of the CPU to be programmed based on the CPU field in hex files or names of eep files. * Added version display when programming hex files. Modified: firmware/tuxup/trunk/TODO =================================================================== --- firmware/tuxup/trunk/TODO 2007-03-09 14:54:39 UTC (rev 144) +++ firmware/tuxup/trunk/TODO 2007-03-09 15:00:51 UTC (rev 145) @@ -5,3 +5,7 @@ - Add man page - Add install and uninstall options in the make file + +- Display the usb firmware version programmed in the dongle and in the hex file like all other CPU's, need to change the firmware for that + +- Option to display the current version numbers of the firmware of all CPU's and the versions of the hex files, without doing any programming |
From: jaguarondi <c2m...@c2...> - 2007-03-09 14:55:01
|
Author: jaguarondi Date: 2007-03-09 15:54:39 +0100 (Fri, 09 Mar 2007) New Revision: 144 Modified: firmware/tuxup/trunk/usb-connection.c Log: - UPD: changed USB requests from bulk to interrupt as the usb firmware has that bug fixed Modified: firmware/tuxup/trunk/usb-connection.c =================================================================== --- firmware/tuxup/trunk/usb-connection.c 2007-03-09 13:25:16 UTC (rev 143) +++ firmware/tuxup/trunk/usb-connection.c 2007-03-09 14:54:39 UTC (rev 144) @@ -121,15 +121,15 @@ int usb_send_commands(usb_dev_handle *dev_h, char *send_data, int size) { int status; - if((status = usb_bulk_write(dev_h, USB_W_ENDPOINT, send_data, size, USB_W_TIMEOUT)) < 0) - /* error on usb_bulk_write() */ + if((status = usb_interrupt_write(dev_h, USB_W_ENDPOINT, send_data, size, USB_W_TIMEOUT)) < 0) + /* error on usb_interrupt_write() */ { - fprintf(stderr, "usb_bulk_write error: status = %d :: %s \n", status, usb_strerror()); + fprintf(stderr, "usb_interrupt_write error: status = %d :: %s \n", status, usb_strerror()); } else /* success */ { #if (PRINT_DATA) - printf("usb_bulk_write: status =%d -> TX Buffer[%d]={%2X, %2X, %2X, %2X, %2X}\n", status, status, send_data[0], send_data[1], send_data[2], send_data[3], send_data[4]); + printf("usb_interrupt_write: status =%d -> TX Buffer[%d]={%2X, %2X, %2X, %2X, %2X}\n", status, status, send_data[0], send_data[1], send_data[2], send_data[3], send_data[4]); #endif } return status; @@ -147,15 +147,15 @@ { int status; - if((status = usb_bulk_read(dev_h, USB_R_ENDPOINT, receive_data, size, USB_R_TIMEOUT)) < 0) + if((status = usb_interrupt_read(dev_h, USB_R_ENDPOINT, receive_data, size, USB_R_TIMEOUT)) < 0) { - fprintf(stderr, "usb_bulk_read error: status = %d :: %s \n", status, usb_strerror()); + fprintf(stderr, "usb_interrupt_read error: status = %d :: %s \n", status, usb_strerror()); } else { /* XXX this is only to test and display what has been received */ #if (PRINT_DATA) - printf("usb_bulk_read: status = %d -> TX Buffer[%d]={%hX, %hX, %hX, %hX, %hX}\n", status, status, receive_data[0], receive_data[1], receive_data[2], receive_data[3], receive_data[4]); + printf("usb_interrupt_read: status = %d -> TX Buffer[%d]={%hX, %hX, %hX, %hX, %hX}\n", status, status, receive_data[0], receive_data[1], receive_data[2], receive_data[3], receive_data[4]); #endif } return status; |
From: remi <c2m...@c2...> - 2007-03-09 13:26:06
|
Author: remi Date: 2007-03-09 14:25:16 +0100 (Fri, 09 Mar 2007) New Revision: 143 Modified: daemon/trunk/libs/USBDaemon_status_table.c Log: UPD : updating of the statutes Modified: daemon/trunk/libs/USBDaemon_status_table.c =================================================================== --- daemon/trunk/libs/USBDaemon_status_table.c 2007-03-09 13:21:58 UTC (rev 142) +++ daemon/trunk/libs/USBDaemon_status_table.c 2007-03-09 13:25:16 UTC (rev 143) @@ -325,18 +325,6 @@ } tcp_server_send_raw(tcp_trame, 16); } - // head push position motor - if((portb.Byte&0x20)!=(new_value&0x20)){ - tcp_trame[4]=DATA_STATUS_HEAD_PUSH_POSITION; - if (portb.bits.PB5){ - printf("head push position 0\n"); - tcp_trame[5]=0; - }else{ - printf("head push position 1\n"); - tcp_trame[5]=1; - } - tcp_server_send_raw(tcp_trame, 16); - } // charger inhibit signal if((portb.Byte&0x40)!=(new_value&0x40)){ tcp_trame[4]=DATA_STATUS_CHARGER_INHIBIT_SIGNAL ; @@ -370,9 +358,9 @@ tcp_trame[2]=DATA_TP_RSP; tcp_trame[3]=SUBDATA_TP_STATUS; // wings position switch - if((portc.Byte&0x01)!=(new_value&0x01)){ - tcp_trame[4]=DATA_STATUS_WINGS_POSITION_SWITCH ; - if (portc.bits.PB0){ + if((portc.Byte&0x02)!=(new_value&0x02)){ + tcp_trame[4]=DATA_STATUS_WINGS_POSITION_SWITCH; + if (portc.bits.PB1){ printf("wings position switch 0\n"); tcp_trame[5]=0; }else{ @@ -381,18 +369,6 @@ } tcp_server_send_raw(tcp_trame, 16); } - // motor for wings - if((portc.Byte&0x02)!=(new_value&0x02)){ - tcp_trame[4]=DATA_STATUS_MOTOR_FOR_WINGS; - if (portc.bits.PB1){ - printf("motor for wings off\n"); - tcp_trame[5]=0; - }else{ - printf("motor for wings on\n"); - tcp_trame[5]=1; - } - tcp_server_send_raw(tcp_trame, 16); - } // right blue led if((portc.Byte&0x04)!=(new_value&0x04)){ tcp_trame[4]=DATA_STATUS_RIGHT_BLUE_LED; @@ -642,7 +618,6 @@ sensors2.light_mode.Byte=new_light_mode; tcp_trame[5]=new_value_high; tcp_trame[6]=new_value_low; - //tcp_server_send_raw(tcp_trame, 16); } // *********************************************************************** @@ -665,18 +640,24 @@ tcp_trame[2]=DATA_TP_RSP; tcp_trame[3]=SUBDATA_TP_STATUS; - position1.eyes_position.Byte=eyes_position; - position1.mouth_position.Byte=mouth_position; - position1.wings_position.Byte=wings_position; - tcp_trame[4]=DATA_STATUS_EYES_POSITION_COUNTER; - tcp_trame[5]=eyes_position; - tcp_server_send_raw(tcp_trame, 16); - tcp_trame[4]=DATA_STATUS_MOUTH_POSITION_COUNTER; - tcp_trame[5]=mouth_position; - tcp_server_send_raw(tcp_trame, 16); - tcp_trame[4]=DATA_STATUS_WINGS_POSITION_COUNTER; - tcp_trame[5]=wings_position; - tcp_server_send_raw(tcp_trame, 16); + if(position1.eyes_position.Byte!=eyes_position){ + position1.eyes_position.Byte=eyes_position; + tcp_trame[4]=DATA_STATUS_EYES_POSITION_COUNTER; + tcp_trame[5]=eyes_position; + tcp_server_send_raw(tcp_trame, 16); + } + if(position1.mouth_position.Byte!=mouth_position){ + position1.mouth_position.Byte=mouth_position; + tcp_trame[4]=DATA_STATUS_MOUTH_POSITION_COUNTER; + tcp_trame[5]=mouth_position; + tcp_server_send_raw(tcp_trame, 16); + } + if(position1.wings_position.Byte!=wings_position){ + position1.wings_position.Byte=wings_position; + tcp_trame[4]=DATA_STATUS_WINGS_POSITION_COUNTER; + tcp_trame[5]=wings_position; + tcp_server_send_raw(tcp_trame, 16); + } } // *********************************************************************** |
From: remi <c2m...@c2...> - 2007-03-09 13:22:08
|
Author: remi Date: 2007-03-09 14:21:58 +0100 (Fri, 09 Mar 2007) New Revision: 142 Modified: daemon/trunk/main.c Log: UPD : WARNING - Some updates for debugging Modified: daemon/trunk/main.c =================================================================== --- daemon/trunk/main.c 2007-03-09 13:21:43 UTC (rev 141) +++ daemon/trunk/main.c 2007-03-09 13:21:58 UTC (rev 142) @@ -37,10 +37,6 @@ #include "libs/USBDaemon_status_table.h" #include "version.h" - -/* DEBUG */ -#define LIBUSB_DEBUG_LEVEL 255 - /*_____________________ F U N C T I O N S __________________________________*/ struct version_s version = {0, 0, 0, "\0", "\0", 0}; |
From: remi <c2m...@c2...> - 2007-03-09 13:21:58
|
Author: remi Date: 2007-03-09 14:21:43 +0100 (Fri, 09 Mar 2007) New Revision: 141 Modified: daemon/trunk/libs/USBDaemon_globals.h Log: UPD : WARNING - Some updates for debugging Modified: daemon/trunk/libs/USBDaemon_globals.h =================================================================== --- daemon/trunk/libs/USBDaemon_globals.h 2007-03-09 13:19:50 UTC (rev 140) +++ daemon/trunk/libs/USBDaemon_globals.h 2007-03-09 13:21:43 UTC (rev 141) @@ -29,8 +29,9 @@ #define TUX_SEND_LENGTH 0x05 #define TUX_WRITE_EP 0x05 #define TUX_READ_EP 0x84 -#define TUX_WRITE_TIMEOUT 1000 -#define TUX_READ_TIMEOUT 1000 +#define TUX_WRITE_TIMEOUT 5000 +#define TUX_READ_TIMEOUT 5000 +#define LIBUSB_DEBUG_LEVEL 1 /*_____________________ G L O B A L S _ V A R I A B L E S _______________________*/ unsigned char CLOSE_DAEMON; unsigned char SHOW_TRAMES; |
From: remi <c2m...@c2...> - 2007-03-09 13:20:09
|
Author: remi Date: 2007-03-09 14:19:50 +0100 (Fri, 09 Mar 2007) New Revision: 140 Modified: daemon/trunk/libs/USBDaemon_usb_readWrite.c Log: UPD : WARNING - Usb transfer has been passed to interrupt mode - Some updates for debugging Modified: daemon/trunk/libs/USBDaemon_usb_readWrite.c =================================================================== --- daemon/trunk/libs/USBDaemon_usb_readWrite.c 2007-03-09 13:19:24 UTC (rev 139) +++ daemon/trunk/libs/USBDaemon_usb_readWrite.c 2007-03-09 13:19:50 UTC (rev 140) @@ -40,13 +40,12 @@ if (!TUX_USB_STATUS) return; for(i=0;i<5;i++){ pthread_mutex_lock(&usb_mutex); - idx=usb_bulk_read(tux_handle,TUX_READ_EP,(char*)datas,TUX_RECV_LENGTH,TUX_READ_TIMEOUT); + idx=usb_interrupt_read(tux_handle,TUX_READ_EP,(char*)datas,TUX_RECV_LENGTH,TUX_READ_TIMEOUT); pthread_mutex_unlock(&usb_mutex); if(idx!=TUX_RECV_LENGTH) i=0; else update_raw_status_table(datas); - //printf("%.2x %.2x %.2x %.2x %.2x\n",datas[0],datas[1],datas[2],datas[3],datas[4]); } } @@ -69,11 +68,11 @@ pthread_mutex_unlock(&usb_mutex); return; } - idx=usb_bulk_write(tux_handle,TUX_WRITE_EP,(char*)cmd_send,5,TUX_WRITE_TIMEOUT); + idx=usb_interrupt_write(tux_handle,TUX_WRITE_EP,(char*)cmd_send,5,TUX_WRITE_TIMEOUT); if (idx<=0) { busy_count++; - printf("Error : Tux dongle is busy or disconnected : %d of 10\n",busy_count); if(busy_count>9){ + printf("Error : Tux dongle is busy or disconnected\n"); send_daemon_disconnected(); pthread_mutex_unlock(&usb_mutex); exit(1); @@ -82,8 +81,7 @@ return; } busy_count=0; - idx=usb_bulk_read(tux_handle,TUX_READ_EP,(char*)datas,64,TUX_READ_TIMEOUT); - //idx=usb_interrupt_read(tux_handle,TUX_READ_EP,(char*)datas,64,TUX_READ_TIMEOUT); + idx=usb_interrupt_read(tux_handle,TUX_READ_EP,(char*)datas,64,TUX_READ_TIMEOUT); if (idx<=0){ pthread_mutex_unlock(&usb_mutex); return; @@ -130,8 +128,7 @@ } // Send datas CMD_STATUS_FLAG=1; - idx=usb_bulk_write(tux_handle,TUX_WRITE_EP,(char*)datas,TUX_SEND_LENGTH,TUX_WRITE_TIMEOUT); - //idx=usb_interrupt_write(tux_handle,TUX_WRITE_EP,(char*)datas,TUX_SEND_LENGTH,TUX_WRITE_TIMEOUT); + idx=usb_interrupt_write(tux_handle,TUX_WRITE_EP,(char*)datas,TUX_SEND_LENGTH,TUX_WRITE_TIMEOUT); counter=0; CSF=CMD_STATUS_FLAG; pthread_mutex_unlock(&usb_mutex); |
From: remi <c2m...@c2...> - 2007-03-09 13:20:08
|
Author: remi Date: 2007-03-09 14:19:24 +0100 (Fri, 09 Mar 2007) New Revision: 139 Modified: daemon/trunk/libs/USBDaemon_usb_enum.c Log: UPD : WARNING - Usb transfer has been passed to interrupt mode - Some updates for debugging Modified: daemon/trunk/libs/USBDaemon_usb_enum.c =================================================================== --- daemon/trunk/libs/USBDaemon_usb_enum.c 2007-03-09 13:14:53 UTC (rev 138) +++ daemon/trunk/libs/USBDaemon_usb_enum.c 2007-03-09 13:19:24 UTC (rev 139) @@ -68,8 +68,7 @@ if (!tux_hdl) { printf("Can't open device: %s (%d)\n", strerror(errno), errno); return NULL; - } - + } // Claim device interface error=usb_claim_interface(tux_hdl,TUX_INTERFACE); if (error!=0){ @@ -80,6 +79,12 @@ return NULL; } } + // Set altinterface + error=usb_set_altinterface(tux_hdl,0); + if (error!=0){ + printf("usb_set_altinterface error: %d : %s \n",error,usb_strerror()); + return NULL; + } return tux_hdl; } |
From: remi <c2m...@c2...> - 2007-03-09 13:15:08
|
Author: remi Date: 2007-03-09 14:14:53 +0100 (Fri, 09 Mar 2007) New Revision: 138 Removed: daemon/trunk/tuxdaemon.mdsp Log: DEL : MinGWStudio project file Deleted: daemon/trunk/tuxdaemon.mdsp |
From: jaguarondi <c2m...@c2...> - 2007-03-08 23:24:25
|
Author: jaguarondi Date: 2007-03-09 00:23:31 +0100 (Fri, 09 Mar 2007) New Revision: 137 Modified: daemon/trunk/Makefile daemon/trunk/libs/USBDaemon_usb_enum.c daemon/trunk/libs/USBDaemon_usb_readWrite.c daemon/trunk/main.c Log: - UPD: added some debugging messages for libusb when compiled in debug mode Modified: daemon/trunk/Makefile =================================================================== --- daemon/trunk/Makefile 2007-03-06 14:45:42 UTC (rev 136) +++ daemon/trunk/Makefile 2007-03-08 23:23:31 UTC (rev 137) @@ -18,7 +18,7 @@ TARGET = tuxdaemon C_INCLUDE_DIRS = -I"../../../../../../../usr/include/glib-2.0" -I"../../../../../../../usr/lib/glib-2.0/include" C_PREPROC = - CFLAGS = -pipe -Wall -g2 -O0 + CFLAGS = -pipe -Wall -g2 -O0 -DUSB_DEBUG LIB_DIRS = -L"../../../../../../../usr/include/glib-2.0" -L"../../../../../../../usr/lib/glib-2.0/include" LIBS = -lglib-2.0 -lgthread-2.0 -lusb LDFLAGS = -pipe Modified: daemon/trunk/libs/USBDaemon_usb_enum.c =================================================================== --- daemon/trunk/libs/USBDaemon_usb_enum.c 2007-03-06 14:45:42 UTC (rev 136) +++ daemon/trunk/libs/USBDaemon_usb_enum.c 2007-03-08 23:23:31 UTC (rev 137) @@ -20,6 +20,7 @@ /* $Id$ */ /*_____________________ I N C L U D E S____________________________________ */ #include <stdio.h> +#include <errno.h> #include "USBDaemon_usb_enum.h" #include "USBDaemon_globals.h" #include "USBDaemon_status_table.h" @@ -63,8 +64,9 @@ int error; // Open usb device - if (!(tux_hdl=usb_open(tux_dev))){ - printf("Open USB error\n"); + tux_hdl = usb_open(tux_dev); + if (!tux_hdl) { + printf("Can't open device: %s (%d)\n", strerror(errno), errno); return NULL; } @@ -74,7 +76,7 @@ usb_detach_kernel_driver_np(tux_hdl,TUX_INTERFACE); error=usb_claim_interface(tux_hdl,TUX_INTERFACE); if (error!=0){ - printf("Claim interface error\n"); + printf("Can't claim interface: %s (%d)\n", strerror(errno), errno); return NULL; } } @@ -104,6 +106,7 @@ printf("You must load the daemon in root mode\n"); exit(1); } + usleep(50000); TUX_USB_STATUS=1; // Reinit audio channel Modified: daemon/trunk/libs/USBDaemon_usb_readWrite.c =================================================================== --- daemon/trunk/libs/USBDaemon_usb_readWrite.c 2007-03-06 14:45:42 UTC (rev 136) +++ daemon/trunk/libs/USBDaemon_usb_readWrite.c 2007-03-08 23:23:31 UTC (rev 137) @@ -83,6 +83,7 @@ } busy_count=0; idx=usb_bulk_read(tux_handle,TUX_READ_EP,(char*)datas,64,TUX_READ_TIMEOUT); + //idx=usb_interrupt_read(tux_handle,TUX_READ_EP,(char*)datas,64,TUX_READ_TIMEOUT); if (idx<=0){ pthread_mutex_unlock(&usb_mutex); return; @@ -130,6 +131,7 @@ // Send datas CMD_STATUS_FLAG=1; idx=usb_bulk_write(tux_handle,TUX_WRITE_EP,(char*)datas,TUX_SEND_LENGTH,TUX_WRITE_TIMEOUT); + //idx=usb_interrupt_write(tux_handle,TUX_WRITE_EP,(char*)datas,TUX_SEND_LENGTH,TUX_WRITE_TIMEOUT); counter=0; CSF=CMD_STATUS_FLAG; pthread_mutex_unlock(&usb_mutex); Modified: daemon/trunk/main.c =================================================================== --- daemon/trunk/main.c 2007-03-06 14:45:42 UTC (rev 136) +++ daemon/trunk/main.c 2007-03-08 23:23:31 UTC (rev 137) @@ -36,6 +36,11 @@ #include "libs/USBDaemon_tcp_server.h" #include "libs/USBDaemon_status_table.h" #include "version.h" + + +/* DEBUG */ +#define LIBUSB_DEBUG_LEVEL 255 + /*_____________________ F U N C T I O N S __________________________________*/ struct version_s version = {0, 0, 0, "\0", "\0", 0}; @@ -152,6 +157,13 @@ // Print daemon informations print_info_daemon(); + +#ifdef USB_DEBUG + // Set libusb debug level + usb_set_debug(LIBUSB_DEBUG_LEVEL); + usb_init(); +#endif + // Program arguments daemonized=0; shell_view=0; |
From: remi <c2m...@c2...> - 2007-03-06 14:46:08
|
Author: remi Date: 2007-03-06 15:45:42 +0100 (Tue, 06 Mar 2007) New Revision: 136 Modified: api/python/trunk/tuxapi_class.py Log: UPD : - Loop in connecting daemon function has been removed - Connecting on ttsdaemon update - On_connected and on_disconnected from daemons event has been updated - Some updates Modified: api/python/trunk/tuxapi_class.py =================================================================== --- api/python/trunk/tuxapi_class.py 2007-03-06 13:12:20 UTC (rev 135) +++ api/python/trunk/tuxapi_class.py 2007-03-06 14:45:42 UTC (rev 136) @@ -76,20 +76,13 @@ try: self.socket.connect((self.Server_address, self.Server_port)) except error: - #self.sys.shell("open tuxdaemon") - while(True): - try: - server_exists=True - self.socket.connect((self.Server_address, self.Server_port)) - except error: - server_exists=False - print "WARNING : Tux Daemon not present" - time.sleep(1) - if server_exists==True: - break + print "WARNING : Tux droid daemon not found" + return self.connected=True thread.start_new_thread(self.recv_msg_Thread,()) thread.start_new_thread(self.data_pooling,()) + if self.event.on_connected!=None: + self.event.on_connected() time.sleep(1) #-------------------------------------------------------------------------- @@ -103,6 +96,8 @@ while ((self.data_pooling_run) and (self.recv_msg_Thread_run)): self.sys.wait(0.01) self.socket.close() + if self.event.on_disconnected!=None: + self.event.on_disconnected() self.tts.disconnect_from_daemon() #-------------------------------------------------------------------------- @@ -354,6 +349,8 @@ self.on_status=None self.on_remote=None self.on_light_level=None + self.on_connected=None + self.on_disconnected=None #-------------------------------------------------------------------------- ## store all events @@ -371,6 +368,8 @@ self.s_on_status=self.on_status self.s_on_remote=self.on_remote self.s_on_light_level=self.on_light_level + self.s_on_connected=self.on_connected + self.s_on_disconnected=self.on_disconnected #-------------------------------------------------------------------------- ## restore all events @@ -388,6 +387,8 @@ self.on_status=self.s_on_status self.on_remote=self.s_on_remote self.on_light_level=self.s_on_light_level + self.on_connected=self.s_on_connected + self.on_disconnected=self.s_on_disconnected #-------------------------------------------------------------------------- ## wait until status event arrival @@ -889,6 +890,8 @@ ## raw of status is in self.parent.last_datas ## @param DATA_STATUS : Desired status def get(self,DATA_STATUS): + if not self.parent.connected: + return 0 data=(DEST_TUX,SD_DEFAULT,DATA_TP_REQ,SUBDATA_TP_STATUS,DATA_STATUS,0,0,0,0,0,0,0,0,0,0,0) self.parent.socket.send("".join( [chr(x) for x in data] )) return self.rsp_status(DATA_STATUS) @@ -1104,7 +1107,7 @@ ## @param param2 : cmd parameter 2 ## @param param3 : cmd parameter 3 def cmd(self,cmd,param1,param2,param3): - cmd_no_ack(cmd,param1,param2,param3) + self.cmd_no_ack(cmd,param1,param2,param3) return self.cmd_ack() ## send a command to sub daemon @@ -1234,6 +1237,8 @@ self.Server_address=ipAddress self.connected=False self.last_datas=("a","a","a","a","a","a") + self.data_pooling_run=False + self.recv_msg_Thread_run=False self.datas_threated=True self.last_datas_for_event=("a","a","a","a","a","a") self.bloc_datas_flag=False @@ -1241,6 +1246,8 @@ self.print_status=False self.on_sound_on=None self.on_sound_off=None + self.on_connected=None + self.on_disconnected=None self.sound_on=False self.my_pitch=100 self.my_voice=SPK_US_MALE @@ -1257,19 +1264,29 @@ self.connected=True thread.start_new_thread(self.recv_msg_Thread,()) thread.start_new_thread(self.data_pooling,()) + if self.on_connected!=None: + self.on_connected() self.get_sound_state() ## Disconnect object from BabTTSDaemon def disconnect_from_daemon(self): if self.connected: + self.send_disconnect() + self.connected=False + self.parent.sys.wait(0.5) + while ((self.data_pooling_run) and (self.recv_msg_Thread_run)): + self.parent.sys.wait(0.01) + if self.on_disconnected!=None: + self.on_disconnected() self.socket.close() - self.connected=False ## Messages receiver (Thread) ## SYSTEM function def recv_msg_Thread(self): + self.recv_msg_Thread_run=True while self.connected: while self.bloc_datas_flag: + if not self.connected: break time.sleep(0.001) self.bloc_datas_flag=True try: @@ -1286,17 +1303,22 @@ print " ".join(struct_data) self.bloc_datas_flag=False time.sleep(0.01) + self.recv_msg_Thread_run=False ## Pooling on data arrival from tcp server ## SYSTEM function def data_pooling(self): + self.data_pooling_run=True while self.connected: while self.datas_threated: + if not self.connected: break time.sleep(0.003) while self.bloc_datas_flag: + if not self.connected: break time.sleep(0.001) self.dispatch_data_from_tcp_server() self.datas_threated=True + self.data_pooling_run=False ## Dispatch data from tcp server ## SYSTEM function @@ -1313,14 +1335,12 @@ if ord(self.last_datas_for_event[1])==CMD_INFO_SOUND_STATE: # SOUND on if ord(self.last_datas_for_event[2])==TTS_SOUND_ON: - #print "TTS_SOUND_ON" self.sound_on=True self.parent.cmd.audio_channel_tts() if self.on_sound_on!=None: self.on_sound_on() # SOUND off if ord(self.last_datas_for_event[2])==TTS_SOUND_OFF: - #print "TTS_SOUND_OFF" self.sound_on=False self.parent.cmd.audio_channel_general() if self.on_sound_off!=None: @@ -1428,12 +1448,10 @@ u=unicode(text,"utf-8") text_to_send=u.encode('latin-1','replace') self.socket.send(text_to_send) - print "wait sound on" counter=0 while ((self.sound_on==False) and (counter<10)): counter=counter+1 self.wait_time(0.1) - print "wait sound off" while self.sound_on==True: self.wait_time(0.1) self.wait_time(0.5) |
From: remi <c2m...@c2...> - 2007-03-06 13:12:58
|
Author: remi Date: 2007-03-06 14:12:20 +0100 (Tue, 06 Mar 2007) New Revision: 135 Modified: daemon/trunk/libs/USBDaemon_usb_readWrite.c Log: UPD : "busy_count" bug corrected Modified: daemon/trunk/libs/USBDaemon_usb_readWrite.c =================================================================== --- daemon/trunk/libs/USBDaemon_usb_readWrite.c 2007-03-06 13:04:05 UTC (rev 134) +++ daemon/trunk/libs/USBDaemon_usb_readWrite.c 2007-03-06 13:12:20 UTC (rev 135) @@ -78,8 +78,8 @@ pthread_mutex_unlock(&usb_mutex); exit(1); } + pthread_mutex_unlock(&usb_mutex); return; - pthread_mutex_unlock(&usb_mutex); } busy_count=0; idx=usb_bulk_read(tux_handle,TUX_READ_EP,(char*)datas,64,TUX_READ_TIMEOUT); |
From: remi <c2m...@c2...> - 2007-03-06 13:05:23
|
Author: remi Date: 2007-03-06 14:04:05 +0100 (Tue, 06 Mar 2007) New Revision: 134 Modified: daemon/trunk/libs/USBDaemon_usb_readWrite.c Log: UPD : "busy_count" bug corrected Modified: daemon/trunk/libs/USBDaemon_usb_readWrite.c =================================================================== --- daemon/trunk/libs/USBDaemon_usb_readWrite.c 2007-03-05 15:05:45 UTC (rev 133) +++ daemon/trunk/libs/USBDaemon_usb_readWrite.c 2007-03-06 13:04:05 UTC (rev 134) @@ -71,13 +71,15 @@ } idx=usb_bulk_write(tux_handle,TUX_WRITE_EP,(char*)cmd_send,5,TUX_WRITE_TIMEOUT); if (idx<=0) { - printf("Error : Tux dongle is busy or disconnected\n"); busy_count++; + printf("Error : Tux dongle is busy or disconnected : %d of 10\n",busy_count); if(busy_count>9){ send_daemon_disconnected(); pthread_mutex_unlock(&usb_mutex); exit(1); } + return; + pthread_mutex_unlock(&usb_mutex); } busy_count=0; idx=usb_bulk_read(tux_handle,TUX_READ_EP,(char*)datas,64,TUX_READ_TIMEOUT); |
From: remi <c2m...@c2...> - 2007-03-05 15:06:35
|
Author: remi Date: 2007-03-05 16:05:45 +0100 (Mon, 05 Mar 2007) New Revision: 133 Modified: software/gtdi/trunk/gtdi.py Log: UPD : Storing bug corrected Modified: software/gtdi/trunk/gtdi.py =================================================================== --- software/gtdi/trunk/gtdi.py 2007-03-02 15:37:13 UTC (rev 132) +++ software/gtdi/trunk/gtdi.py 2007-03-05 15:05:45 UTC (rev 133) @@ -133,6 +133,8 @@ # On quit menu #-------------------------------------------------------------------------- def on_quitter1_activate(self, widget, *args): + tux.sys.wait(1) + tux.disconnect_from_daemon() sys.exit(0) # ----------------------------------------------------------------------------- @@ -369,7 +371,7 @@ tux.sys.wait(0.1) wav_buffer.insert(wav_buffer.get_end_iter(),"Sound storing : Indexes\n") tux.cmd.sound_store_index(0x00,0x04,0x00) - for size in sounds.wav_sizes: + for size in wavs.wav_sizes: current_pos=current_pos+size tux.sys.wait(0.1) tux.cmd.sound_store_index((current_pos & 0xFF0000)>>16,(current_pos & 0x00FF00)>>8,current_pos & 0x0000FF) |
From: remi <c2m...@c2...> - 2007-03-02 15:37:32
|
Author: remi Date: 2007-03-02 16:37:13 +0100 (Fri, 02 Mar 2007) New Revision: 132 Modified: 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: UPD : wait 10 "usb busy error" consecutive before exiting the daemon Modified: daemon/trunk/libs/USBDaemon_usb_enum.c =================================================================== --- daemon/trunk/libs/USBDaemon_usb_enum.c 2007-03-02 13:33:44 UTC (rev 131) +++ daemon/trunk/libs/USBDaemon_usb_enum.c 2007-03-02 15:37:13 UTC (rev 132) @@ -109,6 +109,7 @@ // Reinit audio channel send_usb_dongle_cmd(0x02,0,0,0); current_audio_channel=0; + busy_count=0; // Read loop while(tux_handle){ usb_get_status_TuxDroid(); Modified: daemon/trunk/libs/USBDaemon_usb_enum.h =================================================================== --- daemon/trunk/libs/USBDaemon_usb_enum.h 2007-03-02 13:33:44 UTC (rev 131) +++ daemon/trunk/libs/USBDaemon_usb_enum.h 2007-03-02 15:37:13 UTC (rev 132) @@ -21,7 +21,7 @@ /*_____________________ I N C L U D E S____________________________________ */ #include <usb.h> /*_____________________ D E F I N E S ______________________________________*/ -/*_____________________ V A R I A B L E S ___________________________________*/ +/*_____________________ V A R I A B L E S __________________________________*/ usb_dev_handle *tux_handle; struct usb_device* tux_device; int TUX_USB_STATUS; Modified: daemon/trunk/libs/USBDaemon_usb_readWrite.c =================================================================== --- daemon/trunk/libs/USBDaemon_usb_readWrite.c 2007-03-02 13:33:44 UTC (rev 131) +++ daemon/trunk/libs/USBDaemon_usb_readWrite.c 2007-03-02 15:37:13 UTC (rev 132) @@ -24,6 +24,7 @@ #include "USBDaemon_globals.h" #include "USBDaemon_status_table.h" #include "USBDaemon_tcp_server.h" +#include "USBDaemon_usb_readWrite.h" /*_____________________ F U N C T I O N S __________________________________*/ // *********************************************************************** @@ -71,10 +72,14 @@ idx=usb_bulk_write(tux_handle,TUX_WRITE_EP,(char*)cmd_send,5,TUX_WRITE_TIMEOUT); if (idx<=0) { printf("Error : Tux dongle is busy or disconnected\n"); - send_daemon_disconnected(); + busy_count++; + if(busy_count>9){ + send_daemon_disconnected(); pthread_mutex_unlock(&usb_mutex); - exit(1); + exit(1); + } } + busy_count=0; idx=usb_bulk_read(tux_handle,TUX_READ_EP,(char*)datas,64,TUX_READ_TIMEOUT); if (idx<=0){ pthread_mutex_unlock(&usb_mutex); Modified: daemon/trunk/libs/USBDaemon_usb_readWrite.h =================================================================== --- daemon/trunk/libs/USBDaemon_usb_readWrite.h 2007-03-02 13:33:44 UTC (rev 131) +++ daemon/trunk/libs/USBDaemon_usb_readWrite.h 2007-03-02 15:37:13 UTC (rev 132) @@ -21,6 +21,8 @@ /*_____________________ I N C L U D E S____________________________________ */ #include <usb.h> /*_____________________ D E F I N E S ______________________________________*/ +/*_____________________ V A R I A B L E S __________________________________*/ +unsigned char busy_count; /*_____________________ F U N C T I O N S __________________________________*/ void usb_read_TuxDroid(); void usb_get_status_TuxDroid(); |
From: remi <c2m...@c2...> - 2007-03-02 13:34:25
|
Author: remi Date: 2007-03-02 14:33:44 +0100 (Fri, 02 Mar 2007) New Revision: 131 Modified: api/python/trunk/tuxapi_class.py Log: UPD : cmd.eyes_open() and cmd.eyes_close() bug fixed Modified: api/python/trunk/tuxapi_class.py =================================================================== --- api/python/trunk/tuxapi_class.py 2007-03-01 17:23:13 UTC (rev 130) +++ api/python/trunk/tuxapi_class.py 2007-03-02 13:33:44 UTC (rev 131) @@ -633,12 +633,12 @@ ## Send command to tux for opening eyes def eyes_open(self): - if self.parent.status.get_eyes_open_position_switch()==1: + if self.parent.status.get_eyes_closed_position_switch()==0: self.eyes_on() ## Send command to tux for closing eyes def eyes_close(self): - if self.parent.status.get_eyes_open_position_switch()==0: + if self.parent.status.get_eyes_closed_position_switch()==1: self.eyes_on() ## Send command to tux for moving eyes |