#ifndef LTA_PROTOCOL_H
#define LTA_PROTOCOL_H

#include "lta_protocol_cfg.h"
#include "l_macro_types.h"
#include <stdbool.h>

//************************************ Коды команд (по протоколу 1.1) *************************************
typedef enum {
    LTA_CMD_OPEN        = 0x00U,    // T00 - открыть соединение (с паролем)
    LTA_CMD_CLOSE       = 0x01U,    // T01 - закрыть соединение
    LTA_CMD_PING        = 0x02U,    // T02 - проверка соединения
    LTA_CMD_GET_INFO    = 0x0AU,    // T0A - информация об устройстве
    LTA_CMD_READ_MEM    = 0x14U,    // T14 - чтение памяти
    LTA_CMD_WRITE_MEM   = 0x15U,    // T15 - запись памяти
} lta_cmd_t;

//************************************ Коды ошибок **********************************************************
typedef enum {
    LTA_ERR_NONE         = 0x00U,
    LTA_ERR_UNKNOWN_CMD  = 0x01U,
    LTA_ERR_INVALID_ARG  = 0x02U,
    LTA_ERR_INTERNAL     = 0x03U,
    LTA_ERR_NOT_CONNECTED = 0x04U,
    LTA_ERR_MEMORY       = 0x05U,
    LTA_ERR_INVALID_ADDR = 0x06U,
    LTA_ERR_INVALID_PASS = 0x07U,   // Неверный пароль
} lta_error_t;

//************************************ Информация об устройстве **********************************************
typedef struct {
    char name[32];
    char serial[16];
    char version[16];
    u8  board_id;                    // Идентификатор платы (0-255)
} lta_device_info_t;

//************************************ Публичные функции ****************************************************

fun_res_t lta_protocol_init(void);
fun_res_t lta_protocol_deinit(void);
void lta_protocol_process(void);
void lta_send_string(const char* str);
fun_res_t lta_protocol_set_device_info(const char* name, const char* serial, const char* ver, u8 board_id);
fun_res_t lta_protocol_set_board_id(u8 board_id);
u8 lta_protocol_get_board_id(void);
void lta_protocol_set_password(const char* pass);
bool lta_protocol_verify_password(const char* pass);

#endif