You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
esp-link/serial/serled.c

88 lines
1.8 KiB

// 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);
}