ccNOos  v0.0.0
Build Portable Microcontroller Applications!
Application_Platform_Main.c
Go to the documentation of this file.
1 /** \file Application_Platfrom_Main.c
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 all things ccNOos_tests, which is an application of ccNOos
23 // ccNOos_tests is the application solution
24 #include "PlatformApp_Serialization.h"
25 
26 
27 ////////////////////////////////
28 // Compile Error if Examples/Tests not defining
29 #ifndef Mn
30  #error Mn must be defined - see examples
31 #endif
32 #ifndef MODdeclareCREATEINS
33  #error MODdeclareCREATEINS must be defined - see examples
34 #endif
35 #ifndef MODcallCREATEINS
36  #error MODcallCREATEINS must be defined - see examples
37 #endif
38 #ifdef __cplusplus
39  #ifndef PLATFORM_APP_CLASS
40  #error PLATFORM_APP_CLASS macro must be defined in application code
41  #endif
42 #else
43  #ifndef MODdeclareDATA
44  #error MODdeclareDATA macro must be defined in application code
45  #endif
46 #endif
47 
48 ////////////////////////////////
49 // Compile Error if Examples/Tests not defining
50 #if PLATFORM_NAME==QTCreatorC
51 #include "Platform_QTCreatorC.h"
52 #else
53 #error "No Platform Selected for Compile!"
54 #endif
55 
56 
57 ///////////////////////////////////////////////////////////////////////
58 // Module Data Structure or Module Data Class
59 // -Declared from Macro Template
60 // -Macro Template is Defined in the Application Solution Header
61 ///////////////////////////////////////////////////////////////////////
62 #ifdef __cplusplus
63  PLATFORM_APP_CLASS(Mn);
64 #else
66 #endif
67 
68 
69 
70 
71 ///////////////////////////////////////////////////////////////////////
72 // Platform and Application Specific IO Device Functions
73 void linkAPIioDevices(struct SatComACSStruct* satcomacsStructPtrIn)
74 {
75  satcomacsStructPtrIn->ConsoleMenu.devptr = &ConsoleMenuDevDataStruct;
76  satcomacsStructPtrIn->LCDKeyPad.devptr = &LCDKeyPadDevDataStruct;
78  satcomacsStructPtrIn->ConsoleMenu.showHelp = ui8TRUE;
80 }
81 pthread_t stdInThread;
85 void *readStdIn(void* voidinStringPtr)
86 {
87  char* inStringPtr = (char*)voidinStringPtr;
88  int ch = 0;
89  int retVal = 1;
90 
91  do{
92  ch = 0;
93  retVal = 1;
94  while(ch < charBuffMax)
95  {
96  retVal = read(STDIN_FILENO, &inStringPtr[ch], 1);
97  ch++;
98  if (
99  inStringPtr[ch-1] == '\n' ||
100  retVal < 1
101  )
102  break;
103  }
104  inStringPtr[ch] = 0x00;
106 
107  }while(1);
108  return NULL;
109 }
110 // 4) Basic ability for user console input
111 void GetMenuChars(struct uiStruct* uiStructPtrin)
112 {
113 
114  // if Consolue Menu
115  if (uiStructPtrin->devptr == &ConsoleMenuDevDataStruct)
116  {
118  {
119  if (runONCE)
120  {
121  if(pthread_create(&stdInThread, NULL, &readStdIn, &uiStructPtrin->devptr->inbuff.charbuff[0] )==0)
122  {
123  runONCE = ui8FALSE;
125  }
126  }
127  else if(uiStructPtrin->devptr->triggerWriteOperation == ui8FALSE)
128  {
129  uiStructPtrin->devptr->newDataReadIn = ui8TRUE;
130  uiStructPtrin->parseIndex = 0;
132  }
133 
134  }
135  }
136  // if LCD KeyPad
137  else if (uiStructPtrin->devptr == &LCDKeyPadDevDataStruct)
138  {
139  ;
140  }
141 
142 }
143 // 5) Basic ability for user console output
144 void WriteMenuLine(struct uiStruct* uiStructPtrin)
145 {
146 
147  // if Consolue Menu
148  if (uiStructPtrin->devptr == &ConsoleMenuDevDataStruct)
149  {
150  if (uiStructPtrin->clearScreen) {
151  printf(terminalClearString());
152  uiStructPtrin->clearScreen = ui8FALSE;
153  }
154  printf(&uiStructPtrin->devptr->outbuff.charbuff[0]);
155  if (uiStructPtrin->showPrompt) {
156  printf(terminalPromptString(uiStructPtrin->currentUserLevel));
157  uiStructPtrin->showPrompt = ui8FALSE;
158  }
159  }
160  // if LCD KeyPad
161  else if (uiStructPtrin->devptr == &LCDKeyPadDevDataStruct)
162  {
163  ;
164  }
165 }
166 // 6) (Optional) Logging Output
167 void WriteLogLine(struct logStruct* logStructPtrin)
168 {
169 
170 }
171 // 7) (Optional) Config Input
172 void ReadConfigLine(struct configStruct* configStructPtrin)
173 {
174 
175 
176 }
177 
178 
179 
180 
181 void writeAttenuatorValues(struct txRxStruct* txRxStructPtrIn) { ; }
182 
183 
184 UI_8 readGPS(struct gpsStruct* gpsStructPtrIn)
185 {
186  GPSPortParams.serialdev.numBytes2Read = 1;
187  GPSPortParams.serialdev.readIndex = 0;
188  gpsStructPtrIn->devptr = &GPSPortParams.serialdev;
189  int iNewLine = 0;
190  int tries = 0;
191  do{
192 
193 
194  if(readComPort(&GPSPortParams)==GPSPortParams.serialdev.numBytes2Read)
195  {
196  if(GPSPortParams.serialdev.devdata.inbuff.charbuff[GPSPortParams.serialdev.readIndex] == '\n')
197  {
198  iNewLine = GPSPortParams.serialdev.readIndex;
199  }
200  GPSPortParams.serialdev.readIndex += GPSPortParams.serialdev.numBytes2Read;
201  }
202  else if(GPSPortParams.serialdev.readIndex>0)
203  {
204  usleep(1000);
205  tries++;
206  }
207  else
208  break;
209 
210 
211  }while( GPSPortParams.serialdev.readIndex<charBuffMax && iNewLine == 0 && tries < 5);
212 
213  GPSPortParams.serialdev.devdata.inbuff.charbuff[iNewLine] = '\0';
214 
215  if(iNewLine>6)
216  return ui8TRUE;
217  else
218  return ui8FALSE;
219 
220 }
221 
222 
223 UI_8 readEcompass(struct eCompStruct* eCompStructPtrIn)
224 {
225  eCompPortParams.serialdev.numBytes2Read = 1;
226  eCompPortParams.serialdev.readIndex = 0;
227  eCompStructPtrIn->devptr = &eCompPortParams.serialdev;
228  int iNewLine = 0;
229  int tries = 0;
230  do{
231 
232 
233  if(readComPort(&eCompPortParams)==eCompPortParams.serialdev.numBytes2Read)
234  {
235  if(eCompPortParams.serialdev.devdata.inbuff.charbuff[eCompPortParams.serialdev.readIndex] == '\n')
236  {
237  iNewLine = eCompPortParams.serialdev.readIndex;
238  }
239  eCompPortParams.serialdev.readIndex += eCompPortParams.serialdev.numBytes2Read;
240  }
241  else if(eCompPortParams.serialdev.readIndex>0)
242  {
243  usleep(1000);
244  tries++;
245  }
246  else
247  break;
248 
249 
250  }while( eCompPortParams.serialdev.readIndex<charBuffMax && iNewLine == 0 && tries < 5);
251 
252  eCompPortParams.serialdev.devdata.inbuff.charbuff[iNewLine] = '\0';
253 
254  if(iNewLine>10)
255  return ui8TRUE;
256  else
257  return ui8FALSE;
258 }
259 
260 
261 
262 
263 void readFreqConv(struct freqConvStruct* freqConvStructPtrIn) { ; }
264 void writeFreqConv(struct freqConvStruct* freqConvStructPtrIn) { ; }
265 void readPowerMeter(struct powerMeterStruct* powerMeterStructPtrIn) { ; }
266 void writePowerMeter(struct powerMeterStruct* powerMeterStructPtrIn) { ; }
267 
268 
269 
270 
271 ///////////////////////////////////////////////////////////////////////
272 // Application Data Instances are Created here (Platform Specific)
273 #ifdef __cplusplus
274 theApplicationClass theApplicationExample;
275 #else
277 #endif
278 
279 ////////////////////////////////////////////////////////////////////////////////
280 // Platform Main Entry Points call ExeSys Area Functions
281 #ifdef MAIN_C_NOos_Wsystick
283 #endif
284 #ifdef MAIN_C_NOos_NOsystick
286 #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
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
runOnce
UI_8 runOnce
Definition: Application_Platform_Main.c:83
LCDKeyPadDevDataStruct
struct devicedatastruct LCDKeyPadDevDataStruct
Definition: Platform_QTCreatorC.h:65
ReadConfigLine
void ReadConfigLine(struct configStruct *configStructPtrin)
Definition: Application_Platform_Main.c:172
Platform_QTCreatorC.h
IMS: ccNOos, Platform Specification, QTCreatorC
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