日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

iOS 蓝牙开发之NFC读写

發(fā)布時間:2023/12/20 编程问答 57 豆豆
生活随笔 收集整理的這篇文章主要介紹了 iOS 蓝牙开发之NFC读写 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

如今便攜設(shè)備越來越盛行,各設(shè)備、工具之間的通信及其產(chǎn)生的數(shù)據(jù)以更一種更有效的方式發(fā)揮出更大用途。為此,蘋果放開了NFC的功能,但僅限于讀的操作。本次記錄:僅限于支持有藍牙讀卡相關(guān)設(shè)備的進行藍牙NFC<公交卡>的相關(guān)讀寫操作。
在首頁的置頂文章中有說到藍牙相關(guān)的連接等操作,貼上地址:CoreBlueTooth相關(guān)

使用連接上的藍牙設(shè)備在進行讀寫卡操作之前,理論上有進行相應(yīng)一下幾個操作:

  • 激活指令(在進行通道指令之前激活)
  • 通道指令(通道指令又分:讀取指令,寫卡指令)<apdu>

1.尋卡操作<apdu指令>:

/*

?通過NFC接口依次執(zhí)行四條指令

?00A4000002DDF1

?00B0950808

?805C000204

?并保存四個指令的執(zhí)行結(jié)果

?res1

? ? 通過NFC指令判斷卡片充值能否繼續(xù)
? ? 00A4000002DDF1
? ? 00A4000002ADF1
? ? 若返回值為6A81或6A82則可以繼續(xù)

?res2

?res4

?羊城通卡號從res2中截取

?cardnum = res2.substring(6, 16);

?余額的計算

?hexbal = res4.substring(0, 8);

?bal = parseInt(hexbal, 16) / 100;

?*/


a>選擇指令類型:公交卡

b>選擇指令類型:余額記錄

c>驗證卡片有效性:

d>讀取余額指令:


e>使用記錄指令:

讀寫卡過程中藍牙設(shè)備接收數(shù)據(jù)小于等于20個字節(jié),如下:

  • //發(fā)送數(shù)據(jù)相關(guān)

    -(Boolean)wtireDataToCharacteristic:(CBCharacteristic *)characteristic? writeData:(NSData *)writeData{

    ? ? if (self.currentPeripheral == nil) { //??當(dāng)前活動的藍牙設(shè)備字典

    ? ? ? ? return NO;

    ? ? }

    ? ? if (self.manager == nil) {

    ? ? ? ? return NO;

    ? ? }

    ? ? if (characteristic == nil) {

    ? ? ? ? return NO;

    ? ? }

    ?? ?

    ? ? dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

    ? ? ? ? int idx = 0;

    ? ? ? ? for (idx=0; idx+20 <= writeData.length; idx+=20) {

    ? ? ? ? ? ? NSRange range = NSMakeRange(idx, 20);

    ? ? ? ? ? ? NSData *sendTemp = [writeData subdataWithRange:range];

    ?? ? ? ? ? ?

    ? ? ? ? ? ? writeFinishFlag = 0;

    ? ? ? ? ? ? [self.currentPeripheral writeValue:sendTemp forCharacteristic:characteristic type:CBCharacteristicWriteWithResponse];

    ?? ? ? ? ? ?

    ? ? ? ? ? ? int i = 0;

    ? ? ? ? ? ? while (!writeFinishFlag && (++i < 20)){

    ? ? ? ? ? ? ? ? [NSThread sleepForTimeInterval:0.001f];

    ? ? ? ? ? ? ? ? [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];

    ? ? ? ? ? ? }

    ? ? ? ? ? ? NSLog(@"發(fā)送數(shù)據(jù):%@", sendTemp);

    ? ? ? ? }

    ?? ? ? ?

    ? ? ? ? if (writeData.length % 20 != 0) {

    ? ? ? ? ? ? NSRange range = NSMakeRange(idx, writeData.length % 20);

    ? ? ? ? ? ? NSData *sendTemp = [writeData subdataWithRange:range];

    ?? ? ? ? ? ?

    ? ? ? ? ? ? writeFinishFlag = 0;

    ? ? ? ? ? ? [self.currentPeripheral writeValue:sendTemp forCharacteristic:characteristic type:CBCharacteristicWriteWithResponse];

    ? ? ? ? ? ? int i = 0;

    ? ? ? ? ? ? while (!writeFinishFlag && (++i < 20)){

    ? ? ? ? ? ? ? ? [NSThread sleepForTimeInterval:0.001f];

    ? ? ? ? ? ? ? ? [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];

    ? ? ? ? ? ? }

    ? ? ? ? ? ? NSLog(@"發(fā)送數(shù)據(jù):%@", sendTemp);

    ? ? ? ? }

    ? ? });

    ? ? return YES;

    }

寫卡操作涉及到公交卡公司相關(guān)指令<1.保密。2.加密協(xié)議獲取動態(tài)指令>,但是具體相關(guān)的寫卡操作會在后續(xù)更新。
待續(xù)~~~

總結(jié)

以上是生活随笔為你收集整理的iOS 蓝牙开发之NFC读写的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。