從控制傳送多筆資料來不及處理...如何接收較"流暢" |
尚未結案
|
goodfeel1001
一般會員 發表:10 回覆:7 積分:3 註冊:2005-10-31 發送簡訊給我 |
Dear 各位前輩~ 小弟正在撰寫toush panpel(觸控式螢幕)的driver...是要做一個自由畫(free draw ==> 這個功能很像是我們常在用的手寫板)的功能....我有正確地將資料給收了進來...可是當我畫完圖中的圓圈圈...如下圖...可是當我手放開...
下面那張圖要慢個1S它才會按照...剛剛我手寫板的路徑..給它秀了出來....
我已經將我的 Timer1_Form1_RS232->Interval = 1 ; (程式裡最大上限是 Interval =1000) ==> 我已經設到最低輪詢了...檢查控制器是否有資料傳進來...至於
Interval = 1,2,3...,1000也都試過了越往上調..接收資料來不及的情況也會變得更嚴重
ReadFile(hComm, in_buff, 5, &nBytes_R, NULL);
上面的設5是因為從firmware(韌體)送上來就是5個BYTE....之前也有設10..或者
是20..要不然將資料一次讀進來...可是有的資料會沒收到... 1 BYTE ==> STATE BYTE(判斷是否有人按下TOUSH PANPEL)
2 BYTE ==> X 軸低八位元
3 BYTE ==> X 軸高八位元
4 BYTE ==> Y 軸低八位元
5 BYTE ==> Y 軸高八位元 我的程式碼如下 void __fastcall TForm1::Timer1_Form1_RS232Timer(TObject *Sender)
{
byte in_buff[2048];
DWORD nBytes_R, dwEvent , dwError;
unsigned int i; COMSTAT cs; //The COMSTAT structure contains information about a communications device.
ClearCommError(hComm,&dwError,&cs);
// ClearCommError():讀取串列埠現在狀態
//reports the current status of a communications device
if(cs.cbInQue!=0)
{
if(cs.cbInQue > sizeof(in_buff))
{
PurgeComm(hComm, PURGE_RXCLEAR);
return;
}
ReadFile(hComm, in_buff, 5, &nBytes_R, NULL);
for(i=0;i<5;i++)
{
//檢查第一個BYTE是否是你所需要的資料,若符合則處理該筆資料
if(in_buff[i]==0xc8||in_buff[i]==0x88)
{
//整理從控制器送上來X軸和Y軸資料
x_ptr=in_buff[i+1]*32+(in_buff[i+2]>>2);
y_ptr=in_buff[i+3]*32+(in_buff[i+4]>>2); AutoCali2(); SetCursorPos(xc/4, (yc*3)/16); if (in_buff[i]==0xc8)
mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
if (in_buff[i]==0x88)
mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);
}
}
}
}
|
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
|
goodfeel1001
一般會員 發表:10 回覆:7 積分:3 註冊:2005-10-31 發送簡訊給我 |
Dear 副站長~ 我用的圖檔..是正確的jpg檔..程式碼....已以重貼如下 void __fastcall TForm1::Timer1_Form1_RS232Timer(TObject *Sender)
{
byte in_buff[2048];
DWORD nBytes_R, dwEvent , dwError;
unsigned int i; COMSTAT cs; //The COMSTAT structure contains information about a communications device.
ClearCommError(hComm,&dwError,&cs);
// ClearCommError():讀取串列埠現在狀態
//reports the current status of a communications device
if(cs.cbInQue!=0)
{
if(cs.cbInQue > sizeof(in_buff))
{
PurgeComm(hComm, PURGE_RXCLEAR);
return;
}
ReadFile(hComm, in_buff, 5, &nBytes_R, NULL);
for(i=0;i<5;i )
{
//檢查第一個BYTE是否是你所需要的資料,若符合則處理該筆資料
if(in_buff[i]==0xc8||in_buff[i]==0x88)
{
//整理從控制器送上來X軸和Y軸資料
x_ptr=in_buff[i 1]*32 (in_buff[i 2]>>2);
y_ptr=in_buff[i 3]*32 (in_buff[i 4]>>2); AutoCali2(); SetCursorPos(xc/4, (yc*3)/16); if (in_buff[i]==0xc8)
mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
if (in_buff[i]==0x88)
mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);
}
}
}
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |