CH559操作USB键鼠串口输出键盘灯该如何控制

CH559操作USB键鼠串口输出,切换大小写指示灯没有任何反应,键盘灯该如何控制,

键盘灯一般是通过SET_REPORT类命令控制传输实现。例如:

(set) 21 09 00 02  00 00 01 00

  (out)  01

   (in)  no data

对接口0下传1字节01实现。具体传输什么值,需要分析HID报表。

 


USBH_HUB_KM.C这个文件,main的4856行 SETorOFFNumLock(RxBuffer);这个函数是控制点灯的。

具体函数在1672行,如下

*******************************************************************************/

UINT8 SETorOFFNumLock(PUINT8 buf)

{

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

    UINT8 len,s;

    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];

        }

        s = HostCtrlTransfer( TxBuffer, &len );                                     // 执行控制传输

        if ( s != ERR_SUCCESS )

        {

            return( s );

        }

    }

    return( ERR_SUCCESS );

}

如果点不亮,你看下枚举,可能因为是复合设备,没有调用此函数,另外例子程序测试了部分键鼠,兼容性问题可能会有,操作键鼠流程大致如此,如果操作失败,需要看看具体的监控信息,才好判断问题。


                           

USBH_HUB_KM.C这个文件,main的4856行 SETorOFFNumLock(RxBuffer);这个函数是控制点灯的。

具体函数在1672行,如下

*******************************************************************************/

UINT8 SETorOFFNumLock(PUINT8 buf)

{

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

    UINT8 len,s;

    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];

        }

        s = HostCtrlTransfer( TxBuffer, &len );                                     // 执行控制传输

        if ( s != ERR_SUCCESS )

        {

            return( s );

        }

    }

    return( ERR_SUCCESS );

}

如果点不亮,你看下枚举,可能因为是复合设备,没有调用此函数,另外例子程序测试了部分键鼠,兼容性问题可能会有,操作键鼠流程大致如此,如果操作失败,需要看看具体的监控信息,才好判断问题。

                       


键盘灯一般是通过SET_REPORT类命令控制传输实现。例如:

(set) 21 09 00 02  00 00 01 00

  (out)  01

我现在的系统是ch559从另一个单片机接受out这个控制字,然后发送给键盘。我想了解一下,现在ch559发送完set_report后,是怎么把这个控制字发送出去的


21 09 xx xx是SET_UP包,后面的01是OUT包,区别就在包的属性不同,发送方法都是一样的。再说的直接点就是把USBHostTransact( USB_PID_SETUP << 4 | 0x00, 0x00, 200000/20 )的USB_PID_SETUP换成USB_PID_OUT就行了。


大佬 你的问题解决了吧     我现做的ch559点亮键盘灯  有键盘是正常的  但是有个键盘   直接返回了0x20   请问如何解决呢


这个键盘你可以插电脑,然后看电脑是是怎么点灯的,通过Bushound抓包看一下


只有登录才能回复,可以选择微信账号登录