android Hid 實現注意事項

2021-07-26 01:17:11 字數 2049 閱讀 7219

使用cypress平台上時,除錯a+g sensor時,通過hid協議在android上列舉出hid的裝置檔案,因為a+g是一體的,所以cypress將a+g的資料通過乙個hid通道資料傳送,android層主動傳送取資料的命令,cpress 這面將資料傳送到hid裝置檔案中,但是遇到有時候a+g的資料錯亂,但是有時候又不會。

while

(true

)

if(

eventnum

>

0)

return

eventnum

;

num

=poll

(mmodule

.pollfds

,mmodule

.count+1

,-1);

if(

num

<=0)

usleep(50

*1000

);

for(

inti =0

;i <

mmodule

.count+1

;i++)

mmodule

.pollfds

[pipedata[0

]].fd

=pipedata[2

];

logi

("hidsensor: sensor hal fd = %d"

,pipedata[2

]);

}

else

mmodule

.sensors[i

-1]->

getdata

(eventque

);

}

elseif(

mmodule

.pollfds[i

].revents !=0

)

mmodule

.pollfds[i

].revents =0

;

}

}

return-1

;

mmodule 中存放主要的資料結構,迴圈中會呼叫
mmodule

.sensors[i

-1]->

getdata

(eventque

);

因為資料錯亂的原因:我們分析有以下原因:

1.不同的程序排程,懷疑理由:在pc端開不同的執行緒讀取資料,會發生讀出的資料錯亂,但是很顯然,迴圈是乙個線層,通過加鎖也無法避免看來不是這個原因。

2.底層資料錯誤,實際通過pc端資料順序讀取不會出現問題。

後來突然想到每個sensor的例項都要enable一次,enable函式會開啟hid的裝置檔案,意味著a和g的裝置描述符不同的,雖然開啟檔案相同。應該是檔案讀寫指標不對,後來定義了乙個靜態fd檔案描述符,a+g共享乙個,後來成功解決資料錯亂的原因。

結論:1. 由於程序級檔案描述符表的存在,不同的程序中會出現相同的檔案描述符,它們可能指向同乙個檔案,也可能指向不同的檔案    

2. 兩個不同的檔案描述符,若指向同乙個開啟檔案控制代碼,將共享同一檔案偏移量。因此,如果通過其中乙個檔案描述符來修改檔案偏移量(由呼叫read()、write()或lseek()所致),那麼從另一    個描述符中也會觀察到變化,無論這兩個檔案描述符是否屬於不同程序,還是同乙個程序,情況都是如此。

3.但是在同一執行緒中不會同步偏移量。

pytorch fine tuning注意事項

前言 這篇文章算是論壇pytorch forums關於引數初始化和finetune的總結,也是我在寫 中用的算是 最佳實踐 吧。最後希望大家沒事多逛逛論壇,有很多高質量的回答。引數初始化 引數的初始化其實就是對引數賦值。而我們需要學習的引數其實都是variable,它其實是對tensor的封裝,同時...

PHP Open Flash Chart注意事項

1.在html頁面必須src正確的swfobject.js的路徑 可以用firebug檢視絕對路徑是否正確 2.在html頁面必須指定正確的swfobject使用時的open flash chart.swf的位置 可以用firebug檢視絕對路徑是否正確 3.在html頁面必須制定正確的data f...

Spring Hibernate整合注意事項

1 spring jar包 需要額外加入 commons pool 和commons dbcp 若包含 spring 自帶的測試,還需要引入 spring test 2 spring beans.xml 如果使用了 spring annotation 則需要加入以下兩項配置 前提是已經匯入了bean...