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
c500d6a7
Commit
c500d6a7
authored
May 05, 2026
by
Александр Пчелин
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Обновлен протокол, изменение колбека приема, реализация вывода информации о модуле.
parent
cc944181
Changes
4
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
466 additions
and
472 deletions
+466
-472
src/cli_protocol/cli_protocol.c
src/cli_protocol/cli_protocol.c
+416
-406
src/cli_protocol/cli_protocol.h
src/cli_protocol/cli_protocol.h
+40
-63
src/cli_protocol/cli_protocol_cfg.h
src/cli_protocol/cli_protocol_cfg.h
+10
-2
src/main.c
src/main.c
+0
-1
No files found.
src/cli_protocol/cli_protocol.c
View file @
c500d6a7
This diff is collapsed.
Click to expand it.
src/cli_protocol/cli_protocol.h
View file @
c500d6a7
...
@@ -3,106 +3,78 @@
...
@@ -3,106 +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
);
//************************************ Структура регистрируемой команды **************************************
// Прототип функции-обработчика команды
//! @brief Структура для регистрации пользовательской команды
// - data Указатель на сырые данные команды (после board_id)
// - len Длина данных в байтах
// Выозвращает код ошибки (cli_hnd_err_t)
typedef
i8
(
*
cli_cmd_handler_t
)(
const
u8
*
data
,
u8
len
);
// Структура для регистрации пользовательской команды
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
);
//---------------------------------------------------------------------
//! @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 при успехе
//! @return ERR_OK при успехе
fun_res_t
cli_protocol_set_device_info
(
const
char
*
name
,
const
char
*
serial
,
const
char
*
ver
,
u8
board_id
);
fun_res_t
cli_protocol_set_device_info
(
const
char
*
name
,
const
char
*
serial
,
const
char
*
ver
);
//---------------------------------------------------------------------
//! @brief Установка board_id устройства
//! @param board_id Идентификатор платы (0–254)
//! @return ERR_OK при успехе
fun_res_t
cli_protocol_set_board_id
(
u8
board_id
);
//---------------------------------------------------------------------
//! @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
);
//---------------------------------------------------------------------
//! @brief Проверка пароля
//! @param pass Указатель на массив байт пароля
//! @param len Длина пароля в байтах
//! @return true – пароль верен, false – неверен
bool
cli_protocol_verify_password
(
const
u8
*
pass
,
u8
len
);
//---------------------------------------------------------------------
//! @brief Регистрация новой команды
//! @brief Регистрация новой команды
//! @param cmd Указатель на структуру с кодом и обработчиком
//! @param cmd Указатель на структуру с кодом и обработчиком
//! @return ERR_OK при успехе, ERR_INVALID_ARGUMENT – неверные параметры,
//! @return ERR_OK при успехе, ERR_INVALID_ARGUMENT – неверные параметры,
...
@@ -110,4 +82,9 @@ bool cli_protocol_verify_password(const u8* pass, u8 len);
...
@@ -110,4 +82,9 @@ bool cli_protocol_verify_password(const u8* pass, u8 len);
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
src/cli_protocol/cli_protocol_cfg.h
View file @
c500d6a7
...
@@ -6,18 +6,26 @@
...
@@ -6,18 +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 // Максимальная длина пароля в байтах
#endif
#endif
\ No newline at end of file
src/main.c
View file @
c500d6a7
...
@@ -26,7 +26,6 @@ void main(void)
...
@@ -26,7 +26,6 @@ void main(void)
// Инициализация LTA протокола
// Инициализация LTA протокола
cli_protocol_init
();
cli_protocol_init
();
cli_protocol_set_device_info
(
"LTA27 MCU"
,
"LTA27V2-001"
,
"1.0.0"
,
0x01
);
while
(
1
)
while
(
1
)
...
...
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