hub: Empty packet readings after SET_ and CLEAR_ commands

* fixed typo/bug: "hub->state += 2" must have been
	"hub->state = 2" to issue empty read

Now, after each SET_ or CLEAR_ command, empty read is issued.

+ removed forward declaration of event() - cleaning

Signed-off-by: Amir Hammad <amir.hammad@hotmail.com>
This commit is contained in:
Amir Hammad 2015-07-29 18:18:44 +02:00
parent 09c861c975
commit 1566e7012f
2 changed files with 25 additions and 9 deletions

View file

@ -29,7 +29,6 @@
static hub_device_t hub_device[USBH_MAX_HUBS];
static void event(usbh_device_t *dev, usbh_packet_callback_data_t cb_data);
static bool initialized = false;
@ -224,19 +223,21 @@ static void event(usbh_device_t *dev, usbh_packet_callback_data_t cb_data)
}
break;
case 2:
case EMPTY_PACKET_READ_STATE:
{
LOG_PRINTF("|empty packet read|");
switch (cb_data.status) {
case USBH_PACKET_CALLBACK_STATUS_OK:
device_xfer_control_read(0, 0, event, dev);
hub->state++;
hub->state = hub->state_after_empty_read;
hub->state_after_empty_read = 0;
break;
case USBH_PACKET_CALLBACK_STATUS_EFATAL:
case USBH_PACKET_CALLBACK_STATUS_EAGAIN:
case USBH_PACKET_CALLBACK_STATUS_ERRSIZ:
ERROR(cb_data.status);
hub->state = hub->state_after_empty_read;
event(dev, cb_data);
break;
}
}
@ -378,6 +379,9 @@ static void event(usbh_device_t *dev, usbh_packet_callback_data_t cb_data)
setup_data.wIndex = hub->index;
setup_data.wLength = 0;
hub->state_after_empty_read = hub->state;
hub->state = EMPTY_PACKET_READ_STATE;
device_xfer_control_write(&setup_data, sizeof(setup_data), event, dev);
} else {
hub->state++;
@ -575,7 +579,9 @@ static void event(usbh_device_t *dev, usbh_packet_callback_data_t cb_data)
setup_data.wIndex = port;
setup_data.wLength = 0;
hub->state = 33;
hub->state_after_empty_read = 33;
hub->state = EMPTY_PACKET_READ_STATE;
device_xfer_control_write(&setup_data, sizeof(setup_data), event, dev);
} else if(stc & (1<<HUB_FEATURE_PORT_RESET)) {
@ -589,7 +595,8 @@ static void event(usbh_device_t *dev, usbh_packet_callback_data_t cb_data)
setup_data.wIndex = port;
setup_data.wLength = 0;
hub->state = 35;
hub->state_after_empty_read = 35;
hub->state = EMPTY_PACKET_READ_STATE;
LOG_PRINTF("RESET");
device_xfer_control_write(&setup_data, sizeof(setup_data), event, dev);
@ -630,7 +637,9 @@ static void event(usbh_device_t *dev, usbh_packet_callback_data_t cb_data)
setup_data.wIndex = port;
setup_data.wLength = 0;
hub->state = 11;
hub->state_after_empty_read = 11;
hub->state = EMPTY_PACKET_READ_STATE;
LOG_PRINTF("CONN");
hub->busy = 1;
@ -694,7 +703,9 @@ static void event(usbh_device_t *dev, usbh_packet_callback_data_t cb_data)
setup_data.wLength = 0;
// After write process another devices, poll for events
hub->state = 11;//Expecting all ports are powered (constant/non-changeable after init)
hub->state_after_empty_read = 11;//Expecting all ports are powered (constant/non-changeable after init)
hub->state = EMPTY_PACKET_READ_STATE;
hub->current_port = CURRENT_PORT_NONE;
device_xfer_control_write(&setup_data, sizeof(setup_data), event, dev);
} else if (!(sts & (1<<(HUB_FEATURE_PORT_LOWSPEED))) &&
@ -785,7 +796,8 @@ static void poll(void *drvdata, uint32_t time_curr_us)
setup_data.wIndex = 0;
setup_data.wLength = 0;
hub->state += 2;
hub->state = EMPTY_PACKET_READ_STATE;
hub->state_after_empty_read = 3;
device_xfer_control_write(&setup_data, sizeof(setup_data), event, dev);
}

View file

@ -61,6 +61,8 @@
#define CURRENT_PORT_NONE -1
#define EMPTY_PACKET_READ_STATE 255
struct _hub_device {
usbh_device_t *device[USBH_HUB_MAX_DEVICES + 1];
uint8_t buffer[USBH_HUB_BUFFER_SIZE];
@ -68,6 +70,8 @@ struct _hub_device {
uint8_t endpoint_in_address;
uint8_t endpoint_in_toggle;
uint8_t state;
uint8_t state_after_empty_read;
uint8_t desc_len;
uint16_t ports_num;
int8_t index;