esp-open-rtos/examples/esphttpd/io.c

73 lines
1.9 KiB
C
Raw Normal View History

/*
* ----------------------------------------------------------------------------
* "THE BEER-WARE LICENSE" (Revision 42):
* Jeroen Domburg <jeroen@spritesmods.com> wrote this file. As long as you retain
* this notice you can do whatever you want with this stuff. If we meet some day,
* and you think this stuff is worth it, you can buy me a beer in return.
* ----------------------------------------------------------------------------
*/
#include <espressif/esp_common.h>
//#include <c_types.h>
#include <etstimer.h>
#include <espressif/esp_system.h>
#include <espressif/esp_timer.h>
#include <espressif/esp_wifi.h>
#include <espressif/esp_sta.h>
#include <espressif/esp_misc.h>
#include <espressif/osapi.h>
#include <espressif/esp8266/eagle_soc.h>
#include <espressif/esp8266/gpio_register.h>
#include <espressif/esp8266/pin_mux_register.h>
#define LEDGPIO 2
#define BTNGPIO 0
#ifndef ESP32
static ETSTimer resetBtntimer;
#endif
void ioLed(int ena) {
#ifndef ESP32
//gpio_output_set is overkill. ToDo: use better mactos
if (ena) {
sdk_gpio_output_set((1<<LEDGPIO), 0, (1<<LEDGPIO), 0);
} else {
sdk_gpio_output_set(0, (1<<LEDGPIO), (1<<LEDGPIO), 0);
}
#endif
}
#ifndef ESP32
static void resetBtnTimerCb(void *arg) {
static int resetCnt=0;
if ((GPIO_REG_READ(GPIO_IN_ADDRESS)&(1<<BTNGPIO))==0) {
resetCnt++;
} else {
if (resetCnt>=6) { //3 sec pressed
sdk_wifi_station_disconnect();
sdk_wifi_set_opmode(STATIONAP_MODE); //reset to AP+STA mode
printf("Reset to AP mode. Restarting system...\n");
sdk_system_restart();
}
resetCnt=0;
}
}
#endif
void ioInit() {
#ifndef ESP32
PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO2_U, FUNC_GPIO2);
PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO0_U, FUNC_GPIO0);
sdk_gpio_output_set(0, 0, (1<<LEDGPIO), (1<<BTNGPIO));
sdk_os_timer_disarm(&resetBtntimer);
sdk_os_timer_setfn(&resetBtntimer, resetBtnTimerCb, NULL);
sdk_os_timer_arm(&resetBtntimer, 500, 1);
#endif
}