adding resources firmware and 1/0/8

Dependencies:   Beep C12832_lcd EthernetInterface EthernetNetIf HTTPClient LM75B MMA7660 mbed-rtos mbed nsdl_lib

Fork of LWM2M_NanoService_Ethernet by MBED_DEMOS

Committer:
pnysten
Date:
Tue Oct 27 07:18:16 2015 +0000
Revision:
22:2fab757f9c2a
Parent:
21:978281bfb26e
Firmware and 1/0/8 resource

Who changed what in which revision?

UserRevisionLine numberNew contents of line
pnysten 21:978281bfb26e 1 // Light resource implementation
pnysten 21:978281bfb26e 2
pnysten 21:978281bfb26e 3 #include "mbed.h"
pnysten 21:978281bfb26e 4 #include "nsdl_support.h"
pnysten 21:978281bfb26e 5 #include "EthernetInterface.h"
pnysten 21:978281bfb26e 6 #include "firmware.h"
pnysten 21:978281bfb26e 7 #include "firmware_status.h"
pnysten 21:978281bfb26e 8 #include "firmware_result.h"
pnysten 21:978281bfb26e 9 #include "HTTPClient.h"
pnysten 21:978281bfb26e 10 #include "C12832_lcd.h"
pnysten 21:978281bfb26e 11
pnysten 21:978281bfb26e 12 #define FIRMWARE_WRITE_RES_ID "5/0/1"
pnysten 21:978281bfb26e 13 //5/0/1 should be used instead
pnysten 21:978281bfb26e 14
pnysten 21:978281bfb26e 15 static C12832_LCD lcd;
pnysten 21:978281bfb26e 16 extern Serial pc;
pnysten 21:978281bfb26e 17 extern "C" void mbed_reset();
pnysten 21:978281bfb26e 18
pnysten 21:978281bfb26e 19 LocalFileSystem local("local");
pnysten 21:978281bfb26e 20 HTTPClient client;
pnysten 21:978281bfb26e 21
pnysten 21:978281bfb26e 22 char *remove_ext(char *dst, const char *filename) {
pnysten 21:978281bfb26e 23 size_t len = strlen(filename);
pnysten 21:978281bfb26e 24 memcpy(dst, filename, len-3);
pnysten 21:978281bfb26e 25 dst[len - 3] = 0;
pnysten 21:978281bfb26e 26 return dst;
pnysten 21:978281bfb26e 27 }
pnysten 21:978281bfb26e 28
pnysten 21:978281bfb26e 29 /* Only PUT method allowed */
pnysten 21:978281bfb26e 30 static uint8_t firmware_resource_cb(sn_coap_hdr_s *received_coap_ptr, sn_nsdl_addr_s *address, sn_proto_info_s * proto)
pnysten 21:978281bfb26e 31 {
pnysten 21:978281bfb26e 32 sn_coap_hdr_s *coap_res_ptr = 0;
pnysten 21:978281bfb26e 33 pc.printf("Firmware updating\r\n");
pnysten 21:978281bfb26e 34 lcd.locate(0,0);
pnysten 21:978281bfb26e 35 lcd.printf("Firmware Upgrade...\n");
pnysten 21:978281bfb26e 36
pnysten 21:978281bfb26e 37 if(received_coap_ptr->msg_code == COAP_MSG_CODE_REQUEST_PUT)
pnysten 21:978281bfb26e 38 {
pnysten 21:978281bfb26e 39 setResult(0);
pnysten 21:978281bfb26e 40 pc.printf("Firmware URL length: %d\r\n",received_coap_ptr->payload_len);
pnysten 21:978281bfb26e 41 char firmware_url[200];
pnysten 21:978281bfb26e 42 memcpy(firmware_url, (char *)received_coap_ptr->payload_ptr, received_coap_ptr->payload_len);
pnysten 21:978281bfb26e 43 firmware_url[received_coap_ptr->payload_len]='\0';
pnysten 21:978281bfb26e 44
pnysten 21:978281bfb26e 45 pc.printf("Firmware URL: %s\r\n",firmware_url);
pnysten 21:978281bfb26e 46 lcd.locate(0,11);
pnysten 21:978281bfb26e 47 lcd.printf("Downloading new Firmware...\n");
pnysten 21:978281bfb26e 48
pnysten 21:978281bfb26e 49 HTTPFile file("/local/out.b__");
pnysten 21:978281bfb26e 50 pc.printf("INFO: Getting from URL '%s' to '%s'.\r\n", firmware_url, "/local/out.b__");
pnysten 21:978281bfb26e 51
pnysten 21:978281bfb26e 52 coap_res_ptr = sn_coap_build_response(received_coap_ptr, COAP_MSG_CODE_RESPONSE_CHANGED);
pnysten 21:978281bfb26e 53 sn_nsdl_send_coap_message(address, coap_res_ptr);
pnysten 21:978281bfb26e 54
pnysten 21:978281bfb26e 55 int r = client.get(firmware_url, &file);
pnysten 21:978281bfb26e 56 if (r != HTTP_OK) {
pnysten 21:978281bfb26e 57 if (r == HTTP_PARSE)
pnysten 21:978281bfb26e 58 pc.printf("ERR Parse URL: Fetch '%s' to '%s'.\r\n", firmware_url, "/local/out.b__");
pnysten 21:978281bfb26e 59 else if (r == HTTP_DNS)
pnysten 21:978281bfb26e 60 pc.printf("ERR DNS: Fetch '%s' to '%s'.\r\n", firmware_url, "/local/out.b__");
pnysten 21:978281bfb26e 61 else if (r == HTTP_NOTFOUND)
pnysten 21:978281bfb26e 62 pc.printf("ERR 404 Not Found: Fetch '%s' to '%s'.\r\n", firmware_url, "/local/out.b__");
pnysten 21:978281bfb26e 63 else if (r == HTTP_REFUSED)
pnysten 21:978281bfb26e 64 pc.printf("ERR 403 Refused: Fetch '%s' to '%s'.\r\n", firmware_url, "/local/out.b__");
pnysten 21:978281bfb26e 65 else if (r == HTTP_ERROR)
pnysten 21:978281bfb26e 66 pc.printf("ERR Other HTTP Error: Fetch '%s' to '%s'.\r\n", firmware_url, "/local/out.b__");
pnysten 21:978281bfb26e 67 else if (r == HTTP_TIMEOUT)
pnysten 21:978281bfb26e 68 pc.printf("ERR Timeout: Fetch '%s' to '%s'.\r\n", firmware_url, "/local/out.b__");
pnysten 21:978281bfb26e 69 else if (r == HTTP_CONN)
pnysten 21:978281bfb26e 70 pc.printf("ERR Connection: Fetch '%s' to '%s'.\r\n", firmware_url, "/local/out.b__");
pnysten 21:978281bfb26e 71 else if (r == HTTP_CLOSED)
pnysten 21:978281bfb26e 72 pc.printf("ERR Connection Closed: Fetch '%s' to '%s'.\r\n", firmware_url, "/local/out.b__");
pnysten 21:978281bfb26e 73 else
pnysten 21:978281bfb26e 74 pc.printf("ERR Other Error %d: Fetch '%s' to '%s'.\r\n", r, firmware_url, "/local/out.b__");
pnysten 21:978281bfb26e 75 pc.printf("ERR : Cleaning temp file.\r\n");
pnysten 21:978281bfb26e 76 remove("/local/out.b__");
pnysten 21:978281bfb26e 77 setResult(2);
pnysten 21:978281bfb26e 78 // send_firmware_result_observation(2);
pnysten 21:978281bfb26e 79 lcd.locate(0,22);
pnysten 21:978281bfb26e 80 lcd.printf("Failed...\n");
pnysten 21:978281bfb26e 81 return 0;
pnysten 21:978281bfb26e 82 }
pnysten 21:978281bfb26e 83 pc.printf("INFO: Fetched '%s' to '%s'.\r\n", firmware_url, "/local/out.b__");
pnysten 21:978281bfb26e 84
pnysten 21:978281bfb26e 85 send_firmware_result_observation(1);
pnysten 21:978281bfb26e 86 lcd.locate(0,22);
pnysten 21:978281bfb26e 87 lcd.printf("Success...\n");
pnysten 21:978281bfb26e 88 }
pnysten 21:978281bfb26e 89
pnysten 21:978281bfb26e 90 sn_coap_parser_release_allocated_coap_msg_mem(coap_res_ptr);
pnysten 21:978281bfb26e 91 return 0;
pnysten 21:978281bfb26e 92 }
pnysten 21:978281bfb26e 93
pnysten 21:978281bfb26e 94 int create_firmware_resource(sn_nsdl_resource_info_s *resource_ptr)
pnysten 21:978281bfb26e 95 {
pnysten 21:978281bfb26e 96 nsdl_create_dynamic_resource(resource_ptr, sizeof(FIRMWARE_WRITE_RES_ID)-1, (uint8_t*)FIRMWARE_WRITE_RES_ID, 0, 0, 0, &firmware_resource_cb, SN_GRS_PUT_ALLOWED);
pnysten 21:978281bfb26e 97 return 0;
pnysten 21:978281bfb26e 98 }
pnysten 21:978281bfb26e 99