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:
Sat Nov 19 15:19:49 2016 +0000
Revision:
3:c54a1eba22c4
Parent:
0:8d34375d954c
Child:
5:84a9fcd0c28b
add license

Who changed what in which revision?

UserRevisionLine numberNew contents of line
chibiegg 3:c54a1eba22c4 1 /* SAKURA Internet IoT Communication Module Library for mbed
chibiegg 3:c54a1eba22c4 2 *
chibiegg 3:c54a1eba22c4 3 * The MIT License (MIT)
chibiegg 3:c54a1eba22c4 4 *
chibiegg 3:c54a1eba22c4 5 * Copyright (c) SAKURA Internet Inc.
chibiegg 3:c54a1eba22c4 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 3:c54a1eba22c4 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 3:c54a1eba22c4 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
spiralray 0:8d34375d954c 109 uint8_t SakuraIO::getSignalQuarity(){
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
spiralray 0:8d34375d954c 119 uint64_t SakuraIO::getUnixtime(){
spiralray 0:8d34375d954c 120 uint8_t responseLength = 8;
spiralray 0:8d34375d954c 121 uint8_t response[8] = {0x00};
spiralray 0:8d34375d954c 122 if(executeCommand(CMD_GET_DATETIME, 0, NULL, &responseLength, response) != CMD_ERROR_NONE){
spiralray 0:8d34375d954c 123 return 0x00;
spiralray 0:8d34375d954c 124 }
spiralray 0:8d34375d954c 125 return *((uint64_t *)response);
spiralray 0:8d34375d954c 126 }
spiralray 0:8d34375d954c 127
spiralray 0:8d34375d954c 128 uint8_t SakuraIO::echoback(uint8_t length, uint8_t *data, uint8_t *response){
spiralray 0:8d34375d954c 129 uint8_t responseLength = length;
spiralray 0:8d34375d954c 130 if(executeCommand(CMD_ECHO_BACK, length, data, &responseLength, response) != CMD_ERROR_NONE){
spiralray 0:8d34375d954c 131 return 0x00;
spiralray 0:8d34375d954c 132 }
spiralray 0:8d34375d954c 133 return responseLength;
spiralray 0:8d34375d954c 134 }
spiralray 0:8d34375d954c 135
spiralray 0:8d34375d954c 136 /* IO Commands */
spiralray 0:8d34375d954c 137
spiralray 0:8d34375d954c 138 uint16_t SakuraIO::getADC(uint8_t channel){
spiralray 0:8d34375d954c 139 uint8_t request[1] = {channel};
spiralray 0:8d34375d954c 140 uint8_t response[2] = {0x00};
spiralray 0:8d34375d954c 141 uint8_t responseLength = sizeof(response);
spiralray 0:8d34375d954c 142 if(executeCommand(CMD_READ_ADC, 1, request, &responseLength, response) != CMD_ERROR_NONE){
spiralray 0:8d34375d954c 143 return 0xffff;
spiralray 0:8d34375d954c 144 }
spiralray 0:8d34375d954c 145 return *((uint16_t *)response);
spiralray 0:8d34375d954c 146 }
spiralray 0:8d34375d954c 147
spiralray 0:8d34375d954c 148 /* TX Commands */
spiralray 0:8d34375d954c 149 uint8_t SakuraIO::enqueueTxRaw(uint8_t ch, uint8_t type, uint8_t length, uint8_t *data, uint64_t offset){
spiralray 0:8d34375d954c 150 uint8_t request[18] = {0x00};
spiralray 0:8d34375d954c 151 uint8_t requestLength = 10;
spiralray 0:8d34375d954c 152 request[0] = ch;
spiralray 0:8d34375d954c 153 request[1] = type;
spiralray 0:8d34375d954c 154 for(uint8_t i=0;i<length;i++){
spiralray 0:8d34375d954c 155 request[2+i] = data[i];
spiralray 0:8d34375d954c 156 }
spiralray 0:8d34375d954c 157 if(offset != 0){
spiralray 0:8d34375d954c 158 requestLength = 18;
spiralray 0:8d34375d954c 159 for(uint8_t i=0;i<8;i++){
spiralray 0:8d34375d954c 160 request[10+i] = ((uint8_t *)&offset)[i];
spiralray 0:8d34375d954c 161 }
spiralray 0:8d34375d954c 162 }
spiralray 0:8d34375d954c 163 return executeCommand(CMD_TX_ENQUEUE, requestLength, request, NULL, NULL);
spiralray 0:8d34375d954c 164 }
spiralray 0:8d34375d954c 165
spiralray 0:8d34375d954c 166 uint8_t SakuraIO::enqueueTx(uint8_t ch, int32_t value, uint64_t offset){
spiralray 0:8d34375d954c 167 return enqueueTxRaw(ch, 'i', 4, (uint8_t *)&value, offset);
spiralray 0:8d34375d954c 168 }
spiralray 0:8d34375d954c 169
spiralray 0:8d34375d954c 170 uint8_t SakuraIO::enqueueTx(uint8_t ch, uint32_t value, uint64_t offset){
spiralray 0:8d34375d954c 171 return enqueueTxRaw(ch, 'I', 4, (uint8_t *)&value, offset);
spiralray 0:8d34375d954c 172 }
spiralray 0:8d34375d954c 173
spiralray 0:8d34375d954c 174 uint8_t SakuraIO::enqueueTx(uint8_t ch, int64_t value, uint64_t offset){
spiralray 0:8d34375d954c 175 return enqueueTxRaw(ch, 'l', 8, (uint8_t *)&value, offset);
spiralray 0:8d34375d954c 176 }
spiralray 0:8d34375d954c 177
spiralray 0:8d34375d954c 178 uint8_t SakuraIO::enqueueTx(uint8_t ch, uint64_t value, uint64_t offset){
spiralray 0:8d34375d954c 179 return enqueueTxRaw(ch, 'L', 8, (uint8_t *)&value, offset);
spiralray 0:8d34375d954c 180 }
spiralray 0:8d34375d954c 181
spiralray 0:8d34375d954c 182 uint8_t SakuraIO::enqueueTx(uint8_t ch, float value, uint64_t offset){
spiralray 0:8d34375d954c 183 return enqueueTxRaw(ch, 'f', 4, (uint8_t *)&value, offset);
spiralray 0:8d34375d954c 184 }
spiralray 0:8d34375d954c 185
spiralray 0:8d34375d954c 186 uint8_t SakuraIO::enqueueTx(uint8_t ch, double value, uint64_t offset){
spiralray 0:8d34375d954c 187 return enqueueTxRaw(ch, 'd', 8, (uint8_t *)&value, offset);
spiralray 0:8d34375d954c 188 }
spiralray 0:8d34375d954c 189
spiralray 0:8d34375d954c 190 uint8_t SakuraIO::enqueueTx(uint8_t ch, uint8_t value[8], uint64_t offset){
spiralray 0:8d34375d954c 191 return enqueueTxRaw(ch, 'b', 8, (uint8_t *)value, offset);
spiralray 0:8d34375d954c 192 }
spiralray 0:8d34375d954c 193
spiralray 0:8d34375d954c 194 uint8_t SakuraIO::enqueueTx(uint8_t ch, int32_t value){
spiralray 0:8d34375d954c 195 return enqueueTx(ch, value, (uint32_t)0);
spiralray 0:8d34375d954c 196 }
spiralray 0:8d34375d954c 197
spiralray 0:8d34375d954c 198 uint8_t SakuraIO::enqueueTx(uint8_t ch, uint32_t value){
spiralray 0:8d34375d954c 199 return enqueueTx(ch, value, (uint32_t)0);
spiralray 0:8d34375d954c 200 }
spiralray 0:8d34375d954c 201
spiralray 0:8d34375d954c 202 uint8_t SakuraIO::enqueueTx(uint8_t ch, int64_t value){
spiralray 0:8d34375d954c 203 return enqueueTx(ch, value, (uint32_t)0);
spiralray 0:8d34375d954c 204 }
spiralray 0:8d34375d954c 205
spiralray 0:8d34375d954c 206 uint8_t SakuraIO::enqueueTx(uint8_t ch, uint64_t value){
spiralray 0:8d34375d954c 207 return enqueueTx(ch, value, (uint32_t)0);
spiralray 0:8d34375d954c 208 }
spiralray 0:8d34375d954c 209
spiralray 0:8d34375d954c 210 uint8_t SakuraIO::enqueueTx(uint8_t ch, float value){
spiralray 0:8d34375d954c 211 return enqueueTx(ch, value, (uint32_t)0);
spiralray 0:8d34375d954c 212 }
spiralray 0:8d34375d954c 213
spiralray 0:8d34375d954c 214 uint8_t SakuraIO::enqueueTx(uint8_t ch, double value){
spiralray 0:8d34375d954c 215 return enqueueTx(ch, value, (uint32_t)0);
spiralray 0:8d34375d954c 216 }
spiralray 0:8d34375d954c 217
spiralray 0:8d34375d954c 218 uint8_t SakuraIO::enqueueTx(uint8_t ch, uint8_t value[8]){
spiralray 0:8d34375d954c 219 return enqueueTx(ch, value, (uint32_t)0);
spiralray 0:8d34375d954c 220 }
spiralray 0:8d34375d954c 221
spiralray 0:8d34375d954c 222 uint8_t SakuraIO::getTxQueueLength(uint8_t *available, uint8_t *queued){
spiralray 0:8d34375d954c 223 uint8_t response[2] = {0x00};
spiralray 0:8d34375d954c 224 uint8_t responseLength = 2;
spiralray 0:8d34375d954c 225 uint8_t ret = executeCommand(CMD_TX_LENGTH, 0, NULL, &responseLength, response);
spiralray 0:8d34375d954c 226 *available = response[0];
spiralray 0:8d34375d954c 227 *queued = response[1];
spiralray 0:8d34375d954c 228 return ret;
spiralray 0:8d34375d954c 229 }
spiralray 0:8d34375d954c 230
spiralray 0:8d34375d954c 231 uint8_t SakuraIO::clearTx(){
spiralray 0:8d34375d954c 232 return executeCommand(CMD_TX_CLEAR, 0, NULL, NULL, NULL);
spiralray 0:8d34375d954c 233 }
spiralray 0:8d34375d954c 234
spiralray 0:8d34375d954c 235 uint8_t SakuraIO::send(){
spiralray 0:8d34375d954c 236 return executeCommand(CMD_TX_SEND, 0, NULL, NULL, NULL);
spiralray 0:8d34375d954c 237 }
spiralray 0:8d34375d954c 238
spiralray 0:8d34375d954c 239 uint8_t SakuraIO::getTxStatus(uint8_t *queue, uint8_t *immediate){
spiralray 0:8d34375d954c 240 uint8_t response[2] = {0x00};
spiralray 0:8d34375d954c 241 uint8_t responseLength = 2;
spiralray 0:8d34375d954c 242 uint8_t ret = executeCommand(CMD_TX_STAT, 0, NULL, &responseLength, response);
spiralray 0:8d34375d954c 243 *queue = response[0];
spiralray 0:8d34375d954c 244 *immediate = response[1];
spiralray 0:8d34375d954c 245 return ret;
spiralray 0:8d34375d954c 246 }
spiralray 0:8d34375d954c 247
spiralray 0:8d34375d954c 248 /* RX Commands */
spiralray 0:8d34375d954c 249
spiralray 0:8d34375d954c 250 uint8_t SakuraIO::dequeueRx(uint8_t *ch, uint8_t *type, uint8_t *value, int64_t *offset){
spiralray 0:8d34375d954c 251 uint8_t response[18] = {0x00};
spiralray 0:8d34375d954c 252 uint8_t responseLength = 18;
spiralray 0:8d34375d954c 253 uint8_t ret = executeCommand(CMD_RX_DEQUEUE, 0, NULL, &responseLength, response);
spiralray 0:8d34375d954c 254 if(ret != CMD_ERROR_NONE){
spiralray 0:8d34375d954c 255 return ret;
spiralray 0:8d34375d954c 256 }
spiralray 0:8d34375d954c 257
spiralray 0:8d34375d954c 258 *ch = response[0];
spiralray 0:8d34375d954c 259 *type = response[1];
spiralray 0:8d34375d954c 260 for(uint8_t i=0; i<8; i++){
spiralray 0:8d34375d954c 261 value[i] = response[2+i];
spiralray 0:8d34375d954c 262 }
spiralray 0:8d34375d954c 263 for(uint8_t i=0; i<8; i++){
spiralray 0:8d34375d954c 264 ((uint8_t *)offset)[i] = response[10+i];
spiralray 0:8d34375d954c 265 }
spiralray 0:8d34375d954c 266
spiralray 0:8d34375d954c 267 return ret;
spiralray 0:8d34375d954c 268 }
spiralray 0:8d34375d954c 269
spiralray 0:8d34375d954c 270 uint8_t SakuraIO::peekRx(uint8_t *ch, uint8_t *type, uint8_t *value, int64_t *offset){
spiralray 0:8d34375d954c 271 uint8_t response[18] = {0x00};
spiralray 0:8d34375d954c 272 uint8_t responseLength = 18;
spiralray 0:8d34375d954c 273 uint8_t ret = executeCommand(CMD_RX_PEEK, 0, NULL, &responseLength, response);
spiralray 0:8d34375d954c 274 if(ret != CMD_ERROR_NONE){
spiralray 0:8d34375d954c 275 return ret;
spiralray 0:8d34375d954c 276 }
spiralray 0:8d34375d954c 277
spiralray 0:8d34375d954c 278 *ch = response[0];
spiralray 0:8d34375d954c 279 *type = response[1];
spiralray 0:8d34375d954c 280 for(uint8_t i=0; i<8; i++){
spiralray 0:8d34375d954c 281 value[0] = response[2+i];
spiralray 0:8d34375d954c 282 }
spiralray 0:8d34375d954c 283 for(uint8_t i=0; i<8; i++){
spiralray 0:8d34375d954c 284 ((uint8_t *)offset)[i] = response[10+i];
spiralray 0:8d34375d954c 285 }
spiralray 0:8d34375d954c 286
spiralray 0:8d34375d954c 287 return ret;
spiralray 0:8d34375d954c 288 }
spiralray 0:8d34375d954c 289
spiralray 0:8d34375d954c 290 uint8_t SakuraIO::getRxQueueLength(uint8_t *available, uint8_t *queued){
spiralray 0:8d34375d954c 291 uint8_t response[2] = {0x00};
spiralray 0:8d34375d954c 292 uint8_t responseLength = 2;
spiralray 0:8d34375d954c 293 uint8_t ret = executeCommand(CMD_RX_LENGTH, 0, NULL, &responseLength, response);
spiralray 0:8d34375d954c 294 *available = response[0];
spiralray 0:8d34375d954c 295 *queued = response[1];
spiralray 0:8d34375d954c 296 return ret;
spiralray 0:8d34375d954c 297 }
spiralray 0:8d34375d954c 298
spiralray 0:8d34375d954c 299 uint8_t SakuraIO::clearRx(){
spiralray 0:8d34375d954c 300 return executeCommand(CMD_RX_CLEAR, 0, NULL, NULL, NULL);
spiralray 0:8d34375d954c 301 }
spiralray 0:8d34375d954c 302
spiralray 0:8d34375d954c 303 /* Operation command */
spiralray 0:8d34375d954c 304
spiralray 0:8d34375d954c 305 uint16_t SakuraIO::getProductID(){
spiralray 0:8d34375d954c 306 uint8_t response[2] = {0x00};
spiralray 0:8d34375d954c 307 uint8_t responseLength = 2;
spiralray 0:8d34375d954c 308 uint8_t ret = executeCommand(CMD_GET_PRODUCT_ID, 0, NULL, &responseLength, response);
spiralray 0:8d34375d954c 309 if(ret != CMD_ERROR_NONE){
spiralray 0:8d34375d954c 310 return 0x00;
spiralray 0:8d34375d954c 311 }
spiralray 0:8d34375d954c 312 return *((uint16_t *)response);
spiralray 0:8d34375d954c 313 }
spiralray 0:8d34375d954c 314
spiralray 0:8d34375d954c 315 uint8_t SakuraIO::getUniqueID(char *data){
spiralray 0:8d34375d954c 316 uint8_t response[11] = {0x00};
spiralray 0:8d34375d954c 317 uint8_t responseLength = 10;
spiralray 0:8d34375d954c 318 uint8_t ret = executeCommand(CMD_GET_UNIQUE_ID, 0, NULL, &responseLength, response);
spiralray 0:8d34375d954c 319 if(ret != CMD_ERROR_NONE){
spiralray 0:8d34375d954c 320 return ret;
spiralray 0:8d34375d954c 321 }
spiralray 0:8d34375d954c 322 for(uint8_t i=0; i<responseLength; i++){
spiralray 0:8d34375d954c 323 data[i] = (char)response[i];
spiralray 0:8d34375d954c 324 }
spiralray 0:8d34375d954c 325 data[responseLength] = 0x00;
spiralray 0:8d34375d954c 326 return ret;
spiralray 0:8d34375d954c 327 }
spiralray 0:8d34375d954c 328
spiralray 0:8d34375d954c 329 uint8_t SakuraIO::getFirmwareVersion(char *data){
spiralray 0:8d34375d954c 330 uint8_t response[33] = {0x00};
spiralray 0:8d34375d954c 331 uint8_t responseLength = 32;
spiralray 0:8d34375d954c 332 uint8_t ret = executeCommand(CMD_GET_FIRMWARE_VERSION, 0, NULL, &responseLength, response);
spiralray 0:8d34375d954c 333 if(ret != CMD_ERROR_NONE){
spiralray 0:8d34375d954c 334 return ret;
spiralray 0:8d34375d954c 335 }
spiralray 0:8d34375d954c 336 for(uint8_t i=0; i<responseLength; i++){
spiralray 0:8d34375d954c 337 data[i] = (char)response[i];
spiralray 0:8d34375d954c 338 }
spiralray 0:8d34375d954c 339 data[responseLength] = 0x00;
spiralray 0:8d34375d954c 340 return ret;
spiralray 0:8d34375d954c 341 }
spiralray 0:8d34375d954c 342
spiralray 0:8d34375d954c 343 uint8_t SakuraIO::unlock(){
spiralray 0:8d34375d954c 344 uint8_t request[4] = {0x53, 0x6B, 0x72, 0x61};
spiralray 0:8d34375d954c 345 return executeCommand(CMD_UNLOCK, 4, request, NULL, NULL);
spiralray 0:8d34375d954c 346 }
spiralray 0:8d34375d954c 347
spiralray 0:8d34375d954c 348 uint8_t SakuraIO::updateFirmware(){
spiralray 0:8d34375d954c 349 return executeCommand(CMD_UPDATE_FIRMWARE, 0, 0, NULL, NULL);
spiralray 0:8d34375d954c 350 }
spiralray 0:8d34375d954c 351
spiralray 0:8d34375d954c 352 uint8_t SakuraIO::getFirmwareUpdateStatus(){
spiralray 0:8d34375d954c 353 uint8_t response[1] = {0x00};
spiralray 0:8d34375d954c 354 uint8_t responseLength = 1;
spiralray 0:8d34375d954c 355 if(executeCommand(CMD_GET_UPDATE_FIRMWARE_STATUS, 0, 0, &responseLength, response) != CMD_ERROR_NONE){
spiralray 0:8d34375d954c 356 return 0xff;
spiralray 0:8d34375d954c 357 }
spiralray 0:8d34375d954c 358 return response[0];
spiralray 0:8d34375d954c 359 }
spiralray 0:8d34375d954c 360
spiralray 0:8d34375d954c 361 uint8_t SakuraIO::reset(){
spiralray 0:8d34375d954c 362 return executeCommand(CMD_SOFTWARE_RESET, 0, 0, NULL, NULL);
spiralray 0:8d34375d954c 363 }