LOCAL void ICACHE_FLASH_ATTR emtr_events_read() { if (device_get_uart() != UART_EMTR) { #if EMTR_DEBUG debug("EMTR: %s\n", DEVICE_NOT_FOUND); #endif return; } setTimeout(emtr_get_event, emtr_event_done, 100); }
LOCAL void ICACHE_FLASH_ATTR emtr_start_read() { LOCAL uint32 emtr_read_timer = 0; if (device_get_uart() != UART_EMTR) { #if EMTR_DEBUG debug("EMTR: %s\n", DEVICE_NOT_FOUND); #endif return; } clearTimeout(emtr_read_timer); emtr_read_timer = setTimeout(emtr_get_output, emtr_read_done, emtr_read_interval); }
LOCAL void ICACHE_FLASH_ATTR finger_start_read() { LOCAL uint32 finger_read_timer = 0; if (device_get_uart() != UART_FINGER) { #if FINGER_DEBUG debug("FINGER: %s\n", DEVICE_NOT_FOUND); #endif return; } finger_current_buff = 0; clearTimeout(finger_read_timer); finger_read_timer = setTimeout(finger_gen_img, finger_read, FINGER_TIMEOUT); }
LOCAL void ICACHE_FLASH_ATTR emtr_event_done(emtr_packet *packet) { if (device_get_uart() != UART_EMTR) { #if EMTR_DEBUG debug("EMTR: %s\n", DEVICE_NOT_FOUND); #endif return; } if (emtr_registers.event == NULL) { emtr_registers.event = (emtr_event_registers *)os_zalloc(sizeof(emtr_event_registers)); } emtr_parse_event(packet, emtr_registers.event); }
void ICACHE_FLASH_ATTR rfid_init() { if (device_get_uart() != UART_NONE) { return; } rfid_module module = MOD_RFID125; // stdout_disable(); uart_char_in_set(rfid_char_in); if (module == MOD_RFID125 || module == RFID_ANY) { uart_init(UART0, BIT_RATE_9600, EIGHT_BITS, NONE_BITS, ONE_STOP_BIT); } if (module == MOD_RFID1356) { uart_init(UART0, BIT_RATE_57600, EIGHT_BITS, NONE_BITS, ONE_STOP_BIT); } setTimeout(rfid_info, NULL, 50); setTimeout(rfid_check, module, 400); }
void ICACHE_FLASH_ATTR finger_handler( struct espconn *pConnection, request_method method, char *url, char *data, uint16 data_len, uint32 content_len, char *response, uint16 response_len ) { if (device_get_uart() != UART_FINGER) { json_error(response, MOD_FINGER, DEVICE_NOT_FOUND, NULL); return; } struct jsonparse_state parser; int type, delete_len; uint16 delete_id; if (method == POST && data != NULL && data_len != 0) { jsonparse_setup(&parser, data, data_len); while ((type = jsonparse_next(&parser)) != 0) { if (type == JSON_TYPE_PAIR_NAME) { if (jsonparse_strcmp_value(&parser, "Address") == 0) { jsonparse_next(&parser); jsonparse_next(&parser); char *convert_err = NULL; char address_str[20]; jsonparse_copy_value(&parser, address_str, 20); uint32 address = strtoul(address_str, &convert_err, 16); if (*convert_err == '\0' && address != finger_address()) { finger_set_address(address, finger_default); } } else if (jsonparse_strcmp_value(&parser, "SecurityLevel") == 0) { jsonparse_next(&parser); jsonparse_next(&parser); uint8 security_level = jsonparse_get_value_as_int(&parser); if (security_level != finger_security_level()) { finger_set_security_lefel(security_level, finger_default); } } else if (jsonparse_strcmp_value(&parser, "Mode") == 0) { jsonparse_next(&parser); jsonparse_next(&parser); if (jsonparse_strcmp_value(&parser, "Read") == 0) { finger_current_mode = FINGER_READ; } else if (jsonparse_strcmp_value(&parser, "New") == 0) { finger_current_mode = FINGER_NEW; } else if (jsonparse_strcmp_value(&parser, "Delete") == 0) { finger_current_mode = FINGER_DELETE; } else if (jsonparse_strcmp_value(&parser, "Empty DB") == 0) { finger_current_mode = FINGER_EMPTY_DB; } } else if (jsonparse_strcmp_value(&parser, "DeleteID") == 0) { jsonparse_next(&parser); jsonparse_next(&parser); delete_id = jsonparse_get_value_as_int(&parser); delete_len = jsonparse_get_len(&parser); } } } if (finger_current_mode == FINGER_DELETE && delete_len > 0) { finger_current_mode = FINGER_READ; finger_remove(delete_id, NULL); #if FINGER_DEBUG debug("FINGER: Delete ID: %d\n", delete_id); #endif } if (finger_current_mode == FINGER_EMPTY_DB) { finger_current_mode = FINGER_READ; finger_empty_db(NULL); #if FINGER_DEBUG debug("FINGER: Empty DB\n"); #endif } } webserver_set_status(0); finger_frech_params(); finger_start_read(); }
void ICACHE_FLASH_ATTR emtr_handler( struct espconn *pConnection, request_method method, char *url, char *data, uint16 data_len, uint32 content_len, char *response, uint16 response_len ) { if (device_get_uart() != UART_EMTR) { json_error(response, MOD_EMTR, DEVICE_NOT_FOUND, NULL); return; } if (emtr_registers.calibration == NULL) { emtr_registers.calibration = (emtr_calibration_registers *)os_zalloc(sizeof(emtr_calibration_registers)); } if (emtr_registers.event == NULL) { emtr_registers.event = (emtr_event_registers *)os_zalloc(sizeof(emtr_event_registers)); } struct jsonparse_state parser; int type; bool set_counter = false; emtr_mode mode = emtr_current_mode; _uint64_ counter_active = emtr_counter_active(); _uint64_ counter_apparent = emtr_counter_apparent(); if (method == POST && data != NULL && data_len != 0) { jsonparse_setup(&parser, data, data_len); while ((type = jsonparse_next(&parser)) != 0) { if (type == JSON_TYPE_PAIR_NAME) { if (jsonparse_strcmp_value(&parser, "Mode") == 0) { jsonparse_next(&parser); jsonparse_next(&parser); if (jsonparse_strcmp_value(&parser, "Log") == 0) { emtr_current_mode = EMTR_LOG; } else if (jsonparse_strcmp_value(&parser, "Configure") == 0) { emtr_current_mode = EMTR_CONFIGURE; } else if (jsonparse_strcmp_value(&parser, "Calibration") == 0) { emtr_current_mode = EMTR_CALIBRATION; } } else if (jsonparse_strcmp_value(&parser, "ReadInterval") == 0) { jsonparse_next(&parser); jsonparse_next(&parser); emtr_read_interval = jsonparse_get_value_as_int(&parser); } else if (jsonparse_strcmp_value(&parser, "CounterActive") == 0) { jsonparse_next(&parser); jsonparse_next(&parser); counter_active = jsonparse_get_value_as_int(&parser); set_counter = true; } else if (jsonparse_strcmp_value(&parser, "CounterApparent") == 0) { jsonparse_next(&parser); jsonparse_next(&parser); counter_apparent = jsonparse_get_value_as_int(&parser); set_counter = true; } if (mode == EMTR_CONFIGURE) { if (jsonparse_strcmp_value(&parser, "OverCurrentLimit") == 0) { jsonparse_next(&parser); jsonparse_next(&parser); emtr_registers.event->over_current_limit = jsonparse_get_value_as_int(&parser); } else if (jsonparse_strcmp_value(&parser, "OverPowerLimit") == 0) { jsonparse_next(&parser); jsonparse_next(&parser); emtr_registers.event->over_power_limit = jsonparse_get_value_as_int(&parser); } else if (jsonparse_strcmp_value(&parser, "OverFrequencyLimit") == 0) { jsonparse_next(&parser); jsonparse_next(&parser); emtr_registers.event->over_frequency_limit = jsonparse_get_value_as_int(&parser); } else if (jsonparse_strcmp_value(&parser, "UnderFrequencyLimit") == 0) { jsonparse_next(&parser); jsonparse_next(&parser); emtr_registers.event->under_frequency_limit = jsonparse_get_value_as_int(&parser); } else if (jsonparse_strcmp_value(&parser, "OverTemperatureLimit") == 0) { jsonparse_next(&parser); jsonparse_next(&parser); emtr_registers.event->over_temperature_limit = jsonparse_get_value_as_int(&parser); } else if (jsonparse_strcmp_value(&parser, "UnderTemperatureLimit") == 0) { jsonparse_next(&parser); jsonparse_next(&parser); emtr_registers.event->under_temperature_limit = jsonparse_get_value_as_int(&parser); } else if (jsonparse_strcmp_value(&parser, "VoltageSagLimit") == 0) { jsonparse_next(&parser); jsonparse_next(&parser); emtr_registers.event->voltage_sag_limit = jsonparse_get_value_as_int(&parser); } else if (jsonparse_strcmp_value(&parser, "VoltageSurgeLimit") == 0) { jsonparse_next(&parser); jsonparse_next(&parser); emtr_registers.event->voltage_surge_limit = jsonparse_get_value_as_int(&parser); } else if (jsonparse_strcmp_value(&parser, "OverCurrentHold") == 0) { jsonparse_next(&parser); jsonparse_next(&parser); emtr_registers.event->over_current_hold = jsonparse_get_value_as_int(&parser); } else if (jsonparse_strcmp_value(&parser, "OverPowerHold") == 0) { jsonparse_next(&parser); jsonparse_next(&parser); emtr_registers.event->over_power_hold = jsonparse_get_value_as_int(&parser); } else if (jsonparse_strcmp_value(&parser, "OverFrequencyHold") == 0) { jsonparse_next(&parser); jsonparse_next(&parser); emtr_registers.event->over_frequency_hold = jsonparse_get_value_as_int(&parser); } else if (jsonparse_strcmp_value(&parser, "UnderFrequencyHold") == 0) { jsonparse_next(&parser); jsonparse_next(&parser); emtr_registers.event->under_frequency_hold = jsonparse_get_value_as_int(&parser); } else if (jsonparse_strcmp_value(&parser, "OverTemperatureHold") == 0) { jsonparse_next(&parser); jsonparse_next(&parser); emtr_registers.event->over_temperature_hold = jsonparse_get_value_as_int(&parser); } else if (jsonparse_strcmp_value(&parser, "UnderTemperatureHold") == 0) { jsonparse_next(&parser); jsonparse_next(&parser); emtr_registers.event->under_temperature_hold = jsonparse_get_value_as_int(&parser); } else if (jsonparse_strcmp_value(&parser, "EventEnable") == 0) { jsonparse_next(&parser); jsonparse_next(&parser); emtr_registers.event->event_enable = jsonparse_get_value_as_int(&parser); } else if (jsonparse_strcmp_value(&parser, "EventMaskCritical") == 0) { jsonparse_next(&parser); jsonparse_next(&parser); emtr_registers.event->event_mask_critical = jsonparse_get_value_as_int(&parser); } else if (jsonparse_strcmp_value(&parser, "EventMaskStandard") == 0) { jsonparse_next(&parser); jsonparse_next(&parser); emtr_registers.event->event_mask_standard = jsonparse_get_value_as_int(&parser); } else if (jsonparse_strcmp_value(&parser, "EventTest") == 0) { jsonparse_next(&parser); jsonparse_next(&parser); emtr_registers.event->event_test = jsonparse_get_value_as_int(&parser); } else if (jsonparse_strcmp_value(&parser, "EventClear") == 0) { jsonparse_next(&parser); jsonparse_next(&parser); emtr_registers.event->event_clear = jsonparse_get_value_as_int(&parser); } } } } if (mode == EMTR_CONFIGURE) { emtr_set_event(emtr_registers.event, NULL); } if (set_counter) { emtr_set_counter(counter_active, counter_apparent, NULL); } } char data_str[WEBSERVER_MAX_RESPONSE_LEN]; if (emtr_current_mode == EMTR_CALIBRATION) { json_data( response, MOD_EMTR, OK_STR, json_sprintf( data_str, "\"Address\" : \"0x%04X\", " "\"Mode\" : \"%s\", " "\"CounterActive\" : %d, " "\"CounterApparent\" : %d, " "\"ReadInterval\" : %d, " "\"GainCurrentRMS\" : %d, " "\"GainVoltageRMS\" : %d, " "\"GainActivePower\" : %d, " "\"GainReactivePower\" : %d, " "\"OffsetCurrentRMS\" : %d, " "\"OffsetActivePower\" : %d, " "\"OffsetReactivePower\" : %d, " "\"DCOffsetCurrent\" : %d, " "\"PhaseCompensation\" : %d, " "\"ApparentPowerDivisor\" : %d, " "\"SystemConfiguration\" : \"0x%08X\", " "\"DIOConfiguration\" : \"0x%04X\", " "\"Range\" : \"0x%08X\", " "\"CalibrationCurrent\" : %d, " "\"CalibrationVoltage\" : %d, " "\"CalibrationActivePower\" : %d, " "\"CalibrationReactivePower\" : %d, " "\"AccumulationInterval\" : %d", emtr_address(), emtr_mode_str(emtr_current_mode), emtr_counter_active(), emtr_counter_apparent(), emtr_read_interval, emtr_registers.calibration->gain_current_rms, emtr_registers.calibration->gain_voltage_rms, emtr_registers.calibration->gain_active_power, emtr_registers.calibration->gain_reactive_power, emtr_registers.calibration->offset_current_rms, emtr_registers.calibration->offset_active_power, emtr_registers.calibration->offset_reactive_power, emtr_registers.calibration->dc_offset_current, emtr_registers.calibration->phase_compensation, emtr_registers.calibration->apparent_power_divisor, emtr_registers.calibration->system_configuration, emtr_registers.calibration->dio_configuration, emtr_registers.calibration->range, emtr_registers.calibration->calibration_current, emtr_registers.calibration->calibration_voltage, emtr_registers.calibration->calibration_active_power, emtr_registers.calibration->calibration_reactive_power, emtr_registers.calibration->accumulation_interval ), NULL ); setTimeout(emtr_calibration_read, NULL, 1500); } else if (emtr_current_mode == EMTR_CONFIGURE) { json_data( response, MOD_EMTR, OK_STR, json_sprintf( data_str, "\"Address\" : \"0x%04X\", " "\"Mode\" : \"%s\", " "\"CounterActive\" : %d, " "\"CounterApparent\" : %d, " "\"ReadInterval\" : %d, " "\"OverCurrentLimit\" : %d, " "\"OverPowerLimit\" : %d, " "\"OverFrequencyLimit\" : %d, " "\"UnderFrequencyLimit\" : %d, " "\"OverTemperatureLimit\" : %d, " "\"UnderTemperatureLimit\" : %d, " "\"VoltageSagLimit\" : %d, " "\"VoltageSurgeLimit\" : %d, " "\"OverCurrentHold\" : %d, " "\"OverPowerHold\" : %d, " "\"OverFrequencyHold\" : %d, " "\"UnderFrequencyHold\" : %d, " "\"OverTemperatureHold\" : %d, " "\"UnderTemperatureHold\" : %d, " "\"EventEnable\" : %d, " "\"EventMaskCritical\" : %d, " "\"EventMaskStandard\" : %d, " "\"EventTest\" : %d, " "\"EventClear\" : %d", emtr_address(), emtr_mode_str(emtr_current_mode), emtr_counter_active(), emtr_counter_apparent(), emtr_read_interval, emtr_registers.event->over_current_limit, emtr_registers.event->over_power_limit, emtr_registers.event->over_frequency_limit, emtr_registers.event->under_frequency_limit, emtr_registers.event->over_temperature_limit, emtr_registers.event->under_temperature_limit, emtr_registers.event->voltage_sag_limit, emtr_registers.event->voltage_surge_limit, emtr_registers.event->over_current_hold, emtr_registers.event->over_power_hold, emtr_registers.event->over_frequency_hold, emtr_registers.event->under_frequency_hold, emtr_registers.event->over_temperature_hold, emtr_registers.event->under_temperature_hold, emtr_registers.event->event_enable, emtr_registers.event->event_mask_critical, emtr_registers.event->event_mask_standard, emtr_registers.event->event_test, emtr_registers.event->event_clear ), NULL ); setTimeout(emtr_events_read, NULL, 1500); } else { json_data( response, MOD_EMTR, OK_STR, json_sprintf( data_str, "\"Address\" : \"0x%04X\", " "\"Mode\" : \"%s\", " "\"CounterActive\" : %d, " "\"CounterApparent\" : %d, " "\"ReadInterval\" : %d", emtr_address(), emtr_mode_str(emtr_current_mode), emtr_counter_active(), emtr_counter_apparent(), emtr_read_interval ), NULL ); } emtr_start_read(); }