📄 usb_hid_generic_api.c
字号:
#include "config.h"
#include "..\usb\usb_task.h"
#include "usb_hid_generic_api.h"
#include "lib_mcu\usb\usb_drv.h"
/*_____ D E F I N I T I O N ________________________________________________*/
U16 data_state = 0;
U8 send_data[15]={'a','b','c','d','e','f','g','h','k','l','m','n'};
U8 get_data[8];
U8 *pointer;
bit reset_to_bootloader = FALSE;
extern volatile bit usb_continuous_mode;
extern U8 send_free = 1;
extern S_hid_set_control SetControlBytes;
extern _MEM_TYPE_SLOW_ U8 usb_configuration_nb;
/*F**************************************************************************
* NAME: usb_read_continuous
*----------------------------------------------------------------------------
* PARAMS:
* delay: none
* return: none
*----------------------------------------------------------------------------
* PURPOSE:
* This function gets data from USB bus with the continuous tansfer mode
*----------------------------------------------------------------------------
* EXAMPLE:
*----------------------------------------------------------------------------
* NOTE:
*----------------------------------------------------------------------------
* REQUIREMENTS:
*****************************************************************************/
U8 usb_read_continuous(U8 *buffer)
{
U8 number_of_byte;
if (usb_configuration_nb != 0)
{
number_of_byte = 0;
if (Is_new_data_read())
{
number_of_byte = Usb_byte_counter_8();
usb_read_packet(EP_HID_OUT,buffer,number_of_byte);
Usb_ack_receive_out_hid();
}
return number_of_byte;
}
else
{
return 0;
}
}
/*F**************************************************************************
* NAME: usb_write_continuous
*----------------------------------------------------------------------------
* PARAMS:
* delay: none
* return: none
*----------------------------------------------------------------------------
* PURPOSE:
* This function sends data through USB bus with the continuous tansfer mode
*----------------------------------------------------------------------------
* EXAMPLE:
*----------------------------------------------------------------------------
* NOTE:
*----------------------------------------------------------------------------
* REQUIREMENTS:
*****************************************************************************/
U8 usb_write_continuous(U8 *buffer, U8 data_length)
{
U8 remaining;
U8 c;
if (usb_configuration_nb != 0)
{
if (data_length > LENGTH_OF_REPORT)
{
data_length = LENGTH_OF_REPORT;
}
c = data_length;
remaining = LENGTH_OF_REPORT - data_length;
send_free=0;
Usb_select_endpoint(EP_HID_IN);
while(0 != c) // send data contained in buffer
{
Usb_write_byte(*buffer);
c--;
buffer++;
}
while(0!=remaining) // complete the report if necessary with 0xFF
{
Usb_write_byte(0xFF);
remaining--;
}
Usb_send_control_in();
return data_length;
}
else
{
return 0;
}
}
/*F**************************************************************************
* NAME: usb_transfer_data
*----------------------------------------------------------------------------
* PARAMS:
* delay: none
* return: none
*----------------------------------------------------------------------------
* PURPOSE:
* This function sends data through USB bus with the chosen tansfer mode
*----------------------------------------------------------------------------
* EXAMPLE:
*----------------------------------------------------------------------------
* NOTE:
*----------------------------------------------------------------------------
* REQUIREMENTS:
*****************************************************************************/
/*void usb_standard_transfer(void)
{
switch (data_state){
case USB_HID_WAIT_MODE:
if(usb_continuous_mode == 0)
{
pointer=&send_data;
data_state = USB_HID_WAIT_REPORT;
}
break;
case USB_HID_WAIT_REPORT:
if (SetControlBytes.arrived == 1)
{
if (SetControlBytes.direction == DIR_OUT)
data_state = USB_HID_RECEIVE_DATA_STANDARD;
if (SetControlBytes.direction == DIR_IN)
data_state = USB_HID_SEND_DATA_STANDARD;
}
break;
case USB_HID_RECEIVE_DATA_STANDARD :
Usb_select_endpoint(EP_HID_OUT);
if (Is_usb_receive_out_hid())
{
usb_read_packet(EP_HID_OUT, &get_data, LENGTH_OF_REPORT);
Usb_ack_receive_out_hid();
SetControlBytes.length -= LENGTH_OF_REPORT;
}
if (SetControlBytes.length <= 0)
{
SetControlBytes.arrived = 0;
data_state = USB_HID_WAIT_REPORT;
}
break;
case USB_HID_SEND_DATA_STANDARD :
if (SetControlBytes.length > 0)
{
pointer += usb_send_packet(EP_HID_IN, pointer, LENGTH_OF_REPORT);
SetControlBytes.length -= LENGTH_OF_REPORT;
data_state = USB_HID_WAIT_SEND_DATA_STANDARD;
}
else
{
data_state = USB_HID_WAIT_REPORT;
SetControlBytes.arrived = 0;
pointer = &send_data;
}
//don't put 'break' here
case USB_HID_WAIT_SEND_DATA_STANDARD :
Usb_select_endpoint(EP_HID_IN);
if(Is_usb_read_control_enabled())
{
Usb_ack_in_ready();
data_state = USB_HID_SEND_DATA_STANDARD;
}
break;
default :
data_state = USB_HID_WAIT_MODE;
break;
}
}
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -