Files
99_7018_lmx/include_lib/driver/device/usb/device/hid.h
2025-10-29 13:10:02 +08:00

213 lines
7.2 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**@file hid.h
* @brief hid驱动头文件做从机
* @details 结构体声明,功能函数声明
* @author jieli
* @date 2021-9-1
* @version V1.0
* @copyright Copyright(c)2010-2021 珠海市杰理科技股份有限公司
*********************************************************
* @attention
* 硬件平台AC632N
* SDK版本AC632N_V1.0.0_SDK
* @修改日志:
* <table>
* <tr><th>Date <th>Version <th>Author <th>Description
* <tr><td>2021-9-1 <td>1.0 <td>jieli <td>创建初始版本
* </table>
*
*********************************************************
*/
#ifndef __USB_HID_H__
#define __USB_HID_H__
#include "typedef.h"
#include "asm/usb.h"
//do not add brace to the macro outside
#define SHORT_ITEMS(prefix, _len, ...) \
((prefix) | (((_len) > 0) ? 1 << ((_len) - 1) : 0)), ##__VA_ARGS__
/*Main Items*/
#define INPUT(len, ...) SHORT_ITEMS(0x80, len, ##__VA_ARGS__)
#define OUTPUT(len, ...) SHORT_ITEMS(0x90, len, ##__VA_ARGS__)
#define COLLECTION(len, ...) SHORT_ITEMS(0xA0, len, ##__VA_ARGS__)
#define FEATURE(len, ...) SHORT_ITEMS(0xB0, len, ##__VA_ARGS__)
#define END_COLLECTION 0xC0
/*Golbal Items*/
#define USAGE_PAGE(len, ...) SHORT_ITEMS(0x04, len, ##__VA_ARGS__)
#define LOGICAL_MIN(len, ...) SHORT_ITEMS(0x14, len, ##__VA_ARGS__)
#define LOGICAL_MAX(len, ...) SHORT_ITEMS(0x24, len, ##__VA_ARGS__)
#define PHYSICAL_MIN(len, ...) SHORT_ITEMS(0x34, len, ##__VA_ARGS__)
#define PHYSICAL_MAX(len, ...) SHORT_ITEMS(0x44, len, ##__VA_ARGS__)
#define UNIT_EXPONENT(len, ...) SHORT_ITEMS(0x54, len, ##__VA_ARGS__)
#define UNIT(len, ...) SHORT_ITEMS(0x64, len, ##__VA_ARGS__)
#define REPORT_SIZE(len, ...) SHORT_ITEMS(0x74, len, ##__VA_ARGS__)
#define REPORT_ID(len, ...) SHORT_ITEMS(0x84, len, ##__VA_ARGS__)
#define REPORT_COUNT(len, ...) SHORT_ITEMS(0x94, len, ##__VA_ARGS__)
#define PUSH SHORT_ITEMS(0xA4, 0)
#define POP SHORT_ITEMS(0xB4, 0)
/*Local Items*/
#define USAGE(len, ...) SHORT_ITEMS(0x08, len, ##__VA_ARGS__)
#define USAGE_MIN(len, ...) SHORT_ITEMS(0x18, len, ##__VA_ARGS__)
#define USAGE_MAX(len, ...) SHORT_ITEMS(0x28, len, ##__VA_ARGS__)
#define DESIGNATOR_INDEX(len, ...) SHORT_ITEMS(0x38, len, ##__VA_ARGS__)
#define DESIGNATOR_MIN(len, ...) SHORT_ITEMS(0x48, len, ##__VA_ARGS__)
#define DESIGNATOR_MAX(len, ...) SHORT_ITEMS(0x58, len, ##__VA_ARGS__)
#define STRING_INDEX(len, ...) SHORT_ITEMS(0x78, len, ##__VA_ARGS__)
#define STRING_MIN(len, ...) SHORT_ITEMS(0x88, len, ##__VA_ARGS__)
#define STRING_MAX(len, ...) SHORT_ITEMS(0x98, len, ##__VA_ARGS__)
#define DELIMITER(len, ...) SHORT_ITEMS(0xA8, len, ##__VA_ARGS__)
/*Consumer Page*/
#define CONSUMER_PAGE 0x0C
#define CONSUMER_CONTROL 0x01
#define GENERIC_DESKTOP_CTRLS 0x01
/*Usage*/
#define POINTER 0x01
#define MOUSE 0x02
#define BUTTON 0x09
#define X_AXIS 0x30
#define Y_AXIS 0x31
//Collection
#define PHYSICAL 0x00
#define APPLICATION 0x01
#define LOGICAL 0x02
#define REPORT 0x03
#define USB_HID_DT_HID (USB_TYPE_CLASS | 0x01)
#define USB_HID_DT_REPORT (USB_TYPE_CLASS | 0x02)
#define USB_HID_DT_PHYSICAL (USB_TYPE_CLASS | 0x03)
/*
* * HID requests
* */
#define USB_REQ_GET_REPORT 0x01
#define USB_REQ_GET_IDLE 0x02
#define USB_REQ_GET_PROTOCOL 0x03
#define USB_REQ_SET_REPORT 0x09
#define USB_REQ_SET_IDLE 0x0A
#define USB_REQ_SET_PROTOCOL 0x0B
#define PLAY 0xB0
#define PAUSE 0xB1
#define RECORD 0xB2
#define FAST_FORWARD 0xB3
#define REWIND 0xB4
#define SCAN_NEXT_TRACK 0xB5
#define SCAN_PREV_TRACK 0xB6
#define STOP 0xB7
#define FRAME_FORWARD 0xC0
#define FRAME_BACK 0xC1
#define TRACKING_INC 0xCA
#define TRACKING_DEC 0xCB
#define STOP_EJECT 0xCC
#define PLAY_PAUSE 0xCD
#define PLAY_SKIP 0xCE
#define VOLUME 0xE0
#define BALANCE 0xE1
#define MUTE 0xE2
#define BASS 0xE3
#define VOLUME_INC 0xE9
#define VOLUME_DEC 0xEA
#define BALANCE_LEFT 0x50, 0x01
#define BALANCE_RIGHT 0x51, 0x01
#define CHANNEL_LEFT 0x61, 0x01
#define CHANNEL_RIGHT 0x62, 0x01
//----------------------------------
// HID key for audio
//----------------------------------
#define USB_AUDIO_NONE 0
#define USB_AUDIO_VOLUP BIT(0)
#define USB_AUDIO_VOLDOWN BIT(1)
#define USB_AUDIO_MUTE BIT(2)
#define USB_AUDIO_PP BIT(3)
#define USB_AUDIO_NEXTFILE BIT(4)
#define USB_AUDIO_PREFILE BIT(5)
#define USB_AUDIO_FASTFORWARD BIT(5)
#define USB_AUDIO_STOP BIT(7)
#define USB_AUDIO_TRACKING_INC BIT(8)
#define USB_AUDIO_TRACKING_DEC BIT(9)
#define USB_AUDIO_STOP_EJECT BIT(10)
#define USB_AUDIO_VOLUME BIT(11)
#define USB_AUDIO_BALANCE_RIGHT BIT(12)
#define USB_AUDIO_BALANCE_LEFT BIT(13)
#define USB_AUDIO_PLAY BIT(14)
#define USB_AUDIO_PAUSE BIT(15)
/**@brief USB hid描述符配置
* @param[in] usb_id usb的id号
* @param[in] *ptr 指向HID描述符
* @param[in] *cur_itf_num 当前接口号
* @return HID描述符长度单位Byte
* @par 示例:
* @code
* hid_desc_config(usb_id,ptr,cur_itf_num);
* @encode
*/
u32 hid_desc_config(const usb_dev usb_id, u8 *ptr, u32 *cur_itf_num);
u32 hid_second_desc_config(const usb_dev usb_id, u8 *ptr, u32 *cur_itf_num);
/**@brief hid按键处理函数
* @param[in] *usb_device usb_device_t定义的结构体指针
* @param[in] hid_key hid按键信息
* @return 无
* @par 示例:
* @code
* hid_key_handler(usb_device,hidkey);
* @encode
*/
void hid_key_handler(struct usb_device_t *usb_device, u32 hid_key);
/**@brief hid按键处理函数,用于特殊发送一个包的场景(正常hidkey有两个包)
* @param[in] *usb_device usb_device_t定义的结构体指针
* @param[in] hid_key hid按键信息
* @return 无
* @par 示例:
* @code
* hid_key_handler_send_one_packet(usb_device,hidkey);
* @encode
*/
void hid_key_handler_send_one_packet(struct usb_device_t *usb_device, u32 hid_key);
/**@brief hid发送数据
* @param[in] *p 数据指针,指向存放数据的地址
* @param[in] len 发送的数据长度
* @return
* @par 示例:
* @code
* hid_send_data(p,len);
* @encode
*/
u32 hid_send_data(const void *p, u32 len);
/**@brief hid注册
* @param[in] usb_id usb的id号
* @return 0
* @par 示例:
* @code
* hid_register(usb_id);
* @encode
*/
u32 hid_register(const usb_dev usb_id);
/**@brief hid释放暂未使用
* @param[in] usb_id usb的id号
* @return 0
* @par 示例:
* @code
* hid_release(usb_id);
* @encode
*/
void hid_release(const usb_dev usb_id);
#endif