📄 usb_class_requests.c
字号:
#include "cc2511_usb_library_headers.h"
#include "usb_class_requests.h"
#include "usb_hid_reports.h"
void usbcrSetReport(void) {
// Received header
if (usbfwData.ep0Status == EP_IDLE) {
// Only accept keyboard LED status
usbfwData.ep0Status = ((HIBYTE(usbSetupHeader.value) == RT_OUTPUT) && (usbSetupHeader.index == 0) && (usbSetupHeader.length == 1)) ? EP_RX : EP_STALL;
usbSetupData.bytesLeft = 1;
usbSetupData.pBuffer = &hidData.keyboardLedStatus;
// Received data
} else if (usbfwData.ep0Status == EP_RX) {
//implement the use of LED's here
}
}
void usbcrGetReport(void) {
// Is the length stall correct?
if ((HIBYTE(usbSetupHeader.value) != RT_INPUT) || (usbSetupHeader.length != 0) || (usbSetupHeader.index & 0xFFFE)) {
usbfwData.ep0Status = EP_STALL;
} else {
switch (LOBYTE(usbSetupHeader.index)) {
case KEYBOARD_INDEX: usbSetupData.pBuffer = (BYTE *) &hidData.keyboardReport; break;
case MOUSE_INDEX: usbSetupData.pBuffer = (BYTE *) &hidData.mouseReport; break;
}
usbSetupData.bytesLeft = usbSetupHeader.length;
usbfwData.ep0Status = EP_TX;
}
}
void usbcrSetProtocol(void) {
if ((usbSetupHeader.value & 0xFFFE) || (usbSetupHeader.length != 0) || (usbSetupHeader.index & 0xFFFE)) {
usbfwData.ep0Status = EP_STALL;
} else {
switch (LOBYTE(usbSetupHeader.index)) {
case KEYBOARD_INDEX: hidData.keyboardProtocol = LOBYTE(usbSetupHeader.value); break;
case MOUSE_INDEX: hidData.mouseProtocol = LOBYTE(usbSetupHeader.value); break;
}
}
}
void usbcrGetProtocol(void) {
if ((HIBYTE(usbSetupHeader.value) != 0) || (usbSetupHeader.length != 1) || (usbSetupHeader.index & 0xFFFE)) {
usbfwData.ep0Status = EP_STALL;
} else {
switch (LOBYTE(usbSetupHeader.index)) {
case KEYBOARD_INDEX: usbSetupData.pBuffer = &hidData.keyboardProtocol; break;
case MOUSE_INDEX: usbSetupData.pBuffer = &hidData.mouseProtocol; break;
}
usbSetupData.bytesLeft = 1;
usbfwData.ep0Status = EP_TX;
}
}
void usbcrSetIdle(void) {
if ((usbSetupHeader.length != 0) || (usbSetupHeader.index & 0xFFFE)) {
usbfwData.ep0Status = EP_STALL;
} else {
switch (LOBYTE(usbSetupHeader.index)) {
case KEYBOARD_INDEX: hidData.keyboardIdle = usbSetupHeader.value; break;
case MOUSE_INDEX: hidData.mouseIdle = usbSetupHeader.value; break;
}
}
}
void usbcrGetIdle(void) {
if ((usbSetupHeader.length != 1) || (usbSetupHeader.index & 0xFFFE)) {
usbfwData.ep0Status = EP_STALL;
} else {
switch (LOBYTE(usbSetupHeader.index)) {
case KEYBOARD_INDEX: usbSetupData.pBuffer = (BYTE *) &hidData.keyboardIdle; break;
case MOUSE_INDEX: usbSetupData.pBuffer = (BYTE *) &hidData.mouseIdle; break;
}
usbSetupData.bytesLeft = 1;
usbfwData.ep0Status = EP_TX;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -