123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159 |
- /******************************************************************************
- * Copyright 2013-2014 Espressif Systems (Wuxi)
- *
- * FileName: user_plug.c
- *
- * Description: plug demo's function realization
- *
- * Modification history:
- * 2014/5/1, v1.0 create this file.
- *******************************************************************************/
- #include "ets_sys.h"
- #include "osapi.h"
- #include "os_type.h"
- #include "mem.h"
- #include "user_interface.h"
- #include "user_plug.h"
- #if PLUG_DEVICE
- LOCAL struct plug_saved_param plug_param;
- LOCAL struct keys_param keys;
- LOCAL struct single_key_param *single_key[PLUG_KEY_NUM];
- LOCAL os_timer_t link_led_timer;
- LOCAL uint8 link_led_level = 0;
- /******************************************************************************
- * FunctionName : user_plug_get_status
- * Description : get plug's status, 0x00 or 0x01
- * Parameters : none
- * Returns : uint8 - plug's status
- *******************************************************************************/
- uint8 ICACHE_FLASH_ATTR
- user_plug_get_status(void)
- {
- return plug_param.status;
- }
- /******************************************************************************
- * FunctionName : user_plug_set_status
- * Description : set plug's status, 0x00 or 0x01
- * Parameters : uint8 - status
- * Returns : none
- *******************************************************************************/
- void ICACHE_FLASH_ATTR
- user_plug_set_status(bool status)
- {
- if (status != plug_param.status) {
- if (status > 1) {
- os_printf("error status input!\n");
- return;
- }
- plug_param.status = status;
- PLUG_STATUS_OUTPUT(PLUG_RELAY_LED_IO_NUM, status);
- }
- }
- /******************************************************************************
- * FunctionName : user_plug_short_press
- * Description : key's short press function, needed to be installed
- * Parameters : none
- * Returns : none
- *******************************************************************************/
- LOCAL void ICACHE_FLASH_ATTR
- user_plug_short_press(void)
- {
- user_plug_set_status((~plug_param.status) & 0x01);
- spi_flash_erase_sector(PRIV_PARAM_START_SEC + PRIV_PARAM_SAVE);
- spi_flash_write((PRIV_PARAM_START_SEC + PRIV_PARAM_SAVE) * SPI_FLASH_SEC_SIZE,
- (uint32 *)&plug_param, sizeof(struct plug_saved_param));
- }
- /******************************************************************************
- * FunctionName : user_plug_long_press
- * Description : key's long press function, needed to be installed
- * Parameters : none
- * Returns : none
- *******************************************************************************/
- LOCAL void ICACHE_FLASH_ATTR
- user_plug_long_press(void)
- {
- user_esp_platform_set_active(0);
- system_restore();
- system_restart();
- }
- LOCAL void ICACHE_FLASH_ATTR
- user_link_led_init(void)
- {
- PIN_FUNC_SELECT(PLUG_LINK_LED_IO_MUX, PLUG_LINK_LED_IO_FUNC);
- }
- void ICACHE_FLASH_ATTR
- user_link_led_output(uint8 level)
- {
- GPIO_OUTPUT_SET(GPIO_ID_PIN(PLUG_LINK_LED_IO_NUM), level);
- }
- LOCAL void ICACHE_FLASH_ATTR
- user_link_led_timer_cb(void)
- {
- link_led_level = (~link_led_level) & 0x01;
- GPIO_OUTPUT_SET(GPIO_ID_PIN(PLUG_LINK_LED_IO_NUM), link_led_level);
- }
- void ICACHE_FLASH_ATTR
- user_link_led_timer_init(void)
- {
- os_timer_disarm(&link_led_timer);
- os_timer_setfn(&link_led_timer, (os_timer_func_t *)user_link_led_timer_cb, NULL);
- os_timer_arm(&link_led_timer, 50, 1);
- link_led_level = 0;
- GPIO_OUTPUT_SET(GPIO_ID_PIN(PLUG_LINK_LED_IO_NUM), link_led_level);
- }
- void ICACHE_FLASH_ATTR
- user_link_led_timer_done(void)
- {
- os_timer_disarm(&link_led_timer);
- GPIO_OUTPUT_SET(GPIO_ID_PIN(PLUG_LINK_LED_IO_NUM), 0);
- }
- /******************************************************************************
- * FunctionName : user_plug_init
- * Description : init plug's key function and relay output
- * Parameters : none
- * Returns : none
- *******************************************************************************/
- void ICACHE_FLASH_ATTR
- user_plug_init(void)
- {
- user_link_led_init();
- wifi_status_led_install(PLUG_WIFI_LED_IO_NUM, PLUG_WIFI_LED_IO_MUX, PLUG_WIFI_LED_IO_FUNC);
- single_key[0] = key_init_single(PLUG_KEY_0_IO_NUM, PLUG_KEY_0_IO_MUX, PLUG_KEY_0_IO_FUNC,
- user_plug_long_press, user_plug_short_press);
- keys.key_num = PLUG_KEY_NUM;
- keys.single_key = single_key;
- key_init(&keys);
- spi_flash_read((PRIV_PARAM_START_SEC + PRIV_PARAM_SAVE) * SPI_FLASH_SEC_SIZE,
- (uint32 *)&plug_param, sizeof(struct plug_saved_param));
- PIN_FUNC_SELECT(PLUG_RELAY_LED_IO_MUX, PLUG_RELAY_LED_IO_FUNC);
- // no used SPI Flash
- if (plug_param.status == 0xff) {
- plug_param.status = 1;
- }
- PLUG_STATUS_OUTPUT(PLUG_RELAY_LED_IO_NUM, plug_param.status);
- }
- #endif
|