日日摸夜夜添夜夜爽出水_dvd碟片色爱_麻豆wwwcom内射软件_国产欧美色一区二区三区_中字幕视频在线永久在线观看免费_99久久在线视频精品店_国产精品1区2区3区在线观看 _两性午夜色视频免费网站_国产精品女同久久久久电影院_国产一区二区不卡亚洲涩情

簡體中文

控制協(xié)議

Kalay SDK 開發(fā)指南 | iOS APIs - 控制協(xié)議

KY_SendIOCtrlWithChannel

功能描述:向已連接的設(shè)備發(fā)送自定義的控制指令(Command)和數(shù)據(jù)。這是實現(xiàn) APP 對設(shè)備進行遠程控制的核心接口。所有控制指令均需通過該接口發(fā)送,設(shè)備響應(yīng)數(shù)據(jù)可通過KY_DidReceiveIOCtrlWithUid回調(diào)接收。

接口定義

- (void)KY_SendIOCtrlWithChannel:(NSInteger)channel                          type:(ENUM_AVIOCTRL_MSGTYPE)type                          data:(NSData * _Nonnull)data;

參數(shù)說明

參數(shù)類型說明
channelNSInteger設(shè)備連線的通道號,默認值為 0
typeENUM_AVIOCTRL_MSGTYPE控制指令的類型(Command ID)。開發(fā)者需與設(shè)備端約定自定義指令值,或使用 SDK 預(yù)定義指令,相關(guān)定義在 AVIOCTRLDEFs.h 頭文件中
dataNSData *要發(fā)送給設(shè)備的具體指令數(shù)據(jù)。通常需將自定義 C 結(jié)構(gòu)體轉(zhuǎn)換為 NSData 對象傳輸

代碼示例

// 假設(shè) self.camera 是已完成連線的設(shè)備實例 // IOTYPE_USER_IPCAM_GET_PLAYBACK_REQ 為自定義指令類型 NSData *data = [self buildPlaybackRequestData]; // 構(gòu)建自定義請求數(shù)據(jù) [self.camera KY_SendIOCtrlWithChannel:0                          type:IOTYPE_USER_IPCAM_GET_PLAYBACK_REQ                          data:data];

協(xié)議封裝示例

以下以「APP 獲取設(shè)備端燈控開關(guān)狀態(tài)」為例,詳細說明自定義協(xié)議的定義、數(shù)據(jù)封裝發(fā)送、響應(yīng)接收解析全流程。該示例覆蓋了控制指令交互的完整生命周期,可作為自定義協(xié)議開發(fā)的參考模板。

1. 定義協(xié)議及結(jié)構(gòu)體

首先需在 APP 端和設(shè)備端統(tǒng)一約定指令 ID(Command ID)和數(shù)據(jù)結(jié)構(gòu)體格式,確保雙方數(shù)據(jù)解析邏輯一致。

// 1. 定義指令 ID (Command ID) - 需與設(shè)備端一致 #define IOTYPE_GET_LED_REQ    0x30000001  // APP -> 設(shè)備:獲取燈控狀態(tài)請求 #define IOTYPE_GET_LED_RESP   0x30000002  // 設(shè)備 -> APP:燈控狀態(tài)響應(yīng) // 2. 定義指令對應(yīng)的數(shù)據(jù)結(jié)構(gòu)體 // (a) APP 發(fā)送給設(shè)備的請求結(jié)構(gòu)體 typedef struct {    unsigned int channel;          // 當(dāng)前通道號,默認填 0    unsigned char reserved[4];     // 預(yù)留字段,用于內(nèi)存對齊或擴展 } SMsgAVIoctrlGetLedReq; // (b) 設(shè)備回復(fù)給 APP 的響應(yīng)結(jié)構(gòu)體 typedef struct {    int result;                    // 執(zhí)行結(jié)果:0 成功,非0 失敗(自定義錯誤碼)    unsigned char isOnOff;         // 燈控狀態(tài):0 關(guān)閉,1 開啟    unsigned char reserved[3];     // 預(yù)留字段 } SMsgAVIoctrlGetLedResp;

