Sakura.io LTE module firmware updater.

Dependencies:   SakuraIO mbed

Firmware updater for sakura.io LTE module.

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?

UserRevisionLine numberNew 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 }