FreeCalypso > hg > freecalypso-citrine
comparison gpf/tst_drv/mux.c @ 0:75a11d740a02
initial import of gsm-fw from freecalypso-sw rev 1033:5ab737ac3ad7
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Thu, 09 Jun 2016 00:02:41 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:75a11d740a02 |
---|---|
1 /* | |
2 +------------------------------------------------------------------------------ | |
3 | File: mux.c | |
4 +------------------------------------------------------------------------------ | |
5 | Copyright 2002 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 defines the adaptation of the MUX_tr driver | |
17 | to the GDI. | |
18 +----------------------------------------------------------------------------- | |
19 */ | |
20 | |
21 #ifdef __MUX_C__ | |
22 #define __MUX_C__ | |
23 #endif | |
24 | |
25 #include "stdlib.h" | |
26 #include <stdio.h> | |
27 #include "string.h" | |
28 #include "typedefs.h" | |
29 | |
30 #include "tools.h" | |
31 #include "os.h" | |
32 #include "gdi.h" | |
33 #include "vsi.h" | |
34 #include "glob_defs.h" | |
35 #undef VSI_CALLER | |
36 #include "frame.h" | |
37 #include "prim.h" /* to get the definitions of used SAP and directions */ | |
38 #include "gsm.h" | |
39 #include "pei.h" | |
40 #include "route.h" | |
41 #include "dti.h" /* functionality of the dti library */ | |
42 #include "mux.h" /* to get the global entity definitions */ | |
43 #include "frame.h" | |
44 | |
45 /*==== TYPES ======================================================*/ | |
46 | |
47 /*==== CONSTANTS ==================================================*/ | |
48 | |
49 #define VSI_CALLER m_tst_handle, | |
50 #define VSI_CALLER_SINGLE m_tst_handle | |
51 | |
52 #define ALLOWED_MUX_SIGNALS (DRV_SIGTYPE_READ|DRV_SIGTYPE_CONNECT) | |
53 | |
54 #define TST_NAME "TST" | |
55 /*==== EXTERNALS ==================================================*/ | |
56 | |
57 extern T_HANDLE ext_data_pool_handle; | |
58 extern T_QMSG QueueMsg; | |
59 | |
60 /*==== GLOBAL VARIABLES ==================================================*/ | |
61 | |
62 /*==== LOCAL VARIABLES ==================================================*/ | |
63 static T_DRV_SIGNAL Signal; | |
64 | |
65 T_HANDLE m_tst_handle; | |
66 | |
67 /*==== FUNCTIONS ==================================================*/ | |
68 | |
69 /* | |
70 +--------------------------------------------------------------------+ | |
71 | PROJECT : GSM-Frame (8415) MODULE : MUX | | |
72 | STATE : code ROUTINE : mux_Exit | | |
73 +--------------------------------------------------------------------+ | |
74 | |
75 PURPOSE : exit a driver | |
76 | |
77 */ | |
78 void mux_Exit ( void ) | |
79 { | |
80 //vsi_p_delete (0, vsi_p_handle (0,"MTST")); | |
81 mux_data.Connected = FALSE; | |
82 } | |
83 | |
84 /* | |
85 +--------------------------------------------------------------------+ | |
86 | PROJECT : GSM-Frame (8415) MODULE : MUX | | |
87 | STATE : code ROUTINE : mux_Read | | |
88 +--------------------------------------------------------------------+ | |
89 | |
90 PURPOSE : read data from driver | |
91 | |
92 */ | |
93 USHORT mux_Read ( void *Buffer, ULONG *BytesToRead ) | |
94 { | |
95 T_desc2 *d; | |
96 T_desc2 *d_new; | |
97 | |
98 /* copy data into buffer */ | |
99 *BytesToRead=0; | |
100 d=mux_data.recv_data; | |
101 while (d) | |
102 { | |
103 d_new=(T_desc2 *)d->next; | |
104 *BytesToRead += d->len; | |
105 memcpy(Buffer, d->buffer, d->len); | |
106 /* free memory */ | |
107 MFREE(d); | |
108 | |
109 d=d_new; | |
110 } | |
111 | |
112 if (mux_data.dti_state NEQ IDLE) /* not yet configured */ | |
113 { | |
114 return DRV_NOTCONFIGURED; | |
115 } | |
116 else | |
117 { | |
118 /* inform UART that we are ready to receive next data package */ | |
119 dti_start | |
120 ( | |
121 mtst_hDTI, | |
122 MTST_DTI_DN_INSTANCE, | |
123 MTST_DTI_DN_INTERFACE, | |
124 MTST_DTI_DN_CHANNEL | |
125 ); | |
126 } | |
127 | |
128 return DRV_OK; | |
129 } | |
130 | |
131 | |
132 /* | |
133 +--------------------------------------------------------------------+ | |
134 | PROJECT : GSM-Frame (8415) MODULE : MUX | | |
135 | STATE : code ROUTINE : mux_Write | | |
136 +--------------------------------------------------------------------+ | |
137 | |
138 PURPOSE : write data to driver | |
139 | |
140 */ | |
141 USHORT mux_Write ( void *Buffer, ULONG *BytesToWrite ) | |
142 { | |
143 USHORT ret = DRV_OK; | |
144 | |
145 if (mux_data.h_comm_mtst==VSI_ERROR) /* not yet configured */ | |
146 { | |
147 ret=DRV_NOTCONFIGURED; | |
148 } | |
149 else | |
150 { | |
151 T_desc2 *d; | |
152 T_QMSG *pMsg = &QueueMsg; | |
153 | |
154 PALLOC(localPrimPtr, DTI2_DATA_IND); | |
155 | |
156 /* fill in parameters */ | |
157 localPrimPtr->parameters.p_id=DTI_PID_UOS; /* protocol identifier */ | |
158 /* flow control state */ | |
159 localPrimPtr->parameters.st_lines.st_flow=DTI_FLOW_ON; | |
160 /* line state sa */ | |
161 localPrimPtr->parameters.st_lines.st_line_sa=DTI_SA_ON; | |
162 /* line state sb */ | |
163 localPrimPtr->parameters.st_lines.st_line_sb=DTI_SB_ON; | |
164 /* break length */ | |
165 localPrimPtr->parameters.st_lines.st_break_len=DTI_BREAK_OFF; | |
166 | |
167 /* list of generic data descriptors */ | |
168 MALLOC(d,(ULONG)(sizeof(T_desc2)+*BytesToWrite-1)); | |
169 localPrimPtr->desc_list2.first=(ULONG)d; | |
170 localPrimPtr->desc_list2.list_len= (USHORT)*BytesToWrite; | |
171 d->next = 0; | |
172 d->len = (USHORT)*BytesToWrite; | |
173 d->size = *BytesToWrite; | |
174 d->offset = 0; | |
175 memcpy(d->buffer,Buffer,*BytesToWrite); | |
176 | |
177 /* PSEND without tracing */ | |
178 pMsg->Msg.Primitive.Prim = (T_VOID_STRUCT*)(D2P(localPrimPtr)); | |
179 pMsg->Msg.Primitive.PrimLen = PSIZE(localPrimPtr); | |
180 pMsg->MsgType = MSG_PRIMITIVE; | |
181 #ifdef MEMORY_SUPERVISION | |
182 vsi_c_send (VSI_CALLER mux_data.h_comm_mtst,pMsg,__FILE__,__LINE__); | |
183 #else | |
184 vsi_c_send (VSI_CALLER mux_data.h_comm_mtst,pMsg); | |
185 #endif | |
186 } | |
187 | |
188 return ( ret ); | |
189 } | |
190 /* | |
191 +--------------------------------------------------------------------+ | |
192 | PROJECT : GSM-Frame (8415) MODULE : MUX | | |
193 | STATE : code ROUTINE : mux_SetSignal | | |
194 +--------------------------------------------------------------------+ | |
195 | |
196 PURPOSE : enable signal for the driver | |
197 | |
198 */ | |
199 USHORT mux_SetSignal ( USHORT SignalType ) | |
200 { | |
201 if ( !(SignalType & ALLOWED_MUX_SIGNALS) ) | |
202 return DRV_INVALID_PARAMS; | |
203 else | |
204 mux_data.EnabledSignalType |= SignalType; | |
205 | |
206 return DRV_OK; | |
207 } | |
208 | |
209 /* | |
210 +--------------------------------------------------------------------+ | |
211 | PROJECT : GSM-Frame (8415) MODULE : MUX | | |
212 | STATE : code ROUTINE : mux_ResetSignal | | |
213 +--------------------------------------------------------------------+ | |
214 | |
215 PURPOSE : disable signal for the driver | |
216 | |
217 */ | |
218 USHORT mux_ResetSignal ( USHORT SignalType ) | |
219 { | |
220 if ( !(SignalType & ALLOWED_MUX_SIGNALS) ) | |
221 return DRV_INVALID_PARAMS; | |
222 else | |
223 mux_data.EnabledSignalType &= ~SignalType; | |
224 | |
225 return DRV_OK; | |
226 } | |
227 | |
228 /* | |
229 +--------------------------------------------------------------------+ | |
230 | PROJECT : GSM-Frame (8415) MODULE : MUX | | |
231 | STATE : code ROUTINE : mux_SetConfig | | |
232 +--------------------------------------------------------------------+ | |
233 | |
234 PURPOSE : set configuration for the driver | |
235 | |
236 PARAMS: Buffer - configuration string ("<DTI-partner> <tui> <c_id>") | |
237 | |
238 | |
239 */ | |
240 USHORT mux_SetConfig ( char *Buffer ) | |
241 { | |
242 char token [10]; | |
243 char peer_name [10]; | |
244 USHORT len; | |
245 ULONG link_id; | |
246 | |
247 if ( !mux_data.Connected ) | |
248 { | |
249 Signal.SignalType = DRV_SIGTYPE_CONNECT; | |
250 Signal.DrvHandle = mux_data.Handle; | |
251 (mux_data.Callback)( &Signal ); | |
252 mux_data.Connected = TRUE; | |
253 | |
254 return DRV_OK; | |
255 } | |
256 | |
257 /* interprete configuration string */ | |
258 if (!(len = GetNextToken (Buffer, token, " #"))) | |
259 { | |
260 return DRV_INVALID_PARAMS; | |
261 } | |
262 else | |
263 { | |
264 Buffer += (len+1); | |
265 } | |
266 if (strcmp(token,"STOP")==0) | |
267 { | |
268 dti_close | |
269 ( | |
270 mtst_hDTI, | |
271 MTST_DTI_DN_INSTANCE, | |
272 MTST_DTI_DN_INTERFACE, | |
273 MTST_DTI_DN_CHANNEL, | |
274 FALSE | |
275 ); | |
276 | |
277 mux_data.dti_state=CLOSED; | |
278 mux_data.h_comm_mtst=VSI_ERROR; | |
279 /* xxxxx set m_uart_ready = 0 ?! */ | |
280 if (mux_data.send_data_buf_count>0) { | |
281 /* xxxxx clear send_buffer ?! */ | |
282 mux_data.send_data_buf_count=0; | |
283 } | |
284 | |
285 return DRV_OK; | |
286 } | |
287 strcpy(peer_name, token); | |
288 | |
289 if (!(len = GetNextToken (Buffer, token, " #"))) | |
290 { | |
291 return DRV_INVALID_PARAMS; | |
292 } | |
293 else | |
294 { | |
295 Buffer += (len+1); | |
296 } | |
297 link_id=atoi(token); | |
298 | |
299 if( | |
300 dti_open | |
301 ( | |
302 mtst_hDTI, | |
303 MTST_DTI_DN_INSTANCE, | |
304 MTST_DTI_DN_INTERFACE, | |
305 MTST_DTI_DN_CHANNEL, | |
306 DTI_QUEUE_DISABLED, /* DTI_QUEUE_UNLIMITED in order to queue data */ | |
307 DTI_CHANNEL_TO_LOWER_LAYER, | |
308 FLOW_CNTRL_ENABLED, | |
309 DTI_VERSION_10, | |
310 (U8*)peer_name, | |
311 link_id | |
312 ) EQ FALSE) | |
313 return DRV_INVALID_PARAMS; | |
314 | |
315 /* reset send_data_buf counter */ | |
316 mux_data.send_data_buf_count=0; | |
317 | |
318 /* set internal communication handle */ | |
319 while ( (mux_data.h_comm_mtst=vsi_c_open (0, "MTST")) == VSI_ERROR) | |
320 { | |
321 vsi_t_sleep(0,100); | |
322 }; | |
323 | |
324 /* inform UART that we are ready to receive next data package */ | |
325 { | |
326 dti_start | |
327 ( | |
328 mtst_hDTI, | |
329 MTST_DTI_DN_INSTANCE, | |
330 MTST_DTI_DN_INTERFACE, | |
331 MTST_DTI_DN_CHANNEL | |
332 ); | |
333 } | |
334 | |
335 return DRV_OK; | |
336 } | |
337 | |
338 /* | |
339 +--------------------------------------------------------------------+ | |
340 | PROJECT : GSM-Frame (8415) MODULE : MUX | | |
341 | STATE : code ROUTINE : mux_Init | | |
342 +--------------------------------------------------------------------+ | |
343 | |
344 PURPOSE : initialize driver | |
345 | |
346 */ | |
347 USHORT mux_Init ( USHORT DrvHandle, T_DRV_CB_FUNC CallbackFunc, T_DRV_EXPORT const **DrvInfo ) | |
348 { | |
349 T_HANDLE mux_handle; | |
350 | |
351 static const T_DRV_EXPORT mux_Info = | |
352 { | |
353 "MUX", | |
354 CALLED_FROM_ISR, | |
355 { | |
356 /*mux_Init,*/ | |
357 mux_Exit, | |
358 mux_Read, | |
359 mux_Write, | |
360 NULL, | |
361 NULL, | |
362 NULL, | |
363 mux_SetSignal, | |
364 mux_ResetSignal, | |
365 mux_SetConfig, | |
366 NULL, | |
367 NULL, | |
368 } | |
369 }; | |
370 | |
371 mux_data.Handle = DrvHandle; | |
372 | |
373 mux_data.EnabledSignalType = 0; | |
374 | |
375 mux_data.Callback = CallbackFunc; | |
376 | |
377 mux_data.Connected = FALSE; | |
378 | |
379 mux_data.dti_state = CLOSED; | |
380 mux_data.h_comm_mtst = VSI_ERROR; | |
381 | |
382 mux_handle = vsi_p_create (0, mux_pei_create, NULL, ext_data_pool_handle); | |
383 if (vsi_p_start (0, mux_handle) != VSI_OK) | |
384 { | |
385 return DRV_INITFAILURE; | |
386 }; | |
387 | |
388 *DrvInfo = &mux_Info; | |
389 | |
390 m_tst_handle=vsi_c_open (0,TST_NAME); | |
391 | |
392 return DRV_OK; | |
393 } | |
394 |