1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- // Copyright 2015 by Thorsten von Eicken, see LICENSE.txt
- #include <esp8266.h>
- #include <config.h>
- #include <serled.h>
- static ETSTimer serledTimer;
- static void ICACHE_FLASH_ATTR setSerled(int on) {
- int8_t pin = flashConfig.ser_led_pin;
- if (pin < 0) return; // disabled
- // LED is active-low
- if (on) {
- gpio_output_set(0, (1<<pin), (1<<pin), 0);
- } else {
- gpio_output_set((1<<pin), 0, (1<<pin), 0);
- }
- }
- static void ICACHE_FLASH_ATTR serledTimerCb(void *v) {
- setSerled(0);
- }
- void ICACHE_FLASH_ATTR serledFlash(int duration) {
- setSerled(1);
- os_timer_disarm(&serledTimer);
- os_timer_setfn(&serledTimer, serledTimerCb, NULL);
- os_timer_arm(&serledTimer, duration, 0);
- }
- void ICACHE_FLASH_ATTR serledInit(void) {
- int8_t pin = flashConfig.ser_led_pin;
- if (pin >= 0) {
- makeGpio(pin);
- gpio_output_set(0, 0, (1<<pin), 0);
- serledFlash(1000); // turn it on for 1 second
- }
- #ifdef SERLED_DBG
- os_printf("SER led=%d\n", pin);
- #endif
- }
- // Make a pin be GPIO, i.e. set the mux so the pin has the gpio function
- void ICACHE_FLASH_ATTR makeGpio(uint8_t pin) {
- uint32_t addr;
- uint8_t func = 3;
- switch (pin) {
- case 0:
- addr = PERIPHS_IO_MUX_GPIO0_U;
- func = 0;
- break;
- case 1:
- addr = PERIPHS_IO_MUX_U0TXD_U;
- break;
- case 2:
- addr = PERIPHS_IO_MUX_GPIO2_U;
- func = 0;
- break;
- case 3:
- addr = PERIPHS_IO_MUX_U0RXD_U;
- break;
- case 4:
- addr = PERIPHS_IO_MUX_GPIO4_U;
- func = 0;
- break;
- case 5:
- addr = PERIPHS_IO_MUX_GPIO5_U;
- func = 0;
- break;
- case 6:
- case 7:
- case 8:
- case 9:
- case 10:
- case 11:
- addr = PERIPHS_IO_MUX_SD_CMD_U - 4 * (11-pin);
- break;
- case 12:
- case 13:
- case 14:
- case 15:
- addr = PERIPHS_IO_MUX_MTDO_U - 4 * (15-pin);
- break;
- default:
- return;
- }
- PIN_FUNC_SELECT(addr, func);
- }
|