ccNOos  v0.0.0
Build Portable Microcontroller Applications!
Application_Platform_Main.c
Go to the documentation of this file.
1 /** \file WIN32_Console.cpp
2 * \brief WIN32 Console Implementation of ccNOos_Tests in c++
3 
4  Copyright 2021 InMechaSol, Inc
5 
6  Licensed under the Apache License, Version 2.0 (the "License");
7  you may not use this file except in compliance with the License.
8  You may obtain a copy of the License at
9 
10  http://www.apache.org/licenses/LICENSE-2.0
11 
12  Unless required by applicable law or agreed to in writing, software
13  distributed under the License is distributed on an "AS IS" BASIS,
14  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  See the License for the specific language governing permissions and
16  limitations under the License.
17 
18 Notes:
19 
20 */
21 //////////////////////////////////
22 // Include Application and cNOos
23 #include "PlatformApp_Serialization.h"
24 
25 ////////////////////////////////
26 // Compile Error if Examples/Tests not defining
27 #ifndef Mn
28 #error Mn must be defined - see examples
29 #endif
30 #ifndef MODdeclareCREATEINS
31 #error MODdeclareCREATEINS must be defined - see examples
32 #endif
33 #ifndef MODcallCREATEINS
34 #error MODcallCREATEINS must be defined - see examples
35 #endif
36 #ifdef __cplusplus
37 #ifndef PLATFORM_APP_CLASS
38 #error PLATFORM_APP_CLASS macro must be defined in application code
39 #endif
40 #else
41 #ifndef MODdeclareDATA
42 #error MODdeclareDATA macro must be defined in application code
43 #endif
44 #endif
45 
46 ////////////////////////////////
47 // Compile Error if Examples/Tests not defining
48 #if PLATFORM_NAME==Win32
49 #include "Platform_Win32.h"
50 #else
51 #error "No Platform Selected for Compile!"
52 #endif
53 
54 ///////////////////////////////////////////////////////////////////////
55 // Module Data Structure or Module Data Class
56 // -Declared from Macro Template
57 // -Macro Template is Defined in the Application Solution Header
58 ///////////////////////////////////////////////////////////////////////
59 #ifdef __cplusplus
60 PLATFORM_APP_CLASS(Mn);
61 #else
63 #endif
64 
65 
66 
67 
68 ///////////////////////////////////////////////////////////////////////
69 // Platform and Application Specific IO Device Functions
70 void linkAPIioDevices(struct SatComACSStruct* satcomacsStructPtrIn)
71 {
72  satcomacsStructPtrIn->ConsoleMenu.devptr = &ConsoleMenuDevDataStruct;
73  satcomacsStructPtrIn->LCDKeyPad.devptr = &LCDKeyPadDevDataStruct;
75  satcomacsStructPtrIn->ConsoleMenu.showHelp = ui8TRUE;
77 }
78 std::thread stdInThread;
80 bool runONCE = true; // to launch std::in thread once
81 void readStdIn(char* inStringPtr)
82 {
83  do {
85  {
86  std::cin >> inStringPtr;
88  }
89  std::this_thread::sleep_for(std::chrono::milliseconds(100));
90  } while (true);
91 }
92 // 4) Basic ability for user console input via any io device
93 void GetMenuChars(struct uiStruct* uiStructPtrin)
94 {
95 
96  // if Consolue Menu
97  if (uiStructPtrin->devptr == &ConsoleMenuDevDataStruct)
98  {
100  {
101  if (runONCE)
102  {
103  stdInThread = std::thread(readStdIn, &uiStructPtrin->devptr->inbuff.charbuff[0]);
104  runONCE = false;
106  }
107  else if(uiStructPtrin->devptr->triggerWriteOperation == ui8FALSE)
108  {
109  uiStructPtrin->devptr->newDataReadIn = ui8TRUE;
110  uiStructPtrin->parseIndex = 0;
112  }
113  }
114  }
115  // if LCD KeyPad
116  else if (uiStructPtrin->devptr == &LCDKeyPadDevDataStruct)
117  {
118  ;
119  }
120 }
121 // 5) Basic ability for user console output
122 void WriteMenuLine(struct uiStruct* uiStructPtrin)
123 {
124  // if Consolue Menu
125  if (uiStructPtrin->devptr == &ConsoleMenuDevDataStruct)
126  {
127  if (uiStructPtrin->clearScreen) {
128  std::cout << terminalClearString();
129  uiStructPtrin->clearScreen = ui8FALSE;
130  }
131  std::cout << &uiStructPtrin->devptr->outbuff.charbuff[0];
132  if (uiStructPtrin->showPrompt) {
133  std::cout << terminalPromptString(uiStructPtrin->currentUserLevel);
134  uiStructPtrin->showPrompt = ui8FALSE;
135  }
136  }
137  // if LCD KeyPad
138  else if (uiStructPtrin->devptr == &LCDKeyPadDevDataStruct)
139  {
140  ;
141  }
142 
143 }
144 // 6) (Optional) Logging Output
145 void WriteLogLine(struct logStruct* logStructPtrin)
146 {
147  ;
148 }
149 // 7) (Optional) Config Input
150 void ReadConfigLine(struct configStruct* configStructPtrin)
151 {
152  ;
153 }
154 
155 
156 
157 
158 void writeAttenuatorValues(struct txRxStruct* txRxStructPtrIn) { ; }
159 
160 
161 
162 UI_8 readGPS(struct gpsStruct* gpsStructPtrIn)
163 {
164  GPSPortParams.serialdev.numBytes2Read = 1;
165  GPSPortParams.serialdev.readIndex = 0;
166  gpsStructPtrIn->devptr = &GPSPortParams.serialdev;
167  int iNewLine = 0;
168  int tries = 0;
169  do {
170 
171 
172  if (GPS_NBSerial.ReadDev() == GPSPortParams.serialdev.numBytes2Read)
173  {
174  if (GPSPortParams.serialdev.devdata.inbuff.charbuff[GPSPortParams.serialdev.readIndex] == '\n')
175  {
176  iNewLine = GPSPortParams.serialdev.readIndex;
177  }
178  GPSPortParams.serialdev.readIndex += GPSPortParams.serialdev.numBytes2Read;
179  }
180  else if (GPSPortParams.serialdev.readIndex > 0)
181  {
182  std::this_thread::sleep_for(std::chrono::milliseconds(1));
183  tries++;
184  }
185  else
186  break;
187 
188 
189  } while (GPSPortParams.serialdev.readIndex < charBuffMax && iNewLine == 0 && tries < 5);
190 
191  GPSPortParams.serialdev.devdata.inbuff.charbuff[iNewLine] = '\0';
192 
193  if (iNewLine > 6)
194  return ui8TRUE;
195  else
196  return ui8FALSE;
197 }
198 UI_8 readEcompass(struct eCompStruct* eCompStructPtrIn)
199 {
200  eCompPortParams.serialdev.numBytes2Read = 1;
201  eCompPortParams.serialdev.readIndex = 0;
202  eCompStructPtrIn->devptr = &eCompPortParams.serialdev;
203  int iNewLine = 0;
204  int tries = 0;
205  do {
206 
207 
208  if (eComp_NBSerial.ReadDev() == eCompPortParams.serialdev.numBytes2Read)
209  {
210  if (eCompPortParams.serialdev.devdata.inbuff.charbuff[eCompPortParams.serialdev.readIndex] == '\n')
211  {
212  iNewLine = eCompPortParams.serialdev.readIndex;
213  }
214  eCompPortParams.serialdev.readIndex += eCompPortParams.serialdev.numBytes2Read;
215  }
216  else if (eCompPortParams.serialdev.readIndex > 0)
217  {
218  std::this_thread::sleep_for(std::chrono::milliseconds(1));
219  tries++;
220  }
221  else
222  break;
223 
224 
225  } while (eCompPortParams.serialdev.readIndex < charBuffMax && iNewLine == 0 && tries < 5);
226 
227  eCompPortParams.serialdev.devdata.inbuff.charbuff[iNewLine] = '\0';
228 
229  if (iNewLine > 10)
230  return ui8TRUE;
231  else
232  return ui8FALSE;
233 }
234 
235 
236 
237 void readFreqConv(struct freqConvStruct* freqConvStructPtrIn) { ; }
238 void writeFreqConv(struct freqConvStruct* freqConvStructPtrIn) { ; }
239 void readPowerMeter(struct powerMeterStruct* powerMeterStructPtrIn) { ; }
240 void writePowerMeter(struct powerMeterStruct* powerMeterStructPtrIn) { ; }
241 
242 
243 ///////////////////////////////////////////////////////////////////////
244 // Application Data Instances are Created here (Platform Specific)
245 #ifdef __cplusplus
246 theApplicationClass theApplicationExample;
247 #else
249 #endif
250 
251 ////////////////////////////////////////////////////////////////////////////////
252 // Platform Main Entry Points call ExeSys Area Functions
253 #ifdef MAIN_C_NOos_Wsystick
255 #endif
256 #ifdef MAIN_C_NOos_NOsystick
258 #endif
GetMenuChars
void GetMenuChars(struct uiStruct *uiStructPtrin)
Definition: Application_Platform_Main.c:111
PLATFORM_APP_CTEMPLATE
#define PLATFORM_APP_CTEMPLATE(MODNAME)
Definition: Application_Solution.h:117
devicedatastruct::triggerWriteOperation
UI_8 triggerWriteOperation
Definition: io_device.h:67
readPowerMeter
void readPowerMeter(struct powerMeterStruct *powerMeterStructPtrIn)
Definition: Application_Platform_Main.c:77
Platform_Win32.h
IMS: ccNOos, Platform Specification, Win32
readStdIn
void * readStdIn(void *voidinStringPtr)
Definition: Application_Platform_Main.c:85
GPSPortParams
struct portParametersStruct GPSPortParams
Definition: Platform_QTCreatorC.h:62
ConsoleMenuDevDataStruct
struct devicedatastruct ConsoleMenuDevDataStruct
Definition: Platform_QTCreatorC.h:66
Mn
#define Mn
Definition: Application_Solution.h:32
WriteLogLine
void WriteLogLine(struct logStruct *logStructPtrin)
Definition: Application_Platform_Main.c:167
gpsStruct::devptr
struct SerialDeviceStruct * devptr
Definition: APTmodule.h:38
ui8FALSE
#define ui8FALSE
Definition: version_config.h:190
LCDKeyPadDevDataStruct
struct devicedatastruct LCDKeyPadDevDataStruct
Definition: Platform_QTCreatorC.h:65
ReadConfigLine
void ReadConfigLine(struct configStruct *configStructPtrin)
Definition: Application_Platform_Main.c:172
terminalPromptString
const char * terminalPromptString(int userLevelIndex)
Definition: MenuAPI.c:61
WriteMenuLine
void WriteMenuLine(struct uiStruct *uiStructPtrin)
Definition: Application_Platform_Main.c:144
ui8TRUE
#define ui8TRUE
Definition: version_config.h:191
readEcompass
void readEcompass(struct eCompStruct *eCompStructPtrIn)
Definition: Application_Platform_Main.c:74
txRxStruct
Definition: TxRxmodule.h:38
stdInThreadRunning
UI_8 stdInThreadRunning
Definition: Application_Platform_Main.c:82
readGPS
void readGPS(struct gpsStruct *gpsStructPtrIn)
Definition: Application_Platform_Main.c:73
powerMeterStruct
Definition: TPMmodule.h:46
charBuffMax
#define charBuffMax
Definition: version_config.h:78
C_NOos_MAINnSYSTICK_TEMPLATE
#define C_NOos_MAINnSYSTICK_TEMPLATE
Definition: version_config.h:353
eCompStruct::devptr
struct SerialDeviceStruct * devptr
Definition: APTmodule.h:48
gpsStruct
Definition: APTmodule.h:37
C_OS_MAIN_TEMPLATE
#define C_OS_MAIN_TEMPLATE
Definition: version_config.h:383
writePowerMeter
void writePowerMeter(struct powerMeterStruct *powerMeterStructPtrIn)
Definition: Application_Platform_Main.c:78
freqConvStruct
Definition: TPMmodule.h:36
MODdeclareDATA
MODdeclareDATA(Mn)
eCompStruct
Definition: APTmodule.h:47
writeFreqConv
void writeFreqConv(struct freqConvStruct *freqConvStructPtrIn)
Definition: Application_Platform_Main.c:76
linkAPIioDevices
void linkAPIioDevices(struct SatComACSStruct *satcomacsStructPtrIn)
Definition: Application_Platform_Main.c:73
writeAttenuatorValues
void writeAttenuatorValues(struct txRxStruct *txRxStructPtrIn)
Definition: Application_Platform_Main.c:72
stdInThread
pthread_t stdInThread
Definition: Application_Platform_Main.c:81
eCompPortParams
struct portParametersStruct eCompPortParams
Definition: Platform_QTCreatorC.h:63
readFreqConv
void readFreqConv(struct freqConvStruct *freqConvStructPtrIn)
Definition: Application_Platform_Main.c:75
runONCE
UI_8 runONCE
Definition: Application_Platform_Main.c:84