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,我不知道发送成功后,单片机会在哪里接收到,并处理。主要是处理函数在哪里。
Yan:
史蒂文,
PC 发出来的话,应该是output report.
正常情况下,是在遥控器的write callback函数里会收到。
steven wang3:
回复 Yan:
只是单纯考虑 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的数据?
steven wang3:
回复 Yan:
我通过轮询的方式 来获得 pc 发送到 cc2540的数据
在这个函数中void usbHidProcessEvents(void)
但发现,第一次将数据从pc通过端点2发送到cc2540上,可以成功,并且数据是正确的,但第二次就不行。
(我的上位机是自己写的,之前用其他芯片测试过,没有问题,就是不明白为什么第二次发送 usbDongle就好像出问题了)
steven wang3:
回复 Yan:
// ************************ USB interrupt event processing ********************************
void usbirqHookProcessEvents(void)
{ /
/ Handle events that require immediate processing here
} 找到这样的函数,注释理解应该就是usb中断了吧。 但发现却没有任何函数调用,并且发送数据的时候也不会调用这个函数。是不是1.4的协议栈也是还没写全?
感觉好像有挺多地方还没写好哦。
希望给个回复,谢谢。
目前没解决的问题
1.pc机发送数据到USBDongle时会调用哪个函数(是不是只能轮询)
2.通过轮询方式发送数据,只有第一次成功,不知如何解决。
steven wang3:
回复 steven wang3:
有没有人知道呢。?
da qin zheng sheng:
在中断函数里!
steven wang3:
回复 da qin zheng sheng:
// ************************ USB interrupt event processing ********************************
void usbirqHookProcessEvents(void)
{ /
/ Handle events that require immediate processing here
}
中断函数好像没调用过。。
不知道是不是那个
bamboo:
请问如何更改自定义的Hid设备
haha ren:
回复 steven wang3:
Hi, steven,我现在也遇到了与你同样的困惑,在usbHidProessEvents函数中处理时Dongle只能成功接收一次PC端发来的数据,不知道你之前的疑惑现在有没有解决,请指教,谢谢
shengqi an:
回复 bamboo:
自定的hid设备需要学习usb hid协议之后,更改usb_hid_descriptor.s51文件即可,亲测好使!