tux-droid-svn Mailing List for Tux Droid CE (Page 192)
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...> - 2008-06-12 23:12:50
|
Author: remi Date: 2008-06-13 01:12:48 +0200 (Fri, 13 Jun 2008) New Revision: 1232 Modified: software_suite_v2/middleware/tuxdriver/trunk/src/tux_sound_flash.c Log: * fixed a status initialization in the sound reflashing task. Modified: software_suite_v2/middleware/tuxdriver/trunk/src/tux_sound_flash.c =================================================================== --- software_suite_v2/middleware/tuxdriver/trunk/src/tux_sound_flash.c 2008-06-12 22:20:24 UTC (rev 1231) +++ software_suite_v2/middleware/tuxdriver/trunk/src/tux_sound_flash.c 2008-06-12 23:12:48 UTC (rev 1232) @@ -632,7 +632,8 @@ full_time_sec += reflash_info.wav_count * 0.97; tux_sw_status_set_floatvalue(SW_ID_SOUND_REFLASH_BEGIN, full_time_sec, true); - tux_sw_status_set_strvalue(SW_ID_SOUND_REFLASH_END, "WAIT", false); + tux_sw_status_set_strvalue(SW_ID_SOUND_REFLASH_END, STRING_VALUE_NDEF, + true); /* Goto SRS_ERASE state */ reflash_info.current_state = SRS_ERASE; break; |
From: remi <c2m...@c2...> - 2008-06-12 22:20:16
|
Author: remi Date: 2008-06-13 00:20:24 +0200 (Fri, 13 Jun 2008) New Revision: 1231 Modified: software_suite_v2/middleware/tuxdriver/trunk/src/log.c Log: * Changed the path of the log file Modified: software_suite_v2/middleware/tuxdriver/trunk/src/log.c =================================================================== --- software_suite_v2/middleware/tuxdriver/trunk/src/log.c 2008-06-12 22:16:14 UTC (rev 1230) +++ software_suite_v2/middleware/tuxdriver/trunk/src/log.c 2008-06-12 22:20:24 UTC (rev 1231) @@ -27,9 +27,9 @@ /** Name of log file for target LOG_TARGET_TUX */ #ifdef WIN32 -# define LOG_FILE "tux_driver.log" +# define LOG_FILE "c:\\windows\\libtuxdriver.log" #else -# define LOG_FILE "/var/log/tux_driver.log" +# define LOG_FILE "/var/log/libtuxdriver.log" #endif /** All logged messages are prefixed with this text */ |
From: remi <c2m...@c2...> - 2008-06-12 22:16:06
|
Author: remi Date: 2008-06-13 00:16:14 +0200 (Fri, 13 Jun 2008) New Revision: 1230 Modified: software_suite_v2/middleware/tuxdriver/trunk/src/tux_sound_flash.c Log: * Reinitialization of a status when the reflashing task start. Modified: software_suite_v2/middleware/tuxdriver/trunk/src/tux_sound_flash.c =================================================================== --- software_suite_v2/middleware/tuxdriver/trunk/src/tux_sound_flash.c 2008-06-12 22:15:18 UTC (rev 1229) +++ software_suite_v2/middleware/tuxdriver/trunk/src/tux_sound_flash.c 2008-06-12 22:16:14 UTC (rev 1230) @@ -632,7 +632,7 @@ full_time_sec += reflash_info.wav_count * 0.97; tux_sw_status_set_floatvalue(SW_ID_SOUND_REFLASH_BEGIN, full_time_sec, true); - tux_sw_status_set_strvalue(SW_ID_SOUND_REFLASH_END, "NO_ERROR", false); + tux_sw_status_set_strvalue(SW_ID_SOUND_REFLASH_END, "WAIT", false); /* Goto SRS_ERASE state */ reflash_info.current_state = SRS_ERASE; break; |
From: remi <c2m...@c2...> - 2008-06-12 22:15:15
|
Author: remi Date: 2008-06-13 00:15:18 +0200 (Fri, 13 Jun 2008) New Revision: 1229 Modified: software_suite_v2/middleware/tuxdriver/trunk/src/log.c Log: * log file is now reseted when the library is initialized (avoid big logs) Modified: software_suite_v2/middleware/tuxdriver/trunk/src/log.c =================================================================== --- software_suite_v2/middleware/tuxdriver/trunk/src/log.c 2008-06-12 11:43:38 UTC (rev 1228) +++ software_suite_v2/middleware/tuxdriver/trunk/src/log.c 2008-06-12 22:15:18 UTC (rev 1229) @@ -75,7 +75,7 @@ switch (target) { case LOG_TARGET_TUX: - log_file = fopen(LOG_FILE, "at"); + log_file = fopen(LOG_FILE, "w"); if (log_file == NULL) { return false; |
From: Paul_R <c2m...@c2...> - 2008-06-12 11:43:40
|
Author: Paul_R Date: 2008-06-12 13:43:38 +0200 (Thu, 12 Jun 2008) New Revision: 1228 Modified: software/tuxgi/trunk/tuxgi.py Log: * Cleanup Modified: software/tuxgi/trunk/tuxgi.py =================================================================== --- software/tuxgi/trunk/tuxgi.py 2008-06-12 10:30:06 UTC (rev 1227) +++ software/tuxgi/trunk/tuxgi.py 2008-06-12 11:43:38 UTC (rev 1228) @@ -298,7 +298,7 @@ self.get_widget("image4").set_from_stock(gtk.STOCK_CANCEL\ ,gtk.ICON_SIZE_BUTTON) - time.sleep(0.5) + time.sleep(0.05) # ----------------------------------------------------------------------------- # Tab "main" events # ----------------------------------------------------------------------------- @@ -427,34 +427,6 @@ else: tux.spinning.rightOnAsync(float(num_sb.get_value()), SPV_VERYFAST) - - #-------------------------------------------------------------------------- - # On "Send command" button clicked - #-------------------------------------------------------------------------- - def on_scommand_bt_clicked(self, widget, *args): - Window2().run() - - #-------------------------------------------------------------------------- - # On "Tux Droid shell" button clicked - #-------------------------------------------------------------------------- - def on_tdshell_bt_clicked(self, widget, *args): - print "FIXME :: tuxsh : not implemented" - #tux.sys.shell_free(xterm_cmd) - - #-------------------------------------------------------------------------- - # On "Get light level" button clicked - #-------------------------------------------------------------------------- - def on_cversion_bt_clicked(self, widget, *args): - print "The light level won't be displayed on the text box." - a, b = tux.status.requestOne('light_level') - print ("The current light level is %f"%float(a)) - #-------------------------------------------------------------------------- - # On "Ping" button clicked - #-------------------------------------------------------------------------- - def on_ping_bt_clicked(self, widget, *args): - print "FIXME :: Ping : this function isn't implemented yet" - #thread.start_new_thread(tux.cmd.ping,(200,)) - # ----------------------------------------------------------------------------- # Tab "TTS" events # ----------------------------------------------------------------------------- |
From: Paul_R <c2m...@c2...> - 2008-06-12 10:53:42
|
Author: Paul_R Date: 2008-06-12 12:30:06 +0200 (Thu, 12 Jun 2008) New Revision: 1227 Modified: software/tuxgi/trunk/tuxgi.py software/tuxgi/trunk/tuxgi2.glade Log: * Added an attitune player Modified: software/tuxgi/trunk/tuxgi.py =================================================================== --- software/tuxgi/trunk/tuxgi.py 2008-06-12 08:28:47 UTC (rev 1226) +++ software/tuxgi/trunk/tuxgi.py 2008-06-12 10:30:06 UTC (rev 1227) @@ -40,6 +40,7 @@ import gtk import gobject import thread +import threading from SimpleGladeApp import SimpleGladeApp from SimpleGladeApp import bindtextdomain @@ -105,6 +106,9 @@ # On new window #-------------------------------------------------------------------------- def new(self): + self.__t = None + self.__thread_on = True + att_path = ' ' self.init_gui() tux.event.handler.register("tts_0_sound_state", self.on_sound_on) tux.event.handler.register("left_led_state", self.on_left_blue_led_on) @@ -115,6 +119,8 @@ tux.event.handler.register("all", self.on_status) tux.tts.registerEventOnVoiceList(self.update_voice_list) self.update_voice_list() + #self.__t = threading.Thread(target = self.status_viewer_thread) + #self.__t.start() thread.start_new_thread(self.status_viewer_thread,()) @@ -146,6 +152,17 @@ self.get_widget("radiobutton4").set_active(True) #-------------------------------------------------------------------------- + # Attitunes + #-------------------------------------------------------------------------- + def on_fileAtt_selection_changed(self, widget, *args): + tux.attitune.load(widget.get_filename()) + + def on_btnPlayAtt_clicked(self, widget, *args): + tux.attitune.play() + + def on_btnStopAtt_clicked(self, widget, *args): + tux.attitune.stop() + #-------------------------------------------------------------------------- # On window destroy #-------------------------------------------------------------------------- def on_window1_destroy(self, widget, *args): @@ -154,6 +171,10 @@ tux.destroy() sys.exit(0) + def on_window1_remove(self, widget, *args): + self.__thread_on = False + time.sleep(0.5) + #-------------------------------------------------------------------------- # On left blue led status is on #-------------------------------------------------------------------------- @@ -244,7 +265,7 @@ last_tuxdaemon_connect=False last_tuxttsdaemon_connect=False last_rf_state=False - while True: + while self.__thread_on: if status_list_changed: status_list_changed=False statusview_b=self.get_widget("textview1").get_buffer() @@ -276,7 +297,7 @@ else: self.get_widget("image4").set_from_stock(gtk.STOCK_CANCEL\ ,gtk.ICON_SIZE_BUTTON) - + time.sleep(0.5) # ----------------------------------------------------------------------------- # Tab "main" events @@ -840,5 +861,6 @@ gtk.gdk.threads_init() g_tDI.run() + if __name__ == "__main__": main() Modified: software/tuxgi/trunk/tuxgi2.glade =================================================================== --- software/tuxgi/trunk/tuxgi2.glade 2008-06-12 08:28:47 UTC (rev 1226) +++ software/tuxgi/trunk/tuxgi2.glade 2008-06-12 10:30:06 UTC (rev 1227) @@ -21,6 +21,7 @@ <property name="focus_on_map">True</property> <property name="urgency_hint">False</property> <signal name="destroy" handler="on_window1_destroy"/> + <signal name="delete_event" handler="on_window1_remove" last_modification_time="Thu, 12 Jun 2008 10:19:05 GMT"/> <child> <widget class="GtkNotebook" id="notebook1"> @@ -945,76 +946,60 @@ <property name="visible">True</property> <child> - <widget class="GtkButton" id="button8"> + <widget class="GtkButton" id="btnStopAtt"> <property name="width_request">113</property> <property name="height_request">27</property> <property name="visible">True</property> <property name="can_focus">True</property> - <property name="label" translatable="yes">Send command</property> + <property name="label" translatable="yes">Stop</property> <property name="use_underline">True</property> <property name="relief">GTK_RELIEF_NORMAL</property> <property name="focus_on_click">True</property> - <signal name="clicked" handler="on_scommand_bt_clicked"/> + <signal name="clicked" handler="on_btnStopAtt_clicked" last_modification_time="Thu, 12 Jun 2008 09:48:39 GMT"/> </widget> <packing> <property name="x">0</property> - <property name="y">38</property> + <property name="y">72</property> </packing> </child> <child> - <widget class="GtkButton" id="button11"> + <widget class="GtkFileChooserButton" id="fileAtt"> <property name="width_request">113</property> <property name="height_request">27</property> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="label" translatable="yes">Ping</property> - <property name="use_underline">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - <signal name="clicked" handler="on_ping_bt_clicked"/> + <property name="title" translatable="yes">Select A File</property> + <property name="action">GTK_FILE_CHOOSER_ACTION_OPEN</property> + <property name="local_only">True</property> + <property name="show_hidden">False</property> + <property name="do_overwrite_confirmation">False</property> + <property name="width_chars">-1</property> + <signal name="selection_changed" handler="on_fileAtt_selection_changed" last_modification_time="Thu, 12 Jun 2008 09:48:27 GMT"/> </widget> <packing> <property name="x">0</property> - <property name="y">106</property> + <property name="y">6</property> </packing> </child> <child> - <widget class="GtkButton" id="button9"> + <widget class="GtkButton" id="btnPlayAtt"> <property name="width_request">113</property> <property name="height_request">27</property> <property name="visible">True</property> <property name="can_focus">True</property> - <property name="label" translatable="yes">Get light level</property> + <property name="label" translatable="yes">Play +</property> <property name="use_underline">True</property> <property name="relief">GTK_RELIEF_NORMAL</property> <property name="focus_on_click">True</property> - <signal name="clicked" handler="on_cversion_bt_clicked"/> + <signal name="clicked" handler="on_btnPlayAtt_clicked" last_modification_time="Thu, 12 Jun 2008 09:48:33 GMT"/> </widget> <packing> <property name="x">0</property> - <property name="y">72</property> + <property name="y">40</property> </packing> </child> - - <child> - <widget class="GtkButton" id="button7"> - <property name="width_request">113</property> - <property name="height_request">27</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="label" translatable="yes">Tux Droid Shell</property> - <property name="use_underline">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - <signal name="clicked" handler="on_tdshell_bt_clicked"/> - </widget> - <packing> - <property name="x">0</property> - <property name="y">4</property> - </packing> - </child> </widget> </child> </widget> |
From: Paul_R <c2m...@c2...> - 2008-06-12 08:28:40
|
Author: Paul_R Date: 2008-06-12 10:28:47 +0200 (Thu, 12 Jun 2008) New Revision: 1226 Modified: software/tuxgi/trunk/tuxgi.py Log: * trunk/tuxgi.py: * Bug : bad position for the time.sleep in the status thread. * Bug : ST_NAME_FLIPPERS_RM Modified: software/tuxgi/trunk/tuxgi.py =================================================================== --- software/tuxgi/trunk/tuxgi.py 2008-06-11 14:11:23 UTC (rev 1225) +++ software/tuxgi/trunk/tuxgi.py 2008-06-12 08:28:47 UTC (rev 1226) @@ -111,7 +111,7 @@ tux.event.handler.register("right_led_state", self.on_right_blue_led_on) tux.event.handler.register(ST_NAME_MOUTH_RM, self.on_mouth_stop) tux.event.handler.register(ST_NAME_EYES_RM, self.on_eyes_stop) - #tux.event.handler.register(ST_NAME_FLIPPER_RM, self.on_flippers_stop) + tux.event.handler.register(ST_NAME_FLIPPERS_RM, self.on_flippers_stop) tux.event.handler.register("all", self.on_status) tux.tts.registerEventOnVoiceList(self.update_voice_list) self.update_voice_list() @@ -277,7 +277,7 @@ self.get_widget("image4").set_from_stock(gtk.STOCK_CANCEL\ ,gtk.ICON_SIZE_BUTTON) - time.sleep(0.5) + time.sleep(0.5) # ----------------------------------------------------------------------------- # Tab "main" events # ----------------------------------------------------------------------------- |
From: Paul_R <c2m...@c2...> - 2008-06-11 14:11:15
|
Author: Paul_R Date: 2008-06-11 16:11:23 +0200 (Wed, 11 Jun 2008) New Revision: 1225 Modified: software/tuxgi/trunk/tuxgi.py Log: * Init the leds state at startup Modified: software/tuxgi/trunk/tuxgi.py =================================================================== --- software/tuxgi/trunk/tuxgi.py 2008-06-11 14:07:05 UTC (rev 1224) +++ software/tuxgi/trunk/tuxgi.py 2008-06-11 14:11:23 UTC (rev 1225) @@ -111,7 +111,7 @@ tux.event.handler.register("right_led_state", self.on_right_blue_led_on) tux.event.handler.register(ST_NAME_MOUTH_RM, self.on_mouth_stop) tux.event.handler.register(ST_NAME_EYES_RM, self.on_eyes_stop) - tux.event.handler.register(ST_NAME_FLIPPER_RM, self.on_flippers_stop) + #tux.event.handler.register(ST_NAME_FLIPPER_RM, self.on_flippers_stop) tux.event.handler.register("all", self.on_status) tux.tts.registerEventOnVoiceList(self.update_voice_list) self.update_voice_list() @@ -119,33 +119,32 @@ def init_gui(self): - ''' + if tux.led.right.getState() == SSV_ON: self.get_widget("checkbutton2").set_active(True) else: self.get_widget("checkbutton2").set_active(False) + if tux.led.left.getState() == SSV_ON: self.get_widget("checkbutton1").set_active(True) else: self.get_widget("checkbutton1").set_active(False) - ''' + if tux.flippers.getPosition() == SSV_DOWN: self.get_widget("radiobutton6").set_active(True) else: self.get_widget("radiobutton5").set_active(True) + if tux.eyes.getPosition() == SSV_OPEN: self.get_widget("radiobutton1").set_active(True) else: self.get_widget("radiobutton2").set_active(True) + if tux.mouth.getPosition() == SSV_OPEN: self.get_widget("radiobutton3").set_active(True) else: self.get_widget("radiobutton4").set_active(True) - - - - #-------------------------------------------------------------------------- # On window destroy #-------------------------------------------------------------------------- |
From: Paul_R <c2m...@c2...> - 2008-06-11 14:06:57
|
Author: Paul_R Date: 2008-06-11 16:07:05 +0200 (Wed, 11 Jun 2008) New Revision: 1224 Modified: software/tuxgi/trunk/tuxgi.py software/tuxgi/trunk/version.py Log: * Init the GUI at startup Modified: software/tuxgi/trunk/tuxgi.py =================================================================== --- software/tuxgi/trunk/tuxgi.py 2008-06-11 13:11:25 UTC (rev 1223) +++ software/tuxgi/trunk/tuxgi.py 2008-06-11 14:07:05 UTC (rev 1224) @@ -105,16 +105,47 @@ # On new window #-------------------------------------------------------------------------- def new(self): + self.init_gui() tux.event.handler.register("tts_0_sound_state", self.on_sound_on) tux.event.handler.register("left_led_state", self.on_left_blue_led_on) tux.event.handler.register("right_led_state", self.on_right_blue_led_on) - tux.event.handler.register("mouth_remaining_movements", self.on_mouth_stop, (0, None)) - tux.event.handler.register("eyes_remaining_movements", self.on_eyes_stop, (0, None)) + tux.event.handler.register(ST_NAME_MOUTH_RM, self.on_mouth_stop) + tux.event.handler.register(ST_NAME_EYES_RM, self.on_eyes_stop) + tux.event.handler.register(ST_NAME_FLIPPER_RM, self.on_flippers_stop) tux.event.handler.register("all", self.on_status) tux.tts.registerEventOnVoiceList(self.update_voice_list) self.update_voice_list() thread.start_new_thread(self.status_viewer_thread,()) + + def init_gui(self): + ''' + if tux.led.right.getState() == SSV_ON: + self.get_widget("checkbutton2").set_active(True) + else: + self.get_widget("checkbutton2").set_active(False) + if tux.led.left.getState() == SSV_ON: + self.get_widget("checkbutton1").set_active(True) + else: + self.get_widget("checkbutton1").set_active(False) + ''' + if tux.flippers.getPosition() == SSV_DOWN: + self.get_widget("radiobutton6").set_active(True) + else: + self.get_widget("radiobutton5").set_active(True) + if tux.eyes.getPosition() == SSV_OPEN: + self.get_widget("radiobutton1").set_active(True) + else: + self.get_widget("radiobutton2").set_active(True) + if tux.mouth.getPosition() == SSV_OPEN: + self.get_widget("radiobutton3").set_active(True) + else: + self.get_widget("radiobutton4").set_active(True) + + + + + #-------------------------------------------------------------------------- # On window destroy #-------------------------------------------------------------------------- @@ -159,15 +190,15 @@ global toggled_by_event toggled_by_event=True if tux.mouth.getPosition() == SSV_CLOSE: + self.get_widget("radiobutton4").set_active(True) + else: self.get_widget("radiobutton3").set_active(True) - else: - self.get_widget("radiobutton4").set_active(True) toggled_by_event=False #-------------------------------------------------------------------------- # On eyes stop #-------------------------------------------------------------------------- - def on_eyes_stop(self): + def on_eyes_stop(self, value, timeout): global toggled_by_event toggled_by_event=True if tux.eyes.getPosition() == SSV_OPEN: @@ -177,6 +208,18 @@ toggled_by_event=False #-------------------------------------------------------------------------- + # On flippers stop + #-------------------------------------------------------------------------- + def on_flippers_stop(self, value, timeout): + global toggled_by_event + toggled_by_event=True + if tux.flippers.getPosition() == SSV_UP: + self.get_widget("radiobutton5").set_active(True) + else: + self.get_widget("radiobutton6").set_active(True) + toggled_by_event=False + + #-------------------------------------------------------------------------- # Event on status #-------------------------------------------------------------------------- def on_status(self, name, value, delay): @@ -218,7 +261,6 @@ if tux.server.getConnected() != last_tuxdaemon_connect: last_tuxdaemon_connect = tux.server.getConnected() - print last_tuxdaemon_connect if tux.server.getConnected(): self.get_widget("image2").set_from_stock(gtk.STOCK_APPLY\ @@ -383,9 +425,9 @@ # On "Get light level" button clicked #-------------------------------------------------------------------------- def on_cversion_bt_clicked(self, widget, *args): + print "The light level won't be displayed on the text box." a, b = tux.status.requestOne('light_level') - return a - + print ("The current light level is %f"%float(a)) #-------------------------------------------------------------------------- # On "Ping" button clicked #-------------------------------------------------------------------------- Modified: software/tuxgi/trunk/version.py =================================================================== --- software/tuxgi/trunk/version.py 2008-06-11 13:11:25 UTC (rev 1223) +++ software/tuxgi/trunk/version.py 2008-06-11 14:07:05 UTC (rev 1224) @@ -1 +1 @@ -app_version="0.2.3 (SVN/UNRELEASED)" +app_version="0.3.0 (SVN/UNRELEASED)" |
From: Paul_R <c2m...@c2...> - 2008-06-11 13:11:24
|
Author: Paul_R Date: 2008-06-11 15:11:25 +0200 (Wed, 11 Jun 2008) New Revision: 1223 Modified: software/tuxgi/trunk/tuxgi.py software/tuxgi/trunk/tuxgi2.glade Log: * Finished the TTS tab. Now, the voice list is OK, the tts can be stopped and paused. Modified: software/tuxgi/trunk/tuxgi.py =================================================================== --- software/tuxgi/trunk/tuxgi.py 2008-06-11 09:26:00 UTC (rev 1222) +++ software/tuxgi/trunk/tuxgi.py 2008-06-11 13:11:25 UTC (rev 1223) @@ -111,6 +111,8 @@ tux.event.handler.register("mouth_remaining_movements", self.on_mouth_stop, (0, None)) tux.event.handler.register("eyes_remaining_movements", self.on_eyes_stop, (0, None)) tux.event.handler.register("all", self.on_status) + tux.tts.registerEventOnVoiceList(self.update_voice_list) + self.update_voice_list() thread.start_new_thread(self.status_viewer_thread,()) #-------------------------------------------------------------------------- @@ -413,27 +415,30 @@ if toggled_by_event: return global onplay - voice_cb=self.get_widget("comboboxentry1") - pitch_sb=self.get_widget("spinbutton6").get_value() - textedit=self.get_widget("textview2") - buffer=textedit.get_buffer() - my_text=buffer.get_text(*buffer.get_bounds()) - tux.tts.setPitch(int(pitch_sb)) - tux.tts.speakAsync(my_text) + if onplay == False: + voice_cb=self.get_widget("comboboxentry1") + pitch_sb=self.get_widget("spinbutton6").get_value() + textedit=self.get_widget("textview2") + buffer=textedit.get_buffer() + my_text=buffer.get_text(*buffer.get_bounds()) + tux.tts.setPitch(int(pitch_sb)) + tux.tts.setLocutor(self.get_widget("comboboxentry1").get_active_text()) + tux.tts.speakAsync(my_text) + else: + tux.tts.stop() + #-------------------------------------------------------------------------- # On "pause" button clicked #-------------------------------------------------------------------------- def on_tts_pause_bt_clicked(self, widget, *args): - print "FIXME : TTS pause : not implemented yet" - ''' global onpause if onpause: - tux.tts.play() + tux.tts.setPause(False) onpause=False else: - tux.tts.pause() + tux.tts.setPause(True) onpause=True - ''' + #-------------------------------------------------------------------------- # On "Clear text" button clicked #-------------------------------------------------------------------------- @@ -473,26 +478,16 @@ # Update the voices list in the combobox #-------------------------------------------------------------------------- def update_voice_list(self): - pass - ''' global voice_list global voice_dic global current_voice - voice_dic = {} voice_list.clear() - for voice_id in tux.tts.authorized_voices_list: - voice_list.append([LANG_OF_SPK_LIST[voice_id],]) - voice_dic[LANG_OF_SPK_LIST[voice_id]] = voice_id + 1 - self.get_widget("comboboxentry1").set_model(voice_list) - if voice_dic.has_key(current_voice): - for i, voice_name in enumerate(voice_list): - if voice_name[0] == current_voice: - self.get_widget("comboboxentry1").set_active(i) - break - else: - self.get_widget("comboboxentry1").set_active(0) - ''' + voice_list = tux.tts.getVoices() + for i in range(len(voice_list)): + self.get_widget("comboboxentry1").insert_text(i, voice_list[i]) + self.get_widget("comboboxentry1").set_active(0) + # ----------------------------------------------------------------------------- # Tab "Audio" events Modified: software/tuxgi/trunk/tuxgi2.glade =================================================================== --- software/tuxgi/trunk/tuxgi2.glade 2008-06-11 09:26:00 UTC (rev 1222) +++ software/tuxgi/trunk/tuxgi2.glade 2008-06-11 13:11:25 UTC (rev 1223) @@ -1326,12 +1326,7 @@ <property name="width_request">300</property> <property name="height_request">27</property> <property name="visible">True</property> - <property name="items" translatable="yes">FR male -FR female -US male -US female -NL male -NL female</property> + <property name="items" translatable="yes"></property> <property name="add_tearoffs">False</property> <property name="has_frame">True</property> <property name="focus_on_click">True</property> |
From: Paul_R <c2m...@c2...> - 2008-06-11 09:25:54
|
Author: Paul_R Date: 2008-06-11 11:26:00 +0200 (Wed, 11 Jun 2008) New Revision: 1222 Modified: software/tuxgi/trunk/tuxgi.py Log: * Bug with the spinning commands Modified: software/tuxgi/trunk/tuxgi.py =================================================================== --- software/tuxgi/trunk/tuxgi.py 2008-06-11 07:52:22 UTC (rev 1221) +++ software/tuxgi/trunk/tuxgi.py 2008-06-11 09:26:00 UTC (rev 1222) @@ -359,9 +359,9 @@ def on_rotation_spin_bt_clicked(self, widget, *args): num_sb=self.get_widget("spinbutton5") if self.get_widget("radiobutton7").get_active(): - tux.spinning.leftOnAsync(int(num_sb.get_value()), SPV_VERYFAST) + tux.spinning.leftOnAsync(float(num_sb.get_value()), SPV_VERYFAST) else: - tux.spinning.rightOnAsync(int(num_sb.get_value()), SPV_VERYFAST) + tux.spinning.rightOnAsync(float(num_sb.get_value()), SPV_VERYFAST) #-------------------------------------------------------------------------- |
From: Paul_R <c2m...@c2...> - 2008-06-11 07:52:49
|
Author: Paul_R Date: 2008-06-11 09:52:22 +0200 (Wed, 11 Jun 2008) New Revision: 1221 Modified: software/tuxgi/trunk/tuxgi.py Log: * Adapted tuxgi to works with the new software suite. Limitations : - All sounds flash functionnalities aren't implemented on the API for the moment. - TTS use the default voice and can't be changed ATM. - led_blink funnction don't use the counter value - No raw commands - No ping Modified: software/tuxgi/trunk/tuxgi.py =================================================================== --- software/tuxgi/trunk/tuxgi.py 2008-06-09 06:44:33 UTC (rev 1220) +++ software/tuxgi/trunk/tuxgi.py 2008-06-11 07:52:22 UTC (rev 1221) @@ -28,8 +28,10 @@ # uses objects "tux" and "tss" # ----------------------------------------------- import sys -sys.path.append('/opt/tuxdroid/api/python') -from tux import * +import time + +from tuxisalive.api import * +tux=shellTux() # ----------------------------------------------- # Your script # ----------------------------------------------- @@ -46,7 +48,7 @@ print "Graphical TuxDroid Interface " + app_version glade_dir = "" locale_dir = "" -soundcard = tux.hw.alsa_device +soundcard = 'hw:TuxDroid' #tux.hw.alsa_device bindtextdomain(app_name, locale_dir) @@ -103,20 +105,13 @@ # On new window #-------------------------------------------------------------------------- def new(self): - self.update_voice_list() - tux.tts.on_sound_on=self.on_sound_on - tux.tts.on_sound_off=self.on_sound_off - tux.tts.on_voice_list=self.on_voice_list - tux.event.on_status=self.on_status - tux.event.on_left_blue_led_on=self.on_left_blue_led_on - tux.event.on_left_blue_led_off=self.on_left_blue_led_off - tux.event.on_right_blue_led_on=self.on_right_blue_led_on - tux.event.on_right_blue_led_off=self.on_right_blue_led_off - tux.event.on_mouth_stop=self.on_mouth_stop - tux.event.on_eyes_stop=self.on_eyes_stop + tux.event.handler.register("tts_0_sound_state", self.on_sound_on) + tux.event.handler.register("left_led_state", self.on_left_blue_led_on) + tux.event.handler.register("right_led_state", self.on_right_blue_led_on) + tux.event.handler.register("mouth_remaining_movements", self.on_mouth_stop, (0, None)) + tux.event.handler.register("eyes_remaining_movements", self.on_eyes_stop, (0, None)) + tux.event.handler.register("all", self.on_status) thread.start_new_thread(self.status_viewer_thread,()) - tux.daemon.auto_connect(True) - tux.tts.auto_connect(True) #-------------------------------------------------------------------------- # On window destroy @@ -130,46 +125,38 @@ #-------------------------------------------------------------------------- # On left blue led status is on #-------------------------------------------------------------------------- - def on_left_blue_led_on(self): + def on_left_blue_led_on(self, value, timeout): global toggled_by_event - toggled_by_event=True - self.get_widget("checkbutton1").set_active(True) - toggled_by_event=False + if value == SSV_ON: + toggled_by_event=True + self.get_widget("checkbutton1").set_active(True) + toggled_by_event=False + else: + toggled_by_event=True + self.get_widget("checkbutton1").set_active(False) + toggled_by_event=False #-------------------------------------------------------------------------- - # On left blue led status is off - #-------------------------------------------------------------------------- - def on_left_blue_led_off(self): - global toggled_by_event - toggled_by_event=True - self.get_widget("checkbutton1").set_active(False) - toggled_by_event=False - - #-------------------------------------------------------------------------- # On right blue led status is on #-------------------------------------------------------------------------- - def on_right_blue_led_on(self): + def on_right_blue_led_on(self, value, timeout): global toggled_by_event - toggled_by_event=True - self.get_widget("checkbutton2").set_active(True) - toggled_by_event=False + if value == SSV_ON: + toggled_by_event=True + self.get_widget("checkbutton2").set_active(True) + toggled_by_event=False + else: + toggled_by_event=True + self.get_widget("checkbutton2").set_active(False) + toggled_by_event=False #-------------------------------------------------------------------------- - # On right blue led status is off - #-------------------------------------------------------------------------- - def on_right_blue_led_off(self): - global toggled_by_event - toggled_by_event=True - self.get_widget("checkbutton2").set_active(False) - toggled_by_event=False - - #-------------------------------------------------------------------------- # On mouth stop #-------------------------------------------------------------------------- - def on_mouth_stop(self): + def on_mouth_stop(self, value, timeout): global toggled_by_event toggled_by_event=True - if tux.status.get_mouth_open_position()==0: + if tux.mouth.getPosition() == SSV_CLOSE: self.get_widget("radiobutton3").set_active(True) else: self.get_widget("radiobutton4").set_active(True) @@ -181,7 +168,7 @@ def on_eyes_stop(self): global toggled_by_event toggled_by_event=True - if tux.status.get_eyes_closed_position_switch()==1: + if tux.eyes.getPosition() == SSV_OPEN: self.get_widget("radiobutton1").set_active(True) else: self.get_widget("radiobutton2").set_active(True) @@ -190,16 +177,15 @@ #-------------------------------------------------------------------------- # Event on status #-------------------------------------------------------------------------- - def on_status(self,frame): + def on_status(self, name, value, delay): global status_list_st global status_list_changed - explicite_status=tux.explicit_status(frame) - if explicite_status.find("RF connected->") != 0: - status_list_changed=True - status_list_st.append(explicite_status) - if len(status_list_st)==50: - for i in range(1): - status_list_st.pop(0) + explicite_status=name + ' = ' + value + status_list_changed=True + status_list_st.append(explicite_status) + if len(status_list_st)==50: + for i in range(1): + status_list_st.pop(0) #-------------------------------------------------------------------------- # Status viewer refreshing thread @@ -227,48 +213,28 @@ else: string=status_list_st[len(status_list_st)-1]+"\n" statusview_b.insert(startiter,string) - if tux.daemon.connected!=last_tuxdaemon_connect: - last_tuxdaemon_connect=tux.daemon.connected - if tux.daemon.connected: - onpause=False - onplay=False - global toggled_by_event - toggled_by_event=True - global soundcard - tux.hw.alsa_devices_select(0) - soundcard = tux.hw.alsa_device - self.get_widget("togglebutton3").set_active(False) - toggled_by_event=False + + if tux.server.getConnected() != last_tuxdaemon_connect: + last_tuxdaemon_connect = tux.server.getConnected() + print last_tuxdaemon_connect + + if tux.server.getConnected(): self.get_widget("image2").set_from_stock(gtk.STOCK_APPLY\ ,gtk.ICON_SIZE_BUTTON) - self.on_mouth_stop() - self.on_eyes_stop() - tux.cmd.leds_blink(2,1) else: self.get_widget("image2").set_from_stock(gtk.STOCK_CANCEL\ ,gtk.ICON_SIZE_BUTTON) - tux.status.rf_connected = False - if tux.tts.connected!=last_tuxttsdaemon_connect: - last_tuxttsdaemon_connect=tux.tts.connected - if tux.tts.connected: - self.get_widget("image3").set_from_stock(gtk.STOCK_APPLY\ - ,gtk.ICON_SIZE_BUTTON) - else: - self.get_widget("image3").set_from_stock(gtk.STOCK_CANCEL\ - ,gtk.ICON_SIZE_BUTTON) - if tux.status.rf_state()!=last_rf_state: - last_rf_state = tux.status.rf_connected + + if tux.radio.getConnected()!=last_rf_state: + last_rf_state = tux.radio.getConnected() if last_rf_state: self.get_widget("image4").set_from_stock(gtk.STOCK_APPLY\ ,gtk.ICON_SIZE_BUTTON) else: self.get_widget("image4").set_from_stock(gtk.STOCK_CANCEL\ ,gtk.ICON_SIZE_BUTTON) - if voice_list_changed: - voice_list_changed = False - self.update_voice_list() - tux.sys.wait(0.5) + time.sleep(0.5) # ----------------------------------------------------------------------------- # Tab "main" events # ----------------------------------------------------------------------------- @@ -280,9 +246,9 @@ global toggled_by_event if toggled_by_event: return if widget.get_active(): - tux.cmd.ledl_on() + tux.led.left.on() else: - tux.cmd.ledl_off() + tux.led.left.off() #-------------------------------------------------------------------------- # On right led checkbox toggled @@ -291,9 +257,9 @@ global toggled_by_event if toggled_by_event: return if widget.get_active(): - tux.cmd.ledr_on() + tux.led.right.on() else: - tux.cmd.ledr_off() + tux.led.right.off() #-------------------------------------------------------------------------- # On flash leds button clicked @@ -301,7 +267,8 @@ def on_flash_bt_clicked(self, widget, *args): def _funct(): num_sb=self.get_widget("spinbutton1") - tux.cmd.leds_blink(int(num_sb.get_value()),15) + # XXX New command with counter + tux.led.both.blinkAsync(SPV_NORMAL, 1.0) thread.start_new_thread(_funct,()) @@ -312,7 +279,7 @@ global toggled_by_event if toggled_by_event: return if widget.get_active(): - tux.cmd.eyes_open() + tux.eyes.open() #-------------------------------------------------------------------------- # On eyes close radiobutton toggled @@ -321,14 +288,14 @@ global toggled_by_event if toggled_by_event: return if widget.get_active(): - tux.cmd.eyes_close() + tux.eyes.close() #-------------------------------------------------------------------------- # On eyes blink button clicked #-------------------------------------------------------------------------- def on_eyes_blink_bt_clicked(self, widget, *args): num_sb=self.get_widget("spinbutton2") - tux.cmd.eyes_on_free(int(num_sb.get_value())) + tux.eyes.onAsync(int(num_sb.get_value()), SSV_NDEF) #-------------------------------------------------------------------------- # On beak open radiobutton toggled @@ -337,7 +304,7 @@ global toggled_by_event if toggled_by_event: return if widget.get_active(): - tux.cmd.mouth_open() + tux.mouth.open() #-------------------------------------------------------------------------- # On beak close radiobutton toggled @@ -346,14 +313,14 @@ global toggled_by_event if toggled_by_event: return if widget.get_active(): - tux.cmd.mouth_close() + tux.mouth.close() #-------------------------------------------------------------------------- # On beak talk button clicked #-------------------------------------------------------------------------- def on_beak_talk_bt_clicked(self, widget, *args): num_sb=self.get_widget("spinbutton3") - tux.cmd.mouth_on_free(int(num_sb.get_value())) + tux.mouth.onAsync(int(num_sb.get_value()), SSV_NDEF) #-------------------------------------------------------------------------- # On flippers up radiobutton toggled @@ -363,8 +330,7 @@ global toggled_by_event if toggled_by_event: return if widget.get_active(): - tux.cmd.raw(0x39,0,0,0) - tux.event.wait_status(DATAS_STATUS_WINGS_POSITION_COUNTER,0,5) + tux.flippers.up() thread.start_new_thread(_funct,()) @@ -376,8 +342,7 @@ global toggled_by_event if toggled_by_event: return if widget.get_active(): - tux.cmd.raw(0x3A,0,0,0) - tux.event.wait_status(DATAS_STATUS_WINGS_POSITION_COUNTER,0,5) + tux.flippers.down() thread.start_new_thread(_funct,()) @@ -386,7 +351,7 @@ #-------------------------------------------------------------------------- def on_flippers_flap_bt_clicked(self, widget, *args): num_sb=self.get_widget("spinbutton4") - tux.cmd.wings_on_free(int(num_sb.get_value())) + tux.flippers.onAsync(int(num_sb.get_value()), SSV_NDEF) #-------------------------------------------------------------------------- # On rotation button clicked @@ -394,9 +359,9 @@ def on_rotation_spin_bt_clicked(self, widget, *args): num_sb=self.get_widget("spinbutton5") if self.get_widget("radiobutton7").get_active(): - tux.cmd.spinl_on_free(int(num_sb.get_value())) + tux.spinning.leftOnAsync(int(num_sb.get_value()), SPV_VERYFAST) else: - tux.cmd.spinr_on_free(int(num_sb.get_value())) + tux.spinning.rightOnAsync(int(num_sb.get_value()), SPV_VERYFAST) #-------------------------------------------------------------------------- @@ -409,19 +374,22 @@ # On "Tux Droid shell" button clicked #-------------------------------------------------------------------------- def on_tdshell_bt_clicked(self, widget, *args): - tux.sys.shell_free(xterm_cmd) + print "FIXME :: tuxsh : not implemented" + #tux.sys.shell_free(xterm_cmd) #-------------------------------------------------------------------------- # On "Get light level" button clicked #-------------------------------------------------------------------------- def on_cversion_bt_clicked(self, widget, *args): - thread.start_new_thread(tux.status.get_light_level,()) + a, b = tux.status.requestOne('light_level') + return a #-------------------------------------------------------------------------- # On "Ping" button clicked #-------------------------------------------------------------------------- def on_ping_bt_clicked(self, widget, *args): - thread.start_new_thread(tux.cmd.ping,(200,)) + print "FIXME :: Ping : this function isn't implemented yet" + #thread.start_new_thread(tux.cmd.ping,(200,)) # ----------------------------------------------------------------------------- # Tab "TTS" events @@ -445,24 +413,19 @@ if toggled_by_event: return global onplay - if onplay: - tux.tts.stop() - else: - voice_cb=self.get_widget("comboboxentry1") - pitch_sb=self.get_widget("spinbutton6") - voice_id = voice_dic[voice_list[voice_cb.get_active()][0]] - current_voice = voice_list[voice_cb.get_active()][0] - tux.tts.select_voice(voice_id,pitch_sb.get_value()) - tux.tts.stop() - textedit=self.get_widget("textview2") - buffer=textedit.get_buffer() - my_text=buffer.get_text(*buffer.get_bounds()) - tux.tts.speak_free(my_text) - + voice_cb=self.get_widget("comboboxentry1") + pitch_sb=self.get_widget("spinbutton6").get_value() + textedit=self.get_widget("textview2") + buffer=textedit.get_buffer() + my_text=buffer.get_text(*buffer.get_bounds()) + tux.tts.setPitch(int(pitch_sb)) + tux.tts.speakAsync(my_text) #-------------------------------------------------------------------------- # On "pause" button clicked #-------------------------------------------------------------------------- def on_tts_pause_bt_clicked(self, widget, *args): + print "FIXME : TTS pause : not implemented yet" + ''' global onpause if onpause: tux.tts.play() @@ -470,7 +433,7 @@ else: tux.tts.pause() onpause=True - + ''' #-------------------------------------------------------------------------- # On "Clear text" button clicked #-------------------------------------------------------------------------- @@ -482,28 +445,23 @@ #-------------------------------------------------------------------------- # On TTS sound on event #-------------------------------------------------------------------------- - def on_sound_on(self): + def on_sound_on(self, value, timeout): global onplay global toggled_by_event - toggled_by_event=True - self.get_widget("togglebutton3").set_active(True) - toggled_by_event=False - onplay=True - tux.cmd.mouth_open() + if value == "ON": + toggled_by_event=True + self.get_widget("togglebutton3").set_active(True) + toggled_by_event=False + onplay=True + tux.mouth.open() + else: + toggled_by_event=True + self.get_widget("togglebutton3").set_active(False) + toggled_by_event=False + onplay=False + tux.mouth.close() #-------------------------------------------------------------------------- - # On TTS sound off event - #-------------------------------------------------------------------------- - def on_sound_off(self): - global onplay - global toggled_by_event - toggled_by_event=True - self.get_widget("togglebutton3").set_active(False) - toggled_by_event=False - onplay=False - tux.cmd.mouth_close() - - #-------------------------------------------------------------------------- # On new authorized voices list event #-------------------------------------------------------------------------- def on_voice_list(self): @@ -515,10 +473,12 @@ # Update the voices list in the combobox #-------------------------------------------------------------------------- def update_voice_list(self): + pass + ''' global voice_list global voice_dic global current_voice - + voice_dic = {} voice_list.clear() for voice_id in tux.tts.authorized_voices_list: @@ -532,8 +492,8 @@ break else: self.get_widget("comboboxentry1").set_active(0) + ''' - # ----------------------------------------------------------------------------- # Tab "Audio" events # ----------------------------------------------------------------------------- @@ -551,14 +511,18 @@ # On "play" external wave file button clicked #-------------------------------------------------------------------------- def on_wave_external_play_bt_clicked(self, widget, *args): + print "FIXME :: play external : not implemented yet" + ''' if str(self.get_widget("filechooserbutton1").get_filename())=="None": return tux.sys.shell_free("aplay -D %s %s"% (soundcard, self.get_widget("filechooserbutton1").get_filename())) - + ''' #-------------------------------------------------------------------------- # On select original sounds #-------------------------------------------------------------------------- def on_incl_orig_toggled(self, widget, *args): + print "FIXME :: Original waves : not implemented yet" + ''' st_wav_paths = wavs.wav_paths if widget.get_active(): wavs.wav_paths=[] @@ -576,38 +540,50 @@ wavs.wav_paths=[] wavs.wav_sizes=[] self.refresh_wav_list() + ''' #-------------------------------------------------------------------------- # On select internal wave file event #-------------------------------------------------------------------------- def on_wave_internal_changed(self, widget, *args): + print "FIXME :: Internal waves : not implemented yet" + ''' filename=widget.get_filename() ext=len(filename)-filename.find(".wav") if ext != 4 : widget.unselect_filename(filename) + ''' #-------------------------------------------------------------------------- # On "add" button clicked #-------------------------------------------------------------------------- def on_wave_internal_add_bt_clicked(self, widget, *args): + print "FIXME :: Add sound : not implemented yet" + ''' if str(self.get_widget("filechooserbutton2").get_filename())=="None": return wavs.add_wav_path(self.get_widget("filechooserbutton2").get_filename()) self.refresh_wav_list() + ''' #-------------------------------------------------------------------------- # On "remove" button clicked #-------------------------------------------------------------------------- def on_wave_internal_remove_bt_clicked(self, widget, *args): + print "FIXME :: Remove sound : not implemented yet" + ''' index=int(self.get_widget("spinbutton8").get_value()) if index>len(wavs.wav_paths):return wavs.wav_sizes.pop(index-1) wavs.wav_paths.pop(index-1) self.refresh_wav_list() + ''' #-------------------------------------------------------------------------- # Refreshing wave list function #-------------------------------------------------------------------------- def refresh_wav_list(self): + print "FIXME :: Clear list : not implemented yet" + ''' wav_te=self.get_widget("textview3") wav_buffer=wav_te.get_buffer() wav_buffer.set_text("") @@ -616,26 +592,33 @@ filename=wavfile[wavfile.rfind('/')+1:] wav_buffer.insert(wav_buffer.get_end_iter(),"%.2d : %s\n" %(i,filename)) i=i+1 + ''' #-------------------------------------------------------------------------- # On "clear" internal wave file list button clicked #-------------------------------------------------------------------------- def on_wave_internal_clist_bt_clicked(self, widget, *args): + print "FIXME :: Internal sounds : not implemented yet" + ''' wavs.wav_sizes=[] wavs.wav_paths=[] self.get_widget("checkbutton4").set_active(False) self.refresh_wav_list() + ''' #-------------------------------------------------------------------------- # On "store" button clicked #-------------------------------------------------------------------------- def on_wave_internal_store_bt_clicked(self, widget, *args): - thread.start_new_thread(self.sound_storing,()) + print "FIXME :: Store waves : not implemented yet" + #thread.start_new_thread(self.sound_storing,()) #-------------------------------------------------------------------------- # Store sound function #-------------------------------------------------------------------------- def sound_storing(self): + print "FIXME :: Sound storing : not implemeted yet" + ''' if tux.status.rf_state() == 0: return if len(wavs.wav_sizes)==0: return wav_te=self.get_widget("textview3") @@ -663,90 +646,109 @@ wav_buffer.insert(wav_buffer.get_end_iter(), "Sound storing : Storage done.\n") tux.sys.wait(0.3) - + ''' #-------------------------------------------------------------------------- # On "play" flash sound button clicked #-------------------------------------------------------------------------- def on_wave_internal_play_bt_clicked(self, widget, *args): + print "FIXME :: Play internal wave %d : Not implemented yet" \ + %(self.get_widget("spinbutton7").get_value()) + ''' def _funct(): index=self.get_widget("spinbutton7").get_value() tux.cmd.sound_play(int(index),0) thread.start_new_thread(_funct,()) - + ''' #-------------------------------------------------------------------------- # On "play flash sound number 1" button clicked #-------------------------------------------------------------------------- def on_wave_internal_play1_clicked(self, widget, *args): - thread.start_new_thread(tux.cmd.sound_play,(1,0,)) + pass + #thread.start_new_thread(tux.cmd.sound_play,(1,0,)) #-------------------------------------------------------------------------- # On "play flash sound number 2" button clicked #-------------------------------------------------------------------------- def on_wave_internal_play2_clicked(self, widget, *args): - thread.start_new_thread(tux.cmd.sound_play,(2,0,)) + pass + #thread.start_new_thread(tux.cmd.sound_play,(2,0,)) #-------------------------------------------------------------------------- # On "play flash sound number 3" button clicked #-------------------------------------------------------------------------- def on_wave_internal_play3_clicked(self, widget, *args): - thread.start_new_thread(tux.cmd.sound_play,(3,0,)) + pass + #thread.start_new_thread(tux.cmd.sound_play,(3,0,)) #-------------------------------------------------------------------------- # On "play flash sound number 4" button clicked #-------------------------------------------------------------------------- def on_wave_internat_play4_clicked(self, widget, *args): - thread.start_new_thread(tux.cmd.sound_play,(4,0,)) + pass + #thread.start_new_thread(tux.cmd.sound_play,(4,0,)) #-------------------------------------------------------------------------- # On "play flash sound number 5" button clicked #-------------------------------------------------------------------------- def on_wave_internal_play5_clicked(self, widget, *args): - thread.start_new_thread(tux.cmd.sound_play,(5,0,)) + pass + #thread.start_new_thread(tux.cmd.sound_play,(5,0,)) #-------------------------------------------------------------------------- # On "play flash sound number 6" button clicked #-------------------------------------------------------------------------- def on_wave_internal_play6_clicked(self, widget, *args): - thread.start_new_thread(tux.cmd.sound_play,(6,0,)) + pass + #thread.start_new_thread(tux.cmd.sound_play,(6,0,)) #-------------------------------------------------------------------------- # On "play flash sound number 7" button clicked #-------------------------------------------------------------------------- def on_wave_internal_play7_clicked(self, widget, *args): - thread.start_new_thread(tux.cmd.sound_play,(7,0,)) + pass + #thread.start_new_thread(tux.cmd.sound_play,(7,0,)) #-------------------------------------------------------------------------- # On "play flash sound number 8" button clicked #-------------------------------------------------------------------------- def on_wave_internal_play8_clicked(self, widget, *args): - thread.start_new_thread(tux.cmd.sound_play,(8,0,)) + pass + #thread.start_new_thread(tux.cmd.sound_play,(8,0,)) #-------------------------------------------------------------------------- # On "play flash sound number 9" button clicked #-------------------------------------------------------------------------- def on_wave_internal_play9_clicked(self, widget, *args): - thread.start_new_thread(tux.cmd.sound_play,(9,0,)) + pass + #thread.start_new_thread(tux.cmd.sound_play,(9,0,)) #-------------------------------------------------------------------------- # On "play flash sound number 10" button clicked #-------------------------------------------------------------------------- def on_wave_internal_play10_clicked(self, widget, *args): - thread.start_new_thread(tux.cmd.sound_play,(10,0,)) + pass + #thread.start_new_thread(tux.cmd.sound_play,(10,0,)) #-------------------------------------------------------------------------- # On "Play recorded wave file" button clicked #-------------------------------------------------------------------------- def on_mic_play_bt_clicked(self, widget, *args): - tux.sys.shell_free("aplay -D %s rec.wav"%soundcard) + print "FIXME :: Play recorded sound : not implemented yet" + #tux.sys.shell_free("aplay -D %s rec.wav"%soundcard) #-------------------------------------------------------------------------- # On "Record wave file" button clicked #-------------------------------------------------------------------------- def on_mic_record_bt_clicked(self, widget, *args): - tux.cmd.mouth_open() + print "FIXME :: Record : Not implemented yet" + ''' + tux.mouth.open() + #tux.cmd.mouth_open() tux.sys.shell("arecord -D %s -d 10 -t wav rec.wav"%soundcard) - tux.cmd.mouth_close() + tux.mouth.close() + #tux.cmd.mouth_close() + ''' #============================================================================== # Send command window class @@ -789,8 +791,9 @@ commandp[i]=int(commands[i][2:],16) else: commandp[i]=int(commands[i]) - tux.cmd.raw(int(commandp[0]),int(commandp[1]),int(commandp[2]), - int(commandp[3])) + print "FIXME :: Raw command : This function isn't implemented yet" + #tux.cmd.raw(int(commandp[0]),int(commandp[1]),int(commandp[2]), + #int(commandp[3])) #------------------------------------------------------------------------------ |
From: Paul_R <c2m...@c2...> - 2008-06-09 06:44:28
|
Author: Paul_R Date: 2008-06-09 08:44:33 +0200 (Mon, 09 Jun 2008) New Revision: 1220 Removed: firmware/dfu-programmer/trunk/src/tux_misc.c firmware/dfu-programmer/trunk/src/tux_misc.h Log: * Removed unused module. tux_misc was added for the compatibility with windows, but isn't necessary. Deleted: firmware/dfu-programmer/trunk/src/tux_misc.c =================================================================== --- firmware/dfu-programmer/trunk/src/tux_misc.c 2008-06-06 12:18:03 UTC (rev 1219) +++ firmware/dfu-programmer/trunk/src/tux_misc.c 2008-06-09 06:44:33 UTC (rev 1220) @@ -1,211 +0,0 @@ -/* - * Tux Droid - Misc - * Copyright (C) 2008 C2ME Sa - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA - * 02111-1307, USA. - */ - -#include <stdio.h> -#include <string.h> - -#include "tux_misc.h" - -#ifdef WIN32 -# include <time.h> -# include <windows.h> -#else -# include <sys/time.h> -#endif - -#ifdef WIN32 -#if defined(_MSC_VER) || defined(_MSC_EXTENSIONS) -# define DELTA_EPOCH_IN_MICROSECS 11644473600000000Ui64 -#else -# define DELTA_EPOCH_IN_MICROSECS 11644473600000000ULL -#endif - -struct timezone -{ - int tz_minuteswest; /* minutes W of Greenwich */ - int tz_dsttime; /* type of dst correction */ -}; - -/** - * - */ -static int -gettimeofday(struct timeval *tv, struct timezone *tz) -{ - FILETIME ft; - unsigned __int64 tmpres = 0; - static int tzflag; - - if (NULL != tv) - { - GetSystemTimeAsFileTime(&ft); - - tmpres |= ft.dwHighDateTime; - tmpres <<= 32; - tmpres |= ft.dwLowDateTime; - - /*converting file time to unix epoch*/ - tmpres -= DELTA_EPOCH_IN_MICROSECS; - tmpres /= 10; /*convert into microseconds*/ - tv->tv_sec = (long)(tmpres / 1000000UL); - tv->tv_usec = (long)(tmpres % 1000000UL); - } - - if (NULL != tz) - { - if (!tzflag) - { - _tzset(); - tzflag++; - } - tz->tz_minuteswest = _timezone / 60; - tz->tz_dsttime = _daylight; - } - - return 0; -} -#endif /* WIN32 */ - -/** - * - */ -LIBEXPORT double -get_time(void) -{ - double result; - struct timeval tv; - struct timezone tz; - - gettimeofday(&tv, &tz); - result = ((double)tv.tv_usec / 1000000) + (double)tv.tv_sec; - - return result; -} - -LIBLOCAL bool -str_to_uint8(const char *str, unsigned char *dest) -{ - int r, val; - - r = sscanf(str, "%d", &val); - - if (r == 1) - { - if ((val >= 0) && (val <= 255)) - { - *dest = val; - return true; - } - } - - return false; -} - -LIBLOCAL bool -str_to_int8(const char *str, char *dest) -{ - int r, val; - - r = sscanf(str, "%d", &val); - - if (r == 1) - { - if ((val >= -128) && (val <= 127)) - { - *dest = val; - return true; - } - } - - return false; -} - -LIBLOCAL bool -str_to_int(const char *str, int *dest) -{ - int r, val; - - r = sscanf(str, "%d", &val); - - if (r == 1) - { - *dest = val; - return true; - } - - return false; -} - -LIBLOCAL bool -str_to_bool(const char *str, bool *dest) -{ - if (!strcmp(str, "True")) - { - *dest = true; - return true; - } - else - { - if (!strcmp(str, "False")) - { - *dest = false; - return true; - } - } - - return false; -} - -LIBLOCAL bool -str_to_float(const char *str, float *dest) -{ - int r; - float val; - - r = sscanf(str, "%f", &val); - - if (r == 1) - { - *dest = val; - return true; - } - - return false; -} - -LIBLOCAL bool -hex_to_uint8(const char *str, unsigned char *dest) -{ - int r; - int val; - - r = sscanf(str, "0x%2x", &val); - - if (r == 1) - { - if ((val >= 0) && (val <= 255)) - { - *dest = val; - return true; - } - } - - return false; -} Deleted: firmware/dfu-programmer/trunk/src/tux_misc.h =================================================================== --- firmware/dfu-programmer/trunk/src/tux_misc.h 2008-06-06 12:18:03 UTC (rev 1219) +++ firmware/dfu-programmer/trunk/src/tux_misc.h 2008-06-09 06:44:33 UTC (rev 1220) @@ -1,57 +0,0 @@ -/* - * Tux Droid - Misc - * Copyright (C) 2008 C2ME Sa - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA - * 02111-1307, USA. - */ - -#ifndef _TUX_MISC_H_ -#define _TUX_MISC_H_ - -#include <stdbool.h> -#include <stdint.h> - -#define FW_MAIN_LOOP_DELAY 0.004 - -#define TUX_VID 0x03eb // Atmel VID -#define TUX_PID 0xFF07 // Tux PID - -#ifdef WIN32 -# include <windows.h> -# include <mmsystem.h> -# define sleep(sec) Sleep(sec * 1000) -# define usleep(usec) Sleep(usec / 1000) -# define LIBEXPORT __declspec(dllexport) -# define LIBLOCAL -#else -# define LIBEXPORT __attribute__ ((visibility ("default"))) -# define LIBLOCAL __attribute__ ((visibility ("hidden"))) -#endif - - -/** - * Callback function prototype for simple event - */ -typedef void(*simple_callback_t)(void); - -extern double get_time(void); -extern bool str_to_uint8(const char *str, unsigned char *dest); -extern bool str_to_int8(const char *str, char *dest); -extern bool str_to_int(const char *str, int *dest); -extern bool str_to_bool(const char *str, bool *dest); -extern bool str_to_float(const char *str, float *dest); -extern bool hex_to_uint8(const char *str, unsigned char *dest); -#endif /* _TUX_MISC_H_ */ |
From: remi <c2m...@c2...> - 2008-06-06 12:18:02
|
Author: remi Date: 2008-06-06 14:18:03 +0200 (Fri, 06 Jun 2008) New Revision: 1219 Modified: software_suite_v2/middleware/tuxdriver/trunk/src/tux_cmd_parser.c Log: * removed a printf Modified: software_suite_v2/middleware/tuxdriver/trunk/src/tux_cmd_parser.c =================================================================== --- software_suite_v2/middleware/tuxdriver/trunk/src/tux_cmd_parser.c 2008-06-05 08:45:07 UTC (rev 1218) +++ software_suite_v2/middleware/tuxdriver/trunk/src/tux_cmd_parser.c 2008-06-06 12:18:03 UTC (rev 1219) @@ -1010,8 +1010,6 @@ int i, j; bool have_parent = true; - printf("Cleaning sys commands"); - /* For all sys commands */ for (i = 0; i < NRCMDS; i++) { |
From: Paul_R <c2m...@c2...> - 2008-06-05 08:45:01
|
Author: Paul_R Date: 2008-06-05 10:45:07 +0200 (Thu, 05 Jun 2008) New Revision: 1218 Modified: firmware/tuxup/trunk/main.c Log: * Added a sleep delay for windows when fuxusb is updated. Modified: firmware/tuxup/trunk/main.c =================================================================== --- firmware/tuxup/trunk/main.c 2008-06-05 08:38:07 UTC (rev 1217) +++ firmware/tuxup/trunk/main.c 2008-06-05 08:45:07 UTC (rev 1218) @@ -450,6 +450,11 @@ { tux_hid_write(5, send_data); sleep(1); +#ifdef WIN32 + /* Windows needs more time than linux to enumerate the new dfu + * device */ + sleep(4); +#endif } #ifndef WIN32 else |
From: Paul_R <c2m...@c2...> - 2008-06-05 08:38:08
|
Author: Paul_R Date: 2008-06-05 10:38:07 +0200 (Thu, 05 Jun 2008) New Revision: 1217 Added: firmware/dfu-programmer/ firmware/dfu-programmer/branches/ firmware/dfu-programmer/tags/ firmware/dfu-programmer/trunk/ firmware/dfu-programmer/trunk/AUTHORS firmware/dfu-programmer/trunk/COPYING firmware/dfu-programmer/trunk/ChangeLog firmware/dfu-programmer/trunk/Makefile firmware/dfu-programmer/trunk/NEWS firmware/dfu-programmer/trunk/README firmware/dfu-programmer/trunk/libs/ firmware/dfu-programmer/trunk/libs/libusb.lib firmware/dfu-programmer/trunk/src/ firmware/dfu-programmer/trunk/src/arguments.c firmware/dfu-programmer/trunk/src/arguments.h firmware/dfu-programmer/trunk/src/atmel.c firmware/dfu-programmer/trunk/src/atmel.h firmware/dfu-programmer/trunk/src/commands.c firmware/dfu-programmer/trunk/src/commands.h firmware/dfu-programmer/trunk/src/config.h firmware/dfu-programmer/trunk/src/dfu.c firmware/dfu-programmer/trunk/src/dfu.h firmware/dfu-programmer/trunk/src/intel_hex.c firmware/dfu-programmer/trunk/src/intel_hex.h firmware/dfu-programmer/trunk/src/main.c firmware/dfu-programmer/trunk/src/tux_misc.c firmware/dfu-programmer/trunk/src/tux_misc.h firmware/dfu-programmer/trunk/src/usb.h firmware/dfu-programmer/trunk/src/util.c firmware/dfu-programmer/trunk/src/util.h Log: * Added dfu-programmer for windows. This is an adapted version of dfu-programmer for linux created by Weston Schmidt. (http://dfu-programmer.sourceforge.net/). The base is the version 0.4.4 for Linux. To compile it, you have to install MinGWStudio. Main changes made on the originals sources : - Created a specific Makefile for windows - Changed all #include <usb.h> by #include "usb.h". The libusb library has been added on the project. - Added set_configuration before claiming the interface. - Fixed some compatibility issues with errno.h Tested on Windows Vista 32 Added: firmware/dfu-programmer/trunk/AUTHORS =================================================================== --- firmware/dfu-programmer/trunk/AUTHORS (rev 0) +++ firmware/dfu-programmer/trunk/AUTHORS 2008-06-05 08:38:07 UTC (rev 1217) @@ -0,0 +1,21 @@ +Original Author: + - Weston Schmidt <wes...@al...> + +Contributors: + - Reinhard Arlt + - at89c5131 chip support + - Anton Blad + - at90usb162 and at90usb82 chip support + - David Brownell + - compiler flag improvements + - command line argument processing improvements + - debugging system improvements + - significant man page improvements + - support for the at90usb series AVR chips + - the beginnings of the move over to using stdint.h + - Nick Hibma + - bug fixes + - Markus Schneider + - OS X porting issues + - Geoffrey Wossum + - added reset command Added: firmware/dfu-programmer/trunk/COPYING =================================================================== --- firmware/dfu-programmer/trunk/COPYING (rev 0) +++ firmware/dfu-programmer/trunk/COPYING 2008-06-05 08:38:07 UTC (rev 1217) @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + 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 of the License, 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + <signature of Ty Coon>, 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. Added: firmware/dfu-programmer/trunk/ChangeLog =================================================================== --- firmware/dfu-programmer/trunk/ChangeLog (rev 0) +++ firmware/dfu-programmer/trunk/ChangeLog 2008-06-05 08:38:07 UTC (rev 1217) @@ -0,0 +1,344 @@ +2007-11-19 Weston Schmidt <weston_schmidt AT alumni.purdue.edu> + + * docs/dfu-programmer.1, src/arguments.c, src/arguments.h, + src/commands.c, AUTHORS: Applied the patch that Geoffrey + Wossum provided to add a reset command. + * fedora/*: Adding udev rules for and permissions so that + the console owner will automatically be able to flash + any of the devices supported by dfu-programmer. + * dfu-programmer.spec.in, Makefile.am, configure.ac: + Moved the spec file into the fedora specific + directory and excluded from the tar dist. + * configure.ac: Incremented the release number + * NEWS: Updated the latest news about the 0.4.4 release + +2007-08-15 Weston Schmidt <weston_schmidt AT alumni.purdue.edu> + + * dfu-programmer.spec.in: Updating the license tag. + +2007-08-12 Weston Schmidt <weston_schmidt AT alumni.purdue.edu> + + * AUTHORS: added Anton Blad (for new devices) and Nick Hibma + (for bug fixes) to the list of contributors. + * configure.ac: Incremented the release number + * docs/dfu-programmer.1: Added at90usb162 and at90usb82 + devices + * dfu-programmer.spec.in: Added the newly supported chips + * NEWS: Updated the latest news about the 0.4.3 release + * src/arguments.c, src/arguments.h: Applied the patch that + Anton Blad provided to add support for the at90usb162 + and at90usb82. + +2007-07-22 Weston Schmidt <weston_schmidt AT alumni.purdue.edu> + + * src/atmel.c: Fix the incorrect status to string conversion + that Nick Hibma found and pointed out. + * dfu-programmer.spec.in: Updating the file to be compliant + with the Fedora requirements for packaging (again) + +2007-07-07 Weston Schmidt <weston_schmidt AT alumni.purdue.edu> + + * configure.ac: Incremented the release number + * NEWS: Updated the latest news about the 0.4.2 release + * dfu-programmer.spec.in: Updating the file to be compliant + with the Fedora requirements for packaging + +2007-04-29 Weston Schmidt <weston_schmidt AT alumni.purdue.edu> + + * configure.ac: Incremented the release number + * NEWS: Updated the latest news about the 0.4.1 release + +2007-04-25 Weston Schmidt <weston_schmidt AT alumni.purdue.edu> + + * docs/dfu-programmer.1: Added a KNOWN ISSUES section, + updated the BUGS section, and corrected the Free + Software Foundation address. + * src/arguments.c: Adjusted the memory sizes for the at90 + series of chips so they can take advantage of the entire + amount of flash memory. + * src/atmel.c, src/atmel.h: Add the concept and support for + paged flash memory. I added this so that only devices + that actually go into paged memory will try to make calls + to the memory paging routine. I also did a bit of cleanup + to allow a clean transition between the pages (so there + are not regions of memory being flashed that overlap a + flash memory page boundary). + +2007-03-28 Weston Schmidt <weston_schmidt AT alumni.purdue.edu> + + * m4/depcomp, m4/missing, src/dfu.c, src/intel_hex.c, + src/commands.c, src/atmel.c, src/util.h, src/dfu.h, + src/intel_hex.h, src/main.c, src/arguments.c, + src/commands.h, src/atmel.h, src/arguments.h, + src/util.c, COPYING: Updated the FSF address in the + GPL license. + +2007-01-27 Weston Schmidt <weston_schmidt AT alumni.purdue.edu> + + * configure.ac: Incremented the release number + * NEWS: Updated the latest news about the 0.4.0 release + * src/arguments.c, src/arguments.h: add two fields to the + chip configuration structures to handle the two + inconsistencies in the dfu firmware - the at90 chips + need to be aborted initially, and the at90 chips don't + return valid interface class and subclass information. + Originally, the interface problem was thought to be + related to OS X, but it now looks like it is the chipset. + * src/dfu.c, src/dfu.h, src/main.c: add the handing of + the new initial abort and interface class/subclass workarounds. + +2007-01-16 Weston Schmidt <weston_schmidt AT alumni.purdue.edu> + + * src/intel_hex.c: change the sscanf() parameter to an int + from a char to be compliant with the sscanf() %x documentation + stating that the output of %x is an int. + +2007-01-14 Weston Schmidt <weston_schmidt AT alumni.purdue.edu> + + * src/arguments.c: added the flash_page_size data and values + to the data structure. I checked to make sure that the + flash page size is correct for all of the processors. + * src/arguments.h: added the flash_page_size data member to + the programmer_arguments data structure. + * src/atmel.c: updated the atmel_flash() functionality so that + only the memory pages that need to be flashed are flashed. + * src/atmel.h: updated the external interface for atmel_flash() + to refelect the changes in src/atmel.c + * src/commands.c: changed the passing of the argument structure + to be a pointer instead of the actual full structure. + Updated the execute_flash() functionality to support the + changes made in src/atmel.x. + * src/commands.h: updated the function prototype. + * src/intel_hex.c: changed the processing of the hex strutures + to allow the support of only flashing the memory locations + that are actually programmed. + * src/intel_hex.h: updated the function prototypes. + * src/main.c: pass the pointer to the argument structure instead + of passing the entire structure. + +2007-01-07 Weston Schmidt <weston_schmidt AT alumni.purdue.edu> + + * AUTHORS: added Markus Schneider for his OS X contributions + * configure.ac: changed AC_CONFIG_HEADER to AM_CONFIG_HEADER + to allow easier compiling on OS X. + * src/dfu.c: added a workaround for OS X because it was + not finding devices since the DFU interface information + is not being correctly reported. + +2007-01-06 Weston Schmidt <weston_schmidt AT alumni.purdue.edu> + + * config.h.in: added the autogenerated information from + autoheader. + * configure.ac: added checking for errno.h stdarg.h and + stddef.h to be more thorough in checking for required + headers. + * src/dfu.c: added an #ifdef around the EREMOTEIO case + * src/intel_hex.c: refactored intel_read_data() to not + use getline(), but to simply walk the file via fgets() + and fgetc(). As it turns out, getline() wasn't really + adding much value. + +2006-11-28 Weston Schmidt <weston_schmidt AT alumni.purdue.edu> + + * src/atmel.c: remove the dfu_make_idle() calls + * src/dfu.c: large changes to allow the dfu module to + discover and acquire the usb device. This change was + required to allow the dfu module to try to transition + a USB device from its runtime mode into its DFU mode. + Part of this transition requires resetting, re-enumerating, + and re-acquiring the device. All of this was not possible + before because the main function held onto the device + and it's handle. Additionally, when acquiring the device + for the first time, the dfu module tries to put the device + into the correct state, instead of punting this process + to the later steps, when it is impossible to recover from. + Finally, the variables named "device" were changed to be + "handle" since that's what they really are and there are + references to the actual "device" structure in dfu.c now. + * src/dfu.h: updated the prototypes to reflect the changes in + dfu.c. + * src/main.c: remove the dfu_make_idle() calls and simplify + the main function since most of the work is now being done + in dfu.c. Additionally, move the device discovery to dfu.c + +2006-11-19 Weston Schmidt <weston_schmidt AT alumni.purdue.edu> + + * src/atmel.c: Added the dfu_make_idle() call before + operations that communicate with the device being flashed. + This should make the communications more reliable as it + puts the device in a known state. Additionally, I added + some better error messages in the hopes that it will be + easier to diagnose the problem when commands to the + device fail. Finally, I adjusted the return code checking + for dfu_get_statue() to reflect the new interface of 0 for + success or < 0 for errors. + * src/commands.c: I fixed a poor error message. + * src/dfu.c: I updated the dfu_get_status() function to simply + return 0 on a success, or < 0 on an error. I added + dfu_make_idle() to allow the device to be put in a known + state or to force an early bailout. + * src/dfu.h: dfu_make_idle() is publically available. + +2006-11-19 Weston Schmidt <weston_schmidt AT alumni.purdue.edu> + + * src/dfu.c: Added a DFU status to string conversion method + and when debug is enabled, dfu_get_status() shows both the + string and the number for the status. + * src/dfu.h: the dfu_status_to_string() is made publically + available. + +2006-11-15 Weston Schmidt <weston_schmidt AT alumni.purdue.edu> + + * src/atmel.c: Remove the init function since it is no longer + needed. This re-works the debug message support so there is + a simple macro DEBUG() that takes care of all the work. + Additionally, this fixes an erasing problem where when the + entire chip was supposed to be erased, it was not. This + could cause problems because when the security bits are set, + they could never be unset. + * src/atmel.h: Remove the init function since it is no longer + needed. + * src/commands.c: This re-works the debug message support so + there is a simple macro DEBUG() that takes care of all the + work. + * src/dfu.c: This re-works the debug message support so there + is a simple macro DEBUG() that takes care of all the work. + Additionally, there is no reason to have the init function + since we are going to use the one external debug variable. + This normalized all of the functions so they produce useful + information when debug messages are enabled. Finally, this + adds an error number to message converter so that tracking + down errors is a bit easier. + * src/dfu.h: Remove the init & debug functions. + * src/main.c: Adjust the level needed to turn the libusb + debugging messages on. Removed the atmel_init() call. + * src/Makefile.am: Added util.c and util.h to be built. + * src/util.c: Added the dfu_debug() function in a common + location. + * src/util.h: Added the dfu_debug() function in a common + location. + +2006-10-21 Weston Schmidt <weston_schmidt AT alumni.purdue.edu> + + * dfu-programmer.spec.in: This resolves several of the problems + present in the spec file. The goal is to be able to make this + package part of the fedora extras. + * configure.ac: Incremented the release number + * NEWS: Updated the latest news about the 0.3.1 release + * docs/dfu-programmer.1: Update the SEE ALSO section, AUTHOR + section and added the copyright information. + +2006-06-24 Weston Schmidt <weston_schmidt AT alumni.purdue.edu> + + * dfu-programmer.spec.in: Update the supported chips + * NEWS: Updated the latest news about the 0.3.0 release + * src/arguments.c: Adjusted the 8051 based chip memory sizes to + be accurate, and the top memory address is calculated based off + of the memory size. + * src/arguments.h: Added top_memory_address to differentiate the + memory size and top memory address. This resolves my question + about the +1 offset. + * src/atmel.c: Fix a bug where the last byte of memory was not being + transferred from the device for validation purposes. + * src/commands.c: Updated to use memory_size and top_memory_address + depending on which value is needed, instead of using one value + to serve both purposes. + +2006-06-24 Weston Schmidt <weston_schmidt AT alumni.purdue.edu> + + * dfu-programmer.spec.in: Update the supported chips + * README: Added an instruction about building the source from CVS. + +2006-06-19 Weston Schmidt <weston_schmidt AT alumni.purdue.edu> + + * AUTHORS: Updated David Brownell's contributions - which makes + up almost this entire check-in! + * configure.ac: Incremented the release number + * NEWS: Updated the latest news about the 0.3.0 release + * src/arguments.c: Added the new targets, made the target names + case insensitive, added a version command line "command", updated + the mechanism for matching commands, and updated debugging output. + * src/arguments.h: Added new targets, and cleaned the arguments + structure up a bit. + * src/atmel.c: Applied general cleanup, matched the atmel.h + interfaces and added an AVR a configuration reading function. + * src/atmel.h: Updated the interface to allow for 8051 vs AVR + differences. This also starts the use of stdint.h values. + * src/commands.c: Updated to a more standard debugging system and + added command checking for 8051 vs AVR differences. There is + an open question about why we switch between args.memory_size + and args.memory_size+1 in comparisons. I need to re-read up + on why in the world I did args.memory_size+1 in the first + place, then follow up with David about implications around + the AVR chips. + * src/dfu.c: Updated to a more standard debugging system and + removed an overly verbose debug message. + * src/intel_hex.c: Added comments about the record types, and + added 20 bit address types for the larger amount of addressable + flash memory. + * src/main.c: Updated to a more standard debugging system, + updated the failure messages to include the package information. + * README: Updated description and list of supported chips + +2006-06-18 Weston Schmidt <weston_schmidt AT alumni.purdue.edu> + + * AUTHORS: Added David Brownell as a contributor. + * configure: Removed because it is generated by bootstrap.sh + * Makefile.in: Removed because it is generated + * docs/Makefile.in: Removed because it is generated + * src/Makefile.in: Removed because it is generated + * src/Makefile.am: Applied David Brownell's patch that adds -Wall + as a compiler option. + +2005-05-07 Weston Schmidt <weston_schmidt AT alumni.purdue.edu> + + * AUTHORS: Updated my email address + * configure.ac: Incremented the release number + * dfu-programmer.spec.in: Update the release to Fedora Core 5 + * NEWS: Updated the latest news about the 0.2.2 release + * src/main.c: Fix the failure cases so that if the USB interface was + not acquired then it is not errantly released. + +2005-11-21 Weston Schmidt <weston_schmidt AT alumni.purdue.edu> + + * configure.ac: Incremented the release number + * NEWS: Updated the latest news about the 0.2.1 release + +2005-11-21 Weston Schmidt <weston_schmidt AT alumni.purdue.edu> + + * docs/dfu-programmer.1: Bring the man page in-line with the + built in help, plus a bit more info. + +2005-11-21 Weston Schmidt <weston_schmidt AT alumni.purdue.edu> + + * src/main.c: Two minor fixes to allow it to work with newer 2.6.xx + kernels. The first had to do with using a function call to get + the buses to iterate over, and the second has to do with not + setting a configuration. Apparently this doesn't need to be done. + +2005-09-24 Weston Schmidt <weston_schmidt AT yahoo.com> + + * configure.ac: Incremented the release number + * NEWS: Updated the latest news about the 0.2.0 release + * src/commands.c: Removed the hard-coded restrictions on sizes and + instead malloc the space needed. Additionally the size is gotten + from the arguments data structure, so that adding future devices + should be easier. + * src/arguments.h: Added memory_size to the programmer_arguments + data structure. Restructured the targets_enum so that it can + be used as keys into the target_map data structure for target + to name resolution without needing to duplicate data. + * src/arguments.c: Made the changes needed to take advantage of the + memory size restructuring and changed the usage() function to + use iteration instead of duplication to display supported chips + +2005-09-24 Weston Schmidt <weston_schmidt AT yahoo.com> + + * src/{*.c,*.h}, AUTHORS: removed the copyright information from the + file so that the AUTHORS file can manage this information for the + entire project + +2005-09-24 Weston Schmidt <weston_schmidt AT yahoo.com> + + * src/{arguments.c,arguments.h,atmel.c,commands.c}: applied + Reinhard Arlt's patch that adds support for the at89c5131 chip Added: firmware/dfu-programmer/trunk/Makefile =================================================================== --- firmware/dfu-programmer/trunk/Makefile (rev 0) +++ firmware/dfu-programmer/trunk/Makefile 2008-06-05 08:38:07 UTC (rev 1217) @@ -0,0 +1,88 @@ +## General Flags +CC = "gcc.exe" +DEFS = -DWIN32 +C_INCLUDE_DIRS = -I"C:\bin\MinGWStudio\MinGW\include\ddk" +CFLAGS = -pipe -Wall -g2 -O0 +LIB_DIRS = -L"libs" +LIBS = -lwinmm -llibusb +SRC_DIR = src +TARGET = dfu-programmer + +## Libraries + +## Objects that must be built in order to link + +## Compile and link +SRC_OBJS = $(SRC_DIR)/main.o \ + $(SRC_DIR)/arguments.o \ + $(SRC_DIR)/atmel.o \ + $(SRC_DIR)/commands.o \ + $(SRC_DIR)/dfu.o \ + $(SRC_DIR)/intel_hex.o \ + $(SRC_DIR)/util.o + +define build_target +@echo Linking... +@$(CC) -o "$(TARGET)" $(SRC_OBJS) $(LIB_DIRS) $(LIBS) $(LDFLAGS) +endef + +define compile_source +@echo Compiling $< +@$(CC) $(CFLAGS) $(C_INCLUDE_DIRS) -c "$<" -o "$@" +endef + +.PHONY: print_header +$(TARGET): print_header $(SRC_OBJS) + $(build_target) + +print_header: + @echo Start compiling + +main.o: $(SRC_DIR)/main.c \ +$(SRC_DIR)/usb.h \ +$(SRC_DIR)/dfu.h \ +$(SRC_DIR)/atmel.h \ +$(SRC_DIR)/arguments.h \ +$(SRC_DIR)/commands.h + $(compile_source) + +arguments.o: $(SRC_DIR)/arguments.c \ +$(SRC_DIR)/usb.h \ +$(SRC_DIR)/arguments.h + $(compile_source) + +atmel.o: $(SRC_DIR)/atmel.c \ +$(SRC_DIR)/usb.h \ +$(SRC_DIR)/arguments.h \ +$(SRC_DIR)/dfu.h \ +$(SRC_DIR)/atmel.h \ +$(SRC_DIR)/util.h + $(compile_source) + +commands.o: $(SRC_DIR)/commands.c \ +$(SRC_DIR)/usb.h \ +$(SRC_DIR)/commands.h \ +$(SRC_DIR)/arguments.h \ +$(SRC_DIR)/intel_hex.h \ +$(SRC_DIR)/atmel.h \ +$(SRC_DIR)/util.h + $(compile_source) + +dfu.o: $(SRC_DIR)/dfu.c \ +$(SRC_DIR)/usb.h \ +$(SRC_DIR)/dfu.h \ +$(SRC_DIR)/util.h + $(compile_source) + +intel_hex.o: $(SRC_DIR)/intel_hex.c \ +$(SRC_DIR)/usb.h \ +$(SRC_DIR)/intel_hex.h + $(compile_source) + +util.o: $(SRC_DIR)/util.c \ +$(SRC_DIR)/util.h + $(compile_source) + +clean : + rm -f $(TARGET).exe $(SRC_OBJS) + Added: firmware/dfu-programmer/trunk/NEWS =================================================================== --- firmware/dfu-programmer/trunk/NEWS (rev 0) +++ firmware/dfu-programmer/trunk/NEWS 2008-06-05 08:38:07 UTC (rev 1217) @@ -0,0 +1,39 @@ +Release 0.4.4 +* Added new reset command +* Added out of the box permission changes to allow the console owner + to flash a device without needing to be root. +Release 0.4.3 +* Added support for the at90usb162 and at90usb82 chips. +* Applied path for incorrect status string conversion. +Release 0.4.2 +* Minor spec file changes to be Fedora compliant +Release 0.4.1 +* Added support for flashing both memory pages for the at90usb128x + chips. +* Updated the man page. +Release 0.4.0 +* Major set of fixes added for the at90xxx chips. +* Optimized the flashing algorithm that only flashes the blocks needed + based on the data being flashed, instead of flashing the entire chip + each time (potentially saves s good deal of time during development) +* The chip should be initialized better than before, increasing the + likelihood of a successful operation. +* Refined the code to allow OS X to compile and run dfu-programmer. +Release 0.3.1 +* Minor documentation changes and polishing of the spec file to get the + project inline with what is needed to be part of the fedora extras. +Release 0.3.0 +* Added support for (AVR) at90usb1287, at90usb1286, at90usb647, at90usb646 + chips. +* Fixes a minor validation bug where the last byte of flash was not being + correctly validated. +Release 0.2.2 +* Minor bug fix for a segmentation fault if only the usage is displayed. +Release 0.2.1 +* Minor bug fixes and documentation updates. +Release 0.2 +* Limited support for the at89c5132, at89c5131 and at89c5130 chip is added. + where the known limitations now have to do with P1_CF, P3_CF, P4_CF not + being supported (read or write). +Release 0.1 +* Initial release Added: firmware/dfu-programmer/trunk/README =================================================================== --- firmware/dfu-programmer/trunk/README (rev 0) +++ firmware/dfu-programmer/trunk/README 2008-06-05 08:38:07 UTC (rev 1217) @@ -0,0 +1,66 @@ +dfu-programmer is an implementation of the Device Firmware Upgrade class +USB driver that enables firmware upgrades for various USB enabled (with the +correct bootloader) Atmel chips. This program was created because the +Atmel "FLIP" program for flashing devices does not support flashing via USB +on Linux, and because standard DFU loaders do not work for Atmel's chips. + +Check out the Atmel website for more information. They are kind enough to +provide generally correct specifications this implementation is based on. + +The project website is http://dfu-programmer.sourceforge.net and you can +use that to check for updates. + +Currently Supported Chips +========================= +8051 based: + at89c51snd1c + at89c5130 + at89c5131 + at89c5132 + +AVR based: + at90usb1287 + at90usb1286 + at90usb647 + at90usb646 + +Simple install procedure +======================== + + % tar -xzf dfu-programmer-<version>.tar.gz # unpack the sources + % cd dfu-programmer # change to the top-level + # directory + + [ If the source was checked-out from CVS, run the following command ] + % ./bootstrap.sh # regenerate base config + # files + + % ./configure # regenerate configure and + # run it + + [ Optionally you can specify where dfu-programmer gets installed + using the --prefix= option to the ./configure command. See + % ./configure --help for more details. ] + + % make # build dfu-programmer + [ Become root if necessary ] + % make install # install dfu-programmer + +Building RPM Binary Packages +============================ +This section is intended to make it easier for those people that wish to +build RPMs from the source included in this package, but aren't sure how. + +1) Copy dfu-programmer-<version>.tar.gz to your RPM SOURCES directory. Usually + this is /usr/src/redhat/SOURCES/. + +2) Extract or copy dfu-programmer.spec into your RPM SPECS directory. Usually + this is /usr/src/redhat/SPECS/. + +3) In your RPM SPECS directory, issue the command 'rpm -ba dfu-programmer.spec'. + This will cause rpm to extract the dfu-programmer sources to a temporary + directory, build them, and build rpm packages based on the information in + the spec file. The binary rpms will be put into your RPM RPMS directory. + Usually this is /usr/src/redhat/RPMS/<platform>/. + +If you have any further questions, please refer to the RPM documentation. Added: firmware/dfu-programmer/trunk/libs/libusb.lib =================================================================== (Binary files differ) Property changes on: firmware/dfu-programmer/trunk/libs/libusb.lib ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: firmware/dfu-programmer/trunk/src/arguments.c =================================================================== --- firmware/dfu-programmer/trunk/src/arguments.c (rev 0) +++ firmware/dfu-programmer/trunk/src/arguments.c 2008-06-05 08:38:07 UTC (rev 1217) @@ -0,0 +1,498 @@ +/* + * dfu-programmer + * + * $Id: arguments.c 58 2007-11-20 01:24:54Z schmidtw $ + * + * 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 of the License, 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include <stdbool.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +#include "config.h" +#include "arguments.h" + +struct option_mapping_structure { + const char *name; + int value; +}; + +struct target_mapping_structure { + const char *name; + enum targets_enum value; + enum device_type_enum device_type; + unsigned short chip_id; + unsigned short vendor_id; + unsigned int memory_size; + unsigned short flash_page_size; + bool initial_abort; + bool honor_interfaceclass; +}; + +/* NOTE FOR: at90usb1287, at90usb1286, at90usb647, at90usb646, at90usb162, at90usb82 + * + * The actual size of the user-programmable section is limited by the + * space needed by the bootloader. The size of the bootloader is set + * by BOOTSZ0/BOOTSZ1 fuse bits; here we assume the factory default and + * maximum of 4K words. The window used for the bootloader is at the top + * of the of memory. + */ + +/* ----- target specific structures ----------------------------------------- */ +static struct target_mapping_structure target_map[] = { + { "at89c51snd1c", tar_at89c51snd1c, device_8051, 0x2FFF, 0x03eb, 0x10000, 128, false, true }, + { "at89c5130", tar_at89c5130, device_8051, 0x2FFD, 0x03eb, 0x04000, 128, false, true }, + { "at89c5131", tar_at89c5131, device_8051, 0x2FFD, 0x03eb, 0x08000, 128, false, true }, + { "at89c5132", tar_at89c5132, device_8051, 0x2FFF, 0x03eb, 0x10000, 128, false, true }, + { "at90usb1287", tar_at90usb1287, device_AVR, 0x2FFB, 0x03eb, 0x1E000, 128, true, false }, + { "at90usb1286", tar_at90usb1286, device_AVR, 0x2FFB, 0x03eb, 0x1E000, 128, true, false }, + { "at90usb647", tar_at90usb647, device_AVR, 0x2FFB, 0x03eb, 0x0E000, 128, true, false }, + { "at90usb646", tar_at90usb646, device_AVR, 0x2FFB, 0x03eb, 0x0E000, 128, true, false }, + { "at90usb162", tar_at90usb162, device_AVR, 0x2FFA, 0x03eb, 0x03000, 128, true, false }, + { "at90usb82", tar_at90usb82, device_AVR, 0x2FFA, 0x03eb, 0x01000, 128, true, false }, + { NULL } +}; + +/* ----- command specific structures ---------------------------------------- */ +static struct option_mapping_structure command_map[] = { + { "configure", com_configure }, + { "dump", com_dump }, + { "erase", com_erase }, + { "flash", com_flash }, + { "get", com_get }, + { "reset", com_reset }, + { "start", com_start_app }, + { "version", com_version }, + { NULL } +}; + +/* ----- configure specific structures -------------------------------------- */ +static struct option_mapping_structure configure_map[] = { + { "BSB", conf_BSB }, + { "SBV", conf_SBV }, + { "SSB", conf_SSB }, + { "EB", conf_EB }, + { "HSB", conf_HSB }, + { NULL } +}; + +/* ----- get specific structures -------------------------------------- */ +static struct option_mapping_structure get_map[] = { + { "bootloader-version", get_bootloader }, + { "ID1", get_ID1 }, + { "ID2", get_ID2 }, + { "BSB", get_BSB }, + { "SBV", get_SBV }, + { "SSB", get_SSB }, + { "EB", get_EB }, + { "manufacturer", get_manufacturer }, + { "family", get_family }, + { "product-name", get_product_name }, + { "product-revision", get_product_rev }, + { "HSB", get_HSB }, + { NULL } +}; + + +static void usage() +{ + struct target_mapping_structure *map = NULL; + + map = target_map; + + fprintf( stderr, PACKAGE_STRING "\n"); + fprintf( stderr, "Usage: dfu-programmer target command [command-options] " + "[global-options] [file|data]\n" ); + fprintf( stderr, "targets:\n" ); + while( 0 != *((int *) map) ) { + fprintf( stderr, " %s\n", map->name ); + map++; + } + fprintf( stderr, "global-options: --quiet, --debug level\n" ); + fprintf( stderr, "commands:\n" ); + fprintf( stderr, " configure {BSB|SBV|SSB|EB|HSB} " + "[--suppress-validation] [global-options] data\n" ); + fprintf( stderr, " dump " + "[global-options]\n" ); + fprintf( stderr, " erase " + "[--suppress-validation] [global-options]\n" ); + fprintf( stderr, " flash " + "[--suppress-validation] [global-options] file\n" ); + fprintf( stderr, " get {bootloader-version|ID1|ID2|BSB|SBV|SSB|EB|\n" + " manufacturer|family|product-name|\n" + " product-revision|HSB} " + "[global-options]\n" ); + fprintf( stderr, " reset [global-options]\n" ); + fprintf( stderr, " start [global-options]\n" ); + fprintf( stderr, " version [global-options]\n" ); +} + +static int assign_option( int *arg, + char *value, + struct option_mapping_structure *map ) +{ + while( 0 != *((int *) map) ) { + if( 0 == strcasecmp(value, map->name) ) { + *arg = map->value; + return 0; + } + + map++; + } + + return -1; +} + + +static int assign_target( struct programmer_arguments *args, + char *value, + struct target_mapping_structure *map ) +{ + while( 0 != *((int *) map) ) { + if( 0 == strcasecmp(value, map->name) ) { + args->target = map->value; + args->chip_id = map->chip_id; + args->vendor_id = map->vendor_id; + args->device_type = map->device_type; + args->memory_size = map->memory_size; + args->flash_page_size = map->flash_page_size; + args->initial_abort = map->initial_abort; + args->honor_interfaceclass = map->honor_interfaceclass; + args->top_memory_address = map->memory_size - 1; + switch( args->device_type ) { + case device_8051: + strncpy( args->device_type_string, "8051", + DEVICE_TYPE_STRING_MAX_LENGTH ); + break; + case device_AVR: + strncpy( args->device_type_string, "AVR", + DEVICE_TYPE_STRING_MAX_LENGTH ); + break; + } + return 0; + } + + map++; + } + + return -1; +} + + +static int assign_global_options( struct programmer_arguments *args, + int argc, + char **argv ) +{ + int i = 0; + + /* Find '--quiet' if it is here */ + for( i = 0; i < argc; i++ ) { + if( 0 == strcmp("--quiet", argv[i]) ) { + *argv[i] = '\0'; + args->quiet = 1; + break; + } + } + /* Find '--suppress-validation' if it is here - even though it is not + * used by all this is easier. */ + for( i = 0; i < argc; i++ ) { + if( 0 == strcmp("--suppress-validation", argv[i]) ) { + *argv[i] = '\0'; + + switch( args->command ) { + case com_configure: + args->com_configure_data.suppress_validation = 1; + break; + case com_erase: + args->com_erase_data.suppress_validation = 1; + break; + case com_flash: + args->com_flash_data.suppress_validation = 1; + break; + default: + /* not supported. */ + return -1; + } + + break; + } + } + + + /* Find '--debug' if it is here */ + for( i = 0; i < argc; i++ ) { + if( 0 == strncmp("--debug", argv[i], 7) ) { + + if( 0 == strncmp("--debug=", argv[i], 8) ) { + if( 1 != sscanf(argv[i], "--debug=%i", &debug) ) + return -2; + } else { + if( (i+1) >= argc ) + return -3; + + if( 1 != sscanf(argv[i+1], "%i", &debug) ) + return -4; + + *argv[i+1] = '\0'; + } + *argv[i] = '\0'; + break; + } + } + + return 0; +} + + +static int assign_com_configure_option( struct programmer_arguments *args, + int parameter, + char *value ) +{ + /* name & value */ + if( 0 == parameter ) { + /* name */ + if( 0 != assign_option((int *) &(args->com_configure_data.name), + value, configure_map) ) + { + return -1; + } + } else { + int temp = 0; + /* value */ + if( 1 != sscanf(value, "%i", &(temp)) ) + return -2; + + /* ensure the range is greater than 0 */ + if( temp < 0 ) + return -3; + + args->com_configure_data.value = temp; + } + + return 0; +} + + +static int assign_com_flash_option( struct programmer_arguments *args, + int parameter, + char *value ) +{ + /* file */ + args->com_flash_data.original_first_char = *value; + args->com_flash_data.file = value; + + return 0; +} + + +static int assign_com_get_option( struct programmer_arguments *args, + int parameter, + char *value ) +{ + /* name */ + if( 0 != assign_option((int *) &(args->com_get_data.name), + value, get_map) ) + { + return -1; + } + + return 0; +} + + +static int assign_command_options( struct programmer_arguments *args, + int argc, + char **argv ) +{ + int i = 0; + int param = 0; + int required_params = 0; + + /* Deal with all remaining command-specific arguments. */ + for( i = 0; i < argc; i++ ) { + if( '\0' == *argv[i] ) + continue; + + switch( args->command ) { + case com_configure: + required_params = 2; + if( 0 != assign_com_configure_option(args, param, argv[i]) ) + return -1; + break; + + case com_flash: + required_params = 1; + if( 0 != assign_com_flash_option(args, param, argv[i]) ) + return -3; + break; + + case com_get: + required_params = 1; + if( 0 != assign_com_get_option(args, param, argv[i]) ) + return -4; + break; + + default: + return -5; + } + + *argv[i] = '\0'; + param++; + } + + if( required_params != param ) + return -6; + + return 0; +} + + +static void print_args( struct programmer_arguments *args ) +{ + const char *command = "(unknown)"; + const char *target = "(unknown)"; + int i; + + for( i = 0; i < sizeof(target_map) / sizeof(target_map[0]); i++ ) { + if( args->target == target_map[i].value ) { + target = target_map[i].name; + break; + } + } + + for( i = 0; i < sizeof(command_map) / sizeof(command_map[0]); i++ ) { + if( args->command == command_map[i].value ) { + command = command_map[i].name; + break; + } + } + + printf( " target: %s\n", target ); + printf( " chip_id: 0x%04x\n", args->chip_id ); + printf( " vendor_id: 0x%04x\n", args->vendor_id ); + printf( " command: %s\n", command ); + printf( " quiet: %s\n", (0 == args->quiet) ? "false" : "true" ); + printf( " debug: %d\n", debug ); + printf( "device_type: %s\n", args->device_type_string ); + printf( "------ command specific below ------\n" ); + + switch( args->command ) { + case com_configure: + printf( " name: %d\n", args->com_configure_data.name ); + printf( " validate: %s\n", + (args->com_configure_data.suppress_validation) ? + "false" : "true" ); + printf( " value: %d\n", args->com_configure_data.value ); + break; + case com_erase: + printf( " validate: %s\n", + (args->com_erase_data.suppress_validation) ? + "false" : "true" ); + break; + case com_flash: + printf( " validate: %s\n", + (args->com_flash_data.suppress_validation) ? + "false" : "true" ); + printf( " hex file: %s\n", args->com_flash_data.file ); + break; + case com_get: + printf( " name: %d\n", args->com_get_data.name ); + break; + default: + break; + } + printf( "\n" ); + fflush( stdout ); +} + + +int parse_arguments( struct programmer_arguments *args, + int argc, + char **argv ) +{ + int i; + int status = 0; + + if( NULL == args ) + return -1; + + /* initialize the argument block to empty, known values */ + args->target = tar_none; + args->command = com_none; + args->quiet = 0; + + /* Make sure there are the minimum arguments */ + if( argc < 3 ) { + status = -2; + goto done; + } + + if( 0 != assign_target(args, argv[1], target_map) ) { + status = -3; + goto done; + } + + if( 0 != assign_option((int *) &(args->command), argv[2], command_map) ) { + status = -4; + goto done; + } + + /* These were taken care of above. */ + *argv[0] = '\0'; + *argv[1] = '\0'; + *argv[2] = '\0'; + + if( 0 != assign_global_options(args, argc, argv) ) { + status = -5; + goto done; + } + + if( 0 != assign_command_options(args, argc, ar... [truncated message content] |
From: Paul_R <c2m...@c2...> - 2008-06-04 12:04:09
|
Author: Paul_R Date: 2008-06-04 14:04:14 +0200 (Wed, 04 Jun 2008) New Revision: 1216 Modified: firmware/tuxup/trunk/bootloader.c firmware/tuxup/trunk/bootloader.h firmware/tuxup/trunk/main.c Log: * Solved bugs due of the windows compatibility Modified: firmware/tuxup/trunk/bootloader.c =================================================================== --- firmware/tuxup/trunk/bootloader.c 2008-06-04 10:09:03 UTC (rev 1215) +++ firmware/tuxup/trunk/bootloader.c 2008-06-04 12:04:14 UTC (rev 1216) @@ -286,7 +286,7 @@ int finishSegment(Parser_t * parser) { int i, idx = 0; - unsigned char data_buffer[36]; + unsigned char data_buffer[64]; int ret; /* Indicate that we completed a segment */ @@ -382,6 +382,7 @@ counter ++; #else ret = (wait_status(++counter, USB_TIMEOUT)); + ret = tux_hid_read(5, data_buffer); #endif } #ifndef WIN32 @@ -409,7 +410,6 @@ } else { - printf("%d\n", 0xF0); fprintf(stderr, "Bootloading failed, program aborted at dongle reply.\n"); exit(1); Modified: firmware/tuxup/trunk/bootloader.h =================================================================== --- firmware/tuxup/trunk/bootloader.h 2008-06-04 10:09:03 UTC (rev 1215) +++ firmware/tuxup/trunk/bootloader.h 2008-06-04 12:04:14 UTC (rev 1216) @@ -22,6 +22,9 @@ #ifndef bootloader_h #define bootloader_h #include <stdbool.h> +#ifndef WIN32 +#include "usb-connection.h" +#endif extern bool HID; #ifdef WIN32 int bootload(uint8_t cpu_address, uint8_t mem_type, const char *filename); Modified: firmware/tuxup/trunk/main.c =================================================================== --- firmware/tuxup/trunk/main.c 2008-06-04 10:09:03 UTC (rev 1215) +++ firmware/tuxup/trunk/main.c 2008-06-04 12:04:14 UTC (rev 1216) @@ -41,7 +41,10 @@ #endif #define countof(X) ( (size_t) ( sizeof(X)/sizeof*(X) ) ) +#ifdef WIN32 #define PATH_MAX 100 +#endif + /* Messages. */ #ifndef WIN32 static char const *msg_old_firmware = @@ -316,7 +319,7 @@ #ifdef WIN32 printf(" OK \n"); #else - printf("\033[2C[ \033[01;32mOK\033[00m ]\n"); + printf("\033[2C[ \033[01;32mOK\033[00m ]\n"); #endif return 0; } |
From: Paul_R <c2m...@c2...> - 2008-06-04 10:08:57
|
Author: Paul_R Date: 2008-06-04 12:09:03 +0200 (Wed, 04 Jun 2008) New Revision: 1215 Modified: firmware/fuxusb/trunk/fuxusb.Opt firmware/fuxusb/trunk/src/usb_commands.c Log: * Changed the bootloader acknowledge to fill completely the USB EP fifo. The reports are defined with a size of 64 bytes. With linux, I can send a report smaller than defined, but not with windows. Modified: firmware/fuxusb/trunk/fuxusb.Opt =================================================================== (Binary files differ) Modified: firmware/fuxusb/trunk/src/usb_commands.c =================================================================== --- firmware/fuxusb/trunk/src/usb_commands.c 2008-06-04 09:37:42 UTC (rev 1214) +++ firmware/fuxusb/trunk/src/usb_commands.c 2008-06-04 10:09:03 UTC (rev 1215) @@ -139,6 +139,7 @@ */ void bl_acknowledge(uint8_t ack, uint8_t p1, uint8_t p2, uint8_t p3) { + uint8_t i; Usb_select_ep(EP_CMD_IN); Usb_write_byte(BOOTLOADER_CMD); @@ -147,6 +148,11 @@ Usb_write_byte(p2); Usb_write_byte(p3); + for (i = 0; i < 59; i ++) + { + Usb_write_byte(0); + } + CMD_IN_Bank_Nb ++; send_status(); |
From: Paul_R <c2m...@c2...> - 2008-06-04 09:50:47
|
Author: Paul_R Date: 2008-06-04 11:37:42 +0200 (Wed, 04 Jun 2008) New Revision: 1214 Added: firmware/tuxup/trunk/tux_hid_win32.c firmware/tuxup/trunk/tux_hid_win32.h Modified: firmware/tuxup/trunk/Makefile firmware/tuxup/trunk/bootloader.c firmware/tuxup/trunk/bootloader.h firmware/tuxup/trunk/main.c Log: * Added the compatibility with windows. With Windows, only the HID version is considered. The code is a bit messy for now. I have to clean it up when I will have the time. To compile tuxup for Windows, you have to install MinGWStudio. All the binaries must be in the path. You need also the win api package, downloadable here : ftp://gd.tuwien.ac.at/gnu/mingw/ (w32api), and modify the makefile to specify the path of the w32api files. Modified: firmware/tuxup/trunk/Makefile =================================================================== --- firmware/tuxup/trunk/Makefile 2008-06-04 09:10:38 UTC (rev 1213) +++ firmware/tuxup/trunk/Makefile 2008-06-04 09:37:42 UTC (rev 1214) @@ -3,23 +3,74 @@ ##################################################### ## General Flags -CC = gcc +ifdef windir + CC = "gcc.exe" + DEFS = -DWIN32 + C_INCLUDE_DIRS = -I"C:\bin\MinGWStudio\MinGW\include\ddk" + CFLAGS = -pipe -Wall -funsigned-char -g2 -O0 + LIBS = -lwinmm -lhid -lsetupapi -lhidparse +else + CC = gcc + DEFS = + CFLAGS = -g -Wall $(DEFS) + LIBS = -lusb +endif TARGET = tuxup -CFLAGS = -g -Wall ## Libraries -LIB = -lusb ## Objects that must be built in order to link -FILES = main.c usb-connection.c bootloader.c tux_hid_unix.c tux_misc.c +FILES = main.c usb-connection.c bootloader.c tux_hid_win32.c tux_misc.c -## Build +## Compile and link +ifdef windir + SRC_OBJS = main.o bootloader.o tux_hid_win32.o tux_misc.o + +define build_target +@echo Linking... +@$(CC) -o "$(TARGET)" $(SRC_OBJS) $(LIB_DIRS) $(LIBS) $(LDFLAGS) +endef + +define compile_source +@echo Compiling $< +@$(CC) $(CFLAGS) $(C_PREPROC) $(C_INCLUDE_DIRS) -c "$<" -o "$@" +endef + +.PHONY: print_header +$(TARGET): print_header $(SRC_OBJS) + $(build_target) + +print_header: + @echo Start compiling + +main.o: main.c \ +tux-api.h \ +bootloader.h \ +version.h \ +tux_misc.h \ +tux_hid_win32.h + $(compile_source) + +bootloader.o: bootloader.c \ +tux_misc.h \ +tux_hid_win32.h \ +tux-api.h + $(compile_source) + +tux_hid_win32.o: tux_hid_win32.c \ +tux_hid_win32.h \ +tux_misc.h + $(compile_source) + +tux_misc.o: tux_misc.c \ +tux_misc.h + $(compile_source) + +else all: $(TARGET) - -## Compile and link tuxup: main.c bootloader.c bootloader.h usb-connection.c usb-connection.h tux_hid_unix.c tux_hid_unix.h tux_misc.c tux_misc.h tux-api.h version.h common/commands.h - ${CC} ${LIB} ${CFLAGS} -o tuxup main.c bootloader.c usb-connection.c \ - tux_hid_unix.c tux_misc.c - + ${CC} ${LIBS} ${CFLAGS} ${C_INCLUDE_DIRS} ${DEFS} -o tuxup \ + main.c bootloader.c usb-connection.c tux_hid_unix.c tux_misc.c +endif clean : -rm -f $(TARGET) *.o Modified: firmware/tuxup/trunk/bootloader.c =================================================================== --- firmware/tuxup/trunk/bootloader.c 2008-06-04 09:10:38 UTC (rev 1213) +++ firmware/tuxup/trunk/bootloader.c 2008-06-04 09:37:42 UTC (rev 1214) @@ -32,8 +32,14 @@ #include <stdlib.h> #include <time.h> #include <string.h> -#include "usb-connection.h" -#include "tux_hid_unix.h" +#ifdef WIN32 +# include "tux_misc.h" +# include "tux_hid_win32.h" +# include <windows.h> +#else +# include "usb-connection.h" +# include "tux_hid_unix.h" +#endif #include "tux-api.h" /* Whether to display verbose messages. */ @@ -62,7 +68,9 @@ #define BOOT_FILLPAGE 2 #define BOOT_EXIT 3 -static bool wait_status(uint8_t value, int timeout); +#ifndef WIN32 +static bool wait_status(char value, int timeout); +#endif static void compute_progress_bar(float line_nb); typedef uint32_t FILE_Addr_t; @@ -94,7 +102,9 @@ FILE_Addr_t currAddr; /* Current address in memory being processed */ uint8_t *segmentData; /* Complete segment data */ int segmentDataIdx; /* Index used for filling in the segment data */ +#ifndef WIN32 usb_dev_handle *dev_handle; /* USB device handle for sending parsed data */ +#endif } Parser_t; /** @@ -261,7 +271,7 @@ /** * Put one byte of data in the segmentData */ -static int fillSegment(Parser_t * parser, uint8_t data) +static int fillSegment(Parser_t * parser, unsigned char data) { parser->segmentData[parser->segmentDataIdx++] = data; parser->currAddr++; @@ -276,7 +286,7 @@ int finishSegment(Parser_t * parser) { int i, idx = 0; - uint8_t data_buffer[36]; + unsigned char data_buffer[36]; int ret; /* Indicate that we completed a segment */ @@ -310,10 +320,12 @@ { ret = tux_hid_write(36, data_buffer); } +#ifndef WIN32 else { ret = usb_send_commands(parser->dev_handle, data_buffer, 36); } +#endif #if (PRINT_DATA) printf("Status of the first packet sent: %d\n", ret); #endif @@ -338,10 +350,12 @@ { ret = tux_hid_write(34, data_buffer); } +#ifndef WIN32 else { ret = usb_send_commands(parser->dev_handle, data_buffer, 34); } +#endif #if (PRINT_DATA) printf("Status of the second packet sent: %d\n", ret); #endif @@ -363,14 +377,20 @@ */ if (HID) { +#ifdef WIN32 + ret = tux_hid_read(5, data_buffer); + counter ++; +#else ret = (wait_status(++counter, USB_TIMEOUT)); - tux_hid_read(5, data_buffer); +#endif } +#ifndef WIN32 else { ret = usb_get_commands(parser->dev_handle, data_buffer, 5); counter ++; } +#endif #if (PRINT_DATA) printf("Status of feedback from bootloader: %x\n", ret); #endif @@ -384,12 +404,14 @@ progress += step; } fflush (stdout); + sleep(0.05); return TRUE; } else { + printf("%d\n", 0xF0); fprintf(stderr, - "\nBootloading failed, program aborted at dongle reply.\n"); + "Bootloading failed, program aborted at dongle reply.\n"); exit(1); } } @@ -617,8 +639,11 @@ /** * Parses an intel hex file, calling the appropriate callbacks along the way */ - +#ifdef WIN32 +static int FILE_ParseFile(const char *fileName) +#else static int FILE_ParseFile(usb_dev_handle * dev_h, const char *fileName) +#endif { FILE *fs = NULL; Parser_t parser; @@ -631,7 +656,9 @@ parser.segLen = 0x40; /* XXX this is not a good way to pass the handle up to finishSegment, any better idea? */ +#ifndef WIN32 parser.dev_handle = dev_h; +#endif if ((parser.segmentData = malloc(parser.segLen + 2)) == NULL) { @@ -680,12 +707,15 @@ /** * Bootloads a CPU with the provided hex file */ - +#ifdef WIN32 +int bootload(uint8_t cpu_address, uint8_t mem_t, const char *filename) +#else int bootload(usb_dev_handle * dev_h, uint8_t cpu_address, uint8_t mem_t, const char *filename) +#endif { int rc = FALSE; - uint8_t data_buffer[5]; + unsigned char data_buffer[5]; uint8_t page_size = 64; /* XXX Should depend on CPU type */ uint8_t packet_total = 2; /* XXX should depend on CPU type */ int ret; @@ -694,10 +724,16 @@ /* Set global variable mem_type to the memory type */ mem_type = mem_t; +#ifndef WIN32 + /* For *nix system, display the memory type and prepare the progress bar. + * ex : FLASH [ ] + */ + /** \todo Find how works the escape sequences on windows */ if (mem_type == EEPROM) printf("EEPROM [\033[s\033[61C]\033[u\033[1B"); else printf("FLASH [\033[s\033[61C]\033[u\033[1B"); +#endif /* Bootloader initialization */ data_buffer[0] = LIBUSB_I2C_HEADER; data_buffer[1] = BOOT_INIT; @@ -714,11 +750,20 @@ ret = tux_hid_write(5, data_buffer); sleep(1); } +#ifndef WIN32 else { ret = usb_send_commands(dev_h, data_buffer, 5); } - +#endif +#ifdef WIN32 + tux_hid_read(5, data_buffer); + if (data_buffer[2] != BOOT_INIT_ACK) + { + fprintf(stderr, "\nInitialisazation failed \n"); + } + +#else if (HID) { if (!wait_status(BOOT_INIT_ACK, USB_TIMEOUT) || !ret) @@ -735,10 +780,17 @@ if (ret != 5) return FALSE; /* initialization failed */ } +#endif /* Bootloader: parse hex file and send data */ +#ifdef WIN32 + if (FILE_ParseFile(filename)) +#else if (FILE_ParseFile(dev_h, filename)) +#endif + { rc = TRUE; + } /* Exit bootloader */ data_buffer[0] = LIBUSB_I2C_HEADER; @@ -752,33 +804,44 @@ if (HID) { tux_hid_write(5, data_buffer); +#ifdef WIN32 + sleep(1); +#endif tux_hid_read(5, data_buffer); +#ifdef WIN32 + if (data_buffer[2] != BOOT_EXIT_ACK) +#else if (!wait_status(BOOT_EXIT_ACK, USB_TIMEOUT)) +#endif { fprintf(stderr, "\nBootloader exit failed \n"); return FALSE; } } +#ifndef WIN32 else { ret = usb_send_commands(dev_h, data_buffer, 5); ret = usb_get_commands(dev_h, data_buffer, 5); } +#endif return rc; } -/* - * Wait a specific ACK. + +/** + * \brief Wait a specific ACK. * This function wait for a specific value of the second parameter of the * bootloader ACK. */ -static bool wait_status(uint8_t value, int timeout) +#ifndef WIN32 +static bool wait_status(char value, int timeout) { - uint8_t data_buffer[5]; + unsigned char data_buffer[5]; uint8_t sttime = time(NULL); uint8_t edtime = 0; tux_hid_read(5, data_buffer); - while (data_buffer[2] != value || data_buffer[0] != 0xF0) + while ((data_buffer[2] != value) || (data_buffer[0] != 0xF0)) { edtime = time(NULL); if (difftime(edtime, sttime) > timeout) @@ -790,7 +853,15 @@ } return 1; } +#endif +/** + * \brief Compute the progress bar depending of the number of line in the file. + * One packet use 4 line. So, to know the number of packet to send, just divide + * the line number per 4. + * This progress bar display 60 "#" + * \todo Find a better way to now the number of packet. + */ static void compute_progress_bar(float line_nb) { line_nb = (line_nb / 4); Modified: firmware/tuxup/trunk/bootloader.h =================================================================== --- firmware/tuxup/trunk/bootloader.h 2008-06-04 09:10:38 UTC (rev 1213) +++ firmware/tuxup/trunk/bootloader.h 2008-06-04 09:37:42 UTC (rev 1214) @@ -23,8 +23,10 @@ #define bootloader_h #include <stdbool.h> extern bool HID; - +#ifdef WIN32 +int bootload(uint8_t cpu_address, uint8_t mem_type, const char *filename); +#else int bootload(usb_dev_handle * dev_h, uint8_t cpu_address, uint8_t mem_type, const char *filename); - #endif +#endif Modified: firmware/tuxup/trunk/main.c =================================================================== --- firmware/tuxup/trunk/main.c 2008-06-04 09:10:38 UTC (rev 1213) +++ firmware/tuxup/trunk/main.c 2008-06-04 09:37:42 UTC (rev 1214) @@ -26,19 +26,24 @@ #include <unistd.h> #include <time.h> #include <string.h> -#include <linux/limits.h> #include "tux-api.h" -#include "usb-connection.h" -#include "tux_hid_unix.h" #include "bootloader.h" #include "version.h" #include "common/defines.h" #include "tux_misc.h" - +#ifdef WIN32 +# include "tux_hid_win32.h" +# include <windows.h> +#else +# include "usb-connection.h" +# include "tux_hid_unix.h" +#endif #define countof(X) ( (size_t) ( sizeof(X)/sizeof*(X) ) ) +#define PATH_MAX 100 /* Messages. */ +#ifndef WIN32 static char const *msg_old_firmware = "\nERROR: Your dongle firmware is too old to support switching to bootloader" "\nmode automatically.\n" @@ -52,7 +57,7 @@ " you want to use).\n" "\nCheck http://www.tuxisalive.com/documentation/how-to/updating-the-firmware" "\nfor more details.\n"; - +#endif static char const *msg_dfu_programmer_not_installed = "\nERROR: dfu-programmer is not installed or is not in your path, tuxup uses" "\nit to reprogram the USB cpu so installing dfu-programmer is mandatory.\n"; @@ -73,8 +78,10 @@ static int pretend = 0; /* USB handle */ +#ifndef WIN32 static struct usb_device *device; static struct usb_dev_handle *dev_h; +#endif static int usb_connected = 0; /* Flag for usb connection status */ /* @@ -109,14 +116,16 @@ static void fux_connect(void) { +#ifndef WIN32 int wait = 5; - +#endif if (usb_connected) return; /* First, try to found a HID device */ if (!(tux_hid_capture(TUX_VID, TUX_PID))) { +#ifndef WIN32 /* Unable to capture the device : * Try with the libusb */ for (;;) @@ -140,6 +149,10 @@ /* The dongle is a libusb device */ HID = 0; } +#else + fprintf(stderr, "The dongle was not found, now exiting.\n"); + exit(1); +#endif } else { @@ -154,6 +167,7 @@ /* Check if we have the old firmware that requires entering * bootloader mode manually, exits with a message that explains what * to do in such a case. */ +#ifndef WIN32 if (!HID) { if (device->descriptor.bcdDevice < 0x030) @@ -169,6 +183,7 @@ exit(1); } } +#endif if (verbose) printf("Interface configured \n\n"); usb_connected = 1; @@ -184,11 +199,13 @@ { tux_hid_release(); } +#ifndef WIN32 else { usb_release_interface(dev_h, USB_COMMAND); usb_close(dev_h); } +#endif if (verbose) printf(" ... interface closed \n"); usb_connected = 0; @@ -290,14 +307,27 @@ if (pretend) return 0; - +#ifdef WIN32 + if (bootload(cpu_i2c_addr, FLASH, filename)) +#else if (bootload(dev_h, cpu_i2c_addr, FLASH, filename)) - { +#endif + { +#ifdef WIN32 + printf(" OK \n"); +#else printf("\033[2C[ \033[01;32mOK\033[00m ]\n"); +#endif return 0; } else + { +#ifdef WIN32 + printf(" FAIL \n"); +#else printf("\033[2C[\033[01;31mFAIL\033[00m]\n"); +#endif + } return 1; } @@ -328,21 +358,34 @@ if (pretend) return 0; - +#ifdef WIN32 + if (bootload(cpu_i2c_addr, EEPROM, filename)) +#else if (bootload(dev_h, cpu_i2c_addr, EEPROM, filename)) +#endif { +#ifdef WIN32 + printf("OK\n"); +#else printf("\033[2C[ \033[01;32mOK\033[00m ]\n"); +#endif return 0; } else + { +#ifdef WIN32 + printf("Fail \n"); +#else printf("\033[2C[\033[01;31mFAIL\033[00m]\n"); - return 1; +#endif + } + return 1; } static int prog_usb(char const *filename) { /* XXX include those as defines in commands.h */ - uint8_t send_data[5] = { 0x01, 0x01, 0x00, 0x00, 0xFF }; + unsigned char send_data[5] = { 0x01, 0x01, 0x00, 0x00, 0xFF }; char tmp_string[PATH_MAX]; int ret; version_bf_t version; @@ -405,6 +448,7 @@ tux_hid_write(5, send_data); sleep(1); } +#ifndef WIN32 else { ret = usb_send_commands(dev_h, send_data, 5); @@ -421,6 +465,7 @@ return 1; } } +#endif } ret = system("dfu-programmer at89c5130 erase"); if (ret) @@ -678,10 +723,12 @@ { tux_hid_write(5, send_data); } +#ifndef WIN32 else { ret = usb_send_commands(dev_h, send_data, 5); } +#endif fux_disconnect(); } Added: firmware/tuxup/trunk/tux_hid_win32.c =================================================================== --- firmware/tuxup/trunk/tux_hid_win32.c (rev 0) +++ firmware/tuxup/trunk/tux_hid_win32.c 2008-06-04 09:37:42 UTC (rev 1214) @@ -0,0 +1,224 @@ +/* + * Tux Droid - Hid interface (only for windows) + * Copyright (C) 2008 C2ME Sa + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + * 02111-1307, USA. + */ + +#ifdef WIN32 + +#include <windows.h> +#include <hidsdi.h> +#include <setupapi.h> +#include <dbt.h> +#include <stdbool.h> +#include <stdio.h> + +#include "tux_hid_win32.h" +#include "tux_misc.h" + +static char device_symbolic_name[256] = ""; +static HANDLE tux_device_hdl = NULL; +static COMMTIMEOUTS timeout; +/** + * \brief Open the device. + * \param vendor_id The vendor ID constant of the device. + * \param product_id The product ID of the device. + * This function search for a specified device and try to open the + * communication. + * \return True if the device has been correctly opened. + */ +bool LIBLOCAL +tux_hid_capture(int vendor_id, int product_id) +{ + GUID hid_guid; + HANDLE h_dev_info; + SP_DEVICE_INTERFACE_DATA dev_info_data; + PSP_DEVICE_INTERFACE_DETAIL_DATA detail_data = NULL; + int member_index = 0; + bool last_device = false; + long result; + unsigned long length = 0; + ULONG required; + HANDLE device_hdl = NULL; + HIDD_ATTRIBUTES attributes; + bool tux_found = false;; + + if (tux_device_hdl != NULL) + { + return false; + } + HidD_GetHidGuid(&hid_guid); + + h_dev_info = SetupDiGetClassDevs(&hid_guid, \ + NULL, NULL, DIGCF_PRESENT | DIGCF_INTERFACEDEVICE); + + dev_info_data.cbSize = sizeof(dev_info_data); + + member_index = 0; + + do + { + result = SetupDiEnumDeviceInterfaces(h_dev_info, 0, + &hid_guid, member_index, &dev_info_data); + + if (result != 0) + { + result = SetupDiGetDeviceInterfaceDetail(h_dev_info, + &dev_info_data, NULL, 0, &length, NULL); + + detail_data = (PSP_DEVICE_INTERFACE_DETAIL_DATA)malloc(length); + detail_data->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA); + + result = SetupDiGetDeviceInterfaceDetail(h_dev_info, + &dev_info_data, detail_data, length, &required, NULL); + + device_hdl = CreateFile(detail_data->DevicePath, 0, + FILE_SHARE_READ|FILE_SHARE_WRITE, (LPSECURITY_ATTRIBUTES)NULL, + OPEN_EXISTING, 0, NULL); + + attributes.Size = sizeof(attributes); + result = HidD_GetAttributes(device_hdl, &attributes); + + if ((attributes.VendorID == vendor_id) && + (attributes.ProductID == product_id)) + { + printf(device_symbolic_name, "%s", detail_data->DevicePath); + + CloseHandle(device_hdl); + + tux_device_hdl = CreateFile(detail_data->DevicePath, + GENERIC_WRITE|GENERIC_READ, + FILE_SHARE_READ|FILE_SHARE_WRITE, + (LPSECURITY_ATTRIBUTES)NULL, + OPEN_EXISTING, 0, NULL); + + timeout.ReadTotalTimeoutConstant = HID_RW_TIMEOUT; + timeout.WriteTotalTimeoutConstant = HID_RW_TIMEOUT; + SetCommTimeouts(tux_device_hdl, &timeout); + + tux_found = true; + + break; + } + + CloseHandle(device_hdl); + free(detail_data); + } + else + { + last_device = true; + } + + member_index++; + + } + while (last_device == false); + + if (tux_found) + { + return true; + } + else + { + return false; + } +} +/** + * \brief Release the actual device. + * This function close the device. + */ +void LIBLOCAL +tux_hid_release(void) +{ + if (tux_device_hdl != NULL) + { + CloseHandle(tux_device_hdl); + tux_device_hdl = NULL; + } +} + +/** + * \brief Write a frame on the USB bus. + * \param size The number of byte to write. + * \param buffer A pointer to a buffer containing the data. + * \return True if no error has been detected. + * Write a frame buffer on the USB device. + * For Tux, we don't use the report ID, so it's always null. + */ +bool LIBLOCAL +tux_hid_write(int size, const unsigned char *buffer) +{ + long wrt_count; + char report[65] = { [0 ... 64] = 0 }; + long result; + + if (tux_device_hdl == NULL) + { + return false; + } + + report[0] = 0; + memcpy(&report[1], buffer, size); + + result = WriteFile(tux_device_hdl, report, 65, &wrt_count, NULL); + + if (!result) + { + return false; + } + else + { + return true; + } +} + +/** + * \brief Read a byte on the USB bus. + * \param size The number of data to read. + * \param buffer Pointer to a buffer to write received data. + * \return True if no error has been detected. + * This function read 'size' bytes on the USB device. + * For Tux, we don't use the report ID, so the first byte of the received frame + * is always ignored. + * /!\ The report buffer size must be the same than the report of the device. + */ +bool LIBLOCAL +tux_hid_read(int size, unsigned char *buffer) +{ + long rd_count; + char report[65]; + long result; + + if (tux_device_hdl == NULL) + { + return false; + } + + result = ReadFile(tux_device_hdl, report, 65, &rd_count, NULL); + memcpy(buffer, &report[1], size); + + if (!result) + { + return false; + } + else + { + return true; + } +} + +#endif /* WIN32 */ Added: firmware/tuxup/trunk/tux_hid_win32.h =================================================================== --- firmware/tuxup/trunk/tux_hid_win32.h (rev 0) +++ firmware/tuxup/trunk/tux_hid_win32.h 2008-06-04 09:37:42 UTC (rev 1214) @@ -0,0 +1,34 @@ +/* + * Tux Droid - Hid interface (only for windows) + * Copyright (C) 2008 C2ME Sa + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + * 02111-1307, USA. + */ +#ifdef WIN32 + +#ifndef _TUX_HID_H_ +#define _TUX_HID_H_ + +#define HID_RW_TIMEOUT 1000 + +extern bool tux_hid_capture(int vendor_id, int product_id); +extern void tux_hid_release(void); +extern bool tux_hid_write(int size, const unsigned char *buffer); +extern bool tux_hid_read(int size, unsigned char *buffer); + +#endif /* _TUX_HID_H_ */ + +#endif /* WIN32 */ |
From: remi <c2m...@c2...> - 2008-06-04 09:10:40
|
Author: remi Date: 2008-06-04 11:10:38 +0200 (Wed, 04 Jun 2008) New Revision: 1213 Modified: software_suite_v2/middleware/tuxdriver/trunk/src/tux_hid_win32.c software_suite_v2/middleware/tuxdriver/trunk/src/tux_hid_win32.h Log: * Updated hid read and write from win32. Modified: software_suite_v2/middleware/tuxdriver/trunk/src/tux_hid_win32.c =================================================================== --- software_suite_v2/middleware/tuxdriver/trunk/src/tux_hid_win32.c 2008-06-03 07:36:58 UTC (rev 1212) +++ software_suite_v2/middleware/tuxdriver/trunk/src/tux_hid_win32.c 2008-06-04 09:10:38 UTC (rev 1213) @@ -148,9 +148,14 @@ tux_hid_write(int size, const char *buffer) { int wrt_count; - char report[65] = { [0 ... 64] = 0 }; + char report[REPORT_SIZE_OUT + 1] = { [0 ... REPORT_SIZE_OUT] = 0 }; long result; + if (size > REPORT_SIZE_OUT) + { + return false; + } + if (tux_device_hdl == NULL) { return false; @@ -159,7 +164,7 @@ report[0] = 0; memcpy(&report[1], buffer, size); - result = WriteFile(tux_device_hdl, report, 65, &wrt_count, + result = WriteFile(tux_device_hdl, report, REPORT_SIZE_OUT + 1, &wrt_count, NULL); if (!result) @@ -176,15 +181,20 @@ tux_hid_read(int size, char *buffer) { int rd_count; - char report[size + 1]; + char report[REPORT_SIZE_IN + 1]; long result; + if (size > REPORT_SIZE_IN) + { + return false; + } + if (tux_device_hdl == NULL) { return false; } - result = ReadFile(tux_device_hdl, report, size + 1, &rd_count, + result = ReadFile(tux_device_hdl, report, REPORT_SIZE_IN + 1, &rd_count, NULL); memcpy(buffer, &report[1], size); Modified: software_suite_v2/middleware/tuxdriver/trunk/src/tux_hid_win32.h =================================================================== --- software_suite_v2/middleware/tuxdriver/trunk/src/tux_hid_win32.h 2008-06-03 07:36:58 UTC (rev 1212) +++ software_suite_v2/middleware/tuxdriver/trunk/src/tux_hid_win32.h 2008-06-04 09:10:38 UTC (rev 1213) @@ -24,6 +24,8 @@ #define _TUX_HID_H_ #define HID_RW_TIMEOUT 1000 +#define REPORT_SIZE_IN 64 +#define REPORT_SIZE_OUT 64 extern bool tux_hid_capture(int vendor_id, int product_id); extern void tux_hid_release(void); |
From: remi <c2m...@c2...> - 2008-06-03 07:37:02
|
Author: remi Date: 2008-06-03 09:36:58 +0200 (Tue, 03 Jun 2008) New Revision: 1212 Modified: software_suite_v2/middleware/tuxdriver/trunk/src/tux_cmd_parser.c software_suite_v2/middleware/tuxdriver/trunk/src/tux_hid_win32.c Log: * Bug fix : memory leaked in hid capture (win32). * Updated the command stack size to 512. Modified: software_suite_v2/middleware/tuxdriver/trunk/src/tux_cmd_parser.c =================================================================== --- software_suite_v2/middleware/tuxdriver/trunk/src/tux_cmd_parser.c 2008-06-02 08:52:45 UTC (rev 1211) +++ software_suite_v2/middleware/tuxdriver/trunk/src/tux_cmd_parser.c 2008-06-03 07:36:58 UTC (rev 1212) @@ -41,7 +41,7 @@ #include "tux_user_inputs.h" #include "tux_wings.h" -#define NRCMDS 256 +#define NRCMDS 512 typedef struct { Modified: software_suite_v2/middleware/tuxdriver/trunk/src/tux_hid_win32.c =================================================================== --- software_suite_v2/middleware/tuxdriver/trunk/src/tux_hid_win32.c 2008-06-02 08:52:45 UTC (rev 1211) +++ software_suite_v2/middleware/tuxdriver/trunk/src/tux_hid_win32.c 2008-06-03 07:36:58 UTC (rev 1212) @@ -122,6 +122,8 @@ } while (last_device == false); + SetupDiDestroyDeviceInfoList(h_dev_info); + if (tux_found) { return true; |
From: remi <c2m...@c2...> - 2008-06-02 08:52:43
|
Author: remi Date: 2008-06-02 10:52:45 +0200 (Mon, 02 Jun 2008) New Revision: 1211 Removed: software_suite_v2/middleware/TuxHTTPRESTServer/ Log: Moved to : http://www.assembla.com/spaces/show/tuxdroid_collaborating |
From: Paul_R <c2m...@c2...> - 2008-06-02 06:54:47
|
Author: Paul_R Date: 2008-06-02 08:54:49 +0200 (Mon, 02 Jun 2008) New Revision: 1210 Modified: firmware/hex_dev/fuxusb.hex software_suite_v2/middleware/tuxdriver/trunk/firmware/fuxusb.hex Log: * Updated fuxusb.hex with the revision 1209 (tuxdriver -> HID ; hex_dev -> libusb) Modified: firmware/hex_dev/fuxusb.hex =================================================================== (Binary files differ) Modified: software_suite_v2/middleware/tuxdriver/trunk/firmware/fuxusb.hex =================================================================== --- software_suite_v2/middleware/tuxdriver/trunk/firmware/fuxusb.hex 2008-05-30 14:28:22 UTC (rev 1209) +++ software_suite_v2/middleware/tuxdriver/trunk/firmware/fuxusb.hex 2008-06-02 06:54:49 UTC (rev 1210) @@ -1,514 +1,501 @@ +:101600001217D2120006300905120F7B80F5121650 +:08161000C850F012026980EBE2 +:0C17D200438F01C281D2A3D2AF020E23CC +:0C17DE00C8040401C9000004CA00000097 +:060E23001218F943BC8027 +:100E290090011E1205E10000271043BC1090011E1D +:100E3900E0FCA3E0FDA3E0FEA3E0FFEC4D4E4F6014 +:100E490018EF24FFFFEE34FFFEED34FFFDEC34FF15 +:0C0E5900FC90011E1205D580D453BCEFA4 +:100E65007D80E4FF1218F2E4FF1217321216485380 +:080E7500F1FC43F101D2B322AC +:10000600E5BD30E5051217B88012E5BD30E40512EE +:1000160018A78008E5BD30E00312189EE5BD30E361 +:100026000E53BDF71214679000FCE0600214F01244 +:0D0036001375120D56E5F8600312116A22D1 +:0415940041010E0003 +:100E7D00E5CFF0A3E5CFF0A3E5CFF0A3E5CFF022CA +:100E8D0090010BE4F07412A3F090011074FFF0A325 +:100E9D002253CEFB43CE802290010BE4F0A32253CC +:100EAD00CEFD53CE7F22900110E0FBA3E0FAA3E02C +:100EBD00F92253CE7F53CEFB22F053CEFB43CE10FF +:080ECD0022E4F5CF43CE102210 +:10164800E4900114F0A3F0A3F090010EF090013A99 +:06165800F0900139F022C0 +:1011A9007D857F011218F27F011217327D817F023E +:1011B9001218F27F021217327D817F031218F27F13 +:1011C900031217327D877F041218F27F0412173237 +:0C11D9007D837F051218F27F050217329B +:06190700E4F5C702094FE0 +:10094F0090010FE5CFF090010DE5CFF090010FE092 +:10095F005460707390010DE024FEB40A005066904D +:10096F00097C75F003A4C58325F0C583730209CFF5 +:10097F000209D40209D40209A402099A0209D40275 +:10098F00099F0209A90209B90209CA12063E806F1E +:10099F0012153A806A121618806590010FE07005E3 +:1009AF001213A0805A121743805590010FE0B481A3 +:1009BF000512186C804912178E8044120DBF803FAC +:1009CF0012165E803A803290010FE05460642070FE +:1009DF002890010DE0247E600F1460111460132421 +:1009EF00037014121558801712157680121214F80E +:1009FF00800D1215198008800053CEFB1217525329 +:030A0F00CE7F2275 +:1016180090011EE5CFF053CEFB43BC0112181A907F +:07162800011EE04480F5C63D +:01162F002298 +:1013A000AFCF120EBFEFD39401501B90010EEFF0A0 +:1013B000B4010912141B12148D12188012181A127B +:0913C00011A943BC0222121752CC +:0113C9002201 +:100DBF0090011E120E7D120EBF900120E0B4031899 +:100DCF0090011EE0701290013AF0900139F07F040B +:100DDF001217327F05121732900120E0B4010C90E8 +:100DEF00011EE0B401057F81121732900120E0B49B +:100DFF00020C90011EE0B401057F02121732900120 +:100E0F0020E0B4050C90011EE0B401057F0312171A +:040E1F003202181A69 +:10063E00C20AAFCFAECFEE24FE601E14605424E289 +:10064E00603E14602924216003020759120E8D7436 +:10065E0000F0A37446F002076390010B7401F0746E +:10066E004B120E947401F0A3741EF0020763120E67 +:10067E00A57422120E957402F0A37447F00207635C +:10068E00120EA57409120E957401F0A374D5F00222 +:10069E000763EFB4090040030207599006B0F8282B +:1006AE0028730206CB0206D80206EA0206F70207F4 +:1006BE0009020726020715020737020748120E8D98 +:1006CE007400F0A37458F0020763120EA5740C1296 +:1006DE000E957400F0A3746AF0020763120E8D7407 +:1006EE0000F0A37476F0020763120EA5740C120EBE +:1006FE00957400F0A37488F0020763120E8D7400D7 +:10070E00F0A37494F0804E120EA5741E120E957402 +:10071E0000F0A374C8F0803D120EA57422120E953F +:10072E007400F0A374A6F0802C120EA5741A120E8B +:10073E00957400F0A374E6F0801B120EA5741E12C1 +:10074E000E957401F0A37400F0800A53CEFB1217BD +:10075E005253CE7F22E5CFE5CF90011FE5CFF0902B +:10076E00011EE5CFF090010BE0FEA3E0FF90011E0D +:10077E00E0FCA3E0FDD39FEC9E400CEF541F600203 +:10078E008001D3920A800890010BECF0A3EDF012D9 +:10079E000E9ED390010CE0942090010BE09400404B +:1007AE000B120EB37D201210E540E722120EB3900D +:1007BE00010BA3E0FD1210E55029300A0A120EB308 +:1007CE00E4FD1210E5501CE5CE54427005E5CE3026 +:1007DE00E2F5E5CE20E20CE5CE5442600653CE7F24 +:0307EE0053CEFDEA +:0107F10022E5 +:1010E500900120EDF01216ED900110EBF0A3EAF05F +:1010F500A3E9F0900120E0FFC390010CE09FF09080 +:10110500010BE09400F0E5CE54427005E5CE30E0E9 +:10111500F553CEFEE5CE5442600853CEEF53CEFDD7 +:04112500C322D322EC +:10153A00120E9E90010EE0F5CF43CE10E5CE30E0BC +:0E154A00FB53CEFEE5CE544260FA120EAC22E8 +:0A186C00120E9E12175253CE7F2277 +:100F2B00E5CFE5CFAFCF120E9E90010FE0247F608F +:100F3B000C14600E2402701975CF018014E4F5CFE8 +:100F4B00800FEF547F2413F582E43401F583E0F531 +:100F5B00CF120ECEE5CE30E0FBE5CE20E2F653CE3F +:0F0F6B00FEE5CE544260FAE5CE20E2F5120EAC60 +:010F7A002254 +:1010130090010FE07002803790010FE0B40102806D +:101023002E90010FE06402702CE5CF7028E5CFAF5E +:10103300CFEF247F701975C70143CE20E4F5C79025 +:10104300011404120EC6E5CE30E0FB53CEFE22534C +:06105300CEFB1217522231 +:100ED50090010FE07002804790010FE0B40102809D +:100EE5003E90010FE06402703CE5CF7038E5CFAF6E +:100EF500CFEF601F247F702775C70153CEDF7F01B9 +:100F0500121732E4F5C7900114120EC6E5CE30E093 +:100F1500FB8008120EC7E5CE30E0FB53CEFE225310 +:060F2500CEFB1217522260 +:1015580090011E120E7D120E9E120ECEE5CE30E0C8 +:0D156800FB53CEFEE5CE544260FA120EACED +:011575002253 +:1015760090011E120E7D120E9E120ECEE5CE30E0AA +:0D158600FB53CEFEE5CE544260FA120EACCF +:011593002235 +:1014F80090011E120E7D120E9E75CF0A43CE10E586 +:10150800CE30E0FB53CEFEE5CE544260FA120EAC6C +:0115180022B0 +:1015190090011E120E7D120E9E75CF0143CE10E56D +:10152900CE30E0FB53CEFEE5CE544260FA120EAC4B +:01153900228F +:0C17EA00900125120E7D120EBF02181A8D +:0C17F600900129120E7D120EBF02181A7D +:0C18020090012D120E7D120EBF02181A6C +:0C180E00900131120E7D120EBF02181A5C +:0F17430053CEFBE5CE544260FA53CEFD02181A86 +:0E178E00E5CF90010AE5CFF053CEFB02181A0A +:10165E00120E9E90010AE0F5CF12181AE5CE5442F2 +:06166E0060FA120EAC222E +:0F17520043CE20E5CE30E3FB53CEDF53CEF7225C +:0C181A0043CE10E5CE30E0FB53CEFE22A2 +:100046001201100100000020EB0307FF410001022E +:100056000301120309040000000000000000000074 +:10006600000000000C034B00790073006F0068006D +:100076001203540075007800440072006F00690096 +:1000860064000C03310030003000300031001203F0 +:10009600540075007800440072006F006900640027 +:1000A6002203540075007800440072006F00690056 +:1000B60064002D0053007000650061006B00650050 +:1000C60072001E03540075007800440072006F0031 +:1000D600690064002D004D006900630072006F0026 +:1000E6001A03540075007800440072006F0069001E +:1000F60064002D005400540053001E035400750084 +:100106007800440072006F00690064002D00410011 +:100116007500640069006F00090229010601048068 +:10012600320904000000010100080A24010001341C +:10013600000201020C240201010200010000000677 +:100146000C2402020101000100000500092403033A +:100156000101000106092403040103000205090444 +:100166000100000102000609040101010102000666 +:10017600072401030102000B2402010101080140CA +:100186001F00090581010800010000072501000084 +:100196000000090402000001020005090402010131 +:1001A60001020005072401020102000B24020101DD +:1001B600010801401F0009050201080001000007AF +:1001C60025010000000009040300020300000009E5 +:1001D60021100100012222000705840340000107C7 +:1001E6000505034000010904040000010100070998 +:1001F600240100011E0001050C2402070101000173 +:100206000000000709240308010300070709040585 +:1002160000000102000709040501010102000707A9 +:100226002401070102000B24020101010801401FFD +:100236000009050301080001000007250100000070 +:10024600000600FF0901A1010903150026FF00951C +:1002560040750881020904150026FF0095407508BF +:030266009102C042 +:06159800C106C107C105F8 +:10116A00E5F830E00BE4F5C7E5CE30E203121907E3 +:10117A00E5F830E10312179CE5F830E2031216890C +:10118A00E5F830E303121674E5F830E4031214B2FA +:0F119A00E5F830E509300006120C7512121E221E +:1016DB0090013AE0600B75C704E5CE20E40343CEDE +:0216EB001022CB +:0E13750090010EE0602412177F501F20051C0F +:1013830075C70190011E7408F01216B38FCF900138 +:0C1393001EE014F0E070F243CE10D20512 +:01139F00222B +:0E179C0075C701E5CE30E00553CEFEC2052232 +:1016740075C70330060B12193AEF60057F0812157F +:05168400B253CEFD226F +:1016890075C70220060B12193AEF60057F0812157B +:05169900B253CEFD225A +:10121E0075C705900139E0FF700CE5CE30E107533C +:10122E00CEFD7401F022EFB4010EE5CE30E6095387 +:10123E00CEBFE4900139F022E5CE30E60453CEBFA6 +:05124E002253CEFD2239 +:1014B20075C704E5CE30E01A53CEFE90013AE0142F +:1014C200F0E0C394005002E4F090013AE06003437C +:0314D200CE102217 +:1014D500EF24FFFFEE34FFFEED34FFFDEC34FFFC9F +:1014E5000205D5E0FCA3E0FDA3E0FEA3E0FFEC4D83 +:0314F5004E4F2235 +:100C750075C705E5CE5442606D12193AEF14900020 +:100C8500FBF0AFCFE490011EF09000FBE0FE900179 +:100C95001EE0FDC39E501574BB2DF582E43400F5AE +:100CA50083E5CFF090011EE004F080DDEF600A24BB +:100CB500FE6030047030020A12C200D203E49001D3 +:100CC5001EF090011EE0FF24BBF582E43400F5839D +:100CD500E0FE74182FF8A60690011EE004F0E0B4BB +:060CE50004E022120BF4F2 +:010CEB0022E6 +:100D560030076590013AE0C39402505C75C704E41D +:100D6600F5CF30A303FF80027F018FCF900116E0FD +:100D7600F5CFE51060071313543FFF80027F008F05 +:100D8600CFE4F517E517C3951050091218618FCFF8 +:100D9600051780F0851017E517C3943C5007E4F556 +:100DA600CF051780F212188090013AE004F012166F +:080DB600DBE4900116F0C20716 +:010DBE002212 +:1013F30075C70475CFF0EF60047F0080027F018F13 +:10140300CFAF058FCFAF038FCF900123E0F5CF9000 +:08141300013AE004F00216DBCF +:100A12009000BBE0B401209000BEE02403600F14FC +:100A2200600F14600F146003020AB2D2072202148C +:100A32001B0212530210599000BBE0B4020DA3E056 +:100A4200600614706BD20622C206229000BBE064DC +:100A520006705D1218809017DE120AB39017DF122B +:100A62000AB39017E0120ABA9017E1120ABA901765 +:100A7200E2120AC19017E3120AC19017E3E474016B +:100A820093FF1216309017E5120AC89017E6120A61 +:100A9200C89017E7E493FF1216309017E7E4740149 +:100AA20093FF1216309017E9E493FF121630D20723 +:100AB20022E493FF12163022E493FF12163022E44E +:0D0AC20093FF12163022E493FF121630222B +:0A125300E4F5A8F5B175C314C281DB +:10125D0090011F1205E10000271043BC1090011FE3 +:10126D001214E8600890011F1214D580F053BCEFE2 +:0A127D00D2B375A61E75A6E180FE2F +:10105900E4F5A8F5B175C314D2B3C281FD7F40127E +:0B106900131B7B017DF47F041215CDEA +:1010740090011F1205E10000271043BC1090011FCE +:101084001214E8600890011F1214D580F053BCEFCD +:0B1094001218E375A61E75A6E180FE91 +:09189E0053BDFE43BC40C281228F +:0D17B80053BCBF53BDFE53BDDF53BDF72230 +:0918A70053BDEF1216480218802F +:06159E00C181C104C1027D +:0A187600E490011BF090011AF0222B +:0E17AA00121876D201D291C202C204D20022DD +:10148D0053AFFE43C31043C30253C3F753C3FB43D0 +:10149D00C32043C340D2B2D2B4D291D288D2A812C3 +:0514AD001876D20022B8 +:0300030002192EB1 +:03192E00D20432AE +:1002690030B410C204E490011CF0121877C201C224 +:1002790091D202200203020487200403020487E4C6 +:1002890090011EF0C20490011BE0702C12177050EF +:100299000E900118300304740A80127402800E3023 +:1002A900030790011874088004E4900118F0F5C55B +:1002B90090011B7401F0805790011BE0B40119A350 +:1002C900E0B4110690011B7402F0900118E030E1CE +:1002D9003B12169E8FC5803790011BE0FF640270A8 +:1002E90027A3E0FEB4150F900118E030E302C20322 +:1002F90090011B7403F0900118E030E30974062E95 +:10030900F8E6F5C580098004EFB40303E4F5C59068 +:10031900011CE004F090011AE0FF7030AEC4BE8009 +:1003290003D38001C350F530A3030204879001175A +:10033900E5C5F0E5C590011930E7057422F08003A1 +:100349007411F090011A7401F0020475EF640170E0 +:100359004AAFC4BF8003D38001C350F530A3030261 +:100369000487900117E030E112D29090011CE0243B +:1003790097F582E43400F583E5C5F0900119E0248E +:1003890001FFE433FE90011CE06F7001EE6003028F +:10039900047590011A7402F002047590011AE06460 +:1003A900026003020475AFC4BF8003D38001C35048 +:1003B900F530A303020487900117E0F930E3579061 +:1003C9000119E0FF2405FDE433FC90011CE0FB7AF0 +:1003D90000D39DEC6480F87480985015C3EB9FFF9F +:1003E900EA9400FE741E2FF58274013EF583E5C57B +:1003F900F0900119E02406FFE433FE90011CE0B5FA +:100409000714E4B50610A3E5C5F0E0FF900116E076 +:10041900C39F5002EFF0900119E0FF2406FDE43379 +:10042900FC90011CE06D7001EC7041D200C202D257 +:1004390091D201E954826003121287900117E030CA +:10044900E33C900120E06036E490011FF090011F29 +:10045900E02420F582E43401F583E0FF12163090A0 +:10046900011FE004F0E0C3940440E22290011EE081 +:0E04790004F0300409E0C39405500302028D24 +:010487002252 +:0415A4004100FD0005 +:1012B90074BB2FF582E43400F583E0FF9000FEE073 +:1012C900FE04F0900104E0FCA3E02EF582E43CF575 +:1012D90083EFF090011FE004F022E4900123F0FB7A +:0112E90022E2 +:100BF4009000BBE0B40105120FCA803120090E1227 +:100C040012E37D01FF1213F31218CB80209000BB76 +:100C1400E0B4030F1218CB1212E37DFE7F0112130E +:100C2400F3800A9000BBE0B40203120ACF9000FFE5 +:100C3400E0FF900106E0FEB50725900109E0FD9074 +:100C440000FEE0B50519900108E02DF0900107E0E1 +:100C54003400F0E49000FEF0900106F0D20822EE99 +:100C6400C39F400C1212E37D05FF1213F31218CB3D +:010C7400225D +:100F7B009000FCE07048300845781E7C017D017BB9 +:100F8B00017A0179007E007F0612055890012474C6 +:100F9B0040F0121349900097E020E0F99000FC74A8 +:100FAB0014F0900097E0C413135401FF9000FDE080 +:0F0FBB0004FDF0E4900123F0FB1213F3C20822AF +:100ACF00900106E070779000BCE0900101F0A3E484 +:100ADF00F09000BDE0FF900102E02FF0900101E0E7 +:100AEF003400F09000FBE0B404028039900101E083 +:100AFF00FEA3E0FFEE547FFC900107E06C7003A3B0 +:100B0F00E06F6024EF64C07003EE641D601A900103 +:100B1F0001E0640E7004A3E064C0600C1212E37D68 +:100B2F0003FF1213F31218CB90011F7403F09001FF +:100B3F001FE0FFC39423501A1212B980F190011FC6 +:100B4F007401F090011FE0FFC3942150051212B9F8 +:080B5F0080F1900106E004F0B2 +:010B6700226B +:100FCA009000FC74FAF01216FF1214419000BCE073 +:100FDA0025E0900100F09000BDE0900109F090003A +:100FEA00BEE09000FFF0E4900107F0A3F09000FE4D +:100FFA00F0900106F09000FDF0D209C2A8900123FA +:09100A00F0FB7DFF7F010213F3EE +:0818CB00C20912141B0217AA46 +:1016FF0012191E1218EB9001047400F0A37403F07A +:01170F0022B7 +:10134900900097E054BFF090011EE0900098F09053 +:10135900011FE0FCA3E0FDEC900001F0A3EDF0908B +:0C1369000124E02402900096F0021761BD +:10109F0090008AE0FF04F0748B2FF582E43400F5A2 +:1010AF0083E595F022E0FF04F074012FF582E4341C +:1010BF0000F58322900096E0FF900000E0C39F228E +:1010CF00E0FBA3E0FAA3E0F9EA494B22A3E0FAA37D +:0610DF00E0F5828A832285 +:04191E00759380221B +:0718EB007593C043B1022216 +:0C182600900083EBF0A3EAF0A3E9F022AD +:0C183200900087EBF0A3EAF0A3E9F0229D +:0F176100900097E04401F0E4900000F00219229C +:0419220043932022A9 +:0B185600439310900097E054FEF02236 +:031931008F95226D +:0419260043930422C1 +:04192A005393FB22B6 +:03193400AF95224A +:03193700AF942248 +:030043000207F2BF +:1007F200C0E0C0F0C083C082C0D075D008AF94EF13 +:10080200120612093E00085708085710085F180818 +:100812007F20085F28087F30088938088F40087FCA +:1008220048088C50087C58089F60089F68089F7091 +:10083200089F7808B58008C78808B59008C7980847 +:10084200CEA008FAA808FAB00921B80889C0088918 +:10085200C8000009415393DF90009880081210C32A +:10086200500B1210B4E0FF1219310209411218564E +:10087200900097E04440F002094112109F900097C7 +:10088200E04402F002093E02093912109F900086EC +:10089200E014FF90008AE0C39F50278022900097C7 +:1008A200E04401F090008AE4F0900097E054FBF0FD +:1008B20002092F12109F90008AE0C394085003028D +:1008C200092F020934900097E04404F01218EB90CB +:1008D20000831210CF601890008AE0FF7B017A003B +:1008E200798BC00A9000831210DBD00A12063C906A +:1008F2000097E054FEF080479000871210CF601AF4 +:100902007B017A007901C00A9000871210DBD00ABD +:100912007F8212063C900096EFF0900000E4F09087 +:1009220000001210B4E0F5951210C35005121926FA +:10093200800D12192A80081218EB800312185653E0 +:0D09420093F7D0D0D082D083D0F0D0E03237 +:06190D00E4F514F51322BD +:0F177000C3E5139514D394204003D38001C32203 +:1015B2008F17C3E51395146440600FAF130513EF43 +:0A15C200543F2422F8A6CFD517E805 +:0115CC0022FC +:10169E00E514B513037F8022AF140514EF543F24D5 +:0516AE0022F8E6FF2216 +:06191300E4F516F51522B3 +:0F177F00C3E5159516D394204003D38001C322F0 +:101287008F17C3E515951664406026E517FDEFC374 +:101297009DFDE49400FC74992DF58274003CF58360 +:1012A700E0FEAD150515ED543F2462F8A606D517E7 +:0112B700D165 +:0112B8002213 +:1016B300E516B515037F8022AF160516EF543F24B8 +:0516C30062F8E6FF22C1 +:0215A800C10B75 +:0A188000E4F512F511F510C20B2279 +:10163000300B03121880AE10051074A22EF8A60706 +:08164000E510B43C02D20B22BC +:0B186100AF11051174A22FF8E6FF2262 :0215AA00C10C72 -:1013DD00438F01C281D2A3D2AF120E731200063019 -:1013ED000B05120FD980F520A307D20C12048F80A4 -:0D13FD00EB300C031214B0D201C20C80DFE3 -:0C184F00C8040401C9000004CA00000025 -:100E730090011612080B0000271012194E43BC8074 -:100E830043BC10900116E0FCA3E0FDA3E0FEA3E049 -:100E9300FFEC4D4E4F601E900116A3A3A3E024FF69 -:100EA300FFEE34FFFEED34FFFDEC34FFFC90011642 -:100EB3001207FF80CE53BCEF7D80E4FF121947E495 -:0F0EC300FF1217F91216A453F1FC43F101D2B339 -:010ED20022FD -:10000600E5BD30E5051218358012E5BD30E4051270 -:1000160018FC8008E5BD30E0031218F3E5BD30E3B7 -:100026000E53BDF7120F319000F0E0600214F0128B -:0D0036001436120E0AE5F860031211712253 -:10026C001201100100000020EB0307FF4100010206 -:10027C0003010C034B00790073006F00680012033C -:10028C00540075007800440072006F00690064002F -:10029C000C0331003000300030003100120309042F -:1002AC00000000000000000000000000000012032D -:1002BC00540075007800440072006F0069006400FF -:1002CC001E03540075007800440072006F00690032 -:1002DC0064002D004D006900630072006F00220362 -:1002EC00540075007800440072006F0069006400CF -:1002FC002D0053007000650061006B0065007200FA -:10030C001A03540075007800440072006F006900F5 -:10031C0064002D005400540053001E03540075005B -:10032C007800440072006F00690064002D004100E9 -:10033C007500640069006F00090229010601048040 -:10034C00320904000000010100080A2401000134F4 -:10035C00000201020C24020101020001000000064F -:10036C000C24020201010001000005000924030312 -:10037C00010100010609240304010300020509041C -:10038C00010000010200060904010101010200063E -:10039C00072401030102000B2402010101080140A2 -:1003AC001F0009058101080001000007250100005C -:1003BC000000090402000001020005090402010109 -:1003CC0001020005072401020102000B24020101B5 -:1003DC00010801401F000905020108000100000787 -:1003EC0025010000000009040300020300000009BD -:1003FC00211001000122220007058403400001079F -:10040C00050503400001090404000001010007096F -:10041C00240100011E0001050C240207010100014A -:10042C00000000070924030801030007070904055D -:10043C000000010200070904050101010200070781 -:10044C002401070102000B24020101010801401FD5 -:10045C000009050301080001000007250100000048 -:10046C00000600FF0901A1010903150026FF0095F4 -:10047C0040750881020904150026FF009540750897 -:03048C009102C01A -:0415AC004100FA0000 -:100DA100E5CFF0A3E5CFF0A3E5CFF0A3E5CFF022A7 -:100DB100900116E4F07412A3F09000FC74FFF0A30C -:100DC1002253CE7F53CEFB43CE102253CEFB43CED4 -:100DD100202253CEFB43CE8022900116E4F0A322C1 -:100DE10053CEFD53CE7F229000FCE0FBA3E0FAA39B -:100DF100E0F92253CEDF53CEF72253CEFEE5CE5497 -:090E01004222E4F5CF43CE102299 -:1016A400E4900100F0A3F0A3F09000FAF09001326E -:0616B400F0900131F0226C -:10122C007D857F011219477F011217F97D817F029D -:10123C001219477F021217F97D817F031219477F1C -:10124C00031217F97D877F041219477F041217F9CF -:0C125C007D837F051219477F050217F9FA -:06195C00E4F5C70209C515 -:1009C5009000FBE5CFF09000F9E5CFF09000FBE05B -:1009D50054606003020A5A9000F9E024FEB40A004C -:1009E50050699009F575F003A4C58325F0C5837397 -:1009F500020A4B020A50020A50020A1F020A130297 -:100A05000A50020A19020A25020A35020A4612008C -:100A150046020A9F121606020A9F1216BA020A9F7A -:100A25009000FBE07005120C52806F121675806AFB -:100A35009000FBE0B4810512177E805E12171080CE -:100A4500591217248054121624804F120DCCE5CE6E -:100A550030E3FB80429000FBE054606420703090EE -:100A650000F9E0247E600F146011146013240370F4 -:100A7500141215CA80241215E8801F121568801AF1 -:100A85001215898015120DCCE5CE30E3FB800812D6 -:0E0A95000DCCE5CE30E3FB120DF453CE7F22E4 -:1016BA00AFCF120DC543BC01E5CE30E0FB53CEFEE1 -:0516CA00EF4480F5C6AD -:0116CF0022F8 -:100C5200AFCF53CE7F53CEFBEFD39401504B9000D6 -:100C6200FAEFF06401704EC28190011612080B0077 -:100C7200007D00900116E0FCA3E0FDA3E0FEA3E0EE -:100C8200FFEC4D4E4F6018EF24FFFFEE34FFFEEDF8 -:100C920034FFFDEC34FFFC9001161207FF80D4D222 -:100CA200811214FC121977800C43CE20E5CE30E37A -:100CB200FB120DF42243CE10E5CE30E0FB53CEFE04 -:060CC20012122C43BC02DB -:010CC8002209 -:10172400900116120DA1120DC2E5CE30E0FB53CE8E -:01173400FEB6 -:011735002291 -:10004600C20DAFCFAECFEE24FE601E14605424E284 -:10005600603E14602924216003020171120DB174FF -:1000660002F0A3746CF00201889001167401F0741A -:100076004B120DB87403F0A37444F0020188120DFC -:10008600DA7422120DB97404F0A3746DF0020188BB -:10009600120DDA7409120DB97403F0A374FBF002A1 -:1000A6000188EFB4090040030201629000B8F82805 -:1000B60028730200D30200E00200F20200FF0201F0 -:1000C6001102012F02011E020140020151120DB15F -:1000D6007402F0A374A8F0020188120DDA740C12EF -:1000E6000DB97402F0A3747EF0020188120DB1748A -:1000F60002F0A3748AF0020188120DDA740C120D54 -:10010600B97402F0A3749CF0020188120DB1740256 -:10011600F0A374BAF0020188120DDA741E120DB93A -:100126007402F0A374CCF08059120DDA7422120D09 -:10013600B97402F0A374EAF08048120DDA741A1248 -:100146000DB97403F0A3740CF08037120DDA741E27 -:10015600120DB97403F0A37426F08026120DCCE5B7 -:10016600CE20E314E5CE20E2F6800D120DCCE5CECE -:1001760020E305E5CE20E2F653CEF753CEDF53CE8D -:100186007F22E5CFE5CF900119E5CFF0900118E584 -:10019600CFF0900116E0FEA3E0FFA3E0FCA3E0FD94 -:1001A600D39FEC9E400DEF541F7004D20D800CC2FD -:1001B6000D8008900116ECF0A3EDF0120DD3D3904C -:1001C6000117E09420900116E094004028120DE8F3 -:1001D6007D2012025D900117E024E0F0900116E008 -:1001E60034FFF0E5CE54427005E5CE30E0F5120D51 -:1001F600FB60CB8040120DE8900116A3E0FD1202D1 -:100206005DE4900116F0A3F0E5CE54427005E5CE0C -:1002160030E0F5120DFB6002801B300D1D120DE85B -:10022600E4FD1217B4E5CE54427005E5CE30E0F594 -:10023600120DFB600553CEEF8019E5CE54427005D2 -:10024600E5CE30E2F5E5CE20E20CE5CE544260067E -:0602560053CE7F53CEFDE4 -:10025C00221217B49000FCEBF0A3EAF0A3E9F02211 -:1015CA00900116120DA1120DD3120E03E5CE30E0D2 -:0D15DA00FB53CEFEE5CE544260FA120DE147 -:0115E70022E1 -:1015E800900116120DA1120DD3120E03E5CE30E0B4 -:0D15F800FB53CEFEE5CE544260FA120DE129 -:0116050022C2 -:10156800900116120DA1120DD375CF0A43CE10E5C6 -:10157800CE30E0FB53CEFEE5CE544260FA120DE1C8 -:011588002240 -:10158900900116120DA1120DD375CF0143CE10E5AE -:10159900CE30E0FB53CEFEE5CE544260FA120DE1A7 -:0115A900221F -:1017360090011D120DA1120DC2E5CE30E0FB53CE75 -:01174600FEA4 -:01174700227F -:10174800900121120DA1120DC2E5CE30E0FB53CE5F -:01175800FE92 -:01175900226D -:10175A00900125120DA1120DC2E5CE30E0FB53CE49 -:01176A00FE80 -:01176B00225B -:10176C00900129120DA1120DC2E5CE30E0FB53CE33 -:01177C00FE6E -:01177D002249 -:10160600120DD39000FAE0F5CF43CE10E5CE30E0D0 -:0E161600FB53CEFEE5CE544260FA120DE122E7 -:10177E00120DD343CE20E5CE30E3FB120DF453CE43 -:02178E007F22B8 -:100F8900E5CFE5CFAFCF120DD39000FBE0247F6012 -:100F99000C14600E2402701975CF018014E4F5CF8A -:100FA900800FEF547F24FFF582E43400F583E0F5E8 -:100FB900CF120E03E5CE30E0FBE5CE20E2F653CEAC -:0F0FC900FEE5CE544260FAE5CE20E2F5120DE1CE -:010FD80022F6 -:100ED3009000FBE0700B120DCCE5CE30E3FB53CE5C -:100EE300DF9000FBE0B4010B120DCCE5CE30E3FB49 -:100EF30053CEDF9000FBE064027032E5CF702EE545 -:100F0300CFAFCFEF247F701A75C70143CE20E4F52E -:100F1300C790010004F0120DC5E5CE30E0FB53CEBF -:0E0F2300FE22120DCCE5CE30E3FB120DF422BF -:100CC9009000FBE0700B120DCCE5CE30E3FB53CE68 -:100CD900DF9000FBE0B4010B120DCCE5CE30E3FB55 -:100CE90053CEDF9000FBE064027042E5CF703EE531 -:100CF900CFAFCFEF6020247F702875C70153CEDFB7 -:100D09007F011217F9E4F5C7900100F0120DC5E54E -:100D1900CE30E0FB8008120DC5E5CE30E0FB53CEA6 -:0E0D2900FE22120DCCE5CE30E3FB53CEDF22CE -:1016750053CEFBE5CE544260FA53CEFD43CE10E582 -:08168500CE30E0FB53CEFE2243 -:10171000E5CF9000F8E5CFF0120DC5E5CE30E0FB47 -:0417200053CEFE2284 -:10162400120DD39000F8E0F5CF43CE10E5CE30E0B4 -:0E163400FB53CEFEE5CE544260FA120DE122C9 -:0615B000C107C108C106DD -:10117100E5F830E00BE4F5C7E5CE30E20312195C87 -:10118100E5F830E3031216E6E5F830E2031216FB48 -:10119100E5F830E103121819E5F830E509300106E8 -:0F11A1001211B0121313E5F830E40312154522B2 -:10179000900132E0600B75C704E5CE20E40343CE30 -:0217A000102215 -:0C1436009000FAE06022300F1F20061C1E -:1014420075C7019001167408F01210AF8FCF90018A -:0C14520016E014F0E070F243CE10D20659 -:01145E00226B -:0E18190075C701E5CE30E00553CEFEC20622B3 -:1016E60075C70330070B12198BEF60057F081213BD -:0516F6004853CEFD2267 -:1016FB0075C70220070B12198BEF60057F081213B9 -:05170B004853CEFD2251 -:1013130075C705900131E0FF700CE5CE30E107534E -:10132300CEFD7401F022EFB4010EE5CE30E6095391 -:10133300CEBFE4900131F022E5CE30E60453CEBFB8 -:051343002253CEFD2243 -:1015450075C704E5CE30E01A53CEFE900132E014A3 -:10155500F0E0C394005002E4F0900132E0600343F0 -:03156500CE102283 -:1011B00075C705E5CE5442603512198BEF149000C7 -:1011C000EFF0AFCFE4FE9000EFE0FDEEC39D5009DD -:1011D00074272EF8A6CF0E80EDEF600A24FE600B78 -:0E11E00004700B021268C2010216D0120BD26C -:0111EE0022DE -:101268007827E6B40121782AE62403600D14600F7C -:10127800146011147011D208800D1214B080081275 -:1012880017A280031215217827E6B4020C08E6603D -:0A12980006147005D20722C20722D7 -:100E0A00300865900132E0C39402505C75C704E46F -:100E1A00F5CF30A303FF80027F018FCF90010EE050 -:100E2A00F5CFE51660071313543FFF80027F008F4A -:100E3A00CFE4F519E519C3951650091218CB8FCFCF -:100E4A00051980F0851619E519C3943C5007E4F595 -:100E5A00CF051980F212197B900132E004F01217C3 -:080E6A0090E490010EF0C208B3 -:010E7200225D -:1014880075C70475CFF0EF60047F0080027F018F7D -:10149800CFAF058FCFAF038FCF90011AE0F5CF9074 -:0814A8000132E004F00217908C -:1016D000E4FFD20474272FF8E6FE74232FF8A60641 -:0516E0000FEFB404EF60 -:0116E50022E2 -:1017A200E4F5A8F5B175C314C2811211EFD2B302E8 -:0217B2001920FC -:10152100E4F5A8F5B175C314D2B3C281FD7F4012B1 -:1015310013AF7B017DF47F041216421211EF1219D1 -:041541003802192033 -:0918F30053BDFE43BC40C281223A -:0D18350053BCBF53BDFE53BDDF53BDF722B2 -:0918FC0053BDEF1216A402197786 -:1011EF0090011612080B0000271043BC1090011637 -:1011FF00E0FCA3E0FDA3E0FEA3E0FFEC4D4E4F604B -:10120F0018EF24FFFFEE34FFFEED34FFFDEC34FF4B -:0C121F00FC9001161207FF80D453BCEFB6 -:01122B0022A0 -:0815B600C180C182C105C1031F -:0A18AD00E4900113F0900112F02204 -:0E1827001218ADD202D291C203C205D2012224 -:1014FC0053AFFE43C31043C30253C3F753C3FB4361 -:10150C00C32043C340D2B2D2B4D291D288D2A81253 -:05151C0018ADD2012210 -:0300030002197F60 -:03197F00D205325C -:10048F002000030206B130B410C205E4900114F04D -:10049F001218AEC202C291D2032003030206B1208A -:1004AF0005030206B1E4900116F0C205900113E0B6 -:1004BF00FF702A300E0E900110300404740A80125F -:1004CF007402800E30040790011074088004E490C9 -:1004DF000110F0F5C59001137401F08056EFB401CF -:1004EF001B900114E0B411069001137402F09001F7 -:1004FF0010E030E13B12137D8FC58037900113E080 -:10050F00FF64027027A3E0FEB4150F900110E030D6 -:10051F00E302C2049001137403F0900110E030E382 -:10052F000974112EF8E6F5C580098004EFB40303B2 -:10053F00E4F5C5900114E004F0900112E0FF703073 -:10054F00AEC4BE8003D38001C350F530A3030206AF -:10055F00B190010FE5C5F0E5C590011130E70574C5 -:10056F0022F080037411F09001127401F002069FC3 -:10057F00EF6401704AAFC4BF8003D38001C350F54D -:10058F0030A3030206B190010FE030E112D2909038 -:10059F000114E024CBF582E43400F583E5C5F09037 -:1005AF000111E02401FFE433FE900114E06F7001AC -:1005BF00EE600302069F9001127402F002069F90F4 -:1005CF000112E06402600302069FAFC4BF8003D331 -:1005DF008001C350F530A3030206B190010FE0F97B -:1005EF0030E357900111E0FF2405FDE433FC900147 -:1005FF0014E0FB7A00D39DEC6480F874809850155A -:10060F00C3EB9FFFEA9400FE74162FF58274013E30 -:10061F00F583E5C5F0900111E02406FFE433FE9069 -:10062F000114E0B50714E4B50610A3E5C5F0E0FF2B -:10063F0090010EE0C39F5002EFF0900111E0FF24F4 -:10064F0006FDE433FC900114E06D7001EC7041D2B3 -:10065F0001C203D291D202E9548260031210229098 -:10066F00010FE030E33C900118E06036E490011791 -:10067F00F0900117E02418F582E43401F583E0FFD0 -:10068F0012168D900117E004F0E0C3940440E222AB -:10069F00900116E004F0300509E0C3940550030201 -:0206AF0004B98C -:0106B1002226 -:1012DB0074272EF8E6FF900102E0FE04F09001085F -:1012EB00E0FCA3E02EF582E43CF583EFF0900116D1 -:1012FB00E004F022E490011AF0FB229000EFE0FFF3 -:08130B00900116E0FEC39F22D1 -:100BD200C2007827E6B40105121131802F200B0ED6 -:100BE2001212FF7D01FF121488121897801E7827B7 -:100BF200E6B4030F1218971212FF7D027F0112143E -:100C02008880097827E6B40203120AA3900103E060 -:100C1200FF90010AE0FEB5072590010DE0FD90016D -:100C220002E0B5051990010CE02DF090010BE034C3 -:100C320000F0E4900102F090010AF0D20922EEC322 -:100C42009F400C1212FF7D05FF1214881218972282 -:100FD9009000F0E0704230093F78167C017D017B7A -:100FE900017A0179047E007F0612078290011C7440 -:100FF90040F012140A900097E020E0F99000F07494 -:1010090014F0900097E0C413135401FFE490011AFF -:09101900F0FBFD121488C209224B -:100AA30090010AE070727828E6900105F0A3E4F063 -:100AB30008E6FFE02FF0900105E03400F09000EF2E -:100AC300E0B40402803F900105E0FEA3E0FFEE5492 -:100AD3007FFC90010BE06C7003A3E06F6016EF6482 -:100AE300C07003EE641D600C900105E0B40E0DA30D -:100AF300E0B4C0089000EFE06423600C1212FF7DA5 -:100B030003FF1214881218979001167403F012133E -:100B13000650291212DB80F69000EFE06421600C8E -:100B23001212FF7D04FF1214881218979001167495 -:100B330001F012130650051212DB80F690010AE051 -:020B430004F0BC -:010B4500228D -:101131009000F074FAF01217C61214D67828E6253A -:10114100E0900104F008E690010DF008E69001033B -:10115100F0E490010BF0A3F0900102F090010AF08D -:10116100D20BC2A890011AF0FB7D017F0102148805 -:0B189700C20B1214B0121827D200225E -:1017C6001219671219409001087400F0A37403F00F -:0117D60022F0 -:10140A00900097E054BFF0900116E0900098F09099 -:10141A000117E0FCA3E0FDEC900001F0A3EDF090D1 -:0C142A00011CE02402900096F002180A59 -:1010690090008AE0FF04F0748B2FF582E43400F5D8 -:1010790083E595F022E0FF04F074012FF582E43452 -:1010890000F58322900096E0FF900000E0C39F22C4 -:10109900E0FBA3E0FAA3E0F9EA494B22A3E0FAA3B3 -:0610A900E0F5828A8322BB -:0419670075938022D2 -:071940007593C043B10222C0 -:0C185B00900083EBF0A3EAF0A3E9F02278 -:0C186700900087EBF0A3EAF0A3E9F02268 -:0F180A00900097E04401F0E4900000F002196BA9 -:04196B004393202260 -:0B18A200439310900097E054FEF022EA -:031982008F95221C -:04196F004393042278 -:041973005393FB226D -:03198500AF9522F9 -:03198800AF9422F7 -:0300430002086848 -:10086800C0E0C0F0C083C082C0D075D008AF94EF9C -:1008780012083C09B40008CD0808CD1008D518089E -:10088800F52008D52808F53008FF3809054008F58F -:100898004809025008F258091560091568091570C9 -:1008A800091578092B80093D88092B90093D98097D -:1008B80044A00970A80970B00997B808FFC008FFDC -:1008C800C8000009B75393DF900098800812108D74 -:1008D800500B12107EE0FF1219820209B71218A2FB -:1008E800900097E04440F00209B712106990009711 -:1008F800E04402F00209B40209AF121069900086C0 -:10090800E014FF90008AE0C39F5027802290009750 -:10091800E04401F090008AE4F0900097E054FBF086 -:100928000209A512106990008AE0C39408500302D6 -:1009380009A50209AA900097E04404F01219409012 -:100948000083121099601890008AE0FF7B017A00FA -:10095800798BC00A9000831210A5D00A12086690FD -:100968000097E054FEF08047900087121099601AB3 -:100978007B017A007901C00A9000871210A5D00A7D -:100988007F82120866900096EFF0900000E4F090E5 -:10099800000012107EE0F59512108D500512196FA7 -:1009A800800D121973800812194080031218A2537F -:0D09B80093F7D0D0D082D083D0F0D0E032C1 -:0215BE00C10E5C -:0A18B700E4F512F511F510C20E223F -:101348000512E512C394204002D20EE512B434030C -:10135800151222AECFEE700974A32510F87601801D -:101368000774A32510F8A6060510E510B43403E4A5 -:04137800F510DFCCC1 -:01137C00224E -:10137D00E512C394105002C20EE5127011E5117002 -:10138D000578D6E6FF2274A22511F8E6FF22151284 -:10139D0074A32511F8E6FF0511E511B43403E4F546 -:0113AD00112E -:0113AE00221C -:0215C000C10F59 -:0A18C100E4F515F514F513C20F222B -:101022008F190515E515C394204002D20FE515B4BA -:101032003303151522E519FDEFC39DFDE49400FC71 -:1010420074CD2DF58274003CF583E0FE749925136E -:10105200F582E43400F583EEF00513E513B43403AE -:06106200E4F513D519BCF2 -:011068002265 -:1010AF00E5157002C20FE515701AE5147005900072 -:1010BF00CC800B74982514F582E43400F583E0F5A9 -:1010CF0019AF1922151574992514F582E43400F51A -:1010DF0083E0F5190514E514B43403E4F514AF19DE -:0110EF0022DE -:0215C200C11056 -:0A18D500E4F518F517F516C210220D -:041977001218D5224B -:04197B001218D52247 -:10168D0030100312197B74672516F8A6070516E5A9 -:07169D0016B43C02D210223A -:0918CB0074672517F8E6FF051704 -:0118D40022F1 -:1017D700E0FEA3E0FFE4FCFDFB7AFAF9F8D3020789 -:0117E700E918 -:1014B000D291C281E4900117F0A3F09001171217A6 -:1014C000D74010900118E004F070F0900117E0048C -:0514D000F080E8D2816C -:0114D50022F4 -:1014D600C291C281E4900116F0A3F0900116121792 -:1014E600D74010900117E004F070F0900116E00468 -:0514F600F080E8D28146 -:0114FB0022CE -:0515C4004201330000AC -:0C187300900133E0FEA3E0FF64014E2270 -:100F3100900134E004F07006900133E004F030A336 -:100F41001D1218737003D2B322E4B50707EEB40380 -:100F510003C2B322EF7003EE6404702B80231218D6 -:100F6100737003D2B322EF64104E7003C2B322EF49 -:100F710064204E7002800AD3EF9420EE9400400763 -:080F8100E4900133F0A3F0221B -:0819200075A61E75A6E180FE0C -:0D1842001207A8F5CF740129F9E43AFA2243 -:071947008FC7AF058FD4220A -:1012A20030F805E4F5C7802E30F90575C7018026B0 -:1012B20030FA0575C702801E30FB0575C70380161C -:1012C20030FC0575C704800E30FD0575C705800624 -:0912D20030FE0375C706AFC72208 -:03198B00AFE222A6 -:09190500AFE3EFFEADE2EDFF22BD -:1017B400E4F5C7AF051DEF600512184280F543CE6E -:0217C4001022F1 -:0C187F00AF051DEF600512184280F52235 -:1017E800AF051DEF600AE5CF1207C112184780F058 -:0117F80022CE -:09190E008FC7E4F5CE43CE202280 -:1017F9007401A807088002C333D8FCF5D5E4F5D5F0 -:0118090022BC -:07194E0075A41043A302225F -:0719550012194E43BC802271 -:10145F0041746D656C202852290A63353133312D63 -:10146F007573622D6364632D315F305F320A0A003A -:09147F001B631B5B3F32356C005E -:0B10F00090012DEBF0A3EAF0A3E9F063 -:1010FB0090012DE0FBA3E475F0011207D3A9F0FAE0 -:10110B001207A8900130F06013E0B40A057F0D12AE -:10111B001928900130E0FF12192880D47F0D121985 -:06112B00287F0A021928CA -:091917007BFF7A14797F0210F0C5 -:100D3700900136EDF0900135EFF070097F0D121933 -:100D4700287F0A80377F1B1219287F5B121928908A -:100D57000136E0FFD394094003120D959001361236 -:100D67000D877F3B121928900135E0FFD394094086 -:100D770003120D95900135120D877F48121928220D -:100D8700E075F00A84E5F02430FF12192822EF7588 -:0A0D9700F00A842430FF121928220C -:05196200A29892112281 -:10165C00759840538FF7438F0175CBFF75CAF3759F -:09166C00C834D2CA439812D322FB -:081928003099FDC2998F99224C -:071930003098FDAF99C29849 -:01193700228D -:0A18DF008FC5E5C430E7FB7F01224E -:0A18E90043A22012FFC053A2DF2229 -:0C188B008F1CAF058F1F1218E9AF1D2243 -:10164200A2AF9212C2AF8F1CAF038F1FAF058F1DC7 -:091652001218E9A21292AF7F0107 -:01165B00226C -:0813AF00900116EFF0A3EDF030 -:1013B700A2AF9212C2AFE4FD7F0812188B900116FC -:1013C700E0F45FFFA3E04FF51D751C071218E9A2B3 -:0513D7001292AF7F013E -:0113DC0022EE -:08193800C2AF43A22002F4003B -:03000000020B46AA -:0C0B4600787FE4F6D8FD7581D6020B8D97 -:1006B200E709F608DFFA8046E709F208DFFA803E2A -:1006C20088828C83E709F0A3DFFA8032E309F60817 -:1006D200DFFA8078E309F208DFFA807088828C837F -:1006E200E309F0A3DFFA806489828A83E0A3F60833 -:1006F200DFFA805889828A83E0A3F208DFFA804C0D -:1007020080D280FA80C680D4806980F280338010E3 -:1007120080A680EA809A80A880DA80E280CA80334C -:1007220089828A83ECFAE493A3C8C582C8CCC583C4 -:10073200CCF0A3C8C582C8CCC583CCDFE9DEE78094 -:100742000D89828A83E493A3F608DFF9ECFAA9F013 -:10075200EDFB2289828A83ECFAE0A3C8C582C8CC69 -:10076200C583CCF0A3C8C582C8CCC583CCDFEADE82 -:10077200E880DB89828A83E493A3F208DFF980CCE4 -:1007820088F0EF60010E4E60C388F0ED2402B404DD -:100792000050B9F582EB2402B4040050AF23234584 -:0607A200822390070273A0 -:1007A800BB010689828A83E0225002E722BBFE024F -:0907B800E32289828A83E4932282 -:1007C100BB010689828A83F0225002F722BBFE0117 -:0207D100F32211 -:1007D300A3F8E0C5F025F0F0E582158270021583D9 -:0607E300E0C838F0E82236 -:1007E900EB9FF5F0EA9E42F0E99D42F0EC6480C887 -:0607F90064809845F02227 -:0C07FF00ECF0A3EDF0A3EEF0A3EFF0226D -:10080B00A8828583F0D083D082120822120822128C -:10081B000822120822E473E493A3C583C5F0C583B1 -:10082B00C8C582C8F0A3C583C5F0C583C8C582C837 -:01083B00229A -:10083C00D083D082F8E4937012740193700DA3A34B -:10084C0093F8740193F5828883E47374029368605F -:06085C00EFA3A3A380DF5F -:060862008A838982E47321 -:100B52000213DDE493A3F8E493A34003F68001F2C9 -:100B620008DFF48029E493A3F85407240CC8C333A4 -:100B7200C4540F4420C8834004F456800146F6DF73 -:100B8200E4800B01020408102040809015AAE47E44 -:100B9200019360BCA3FF543F30E509541FFEE49368 -:100BA200A360010ECF54C025E060A840B8E493A32F -:100BB200FAE493A3F8E493A3C8C582C8CAC583CA5A -:100BC200F0A3C8C582C8CAC583CADFE9DEE780BE12 -:0115C9000021 +:10171000E0FEA3E0FFE4FCFDFB7AFAF9F8D3020552 +:01172000BF09 +:10141B00D291C281E4900120F0A3F0900120121729 +:10142B00104010900121E004F070F0900120E004D6 +:05143B00F080E8D28101 +:011440002289 +:10144100C291C281E490011FF0A3F090011F121715 +:10145100104010900120E004F070F090011FE004B2 +:05146100F080E8D281DB +:011466002263 +:1016C80020A304D20CD322300C0312141BD200C264 +:0216D8000CC341 +:0116DA0022ED +:0515AC0042013B0000BC +:1014670030090A7D207C017F007E01801520A30AB8 +:101477007D207C007F107E0080087D007C047F003B +:061487007E031212EA22AE +:1012EA0090013CE004F0700690013BE004F09001AC +:1012FA003BE0FAA3E0FBB50707EAB50603C2B3224F +:10130A00C3EB9DEA9C4009D2B3E490013BF0A3F001 +:01131A0022B0 +:0D17C50012057EF5CF740129F9E43AFA22ED +:0718F2008FC7AF058FD42260 +:1011E50030F805E4F5C7802E30F90575C70180266E +:1011F50030FA0575C702801E30FB0575C7038016DA +:1012050030FC0575C704800E30FD0575C7058006E1 +:0912150030FE0375C706AFC722C5 +:03193A00AFE222F7 +:0918B000AFE3EFFEADE2EDFF2213 +:1016ED00E4F5C7AF051DEF60051217C580F543CEB4 +:0216FD001022B9 +:0C183E00AF051DEF60051217C580F522F4 +:10172100AF051DEF600AE5CF1205971217CA80F0C9 +:011731002295 +:0918B9008FC7E4F5CE43CE2022D6 +:101732007401A807088002C333D8FCF5D5E4F5D5B7 +:011742002284 +:0718F90075A41043A30222B5 +:071900001218F943BC80221C +:1013CA0041746D656C202852290A63353133312DF9 +:1013DA007573622D6364632D315F305F320A0A00D0 +:0913EA001B631B5B3F32356C00F4 +:0B112900900135EBF0A3EAF0A3E9F021 +:10113400900135E0FBA3E475F0011205A9A9F0FACA +:1011440012057E900138F06013E0B40A057F0D1299 +:1011540018D3900138E0FF1218D380D47F0D1218F1 +:06116400D37F0A0218D33C +:0918C2007BFF7A1379EA02112977 +:100CEC0090013EEDF090013DEFF070097F0D121870 +:100CFC00D37F0A80377F1B1218D37F5B1218D390D7 +:100D0C00013EE0FFD394094003120D4A90013E12BC +:100D1C000D3C7F3B1218D390013DE0FFD39409406A +:100D2C0003120D4A90013D120D3C7F481218D3223C +:100D3C00E075F00A84E5F02430FF1218D322EF7529 +:0A0D4C00F00A842430FF1218D322AD +:05191900A298920D22CE +:1015E700759840538FF7438F0175CBFF75CAF37515 +:0915F700C834D2CA439812D32271 +:0818D3003099FDC2998F9922A2 +:0718DB003098FDAF99C2989F +:0118E20022E3 +:0A188A008FC5E5C430E7FB7F0122A3 +:0A18940043A22012FFC053A2DF227E +:0C184A008F1CAF058F1F121894AF1D22D9 +:1015CD00A2AF920EC2AF8F1CAF038F1FAF058F1D41 +:0915DD00121894A20E92AF7F01D6 +:0115E60022E2 +:08131B00900123EFF0A3EDF0B7 +:10132300A2AF920EC2AFE4FD7F0812184A900123C8 +:10133300E0F45FFFA3E04FF51D751C07121894A29C +:051343000E92AF7F01D6 +:011348002282 +:0818E300C2AF43A22002F40091 +:03000000020B6888 +:0C0B6800787FE4F6D8FD7581DD020BAF4C +:10048800E709F608DFFA8046E709F208DFFA803E56 +:1004980088828C83E709F0A3DFFA8032E309F60843 +:1004A800DFFA8078E309F208DFFA807088828C83AB +:1004B800E309F0A3DFFA806489828A83E0A3F6085F +:1004C800DFFA805889828A83E0A3F208DFFA804C39 +:1004D80080D280FA80C680D4806980F28033801010 +:1004E80080A680EA809A80A880DA80E280CA803379 +:1004F80089828A83ECFAE493A3C8C582C8CCC583F1 +:10050800CCF0A3C8C582C8CCC583CCDFE9DEE780C0 +:100518000D89828A83E493A3F608DFF9ECFAA9F03F +:10052800EDFB2289828A83ECFAE0A3C8C582C8CC95 +:10053800C583CCF0A3C8C582C8CCC583CCDFEADEAE +:10054800E880DB89828A83E493A3F208DFF980CC10 +:1005580088F0EF60010E4E60C388F0ED2402B40409 +:100568000050B9F582EB2402B4040050AF232345B0 +:0605780082239004D873F9 +:10057E00BB010689828A83E0225002E722BBFE027B +:09058E00E32289828A83E49322AE +:10059700BB010689828A83F0225002F722BBFE0143 +:0205A700F3223D +:1005A900A3F8E0C5F025F0F0E58215827002158305 +:0605B900E0C838F0E82262 +:1005BF00EB9FF5F0EA9E42F0E99D42F0EC6480C8B3 +:0605CF0064809845F02253 +:0C05D500ECF0A3EDF0A3EEF0A3EFF02299 +:1005E100A8828583F0D083D0821205F81205F81213 +:1005F10005F81205F8E473E493A3C583C5F0C58338 +:10060100C8C582C8F0A3C583C5F0C583C8C582C863 +:0106110022C6 +:10061200D083D082F8E4937012740193700DA3A377 +:1006220093F8740193F5828883E47374029368608B +:06063200EFA3A3A380DF8B +:060638008A838982E4734D +:100B7400021600E493A3F8E493A34003F68001F281 +:100B840008DFF48029E493A3F85407240CC8C33382 +:100B9400C4540F4420C8834004F456800146F6DF51 +:100BA400E4800B0102040810204080901594E47E38 +:100BB400019360BCA3FF543F30E509541FFEE49346 +:100BC400A360010ECF54C025E060A840B8E493A30D +:100BD400FAE493A3F8E493A3C8C582C8CAC583CA38 +:100BE400F0A3C8C582C8CAC583CADFE9DEE780BEF0 +:0115B1000039 :00000001FF |
From: Paul_R <c2m...@c2...> - 2008-05-30 14:28:15
|
Author: Paul_R Date: 2008-05-30 16:28:22 +0200 (Fri, 30 May 2008) New Revision: 1209 Modified: firmware/fuxusb/trunk/fuxusb.Opt firmware/fuxusb/trunk/src/fifo_mic.c firmware/fuxusb/trunk/src/fifo_mic.h firmware/fuxusb/trunk/src/fifo_spk.c firmware/fuxusb/trunk/src/fifo_spk.h firmware/fuxusb/trunk/src/spi_task.c Log: * Cleanup : - Removed unused define and variables - Renamed some stuff on the audio FIFOs modules Modified: firmware/fuxusb/trunk/fuxusb.Opt =================================================================== (Binary files differ) Modified: firmware/fuxusb/trunk/src/fifo_mic.c =================================================================== --- firmware/fuxusb/trunk/src/fifo_mic.c 2008-05-30 14:05:33 UTC (rev 1208) +++ firmware/fuxusb/trunk/src/fifo_mic.c 2008-05-30 14:28:22 UTC (rev 1209) @@ -32,11 +32,9 @@ /** \name Fifo's constants * @{ */ /** Buffer size */ -#define FIFOTBL_MIC_MAX 64 -/** Overload value */ -#define FIFO_MIC_OVERLOAD FIFOTBL_MIC_MAX +#define MIC_BUF_SIZE 64 /** Ready threshold. This value allow to fill the fifo */ -#define FIFO_MIC_READY_VALUE 32 +#define FIFO_MIC_READY 32 /*! @} */ /** \name Variables @@ -44,16 +42,11 @@ * access time. * @{ */ /** Fifo buffer */ -uint8_t idata FifoTbl_MIC[FIFOTBL_MIC_MAX]; +uint8_t idata Mic_buf[MIC_BUF_SIZE]; /** In index */ uint8_t data FifoIn_MIC_Idx; /** Out index */ uint8_t data FifoOut_MIC_Idx; -/** Out counter */ -uint8_t data FifoOut_MIC_cmpt; -/** Fifo ready flag. - \ingroup fifo_mic */ -bit data Fifoready_MIC = 0; /*! @} */ /** @@ -63,10 +56,8 @@ */ void FIFO_MIC_init (void) { - FifoOut_MIC_cmpt = 0; FifoOut_MIC_Idx = 0; FifoIn_MIC_Idx = 0; - Fifoready_MIC = 0; } /** @@ -74,7 +65,7 @@ */ bit FIFO_MIC_ready(void) { - return ((FifoIn_MIC_Idx - FifoOut_MIC_Idx) > FIFO_MIC_READY_VALUE); + return ((FifoIn_MIC_Idx - FifoOut_MIC_Idx) > FIFO_MIC_READY); } /** @@ -92,10 +83,10 @@ i = n; do { - if ((FifoIn_MIC_Idx - FifoOut_MIC_Idx) == FIFOTBL_MIC_MAX) + if ((FifoIn_MIC_Idx - FifoOut_MIC_Idx) == MIC_BUF_SIZE) return; - FifoTbl_MIC[FifoIn_MIC_Idx++ & (FIFOTBL_MIC_MAX-1)] = \ + Mic_buf[FifoIn_MIC_Idx++ & (MIC_BUF_SIZE-1)] = \ received_rf_data[n-i]; } while (-- i); } @@ -111,5 +102,5 @@ if (FifoOut_MIC_Idx == FifoIn_MIC_Idx) return 0x80; - return FifoTbl_MIC[FifoOut_MIC_Idx++ & (FIFOTBL_MIC_MAX - 1)]; + return Mic_buf[FifoOut_MIC_Idx++ & (MIC_BUF_SIZE - 1)]; } Modified: firmware/fuxusb/trunk/src/fifo_mic.h =================================================================== --- firmware/fuxusb/trunk/src/fifo_mic.h 2008-05-30 14:05:33 UTC (rev 1208) +++ firmware/fuxusb/trunk/src/fifo_mic.h 2008-05-30 14:28:22 UTC (rev 1209) @@ -28,8 +28,6 @@ #ifndef _FIFO_MIC_H_ #define _FIFO_MIC_H_ -extern bit Fifoready_MIC; - extern void FIFO_MIC_init (void); extern bit FIFO_MIC_ready(void); extern void FIFO_MIC_put_n (uint8_t const n); Modified: firmware/fuxusb/trunk/src/fifo_spk.c =================================================================== --- firmware/fuxusb/trunk/src/fifo_spk.c 2008-05-30 14:05:33 UTC (rev 1208) +++ firmware/fuxusb/trunk/src/fifo_spk.c 2008-05-30 14:28:22 UTC (rev 1209) @@ -32,13 +32,9 @@ /** \name Fifo's constants * @{ */ /** Buffer size */ -#define FIFOTBL_SPK_MAX 64 -/** Overload value */ -#define FIFO_SPK_OVERLOAD FIFOTBL_SPK_MAX +#define SPK_BUF_SIZE 64 /** Ready threshold. This value allow to empty the fifo */ -#define FIFO_SPK_READY_VALUE_MAX 32 -/** Too low level threshold. This value disable to empty the fifo */ -#define FIFO_SPK_READY_VALUE_MIN 16 +#define FIFO_SPK_READY 32 /*! @} */ /** \name Variables @@ -46,16 +42,11 @@ * access time. * @{ */ /** Fifo buffer */ -uint8_t idata FifoTbl_SPK[FIFOTBL_SPK_MAX]; +uint8_t idata Spk_buf[SPK_BUF_SIZE]; /** In index */ uint8_t data FifoIn_SPK_Idx; /** Out index */ uint8_t data FifoOut_SPK_Idx; -/** Out counter */ -uint8_t data FifoOut_SPK_cmpt; -/** Fifo ready flag. - \ingroup fifo_spk */ -bit data Fifoready_SPK = False; /*! @} */ /** @@ -65,10 +56,8 @@ */ void FIFO_SPK_init (void) { - FifoOut_SPK_cmpt = 0; FifoOut_SPK_Idx = 0; FifoIn_SPK_Idx = 0; - Fifoready_SPK = 0; } /** @@ -76,7 +65,7 @@ */ bit FIFO_SPK_ready(void) { - return ((FifoIn_SPK_Idx - FifoOut_SPK_Idx) > FIFO_SPK_READY_VALUE_MAX); + return ((FifoIn_SPK_Idx - FifoOut_SPK_Idx) > FIFO_SPK_READY); } /** * \brief Push N bytes in the Speaker FIFO. @@ -92,10 +81,10 @@ do { - if ((FifoIn_SPK_Idx - FifoOut_SPK_Idx) == FIFOTBL_SPK_MAX) + if ((FifoIn_SPK_Idx - FifoOut_SPK_Idx) == SPK_BUF_SIZE) return; - FifoTbl_SPK[FifoIn_SPK_Idx++ & (FIFOTBL_SPK_MAX - 1)] = \ + Spk_buf[FifoIn_SPK_Idx++ & (SPK_BUF_SIZE - 1)] = \ Usb_read_byte(); } while (-- i); @@ -112,5 +101,5 @@ if (FifoOut_SPK_Idx == FifoIn_SPK_Idx) return 0x80; - return FifoTbl_SPK[FifoOut_SPK_Idx++ & (FIFOTBL_SPK_MAX - 1)]; + return Spk_buf[FifoOut_SPK_Idx++ & (SPK_BUF_SIZE - 1)]; } Modified: firmware/fuxusb/trunk/src/fifo_spk.h =================================================================== --- firmware/fuxusb/trunk/src/fifo_spk.h 2008-05-30 14:05:33 UTC (rev 1208) +++ firmware/fuxusb/trunk/src/fifo_spk.h 2008-05-30 14:28:22 UTC (rev 1209) @@ -29,7 +29,6 @@ #ifndef _FIFO_SPK_H_ #define _FIFO_SPK_H_ -extern bit Fifoready_SPK; extern void FIFO_SPK_init (void); extern bit FIFO_SPK_ready(void); Modified: firmware/fuxusb/trunk/src/spi_task.c =================================================================== --- firmware/fuxusb/trunk/src/spi_task.c 2008-05-30 14:05:33 UTC (rev 1208) +++ firmware/fuxusb/trunk/src/spi_task.c 2008-05-30 14:28:22 UTC (rev 1209) @@ -201,7 +201,6 @@ if (spi_slave == HEADERS) { if (FIFO_SPK_ready()) - //if (Fifoready_SPK) // FIFO ready to be empty { if (new_command_received) // { |
From: Paul_R <c2m...@c2...> - 2008-05-30 14:05:26
|
Author: Paul_R Date: 2008-05-30 16:05:33 +0200 (Fri, 30 May 2008) New Revision: 1208 Modified: firmware/fuxusb/trunk/src/fifo_mic.c firmware/fuxusb/trunk/src/fifo_mic.h firmware/fuxusb/trunk/src/fifo_spk.c firmware/fuxusb/trunk/src/fifo_spk.h firmware/fuxusb/trunk/src/global.h firmware/fuxusb/trunk/src/spi_task.c firmware/fuxusb/trunk/src/usb_ep.c Log: * Changed the microphone and speaker fifo. Now, they're circular. * Updated doc with the new FIFOs modules Modified: firmware/fuxusb/trunk/src/fifo_mic.c =================================================================== --- firmware/fuxusb/trunk/src/fifo_mic.c 2008-05-30 14:04:36 UTC (rev 1207) +++ firmware/fuxusb/trunk/src/fifo_mic.c 2008-05-30 14:05:33 UTC (rev 1208) @@ -34,7 +34,7 @@ /** Buffer size */ #define FIFOTBL_MIC_MAX 64 /** Overload value */ -#define FIFO_MIC_OVERLOAD FIFOTBL_MIC_MAX - 1 +#define FIFO_MIC_OVERLOAD FIFOTBL_MIC_MAX /** Ready threshold. This value allow to fill the fifo */ #define FIFO_MIC_READY_VALUE 32 /*! @} */ @@ -69,6 +69,13 @@ Fifoready_MIC = 0; } +/** + * \brief Check if the fifo is ready. + */ +bit FIFO_MIC_ready(void) +{ + return ((FifoIn_MIC_Idx - FifoOut_MIC_Idx) > FIFO_MIC_READY_VALUE); +} /** * \brief Push N bytes in the microphone FIFO. @@ -85,22 +92,11 @@ i = n; do { - if (++ FifoOut_MIC_cmpt >= FIFO_MIC_READY_VALUE) - { - Fifoready_MIC = 1; + if ((FifoIn_MIC_Idx - FifoOut_MIC_Idx) == FIFOTBL_MIC_MAX) + return; - if (FifoOut_MIC_cmpt == FIFO_MIC_OVERLOAD) - { - FifoOut_MIC_cmpt --; - return; - } - } - FifoTbl_MIC[FifoIn_MIC_Idx ++] = received_rf_data[n - i]; - - if (FifoIn_MIC_Idx == FIFOTBL_MIC_MAX) - { - FifoIn_MIC_Idx = 0; - } + FifoTbl_MIC[FifoIn_MIC_Idx++ & (FIFOTBL_MIC_MAX-1)] = \ + received_rf_data[n-i]; } while (-- i); } @@ -111,19 +107,9 @@ */ uint8_t FIFO_MIC_get (void) { - if (!FifoOut_MIC_cmpt) - { - Fifoready_MIC = 0; - return (FifoOut_MIC_Idx) ? FifoTbl_MIC[FifoOut_MIC_Idx-1] \ - : FifoTbl_MIC[FIFOTBL_MIC_MAX-1]; - } + /* Fifo empty */ + if (FifoOut_MIC_Idx == FifoIn_MIC_Idx) + return 0x80; - FifoOut_MIC_cmpt--; - - if (++ FifoOut_MIC_Idx == FIFOTBL_MIC_MAX) - { - FifoOut_MIC_Idx = 0; - } - - return FifoTbl_MIC[FifoOut_MIC_Idx]; + return FifoTbl_MIC[FifoOut_MIC_Idx++ & (FIFOTBL_MIC_MAX - 1)]; } Modified: firmware/fuxusb/trunk/src/fifo_mic.h =================================================================== --- firmware/fuxusb/trunk/src/fifo_mic.h 2008-05-30 14:04:36 UTC (rev 1207) +++ firmware/fuxusb/trunk/src/fifo_mic.h 2008-05-30 14:05:33 UTC (rev 1208) @@ -31,6 +31,7 @@ extern bit Fifoready_MIC; extern void FIFO_MIC_init (void); +extern bit FIFO_MIC_ready(void); extern void FIFO_MIC_put_n (uint8_t const n); extern uint8_t FIFO_MIC_get (void); Modified: firmware/fuxusb/trunk/src/fifo_spk.c =================================================================== --- firmware/fuxusb/trunk/src/fifo_spk.c 2008-05-30 14:04:36 UTC (rev 1207) +++ firmware/fuxusb/trunk/src/fifo_spk.c 2008-05-30 14:05:33 UTC (rev 1208) @@ -72,6 +72,13 @@ } /** + * \brief Check if the fifo is ready to be empty. + */ +bit FIFO_SPK_ready(void) +{ + return ((FifoIn_SPK_Idx - FifoOut_SPK_Idx) > FIFO_SPK_READY_VALUE_MAX); +} +/** * \brief Push N bytes in the Speaker FIFO. * \param n The number of byte to push. * This function is made to save time when N bytes must be pushed on the fifo. @@ -84,23 +91,13 @@ uint8_t data i = n; do - { - if (++ FifoOut_SPK_cmpt >= FIFO_SPK_READY_VALUE_MAX) - { - Fifoready_SPK = 1; // FIFO ready to be empty + { + if ((FifoIn_SPK_Idx - FifoOut_SPK_Idx) == FIFOTBL_SPK_MAX) + return; + + FifoTbl_SPK[FifoIn_SPK_Idx++ & (FIFOTBL_SPK_MAX - 1)] = \ + Usb_read_byte(); - if (FifoOut_SPK_cmpt == FIFO_SPK_OVERLOAD) - { - FifoOut_SPK_cmpt --; - return; - } - } - FifoTbl_SPK[FifoIn_SPK_Idx ++] = Usb_read_byte(); - - if (FifoIn_SPK_Idx == FIFOTBL_SPK_MAX) - { - FifoIn_SPK_Idx = 0; - } } while (-- i); } @@ -111,22 +108,9 @@ */ uint8_t FIFO_SPK_get(void) { - if (FifoOut_SPK_cmpt < FIFO_SPK_READY_VALUE_MIN) - { - Fifoready_SPK = 0; // FIFO empty - if (FifoOut_SPK_cmpt == 0) // FIFO Underload - { - return FifoOut_SPK_Idx ? FifoTbl_SPK[FifoOut_SPK_Idx-1] \ - : FifoTbl_SPK[FIFOTBL_SPK_MAX-1]; - } - } + /* Fifo empty */ + if (FifoOut_SPK_Idx == FifoIn_SPK_Idx) + return 0x80; - FifoOut_SPK_cmpt--; - - if (++ FifoOut_SPK_Idx == FIFOTBL_SPK_MAX) - { - FifoOut_SPK_Idx = 0; - } - - return FifoTbl_SPK[FifoOut_SPK_Idx]; + return FifoTbl_SPK[FifoOut_SPK_Idx++ & (FIFOTBL_SPK_MAX - 1)]; } Modified: firmware/fuxusb/trunk/src/fifo_spk.h =================================================================== --- firmware/fuxusb/trunk/src/fifo_spk.h 2008-05-30 14:04:36 UTC (rev 1207) +++ firmware/fuxusb/trunk/src/fifo_spk.h 2008-05-30 14:05:33 UTC (rev 1208) @@ -32,6 +32,7 @@ extern bit Fifoready_SPK; extern void FIFO_SPK_init (void); +extern bit FIFO_SPK_ready(void); extern void FIFO_SPK_put_n (uint8_t const n); extern uint8_t FIFO_SPK_get (void); Modified: firmware/fuxusb/trunk/src/global.h =================================================================== --- firmware/fuxusb/trunk/src/global.h 2008-05-30 14:04:36 UTC (rev 1207) +++ firmware/fuxusb/trunk/src/global.h 2008-05-30 14:05:33 UTC (rev 1208) @@ -149,8 +149,7 @@ * to the RF. * * This FIFO are specific for this application and the context. - * It's optimized for speed. It's not circular, and the access to the - * buffer are direct. + * It's optimized for speed. * \ingroup fuxusb */ @@ -160,8 +159,7 @@ * \brief FIFO_MIC used for the microphone data, received from the RF and sent * to the computer. * This FIFO is specific for this application and the context. - * It's optimized for speed. It's not circular, and the access to the - * buffer are direct. + * It's optimized for speed. * \ingroup fuxusb */ Modified: firmware/fuxusb/trunk/src/spi_task.c =================================================================== --- firmware/fuxusb/trunk/src/spi_task.c 2008-05-30 14:04:36 UTC (rev 1207) +++ firmware/fuxusb/trunk/src/spi_task.c 2008-05-30 14:05:33 UTC (rev 1208) @@ -200,7 +200,8 @@ //-------------------------------------------------------------------------- if (spi_slave == HEADERS) { - if (Fifoready_SPK) // FIFO ready to be empty + if (FIFO_SPK_ready()) + //if (Fifoready_SPK) // FIFO ready to be empty { if (new_command_received) // { Modified: firmware/fuxusb/trunk/src/usb_ep.c =================================================================== --- firmware/fuxusb/trunk/src/usb_ep.c 2008-05-30 14:04:36 UTC (rev 1207) +++ firmware/fuxusb/trunk/src/usb_ep.c 2008-05-30 14:05:33 UTC (rev 1208) @@ -131,7 +131,7 @@ */ void fill_mic_ep(void) { - if(usb_configuration_nb && Fifoready_MIC && !fifo_mic_loaded) + if(usb_configuration_nb && FIFO_MIC_ready() && !fifo_mic_loaded) { uint8_t i; |