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
firmware.cpp
00001 // Light resource implementation 00002 00003 #include "mbed.h" 00004 #include "nsdl_support.h" 00005 #include "EthernetInterface.h" 00006 #include "firmware.h" 00007 #include "firmware_status.h" 00008 #include "firmware_result.h" 00009 #include "HTTPClient.h" 00010 #include "C12832_lcd.h" 00011 00012 #define FIRMWARE_WRITE_RES_ID "5/0/1" 00013 //5/0/1 should be used instead 00014 00015 static C12832_LCD lcd; 00016 extern Serial pc; 00017 extern "C" void mbed_reset(); 00018 00019 LocalFileSystem local("local"); 00020 HTTPClient client; 00021 00022 char *remove_ext(char *dst, const char *filename) { 00023 size_t len = strlen(filename); 00024 memcpy(dst, filename, len-3); 00025 dst[len - 3] = 0; 00026 return dst; 00027 } 00028 00029 /* Only PUT method allowed */ 00030 static uint8_t firmware_resource_cb(sn_coap_hdr_s *received_coap_ptr, sn_nsdl_addr_s *address, sn_proto_info_s * proto) 00031 { 00032 sn_coap_hdr_s *coap_res_ptr = 0; 00033 pc.printf("Firmware updating\r\n"); 00034 lcd.locate(0,0); 00035 lcd.printf("Firmware Upgrade...\n"); 00036 00037 if(received_coap_ptr->msg_code == COAP_MSG_CODE_REQUEST_PUT) 00038 { 00039 setResult(0); 00040 pc.printf("Firmware URL length: %d\r\n",received_coap_ptr->payload_len); 00041 char firmware_url[200]; 00042 memcpy(firmware_url, (char *)received_coap_ptr->payload_ptr, received_coap_ptr->payload_len); 00043 firmware_url[received_coap_ptr->payload_len]='\0'; 00044 00045 pc.printf("Firmware URL: %s\r\n",firmware_url); 00046 lcd.locate(0,11); 00047 lcd.printf("Downloading new Firmware...\n"); 00048 00049 HTTPFile file("/local/out.b__"); 00050 pc.printf("INFO: Getting from URL '%s' to '%s'.\r\n", firmware_url, "/local/out.b__"); 00051 00052 coap_res_ptr = sn_coap_build_response(received_coap_ptr, COAP_MSG_CODE_RESPONSE_CHANGED); 00053 sn_nsdl_send_coap_message(address, coap_res_ptr); 00054 00055 int r = client.get(firmware_url, &file); 00056 if (r != HTTP_OK) { 00057 if (r == HTTP_PARSE) 00058 pc.printf("ERR Parse URL: Fetch '%s' to '%s'.\r\n", firmware_url, "/local/out.b__"); 00059 else if (r == HTTP_DNS) 00060 pc.printf("ERR DNS: Fetch '%s' to '%s'.\r\n", firmware_url, "/local/out.b__"); 00061 else if (r == HTTP_NOTFOUND) 00062 pc.printf("ERR 404 Not Found: Fetch '%s' to '%s'.\r\n", firmware_url, "/local/out.b__"); 00063 else if (r == HTTP_REFUSED) 00064 pc.printf("ERR 403 Refused: Fetch '%s' to '%s'.\r\n", firmware_url, "/local/out.b__"); 00065 else if (r == HTTP_ERROR) 00066 pc.printf("ERR Other HTTP Error: Fetch '%s' to '%s'.\r\n", firmware_url, "/local/out.b__"); 00067 else if (r == HTTP_TIMEOUT) 00068 pc.printf("ERR Timeout: Fetch '%s' to '%s'.\r\n", firmware_url, "/local/out.b__"); 00069 else if (r == HTTP_CONN) 00070 pc.printf("ERR Connection: Fetch '%s' to '%s'.\r\n", firmware_url, "/local/out.b__"); 00071 else if (r == HTTP_CLOSED) 00072 pc.printf("ERR Connection Closed: Fetch '%s' to '%s'.\r\n", firmware_url, "/local/out.b__"); 00073 else 00074 pc.printf("ERR Other Error %d: Fetch '%s' to '%s'.\r\n", r, firmware_url, "/local/out.b__"); 00075 pc.printf("ERR : Cleaning temp file.\r\n"); 00076 remove("/local/out.b__"); 00077 setResult(2); 00078 // send_firmware_result_observation(2); 00079 lcd.locate(0,22); 00080 lcd.printf("Failed...\n"); 00081 return 0; 00082 } 00083 pc.printf("INFO: Fetched '%s' to '%s'.\r\n", firmware_url, "/local/out.b__"); 00084 00085 send_firmware_result_observation(1); 00086 lcd.locate(0,22); 00087 lcd.printf("Success...\n"); 00088 } 00089 00090 sn_coap_parser_release_allocated_coap_msg_mem(coap_res_ptr); 00091 return 0; 00092 } 00093 00094 int create_firmware_resource(sn_nsdl_resource_info_s *resource_ptr) 00095 { 00096 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); 00097 return 0; 00098 } 00099
Generated on Sat Jul 16 2022 02:03:09 by 1.7.2