diff --git a/apps/json-resource/generic_resource.c b/apps/json-resource/generic_resource.c index e968c2f76..cd8e336d1 100644 --- a/apps/json-resource/generic_resource.c +++ b/apps/json-resource/generic_resource.c @@ -119,6 +119,20 @@ static const char *get_uri (void *request) return buf; } +static const char *get_query (void *request) +{ + static char buf [MAX_QUERY_STRING_LENGTH]; + const char *query; + size_t len = coap_get_header_uri_query (request, &query); + if (len > sizeof (buf) - 1) { + *buf = '\0'; + } else { + strncpy (buf, query, len); + buf [len] = '\0'; + } + return buf; +} + void generic_get_handler ( void *request , void *response @@ -127,14 +141,20 @@ void generic_get_handler , int32_t *offset , char *name , int is_str - , size_t (*to_str)(const char *name, const char *uri, char *buf, size_t bsize) + , size_t (*to_str) + ( const char *name + , const char *uri + , const char *query + , char *buf, size_t bsize + ) ) { int success = 1; char temp [MAX_GET_STRING_LENGTH]; size_t len = 0; unsigned int accept = -1; - const char *uri = get_uri (request); + const char *uri = get_uri (request); + const char *query = get_query (request); REST.get_header_accept (request, &accept); if ( accept != -1 @@ -160,7 +180,7 @@ void generic_get_handler success = 0; goto out; } - len += to_str (name, uri, temp + len, sizeof (temp) - len); + len += to_str (name, uri, query, temp + len, sizeof (temp) - len); if (len > sizeof (temp)) { success = 0; goto out; @@ -176,7 +196,7 @@ void generic_get_handler goto out; } } else { // TEXT Format - len += to_str (name, uri, temp + len, sizeof (temp) - len); + len += to_str (name, uri, query, temp + len, sizeof (temp) - len); if (len > sizeof (temp)) { success = 0; goto out; @@ -203,7 +223,8 @@ void generic_put_handler , uint16_t preferred_size , int32_t *offset , char *name - , int (*from_str)(const char *name, const char *uri, const char *s) + , int (*from_str) + (const char *name, const char *uri, const char *query, const char *s) ) { int success = 1; @@ -212,6 +233,7 @@ void generic_put_handler const uint8_t *bytes = NULL; unsigned int c_ctype; const char *uri = get_uri (request); + const char *query = get_query (request); REST.get_header_content_type (request, &c_ctype); if (from_str && (len = coap_get_payload (request, &bytes))) { @@ -226,7 +248,7 @@ void generic_put_handler goto out; } } - if (from_str (name, uri, temp) < 0) { + if (from_str (name, uri, query, temp) < 0) { success = 0; } else { REST.set_response_status (response, REST.status.CHANGED); diff --git a/apps/json-resource/generic_resource.h b/apps/json-resource/generic_resource.h index 2c0e6ca05..56de061c7 100644 --- a/apps/json-resource/generic_resource.h +++ b/apps/json-resource/generic_resource.h @@ -50,8 +50,9 @@ #define STR__(s) #s #define STR_(s) STR__(s) -#define MAX_GET_STRING_LENGTH 100 -#define MAX_URI_STRING_LENGTH 30 +#define MAX_GET_STRING_LENGTH 100 +#define MAX_URI_STRING_LENGTH 30 +#define MAX_QUERY_STRING_LENGTH 30 /* * A macro that extends the resource definition and also sets up the @@ -124,11 +125,8 @@ extern int8_t json_parse_variable * * The callback functions get the name of the parameter as a first * argument, this allows to re-use the same function for different - * parameters. - * For the to_str function the is_json flag allows to generate a - * different string depending on the content-type. In addition it gets a - * buffer and the size of the buffer. It needs to return the number of - * bytes output, similar to sprintf. + * parameters. In addition it gets a buffer and the size of the buffer. + * It needs to return the number of bytes output, similar to sprintf. */ extern void generic_get_handler ( void *request @@ -138,7 +136,13 @@ extern void generic_get_handler , int32_t *offset , char *name , int is_str - , size_t (*to_str)(const char *name, const char *uri, char *buf, size_t bsize) + , size_t (*to_str) + ( const char *name + , const char *uri + , const char *query + , char *buf + , size_t bsize + ) ); /** @@ -161,7 +165,8 @@ extern void generic_put_handler , uint16_t preferred_size , int32_t *offset , char *name - , int (*from_str)(const char *name, const char *uri, const char *s) + , int (*from_str) + (const char *name, const char *uri, const char *query, const char *s) ); /* diff --git a/apps/time/resource_crontab.c b/apps/time/resource_crontab.c index 394a1df53..da09ea1a2 100644 --- a/apps/time/resource_crontab.c +++ b/apps/time/resource_crontab.c @@ -35,7 +35,8 @@ static size_t get_index_from_uri (const char *uri) return idx; } -int crontab_from_string (const char *name, const char *uri, const char *s) +int crontab_from_string + (const char *name, const char *uri, const char *query, const char *s) { const char *err; int res; @@ -52,7 +53,13 @@ int crontab_from_string (const char *name, const char *uri, const char *s) } size_t -crontab_to_string (const char *name, const char *uri, char *buf, size_t bsize) +crontab_to_string + ( const char *name + , const char *uri + , const char *query + , char *buf + , size_t bsize + ) { /* FIXME: For now we only return "valid" or "invalid" until someone * comes up with a clever algorithm to reconstruct a crontab string diff --git a/apps/time/resource_gmtime.c b/apps/time/resource_gmtime.c index 9aef78efe..0efd7fef1 100644 --- a/apps/time/resource_gmtime.c +++ b/apps/time/resource_gmtime.c @@ -17,7 +17,8 @@ #include "er-coap.h" #include "generic_resource.h" -size_t time_to_string (const char *name, const char *uri, char *buf, size_t bs) +size_t time_to_string + (const char *name, const char *uri, const char *query, char *buf, size_t bs) { struct xtimeval tv; struct xtm tm; diff --git a/apps/time/resource_timestamp.c b/apps/time/resource_timestamp.c index aa18a19eb..a35732d7b 100644 --- a/apps/time/resource_timestamp.c +++ b/apps/time/resource_timestamp.c @@ -21,7 +21,8 @@ #include "er-coap.h" #include "generic_resource.h" -int timestamp_from_string (const char *name, const char *uri, const char *s) +int timestamp_from_string + (const char *name, const char *uri, const char *query, const char *s) { struct xtimeval tv; // FIXME: Platform has no strtoll (long long)? @@ -31,7 +32,13 @@ int timestamp_from_string (const char *name, const char *uri, const char *s) } size_t -timestamp_to_string (const char *name, const char *uri, char *buf, size_t bsize) +timestamp_to_string + ( const char *name + , const char *uri + , const char *query + , char *buf + , size_t bsize + ) { struct xtimeval tv; xgettimeofday (&tv, NULL); diff --git a/apps/time/resource_timezone.c b/apps/time/resource_timezone.c index 1e06ad0d1..9b6968f3e 100644 --- a/apps/time/resource_timezone.c +++ b/apps/time/resource_timezone.c @@ -17,14 +17,21 @@ #include "er-coap.h" #include "generic_resource.h" -int timezone_from_string (const char *name, const char *uri, const char *s) +int timezone_from_string + (const char *name, const char *uri, const char *query, const char *s) { set_tz (s); return 0; } size_t -timezone_to_string (const char *name, const char *uri, char *buf, size_t bsize) +timezone_to_string + ( const char *name + , const char *uri + , const char *query + , char *buf + , size_t bsize + ) { if (get_tz (buf, bsize) == NULL) { *buf = '\0'; diff --git a/examples/osd/arduino-ledstrip/sketch.pde b/examples/osd/arduino-ledstrip/sketch.pde index cd8f8d42d..4a0873253 100644 --- a/examples/osd/arduino-ledstrip/sketch.pde +++ b/examples/osd/arduino-ledstrip/sketch.pde @@ -46,12 +46,19 @@ static uint8_t name_to_offset (const char * name) } static size_t -color_to_string (const char *name, const char *uri, char *buf, size_t bsize) +color_to_string + ( const char *name + , const char *uri + , const char *query + , char *buf + , size_t bsize + ) { return snprintf (buf, bsize, "%d", color_rgb [name_to_offset (name)]); } -int color_from_string (const char *name, const char *uri, const char *s) +int color_from_string + (const char *name, const char *uri, const char *query, const char *s) { color_rgb [name_to_offset (name)] = atoi (s); Driver.begin(); @@ -97,9 +104,9 @@ void setup (void) NETSTACK_MAC.off(1); - rest_activate_resource (&res_red, "led/R"); - rest_activate_resource (&res_green, "led/G"); - rest_activate_resource (&res_blue, "led/B"); + rest_activate_resource (&res_red, (char *)"led/R"); + rest_activate_resource (&res_green, (char *)"led/G"); + rest_activate_resource (&res_blue, (char *)"led/B"); Driver.begin(); Driver.SetColor(color_rgb [0], color_rgb [1], color_rgb [2]); diff --git a/examples/osd/arduino-sketch/resource_led_pwm.c b/examples/osd/arduino-sketch/resource_led_pwm.c index 2dbfa0611..03205aa09 100644 --- a/examples/osd/arduino-sketch/resource_led_pwm.c +++ b/examples/osd/arduino-sketch/resource_led_pwm.c @@ -17,7 +17,8 @@ #include "generic_resource.h" #include "led_pwm.h" -int pwm_from_string (const char *name, const char *uri, const char *s) +int pwm_from_string + (const char *name, const char *uri, const char *query, const char *s) { uint32_t tmp = strtoul (s, NULL, 10); if (tmp > 255) { @@ -28,7 +29,13 @@ int pwm_from_string (const char *name, const char *uri, const char *s) } size_t -pwm_to_string (const char *name, const char *uri, char *buf, size_t bufsize) +pwm_to_string + ( const char *name + , const char *uri + , const char *query + , char *buf + , size_t bufsize + ) { return snprintf (buf, bufsize, "%d", pwm); } @@ -42,7 +49,8 @@ GENERIC_RESOURCE \ , pwm_to_string ); -int period_from_string (const char *name, const char *uri, const char *s) +int period_from_string + (const char *name, const char *uri, const char *query, const char *s) { uint32_t tmp = (strtoul (s, NULL, 10) + 50) / 100; if (tmp > 10) { @@ -56,7 +64,13 @@ int period_from_string (const char *name, const char *uri, const char *s) } size_t -period_to_string (const char *name, const char *uri, char *buf, size_t bufsize) +period_to_string + ( const char *name + , const char *uri + , const char *query + , char *buf + , size_t bufsize + ) { return snprintf (buf, bufsize, "%d", period_100ms * 100); } @@ -71,7 +85,13 @@ GENERIC_RESOURCE \ ); size_t -analog2_v (const char *name, const char *uri, char *buf, size_t bufsize) +analog2_v + ( const char *name + , const char *uri + , const char *query + , char *buf + , size_t bufsize + ) { return snprintf (buf, bufsize, "%d.%03d", analog2_voltage / 1000, analog2_voltage % 1000); @@ -87,7 +107,13 @@ GENERIC_RESOURCE \ ); size_t -analog5_v (const char *name, const char *uri, char *buf, size_t bufsize) +analog5_v + ( const char *name + , const char *uri + , const char *query + , char *buf + , size_t bufsize + ) { return snprintf (buf, bufsize, "%d.%03d", analog5_voltage / 1000, analog5_voltage % 1000); diff --git a/examples/osd/arduino-sketch/sketch.pde b/examples/osd/arduino-sketch/sketch.pde index 60bf3af42..751175be1 100644 --- a/examples/osd/arduino-sketch/sketch.pde +++ b/examples/osd/arduino-sketch/sketch.pde @@ -25,10 +25,10 @@ void setup (void) { arduino_pwm_timer_init (); rest_init_engine (); - rest_activate_resource (&res_led_pwm, "led/pwm"); - rest_activate_resource (&res_led_period, "led/period"); - rest_activate_resource (&res_analog2_voltage, "analog/2"); - rest_activate_resource (&res_analog5_voltage, "analog/5"); + rest_activate_resource (&res_led_pwm, (char *)"led/pwm"); + rest_activate_resource (&res_led_period, (char *)"led/period"); + rest_activate_resource (&res_analog2_voltage, (char *)"analog/2"); + rest_activate_resource (&res_analog5_voltage, (char *)"analog/5"); } void loop (void) @@ -37,7 +37,7 @@ void loop (void) analogWrite (LED_PIN, 255 - pwm); analog2_voltage = analogRead (A2) * 1600L / 1023L; analog5_voltage = analogRead (A5) * 1600L / 1023L; - printf ("clock : %u\nmillis: %lu\n", clock_time (), millis ()); + printf ("clock : %lu\nmillis: %lu\n", clock_time (), millis ()); delay (period_100ms * 100); analogWrite (LED_PIN, 255); /* OFF: LED on merkur-board is wired to +3.3V */ delay (period_100ms * 100); diff --git a/examples/osd/arduino-valve/resource_valve.c b/examples/osd/arduino-valve/resource_valve.c index 6bc94e5ea..ee2c1f8fe 100644 --- a/examples/osd/arduino-valve/resource_valve.c +++ b/examples/osd/arduino-valve/resource_valve.c @@ -20,7 +20,8 @@ uint8_t valve; -int valve_from_string (const char *name, const char *uri, const char *s) +int valve_from_string + (const char *name, const char *uri, const char *query, const char *s) { uint32_t tmp = strtoul (s, NULL, 10); if (tmp) { @@ -49,7 +50,13 @@ int valve_from_string (const char *name, const char *uri, const char *s) } size_t -valve_to_string (const char *name, const char *uri, char *buf, size_t bufsize) +valve_to_string + ( const char *name + , const char *uri + , const char *query + , char *buf + , size_t bufsize + ) { return snprintf (buf, bufsize, "%d", valve); } diff --git a/examples/osd/arduino-valve/sketch.pde b/examples/osd/arduino-valve/sketch.pde index a669fcfff..2647896c9 100644 --- a/examples/osd/arduino-valve/sketch.pde +++ b/examples/osd/arduino-valve/sketch.pde @@ -25,7 +25,7 @@ void setup (void) digitalWrite (BRIDGE2_PIN, LOW); rest_init_engine (); - rest_activate_resource (&res_valve, "valve"); + rest_activate_resource (&res_valve, (char *)"valve"); } void loop (void) diff --git a/examples/osd/maclayertest/maclayertest.c b/examples/osd/maclayertest/maclayertest.c index 177eebc1b..d5f456bf5 100644 --- a/examples/osd/maclayertest/maclayertest.c +++ b/examples/osd/maclayertest/maclayertest.c @@ -81,7 +81,13 @@ uint8_t led_status; static size_t -ip_to_string (const char *name, const char *uri, char *buf, size_t bsize) +ip_to_string + ( const char *name + , const char *uri + , const char *query + , char *buf + , size_t bsize + ) { #define IP(x) UIP_NTOHS(server_ipaddr.u16[x]) return snprintf @@ -90,7 +96,8 @@ ip_to_string (const char *name, const char *uri, char *buf, size_t bsize) ); } -int ip_from_string (const char *name, const char *uri, const char *s) +int ip_from_string + (const char *name, const char *uri, const char *query, const char *s) { /* Returns 1 if successful, only copy valid address */ if (uiplib_ip6addrconv (s, &tmp_addr)) { @@ -110,12 +117,19 @@ GENERIC_RESOURCE ); static size_t -resource_to_string (const char *name, const char *uri, char *buf, size_t bsize) +resource_to_string + ( const char *name + , const char *uri + , const char *query + , char *buf + , size_t bsize + ) { return snprintf (buf, bsize, "%s", server_resource); } -int resource_from_string (const char *name, const char *uri, const char *s) +int resource_from_string + (const char *name, const char *uri, const char *query, const char *s) { strncpy (server_resource, s, sizeof (server_resource)); server_resource [sizeof (server_resource) - 1] = 0; @@ -132,12 +146,19 @@ GENERIC_RESOURCE ); static size_t -interval_to_string (const char *name, const char *uri, char *buf, size_t bsize) +interval_to_string + ( const char *name + , const char *uri + , const char *query + , char *buf + , size_t bsize + ) { return snprintf (buf, bsize, "%d", interval); } -int interval_from_string (const char *name, const char *uri, const char *s) +int interval_from_string + ( const char *name, const char *uri, const char *query, const char *s) { interval = atoi (s); return 0; diff --git a/examples/osd/opentrigger-board/sketch.h b/examples/osd/opentrigger-board/sketch.h index 065d302d3..8c79ce3cd 100644 --- a/examples/osd/opentrigger-board/sketch.h +++ b/examples/osd/opentrigger-board/sketch.h @@ -5,8 +5,15 @@ extern "C" { #endif -size_t color_to_string (const char *name, const char *uri, char *buf, size_t bsize); -int color_from_string (const char *name, const char *uri, const char *s); +size_t color_to_string + ( const char *name + , const char *uri + , const char *query + , char *buf + , size_t bsize + ); +int color_from_string + (const char *name, const char *uri, const char *query, const char *s); int color_rgb_from_string (const char *r, const char *g, const char *b); #ifdef __cplusplus diff --git a/examples/osd/opentrigger-board/sketch.pde b/examples/osd/opentrigger-board/sketch.pde index 6026959c5..83ac77653 100755 --- a/examples/osd/opentrigger-board/sketch.pde +++ b/examples/osd/opentrigger-board/sketch.pde @@ -68,13 +68,20 @@ name_to_offset (const char * name) } extern "C" size_t -color_to_string (const char *name, const char *uri, char *buf, size_t bsize) +color_to_string + ( const char *name + , const char *uri + , const char *query + , char *buf + , size_t bsize + ) { return snprintf (buf, bsize, "%d", color_rgb [name_to_offset (name)]); } extern "C" int -color_from_string (const char *name, const char *uri, const char *s) +color_from_string + (const char *name, const char *uri, const char *query, const char *s) { color_rgb [name_to_offset (name)] = atoi (s); leds.setColorRGB(0,color_rgb [0], color_rgb [1], color_rgb [2]); @@ -93,7 +100,13 @@ color_rgb_from_string (const char *r, const char *g, const char *b) } static size_t -ip_to_string (const char *name, const char *uri, char *buf, size_t bsize) +ip_to_string + ( const char *name + , const char *uri + , const char *query + , char *buf + , size_t bsize + ) { #define IP(x) UIP_NTOHS(server_ipaddr.u16[x]) return snprintf @@ -102,7 +115,8 @@ ip_to_string (const char *name, const char *uri, char *buf, size_t bsize) ); } -int ip_from_string (const char *name, const char *uri, const char *s) +int ip_from_string + (const char *name, const char *uri, const char *query, const char *s) { /* Returns 1 if successful, only copy valid address */ if (uiplib_ip6addrconv (s, &tmp_addr)) { diff --git a/examples/osd/openvoting-box/sketch.h b/examples/osd/openvoting-box/sketch.h index 065d302d3..8c79ce3cd 100644 --- a/examples/osd/openvoting-box/sketch.h +++ b/examples/osd/openvoting-box/sketch.h @@ -5,8 +5,15 @@ extern "C" { #endif -size_t color_to_string (const char *name, const char *uri, char *buf, size_t bsize); -int color_from_string (const char *name, const char *uri, const char *s); +size_t color_to_string + ( const char *name + , const char *uri + , const char *query + , char *buf + , size_t bsize + ); +int color_from_string + (const char *name, const char *uri, const char *query, const char *s); int color_rgb_from_string (const char *r, const char *g, const char *b); #ifdef __cplusplus diff --git a/examples/osd/openvoting-box/sketch.pde b/examples/osd/openvoting-box/sketch.pde index 7cc08162e..5f1d2e23b 100755 --- a/examples/osd/openvoting-box/sketch.pde +++ b/examples/osd/openvoting-box/sketch.pde @@ -70,13 +70,20 @@ name_to_offset (const char * name) } extern "C" size_t -color_to_string (const char *name, const char *uri, char *buf, size_t bsize) +color_to_string + ( const char *name + , const char *uri + , const char *query + , char *buf + , size_t bsize + ) { return snprintf (buf, bsize, "%d", color_rgb [name_to_offset (name)]); } extern "C" int -color_from_string (const char *name, const char *uri, const char *s) +color_from_string + (const char *name, const char *uri, const char *query, const char *s) { color_rgb [name_to_offset (name)] = atoi (s); leds.setColorRGB(0,color_rgb [0], color_rgb [1], color_rgb [2]); @@ -95,7 +102,13 @@ color_rgb_from_string (const char *r, const char *g, const char *b) } static size_t -ip_to_string (const char *name, const char *uri, char *buf, size_t bsize) +ip_to_string + ( const char *name + , const char *uri + , const char *query + , char *buf + , size_t bsize + ) { #define IP(x) UIP_NTOHS(server_ipaddr.u16[x]) return snprintf @@ -104,7 +117,8 @@ ip_to_string (const char *name, const char *uri, char *buf, size_t bsize) ); } -int ip_from_string (const char *name, const char *uri, const char *s) +int ip_from_string + (const char *name, const char *uri, const char *query, const char *s) { /* Returns 1 if successful, only copy valid address */ if (uiplib_ip6addrconv (s, &tmp_addr)) { diff --git a/examples/osd/ota-update/res_bootloader.c b/examples/osd/ota-update/res_bootloader.c index fb44a7ae6..e43e84e3d 100644 --- a/examples/osd/ota-update/res_bootloader.c +++ b/examples/osd/ota-update/res_bootloader.c @@ -56,7 +56,13 @@ */ static size_t -part_count (const char *name, const char *uri, char *buf, size_t bsize) +part_count + ( const char *name + , const char *uri + , const char *query + , char *buf + , size_t bsize + ) { return snprintf (buf, bsize, "%ld", bootloader_get_part_count ()); } @@ -71,7 +77,13 @@ GENERIC_RESOURCE ); static size_t -part_size (const char *name, const char *uri, char *buf, size_t bsize) +part_size + ( const char *name + , const char *uri + , const char *query + , char *buf + , size_t bsize + ) { return snprintf (buf, bsize, "%ld", bootloader_get_part_size ()); } @@ -86,13 +98,20 @@ GENERIC_RESOURCE ); static size_t -get_boot_default (const char *name, const char *uri, char *buf, size_t bsize) +get_boot_default + ( const char *name + , const char *uri + , const char *query + , char *buf + , size_t bsize + ) { return snprintf (buf, bsize, "%ld", bootloader_get_boot_default ()); } static int -set_boot_default (const char *name, const char *uri, const char *s) +set_boot_default + (const char *name, const char *uri, const char *query, const char *s) { uint32_t tmp = strtoul (s, NULL, 10); bootloader_set_boot_default (tmp); @@ -109,13 +128,20 @@ GENERIC_RESOURCE ); static size_t -get_boot_next (const char *name, const char *uri, char *buf, size_t bsize) +get_boot_next + ( const char *name + , const char *uri + , const char *query + , char *buf + , size_t bsize + ) { return snprintf (buf, bsize, "%ld", bootloader_get_boot_next ()); } static int -set_boot_next (const char *name, const char *uri, const char *s) +set_boot_next + (const char *name, const char *uri, const char *query, const char *s) { uint32_t tmp = strtoul (s, NULL, 10); bootloader_set_boot_next (tmp); @@ -132,7 +158,13 @@ GENERIC_RESOURCE ); static size_t -get_callers_part (const char *name, const char *uri, char *buf, size_t bsize) +get_callers_part + ( const char *name + , const char *uri + , const char *query + , char *buf + , size_t bsize + ) { return snprintf (buf, bsize, "%ld", bootloader_get_callers_part ()); } @@ -146,5 +178,72 @@ GENERIC_RESOURCE , get_callers_part ); +/* + * Parse query info. We insist that the query starts with 'part=' + * Then we parse the integer following the part= string and return the + * number. The number is always positive, if something goes wrong we + * return a negative number. + */ +static int get_query_partition (const char *query) +{ + if (strncmp (query, "part=", 5)) { + return -1; + } + return strtoul (query + 5, NULL, 10); +} + +static size_t +get_part_start + ( const char *name + , const char *uri + , const char *query + , char *buf + , size_t bsize + ) +{ + int idx = get_query_partition (query); + printf ("part: %d", idx); + if (idx < 0) { + return snprintf (buf, bsize, "Invalid: %s", query); + } + return snprintf (buf, bsize, "%ld", bootloader_get_part_start (idx)); +} + +GENERIC_RESOURCE + ( part_start + , Start of partition + , count + , 0 + , NULL + , get_part_start + ); + +static int +set_part_ok + (const char *name, const char *uri, const char *query, const char *s) +{ + uint32_t tmp = strtoul (s, NULL, 10); + int idx = get_query_partition (query); + printf ("part: %d", idx); + if (idx < 0) { + return -1; + } + if (tmp) { + bootloader_set_part_ok (idx); + } else { + bootloader_clr_part_ok (idx); + } + return 0; +} + +GENERIC_RESOURCE + ( part_ok + , Set/Clear Partition OK flag + , count + , 0 + , set_part_ok + , NULL + ); + // FIXME: Find out how to pass two parameters, for set/clr_part_ok and // for get_part_start diff --git a/examples/osd/ota-update/sketch.pde b/examples/osd/ota-update/sketch.pde index 5754add6c..932378d3f 100644 --- a/examples/osd/ota-update/sketch.pde +++ b/examples/osd/ota-update/sketch.pde @@ -11,7 +11,6 @@ extern "C" { #include "contiki.h" #include "contiki-net.h" #include "er-coap.h" -#include "bootloader_if.h" #include "resources.h" char resname[] = "update"; } @@ -26,15 +25,10 @@ void setup (void) rest_activate_resource (&res_boot_default, (char *)"boot_default"); rest_activate_resource (&res_boot_next, (char *)"boot_next"); rest_activate_resource (&res_callers_part, (char *)"callers_part"); + rest_activate_resource (&res_part_start, (char *)"part_start"); + rest_activate_resource (&res_part_ok, (char *)"part_ok"); } void loop (void) { - printf ("part-count: %ld\n", bootloader_get_part_count ()); - printf ("part-size: %ld\n", bootloader_get_part_size ()); - printf ("part-start 0: 0x%lx\n", bootloader_get_part_start (0)); - printf ("part-start 1: 0x%lx\n", bootloader_get_part_start (1)); - printf ("boot-default: %ld\n", bootloader_get_boot_default ()); - printf ("boot-next: %ld\n", bootloader_get_boot_next ()); - printf ("callers-part: %ld\n", bootloader_get_callers_part ()); } diff --git a/examples/osd/poti/poti.c b/examples/osd/poti/poti.c index 2e7c82143..fb5b0fd57 100644 --- a/examples/osd/poti/poti.c +++ b/examples/osd/poti/poti.c @@ -77,7 +77,13 @@ char server_resource [20] = "led/G"; int interval = 10; /* Retransmit interval after no change in value */ static size_t -ip_to_string (const char *name, const char *uri, char *buf, size_t bsize) +ip_to_string + ( const char *name + , const char *uri + , const char *query + , char *buf + , size_t bsize + ) { #define IP(x) UIP_NTOHS(server_ipaddr.u16[x]) return snprintf @@ -86,7 +92,8 @@ ip_to_string (const char *name, const char *uri, char *buf, size_t bsize) ); } -int ip_from_string (const char *name, const char *uri, const char *s) +int ip_from_string + (const char *name, const char *uri, const char *query, const char *s) { /* Returns 1 if successful, only copy valid address */ if (uiplib_ip6addrconv (s, &tmp_addr)) { @@ -106,12 +113,19 @@ GENERIC_RESOURCE ); static size_t -resource_to_string (const char *name, const char *uri, char *buf, size_t bsize) +resource_to_string + ( const char *name + , const char *uri + , const char *query + , char *buf + , size_t bsize + ) { return snprintf (buf, bsize, "%s", server_resource); } -int resource_from_string (const char *name, const char *uri, const char *s) +int resource_from_string + (const char *name, const char *uri, const char *query, const char *s) { strncpy (server_resource, s, sizeof (server_resource)); server_resource [sizeof (server_resource) - 1] = 0; @@ -128,12 +142,19 @@ GENERIC_RESOURCE ); static size_t -interval_to_string (const char *name, const char *uri, char *buf, size_t bsize) +interval_to_string + ( const char *name + , const char *uri + , const char *query + , char *buf + , size_t bsize + ) { return snprintf (buf, bsize, "%d", interval); } -int interval_from_string (const char *name, const char *uri, const char *s) +int interval_from_string + (const char *name, const char *uri, const char *query, const char *s) { interval = atoi (s); return 0; diff --git a/examples/osd/pwm-example/resource_led_pwm.c b/examples/osd/pwm-example/resource_led_pwm.c index a6d4b58a8..eb8db98b6 100644 --- a/examples/osd/pwm-example/resource_led_pwm.c +++ b/examples/osd/pwm-example/resource_led_pwm.c @@ -36,7 +36,8 @@ void led_pwm_init (void) DDRE |= (1< max_ticks) { @@ -50,9 +51,16 @@ void pwm_from_string (const char *name, const char *s) ( "TCNT3: %04X TCCR3A: %04X TCCR3B: %04X TCCR3C: %04X OCR3C: %04X\n" , TCNT3, TCCR3A, TCCR3B, TCCR3C, OCR3C ); + return 0; } -size_t pwm_to_string (const char *n, uint8_t is_json, char *buf, size_t bufsize) +size_t pwm_to_string + ( const char *n + , const char *uri + , const char *query + , char *buf + , size_t bufsize + ) { return snprintf (buf, bufsize, "%d", pwm); } @@ -61,6 +69,7 @@ GENERIC_RESOURCE \ ( led_pwm , LED PWM , duty-cycle + , 0 , pwm_from_string , pwm_to_string );