From f7ae632d198f1061c104b96adfa2610b797ba0c1 Mon Sep 17 00:00:00 2001 From: shalecraig Date: Sun, 23 Mar 2014 10:28:04 -0700 Subject: [PATCH 01/19] Updated the phony target in the makefile. Removed accompanying TODO --- Makefile | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Makefile b/Makefile index ca10bbc..6b9563c 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,4 @@ -# TODO: update this. -PHONY = default echo/objects echo/sources list tests run bin clean +PHONY = default echo/objects echo/sources list tests bin/tests run bin clean SOURCES_C = $(wildcard src/*.c) TEST_CC = $(wildcard test/*.cc) From c9bc036a3d3b59fbe13bedae5adc57f185a69eef Mon Sep 17 00:00:00 2001 From: shalecraig Date: Sun, 23 Mar 2014 10:30:33 -0700 Subject: [PATCH 02/19] There is no file that has MIN and MAX, removed TODO --- src/accel.c | 1 - 1 file changed, 1 deletion(-) diff --git a/src/accel.c b/src/accel.c index a55e381..3d0396c 100644 --- a/src/accel.c +++ b/src/accel.c @@ -88,7 +88,6 @@ typedef struct internalAccelState { // TODO: should we store the offsets as floats instead? #define ALPHA 1.0 -// TODO: include these from a header file? #define MIN(a, b) (((a) < (b)) ? (a) : (b)) // #define MAX(a,b) (((a)>(b))?(a):(b)) From 47579b3c4740a0eea97f31e8471157c54dbad302 Mon Sep 17 00:00:00 2001 From: shalecraig Date: Sun, 23 Mar 2014 11:36:48 -0700 Subject: [PATCH 03/19] Renamed method to be internal, moved TODO around --- sample/simple-accelerometer/src/accel.c | 8 ++++---- src/accel.c | 7 ++++--- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/sample/simple-accelerometer/src/accel.c b/sample/simple-accelerometer/src/accel.c index a55e381..2594fec 100644 --- a/sample/simple-accelerometer/src/accel.c +++ b/sample/simple-accelerometer/src/accel.c @@ -88,10 +88,11 @@ typedef struct internalAccelState { // TODO: should we store the offsets as floats instead? #define ALPHA 1.0 -// TODO: include these from a header file? #define MIN(a, b) (((a) < (b)) ? (a) : (b)) // #define MAX(a,b) (((a)>(b))?(a):(b)) +// TODO: write tests for "internal" functions. + void accel_destroy_gesture(accel_gesture **gesture, int dimensions) { if (gesture == NULL || *gesture == NULL) { return; @@ -123,11 +124,10 @@ void accel_destroy_gesture(accel_gesture **gesture, int dimensions) { *gesture = NULL; } -int accel_generate_gesture(accel_state *state, accel_gesture **gesture) { +int internal_accel_generate_gesture(accel_state *state, accel_gesture **gesture) { PRECONDITION_VALID_STATE(state); PRECONDITION_NOT_NULL(gesture); - // TODO: write a test for this value. PRECONDITION_NULL((*gesture)); size_t gesture_size = sizeof(accel_gesture); @@ -260,7 +260,7 @@ int accel_start_record_gesture(accel_state *state, int *gesture) { state->state->gestures[*gesture] = NULL; - int result = accel_generate_gesture(state, &(state->state->gestures[*gesture])); + int result = internal_accel_generate_gesture(state, &(state->state->gestures[*gesture])); if (result != ACCEL_SUCCESS) { *gesture = -1; if (state->state->num_gestures_saved == 1) { diff --git a/src/accel.c b/src/accel.c index 3d0396c..2594fec 100644 --- a/src/accel.c +++ b/src/accel.c @@ -91,6 +91,8 @@ typedef struct internalAccelState { #define MIN(a, b) (((a) < (b)) ? (a) : (b)) // #define MAX(a,b) (((a)>(b))?(a):(b)) +// TODO: write tests for "internal" functions. + void accel_destroy_gesture(accel_gesture **gesture, int dimensions) { if (gesture == NULL || *gesture == NULL) { return; @@ -122,11 +124,10 @@ void accel_destroy_gesture(accel_gesture **gesture, int dimensions) { *gesture = NULL; } -int accel_generate_gesture(accel_state *state, accel_gesture **gesture) { +int internal_accel_generate_gesture(accel_state *state, accel_gesture **gesture) { PRECONDITION_VALID_STATE(state); PRECONDITION_NOT_NULL(gesture); - // TODO: write a test for this value. PRECONDITION_NULL((*gesture)); size_t gesture_size = sizeof(accel_gesture); @@ -259,7 +260,7 @@ int accel_start_record_gesture(accel_state *state, int *gesture) { state->state->gestures[*gesture] = NULL; - int result = accel_generate_gesture(state, &(state->state->gestures[*gesture])); + int result = internal_accel_generate_gesture(state, &(state->state->gestures[*gesture])); if (result != ACCEL_SUCCESS) { *gesture = -1; if (state->state->num_gestures_saved == 1) { From b4555c05aed129566b0b456325febacda0873a33 Mon Sep 17 00:00:00 2001 From: shalecraig Date: Sun, 23 Mar 2014 11:53:24 -0700 Subject: [PATCH 04/19] Removed build files --- sample/simple-accelerometer/.gitignore | 2 ++ sample/simple-accelerometer/.lock-waf_linux2_build | 8 -------- 2 files changed, 2 insertions(+), 8 deletions(-) delete mode 100644 sample/simple-accelerometer/.lock-waf_linux2_build diff --git a/sample/simple-accelerometer/.gitignore b/sample/simple-accelerometer/.gitignore index 9ed9d4f..f7cd408 100644 --- a/sample/simple-accelerometer/.gitignore +++ b/sample/simple-accelerometer/.gitignore @@ -1,3 +1,5 @@ # Ignore build generated files build + +.lock-waf_linux2_build diff --git a/sample/simple-accelerometer/.lock-waf_linux2_build b/sample/simple-accelerometer/.lock-waf_linux2_build deleted file mode 100644 index aed0a81..0000000 --- a/sample/simple-accelerometer/.lock-waf_linux2_build +++ /dev/null @@ -1,8 +0,0 @@ -argv = ['/home/vagrant/pebble-dev/PebbleSDK-2.0-BETA5/Pebble/waf', 'configure', 'build'] -environ = {'XDG_RUNTIME_DIR': '/run/user/1000', 'LESS': '-R', 'LC_CTYPE': 'en_US.UTF-8', 'SSH_CLIENT': '10.0.2.2 49994 22', 'LSCOLORS': 'Gxfxcxdxbxegedabagacad', 'LOGNAME': 'vagrant', 'USER': 'vagrant', 'PATH': '/home/vagrant/pebble-dev/PebbleSDK-2.0-BETA5/arm-cs-tools/bin:/home/vagrant/bin:/usr/local/bin:/home/vagrant/pebble-dev/PebbleSDK-2.0-BETA5/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games', 'HOME': '/home/vagrant', 'XDG_SESSION_ID': '11', '_': '/home/vagrant/pebble-dev/PebbleSDK-2.0-BETA5/bin/pebble', 'LANG': 'en_US.UTF-8', 'TERM': 'xterm-256color', 'SHELL': '/bin/zsh', 'XDG_SESSION_COOKIE': '16ccae8f6a53e04feed02d6f52cb75dd-1390072954.343424-1847087206', 'SHLVL': '1', 'SSH_TTY': '/dev/pts/1', 'OLDPWD': '/home/vagrant', 'PWD': '/vagrant/mount/code/accel/sample/simple-accelerometer', 'GREP_OPTIONS': '--color=auto', 'MAIL': '/var/mail/vagrant', 'GREP_COLOR': '1;32', 'SSH_CONNECTION': '10.0.2.2 49994 10.0.2.15 22', 'PAGER': 'less'} -files = ['/vagrant/mount/code/accel/sample/simple-accelerometer/wscript'] -hash = -326433459 -options = {'files': '', 'jobs': 1, 'verbose': 0, 'nocache': False, 'progress_bar': 0, 'timestamp': None, 'distcheck_args': None, 'top': '', 'destdir': '', 'keep': 0, 'zones': '', 'debug': False, 'prefix': '/usr/local/', 'download': False, 'force': False, 'targets': '', 'out': ''} -out_dir = '/vagrant/mount/code/accel/sample/simple-accelerometer/build' -run_dir = '/vagrant/mount/code/accel/sample/simple-accelerometer' -top_dir = '/vagrant/mount/code/accel/sample/simple-accelerometer' From f9374f4096348646ad41ec45b42c6f67129b4cec Mon Sep 17 00:00:00 2001 From: shalecraig Date: Sun, 23 Mar 2014 12:36:57 -0700 Subject: [PATCH 05/19] Added arg to make the simple-acc.. project build. --- sample/simple-accelerometer/src/simple-accelerometer.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sample/simple-accelerometer/src/simple-accelerometer.c b/sample/simple-accelerometer/src/simple-accelerometer.c index ab89790..d968f01 100644 --- a/sample/simple-accelerometer/src/simple-accelerometer.c +++ b/sample/simple-accelerometer/src/simple-accelerometer.c @@ -33,7 +33,7 @@ static void select_click_handler(ClickRecognizerRef recognizer, void *context) { static void up_click_handler(ClickRecognizerRef recognizer, void *context) { if (state == NULL) { - int result = accel_generate_state(&state, 3, 1); + int result = accel_generate_state(&state, 3, 1, NULL, 0); if (result == ACCEL_SUCCESS) { text_layer_set_text(text_layer, "Allocated Successfuly"); } else { From 549943a9a8c2efdc47e5e9c5c69739d61b03a5b0 Mon Sep 17 00:00:00 2001 From: shalecraig Date: Sun, 23 Mar 2014 12:37:10 -0700 Subject: [PATCH 06/19] Updated arguments to be more strict - Closer to pebble arguments - More strict (more warnings is better) --- Makefile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index ca10bbc..f3ce2cf 100644 --- a/Makefile +++ b/Makefile @@ -11,8 +11,9 @@ TEST_OBJECTS = $(subst test,bin,$(_TEST_OBJECTS_TMP)) EXEC = tests +# Pebble args: -std=c99 -fdata-sections -g -Wall -Wextra -Werror -Wno-unused-parameter -Wno-error=unused-function -Wno-error=unused-variable -fPIE -DRELEASE -Os # removed: -Wl,-z,relro -Wl,-z,now -C_ARGS = -DIS_NOT_PEBBLE -pipe -m64 -ansi -fPIC -g -O3 -fno-exceptions -fstack-protector -fvisibility=hidden -W -Wall -Wno-unused-parameter -Wno-unused-function -Wno-unused-label -Wpointer-arith -Wformat -Wreturn-type -Wsign-compare -Wmultichar -Wformat-nonliteral -Winit-self -Wuninitialized -Wno-deprecated -Wformat-security -Werror -Wcomment -Wtrigraphs -Wundef -Wunused-macros -pedantic-errors -std=c99 +C_ARGS = -DIS_NOT_PEBBLE -DRELEASE -pipe -m64 -ansi -fPIC -fPIE -g -Os -ffunction-sections -fno-exceptions -fstack-protector-all -fvisibility=hidden -W -Wall -Wextra -Wunused-parameter -Wunused-function -Wunused-label -Wpointer-arith -Wformat -Wreturn-type -Wsign-compare -Wmultichar -Wformat-nonliteral -Winit-self -Wuninitialized -Wdeprecated -Wformat-security -Werror -Wcomment -Wtrigraphs -Wundef -Wunused-macros -pedantic-errors -std=c99 # removed: -lpthread, -Wl,-z,relro -Wl,-z,now CXX_ARGS = -DIS_NOT_PEBBLE -lpthread -pipe -m64 -ansi -fPIC -g -O3 -fno-exceptions -fstack-protector -fvisibility=hidden -W -Wall -Wno-unused-parameter -Wno-unused-function -Wno-unused-label -Wpointer-arith -Wformat -Wreturn-type -Wsign-compare -Wmultichar -Wformat-nonliteral -Winit-self -Wuninitialized -Wno-deprecated -Wformat-security -Wall From 9ec21d3c53c8b7e9b4d896bc601b568c7820548a Mon Sep 17 00:00:00 2001 From: shalecraig Date: Sun, 23 Mar 2014 12:56:03 -0700 Subject: [PATCH 07/19] Started initial work on the moving_avg_ticker --- .../src/moving_avg_ticker.c | 21 ++++++++++--------- .../src/moving_avg_ticker.h | 1 + src/moving_avg_ticker.c | 21 ++++++++++--------- src/moving_avg_ticker.h | 1 + 4 files changed, 24 insertions(+), 20 deletions(-) diff --git a/sample/simple-accelerometer/src/moving_avg_ticker.c b/sample/simple-accelerometer/src/moving_avg_ticker.c index eb243d7..67e05b0 100644 --- a/sample/simple-accelerometer/src/moving_avg_ticker.c +++ b/sample/simple-accelerometer/src/moving_avg_ticker.c @@ -8,6 +8,7 @@ return MOVING_AVG_PARAM_ERROR; \ } +// TODO: make this into a macro. int precondition_valid_moving_avg_values(moving_avg_values *input) { PRECONDITION_NOT_NULL(input); @@ -29,7 +30,7 @@ int precondition_valid_moving_avg_values(moving_avg_values *input) { if (input->max_subtotal_size <= 0) { return MOVING_AVG_INTERNAL_ERROR; } - return 0; + return MOVING_AVG_SUCCESS; } int allocate_moving_avg(int num_wbuf, int subtotal_sizes, moving_avg_values **allocated) { @@ -62,12 +63,12 @@ int allocate_moving_avg(int num_wbuf, int subtotal_sizes, moving_avg_values **al } (*allocated)->wbuf = wbuf; (*allocated)->wbuf_len = num_wbuf; - return 0; + return MOVING_AVG_SUCCESS; } int reset_moving_avg(moving_avg_values *reset) { int value = precondition_valid_moving_avg_values(reset); - if (value != 0) { + if (value != MOVING_AVG_SUCCESS) { return value; } @@ -75,12 +76,12 @@ int reset_moving_avg(moving_avg_values *reset) { reset->wbuf_end = reset->wbuf_len - 1; reset->subtotal = 0; reset->subtotal_size = 0; - return 0; + return MOVING_AVG_SUCCESS; } int append_to_moving_avg(moving_avg_values *value, int appended, bool *is_at_end) { int is_valid_return_value = precondition_valid_moving_avg_values(value); - if (is_valid_return_value != 0) { + if (is_valid_return_value != MOVING_AVG_SUCCESS) { return is_valid_return_value; } @@ -90,7 +91,7 @@ int append_to_moving_avg(moving_avg_values *value, int appended, bool *is_at_end value->subtotal += appended; if (value->subtotal_size != value->max_subtotal_size) { *is_at_end = false; - return 0; + return MOVING_AVG_SUCCESS; } value->wbuf_end = (value->wbuf_end + 1) % value->wbuf_len; @@ -99,12 +100,12 @@ int append_to_moving_avg(moving_avg_values *value, int appended, bool *is_at_end value->subtotal = 0; value->subtotal_size = 0; *is_at_end = true; - return 0; + return MOVING_AVG_SUCCESS; } int get_latest_frame_moving_avg(moving_avg_values *value, int *frame) { int is_valid_return_value = precondition_valid_moving_avg_values(value); - if (is_valid_return_value != 0) { + if (is_valid_return_value != MOVING_AVG_SUCCESS) { return is_valid_return_value; } @@ -115,7 +116,7 @@ int get_latest_frame_moving_avg(moving_avg_values *value, int *frame) { sum += value->wbuf[i] * 1.0 / value->wbuf_len; } *frame = (int)sum; - return 0; + return MOVING_AVG_SUCCESS; } int free_moving_avg(moving_avg_values **value) { @@ -128,5 +129,5 @@ int free_moving_avg(moving_avg_values **value) { } free(*value); *value = NULL; - return 0; + return MOVING_AVG_SUCCESS; } diff --git a/sample/simple-accelerometer/src/moving_avg_ticker.h b/sample/simple-accelerometer/src/moving_avg_ticker.h index 346a9a7..5a4d06d 100644 --- a/sample/simple-accelerometer/src/moving_avg_ticker.h +++ b/sample/simple-accelerometer/src/moving_avg_ticker.h @@ -7,6 +7,7 @@ extern "C" { #include "accel.h" +#define MOVING_AVG_SUCCESS ACCEL_SUCCESS #define MOVING_AVG_PARAM_ERROR ACCEL_PARAM_ERROR #define MOVING_AVG_INTERNAL_ERROR ACCEL_INTERNAL_ERROR #define MOVING_AVG_MALLOC_ERROR ACCEL_MALLOC_ERROR diff --git a/src/moving_avg_ticker.c b/src/moving_avg_ticker.c index eb243d7..67e05b0 100644 --- a/src/moving_avg_ticker.c +++ b/src/moving_avg_ticker.c @@ -8,6 +8,7 @@ return MOVING_AVG_PARAM_ERROR; \ } +// TODO: make this into a macro. int precondition_valid_moving_avg_values(moving_avg_values *input) { PRECONDITION_NOT_NULL(input); @@ -29,7 +30,7 @@ int precondition_valid_moving_avg_values(moving_avg_values *input) { if (input->max_subtotal_size <= 0) { return MOVING_AVG_INTERNAL_ERROR; } - return 0; + return MOVING_AVG_SUCCESS; } int allocate_moving_avg(int num_wbuf, int subtotal_sizes, moving_avg_values **allocated) { @@ -62,12 +63,12 @@ int allocate_moving_avg(int num_wbuf, int subtotal_sizes, moving_avg_values **al } (*allocated)->wbuf = wbuf; (*allocated)->wbuf_len = num_wbuf; - return 0; + return MOVING_AVG_SUCCESS; } int reset_moving_avg(moving_avg_values *reset) { int value = precondition_valid_moving_avg_values(reset); - if (value != 0) { + if (value != MOVING_AVG_SUCCESS) { return value; } @@ -75,12 +76,12 @@ int reset_moving_avg(moving_avg_values *reset) { reset->wbuf_end = reset->wbuf_len - 1; reset->subtotal = 0; reset->subtotal_size = 0; - return 0; + return MOVING_AVG_SUCCESS; } int append_to_moving_avg(moving_avg_values *value, int appended, bool *is_at_end) { int is_valid_return_value = precondition_valid_moving_avg_values(value); - if (is_valid_return_value != 0) { + if (is_valid_return_value != MOVING_AVG_SUCCESS) { return is_valid_return_value; } @@ -90,7 +91,7 @@ int append_to_moving_avg(moving_avg_values *value, int appended, bool *is_at_end value->subtotal += appended; if (value->subtotal_size != value->max_subtotal_size) { *is_at_end = false; - return 0; + return MOVING_AVG_SUCCESS; } value->wbuf_end = (value->wbuf_end + 1) % value->wbuf_len; @@ -99,12 +100,12 @@ int append_to_moving_avg(moving_avg_values *value, int appended, bool *is_at_end value->subtotal = 0; value->subtotal_size = 0; *is_at_end = true; - return 0; + return MOVING_AVG_SUCCESS; } int get_latest_frame_moving_avg(moving_avg_values *value, int *frame) { int is_valid_return_value = precondition_valid_moving_avg_values(value); - if (is_valid_return_value != 0) { + if (is_valid_return_value != MOVING_AVG_SUCCESS) { return is_valid_return_value; } @@ -115,7 +116,7 @@ int get_latest_frame_moving_avg(moving_avg_values *value, int *frame) { sum += value->wbuf[i] * 1.0 / value->wbuf_len; } *frame = (int)sum; - return 0; + return MOVING_AVG_SUCCESS; } int free_moving_avg(moving_avg_values **value) { @@ -128,5 +129,5 @@ int free_moving_avg(moving_avg_values **value) { } free(*value); *value = NULL; - return 0; + return MOVING_AVG_SUCCESS; } diff --git a/src/moving_avg_ticker.h b/src/moving_avg_ticker.h index 346a9a7..5a4d06d 100644 --- a/src/moving_avg_ticker.h +++ b/src/moving_avg_ticker.h @@ -7,6 +7,7 @@ extern "C" { #include "accel.h" +#define MOVING_AVG_SUCCESS ACCEL_SUCCESS #define MOVING_AVG_PARAM_ERROR ACCEL_PARAM_ERROR #define MOVING_AVG_INTERNAL_ERROR ACCEL_INTERNAL_ERROR #define MOVING_AVG_MALLOC_ERROR ACCEL_MALLOC_ERROR From c83f5d5aa96c77de5d8f60bb54f95afbe9bfaa0e Mon Sep 17 00:00:00 2001 From: shalecraig Date: Sun, 23 Mar 2014 13:02:42 -0700 Subject: [PATCH 08/19] Moved macro definition around --- sample/simple-accelerometer/src/accel.c | 6 ------ sample/simple-accelerometer/src/accel.h | 6 ++++++ src/accel.c | 6 ------ src/accel.h | 6 ++++++ 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/sample/simple-accelerometer/src/accel.c b/sample/simple-accelerometer/src/accel.c index 2594fec..d9d5cee 100644 --- a/sample/simple-accelerometer/src/accel.c +++ b/sample/simple-accelerometer/src/accel.c @@ -1,9 +1,3 @@ -#ifndef IS_NOT_PEBBLE -#ifndef PEBBLE -#define PEBBLE -#endif -#endif - #ifdef PEBBLE #include #include diff --git a/sample/simple-accelerometer/src/accel.h b/sample/simple-accelerometer/src/accel.h index eda1110..97e3ca8 100644 --- a/sample/simple-accelerometer/src/accel.h +++ b/sample/simple-accelerometer/src/accel.h @@ -1,6 +1,12 @@ #ifndef ACCEL_H #define ACCEL_H +#ifndef IS_NOT_PEBBLE +#ifndef PEBBLE +#define PEBBLE +#endif +#endif + #ifdef __cplusplus extern "C" { #endif diff --git a/src/accel.c b/src/accel.c index 2594fec..d9d5cee 100644 --- a/src/accel.c +++ b/src/accel.c @@ -1,9 +1,3 @@ -#ifndef IS_NOT_PEBBLE -#ifndef PEBBLE -#define PEBBLE -#endif -#endif - #ifdef PEBBLE #include #include diff --git a/src/accel.h b/src/accel.h index eda1110..97e3ca8 100644 --- a/src/accel.h +++ b/src/accel.h @@ -1,6 +1,12 @@ #ifndef ACCEL_H #define ACCEL_H +#ifndef IS_NOT_PEBBLE +#ifndef PEBBLE +#define PEBBLE +#endif +#endif + #ifdef __cplusplus extern "C" { #endif From b7399353da6f2fc4922ab35149c2e1e0733acecb Mon Sep 17 00:00:00 2001 From: shalecraig Date: Sun, 23 Mar 2014 13:04:48 -0700 Subject: [PATCH 09/19] Change the type of wbuf to uint32_t --- sample/simple-accelerometer/src/moving_avg_ticker.c | 4 ++-- sample/simple-accelerometer/src/moving_avg_ticker.h | 4 ++-- src/moving_avg_ticker.c | 4 ++-- src/moving_avg_ticker.h | 4 ++-- test/main.cc | 3 --- 5 files changed, 8 insertions(+), 11 deletions(-) diff --git a/sample/simple-accelerometer/src/moving_avg_ticker.c b/sample/simple-accelerometer/src/moving_avg_ticker.c index 67e05b0..471f86e 100644 --- a/sample/simple-accelerometer/src/moving_avg_ticker.c +++ b/sample/simple-accelerometer/src/moving_avg_ticker.c @@ -33,7 +33,7 @@ int precondition_valid_moving_avg_values(moving_avg_values *input) { return MOVING_AVG_SUCCESS; } -int allocate_moving_avg(int num_wbuf, int subtotal_sizes, moving_avg_values **allocated) { +int allocate_moving_avg(uint32_t num_wbuf, int subtotal_sizes, moving_avg_values **allocated) { PRECONDITION_NOT_NULL(allocated); if (*allocated != NULL) { return MOVING_AVG_PARAM_ERROR; @@ -54,7 +54,7 @@ int allocate_moving_avg(int num_wbuf, int subtotal_sizes, moving_avg_values **al memset(*allocated, 0, size); (*allocated)->max_subtotal_size = subtotal_sizes; - int *wbuf = (int *)calloc(num_wbuf, sizeof(int)); + uint32_t *wbuf = (uint32_t *)calloc(num_wbuf, sizeof(uint32_t)); if (wbuf == NULL) { // Run away, fast! free(allocated); diff --git a/sample/simple-accelerometer/src/moving_avg_ticker.h b/sample/simple-accelerometer/src/moving_avg_ticker.h index 5a4d06d..be787db 100644 --- a/sample/simple-accelerometer/src/moving_avg_ticker.h +++ b/sample/simple-accelerometer/src/moving_avg_ticker.h @@ -14,7 +14,7 @@ extern "C" { typedef struct moving_avg_values { // Circular buffer - int *wbuf; + uint32_t *wbuf; int wbuf_end; int wbuf_len; @@ -23,7 +23,7 @@ typedef struct moving_avg_values { int max_subtotal_size; } moving_avg_values; -int allocate_moving_avg(int num_wbuf, int subtotal_sizes, moving_avg_values **allocated); +int allocate_moving_avg(uint32_t num_wbuf, int subtotal_sizes, moving_avg_values **allocated); int reset_moving_avg(moving_avg_values *reset); diff --git a/src/moving_avg_ticker.c b/src/moving_avg_ticker.c index 67e05b0..471f86e 100644 --- a/src/moving_avg_ticker.c +++ b/src/moving_avg_ticker.c @@ -33,7 +33,7 @@ int precondition_valid_moving_avg_values(moving_avg_values *input) { return MOVING_AVG_SUCCESS; } -int allocate_moving_avg(int num_wbuf, int subtotal_sizes, moving_avg_values **allocated) { +int allocate_moving_avg(uint32_t num_wbuf, int subtotal_sizes, moving_avg_values **allocated) { PRECONDITION_NOT_NULL(allocated); if (*allocated != NULL) { return MOVING_AVG_PARAM_ERROR; @@ -54,7 +54,7 @@ int allocate_moving_avg(int num_wbuf, int subtotal_sizes, moving_avg_values **al memset(*allocated, 0, size); (*allocated)->max_subtotal_size = subtotal_sizes; - int *wbuf = (int *)calloc(num_wbuf, sizeof(int)); + uint32_t *wbuf = (uint32_t *)calloc(num_wbuf, sizeof(uint32_t)); if (wbuf == NULL) { // Run away, fast! free(allocated); diff --git a/src/moving_avg_ticker.h b/src/moving_avg_ticker.h index 5a4d06d..be787db 100644 --- a/src/moving_avg_ticker.h +++ b/src/moving_avg_ticker.h @@ -14,7 +14,7 @@ extern "C" { typedef struct moving_avg_values { // Circular buffer - int *wbuf; + uint32_t *wbuf; int wbuf_end; int wbuf_len; @@ -23,7 +23,7 @@ typedef struct moving_avg_values { int max_subtotal_size; } moving_avg_values; -int allocate_moving_avg(int num_wbuf, int subtotal_sizes, moving_avg_values **allocated); +int allocate_moving_avg(uint32_t num_wbuf, int subtotal_sizes, moving_avg_values **allocated); int reset_moving_avg(moving_avg_values *reset); diff --git a/test/main.cc b/test/main.cc index 903abe3..9f2c93e 100644 --- a/test/main.cc +++ b/test/main.cc @@ -667,9 +667,6 @@ TEST(MovingAvgTicker, InvalidLatestFrameParams) { TEST(MovingAvgTickerFuzzTest, allocate_moving_avg) { moving_avg_values *allocated = NULL; - // Test with negative num_wbuf - EXPECT_EQ(MOVING_AVG_PARAM_ERROR, allocate_moving_avg(-1, 1, &allocated)); - // Test with zero num_wbuf EXPECT_EQ(MOVING_AVG_PARAM_ERROR, allocate_moving_avg(0, 1, &allocated)); From 2340262a99a83ee4f4179bfa2da02c389c48db35 Mon Sep 17 00:00:00 2001 From: shalecraig Date: Sun, 23 Mar 2014 13:21:11 -0700 Subject: [PATCH 10/19] Change 2 params:allocate_moving_avg int->uint32_t --- .../src/moving_avg_ticker.c | 24 +++++++++---------- .../src/moving_avg_ticker.h | 12 +++++++--- src/moving_avg_ticker.c | 24 +++++++++---------- src/moving_avg_ticker.h | 12 +++++++--- test/main.cc | 3 --- 5 files changed, 40 insertions(+), 35 deletions(-) diff --git a/sample/simple-accelerometer/src/moving_avg_ticker.c b/sample/simple-accelerometer/src/moving_avg_ticker.c index 471f86e..ffc3608 100644 --- a/sample/simple-accelerometer/src/moving_avg_ticker.c +++ b/sample/simple-accelerometer/src/moving_avg_ticker.c @@ -21,38 +21,32 @@ int precondition_valid_moving_avg_values(moving_avg_values *input) { if (input->wbuf_len <= 0) { return MOVING_AVG_INTERNAL_ERROR; } - if (input->subtotal_size < 0) { - return MOVING_AVG_INTERNAL_ERROR; - } if (input->subtotal_size >= input->max_subtotal_size) { return MOVING_AVG_INTERNAL_ERROR; } - if (input->max_subtotal_size <= 0) { + if (input->max_subtotal_size == 0) { return MOVING_AVG_INTERNAL_ERROR; } return MOVING_AVG_SUCCESS; } -int allocate_moving_avg(uint32_t num_wbuf, int subtotal_sizes, moving_avg_values **allocated) { +int allocate_moving_avg(uint32_t num_wbuf, uint32_t subtotal_sizes, moving_avg_values **allocated) { PRECONDITION_NOT_NULL(allocated); if (*allocated != NULL) { return MOVING_AVG_PARAM_ERROR; } - // TODO: use an unsigned int instead. - if (num_wbuf <= 0) { + if (num_wbuf == 0) { return MOVING_AVG_PARAM_ERROR; } - if (subtotal_sizes <= 0) { + if (subtotal_sizes == 0) { return MOVING_AVG_PARAM_ERROR; } - size_t size = sizeof(moving_avg_values); + size_t moving_avg_size = sizeof(moving_avg_values); - *allocated = (moving_avg_values *)malloc(size); + *allocated = (moving_avg_values *)malloc(moving_avg_size); if (allocated == NULL) { return MOVING_AVG_MALLOC_ERROR; } - memset(*allocated, 0, size); - (*allocated)->max_subtotal_size = subtotal_sizes; uint32_t *wbuf = (uint32_t *)calloc(num_wbuf, sizeof(uint32_t)); if (wbuf == NULL) { @@ -61,6 +55,10 @@ int allocate_moving_avg(uint32_t num_wbuf, int subtotal_sizes, moving_avg_values *allocated = NULL; return MOVING_AVG_MALLOC_ERROR; } + memset(*allocated, 0, moving_avg_size); + + (*allocated)->max_subtotal_size = subtotal_sizes; + (*allocated)->wbuf = wbuf; (*allocated)->wbuf_len = num_wbuf; return MOVING_AVG_SUCCESS; @@ -87,7 +85,7 @@ int append_to_moving_avg(moving_avg_values *value, int appended, bool *is_at_end PRECONDITION_NOT_NULL(is_at_end); - ++value->subtotal_size; + ++(value->subtotal_size); value->subtotal += appended; if (value->subtotal_size != value->max_subtotal_size) { *is_at_end = false; diff --git a/sample/simple-accelerometer/src/moving_avg_ticker.h b/sample/simple-accelerometer/src/moving_avg_ticker.h index be787db..da6a33b 100644 --- a/sample/simple-accelerometer/src/moving_avg_ticker.h +++ b/sample/simple-accelerometer/src/moving_avg_ticker.h @@ -7,6 +7,12 @@ extern "C" { #include "accel.h" +#ifdef PEBBLE +#error // no support yet. +#else +#include +#endif + #define MOVING_AVG_SUCCESS ACCEL_SUCCESS #define MOVING_AVG_PARAM_ERROR ACCEL_PARAM_ERROR #define MOVING_AVG_INTERNAL_ERROR ACCEL_INTERNAL_ERROR @@ -19,11 +25,11 @@ typedef struct moving_avg_values { int wbuf_len; int subtotal; - int subtotal_size; - int max_subtotal_size; + uint32_t subtotal_size; + uint32_t max_subtotal_size; } moving_avg_values; -int allocate_moving_avg(uint32_t num_wbuf, int subtotal_sizes, moving_avg_values **allocated); +int allocate_moving_avg(uint32_t num_wbuf, uint32_t subtotal_sizes, moving_avg_values **allocated); int reset_moving_avg(moving_avg_values *reset); diff --git a/src/moving_avg_ticker.c b/src/moving_avg_ticker.c index 471f86e..ffc3608 100644 --- a/src/moving_avg_ticker.c +++ b/src/moving_avg_ticker.c @@ -21,38 +21,32 @@ int precondition_valid_moving_avg_values(moving_avg_values *input) { if (input->wbuf_len <= 0) { return MOVING_AVG_INTERNAL_ERROR; } - if (input->subtotal_size < 0) { - return MOVING_AVG_INTERNAL_ERROR; - } if (input->subtotal_size >= input->max_subtotal_size) { return MOVING_AVG_INTERNAL_ERROR; } - if (input->max_subtotal_size <= 0) { + if (input->max_subtotal_size == 0) { return MOVING_AVG_INTERNAL_ERROR; } return MOVING_AVG_SUCCESS; } -int allocate_moving_avg(uint32_t num_wbuf, int subtotal_sizes, moving_avg_values **allocated) { +int allocate_moving_avg(uint32_t num_wbuf, uint32_t subtotal_sizes, moving_avg_values **allocated) { PRECONDITION_NOT_NULL(allocated); if (*allocated != NULL) { return MOVING_AVG_PARAM_ERROR; } - // TODO: use an unsigned int instead. - if (num_wbuf <= 0) { + if (num_wbuf == 0) { return MOVING_AVG_PARAM_ERROR; } - if (subtotal_sizes <= 0) { + if (subtotal_sizes == 0) { return MOVING_AVG_PARAM_ERROR; } - size_t size = sizeof(moving_avg_values); + size_t moving_avg_size = sizeof(moving_avg_values); - *allocated = (moving_avg_values *)malloc(size); + *allocated = (moving_avg_values *)malloc(moving_avg_size); if (allocated == NULL) { return MOVING_AVG_MALLOC_ERROR; } - memset(*allocated, 0, size); - (*allocated)->max_subtotal_size = subtotal_sizes; uint32_t *wbuf = (uint32_t *)calloc(num_wbuf, sizeof(uint32_t)); if (wbuf == NULL) { @@ -61,6 +55,10 @@ int allocate_moving_avg(uint32_t num_wbuf, int subtotal_sizes, moving_avg_values *allocated = NULL; return MOVING_AVG_MALLOC_ERROR; } + memset(*allocated, 0, moving_avg_size); + + (*allocated)->max_subtotal_size = subtotal_sizes; + (*allocated)->wbuf = wbuf; (*allocated)->wbuf_len = num_wbuf; return MOVING_AVG_SUCCESS; @@ -87,7 +85,7 @@ int append_to_moving_avg(moving_avg_values *value, int appended, bool *is_at_end PRECONDITION_NOT_NULL(is_at_end); - ++value->subtotal_size; + ++(value->subtotal_size); value->subtotal += appended; if (value->subtotal_size != value->max_subtotal_size) { *is_at_end = false; diff --git a/src/moving_avg_ticker.h b/src/moving_avg_ticker.h index be787db..da6a33b 100644 --- a/src/moving_avg_ticker.h +++ b/src/moving_avg_ticker.h @@ -7,6 +7,12 @@ extern "C" { #include "accel.h" +#ifdef PEBBLE +#error // no support yet. +#else +#include +#endif + #define MOVING_AVG_SUCCESS ACCEL_SUCCESS #define MOVING_AVG_PARAM_ERROR ACCEL_PARAM_ERROR #define MOVING_AVG_INTERNAL_ERROR ACCEL_INTERNAL_ERROR @@ -19,11 +25,11 @@ typedef struct moving_avg_values { int wbuf_len; int subtotal; - int subtotal_size; - int max_subtotal_size; + uint32_t subtotal_size; + uint32_t max_subtotal_size; } moving_avg_values; -int allocate_moving_avg(uint32_t num_wbuf, int subtotal_sizes, moving_avg_values **allocated); +int allocate_moving_avg(uint32_t num_wbuf, uint32_t subtotal_sizes, moving_avg_values **allocated); int reset_moving_avg(moving_avg_values *reset); diff --git a/test/main.cc b/test/main.cc index 9f2c93e..c163920 100644 --- a/test/main.cc +++ b/test/main.cc @@ -670,9 +670,6 @@ TEST(MovingAvgTickerFuzzTest, allocate_moving_avg) { // Test with zero num_wbuf EXPECT_EQ(MOVING_AVG_PARAM_ERROR, allocate_moving_avg(0, 1, &allocated)); - // Test with negative subtotal_size - EXPECT_EQ(MOVING_AVG_PARAM_ERROR, allocate_moving_avg(1, -1, &allocated)); - // Test with zero subtotal_size EXPECT_EQ(MOVING_AVG_PARAM_ERROR, allocate_moving_avg(1, 0, &allocated)); From 92c069f19a1dcc81e30aa7d1328a27a098dca986 Mon Sep 17 00:00:00 2001 From: shalecraig Date: Sun, 23 Mar 2014 17:09:27 -0700 Subject: [PATCH 11/19] Moving average ticker now has more explicit typing --- .../simple-accelerometer/src/moving_avg_ticker.c | 14 ++++++-------- .../simple-accelerometer/src/moving_avg_ticker.h | 10 +++++----- src/moving_avg_ticker.c | 14 ++++++-------- src/moving_avg_ticker.h | 10 +++++----- 4 files changed, 22 insertions(+), 26 deletions(-) diff --git a/sample/simple-accelerometer/src/moving_avg_ticker.c b/sample/simple-accelerometer/src/moving_avg_ticker.c index ffc3608..251480a 100644 --- a/sample/simple-accelerometer/src/moving_avg_ticker.c +++ b/sample/simple-accelerometer/src/moving_avg_ticker.c @@ -15,10 +15,7 @@ int precondition_valid_moving_avg_values(moving_avg_values *input) { if (input->wbuf == NULL) { return MOVING_AVG_INTERNAL_ERROR; } - if (input->wbuf_end < 0) { - return MOVING_AVG_INTERNAL_ERROR; - } - if (input->wbuf_len <= 0) { + if (input->wbuf_len == 0) { return MOVING_AVG_INTERNAL_ERROR; } if (input->subtotal_size >= input->max_subtotal_size) { @@ -77,7 +74,7 @@ int reset_moving_avg(moving_avg_values *reset) { return MOVING_AVG_SUCCESS; } -int append_to_moving_avg(moving_avg_values *value, int appended, bool *is_at_end) { +int append_to_moving_avg(moving_avg_values *value, int32_t appended, bool *is_at_end) { int is_valid_return_value = precondition_valid_moving_avg_values(value); if (is_valid_return_value != MOVING_AVG_SUCCESS) { return is_valid_return_value; @@ -101,7 +98,7 @@ int append_to_moving_avg(moving_avg_values *value, int appended, bool *is_at_end return MOVING_AVG_SUCCESS; } -int get_latest_frame_moving_avg(moving_avg_values *value, int *frame) { +int get_latest_frame_moving_avg(moving_avg_values *value, int32_t *frame) { int is_valid_return_value = precondition_valid_moving_avg_values(value); if (is_valid_return_value != MOVING_AVG_SUCCESS) { return is_valid_return_value; @@ -109,11 +106,12 @@ int get_latest_frame_moving_avg(moving_avg_values *value, int *frame) { PRECONDITION_NOT_NULL(frame); + // TODO: this can be cleaned up. float sum = 0; - for (int i = 0; i < value->wbuf_len; ++i) { + for (uint32_t i = 0; i < value->wbuf_len; ++i) { sum += value->wbuf[i] * 1.0 / value->wbuf_len; } - *frame = (int)sum; + *frame = (int32_t)sum; return MOVING_AVG_SUCCESS; } diff --git a/sample/simple-accelerometer/src/moving_avg_ticker.h b/sample/simple-accelerometer/src/moving_avg_ticker.h index da6a33b..38922c2 100644 --- a/sample/simple-accelerometer/src/moving_avg_ticker.h +++ b/sample/simple-accelerometer/src/moving_avg_ticker.h @@ -21,10 +21,10 @@ extern "C" { typedef struct moving_avg_values { // Circular buffer uint32_t *wbuf; - int wbuf_end; - int wbuf_len; + uint32_t wbuf_end; + uint32_t wbuf_len; - int subtotal; + int32_t subtotal; uint32_t subtotal_size; uint32_t max_subtotal_size; } moving_avg_values; @@ -33,9 +33,9 @@ int allocate_moving_avg(uint32_t num_wbuf, uint32_t subtotal_sizes, moving_avg_v int reset_moving_avg(moving_avg_values *reset); -int append_to_moving_avg(moving_avg_values *value, int appended, bool *isAtEnd); +int append_to_moving_avg(moving_avg_values *value, int32_t appended, bool *isAtEnd); -int get_latest_frame_moving_avg(moving_avg_values *value, int *frame); +int get_latest_frame_moving_avg(moving_avg_values *value, int32_t *frame); int free_moving_avg(moving_avg_values **value); diff --git a/src/moving_avg_ticker.c b/src/moving_avg_ticker.c index ffc3608..251480a 100644 --- a/src/moving_avg_ticker.c +++ b/src/moving_avg_ticker.c @@ -15,10 +15,7 @@ int precondition_valid_moving_avg_values(moving_avg_values *input) { if (input->wbuf == NULL) { return MOVING_AVG_INTERNAL_ERROR; } - if (input->wbuf_end < 0) { - return MOVING_AVG_INTERNAL_ERROR; - } - if (input->wbuf_len <= 0) { + if (input->wbuf_len == 0) { return MOVING_AVG_INTERNAL_ERROR; } if (input->subtotal_size >= input->max_subtotal_size) { @@ -77,7 +74,7 @@ int reset_moving_avg(moving_avg_values *reset) { return MOVING_AVG_SUCCESS; } -int append_to_moving_avg(moving_avg_values *value, int appended, bool *is_at_end) { +int append_to_moving_avg(moving_avg_values *value, int32_t appended, bool *is_at_end) { int is_valid_return_value = precondition_valid_moving_avg_values(value); if (is_valid_return_value != MOVING_AVG_SUCCESS) { return is_valid_return_value; @@ -101,7 +98,7 @@ int append_to_moving_avg(moving_avg_values *value, int appended, bool *is_at_end return MOVING_AVG_SUCCESS; } -int get_latest_frame_moving_avg(moving_avg_values *value, int *frame) { +int get_latest_frame_moving_avg(moving_avg_values *value, int32_t *frame) { int is_valid_return_value = precondition_valid_moving_avg_values(value); if (is_valid_return_value != MOVING_AVG_SUCCESS) { return is_valid_return_value; @@ -109,11 +106,12 @@ int get_latest_frame_moving_avg(moving_avg_values *value, int *frame) { PRECONDITION_NOT_NULL(frame); + // TODO: this can be cleaned up. float sum = 0; - for (int i = 0; i < value->wbuf_len; ++i) { + for (uint32_t i = 0; i < value->wbuf_len; ++i) { sum += value->wbuf[i] * 1.0 / value->wbuf_len; } - *frame = (int)sum; + *frame = (int32_t)sum; return MOVING_AVG_SUCCESS; } diff --git a/src/moving_avg_ticker.h b/src/moving_avg_ticker.h index da6a33b..38922c2 100644 --- a/src/moving_avg_ticker.h +++ b/src/moving_avg_ticker.h @@ -21,10 +21,10 @@ extern "C" { typedef struct moving_avg_values { // Circular buffer uint32_t *wbuf; - int wbuf_end; - int wbuf_len; + uint32_t wbuf_end; + uint32_t wbuf_len; - int subtotal; + int32_t subtotal; uint32_t subtotal_size; uint32_t max_subtotal_size; } moving_avg_values; @@ -33,9 +33,9 @@ int allocate_moving_avg(uint32_t num_wbuf, uint32_t subtotal_sizes, moving_avg_v int reset_moving_avg(moving_avg_values *reset); -int append_to_moving_avg(moving_avg_values *value, int appended, bool *isAtEnd); +int append_to_moving_avg(moving_avg_values *value, int32_t appended, bool *isAtEnd); -int get_latest_frame_moving_avg(moving_avg_values *value, int *frame); +int get_latest_frame_moving_avg(moving_avg_values *value, int32_t *frame); int free_moving_avg(moving_avg_values **value); From ea24116b41bf8a2b26e67c96914faee27d77b654 Mon Sep 17 00:00:00 2001 From: shalecraig Date: Sun, 23 Mar 2014 17:11:37 -0700 Subject: [PATCH 12/19] Made get_latest_frame faster, fewer ops in loop --- sample/simple-accelerometer/src/moving_avg_ticker.c | 6 +++--- src/moving_avg_ticker.c | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/sample/simple-accelerometer/src/moving_avg_ticker.c b/sample/simple-accelerometer/src/moving_avg_ticker.c index 251480a..b3f48d8 100644 --- a/sample/simple-accelerometer/src/moving_avg_ticker.c +++ b/sample/simple-accelerometer/src/moving_avg_ticker.c @@ -107,11 +107,11 @@ int get_latest_frame_moving_avg(moving_avg_values *value, int32_t *frame) { PRECONDITION_NOT_NULL(frame); // TODO: this can be cleaned up. - float sum = 0; + uint64_t sum = 0; for (uint32_t i = 0; i < value->wbuf_len; ++i) { - sum += value->wbuf[i] * 1.0 / value->wbuf_len; + sum += value->wbuf[i]; } - *frame = (int32_t)sum; + *frame = (int32_t)(sum * 1.0) / value->wbuf_len; return MOVING_AVG_SUCCESS; } diff --git a/src/moving_avg_ticker.c b/src/moving_avg_ticker.c index 251480a..b3f48d8 100644 --- a/src/moving_avg_ticker.c +++ b/src/moving_avg_ticker.c @@ -107,11 +107,11 @@ int get_latest_frame_moving_avg(moving_avg_values *value, int32_t *frame) { PRECONDITION_NOT_NULL(frame); // TODO: this can be cleaned up. - float sum = 0; + uint64_t sum = 0; for (uint32_t i = 0; i < value->wbuf_len; ++i) { - sum += value->wbuf[i] * 1.0 / value->wbuf_len; + sum += value->wbuf[i]; } - *frame = (int32_t)sum; + *frame = (int32_t)(sum * 1.0) / value->wbuf_len; return MOVING_AVG_SUCCESS; } From 16f7bcfa2fab886387a8cbe68d4734e2bea65ba4 Mon Sep 17 00:00:00 2001 From: shalecraig Date: Sun, 23 Mar 2014 17:27:08 -0700 Subject: [PATCH 13/19] Dimensions is now a unsigned integer --- sample/simple-accelerometer/src/accel.c | 36 ++++++++++++------------- sample/simple-accelerometer/src/accel.h | 4 +-- src/accel.c | 35 ++++++++++++------------ src/accel.h | 4 +-- test/main.cc | 4 --- 5 files changed, 40 insertions(+), 43 deletions(-) diff --git a/sample/simple-accelerometer/src/accel.c b/sample/simple-accelerometer/src/accel.c index d9d5cee..7b5488a 100644 --- a/sample/simple-accelerometer/src/accel.c +++ b/sample/simple-accelerometer/src/accel.c @@ -55,7 +55,7 @@ typedef struct internalAccelState { if (INPUT_STATE->state == NULL) { \ return ACCEL_INTERNAL_ERROR; \ } \ - if (INPUT_STATE->dimensions <= 0) { \ + if (INPUT_STATE->dimensions == 0) { \ return ACCEL_INTERNAL_ERROR; \ } \ if (INPUT_STATE->state->window_size <= 0) { \ @@ -86,8 +86,7 @@ typedef struct internalAccelState { // #define MAX(a,b) (((a)>(b))?(a):(b)) // TODO: write tests for "internal" functions. - -void accel_destroy_gesture(accel_gesture **gesture, int dimensions) { +void accel_destroy_gesture(accel_gesture **gesture, uint32_t dimensions) { if (gesture == NULL || *gesture == NULL) { return; } @@ -95,7 +94,7 @@ void accel_destroy_gesture(accel_gesture **gesture, int dimensions) { accel_gesture *gest = *gesture; if (gest->moving_avg_values != NULL) { - for (int i = 0; i < dimensions; ++i) { + for (uint32_t i = 0; i < dimensions; ++i) { free_moving_avg(&(gest->moving_avg_values[i])); } } @@ -140,13 +139,13 @@ int internal_accel_generate_gesture(accel_state *state, accel_gesture **gesture) *gesture = NULL; return ACCEL_MALLOC_ERROR; } - for (int i = 0; i < state->dimensions; ++i) { + for (uint32_t i = 0; i < state->dimensions; ++i) { // TODO: these two shouldn't both be the same.... int result = allocate_moving_avg(state->state->window_size, state->state->window_size, &((*gesture)->moving_avg_values[i])); if (result != ACCEL_SUCCESS) { - for (int j = 0; j < i; ++j) { + for (uint32_t j = 0; j < i; ++j) { free_moving_avg(&((*gesture)->moving_avg_values[i])); } accel_destroy_gesture(gesture, state->dimensions); @@ -156,14 +155,14 @@ int internal_accel_generate_gesture(accel_state *state, accel_gesture **gesture) return ACCEL_SUCCESS; } -int accel_generate_state(accel_state **state, int dimensions, int window_size, accel_callback callback, +int accel_generate_state(accel_state **state, uint32_t dimensions, int window_size, accel_callback callback, const int threshold) { PRECONDITION_NOT_NULL(state); // TODO: write a test for this value. PRECONDITION_NULL(*state); - if (dimensions <= 0) { + if (dimensions == 0) { return ACCEL_PARAM_ERROR; } if (window_size <= 0) { @@ -202,6 +201,7 @@ int accel_generate_state(accel_state **state, int dimensions, int window_size, a (*state)->dimensions = dimensions; (*state)->state->window_size = window_size > 0 ? window_size : 2; (*state)->state->threshold = threshold; + // TODO: verify that the state we have created is valid. return ACCEL_SUCCESS; } @@ -210,7 +210,7 @@ int accel_destroy_state(accel_state **state) { PRECONDITION_NOT_NULL(state); PRECONDITION_NOT_NULL(*state); - int dimensions = (*state)->dimensions; + uint32_t dimensions = (*state)->dimensions; if ((*state)->state != NULL) { internal_accel_state *istate = (*state)->state; if (istate->gestures != NULL) { @@ -280,12 +280,12 @@ int accel_start_record_gesture(accel_state *state, int *gesture) { // TODO: revisit this decision. int normalize(int sum) { return (int)cbrt(sum); } -int reset_gesture(accel_gesture *gest, const int dimensions) { +int reset_gesture(accel_gesture *gest, const uint32_t dimensions) { PRECONDITION_NOT_NULL(gest); for (int i = 0; i < gest->recording_size; ++i) { gest->offsets[i] = INT16_MAX; } - for (int d = 0; d < dimensions; ++d) { + for (uint32_t d = 0; d < dimensions; ++d) { reset_moving_avg(gest->moving_avg_values[d]); } return ACCEL_SUCCESS; @@ -334,7 +334,7 @@ int accel_end_record_gesture(accel_state *state, int gesture_id) { for (int i = 0; i < gesture->recording_size; ++i) { gesture->offsets[i] = INT16_MAX; } - for (int d = 0; d < state->dimensions; ++d) { + for (uint32_t d = 0; d < state->dimensions; ++d) { reset_moving_avg(gesture->moving_avg_values[d]); } return ACCEL_SUCCESS; @@ -343,7 +343,7 @@ int accel_end_record_gesture(accel_state *state, int gesture_id) { // TODO: gracefully handle malloc failure in this function. // TODO: this should return error types instead of being void. // Follow-up: find usages of this method. -void handle_recording_tick(accel_gesture *gesture, int dimensions) { +void handle_recording_tick(accel_gesture *gesture, uint32_t dimensions) { if (gesture == NULL) { return; } @@ -359,7 +359,7 @@ void handle_recording_tick(accel_gesture *gesture, int dimensions) { gesture->normalized_recording = (int **)malloc(sizeof(int *)); } gesture->normalized_recording[gesture->recording_size] = (int *)malloc(sizeof(int) * dimensions); - for (int i = 0; i < dimensions; ++i) { + for (uint32_t i = 0; i < dimensions; ++i) { // TODO: fix this int/float business. // TODO: complain about invalid return values. get_latest_frame_moving_avg(gesture->moving_avg_values[i], @@ -373,7 +373,7 @@ void handle_recording_tick(accel_gesture *gesture, int dimensions) { int handle_evaluation_tick(accel_state *state, accel_gesture *gesture, int gesture_id) { // TODO: load the input at the beginning instead of gesture->recording_size times. PRECONDITION_NOT_NULL(gesture); - int dimensions = state->dimensions; + uint32_t dimensions = state->dimensions; if (gesture->moving_avg_values == NULL || gesture->offsets == NULL) { return ACCEL_INTERNAL_ERROR; @@ -384,7 +384,7 @@ int handle_evaluation_tick(accel_state *state, accel_gesture *gesture, int gestu --i; int cost = 0; - for (int d = 0; d < dimensions; ++d) { + for (uint32_t d = 0; d < dimensions; ++d) { int recording_i_d = gesture->normalized_recording[i][d]; int input_i_d = 0; // TODO: complain about invalid return values. @@ -405,7 +405,7 @@ int handle_evaluation_tick(accel_state *state, accel_gesture *gesture, int gestu } for (i = 1; i < gesture->recording_size; ++i) { int cost = 0; - for (int d = 0; d < dimensions; ++d) { + for (uint32_t d = 0; d < dimensions; ++d) { int recording_i_d = gesture->normalized_recording[i][d]; int input_i_d = 0; // TODO: complain about invalid return values. @@ -458,7 +458,7 @@ int accel_process_timer_tick(accel_state *state, int *accel_data) { // If the moving average is at a final line. bool avg_line = false; int returned = ACCEL_SUCCESS; - for (int d = 0; d < state->dimensions && returned == 0; ++d) { + for (uint32_t d = 0; d < state->dimensions && returned == 0; ++d) { returned = append_to_moving_avg(gesture->moving_avg_values[d], accel_data[d], &avg_line); } if (returned != ACCEL_SUCCESS) { diff --git a/sample/simple-accelerometer/src/accel.h b/sample/simple-accelerometer/src/accel.h index 97e3ca8..a1006de 100644 --- a/sample/simple-accelerometer/src/accel.h +++ b/sample/simple-accelerometer/src/accel.h @@ -67,7 +67,7 @@ struct accelState; typedef int (*accel_callback)(struct accelState *state, int gesture_id, int offset_found, bool *reset_gesture); typedef struct accelState { - int dimensions; + uint32_t dimensions; accel_callback callback; struct internalAccelState *state; @@ -90,7 +90,7 @@ typedef struct accelState { * gestures must be before the callback is called. * @return ACCEL_SUCCESS if successful, an error code otherwise. */ -int accel_generate_state(accel_state **state, int dimensions, int window_size, accel_callback callback, +int accel_generate_state(accel_state **state, uint32_t dimensions, int window_size, accel_callback callback, const int threshold); /** diff --git a/src/accel.c b/src/accel.c index d9d5cee..b12b706 100644 --- a/src/accel.c +++ b/src/accel.c @@ -55,7 +55,7 @@ typedef struct internalAccelState { if (INPUT_STATE->state == NULL) { \ return ACCEL_INTERNAL_ERROR; \ } \ - if (INPUT_STATE->dimensions <= 0) { \ + if (INPUT_STATE->dimensions == 0) { \ return ACCEL_INTERNAL_ERROR; \ } \ if (INPUT_STATE->state->window_size <= 0) { \ @@ -87,7 +87,7 @@ typedef struct internalAccelState { // TODO: write tests for "internal" functions. -void accel_destroy_gesture(accel_gesture **gesture, int dimensions) { +void accel_destroy_gesture(accel_gesture **gesture, uint32_t dimensions) { if (gesture == NULL || *gesture == NULL) { return; } @@ -95,7 +95,7 @@ void accel_destroy_gesture(accel_gesture **gesture, int dimensions) { accel_gesture *gest = *gesture; if (gest->moving_avg_values != NULL) { - for (int i = 0; i < dimensions; ++i) { + for (uint32_t i = 0; i < dimensions; ++i) { free_moving_avg(&(gest->moving_avg_values[i])); } } @@ -140,13 +140,13 @@ int internal_accel_generate_gesture(accel_state *state, accel_gesture **gesture) *gesture = NULL; return ACCEL_MALLOC_ERROR; } - for (int i = 0; i < state->dimensions; ++i) { + for (uint32_t i = 0; i < state->dimensions; ++i) { // TODO: these two shouldn't both be the same.... int result = allocate_moving_avg(state->state->window_size, state->state->window_size, &((*gesture)->moving_avg_values[i])); if (result != ACCEL_SUCCESS) { - for (int j = 0; j < i; ++j) { + for (uint32_t j = 0; j < i; ++j) { free_moving_avg(&((*gesture)->moving_avg_values[i])); } accel_destroy_gesture(gesture, state->dimensions); @@ -156,14 +156,14 @@ int internal_accel_generate_gesture(accel_state *state, accel_gesture **gesture) return ACCEL_SUCCESS; } -int accel_generate_state(accel_state **state, int dimensions, int window_size, accel_callback callback, +int accel_generate_state(accel_state **state, uint32_t dimensions, int window_size, accel_callback callback, const int threshold) { PRECONDITION_NOT_NULL(state); // TODO: write a test for this value. PRECONDITION_NULL(*state); - if (dimensions <= 0) { + if (dimensions == 0) { return ACCEL_PARAM_ERROR; } if (window_size <= 0) { @@ -202,6 +202,7 @@ int accel_generate_state(accel_state **state, int dimensions, int window_size, a (*state)->dimensions = dimensions; (*state)->state->window_size = window_size > 0 ? window_size : 2; (*state)->state->threshold = threshold; + // TODO: verify that the state we have created is valid. return ACCEL_SUCCESS; } @@ -210,7 +211,7 @@ int accel_destroy_state(accel_state **state) { PRECONDITION_NOT_NULL(state); PRECONDITION_NOT_NULL(*state); - int dimensions = (*state)->dimensions; + uint32_t dimensions = (*state)->dimensions; if ((*state)->state != NULL) { internal_accel_state *istate = (*state)->state; if (istate->gestures != NULL) { @@ -280,12 +281,12 @@ int accel_start_record_gesture(accel_state *state, int *gesture) { // TODO: revisit this decision. int normalize(int sum) { return (int)cbrt(sum); } -int reset_gesture(accel_gesture *gest, const int dimensions) { +int reset_gesture(accel_gesture *gest, const uint32_t dimensions) { PRECONDITION_NOT_NULL(gest); for (int i = 0; i < gest->recording_size; ++i) { gest->offsets[i] = INT16_MAX; } - for (int d = 0; d < dimensions; ++d) { + for (uint32_t d = 0; d < dimensions; ++d) { reset_moving_avg(gest->moving_avg_values[d]); } return ACCEL_SUCCESS; @@ -334,7 +335,7 @@ int accel_end_record_gesture(accel_state *state, int gesture_id) { for (int i = 0; i < gesture->recording_size; ++i) { gesture->offsets[i] = INT16_MAX; } - for (int d = 0; d < state->dimensions; ++d) { + for (uint32_t d = 0; d < state->dimensions; ++d) { reset_moving_avg(gesture->moving_avg_values[d]); } return ACCEL_SUCCESS; @@ -343,7 +344,7 @@ int accel_end_record_gesture(accel_state *state, int gesture_id) { // TODO: gracefully handle malloc failure in this function. // TODO: this should return error types instead of being void. // Follow-up: find usages of this method. -void handle_recording_tick(accel_gesture *gesture, int dimensions) { +void handle_recording_tick(accel_gesture *gesture, uint32_t dimensions) { if (gesture == NULL) { return; } @@ -359,7 +360,7 @@ void handle_recording_tick(accel_gesture *gesture, int dimensions) { gesture->normalized_recording = (int **)malloc(sizeof(int *)); } gesture->normalized_recording[gesture->recording_size] = (int *)malloc(sizeof(int) * dimensions); - for (int i = 0; i < dimensions; ++i) { + for (uint32_t i = 0; i < dimensions; ++i) { // TODO: fix this int/float business. // TODO: complain about invalid return values. get_latest_frame_moving_avg(gesture->moving_avg_values[i], @@ -373,7 +374,7 @@ void handle_recording_tick(accel_gesture *gesture, int dimensions) { int handle_evaluation_tick(accel_state *state, accel_gesture *gesture, int gesture_id) { // TODO: load the input at the beginning instead of gesture->recording_size times. PRECONDITION_NOT_NULL(gesture); - int dimensions = state->dimensions; + uint32_t dimensions = state->dimensions; if (gesture->moving_avg_values == NULL || gesture->offsets == NULL) { return ACCEL_INTERNAL_ERROR; @@ -384,7 +385,7 @@ int handle_evaluation_tick(accel_state *state, accel_gesture *gesture, int gestu --i; int cost = 0; - for (int d = 0; d < dimensions; ++d) { + for (uint32_t d = 0; d < dimensions; ++d) { int recording_i_d = gesture->normalized_recording[i][d]; int input_i_d = 0; // TODO: complain about invalid return values. @@ -405,7 +406,7 @@ int handle_evaluation_tick(accel_state *state, accel_gesture *gesture, int gestu } for (i = 1; i < gesture->recording_size; ++i) { int cost = 0; - for (int d = 0; d < dimensions; ++d) { + for (uint32_t d = 0; d < dimensions; ++d) { int recording_i_d = gesture->normalized_recording[i][d]; int input_i_d = 0; // TODO: complain about invalid return values. @@ -458,7 +459,7 @@ int accel_process_timer_tick(accel_state *state, int *accel_data) { // If the moving average is at a final line. bool avg_line = false; int returned = ACCEL_SUCCESS; - for (int d = 0; d < state->dimensions && returned == 0; ++d) { + for (uint32_t d = 0; d < state->dimensions && returned == 0; ++d) { returned = append_to_moving_avg(gesture->moving_avg_values[d], accel_data[d], &avg_line); } if (returned != ACCEL_SUCCESS) { diff --git a/src/accel.h b/src/accel.h index 97e3ca8..a1006de 100644 --- a/src/accel.h +++ b/src/accel.h @@ -67,7 +67,7 @@ struct accelState; typedef int (*accel_callback)(struct accelState *state, int gesture_id, int offset_found, bool *reset_gesture); typedef struct accelState { - int dimensions; + uint32_t dimensions; accel_callback callback; struct internalAccelState *state; @@ -90,7 +90,7 @@ typedef struct accelState { * gestures must be before the callback is called. * @return ACCEL_SUCCESS if successful, an error code otherwise. */ -int accel_generate_state(accel_state **state, int dimensions, int window_size, accel_callback callback, +int accel_generate_state(accel_state **state, uint32_t dimensions, int window_size, accel_callback callback, const int threshold); /** diff --git a/test/main.cc b/test/main.cc index c163920..20abd23 100644 --- a/test/main.cc +++ b/test/main.cc @@ -54,10 +54,6 @@ TEST(AccelFuzzTest, generate_state_negative_or_zero_dimensions) { int result = accel_generate_state(&state, 0, 1, NULL, 0); EXPECT_EQ(ACCEL_PARAM_ERROR, result); - // -1 dimension must fail - result = accel_generate_state(&state, -1, 1, NULL, 0); - EXPECT_EQ(ACCEL_PARAM_ERROR, result); - // 1 dimension must succeed. state = NULL; result = accel_generate_state(&state, 1, 1, NULL, 0); From c2dfd7b1c35661e2d07acd2e29ddb1758c2ac984 Mon Sep 17 00:00:00 2001 From: shalecraig Date: Sun, 23 Mar 2014 17:38:09 -0700 Subject: [PATCH 14/19] Moved types to explicit sizes something's broken @pbl though :( --- sample/simple-accelerometer/src/accel.c | 1 + sample/simple-accelerometer/src/accel.h | 1 + sample/simple-accelerometer/src/moving_avg_ticker.h | 4 ---- sample/simple-accelerometer/src/pebble_makeup.h | 1 + src/accel.h | 1 + src/moving_avg_ticker.h | 4 ---- src/pebble_makeup.h | 1 + 7 files changed, 5 insertions(+), 8 deletions(-) diff --git a/sample/simple-accelerometer/src/accel.c b/sample/simple-accelerometer/src/accel.c index 7b5488a..b12b706 100644 --- a/sample/simple-accelerometer/src/accel.c +++ b/sample/simple-accelerometer/src/accel.c @@ -86,6 +86,7 @@ typedef struct internalAccelState { // #define MAX(a,b) (((a)>(b))?(a):(b)) // TODO: write tests for "internal" functions. + void accel_destroy_gesture(accel_gesture **gesture, uint32_t dimensions) { if (gesture == NULL || *gesture == NULL) { return; diff --git a/sample/simple-accelerometer/src/accel.h b/sample/simple-accelerometer/src/accel.h index a1006de..819c1c9 100644 --- a/sample/simple-accelerometer/src/accel.h +++ b/sample/simple-accelerometer/src/accel.h @@ -12,6 +12,7 @@ extern "C" { #endif #include +#include #define ACCEL_SUCCESS 0 #define ACCEL_PARAM_ERROR -1 diff --git a/sample/simple-accelerometer/src/moving_avg_ticker.h b/sample/simple-accelerometer/src/moving_avg_ticker.h index 38922c2..6e0609e 100644 --- a/sample/simple-accelerometer/src/moving_avg_ticker.h +++ b/sample/simple-accelerometer/src/moving_avg_ticker.h @@ -7,11 +7,7 @@ extern "C" { #include "accel.h" -#ifdef PEBBLE -#error // no support yet. -#else #include -#endif #define MOVING_AVG_SUCCESS ACCEL_SUCCESS #define MOVING_AVG_PARAM_ERROR ACCEL_PARAM_ERROR diff --git a/sample/simple-accelerometer/src/pebble_makeup.h b/sample/simple-accelerometer/src/pebble_makeup.h index ee92618..b988e29 100644 --- a/sample/simple-accelerometer/src/pebble_makeup.h +++ b/sample/simple-accelerometer/src/pebble_makeup.h @@ -8,6 +8,7 @@ extern "C" { #include #include #include +#include void *my_realloc(void *old_ptr, size_t new_size, size_t old_size) { if (new_size == old_size) { diff --git a/src/accel.h b/src/accel.h index a1006de..819c1c9 100644 --- a/src/accel.h +++ b/src/accel.h @@ -12,6 +12,7 @@ extern "C" { #endif #include +#include #define ACCEL_SUCCESS 0 #define ACCEL_PARAM_ERROR -1 diff --git a/src/moving_avg_ticker.h b/src/moving_avg_ticker.h index 38922c2..6e0609e 100644 --- a/src/moving_avg_ticker.h +++ b/src/moving_avg_ticker.h @@ -7,11 +7,7 @@ extern "C" { #include "accel.h" -#ifdef PEBBLE -#error // no support yet. -#else #include -#endif #define MOVING_AVG_SUCCESS ACCEL_SUCCESS #define MOVING_AVG_PARAM_ERROR ACCEL_PARAM_ERROR diff --git a/src/pebble_makeup.h b/src/pebble_makeup.h index ee92618..b988e29 100644 --- a/src/pebble_makeup.h +++ b/src/pebble_makeup.h @@ -8,6 +8,7 @@ extern "C" { #include #include #include +#include void *my_realloc(void *old_ptr, size_t new_size, size_t old_size) { if (new_size == old_size) { From 4a25ca1b743d3ee6612f2a827b1f7323ae5f7abc Mon Sep 17 00:00:00 2001 From: shalecraig Date: Sun, 23 Mar 2014 17:49:01 -0700 Subject: [PATCH 15/19] Added documentation note to pebble_makeup header. --- sample/simple-accelerometer/src/pebble_makeup.h | 7 +++++++ src/pebble_makeup.h | 7 +++++++ 2 files changed, 14 insertions(+) diff --git a/sample/simple-accelerometer/src/pebble_makeup.h b/sample/simple-accelerometer/src/pebble_makeup.h index b988e29..119f49c 100644 --- a/sample/simple-accelerometer/src/pebble_makeup.h +++ b/sample/simple-accelerometer/src/pebble_makeup.h @@ -5,6 +5,13 @@ extern "C" { #endif +// TODO: Refactor and rearrange what goes into this file. + +/** + * This file contains all code required to use the accel library source that is + * not provided by the pebble environment. + */ + #include #include #include diff --git a/src/pebble_makeup.h b/src/pebble_makeup.h index b988e29..119f49c 100644 --- a/src/pebble_makeup.h +++ b/src/pebble_makeup.h @@ -5,6 +5,13 @@ extern "C" { #endif +// TODO: Refactor and rearrange what goes into this file. + +/** + * This file contains all code required to use the accel library source that is + * not provided by the pebble environment. + */ + #include #include #include From a86a99a79bc59ad166f54ed5d118b32d184cb914 Mon Sep 17 00:00:00 2001 From: shalecraig Date: Sun, 23 Mar 2014 17:50:26 -0700 Subject: [PATCH 16/19] Reordered imports for moving_avg_ticker --- sample/simple-accelerometer/src/moving_avg_ticker.h | 4 ++-- src/moving_avg_ticker.h | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/sample/simple-accelerometer/src/moving_avg_ticker.h b/sample/simple-accelerometer/src/moving_avg_ticker.h index 6e0609e..801cb21 100644 --- a/sample/simple-accelerometer/src/moving_avg_ticker.h +++ b/sample/simple-accelerometer/src/moving_avg_ticker.h @@ -5,10 +5,10 @@ extern "C" { #endif -#include "accel.h" - #include +#include "accel.h" + #define MOVING_AVG_SUCCESS ACCEL_SUCCESS #define MOVING_AVG_PARAM_ERROR ACCEL_PARAM_ERROR #define MOVING_AVG_INTERNAL_ERROR ACCEL_INTERNAL_ERROR diff --git a/src/moving_avg_ticker.h b/src/moving_avg_ticker.h index 6e0609e..801cb21 100644 --- a/src/moving_avg_ticker.h +++ b/src/moving_avg_ticker.h @@ -5,10 +5,10 @@ extern "C" { #endif -#include "accel.h" - #include +#include "accel.h" + #define MOVING_AVG_SUCCESS ACCEL_SUCCESS #define MOVING_AVG_PARAM_ERROR ACCEL_PARAM_ERROR #define MOVING_AVG_INTERNAL_ERROR ACCEL_INTERNAL_ERROR From f0032d6d60fe22fa288cf6757b71c384f2607fb4 Mon Sep 17 00:00:00 2001 From: shalecraig Date: Sun, 23 Mar 2014 18:40:33 -0700 Subject: [PATCH 17/19] Cleaned up some types in accel.c Going to be a long slog. --- sample/simple-accelerometer/src/accel.c | 16 ++++++++-------- src/accel.c | 16 ++++++++-------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/sample/simple-accelerometer/src/accel.c b/sample/simple-accelerometer/src/accel.c index b12b706..7d787b9 100644 --- a/sample/simple-accelerometer/src/accel.c +++ b/sample/simple-accelerometer/src/accel.c @@ -24,7 +24,7 @@ typedef struct { bool is_recorded; int recording_size; - int **normalized_recording; + int32_t **normalized_recording; moving_avg_values **moving_avg_values; int *offsets; @@ -279,7 +279,7 @@ int accel_start_record_gesture(accel_state *state, int *gesture) { // The uWave paper suggests a mapping from [-20, 20]->[-15, 15], but cube root // should to work better for variable ranges. // TODO: revisit this decision. -int normalize(int sum) { return (int)cbrt(sum); } +int normalize(int32_t sum) { return (int32_t)cbrt(sum); } int reset_gesture(accel_gesture *gest, const uint32_t dimensions) { PRECONDITION_NOT_NULL(gest); @@ -351,15 +351,15 @@ void handle_recording_tick(accel_gesture *gesture, uint32_t dimensions) { // TODO: grow exponentially, not linearly. Linear growth allocates too frequently. if (gesture->recording_size != 0) { gesture->normalized_recording = - (int **)my_realloc(gesture->normalized_recording, (gesture->recording_size + 1) * sizeof(int *), - gesture->recording_size * sizeof(int *)); + (int32_t **)my_realloc(gesture->normalized_recording, (gesture->recording_size + 1) * sizeof(int32_t *), + gesture->recording_size * sizeof(int32_t *)); if (gesture->normalized_recording == NULL) { return; } } else { - gesture->normalized_recording = (int **)malloc(sizeof(int *)); + gesture->normalized_recording = (int32_t **)malloc(sizeof(int32_t *)); } - gesture->normalized_recording[gesture->recording_size] = (int *)malloc(sizeof(int) * dimensions); + gesture->normalized_recording[gesture->recording_size] = (int32_t *)malloc(sizeof(int32_t) * dimensions); for (uint32_t i = 0; i < dimensions; ++i) { // TODO: fix this int/float business. // TODO: complain about invalid return values. @@ -387,7 +387,7 @@ int handle_evaluation_tick(accel_state *state, accel_gesture *gesture, int gestu int cost = 0; for (uint32_t d = 0; d < dimensions; ++d) { int recording_i_d = gesture->normalized_recording[i][d]; - int input_i_d = 0; + int32_t input_i_d = 0; // TODO: complain about invalid return values. get_latest_frame_moving_avg(gesture->moving_avg_values[d], &input_i_d); input_i_d = normalize(input_i_d); @@ -408,7 +408,7 @@ int handle_evaluation_tick(accel_state *state, accel_gesture *gesture, int gestu int cost = 0; for (uint32_t d = 0; d < dimensions; ++d) { int recording_i_d = gesture->normalized_recording[i][d]; - int input_i_d = 0; + int32_t input_i_d = 0; // TODO: complain about invalid return values. get_latest_frame_moving_avg(gesture->moving_avg_values[d], &input_i_d); if (recording_i_d > input_i_d) { diff --git a/src/accel.c b/src/accel.c index b12b706..7d787b9 100644 --- a/src/accel.c +++ b/src/accel.c @@ -24,7 +24,7 @@ typedef struct { bool is_recorded; int recording_size; - int **normalized_recording; + int32_t **normalized_recording; moving_avg_values **moving_avg_values; int *offsets; @@ -279,7 +279,7 @@ int accel_start_record_gesture(accel_state *state, int *gesture) { // The uWave paper suggests a mapping from [-20, 20]->[-15, 15], but cube root // should to work better for variable ranges. // TODO: revisit this decision. -int normalize(int sum) { return (int)cbrt(sum); } +int normalize(int32_t sum) { return (int32_t)cbrt(sum); } int reset_gesture(accel_gesture *gest, const uint32_t dimensions) { PRECONDITION_NOT_NULL(gest); @@ -351,15 +351,15 @@ void handle_recording_tick(accel_gesture *gesture, uint32_t dimensions) { // TODO: grow exponentially, not linearly. Linear growth allocates too frequently. if (gesture->recording_size != 0) { gesture->normalized_recording = - (int **)my_realloc(gesture->normalized_recording, (gesture->recording_size + 1) * sizeof(int *), - gesture->recording_size * sizeof(int *)); + (int32_t **)my_realloc(gesture->normalized_recording, (gesture->recording_size + 1) * sizeof(int32_t *), + gesture->recording_size * sizeof(int32_t *)); if (gesture->normalized_recording == NULL) { return; } } else { - gesture->normalized_recording = (int **)malloc(sizeof(int *)); + gesture->normalized_recording = (int32_t **)malloc(sizeof(int32_t *)); } - gesture->normalized_recording[gesture->recording_size] = (int *)malloc(sizeof(int) * dimensions); + gesture->normalized_recording[gesture->recording_size] = (int32_t *)malloc(sizeof(int32_t) * dimensions); for (uint32_t i = 0; i < dimensions; ++i) { // TODO: fix this int/float business. // TODO: complain about invalid return values. @@ -387,7 +387,7 @@ int handle_evaluation_tick(accel_state *state, accel_gesture *gesture, int gestu int cost = 0; for (uint32_t d = 0; d < dimensions; ++d) { int recording_i_d = gesture->normalized_recording[i][d]; - int input_i_d = 0; + int32_t input_i_d = 0; // TODO: complain about invalid return values. get_latest_frame_moving_avg(gesture->moving_avg_values[d], &input_i_d); input_i_d = normalize(input_i_d); @@ -408,7 +408,7 @@ int handle_evaluation_tick(accel_state *state, accel_gesture *gesture, int gestu int cost = 0; for (uint32_t d = 0; d < dimensions; ++d) { int recording_i_d = gesture->normalized_recording[i][d]; - int input_i_d = 0; + int32_t input_i_d = 0; // TODO: complain about invalid return values. get_latest_frame_moving_avg(gesture->moving_avg_values[d], &input_i_d); if (recording_i_d > input_i_d) { From c24561457527b75aa725371a368478c7b714b4d3 Mon Sep 17 00:00:00 2001 From: shalecraig Date: Sun, 23 Mar 2014 18:41:09 -0700 Subject: [PATCH 18/19] Added some makefile args. Having this many args is problematic, since my makefile is >80char I want to add more. --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 8f4bf9d..ecdf0b0 100644 --- a/Makefile +++ b/Makefile @@ -12,7 +12,7 @@ EXEC = tests # Pebble args: -std=c99 -fdata-sections -g -Wall -Wextra -Werror -Wno-unused-parameter -Wno-error=unused-function -Wno-error=unused-variable -fPIE -DRELEASE -Os # removed: -Wl,-z,relro -Wl,-z,now -C_ARGS = -DIS_NOT_PEBBLE -DRELEASE -pipe -m64 -ansi -fPIC -fPIE -g -Os -ffunction-sections -fno-exceptions -fstack-protector-all -fvisibility=hidden -W -Wall -Wextra -Wunused-parameter -Wunused-function -Wunused-label -Wpointer-arith -Wformat -Wreturn-type -Wsign-compare -Wmultichar -Wformat-nonliteral -Winit-self -Wuninitialized -Wdeprecated -Wformat-security -Werror -Wcomment -Wtrigraphs -Wundef -Wunused-macros -pedantic-errors -std=c99 +C_ARGS = -DIS_NOT_PEBBLE -DRELEASE -pipe -m64 -ansi -fPIC -fPIE -g -Os -ffunction-sections -fno-exceptions -fstack-protector-all -fvisibility=hidden -W -Wall -Wextra -Wunused-parameter -Wunused-function -Wunused-label -Wpointer-arith -Wformat -Wreturn-type -Wsign-compare -Wmultichar -Wformat-nonliteral -Winit-self -Wuninitialized -Wdeprecated -Wformat-security -Werror -Wcomment -Wtrigraphs -Wundef -Wunused-macros -pedantic-errors -std=c99 -fsanitize-undefined-trap-on-error # removed: -lpthread, -Wl,-z,relro -Wl,-z,now CXX_ARGS = -DIS_NOT_PEBBLE -lpthread -pipe -m64 -ansi -fPIC -g -O3 -fno-exceptions -fstack-protector -fvisibility=hidden -W -Wall -Wno-unused-parameter -Wno-unused-function -Wno-unused-label -Wpointer-arith -Wformat -Wreturn-type -Wsign-compare -Wmultichar -Wformat-nonliteral -Winit-self -Wuninitialized -Wno-deprecated -Wformat-security -Wall From 5798df5a2522b1f964d207ae68674f89ed46ac25 Mon Sep 17 00:00:00 2001 From: shalecraig Date: Sun, 23 Mar 2014 18:43:22 -0700 Subject: [PATCH 19/19] More arguments that will hopefully break the build \#yolo! --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index ecdf0b0..782c775 100644 --- a/Makefile +++ b/Makefile @@ -12,7 +12,7 @@ EXEC = tests # Pebble args: -std=c99 -fdata-sections -g -Wall -Wextra -Werror -Wno-unused-parameter -Wno-error=unused-function -Wno-error=unused-variable -fPIE -DRELEASE -Os # removed: -Wl,-z,relro -Wl,-z,now -C_ARGS = -DIS_NOT_PEBBLE -DRELEASE -pipe -m64 -ansi -fPIC -fPIE -g -Os -ffunction-sections -fno-exceptions -fstack-protector-all -fvisibility=hidden -W -Wall -Wextra -Wunused-parameter -Wunused-function -Wunused-label -Wpointer-arith -Wformat -Wreturn-type -Wsign-compare -Wmultichar -Wformat-nonliteral -Winit-self -Wuninitialized -Wdeprecated -Wformat-security -Werror -Wcomment -Wtrigraphs -Wundef -Wunused-macros -pedantic-errors -std=c99 -fsanitize-undefined-trap-on-error +C_ARGS = -DIS_NOT_PEBBLE -DRELEASE -pipe -m64 -ansi -fPIC -fPIE -g -Os -ffunction-sections -fno-exceptions -fstack-protector-all -fvisibility=hidden -W -Wall -Wextra -Wunused-parameter -Wunused-function -Wunused-label -Wpointer-arith -Wformat -Wreturn-type -Wsign-compare -Wmultichar -Wformat-nonliteral -Winit-self -Wuninitialized -Wdeprecated -Wformat-security -Werror -Wcomment -Wtrigraphs -Wundef -Wunused-macros -pedantic-errors -std=c99 -fsanitize-undefined-trap-on-error -fsanitize=alignment,bool,bounds,enum,null,return,shift,undefined-trap,unreachable # removed: -lpthread, -Wl,-z,relro -Wl,-z,now CXX_ARGS = -DIS_NOT_PEBBLE -lpthread -pipe -m64 -ansi -fPIC -g -O3 -fno-exceptions -fstack-protector -fvisibility=hidden -W -Wall -Wno-unused-parameter -Wno-unused-function -Wno-unused-label -Wpointer-arith -Wformat -Wreturn-type -Wsign-compare -Wmultichar -Wformat-nonliteral -Winit-self -Wuninitialized -Wno-deprecated -Wformat-security -Wall