背景:專案需要在mac上通過usb傳輸資訊,進行互動。
實現:1、匯入依賴標頭檔案
#include
2、初始化iohidmanager
iohidmanagerref managerref = iohidmanagercreate(kcfallocatordefault, kiohidoptionstypenone);
3、進行配對設定,可以過濾其他usb裝置。
1)無配對裝置
iohidmanagersetdevicematching(hidmanager, null);
2)單類裝置配對
nsmutabledictionary* dict= [nsmutabledictionary dictionary];
[dict setvalue:pid forkey:[nsstring stringwithcstring:kiohidproductidkey encoding:nsutf8stringencoding]];
[dict setvalue:vid forkey:[nsstring stringwithcstring:kiohidvendoridkey encoding:nsutf8stringencoding]];
iohidmanagersetdevicematching(managerref, (__bridge cfmutabledictionaryref)dict);
3)多種裝置配對設定
nsmutablearray *arr = [nsmutablearray array];
[arr addobject:dict];
iohidmanagersetdevicematchingmultiple(managerref, (__bridge cfmutablearrayref)arr);
4、註冊插拔裝置的callback
//註冊插入callback
iohidmanagerregisterdevicematchingcallback(managerref, &handle_devicematchingcallback, null);
//註冊拔出callback
iohidmanagerregisterdeviceremovalcallback(managerref, &handle_deviceremovalcallback, null);
5、加入runloop
iohidmanagerschedulewithrunloop(managerref, cfrunloopgetmain(), kcfrunloopdefaultmode);
6、開啟iohidmanager
ioreturn ret = iohidmanageropen(managerref, kiohidoptionstypenone);
if (ret == kioreturnsuccess)
7、實現插拔callback
static void handle_devicematchingcallback(void *incontext,ioreturn inresult,void *insender,iohiddeviceref iniohiddeviceref)
static void handle_deviceremovalcallback(void *incontext,ioreturn inresult,void *insender,iohiddeviceref iniohiddeviceref)
8、插入裝置獲取到iohiddeviceref iniohiddeviceref後,開啟iohiddeviceref。
iooptionbits options = 0;
ioreturn ret = iohiddeviceopen(iniohiddeviceref,options);
if (ret == kioreturnsuccess)
9、註冊的接收資料callback。
iohiddeviceregisterinputreportcallback(iniohiddeviceref, (uint8_t*)inputbuffer, 64, myinputcallback, null);
10、實現接收資料callback方法,即可接收資料。
static void myinputcallback(void* context, ioreturn result, void* sender, iohidreporttype type, uint32_t reportid, uint8_t *report,cfindex reportlength)
11、向usb裝置傳送指令。
ioreturn ret = iohiddevicesetreport(iniohiddeviceref, kiohidreporttypeoutput, 0, (uint8_t*)buffer, length);
if (ret != kioreturnsuccess)
12、斷開裝置
ioreturn ret = iohiddeviceclose(iniohiddeviceref,0l);
if (ret == kioreturnsuccess) {
nslog(@"斷開成功");
Android開發之USB資料通訊
android開發中usb串列埠通訊開發主要涉及到以下幾個類及相應的方法 1 usbmanager 負責管理usb裝置的類,你可以在相應 中通過以下方法獲得 獲取usbmanager例項方法 usbmanager manager usbmanager getsystemservice context...
MAC OSX 程序間通訊
mac os下的ipc方式種類很多,大約有下面幾種。1.mach api 2.cfmessageport 3.distributed objects do nsdistributednotificationcenter 5.unix domain sockets 6.internet sockets...
MF Porting之USB驅動開發
花費了近三個禮拜的時間,終於完成了ti 開發板的usb 驅動開發,現在回頭想一想,其實也沒有什麼,具體硬體方面的通訊由dm355 實現了,軟體層面的資料互動由mf porting 實現了,所做的也就是熟悉了解usb 通訊協議和dm355 usb 相關的暫存器。在開發驅動的過程中,覺得有這麼幾個難點,...