[tuxdroid-svn] r1051 - software_suite_v2/middleware/tuxdriver/branches/hid_transition/src
Status: Beta
Brought to you by:
ks156
From: remi <c2m...@c2...> - 2008-04-30 14:45:13
|
Author: remi Date: 2008-04-30 16:45:15 +0200 (Wed, 30 Apr 2008) New Revision: 1051 Modified: software_suite_v2/middleware/tuxdriver/branches/hid_transition/src/tux_usb.c software_suite_v2/middleware/tuxdriver/branches/hid_transition/src/tux_usb.h Log: cleaning and detection of strange empty frames. Modified: software_suite_v2/middleware/tuxdriver/branches/hid_transition/src/tux_usb.c =================================================================== --- software_suite_v2/middleware/tuxdriver/branches/hid_transition/src/tux_usb.c 2008-04-30 14:28:07 UTC (rev 1050) +++ software_suite_v2/middleware/tuxdriver/branches/hid_transition/src/tux_usb.c 2008-04-30 14:45:15 UTC (rev 1051) @@ -53,8 +53,6 @@ static bool read_loop_started = false; static void set_connected(bool value); -static int usb_write_TuxDroid(const void *buf, int size); -static int usb_read_TuxDroid(char *buf); static void set_read_loop_started(bool value); static bool get_read_loop_started(void); @@ -256,54 +254,10 @@ /** * */ -static bool -is_error_no_device(int error) -{ - switch (error) { - case -EIO: - return true; - case -ENODEV: - return true; - case -110: - read_error_counter++; - if (read_error_counter >= TUX_USB_ERROR_LIMIT) - tux_usb_reset(); - return false; - case -116: - read_error_counter++; - if (read_error_counter >= TUX_USB_ERROR_LIMIT) - tux_usb_reset(); - return false; - case 0: - return false; - default: - return false; - } -} - -/** - * - */ -static int -usb_write_TuxDroid(const void *buf, int size) -{ - if (!tux_hid_write(size, (char *)buf)) - { - return -ENODEV; - } - else - { - return size; - } -} - -/** - * - */ LIBLOCAL TuxUSBError tux_usb_write(const void *buff) { - int ret; + bool ret; #ifndef USB_DEBUG void *buff2; unsigned char dest; @@ -336,22 +290,17 @@ } #endif - ret = usb_write_TuxDroid(buff, TUX_SEND_LENGTH); + ret = tux_hid_write(TUX_SEND_LENGTH, (char *)buff); #ifdef USE_MUTEX mutex_unlock(__read_write_mutex); #endif - if (ret != TUX_SEND_LENGTH) + if (!ret) { - if (is_error_no_device(ret)) - { - set_connected(false); - tux_usb_release(); - log_error("Fux is disconnected"); - return TuxUSBDisconnected; - } - log_error("Failed to write on USB device (%d)", ret); - return TuxUSBWriteError; + set_connected(false); + tux_usb_release(); + log_error("Fux is disconnected"); + return TuxUSBDisconnected; } return TuxUSBNoError; } @@ -359,22 +308,6 @@ /** * */ -static int -usb_read_TuxDroid(char *buf) -{ - if (!tux_hid_read(TUX_RECEIVE_LENGTH, (char *)buf)) - { - return -ENODEV; - } - else - { - return TUX_RECEIVE_LENGTH; - } -} - -/** - * - */ static void process_usb_frame(const char *data) { @@ -389,6 +322,21 @@ data_buf = (char *)data; data_buf += 4; + /* Having RF state to ON and no status frame is not normal */ + if ((packet_count == 0) && (rf_state == 1)) + { + read_error_counter++; + if (read_error_counter >= TUX_USB_ERROR_LIMIT) + { + /* Reset of the dongle */ + tux_usb_reset(); + } + } + else + { + read_error_counter = 0; + } + if (last_knowed_rf_state != rf_state) { last_knowed_rf_state = rf_state; @@ -429,7 +377,7 @@ LIBLOCAL TuxUSBError tux_usb_read(void *buf) { - int ret; + bool ret; if (!tux_usb_connected()) { @@ -442,43 +390,29 @@ #ifdef USE_MUTEX mutex_lock(__read_write_mutex); #endif - ret = usb_write_TuxDroid(frame_status_request, TUX_SEND_LENGTH); - if (ret != TUX_SEND_LENGTH) + ret = tux_hid_write(TUX_SEND_LENGTH, (char *)frame_status_request); + if (!ret) { #ifdef USE_MUTEX mutex_unlock(__read_write_mutex); #endif - if (is_error_no_device(ret)) - { /* USB device error */ - set_connected(false); - tux_usb_release(); - log_error("Fux is disconnected"); - return TuxUSBDisconnected; - } - log_error("Failed to write on USB device (%d)", ret); - return TuxUSBWriteError; + set_connected(false); + tux_usb_release(); + log_error("Fux is disconnected"); + return TuxUSBDisconnected; } - ret = usb_read_TuxDroid((char *)buf); + ret = tux_hid_read(TUX_RECEIVE_LENGTH, (char *)buf); #ifdef USE_MUTEX mutex_unlock(__read_write_mutex); #endif - if (ret != TUX_RECEIVE_LENGTH) - { /* Frame not have 64 bytes */ - if (is_error_no_device(ret)) - { /* USB device error */ - set_connected(false); - tux_usb_release(); - log_error("Fux is disconnected"); - return TuxUSBDisconnected; - } - log_error("Failed to read on USB device (%d)", ret); - return TuxUSBReadError; - } - else + if (!ret) { - read_error_counter = 0; + set_connected(false); + tux_usb_release(); + log_error("Fux is disconnected"); + return TuxUSBDisconnected; } process_usb_frame((char *)buf); @@ -619,7 +553,7 @@ LIBLOCAL void tux_usb_reset(void) { - usb_write_TuxDroid(frame_reset_dongle, TUX_SEND_LENGTH); + tux_hid_write(TUX_SEND_LENGTH, (char *)frame_reset_dongle); } /** Modified: software_suite_v2/middleware/tuxdriver/branches/hid_transition/src/tux_usb.h =================================================================== --- software_suite_v2/middleware/tuxdriver/branches/hid_transition/src/tux_usb.h 2008-04-30 14:28:07 UTC (rev 1050) +++ software_suite_v2/middleware/tuxdriver/branches/hid_transition/src/tux_usb.h 2008-04-30 14:45:15 UTC (rev 1051) @@ -36,7 +36,7 @@ #define TUX_WRITE_TIMEOUT 1000 #define TUX_READ_TIMEOUT 1000 #define TUX_READ_LOOP_INTERVAL 0.05 -#define TUX_USB_ERROR_LIMIT 4 +#define TUX_USB_ERROR_LIMIT 10 #define MIN_FIRMWARE_VERSION 0x030 #ifdef WIN32 |