微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI蓝牙设计交流 > CC2540usbHID 的out 端点

CC2540usbHID 的out 端点

时间:10-02 整理:3721RD 点击:

in    mcu--->pc

out pc ---> mcu 

我使用的例程HIDAdvRemoteDongle,已经把它改成一个自定义的hid设备,端点1为in  端点2 为out

现在 in端点能成功发送数据通过: hidSendHidInReport();  //  (data , endpoint number , length of data)    send data to pc 

但是pc机通过上位机发送数据给cc2540,我不知道发送成功后,单片机会在哪里接收到,并处理。主要是处理函数在哪里。

史蒂文,

PC 发出来的话,应该是output report.

正常情况下,是在遥控器的write callback函数里会收到。

只是单纯考虑 PC机与USBDongle的数据通信

关于usbHid通信的一个函数(这是通过usbdongle 往计算机 发送 数据的函数)

void usbfwWriteFifo(uint8 volatile __xdata *pFifo, uint8 count, void __generic *pData)
{
uint8 __generic *pTemp = pData;
if (count)
{
do
{
*pFifo = *(pTemp++);
} while (--count);
}
}

同时也有一个这样的函数

void usbfwReadFifo(uint8 volatile __xdata *pFifo, uint8 count, void __generic *pData)
{
uint8 __generic *pTemp = pData;
if (count)
{
do
{
*(pTemp++) = *pFifo;
} while (--count);
}
} // usbfwReadFifo

这个函数是读pc机通过UsbHID发送数据给usbDongle的。

那么什么时候会调用这个函数?换句话说就是,我怎么得到pc机通过hid发送给usbdonggle的数据?

我通过轮询的方式 来获得 pc 发送到 cc2540的数据

在这个函数中void usbHidProcessEvents(void)

但发现,第一次将数据从pc通过端点2发送到cc2540上,可以成功,并且数据是正确的,但第二次就不行。

(我的上位机是自己写的,之前用其他芯片测试过,没有问题,就是不明白为什么第二次发送  usbDongle就好像出问题了)

// ************************ USB interrupt event processing ********************************

void usbirqHookProcessEvents(void)

{ /

/ Handle events that require immediate processing here

} 找到这样的函数,注释理解应该就是usb中断了吧。 但发现却没有任何函数调用,并且发送数据的时候也不会调用这个函数。是不是1.4的协议栈也是还没写全?

感觉好像有挺多地方还没写好哦。

希望给个回复,谢谢。

目前没解决的问题

1.pc机发送数据到USBDongle时会调用哪个函数(是不是只能轮询)

2.通过轮询方式发送数据,只有第一次成功,不知如何解决。

有没有人知道呢。?

在中断函数里!

// ************************ USB interrupt event processing ********************************

void usbirqHookProcessEvents(void)

{ /

/ Handle events that require immediate processing here

中断函数好像没调用过。。

不知道是不是那个

请问如何更改自定义的Hid设备

Hi, steven,我现在也遇到了与你同样的困惑,在usbHidProessEvents函数中处理时Dongle只能成功接收一次PC端发来的数据,不知道你之前的疑惑现在有没有解决,请指教,谢谢

自定的hid设备需要学习usb hid协议之后,更改usb_hid_descriptor.s51文件即可,亲测好使!

代码位置到底是哪里呢?

usbfwReadFifo((&USBF0 + (endpoint << 1)), 1, (uint8 __xdata *) rcv);这样就可以了,看了好久的代码!

Hi, haha ren,你最后怎么解决的,我这边也是第一次发送可以行,之后就不行了。急求解!

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top