sakura.io file download example for mbed LPC1768

Dependencies:   SakuraIO mbed

Committer:
misodengaku
Date:
Mon May 21 05:10:39 2018 +0000
Revision:
1:b744d5683139
Parent:
0:a5e8e3df9f1d
update libraries

Who changed what in which revision?

UserRevisionLine numberNew contents of line
misodengaku 0:a5e8e3df9f1d 1 #include "mbed.h"
misodengaku 0:a5e8e3df9f1d 2 #include "SakuraIO.h"
misodengaku 0:a5e8e3df9f1d 3
misodengaku 0:a5e8e3df9f1d 4 Serial pc(USBTX, USBRX);
misodengaku 0:a5e8e3df9f1d 5 DigitalOut myled(LED1);
misodengaku 0:a5e8e3df9f1d 6 LocalFileSystem local("local");
misodengaku 0:a5e8e3df9f1d 7
misodengaku 0:a5e8e3df9f1d 8 void rx_interrupt();
misodengaku 0:a5e8e3df9f1d 9 void err2str(int err);
misodengaku 0:a5e8e3df9f1d 10
misodengaku 0:a5e8e3df9f1d 11 int main()
misodengaku 0:a5e8e3df9f1d 12 {
misodengaku 0:a5e8e3df9f1d 13 FILE *fp ;
misodengaku 0:a5e8e3df9f1d 14 pc.baud(115200);
misodengaku 0:a5e8e3df9f1d 15 fp = fopen("/local/file.bin", "wb");
misodengaku 0:a5e8e3df9f1d 16 if (fp == NULL) {
misodengaku 0:a5e8e3df9f1d 17 pc.printf("error: fp is null\r\n");
misodengaku 0:a5e8e3df9f1d 18 }
misodengaku 0:a5e8e3df9f1d 19
misodengaku 0:a5e8e3df9f1d 20 I2C i2c(p9, p10);
misodengaku 0:a5e8e3df9f1d 21 SakuraIO_I2C sakuraio(i2c);
misodengaku 0:a5e8e3df9f1d 22
misodengaku 0:a5e8e3df9f1d 23 pc.printf("waiting to come online");
misodengaku 0:a5e8e3df9f1d 24 for (;;) {
misodengaku 0:a5e8e3df9f1d 25 if ((sakuraio.getConnectionStatus() & 0x80) == 0x80)
misodengaku 0:a5e8e3df9f1d 26 break;
misodengaku 0:a5e8e3df9f1d 27 pc.printf(".");
misodengaku 0:a5e8e3df9f1d 28 wait_ms(1000);
misodengaku 0:a5e8e3df9f1d 29 }
misodengaku 0:a5e8e3df9f1d 30 pc.printf("ok\r\n");
misodengaku 0:a5e8e3df9f1d 31
misodengaku 0:a5e8e3df9f1d 32 uint8_t status = 0;
misodengaku 0:a5e8e3df9f1d 33 while (status != 1) {
misodengaku 0:a5e8e3df9f1d 34 status = sakuraio.startFileDownload(1);
misodengaku 0:a5e8e3df9f1d 35 pc.printf("file req result: %d\r\n", status);
misodengaku 0:a5e8e3df9f1d 36 if (status != CMD_ERROR_NONE) {
misodengaku 0:a5e8e3df9f1d 37 err2str(status);
misodengaku 0:a5e8e3df9f1d 38 pc.printf("\r\n");
misodengaku 0:a5e8e3df9f1d 39 }
misodengaku 0:a5e8e3df9f1d 40 wait_ms(100);
misodengaku 0:a5e8e3df9f1d 41 pc.printf("cancel\r\n");
misodengaku 0:a5e8e3df9f1d 42 uint8_t cancel_result = sakuraio.cancelFileDownload();
misodengaku 0:a5e8e3df9f1d 43 err2str(cancel_result);
misodengaku 0:a5e8e3df9f1d 44 pc.printf("\r\n");
misodengaku 0:a5e8e3df9f1d 45 wait_ms(100);
misodengaku 0:a5e8e3df9f1d 46 }
misodengaku 0:a5e8e3df9f1d 47
misodengaku 0:a5e8e3df9f1d 48
misodengaku 0:a5e8e3df9f1d 49
misodengaku 0:a5e8e3df9f1d 50 uint32_t received_size = 0;
misodengaku 0:a5e8e3df9f1d 51
misodengaku 0:a5e8e3df9f1d 52 uint8_t file_status = 0;
misodengaku 0:a5e8e3df9f1d 53 uint32_t file_total_size = 0, file_crc32 = 0;
misodengaku 0:a5e8e3df9f1d 54 uint64_t file_timestamp = 0;
misodengaku 0:a5e8e3df9f1d 55 while(file_status == 0) {
misodengaku 0:a5e8e3df9f1d 56
misodengaku 0:a5e8e3df9f1d 57 sakuraio.getFileMetaData(&file_status, &file_total_size, &file_timestamp, &file_crc32);
misodengaku 0:a5e8e3df9f1d 58
misodengaku 0:a5e8e3df9f1d 59 pc.printf("metadata status: %d filesize: %d crc32: %08x\r\n", file_status, file_total_size, file_crc32);
misodengaku 0:a5e8e3df9f1d 60
misodengaku 0:a5e8e3df9f1d 61 pc.printf("date ");
misodengaku 0:a5e8e3df9f1d 62 for (int i = 0; i < 8; i++) {
misodengaku 0:a5e8e3df9f1d 63 pc.printf("%02x ", ((uint8_t *)&file_timestamp)[i]);
misodengaku 0:a5e8e3df9f1d 64 }
misodengaku 0:a5e8e3df9f1d 65 pc.printf("\r\n");
misodengaku 0:a5e8e3df9f1d 66 wait(1);
misodengaku 0:a5e8e3df9f1d 67 }
misodengaku 0:a5e8e3df9f1d 68
misodengaku 0:a5e8e3df9f1d 69 while (1) {
misodengaku 0:a5e8e3df9f1d 70 status = 0;
misodengaku 0:a5e8e3df9f1d 71 uint32_t s = 0;
misodengaku 0:a5e8e3df9f1d 72 uint8_t a = sakuraio.getFileDownloadStatus(&status, &s);
misodengaku 0:a5e8e3df9f1d 73 pc.printf("result: ");
misodengaku 0:a5e8e3df9f1d 74 err2str(a);
misodengaku 0:a5e8e3df9f1d 75 pc.printf("status %d size %d\r\n", status, s);
misodengaku 0:a5e8e3df9f1d 76 wait_ms(500);
misodengaku 0:a5e8e3df9f1d 77
misodengaku 0:a5e8e3df9f1d 78 uint8_t buf[255] = {0};
misodengaku 0:a5e8e3df9f1d 79 uint8_t len = 251; // request size
misodengaku 0:a5e8e3df9f1d 80 uint8_t fileget = sakuraio.getFileData(&len, buf);
misodengaku 0:a5e8e3df9f1d 81 // if (fileget != cmd_error_none) {
misodengaku 0:a5e8e3df9f1d 82 // pc.printf("download waiting...\r\n");
misodengaku 0:a5e8e3df9f1d 83 // wait_ms(1000);
misodengaku 0:a5e8e3df9f1d 84 // continue;
misodengaku 0:a5e8e3df9f1d 85 // //break;
misodengaku 0:a5e8e3df9f1d 86 // }
misodengaku 0:a5e8e3df9f1d 87
misodengaku 0:a5e8e3df9f1d 88 pc.printf("file get ");
misodengaku 0:a5e8e3df9f1d 89 err2str(fileget);
misodengaku 0:a5e8e3df9f1d 90 if (fileget != 1) {
misodengaku 0:a5e8e3df9f1d 91 pc.printf("error: get_data returned invalid status\r\n");
misodengaku 0:a5e8e3df9f1d 92 while(1) {
misodengaku 0:a5e8e3df9f1d 93 wait(1);
misodengaku 0:a5e8e3df9f1d 94 }
misodengaku 0:a5e8e3df9f1d 95 }
misodengaku 0:a5e8e3df9f1d 96 pc.printf("len %d\r\n", len);
misodengaku 0:a5e8e3df9f1d 97 received_size += len;
misodengaku 0:a5e8e3df9f1d 98 pc.printf("received %08x\r\n", len);
misodengaku 0:a5e8e3df9f1d 99 for (int i = 0; i < len; i++) {
misodengaku 0:a5e8e3df9f1d 100 pc.printf("%02x ", buf[i]);
misodengaku 0:a5e8e3df9f1d 101 }
misodengaku 0:a5e8e3df9f1d 102 fwrite(buf, len, 1, fp);
misodengaku 0:a5e8e3df9f1d 103 pc.printf("\r\n");
misodengaku 0:a5e8e3df9f1d 104 pc.printf("%d / %d (%f%%)\r\n", received_size, file_total_size, ((double)received_size / file_total_size) * 100);
misodengaku 0:a5e8e3df9f1d 105 if (received_size >= file_total_size) {
misodengaku 0:a5e8e3df9f1d 106 break;
misodengaku 0:a5e8e3df9f1d 107 }
misodengaku 0:a5e8e3df9f1d 108 wait_ms(100);
misodengaku 0:a5e8e3df9f1d 109 }
misodengaku 0:a5e8e3df9f1d 110 fclose(fp);
misodengaku 0:a5e8e3df9f1d 111 pc.printf("download complete!\r\n");
misodengaku 0:a5e8e3df9f1d 112
misodengaku 0:a5e8e3df9f1d 113 // block
misodengaku 0:a5e8e3df9f1d 114 while (1)
misodengaku 0:a5e8e3df9f1d 115 ;
misodengaku 0:a5e8e3df9f1d 116 }
misodengaku 0:a5e8e3df9f1d 117
misodengaku 0:a5e8e3df9f1d 118 void err2str(int err)
misodengaku 0:a5e8e3df9f1d 119 {
misodengaku 0:a5e8e3df9f1d 120 switch (err) {
misodengaku 0:a5e8e3df9f1d 121 case CMD_ERROR_NONE:
misodengaku 0:a5e8e3df9f1d 122 printf("no error.");
misodengaku 0:a5e8e3df9f1d 123 break;
misodengaku 0:a5e8e3df9f1d 124 case CMD_ERROR_PARITY:
misodengaku 0:a5e8e3df9f1d 125 printf("parity error.");
misodengaku 0:a5e8e3df9f1d 126 break;
misodengaku 0:a5e8e3df9f1d 127 case CMD_ERROR_MISSING:
misodengaku 0:a5e8e3df9f1d 128 printf("command missing.");
misodengaku 0:a5e8e3df9f1d 129 break;
misodengaku 0:a5e8e3df9f1d 130 case CMD_ERROR_INVALID_SYNTAX:
misodengaku 0:a5e8e3df9f1d 131 printf("invalid syntax.");
misodengaku 0:a5e8e3df9f1d 132 break;
misodengaku 0:a5e8e3df9f1d 133 case CMD_ERROR_RUNTIME:
misodengaku 0:a5e8e3df9f1d 134 printf("runtime error.");
misodengaku 0:a5e8e3df9f1d 135 break;
misodengaku 0:a5e8e3df9f1d 136 case CMD_ERROR_LOCKED:
misodengaku 0:a5e8e3df9f1d 137 printf("command locked.");
misodengaku 0:a5e8e3df9f1d 138 break;
misodengaku 0:a5e8e3df9f1d 139 case CMD_ERROR_BUSY:
misodengaku 0:a5e8e3df9f1d 140 printf("busy.");
misodengaku 0:a5e8e3df9f1d 141 break;
misodengaku 0:a5e8e3df9f1d 142 }
misodengaku 0:a5e8e3df9f1d 143 }