[tuxdroid-svn] r884 - in daemon/trunk: . libs
Status: Beta
Brought to you by:
ks156
From: Paul_R <c2m...@c2...> - 2008-01-25 11:51:53
|
Author: Paul_R Date: 2008-01-25 12:51:54 +0100 (Fri, 25 Jan 2008) New Revision: 884 Modified: daemon/trunk/libs/USBDaemon_command_tux.c daemon/trunk/libs/USBDaemon_status_table.c daemon/trunk/status.c daemon/trunk/status.h Log: * Added two functions to write the LEDs on/off status in the status table Modified: daemon/trunk/libs/USBDaemon_command_tux.c =================================================================== --- daemon/trunk/libs/USBDaemon_command_tux.c 2008-01-25 11:30:28 UTC (rev 883) +++ daemon/trunk/libs/USBDaemon_command_tux.c 2008-01-25 11:51:54 UTC (rev 884) @@ -621,10 +621,10 @@ result[1] = portc.bits.PB1; break; case DATA_STATUS_LED_LEFT_INTENSITY: - result[1] = portc.bits.PB2; + result[1] = tux_status.led.left.on; break; case DATA_STATUS_LED_RIGHT_INTENSITY: - result[1] = portc.bits.PB3; + result[1] = tux_status.led.right.on; break; case DATA_STATUS_HEAD_MOTOR_FOR_MOUTH: result[1] = portd.bits.PB1; Modified: daemon/trunk/libs/USBDaemon_status_table.c =================================================================== --- daemon/trunk/libs/USBDaemon_status_table.c 2008-01-25 11:30:28 UTC (rev 883) +++ daemon/trunk/libs/USBDaemon_status_table.c 2008-01-25 11:51:54 UTC (rev 884) @@ -247,8 +247,10 @@ static void update_leds(uint8_t const * led_status) { - set_led_left_intensity(*led_status++); - set_led_right_intensity(*led_status++); + set_led_left_intensity(*led_status); + set_led_left_on(*led_status++); + set_led_right_intensity(*led_status); + set_led_right_on(*led_status++); set_led_left_fading(*led_status & 0x01 ? true : false); set_led_left_pulsing(*led_status & 0x02 ? true : false); set_led_right_fading(*led_status & 0x04 ? true : false); @@ -275,9 +277,9 @@ tcp_server_send_raw(tcp_frame); } -static void leds_status_changed(uint8_t left_led, uint8_t right_led) +static void leds_status_changed(void) { - //XXX find a better way to send the LEDs status + static bool prev_right_status, prev_left_status; tcp_frame_t tcp_frame; tcp_frame_zero(&tcp_frame); @@ -286,37 +288,24 @@ tcp_frame[1] = SS_DEFAULT; tcp_frame[2] = DATA_TP_RSP; tcp_frame[3] = SUBDATA_TP_STATUS; + // Only send the news statuses if the eyes are not closed. if (!(tux_status.led.mask)) { - if ((left_led <= 0x20) && (tux_status.led.left.on)) + if (prev_left_status != tux_status.led.left.on) { - tux_status.led.left.on = false; tcp_frame[4] = DATA_STATUS_LED_LEFT_INTENSITY; tcp_frame[5] = tux_status.led.left.on; tcp_server_send_raw(tcp_frame); } - else if ((left_led > 0x20) && !(tux_status.led.left.on)) - { - tux_status.led.left.on = true; - tcp_frame[4] = DATA_STATUS_LED_LEFT_INTENSITY; - tcp_frame[5] = tux_status.led.left.on; - tcp_server_send_raw(tcp_frame); - } - if ((right_led <= 0x20) && (tux_status.led.right.on)) + if (prev_right_status != tux_status.led.right.on) { - tux_status.led.right.on = false; tcp_frame[4] = DATA_STATUS_LED_RIGHT_INTENSITY; tcp_frame[5] = tux_status.led.right.on; tcp_server_send_raw(tcp_frame); } - else if ((right_led > 0x20) && !(tux_status.led.right.on)) - { - tux_status.led.right.on = true; - tcp_frame[4] = DATA_STATUS_LED_RIGHT_INTENSITY; - tcp_frame[5] = tux_status.led.right.on; - tcp_server_send_raw(tcp_frame); - } + prev_left_status = tux_status.led.left.on; + prev_right_status = tux_status.led.right.on; } } /* TODO Add functions to get the average battery voltage and status */ @@ -760,7 +749,7 @@ case STATUS_LED_CMD: update_leds(&new_status[1]); - leds_status_changed(new_status[1], new_status[2]); + leds_status_changed(); break; case PONG_CMD: Modified: daemon/trunk/status.c =================================================================== --- daemon/trunk/status.c 2008-01-25 11:30:28 UTC (rev 883) +++ daemon/trunk/status.c 2008-01-25 11:51:54 UTC (rev 884) @@ -41,8 +41,30 @@ /* * LEDs */ +/** + * Set the on/off status of the left LED. + */ +void set_led_left_on(int intensity) +{ + if ((intensity <= 0x20) && (tux_status.led.left.on)) + tux_status.led.left.on = false; + else if ((intensity > 0x20) && !(tux_status.led.left.on)) + tux_status.led.left.on = true; +} /** + * Set the on/off status of the right LED. + */ +void set_led_right_on(int intensity) +{ + if ((intensity <= 0x20) && (tux_status.led.right.on)) + tux_status.led.right.on = false; + else if ((intensity > 0x20) && !(tux_status.led.right.on)) + tux_status.led.right.on = true; +} + + +/** * Set the intensity status of the left LED. */ void set_led_left_intensity(int intensity) Modified: daemon/trunk/status.h =================================================================== --- daemon/trunk/status.h 2008-01-25 11:30:28 UTC (rev 883) +++ daemon/trunk/status.h 2008-01-25 11:51:54 UTC (rev 884) @@ -217,6 +217,8 @@ /** * \name LEDs accessors and mutators. * @{ */ +extern void set_led_left_on(int intensity); +extern void set_led_right_on(int intensity); extern void set_led_left_intensity(int intensity); extern int get_led_left_intensity(void); extern void set_led_left_fading(bool fading); |