follow change of USB stack

This commit is contained in:
NIIBE Yutaka
2013-03-06 17:27:42 +09:00
parent 616fc9dd64
commit 4b16a6456d

View File

@@ -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,8 +190,8 @@ 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)
{ {