Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
L
LTA_mcu
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
CI / CD Analytics
Repository Analytics
Value Stream Analytics
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Александр Пчелин
LTA_mcu
Commits
dc82b9bd
Commit
dc82b9bd
authored
May 05, 2026
by
Андрей Пивторак
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Переписан нижний уровень для МК
parent
bd4e445b
Changes
3
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
427 additions
and
502 deletions
+427
-502
src/cli_protocol/cli_protocol.c
src/cli_protocol/cli_protocol.c
+382
-410
src/cli_protocol/cli_protocol.h
src/cli_protocol/cli_protocol.h
+36
-86
src/cli_protocol/cli_protocol_cfg.h
src/cli_protocol/cli_protocol_cfg.h
+9
-6
No files found.
src/cli_protocol/cli_protocol.c
View file @
dc82b9bd
This diff is collapsed.
Click to expand it.
src/cli_protocol/cli_protocol.h
View file @
dc82b9bd
...
@@ -3,133 +3,78 @@
...
@@ -3,133 +3,78 @@
#include "cli_protocol_cfg.h"
#include "cli_protocol_cfg.h"
#include "l_macro_types.h"
#include "l_macro_types.h"
#include <stdbool.h>
//************************************ Константы протокола *************************************************
#define CLI_BROADCAST_ID 0xFFU // Широковещательный адрес (команды для всех плат без ответа)
//************************************ Коды команд (по протоколу 1.1) *************************************
typedef
enum
{
typedef
enum
{
CLI_CMD_OPEN
=
0x00U
,
// T00 - открыть соединение (
опционально
с паролем)
CLI_CMD_OPEN
=
0x00U
,
// T00 - открыть соединение (с паролем)
CLI_CMD_CLOSE
=
0x01U
,
// T01 - закрыть соединение
CLI_CMD_CLOSE
=
0x01U
,
// T01 - закрыть соединение
CLI_CMD_PING
=
0x02U
,
// T02 - проверка соединения (ping) – эхо переданных данных
CLI_CMD_ECHO
=
0x02U
,
// T02 - проверка соединения (ping)
CLI_CMD_GET_INFO
=
0x0AU
,
// T0A - получить информацию об устройстве (имя, серийный, версия)
CLI_CMD_GET_INFO
=
0x03U
,
// T03 - получить информацию об устройстве (имя, серийный, версия)
CLI_CMD_READ_MEM
=
0x14U
,
// T14 - чтение памяти (адрес 4 байта + размер 1 байт)
CLI_CMD_WRITE_MEM
=
0x15U
,
// T15 - запись памяти (адрес 4 байта + данные, только SRAM)
}
cli_cmd_t
;
}
cli_cmd_t
;
//************************************ Коды ошибок (только 00-03 по протоколу) ****************************
// Коды ошибок хэндла команды
typedef
enum
{
typedef
enum
{
CLI_ERR_NONE
=
0x00U
,
// Нет ошибки
CLI_HND_OK_RX
=
0
,
// Прием данных успешен
CLI_ERR_UNKNOWN_CMD
=
0x01U
,
// Неизвестная команда
CLI_HND_OK_TX
,
// Хэндл подготовил ответ для передачи
CLI_ERR_INVALID_ARG
=
0x02U
,
// Неверный формат или значение аргумента
CLI_HND_ERR_ARG
,
// Неверный формат или значение аргумента
CLI_ERR_INTERNAL
=
0x03U
,
// Внутренняя ошибка устройства
CLI_HND_ERR_INT
,
// Ошибка выполнения
}
cli_error_t
;
CLI_HND_BUSY
,
// Хэндл пока не может быть выполнен
}
cli_hnd_err_t
;
//************************************ Информация об устройстве **********************************************
//! @brief Структура с информацией об устройстве, возвращаемая командой T0A
// Структура с информацией об устройстве
typedef
struct
{
typedef
struct
{
char
name
[
32
];
// Имя устройства (ASCII, до 31 символа + \\0)
char
name
[
16
];
// Имя устройства (ASCII, до 15 символа + \0)
char
serial
[
16
];
// Серийный номер (ASCII, до 15 символов + \\0)
char
serial
[
16
];
// Серийный номер (ASCII, до 15 символов + \0)
char
version
[
16
];
// Версия ПО (ASCII, до 15 символов + \\0)
char
version
[
16
];
// Версия команд CLI (ASCII, до 15 символов + \0)
u8
board_id
;
// Уникальный идентификатор платы (0–254)
}
cli_device_info_t
;
}
cli_device_info_t
;
//************************************ Тип обработчика команды **********************************************
//! @brief Прототип функции-обработчика команды
//! @param data Указатель на сырые данные команды (после board_id)
//! @param len Длина данных в байтах
typedef
void
(
*
cli_cmd_handler_t
)(
const
u8
*
data
,
u8
len
);
//************************************ Структура регистрируемой команды **************************************
// Прототип функции-обработчика команды
// - data Указатель на сырые данные команды (после board_id)
// - len Длина данных в байтах
// Выозвращает код ошибки (cli_hnd_err_t)
typedef
i8
(
*
cli_cmd_handler_t
)(
const
u8
*
data
,
u8
len
);
// TODO - че, прям реально от 0x00–0xFF, а как же встроенные команды?
//
! @brief
Структура для регистрации пользовательской команды
// Структура для регистрации пользовательской команды
typedef
struct
{
typedef
struct
{
u8
code
;
// Код команды (0x00–0xFF)
u8
code
;
// Код команды (0x00–0xFF)
cli_cmd_handler_t
handler
;
// Указатель на функцию-обработчик
cli_cmd_handler_t
handler
;
// Указатель на функцию-обработчик
}
cli_command_t
;
}
cli_command_t
;
//************************************ Публичные функции ****************************************************
//************************************ Публичные функции ****************************************************
//---------------------------------------------------------------------
//! @brief Инициализация протокола CLI
//! @brief Инициализация протокола CLI
//! @return ERR_OK при успехе, иначе код ошибки
//! @return ERR_OK при успехе, иначе код ошибки
fun_res_t
cli_protocol_init
(
void
);
fun_res_t
cli_protocol_init
(
void
);
//---------------------------------------------------------------------
//! @brief Деинициализация протокола CLI
//! @brief Деинициализация протокола CLI
//! @return ERR_OK при успехе, иначе код ошибки
//! @return ERR_OK при успехе, иначе код ошибки
fun_res_t
cli_protocol_deinit
(
void
);
fun_res_t
cli_protocol_deinit
(
void
);
//---------------------------------------------------------------------
//! @brief Основной цикл обработки (вызывать в главном цикле программы)
//! @brief Основной цикл обработки (вызывать в главном цикле программы)
void
cli_protocol_process
(
void
);
void
cli_protocol_process
(
void
);
// TODO - сделать с параметром - блок\ не блок
//---------------------------------------------------------------------
//! @brief Отправка строки через UART (с ожиданием завершения передачи)
//! @brief Отправка строки через UART (с ожиданием завершения передачи)
//! @param str Указатель на нуль-терминированную строку
//! @param str Указатель на нуль-терминированную строку
void
cli_
send_string
(
const
char
*
str
);
void
cli_
prepare_tx_data
(
u8
*
hex_data
,
u8
size
);
//---------------------------------------------------------------------
//! @brief Установка информации об устройстве
//! @brief Установка информации об устройстве
//! @param name Имя устройства (до
31
символа)
//! @param name Имя устройства (до
15
символа)
//! @param serial Серийный номер (до 15 символов)
//! @param serial Серийный номер (до 15 символов)
//! @param ver Версия ПО (до 15 символов)
//! @param ver Версия ПО (до 15 символов)
//! @param board_id Идентификатор платы (0–254)
//! @return ERR_OK при успехе
fun_res_t
cli_protocol_set_device_info
(
const
char
*
name
,
const
char
*
serial
,
const
char
*
ver
,
u8
board_id
);
// todo - а зачем
//---------------------------------------------------------------------
//! @brief Установка board_id устройства
//! @param board_id Идентификатор платы (0–254)
//! @return ERR_OK при успехе
//! @return ERR_OK при успехе
fun_res_t
cli_protocol_set_
board_id
(
u8
board_id
);
fun_res_t
cli_protocol_set_
device_info
(
const
char
*
name
,
const
char
*
serial
,
const
char
*
ver
);
// todo - а зачем
//---------------------------------------------------------------------
//! @brief Получение текущего board_id устройства
//! @return Идентификатор платы
u8
cli_protocol_get_board_id
(
void
);
//---------------------------------------------------------------------
//! @brief Установка пароля для открытия соединения
//! @param pass Указатель на массив байт пароля (до 15 байт)
//! @param len Длина пароля в байтах
void
cli_protocol_set_password
(
const
u8
*
pass
,
u8
len
);
// todo - а зачем
//---------------------------------------------------------------------
//! @brief Проверка пароля
//! @param pass Указатель на массив байт пароля
//! @param len Длина пароля в байтах
//! @return true – пароль верен, false – неверен
bool
cli_protocol_verify_password
(
const
u8
*
pass
,
u8
len
);
// todo - а где реализация: cli_protocol_reset_block
//---------------------------------------------------------------------
//! @brief Сброс блокировки после превышения попыток ввода пароля
void
cli_protocol_reset_block
(
void
);
//---------------------------------------------------------------------
//! @brief Регистрация новой команды
//! @brief Регистрация новой команды
//! @param cmd Указатель на структуру с кодом и обработчиком
//! @param cmd Указатель на структуру с кодом и обработчиком
//! @return ERR_OK при успехе, ERR_INVALID_ARGUMENT – неверные параметры,
//! @return ERR_OK при успехе, ERR_INVALID_ARGUMENT – неверные параметры,
...
@@ -137,4 +82,9 @@ void cli_protocol_reset_block(void);
...
@@ -137,4 +82,9 @@ void cli_protocol_reset_block(void);
fun_res_t
cli_register_command
(
const
cli_command_t
*
cmd
);
fun_res_t
cli_register_command
(
const
cli_command_t
*
cmd
);
#endif
//! @brief Обнулить регистрацию указанной команды
\ No newline at end of file
//! @param cmd Код команды
void
cli_unregister_command
(
u8
code
);
#endif
\ No newline at end of file
src/cli_protocol/cli_protocol_cfg.h
View file @
dc82b9bd
...
@@ -6,23 +6,26 @@
...
@@ -6,23 +6,26 @@
//************************************ Конфигурация UART ****************************************************
//************************************ Конфигурация UART ****************************************************
#define CLI_UART_CHANNEL (LMCAL_UART_CHANNEL1)
#define CLI_UART_CHANNEL (LMCAL_UART_CHANNEL1)
//************************************ Размеры буферов ******************************************************
//************************************ Размеры буферов ******************************************************
#define CLI_CMD_BUFFER_SIZE (128) // Размер буфера команды
#define CLI_CMD_BUFFER_SIZE (128) // Размер буфера команды
#define CLI_DATA_MAX_SIZE (64) // Максимальный размер данных
#define CLI_DATA_MAX_SIZE (64) // Максимальный размер данных
#define CLI_MAX_COMMANDS 255 // Максимальное количество регистрируемых команд (0x00..0xFF)
#define CLI_INT_CMD_NUM (10) // Количество встроенных команд
//************************************ Таймауты ************************************************************
//************************************ Таймауты ************************************************************
#define CLI_CONNECTION_TIMEOUT_MS (20000U) // Таймаут соединения 20 секунд
#define CLI_CONNECTION_TIMEOUT_MS (20000U) // Таймаут соединения 20 секунд
//************************************ Пароль по умолчанию **************************************************
//************************************ Пароль по умолчанию **************************************************
// Пароль по умолчанию "1357"
// Пароль по умолчанию "1357"
#define CLI_DEFAULT_PASSWORD_BYTES {0x31, 0x33, 0x35, 0x37}
#define CLI_DEFAULT_PASSWORD_BYTES {0x31, 0x33, 0x35, 0x37}
#define CLI_DEFAULT_PASSWORD_LEN 4
#define CLI_DEFAULT_PASSWORD_LEN 4
#define CLI_MAX_COMMANDS 256 // Максимальное количество регистрируемых команд (0x00..0xFF)
#define CLI_PASSWORD_MAX_LEN 15 // Максимальная длина пароля в байтах
#define CLI_PASSWORD_MAX_LEN 15 // Максимальная длина пароля в байтах
#define CLI_ACTIVITY_TIMEOUT_TICKS 20000U // ~20 сек при вызове каждые 1 мс
#endif
#endif
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment