Commit f352470ce435a7f355ddaaf155da7ccfa2c419f3
1 parent
554a12ad
--no commit message
Showing
6 changed files
with
353 additions
and
681 deletions
Project/applications/smartcities/adc.c
... | ... | @@ -22,49 +22,36 @@ void adc_batt_peripheralInit() |
22 | 22 | ADC_InitTypeDef ADC_InitStructure; |
23 | 23 | RCC_APB2PeriphClockCmd(ADCbatt_GPIO_RCC, ENABLE); |
24 | 24 | GPIO_InitStructure.GPIO_Pin = ADCbatt_GPIO_PIN; |
25 | - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; | |
26 | - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; | |
27 | - GPIO_Init(ADCbatt_GPIO_PORT, &GPIO_InitStructure); | |
25 | + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; | |
26 | + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; | |
27 | + GPIO_Init(ADCbatt_GPIO_PORT, &GPIO_InitStructure); | |
28 | 28 | |
29 | 29 | RCC_ADCCLKConfig(ADCbatt_DIVIDER); |
30 | 30 | RCC_APB2PeriphClockCmd(ADCbatt_RCC, ENABLE); |
31 | 31 | ADC_DeInit(ADCbatt); |
32 | 32 | |
33 | - /* ADC1 and ADC2 operate independently */ | |
34 | 33 | ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; |
35 | - /* Disable the scan conversion so we do one at a time */ | |
36 | 34 | ADC_InitStructure.ADC_ScanConvMode = DISABLE; |
37 | - /* Don't do contimuous conversions - do them on demand */ | |
38 | 35 | ADC_InitStructure.ADC_ContinuousConvMode = DISABLE; |
39 | - /* Start conversin by software, not an external trigger */ | |
40 | 36 | ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; |
41 | - /* Conversions are 12 bit - put them in the lower 12 bits of the result */ | |
42 | 37 | ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; |
43 | - /* Say how many channels would be used by the sequencer */ | |
44 | 38 | ADC_InitStructure.ADC_NbrOfChannel = 1; |
45 | 39 | |
46 | 40 | ADC_RegularChannelConfig(ADCbatt, ADCbatt_CHANNEL, 1, ADCbatt_SAMPLETIME); |
47 | 41 | ADC_Init(ADCbatt, &ADC_InitStructure); |
48 | 42 | ADC_Cmd(ADCbatt, ENABLE); |
49 | 43 | |
50 | - /* Enable ADCbatt reset calibaration register */ | |
51 | 44 | ADC_ResetCalibration(ADCbatt); |
52 | - /* Check the end of ADCbatt reset calibration register */ | |
53 | 45 | while(ADC_GetResetCalibrationStatus(ADCbatt)); |
54 | - /* Start ADCbatt calibaration */ | |
55 | 46 | ADC_StartCalibration(ADCbatt); |
56 | - /* Check the end of ADC1 calibration */ | |
57 | 47 | while(ADC_GetCalibrationStatus(ADCbatt)); |
58 | 48 | } |
59 | 49 | |
60 | 50 | uint16_t adc_batt_read() |
61 | 51 | { |
62 | - /* Start the conversion */ | |
63 | - ADC_SoftwareStartConvCmd(ADCbatt, ENABLE); | |
64 | - /* Wait until conversion completion */ | |
65 | - while(ADC_GetFlagStatus(ADCbatt, ADC_FLAG_EOC) == RESET); | |
66 | - /* Get the conversion value */ | |
67 | - return ADC_GetConversionValue(ADCbatt); | |
52 | + ADC_SoftwareStartConvCmd(ADCbatt, ENABLE); | |
53 | + while(ADC_GetFlagStatus(ADCbatt, ADC_FLAG_EOC) == RESET); | |
54 | + return ADC_GetConversionValue(ADCbatt); | |
68 | 55 | } |
69 | 56 | |
70 | 57 | void adc_sound_init() |
... | ... | @@ -89,49 +76,35 @@ void adc_sound_peripheralInit() |
89 | 76 | ADC_InitTypeDef ADC_InitStructure; |
90 | 77 | RCC_APB2PeriphClockCmd(ADCsound_GPIO_RCC, ENABLE); |
91 | 78 | GPIO_InitStructure.GPIO_Pin = ADCsound_GPIO_PIN; |
92 | - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; | |
93 | - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; | |
94 | - GPIO_Init(ADCsound_GPIO_PORT, &GPIO_InitStructure); | |
79 | + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; | |
80 | + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; | |
81 | + GPIO_Init(ADCsound_GPIO_PORT, &GPIO_InitStructure); | |
95 | 82 | |
96 | 83 | RCC_ADCCLKConfig(ADCsound_DIVIDER); |
97 | 84 | RCC_APB2PeriphClockCmd(ADCsound_RCC, ENABLE); |
98 | 85 | ADC_DeInit(ADCsound); |
99 | 86 | |
100 | - | |
101 | - /* ADC1 and ADC2 operate independently */ | |
102 | 87 | ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; |
103 | - /* Disable the scan conversion so we do one at a time */ | |
104 | 88 | ADC_InitStructure.ADC_ScanConvMode = DISABLE; |
105 | - /* Don't do contimuous conversions - do them on demand */ | |
106 | 89 | ADC_InitStructure.ADC_ContinuousConvMode = DISABLE; |
107 | - /* Start conversin by software, not an external trigger */ | |
108 | 90 | ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; |
109 | - /* Conversions are 12 bit - put them in the lower 12 bits of the result */ | |
110 | 91 | ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; |
111 | - /* Say how many channels would be used by the sequencer */ | |
112 | 92 | ADC_InitStructure.ADC_NbrOfChannel = 1; |
113 | - | |
114 | - ADC_RegularChannelConfig(ADCsound, ADCsound_CHANNEL, 1, ADCsound_SAMPLETIME); | |
93 | + | |
94 | + ADC_RegularChannelConfig(ADCsound, ADCsound_CHANNEL, 1, ADCsound_SAMPLETIME); | |
115 | 95 | ADC_Init(ADCsound, &ADC_InitStructure); |
116 | 96 | ADC_Cmd(ADCsound, ENABLE); |
117 | 97 | |
118 | - /* Enable ADCsound reset calibaration register */ | |
119 | 98 | ADC_ResetCalibration(ADCsound); |
120 | - /* Check the end of ADCsound reset calibration register */ | |
121 | 99 | while(ADC_GetResetCalibrationStatus(ADCsound)); |
122 | - /* Start ADCsound calibaration */ | |
123 | 100 | ADC_StartCalibration(ADCsound); |
124 | - /* Check the end of ADC1 calibration */ | |
125 | 101 | while(ADC_GetCalibrationStatus(ADCsound)); |
126 | 102 | } |
127 | 103 | |
128 | 104 | uint16_t adc_sound_read() |
129 | 105 | { |
130 | - /* Start the conversion */ | |
131 | - ADC_SoftwareStartConvCmd(ADCsound, ENABLE); | |
132 | - /* Wait until conversion completion */ | |
133 | - while(ADC_GetFlagStatus(ADCsound, ADC_FLAG_EOC) == RESET); | |
134 | - /* Get the conversion value */ | |
135 | - return ADC_GetConversionValue(ADCsound); | |
106 | + ADC_SoftwareStartConvCmd(ADCsound, ENABLE); | |
107 | + while(ADC_GetFlagStatus(ADCsound, ADC_FLAG_EOC) == RESET); | |
108 | + return ADC_GetConversionValue(ADCsound); | |
136 | 109 | } |
137 | 110 | ... | ... |
Project/applications/smartcities/buffer.c
1 | 1 | #include "buffer.h" |
2 | 2 | #include "globals.h" |
3 | 3 | |
4 | -char** put_message(char* info, char** buf,uint32_t *index, uint32_t *buf_len){ | |
5 | - | |
6 | -uint32_t i,len; | |
7 | -len=*buf_len; | |
8 | -if(len==*index) | |
9 | -{ | |
10 | - printf("Joining buffer...\r\n"); | |
11 | - char** buffer=join_buf(buf, buf_len); | |
12 | - printf("Joined buffer...\r\n"); | |
13 | - buffer[*index]=chHeapAlloc(NULL,strlen(info)+1); | |
14 | - printf("Memory allocated...\r\n"); | |
15 | - strcpy(buffer[*index],info); | |
16 | - printf("Data copied...\r\n"); | |
17 | - i=*index+1; | |
18 | - *index = i; | |
19 | - return buffer; | |
20 | -} | |
21 | -else | |
4 | +char** put_message(char* info, char** buf,uint32_t *index, uint32_t *buf_len) | |
22 | 5 | { |
23 | - printf("WTF in put_message\r\n"); | |
24 | - buf[*index] = chHeapAlloc(NULL,strlen(info)+1); | |
25 | - buf[*index]=info; | |
26 | - i=*index+1; | |
27 | - *index = i; | |
28 | - return buf; | |
29 | -} | |
30 | - | |
6 | + uint32_t i,len; | |
7 | + len=*buf_len; | |
8 | + if(len==*index) | |
9 | + { | |
10 | + printf("Joining buffer...\r\n"); | |
11 | + char** buffer = join_buf(buf, buf_len); | |
12 | + printf("Joined buffer...\r\n"); | |
13 | + buffer[*index] = chHeapAlloc(NULL,strlen(info)+1); | |
14 | + printf("Memory allocated...\r\n"); | |
15 | + strcpy(buffer[*index],info); | |
16 | + printf("Data copied...\r\n"); | |
17 | + i = *index+1; | |
18 | + *index = i; | |
19 | + return buffer; | |
20 | + } | |
21 | + else | |
22 | + { | |
23 | + printf("WTF in put_message\r\n"); | |
24 | + buf[*index] = chHeapAlloc(NULL,strlen(info)+1); | |
25 | + buf[*index] = info; | |
26 | + i = *index+1; | |
27 | + *index = i; | |
28 | + return buf; | |
29 | + } | |
31 | 30 | } |
32 | 31 | |
33 | -int check_memory(){ | |
34 | - | |
32 | +int check_memory() | |
33 | +{ | |
35 | 34 | printf("Memรฒria disponible en bytes segons:\r\n"); |
36 | - | |
37 | - int mem_free=libwismart_GetMemFree_Ram().free; | |
38 | - //printf("- free_core: %d %d\r\n", mem_free, MAX_RAM-mem_free); | |
39 | - printf("- free: %d %d\r\n", libwismart_GetMemFree_Ram().free, MAX_RAM- libwismart_GetMemFree_Ram().free); | |
40 | - | |
41 | - | |
42 | - //int mem_free=20000; | |
43 | - int mem=MAX_RAM-mem_free; | |
35 | + int mem_free = libwismart_GetMemFree_Ram().free; | |
36 | + printf("- free: %d %d\r\n", libwismart_GetMemFree_Ram().free, MAX_RAM - libwismart_GetMemFree_Ram().free); | |
37 | + int mem = MAX_RAM - mem_free; | |
44 | 38 | printf("mem ocupada=%d\r\n",mem); |
45 | - if(mem>=HARD_LIMIT) | |
39 | + if(mem >= HARD_LIMIT) | |
46 | 40 | { |
47 | 41 | return HARD_REACHED; |
48 | 42 | } |
49 | - else if(mem >= SOFT_LIMIT){ | |
43 | + else if(mem >= SOFT_LIMIT) | |
44 | + { | |
50 | 45 | return SOFT_REACHED; |
51 | 46 | } |
52 | 47 | return MEMORY_OK; |
53 | 48 | } |
54 | 49 | |
55 | -int send(char** buf, uint32_t *index, uint32_t *size_buf, char *provider_ID, char *sensor_ID){ | |
50 | +int send(char** buf, uint32_t *index, uint32_t *size_buf, char *provider_ID, char *sensor_ID) | |
51 | +{ | |
56 | 52 | printf("abans del JSON statement\r\n"); |
57 | 53 | printf("index= %d \r\n",*index); |
58 | 54 | char* statement=prepare_json_observation_statement(buf, *index); |
59 | 55 | uint32_t size = strlen(statement); |
60 | 56 | if(buf==NULL) |
61 | - { return 2; } | |
57 | + { | |
58 | + return 2; | |
59 | + } | |
62 | 60 | printf("abans del JSON\r\n"); |
63 | - uint8_t res=send_json(statement, size, provider_ID, sensor_ID); | |
61 | + uint8_t res = send_json(statement, size, provider_ID, sensor_ID); | |
64 | 62 | chHeapFree(statement); |
65 | 63 | int i; |
66 | 64 | printf("JSON_POST_OK ? %d\r\n",res == JSON_POST_OK); |
67 | - if(res==JSON_POST_OK){ | |
65 | + if(res==JSON_POST_OK) | |
66 | + { | |
68 | 67 | for(i=0;i<*index;i++) |
69 | 68 | { |
70 | 69 | chHeapFree(buf[i]); |
71 | 70 | } |
72 | - printf("djfkhvldkfjhdรฑkfgv\r\n"); | |
73 | 71 | if(buf!=NULL) |
74 | 72 | chHeapFree(buf); |
75 | 73 | |
... | ... | @@ -81,15 +79,17 @@ int send(char** buf, uint32_t *index, uint32_t *size_buf, char *provider_ID, cha |
81 | 79 | } |
82 | 80 | |
83 | 81 | //realloc |
84 | -char** join_buf(char** buf, uint32_t *buf_len){ | |
82 | +char** join_buf(char** buf, uint32_t *buf_len) | |
83 | +{ | |
85 | 84 | char** n_buf; |
86 | - int len= *buf_len; | |
87 | - n_buf=chHeapAlloc (NULL,sizeof (char *) * (len+1)); | |
85 | + int len = *buf_len; | |
86 | + n_buf = chHeapAlloc (NULL,sizeof (char *) * (len+1)); | |
88 | 87 | int i; |
89 | 88 | printf("Start buffer join...\r\n"); |
90 | - for(i=0; i<len;i++){ | |
89 | + for(i=0; i<len;i++) | |
90 | + { | |
91 | 91 | printf("in join_buf for, Asking for %d bytes...\r\n",strlen(buf[i]+1)); |
92 | - n_buf[i]=chHeapAlloc(NULL,strlen(buf[i])+1); | |
92 | + n_buf[i] = chHeapAlloc(NULL,strlen(buf[i])+1); | |
93 | 93 | printf("in join_buf for, Memory allocated...\r\n"); |
94 | 94 | strcpy(n_buf[i],buf[i]); |
95 | 95 | printf("in join_buf for, Message copied...\r\n"); |
... | ... | @@ -97,10 +97,12 @@ char** join_buf(char** buf, uint32_t *buf_len){ |
97 | 97 | printf("in join_buf for, Memory cleared...\r\n"); |
98 | 98 | } |
99 | 99 | printf("All data transferred\r\n"); |
100 | - if(len!=0) | |
101 | - { chHeapFree(buf); } | |
100 | + if(len != 0) | |
101 | + { | |
102 | + chHeapFree(buf); | |
103 | + } | |
102 | 104 | printf("Old buffer cleared\r\n"); |
103 | 105 | len++; |
104 | 106 | *buf_len=len; |
105 | 107 | return n_buf; |
106 | -} | |
108 | +} | |
107 | 109 | \ No newline at end of file | ... | ... |
Project/applications/smartcities/i2c.c
... | ... | @@ -7,31 +7,25 @@ void I2C_init(void) |
7 | 7 | GPIO_InitTypeDef GPIO_InitStruct; |
8 | 8 | I2C_InitTypeDef I2C_InitStruct; |
9 | 9 | |
10 | - // enable APB1 peripheral clock for I2C1 | |
11 | 10 | RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1, ENABLE); |
12 | 11 | RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE); |
13 | 12 | |
14 | 13 | GPIO_StructInit(&GPIO_InitStruct); |
15 | - GPIO_InitStruct.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7; // PB6 and PB7 | |
16 | - GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_OD; // set pins to alternate function | |
17 | - GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; // set GPIO speed | |
18 | - GPIO_Init(GPIOB, &GPIO_InitStruct); // init GPIOB | |
14 | + GPIO_InitStruct.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7; | |
15 | + GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_OD; | |
16 | + GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; | |
17 | + GPIO_Init(GPIOB, &GPIO_InitStruct); | |
19 | 18 | |
20 | - // configure I2C1 | |
21 | 19 | I2C_StructInit(&I2C_InitStruct); |
22 | - I2C_InitStruct.I2C_ClockSpeed = 100000; // 100kHz(standard) vs 400 | |
23 | - I2C_InitStruct.I2C_Mode = I2C_Mode_I2C; // I2C mode | |
24 | - I2C_InitStruct.I2C_DutyCycle = I2C_DutyCycle_2; // 50% duty cycle --> standard | |
25 | - I2C_InitStruct.I2C_OwnAddress1 = 0x00; // own address, not relevant in master mode | |
26 | - I2C_InitStruct.I2C_Ack = I2C_Ack_Enable; // disable acknowledge when reading (can be changed later on) | |
27 | - I2C_InitStruct.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit; // set address length to 7 bit addresses | |
28 | - I2C_Init(I2C1, &I2C_InitStruct); // init I2C1 | |
29 | - | |
30 | - //Enable clock stretching | |
20 | + I2C_InitStruct.I2C_ClockSpeed = 100000; | |
21 | + I2C_InitStruct.I2C_Mode = I2C_Mode_I2C; | |
22 | + I2C_InitStruct.I2C_DutyCycle = I2C_DutyCycle_2; | |
23 | + I2C_InitStruct.I2C_OwnAddress1 = 0x00; | |
24 | + I2C_InitStruct.I2C_Ack = I2C_Ack_Enable; | |
25 | + I2C_InitStruct.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit; | |
26 | + I2C_Init(I2C1, &I2C_InitStruct); | |
31 | 27 | I2C_StretchClockCmd(I2C1, ENABLE); |
32 | - | |
33 | - // enable I2C1 | |
34 | - I2C_Cmd(I2C1, ENABLE); //sets PE bit in CR1, at end` | |
28 | + I2C_Cmd(I2C1, ENABLE); | |
35 | 29 | } |
36 | 30 | |
37 | 31 | void I2C_start(I2C_TypeDef* I2Cx, uint8_t address, uint8_t direction) | ... | ... |
Project/applications/smartcities/main.c
... | ... | @@ -8,10 +8,12 @@ |
8 | 8 | #include "buffer.h" |
9 | 9 | #include "i2c.h" |
10 | 10 | #include "configServer.h" |
11 | +#include "timer-loop.h" | |
12 | +#include "ntp.h" | |
11 | 13 | #include "sensors.h" |
12 | 14 | |
13 | 15 | #define WIFI_MODE WIFI_MODE_CLIENT |
14 | -#define NETWORK_SSID_AP "modularsens" | |
16 | +#define NETWORK_SSID_AP "modularsense" | |
15 | 17 | #define NETWORK_KEY_AP NULL |
16 | 18 | #define NETWORK_CHANNEL_AP 1 |
17 | 19 | |
... | ... | @@ -29,14 +31,33 @@ void initLibwismart(void) |
29 | 31 | uint8_t connected=0; |
30 | 32 | uint8_t timeout=0; |
31 | 33 | uint8_t retries=0; |
34 | +uint8_t sensors_length=0; | |
35 | +uint8_t registry_opened=0; | |
36 | + | |
37 | +module mod; | |
38 | + | |
39 | +void update_time(unsigned long *time) | |
40 | +{ | |
41 | + printf("Requesting new NTP time...\r\n"); | |
42 | + unsigned long new_time = getSecsSince1900(); | |
43 | + if(new_time) | |
44 | + { | |
45 | + *time = getSecsSince1900(); | |
46 | + } | |
47 | + printf("Time updated...\r\n"); | |
48 | +} | |
32 | 49 | |
33 | 50 | void init_registry(void) |
34 | 51 | { |
35 | 52 | config_params_t config; |
36 | 53 | |
37 | 54 | strcpy(config.localization,"none"); |
38 | - libwismart_RegistryCreateKey(&geo, 1, sizeof(config)); | |
39 | - libwismart_RegistryOpen(1); | |
55 | + if(!registry_opened) | |
56 | + { | |
57 | + libwismart_RegistryCreateKey(&geo, 1, sizeof(config)); | |
58 | + libwismart_RegistryOpen(1); | |
59 | + registry_opened = 1; | |
60 | + } | |
40 | 61 | if(!libwismart_RegistryIsValueEmpty(&geo)) |
41 | 62 | { |
42 | 63 | libwismart_RegistryGet(&geo,&config); |
... | ... | @@ -51,6 +72,7 @@ void init_registry(void) |
51 | 72 | printf("Geo Localization = %s\r\n", config.localization); |
52 | 73 | |
53 | 74 | strcpy(mod.geoloc,config.localization); |
75 | + strcpy(mod.ID,MODULE_ID); | |
54 | 76 | if(config.security == PROFILE_SECURITY_OPEN) |
55 | 77 | { |
56 | 78 | printf("open detected\r\n"); |
... | ... | @@ -79,29 +101,75 @@ void init_registry(void) |
79 | 101 | printf("wep detected\r\n"); |
80 | 102 | //Is WEP |
81 | 103 | libwismart_WiFiConnect(config.ssid,config.wepkey,wifi_connect_result_cb); |
104 | + libwismart_WiFiSetWep(config.wepkey,1); | |
82 | 105 | } |
83 | 106 | while(connected == 0 && timeout != 1 ) |
84 | 107 | {chThdSleepMilliseconds(500);} |
85 | 108 | |
86 | 109 | } |
87 | -int main(void) | |
110 | + | |
111 | +void send_data(char** buffers[], uint32_t ind[], uint32_t sizes[], uint8_t sensors[]) | |
88 | 112 | { |
89 | - initLibwismart(); | |
90 | - libwismart_PowerSave_Enable(); | |
91 | - libwismart_PowerSave_HigherProfile(TRUE); | |
92 | - libwismart_RegisterDhcpCB(dhcp_connect_result_cb); | |
93 | - libwismart_WiFiInit(); | |
94 | - libwismart_SetScanRunsForConnTimeout(4); //Edit a 4 | |
95 | - libwismart_EnableBsdSocketAPI(); | |
113 | + int j; | |
114 | + for(j=0;j<sensors_length;j++) | |
115 | + { | |
116 | + printf(" enviant buffer %d\r\n",j); | |
117 | + | |
118 | + // fem servir 085 de prova, perรฒ haurem de fer servir sensor_id[j] | |
119 | + char id[3]; | |
120 | + sprintf(id,"%x",sensors[j]); | |
121 | + int ok=send(buffers[j],&ind[j],&sizes[j], mod.ID, id); | |
96 | 122 | |
97 | - uint32_t ind[4]={0}; | |
98 | - char** buffers[4]; | |
99 | - uint32_t sizes[4]={0}; | |
100 | - char* sensor_id[TOTAL_SENSORS]; | |
123 | + if(ok==JSON_COMM_ERROR) | |
124 | + { | |
125 | + printf("wismart is not connected\r\n"); | |
126 | + } | |
127 | + else if( ok==JSON_OTHER_ERROR){ | |
128 | + printf("some error ocurred\r\n"); | |
129 | + } | |
130 | + else if(ok ==JSON_POST_OK){ | |
131 | + printf(" send OK \r\n"); | |
132 | + } | |
133 | + } | |
134 | +} | |
135 | + | |
136 | +void put_buffers(char** buffers[],uint32_t ind[],uint32_t sizes[],char** cooked, uint8_t* sensors) | |
137 | +{ | |
101 | 138 | int i; |
102 | - | |
103 | - init_registry(); | |
104 | - | |
139 | + for(i=0;i<sensors_length;i++){ | |
140 | + printf("For %d and %d\n\r", ind[i],sizes[i]); | |
141 | + printf("Putting data: %s\n\r",cooked[i]); | |
142 | + buffers[i] = put_message(cooked[i], buffers[i] ,&ind[i],&sizes[i]); | |
143 | + printf("Message put: %s\r\n",buffers[i][ind[i]-1]); | |
144 | + chHeapFree(cooked[i]); | |
145 | + printf("Memory freed\n\r"); | |
146 | + printf("Message put (assertion): %s with length %d\r\n",buffers[i][ind[i]-1] ,strlen(buffers[i][ind[i]-1])); | |
147 | + } | |
148 | + | |
149 | +} | |
150 | +char** timestamp_datas(char* value[],unsigned long timestamp, uint8_t* sensors) | |
151 | +{ | |
152 | + char** cooked_data; | |
153 | + cooked_data = (char**) chHeapAlloc(NULL,sensors_length * sizeof(char*)); | |
154 | + printf("Data allocated...\r\n"); | |
155 | + Date t=getDate(timestamp); | |
156 | + int i; | |
157 | + for(i=0;i<sensors_length;i++) | |
158 | + { | |
159 | + printf("Calling timestamp_data...\r\n"); | |
160 | + cooked_data[i]=timestamp_data(value[i], t); | |
161 | + printf("Finished timestamp_data...\r\n"); | |
162 | + printf("Data is: %s\r\n",cooked_data[i]); | |
163 | + chHeapFree(value[i]); | |
164 | + value[i] = NULL; | |
165 | + } | |
166 | + printf("Returning timestamped data...\r\n"); | |
167 | + return cooked_data; | |
168 | +} | |
169 | + | |
170 | +void wifi_connect(void) | |
171 | +{ | |
172 | + init_registry(); | |
105 | 173 | if(timeout==1) |
106 | 174 | { |
107 | 175 | printf("Creating AP\r\n"); |
... | ... | @@ -113,80 +181,197 @@ int main(void) |
113 | 181 | chThdSleepMilliseconds(1000); |
114 | 182 | } |
115 | 183 | } |
116 | - for(;;) | |
184 | +} | |
185 | + | |
186 | +void send_battery_level(unsigned long timestamp) | |
187 | +{ | |
188 | + uint8_t result; | |
189 | + char *batt_level = battery_value(get_battery_data()); | |
190 | + //char *batt_level = battery_value(3300); | |
191 | + char *batt_data = timestamp_data(batt_level,getDate(timestamp)); | |
192 | + chHeapFree(batt_level); | |
193 | + char *statement = prepare_json_observation_statement(&batt_data,1); | |
194 | + chHeapFree(batt_data); | |
195 | + char id[3]; | |
196 | + sprintf(id,"%02x",battery.ID); | |
197 | + result = send_json(statement,strlen(statement),mod.ID,id); | |
198 | + if(result) | |
117 | 199 | { |
118 | - // i2c gets the data and combines it with the time stamp | |
119 | - char* data="message,0"; | |
120 | - char* data2="message,1"; | |
121 | - char* data3="message,2"; | |
122 | - for(i=0;i<TOTAL_SENSORS;i++){ | |
123 | - | |
124 | - printf("------------------BUFFER %d ----------------------\r\n",i); | |
125 | - printf("index=%d\r\n",ind[i]); | |
126 | - | |
127 | - // 3 missatges de prova a cada buffer | |
128 | - buffers[i]=put_message(data, buffers[i] ,&ind[i],&sizes[i]); | |
129 | - buffers[i]=put_message(data2, buffers[i] ,&ind[i],&sizes[i]); | |
130 | - buffers[i]=put_message(data3, buffers[i] ,&ind[i],&sizes[i]); | |
131 | - printf("mirant memoria\r\n"); | |
132 | - int res=check_memory(); | |
133 | - if(res==SOFT_REACHED){ | |
134 | - printf("--------------soft limit-------------\r\n"); | |
135 | - int j; | |
136 | - for(j=0;j<TOTAL_SENSORS;j++) | |
137 | - { | |
138 | - printf(" enviant buffer %d\r\n",j); | |
139 | - | |
140 | - // fem servir 085 de prova, perรฒ haurem de fer servir sensor_id[j] | |
141 | - int ok=send(buffers[j],&ind[j],&sizes[j], mod.ID, sensor_id[j]); | |
142 | - | |
143 | - if(ok==JSON_COMM_ERROR) | |
144 | - { | |
145 | - printf("wismart is not connected\r\n"); | |
146 | - } | |
147 | - else if( ok==JSON_OTHER_ERROR){ | |
148 | - printf("some error ocurred\r\n"); | |
149 | - } | |
150 | - else if(ok ==JSON_POST_OK){ | |
151 | - printf(" send OK \r\n"); | |
152 | - } | |
153 | - } | |
200 | + if(result != 200) | |
201 | + { | |
202 | + printf("ERROR: SERVER RETURNED %d\r\n",result); | |
203 | + } | |
204 | + } | |
205 | + else | |
206 | + { | |
207 | + printf("ERROR: CONNECTION FAILED\r\n"); | |
208 | + } | |
209 | + chHeapFree(statement); | |
210 | +} | |
211 | + | |
212 | +void wifi_disconnect(void){ | |
213 | + connected = 0; | |
214 | + timeout = 0; | |
215 | + uint8_t res=libwismart_WiFiDisconnect(); | |
216 | + if(res) | |
217 | + printf("WIFI_DISCONNECT_SUCCESS\r\n"); | |
218 | + else | |
219 | + printf("WIFI_DISCONNECT_FAILURE\r\n"); | |
220 | +} | |
221 | + | |
222 | +int main(void) | |
223 | +{ | |
224 | + initLibwismart(); | |
225 | + libwismart_PowerSave_Enable(); | |
226 | + libwismart_PowerSave_HigherProfile(TRUE); | |
227 | + libwismart_RegisterDhcpCB(dhcp_connect_result_cb); | |
228 | + libwismart_WiFiInit(); | |
229 | + libwismart_SetScanRunsForConnTimeout(4); //Edit a 4 | |
230 | + libwismart_EnableBsdSocketAPI(); | |
231 | + | |
232 | + int i; | |
233 | + | |
234 | + uint8_t sensors[TOTAL_SENSORS]; | |
235 | + memset (sensors, 0, TOTAL_SENSORS); | |
236 | + | |
237 | + char* valueSensors[TOTAL_SENSORS]; | |
238 | + //memset (valueSensors, 0, TOTAL_SENSORS); | |
239 | + | |
240 | + for(i = 0; i < TOTAL_SENSORS; i++) | |
241 | + { | |
242 | + valueSensors[i] = NULL; | |
243 | + } | |
244 | + | |
245 | + printf("Connecting to wifi...\r\n"); | |
246 | + wifi_connect(); | |
247 | + | |
248 | + wakeup_sensors(0xFF); | |
249 | + printf("Scanning sensors...\r\n"); | |
250 | + //Escanea los sensores -> retorna un vector con las direcciones en cada posiciรณn del vector, si la posiciรณn del vector retorna un cero -> no existe el sensor | |
251 | + //Escanea y registra | |
252 | + I2C_scan(I2C1,sensors); | |
253 | + sensors_length=strlen((char*)sensors); | |
254 | + printf("%d sensor detected...\r\n",sensors_length); | |
255 | + | |
256 | + unsigned long time; | |
257 | + update_time(&time); | |
258 | + //desconectarwifi | |
259 | + printf("Disconecting wifi...\r\n"); | |
260 | + wifi_disconnect(); | |
261 | + | |
262 | + unsigned long timestamp = 0; | |
263 | + unsigned long delay = getSystemTime(); | |
264 | + sleep_thread(SHORT_PERIOD - time%SHORT_PERIOD); | |
265 | + | |
266 | + uint32_t ind[TOTAL_SENSORS]={0}; | |
267 | + char** buffers[TOTAL_SENSORS]; | |
268 | + uint32_t sizes[TOTAL_SENSORS]={0}; | |
269 | + | |
270 | + i = 1; | |
271 | + | |
272 | + while(1) | |
273 | + { | |
274 | + time += getElapsedTime(delay); | |
275 | + printf("time (absolute):\t%ul\r\ntime mod LONG_PERIOD:\t%ul\r\ntime mod SHORT_PERIOD:\t%ul\r\n",time,time%LONG_PERIOD,time%SHORT_PERIOD); | |
276 | + | |
277 | + delay = getSystemTime(); | |
278 | + /* Collect data from sensors */ | |
279 | + printf("Collecting data...\r\n"); | |
280 | + collectData(valueSensors, sensors); | |
281 | + printf("Data collected...\r\n"); | |
282 | + time += getElapsedTime(delay); | |
283 | + printf("time (absolute):\t%ul\r\ntime mod LONG_PERIOD:\t%ul\r\ntime mod SHORT_PERIOD:\t%ul\r\n",time,time%LONG_PERIOD,time%SHORT_PERIOD); | |
284 | + timestamp = time; | |
285 | + printf("timestamp (absolute):\t%ul\r\ntimestamp mod LONG_PERIOD:\t%ul\r\ntimestamp mod SHORT_PERIOD:\t%ul\r\n",timestamp,timestamp%LONG_PERIOD,timestamp%SHORT_PERIOD); | |
286 | + delay = getSystemTime(); | |
287 | + printf("Timestamping data...\r\n"); | |
288 | + char** values=timestamp_datas(valueSensors,timestamp,sensors); | |
289 | + printf("Putting data in buffer...\r\n"); | |
290 | + put_buffers(buffers,ind,sizes,values,sensors); | |
291 | + printf("Data is now in buffer...\n\r"); | |
292 | + if (i == LONG_PERIOD/SHORT_PERIOD ){ | |
293 | + printf("Programmed Send cycle...\r\n"); | |
294 | + /* Wi-Fi connect */ | |
295 | + printf("Connecting to wifi...\r\n"); | |
296 | + wifi_connect(); | |
297 | + /* Send data to server, empty the buffer */ | |
298 | + send_data(buffers, ind, sizes, sensors); | |
299 | + printf("Data sent!\r\n"); | |
300 | + //Now sending battery level | |
301 | + send_battery_level(timestamp); | |
302 | + //time = getNTPTime(); | |
303 | + update_time(&time); | |
304 | + delay = getSystemTime(); | |
305 | + //desconectar wifi | |
306 | + wifi_disconnect(); | |
307 | + printf("new ntp time (absolute):\t%ul\r\ntime mod LONG_PERIOD:\t%ul\r\ntime mod SHORT_PERIOD:\t%ul\r\n",time,time%LONG_PERIOD,time%SHORT_PERIOD); | |
308 | + i = 0; | |
309 | + } | |
310 | + | |
311 | + printf("mirant memoria\r\n"); | |
312 | + int res=check_memory(); | |
313 | + if(res==SOFT_REACHED){ | |
314 | + printf("--------------soft limit-------------\r\n"); | |
315 | + wifi_connect(); | |
316 | + send_data(buffers, ind, sizes, sensors); | |
317 | + //Now sending battery level | |
318 | + send_battery_level(timestamp); | |
319 | + //disconect_wifi() | |
320 | + wifi_disconnect(); | |
321 | + } | |
322 | + else if(res==HARD_REACHED){ | |
323 | + printf("--------------hard limit-------------\r\n"); | |
324 | + wifi_connect(); | |
325 | + char id_0[3]; | |
326 | + sprintf(id_0,"%x",sensors[0]); | |
327 | + while( send(buffers[0],&ind[0],&sizes[0], mod.ID, id_0) != JSON_POST_OK ) | |
328 | + { | |
329 | + // El servidor no ens sap dir si tenim permisos o no sense registrar una mostra. | |
330 | + // Intentem enviar un buffer sencer, a veure si ja podem buidar. | |
331 | + // No podem enviar nomรฉs una mostra perquรจ json รฉs rรญgid en aquest sentit. | |
332 | + | |
333 | + printf("hard_reached and unable to sentd.\r\nLa biblia en vers: i Jesรบs diguรฉ: Aixeca't, Llร tzer!!\r\n"); | |
334 | + chThdSleepMilliseconds(HARD_LIMIT_WAIT_TIME); | |
335 | + } | |
336 | + int j; | |
337 | + for(j=1;j<sensors_length;j++) | |
338 | + { | |
339 | + | |
340 | + printf(" enviant buffer %d\r\n",j); | |
341 | + char id[3]; | |
342 | + sprintf(id,"%x",sensors[j]); | |
343 | + int ok=send(buffers[j],&ind[j],&sizes[j], mod.ID, id); | |
344 | + if(ok==JSON_COMM_ERROR) | |
345 | + { | |
346 | + printf("wismart is not connected\r\n"); | |
154 | 347 | } |
155 | - else if(res==HARD_REACHED){ | |
156 | - /*printf("--------------hard limit-------------\r\n"); | |
157 | - | |
158 | - // fem servir 085 de prova, perรฒ haurem de fer servir sensor_id[0] | |
159 | - while( send(buffers[0],&ind[0],&sizes[0], mod.ID, sensor_id[j]) != JSON_POST_OK ) | |
160 | - { | |
161 | - // El servidor no ens sap dir si tenim permisos o no sense registrar una mostra. | |
162 | - // Intentem enviar un buffer sencer, a veure si ja podem buidar. | |
163 | - // No podem enviar nomรฉs una mostra perquรจ json รฉs rรญgid en aquest sentit. | |
164 | - | |
165 | - printf("hard_reached and unable to sentd.\r\nLa biblia en vers: i Jesรบs diguรฉ: Aixeca't, Llร tzer!!\r\n"); | |
166 | - chThdSleepMilliseconds(HARD_LIMIT_WAIT_TIME); | |
167 | - } | |
168 | - int j; | |
169 | - for(j=1;j<TOTAL_SENSORS;j++) | |
170 | - { | |
171 | - printf(" enviant buffer %d\r\n",j); | |
172 | - | |
173 | - // fem servir 085 de prova, perรฒ haurem de fer servir sensor_id[j] | |
174 | - int ok=send(buffers[j],&ind[j],&sizes[j], mod.ID, sensor_id[j]); | |
175 | - if(ok==JSON_COMM_ERROR) | |
176 | - { | |
177 | - printf("wismart is not connected\r\n"); | |
178 | - } | |
179 | - else if( ok==JSON_OTHER_ERROR){ | |
180 | - printf("some error ocurred\r\n"); | |
181 | - } | |
182 | - else if(ok ==JSON_POST_OK){ | |
183 | - printf(" send OK \r\n"); | |
184 | - } | |
185 | - }*/ | |
348 | + else if( ok==JSON_OTHER_ERROR){ | |
349 | + printf("some error ocurred\r\n"); | |
186 | 350 | } |
351 | + else if(ok ==JSON_POST_OK){ | |
352 | + printf(" send OK \r\n"); | |
353 | + } | |
354 | + | |
187 | 355 | } |
188 | - //chThdSleepMilliseconds(100); | |
189 | - } | |
356 | + //Now sending battery level | |
357 | + send_battery_level(timestamp); | |
358 | + wifi_disconnect(); | |
359 | + } | |
360 | + time += getElapsedTime(delay); | |
361 | + printf("time (absolute):\t%ul\r\ntime mod LONG_PERIOD:\t%ul\r\ntime mod SHORT_PERIOD:\t%ul\r\n",time,time%LONG_PERIOD,time%SHORT_PERIOD); | |
362 | + | |
363 | + delay = getSystemTime(); | |
364 | + printf("Time to sleep! for %d seconds\r\n", SHORT_PERIOD - time%SHORT_PERIOD); | |
365 | + sleep_thread(SHORT_PERIOD - time%SHORT_PERIOD); | |
366 | + i++; | |
367 | + } | |
190 | 368 | } |
191 | 369 | |
192 | -//SE DEBE LIBERAR LA MEMORIA DE LAS FUNCIONES value DE LOS SENSORES!!! | |
193 | 370 | \ No newline at end of file |
371 | +/* | |
372 | + * TO-DO | |
373 | + * | |
374 | + * - Test distance and humidity sensors | |
375 | + * - Test ADC | |
376 | + * - Test register, data send and battery send | |
377 | + * - Reset timer-related defines | |
378 | + */ | |
194 | 379 | \ No newline at end of file | ... | ... |
Project/applications/smartcities/main2.c deleted
1 | -#include <string.h> | |
2 | -#include "libwismart.h" | |
3 | -#include "libwismart_irqs.h" /* implement irq handlers */ | |
4 | -#include "lwip/inet.h" | |
5 | -#include "globals.h" | |
6 | -#include "httpClient.h" | |
7 | -#include "callbacks.h" | |
8 | -#include "buffer.h" | |
9 | -#include "i2c.h" | |
10 | -#include "configServer.h" | |
11 | -#include "timer-loop.h" | |
12 | -#include "ntp.h" | |
13 | -#include "sensors.h" | |
14 | - | |
15 | -#define WIFI_MODE WIFI_MODE_CLIENT | |
16 | -#define NETWORK_SSID_AP "modularsense" | |
17 | -#define NETWORK_KEY_AP NULL | |
18 | -#define NETWORK_CHANNEL_AP 1 | |
19 | - | |
20 | -#define HARD_LIMIT_WAIT_TIME 10*1000 //5*60*1000 | |
21 | - | |
22 | -wismart_registryKey_t geo; | |
23 | - | |
24 | - | |
25 | -void initLibwismart(void) | |
26 | -{ | |
27 | - wismart_hwif_t hwif = libwismart_GetDefaultHWIF(); | |
28 | - libwismart_Init(hwif); | |
29 | -} | |
30 | - | |
31 | -uint8_t connected=0; | |
32 | -uint8_t timeout=0; | |
33 | -uint8_t retries=0; | |
34 | -uint8_t sensors_length=0; | |
35 | -uint8_t registry_opened=0; | |
36 | - | |
37 | -module mod; | |
38 | - | |
39 | -void update_time(unsigned long *time) | |
40 | -{ | |
41 | - printf("Requesting new NTP time...\r\n"); | |
42 | - unsigned long new_time = getSecsSince1900(); | |
43 | - if(new_time) | |
44 | - { | |
45 | - *time = getSecsSince1900(); | |
46 | - } | |
47 | - printf("Time updated...\r\n"); | |
48 | -} | |
49 | - | |
50 | -void init_registry(void) | |
51 | -{ | |
52 | - config_params_t config; | |
53 | - | |
54 | - strcpy(config.localization,"none"); | |
55 | - if(!registry_opened) | |
56 | - { | |
57 | - libwismart_RegistryCreateKey(&geo, 1, sizeof(config)); | |
58 | - libwismart_RegistryOpen(1); | |
59 | - registry_opened = 1; | |
60 | - } | |
61 | - if(!libwismart_RegistryIsValueEmpty(&geo)) | |
62 | - { | |
63 | - libwismart_RegistryGet(&geo,&config); | |
64 | - } | |
65 | - | |
66 | - printf("SSID = %s\r\n",config.ssid); | |
67 | - printf("Wep key = %s\r\n",config.wepkey); | |
68 | - printf("Passphrase = %s\r\n", config.passphrase); | |
69 | - printf("User = %s\r\n",config.user); | |
70 | - printf("Password = %s\r\n",config.password); | |
71 | - printf("Encryption type = %d\r\n",config.security); | |
72 | - printf("Geo Localization = %s\r\n", config.localization); | |
73 | - | |
74 | - strcpy(mod.geoloc,config.localization); | |
75 | - strcpy(mod.ID,MODULE_ID); | |
76 | - if(config.security == PROFILE_SECURITY_OPEN) | |
77 | - { | |
78 | - printf("open detected\r\n"); | |
79 | - libwismart_WiFiConnect(config.ssid,NULL,wifi_connect_result_cb); | |
80 | - } | |
81 | - else if(config.security == PROFILE_SECURITY_WPA_WPA2) | |
82 | - { | |
83 | - if(!strcmp(config.user,"")) | |
84 | - { | |
85 | - printf("wpa detected\r\n"); | |
86 | - libwismart_WiFiConnect(config.ssid,config.passphrase,wifi_connect_result_cb); | |
87 | - } | |
88 | - else | |
89 | - { | |
90 | - printf("wpa Enterprise detected\r\n"); | |
91 | - struct wpa_param wpa; | |
92 | - wpa.eap_method = WISMART_EAP_METHOD_TTLS; | |
93 | - wpa.u.ttls.identity = config.user; | |
94 | - wpa.u.ttls.password = config.password; | |
95 | - wpa.u.ttls.ca_cert=NULL; | |
96 | - libwismart_WiFiConnectEnterprise(config.ssid, &wpa, wifi_connect_result_cb); | |
97 | - } | |
98 | - } | |
99 | - else | |
100 | - { | |
101 | - printf("wep detected\r\n"); | |
102 | - //Is WEP | |
103 | - libwismart_WiFiConnect(config.ssid,config.wepkey,wifi_connect_result_cb); | |
104 | - libwismart_WiFiSetWep(config.wepkey,1); | |
105 | - } | |
106 | - while(connected == 0 && timeout != 1 ) | |
107 | - {chThdSleepMilliseconds(500);} | |
108 | - | |
109 | -} | |
110 | - | |
111 | -void send_data(char** buffers[], uint32_t ind[], uint32_t sizes[], uint8_t sensors[]) | |
112 | -{ | |
113 | - int j; | |
114 | - for(j=0;j<sensors_length;j++) | |
115 | - { | |
116 | - printf(" enviant buffer %d\r\n",j); | |
117 | - | |
118 | - // fem servir 085 de prova, perรฒ haurem de fer servir sensor_id[j] | |
119 | - char id[3]; | |
120 | - sprintf(id,"%x",sensors[j]); | |
121 | - int ok=send(buffers[j],&ind[j],&sizes[j], mod.ID, id); | |
122 | - | |
123 | - if(ok==JSON_COMM_ERROR) | |
124 | - { | |
125 | - printf("wismart is not connected\r\n"); | |
126 | - } | |
127 | - else if( ok==JSON_OTHER_ERROR){ | |
128 | - printf("some error ocurred\r\n"); | |
129 | - } | |
130 | - else if(ok ==JSON_POST_OK){ | |
131 | - printf(" send OK \r\n"); | |
132 | - } | |
133 | - } | |
134 | -} | |
135 | - | |
136 | -void put_buffers(char** buffers[],uint32_t ind[],uint32_t sizes[],char** cooked, uint8_t* sensors) | |
137 | -{ | |
138 | - int i; | |
139 | - for(i=0;i<sensors_length;i++){ | |
140 | - printf("For %d and %d\n\r", ind[i],sizes[i]); | |
141 | - printf("Putting data: %s\n\r",cooked[i]); | |
142 | - buffers[i] = put_message(cooked[i], buffers[i] ,&ind[i],&sizes[i]); | |
143 | - printf("Message put: %s\r\n",buffers[i][ind[i]-1]); | |
144 | - chHeapFree(cooked[i]); | |
145 | - printf("Memory freed\n\r"); | |
146 | - printf("Message put (assertion): %s with length %d\r\n",buffers[i][ind[i]-1] ,strlen(buffers[i][ind[i]-1])); | |
147 | - } | |
148 | - | |
149 | -} | |
150 | -char** timestamp_datas(char* value[],unsigned long timestamp, uint8_t* sensors) | |
151 | -{ | |
152 | - char** cooked_data; | |
153 | - cooked_data = (char**) chHeapAlloc(NULL,sensors_length * sizeof(char*)); | |
154 | - printf("Data allocated...\r\n"); | |
155 | - Date t=getDate(timestamp); | |
156 | - int i; | |
157 | - for(i=0;i<sensors_length;i++) | |
158 | - { | |
159 | - printf("Calling timestamp_data...\r\n"); | |
160 | - cooked_data[i]=timestamp_data(value[i], t); | |
161 | - printf("Finished timestamp_data...\r\n"); | |
162 | - printf("Data is: %s\r\n",cooked_data[i]); | |
163 | - chHeapFree(value[i]); | |
164 | - value[i] = NULL; | |
165 | - } | |
166 | - printf("Returning timestamped data...\r\n"); | |
167 | - return cooked_data; | |
168 | -} | |
169 | - | |
170 | -void wifi_connect(void) | |
171 | -{ | |
172 | - init_registry(); | |
173 | - if(timeout==1) | |
174 | - { | |
175 | - printf("Creating AP\r\n"); | |
176 | - //corroborar los parametros del AP | |
177 | - configServer_start(1); | |
178 | - libwismart_WiFi_SoftAP_Start(NETWORK_SSID_AP,NETWORK_CHANNEL_AP,NULL,softapMode_apStartedCb, softapMode_clientIndicationCb); | |
179 | - for(;;) | |
180 | - { | |
181 | - chThdSleepMilliseconds(1000); | |
182 | - } | |
183 | - } | |
184 | -} | |
185 | - | |
186 | -void send_battery_level(unsigned long timestamp) | |
187 | -{ | |
188 | - uint8_t result; | |
189 | - char *batt_level = battery_value(get_battery_data()); | |
190 | - //char *batt_level = battery_value(3300); | |
191 | - char *batt_data = timestamp_data(batt_level,getDate(timestamp)); | |
192 | - chHeapFree(batt_level); | |
193 | - char *statement = prepare_json_observation_statement(&batt_data,1); | |
194 | - chHeapFree(batt_data); | |
195 | - char id[3]; | |
196 | - sprintf(id,"%02x",battery.ID); | |
197 | - result = send_json(statement,strlen(statement),mod.ID,id); | |
198 | - if(result) | |
199 | - { | |
200 | - if(result != 200) | |
201 | - { | |
202 | - printf("ERROR: SERVER RETURNED %d\r\n",result); | |
203 | - } | |
204 | - } | |
205 | - else | |
206 | - { | |
207 | - printf("ERROR: CONNECTION FAILED\r\n"); | |
208 | - } | |
209 | - chHeapFree(statement); | |
210 | -} | |
211 | - | |
212 | -void wifi_disconnect(void){ | |
213 | - connected = 0; | |
214 | - timeout = 0; | |
215 | - uint8_t res=libwismart_WiFiDisconnect(); | |
216 | - if(res) | |
217 | - printf("WIFI_DISCONNECT_SUCCESS\r\n"); | |
218 | - else | |
219 | - printf("WIFI_DISCONNECT_FAILURE\r\n"); | |
220 | -} | |
221 | - | |
222 | -int main(void) | |
223 | -{ | |
224 | - initLibwismart(); | |
225 | - libwismart_PowerSave_Enable(); | |
226 | - libwismart_PowerSave_HigherProfile(TRUE); | |
227 | - libwismart_RegisterDhcpCB(dhcp_connect_result_cb); | |
228 | - libwismart_WiFiInit(); | |
229 | - libwismart_SetScanRunsForConnTimeout(4); //Edit a 4 | |
230 | - libwismart_EnableBsdSocketAPI(); | |
231 | - | |
232 | - int i; | |
233 | - | |
234 | - uint8_t sensors[TOTAL_SENSORS]; | |
235 | - memset (sensors, 0, TOTAL_SENSORS); | |
236 | - | |
237 | - char* valueSensors[TOTAL_SENSORS]; | |
238 | - //memset (valueSensors, 0, TOTAL_SENSORS); | |
239 | - | |
240 | - for(i = 0; i < TOTAL_SENSORS; i++) | |
241 | - { | |
242 | - valueSensors[i] = NULL; | |
243 | - } | |
244 | - | |
245 | - printf("Connecting to wifi...\r\n"); | |
246 | - wifi_connect(); | |
247 | - | |
248 | - wakeup_sensors(0xFF); | |
249 | - printf("Scanning sensors...\r\n"); | |
250 | - //Escanea los sensores -> retorna un vector con las direcciones en cada posiciรณn del vector, si la posiciรณn del vector retorna un cero -> no existe el sensor | |
251 | - //Escanea y registra | |
252 | - I2C_scan(I2C1,sensors); | |
253 | - sensors_length=strlen((char*)sensors); | |
254 | - printf("%d sensor detected...\r\n",sensors_length); | |
255 | - | |
256 | - unsigned long time; | |
257 | - update_time(&time); | |
258 | - //desconectarwifi | |
259 | - printf("Disconecting wifi...\r\n"); | |
260 | - wifi_disconnect(); | |
261 | - | |
262 | - unsigned long timestamp = 0; | |
263 | - unsigned long delay = getSystemTime(); | |
264 | - sleep_thread(SHORT_PERIOD - time%SHORT_PERIOD); | |
265 | - | |
266 | - uint32_t ind[TOTAL_SENSORS]={0}; | |
267 | - char** buffers[TOTAL_SENSORS]; | |
268 | - uint32_t sizes[TOTAL_SENSORS]={0}; | |
269 | - | |
270 | - i = 1; | |
271 | - | |
272 | - while(1) | |
273 | - { | |
274 | - time += getElapsedTime(delay); | |
275 | - printf("time (absolute):\t%ul\r\ntime mod LONG_PERIOD:\t%ul\r\ntime mod SHORT_PERIOD:\t%ul\r\n",time,time%LONG_PERIOD,time%SHORT_PERIOD); | |
276 | - | |
277 | - delay = getSystemTime(); | |
278 | - /* Collect data from sensors */ | |
279 | - printf("Collecting data...\r\n"); | |
280 | - collectData(valueSensors, sensors); | |
281 | - printf("Data collected...\r\n"); | |
282 | - time += getElapsedTime(delay); | |
283 | - printf("time (absolute):\t%ul\r\ntime mod LONG_PERIOD:\t%ul\r\ntime mod SHORT_PERIOD:\t%ul\r\n",time,time%LONG_PERIOD,time%SHORT_PERIOD); | |
284 | - timestamp = time; | |
285 | - printf("timestamp (absolute):\t%ul\r\ntimestamp mod LONG_PERIOD:\t%ul\r\ntimestamp mod SHORT_PERIOD:\t%ul\r\n",timestamp,timestamp%LONG_PERIOD,timestamp%SHORT_PERIOD); | |
286 | - delay = getSystemTime(); | |
287 | - printf("Timestamping data...\r\n"); | |
288 | - char** values=timestamp_datas(valueSensors,timestamp,sensors); | |
289 | - printf("Putting data in buffer...\r\n"); | |
290 | - put_buffers(buffers,ind,sizes,values,sensors); | |
291 | - printf("Data is now in buffer...\n\r"); | |
292 | - if (i == LONG_PERIOD/SHORT_PERIOD ){ | |
293 | - printf("Programmed Send cycle...\r\n"); | |
294 | - /* Wi-Fi connect */ | |
295 | - printf("Connecting to wifi...\r\n"); | |
296 | - wifi_connect(); | |
297 | - /* Send data to server, empty the buffer */ | |
298 | - send_data(buffers, ind, sizes, sensors); | |
299 | - printf("Data sent!\r\n"); | |
300 | - //Now sending battery level | |
301 | - send_battery_level(timestamp); | |
302 | - //time = getNTPTime(); | |
303 | - update_time(&time); | |
304 | - delay = getSystemTime(); | |
305 | - //desconectar wifi | |
306 | - wifi_disconnect(); | |
307 | - printf("new ntp time (absolute):\t%ul\r\ntime mod LONG_PERIOD:\t%ul\r\ntime mod SHORT_PERIOD:\t%ul\r\n",time,time%LONG_PERIOD,time%SHORT_PERIOD); | |
308 | - i = 0; | |
309 | - } | |
310 | - | |
311 | - printf("mirant memoria\r\n"); | |
312 | - int res=check_memory(); | |
313 | - if(res==SOFT_REACHED){ | |
314 | - printf("--------------soft limit-------------\r\n"); | |
315 | - wifi_connect(); | |
316 | - send_data(buffers, ind, sizes, sensors); | |
317 | - //Now sending battery level | |
318 | - send_battery_level(timestamp); | |
319 | - //disconect_wifi() | |
320 | - wifi_disconnect(); | |
321 | - } | |
322 | - else if(res==HARD_REACHED){ | |
323 | - printf("--------------hard limit-------------\r\n"); | |
324 | - wifi_connect(); | |
325 | - char id_0[3]; | |
326 | - sprintf(id_0,"%x",sensors[0]); | |
327 | - while( send(buffers[0],&ind[0],&sizes[0], mod.ID, id_0) != JSON_POST_OK ) | |
328 | - { | |
329 | - // El servidor no ens sap dir si tenim permisos o no sense registrar una mostra. | |
330 | - // Intentem enviar un buffer sencer, a veure si ja podem buidar. | |
331 | - // No podem enviar nomรฉs una mostra perquรจ json รฉs rรญgid en aquest sentit. | |
332 | - | |
333 | - printf("hard_reached and unable to sentd.\r\nLa biblia en vers: i Jesรบs diguรฉ: Aixeca't, Llร tzer!!\r\n"); | |
334 | - chThdSleepMilliseconds(HARD_LIMIT_WAIT_TIME); | |
335 | - } | |
336 | - int j; | |
337 | - for(j=1;j<sensors_length;j++) | |
338 | - { | |
339 | - | |
340 | - printf(" enviant buffer %d\r\n",j); | |
341 | - char id[3]; | |
342 | - sprintf(id,"%x",sensors[j]); | |
343 | - int ok=send(buffers[j],&ind[j],&sizes[j], mod.ID, id); | |
344 | - if(ok==JSON_COMM_ERROR) | |
345 | - { | |
346 | - printf("wismart is not connected\r\n"); | |
347 | - } | |
348 | - else if( ok==JSON_OTHER_ERROR){ | |
349 | - printf("some error ocurred\r\n"); | |
350 | - } | |
351 | - else if(ok ==JSON_POST_OK){ | |
352 | - printf(" send OK \r\n"); | |
353 | - } | |
354 | - | |
355 | - } | |
356 | - //Now sending battery level | |
357 | - send_battery_level(timestamp); | |
358 | - wifi_disconnect(); | |
359 | - } | |
360 | - time += getElapsedTime(delay); | |
361 | - printf("time (absolute):\t%ul\r\ntime mod LONG_PERIOD:\t%ul\r\ntime mod SHORT_PERIOD:\t%ul\r\n",time,time%LONG_PERIOD,time%SHORT_PERIOD); | |
362 | - | |
363 | - delay = getSystemTime(); | |
364 | - printf("Time to sleep! for %d seconds\r\n", SHORT_PERIOD - time%SHORT_PERIOD); | |
365 | - sleep_thread(SHORT_PERIOD - time%SHORT_PERIOD); | |
366 | - i++; | |
367 | - } | |
368 | -} | |
369 | - | |
370 | -/* | |
371 | - * TO-DO | |
372 | - * | |
373 | - * - Test distance and humidity sensors | |
374 | - * - Test ADC | |
375 | - * - Test register, data send and battery send | |
376 | - * - Reset timer-related defines | |
377 | - */ | |
378 | 0 | \ No newline at end of file |
Project/applications/smartcities/main_demo.c deleted
1 | -#include "libwismart.h" | |
2 | -#include "libwismart_irqs.h" /* implement irq handlers */ | |
3 | -#include "lwip/inet.h" | |
4 | -#include "globals.h" | |
5 | -#include "httpClient.h" | |
6 | -#include "callbacks.h" | |
7 | -//#include "buffer.h" | |
8 | -#include "json.h" | |
9 | -#include "ntp.h" | |
10 | -#include "i2c.h" | |
11 | - | |
12 | -#define WIFI_MODE WIFI_MODE_CLIENT | |
13 | -#define NETWORK_SSID "linksys" | |
14 | -#define NETWORK_KEY "" | |
15 | -#define WPA_USER "smartcities" | |
16 | -#define WPA_PASS "superpass" | |
17 | - | |
18 | -uint8_t connected=0; | |
19 | -uint8_t timeout=0; | |
20 | -uint8_t retries=0; | |
21 | - | |
22 | -void initLibwismart(void) | |
23 | -{ | |
24 | - wismart_hwif_t hwif = libwismart_GetDefaultHWIF(); | |
25 | - libwismart_Init(hwif); | |
26 | -} | |
27 | - | |
28 | -int main(void) | |
29 | -{ | |
30 | - struct wpa_param wpa; | |
31 | - wpa.eap_method = WISMART_EAP_METHOD_TTLS; | |
32 | - wpa.u.ttls.identity=WPA_USER; | |
33 | - wpa.u.ttls.password=WPA_PASS; | |
34 | - wpa.u.ttls.ca_cert=NULL; | |
35 | - initLibwismart(); | |
36 | - libwismart_PowerSave_Enable(); | |
37 | - libwismart_PowerSave_HigherProfile(TRUE); | |
38 | - libwismart_RegisterDhcpCB(dhcp_connect_result_cb); | |
39 | - libwismart_WiFiInit(); | |
40 | - libwismart_WiFiConnectEnterprise(NETWORK_SSID, &wpa, wifi_connect_result_cb); | |
41 | - | |
42 | - printf("WiSmart initialized\r\n"); | |
43 | - | |
44 | - while(!connected) | |
45 | - {chThdSleepMilliseconds(500);} | |
46 | - | |
47 | - uint16_t received_data; | |
48 | - char answer[10]; | |
49 | - | |
50 | - I2C_init(); | |
51 | - printf("I2C Initialized\r\n"); | |
52 | - | |
53 | - I2C_start(I2C1,0x39 << 1, I2C_Direction_Transmitter); | |
54 | - I2C_write(I2C1, 0x0C); | |
55 | - I2C_stop(I2C1); | |
56 | - printf("I2C Temperature measurment request sent\r\n"); | |
57 | - | |
58 | - I2C_start(I2C1, 0x39<<1, I2C_Direction_Receiver); | |
59 | - printf("I2C Read request sent\r\n"); | |
60 | - received_data = I2C_read_ack(I2C1); | |
61 | - received_data = received_data << 8; | |
62 | - received_data = received_data | I2C_read_ack(I2C1); | |
63 | - printf("I2C data received\r\n"); | |
64 | - | |
65 | - sprintf(answer,"%d",received_data); | |
66 | - printf("Data: %s\r\n",answer); | |
67 | - | |
68 | - char **buffer; | |
69 | - buffer = chHeapAlloc(NULL,sizeof (char *) * 1); | |
70 | - | |
71 | - Date time=getDate(getSecsSince1900()); | |
72 | - | |
73 | - libwismart_EnableBsdSocketAPI(); | |
74 | - | |
75 | - buffer[0] = timestamp_data(answer,time); | |
76 | - | |
77 | - printf("Init JSON statement\r\n"); | |
78 | - char* statement = prepare_json_observation_statement(buffer,1); | |
79 | - chHeapFree(buffer[0]); | |
80 | - printf("Statement: "); | |
81 | - printf("%s\r\n",statement); | |
82 | - uint8_t result = send_json(statement, strlen(statement), "bmp", "085"); | |
83 | - if(result == JSON_POST_OK) | |
84 | - { | |
85 | - printf("JSON_POST_OK\r\n"); | |
86 | - } | |
87 | - else if(result == JSON_COMM_ERROR) | |
88 | - { | |
89 | - printf("JSON_COMM_ERROR\r\n"); | |
90 | - } | |
91 | - else if(result == JSON_OTHER_ERROR) | |
92 | - { | |
93 | - printf("JSON_OTHER_ERROR\r\n"); | |
94 | - } | |
95 | - else | |
96 | - { | |
97 | - printf("WTF I don't even\r\n"); | |
98 | - } | |
99 | - | |
100 | - for(;;) | |
101 | - { | |
102 | - chThdSleepMilliseconds(500); | |
103 | - } | |
104 | -} | |
105 | - |