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