Commit f7cd72e58980afb7f99db838362ed02cbd976faf

Authored by Imanol-Mikel Barba Sabariego
1 parent f6f543a3

JSON code in progress

Project/applications/smartcities/include/json.h
1 1 #ifndef JSON_H
2 2 #define JSON_H
3 3  
  4 +#include <string.h>
  5 +#include <stdint.h>
  6 +
4 7 #define JSON_POST_OK 0
5 8 #define JSON_COMM_ERROR 1
6 9 #define JSON_OTHER_ERROR 2
7 10  
8   -char* prepare_json_statement(char* data, uint32_t length);
  11 +char* prepare_json_statement(char** data, uint32_t nObservations);
9 12 char* prepare_observation(char* observation, uint32_t length);
10 13 uint8_t send_json(char* statement, uint32_t length);
11 14 uint32_t find_next_index(char* string, uint32_t length, char delimiter);
12   -char* join_strings(char* str1, char* str2, uint32_t len1, uint32_t len2)
  15 +char* join_strings(char* str1, char* str2, uint32_t len1, uint32_t len2, bool)
13 16  
14 17 #endif
... ...
Project/applications/smartcities/json.c
1   -char* prepare_json_statement(char* data, uint32_t length)
  1 +#include "json.h"
  2 +
  3 +char* prepare_json_statement(char** data, uint32_t nObservations)
2 4 {
3 5  
4 6 }
5 7  
6 8 char* prepare_observation(char* observation, uint32_t length)
7 9 {
8   -
  10 + char *json_data, *str_aux, *str_aux2;
  11 + int value_length = find_next_index(observation,length,',');
  12 + int timestamp_length = length - (value_length + 1);
  13 + char *value = (char*) chHeapAlloc(NULL,value_length+1);
  14 + char *timestamp = (char*) chHeapAlloc(NULL,timestamp_length+1);
  15 + strncpy(value,observation,value_length);
  16 + strncpy(timestamp,observation+(value_length+1),timestamp_length);
  17 + value[value_length] = '\0';
  18 + timestamp[timestamp_length] = '\0';
  19 + str_aux = join_strings("{\"value\":\"",value,10,value_length,0);
  20 + str_aux2 = join_strings(str_aux,"\",\"timestamp\":\"",10+value_length,15,0);
  21 + str_aux2 = join_strings(str_aux2,timestamp,25+value_length,timestamp_length,1);
  22 + json_data = join_strings(str_aux2,"\"}",25+value_length+timestamp_length,2,0);
  23 + chHeapFree(str_aux);
  24 + chHeapFree(str_aux2);
  25 + chHeapFree(value);
  26 + chHeapFree(timestamp);
  27 + return json_data;
9 28 }
10 29  
11 30 uint8_t send_json(char* statement, uint32_t length)
... ... @@ -31,14 +50,18 @@ uint32_t find_next_index(char* string, uint32_t length, char delimiter)
31 50 return -1;
32 51 }
33 52  
34   -char* join_strings(char* str1, char* str2, uint32_t len1, uint32_t len2)
  53 +char* join_strings(char* str1, char* str2, uint32_t len1, uint32_t len2, uint8_t free_mem)
35 54 {
36 55 char* str = (char*) chHeapAlloc(NULL,len1+len2+1);
37   - /*strcat(str,str1);
38   - strcat(str,str2);
39   - USAR STRNCAT
40   - */
41   -
  56 + strncpy(str,str1,len1);
  57 + str[len1] = '\0';
  58 + strncat(str,str2,len2);
  59 + if(free_mem)
  60 + {
  61 + free(str1);
  62 + free(str2);
  63 + }
  64 + return str;
42 65 }
43 66  
44 67 /*
... ...