CH554鍵盤主 CapsLock 大小寫切換燈

請(qǐng)問鍵盤大小寫按鍵功能都能時(shí)間,怎樣讓鍵盤燈點(diǎn)亮或熄滅


熱門產(chǎn)品 : USB3.0 HUB控制器:CH634

當(dāng)主機(jī)檢測(cè)到numlock按鍵按下后,會(huì)通過控制端點(diǎn)下發(fā)set report命令獲取當(dāng)前點(diǎn)燈信息,具體協(xié)議可在電腦端裝一個(gè)bushound查看傳輸包信息。


1620284456152979.png

1620284456493086.png

從鍵盤與主機(jī)的交互來看:

  1. ? CapsLock 按鍵0x39,所以改程序紅線判斷。

  2. ? 主機(jī)控制傳輸,數(shù)據(jù)和程序中一致。

  3. ? 主機(jī)一個(gè)字節(jié)OUT傳輸,這部分不明白,是不是控制傳輸成功后,在發(fā)送一字節(jié)的OUT傳輸(0x03),這部分程序具體怎么寫呀。


您好,這個(gè)OUT其實(shí)是上面一行的CTL控制傳輸?shù)臄?shù)據(jù)階段,CTL數(shù)據(jù)包中首字節(jié)最高比特指示的是當(dāng)前控制傳輸?shù)臄?shù)據(jù)階段數(shù)據(jù)傳輸方向,0代表主機(jī)到設(shè)備。BUSHOUND無法完全顯示USB鏈路上的數(shù)據(jù)包。會(huì)和單片機(jī)代碼行為有一點(diǎn)不同。

對(duì)應(yīng)到我們代碼應(yīng)該是由HostCtrlTransfer()函數(shù)完成,函數(shù)內(nèi)部會(huì)判斷上面說的那個(gè)比特位。


等于啥都沒說


可以描述一下遇到了什么問題。

運(yùn)行CH554EVT 鍵鼠設(shè)備代碼,在鍵盤發(fā)送caps lock之后,電腦下發(fā)相應(yīng)控制傳輸時(shí)示例代碼會(huì)執(zhí)行相應(yīng)部分,有打印輸出指示,此時(shí)可以通過控制IO口輸出高低電平來實(shí)現(xiàn)LED的亮和滅。

image.png


如果需要作主機(jī),EVT包中直接有現(xiàn)成函數(shù),如3#所發(fā)的。直接調(diào)用即可,本質(zhì)就是數(shù)據(jù)階段為OUT的一次控制傳輸。



UINT8 tmp[]={0x21,0x09,0x00,0x02,0x00,0x00,0x01,0x00};

UINT8 send_out[3],len,s,m;

if((buf[2]==0x53)&(buf[0]|buf[1]|buf[3]|buf[4]|buf[5]|buf[6]|buf[7]==0))

{

for ( s = 0; s != sizeof( tmp ); s ++ ) {

((PUINT8X)pSetupReq)[ s ] = tmp[s];

}

printf("I am here1! \n");

//printf("%02x ?\n",&len);

s = HostCtrlTransfer( TxBuffer, &len ); ?// 執(zhí)行控制傳輸

if(ScrollLock_Sym)

{

Combine_LED =Combine_LED&0xfe;

ScrollLock_Sym=0;

}

else

{

Combine_LED =Combine_LED|0x01;

ScrollLock_Sym=1;

}

send_out[0]=Combine_LED;

printf( "Combine_LED=%d\n",Combine_LED);

if(s==ERR_SUCCESS )

s = HostCtrlTransfer( send_out, 1 ); // 執(zhí)行控制傳輸

}

調(diào)用原先官方例子不能實(shí)現(xiàn)燈控,將官方例程,按照如上更改,能夠?qū)崿F(xiàn)燈控。但是新的問題來了:假如一個(gè)鍵盤在上一次斷電時(shí),如CapsLock打開了,我如何判別他?需要初始上電時(shí)能夠讀取鍵盤CapsLock鍵值狀態(tài)。。。


不好意思,我理解錯(cuò)了,是計(jì)算機(jī)記錄上次狀態(tài),不是鍵盤,那么這個(gè)問題就不存在了



只有登錄才能回復(fù),可以選擇微信賬號(hào)登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频