55 */
66#include <string.h>
77#include <stdint.h>
8+ #include "sdkconfig.h"
89#include "esp_err.h"
910#include "esp_log.h"
1011#include "esp_heap_caps.h"
1112#include "freertos/FreeRTOS.h"
1213#include "freertos/task.h"
13- #include "freertos/semphr.h"
1414#include "usb_private.h"
1515#include "ext_hub.h"
16+ #include "ext_port.h"
1617#include "usb/usb_helpers.h"
1718
18- typedef struct ext_port_s * ext_port_hdl_t ; /* This will be implemented during ext_port driver implementation */
19-
2019#define EXT_HUB_MAX_STATUS_BYTES_SIZE (sizeof(uint32_t))
2120#define EXT_HUB_STATUS_CHANGE_FLAG (1 << 0)
2221#define EXT_HUB_STATUS_PORT1_CHANGE_FLAG (1 << 1)
@@ -396,8 +395,15 @@ static void device_error(ext_hub_dev_t *ext_hub_dev)
396395
397396static esp_err_t device_port_new (ext_hub_dev_t * ext_hub_dev , uint8_t port_idx )
398397{
398+ ext_port_config_t port_config = {
399+ .ext_hub_hdl = (ext_hub_handle_t ) ext_hub_dev ,
400+ .parent_dev_hdl = ext_hub_dev -> constant .dev_hdl ,
401+ .parent_port_num = port_idx + 1 ,
402+ .port_power_delay_ms = ext_hub_dev -> constant .hub_desc -> bPwrOn2PwrGood * 2 ,
403+ };
404+
399405 assert (p_ext_hub_driver -> constant .port_driver );
400- esp_err_t ret = p_ext_hub_driver -> constant .port_driver -> new (NULL , (void * * ) & ext_hub_dev -> constant .ports [port_idx ]);
406+ esp_err_t ret = p_ext_hub_driver -> constant .port_driver -> new (& port_config , (void * * ) & ext_hub_dev -> constant .ports [port_idx ]);
401407 if (ret != ESP_OK ) {
402408 ESP_LOGE (EXT_HUB_TAG , "[%d:%d] Port allocation error: %s" , ext_hub_dev -> constant .dev_addr , port_idx + 1 , esp_err_to_name (ret ));
403409 goto fail ;
@@ -418,7 +424,7 @@ static esp_err_t device_port_free(ext_hub_dev_t *ext_hub_dev, uint8_t port_idx)
418424
419425 assert (ext_hub_dev -> single_thread .maxchild != 0 );
420426 assert (p_ext_hub_driver -> constant .port_driver );
421- esp_err_t ret = p_ext_hub_driver -> constant .port_driver -> free (ext_hub_dev -> constant .ports [port_idx ]);
427+ esp_err_t ret = p_ext_hub_driver -> constant .port_driver -> del (ext_hub_dev -> constant .ports [port_idx ]);
422428
423429 if (ret != ESP_OK ) {
424430 ESP_LOGE (EXT_HUB_TAG , "[%d:%d] Unable to free port: %s" , ext_hub_dev -> constant .dev_addr , port_idx + 1 , esp_err_to_name (ret ));
@@ -1038,6 +1044,7 @@ static void handle_device(ext_hub_dev_t *ext_hub_dev)
10381044 // FSM for external Hub
10391045 switch (ext_hub_dev -> single_thread .stage ) {
10401046 case EXT_HUB_STAGE_IDLE :
1047+ stage_pass = true;
10411048 break ;
10421049 case EXT_HUB_STAGE_GET_DEVICE_STATUS :
10431050 case EXT_HUB_STAGE_GET_HUB_DESCRIPTOR :
@@ -1118,8 +1125,7 @@ esp_err_t ext_hub_install(const ext_hub_config_t *config)
11181125{
11191126 esp_err_t ret ;
11201127 ext_hub_driver_t * ext_hub_drv = heap_caps_calloc (1 , sizeof (ext_hub_driver_t ), MALLOC_CAP_DEFAULT );
1121- SemaphoreHandle_t mux_lock = xSemaphoreCreateMutex ();
1122- if (ext_hub_drv == NULL || mux_lock == NULL ) {
1128+ if (ext_hub_drv == NULL ) {
11231129 ret = ESP_ERR_NO_MEM ;
11241130 goto err ;
11251131 }
@@ -1151,9 +1157,6 @@ esp_err_t ext_hub_install(const ext_hub_config_t *config)
11511157 return ESP_OK ;
11521158
11531159err :
1154- if (mux_lock != NULL ) {
1155- vSemaphoreDelete (mux_lock );
1156- }
11571160 heap_caps_free (ext_hub_drv );
11581161 return ret ;
11591162}
@@ -1672,7 +1675,7 @@ esp_err_t ext_hub_port_get_speed(ext_hub_handle_t ext_hub_hdl, uint8_t port_num,
16721675esp_err_t ext_hub_set_port_feature (ext_hub_handle_t ext_hub_hdl , uint8_t port_num , uint8_t feature )
16731676{
16741677 EXT_HUB_ENTER_CRITICAL ();
1675- EXT_HUB_CHECK_FROM_CRIT (p_ext_hub_driver != NULL , ESP_ERR_INVALID_STATE );
1678+ EXT_HUB_CHECK_FROM_CRIT (p_ext_hub_driver != NULL , ESP_ERR_NOT_ALLOWED );
16761679 EXT_HUB_EXIT_CRITICAL ();
16771680
16781681 esp_err_t ret ;
@@ -1701,7 +1704,7 @@ esp_err_t ext_hub_set_port_feature(ext_hub_handle_t ext_hub_hdl, uint8_t port_nu
17011704esp_err_t ext_hub_clear_port_feature (ext_hub_handle_t ext_hub_hdl , uint8_t port_num , uint8_t feature )
17021705{
17031706 EXT_HUB_ENTER_CRITICAL ();
1704- EXT_HUB_CHECK_FROM_CRIT (p_ext_hub_driver != NULL , ESP_ERR_INVALID_STATE );
1707+ EXT_HUB_CHECK_FROM_CRIT (p_ext_hub_driver != NULL , ESP_ERR_NOT_ALLOWED );
17051708 EXT_HUB_EXIT_CRITICAL ();
17061709
17071710 esp_err_t ret ;
@@ -1730,7 +1733,7 @@ esp_err_t ext_hub_clear_port_feature(ext_hub_handle_t ext_hub_hdl, uint8_t port_
17301733esp_err_t ext_hub_get_port_status (ext_hub_handle_t ext_hub_hdl , uint8_t port_num )
17311734{
17321735 EXT_HUB_ENTER_CRITICAL ();
1733- EXT_HUB_CHECK_FROM_CRIT (p_ext_hub_driver != NULL , ESP_ERR_INVALID_STATE );
1736+ EXT_HUB_CHECK_FROM_CRIT (p_ext_hub_driver != NULL , ESP_ERR_NOT_ALLOWED );
17341737 EXT_HUB_EXIT_CRITICAL ();
17351738
17361739 esp_err_t ret ;
0 commit comments