Mitsukuni Sato
/
sakuraio_lte_firmwareupdater
Sakura.io LTE module firmware updater.
Firmware updater for sakura.io LTE module.
main.cpp@0:c438a500505d, 2017-04-21 (annotated)
- Committer:
- key3
- Date:
- Fri Apr 21 08:23:40 2017 +0000
- Revision:
- 0:c438a500505d
sakura.io LTE module firmware updater;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
key3 | 0:c438a500505d | 1 | #include "mbed.h" |
key3 | 0:c438a500505d | 2 | #include "SakuraIO.h" |
key3 | 0:c438a500505d | 3 | |
key3 | 0:c438a500505d | 4 | #define SAKURAIO_SDA PC_9 |
key3 | 0:c438a500505d | 5 | #define SAKURAIO_SCL PA_8 |
key3 | 0:c438a500505d | 6 | #define SAKURAIO_PIN_RST PC_6 |
key3 | 0:c438a500505d | 7 | #define SAKURAIO_PIN_WKIN PC_7 |
key3 | 0:c438a500505d | 8 | |
key3 | 0:c438a500505d | 9 | Serial pc(USBTX, USBRX); |
key3 | 0:c438a500505d | 10 | SakuraIO_I2C sakuraio(SAKURAIO_SDA, SAKURAIO_SCL); |
key3 | 0:c438a500505d | 11 | DigitalInOut sakuraIoReset(SAKURAIO_PIN_RST, PIN_OUTPUT, OpenDrain, 1); |
key3 | 0:c438a500505d | 12 | DigitalInOut sakuraIoWakeIn(SAKURAIO_PIN_WKIN, PIN_INPUT, PullUp, 1); |
key3 | 0:c438a500505d | 13 | |
key3 | 0:c438a500505d | 14 | int main() |
key3 | 0:c438a500505d | 15 | { |
key3 | 0:c438a500505d | 16 | wait(5); |
key3 | 0:c438a500505d | 17 | pc.printf("waiting for connection ."); |
key3 | 0:c438a500505d | 18 | int status; |
key3 | 0:c438a500505d | 19 | do { |
key3 | 0:c438a500505d | 20 | status = sakuraio.getConnectionStatus(); |
key3 | 0:c438a500505d | 21 | pc.printf("."); |
key3 | 0:c438a500505d | 22 | wait(1); |
key3 | 0:c438a500505d | 23 | } while (status != 0x80); |
key3 | 0:c438a500505d | 24 | |
key3 | 0:c438a500505d | 25 | pc.printf(" connected\r\n"); |
key3 | 0:c438a500505d | 26 | pc.printf("updating firmware "); |
key3 | 0:c438a500505d | 27 | |
key3 | 0:c438a500505d | 28 | // prepare for firmware update |
key3 | 0:c438a500505d | 29 | sakuraio.unlock(); |
key3 | 0:c438a500505d | 30 | |
key3 | 0:c438a500505d | 31 | switch (status = sakuraio.updateFirmware()) { |
key3 | 0:c438a500505d | 32 | case 0x01: |
key3 | 0:c438a500505d | 33 | pc.printf("start "); |
key3 | 0:c438a500505d | 34 | break; |
key3 | 0:c438a500505d | 35 | case 0x02: |
key3 | 0:c438a500505d | 36 | error("parity error\r\n"); |
key3 | 0:c438a500505d | 37 | break; |
key3 | 0:c438a500505d | 38 | case 0x03: |
key3 | 0:c438a500505d | 39 | error("unsupported request\r\n"); |
key3 | 0:c438a500505d | 40 | break; |
key3 | 0:c438a500505d | 41 | case 0x04: |
key3 | 0:c438a500505d | 42 | error("argument error\r\n"); |
key3 | 0:c438a500505d | 43 | break; |
key3 | 0:c438a500505d | 44 | case 0x05: |
key3 | 0:c438a500505d | 45 | error("result error\r\n"); |
key3 | 0:c438a500505d | 46 | break; |
key3 | 0:c438a500505d | 47 | } |
key3 | 0:c438a500505d | 48 | |
key3 | 0:c438a500505d | 49 | while(1) { |
key3 | 0:c438a500505d | 50 | status = sakuraio.getFirmwareUpdateStatus(); |
key3 | 0:c438a500505d | 51 | pc.printf("update status=%d\r\n", status); |
key3 | 0:c438a500505d | 52 | bool running = status & (1 << 7); |
key3 | 0:c438a500505d | 53 | bool error = status & (1 << 6); |
key3 | 0:c438a500505d | 54 | int errCode = status & 0b00111111; |
key3 | 0:c438a500505d | 55 | |
key3 | 0:c438a500505d | 56 | if (running) { |
key3 | 0:c438a500505d | 57 | pc.printf("."); |
key3 | 0:c438a500505d | 58 | |
key3 | 0:c438a500505d | 59 | wait(1); |
key3 | 0:c438a500505d | 60 | continue; |
key3 | 0:c438a500505d | 61 | } else { |
key3 | 0:c438a500505d | 62 | switch (errCode) { |
key3 | 0:c438a500505d | 63 | case 0x00: |
key3 | 0:c438a500505d | 64 | pc.printf("firmware update succeeded.\r\n"); |
key3 | 0:c438a500505d | 65 | break; |
key3 | 0:c438a500505d | 66 | case 0x01: |
key3 | 0:c438a500505d | 67 | pc.printf("firmware already updated.\r\n"); |
key3 | 0:c438a500505d | 68 | break; |
key3 | 0:c438a500505d | 69 | case 0x02: |
key3 | 0:c438a500505d | 70 | pc.printf("failed to download latest firmware\r\n"); |
key3 | 0:c438a500505d | 71 | break; |
key3 | 0:c438a500505d | 72 | case 0x03: |
key3 | 0:c438a500505d | 73 | pc.printf("failed to download firmware\r\n"); |
key3 | 0:c438a500505d | 74 | break; |
key3 | 0:c438a500505d | 75 | case 0x04: |
key3 | 0:c438a500505d | 76 | pc.printf("firmware verify failed\r\n"); |
key3 | 0:c438a500505d | 77 | break; |
key3 | 0:c438a500505d | 78 | } |
key3 | 0:c438a500505d | 79 | break; |
key3 | 0:c438a500505d | 80 | } |
key3 | 0:c438a500505d | 81 | } |
key3 | 0:c438a500505d | 82 | } |