1 /*
2 ********************************************************************************************************************
3 *                                              usb host driver
4 *
5 *                              (c) Copyright 2007-2010, javen.China
6 *                                       All Rights Reserved
7 *
8 * File Name     : drv_host.h
9 *
10 * Author        : javen
11 *
12 * Version       : 2.0
13 *
14 * Date          : 2009.07.17
15 *
16 * Description   :
17 *
18 * History       :
19 *
20 *
21 ********************************************************************************************************************
22 */
23 
24 #ifndef    __DRV_HOST_H__
25 #define    __DRV_HOST_H__
26 #include   <typedef.h>
27 //---------------------------------------------------------
28 //    Device Name
29 //---------------------------------------------------------
30 #define  USB_DEVICE_INFO_NAME       "USB_DEV_INFO"  /* USB设备信息                  */
31 #define  USB_STORAGE_DEV_NAME       "SCSI_DISK"     /* USB 存储类设备名           */
32 #define  USB_CDROM_DEV_NAME         "USB_CDROM"     /* USB 光驱设备                 */
33 
34 //---------------------------------------------------------
35 //     USB HOST IOCTRL COMMAND MASK
36 //---------------------------------------------------------
37 #define  USB_USER_CTRL_CMD_MASK     0x0f0000
38 
39 #define  USB_USER_CTRL_CMD_DEVICE_INFO_MASK (USB_USER_CTRL_CMD_MASK | 0x1000)
40 #define  USB_USER_CTRL_CMD_STORAGE_MASK     (USB_USER_CTRL_CMD_MASK | 0x2000)
41 #define  USB_USER_CTRL_CMD_HID_MASK         (USB_USER_CTRL_CMD_MASK | 0x3000)
42 
43 //---------------------------------------------------------
44 //     USB 存储类设备扩展的控制设备
45 //---------------------------------------------------------
46 #define USB_DEVICE_INFO_USER_CMD_GET_DISK_STATUS    (USB_USER_CTRL_CMD_DEVICE_INFO_MASK | 0x00) /* 读取当前所有lun的读写状态         */
47 #define USB_DEVICE_INFO_USER_CMD_GET_DEVICE_INFO    (USB_USER_CTRL_CMD_DEVICE_INFO_MASK | 0x01) /* 获得设备的信息                    */
48 
49 #define USB_STORAGE_DEVICE_STATUS_IDLE          0x00 /* USB处于空闲状态   */
50 #define USB_STORAGE_DEVICE_STATUS_READ          0x01 /* USB处于读状态  */
51 #define USB_STORAGE_DEVICE_STATUS_WRITE         0x02 /* USB处于写状态  */
52 
53 /* 设备类型。如移动硬盘、U盘、光驱等 */
54 typedef  enum _USBStorDevType
55 {
56     USB_STORAGE_DEVICE_TYPE_UNKOWN = 0,     /* 未知设备     */
57     USB_STORAGE_DEVICE_TYPE_HDD,            /* 移动磁盘     */
58     USB_STORAGE_DEVICE_TYPE_UDISK,          /* U盘、读卡器  */
59     USB_STORAGE_DEVICE_TYPE_CDROM           /* USB光驱      */
60 } USBStorDevType_t;
61 
62 #define  USB_HOST_MAX_STRING_LEN        128
63 typedef struct _usbhDeivceInfo
64 {
65     char Vender[USB_HOST_MAX_STRING_LEN];   /* 设备厂商名  */
66     char Product[USB_HOST_MAX_STRING_LEN];  /* 设备产品名  */
67     char Serial[USB_HOST_MAX_STRING_LEN];   /* 序列号        */
68 
69     unsigned int HubPortNo;        /* 设备所在的Hub端口号. 0~7: Hub端口号,8~15: Hub级数,16~31: 保留。
70                                Hub级数为0,表示没有hub接入 */
71     unsigned int DeviceType;       /* 设备类型。参考USBStorDevType_t */
72     unsigned char res[508];
73 } usbhDeivceInfo_t;
74 
75 //---------------------------------------------------------
76 //     USB HOST STORAGE Class Driver IOCTRL COMMAND
77 //---------------------------------------------------------
78 #define USB_STORAGE_USER_CTRL_CMD_GET_CDROM_INFO    (USB_USER_CTRL_CMD_STORAGE_MASK | 0x01) /* 获得光驱状态                   */
79 #define USB_STORAGE_USER_CTRL_CMD_CDROM_PALY        (USB_USER_CTRL_CMD_STORAGE_MASK | 0x02) /* 让光驱从指定的MSF位置开始播放   */
80 #define USB_STORAGE_USER_CTRL_CMD_CDROM_STOP        (USB_USER_CTRL_CMD_STORAGE_MASK | 0x03) /* 停止播放                         */
81 #define USB_STORAGE_USER_CTRL_CMD_CDROM_EJECT       (USB_USER_CTRL_CMD_STORAGE_MASK | 0x04) /* 弹出光驱                         */
82 #define USB_STORAGE_USER_CTRL_CMD_CDROM_LOAD        (USB_USER_CTRL_CMD_STORAGE_MASK | 0x05) /* 装载光碟进光驱                    */
83 #define USB_STORAGE_USER_CTRL_CMD_CDROM_PREVENT_MEDIUM_REMOVAL  (USB_USER_CTRL_CMD_STORAGE_MASK | 0x06) /* 禁止介质移动           */
84 #define USB_STORAGE_USER_CTRL_CMD_CDROM_ALLOW_MEDIUM_REMOVAL    (USB_USER_CTRL_CMD_STORAGE_MASK | 0x07) /* 允许介质移动       */
85 #define USB_STORAGE_USER_CTRL_CMD_CDROM_GET_DRIVE_STATUS        (USB_USER_CTRL_CMD_STORAGE_MASK | 0x08) /* 获得光驱的状态        */
86 
87 /* 光驱的类型 */
88 #define  USBH_CDROM_DRIVER_TYPE_UNKOWN          0x00    /* 未知               */
89 #define  USBH_CDROM_DRIVER_TYPE_CDR_RD          0x01    /* CD-R Read Only       */
90 #define  USBH_CDROM_DRIVER_TYPE_CDR_WR          0x02    /* CD-R WR              */
91 #define  USBH_CDROM_DRIVER_TYPE_CDE_RD          0x04    /* CD-E Read Only       */
92 #define  USBH_CDROM_DRIVER_TYPE_CDE_WR          0x08    /* CD-E WR              */
93 #define  USBH_CDROM_DRIVER_TYPE_DVD_ROM_RD      0x10    /* DVD-ROM Read Only    */
94 #define  USBH_CDROM_DRIVER_TYPE_DVDR_RD         0x20    /* DVD-R Read Only      */
95 #define  USBH_CDROM_DRIVER_TYPE_DVDR_WR         0x40    /* DVD-R WR             */
96 #define  USBH_CDROM_DRIVER_TYPE_DVD_RAM_RD      0x80    /* DVD-RAM Read Only    */
97 #define  USBH_CDROM_DRIVER_TYPE_DVD_RAM_WR      0x100   /* DVD-RAM WR           */
98 
99 /* 光碟的类型 */
100 #define  USBH_MEDIUM_CD_UNKOWN                  0x00    /* 未知               */
101 #define  USBH_MEDIUM_CD_DATA_ONLY               0x01    /* 数据光碟             */
102 #define  USBH_MEDIUM_CD_AUDIO_ONLY              0x02    /* 音乐光碟             */
103 #define  USBH_MEDIUM_CD_DATA_AUDIO_COMBINED     0x03    /* 数据音乐混合光碟     */
104 #define  USBH_MEDIUM_CD_PHOTO_CD                0x04    /* 图片光碟             */
105 
106 /* 光驱的状态 */
107 #define  USBH_CDROM_DRIVE_STATUS_NO_INFORMATION     0x00    /* 缺省值,未知的光驱状态        */
108 #define  USBH_CDROM_DRIVE_STATUS_NO_DISC            0x01    /* 光驱关闭,但是没有光碟        */
109 #define  USBH_CDROM_DRIVE_STATUS_TRAY_OPEN          0x02    /* 光驱已经打开               */
110 #define  USBH_CDROM_DRIVE_STATUS_NOT_READY          0x03    /* 光碟已经装载,但是介质未就绪   */
111 #define  USBH_CDROM_DRIVE_STATUS_DISK_OK            0x04    /* 光碟已经装载,并且介质就绪  */
112 
113 /* USB 光驱和光碟信息 */
114 typedef struct _usbh_CDROM_Info
115 {
116     __u32 DriveType;    /* 光驱的类型,每个bit都自己的含义 */
117     __u32 DiscType;     /* 光碟的类型 */
118 
119     __u8 res[504];
120 } usbh_CDROM_Info_t;
121 
122 
123 //---------------------------------------------------------
124 //     USB HOST HID Class Driver IOCTRL COMMAND
125 //---------------------------------------------------------
126 typedef s32 (* USBHMouse_CallBack)(void *p_arg);
127 typedef void (* USBHJoystick_CallBack)(void *arg, __s32 *buttom, __s32 *stickX, __s32 *stickY, __s32 *reserve);
128 
129 /* USB鼠标测试专用 */
130 #define  USBH_HID_USER_CTRL_CMD_TEST_START  (USB_USER_CTRL_CMD_HID_MASK | 0x00) /* USB鼠标测试命令. 开始 */
131 #define  USBH_HID_USER_CTRL_CMD_TEST_STOP   (USB_USER_CTRL_CMD_HID_MASK | 0x01) /* USB鼠标测试命令. 结束 */
132 
133 typedef struct _USBHMouseTest
134 {
135     void *buffer;
136     USBHMouse_CallBack CallBack;
137 } USBHMouseTest_t;
138 
139 /* 用户专用 */
140 #define USBH_HID_USER_CTRL_CMD_REG          (USB_USER_CTRL_CMD_HID_MASK | 0x10) /* 向USB注册回调函数 */
141 #define USBH_HID_USER_CTRL_CMD_UNREG        (USB_USER_CTRL_CMD_HID_MASK | 0x11) /* 向USB注销回调函数 */
142 typedef struct _USBHMouseEvent
143 {
144     struct
145     {
146         __u8 LeftButton     : 1;        /* 鼠标左键 */
147         __u8 RightButton    : 1;        /* 鼠标右键 */
148         __u8 MiddleButton   : 1;        /* 鼠标中键 */
149         __u8 Button4        : 1;
150         __u8 Button5        : 1;
151         __u8 Button6        : 1;
152         __u8 Button7        : 1;
153         __u8 Button8        : 1;
154     } Button;
155 
156     __s8 X;             /* X 坐标, 相对坐标   */
157     __s8 Y;             /* Y 坐标, 相对坐标   */
158     __s8 Wheel;         /* 鼠标滚轮, >0表示向上滚动, <0表示向下滚动 */
159 
160     __u8 res[4];
161 } USBHMouseEvent_t;
162 
163 //手柄
164 #define USBH_HID_USER_CTRL_CMD_JOYSTICK_FUN     (USB_USER_CTRL_CMD_HID_MASK | 0x12) /* 得到手柄键值函数*/
165 #define USBH_HID_USER_CTRL_CMD_JOYSTICK_ARG     (USB_USER_CTRL_CMD_HID_MASK | 0x13) /* 得到回调函数参数 */
166 
167 #endif     //__DRV_UDISK_H__
168 
169 
170