2. 結(jié)構(gòu)體封裝與發(fā)送 (APP 端)

APP 端需將請求結(jié)構(gòu)體轉(zhuǎn)換為 NSData 格式,再通過 KY_SendIOCtrlWithChannel 接口發(fā)送至設(shè)備。

// 假設(shè) self.camera 是已連接的設(shè)備實例 // (1) 初始化請求結(jié)構(gòu)體 SMsgAVIoctrlGetLedReq reqData; reqData.channel = 0; // 設(shè)置通道號 memset(reqData.reserved, 0, sizeof(reqData.reserved)); // 初始化預(yù)留字段 // (2) 將結(jié)構(gòu)體轉(zhuǎn)換為 NSData NSData *sendData = [NSData dataWithBytes:&reqData length:sizeof(SMsgAVIoctrlGetLedReq)]; // (3) 發(fā)送控制指令 [self.camera KY_SendIOCtrlWithChannel:0                          type:IOTYPE_GET_LED_REQ                          data:sendData]; NSLog(@"已發(fā)送獲取燈控狀態(tài)請求,通道號:%d", 0);

3. 數(shù)據(jù)接收與解析 (APP 端)

設(shè)備處理完控制指令后,會返回響應(yīng)數(shù)據(jù)。APP 端需實現(xiàn) KY_DidReceiveIOCtrlWithUid 回調(diào)方法,接收并解析響應(yīng)數(shù)據(jù)。

// 實現(xiàn) KYCameraDelegate 協(xié)議的回調(diào)方法 - (void)KY_DidReceiveIOCtrlWithUid:(NSString * _Nonnull)uid                          channel:(NSInteger)channel                            type:(ENUM_AVIOCTRL_MSGTYPE)type                            data:(NSData * _Nonnull)data {    // 過濾當(dāng)前設(shè)備的響應(yīng)數(shù)據(jù)    if (![uid isEqualToString:self.camera.uid]) return;        // 判斷指令類型為燈控狀態(tài)響應(yīng)    if (type == IOTYPE_GET_LED_RESP) {        NSLog(@"收到設(shè)備 %@ 燈控狀態(tài)響應(yīng)", uid);                // 校驗數(shù)據(jù)長度        if (data.length != sizeof(SMsgAVIoctrlGetLedResp)) {            NSLog(@"響應(yīng)數(shù)據(jù)長度異常:實際 %lu,預(yù)期 %lu", (unsigned long)data.length, (unsigned long)sizeof(SMsgAVIoctrlGetLedResp));            return;        }                // 將 NSData 轉(zhuǎn)換為結(jié)構(gòu)體        SMsgAVIoctrlGetLedResp *respData = (SMsgAVIoctrlGetLedResp *)data.bytes;                // 解析響應(yīng)數(shù)據(jù)        if (respData->result == 0) {            NSString *ledStatus = respData->isOnOff ? @"開啟" : @"關(guān)閉";            NSLog(@"獲取燈控狀態(tài)成功:%@", ledStatus);            // 更新UI展示狀態(tài)            self.ledStatusLabel.text = [NSString stringWithFormat:@"燈控狀態(tài):%@", ledStatus];        } else {            NSLog(@"獲取燈控狀態(tài)失敗,錯誤碼:%d", respData->result);        }    } }

即刻開啟您的物聯(lián)網(wǎng)之旅

聯(lián)系解決方案專家
Kalay App
資訊安全白皮書
全球?qū)@季?/a>
解決方案
新聞動態(tài)
公司動態(tài)
行業(yè)資訊
媒體報道
永續(xù)發(fā)展
經(jīng)營者的話
社會參與
環(huán)境永續(xù)
公司治理

+86 755 27702549

7×24小時服務(wù)熱線

法律聲明 隱私權(quán)條款

關(guān)注“TUTK”

TUTK服務(wù)盡在掌握

? 2022 物聯(lián)智慧科技(深圳)有限公司版權(quán)所有粵ICP備14023641號
在線咨詢
掃一掃

TUTK服務(wù)盡在掌握

全國免費服務(wù)熱線
+86 755 27702549

返回頂部