comparison src/g23m-fad/app/app_pei.c @ 1:fa8dc04885d8

src/g23m-*: import from Magnetite
author Mychaela Falconia <falcon@freecalypso.org>
date Fri, 16 Oct 2020 06:25:50 +0000
parents
children
comparison
equal deleted inserted replaced
0:4e78acac3d88 1:fa8dc04885d8
1 /*
2 +------------------------------------------------------------------------------
3 | File: app_pei.c
4 +------------------------------------------------------------------------------
5 | Copyright 2003 Texas Instruments Berlin, AG
6 | All rights reserved.
7 |
8 | This file is confidential and a trade secret of Texas
9 | Instruments Berlin, AG
10 | The receipt of or possession of this file does not convey
11 | any rights to reproduce or disclose its contents or to
12 | manufacture, use, or sell anything it may describe, in
13 | whole, or in part, without the specific written consent of
14 | Texas Instruments Berlin, AG.
15 +-----------------------------------------------------------------------------
16 | Purpose : This module implements the PEI interface
17 | for the entity app.
18 +-----------------------------------------------------------------------------
19 */
20
21 #define APP_PEI_C
22
23 #define ENTITY_APP
24 /* this #define SAP_TCPIP and #define SAP_DCM in prim.h - */
25
26 #define APP_STACK_SIZE 1500
27 #define APP_QUEUE_SIZE 10 /* queue entries */
28 #define APP_PRIORITY 90 /* priority (1->low, 255->high) */
29 #define APP_NUM_TIMER 10 /* number of timers */
30
31
32 /*==== INCLUDES =============================================================*/
33
34 #include <string.h> /* to get strcmp() */
35 #include <stdlib.h> /* to get atoi() */
36 #include <stdio.h> /* to get sprintf() */
37
38 #include "typedefs.h" /* to get Condat data types */
39 #include "vsi.h" /* to get a lot of macros */
40 #include "gsm.h" /* to get a lot of macros */
41 #include "prim.h" /* to get the definitions of used SAP and directions */
42 #include "pei.h" /* to get PEI interface */
43 #include "tools.h" /* to get common tools */
44
45 #ifdef FF_GPF_TCPIP
46 #include "socket_api.h" /* to get sockets' definitions */
47 #endif /* FF_GPF_TCPIP */
48
49 #include "mon_app.h" /* to get mon-definitions */
50 #include "app.h" /* to get the global entity definitions */
51
52
53 /*==== EXTERNAL FUNCTIONS ====================================================*/
54
55 EXTERN char *app_handle_command_gdd(char *);
56 EXTERN char *app_handle_at_command(char *);
57 EXTERN char* app_handle_command_bat(char *);
58
59 /*==== CONSTS ================================================================*/
60
61 /*
62 * Wait as long as possible. This is the time in ms that is waited for a
63 * message in the input queue in the active variant.
64 * It can be decreased by the customer.
65 */
66 #define APP_TIMEOUT 0xffffffff
67
68 /* Entity name
69 */
70 #define ENTITY_NAME_APP "APP"
71
72 /*==== TYPES =================================================================*/
73
74 /*==== LOCALS ================================================================*/
75
76 static BOOL first_access = TRUE;
77 static BOOL exit_flag = FALSE;
78 static T_MONITOR app_mon;
79
80
81 #ifdef FF_GPF_TCPIP
82 T_SOCK_API_INSTANCE sock_api_inst = 0 ; /* Also needed by the appl. core. */
83 // System wide handle of a bearer connection. For future use (multiple PDP contexts)!!
84 T_SOCK_BEARER_HANDLE sock_bearer_handle = 0;
85 #endif /* FF_GPF_TCPIP */
86
87 /*==== PRIVATE FUNCTIONS ====================================================*/
88
89 /*
90 +------------------------------------------------------------------------------
91 | Function : primitive_not_supported
92 +------------------------------------------------------------------------------
93 | Description : This function handles unsupported primitives.
94 |
95 | Parameters : data - not used
96 |
97 | Return : void
98 +------------------------------------------------------------------------------
99 */
100 LOCAL void primitive_not_supported (void *data)
101 {
102 TRACE_FUNCTION ("primitive_not_supported");
103
104 PFREE (data);
105 }
106
107
108 /*
109 +------------------------------------------------------------------------------
110 | Function : pei_primitive
111 +------------------------------------------------------------------------------
112 | Description : Process protocol specific primitive.
113 |
114 | Parameters : prim - pointer to the received primitive
115 |
116 | Return : PEI_OK - function succeeded
117 | PEI_ERROR - function failed
118 +------------------------------------------------------------------------------
119 */
120 static short pei_primitive (void * ptr)
121 {
122 T_PRIM * prim = (T_PRIM *) ptr;
123 unsigned long opc;
124 BOOL result = FALSE;
125
126 TRACE_FUNCTION ("pei_primitive");
127
128 if (prim EQ NULL)
129 {
130 TRACE_EVENT("Empty primitive");
131 return PEI_OK;
132 }
133
134 /*
135 * This must be called for Partition Pool supervision. Will be replaced
136 * by another macro some time.
137 */
138 VSI_PPM_REC (&prim->custom, __FILE__, __LINE__);
139
140 opc = prim->custom.opc;
141 PTRACE_IN(opc);
142
143 #ifdef FF_GPF_TCPIP
144 result = sock_api_handles_primitive(sock_api_inst, prim);
145 #endif /* FF_GPF_TCPIP */
146 if(FALSE EQ result)
147 {
148 // primitive is not a GSM primitive - forward it to the environment
149 if(opc & SYS_MASK)
150 {
151 vsi_c_primitive (VSI_CALLER prim);
152 }
153 else
154 {
155 primitive_not_supported (P2D(prim));
156 return PEI_ERROR;
157 }
158 }
159 return PEI_OK;
160 }
161
162
163 /*
164 +------------------------------------------------------------------------------
165 | Function : pei_init
166 +------------------------------------------------------------------------------
167 | Description : Initialize Protocol Stack Entity
168 |
169 | Parameters : handle - task handle
170 |
171 | Return : PEI_OK - entity initialised
172 | PEI_ERROR - entity not (yet) initialised
173 +------------------------------------------------------------------------------
174 */
175 static short pei_init (T_HANDLE handle)
176 {
177 short ret_value = PEI_OK;
178 BOOL ret = FALSE;
179 TRACE_FUNCTION ("pei_init()");
180
181 /* Initialize task handle */
182 APP_handle = handle;
183
184 /*
185 * Initialize global pointer app_data. This is required to access all
186 * entity data.
187 */
188 app_data = &app_data_base;
189
190 #ifdef FF_GPF_TCPIP
191 /* initialize socket API */
192 ret = sock_api_initialize(&sock_api_inst, handle, ENTITY_NAME_APP);
193 if (FALSE == ret)
194 {
195 TRACE_ERROR("sock_api_initialize() failed") ;
196 return PEI_ERROR ;
197 }
198 TRACE_EVENT("sock_api_initialize()d successfully") ;
199 ret_value = app_initialize_tcpip(handle) ;
200 #endif /* FF_GPF_TCPIP */
201
202 return ret_value;
203 }
204
205 /*
206 +------------------------------------------------------------------------------
207 | Function : pei_timeout
208 +------------------------------------------------------------------------------
209 | Description : Process timeout.
210 |
211 | Parameters : index - timer index
212 |
213 | Return : PEI_OK - timeout processed
214 | PEI_ERROR - timeout not processed
215 +------------------------------------------------------------------------------
216 */
217 static short pei_timeout (unsigned short index)
218 {
219 TRACE_FUNCTION ("pei_timeout");
220
221 /* Process timeout */
222 switch (index)
223 {
224 case 0:
225 /* Call of timeout routine */
226 break;
227 default:
228 TRACE_ERROR("Unknown Timeout");
229 return PEI_ERROR;
230 }
231 return PEI_OK;
232 }
233
234 /*
235 +------------------------------------------------------------------------------
236 | Function : pei_signal
237 +------------------------------------------------------------------------------
238 | Description : Process signal.
239 |
240 | Parameters : opc - signal operation code
241 | data - pointer to primitive
242 |
243 | Return : PEI_OK - signal processed
244 | PEI_ERROR - signal not processed
245 +------------------------------------------------------------------------------
246 */
247 static short pei_signal (unsigned long opc, void* data)
248 {
249 TRACE_FUNCTION ("pei_signal()");
250
251 /* Process signal */
252 TRACE_ERROR("Unknown Signal OPC");
253 return PEI_ERROR;
254 }
255
256 /*
257 +------------------------------------------------------------------------------
258 | Function : pei_exit
259 +------------------------------------------------------------------------------
260 | Description : Close Resources and terminate.
261 |
262 | Parameters : -
263 |
264 | Return : PEI_OK - exit sucessful
265 +------------------------------------------------------------------------------
266 */
267 static short pei_exit (void)
268 {
269 TRACE_FUNCTION ("pei_exit()");
270
271 #ifdef FF_GPF_TCPIP
272 sock_api_deinitialize(sock_api_inst) ;
273 #endif /* FF_GPF_TCPIP */
274
275 exit_flag = TRUE;
276
277 return PEI_OK;
278 }
279
280 /*
281 +------------------------------------------------------------------------------
282 | Function : pei_run
283 +------------------------------------------------------------------------------
284 | Description : Process Primitives, main loop is located in the
285 | Protocol Stack Entity.
286 | Only needed in active body variant
287 |
288 | Parameters : taskhandle - handle of current process
289 | comhandle - queue handle of current process
290 |
291 | Return : PEI_OK - sucessful
292 | PEI_ERROR - not successful
293 +------------------------------------------------------------------------------
294 */
295 static short pei_run (T_HANDLE taskhandle, T_HANDLE comhandle )
296 {
297 T_QMSG message;
298 unsigned long timeout = APP_TIMEOUT;
299
300 TRACE_FUNCTION ("pei_run()");
301
302 while (!exit_flag)
303 {
304 vsi_c_await (VSI_CALLER comhandle, &message, timeout);
305 switch (message.MsgType)
306 {
307 case MSG_PRIMITIVE:
308 pei_primitive (message.Msg.Primitive.Prim );
309 break;
310 case MSG_SIGNAL:
311 pei_signal ( (USHORT)message.Msg.Signal.SigOPC,
312 message.Msg.Signal.SigBuffer );
313 break;
314 case MSG_TIMEOUT:
315 pei_timeout ( (USHORT)message.Msg.Timer.Index );
316 break;
317 default:
318 TRACE_ERROR("Unknown Message Type");
319 break;
320 }
321 }
322
323 exit_flag = FALSE;
324
325 return PEI_OK;
326 }
327
328
329 /*
330 +------------------------------------------------------------------------------
331 | Function : pei_config
332 +------------------------------------------------------------------------------
333 | Description : Dynamic Configuration.
334 |
335 | Parameters : in_string - configuration string
336 |
337 | Return : PEI_OK - sucessful
338 | PEI_ERROR - not successful
339 +------------------------------------------------------------------------------
340 */
341 static short pei_config (char * in_string)
342 {
343 char *errmsg = 0 ; /* Error message from application. */
344
345 TRACE_FUNCTION ("pei_config()");
346 TRACE_EVENT_P1 ("Command:%s",in_string);
347
348 if (ConfigTimer (VSI_CALLER in_string, NULL) == VSI_OK)
349 {
350 return PEI_OK;
351 }
352
353 /* BEGIN testing via PCO config strings */
354 if (in_string)
355 {
356 /* Test commands for GDD (BAT adapter) are prefixed with 'gdd' */
357 if(!strncmp("gdd", in_string, 3))
358 {
359 errmsg = app_handle_command_gdd(in_string);
360 }
361 else if (!strncmp("at_", in_string, 3))
362 {
363 errmsg = app_handle_at_command(in_string);
364 }
365 /* else if(!strncmp("batcfg_", in_string, 7))
366 {
367 errmsg = app_handle_command_bat(in_string);
368 }*/
369 /* Test commands for BAT Lib are prefixed with 'bat' */
370 else if(!strncmp("bat", in_string, 3))
371 {
372 errmsg = app_handle_command_bat(in_string);
373 }
374
375 #ifdef FF_GPF_TCPIP
376 else
377 {
378 // returns '0' in case of success, errorstring else
379 errmsg = app_handle_command_tcpip(in_string) ;
380 }
381 #endif /* FF_GPF_TCPIP */
382 if (errmsg)
383 {
384 TRACE_ERROR(errmsg) ;
385 }
386 else
387 {
388 TRACE_EVENT("command successful") ;
389 }
390 }
391 else
392 {
393 TRACE_ERROR("empty config primitive") ;
394 }
395 return PEI_OK;
396 }
397
398 /*
399 +------------------------------------------------------------------------------
400 | Function : pei_monitor
401 +------------------------------------------------------------------------------
402 | Description : Monitoring of physical Parameters.
403 |
404 | Parameters : out_monitor - return the address of the data to be monitored
405 |
406 | Return : PEI_OK - sucessful (address in out_monitor is valid)
407 | PEI_ERROR - not successful
408 +------------------------------------------------------------------------------
409 */
410 static short pei_monitor (void ** out_monitor)
411 {
412 TRACE_FUNCTION ("pei_monitor()");
413
414 /*
415 * Version = "0.S" (S = Step).
416 */
417 app_mon.version = "app 0.1";
418 *out_monitor = &app_mon;
419
420 return PEI_OK;
421 }
422
423 /*==== PUBLIC FUNCTIONS =====================================================*/
424
425 /*
426 +------------------------------------------------------------------------------
427 | Function : app_pei_create
428 +------------------------------------------------------------------------------
429 | Description : Create the Protocol Stack Entity.
430 |
431 | Parameters : info - Pointer to the structure of entity parameters
432 |
433 | Return : PEI_OK - entity created successfully
434 |
435 +------------------------------------------------------------------------------
436 */
437 short app_pei_create (T_PEI_INFO **info)
438 {
439 static T_PEI_INFO pei_info =
440 {
441 ENTITY_NAME_APP, /* name */
442 { /* pei-table */
443 pei_init,
444 pei_exit,
445 pei_primitive,
446 pei_timeout,
447 pei_signal,
448 pei_run,
449 pei_config,
450 pei_monitor
451 },
452 APP_STACK_SIZE,
453 APP_QUEUE_SIZE,
454 APP_PRIORITY,
455 APP_NUM_TIMER,
456 0x03 /* flags: bit 0 active(0) body/passive(1) */
457 }; /* bit 1 com by copy(0)/reference(1) */
458
459 /* Close Resources if open */
460 if (first_access) {
461 first_access = FALSE;
462 }
463 else {
464 pei_exit ();
465 }
466
467 /* Export startup configuration data */
468 *info = &pei_info;
469
470 return PEI_OK;
471 }
472
473
474 /*==== END OF FILE ==========================================================*/
475