comparison gsm-fw/gpf/tst_drv/titrc.c @ 322:5d1e22505446

GPF: tif library sources imported from Leonardo version
author Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
date Sun, 13 Apr 2014 07:21:57 +0000
parents
children ffb0442ffccf
comparison
equal deleted inserted replaced
321:439afc1139b2 322:5d1e22505446
1 /*
2 +------------------------------------------------------------------------------
3 | File: titrc.c
4 +------------------------------------------------------------------------------
5 | Copyright 2004 Texas Instruments Deutschland, 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 Deutschland, AG.
15 +-----------------------------------------------------------------------------
16 | Purpose : This Module defines the functionality of the TITRC driver
17 | to communicate with the TI trace task.
18 +-----------------------------------------------------------------------------
19 */
20
21
22 #ifndef __TITRC_C__
23 #define __TITRC_C__
24 #endif
25
26 #include "typedefs.h"
27 #include "string.h"
28 #include "tstheader.h"
29 #include "rvt_gen.h"
30 #include "gdi.h"
31 #include "serialswitch.h"
32
33 /*==== TYPES ======================================================*/
34
35 typedef struct
36 {
37 USHORT Handle;
38 USHORT EnabledSignalType;
39 T_DRV_CB_FUNC Callback;
40 T_RVT_USER_ID trc_id;
41 unsigned char connected;
42 T_RVT_BUFFER read_ptr;
43 unsigned int read_len;
44 } T_TITRC_DATA;
45
46 /*==== CONSTANTS ==================================================*/
47
48 #define ALLOWED_TITRC_SIGNALS (DRV_SIGTYPE_READ|DRV_SIGTYPE_CONNECT)
49
50
51 /*==== EXTERNALS ==================================================*/
52
53 extern USHORT emergeny_trace;
54
55 /*==== VARIABLES ==================================================*/
56
57 #ifndef RUN_INT_RAM
58 T_TITRC_DATA TITRC_Data;
59 T_DRV_SIGNAL Signal;
60 #else
61 extern T_TITRC_DATA TITRC_Data;
62 #endif
63
64 #ifndef RUN_FLASH
65 char header_buffer[TST_BIG_HEADER_SIZE];
66 #endif
67
68 /*==== FUNCTIONS ==================================================*/
69
70 #ifndef RUN_INT_RAM
71 extern USHORT TITRC_Write ( void *Buffer, ULONG *BytesToWrite ) ;
72 #endif
73
74 #ifndef RUN_INT_RAM
75 /*
76 +--------------------------------------------------------------------+
77 | PROJECT : GSM-Frame (8415) MODULE : TITRC |
78 | STATE : code ROUTINE : TITRC_Read |
79 +--------------------------------------------------------------------+
80
81 PURPOSE : read data from driver
82
83 */
84 USHORT TITRC_Read ( void *Buffer, ULONG *BytesToRead )
85 {
86
87 if ( TITRC_Data.read_ptr )
88 {
89 if ( *BytesToRead != 0 )
90 {
91 if ( *BytesToRead > TITRC_Data.read_len )
92 *BytesToRead = TITRC_Data.read_len;
93
94 memcpy ( Buffer, TITRC_Data.read_ptr, *BytesToRead );
95
96 if ( *BytesToRead < TITRC_Data.read_len )
97 {
98 TITRC_Data.read_ptr += *BytesToRead;
99 TITRC_Data.read_len -= *BytesToRead;
100 }
101 else
102 TITRC_Data.read_ptr = NULL;
103 }
104 else
105 {
106 *BytesToRead = TITRC_Data.read_len;
107 }
108 }
109 else
110 {
111 *BytesToRead = 0;
112 }
113
114 return DRV_OK;
115 }
116 #endif
117
118 #ifndef RUN_FLASH
119 /*
120 +--------------------------------------------------------------------+
121 | PROJECT : GSM-Frame (8415) MODULE : TITRC |
122 | STATE : code ROUTINE : TITRC_Write |
123 +--------------------------------------------------------------------+
124
125 PURPOSE : write data to driver
126
127 */
128 USHORT TITRC_Write ( void *Buffer, ULONG *BytesToWrite )
129 {
130 T_RVT_FORMAT msg_format;
131 char *ptr = (char*)Buffer;
132 ULONG BytesWritten;
133 ULONG ToWrite;
134 T_RVT_BUFFER rvt_buffer;
135
136 msg_format = RVT_BINARY_FORMAT;
137
138 if ( emergeny_trace )
139 {
140 ptr--;
141 *ptr = 0x13;
142 ToWrite = (ULONG)*BytesToWrite;
143 ToWrite += 1;
144 BytesWritten = (ULONG)SER_tr_WriteNBytes (1, (SYS_UWORD8*)ptr, (SYS_UWORD32)ToWrite);
145 *BytesToWrite = BytesWritten;
146 }
147 else
148 {
149 if ( *BytesToWrite & PRIM_HEADER_FLAG )
150 {
151 memcpy ( header_buffer, (char*)Buffer, TST_BIG_HEADER_SIZE );
152 return DRV_OK;
153 }
154 if ( *BytesToWrite & PRIM_DATA_FLAG )
155 {
156 ToWrite = *BytesToWrite & ~PRIM_DATA_FLAG;
157 if ( rvt_mem_alloc(TITRC_Data.trc_id, ToWrite+TST_BIG_HEADER_SIZE, &rvt_buffer) != RVT_OK )
158 return DRV_BUFFER_FULL;
159 if ( rvt_buffer != NULL )
160 {
161 memcpy ( (char*)rvt_buffer, header_buffer, TST_BIG_HEADER_SIZE );
162 memcpy ( (char*)rvt_buffer+TST_BIG_HEADER_SIZE, (char*)Buffer, ToWrite );
163 if ( rvt_send_trace_no_cpy ( rvt_buffer, TITRC_Data.trc_id, (T_RVT_MSG_LG)ToWrite+TST_BIG_HEADER_SIZE, msg_format ) != RVT_OK )
164 return DRV_BUFFER_FULL;
165 else
166 return DRV_OK;
167 }
168 }
169 if ( rvt_send_trace_cpy ( (T_RVT_BUFFER)Buffer, TITRC_Data.trc_id, (T_RVT_MSG_LG)*BytesToWrite, msg_format ) != RVT_OK )
170 return DRV_BUFFER_FULL;
171 }
172 return DRV_OK;
173 }
174 #endif
175
176 #ifndef RUN_INT_RAM
177 /*
178 +--------------------------------------------------------------------+
179 | PROJECT : GSM-Frame (8415) MODULE : TITRC |
180 | STATE : code ROUTINE : TITRC_SetSignal |
181 +--------------------------------------------------------------------+
182
183 PURPOSE : enable signal for the driver
184
185 */
186 USHORT TITRC_SetSignal ( USHORT SignalType )
187 {
188 if ( !(SignalType & ALLOWED_TITRC_SIGNALS) )
189 return DRV_INVALID_PARAMS;
190 else
191 TITRC_Data.EnabledSignalType |= SignalType;
192
193 return DRV_OK;
194 }
195 #endif
196
197 #ifndef RUN_INT_RAM
198 /*
199 +--------------------------------------------------------------------+
200 | PROJECT : GSM-Frame (8415) MODULE : TITRC |
201 | STATE : code ROUTINE : TITRC_ResetSignal |
202 +--------------------------------------------------------------------+
203
204 PURPOSE : disable signal for the driver
205
206 */
207 USHORT TITRC_ResetSignal ( USHORT SignalType )
208 {
209 if ( !(SignalType & ALLOWED_TITRC_SIGNALS) )
210 return DRV_INVALID_PARAMS;
211 else
212 TITRC_Data.EnabledSignalType &= ~SignalType;
213
214 return DRV_OK;
215 }
216 #endif
217
218 #ifndef RUN_INT_RAM
219 /*
220 +--------------------------------------------------------------------+
221 | PROJECT : GSM-Frame (8415) MODULE : TITRC |
222 | STATE : code ROUTINE : TITRC_SetConfig |
223 +--------------------------------------------------------------------+
224
225 PURPOSE : set configuration for the driver
226
227 */
228 USHORT TITRC_SetConfig ( char *Buffer )
229 {
230
231 if ( TITRC_Data.connected == FALSE )
232 {
233 Signal.SignalType = DRV_SIGTYPE_CONNECT;
234 Signal.DrvHandle = TITRC_Data.Handle;
235 (TITRC_Data.Callback)( &Signal );
236 TITRC_Data.connected = TRUE;
237 }
238 return DRV_OK;
239 }
240 #endif
241
242 #ifndef RUN_INT_RAM
243 /*
244 +--------------------------------------------------------------------+
245 | PROJECT : GSM-Frame (8415) MODULE : TITRC |
246 | STATE : code ROUTINE : TITRC_Callback |
247 +--------------------------------------------------------------------+
248
249 PURPOSE : callback function of the driver
250
251 */
252 int callback_busy = 0;
253 void TITRC_Callback ( T_RVT_BUFFER ptr, UINT16 len )
254 {
255 if ( callback_busy == 1 )
256 for (;;)
257 ;
258
259 callback_busy = 1;
260 if ( TITRC_Data.EnabledSignalType & DRV_SIGTYPE_READ )
261 {
262 TITRC_Data.read_ptr = ptr;
263 TITRC_Data.read_len = len;
264 Signal.SignalType = DRV_SIGTYPE_READ;
265 Signal.DrvHandle = TITRC_Data.Handle;
266 (TITRC_Data.Callback)( &Signal );
267 }
268 callback_busy = 0;
269 }
270 #endif
271
272 #ifndef RUN_INT_RAM
273 /*
274 +--------------------------------------------------------------------+
275 | PROJECT : GSM-Frame (8415) MODULE : TITRC |
276 | STATE : code ROUTINE : TITRC_Init |
277 +--------------------------------------------------------------------+
278
279 PURPOSE : initialize driver
280
281 */
282 USHORT TITRC_Init ( USHORT DrvHandle, T_DRV_CB_FUNC CallbackFunc, T_DRV_EXPORT const **DrvInfo )
283 {
284 static const T_DRV_EXPORT TITRC_Info =
285 {
286 "TITRC",
287 0,
288 {
289 #ifdef _TOOLS_
290 TITRC_Init,
291 #endif
292 NULL,
293 TITRC_Read,
294 TITRC_Write,
295 NULL,
296 NULL,
297 NULL,
298 TITRC_SetSignal,
299 TITRC_ResetSignal,
300 TITRC_SetConfig,
301 NULL,
302 NULL,
303 }
304 };
305
306 TITRC_Data.connected = FALSE;
307
308 TITRC_Data.Handle = DrvHandle;
309
310 TITRC_Data.EnabledSignalType = 0;
311
312 TITRC_Data.Callback = CallbackFunc;
313
314 if ( rvt_register_id ( (char*)"L23",&TITRC_Data.trc_id, TITRC_Callback ) == RVT_INVALID_PARAMETER )
315 return DRV_INITFAILURE;
316
317 *DrvInfo = &TITRC_Info;
318
319 return DRV_OK;
320 }
321 #endif