sakura fan
/
SakuraIO_FirmwareUpdate
src: https://github.com/sakuraio/SakuraIOArduino/tree/master/examples/FirmwareUpdate
Diff: main.cpp
- Revision:
- 0:ad4eb76f11a0
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Mon Jul 24 02:45:01 2017 +0000 @@ -0,0 +1,116 @@ +#include "mbed.h" +#include "SakuraIO.h" + +SakuraIO_I2C sakuraio(p28, p27); // sda, scl (mbed LPC1768) + +DigitalOut myled(LED1); +Serial pc(USBTX, USBRX); + +uint8_t updateFirmware () { + uint8_t ret; + char version[33] = {0}; + + // Check module + uint16_t productId = sakuraio.getProductID(); + switch(productId){ + case 0x0001: + pc.printf("SCM-LTE-Beta\r\n"); + break; + default: + pc.printf("Please check connection\r\n"); + return 1; + } + + wait(1); + + // Waiting for online + pc.printf("Waiting for online\r\n"); + while (1) { + pc.printf("."); + wait(2); + if((sakuraio.getConnectionStatus() & 0x80) != 0x00){ + break; + } + } + pc.printf("\r\n"); + pc.printf("Online\r\n"); + + pc.printf("Get current version\r\n"); + ret = sakuraio.getFirmwareVersion(version); + if((ret = sakuraio.getFirmwareVersion(version)) != CMD_ERROR_NONE){ + pc.printf("Error code=%d\r\n", ret); + return 1; + } + pc.printf("Current: %s\r\n", version); + + wait(1); + + // Request unlock + pc.printf("Unlock\r\n"); + if((ret = sakuraio.unlock()) != CMD_ERROR_NONE){ + pc.printf("Error code=%d\r\n", ret); + return 1; + } + + wait(1); + + // Request firmware update + pc.printf("Starting update\r\n"); + if((ret = sakuraio.updateFirmware()) != CMD_ERROR_NONE){ + pc.printf("Error code=%d\r\n", ret); + return 1; + } + + wait(1); + + // Check update status + uint8_t errCode = 0x00; + pc.printf("Waiting for update\r\n"); + while(1){ + + wait(1); + pc.printf("."); + + uint8_t updateStatus = sakuraio.getFirmwareUpdateStatus(); + if (updateStatus == 0xff || (updateStatus & 0x80) != 0x00) { + continue; + } else if (updateStatus == 0x00) { + // Success + break; + } else { + // Error + errCode = updateStatus & 0x3f; + break; + } + } + + pc.printf("\r\n"); + switch(errCode){ + case 0x00: + return 0; + case 0x01: + pc.printf("Already updated\r\n"); + return 0; + default: + pc.printf("Error code=%d\r\n", errCode); + break; + } + + return 1; +} + +int main () { + + pc.baud(115200); + wait(3); + if (updateFirmware() == 0) { + pc.printf("Update successfull\r\n"); + } else { + pc.printf("Update failure\r\n"); + } + + for (;;) { + myled = !myled; + wait(0.5); + } +}