NFC API for mbed using the MicroNFCBoard as a peripheral

Dependents:   MicroNFCBoardAPI_P2P_Client MicroNFCBoardAPI_Blink MicroNFCBoardAPI_Tag_Emulator MicroNFCBoardAPI_Tag_Reader ... more

Committer:
AppNearMe
Date:
Thu May 14 16:41:27 2015 +0000
Revision:
2:9b0733b8fa95
Parent:
1:1d246e0872c6
https://github.com/AppNearMe/micronfcboard-mbed-peripheral/commit/ed5d798243e8eb6a959c756dbcdfdad4c6e59979

Who changed what in which revision?

UserRevisionLine numberNew contents of line
AppNearMe 1:1d246e0872c6 1 /*
AppNearMe 1:1d246e0872c6 2 MicroNFCBoard mbed API
AppNearMe 1:1d246e0872c6 3
AppNearMe 1:1d246e0872c6 4 Copyright (c) 2014-2015 AppNearMe Ltd
AppNearMe 1:1d246e0872c6 5
AppNearMe 1:1d246e0872c6 6 Licensed under the Apache License, Version 2.0 (the "License");
AppNearMe 1:1d246e0872c6 7 you may not use this file except in compliance with the License.
AppNearMe 1:1d246e0872c6 8 You may obtain a copy of the License at
AppNearMe 1:1d246e0872c6 9
AppNearMe 1:1d246e0872c6 10 http://www.apache.org/licenses/LICENSE-2.0
AppNearMe 1:1d246e0872c6 11
AppNearMe 1:1d246e0872c6 12 Unless required by applicable law or agreed to in writing, software
AppNearMe 1:1d246e0872c6 13 distributed under the License is distributed on an "AS IS" BASIS,
AppNearMe 1:1d246e0872c6 14 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
AppNearMe 1:1d246e0872c6 15 See the License for the specific language governing permissions and
AppNearMe 1:1d246e0872c6 16 limitations under the License.
AppNearMe 0:07fa9c0dd549 17 */
AppNearMe 0:07fa9c0dd549 18
AppNearMe 0:07fa9c0dd549 19 #include "micronfcboard.h"
AppNearMe 0:07fa9c0dd549 20
AppNearMe 0:07fa9c0dd549 21 #define STATUS_POLLING (1 << 0)
AppNearMe 0:07fa9c0dd549 22 #define STATUS_CONNECTED (1 << 1)
AppNearMe 0:07fa9c0dd549 23 #define STATUS_NDEF_PRESENT (1 << 2)
AppNearMe 0:07fa9c0dd549 24 #define STATUS_NDEF_READABLE (1 << 3)
AppNearMe 0:07fa9c0dd549 25 #define STATUS_NDEF_WRITEABLE (1 << 4)
AppNearMe 0:07fa9c0dd549 26 #define STATUS_NDEF_BUSY (1 << 5)
AppNearMe 0:07fa9c0dd549 27 #define STATUS_NDEF_SUCCESS (1 << 6)
AppNearMe 0:07fa9c0dd549 28
AppNearMe 2:9b0733b8fa95 29 #define STATUS_TYPE_MASK (0xFFUL << 8)
AppNearMe 2:9b0733b8fa95 30 #define STATUS_TYPE2 (2UL << 8)
AppNearMe 2:9b0733b8fa95 31 #define STATUS_TYPE4 (4UL << 8)
AppNearMe 2:9b0733b8fa95 32 #define STATUS_P2P (8UL << 8)
AppNearMe 2:9b0733b8fa95 33
AppNearMe 2:9b0733b8fa95 34 #define STATUS_INITIATOR (1UL << 16)
AppNearMe 0:07fa9c0dd549 35
AppNearMe 0:07fa9c0dd549 36 #define RECORD_URI 1
AppNearMe 0:07fa9c0dd549 37 #define RECORD_TEXT 2
AppNearMe 0:07fa9c0dd549 38 #define RECORD_SP 3
AppNearMe 0:07fa9c0dd549 39
AppNearMe 0:07fa9c0dd549 40 MicroNFCBoard::MicroNFCBoard(PinName mosi, PinName miso, PinName sck, PinName cs, PinName irq) : _transport(mosi, miso, sck, cs, irq)
AppNearMe 0:07fa9c0dd549 41 {
AppNearMe 0:07fa9c0dd549 42
AppNearMe 0:07fa9c0dd549 43 }
AppNearMe 0:07fa9c0dd549 44
AppNearMe 0:07fa9c0dd549 45 void MicroNFCBoard::init()
AppNearMe 0:07fa9c0dd549 46 {
AppNearMe 0:07fa9c0dd549 47 _transport.init();
AppNearMe 0:07fa9c0dd549 48 _status = _transport.status();
AppNearMe 0:07fa9c0dd549 49 }
AppNearMe 0:07fa9c0dd549 50
AppNearMe 0:07fa9c0dd549 51 void MicroNFCBoard::setLeds(bool led1, bool led2)
AppNearMe 0:07fa9c0dd549 52 {
AppNearMe 0:07fa9c0dd549 53 _transport.leds(led1, led2);
AppNearMe 0:07fa9c0dd549 54 }
AppNearMe 0:07fa9c0dd549 55
AppNearMe 0:07fa9c0dd549 56 void MicroNFCBoard::updateStatus()
AppNearMe 0:07fa9c0dd549 57 {
AppNearMe 0:07fa9c0dd549 58 if(_transport.statusChanged())
AppNearMe 0:07fa9c0dd549 59 {
AppNearMe 0:07fa9c0dd549 60 _status = _transport.status();
AppNearMe 0:07fa9c0dd549 61 }
AppNearMe 0:07fa9c0dd549 62 }
AppNearMe 0:07fa9c0dd549 63
AppNearMe 0:07fa9c0dd549 64 bool MicroNFCBoard::connected()
AppNearMe 0:07fa9c0dd549 65 {
AppNearMe 0:07fa9c0dd549 66 updateStatus();
AppNearMe 0:07fa9c0dd549 67 return _status & STATUS_CONNECTED;
AppNearMe 0:07fa9c0dd549 68 }
AppNearMe 0:07fa9c0dd549 69
AppNearMe 2:9b0733b8fa95 70 bool MicroNFCBoard::type2Tag()
AppNearMe 0:07fa9c0dd549 71 {
AppNearMe 0:07fa9c0dd549 72 updateStatus();
AppNearMe 2:9b0733b8fa95 73 return ((_status & STATUS_TYPE_MASK) == STATUS_TYPE2) && (_status & STATUS_INITIATOR);
AppNearMe 2:9b0733b8fa95 74 }
AppNearMe 2:9b0733b8fa95 75
AppNearMe 2:9b0733b8fa95 76 bool MicroNFCBoard::type4Emulator()
AppNearMe 2:9b0733b8fa95 77 {
AppNearMe 2:9b0733b8fa95 78 updateStatus();
AppNearMe 2:9b0733b8fa95 79 return ((_status & STATUS_TYPE_MASK) == STATUS_TYPE4) && !(_status & STATUS_INITIATOR);
AppNearMe 0:07fa9c0dd549 80 }
AppNearMe 0:07fa9c0dd549 81
AppNearMe 0:07fa9c0dd549 82 bool MicroNFCBoard::p2p()
AppNearMe 0:07fa9c0dd549 83 {
AppNearMe 0:07fa9c0dd549 84 updateStatus();
AppNearMe 0:07fa9c0dd549 85 return (_status & STATUS_TYPE_MASK) == STATUS_P2P;
AppNearMe 0:07fa9c0dd549 86 }
AppNearMe 0:07fa9c0dd549 87
AppNearMe 0:07fa9c0dd549 88 bool MicroNFCBoard::polling()
AppNearMe 0:07fa9c0dd549 89 {
AppNearMe 0:07fa9c0dd549 90 updateStatus();
AppNearMe 0:07fa9c0dd549 91 return _status & STATUS_POLLING;
AppNearMe 0:07fa9c0dd549 92 }
AppNearMe 0:07fa9c0dd549 93
AppNearMe 0:07fa9c0dd549 94 bool MicroNFCBoard::ndefReadable()
AppNearMe 0:07fa9c0dd549 95 {
AppNearMe 0:07fa9c0dd549 96 updateStatus();
AppNearMe 0:07fa9c0dd549 97 return _status & STATUS_NDEF_READABLE;
AppNearMe 0:07fa9c0dd549 98 }
AppNearMe 0:07fa9c0dd549 99
AppNearMe 0:07fa9c0dd549 100 bool MicroNFCBoard::ndefWriteable()
AppNearMe 0:07fa9c0dd549 101 {
AppNearMe 0:07fa9c0dd549 102 updateStatus();
AppNearMe 0:07fa9c0dd549 103 return _status & STATUS_NDEF_WRITEABLE;
AppNearMe 0:07fa9c0dd549 104 }
AppNearMe 0:07fa9c0dd549 105
AppNearMe 0:07fa9c0dd549 106 bool MicroNFCBoard::ndefPresent()
AppNearMe 0:07fa9c0dd549 107 {
AppNearMe 0:07fa9c0dd549 108 updateStatus();
AppNearMe 0:07fa9c0dd549 109 return _status & STATUS_NDEF_PRESENT;
AppNearMe 0:07fa9c0dd549 110 }
AppNearMe 0:07fa9c0dd549 111
AppNearMe 0:07fa9c0dd549 112 bool MicroNFCBoard::ndefBusy()
AppNearMe 0:07fa9c0dd549 113 {
AppNearMe 0:07fa9c0dd549 114 updateStatus();
AppNearMe 0:07fa9c0dd549 115 return _status & STATUS_NDEF_BUSY;
AppNearMe 0:07fa9c0dd549 116 }
AppNearMe 0:07fa9c0dd549 117
AppNearMe 0:07fa9c0dd549 118 bool MicroNFCBoard::ndefSuccess()
AppNearMe 0:07fa9c0dd549 119 {
AppNearMe 0:07fa9c0dd549 120 updateStatus();
AppNearMe 0:07fa9c0dd549 121 return _status & STATUS_NDEF_SUCCESS;
AppNearMe 0:07fa9c0dd549 122 }
AppNearMe 0:07fa9c0dd549 123
AppNearMe 2:9b0733b8fa95 124 void MicroNFCBoard::startPolling(bool readerWriter, bool emulator, bool p2p)
AppNearMe 0:07fa9c0dd549 125 {
AppNearMe 2:9b0733b8fa95 126 _transport.nfcPoll(readerWriter, emulator, p2p);
AppNearMe 0:07fa9c0dd549 127 }
AppNearMe 0:07fa9c0dd549 128
AppNearMe 0:07fa9c0dd549 129 void MicroNFCBoard::stopPolling()
AppNearMe 0:07fa9c0dd549 130 {
AppNearMe 2:9b0733b8fa95 131 _transport.nfcPoll(false, false, false);
AppNearMe 0:07fa9c0dd549 132 }
AppNearMe 0:07fa9c0dd549 133
AppNearMe 0:07fa9c0dd549 134 void MicroNFCBoard::ndefRead()
AppNearMe 0:07fa9c0dd549 135 {
AppNearMe 0:07fa9c0dd549 136 _transport.nfcOperation(true, false);
AppNearMe 0:07fa9c0dd549 137 }
AppNearMe 0:07fa9c0dd549 138
AppNearMe 0:07fa9c0dd549 139 void MicroNFCBoard::ndefWrite()
AppNearMe 0:07fa9c0dd549 140 {
AppNearMe 0:07fa9c0dd549 141 _transport.nfcOperation(false, true);
AppNearMe 0:07fa9c0dd549 142 }
AppNearMe 0:07fa9c0dd549 143
AppNearMe 0:07fa9c0dd549 144 bool MicroNFCBoard::readNdefUri(char* uri, size_t maxUriLength)
AppNearMe 0:07fa9c0dd549 145 {
AppNearMe 0:07fa9c0dd549 146 if(!ndefPresent())
AppNearMe 0:07fa9c0dd549 147 {
AppNearMe 0:07fa9c0dd549 148 return false;
AppNearMe 0:07fa9c0dd549 149 }
AppNearMe 0:07fa9c0dd549 150
AppNearMe 0:07fa9c0dd549 151 size_t recordCount = 0;
AppNearMe 0:07fa9c0dd549 152 _transport.nfcGetMessageInfo(&recordCount);
AppNearMe 0:07fa9c0dd549 153
AppNearMe 0:07fa9c0dd549 154 size_t recordNumber = 0;
AppNearMe 0:07fa9c0dd549 155 uint16_t info[4];
AppNearMe 0:07fa9c0dd549 156 uint16_t type;
AppNearMe 0:07fa9c0dd549 157 size_t infoCount = 4;
AppNearMe 0:07fa9c0dd549 158
AppNearMe 0:07fa9c0dd549 159 for(recordNumber = 0; recordNumber < recordCount; recordNumber++)
AppNearMe 0:07fa9c0dd549 160 {
AppNearMe 0:07fa9c0dd549 161 _transport.nfcGetRecordInfo(recordNumber, &type, info, infoCount);
AppNearMe 0:07fa9c0dd549 162 if(type == RECORD_URI)
AppNearMe 0:07fa9c0dd549 163 {
AppNearMe 0:07fa9c0dd549 164 break;
AppNearMe 0:07fa9c0dd549 165 }
AppNearMe 0:07fa9c0dd549 166 if(type == RECORD_SP)
AppNearMe 0:07fa9c0dd549 167 {
AppNearMe 0:07fa9c0dd549 168 recordCount += info[1];
AppNearMe 0:07fa9c0dd549 169 }
AppNearMe 0:07fa9c0dd549 170 }
AppNearMe 0:07fa9c0dd549 171 if(recordNumber == recordCount)
AppNearMe 0:07fa9c0dd549 172 {
AppNearMe 0:07fa9c0dd549 173 return false;
AppNearMe 0:07fa9c0dd549 174 }
AppNearMe 0:07fa9c0dd549 175
AppNearMe 0:07fa9c0dd549 176 //Recover prefix
AppNearMe 0:07fa9c0dd549 177 size_t length = maxUriLength - 1;
AppNearMe 0:07fa9c0dd549 178 _transport.nfcDecodePrefix(info[0], uri, &length);
AppNearMe 0:07fa9c0dd549 179
AppNearMe 0:07fa9c0dd549 180 maxUriLength -= length;
AppNearMe 0:07fa9c0dd549 181 uri += length;
AppNearMe 0:07fa9c0dd549 182
AppNearMe 0:07fa9c0dd549 183 if(maxUriLength <= 1)
AppNearMe 0:07fa9c0dd549 184 {
AppNearMe 0:07fa9c0dd549 185 return false;
AppNearMe 0:07fa9c0dd549 186 }
AppNearMe 0:07fa9c0dd549 187
AppNearMe 0:07fa9c0dd549 188 length = info[1];
AppNearMe 0:07fa9c0dd549 189 if(length > maxUriLength - 1)
AppNearMe 0:07fa9c0dd549 190 {
AppNearMe 0:07fa9c0dd549 191 return false;
AppNearMe 0:07fa9c0dd549 192 }
AppNearMe 0:07fa9c0dd549 193
AppNearMe 0:07fa9c0dd549 194 size_t off = 0;
AppNearMe 0:07fa9c0dd549 195 while(length > 0)
AppNearMe 0:07fa9c0dd549 196 {
AppNearMe 0:07fa9c0dd549 197 size_t cpyLength = length;
AppNearMe 0:07fa9c0dd549 198 if(cpyLength > 32)
AppNearMe 0:07fa9c0dd549 199 {
AppNearMe 0:07fa9c0dd549 200 cpyLength = 32;
AppNearMe 0:07fa9c0dd549 201 }
AppNearMe 0:07fa9c0dd549 202 _transport.nfcGetRecordData(recordNumber, 0, off, (uint8_t*)uri, cpyLength);
AppNearMe 0:07fa9c0dd549 203 length -= cpyLength;
AppNearMe 0:07fa9c0dd549 204 off += cpyLength;
AppNearMe 0:07fa9c0dd549 205 uri += cpyLength;
AppNearMe 0:07fa9c0dd549 206 }
AppNearMe 0:07fa9c0dd549 207
AppNearMe 0:07fa9c0dd549 208 uri[0] = '\0';
AppNearMe 0:07fa9c0dd549 209
AppNearMe 0:07fa9c0dd549 210 return true;
AppNearMe 0:07fa9c0dd549 211 }
AppNearMe 0:07fa9c0dd549 212
AppNearMe 0:07fa9c0dd549 213 bool MicroNFCBoard::readNdefText(char* text, size_t maxTextLength)
AppNearMe 0:07fa9c0dd549 214 {
AppNearMe 0:07fa9c0dd549 215 if(!ndefPresent())
AppNearMe 0:07fa9c0dd549 216 {
AppNearMe 0:07fa9c0dd549 217 return false;
AppNearMe 0:07fa9c0dd549 218 }
AppNearMe 0:07fa9c0dd549 219
AppNearMe 0:07fa9c0dd549 220 size_t recordCount = 0;
AppNearMe 0:07fa9c0dd549 221 _transport.nfcGetMessageInfo(&recordCount);
AppNearMe 0:07fa9c0dd549 222
AppNearMe 0:07fa9c0dd549 223
AppNearMe 0:07fa9c0dd549 224 size_t recordNumber = 0;
AppNearMe 0:07fa9c0dd549 225 uint16_t info[4];
AppNearMe 0:07fa9c0dd549 226 uint16_t type;
AppNearMe 0:07fa9c0dd549 227 size_t infoCount = 4;
AppNearMe 0:07fa9c0dd549 228
AppNearMe 0:07fa9c0dd549 229 for(recordNumber = 0; recordNumber < recordCount; recordNumber++)
AppNearMe 0:07fa9c0dd549 230 {
AppNearMe 0:07fa9c0dd549 231 _transport.nfcGetRecordInfo(recordNumber, &type, info, infoCount);
AppNearMe 0:07fa9c0dd549 232 if(type == RECORD_TEXT)
AppNearMe 0:07fa9c0dd549 233 {
AppNearMe 0:07fa9c0dd549 234 break;
AppNearMe 0:07fa9c0dd549 235 }
AppNearMe 0:07fa9c0dd549 236 if(type == RECORD_SP)
AppNearMe 0:07fa9c0dd549 237 {
AppNearMe 0:07fa9c0dd549 238 recordCount += info[1];
AppNearMe 0:07fa9c0dd549 239 }
AppNearMe 0:07fa9c0dd549 240 }
AppNearMe 0:07fa9c0dd549 241 if(recordNumber == recordCount)
AppNearMe 0:07fa9c0dd549 242 {
AppNearMe 0:07fa9c0dd549 243 return false;
AppNearMe 0:07fa9c0dd549 244 }
AppNearMe 0:07fa9c0dd549 245
AppNearMe 0:07fa9c0dd549 246 size_t length = info[2];
AppNearMe 0:07fa9c0dd549 247 if(length > maxTextLength - 1)
AppNearMe 0:07fa9c0dd549 248 {
AppNearMe 0:07fa9c0dd549 249 return false;
AppNearMe 0:07fa9c0dd549 250 }
AppNearMe 0:07fa9c0dd549 251
AppNearMe 0:07fa9c0dd549 252 size_t off = 0;
AppNearMe 0:07fa9c0dd549 253 while(length > 0)
AppNearMe 0:07fa9c0dd549 254 {
AppNearMe 0:07fa9c0dd549 255 size_t cpyLength = length;
AppNearMe 0:07fa9c0dd549 256 if(cpyLength > 32)
AppNearMe 0:07fa9c0dd549 257 {
AppNearMe 0:07fa9c0dd549 258 cpyLength = 32;
AppNearMe 0:07fa9c0dd549 259 }
AppNearMe 0:07fa9c0dd549 260 _transport.nfcGetRecordData(recordNumber, 1, off, (uint8_t*)text, cpyLength);
AppNearMe 0:07fa9c0dd549 261 length -= cpyLength;
AppNearMe 0:07fa9c0dd549 262 off += cpyLength;
AppNearMe 0:07fa9c0dd549 263 text += cpyLength;
AppNearMe 0:07fa9c0dd549 264 }
AppNearMe 0:07fa9c0dd549 265
AppNearMe 0:07fa9c0dd549 266 text[0] = '\0';
AppNearMe 0:07fa9c0dd549 267
AppNearMe 0:07fa9c0dd549 268 return true;
AppNearMe 0:07fa9c0dd549 269 }
AppNearMe 0:07fa9c0dd549 270
AppNearMe 2:9b0733b8fa95 271 void MicroNFCBoard::writeNdefUri(const char* uri)
AppNearMe 2:9b0733b8fa95 272 {
AppNearMe 2:9b0733b8fa95 273 _transport.nfcPrepareMessage(true, false);
AppNearMe 2:9b0733b8fa95 274
AppNearMe 2:9b0733b8fa95 275 size_t uriPrefixLength = strlen(uri);
AppNearMe 2:9b0733b8fa95 276 if( uriPrefixLength > 36 )
AppNearMe 2:9b0733b8fa95 277 {
AppNearMe 2:9b0733b8fa95 278 uriPrefixLength = 36;
AppNearMe 2:9b0733b8fa95 279 }
AppNearMe 2:9b0733b8fa95 280
AppNearMe 2:9b0733b8fa95 281 uint8_t prefix = 0;
AppNearMe 2:9b0733b8fa95 282
AppNearMe 2:9b0733b8fa95 283 _transport.nfcEncodePrefix(&prefix, uri, &uriPrefixLength);
AppNearMe 2:9b0733b8fa95 284
AppNearMe 2:9b0733b8fa95 285 if( uriPrefixLength > strlen(uri) )
AppNearMe 2:9b0733b8fa95 286 {
AppNearMe 2:9b0733b8fa95 287 uriPrefixLength = 0;
AppNearMe 2:9b0733b8fa95 288 }
AppNearMe 2:9b0733b8fa95 289
AppNearMe 2:9b0733b8fa95 290 size_t uriLength = strlen(uri) - uriPrefixLength;
AppNearMe 2:9b0733b8fa95 291 uri += uriPrefixLength;
AppNearMe 2:9b0733b8fa95 292
AppNearMe 2:9b0733b8fa95 293 const uint16_t info[] = {prefix, uriLength};
AppNearMe 2:9b0733b8fa95 294 _transport.nfcSetRecordInfo(0, RECORD_URI, info, 2);
AppNearMe 2:9b0733b8fa95 295
AppNearMe 2:9b0733b8fa95 296 _transport.nfcSetMessageInfo(1);
AppNearMe 2:9b0733b8fa95 297 _transport.nfcPrepareMessage(false, true);
AppNearMe 2:9b0733b8fa95 298
AppNearMe 2:9b0733b8fa95 299 size_t off = 0;
AppNearMe 2:9b0733b8fa95 300 while(uriLength > 0)
AppNearMe 2:9b0733b8fa95 301 {
AppNearMe 2:9b0733b8fa95 302 size_t cpyLength = uriLength;
AppNearMe 2:9b0733b8fa95 303 if(cpyLength > 32)
AppNearMe 2:9b0733b8fa95 304 {
AppNearMe 2:9b0733b8fa95 305 cpyLength = 32;
AppNearMe 2:9b0733b8fa95 306 }
AppNearMe 2:9b0733b8fa95 307 _transport.nfcSetRecordData(0, 0, off, (uint8_t*)uri, cpyLength);
AppNearMe 2:9b0733b8fa95 308 uriLength -= cpyLength;
AppNearMe 2:9b0733b8fa95 309 off += cpyLength;
AppNearMe 2:9b0733b8fa95 310 uri += cpyLength;
AppNearMe 2:9b0733b8fa95 311 }
AppNearMe 2:9b0733b8fa95 312 }
AppNearMe 2:9b0733b8fa95 313
AppNearMe 2:9b0733b8fa95 314 void MicroNFCBoard::writeNdefText(const char* lang, const char* text)
AppNearMe 2:9b0733b8fa95 315 {
AppNearMe 2:9b0733b8fa95 316 _transport.nfcPrepareMessage(true, false);
AppNearMe 2:9b0733b8fa95 317
AppNearMe 2:9b0733b8fa95 318 size_t langLength = strlen(lang);
AppNearMe 2:9b0733b8fa95 319 size_t textLength = strlen(text);
AppNearMe 2:9b0733b8fa95 320
AppNearMe 2:9b0733b8fa95 321 const uint16_t info[] = {0 /* UTF-8 */, langLength, textLength};
AppNearMe 2:9b0733b8fa95 322 _transport.nfcSetRecordInfo(0, RECORD_TEXT, info, 3);
AppNearMe 2:9b0733b8fa95 323
AppNearMe 2:9b0733b8fa95 324 _transport.nfcSetMessageInfo(1);
AppNearMe 2:9b0733b8fa95 325 _transport.nfcPrepareMessage(false, true);
AppNearMe 2:9b0733b8fa95 326
AppNearMe 2:9b0733b8fa95 327 size_t off = 0;
AppNearMe 2:9b0733b8fa95 328 while(langLength > 0)
AppNearMe 2:9b0733b8fa95 329 {
AppNearMe 2:9b0733b8fa95 330 size_t cpyLength = langLength;
AppNearMe 2:9b0733b8fa95 331 if(cpyLength > 32)
AppNearMe 2:9b0733b8fa95 332 {
AppNearMe 2:9b0733b8fa95 333 cpyLength = 32;
AppNearMe 2:9b0733b8fa95 334 }
AppNearMe 2:9b0733b8fa95 335 _transport.nfcSetRecordData(0, 0, off, (uint8_t*)lang, cpyLength);
AppNearMe 2:9b0733b8fa95 336 langLength -= cpyLength;
AppNearMe 2:9b0733b8fa95 337 off += cpyLength;
AppNearMe 2:9b0733b8fa95 338 lang += cpyLength;
AppNearMe 2:9b0733b8fa95 339 }
AppNearMe 2:9b0733b8fa95 340
AppNearMe 2:9b0733b8fa95 341 off = 0;
AppNearMe 2:9b0733b8fa95 342 while(textLength > 0)
AppNearMe 2:9b0733b8fa95 343 {
AppNearMe 2:9b0733b8fa95 344 size_t cpyLength = textLength;
AppNearMe 2:9b0733b8fa95 345 if(cpyLength > 32)
AppNearMe 2:9b0733b8fa95 346 {
AppNearMe 2:9b0733b8fa95 347 cpyLength = 32;
AppNearMe 2:9b0733b8fa95 348 }
AppNearMe 2:9b0733b8fa95 349 _transport.nfcSetRecordData(0, 1, off, (uint8_t*)text, cpyLength);
AppNearMe 2:9b0733b8fa95 350 textLength -= cpyLength;
AppNearMe 2:9b0733b8fa95 351 off += cpyLength;
AppNearMe 2:9b0733b8fa95 352 text += cpyLength;
AppNearMe 2:9b0733b8fa95 353 }
AppNearMe 2:9b0733b8fa95 354
AppNearMe 2:9b0733b8fa95 355 }
AppNearMe 0:07fa9c0dd549 356
AppNearMe 0:07fa9c0dd549 357
AppNearMe 2:9b0733b8fa95 358