terence zhang / Mbed OS mbed-os-example-wakaama

Dependencies:   C12832 LM75B

Committer:
terencez
Date:
Thu May 11 12:40:25 2017 +0000
Revision:
16:31c387e94b6d
Parent:
15:d0f20339c1ad
Added a demo temperature object based on sensor LM75B.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
terencez 0:f9d13e09cf11 1 #include "mbed.h"
terencez 0:f9d13e09cf11 2 #include "C12832.h"
terencez 0:f9d13e09cf11 3 #include "LM75B.h"
terencez 14:ec9e195830ff 4 #include "EthernetInterface.h"
terencez 14:ec9e195830ff 5
terencez 0:f9d13e09cf11 6 extern "C" {
terencez 0:f9d13e09cf11 7 #include "liblwm2m.h"
terencez 14:ec9e195830ff 8 //External API
terencez 16:31c387e94b6d 9 extern lwm2m_object_t * get_object_device(void);
terencez 16:31c387e94b6d 10 extern void free_object_device(lwm2m_object_t * objectP);
terencez 16:31c387e94b6d 11 extern lwm2m_object_t * get_server_object(void);
terencez 16:31c387e94b6d 12 extern void free_server_object(lwm2m_object_t * object);
terencez 16:31c387e94b6d 13 extern lwm2m_object_t * get_security_object(void);
terencez 16:31c387e94b6d 14 extern void free_security_object(lwm2m_object_t * objectP);
terencez 16:31c387e94b6d 15 extern char * get_server_uri(lwm2m_object_t * objectP, uint16_t secObjInstID);
terencez 16:31c387e94b6d 16 }
terencez 16:31c387e94b6d 17 #ifdef ENABLE_RGB_LED
terencez 16:31c387e94b6d 18 lwm2m_object_t * get_object_rgb_led(void);
terencez 14:ec9e195830ff 19 #endif
terencez 16:31c387e94b6d 20 lwm2m_object_t * get_object_temperature(void);
terencez 0:f9d13e09cf11 21
terencez 0:f9d13e09cf11 22 //Global definitions
terencez 0:f9d13e09cf11 23 #define ENDPOINT_NAME "MBED-OS-EXAMPLE-WAKAAMA"
terencez 1:3549d3c3967c 24 //Connect to the Leshan test server as default: http://leshan.eclipse.org
terencez 1:3549d3c3967c 25 #define LESHAN_SERVER "5.39.83.206"
terencez 0:f9d13e09cf11 26 #define LESHAN_PORT 5683
terencez 1:3549d3c3967c 27 #define UDP_TIMEOUT 60000
terencez 15:d0f20339c1ad 28 #define UDP_PORT 5683
terencez 16:31c387e94b6d 29
terencez 16:31c387e94b6d 30 #ifdef ENABLE_RGB_LED
terencez 16:31c387e94b6d 31 #define DEVICE_OBJ_NUM 5
terencez 16:31c387e94b6d 32 #else
terencez 14:ec9e195830ff 33 #define DEVICE_OBJ_NUM 4
terencez 16:31c387e94b6d 34 #endif
terencez 15:d0f20339c1ad 35 #define LOCAL_PORT 5683
terencez 14:ec9e195830ff 36
terencez 0:f9d13e09cf11 37 // LCD 128X32
terencez 0:f9d13e09cf11 38 C12832 lcd(p5, p7, p6, p8, p11);
terencez 0:f9d13e09cf11 39 // Sensor of temperature
terencez 0:f9d13e09cf11 40 LM75B sensor_temp(p28,p27);
terencez 0:f9d13e09cf11 41 // Network interface
terencez 0:f9d13e09cf11 42 EthernetInterface eth;
terencez 0:f9d13e09cf11 43 // UDP Socket
terencez 0:f9d13e09cf11 44 UDPSocket udp;
terencez 0:f9d13e09cf11 45
terencez 14:ec9e195830ff 46 typedef struct
terencez 14:ec9e195830ff 47 {
terencez 14:ec9e195830ff 48 lwm2m_object_t * securityObjP;
terencez 14:ec9e195830ff 49 UDPSocket sock;
terencez 14:ec9e195830ff 50 /*connection_t * connList;*/
terencez 14:ec9e195830ff 51 } client_data_t;
terencez 0:f9d13e09cf11 52
terencez 14:ec9e195830ff 53 //Functions
terencez 14:ec9e195830ff 54 void print_state(lwm2m_context_t * lwm2mH)
terencez 14:ec9e195830ff 55 {
terencez 14:ec9e195830ff 56 lwm2m_server_t * targetP;
terencez 14:ec9e195830ff 57
terencez 14:ec9e195830ff 58 fprintf(stderr, "State: ");
terencez 14:ec9e195830ff 59 switch(lwm2mH->state)
terencez 14:ec9e195830ff 60 {
terencez 14:ec9e195830ff 61 case STATE_INITIAL:
terencez 14:ec9e195830ff 62 fprintf(stderr, "STATE_INITIAL");
terencez 14:ec9e195830ff 63 break;
terencez 14:ec9e195830ff 64 case STATE_BOOTSTRAP_REQUIRED:
terencez 14:ec9e195830ff 65 fprintf(stderr, "STATE_BOOTSTRAP_REQUIRED");
terencez 14:ec9e195830ff 66 break;
terencez 14:ec9e195830ff 67 case STATE_BOOTSTRAPPING:
terencez 14:ec9e195830ff 68 fprintf(stderr, "STATE_BOOTSTRAPPING");
terencez 14:ec9e195830ff 69 break;
terencez 14:ec9e195830ff 70 case STATE_REGISTER_REQUIRED:
terencez 14:ec9e195830ff 71 fprintf(stderr, "STATE_REGISTER_REQUIRED");
terencez 14:ec9e195830ff 72 break;
terencez 14:ec9e195830ff 73 case STATE_REGISTERING:
terencez 14:ec9e195830ff 74 fprintf(stderr, "STATE_REGISTERING");
terencez 14:ec9e195830ff 75 break;
terencez 14:ec9e195830ff 76 case STATE_READY:
terencez 14:ec9e195830ff 77 fprintf(stderr, "STATE_READY");
terencez 14:ec9e195830ff 78 break;
terencez 14:ec9e195830ff 79 default:
terencez 14:ec9e195830ff 80 fprintf(stderr, "Unknown !");
terencez 14:ec9e195830ff 81 break;
terencez 14:ec9e195830ff 82 }
terencez 14:ec9e195830ff 83 fprintf(stderr, "\r\n");
terencez 14:ec9e195830ff 84
terencez 14:ec9e195830ff 85 targetP = lwm2mH->bootstrapServerList;
terencez 14:ec9e195830ff 86
terencez 14:ec9e195830ff 87 if (lwm2mH->bootstrapServerList == NULL)
terencez 14:ec9e195830ff 88 {
terencez 14:ec9e195830ff 89 fprintf(stderr, "No Bootstrap Server.\r\n");
terencez 14:ec9e195830ff 90 }
terencez 14:ec9e195830ff 91 else
terencez 14:ec9e195830ff 92 {
terencez 14:ec9e195830ff 93 fprintf(stderr, "Bootstrap Servers:\r\n");
terencez 14:ec9e195830ff 94 for (targetP = lwm2mH->bootstrapServerList ; targetP != NULL ; targetP = targetP->next)
terencez 14:ec9e195830ff 95 {
terencez 14:ec9e195830ff 96 fprintf(stderr, " - Security Object ID %d", targetP->secObjInstID);
terencez 14:ec9e195830ff 97 fprintf(stderr, "\tHold Off Time: %lu s", (unsigned long)targetP->lifetime);
terencez 14:ec9e195830ff 98 fprintf(stderr, "\tstatus: ");
terencez 14:ec9e195830ff 99 switch(targetP->status)
terencez 14:ec9e195830ff 100 {
terencez 14:ec9e195830ff 101 case STATE_DEREGISTERED:
terencez 14:ec9e195830ff 102 fprintf(stderr, "DEREGISTERED\r\n");
terencez 14:ec9e195830ff 103 break;
terencez 14:ec9e195830ff 104 case STATE_BS_HOLD_OFF:
terencez 14:ec9e195830ff 105 fprintf(stderr, "CLIENT HOLD OFF\r\n");
terencez 14:ec9e195830ff 106 break;
terencez 14:ec9e195830ff 107 case STATE_BS_INITIATED:
terencez 14:ec9e195830ff 108 fprintf(stderr, "BOOTSTRAP INITIATED\r\n");
terencez 14:ec9e195830ff 109 break;
terencez 14:ec9e195830ff 110 case STATE_BS_PENDING:
terencez 14:ec9e195830ff 111 fprintf(stderr, "BOOTSTRAP PENDING\r\n");
terencez 14:ec9e195830ff 112 break;
terencez 14:ec9e195830ff 113 case STATE_BS_FINISHED:
terencez 14:ec9e195830ff 114 fprintf(stderr, "BOOTSTRAP FINISHED\r\n");
terencez 14:ec9e195830ff 115 break;
terencez 14:ec9e195830ff 116 case STATE_BS_FAILED:
terencez 14:ec9e195830ff 117 fprintf(stderr, "BOOTSTRAP FAILED\r\n");
terencez 14:ec9e195830ff 118 break;
terencez 14:ec9e195830ff 119 default:
terencez 14:ec9e195830ff 120 fprintf(stderr, "INVALID (%d)\r\n", (int)targetP->status);
terencez 14:ec9e195830ff 121 }
terencez 14:ec9e195830ff 122 fprintf(stderr, "\r\n");
terencez 14:ec9e195830ff 123 }
terencez 14:ec9e195830ff 124 }
terencez 14:ec9e195830ff 125
terencez 14:ec9e195830ff 126 if (lwm2mH->serverList == NULL)
terencez 14:ec9e195830ff 127 {
terencez 14:ec9e195830ff 128 fprintf(stderr, "No LWM2M Server.\r\n");
terencez 14:ec9e195830ff 129 }
terencez 14:ec9e195830ff 130 else
terencez 14:ec9e195830ff 131 {
terencez 14:ec9e195830ff 132 fprintf(stderr, "LWM2M Servers:\r\n");
terencez 14:ec9e195830ff 133 for (targetP = lwm2mH->serverList ; targetP != NULL ; targetP = targetP->next)
terencez 14:ec9e195830ff 134 {
terencez 14:ec9e195830ff 135 fprintf(stderr, " - Server ID %d", targetP->shortID);
terencez 14:ec9e195830ff 136 fprintf(stderr, "\tstatus: ");
terencez 14:ec9e195830ff 137 switch(targetP->status)
terencez 14:ec9e195830ff 138 {
terencez 14:ec9e195830ff 139 case STATE_DEREGISTERED:
terencez 14:ec9e195830ff 140 fprintf(stderr, "DEREGISTERED\r\n");
terencez 14:ec9e195830ff 141 break;
terencez 14:ec9e195830ff 142 case STATE_REG_PENDING:
terencez 14:ec9e195830ff 143 fprintf(stderr, "REGISTRATION PENDING\r\n");
terencez 14:ec9e195830ff 144 break;
terencez 14:ec9e195830ff 145 case STATE_REGISTERED:
terencez 14:ec9e195830ff 146 fprintf(stderr, "REGISTERED\tlocation: \"%s\"\tLifetime: %lus\r\n", targetP->location, (unsigned long)targetP->lifetime);
terencez 14:ec9e195830ff 147 break;
terencez 14:ec9e195830ff 148 case STATE_REG_UPDATE_PENDING:
terencez 14:ec9e195830ff 149 fprintf(stderr, "REGISTRATION UPDATE PENDING\r\n");
terencez 14:ec9e195830ff 150 break;
terencez 14:ec9e195830ff 151 case STATE_REG_UPDATE_NEEDED:
terencez 14:ec9e195830ff 152 fprintf(stderr, "REGISTRATION UPDATE REQUIRED\r\n");
terencez 14:ec9e195830ff 153 break;
terencez 14:ec9e195830ff 154 case STATE_DEREG_PENDING:
terencez 14:ec9e195830ff 155 fprintf(stderr, "DEREGISTRATION PENDING\r\n");
terencez 14:ec9e195830ff 156 break;
terencez 14:ec9e195830ff 157 case STATE_REG_FAILED:
terencez 14:ec9e195830ff 158 fprintf(stderr, "REGISTRATION FAILED\r\n");
terencez 14:ec9e195830ff 159 break;
terencez 14:ec9e195830ff 160 default:
terencez 14:ec9e195830ff 161 fprintf(stderr, "INVALID (%d)\r\n", (int)targetP->status);
terencez 14:ec9e195830ff 162 }
terencez 14:ec9e195830ff 163 fprintf(stderr, "\r\n");
terencez 14:ec9e195830ff 164 }
terencez 14:ec9e195830ff 165 }
terencez 0:f9d13e09cf11 166 }
terencez 0:f9d13e09cf11 167
terencez 14:ec9e195830ff 168 void debug_dump(uint8_t * buffer, size_t length)
terencez 14:ec9e195830ff 169 {
terencez 14:ec9e195830ff 170 int i;
terencez 14:ec9e195830ff 171 printf("\n--------------------------\n");
terencez 14:ec9e195830ff 172 for(i=0;i<length;i++){
terencez 14:ec9e195830ff 173 printf("0x%2x ",buffer[i]);
terencez 14:ec9e195830ff 174 if(i%16==15)printf("\n");
terencez 14:ec9e195830ff 175 }
terencez 14:ec9e195830ff 176 printf("\n--------------------------\n");
terencez 14:ec9e195830ff 177 }
terencez 1:3549d3c3967c 178 void test_tcp(EthernetInterface eth)
terencez 1:3549d3c3967c 179 {
terencez 1:3549d3c3967c 180 TCPSocket tcp;
terencez 1:3549d3c3967c 181 tcp.open(&eth);
terencez 1:3549d3c3967c 182 tcp.connect("developer.mbed.org", 80);
terencez 1:3549d3c3967c 183
terencez 1:3549d3c3967c 184 // Send a simple http request
terencez 1:3549d3c3967c 185 char sbuffer[] = "GET / HTTP/1.1\r\nHost: developer.mbed.org\r\n\r\n";
terencez 1:3549d3c3967c 186 int scount = tcp.send(sbuffer, sizeof sbuffer);
terencez 1:3549d3c3967c 187
terencez 1:3549d3c3967c 188 lcd.cls();
terencez 1:3549d3c3967c 189 lcd.locate(0,0);
terencez 1:3549d3c3967c 190 lcd.printf("TCP TESTING: ");
terencez 1:3549d3c3967c 191 lcd.printf("SEND %d\n[%.*s]\n", scount, strstr(sbuffer, "\r\n")-sbuffer, sbuffer);
terencez 1:3549d3c3967c 192 wait(3.0);
terencez 1:3549d3c3967c 193
terencez 1:3549d3c3967c 194 // Recieve a simple http response and print out the response line
terencez 1:3549d3c3967c 195 char rbuffer[64];
terencez 1:3549d3c3967c 196 int rcount = tcp.recv(rbuffer, sizeof rbuffer);
terencez 1:3549d3c3967c 197 lcd.cls();
terencez 1:3549d3c3967c 198 lcd.locate(0,0);
terencez 1:3549d3c3967c 199 lcd.printf("TCP TESTING: ");
terencez 1:3549d3c3967c 200 lcd.printf("RECV %d\n[%.*s]\n", rcount, strstr(rbuffer, "\r\n")-rbuffer, rbuffer);
terencez 1:3549d3c3967c 201 wait(3.0);
terencez 1:3549d3c3967c 202 lcd.cls();
terencez 1:3549d3c3967c 203 // Close the socket to return its memory and bring down the network interface
terencez 1:3549d3c3967c 204 tcp.close();
terencez 1:3549d3c3967c 205 }
terencez 1:3549d3c3967c 206
terencez 0:f9d13e09cf11 207
terencez 14:ec9e195830ff 208 int init_network()
terencez 0:f9d13e09cf11 209 {
terencez 0:f9d13e09cf11 210 int ret = 0;
terencez 0:f9d13e09cf11 211
terencez 2:5a8853c481ad 212 //try to connect and get ip via DHCP.
terencez 0:f9d13e09cf11 213 lcd.locate(0,10);
terencez 0:f9d13e09cf11 214 lcd.printf("obtaining ip address...\n");
terencez 0:f9d13e09cf11 215 ret = eth.connect();
terencez 0:f9d13e09cf11 216 if(ret!=0){
terencez 0:f9d13e09cf11 217 lcd.printf("DHCP Error - No IP");
terencez 0:f9d13e09cf11 218 return ret;
terencez 0:f9d13e09cf11 219 }
terencez 0:f9d13e09cf11 220 lcd.printf("IP is %s\n", eth.get_ip_address());
terencez 0:f9d13e09cf11 221 //wait(2.0);
terencez 0:f9d13e09cf11 222
terencez 2:5a8853c481ad 223 //test code which only used to verify the connect functinon
terencez 1:3549d3c3967c 224 //test_tcp(eth);
terencez 1:3549d3c3967c 225 //test_udp(eth);
terencez 0:f9d13e09cf11 226
terencez 14:ec9e195830ff 227 udp.open(&eth);
terencez 15:d0f20339c1ad 228 //udp.set_timeout(UDP_TIMEOUT);
terencez 14:ec9e195830ff 229 udp.bind(UDP_PORT);
terencez 0:f9d13e09cf11 230
terencez 0:f9d13e09cf11 231 return ret;
terencez 0:f9d13e09cf11 232 }
terencez 0:f9d13e09cf11 233
terencez 0:f9d13e09cf11 234 int init_display()
terencez 0:f9d13e09cf11 235 {
terencez 2:5a8853c481ad 236 int ret = 0;
terencez 2:5a8853c481ad 237 //Bootup and display initial information
terencez 0:f9d13e09cf11 238 lcd.cls();
terencez 0:f9d13e09cf11 239 lcd.locate(0,0);
terencez 0:f9d13e09cf11 240 lcd.printf("mbed-wakaama-example");
terencez 0:f9d13e09cf11 241 lcd.locate(0,10);
terencez 0:f9d13e09cf11 242 lcd.printf("starting...");
terencez 1:3549d3c3967c 243 //wait(2.0);
terencez 0:f9d13e09cf11 244
terencez 2:5a8853c481ad 245 return ret;
terencez 0:f9d13e09cf11 246 }
terencez 0:f9d13e09cf11 247
terencez 0:f9d13e09cf11 248
terencez 14:ec9e195830ff 249 coap_status_t lwm2m_buffer_send(void * sessionH,uint8_t * buffer,size_t length,void * userdata)
terencez 0:f9d13e09cf11 250 {
terencez 2:5a8853c481ad 251 int ret = 0;
terencez 2:5a8853c481ad 252
terencez 0:f9d13e09cf11 253 SocketAddress * addr = (SocketAddress*) sessionH;
terencez 0:f9d13e09cf11 254
terencez 1:3549d3c3967c 255 printf("Send packet to: %s of port %d, size: %d\n", addr->get_ip_address(), addr->get_port(),length);
terencez 2:5a8853c481ad 256 //debug_dump(buffer,length);
terencez 0:f9d13e09cf11 257
terencez 2:5a8853c481ad 258 ret = udp.sendto(addr->get_ip_address(), addr->get_port(), (void *)buffer, (int)length);
terencez 15:d0f20339c1ad 259 if(ret!=length)
terencez 0:f9d13e09cf11 260 {
terencez 1:3549d3c3967c 261 return COAP_500_INTERNAL_SERVER_ERROR;
terencez 0:f9d13e09cf11 262 }
terencez 14:ec9e195830ff 263
terencez 0:f9d13e09cf11 264 return COAP_NO_ERROR;
terencez 0:f9d13e09cf11 265 }
terencez 0:f9d13e09cf11 266
terencez 16:31c387e94b6d 267 void get_temperature(float *temp)
terencez 16:31c387e94b6d 268 {
terencez 16:31c387e94b6d 269 *temp = sensor_temp.read();
terencez 16:31c387e94b6d 270 printf("SYSTEM TEMP: %.3f",*temp);
terencez 16:31c387e94b6d 271 }
terencez 14:ec9e195830ff 272
terencez 0:f9d13e09cf11 273 int main()
terencez 0:f9d13e09cf11 274 {
terencez 14:ec9e195830ff 275 int result = 0;
terencez 14:ec9e195830ff 276 uint8_t buffer[1024];
terencez 2:5a8853c481ad 277
terencez 14:ec9e195830ff 278 //Init the lwm2m structures
terencez 0:f9d13e09cf11 279 lwm2m_context_t * lwm2mH = NULL;
terencez 14:ec9e195830ff 280 lwm2m_object_t * objArray[DEVICE_OBJ_NUM];
terencez 0:f9d13e09cf11 281 lwm2m_security_t security;
terencez 14:ec9e195830ff 282 client_data_t data;
terencez 14:ec9e195830ff 283 data.sock = udp;
terencez 14:ec9e195830ff 284
terencez 2:5a8853c481ad 285 //Init the lwm2m server, set Leshan as default
terencez 0:f9d13e09cf11 286 SocketAddress server(LESHAN_SERVER, LESHAN_PORT);
terencez 2:5a8853c481ad 287 SocketAddress client;
terencez 14:ec9e195830ff 288
terencez 2:5a8853c481ad 289 //Init display modual via LCD
terencez 0:f9d13e09cf11 290 init_display();
terencez 14:ec9e195830ff 291 //Init the network modual via ethernet and udp socket
terencez 14:ec9e195830ff 292 init_network();
terencez 0:f9d13e09cf11 293
terencez 14:ec9e195830ff 294 /*
terencez 14:ec9e195830ff 295 * Now the main function fill an array with each object, this list will be later passed to liblwm2m.
terencez 14:ec9e195830ff 296 * Those functions are located in their respective object file.
terencez 14:ec9e195830ff 297 */
terencez 14:ec9e195830ff 298 objArray[0] = get_security_object();
terencez 0:f9d13e09cf11 299 if (NULL == objArray[0])
terencez 0:f9d13e09cf11 300 {
terencez 14:ec9e195830ff 301 fprintf(stderr, "Failed to create security object\r\n");
terencez 14:ec9e195830ff 302 return -1;
terencez 14:ec9e195830ff 303 }
terencez 14:ec9e195830ff 304 data.securityObjP = objArray[0];
terencez 14:ec9e195830ff 305
terencez 14:ec9e195830ff 306 objArray[1] = get_server_object();
terencez 14:ec9e195830ff 307 if (NULL == objArray[1])
terencez 14:ec9e195830ff 308 {
terencez 14:ec9e195830ff 309 fprintf(stderr, "Failed to create server object\r\n");
terencez 14:ec9e195830ff 310 return -1;
terencez 14:ec9e195830ff 311 }
terencez 14:ec9e195830ff 312
terencez 14:ec9e195830ff 313 objArray[2] = get_object_device();
terencez 14:ec9e195830ff 314 if (NULL == objArray[2])
terencez 14:ec9e195830ff 315 {
terencez 0:f9d13e09cf11 316 fprintf(stderr, "Failed to create Device object\r\n");
terencez 0:f9d13e09cf11 317 return -1;
terencez 0:f9d13e09cf11 318 }
terencez 0:f9d13e09cf11 319
terencez 16:31c387e94b6d 320
terencez 16:31c387e94b6d 321 objArray[3] = get_object_temperature();
terencez 14:ec9e195830ff 322 if (NULL == objArray[3])
terencez 14:ec9e195830ff 323 {
terencez 16:31c387e94b6d 324 fprintf(stderr, "Failed to create temperature object\r\n");
terencez 14:ec9e195830ff 325 return -1;
terencez 14:ec9e195830ff 326 }
terencez 16:31c387e94b6d 327
terencez 16:31c387e94b6d 328 #ifdef ENABLE_RGB_LED
terencez 16:31c387e94b6d 329 objArray[4] = get_object_rgb_led();
terencez 16:31c387e94b6d 330 if (NULL == objArray[4])
terencez 16:31c387e94b6d 331 {
terencez 16:31c387e94b6d 332 fprintf(stderr, "Failed to create RGB LED object\r\n");
terencez 16:31c387e94b6d 333 return -1;
terencez 16:31c387e94b6d 334 }
terencez 16:31c387e94b6d 335 #endif
terencez 14:ec9e195830ff 336 /*
terencez 14:ec9e195830ff 337 * The liblwm2m library is now initialized with the functions that will be in
terencez 14:ec9e195830ff 338 * charge of communication
terencez 14:ec9e195830ff 339 */
terencez 14:ec9e195830ff 340
terencez 14:ec9e195830ff 341 lwm2mH = lwm2m_init(&data);
terencez 0:f9d13e09cf11 342 if (NULL == lwm2mH)
terencez 0:f9d13e09cf11 343 {
terencez 0:f9d13e09cf11 344 fprintf(stderr, "lwm2m_init() failed\r\n");
terencez 0:f9d13e09cf11 345 return -1;
terencez 14:ec9e195830ff 346 }
terencez 14:ec9e195830ff 347
terencez 14:ec9e195830ff 348 printf("ontextP->endpointName %d , contextP->objectList %d\n", lwm2mH->endpointName, lwm2mH->objectList);
terencez 14:ec9e195830ff 349 /*
terencez 14:ec9e195830ff 350 * We configure the liblwm2m library with the name of the client - which shall be unique for each client -
terencez 14:ec9e195830ff 351 * the number of objects we will be passing through and the objects array
terencez 14:ec9e195830ff 352 */
terencez 14:ec9e195830ff 353 result = lwm2m_configure(lwm2mH, ENDPOINT_NAME, NULL, NULL, DEVICE_OBJ_NUM, objArray);
terencez 14:ec9e195830ff 354 if (result != 0)
terencez 14:ec9e195830ff 355 {
terencez 14:ec9e195830ff 356 fprintf(stderr, "lwm2m_configure() failed: 0x%X\r\n", result);
terencez 14:ec9e195830ff 357 return -1;
terencez 0:f9d13e09cf11 358 }
terencez 0:f9d13e09cf11 359
terencez 0:f9d13e09cf11 360 memset(&security, 0, sizeof(lwm2m_security_t));
terencez 14:ec9e195830ff 361 result = lwm2m_add_server(lwm2mH, 123, 0, NULL, BINDING_U, (void *)&server, &security);
terencez 0:f9d13e09cf11 362 if (result != 0)
terencez 0:f9d13e09cf11 363 {
terencez 0:f9d13e09cf11 364 fprintf(stderr, "lwm2m_add_server() failed: 0x%X\r\n", result);
terencez 0:f9d13e09cf11 365 return -1;
terencez 14:ec9e195830ff 366 }
terencez 14:ec9e195830ff 367
terencez 14:ec9e195830ff 368
terencez 0:f9d13e09cf11 369 while (true) {
terencez 14:ec9e195830ff 370 int numBytes = 0;
terencez 14:ec9e195830ff 371 struct timeval tv;
terencez 14:ec9e195830ff 372 tv.tv_sec = 60;
terencez 14:ec9e195830ff 373 tv.tv_usec = 0;
terencez 14:ec9e195830ff 374 printf("\n--------------------------------------\n");
terencez 14:ec9e195830ff 375 printf("loop...\n");
terencez 0:f9d13e09cf11 376
terencez 14:ec9e195830ff 377 print_state(lwm2mH);
terencez 0:f9d13e09cf11 378
terencez 14:ec9e195830ff 379 /*
terencez 14:ec9e195830ff 380 * This function does two things:
terencez 14:ec9e195830ff 381 * - first it does the work needed by liblwm2m (eg. (re)sending some packets).
terencez 14:ec9e195830ff 382 * - Secondly it adjusts the timeout value (default 60s) depending on the state of the transaction
terencez 14:ec9e195830ff 383 * (eg. retransmission) and the time before the next operation
terencez 14:ec9e195830ff 384 */
terencez 14:ec9e195830ff 385 result = lwm2m_step(lwm2mH, &(tv.tv_sec));
terencez 14:ec9e195830ff 386 if (result != 0)
terencez 14:ec9e195830ff 387 {
terencez 14:ec9e195830ff 388 printf("lwm2m_step() failed: 0x%x\r\n", result);
terencez 14:ec9e195830ff 389 return -1;
terencez 14:ec9e195830ff 390 }
terencez 0:f9d13e09cf11 391
terencez 15:d0f20339c1ad 392 numBytes = udp.recvfrom(&server, buffer, sizeof(buffer));
terencez 14:ec9e195830ff 393 if(numBytes <=0){
terencez 14:ec9e195830ff 394 printf("Error in recvfrom() - numBytes = 0\r\n");
terencez 15:d0f20339c1ad 395 //return -1;
terencez 14:ec9e195830ff 396 }
terencez 14:ec9e195830ff 397 else
terencez 14:ec9e195830ff 398 {
terencez 15:d0f20339c1ad 399 printf("Received packet from: %s of size %d; session = 0x%x\n", server.get_ip_address(), numBytes, (int)(&server));
terencez 14:ec9e195830ff 400 //debug_dump((uint8_t *)buffer,numBytes);
terencez 14:ec9e195830ff 401
terencez 14:ec9e195830ff 402 //Let liblwm2m respond to the query depending on the context
terencez 15:d0f20339c1ad 403 lwm2m_handle_packet(lwm2mH, buffer, numBytes, (void*) &server);
terencez 0:f9d13e09cf11 404 }
terencez 1:3549d3c3967c 405 }//while()
terencez 14:ec9e195830ff 406
terencez 1:3549d3c3967c 407 }//main
terencez 16:31c387e94b6d 408
terencez 16:31c387e94b6d 409