Init
This commit is contained in:
commit
8459aa58ac
|
|
@ -0,0 +1,33 @@
|
||||||
|
//
|
||||||
|
// Created by zemon on 17.11.22.
|
||||||
|
//
|
||||||
|
|
||||||
|
#ifndef UVEOS_ON_NATION_CLISERIALBRIDGE_H
|
||||||
|
#define UVEOS_ON_NATION_CLISERIALBRIDGE_H
|
||||||
|
|
||||||
|
#include "CliCmd.h"
|
||||||
|
#include "CmsisRtosThreadUtils.h"
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
tSerialPortIO *serialCommandPort;
|
||||||
|
tSerialPortIO *serialSnifferPort;
|
||||||
|
|
||||||
|
struct {
|
||||||
|
osThreadId_t id;
|
||||||
|
uint32_t stack[182];
|
||||||
|
StaticTask_t controlBlock;
|
||||||
|
osThreadAttr_t attr;
|
||||||
|
} thread;
|
||||||
|
|
||||||
|
} tCliCmdSerialBridge;
|
||||||
|
|
||||||
|
void CliCmdSerialBridge_Help(void *env, tCliCmd *cli);
|
||||||
|
|
||||||
|
//инифиализация обработчика
|
||||||
|
void CliCmdSerialBridge_Init(tCliCmdSerialBridge *env, tSerialPortIO *serialSnifferPort);
|
||||||
|
|
||||||
|
//обработка команды
|
||||||
|
int32_t CliCmdSerialBridge_Process(tCliCmdSerialBridge *env, tCliCmd *cliCmd);
|
||||||
|
|
||||||
|
#endif //UVEOS_ON_NATION_CLISERIALBRIDGE_H
|
||||||
|
|
@ -0,0 +1,83 @@
|
||||||
|
//
|
||||||
|
// Created by zemon on 18.11.22.
|
||||||
|
//
|
||||||
|
|
||||||
|
|
||||||
|
#include "CliCmd/SerialBridge.h"
|
||||||
|
#include "SystemDelayInterface.h"
|
||||||
|
|
||||||
|
static _Noreturn void CliCmdSerialBridge_SniffToCmdThread(tCliCmdSerialBridge *env) {
|
||||||
|
uint8_t data;
|
||||||
|
for (;;) {
|
||||||
|
SerialPortReceive(env->serialSnifferPort, &data, 1, SystemWaitForever);
|
||||||
|
SerialPortTransmit(env->serialCommandPort, &data, 1, SystemWaitForever);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void CliCmdSerialBridge_StartThread(tCliCmdSerialBridge *env) {
|
||||||
|
if (!env->thread.id) {
|
||||||
|
env->thread.id = osThreadNew(
|
||||||
|
(osThreadFunc_t) (CliCmdSerialBridge_SniffToCmdThread),
|
||||||
|
(void *) (env),
|
||||||
|
&env->thread.attr
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
osThreadResume(env->thread.id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void CliCmdSerialBridge_StopThread(tCliCmdSerialBridge *env) {
|
||||||
|
if (!env->thread.id) {
|
||||||
|
osThreadSuspend(env->thread.id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CliCmdSerialBridge_Help(void *env, tCliCmd *cli) {
|
||||||
|
CliCmd_PrintLnStatic(cli, " access sub commands:");
|
||||||
|
CliCmd_PrintLnStatic(cli, " access all AT command for gnss devices...");
|
||||||
|
CliCmd_PrintLnStatic(cli, " command [ help ] - help this as sub mode");
|
||||||
|
CliCmd_PrintLnStatic(cli, " command [ exit ] - exit as this sub mode");
|
||||||
|
CliCmd_PrintLnStatic(cli, "");
|
||||||
|
}
|
||||||
|
|
||||||
|
int32_t CliCmdSerialBridge_Process(tCliCmdSerialBridge *env, tCliCmd *cliCmd) {
|
||||||
|
CliCmd_PrintLnStatic(cliCmd, "THIS MODE GNSS AT COMMAND");
|
||||||
|
|
||||||
|
env->serialCommandPort = cliCmd->serialCommandPort;
|
||||||
|
CliCmdSerialBridge_StartThread(env);
|
||||||
|
|
||||||
|
for (;;) {
|
||||||
|
CliCmd_WaitLine(cliCmd);
|
||||||
|
|
||||||
|
SerialPortTransmit(
|
||||||
|
env->serialSnifferPort,
|
||||||
|
(uint8_t *) cliCmd->rxLine.data,
|
||||||
|
cliCmd->rxLine.length,
|
||||||
|
SystemWaitForever
|
||||||
|
);
|
||||||
|
|
||||||
|
if (CliCmd_RxStartsWithStatic(cliCmd, "exit")) {
|
||||||
|
CliCmd_PrintLnStatic(cliCmd, "exiting as gnss mode");
|
||||||
|
CliCmdSerialBridge_StopThread(env);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if (CliCmd_RxStartsWithStatic(cliCmd, "help")) {
|
||||||
|
CliCmdSerialBridge_Help(NULL, cliCmd);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CliCmdSerialBridge_Init(tCliCmdSerialBridge *env, tSerialPortIO *serialSnifferPort) {
|
||||||
|
InitThreadAtrStatic(
|
||||||
|
&env->thread.attr,
|
||||||
|
"CliSeBrSniff",
|
||||||
|
env->thread.controlBlock,
|
||||||
|
env->thread.stack,
|
||||||
|
osPriorityNormal
|
||||||
|
);
|
||||||
|
env->thread.id = 0;
|
||||||
|
|
||||||
|
|
||||||
|
env->serialSnifferPort = serialSnifferPort;
|
||||||
|
env->serialCommandPort = NULL;
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,23 @@
|
||||||
|
{
|
||||||
|
"dep": [
|
||||||
|
{
|
||||||
|
"type": "git",
|
||||||
|
"provider": "NAVIGATOR_UVEOS_NATION_TELIT",
|
||||||
|
"repo": "CmsisCore5"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "git",
|
||||||
|
"provider": "NAVIGATOR_UVEOS_NATION_TELIT",
|
||||||
|
"repo": "CliCmd"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"cmake": {
|
||||||
|
"inc_dirs": [
|
||||||
|
"Inc"
|
||||||
|
],
|
||||||
|
"srcs": [
|
||||||
|
"Src/**.c"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue