diff --git a/code/espurna/light.ino b/code/espurna/light.ino index 52ed03d2..9eb8c009 100644 --- a/code/espurna/light.ino +++ b/code/espurna/light.ino @@ -1217,26 +1217,19 @@ void _lightInitCommands() { #endif // TERMINAL_SUPPORT #if LIGHT_PROVIDER == LIGHT_PROVIDER_DIMMER +const unsigned long _light_iomux[16] PROGMEM = { + PERIPHS_IO_MUX_GPIO0_U, PERIPHS_IO_MUX_U0TXD_U, PERIPHS_IO_MUX_GPIO2_U, PERIPHS_IO_MUX_U0RXD_U, + PERIPHS_IO_MUX_GPIO4_U, PERIPHS_IO_MUX_GPIO5_U, PERIPHS_IO_MUX_SD_CLK_U, PERIPHS_IO_MUX_SD_DATA0_U, + PERIPHS_IO_MUX_SD_DATA1_U, PERIPHS_IO_MUX_SD_DATA2_U, PERIPHS_IO_MUX_SD_DATA3_U, PERIPHS_IO_MUX_SD_CMD_U, + PERIPHS_IO_MUX_MTDI_U, PERIPHS_IO_MUX_MTCK_U, PERIPHS_IO_MUX_MTMS_U, PERIPHS_IO_MUX_MTDO_U +}; -unsigned long getIOMux(unsigned long gpio) { - unsigned long muxes[16] = { - PERIPHS_IO_MUX_GPIO0_U, PERIPHS_IO_MUX_U0TXD_U, PERIPHS_IO_MUX_GPIO2_U, PERIPHS_IO_MUX_U0RXD_U, - PERIPHS_IO_MUX_GPIO4_U, PERIPHS_IO_MUX_GPIO5_U, PERIPHS_IO_MUX_SD_CLK_U, PERIPHS_IO_MUX_SD_DATA0_U, - PERIPHS_IO_MUX_SD_DATA1_U, PERIPHS_IO_MUX_SD_DATA2_U, PERIPHS_IO_MUX_SD_DATA3_U, PERIPHS_IO_MUX_SD_CMD_U, - PERIPHS_IO_MUX_MTDI_U, PERIPHS_IO_MUX_MTCK_U, PERIPHS_IO_MUX_MTMS_U, PERIPHS_IO_MUX_MTDO_U - }; - return muxes[gpio]; -} - -unsigned long getIOFunc(unsigned long gpio) { - unsigned long funcs[16] = { - FUNC_GPIO0, FUNC_GPIO1, FUNC_GPIO2, FUNC_GPIO3, - FUNC_GPIO4, FUNC_GPIO5, FUNC_GPIO6, FUNC_GPIO7, - FUNC_GPIO8, FUNC_GPIO9, FUNC_GPIO10, FUNC_GPIO11, - FUNC_GPIO12, FUNC_GPIO13, FUNC_GPIO14, FUNC_GPIO15 - }; - return funcs[gpio]; -} +const unsigned long _light_iofunc[16] PROGMEM = { + FUNC_GPIO0, FUNC_GPIO1, FUNC_GPIO2, FUNC_GPIO3, + FUNC_GPIO4, FUNC_GPIO5, FUNC_GPIO6, FUNC_GPIO7, + FUNC_GPIO8, FUNC_GPIO9, FUNC_GPIO10, FUNC_GPIO11, + FUNC_GPIO12, FUNC_GPIO13, FUNC_GPIO14, FUNC_GPIO15 +}; #endif @@ -1319,11 +1312,12 @@ void lightSetup() { uint32 pwm_duty_init[PWM_CHANNEL_NUM_MAX]; uint32 io_info[PWM_CHANNEL_NUM_MAX][3]; for (unsigned int i=0; i < _light_channel.size(); i++) { + const auto pin = _light_channel.at(i).pin; pwm_duty_init[i] = 0; - io_info[i][0] = getIOMux(_light_channel[i].pin); - io_info[i][1] = getIOFunc(_light_channel[i].pin); - io_info[i][2] = _light_channel[i].pin; - pinMode(_light_channel[i].pin, OUTPUT); + io_info[i][0] = pgm_read_dword(&_light_iomux[pin]); + io_info[i][1] = pgm_read_dword(&_light_iofunc[pin]); + io_info[i][2] = pin; + pinMode(pin, OUTPUT); } pwm_init(LIGHT_MAX_PWM, pwm_duty_init, PWM_CHANNEL_NUM_MAX, io_info); pwm_start();