source: azure_iot_hub_f767zi/trunk/asp_baseplatform/OBJ/STM32F767NUCLEO144_GCC/USBO/usbddesc.c@ 457

Last change on this file since 457 was 457, checked in by coas-nagasima, 4 years ago

ファイルを追加

  • Property svn:eol-style set to native
  • Property svn:mime-type set to text/x-csrc;charset=UTF-8
File size: 7.8 KB
Line 
1/*
2 * TOPPERS/ASP Kernel
3 * Toyohashi Open Platform for Embedded Real-Time Systems/
4 * Advanced Standard Profile Kernel
5 *
6 * Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
7 * Toyohashi Univ. of Technology, JAPAN
8 * Copyright (C) 2004-2012 by Embedded and Real-Time Systems Laboratory
9 * Graduate School of Information Science, Nagoya Univ., JAPAN
10 * Copyright (C) 2016-2017 by TOPPERS PROJECT Educational Working Group.
11 *
12 * 上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ
13 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
14 * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
15 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
16 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
17 * スコード中に含まれていること.
18 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
19 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
20 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
21 * の無保証規定を掲載すること.
22 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
23 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
24 * と.
25 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
26 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
27 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
28 * 報告すること.
29 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
30 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
31 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
32 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
33 * 免責すること.
34 *
35 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
36 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
37 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
38 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
39 * の責任を負わない.
40 *
41 * $Id$
42 */
43
44/*
45 * USB DEVICE DESCRIPTORの設定
46 */
47
48#include "tusbd_base.h"
49
50#define MANUFACTURE_LENGTH 64
51#define PRODUCT_LENGTH 32
52#define CONFIGURATION_LENGTH 32
53#define INTERFACE_LENGTH 32
54
55/* Private define STM defintion ------------------------------------------------------*/
56#define USBD_VID 0x0483
57#if USB_DEVICE_ID == 0
58#define USBD_PID 0x5710
59#else
60#define USBD_PID 0x5740
61#endif
62#define USBD_RELNO 0x0200
63#define USBD_MANUFACTURER_STRING "STMicroelectronics"
64#if USB_DEVICE_ID == 0
65#define USBD_PRODUCT_STRING "HID Mouse"
66#define USBD_CONFIGURATION_HS_STRING "HID Config"
67#define USBD_INTERFACE_HS_STRING "HID Interface"
68#define USBD_CONFIGURATION_FS_STRING "HID Config"
69#define USBD_INTERFACE_FS_STRING "HID Interface"
70#else
71#define USBD_PRODUCT_STRING "STM32 Virtual ComPort"
72#define USBD_CONFIGURATION_HS_STRING "VCP Config"
73#define USBD_INTERFACE_HS_STRING "VCP Interface"
74#define USBD_CONFIGURATION_FS_STRING "VCP Config"
75#define USBD_INTERFACE_FS_STRING "VCP Interface"
76#endif
77
78/* USB Standard Device Descriptor */
79uint8_t defaultDeviceDescriptor[] __attribute__ ((aligned(USB_DATA_ALIGN))) = {
80 0x12, /* 0:bLength */
81 DEVICE_DESCRIPTOR, /* 1:bDescriptorType */
82 0x00, /* 2:bcdUSB */
83 0x02, /* 3:bcdUSB */
84 0x00, /* 4:bDeviceClass */
85 0x00, /* 5:bDeviceSubClass */
86 0x00, /* 6:bDeviceProtocol */
87 USB_MAX_EP0_SIZE, /* 7:bMaxPacketSize */
88 (USBD_VID & 0xFF), /* 8:idVendor */
89 (USBD_VID >> 8), /* 9:idVendor */
90 (USBD_PID & 0xFF), /* 10:idVendor */
91 (USBD_PID >> 8), /* 11:idVendor */
92 (USBD_RELNO & 0XFF), /* 12:bcdDevice */
93 (USBD_RELNO >> 8), /* 13:bcdDevice */
94 0x01, /* 14:iManufacturer */
95 0x02, /* 15:iProduct */
96 0x03, /* 16:iSerialNumber */
97 TUSBD_MAX_NUM_CONFIGURATION /* 17:bNumConfigurations */
98}; /* USB_DeviceDescriptor */
99
100/* USB Standard Device Descriptor */
101uint8_t defaultDeviceQualifierDescriptor[] __attribute__ ((aligned(USB_DATA_ALIGN))) = {
102 0x0A,
103 DEVICE_QUALIFIER_DESCRIPTOR,
104 0x00,
105 0x02,
106 0x00,
107 0x00,
108 0x00,
109 0x40,
110 0x01,
111 0x00
112};
113
114/* USB Standard Device Descriptor */
115uint8_t defaultLanguageIDDescriptor[] __attribute__ ((aligned(USB_DATA_ALIGN))) = {
116 0x04,
117 STRING_DESCRIPTOR,
118 0x09,
119 0x04
120};
121
122uint8_t defaultManufacturerString[MANUFACTURE_LENGTH*2] __attribute__ ((aligned(USB_DATA_ALIGN))) = {
123 MANUFACTURE_LENGTH*2,
124 STRING_DESCRIPTOR,
125 0x00
126};
127
128uint8_t defaultProductString[PRODUCT_LENGTH*2] __attribute__ ((aligned(USB_DATA_ALIGN))) = {
129 PRODUCT_LENGTH*2,
130 STRING_DESCRIPTOR,
131 0x00
132};
133
134uint8_t defaultSerialString[] __attribute__ ((aligned(USB_DATA_ALIGN))) = {
135 0x1A,
136 STRING_DESCRIPTOR,
137 'A', 0x00,
138 'B', 0x00,
139 '0', 0x00,
140 '0', 0x00,
141 '0', 0x00,
142 '0', 0x00,
143 '0', 0x00,
144 '0', 0x00,
145 '0', 0x00,
146 '0', 0x00,
147 '0', 0x00,
148 '1', 0x00
149};
150
151uint8_t defaultConfigurationString[CONFIGURATION_LENGTH*2] __attribute__ ((aligned(USB_DATA_ALIGN))) = {
152 CONFIGURATION_LENGTH*2,
153 STRING_DESCRIPTOR,
154 0x00
155};
156
157uint8_t defaultInterfaceString[INTERFACE_LENGTH*2] __attribute__ ((aligned(USB_DATA_ALIGN))) = {
158 INTERFACE_LENGTH*2,
159 STRING_DESCRIPTOR,
160 0x00
161};
162
163/* ascii to unicode 変換 */
164static uint8_t
165ascii2unicode(const char *src, uint16_t *dst, uint16_t len)
166{
167 uint8_t i, size;
168 uint8_t us, *p;
169
170 for(i = 0 ; i < len ; i++, src++, dst++){
171 us = *src;
172 if(us == 0)
173 break;
174 p = (uint8_t *)dst;
175 p[0] = us;
176 p[1] = 0;
177 }
178 size = i;
179
180 /* 0が見つかったら残りすべて0にする */
181 for( ; i < len ; i++, dst++){
182 *dst = 0;
183 }
184 return size;
185}
186
187static void
188MakeDescriptor(uint8_t speed)
189{
190 uint8_t len;
191
192 len = ascii2unicode(USBD_MANUFACTURER_STRING, (uint16_t *)&defaultManufacturerString[2], MANUFACTURE_LENGTH-2);
193 defaultManufacturerString[0] = len * 2 + 2;
194 syslog_2(LOG_NOTICE, "defaultManufacturerString len(%d) [%08x]", len, defaultManufacturerString);
195 len = ascii2unicode(USBD_PRODUCT_STRING, (uint16_t *)&defaultProductString[2], PRODUCT_LENGTH-2);
196 defaultProductString[0] = len * 2 + 2;
197 syslog_2(LOG_NOTICE, "defaultProductString len(%d) [%08x]", len, defaultProductString);
198 if(speed == USB_DEVICE_SPEED_HIGH)
199 len = ascii2unicode(USBD_CONFIGURATION_HS_STRING, (uint16_t *)&defaultConfigurationString[2], CONFIGURATION_LENGTH-2);
200 else
201 len = ascii2unicode(USBD_CONFIGURATION_FS_STRING, (uint16_t *)&defaultConfigurationString[2], CONFIGURATION_LENGTH-2);
202 defaultConfigurationString[0] = len * 2 + 2;
203 syslog_2(LOG_NOTICE, "defaultConfigurationString len(%d) [%08x]", len, defaultConfigurationString);
204 if(speed == USB_DEVICE_SPEED_HIGH)
205 len = ascii2unicode(USBD_INTERFACE_HS_STRING, (uint16_t *)&defaultInterfaceString[2], INTERFACE_LENGTH-2);
206 else
207 len = ascii2unicode(USBD_INTERFACE_FS_STRING, (uint16_t *)&defaultInterfaceString[2], INTERFACE_LENGTH-2);
208 defaultInterfaceString[0] = len * 2 + 2;
209 syslog_2(LOG_NOTICE, "defaultInterfaceString len(%d) [%08x]", len, defaultInterfaceString);
210}
211
212void
213MakeUsbDescriptor(TUSBD_Handle_t *pdev)
214{
215 pdev->makeDescriptor = MakeDescriptor;
216}
217
Note: See TracBrowser for help on using the repository browser.