- Attempt to generate the usb serial number from the disk serial number
- serial number length is again target dependent git-svn-id: svn://svn.rockbox.org/rockbox/trunk@16374 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
66cfed16b0
commit
6431cd327c
1 changed files with 34 additions and 6 deletions
|
@ -48,6 +48,10 @@
|
||||||
#include "as3514.h"
|
#include "as3514.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if !defined(HAVE_AS3514) && !defined(IPOD_ARCH)
|
||||||
|
#include "ata.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/*-------------------------------------------------------------------------*/
|
/*-------------------------------------------------------------------------*/
|
||||||
/* USB protocol descriptors: */
|
/* USB protocol descriptors: */
|
||||||
|
@ -233,10 +237,11 @@ static struct usb_string_descriptor usb_string_iProduct =
|
||||||
|
|
||||||
static struct usb_string_descriptor usb_string_iSerial =
|
static struct usb_string_descriptor usb_string_iSerial =
|
||||||
{
|
{
|
||||||
66,
|
82,
|
||||||
USB_DT_STRING,
|
USB_DT_STRING,
|
||||||
{'0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0',
|
{'0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0',
|
||||||
'0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0'}
|
'0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0',
|
||||||
|
'0','0','0','0','0','0','0','0'}
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Generic for all targets */
|
/* Generic for all targets */
|
||||||
|
@ -316,8 +321,7 @@ static void set_serial_descriptor(void)
|
||||||
|
|
||||||
/* We need to convert from a little-endian 64-bit int
|
/* We need to convert from a little-endian 64-bit int
|
||||||
into a utf-16 string of hex characters */
|
into a utf-16 string of hex characters */
|
||||||
/* Align at the right side of the 32-digit serial number */
|
short* p = &usb_string_iSerial.wString[15];
|
||||||
short* p = &usb_string_iSerial.wString[31];
|
|
||||||
uint32_t x;
|
uint32_t x;
|
||||||
int i,j;
|
int i,j;
|
||||||
|
|
||||||
|
@ -330,6 +334,7 @@ static void set_serial_descriptor(void)
|
||||||
x >>= 4;
|
x >>= 4;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
usb_string_iSerial.bLength=34;
|
||||||
}
|
}
|
||||||
#elif defined(HAVE_AS3514)
|
#elif defined(HAVE_AS3514)
|
||||||
static void set_serial_descriptor(void)
|
static void set_serial_descriptor(void)
|
||||||
|
@ -338,6 +343,7 @@ static void set_serial_descriptor(void)
|
||||||
'8','9','A','B','C','D','E','F'};
|
'8','9','A','B','C','D','E','F'};
|
||||||
|
|
||||||
unsigned char serial[16];
|
unsigned char serial[16];
|
||||||
|
/* Align 32 digits right in the 40-digit serial number */
|
||||||
short* p = usb_string_iSerial.wString;
|
short* p = usb_string_iSerial.wString;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
@ -347,6 +353,30 @@ static void set_serial_descriptor(void)
|
||||||
*p++ = hex[(serial[i] >> 4) & 0xF];
|
*p++ = hex[(serial[i] >> 4) & 0xF];
|
||||||
*p++ = hex[(serial[i] >> 0) & 0xF];
|
*p++ = hex[(serial[i] >> 0) & 0xF];
|
||||||
}
|
}
|
||||||
|
usb_string_iSerial.bLength=66;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
/* If we don't know the device serial number, use the one
|
||||||
|
* from the disk */
|
||||||
|
static void set_serial_descriptor(void)
|
||||||
|
{
|
||||||
|
static short hex[16] = {'0','1','2','3','4','5','6','7',
|
||||||
|
'8','9','A','B','C','D','E','F'};
|
||||||
|
|
||||||
|
short* p = usb_string_iSerial.wString;
|
||||||
|
unsigned short* identify = ata_get_identify();
|
||||||
|
unsigned short x;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 10; i < 20; i++)
|
||||||
|
{
|
||||||
|
x = betoh16(identify[i]);
|
||||||
|
*p++ = hex[(x >> 4) & 0xF];
|
||||||
|
*p++ = hex[(x >> 0) & 0xF];
|
||||||
|
*p++ = hex[(x >> 12) & 0xF];
|
||||||
|
*p++ = hex[(x >> 8) & 0xF];
|
||||||
|
}
|
||||||
|
usb_string_iSerial.bLength=82;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -406,9 +436,7 @@ bool usb_core_data_connection(void)
|
||||||
#ifdef USB_THREAD
|
#ifdef USB_THREAD
|
||||||
void usb_core_thread(void)
|
void usb_core_thread(void)
|
||||||
{
|
{
|
||||||
#if defined(IPOD_ARCH) || defined(HAVE_AS3514)
|
|
||||||
set_serial_descriptor();
|
set_serial_descriptor();
|
||||||
#endif
|
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
struct queue_event ev;
|
struct queue_event ev;
|
||||||
|
|
Loading…
Reference in a new issue