Sample program of SAKURA Internet IoT Communication Module

Dependencies:   SakuraIO mbed

View the Github repository.

Committer:
spiralray
Date:
Sat Nov 19 12:34:36 2016 +0000
Revision:
0:40aec5afc650
Child:
3:6bf66fc3bc57
First commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
spiralray 0:40aec5afc650 1 #include "mbed.h"
spiralray 0:40aec5afc650 2 #include "SakuraIO.h"
spiralray 0:40aec5afc650 3
spiralray 0:40aec5afc650 4 Serial pc(USBTX, USBRX);
spiralray 0:40aec5afc650 5 DigitalOut myled(LED1);
spiralray 0:40aec5afc650 6
spiralray 0:40aec5afc650 7 int main()
spiralray 0:40aec5afc650 8 {
spiralray 0:40aec5afc650 9
spiralray 0:40aec5afc650 10
spiralray 0:40aec5afc650 11 SPI spi(p5, p6, p7); // mosi, miso, sclk
spiralray 0:40aec5afc650 12 DigitalOut cs(p8);
spiralray 0:40aec5afc650 13 I2C i2c(p9, p10); // sda, scl
spiralray 0:40aec5afc650 14
spiralray 0:40aec5afc650 15 //SakuraIO_SPI sakuraio( spi, cs );
spiralray 0:40aec5afc650 16 SakuraIO_I2C sakuraio(i2c);
spiralray 0:40aec5afc650 17
spiralray 0:40aec5afc650 18
spiralray 0:40aec5afc650 19 pc.printf("Waiting to come online");
spiralray 0:40aec5afc650 20 for(;;) {
spiralray 0:40aec5afc650 21 if( (sakuraio.getConnectionStatus() & 0x80) == 0x80 ) break;
spiralray 0:40aec5afc650 22 pc.printf(".");
spiralray 0:40aec5afc650 23 wait_ms(1000);
spiralray 0:40aec5afc650 24 }
spiralray 0:40aec5afc650 25 pc.printf("\r\n");
spiralray 0:40aec5afc650 26
spiralray 0:40aec5afc650 27 uint8_t counter = 0;
spiralray 0:40aec5afc650 28
spiralray 0:40aec5afc650 29 while(1) {
spiralray 0:40aec5afc650 30 pc.printf("\r\n%02x\r\n",counter);
spiralray 0:40aec5afc650 31
spiralray 0:40aec5afc650 32 uint8_t request[33] = {};
spiralray 0:40aec5afc650 33 uint8_t response[33] = {};
spiralray 0:40aec5afc650 34
spiralray 0:40aec5afc650 35 // Echoback
spiralray 0:40aec5afc650 36 request[0] = counter;
spiralray 0:40aec5afc650 37 sakuraio.echoback(1, request, response);
spiralray 0:40aec5afc650 38 pc.printf("%02x\r\n",request[0]);
spiralray 0:40aec5afc650 39 pc.printf(" -> ");
spiralray 0:40aec5afc650 40 pc.printf("%02x\r\n",response[0]);
spiralray 0:40aec5afc650 41
spiralray 0:40aec5afc650 42 // Unixtime
spiralray 0:40aec5afc650 43 uint32_t unixtime = (uint32_t)(sakuraio.getUnixtime()/1000UL);
spiralray 0:40aec5afc650 44 pc.printf("Unixtime ");
spiralray 0:40aec5afc650 45 pc.printf("%d\r\n",unixtime);
spiralray 0:40aec5afc650 46
spiralray 0:40aec5afc650 47 // ADC
spiralray 0:40aec5afc650 48 uint16_t adc;
spiralray 0:40aec5afc650 49 adc = sakuraio.getADC(0);
spiralray 0:40aec5afc650 50 pc.printf("ADC0 ");
spiralray 0:40aec5afc650 51 pc.printf("%d\r\n",adc);
spiralray 0:40aec5afc650 52 adc = sakuraio.getADC(1);
spiralray 0:40aec5afc650 53 pc.printf("ADC1 ");
spiralray 0:40aec5afc650 54 pc.printf("%d\r\n",adc);
spiralray 0:40aec5afc650 55
spiralray 0:40aec5afc650 56 // ProductID
spiralray 0:40aec5afc650 57 uint16_t pid = sakuraio.getProductID();
spiralray 0:40aec5afc650 58 pc.printf("PID ");
spiralray 0:40aec5afc650 59 pc.printf("%d\r\n",pid);
spiralray 0:40aec5afc650 60
spiralray 0:40aec5afc650 61 // UniqueID
spiralray 0:40aec5afc650 62 sakuraio.getUniqueID((char *)response);
spiralray 0:40aec5afc650 63 pc.printf("UID ");
spiralray 0:40aec5afc650 64 pc.printf("%s\r\n",response);
spiralray 0:40aec5afc650 65
spiralray 0:40aec5afc650 66 // Version
spiralray 0:40aec5afc650 67 sakuraio.getFirmwareVersion((char *)response);
spiralray 0:40aec5afc650 68 pc.printf("Ver ");
spiralray 0:40aec5afc650 69 pc.printf("%s\r\n",response);
spiralray 0:40aec5afc650 70
spiralray 0:40aec5afc650 71 // Connection Status
spiralray 0:40aec5afc650 72 uint8_t connectionStatus = sakuraio.getConnectionStatus();
spiralray 0:40aec5afc650 73 pc.printf("Status ");
spiralray 0:40aec5afc650 74 pc.printf("%s\r\n",response);
spiralray 0:40aec5afc650 75
spiralray 0:40aec5afc650 76 //getSignalQuarity
spiralray 0:40aec5afc650 77 uint8_t signalQuarity = sakuraio.getSignalQuarity();
spiralray 0:40aec5afc650 78 pc.printf("Quality ");
spiralray 0:40aec5afc650 79 pc.printf("%s\r\n",response);
spiralray 0:40aec5afc650 80
spiralray 0:40aec5afc650 81
spiralray 0:40aec5afc650 82 // Tx Queue
spiralray 0:40aec5afc650 83 uint8_t ret;
spiralray 0:40aec5afc650 84 ret = sakuraio.enqueueTx((uint8_t)0, (int32_t)counter);
spiralray 0:40aec5afc650 85 pc.printf("Enqueue ");
spiralray 0:40aec5afc650 86 pc.printf("%s\r\n",response);
spiralray 0:40aec5afc650 87
spiralray 0:40aec5afc650 88 uint8_t avail;
spiralray 0:40aec5afc650 89 uint8_t queued;
spiralray 0:40aec5afc650 90 sakuraio.getTxQueueLength(&avail, &queued);
spiralray 0:40aec5afc650 91 pc.printf("Tx Available=");
spiralray 0:40aec5afc650 92 pc.printf("%d",avail);
spiralray 0:40aec5afc650 93 pc.printf(" Queued=");
spiralray 0:40aec5afc650 94 pc.printf("%d\r\n",queued);
spiralray 0:40aec5afc650 95
spiralray 0:40aec5afc650 96 if(queued >= 30) {
spiralray 0:40aec5afc650 97 ret = sakuraio.clearTx();
spiralray 0:40aec5afc650 98 pc.printf("Clear ");
spiralray 0:40aec5afc650 99 pc.printf("%02x\r\n",ret);
spiralray 0:40aec5afc650 100 } else if(queued >= 5) {
spiralray 0:40aec5afc650 101 ret = sakuraio.send();
spiralray 0:40aec5afc650 102 pc.printf("Send ");
spiralray 0:40aec5afc650 103 pc.printf("%02x\r\n",ret);
spiralray 0:40aec5afc650 104 }
spiralray 0:40aec5afc650 105
spiralray 0:40aec5afc650 106 // Rx Queue
spiralray 0:40aec5afc650 107 sakuraio.getRxQueueLength(&avail, &queued);
spiralray 0:40aec5afc650 108 pc.printf("Rx Available=");
spiralray 0:40aec5afc650 109 pc.printf("%d",avail);
spiralray 0:40aec5afc650 110 pc.printf(" Queued=");
spiralray 0:40aec5afc650 111 pc.printf("%d\r\n",queued);
spiralray 0:40aec5afc650 112
spiralray 0:40aec5afc650 113 for(uint8_t i=0; i<queued; i++) {
spiralray 0:40aec5afc650 114 uint8_t channel;
spiralray 0:40aec5afc650 115 uint8_t type;
spiralray 0:40aec5afc650 116 uint8_t values[8];
spiralray 0:40aec5afc650 117 int64_t offset;
spiralray 0:40aec5afc650 118 ret = sakuraio.dequeueRx(&channel, &type, values, &offset);
spiralray 0:40aec5afc650 119 pc.printf("Dequeue ");
spiralray 0:40aec5afc650 120 pc.printf("%02x",ret);
spiralray 0:40aec5afc650 121 if(ret == 0x01) {
spiralray 0:40aec5afc650 122 pc.printf(" ch=");
spiralray 0:40aec5afc650 123 pc.printf("%d",channel);
spiralray 0:40aec5afc650 124 pc.printf(" type=");
spiralray 0:40aec5afc650 125 pc.printf("%c",type);
spiralray 0:40aec5afc650 126 pc.printf(" values=[");
spiralray 0:40aec5afc650 127 for(uint8_t b=0; b<7; b++) {
spiralray 0:40aec5afc650 128 pc.printf("%02x ",values[b]);
spiralray 0:40aec5afc650 129 }
spiralray 0:40aec5afc650 130 pc.printf("%02x",values[7]);
spiralray 0:40aec5afc650 131 pc.printf("] offset=");
spiralray 0:40aec5afc650 132 pc.printf("%d\r\n",(int32_t)offset);
spiralray 0:40aec5afc650 133 } else {
spiralray 0:40aec5afc650 134 pc.printf(" ERROR\r\n");
spiralray 0:40aec5afc650 135 }
spiralray 0:40aec5afc650 136 }
spiralray 0:40aec5afc650 137
spiralray 0:40aec5afc650 138 wait_ms(1000);
spiralray 0:40aec5afc650 139 }
spiralray 0:40aec5afc650 140
spiralray 0:40aec5afc650 141 }