Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
M
micropython
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Analytics
Analytics
Repository
Value Stream
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Commits
Open sidebar
xpstem
micropython
Commits
affcbe41
Commit
affcbe41
authored
Oct 16, 2015
by
Dave Hylands
Committed by
Damien George
Oct 17, 2015
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
stmhal: Make USB serial number actually be unique.
parent
6a515b95
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
20 additions
and
7 deletions
+20
-7
stmhal/usbd_desc.c
stmhal/usbd_desc.c
+20
-7
No files found.
stmhal/usbd_desc.c
View file @
affcbe41
...
...
@@ -40,9 +40,7 @@
#define USBD_LANGID_STRING 0x409
#define USBD_MANUFACTURER_STRING "MicroPython"
#define USBD_PRODUCT_HS_STRING "Pyboard Virtual Comm Port in HS Mode"
#define USBD_SERIALNUMBER_HS_STRING "000000000010"
#define USBD_PRODUCT_FS_STRING "Pyboard Virtual Comm Port in FS Mode"
#define USBD_SERIALNUMBER_FS_STRING "000000000011"
#define USBD_CONFIGURATION_HS_STRING "Pyboard Config"
#define USBD_INTERFACE_HS_STRING "Pyboard Interface"
#define USBD_CONFIGURATION_FS_STRING "Pyboard Config"
...
...
@@ -158,11 +156,26 @@ STATIC uint8_t *USBD_ManufacturerStrDescriptor(USBD_SpeedTypeDef speed, uint16_t
* @retval Pointer to descriptor buffer
*/
STATIC
uint8_t
*
USBD_SerialStrDescriptor
(
USBD_SpeedTypeDef
speed
,
uint16_t
*
length
)
{
if
(
speed
==
USBD_SPEED_HIGH
)
{
USBD_GetString
((
uint8_t
*
)
USBD_SERIALNUMBER_HS_STRING
,
USBD_StrDesc
,
length
);
}
else
{
USBD_GetString
((
uint8_t
*
)
USBD_SERIALNUMBER_FS_STRING
,
USBD_StrDesc
,
length
);
}
// This document: http://www.usb.org/developers/docs/devclass_docs/usbmassbulk_10.pdf
// says that the serial number has to be at least 12 digits long and that
// the last 12 digits need to be unique. It also stipulates that the valid
// character set is that of upper-case hexadecimal digits.
//
// The onboard DFU bootloader produces a 12-digit serial number based on
// the 96-bit unique ID, so for consistency we go with this algorithm.
// You can see the serial number if you do:
//
// dfu-util -l
//
// See: https://my.st.com/52d187b7 for the algorithim used.
uint8_t
*
id
=
(
uint8_t
*
)
0x1fff7a10
;
char
serial_buf
[
16
];
snprintf
(
serial_buf
,
sizeof
(
serial_buf
),
"%02X%02X%02X%02X%02X%02X"
,
id
[
11
],
id
[
10
]
+
id
[
2
],
id
[
9
],
id
[
8
]
+
id
[
0
],
id
[
7
],
id
[
6
]);
USBD_GetString
((
uint8_t
*
)
serial_buf
,
USBD_StrDesc
,
length
);
return
USBD_StrDesc
;
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment