SAKURA Internet IoT Communication Module Library for mbed

Dependents:   patlite_sakuraio sakuraio_lte_firmwareupdater shownet2017-iinebutton patlite_sakuraio_stack ... more

SAKURA Internet IoT Communication Module Library for mbed

Sakura Communication Module (with sakura.io) library for mbed.

Support

This library supports following products.

Reference

Please see the datasheet.

License

The MIT License (MIT)

Copyright (c) SAKURA Internet Inc.

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Committer:
chibiegg
Date:
Fri Jan 06 18:03:02 2017 +0900
Revision:
6:34a0233cdf04
Parent:
5:84a9fcd0c28b
Child:
11:16e726ca39c6
Follow SakuraIOArduino v1.0.3

Who changed what in which revision?

UserRevisionLine numberNew contents of line
chibiegg 3:c54a1eba22c4 1 /* SAKURA Internet IoT Communication Module Library for mbed
chibiegg 6:34a0233cdf04 2 *
chibiegg 3:c54a1eba22c4 3 * The MIT License (MIT)
chibiegg 6:34a0233cdf04 4 *
chibiegg 3:c54a1eba22c4 5 * Copyright (c) SAKURA Internet Inc.
chibiegg 6:34a0233cdf04 6 *
chibiegg 3:c54a1eba22c4 7 * Permission is hereby granted, free of charge, to any person obtaining a copy
chibiegg 3:c54a1eba22c4 8 * of this software and associated documentation files (the "Software"),
chibiegg 3:c54a1eba22c4 9 * to deal in the Software without restriction, including without limitation
chibiegg 3:c54a1eba22c4 10 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
chibiegg 3:c54a1eba22c4 11 * and/or sell copies of the Software, and to permit persons to whom the Software
chibiegg 3:c54a1eba22c4 12 * is furnished to do so, subject to the following conditions:
chibiegg 6:34a0233cdf04 13 *
chibiegg 3:c54a1eba22c4 14 * The above copyright notice and this permission notice shall be included
chibiegg 3:c54a1eba22c4 15 * in all copies or substantial portions of the Software.
chibiegg 6:34a0233cdf04 16 *
chibiegg 3:c54a1eba22c4 17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
chibiegg 3:c54a1eba22c4 18 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
chibiegg 3:c54a1eba22c4 19 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
chibiegg 3:c54a1eba22c4 20 * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
chibiegg 3:c54a1eba22c4 21 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
chibiegg 3:c54a1eba22c4 22 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
chibiegg 3:c54a1eba22c4 23 */
chibiegg 3:c54a1eba22c4 24
spiralray 0:8d34375d954c 25 #include "mbed.h"
spiralray 0:8d34375d954c 26 #include "SakuraIO.h"
spiralray 0:8d34375d954c 27 #include "SakuraIO/commands.h"
spiralray 0:8d34375d954c 28 #include "SakuraIO/debug.h"
spiralray 0:8d34375d954c 29
spiralray 0:8d34375d954c 30 uint8_t SakuraIO::executeCommand(uint8_t cmd,uint8_t requestLength, uint8_t *request, uint8_t *responseLength, uint8_t *response)
spiralray 0:8d34375d954c 31 {
spiralray 0:8d34375d954c 32 uint8_t parity = 0x00;
spiralray 0:8d34375d954c 33 uint8_t result = 0x00;
spiralray 0:8d34375d954c 34 uint8_t tmpResponseLength, tmpResponse;
spiralray 0:8d34375d954c 35
spiralray 0:8d34375d954c 36 dbgln("executeCommand");
spiralray 0:8d34375d954c 37
spiralray 0:8d34375d954c 38 this->begin();
spiralray 0:8d34375d954c 39
spiralray 0:8d34375d954c 40 // request
spiralray 0:8d34375d954c 41 this->sendByte(cmd);
spiralray 0:8d34375d954c 42 this->sendByte(requestLength);
spiralray 0:8d34375d954c 43 parity = cmd ^ requestLength;
spiralray 0:8d34375d954c 44 for(int16_t i=0; i<requestLength; i++){
spiralray 0:8d34375d954c 45 parity ^= request[i];
spiralray 0:8d34375d954c 46 this->sendByte(request[i]);
spiralray 0:8d34375d954c 47 }
spiralray 0:8d34375d954c 48 this->sendByte(parity);
spiralray 0:8d34375d954c 49 //this->finishSending();
spiralray 0:8d34375d954c 50
spiralray 0:8d34375d954c 51 tmpResponseLength = 0;
spiralray 0:8d34375d954c 52 if(responseLength != NULL){
spiralray 0:8d34375d954c 53 tmpResponseLength = *responseLength;
spiralray 0:8d34375d954c 54 }
spiralray 0:8d34375d954c 55
spiralray 0:8d34375d954c 56 wait_ms(10);
spiralray 0:8d34375d954c 57
spiralray 0:8d34375d954c 58 // response
spiralray 0:8d34375d954c 59 this->startReceive(tmpResponseLength+3);
spiralray 0:8d34375d954c 60 result = this->receiveByte();
spiralray 0:8d34375d954c 61 if(result != CMD_ERROR_NONE){
spiralray 0:8d34375d954c 62 dbgln("Invalid status");
spiralray 0:8d34375d954c 63 this->end();
spiralray 0:8d34375d954c 64 return result;
spiralray 0:8d34375d954c 65 }
spiralray 0:8d34375d954c 66 tmpResponseLength = this->receiveByte();
spiralray 0:8d34375d954c 67 parity = result ^ tmpResponseLength;
spiralray 0:8d34375d954c 68 if(responseLength != NULL){
spiralray 0:8d34375d954c 69 if(*responseLength < tmpResponseLength){
spiralray 0:8d34375d954c 70 tmpResponseLength = *responseLength;
spiralray 0:8d34375d954c 71 }
spiralray 0:8d34375d954c 72 *responseLength = tmpResponseLength;
spiralray 0:8d34375d954c 73 }
spiralray 0:8d34375d954c 74 for(int16_t i=0; i<tmpResponseLength; i++){
spiralray 0:8d34375d954c 75 tmpResponse = this->receiveByte();
spiralray 0:8d34375d954c 76 parity ^= tmpResponse;
spiralray 0:8d34375d954c 77 if(response != NULL){
spiralray 0:8d34375d954c 78 response[i] = tmpResponse;
spiralray 0:8d34375d954c 79 }
spiralray 0:8d34375d954c 80 }
spiralray 0:8d34375d954c 81 dbgln("Parity");
spiralray 0:8d34375d954c 82 uint8_t p = this->receiveByte(true);
spiralray 0:8d34375d954c 83 parity ^= p;
spiralray 0:8d34375d954c 84 dbg("Parity=");
spiralray 0:8d34375d954c 85 dbgln(p);
spiralray 0:8d34375d954c 86 if(parity != 0x00){
spiralray 0:8d34375d954c 87 result = CMD_ERROR_PARITY;
spiralray 0:8d34375d954c 88 dbgln("Invalid parity");
spiralray 0:8d34375d954c 89 }else{
spiralray 0:8d34375d954c 90 dbgln("Success");
spiralray 0:8d34375d954c 91 }
spiralray 0:8d34375d954c 92 //this->finishReceiving();
spiralray 0:8d34375d954c 93
spiralray 0:8d34375d954c 94 this->end();
spiralray 0:8d34375d954c 95 return result;
spiralray 0:8d34375d954c 96 }
spiralray 0:8d34375d954c 97
spiralray 0:8d34375d954c 98 /* Common Commands */
spiralray 0:8d34375d954c 99
spiralray 0:8d34375d954c 100 uint8_t SakuraIO::getConnectionStatus(){
spiralray 0:8d34375d954c 101 uint8_t responseLength = 1;
spiralray 0:8d34375d954c 102 uint8_t response[1] = {0x00};
spiralray 0:8d34375d954c 103 if(executeCommand(CMD_GET_CONNECTION_STATUS, 0, NULL, &responseLength, response) != CMD_ERROR_NONE){
spiralray 0:8d34375d954c 104 return 0x7F;
spiralray 0:8d34375d954c 105 }
spiralray 0:8d34375d954c 106 return response[0];
spiralray 0:8d34375d954c 107 }
spiralray 0:8d34375d954c 108
chibiegg 6:34a0233cdf04 109 uint8_t SakuraIO::getSignalQuality(){
spiralray 0:8d34375d954c 110 uint8_t responseLength = 1;
spiralray 0:8d34375d954c 111 uint8_t response[1] = {0x00};
spiralray 0:8d34375d954c 112
spiralray 0:8d34375d954c 113 if(executeCommand(CMD_GET_SIGNAL_QUALITY, 0, NULL, &responseLength, response) != CMD_ERROR_NONE){
spiralray 0:8d34375d954c 114 return 0x00;
spiralray 0:8d34375d954c 115 }
spiralray 0:8d34375d954c 116 return response[0];
spiralray 0:8d34375d954c 117 }
spiralray 0:8d34375d954c 118
chibiegg 6:34a0233cdf04 119 uint8_t SakuraIO::getSignalQuarity(){
chibiegg 6:34a0233cdf04 120 // deprecated
chibiegg 6:34a0233cdf04 121 return getSignalQuality();
chibiegg 6:34a0233cdf04 122 }
chibiegg 6:34a0233cdf04 123
spiralray 0:8d34375d954c 124 uint64_t SakuraIO::getUnixtime(){
spiralray 0:8d34375d954c 125 uint8_t responseLength = 8;
spiralray 0:8d34375d954c 126 uint8_t response[8] = {0x00};
spiralray 0:8d34375d954c 127 if(executeCommand(CMD_GET_DATETIME, 0, NULL, &responseLength, response) != CMD_ERROR_NONE){
spiralray 0:8d34375d954c 128 return 0x00;
spiralray 0:8d34375d954c 129 }
spiralray 0:8d34375d954c 130 return *((uint64_t *)response);
spiralray 0:8d34375d954c 131 }
spiralray 0:8d34375d954c 132
spiralray 0:8d34375d954c 133 uint8_t SakuraIO::echoback(uint8_t length, uint8_t *data, uint8_t *response){
spiralray 0:8d34375d954c 134 uint8_t responseLength = length;
spiralray 0:8d34375d954c 135 if(executeCommand(CMD_ECHO_BACK, length, data, &responseLength, response) != CMD_ERROR_NONE){
spiralray 0:8d34375d954c 136 return 0x00;
spiralray 0:8d34375d954c 137 }
spiralray 0:8d34375d954c 138 return responseLength;
spiralray 0:8d34375d954c 139 }
spiralray 0:8d34375d954c 140
spiralray 0:8d34375d954c 141 /* IO Commands */
spiralray 0:8d34375d954c 142
spiralray 0:8d34375d954c 143 uint16_t SakuraIO::getADC(uint8_t channel){
spiralray 0:8d34375d954c 144 uint8_t request[1] = {channel};
spiralray 0:8d34375d954c 145 uint8_t response[2] = {0x00};
spiralray 0:8d34375d954c 146 uint8_t responseLength = sizeof(response);
spiralray 0:8d34375d954c 147 if(executeCommand(CMD_READ_ADC, 1, request, &responseLength, response) != CMD_ERROR_NONE){
spiralray 0:8d34375d954c 148 return 0xffff;
spiralray 0:8d34375d954c 149 }
spiralray 0:8d34375d954c 150 return *((uint16_t *)response);
spiralray 0:8d34375d954c 151 }
spiralray 0:8d34375d954c 152
spiralray 0:8d34375d954c 153 /* TX Commands */
spiralray 0:8d34375d954c 154 uint8_t SakuraIO::enqueueTxRaw(uint8_t ch, uint8_t type, uint8_t length, uint8_t *data, uint64_t offset){
spiralray 0:8d34375d954c 155 uint8_t request[18] = {0x00};
spiralray 0:8d34375d954c 156 uint8_t requestLength = 10;
spiralray 0:8d34375d954c 157 request[0] = ch;
spiralray 0:8d34375d954c 158 request[1] = type;
spiralray 0:8d34375d954c 159 for(uint8_t i=0;i<length;i++){
spiralray 0:8d34375d954c 160 request[2+i] = data[i];
spiralray 0:8d34375d954c 161 }
spiralray 0:8d34375d954c 162 if(offset != 0){
spiralray 0:8d34375d954c 163 requestLength = 18;
spiralray 0:8d34375d954c 164 for(uint8_t i=0;i<8;i++){
spiralray 0:8d34375d954c 165 request[10+i] = ((uint8_t *)&offset)[i];
spiralray 0:8d34375d954c 166 }
spiralray 0:8d34375d954c 167 }
spiralray 0:8d34375d954c 168 return executeCommand(CMD_TX_ENQUEUE, requestLength, request, NULL, NULL);
spiralray 0:8d34375d954c 169 }
spiralray 0:8d34375d954c 170
spiralray 0:8d34375d954c 171 uint8_t SakuraIO::enqueueTx(uint8_t ch, int32_t value, uint64_t offset){
spiralray 0:8d34375d954c 172 return enqueueTxRaw(ch, 'i', 4, (uint8_t *)&value, offset);
spiralray 0:8d34375d954c 173 }
spiralray 0:8d34375d954c 174
spiralray 0:8d34375d954c 175 uint8_t SakuraIO::enqueueTx(uint8_t ch, uint32_t value, uint64_t offset){
spiralray 0:8d34375d954c 176 return enqueueTxRaw(ch, 'I', 4, (uint8_t *)&value, offset);
spiralray 0:8d34375d954c 177 }
spiralray 0:8d34375d954c 178
spiralray 0:8d34375d954c 179 uint8_t SakuraIO::enqueueTx(uint8_t ch, int64_t value, uint64_t offset){
spiralray 0:8d34375d954c 180 return enqueueTxRaw(ch, 'l', 8, (uint8_t *)&value, offset);
spiralray 0:8d34375d954c 181 }
spiralray 0:8d34375d954c 182
spiralray 0:8d34375d954c 183 uint8_t SakuraIO::enqueueTx(uint8_t ch, uint64_t value, uint64_t offset){
spiralray 0:8d34375d954c 184 return enqueueTxRaw(ch, 'L', 8, (uint8_t *)&value, offset);
spiralray 0:8d34375d954c 185 }
spiralray 0:8d34375d954c 186
spiralray 0:8d34375d954c 187 uint8_t SakuraIO::enqueueTx(uint8_t ch, float value, uint64_t offset){
spiralray 0:8d34375d954c 188 return enqueueTxRaw(ch, 'f', 4, (uint8_t *)&value, offset);
spiralray 0:8d34375d954c 189 }
spiralray 0:8d34375d954c 190
spiralray 0:8d34375d954c 191 uint8_t SakuraIO::enqueueTx(uint8_t ch, double value, uint64_t offset){
spiralray 0:8d34375d954c 192 return enqueueTxRaw(ch, 'd', 8, (uint8_t *)&value, offset);
spiralray 0:8d34375d954c 193 }
spiralray 0:8d34375d954c 194
spiralray 0:8d34375d954c 195 uint8_t SakuraIO::enqueueTx(uint8_t ch, uint8_t value[8], uint64_t offset){
spiralray 0:8d34375d954c 196 return enqueueTxRaw(ch, 'b', 8, (uint8_t *)value, offset);
spiralray 0:8d34375d954c 197 }
spiralray 0:8d34375d954c 198
spiralray 0:8d34375d954c 199 uint8_t SakuraIO::enqueueTx(uint8_t ch, int32_t value){
spiralray 0:8d34375d954c 200 return enqueueTx(ch, value, (uint32_t)0);
spiralray 0:8d34375d954c 201 }
spiralray 0:8d34375d954c 202
spiralray 0:8d34375d954c 203 uint8_t SakuraIO::enqueueTx(uint8_t ch, uint32_t value){
spiralray 0:8d34375d954c 204 return enqueueTx(ch, value, (uint32_t)0);
spiralray 0:8d34375d954c 205 }
spiralray 0:8d34375d954c 206
spiralray 0:8d34375d954c 207 uint8_t SakuraIO::enqueueTx(uint8_t ch, int64_t value){
spiralray 0:8d34375d954c 208 return enqueueTx(ch, value, (uint32_t)0);
spiralray 0:8d34375d954c 209 }
spiralray 0:8d34375d954c 210
spiralray 0:8d34375d954c 211 uint8_t SakuraIO::enqueueTx(uint8_t ch, uint64_t value){
spiralray 0:8d34375d954c 212 return enqueueTx(ch, value, (uint32_t)0);
spiralray 0:8d34375d954c 213 }
spiralray 0:8d34375d954c 214
spiralray 0:8d34375d954c 215 uint8_t SakuraIO::enqueueTx(uint8_t ch, float value){
spiralray 0:8d34375d954c 216 return enqueueTx(ch, value, (uint32_t)0);
spiralray 0:8d34375d954c 217 }
spiralray 0:8d34375d954c 218
spiralray 0:8d34375d954c 219 uint8_t SakuraIO::enqueueTx(uint8_t ch, double value){
spiralray 0:8d34375d954c 220 return enqueueTx(ch, value, (uint32_t)0);
spiralray 0:8d34375d954c 221 }
spiralray 0:8d34375d954c 222
spiralray 0:8d34375d954c 223 uint8_t SakuraIO::enqueueTx(uint8_t ch, uint8_t value[8]){
spiralray 0:8d34375d954c 224 return enqueueTx(ch, value, (uint32_t)0);
spiralray 0:8d34375d954c 225 }
spiralray 0:8d34375d954c 226
spiralray 0:8d34375d954c 227 uint8_t SakuraIO::getTxQueueLength(uint8_t *available, uint8_t *queued){
spiralray 0:8d34375d954c 228 uint8_t response[2] = {0x00};
spiralray 0:8d34375d954c 229 uint8_t responseLength = 2;
spiralray 0:8d34375d954c 230 uint8_t ret = executeCommand(CMD_TX_LENGTH, 0, NULL, &responseLength, response);
spiralray 0:8d34375d954c 231 *available = response[0];
spiralray 0:8d34375d954c 232 *queued = response[1];
spiralray 0:8d34375d954c 233 return ret;
spiralray 0:8d34375d954c 234 }
spiralray 0:8d34375d954c 235
spiralray 0:8d34375d954c 236 uint8_t SakuraIO::clearTx(){
spiralray 0:8d34375d954c 237 return executeCommand(CMD_TX_CLEAR, 0, NULL, NULL, NULL);
spiralray 0:8d34375d954c 238 }
spiralray 0:8d34375d954c 239
spiralray 0:8d34375d954c 240 uint8_t SakuraIO::send(){
spiralray 0:8d34375d954c 241 return executeCommand(CMD_TX_SEND, 0, NULL, NULL, NULL);
spiralray 0:8d34375d954c 242 }
spiralray 0:8d34375d954c 243
spiralray 0:8d34375d954c 244 uint8_t SakuraIO::getTxStatus(uint8_t *queue, uint8_t *immediate){
spiralray 0:8d34375d954c 245 uint8_t response[2] = {0x00};
spiralray 0:8d34375d954c 246 uint8_t responseLength = 2;
spiralray 0:8d34375d954c 247 uint8_t ret = executeCommand(CMD_TX_STAT, 0, NULL, &responseLength, response);
spiralray 0:8d34375d954c 248 *queue = response[0];
spiralray 0:8d34375d954c 249 *immediate = response[1];
spiralray 0:8d34375d954c 250 return ret;
spiralray 0:8d34375d954c 251 }
spiralray 0:8d34375d954c 252
spiralray 0:8d34375d954c 253 /* RX Commands */
spiralray 0:8d34375d954c 254
spiralray 0:8d34375d954c 255 uint8_t SakuraIO::dequeueRx(uint8_t *ch, uint8_t *type, uint8_t *value, int64_t *offset){
spiralray 0:8d34375d954c 256 uint8_t response[18] = {0x00};
spiralray 0:8d34375d954c 257 uint8_t responseLength = 18;
spiralray 0:8d34375d954c 258 uint8_t ret = executeCommand(CMD_RX_DEQUEUE, 0, NULL, &responseLength, response);
spiralray 0:8d34375d954c 259 if(ret != CMD_ERROR_NONE){
spiralray 0:8d34375d954c 260 return ret;
spiralray 0:8d34375d954c 261 }
spiralray 0:8d34375d954c 262
spiralray 0:8d34375d954c 263 *ch = response[0];
spiralray 0:8d34375d954c 264 *type = response[1];
spiralray 0:8d34375d954c 265 for(uint8_t i=0; i<8; i++){
spiralray 0:8d34375d954c 266 value[i] = response[2+i];
spiralray 0:8d34375d954c 267 }
spiralray 0:8d34375d954c 268 for(uint8_t i=0; i<8; i++){
spiralray 0:8d34375d954c 269 ((uint8_t *)offset)[i] = response[10+i];
spiralray 0:8d34375d954c 270 }
spiralray 0:8d34375d954c 271
spiralray 0:8d34375d954c 272 return ret;
spiralray 0:8d34375d954c 273 }
spiralray 0:8d34375d954c 274
spiralray 0:8d34375d954c 275 uint8_t SakuraIO::peekRx(uint8_t *ch, uint8_t *type, uint8_t *value, int64_t *offset){
spiralray 0:8d34375d954c 276 uint8_t response[18] = {0x00};
spiralray 0:8d34375d954c 277 uint8_t responseLength = 18;
spiralray 0:8d34375d954c 278 uint8_t ret = executeCommand(CMD_RX_PEEK, 0, NULL, &responseLength, response);
spiralray 0:8d34375d954c 279 if(ret != CMD_ERROR_NONE){
spiralray 0:8d34375d954c 280 return ret;
spiralray 0:8d34375d954c 281 }
spiralray 0:8d34375d954c 282
spiralray 0:8d34375d954c 283 *ch = response[0];
spiralray 0:8d34375d954c 284 *type = response[1];
spiralray 0:8d34375d954c 285 for(uint8_t i=0; i<8; i++){
spiralray 4:3d73874507bc 286 value[i] = response[2+i];
spiralray 0:8d34375d954c 287 }
spiralray 0:8d34375d954c 288 for(uint8_t i=0; i<8; i++){
spiralray 0:8d34375d954c 289 ((uint8_t *)offset)[i] = response[10+i];
spiralray 0:8d34375d954c 290 }
spiralray 0:8d34375d954c 291
spiralray 0:8d34375d954c 292 return ret;
spiralray 0:8d34375d954c 293 }
spiralray 0:8d34375d954c 294
spiralray 0:8d34375d954c 295 uint8_t SakuraIO::getRxQueueLength(uint8_t *available, uint8_t *queued){
spiralray 0:8d34375d954c 296 uint8_t response[2] = {0x00};
spiralray 0:8d34375d954c 297 uint8_t responseLength = 2;
spiralray 0:8d34375d954c 298 uint8_t ret = executeCommand(CMD_RX_LENGTH, 0, NULL, &responseLength, response);
spiralray 0:8d34375d954c 299 *available = response[0];
spiralray 0:8d34375d954c 300 *queued = response[1];
spiralray 0:8d34375d954c 301 return ret;
spiralray 0:8d34375d954c 302 }
spiralray 0:8d34375d954c 303
spiralray 0:8d34375d954c 304 uint8_t SakuraIO::clearRx(){
spiralray 0:8d34375d954c 305 return executeCommand(CMD_RX_CLEAR, 0, NULL, NULL, NULL);
spiralray 0:8d34375d954c 306 }
spiralray 0:8d34375d954c 307
spiralray 0:8d34375d954c 308 /* Operation command */
spiralray 0:8d34375d954c 309
spiralray 0:8d34375d954c 310 uint16_t SakuraIO::getProductID(){
spiralray 0:8d34375d954c 311 uint8_t response[2] = {0x00};
spiralray 0:8d34375d954c 312 uint8_t responseLength = 2;
spiralray 0:8d34375d954c 313 uint8_t ret = executeCommand(CMD_GET_PRODUCT_ID, 0, NULL, &responseLength, response);
spiralray 0:8d34375d954c 314 if(ret != CMD_ERROR_NONE){
spiralray 0:8d34375d954c 315 return 0x00;
spiralray 0:8d34375d954c 316 }
spiralray 0:8d34375d954c 317 return *((uint16_t *)response);
spiralray 0:8d34375d954c 318 }
spiralray 0:8d34375d954c 319
spiralray 0:8d34375d954c 320 uint8_t SakuraIO::getUniqueID(char *data){
spiralray 0:8d34375d954c 321 uint8_t response[11] = {0x00};
spiralray 0:8d34375d954c 322 uint8_t responseLength = 10;
spiralray 0:8d34375d954c 323 uint8_t ret = executeCommand(CMD_GET_UNIQUE_ID, 0, NULL, &responseLength, response);
spiralray 0:8d34375d954c 324 if(ret != CMD_ERROR_NONE){
spiralray 0:8d34375d954c 325 return ret;
spiralray 0:8d34375d954c 326 }
spiralray 0:8d34375d954c 327 for(uint8_t i=0; i<responseLength; i++){
spiralray 0:8d34375d954c 328 data[i] = (char)response[i];
spiralray 0:8d34375d954c 329 }
spiralray 0:8d34375d954c 330 data[responseLength] = 0x00;
spiralray 0:8d34375d954c 331 return ret;
spiralray 0:8d34375d954c 332 }
spiralray 0:8d34375d954c 333
spiralray 0:8d34375d954c 334 uint8_t SakuraIO::getFirmwareVersion(char *data){
spiralray 0:8d34375d954c 335 uint8_t response[33] = {0x00};
spiralray 0:8d34375d954c 336 uint8_t responseLength = 32;
spiralray 0:8d34375d954c 337 uint8_t ret = executeCommand(CMD_GET_FIRMWARE_VERSION, 0, NULL, &responseLength, response);
spiralray 0:8d34375d954c 338 if(ret != CMD_ERROR_NONE){
spiralray 0:8d34375d954c 339 return ret;
spiralray 0:8d34375d954c 340 }
spiralray 0:8d34375d954c 341 for(uint8_t i=0; i<responseLength; i++){
spiralray 0:8d34375d954c 342 data[i] = (char)response[i];
spiralray 0:8d34375d954c 343 }
spiralray 0:8d34375d954c 344 data[responseLength] = 0x00;
spiralray 0:8d34375d954c 345 return ret;
spiralray 0:8d34375d954c 346 }
spiralray 0:8d34375d954c 347
spiralray 0:8d34375d954c 348 uint8_t SakuraIO::unlock(){
spiralray 0:8d34375d954c 349 uint8_t request[4] = {0x53, 0x6B, 0x72, 0x61};
spiralray 0:8d34375d954c 350 return executeCommand(CMD_UNLOCK, 4, request, NULL, NULL);
spiralray 0:8d34375d954c 351 }
spiralray 0:8d34375d954c 352
spiralray 0:8d34375d954c 353 uint8_t SakuraIO::updateFirmware(){
spiralray 0:8d34375d954c 354 return executeCommand(CMD_UPDATE_FIRMWARE, 0, 0, NULL, NULL);
spiralray 0:8d34375d954c 355 }
spiralray 0:8d34375d954c 356
spiralray 0:8d34375d954c 357 uint8_t SakuraIO::getFirmwareUpdateStatus(){
spiralray 0:8d34375d954c 358 uint8_t response[1] = {0x00};
spiralray 0:8d34375d954c 359 uint8_t responseLength = 1;
spiralray 0:8d34375d954c 360 if(executeCommand(CMD_GET_UPDATE_FIRMWARE_STATUS, 0, 0, &responseLength, response) != CMD_ERROR_NONE){
spiralray 0:8d34375d954c 361 return 0xff;
spiralray 0:8d34375d954c 362 }
spiralray 0:8d34375d954c 363 return response[0];
spiralray 0:8d34375d954c 364 }
spiralray 0:8d34375d954c 365
spiralray 0:8d34375d954c 366 uint8_t SakuraIO::reset(){
spiralray 0:8d34375d954c 367 return executeCommand(CMD_SOFTWARE_RESET, 0, 0, NULL, NULL);
spiralray 0:8d34375d954c 368 }