LOCAL void ICACHE_FLASH_ATTR finger_params_ready(finger_packet *packet) { char response[WEBSERVER_MAX_RESPONSE_LEN]; char data_str[WEBSERVER_MAX_VALUE]; json_data( response, MOD_FINGER, OK_STR, json_sprintf( data_str, "\"Address\" : \"0x%08X\", " "\"DBSize\" : %d, " "\"DBStored\" : %d, " "\"FirstFree\" : %d, " "\"SecurityLevel\" : %d, " "\"Mode\" : \"%s\"", finger_address(), finger_db_size(), finger_db_stored(), finger_first_free_id(), finger_security_level(), finger_mode_str(finger_current_mode) ), NULL ); user_event_raise(FINGER_URL, response); }
LOCAL void ICACHE_FLASH_ATTR finger_find_done(finger_packet *packet) { if (packet->data[0] != FINGER_OK) { finger_default(packet); finger_start_read(); return; } uint16 id = packet->data[1]*256 + packet->data[2]; uint16 score = packet->data[3]*256 + packet->data[4]; char response[WEBSERVER_MAX_VALUE]; char data[WEBSERVER_MAX_VALUE]; json_status( response, MOD_FINGER, "Match found", json_sprintf( data, "\"Match\" : {\"ID\" : %d, \"Score\" : %d}", id, score ) ); #if FINGER_DEBUG debug("FINGER: Match: ID = %d, Score = %d\n", id, score); #endif user_event_raise(FINGER_URL, response); finger_start_read(); }
LOCAL void ICACHE_FLASH_ATTR finger_save_done(finger_packet *packet) { finger_current_mode = FINGER_READ; if (packet->data[0] != FINGER_OK) { finger_default(packet); finger_frech_params(); finger_start_read(); return; } char response[WEBSERVER_MAX_VALUE]; char data[WEBSERVER_MAX_VALUE]; json_status( response, MOD_FINGER, "New fingerprint stored", json_sprintf(data, "\"ID\" : %d", finger_first_free_id()) ); #if FINGER_DEBUG debug("FINGER: Stored: ID = %d\n", finger_first_free_id()); #endif user_event_raise(FINGER_URL, response); finger_frech_params(); finger_start_read(); }
LOCAL void ICACHE_FLASH_ATTR finger_timeout(finger_packet *packet) { char response[WEBSERVER_MAX_VALUE]; finger_clear_timeout(packet); json_error(response, MOD_FINGER, TIMEOUT, NULL); user_event_raise(FINGER_URL, response); finger_start_read(); }
LOCAL void ICACHE_FLASH_ATTR dimmer_event(i2c_config *config) { LOCAL uint8 count = 0; i2c_status status; dimmer_config_data *config_data = (dimmer_config_data *)config->data; uint8 old_relay = config_data->relay; uint8 old_brightness = config_data->brightness; uint16 old_current = config_data->current; count++; uint8 addr = config->address; dimmer_init(&addr, &status); if ( status == I2C_OK && ( config_data->relay != old_relay || config_data->brightness != old_brightness || abs(config_data->current - old_current) > dimmer_threshold || (count > dimmer_each && config_data->current != old_current) ) ) { count = 0; char response[WEBSERVER_MAX_VALUE]; dimmer_response(config, response, false); user_event_raise(DIMMER_URL, response); } if (count > dimmer_each) { count = 0; } }
LOCAL void ICACHE_FLASH_ATTR mod_tc_mk2_event(i2c_config *config) { char response[WEBSERVER_MAX_RESPONSE_LEN]; LOCAL sint16 old_temperature = 0; LOCAL uint8 count = 0; i2c_status status; tc_config_data *config_data = (tc_config_data *)config->data; uint8 addr = config->address; tc_init(&addr, &status); if (status != I2C_OK) { return; } count++; mod_tc_mk2_read(config, response, false); if (abs(config_data->temperature - old_temperature) > tc_threshold || (count > tc_each && config_data->temperature != old_temperature)) { #if MOD_TC_MO2_DEBUG debug("MOD-TC-MK2: Temperature change [%d] -> [%d]\n", old_temperature, config_data->temperature); #endif count = 0; old_temperature = config_data->temperature; user_event_raise(MOD_TC_MK2_URL, response); } }
void ICACHE_FLASH_ATTR wifi_scan_done(void *arg, STATUS status) { wifi_scan_in_progress = false; wifi_scan_clean(); if (status != OK) { return; } // count AP data struct bss_info *ap = (struct bss_info *)arg; while (ap = ap->next.stqe_next) { wifi_scan_ap_count++; debug("SSID: [%s] Strength [%d] Mode: [%d]\n", ap->ssid, ap->rssi, ap->authmode); } // Store AP data wifi_scan_result = (ap_info **)os_malloc(sizeof(ap_info *) * wifi_scan_ap_count); uint8 i=0; ap = (struct bss_info *)arg; while (ap = ap->next.stqe_next) { wifi_scan_result[i] = (ap_info *)os_malloc(sizeof(ap_info)); os_memcpy(wifi_scan_result[i]->ssid, ap->ssid, 32); wifi_scan_result[i]->rssi = ap->rssi; wifi_scan_result[i]->authmode = ap->authmode; i++; } setTimeout(wifi_scan_clean, NULL, 30000); char response[WEBSERVER_MAX_RESPONSE_LEN]; wifi_scan_get_result(response); user_event_raise(WIFI_SCAN_URL, response); }
LOCAL void ICACHE_FLASH_ATTR finger_default(finger_packet *packet) { if (packet->pid == FINGER_ACK && packet->data[0] != FINGER_OK) { char response[WEBSERVER_MAX_VALUE]; json_error(response, MOD_FINGER, finger_error_str(packet->data[0]), NULL); user_event_raise(FINGER_URL, response); } }
LOCAL void ICACHE_FLASH_ATTR user_relay_off() { char response[WEBSERVER_MAX_VALUE]; relay_timer = 0; user_relay_set(0); user_relay_state(response); user_event_raise(RELAY_URL, response); }
void ICACHE_FLASH_ATTR user_event_connect() { #if EVENTS_DEBUG debug("EVENTS: Station connected\n"); debug("Free heap: %d\n\n", system_get_free_heap_size()); #endif char status[WEBSERVER_MAX_VALUE]; user_event_raise(NULL, json_status(status, ESP8266, CONNECTED, NULL)); }
LOCAL void ICACHE_FLASH_ATTR emtr_timeout() { char response[WEBSERVER_MAX_VALUE]; json_error(response, MOD_EMTR, TIMEOUT, NULL); user_event_raise(EMTR_URL, response); emtr_clear_timeout(); emtr_start_read(); }
uint8 ICACHE_FLASH_ATTR user_relay_toggle() { char response[WEBSERVER_MAX_VALUE]; user_relay_set(2); user_relay_state(response); user_event_raise(RELAY_URL, response); return relay_state; }
void ICACHE_FLASH_ATTR user_event_reconnect() { #if EVENTS_DEBUG debug("EVENTS: Reconnect station\n"); #endif char status[WEBSERVER_MAX_VALUE]; user_event_raise(NULL, json_status(status, ESP8266, RECONNECT, NULL)); websocket_close_all(RECONNECT, NULL); long_poll_close_all(); }
void ICACHE_FLASH_ATTR user_event_connect() { #if EVENTS_DEBUG debug("EVENTS: Station connected\n"); memory_info(); #endif char status[WEBSERVER_MAX_RESPONSE_LEN]; user_event_raise( USER_CONFIG_STATION_URL, json_data(status, ESP8266, CONNECTED, (char *)config_wifi_station(), NULL) ); }
void ICACHE_FLASH_ATTR user_event_system_timer() { char status[WEBSERVER_MAX_RESPONSE_LEN]; char data[WEBSERVER_MAX_RESPONSE_LEN]; user_event_raise( NULL, json_status( status, ESP8266, "SysTimer", json_sprintf( data, "\"Timer\": %d", system_get_time() ) ) ); }
LOCAL void ICACHE_FLASH_ATTR button_set_response(char *state) { char response[WEBSERVER_MAX_VALUE]; debug("BUTTON: %s\n", state); char data[WEBSERVER_MAX_VALUE]; json_data( response, ESP8266, OK_STR, json_sprintf( data, "\"Button\" : \"%s\"", state ), NULL ); user_event_raise(BUTTON_URL, response); }
void ICACHE_FLASH_ATTR adc_update() { LOCAL uint16 old_state = 0; LOCAL uint8 count = 0; char response[WEBSERVER_MAX_VALUE]; adc_read(response, false); count++; if (abs(state - old_state) > adc_threshold || (count >= adc_each && state != old_state)) { #if ADC_DEBUG debug("ADC: Change [%d] -> [%d]\n", old_state, state); #endif old_state = state; count = 0; user_event_raise(ADC_URL, response); } }
void ICACHE_FLASH_ATTR mod_led_8x8_rgb_scroll_done() { char status[WEBSERVER_MAX_VALUE]; user_event_raise(MOD_LED_8x8_RGB_URL, json_status(status, MOD_LED8x8RGB, DONE, NULL)); }
LOCAL void ICACHE_FLASH_ATTR emtr_read_done(emtr_packet *packet) { LOCAL emtr_output_registers *registers = NULL; LOCAL uint32 time = 0; LOCAL uint32 interval = 0; LOCAL uint32 now = 0; now = system_get_time(); interval = (time != 0) ? (now - time) / 1000 : 0 ; time = now; if (registers == NULL) { registers = (emtr_output_registers *)os_zalloc(sizeof(emtr_output_registers)); } emtr_parse_output(packet, registers); char event_str[20]; os_memset(event_str, 0, sizeof(event_str)); char response[WEBSERVER_MAX_RESPONSE_LEN]; char data_str[WEBSERVER_MAX_RESPONSE_LEN]; json_data( response, MOD_EMTR, OK_STR, json_sprintf( data_str, "\"Address\" : \"0x%04X\", " "\"CounterActive\" : %d, " "\"CounterApparent\" : %d, " "\"Interval\" : %d, " "\"CurrentRMS\" : %d, " "\"VoltageRMS\" : %d, " "\"ActivePower\" : %d, " "\"ReactivePower\" : %d, " "\"ApparentPower\" : %d, " "\"PowerFactor\" : %d, " "\"LineFrequency\" : %d, " "\"ThermistorVoltage\" : %d, " "\"EventFlag\" : %d, " "\"SystemStatus\" : \"0x%04X\"", emtr_address(), emtr_counter_active(), emtr_counter_apparent(), interval, registers->current_rms, registers->voltage_rms, registers->active_power, registers->reactive_power, registers->apparent_power, registers->power_factor, registers->line_frequency, registers->thermistor_voltage, registers->event_flag, registers->system_status ), NULL ); emtr_counter_add( registers->active_power * interval / 1000, registers->apparent_power * interval / 1000 ); user_event_raise(EMTR_URL, response); emtr_start_read(); if (registers->event_flag != 0) { emtr_clear_event(registers->event_flag, NULL); } }
LOCAL void ICACHE_FLASH_ATTR user_switch2_event() { char response[WEBSERVER_MAX_VALUE]; user_switch2_state(response); user_event_raise(SWITCH2_URL, response); }