xref: /btstack/3rd-party/segger-rtt/SEGGER_RTT_Syscalls_KEIL.c (revision 7dc86dfd3569d69491d87d64749fd45afb46c67a)
1*7dc86dfdSMatthias Ringwald /*********************************************************************
2*7dc86dfdSMatthias Ringwald *               SEGGER MICROCONTROLLER GmbH & Co. KG                 *
3*7dc86dfdSMatthias Ringwald *       Solutions for real time microcontroller applications         *
4*7dc86dfdSMatthias Ringwald **********************************************************************
5*7dc86dfdSMatthias Ringwald *                                                                    *
6*7dc86dfdSMatthias Ringwald *       (c) 2014 - 2016  SEGGER Microcontroller GmbH & Co. KG        *
7*7dc86dfdSMatthias Ringwald *                                                                    *
8*7dc86dfdSMatthias Ringwald *       www.segger.com     Support: [email protected]               *
9*7dc86dfdSMatthias Ringwald *                                                                    *
10*7dc86dfdSMatthias Ringwald **********************************************************************
11*7dc86dfdSMatthias Ringwald *                                                                    *
12*7dc86dfdSMatthias Ringwald *       SEGGER RTT * Real Time Transfer for embedded targets         *
13*7dc86dfdSMatthias Ringwald *                                                                    *
14*7dc86dfdSMatthias Ringwald **********************************************************************
15*7dc86dfdSMatthias Ringwald *                                                                    *
16*7dc86dfdSMatthias Ringwald * All rights reserved.                                               *
17*7dc86dfdSMatthias Ringwald *                                                                    *
18*7dc86dfdSMatthias Ringwald * SEGGER strongly recommends to not make any changes                 *
19*7dc86dfdSMatthias Ringwald * to or modify the source code of this software in order to stay     *
20*7dc86dfdSMatthias Ringwald * compatible with the RTT protocol and J-Link.                       *
21*7dc86dfdSMatthias Ringwald *                                                                    *
22*7dc86dfdSMatthias Ringwald * Redistribution and use in source and binary forms, with or         *
23*7dc86dfdSMatthias Ringwald * without modification, are permitted provided that the following    *
24*7dc86dfdSMatthias Ringwald * conditions are met:                                                *
25*7dc86dfdSMatthias Ringwald *                                                                    *
26*7dc86dfdSMatthias Ringwald * o Redistributions of source code must retain the above copyright   *
27*7dc86dfdSMatthias Ringwald *   notice, this list of conditions and the following disclaimer.    *
28*7dc86dfdSMatthias Ringwald *                                                                    *
29*7dc86dfdSMatthias Ringwald * o Redistributions in binary form must reproduce the above          *
30*7dc86dfdSMatthias Ringwald *   copyright notice, this list of conditions and the following      *
31*7dc86dfdSMatthias Ringwald *   disclaimer in the documentation and/or other materials provided  *
32*7dc86dfdSMatthias Ringwald *   with the distribution.                                           *
33*7dc86dfdSMatthias Ringwald *                                                                    *
34*7dc86dfdSMatthias Ringwald * o Neither the name of SEGGER Microcontroller GmbH & Co. KG         *
35*7dc86dfdSMatthias Ringwald *   nor the names of its contributors may be used to endorse or      *
36*7dc86dfdSMatthias Ringwald *   promote products derived from this software without specific     *
37*7dc86dfdSMatthias Ringwald *   prior written permission.                                        *
38*7dc86dfdSMatthias Ringwald *                                                                    *
39*7dc86dfdSMatthias Ringwald * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND             *
40*7dc86dfdSMatthias Ringwald * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,        *
41*7dc86dfdSMatthias Ringwald * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF           *
42*7dc86dfdSMatthias Ringwald * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE           *
43*7dc86dfdSMatthias Ringwald * DISCLAIMED. IN NO EVENT SHALL SEGGER Microcontroller BE LIABLE FOR *
44*7dc86dfdSMatthias Ringwald * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR           *
45*7dc86dfdSMatthias Ringwald * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT  *
46*7dc86dfdSMatthias Ringwald * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;    *
47*7dc86dfdSMatthias Ringwald * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF      *
48*7dc86dfdSMatthias Ringwald * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT          *
49*7dc86dfdSMatthias Ringwald * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE  *
50*7dc86dfdSMatthias Ringwald * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH   *
51*7dc86dfdSMatthias Ringwald * DAMAGE.                                                            *
52*7dc86dfdSMatthias Ringwald *                                                                    *
53*7dc86dfdSMatthias Ringwald **********************************************************************
54*7dc86dfdSMatthias Ringwald ---------------------------END-OF-HEADER------------------------------
55*7dc86dfdSMatthias Ringwald File    : RTT_Syscalls_KEIL.c
56*7dc86dfdSMatthias Ringwald Purpose : Retargeting module for KEIL MDK-CM3.
57*7dc86dfdSMatthias Ringwald           Low-level functions for using printf() via RTT
58*7dc86dfdSMatthias Ringwald Revision: $Rev: 4351 $
59*7dc86dfdSMatthias Ringwald ----------------------------------------------------------------------
60*7dc86dfdSMatthias Ringwald */
61*7dc86dfdSMatthias Ringwald #ifdef __CC_ARM
62*7dc86dfdSMatthias Ringwald 
63*7dc86dfdSMatthias Ringwald #include <stdio.h>
64*7dc86dfdSMatthias Ringwald #include <stdlib.h>
65*7dc86dfdSMatthias Ringwald #include <string.h>
66*7dc86dfdSMatthias Ringwald #include <rt_sys.h>
67*7dc86dfdSMatthias Ringwald #include <rt_misc.h>
68*7dc86dfdSMatthias Ringwald 
69*7dc86dfdSMatthias Ringwald #include "SEGGER_RTT.h"
70*7dc86dfdSMatthias Ringwald /*********************************************************************
71*7dc86dfdSMatthias Ringwald *
72*7dc86dfdSMatthias Ringwald *       #pragmas
73*7dc86dfdSMatthias Ringwald *
74*7dc86dfdSMatthias Ringwald **********************************************************************
75*7dc86dfdSMatthias Ringwald */
76*7dc86dfdSMatthias Ringwald #pragma import(__use_no_semihosting)
77*7dc86dfdSMatthias Ringwald 
78*7dc86dfdSMatthias Ringwald #ifdef _MICROLIB
79*7dc86dfdSMatthias Ringwald   #pragma import(__use_full_stdio)
80*7dc86dfdSMatthias Ringwald #endif
81*7dc86dfdSMatthias Ringwald 
82*7dc86dfdSMatthias Ringwald /*********************************************************************
83*7dc86dfdSMatthias Ringwald *
84*7dc86dfdSMatthias Ringwald *       Defines non-configurable
85*7dc86dfdSMatthias Ringwald *
86*7dc86dfdSMatthias Ringwald **********************************************************************
87*7dc86dfdSMatthias Ringwald */
88*7dc86dfdSMatthias Ringwald 
89*7dc86dfdSMatthias Ringwald /* Standard IO device handles - arbitrary, but any real file system handles must be
90*7dc86dfdSMatthias Ringwald    less than 0x8000. */
91*7dc86dfdSMatthias Ringwald #define STDIN             0x8001    // Standard Input Stream
92*7dc86dfdSMatthias Ringwald #define STDOUT            0x8002    // Standard Output Stream
93*7dc86dfdSMatthias Ringwald #define STDERR            0x8003    // Standard Error Stream
94*7dc86dfdSMatthias Ringwald 
95*7dc86dfdSMatthias Ringwald /*********************************************************************
96*7dc86dfdSMatthias Ringwald *
97*7dc86dfdSMatthias Ringwald *       Public const
98*7dc86dfdSMatthias Ringwald *
99*7dc86dfdSMatthias Ringwald **********************************************************************
100*7dc86dfdSMatthias Ringwald */
101*7dc86dfdSMatthias Ringwald //const char __stdin_name[]  = "STDIN";
102*7dc86dfdSMatthias Ringwald const char __stdout_name[] = "STDOUT";
103*7dc86dfdSMatthias Ringwald const char __stderr_name[] = "STDERR";
104*7dc86dfdSMatthias Ringwald 
105*7dc86dfdSMatthias Ringwald /*********************************************************************
106*7dc86dfdSMatthias Ringwald *
107*7dc86dfdSMatthias Ringwald *       Public code
108*7dc86dfdSMatthias Ringwald *
109*7dc86dfdSMatthias Ringwald **********************************************************************
110*7dc86dfdSMatthias Ringwald */
111*7dc86dfdSMatthias Ringwald 
112*7dc86dfdSMatthias Ringwald /*********************************************************************
113*7dc86dfdSMatthias Ringwald *
114*7dc86dfdSMatthias Ringwald *       _ttywrch
115*7dc86dfdSMatthias Ringwald *
116*7dc86dfdSMatthias Ringwald *  Function description:
117*7dc86dfdSMatthias Ringwald *    Outputs a character to the console
118*7dc86dfdSMatthias Ringwald *
119*7dc86dfdSMatthias Ringwald *  Parameters:
120*7dc86dfdSMatthias Ringwald *    c    - character to output
121*7dc86dfdSMatthias Ringwald *
122*7dc86dfdSMatthias Ringwald */
123*7dc86dfdSMatthias Ringwald void _ttywrch(int c) {
124*7dc86dfdSMatthias Ringwald   fputc(c, stdout); // stdout
125*7dc86dfdSMatthias Ringwald   fflush(stdout);
126*7dc86dfdSMatthias Ringwald }
127*7dc86dfdSMatthias Ringwald 
128*7dc86dfdSMatthias Ringwald /*********************************************************************
129*7dc86dfdSMatthias Ringwald *
130*7dc86dfdSMatthias Ringwald *       _sys_open
131*7dc86dfdSMatthias Ringwald *
132*7dc86dfdSMatthias Ringwald *  Function description:
133*7dc86dfdSMatthias Ringwald *    Opens the device/file in order to do read/write operations
134*7dc86dfdSMatthias Ringwald *
135*7dc86dfdSMatthias Ringwald *  Parameters:
136*7dc86dfdSMatthias Ringwald *    sName        - sName of the device/file to open
137*7dc86dfdSMatthias Ringwald *    OpenMode    - This parameter is currently ignored
138*7dc86dfdSMatthias Ringwald *
139*7dc86dfdSMatthias Ringwald *  Return value:
140*7dc86dfdSMatthias Ringwald *    != 0     - Handle to the object to open, otherwise
141*7dc86dfdSMatthias Ringwald *    == 0     -"device" is not handled by this module
142*7dc86dfdSMatthias Ringwald *
143*7dc86dfdSMatthias Ringwald */
144*7dc86dfdSMatthias Ringwald FILEHANDLE _sys_open(const char * sName, int OpenMode) {
145*7dc86dfdSMatthias Ringwald   (void)OpenMode;
146*7dc86dfdSMatthias Ringwald   // Register standard Input Output devices.
147*7dc86dfdSMatthias Ringwald   if (strcmp(sName, __stdout_name) == 0) {
148*7dc86dfdSMatthias Ringwald     return (STDOUT);
149*7dc86dfdSMatthias Ringwald   } else if (strcmp(sName, __stderr_name) == 0) {
150*7dc86dfdSMatthias Ringwald     return (STDERR);
151*7dc86dfdSMatthias Ringwald   } else
152*7dc86dfdSMatthias Ringwald   return (0);  // Not implemented
153*7dc86dfdSMatthias Ringwald }
154*7dc86dfdSMatthias Ringwald 
155*7dc86dfdSMatthias Ringwald /*********************************************************************
156*7dc86dfdSMatthias Ringwald *
157*7dc86dfdSMatthias Ringwald *       _sys_close
158*7dc86dfdSMatthias Ringwald *
159*7dc86dfdSMatthias Ringwald *  Function description:
160*7dc86dfdSMatthias Ringwald *    Closes the handle to the open device/file
161*7dc86dfdSMatthias Ringwald *
162*7dc86dfdSMatthias Ringwald *  Parameters:
163*7dc86dfdSMatthias Ringwald *    hFile    - Handle to a file opened via _sys_open
164*7dc86dfdSMatthias Ringwald *
165*7dc86dfdSMatthias Ringwald *  Return value:
166*7dc86dfdSMatthias Ringwald *    0     - device/file closed
167*7dc86dfdSMatthias Ringwald *
168*7dc86dfdSMatthias Ringwald */
169*7dc86dfdSMatthias Ringwald int _sys_close(FILEHANDLE hFile) {
170*7dc86dfdSMatthias Ringwald   (void)hFile;
171*7dc86dfdSMatthias Ringwald   return 0;  // Not implemented
172*7dc86dfdSMatthias Ringwald }
173*7dc86dfdSMatthias Ringwald 
174*7dc86dfdSMatthias Ringwald /*********************************************************************
175*7dc86dfdSMatthias Ringwald *
176*7dc86dfdSMatthias Ringwald *       _sys_write
177*7dc86dfdSMatthias Ringwald *
178*7dc86dfdSMatthias Ringwald *  Function description:
179*7dc86dfdSMatthias Ringwald *    Writes the data to an open handle.
180*7dc86dfdSMatthias Ringwald *    Currently this function only outputs data to the console
181*7dc86dfdSMatthias Ringwald *
182*7dc86dfdSMatthias Ringwald *  Parameters:
183*7dc86dfdSMatthias Ringwald *    hFile    - Handle to a file opened via _sys_open
184*7dc86dfdSMatthias Ringwald *    pBuffer  - Pointer to the data that shall be written
185*7dc86dfdSMatthias Ringwald *    NumBytes      - Number of bytes to write
186*7dc86dfdSMatthias Ringwald *    Mode     - The Mode that shall be used
187*7dc86dfdSMatthias Ringwald *
188*7dc86dfdSMatthias Ringwald *  Return value:
189*7dc86dfdSMatthias Ringwald *    Number of bytes *not* written to the file/device
190*7dc86dfdSMatthias Ringwald *
191*7dc86dfdSMatthias Ringwald */
192*7dc86dfdSMatthias Ringwald int _sys_write(FILEHANDLE hFile, const unsigned char * pBuffer, unsigned NumBytes, int Mode) {
193*7dc86dfdSMatthias Ringwald   int r = 0;
194*7dc86dfdSMatthias Ringwald 
195*7dc86dfdSMatthias Ringwald   (void)Mode;
196*7dc86dfdSMatthias Ringwald   if (hFile == STDOUT) {
197*7dc86dfdSMatthias Ringwald     return NumBytes - SEGGER_RTT_Write(0, (const char*)pBuffer, NumBytes);
198*7dc86dfdSMatthias Ringwald   }
199*7dc86dfdSMatthias Ringwald   return r;
200*7dc86dfdSMatthias Ringwald }
201*7dc86dfdSMatthias Ringwald 
202*7dc86dfdSMatthias Ringwald /*********************************************************************
203*7dc86dfdSMatthias Ringwald *
204*7dc86dfdSMatthias Ringwald *       _sys_read
205*7dc86dfdSMatthias Ringwald *
206*7dc86dfdSMatthias Ringwald *  Function description:
207*7dc86dfdSMatthias Ringwald *    Reads data from an open handle.
208*7dc86dfdSMatthias Ringwald *    Currently this modules does nothing.
209*7dc86dfdSMatthias Ringwald *
210*7dc86dfdSMatthias Ringwald *  Parameters:
211*7dc86dfdSMatthias Ringwald *    hFile    - Handle to a file opened via _sys_open
212*7dc86dfdSMatthias Ringwald *    pBuffer  - Pointer to buffer to store the read data
213*7dc86dfdSMatthias Ringwald *    NumBytes      - Number of bytes to read
214*7dc86dfdSMatthias Ringwald *    Mode     - The Mode that shall be used
215*7dc86dfdSMatthias Ringwald *
216*7dc86dfdSMatthias Ringwald *  Return value:
217*7dc86dfdSMatthias Ringwald *    Number of bytes read from the file/device
218*7dc86dfdSMatthias Ringwald *
219*7dc86dfdSMatthias Ringwald */
220*7dc86dfdSMatthias Ringwald int _sys_read(FILEHANDLE hFile, unsigned char * pBuffer, unsigned NumBytes, int Mode) {
221*7dc86dfdSMatthias Ringwald   (void)hFile;
222*7dc86dfdSMatthias Ringwald   (void)pBuffer;
223*7dc86dfdSMatthias Ringwald   (void)NumBytes;
224*7dc86dfdSMatthias Ringwald   (void)Mode;
225*7dc86dfdSMatthias Ringwald   return (0);  // Not implemented
226*7dc86dfdSMatthias Ringwald }
227*7dc86dfdSMatthias Ringwald 
228*7dc86dfdSMatthias Ringwald /*********************************************************************
229*7dc86dfdSMatthias Ringwald *
230*7dc86dfdSMatthias Ringwald *       _sys_istty
231*7dc86dfdSMatthias Ringwald *
232*7dc86dfdSMatthias Ringwald *  Function description:
233*7dc86dfdSMatthias Ringwald *    This function shall return whether the opened file
234*7dc86dfdSMatthias Ringwald *    is a console device or not.
235*7dc86dfdSMatthias Ringwald *
236*7dc86dfdSMatthias Ringwald *  Parameters:
237*7dc86dfdSMatthias Ringwald *    hFile    - Handle to a file opened via _sys_open
238*7dc86dfdSMatthias Ringwald *
239*7dc86dfdSMatthias Ringwald *  Return value:
240*7dc86dfdSMatthias Ringwald *    1       - Device is     a console
241*7dc86dfdSMatthias Ringwald *    0       - Device is not a console
242*7dc86dfdSMatthias Ringwald *
243*7dc86dfdSMatthias Ringwald */
244*7dc86dfdSMatthias Ringwald int _sys_istty(FILEHANDLE hFile) {
245*7dc86dfdSMatthias Ringwald   if (hFile > 0x8000) {
246*7dc86dfdSMatthias Ringwald     return (1);
247*7dc86dfdSMatthias Ringwald   }
248*7dc86dfdSMatthias Ringwald   return (0);  // Not implemented
249*7dc86dfdSMatthias Ringwald }
250*7dc86dfdSMatthias Ringwald 
251*7dc86dfdSMatthias Ringwald /*********************************************************************
252*7dc86dfdSMatthias Ringwald *
253*7dc86dfdSMatthias Ringwald *       _sys_seek
254*7dc86dfdSMatthias Ringwald *
255*7dc86dfdSMatthias Ringwald *  Function description:
256*7dc86dfdSMatthias Ringwald *    Seeks via the file to a specific position
257*7dc86dfdSMatthias Ringwald *
258*7dc86dfdSMatthias Ringwald *  Parameters:
259*7dc86dfdSMatthias Ringwald *    hFile  - Handle to a file opened via _sys_open
260*7dc86dfdSMatthias Ringwald *    Pos    -
261*7dc86dfdSMatthias Ringwald *
262*7dc86dfdSMatthias Ringwald *  Return value:
263*7dc86dfdSMatthias Ringwald *    int       -
264*7dc86dfdSMatthias Ringwald *
265*7dc86dfdSMatthias Ringwald */
266*7dc86dfdSMatthias Ringwald int _sys_seek(FILEHANDLE hFile, long Pos) {
267*7dc86dfdSMatthias Ringwald   (void)hFile;
268*7dc86dfdSMatthias Ringwald   (void)Pos;
269*7dc86dfdSMatthias Ringwald   return (0);  // Not implemented
270*7dc86dfdSMatthias Ringwald }
271*7dc86dfdSMatthias Ringwald 
272*7dc86dfdSMatthias Ringwald /*********************************************************************
273*7dc86dfdSMatthias Ringwald *
274*7dc86dfdSMatthias Ringwald *       _sys_ensure
275*7dc86dfdSMatthias Ringwald *
276*7dc86dfdSMatthias Ringwald *  Function description:
277*7dc86dfdSMatthias Ringwald *
278*7dc86dfdSMatthias Ringwald *
279*7dc86dfdSMatthias Ringwald *  Parameters:
280*7dc86dfdSMatthias Ringwald *    hFile    - Handle to a file opened via _sys_open
281*7dc86dfdSMatthias Ringwald *
282*7dc86dfdSMatthias Ringwald *  Return value:
283*7dc86dfdSMatthias Ringwald *    int       -
284*7dc86dfdSMatthias Ringwald *
285*7dc86dfdSMatthias Ringwald */
286*7dc86dfdSMatthias Ringwald int _sys_ensure(FILEHANDLE hFile) {
287*7dc86dfdSMatthias Ringwald   (void)hFile;
288*7dc86dfdSMatthias Ringwald   return (-1);  // Not implemented
289*7dc86dfdSMatthias Ringwald }
290*7dc86dfdSMatthias Ringwald 
291*7dc86dfdSMatthias Ringwald /*********************************************************************
292*7dc86dfdSMatthias Ringwald *
293*7dc86dfdSMatthias Ringwald *       _sys_flen
294*7dc86dfdSMatthias Ringwald *
295*7dc86dfdSMatthias Ringwald *  Function description:
296*7dc86dfdSMatthias Ringwald *    Returns the length of the opened file handle
297*7dc86dfdSMatthias Ringwald *
298*7dc86dfdSMatthias Ringwald *  Parameters:
299*7dc86dfdSMatthias Ringwald *    hFile    - Handle to a file opened via _sys_open
300*7dc86dfdSMatthias Ringwald *
301*7dc86dfdSMatthias Ringwald *  Return value:
302*7dc86dfdSMatthias Ringwald *    Length of the file
303*7dc86dfdSMatthias Ringwald *
304*7dc86dfdSMatthias Ringwald */
305*7dc86dfdSMatthias Ringwald long _sys_flen(FILEHANDLE hFile) {
306*7dc86dfdSMatthias Ringwald   (void)hFile;
307*7dc86dfdSMatthias Ringwald   return (0);  // Not implemented
308*7dc86dfdSMatthias Ringwald }
309*7dc86dfdSMatthias Ringwald 
310*7dc86dfdSMatthias Ringwald /*********************************************************************
311*7dc86dfdSMatthias Ringwald *
312*7dc86dfdSMatthias Ringwald *       _sys_tmpnam
313*7dc86dfdSMatthias Ringwald *
314*7dc86dfdSMatthias Ringwald *  Function description:
315*7dc86dfdSMatthias Ringwald *    This function converts the file number fileno for a temporary
316*7dc86dfdSMatthias Ringwald *    file to a unique filename, for example, tmp0001.
317*7dc86dfdSMatthias Ringwald *
318*7dc86dfdSMatthias Ringwald *  Parameters:
319*7dc86dfdSMatthias Ringwald *    pBuffer    - Pointer to a buffer to store the name
320*7dc86dfdSMatthias Ringwald *    FileNum    - file number to convert
321*7dc86dfdSMatthias Ringwald *    MaxLen     - Size of the buffer
322*7dc86dfdSMatthias Ringwald *
323*7dc86dfdSMatthias Ringwald *  Return value:
324*7dc86dfdSMatthias Ringwald *     1 - Error
325*7dc86dfdSMatthias Ringwald *     0 - Success
326*7dc86dfdSMatthias Ringwald *
327*7dc86dfdSMatthias Ringwald */
328*7dc86dfdSMatthias Ringwald int _sys_tmpnam(char * pBuffer, int FileNum, unsigned MaxLen) {
329*7dc86dfdSMatthias Ringwald   (void)pBuffer;
330*7dc86dfdSMatthias Ringwald   (void)FileNum;
331*7dc86dfdSMatthias Ringwald   (void)MaxLen;
332*7dc86dfdSMatthias Ringwald   return (1);  // Not implemented
333*7dc86dfdSMatthias Ringwald }
334*7dc86dfdSMatthias Ringwald 
335*7dc86dfdSMatthias Ringwald /*********************************************************************
336*7dc86dfdSMatthias Ringwald *
337*7dc86dfdSMatthias Ringwald *       _sys_command_string
338*7dc86dfdSMatthias Ringwald *
339*7dc86dfdSMatthias Ringwald *  Function description:
340*7dc86dfdSMatthias Ringwald *    This function shall execute a system command.
341*7dc86dfdSMatthias Ringwald *
342*7dc86dfdSMatthias Ringwald *  Parameters:
343*7dc86dfdSMatthias Ringwald *    cmd    - Pointer to the command string
344*7dc86dfdSMatthias Ringwald *    len    - Length of the string
345*7dc86dfdSMatthias Ringwald *
346*7dc86dfdSMatthias Ringwald *  Return value:
347*7dc86dfdSMatthias Ringwald *    == NULL - Command was not successfully executed
348*7dc86dfdSMatthias Ringwald *    == sCmd - Command was passed successfully
349*7dc86dfdSMatthias Ringwald *
350*7dc86dfdSMatthias Ringwald */
351*7dc86dfdSMatthias Ringwald char * _sys_command_string(char * cmd, int len) {
352*7dc86dfdSMatthias Ringwald   (void)len;
353*7dc86dfdSMatthias Ringwald   return cmd;  // Not implemented
354*7dc86dfdSMatthias Ringwald }
355*7dc86dfdSMatthias Ringwald 
356*7dc86dfdSMatthias Ringwald /*********************************************************************
357*7dc86dfdSMatthias Ringwald *
358*7dc86dfdSMatthias Ringwald *       _sys_exit
359*7dc86dfdSMatthias Ringwald *
360*7dc86dfdSMatthias Ringwald *  Function description:
361*7dc86dfdSMatthias Ringwald *    This function is called when the application returns from main
362*7dc86dfdSMatthias Ringwald *
363*7dc86dfdSMatthias Ringwald *  Parameters:
364*7dc86dfdSMatthias Ringwald *    ReturnCode    - Return code from the main function
365*7dc86dfdSMatthias Ringwald *
366*7dc86dfdSMatthias Ringwald *
367*7dc86dfdSMatthias Ringwald */
368*7dc86dfdSMatthias Ringwald void _sys_exit(int ReturnCode) {
369*7dc86dfdSMatthias Ringwald   (void)ReturnCode;
370*7dc86dfdSMatthias Ringwald   while (1);  // Not implemented
371*7dc86dfdSMatthias Ringwald }
372*7dc86dfdSMatthias Ringwald 
373*7dc86dfdSMatthias Ringwald #endif
374*7dc86dfdSMatthias Ringwald /*************************** End of file ****************************/
375