follow change of USB stack
This commit is contained in:
@@ -99,33 +99,15 @@ static const uint8_t regnual_string_serial[] = {
|
|||||||
'0', 0, '.', 0, '0', 0,
|
'0', 0, '.', 0, '0', 0,
|
||||||
};
|
};
|
||||||
|
|
||||||
const struct Descriptor device_desc = {
|
|
||||||
regnual_device_desc,
|
|
||||||
sizeof (regnual_device_desc)
|
|
||||||
};
|
|
||||||
|
|
||||||
const struct Descriptor config_desc = {
|
void
|
||||||
regnual_config_desc,
|
usb_cb_device_reset (void)
|
||||||
sizeof (regnual_config_desc)
|
|
||||||
};
|
|
||||||
|
|
||||||
const struct Descriptor string_descs[] = {
|
|
||||||
{regnual_string_lang_id, sizeof (regnual_string_lang_id)},
|
|
||||||
{gnukStringVendor, sizeof (gnukStringVendor)},
|
|
||||||
{gnukStringProduct, sizeof (gnukStringProduct)},
|
|
||||||
{regnual_string_serial, sizeof (regnual_string_serial)},
|
|
||||||
};
|
|
||||||
|
|
||||||
#define NUM_STRING_DESC (sizeof (string_descs)/sizeof (struct Descriptor))
|
|
||||||
|
|
||||||
static void
|
|
||||||
regnual_device_reset (void)
|
|
||||||
{
|
{
|
||||||
/* Set DEVICE as not configured */
|
/* Set DEVICE as not configured */
|
||||||
usb_lld_set_configuration (0);
|
usb_lld_set_configuration (0);
|
||||||
|
|
||||||
/* Current Feature initialization */
|
/* Current Feature initialization */
|
||||||
usb_lld_set_feature (config_desc.Descriptor[7]);
|
usb_lld_set_feature (regnual_config_desc[7]);
|
||||||
|
|
||||||
usb_lld_reset ();
|
usb_lld_reset ();
|
||||||
|
|
||||||
@@ -141,11 +123,9 @@ regnual_device_reset (void)
|
|||||||
#define USB_REGNUAL_PROTECT 4
|
#define USB_REGNUAL_PROTECT 4
|
||||||
#define USB_REGNUAL_FINISH 5
|
#define USB_REGNUAL_FINISH 5
|
||||||
|
|
||||||
static uint8_t mem[256];
|
static uint32_t mem[256/4];
|
||||||
static uint32_t result;
|
static uint32_t result;
|
||||||
|
|
||||||
static const uint8_t *const mem_info[] = { &_flash_start, &_flash_end, };
|
|
||||||
|
|
||||||
|
|
||||||
static uint32_t rbit (uint32_t v)
|
static uint32_t rbit (uint32_t v)
|
||||||
{
|
{
|
||||||
@@ -159,7 +139,7 @@ static uint32_t fetch (int i)
|
|||||||
{
|
{
|
||||||
uint32_t v;
|
uint32_t v;
|
||||||
|
|
||||||
v = *(uint32_t *)(&mem[i*4]);
|
v = mem[i];
|
||||||
return rbit (v);
|
return rbit (v);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -186,9 +166,8 @@ static uint32_t calc_crc32 (void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void regnual_ctrl_write_finish (uint8_t req, uint8_t req_no,
|
void usb_cb_ctrl_write_finish (uint8_t req, uint8_t req_no, uint16_t value,
|
||||||
uint16_t value, uint16_t index,
|
uint16_t index, uint16_t len)
|
||||||
uint16_t len)
|
|
||||||
{
|
{
|
||||||
uint8_t type_rcp = req & (REQUEST_TYPE|RECIPIENT);
|
uint8_t type_rcp = req & (REQUEST_TYPE|RECIPIENT);
|
||||||
|
|
||||||
@@ -200,7 +179,7 @@ static void regnual_ctrl_write_finish (uint8_t req, uint8_t req_no,
|
|||||||
{
|
{
|
||||||
uint32_t dst_addr = (0x08000000 + value * 0x100);
|
uint32_t dst_addr = (0x08000000 + value * 0x100);
|
||||||
|
|
||||||
result = flash_write (dst_addr, mem, 256);
|
result = flash_write (dst_addr, (const uint8_t *)mem, 256);
|
||||||
}
|
}
|
||||||
else if (req_no == USB_REGNUAL_PROTECT && len == 0
|
else if (req_no == USB_REGNUAL_PROTECT && len == 0
|
||||||
&& value == 0 && index == 0)
|
&& value == 0 && index == 0)
|
||||||
@@ -211,9 +190,9 @@ static void regnual_ctrl_write_finish (uint8_t req, uint8_t req_no,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
int
|
||||||
regnual_setup (uint8_t req, uint8_t req_no,
|
usb_cb_setup (uint8_t req, uint8_t req_no,
|
||||||
uint16_t value, uint16_t index, uint16_t len)
|
uint16_t value, uint16_t index, uint16_t len)
|
||||||
{
|
{
|
||||||
uint8_t type_rcp = req & (REQUEST_TYPE|RECIPIENT);
|
uint8_t type_rcp = req & (REQUEST_TYPE|RECIPIENT);
|
||||||
|
|
||||||
@@ -223,6 +202,10 @@ regnual_setup (uint8_t req, uint8_t req_no,
|
|||||||
{
|
{
|
||||||
if (req_no == USB_REGNUAL_MEMINFO)
|
if (req_no == USB_REGNUAL_MEMINFO)
|
||||||
{
|
{
|
||||||
|
static const uint8_t *mem_info[2];
|
||||||
|
|
||||||
|
mem_info[0] = &_flash_start;
|
||||||
|
mem_info[1] = &_flash_end;
|
||||||
usb_lld_set_data_to_send (mem_info, sizeof (mem_info));
|
usb_lld_set_data_to_send (mem_info, sizeof (mem_info));
|
||||||
return USB_SUCCESS;
|
return USB_SUCCESS;
|
||||||
}
|
}
|
||||||
@@ -240,7 +223,8 @@ regnual_setup (uint8_t req, uint8_t req_no,
|
|||||||
return USB_UNSUPPORT;
|
return USB_UNSUPPORT;
|
||||||
|
|
||||||
if (index + len < 256)
|
if (index + len < 256)
|
||||||
memset (mem + index + len, 0xff, 256 - (index + len));
|
memset ((uint8_t *)mem + index + len, 0xff,
|
||||||
|
256 - (index + len));
|
||||||
|
|
||||||
usb_lld_set_data_to_recv (mem + index, len);
|
usb_lld_set_data_to_recv (mem + index, len);
|
||||||
return USB_SUCCESS;
|
return USB_SUCCESS;
|
||||||
@@ -264,38 +248,55 @@ regnual_setup (uint8_t req, uint8_t req_no,
|
|||||||
return USB_UNSUPPORT;
|
return USB_UNSUPPORT;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
int
|
||||||
regnual_get_descriptor (uint8_t desc_type, uint16_t index, uint16_t value)
|
usb_cb_get_descriptor (uint8_t desc_type, uint16_t index, uint16_t value)
|
||||||
{
|
{
|
||||||
(void)index;
|
(void)index;
|
||||||
if (desc_type == DEVICE_DESCRIPTOR)
|
if (desc_type == DEVICE_DESCRIPTOR)
|
||||||
{
|
{
|
||||||
usb_lld_set_data_to_send (device_desc.Descriptor,
|
usb_lld_set_data_to_send (regnual_device_desc,
|
||||||
device_desc.Descriptor_Size);
|
sizeof (regnual_device_desc));
|
||||||
return USB_SUCCESS;
|
return USB_SUCCESS;
|
||||||
}
|
}
|
||||||
else if (desc_type == CONFIG_DESCRIPTOR)
|
else if (desc_type == CONFIG_DESCRIPTOR)
|
||||||
{
|
{
|
||||||
usb_lld_set_data_to_send (config_desc.Descriptor,
|
usb_lld_set_data_to_send (regnual_config_desc,
|
||||||
config_desc.Descriptor_Size);
|
sizeof (regnual_config_desc));
|
||||||
return USB_SUCCESS;
|
return USB_SUCCESS;
|
||||||
}
|
}
|
||||||
else if (desc_type == STRING_DESCRIPTOR)
|
else if (desc_type == STRING_DESCRIPTOR)
|
||||||
{
|
{
|
||||||
uint8_t desc_index = value & 0xff;
|
uint8_t desc_index = value & 0xff;
|
||||||
|
const uint8_t *str;
|
||||||
|
int size;
|
||||||
|
|
||||||
if (desc_index < NUM_STRING_DESC)
|
switch (desc_index)
|
||||||
{
|
{
|
||||||
usb_lld_set_data_to_send (string_descs[desc_index].Descriptor,
|
case 0:
|
||||||
string_descs[desc_index].Descriptor_Size);
|
str = regnual_string_lang_id;
|
||||||
return USB_SUCCESS;
|
size = sizeof (regnual_string_lang_id);
|
||||||
|
case 1:
|
||||||
|
str = gnukStringVendor;
|
||||||
|
size = sizeof (gnukStringVendor);
|
||||||
|
case 2:
|
||||||
|
str = gnukStringProduct;
|
||||||
|
size = sizeof (gnukStringProduct);
|
||||||
|
case 3:
|
||||||
|
str = regnual_string_serial;
|
||||||
|
size = sizeof (regnual_string_serial);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return USB_UNSUPPORT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
usb_lld_set_data_to_send (str, size);
|
||||||
|
return USB_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
return USB_UNSUPPORT;
|
return USB_UNSUPPORT;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int regnual_usb_event (uint8_t event_type, uint16_t value)
|
int usb_cb_handle_event (uint8_t event_type, uint16_t value)
|
||||||
{
|
{
|
||||||
(void)value;
|
(void)value;
|
||||||
|
|
||||||
@@ -311,20 +312,12 @@ static int regnual_usb_event (uint8_t event_type, uint16_t value)
|
|||||||
return USB_UNSUPPORT;
|
return USB_UNSUPPORT;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int regnual_interface (uint8_t cmd, uint16_t interface, uint16_t alt)
|
int usb_cb_interface (uint8_t cmd, uint16_t interface, uint16_t alt)
|
||||||
{
|
{
|
||||||
(void)cmd; (void)interface; (void)alt;
|
(void)cmd; (void)interface; (void)alt;
|
||||||
return USB_UNSUPPORT;
|
return USB_UNSUPPORT;
|
||||||
}
|
}
|
||||||
|
|
||||||
const struct usb_device_method Device_Method = {
|
|
||||||
regnual_device_reset,
|
|
||||||
regnual_ctrl_write_finish,
|
|
||||||
regnual_setup,
|
|
||||||
regnual_get_descriptor,
|
|
||||||
regnual_usb_event,
|
|
||||||
regnual_interface,
|
|
||||||
};
|
|
||||||
|
|
||||||
static void wait (int count)
|
static void wait (int count)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user