#include #include #include "freertos/FreeRTOS.h" #include "freertos/task.h" #include "esp_log.h" #include "nvs_flash.h" #include "esp_bt.h" #include "ble_service.h" #include "binary_parser.h" #include "checksum.h" #include "usb_host.h" #include "stk500v1.h" #include "state_machine.h" #include "serial_bridge.h" #include "led_button.h" static const char *TAG = "MAIN"; static void on_ble_flashing_data(uint8_t *data, size_t len) { if (len < 4) return; uint8_t cmd = data[0]; switch (cmd) { case CMD_INIT: { ESP_LOGI(TAG, "Received INIT command"); binary_parser_process_packet(data, len); state_machine_process_event(EVENT_BLE_INIT, data); break; } case CMD_DATA: { parser_state_t result = binary_parser_process_packet(data, len); if (result == PARSER_ERROR) { ESP_LOGE(TAG, "Packet parse error"); state_machine_process_event(EVENT_VERIFY_FAIL, NULL); } break; } case CMD_END: { ESP_LOGI(TAG, "Received END command"); binary_parser_process_packet(data, len); state_machine_process_event(EVENT_BLE_END, data); break; } default: ESP_LOGW(TAG, "Unknown command: 0x%02X", cmd); break; } } static void on_usb_serial_data(uint8_t *data, size_t len) { serial_bridge_on_usb_data(data, len); } static void on_ble_serial_data(uint8_t *data, size_t len) { if (serial_bridge_is_active()) { usb_host_write_cdc(data, len); } } void app_main(void) { ESP_LOGI(TAG, "Velxio BLE Deployer v1.0"); nvs_flash_init(); esp_bt_controller_mem_release(ESP_BT_MODE_CLASSIC_BT); led_button_init(); checksum_crc32(NULL, 0); binary_parser_init(); ble_service_init(); ble_service_set_flashing_callback(on_ble_flashing_data); ble_service_set_serial_callback(on_ble_serial_data); usb_host_init(); usb_host_set_serial_callback(on_usb_serial_data); led_set_pattern(LED_BLUE_BLINK); state_machine_init(); while (1) { state_machine_tick(); serial_bridge_tick(); led_button_tick(); vTaskDelay(pdMS_TO_TICKS(10)); } }