sakura fan
/
SakuraIO_FirmwareUpdate
src: https://github.com/sakuraio/SakuraIOArduino/tree/master/examples/FirmwareUpdate
main.cpp@0:ad4eb76f11a0, 2017-07-24 (annotated)
- Committer:
- sakurafan
- Date:
- Mon Jul 24 02:45:01 2017 +0000
- Revision:
- 0:ad4eb76f11a0
1st build
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
sakurafan | 0:ad4eb76f11a0 | 1 | #include "mbed.h" |
sakurafan | 0:ad4eb76f11a0 | 2 | #include "SakuraIO.h" |
sakurafan | 0:ad4eb76f11a0 | 3 | |
sakurafan | 0:ad4eb76f11a0 | 4 | SakuraIO_I2C sakuraio(p28, p27); // sda, scl (mbed LPC1768) |
sakurafan | 0:ad4eb76f11a0 | 5 | |
sakurafan | 0:ad4eb76f11a0 | 6 | DigitalOut myled(LED1); |
sakurafan | 0:ad4eb76f11a0 | 7 | Serial pc(USBTX, USBRX); |
sakurafan | 0:ad4eb76f11a0 | 8 | |
sakurafan | 0:ad4eb76f11a0 | 9 | uint8_t updateFirmware () { |
sakurafan | 0:ad4eb76f11a0 | 10 | uint8_t ret; |
sakurafan | 0:ad4eb76f11a0 | 11 | char version[33] = {0}; |
sakurafan | 0:ad4eb76f11a0 | 12 | |
sakurafan | 0:ad4eb76f11a0 | 13 | // Check module |
sakurafan | 0:ad4eb76f11a0 | 14 | uint16_t productId = sakuraio.getProductID(); |
sakurafan | 0:ad4eb76f11a0 | 15 | switch(productId){ |
sakurafan | 0:ad4eb76f11a0 | 16 | case 0x0001: |
sakurafan | 0:ad4eb76f11a0 | 17 | pc.printf("SCM-LTE-Beta\r\n"); |
sakurafan | 0:ad4eb76f11a0 | 18 | break; |
sakurafan | 0:ad4eb76f11a0 | 19 | default: |
sakurafan | 0:ad4eb76f11a0 | 20 | pc.printf("Please check connection\r\n"); |
sakurafan | 0:ad4eb76f11a0 | 21 | return 1; |
sakurafan | 0:ad4eb76f11a0 | 22 | } |
sakurafan | 0:ad4eb76f11a0 | 23 | |
sakurafan | 0:ad4eb76f11a0 | 24 | wait(1); |
sakurafan | 0:ad4eb76f11a0 | 25 | |
sakurafan | 0:ad4eb76f11a0 | 26 | // Waiting for online |
sakurafan | 0:ad4eb76f11a0 | 27 | pc.printf("Waiting for online\r\n"); |
sakurafan | 0:ad4eb76f11a0 | 28 | while (1) { |
sakurafan | 0:ad4eb76f11a0 | 29 | pc.printf("."); |
sakurafan | 0:ad4eb76f11a0 | 30 | wait(2); |
sakurafan | 0:ad4eb76f11a0 | 31 | if((sakuraio.getConnectionStatus() & 0x80) != 0x00){ |
sakurafan | 0:ad4eb76f11a0 | 32 | break; |
sakurafan | 0:ad4eb76f11a0 | 33 | } |
sakurafan | 0:ad4eb76f11a0 | 34 | } |
sakurafan | 0:ad4eb76f11a0 | 35 | pc.printf("\r\n"); |
sakurafan | 0:ad4eb76f11a0 | 36 | pc.printf("Online\r\n"); |
sakurafan | 0:ad4eb76f11a0 | 37 | |
sakurafan | 0:ad4eb76f11a0 | 38 | pc.printf("Get current version\r\n"); |
sakurafan | 0:ad4eb76f11a0 | 39 | ret = sakuraio.getFirmwareVersion(version); |
sakurafan | 0:ad4eb76f11a0 | 40 | if((ret = sakuraio.getFirmwareVersion(version)) != CMD_ERROR_NONE){ |
sakurafan | 0:ad4eb76f11a0 | 41 | pc.printf("Error code=%d\r\n", ret); |
sakurafan | 0:ad4eb76f11a0 | 42 | return 1; |
sakurafan | 0:ad4eb76f11a0 | 43 | } |
sakurafan | 0:ad4eb76f11a0 | 44 | pc.printf("Current: %s\r\n", version); |
sakurafan | 0:ad4eb76f11a0 | 45 | |
sakurafan | 0:ad4eb76f11a0 | 46 | wait(1); |
sakurafan | 0:ad4eb76f11a0 | 47 | |
sakurafan | 0:ad4eb76f11a0 | 48 | // Request unlock |
sakurafan | 0:ad4eb76f11a0 | 49 | pc.printf("Unlock\r\n"); |
sakurafan | 0:ad4eb76f11a0 | 50 | if((ret = sakuraio.unlock()) != CMD_ERROR_NONE){ |
sakurafan | 0:ad4eb76f11a0 | 51 | pc.printf("Error code=%d\r\n", ret); |
sakurafan | 0:ad4eb76f11a0 | 52 | return 1; |
sakurafan | 0:ad4eb76f11a0 | 53 | } |
sakurafan | 0:ad4eb76f11a0 | 54 | |
sakurafan | 0:ad4eb76f11a0 | 55 | wait(1); |
sakurafan | 0:ad4eb76f11a0 | 56 | |
sakurafan | 0:ad4eb76f11a0 | 57 | // Request firmware update |
sakurafan | 0:ad4eb76f11a0 | 58 | pc.printf("Starting update\r\n"); |
sakurafan | 0:ad4eb76f11a0 | 59 | if((ret = sakuraio.updateFirmware()) != CMD_ERROR_NONE){ |
sakurafan | 0:ad4eb76f11a0 | 60 | pc.printf("Error code=%d\r\n", ret); |
sakurafan | 0:ad4eb76f11a0 | 61 | return 1; |
sakurafan | 0:ad4eb76f11a0 | 62 | } |
sakurafan | 0:ad4eb76f11a0 | 63 | |
sakurafan | 0:ad4eb76f11a0 | 64 | wait(1); |
sakurafan | 0:ad4eb76f11a0 | 65 | |
sakurafan | 0:ad4eb76f11a0 | 66 | // Check update status |
sakurafan | 0:ad4eb76f11a0 | 67 | uint8_t errCode = 0x00; |
sakurafan | 0:ad4eb76f11a0 | 68 | pc.printf("Waiting for update\r\n"); |
sakurafan | 0:ad4eb76f11a0 | 69 | while(1){ |
sakurafan | 0:ad4eb76f11a0 | 70 | |
sakurafan | 0:ad4eb76f11a0 | 71 | wait(1); |
sakurafan | 0:ad4eb76f11a0 | 72 | pc.printf("."); |
sakurafan | 0:ad4eb76f11a0 | 73 | |
sakurafan | 0:ad4eb76f11a0 | 74 | uint8_t updateStatus = sakuraio.getFirmwareUpdateStatus(); |
sakurafan | 0:ad4eb76f11a0 | 75 | if (updateStatus == 0xff || (updateStatus & 0x80) != 0x00) { |
sakurafan | 0:ad4eb76f11a0 | 76 | continue; |
sakurafan | 0:ad4eb76f11a0 | 77 | } else if (updateStatus == 0x00) { |
sakurafan | 0:ad4eb76f11a0 | 78 | // Success |
sakurafan | 0:ad4eb76f11a0 | 79 | break; |
sakurafan | 0:ad4eb76f11a0 | 80 | } else { |
sakurafan | 0:ad4eb76f11a0 | 81 | // Error |
sakurafan | 0:ad4eb76f11a0 | 82 | errCode = updateStatus & 0x3f; |
sakurafan | 0:ad4eb76f11a0 | 83 | break; |
sakurafan | 0:ad4eb76f11a0 | 84 | } |
sakurafan | 0:ad4eb76f11a0 | 85 | } |
sakurafan | 0:ad4eb76f11a0 | 86 | |
sakurafan | 0:ad4eb76f11a0 | 87 | pc.printf("\r\n"); |
sakurafan | 0:ad4eb76f11a0 | 88 | switch(errCode){ |
sakurafan | 0:ad4eb76f11a0 | 89 | case 0x00: |
sakurafan | 0:ad4eb76f11a0 | 90 | return 0; |
sakurafan | 0:ad4eb76f11a0 | 91 | case 0x01: |
sakurafan | 0:ad4eb76f11a0 | 92 | pc.printf("Already updated\r\n"); |
sakurafan | 0:ad4eb76f11a0 | 93 | return 0; |
sakurafan | 0:ad4eb76f11a0 | 94 | default: |
sakurafan | 0:ad4eb76f11a0 | 95 | pc.printf("Error code=%d\r\n", errCode); |
sakurafan | 0:ad4eb76f11a0 | 96 | break; |
sakurafan | 0:ad4eb76f11a0 | 97 | } |
sakurafan | 0:ad4eb76f11a0 | 98 | |
sakurafan | 0:ad4eb76f11a0 | 99 | return 1; |
sakurafan | 0:ad4eb76f11a0 | 100 | } |
sakurafan | 0:ad4eb76f11a0 | 101 | |
sakurafan | 0:ad4eb76f11a0 | 102 | int main () { |
sakurafan | 0:ad4eb76f11a0 | 103 | |
sakurafan | 0:ad4eb76f11a0 | 104 | pc.baud(115200); |
sakurafan | 0:ad4eb76f11a0 | 105 | wait(3); |
sakurafan | 0:ad4eb76f11a0 | 106 | if (updateFirmware() == 0) { |
sakurafan | 0:ad4eb76f11a0 | 107 | pc.printf("Update successfull\r\n"); |
sakurafan | 0:ad4eb76f11a0 | 108 | } else { |
sakurafan | 0:ad4eb76f11a0 | 109 | pc.printf("Update failure\r\n"); |
sakurafan | 0:ad4eb76f11a0 | 110 | } |
sakurafan | 0:ad4eb76f11a0 | 111 | |
sakurafan | 0:ad4eb76f11a0 | 112 | for (;;) { |
sakurafan | 0:ad4eb76f11a0 | 113 | myled = !myled; |
sakurafan | 0:ad4eb76f11a0 | 114 | wait(0.5); |
sakurafan | 0:ad4eb76f11a0 | 115 | } |
sakurafan | 0:ad4eb76f11a0 | 116 | } |