diff --git a/cores/esp32/chip-debug-report.cpp b/cores/esp32/chip-debug-report.cpp index d8dd7793c82..04dea836ad7 100644 --- a/cores/esp32/chip-debug-report.cpp +++ b/cores/esp32/chip-debug-report.cpp @@ -251,55 +251,7 @@ static void printPerimanInfo(void){ continue;//unused pin } chip_report_printf(" %17u : ", i); - switch(type){ - case ESP32_BUS_TYPE_GPIO: chip_report_printf("GPIO\n"); break; - case ESP32_BUS_TYPE_UART_RX: chip_report_printf("UART_RX\n"); break; - case ESP32_BUS_TYPE_UART_TX: chip_report_printf("UART_TX\n"); break; - case ESP32_BUS_TYPE_UART_CTS: chip_report_printf("UART_CTS\n"); break; - case ESP32_BUS_TYPE_UART_RTS: chip_report_printf("UART_RTS\n"); break; -#if SOC_SDM_SUPPORTED - case ESP32_BUS_TYPE_SIGMADELTA: chip_report_printf("SIGMADELTA\n"); break; -#endif -#if SOC_ADC_SUPPORTED - case ESP32_BUS_TYPE_ADC_ONESHOT: chip_report_printf("ADC_ONESHOT\n"); break; - case ESP32_BUS_TYPE_ADC_CONT: chip_report_printf("ADC_CONT\n"); break; -#endif -#if SOC_DAC_SUPPORTED - case ESP32_BUS_TYPE_DAC_ONESHOT: chip_report_printf("DAC_ONESHOT\n"); break; - case ESP32_BUS_TYPE_DAC_CONT: chip_report_printf("DAC_CONT\n"); break; - case ESP32_BUS_TYPE_DAC_COSINE: chip_report_printf("DAC_COSINE\n"); break; -#endif -#if SOC_LEDC_SUPPORTED - case ESP32_BUS_TYPE_LEDC: chip_report_printf("LEDC\n"); break; -#endif -#if SOC_RMT_SUPPORTED - case ESP32_BUS_TYPE_RMT_TX: chip_report_printf("RMT_TX\n"); break; - case ESP32_BUS_TYPE_RMT_RX: chip_report_printf("RMT_RX\n"); break; -#endif -#if SOC_I2S_SUPPORTED - case ESP32_BUS_TYPE_I2S_STD: chip_report_printf("I2S_STD\n"); break; - case ESP32_BUS_TYPE_I2S_TDM: chip_report_printf("I2S_TDM\n"); break; - case ESP32_BUS_TYPE_I2S_PDM_TX: chip_report_printf("I2S_PDM_TX\n"); break; - case ESP32_BUS_TYPE_I2S_PDM_RX: chip_report_printf("I2S_PDM_RX\n"); break; -#endif -#if SOC_I2C_SUPPORTED - case ESP32_BUS_TYPE_I2C_MASTER: chip_report_printf("I2C_MASTER\n"); break; - case ESP32_BUS_TYPE_I2C_SLAVE: chip_report_printf("I2C_SLAVE\n"); break; -#endif -#if SOC_GPSPI_SUPPORTED - case ESP32_BUS_TYPE_SPI_MASTER: chip_report_printf("SPI_MASTER\n"); break; -#endif -#if SOC_SDMMC_HOST_SUPPORTED - case ESP32_BUS_TYPE_SDMMC: chip_report_printf("SDMMC\n"); break; -#endif -#if SOC_TOUCH_SENSOR_SUPPORTED - case ESP32_BUS_TYPE_TOUCH: chip_report_printf("TOUCH\n"); break; -#endif -#if SOC_USB_SERIAL_JTAG_SUPPORTED || SOC_USB_OTG_SUPPORTED - case ESP32_BUS_TYPE_USB: chip_report_printf("USB\n"); break; -#endif - default: chip_report_printf("%d\n", type); break; - } + chip_report_printf("%s\n", perimanGetTypeName(type)); } } diff --git a/cores/esp32/esp32-hal-periman.c b/cores/esp32/esp32-hal-periman.c index f4c7ca8edc5..a547e5a7c17 100644 --- a/cores/esp32/esp32-hal-periman.c +++ b/cores/esp32/esp32-hal-periman.c @@ -18,6 +18,59 @@ static peripheral_pin_item_t pins[SOC_GPIO_PIN_COUNT]; #define GPIO_NOT_VALID(p) ((p >= SOC_GPIO_PIN_COUNT) || ((SOC_GPIO_VALID_GPIO_MASK & (1ULL << p)) == 0)) +const char* perimanGetTypeName(peripheral_bus_type_t type) { + switch(type) { + case ESP32_BUS_TYPE_INIT: return "INIT"; + case ESP32_BUS_TYPE_GPIO: return "GPIO"; + case ESP32_BUS_TYPE_UART_RX: return "UART_RX"; + case ESP32_BUS_TYPE_UART_TX: return "UART_TX"; + case ESP32_BUS_TYPE_UART_CTS: return "UART_CTS"; + case ESP32_BUS_TYPE_UART_RTS: return "UART_RTS"; +#if SOC_SDM_SUPPORTED + case ESP32_BUS_TYPE_SIGMADELTA: return "SIGMADELTA"; +#endif +#if SOC_ADC_SUPPORTED + case ESP32_BUS_TYPE_ADC_ONESHOT: return "ADC_ONESHOT"; + case ESP32_BUS_TYPE_ADC_CONT: return "ADC_CONT"; +#endif +#if SOC_DAC_SUPPORTED + case ESP32_BUS_TYPE_DAC_ONESHOT: return "DAC_ONESHOT"; + case ESP32_BUS_TYPE_DAC_CONT: return "DAC_CONT"; + case ESP32_BUS_TYPE_DAC_COSINE: return "DAC_COSINE"; +#endif +#if SOC_LEDC_SUPPORTED + case ESP32_BUS_TYPE_LEDC: return "LEDC"; +#endif +#if SOC_RMT_SUPPORTED + case ESP32_BUS_TYPE_RMT_TX: return "RMT_TX"; + case ESP32_BUS_TYPE_RMT_RX: return "RMT_RX"; +#endif +#if SOC_I2S_SUPPORTED + case ESP32_BUS_TYPE_I2S_STD: return "I2S_STD"; + case ESP32_BUS_TYPE_I2S_TDM: return "I2S_TDM"; + case ESP32_BUS_TYPE_I2S_PDM_TX: return "I2S_PDM_TX"; + case ESP32_BUS_TYPE_I2S_PDM_RX: return "I2S_PDM_RX"; +#endif +#if SOC_I2C_SUPPORTED + case ESP32_BUS_TYPE_I2C_MASTER: return "I2C_MASTER"; + case ESP32_BUS_TYPE_I2C_SLAVE: return "I2C_SLAVE"; +#endif +#if SOC_GPSPI_SUPPORTED + case ESP32_BUS_TYPE_SPI_MASTER: return "SPI_MASTER"; +#endif +#if SOC_SDMMC_HOST_SUPPORTED + case ESP32_BUS_TYPE_SDMMC: return "SDMMC"; +#endif +#if SOC_TOUCH_SENSOR_SUPPORTED + case ESP32_BUS_TYPE_TOUCH: return "TOUCH"; +#endif +#if SOC_USB_SERIAL_JTAG_SUPPORTED || SOC_USB_OTG_SUPPORTED + case ESP32_BUS_TYPE_USB: return "USB"; +#endif + default: return "UNKNOWN"; + } +} + bool perimanSetPinBus(uint8_t pin, peripheral_bus_type_t type, void * bus){ peripheral_bus_type_t otype = ESP32_BUS_TYPE_INIT; void * obus = NULL; @@ -26,37 +79,38 @@ bool perimanSetPinBus(uint8_t pin, peripheral_bus_type_t type, void * bus){ return false; } if(type >= ESP32_BUS_TYPE_MAX){ - log_e("Invalid type: %u", (unsigned int)type); + log_e("Invalid type: %s (%u) when setting pin %u", perimanGetTypeName(type), (unsigned int)type, pin); return false; } if(type > ESP32_BUS_TYPE_GPIO && bus == NULL){ - log_e("Bus is NULL"); + log_e("Bus is NULL for pin %u with type %s (%u)", pin, perimanGetTypeName(type), (unsigned int)type); return false; } if (type == ESP32_BUS_TYPE_INIT && bus != NULL){ - log_e("Can't set a Bus to INIT Type"); + log_e("Can't set a Bus to INIT Type (pin %u)", pin); return false; - } + } otype = pins[pin].type; obus = pins[pin].bus; if(type == otype && bus == obus){ if (type != ESP32_BUS_TYPE_INIT) { - log_i("Bus already set"); + log_i("Pin %u already has type %s (%u) with bus %p", pin, perimanGetTypeName(type), (unsigned int)type, bus); } return true; } if(obus != NULL){ if(deinit_functions[otype] == NULL){ - log_e("Bus does not have deinit function set"); + log_e("No deinit function for type %s (%u) (pin %u)", perimanGetTypeName(otype), (unsigned int)otype, pin); return false; } if(!deinit_functions[otype](obus)){ - log_e("Previous bus failed to deinit"); + log_e("Deinit function for previous bus type %s (%u) failed (pin %u)", perimanGetTypeName(otype), (unsigned int)otype, pin); return false; } } pins[pin].type = type; pins[pin].bus = bus; + log_v("Pin %u successfully set to type %s (%u) with bus %p", pin, perimanGetTypeName(type), (unsigned int)type, bus); return true; } @@ -66,7 +120,7 @@ void * perimanGetPinBus(uint8_t pin, peripheral_bus_type_t type){ return NULL; } if(type >= ESP32_BUS_TYPE_MAX || type == ESP32_BUS_TYPE_INIT){ - log_e("Invalid type: %u", (unsigned int)type); + log_e("Invalid type %s (%u) for pin %u", perimanGetTypeName(type), (unsigned int)type, pin); return NULL; } if(pins[pin].type == type){ @@ -85,14 +139,15 @@ peripheral_bus_type_t perimanGetPinBusType(uint8_t pin){ bool perimanSetBusDeinit(peripheral_bus_type_t type, peripheral_bus_deinit_cb_t cb){ if(type >= ESP32_BUS_TYPE_MAX || type == ESP32_BUS_TYPE_INIT){ - log_e("Invalid type: %u", (unsigned int)type); + log_e("Invalid type: %s (%u)", perimanGetTypeName(type), (unsigned int)type); return false; } if(cb == NULL){ - log_e("Callback is NULL"); + log_e("Callback is NULL when setting deinit function for type %s (%u)", perimanGetTypeName(type), (unsigned int)type); return false; } deinit_functions[type] = cb; + log_v("Deinit function for type %s (%u) successfully set to %p", perimanGetTypeName(type), (unsigned int)type, cb); return true; } diff --git a/cores/esp32/esp32-hal-periman.h b/cores/esp32/esp32-hal-periman.h index 3cb99e88019..7d6119e803b 100644 --- a/cores/esp32/esp32-hal-periman.h +++ b/cores/esp32/esp32-hal-periman.h @@ -70,6 +70,8 @@ typedef enum { typedef bool (*peripheral_bus_deinit_cb_t)(void * bus); +const char* perimanGetTypeName(peripheral_bus_type_t type); + // Sets the bus type and bus handle for given pin. bool perimanSetPinBus(uint8_t pin, peripheral_bus_type_t type, void * bus);