Init
This commit is contained in:
commit
1b03958fe0
|
|
@ -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": "Smart_Components_Aurus",
|
||||
"repo": "CmsisCore5"
|
||||
},
|
||||
{
|
||||
"type": "git",
|
||||
"provider": "Smart_Components_Aurus",
|
||||
"repo": "CliCmd"
|
||||
}
|
||||
],
|
||||
"cmake": {
|
||||
"inc_dirs": [
|
||||
"Inc"
|
||||
],
|
||||
"srcs": [
|
||||
"Src/**.c"
|
||||
]
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
Reference in New Issue