[tuxdroid-svn] r1170 - software_suite_v2/middleware/tuxdriver/trunk/src
Status: Beta
Brought to you by:
ks156
From: eFfeM <c2m...@c2...> - 2008-05-17 11:39:08
|
Author: eFfeM Date: 2008-05-17 13:38:57 +0200 (Sat, 17 May 2008) New Revision: 1170 Modified: software_suite_v2/middleware/tuxdriver/trunk/src/tux_battery.c software_suite_v2/middleware/tuxdriver/trunk/src/tux_descriptor.c software_suite_v2/middleware/tuxdriver/trunk/src/tux_driver.c software_suite_v2/middleware/tuxdriver/trunk/src/tux_eyes.c software_suite_v2/middleware/tuxdriver/trunk/src/tux_mouth.c software_suite_v2/middleware/tuxdriver/trunk/src/tux_pong.c software_suite_v2/middleware/tuxdriver/trunk/src/tux_sound_flash.c software_suite_v2/middleware/tuxdriver/trunk/src/tux_spinning.c software_suite_v2/middleware/tuxdriver/trunk/src/tux_sw_status.c software_suite_v2/middleware/tuxdriver/trunk/src/tux_sw_status.h software_suite_v2/middleware/tuxdriver/trunk/src/tux_user_inputs.c software_suite_v2/middleware/tuxdriver/trunk/src/tux_wings.c Log: reworked a lot of the status handling now handle the eventing in tux_sw_status.c for this in sw_status_t the following fields have been introduced: - event_threshold (to record the delta after which an event is done) - intvalue (to store integer values) - strvalue (to store string values) (not used yet). reworked ID_FMT_BOOL, ID_FMT_UINT8 and ID_FMT_INT to use these new value removed ID_FMT_INT8 (was not used) todo: string and float these changes also remove a lot of typecasts and some small mallocs Modified: software_suite_v2/middleware/tuxdriver/trunk/src/tux_battery.c =================================================================== --- software_suite_v2/middleware/tuxdriver/trunk/src/tux_battery.c 2008-05-16 14:32:08 UTC (rev 1169) +++ software_suite_v2/middleware/tuxdriver/trunk/src/tux_battery.c 2008-05-17 11:38:57 UTC (rev 1170) @@ -50,7 +50,6 @@ tux_battery_update_level(void) { int new_level = 0; - int old_level = 0; int adc_value; char *new_state_str = ""; char *old_state_str = ""; @@ -63,16 +62,13 @@ 1000 is to go to mV */ - old_level = *(int *)tux_sw_status_get_value(SW_ID_BATTERY_LEVEL); - delta = new_level - last_level_for_event; if ((delta > REPORTING_DELTA) || (delta < -REPORTING_DELTA)) { last_level_for_event = new_level; if (!hw_status_table.battery.motors_state) { - tux_sw_status_set_value(SW_ID_BATTERY_LEVEL, - (void *)&new_level, true); + tux_sw_status_set_intvalue(SW_ID_BATTERY_LEVEL, new_level, true); } if (new_level >= TUX_BATTERY_FULL_VALUE) @@ -114,10 +110,6 @@ } else { - if (old_level != new_level) - { - tux_sw_status_set_value(SW_ID_BATTERY_LEVEL, (void *)&new_level, - false); - } + tux_sw_status_set_intvalue(SW_ID_BATTERY_LEVEL, new_level, false); } } Modified: software_suite_v2/middleware/tuxdriver/trunk/src/tux_descriptor.c =================================================================== --- software_suite_v2/middleware/tuxdriver/trunk/src/tux_descriptor.c 2008-05-16 14:32:08 UTC (rev 1169) +++ software_suite_v2/middleware/tuxdriver/trunk/src/tux_descriptor.c 2008-05-17 11:38:57 UTC (rev 1170) @@ -43,9 +43,7 @@ LIBLOCAL void tux_descriptor_get(void) { - bool tmp_bool = false; - - tux_sw_status_set_value(SW_ID_DESCRIPTOR_COMPLETE, (void *)&tmp_bool, false); + tux_sw_status_set_intvalue(SW_ID_DESCRIPTOR_COMPLETE, false, false); tux_id_get_descriptor(); tux_firmware_get_descriptor(); tux_sound_flash_get_descripor(); @@ -119,9 +117,7 @@ LIBLOCAL void tux_descriptor_update(void) { - bool tmp_bool = true; - check_tux_has_changed(); - tux_sw_status_set_value(SW_ID_DESCRIPTOR_COMPLETE, (void *)&tmp_bool, true); + tux_sw_status_set_intvalue(SW_ID_DESCRIPTOR_COMPLETE, true, false); tux_descriptor_dump(); } Modified: software_suite_v2/middleware/tuxdriver/trunk/src/tux_driver.c =================================================================== --- software_suite_v2/middleware/tuxdriver/trunk/src/tux_driver.c 2008-05-16 14:32:08 UTC (rev 1169) +++ software_suite_v2/middleware/tuxdriver/trunk/src/tux_driver.c 2008-05-17 11:38:57 UTC (rev 1170) @@ -208,7 +208,7 @@ static void on_rf_state(unsigned char state) { - tux_sw_status_set_value(SW_ID_RF_STATE, (void *)&state, true); + tux_sw_status_set_intvalue(SW_ID_RF_STATE, state, true); if (state) { tux_descriptor_get(); @@ -223,14 +223,12 @@ static void on_usb_connect(void) { - bool state = true; - tux_descriptor_init(); tux_hw_status_init(); tux_sw_status_init(); tux_user_inputs_init(); tux_cmd_parser_init(); - tux_sw_status_set_value(SW_ID_DONGLE_PLUG, (void *)&state, true); + tux_sw_status_set_intvalue(SW_ID_DONGLE_PLUG, true, true); if (dongle_connected_funct) { dongle_connected_funct(); @@ -243,8 +241,7 @@ static void on_usb_disconnect(void) { - bool state = false; - tux_sw_status_set_value(SW_ID_DONGLE_PLUG, (void *)&state, true); + tux_sw_status_set_intvalue(SW_ID_DONGLE_PLUG, false, true); if (dongle_disconnected_funct) { dongle_disconnected_funct(); Modified: software_suite_v2/middleware/tuxdriver/trunk/src/tux_eyes.c =================================================================== --- software_suite_v2/middleware/tuxdriver/trunk/src/tux_eyes.c 2008-05-16 14:32:08 UTC (rev 1169) +++ software_suite_v2/middleware/tuxdriver/trunk/src/tux_eyes.c 2008-05-17 11:38:57 UTC (rev 1170) @@ -70,16 +70,11 @@ LIBLOCAL void tux_eyes_update_movements_remaining(void) { - unsigned char old_count, new_count; + unsigned char new_count; new_count = hw_status_table.position1.eyes_remaining_mvm; - old_count = *(unsigned char *)tux_sw_status_get_value(SW_ID_EYES_REMAINING_MVM); - if (new_count != old_count) - { - tux_sw_status_set_value(SW_ID_EYES_REMAINING_MVM, - (void *)&new_count, true); - } + tux_sw_status_set_intvalue(SW_ID_EYES_REMAINING_MVM, new_count, true); } /** Modified: software_suite_v2/middleware/tuxdriver/trunk/src/tux_mouth.c =================================================================== --- software_suite_v2/middleware/tuxdriver/trunk/src/tux_mouth.c 2008-05-16 14:32:08 UTC (rev 1169) +++ software_suite_v2/middleware/tuxdriver/trunk/src/tux_mouth.c 2008-05-17 11:38:57 UTC (rev 1170) @@ -70,16 +70,11 @@ LIBLOCAL void tux_mouth_update_movements_remaining(void) { - unsigned char old_count, new_count; + unsigned char new_count; new_count = hw_status_table.position1.mouth_remaining_mvm; - old_count = *(unsigned char *)tux_sw_status_get_value(SW_ID_MOUTH_REMAINING_MVM); - if (new_count != old_count) - { - tux_sw_status_set_value(SW_ID_MOUTH_REMAINING_MVM, - (void *)&new_count, true); - } + tux_sw_status_set_intvalue(SW_ID_MOUTH_REMAINING_MVM, new_count, true); } /** Modified: software_suite_v2/middleware/tuxdriver/trunk/src/tux_pong.c =================================================================== --- software_suite_v2/middleware/tuxdriver/trunk/src/tux_pong.c 2008-05-16 14:32:08 UTC (rev 1169) +++ software_suite_v2/middleware/tuxdriver/trunk/src/tux_pong.c 2008-05-17 11:38:57 UTC (rev 1170) @@ -78,7 +78,6 @@ { static unsigned char received_pong = 0; int average; - int last_average; received_pong++; @@ -88,12 +87,7 @@ { stack_insert(received_pong * 10); average = stack_average(); - last_average = *(int *)tux_sw_status_get_value(SW_ID_CONNECTION_QUALITY); - if (average != last_average) - { - tux_sw_status_set_value(SW_ID_CONNECTION_QUALITY, - (void *)&average, true); - } + tux_sw_status_set_intvalue(SW_ID_CONNECTION_QUALITY, average, true); } received_pong = 0; } Modified: software_suite_v2/middleware/tuxdriver/trunk/src/tux_sound_flash.c =================================================================== --- software_suite_v2/middleware/tuxdriver/trunk/src/tux_sound_flash.c 2008-05-16 14:32:08 UTC (rev 1169) +++ software_suite_v2/middleware/tuxdriver/trunk/src/tux_sound_flash.c 2008-05-17 11:38:57 UTC (rev 1170) @@ -166,17 +166,12 @@ LIBLOCAL void tux_sound_flash_update_general_play(void) { - unsigned char old_state, new_state; + unsigned char new_state; new_state = hw_status_table.sensors1.play_general_sound; new_state |= hw_status_table.sensors1.play_internal_sound; - old_state = *(unsigned char *)tux_sw_status_get_value(SW_ID_AUDIO_GENERAL_PLAY); - if (new_state != old_state) - { - tux_sw_status_set_value(SW_ID_AUDIO_GENERAL_PLAY, - (void *)&new_state, true); - } + tux_sw_status_set_intvalue(SW_ID_AUDIO_GENERAL_PLAY, new_state, true); } /** @@ -185,16 +180,11 @@ LIBLOCAL void tux_sound_flash_update_prog_current_track(void) { - unsigned char old_track, new_track; + unsigned char new_track; new_track = hw_status_table.flash_prog.current_state; - old_track = *(unsigned char *)tux_sw_status_get_value(SW_ID_FLASH_PROG_CURR_TRACK); - if (new_track != old_track) - { - tux_sw_status_set_value(SW_ID_FLASH_PROG_CURR_TRACK, - (void *)&new_track, true); - } + tux_sw_status_set_intvalue(SW_ID_FLASH_PROG_CURR_TRACK, new_track, true); } /** @@ -203,16 +193,11 @@ LIBLOCAL void tux_sound_flash_update_prog_last_track_size(void) { - int old_size, new_size; + int new_size; new_size = hw_status_table.flash_prog.last_sound_size; - old_size = *(int *)tux_sw_status_get_value(SW_ID_FLASH_PROG_LAST_TRACK_SIZE); - if (new_size != old_size) - { - tux_sw_status_set_value(SW_ID_FLASH_PROG_LAST_TRACK_SIZE, - (void *)&new_size, true); - } + tux_sw_status_set_intvalue(SW_ID_FLASH_PROG_LAST_TRACK_SIZE, new_size, true); } /** @@ -685,8 +670,8 @@ break; } curr_track_for_event = reflash_info.current_wav + 1; - tux_sw_status_set_value(SW_ID_SOUND_REFLASH_CURRENT_TRACK, - (void *)&curr_track_for_event, true); + tux_sw_status_set_intvalue(SW_ID_SOUND_REFLASH_CURRENT_TRACK, + curr_track_for_event, true); usleep(200000); /* Play current wav track */ if (!play_wav(reflash_info.wav_path[reflash_info.current_wav])) Modified: software_suite_v2/middleware/tuxdriver/trunk/src/tux_spinning.c =================================================================== --- software_suite_v2/middleware/tuxdriver/trunk/src/tux_spinning.c 2008-05-16 14:32:08 UTC (rev 1169) +++ software_suite_v2/middleware/tuxdriver/trunk/src/tux_spinning.c 2008-05-17 11:38:57 UTC (rev 1170) @@ -73,16 +73,11 @@ LIBLOCAL void tux_spinning_update_movements_remaining(void) { - unsigned char old_count, new_count; + unsigned char new_count; new_count = hw_status_table.position2.spin_remaining_mvm; - old_count = *(unsigned char *)tux_sw_status_get_value(SW_ID_SPINNING_REMAINING_MVM); - if (new_count != old_count) - { - tux_sw_status_set_value(SW_ID_SPINNING_REMAINING_MVM, - (void *)&new_count, true); - } + tux_sw_status_set_intvalue(SW_ID_SPINNING_REMAINING_MVM, new_count, true); } /** Modified: software_suite_v2/middleware/tuxdriver/trunk/src/tux_sw_status.c =================================================================== --- software_suite_v2/middleware/tuxdriver/trunk/src/tux_sw_status.c 2008-05-16 14:32:08 UTC (rev 1169) +++ software_suite_v2/middleware/tuxdriver/trunk/src/tux_sw_status.c 2008-05-17 11:38:57 UTC (rev 1170) @@ -18,6 +18,7 @@ * 02111-1307, USA. */ +#include <assert.h> #include <errno.h> #include <stdio.h> #include <string.h> @@ -51,20 +52,13 @@ switch(sw_status_table[id].value_fmt) { case ID_FMT_BOOL: - sw_status_table[id].value = malloc(sizeof(unsigned char)); - *(unsigned char *)sw_status_table[id].value = false; + sw_status_table[id].intvalue = 0; break; case ID_FMT_UINT8: - sw_status_table[id].value = malloc(sizeof(unsigned char)); - *(unsigned char *)sw_status_table[id].value = 0; + sw_status_table[id].intvalue = 0; break; - case ID_FMT_INT8: - sw_status_table[id].value = malloc(sizeof(char)); - *(char *)sw_status_table[id].value = 0; - break; case ID_FMT_INT: - sw_status_table[id].value = malloc(sizeof(int)); - *(int *)sw_status_table[id].value = 0; + sw_status_table[id].intvalue = 0; break; case ID_FMT_FLOAT: sw_status_table[id].value = malloc(sizeof(float)); @@ -331,8 +325,6 @@ return "bool"; case ID_FMT_UINT8: return "uint8"; - case ID_FMT_INT8: - return "int8"; case ID_FMT_INT: return "int"; case ID_FMT_FLOAT: @@ -344,6 +336,7 @@ } } +#include "log.h" /** * */ @@ -355,7 +348,7 @@ #endif switch (sw_status_table[id].value_fmt) { case ID_FMT_BOOL: - if (*(unsigned char *)sw_status_table[id].value) + if (sw_status_table[id].intvalue) { strcpy(str, "True"); } @@ -365,14 +358,10 @@ } break; case ID_FMT_UINT8: - sprintf(str, "%d", - *(unsigned char *)sw_status_table[id].value); + sprintf(str, "%d", sw_status_table[id].intvalue); break; - case ID_FMT_INT8: - sprintf(str, "%d", *(char *)sw_status_table[id].value); - break; case ID_FMT_INT: - sprintf(str, "%d", *(int *)sw_status_table[id].value); + sprintf(str, "%d", sw_status_table[id].intvalue); break; case ID_FMT_FLOAT: sprintf(str, "%f", *(float *)sw_status_table[id].value); @@ -464,6 +453,53 @@ * */ LIBLOCAL void +tux_sw_status_set_intvalue(int id, int value, bool make_event) +{ + int delta; + char state_str[1024]; + + if (make_event) + { +#ifdef USE_MUTEX + mutex_lock(__status_mutex); +#endif + + delta = sw_status_table[id].intvalue - value; + if (delta < 0) + { + delta = -delta; + } + +#ifdef USE_MUTEX + mutex_unlock(__status_mutex); +#endif + + if (event_funct) + { + if (delta >= sw_status_table[id].event_threshold) + { + sw_status_table[id].intvalue = value; + tux_sw_status_get_state_str(id, state_str); + event_funct(state_str); + } + } + } + +#ifdef USE_MUTEX + mutex_lock(__status_mutex); +#endif + + sw_status_table[id].lu_time = get_time(); + +#ifdef USE_MUTEX + mutex_unlock(__status_mutex); +#endif +} + +/** + * + */ +LIBLOCAL void tux_sw_status_set_value(int id, const void *value, bool make_event) { char state_str[1024] = ""; @@ -474,15 +510,15 @@ switch(sw_status_table[id].value_fmt) { case ID_FMT_BOOL: + assert("set_value: should not happen"); *(unsigned char *)sw_status_table[id].value = *(unsigned char *)value; break; case ID_FMT_UINT8: + assert("set_value: should not happen"); *(unsigned char *)sw_status_table[id].value = *(unsigned char *)value; break; - case ID_FMT_INT8: - *(char *)sw_status_table[id].value = *(char *)value; - break; case ID_FMT_INT: + assert("set_value: should not happen"); *(int *)sw_status_table[id].value = *(int *)value; break; case ID_FMT_FLOAT: @@ -529,15 +565,15 @@ switch(sw_status_table[id].value_fmt) { case ID_FMT_BOOL: + assert("get_value: should not happen"); value = sw_status_table[id].value; break; case ID_FMT_UINT8: + assert("get_value: should not happen"); value = sw_status_table[id].value; break; - case ID_FMT_INT8: - value = sw_status_table[id].value; - break; case ID_FMT_INT: + assert("get_value: should not happen"); value = sw_status_table[id].value; break; case ID_FMT_FLOAT: Modified: software_suite_v2/middleware/tuxdriver/trunk/src/tux_sw_status.h =================================================================== --- software_suite_v2/middleware/tuxdriver/trunk/src/tux_sw_status.h 2008-05-16 14:32:08 UTC (rev 1169) +++ software_suite_v2/middleware/tuxdriver/trunk/src/tux_sw_status.h 2008-05-17 11:38:57 UTC (rev 1170) @@ -96,7 +96,6 @@ typedef enum { ID_FMT_BOOL = 0, ID_FMT_UINT8, - ID_FMT_INT8, ID_FMT_INT, ID_FMT_FLOAT, ID_FMT_STRING, @@ -106,12 +105,23 @@ typedef void(*event_callback_t)(char *event); +/* + notes on the following struct: + - strvalue is a pointer. it should only be used for static data + - intvalue is used for bool, uint8, int8 + - event_threshold is the threshold value; if the threshold is exceeded + the value is evented; for string values 0 means not evented, + 1 means evented if string changes +*/ typedef struct { int id; char name[128]; int value_fmt; void *value; + int event_threshold; + int intvalue; + const char *strvalue; char value_doc[1024]; double lu_time; } sw_status_t; @@ -122,6 +132,7 @@ extern void tux_sw_status_init(void); extern void tux_sw_status_set_value(int id, const void *value, bool make_event); +extern void tux_sw_status_set_intvalue(int id, int value, bool make_event); extern void *tux_sw_status_get_value(int id); extern TuxDrvError tux_sw_status_name_from_id(int id, char* name); extern TuxDrvError tux_sw_status_id_from_name(const char* name, int *id); Modified: software_suite_v2/middleware/tuxdriver/trunk/src/tux_user_inputs.c =================================================================== --- software_suite_v2/middleware/tuxdriver/trunk/src/tux_user_inputs.c 2008-05-16 14:32:08 UTC (rev 1169) +++ software_suite_v2/middleware/tuxdriver/trunk/src/tux_user_inputs.c 2008-05-17 11:38:57 UTC (rev 1170) @@ -52,16 +52,11 @@ LIBLOCAL void tux_user_inputs_update_left_wing_button(void) { - unsigned char old_state, new_state; + unsigned char new_state; new_state = hw_status_table.sensors1.sensors.bits.left_wing_push_button; - old_state = *(unsigned char *)tux_sw_status_get_value(SW_ID_LEFT_WING_BUTTON); - if (new_state != old_state) - { - tux_sw_status_set_value(SW_ID_LEFT_WING_BUTTON, - (void *)&new_state, true); - } + tux_sw_status_set_intvalue(SW_ID_LEFT_WING_BUTTON, new_state, true); } /** @@ -70,16 +65,11 @@ LIBLOCAL void tux_user_inputs_update_right_wing_button(void) { - unsigned char old_state, new_state; + unsigned char new_state; new_state = hw_status_table.sensors1.sensors.bits.right_wing_push_button; - old_state = *(unsigned char *)tux_sw_status_get_value(SW_ID_RIGHT_WING_BUTTON); - if (new_state != old_state) - { - tux_sw_status_set_value(SW_ID_RIGHT_WING_BUTTON, - (void *)&new_state, true); - } + tux_sw_status_set_intvalue(SW_ID_RIGHT_WING_BUTTON, new_state, true); } /** @@ -88,15 +78,11 @@ LIBLOCAL void tux_user_inputs_update_head_button(void) { - unsigned char old_state, new_state; + unsigned char new_state; new_state = hw_status_table.sensors1.sensors.bits.head_push_button; - old_state = *(unsigned char *)tux_sw_status_get_value(SW_ID_HEAD_BUTTON); - - if (new_state != old_state) - { - tux_sw_status_set_value(SW_ID_HEAD_BUTTON, (void *)&new_state, true); - } + + tux_sw_status_set_intvalue(SW_ID_HEAD_BUTTON, new_state, true); } /** Modified: software_suite_v2/middleware/tuxdriver/trunk/src/tux_wings.c =================================================================== --- software_suite_v2/middleware/tuxdriver/trunk/src/tux_wings.c 2008-05-16 14:32:08 UTC (rev 1169) +++ software_suite_v2/middleware/tuxdriver/trunk/src/tux_wings.c 2008-05-17 11:38:57 UTC (rev 1170) @@ -62,16 +62,11 @@ LIBLOCAL void tux_wings_update_movements_remaining(void) { - unsigned char old_count, new_count; + unsigned char new_count; new_count = hw_status_table.position1.wings_remaining_mvm; - old_count = *(unsigned char *)tux_sw_status_get_value(SW_ID_WINGS_REMAINING_MVM); - if (new_count != old_count) - { - tux_sw_status_set_value(SW_ID_WINGS_REMAINING_MVM, - (void *)&new_count, true); - } + tux_sw_status_set_intvalue(SW_ID_WINGS_REMAINING_MVM, new_count, true); } /** |