104
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
2 +-----------------------------------------------------------------------------
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
3 | Project :
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
4 | Modul :
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
5 +-----------------------------------------------------------------------------
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
6 | Copyright 2002 Texas Instruments Berlin, AG
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
7 | All rights reserved.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
8 |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
9 | This file is confidential and a trade secret of Texas
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
10 | Instruments Berlin, AG
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
11 | The receipt of or possession of this file does not convey
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
12 | any rights to reproduce or disclose its contents or to
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
13 | manufacture, use, or sell anything it may describe, in
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
14 | whole, or in part, without the specific written consent of
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
15 | Texas Instruments Berlin, AG.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
16 +-----------------------------------------------------------------------------
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
17 | Purpose : This Modul defines the common functions
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
18 | for the component DL of the mobile station.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
19 +-----------------------------------------------------------------------------
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
20 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
21
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
22 #ifndef DL_COM_C
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
23 #define DL_COM_C
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
24
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
25 #define ENTITY_DL
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
26
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
27 /*==== INCLUDES ===================================================*/
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
28 #include "typedefs.h"
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
29 #include <string.h>
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
30 #include "vsi.h"
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
31 #if !defined(DL_2TO1)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
32 //#include "p_8010_147_l1_include.h"
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
33 #endif /* DL_2TO1 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
34 #include "pconst.cdg"
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
35 #include "custom.h"
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
36 #include "gsm.h"
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
37 #include "mon_dl.h"
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
38 #include "prim.h"
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
39 #include "pei.h"
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
40 #include "tok.h"
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
41 #include "ccdapi.h"
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
42 #include "dl.h"
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
43 #include "dl_trc.h"
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
44 #include "dl_em.h"
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
45
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
46 /*==== TEST TRACE ===================================================*/
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
47 #define TEST_ENTITY_DL
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
48
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
49 /*==== EXPORT =====================================================*/
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
50
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
51 /*==== PRIVAT =====================================================*/
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
52 LOCAL void com_build_frame (
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
53 UBYTE ch_type,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
54 UBYTE type,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
55 UBYTE sapi,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
56 UBYTE cr,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
57 UBYTE ns,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
58 UBYTE nr,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
59 UBYTE p_bit,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
60 UBYTE length,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
61 UBYTE m_bit,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
62 UBYTE * pInfoBuffer,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
63 UBYTE InfoOffset);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
64
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
65 /*==== VARIABLES ==================================================*/
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
66
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
67 /*==== FUNCTIONS ==================================================*/
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
68
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
69 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
70 +------------------------------------------------------------------------------
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
71 | Function : com_free_pointer
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
72 +------------------------------------------------------------------------------
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
73 | Description : frees the pointer given by parameter
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
74 +------------------------------------------------------------------------------
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
75 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
76 GLOBAL void com_free_pointer (void * pointer)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
77 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
78 GET_INSTANCE_DATA;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
79 TRACE_EVENT_WIN_P1 ("com_free_pointer(,p=%08x)", pointer);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
80
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
81 #if defined(INVOKE_SIGNAL)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
82 if (dl_data->interrupt_context)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
83 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
84 sig_invoke_com_free_pointer (pointer);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
85 return;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
86 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
87 #endif /* INVOKE_SIGNAL */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
88
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
89 TRACE_ASSERT(pointer);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
90 MY_PFREE (pointer);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
91 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
92
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
93 GLOBAL void com_free_queue_buffer (T_QUEUE * queue, USHORT index)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
94 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
95 T_DL_DATA_REQ **pp;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
96
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
97 switch (index)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
98 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
99 default:
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
100 if (index <= INDEX_MAX_STORE_BUFFER)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
101 pp = &queue->store_buffer[index];
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
102 else
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
103 pp = NULL;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
104 break;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
105 case INDEX_SENDING_BUFFER:
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
106 pp = &queue->sending_buffer;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
107 break;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
108 case INDEX_SWITCH_BUFFER:
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
109 pp = &queue->switch_buffer;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
110 break;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
111 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
112 if (pp AND *pp)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
113 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
114 COM_FREE_POINTER (*pp);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
115 *pp = NULL;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
116 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
117 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
118
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
119 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
120 +--------------------------------------------------------------------+
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
121 | PROJECT : GSM-PS (6147) MODULE : DL_COM |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
122 | STATE : code ROUTINE : com_clear_queue |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
123 +--------------------------------------------------------------------+
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
124
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
125 PURPOSE : Clearing a DL queue.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
126
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
127 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
128
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
129 GLOBAL void com_clear_queue (UBYTE sapi)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
130 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
131 GET_INSTANCE_DATA;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
132 USHORT i;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
133 T_QUEUE *queue;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
134 TRACE_FUNCTION ("com_clear_queue()");
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
135
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
136 if (sapi EQ PS_SAPI_0)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
137 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
138 queue = &dl_data->dcch0_queue;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
139 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
140 else
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
141 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
142 queue = &dl_data->dcch3_queue;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
143 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
144
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
145 for (i=0;i<MAX_QUEUED_MESSAGES;i++)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
146 if (queue->store_buffer [i] NEQ NULL)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
147 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
148 COM_FREE_QUEUE_BUFFER (queue, i);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
149 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
150
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
151 if (queue->sending_buffer NEQ NULL)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
152 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
153 COM_FREE_QUEUE_BUFFER (queue, INDEX_SENDING_BUFFER);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
154 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
155
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
156 if (queue->switch_buffer NEQ NULL)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
157 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
158 COM_FREE_QUEUE_BUFFER (queue, INDEX_SWITCH_BUFFER);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
159 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
160 queue->act_length = queue->act_offset = 0;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
161 queue->no_of_stored_messages = 0;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
162 memset (&queue->transmit_buffer, 0, sizeof (T_FRAME));
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
163 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
164
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
165 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
166 +--------------------------------------------------------------------+
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
167 | PROJECT : GSM-PS (6147) MODULE : DL_COM |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
168 | STATE : code ROUTINE : com_restore_queue |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
169 +--------------------------------------------------------------------+
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
170
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
171 PURPOSE : Restoring a DL queue. If a new connection shall be
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
172 established, the message (ASSIGNMENT or HANDOVER COMPLETE)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
173 is transmitted first. So the message is stored in the
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
174 switch buffer. A previously not complete send message will
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
175 be put back into the storing buffer.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
176
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
177 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
178
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
179 GLOBAL void com_restore_queue (UBYTE sapi, T_DL_DATA_REQ* est_req)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
180 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
181 GET_INSTANCE_DATA;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
182 T_QUEUE *queue = sapi EQ PS_SAPI_0 ? &dl_data->dcch0_queue:&dl_data->dcch3_queue;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
183
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
184 TRACE_FUNCTION ("com_restore_queue()");
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
185
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
186 if (queue->switch_buffer NEQ NULL)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
187 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
188 TRACE_EVENT_WIN ("free old switch_buffer");
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
189 COM_FREE_QUEUE_BUFFER (queue, INDEX_SWITCH_BUFFER);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
190 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
191
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
192 if (est_req AND est_req->sdu.l_buf)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
193 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
194 PPASS (est_req, data_req, DL_DATA_REQ);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
195 queue->switch_buffer = data_req; /* only valid sdu */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
196
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
197 TRACE_EVENT_WIN_P2 ("new fill of switch_buffer:%p l=%u",
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
198 data_req, est_req->sdu.l_buf>>3);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
199 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
200
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
201 if (queue->sending_buffer NEQ NULL)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
202 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
203 TRACE_EVENT_WIN ("restore sending_buffer");
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
204 queue->act_length = queue->sending_buffer->sdu.l_buf;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
205 queue->act_offset = queue->sending_buffer->sdu.o_buf;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
206 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
207 TRACE_EVENT_WIN ("delete transmit_buffer");
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
208 memset (&queue->transmit_buffer, 0, sizeof (T_FRAME));
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
209 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
210
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
211 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
212 +--------------------------------------------------------------------+
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
213 | PROJECT : GSM-PS (6147) MODULE : DL_COM |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
214 | STATE : code ROUTINE : com_recover_queue |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
215 +--------------------------------------------------------------------+
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
216
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
217 PURPOSE : Recover a DL queue after a Reject condition.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
218
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
219 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
220
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
221 GLOBAL void com_recover_queue (UBYTE sapi)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
222 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
223 GET_INSTANCE_DATA;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
224 T_QUEUE *queue = sapi EQ PS_SAPI_0 ? &dl_data->dcch0_queue:&dl_data->dcch3_queue;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
225
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
226 TRACE_FUNCTION ("com_recover_queue()");
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
227
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
228 if (queue->sending_buffer NEQ NULL)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
229 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
230 if(queue->act_length NEQ 0) /* For last buf, act_length is set to 0 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
231 { /* and the act_offset is not modified */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
232 queue->act_offset -= queue->transmit_buffer.l_buf;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
233 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
234 queue->act_length += queue->transmit_buffer.l_buf;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
235 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
236 memset (&queue->transmit_buffer, 0, sizeof (T_FRAME));
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
237 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
238
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
239 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
240 +--------------------------------------------------------------------+
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
241 | PROJECT : GSM-PS (6147) MODULE : DL_COM |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
242 | STATE : code ROUTINE : com_read_queue |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
243 +--------------------------------------------------------------------+
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
244
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
245 PURPOSE : Reading the next segment of a message from a DL queue.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
246 If a message in the switch buffer is stored, this message
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
247 is used. If a message is stored in the sending buffer which
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
248 is not send completely the next segment is copied to the
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
249 transmit buffer. Else the next sending buffer is copied from
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
250 the store buffer of the queue. The first segment of this
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
251 message is copied to the transfer buffer.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
252
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
253 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
254
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
255 GLOBAL void com_read_queue (UBYTE ch_type, UBYTE sapi,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
256 UBYTE * m_bit)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
257 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
258 GET_INSTANCE_DATA;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
259 USHORT i;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
260 USHORT length, bit_length;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
261 T_DL_DATA_REQ * dl_data_req;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
262 T_QUEUE *queue = sapi EQ PS_SAPI_0 ? &dl_data->dcch0_queue : &dl_data->dcch3_queue;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
263
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
264 TRACE_FUNCTION ("com_read_queue()");
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
265 TRACE_EVENT_WIN_P1 ("read sapi_%u_queue", sapi);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
266
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
267 switch (ch_type)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
268 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
269 case L2_CHANNEL_SDCCH:
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
270 length = N201_SDCCH;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
271 break;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
272
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
273 case L2_CHANNEL_SACCH:
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
274 length = N201_SACCH;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
275 break;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
276
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
277 case L2_CHANNEL_FACCH_F:
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
278 case L2_CHANNEL_FACCH_H:
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
279 length = N201_FACCH;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
280 break;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
281
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
282 default:
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
283 length = 0;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
284 bit_length = 0;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
285 break;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
286 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
287 bit_length = length << 3;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
288
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
289 if (queue->switch_buffer NEQ NULL)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
290 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
291 T_DL_DATA_REQ *switch_buffer = queue->switch_buffer;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
292
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
293 TRACE_EVENT_WIN_P2 ("fill transmit_buffer with bytes %u-%u of switch_buffer, no bytes left",
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
294 (switch_buffer->sdu.o_buf>>3),
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
295 ((switch_buffer->sdu.o_buf+switch_buffer->sdu.l_buf)>>3)-1);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
296
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
297 queue->m_bit = * m_bit = 0;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
298 queue->transmit_buffer.o_buf = 24;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
299 queue->transmit_buffer.l_buf = switch_buffer->sdu.l_buf;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
300 for (i=0;i<(switch_buffer->sdu.l_buf>>3);i++)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
301 queue->transmit_buffer.buf[i+3] =
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
302 switch_buffer->sdu.buf[i+(switch_buffer->sdu.o_buf>>3)];
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
303
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
304 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
305 should be freed first after acknowledgement!
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
306 COM_FREE_QUEUE_BUFFER (dl_data, queue, INDEX_SWITCH_BUFFER);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
307 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
308 return;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
309 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
310 else
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
311 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
312 if (queue->act_length EQ 0)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
313 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
314 if (queue->sending_buffer NEQ NULL)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
315 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
316 COM_FREE_QUEUE_BUFFER (queue, INDEX_SENDING_BUFFER);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
317 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
318 queue->sending_buffer = queue->store_buffer[0];
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
319 queue->act_offset = queue->sending_buffer->sdu.o_buf;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
320 queue->act_length = queue->sending_buffer->sdu.l_buf;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
321 TRACE_EVENT_WIN_P2 ("fill sending_buffer with bytes %u-%u of store_buffer[0]",
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
322 (queue->sending_buffer->sdu.o_buf>>3),
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
323 ((queue->sending_buffer->sdu.o_buf+queue->sending_buffer->sdu.l_buf)>>3)-1);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
324
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
325 for (i=0;i<MAX_QUEUED_MESSAGES-1;i++)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
326 queue->store_buffer[i] = queue->store_buffer[i+1];
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
327 queue->no_of_stored_messages--;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
328
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
329 TRACE_EVENT_WIN_P1 ("left no_of_stored_messages=%u", queue->no_of_stored_messages);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
330 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
331 dl_data_req = queue->sending_buffer;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
332 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
333
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
334
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
335 if (queue->act_length > bit_length)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
336 { /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
337 * lint Info 702: Shift right of signed quantity:
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
338 * not possible because of the compare one line before
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
339 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
340 TRACE_EVENT_WIN_P3 ("fill transmit_buffer with bytes %u-%u of sending_buffer, %u bytes left",
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
341 queue->act_offset>>3, (queue->act_offset>>3)+length-1,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
342 (queue->act_length-bit_length)>>3);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
343
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
344 queue->m_bit = * m_bit = 1;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
345 queue->transmit_buffer.o_buf = 24;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
346 queue->transmit_buffer.l_buf = bit_length;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
347 for (i=0;i<length;i++)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
348 queue->transmit_buffer.buf[i+3] =
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
349 dl_data_req->sdu.buf[i+(queue->act_offset>>3)];
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
350 queue->act_offset += bit_length;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
351 queue->act_length -= bit_length;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
352 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
353 else
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
354 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
355 TRACE_EVENT_WIN_P2 ("fill transmit_buffer with bytes %u-%u of sending_buffer, no bytes left",
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
356 queue->act_offset>>3, ((queue->act_offset+queue->act_length)>>3)-1);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
357
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
358 queue->m_bit = * m_bit = 0;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
359 queue->transmit_buffer.o_buf = 24;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
360 queue->transmit_buffer.l_buf = queue->act_length;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
361 for (i=0;i<(queue->act_length>>3);i++)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
362 queue->transmit_buffer.buf[i+3] =
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
363 dl_data_req->sdu.buf[i+(queue->act_offset>>3)];
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
364 queue->act_length = 0;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
365 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
366 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
367
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
368 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
369 +--------------------------------------------------------------------+
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
370 | PROJECT : GSM-PS (6147) MODULE : DL_COM |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
371 | STATE : code ROUTINE : com_store_queue |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
372 +--------------------------------------------------------------------+
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
373
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
374 PURPOSE : Storing a message into the queue.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
375
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
376 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
377
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
378 GLOBAL void com_store_queue (UBYTE sapi, T_DL_DATA_REQ * data_req)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
379 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
380 GET_INSTANCE_DATA;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
381 T_QUEUE * queue;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
382
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
383 TRACE_FUNCTION ("com_store_queue()");
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
384
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
385 if (sapi EQ PS_SAPI_0)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
386 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
387 queue = &dl_data->dcch0_queue;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
388 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
389 else
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
390 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
391 queue = &dl_data->dcch3_queue;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
392 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
393
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
394 if (queue->no_of_stored_messages < MAX_QUEUED_MESSAGES)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
395 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
396 queue->store_buffer[queue->no_of_stored_messages++] = data_req;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
397 TRACE_EVENT_WIN_P3 ("sapi_%u_queue: add entry with %u bytes, no_of_stored_messages=%u",
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
398 sapi, data_req->sdu.l_buf>>3, queue->no_of_stored_messages);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
399 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
400 else
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
401 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
402 COM_FREE_POINTER (data_req);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
403 TRACE_EVENT_WIN_P1 ("sapi_%u_queue overflowed", sapi);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
404 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
405 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
406
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
407 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
408 +------------------------------------------------------------------------------+
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
409 | PROJECT : GSM-PS (6147) MODULE : DL_COM |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
410 | STATE : code ROUTINE : com_queue_awaiting_transmission |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
411 +------------------------------------------------------------------------------+
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
412
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
413 PURPOSE : The function checks whether any segment has to sended.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
414 Function returns TRUE if a frame/segment is awaiting transmission.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
415 Function returns FALSE if not.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
416
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
417 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
418
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
419 GLOBAL BOOL com_queue_awaiting_transmission (UBYTE sapi)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
420 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
421 GET_INSTANCE_DATA;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
422 T_QUEUE * queue;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
423 BOOL ret;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
424
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
425 TRACE_EVENT_WIN_P1 ("com_queue_awaiting_transmission(SAPI=%u)", sapi);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
426
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
427 queue = (sapi EQ PS_SAPI_0) ? &dl_data->dcch0_queue : &dl_data->dcch3_queue;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
428 if (sapi EQ PS_SAPI_0)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
429 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
430 queue = &dl_data->dcch0_queue;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
431 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
432 else
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
433 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
434 queue = &dl_data->dcch3_queue;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
435 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
436 if (queue->switch_buffer NEQ NULL)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
437 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
438 TRACE_EVENT_WIN_P1 ("sapi_%u_queue: switch_buffer is awaiting", sapi);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
439 ret = TRUE;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
440 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
441 else
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
442 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
443 if (queue->act_length EQ 0)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
444 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
445 ret = queue->no_of_stored_messages NEQ 0;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
446 if (ret)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
447 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
448 TRACE_EVENT_WIN_P2 ("sapi_%u_queue: store_buffer is awaiting (no_of_stored_messages=%u)",
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
449 sapi, queue->no_of_stored_messages);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
450 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
451 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
452 else
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
453 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
454 TRACE_EVENT_WIN_P2 ("sapi_%u_queue: transmit_buffer is awaiting (%u bytes)",
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
455 sapi, queue->act_length);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
456 ret = TRUE;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
457 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
458 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
459
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
460 return ret;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
461 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
462
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
463 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
464 +--------------------------------------------------------------------+
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
465 | PROJECT : GSM-PS (6147) MODULE : DL_COM |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
466 | STATE : code ROUTINE : com_leave_dedicated |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
467 +--------------------------------------------------------------------+
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
468
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
469 PURPOSE : Leave dedicated mode.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
470
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
471 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
472
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
473 GLOBAL void com_leave_dedicated (UBYTE ch_type)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
474 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
475 GET_INSTANCE_DATA;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
476 dl_data->RR_dedicated = FALSE; /* RR is leaving the dedicated mode */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
477 DL_OFFLINE_TRACE (TRACE_DL_EVENT, TRACE_CH_UNKNOWN, ch_type, "RR_dedicated:=FALSE");
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
478 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
479
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
480 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
481 +-----------------------------------------------------------------------------+
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
482 | PROJECT : GSM-PS (6147) MODULE : DL_COM |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
483 | STATE : code ROUTINE : possible_reset_dcch0_ch_type |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
484 +-----------------------------------------------------------------------------+
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
485
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
486 PURPOSE : Reset dedicated channel.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
487
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
488 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
489 GLOBAL void possible_reset_dcch0_ch_type (void)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
490 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
491 GET_INSTANCE_DATA;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
492 if (
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
493 #if defined(DELAYED_SABM)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
494 (dl_data->dcch0_sabm_flag NEQ NOT_PRESENT_8BIT) AND
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
495 #endif /* DELAYED_SABM */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
496 #if defined(DELAYED_RELEASE_IND)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
497 (dl_data->release_ind_ch_type NEQ NOT_PRESENT_8BIT) AND
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
498 #endif /* DELAYED_RELEASE_IND */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
499 (dl_data->state[C_DCCH0] <= STATE_IDLE_DL) AND
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
500 (dl_data->cch[C_DCCH0].vtx EQ EMPTY_CMD))
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
501 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
502 TRACE_EVENT_WIN_P1 ("reset dcch0_ch_type=%s ->0", CH_TYPE_NAME[dl_data->dcch0_ch_type]);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
503 dl_data->dcch0_ch_type = 0;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
504 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
505 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
506
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
507 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
508 +--------------------------------------------------------------------+
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
509 | PROJECT : GSM-PS (6147) MODULE : DL_COM |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
510 | STATE : code ROUTINE : com_compare_L3_msg |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
511 +--------------------------------------------------------------------+
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
512
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
513 PURPOSE : The function compares two layer 3 messages.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
514
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
515
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
516 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
517
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
518 GLOBAL UBYTE com_compare_L3_msg (T_DL_DATA_REQ * data_ind1, UBYTE * data_ind2)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
519 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
520 USHORT length1;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
521 USHORT length2;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
522 USHORT pos1;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
523 USHORT pos2;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
524 USHORT i;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
525
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
526 TRACE_FUNCTION ("com_compare_L3_msg()");
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
527
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
528 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
529 * Calculates Length of SABM and UA layer 3 message
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
530 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
531 length1 = data_ind1->sdu.l_buf>>3; /* length of l3 msg inside SABM frame */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
532 length2 = ((data_ind2[2] & 0xFC)>>2); /* length of l3 msg inside UA frame */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
533
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
534 if (length1 NEQ length2)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
535 return FALSE;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
536
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
537 pos1 = data_ind1->sdu.o_buf >> 3;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
538 pos2 = 3;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
539
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
540
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
541 for (i=0; i<length1; i++)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
542 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
543 if (data_ind1->sdu.buf[i+pos1] NEQ data_ind2[i+pos2])
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
544 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
545 #if defined(DL_TRACE_ENABLED)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
546 UBYTE sapi = data_ind1->sapi;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
547 UBYTE trace_channel = TRACE_CH_UNKNOWN;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
548 switch (data_ind1->ch_type)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
549 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
550 case L2_CHANNEL_SDCCH:
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
551 if (sapi EQ PS_SAPI_0)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
552 trace_channel = C_DCCH0;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
553 else if (sapi EQ PS_SAPI_3)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
554 trace_channel = C_DCCH3;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
555 break;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
556 case L2_CHANNEL_FACCH_F:
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
557 case L2_CHANNEL_FACCH_H:
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
558 trace_channel = C_DCCH0;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
559 break;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
560 default:
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
561 break;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
562 }/* endswitch chan */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
563 DL_OFFLINE_TRACE(TRACE_DL_EVENT, trace_channel, data_ind1->ch_type, "UA doesn´t match");
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
564 #endif /* DL_TRACE_ENABLED */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
565 return FALSE;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
566 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
567 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
568 return TRUE;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
569 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
570
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
571 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
572 +--------------------------------------------------------------------+
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
573 | PROJECT : GSM-PS (6147) MODULE : DL_COM |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
574 | STATE : code ROUTINE : com_concatenate |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
575 +--------------------------------------------------------------------+
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
576
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
577 PURPOSE : Concenate an imcoming segment.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
578
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
579 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
580
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
581 GLOBAL void com_concatenate (T_DL_DATA_IND ** in_msg,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
582 UBYTE * new_data_in)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
583 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
584 GET_INSTANCE_DATA;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
585 USHORT end_pos;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
586 USHORT length;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
587 USHORT start_pos;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
588 #define L2_HEADER_BYTESIZE 3
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
589
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
590 TRACE_FUNCTION ("com_concatenate()");
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
591
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
592 #if defined(INVOKE_SIGNAL)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
593 if (dl_data->interrupt_context)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
594 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
595 sig_invoke_com_concatenate (in_msg, new_data_in);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
596 return;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
597 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
598 #endif /* INVOKE_SIGNAL */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
599
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
600 length = new_data_in[2] >> 2;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
601
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
602 if (*in_msg EQ NULL)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
603 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
604 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
605 * Nothing stored yet
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
606 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
607 USHORT len_in_bits = (length + L2_HEADER_BYTESIZE) << 3;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
608 PALLOC_SDU (first_data, DL_DATA_IND, len_in_bits );
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
609
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
610 first_data->sdu.l_buf = length << 3; /* = length * BITS_PER_BYTE */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
611 first_data->sdu.o_buf = L2_HEADER_BYTESIZE << 3;/* = L2_HEADER_BYTESIZE * BITS_PER_BYTE */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
612 /*lint -e419 (Warning -- Apparent data overrun) */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
613 memset (&first_data->sdu.buf[0], 0, L2_HEADER_BYTESIZE);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
614 /*lint +e419 (Warning -- Apparent data overrun) */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
615 /*lint -e416 (Warning -- creation of out-of-bounds pointer) */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
616 memcpy (&first_data->sdu.buf[L2_HEADER_BYTESIZE],
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
617 &new_data_in[L2_HEADER_BYTESIZE],
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
618 length);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
619 /*lint +e416 (Warning -- creation of out-of-bounds pointer) */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
620 *in_msg = first_data;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
621 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
622 else
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
623 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
624 T_DL_DATA_IND *previous_data = *in_msg;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
625
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
626 start_pos = previous_data->sdu.l_buf + previous_data->sdu.o_buf;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
627 end_pos = (length << 3) + start_pos;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
628 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
629 PALLOC_SDU (entire_data, DL_DATA_IND, end_pos );
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
630
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
631 /*lint -e415 (Warning -- access of out-of-bounds pointer) */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
632 memcpy (entire_data->sdu.buf, previous_data->sdu.buf, start_pos >> 3);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
633 memcpy (&entire_data->sdu.buf[start_pos >> 3],
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
634 &new_data_in[L2_HEADER_BYTESIZE],
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
635 length);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
636 /*lint +e415 (Warning -- access of out-of-bounds pointer) */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
637
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
638 entire_data->sdu.l_buf = previous_data->sdu.l_buf + (length << 3);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
639 entire_data->sdu.o_buf = previous_data->sdu.o_buf;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
640
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
641 COM_FREE_POINTER (*in_msg);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
642 *in_msg = entire_data;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
643 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
644 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
645 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
646
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
647 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
648 +--------------------------------------------------------------------+
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
649 | PROJECT : GSM-PS (6147) MODULE : DL_COM |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
650 | STATE : code ROUTINE : com_check_nr |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
651 +--------------------------------------------------------------------+
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
652
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
653 PURPOSE : Check the receive number.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
654
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
655 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
656
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
657 GLOBAL UBYTE com_check_nr (UBYTE va, UBYTE vs, UBYTE nr)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
658 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
659 BYTE a,b;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
660
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
661 TRACE_FUNCTION ("com_check_nr()");
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
662 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
663 * under GSM 4.06 subclause 3.5.2.3:
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
664 * nr is valid, if and only if ((nr-va) mod 8) <= ((vs-va) mod 8)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
665 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
666 a = (nr+8-va) & 7;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
667 b = (vs+8-va) & 7;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
668
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
669 return (a <= b);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
670 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
671
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
672 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
673 +--------------------------------------------------------------------+
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
674 | PROJECT : GSM-PS (6147) MODULE : DL_COM |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
675 | STATE : code ROUTINE : com_prepare_DISC |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
676 +--------------------------------------------------------------------+
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
677
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
678 PURPOSE : Prepares a DISC command.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
679
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
680 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
681
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
682 GLOBAL void com_prepare_DISC (UBYTE channel, UBYTE sapi)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
683 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
684 GET_INSTANCE_DATA;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
685 T_CCH *pcch = &dl_data->cch[channel];
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
686
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
687 pcch->vtx = DISC_CMD;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
688 pcch->time_flag = TRUE;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
689 pcch->T200_counter = 0;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
690 pcch->rc = 0;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
691 set_channel_state (channel, STATE_AWAITING_RELEASE);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
692 TRACE_EVENT_WIN_P3 ("RELEASE_REQ: %s SAPI=%u vtx=%s", CH_TYPE_NAME[pcch->ch_type],
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
693 sapi, VTX_NAME[pcch->vtx]);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
694 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
695
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
696 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
697 +--------------------------------------------------------------------+
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
698 | PROJECT : GSM-PS (6147) MODULE : DL_COM |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
699 | STATE : code ROUTINE : com_build_UA_response |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
700 +--------------------------------------------------------------------+
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
701
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
702 PURPOSE : Build an UA response.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
703
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
704 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
705
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
706 GLOBAL void com_build_UA_response (UBYTE ch_type, UBYTE sapi, UBYTE f_bit)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
707 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
708 TRACE_FUNCTION ("com_build_UA_response()");
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
709 com_build_frame (ch_type, UA_FRAME, sapi, MS2BS_RSP, 0, 0, f_bit, 0, 0, NULL, 0);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
710 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
711
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
712 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
713 +--------------------------------------------------------------------+
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
714 | PROJECT : GSM-PS (6147) MODULE : DL_COM |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
715 | STATE : code ROUTINE : com_build_RR_response |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
716 +--------------------------------------------------------------------+
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
717
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
718 PURPOSE : Build an RR response.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
719
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
720 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
721
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
722 GLOBAL void com_build_RR_response (UBYTE ch_type,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
723 UBYTE sapi, UBYTE nr, UBYTE f_bit)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
724 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
725 TRACE_FUNCTION ("com_build_RR_response()");
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
726 com_build_frame (ch_type, RR_FRAME, sapi, MS2BS_RSP, 0, nr, f_bit, 0, 0, NULL, 0);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
727 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
728
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
729 #if 0
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
730 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
731 +--------------------------------------------------------------------+
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
732 | PROJECT : GSM-PS (6147) MODULE : DL_COM |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
733 | STATE : code ROUTINE : com_build_RR_command |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
734 +--------------------------------------------------------------------+
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
735
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
736 PURPOSE : Build an RR command.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
737
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
738 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
739
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
740 GLOBAL void com_build_RR_command (T_DL_DATA_STORE * dl_data, UBYTE ch_type,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
741 UBYTE sapi, UBYTE nr, UBYTE p_bit)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
742 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
743 TRACE_FUNCTION ("com_build_RR_command()");
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
744 com_build_frame (dl_data, ch_type, RR_FRAME, sapi, MS2BS_CMD, 0, nr, p_bit, 0, 0, NULL, 0);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
745 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
746 #endif /* 0 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
747 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
748 +--------------------------------------------------------------------+
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
749 | PROJECT : GSM-PS (6147) MODULE : DL_COM |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
750 | STATE : code ROUTINE : com_build_REJ_response|
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
751 +--------------------------------------------------------------------+
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
752
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
753 PURPOSE : Build an REJ response.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
754
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
755 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
756
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
757 GLOBAL void com_build_REJ_response (UBYTE ch_type,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
758 UBYTE sapi, UBYTE nr, UBYTE f_bit)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
759 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
760 TRACE_FUNCTION ("com_build_REJ_response()");
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
761 com_build_frame (ch_type, REJ_FRAME, sapi, MS2BS_RSP, 0, nr, f_bit, 0, 0, NULL, 0);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
762 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
763
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
764 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
765 +--------------------------------------------------------------------+
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
766 | PROJECT : GSM-PS (6147) MODULE : DL_COM |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
767 | STATE : code ROUTINE : com_build_DISC_command |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
768 +--------------------------------------------------------------------+
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
769
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
770 PURPOSE : Build a DISC command.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
771
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
772 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
773
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
774 GLOBAL void com_build_DISC_command (UBYTE ch_type,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
775 UBYTE sapi, UBYTE p_bit)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
776 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
777 TRACE_FUNCTION ("com_build_DISC_command()");
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
778 com_build_frame (ch_type, DISC_FRAME, sapi, MS2BS_CMD, 0, 0, p_bit, 0, 0, NULL, 0);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
779 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
780
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
781 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
782 +--------------------------------------------------------------------+
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
783 | PROJECT : GSM-PS (6147) MODULE : DL_COM |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
784 | STATE : code ROUTINE : com_build_SABM |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
785 +--------------------------------------------------------------------+
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
786
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
787 PURPOSE : Build a SABM command with or without Layer 3 message.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
788
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
789 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
790
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
791 GLOBAL void com_build_SABM (UBYTE ch_type,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
792 UBYTE sapi, BOOL contention_resultion)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
793 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
794 GET_INSTANCE_DATA;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
795 T_QUEUE *queue = &dl_data->dcch0_queue;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
796 TRACE_FUNCTION ("com_build_SABM()");
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
797 TRACE_EVENT_WIN_P3 ("com_build_SABM %s SAPI=%u %s", CH_TYPE_NAME[ch_type], sapi,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
798 (contention_resultion AND queue->switch_buffer) ? "+L3" : "");
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
799
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
800 if (contention_resultion AND queue->switch_buffer)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
801 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
802 com_build_frame (ch_type, SABM_FRAME, sapi, MS2BS_CMD, 0, 0, 1,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
803 (UBYTE)(queue->switch_buffer->sdu.l_buf >> 3), 0,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
804 queue->switch_buffer->sdu.buf, (UBYTE)(queue->switch_buffer->sdu.o_buf >> 3));
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
805 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
806 else
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
807 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
808 com_build_frame (ch_type, SABM_FRAME, sapi, MS2BS_CMD, 0, 0, 1, 0, 0, NULL, 0);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
809 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
810 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
811
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
812 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
813 +--------------------------------------------------------------------+
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
814 | PROJECT : GSM-PS (6147) MODULE : DL_COM |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
815 | STATE : code ROUTINE : com_build_DM_response |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
816 +--------------------------------------------------------------------+
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
817
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
818 PURPOSE : Build an DM response.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
819
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
820 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
821
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
822 GLOBAL void com_build_DM_response (UBYTE ch_type,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
823 UBYTE sapi, UBYTE f_bit)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
824 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
825 TRACE_FUNCTION ("com_build_DM_response()");
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
826 com_build_frame (ch_type, DM_FRAME, sapi, MS2BS_RSP, 0, 0, f_bit, 0, 0, NULL, 0);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
827 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
828
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
829
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
830 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
831 +--------------------------------------------------------------------+
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
832 | PROJECT : GSM-PS (6147) MODULE : DL_COM |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
833 | STATE : code ROUTINE : com_build_I_command |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
834 +--------------------------------------------------------------------+
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
835
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
836 PURPOSE : Build an I command.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
837
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
838 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
839
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
840 GLOBAL void com_build_I_command (UBYTE ch_type,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
841 UBYTE sapi, UBYTE ns, UBYTE nr, UBYTE p_bit,UBYTE m_bit, T_QUEUE * queue)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
842 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
843 TRACE_FUNCTION ("com_build_I_command()");
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
844 com_build_frame (ch_type, I_FRAME, sapi, MS2BS_CMD, ns, nr, p_bit,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
845 (UBYTE)(queue->transmit_buffer.l_buf >> 3), m_bit,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
846 queue->transmit_buffer.buf, 0);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
847 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
848
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
849 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
850 +--------------------------------------------------------------------+
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
851 | PROJECT : GSM-PS (6147) MODULE : DL_COM |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
852 | STATE : code ROUTINE : com_build_UI_command |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
853 +--------------------------------------------------------------------+
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
854
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
855 PURPOSE : Build an UI command.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
856
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
857 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
858
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
859 GLOBAL void com_build_UI_command (UBYTE ch_type,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
860 UBYTE sapi, const T_FRAME * buffer)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
861 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
862 TRACE_FUNCTION ("com_build_UI_command()");
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
863 com_build_frame (ch_type, UI_FRAME, sapi, MS2BS_CMD, 0, 0, 0,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
864 (UBYTE)(buffer->l_buf >> 3), 0, (UBYTE*)buffer->buf, (UBYTE)(buffer->o_buf >> 3));
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
865 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
866
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
867 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
868 +--------------------------------------------------------------------+
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
869 | PROJECT : GSM-PS (6147) MODULE : DL_COM |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
870 | STATE : code ROUTINE : com_build_UI_Bter |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
871 +--------------------------------------------------------------------+
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
872
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
873 PURPOSE : Build an UI frame in Bter format.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
874
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
875 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
876
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
877 GLOBAL void com_build_UI_Bter (UBYTE ch_type)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
878 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
879 GET_INSTANCE_DATA;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
880 unsigned off = dl_data->rr_short_pd_buffer.o_buf>>3;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
881 unsigned len = dl_data->rr_short_pd_buffer.l_buf>>3;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
882 unsigned foff, maxlen;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
883
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
884 if (ch_type EQ L2_CHANNEL_SACCH)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
885 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
886 maxlen = DL_N201_SACCH_Bter;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
887 foff = 2;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
888 #ifndef DL_2TO1
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
889 dl_data->l2_frame.A[0] = dl_data->l2_frame.A[1] = 0; /* place holder for L1 header */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
890 #else
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
891 dl_data->l2_frame.frame_array[0] = dl_data->l2_frame.frame_array[1] = 0; /* place holder for L1 header */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
892 #endif
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
893
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
894 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
895 else
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
896 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
897 foff = 0;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
898 maxlen = DL_N201_DCCH_Bter;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
899 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
900
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
901 if (len > maxlen)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
902 len = maxlen;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
903 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
904 * LINT Warning 662: Possible creation of out-of-bounds pointer ... and
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
905 * LINT Warning 669: Possible data overrun for function 'memset ...
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
906 * can be ignored, because of the right alignment between foff and maxlen.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
907 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
908 /*lint -e662 -e669 Possible creation of out-of-bounds pointer or Possible data overrun*/
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
909 #ifndef DL_2TO1
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
910 memcpy (&dl_data->l2_frame.A[foff], dl_data->rr_short_pd_buffer.buf+off, len);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
911 memset (&dl_data->l2_frame.A[foff+len], 0x2b, maxlen-len);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
912 #else
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
913 memcpy (&dl_data->l2_frame.frame_array[foff], dl_data->rr_short_pd_buffer.buf+off, len);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
914 memset (&dl_data->l2_frame.frame_array[foff+len], 0x2b, maxlen-len);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
915 #endif
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
916 /* lint +e662 +e669 Possible creation of out-of-bounds pointer or Possible data overrun */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
917 /* mark message as handled */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
918 dl_data->rr_short_pd_buffer.l_buf = 0;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
919 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
920
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
921 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
922 +--------------------------------------------------------------------+
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
923 | PROJECT : GSM-PS (6147) MODULE : DL_COM |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
924 | STATE : code ROUTINE : com_build_frame |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
925 +--------------------------------------------------------------------+
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
926
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
927 PURPOSE : Builds any frame.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
928
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
929 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
930 LOCAL void com_build_frame (UBYTE ch_type,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
931 UBYTE type, UBYTE sapi, UBYTE cr, UBYTE ns,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
932 UBYTE nr, UBYTE p_bit, UBYTE length, UBYTE m_bit,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
933 UBYTE* pInfoBuffer, UBYTE InfoOffset)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
934 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
935 GET_INSTANCE_DATA;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
936 UBYTE offset;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
937 UBYTE maxlength;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
938 #ifndef DL_2TO1
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
939 UBYTE *pOutFrame = dl_data->l2_frame.A;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
940 #else
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
941 UBYTE *pOutFrame = dl_data->l2_frame.frame_array;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
942 #endif /* DL_2TO1*/
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
943 #define SPARE 0
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
944 #define LPD 0
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
945 #define EA 1
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
946 #define EL 1
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
947
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
948 if (ch_type EQ L2_CHANNEL_SACCH)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
949 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
950 offset = 2;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
951 maxlength = DL_N201_SACCH_A_B;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
952 pOutFrame[0] = pOutFrame[1] = 0; /* reset layer 1 header */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
953 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
954 else
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
955 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
956 offset = 0;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
957 maxlength = DL_N201_DCCH_A_B;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
958 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
959
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
960 if (length > maxlength)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
961 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
962 TRACE_EVENT_P1 ("Error: framelength to big %d", length);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
963 length = maxlength; /* for safety's sake */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
964 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
965
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
966 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
967 * set header bytes (bit 8 7 6 5 4 3 2 1)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
968 * address field | | | | | | |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
969 * Spare --LPD- ----SAPI--- C/R EA
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
970 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
971 pOutFrame[offset] = (SPARE << 7) | (LPD << 5) | (sapi << 2) | (cr << 1) | EA;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
972
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
973 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
974 * control field 8 7 6 5 4 3 2 1
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
975 * I format ----N(R)--- P ----N(S)--- 0
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
976 * S format ----N(R)--- P/F S S 0 1
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
977 * U format U U U P/F U U 1 1
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
978 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
979 if ((type & 0x01) EQ 0)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
980 pOutFrame[offset+1] = (nr << 5) | (p_bit << 4) | (ns << 1); /* I format */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
981 else if ((type & 0x02) EQ 0)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
982 pOutFrame[offset+1] = (nr << 5) | (p_bit << 4) | type; /* S format */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
983 else
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
984 pOutFrame[offset+1] = (p_bit << 4) | type; /* U format */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
985
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
986 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
987 * length field 8 3 2 1
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
988 * -----length indicator----- M EL
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
989 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
990 pOutFrame[offset+2] = (length << 2) | (m_bit << 1) | EL;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
991
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
992 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
993 * LINT Warning 662: Possible creation of out-of-bounds pointer ... and
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
994 * LINT Warning 669: Possible data overrun for function 'memcpy ... and
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
995 * LINT Warning 671: Possibly passing to function 'memset ...
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
996 * can be ignored because the sum of offset, 3 plus maxlength (length) does
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
997 * never exceed the maximal size of pOutFrame[].
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
998 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
999 if (length && pInfoBuffer)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1000 {/* copy info bits */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1001 memcpy (&pOutFrame[offset+3], pInfoBuffer + (InfoOffset ? InfoOffset : 3), length);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1002 offset += length;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1003 maxlength -= length;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1004 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1005
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1006 /* fill remain of the frame with 0x2b */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1007 memset (&pOutFrame[offset+3], 0x2b, maxlength);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1008
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1009 #undef SPARE
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1010 #undef LPD
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1011 #undef EA
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1012 #undef EL
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1013 }/* endfunc com_build_frame */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1014
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1015 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1016 +--------------------------------------------------------------------+
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1017 | PROJECT : GSM-PS (6147) MODULE : DL_COM |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1018 | STATE : code ROUTINE : com_data_ind |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1019 +--------------------------------------------------------------------+
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1020
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1021 PURPOSE : Indicates a downlinked message to RR. The queue which is
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1022 taken depend on the sapi value. In case of sapi=0 the function
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1023 checks the layer 3 message for a channel release additionally.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1024 This is done to speed up the release procedure.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1025
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1026 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1027 GLOBAL void com_data_ind (UBYTE ch_type, UBYTE sapi, ULONG fn)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1028 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1029 GET_INSTANCE_DATA;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1030 T_DL_DATA_IND *in_msg;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1031
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1032 #if defined(INVOKE_SIGNAL)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1033 if (dl_data->interrupt_context)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1034 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1035 sig_invoke_com_data_ind (ch_type, sapi, fn);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1036 return;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1037 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1038 #endif /* INVOKE_SIGNAL */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1039
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1040 if (sapi EQ PS_SAPI_0)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1041 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1042 in_msg = dl_data->dcch0_in_msg;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1043
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1044 if (in_msg)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1045 { /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1046 * Purpose: Check if message is channel release, then start release
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1047 * of connection. This will be done to speed up the DISC process.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1048 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1049 /*lint -e415 (Warning -- access of out-of-bounds pointer) */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1050 /*lint -e416 (Warning -- creation of out-of-bounds pointer) */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1051 if ((in_msg->sdu.buf[3] EQ 0x06) AND /* PD RR */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1052 (in_msg->sdu.buf[4] EQ 0x0D)) /* MT channel release */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1053 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1054 /*lint +e416 (Warning -- creation of out-of-bounds pointer) */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1055 /*lint +e415 (Warning -- access of out-of-bounds pointer) */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1056 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1057 * Send immediately (on the next uplink opportunity) a DISC frame
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1058 * on DCCH.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1059 * Disable dedicated mode -> restrain measurement reports
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1060 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1061 dl_data->dcch0_disc_request = TRUE;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1062 DL_OFFLINE_TRACE(TRACE_DL_EVENT, C_DCCH0, ch_type, "CHANNEL REL received");
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1063 #if !defined(LATE_LEAVING_DEDICATED)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1064 com_leave_dedicated (ch_type);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1065 #endif /* LATE_LEAVING_DEDICATED */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1066 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1067 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1068 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1069 else
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1070 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1071 in_msg = dl_data->dcch3_in_msg;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1072 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1073
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1074 if (in_msg)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1075 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1076 in_msg->ch_type = ch_type;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1077 in_msg->sapi = sapi;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1078 drr_dl_data_ind (sapi, fn);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1079 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1080 else
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1081 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1082 DL_OFFLINE_TRACE (TRACE_DL_EVENT,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1083 (sapi EQ PS_SAPI_0) ? C_DCCH0 : C_DCCH3, ch_type, "dcchx_in_msg=NULL");
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1084 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1085 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1086
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1087 #if !defined(NTRACE)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1088 #if defined(DL_TRACE_ENABLED) && defined(DL_IMMEDIATE_TRACE)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1089 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1090 +--------------------------------------------------------------------+
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1091 | PROJECT : GSM-PS (6147) MODULE : DL_COM |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1092 | STATE : code ROUTINE : com_l2trace |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1093 +--------------------------------------------------------------------+
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1094
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1095 PURPOSE : Send L2 trace.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1096
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1097 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1098
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1099 GLOBAL void com_l2trace (UBYTE trace_type,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1100 UBYTE channel, UBYTE ch_type, T_TIME trace_time, UBYTE* data)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1101 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1102 GET_INSTANCE_DATA;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1103 ULONG trace_mask;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1104
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1105 #ifdef TI_PS_HCOMM_CHANGE
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1106 vsi_gettracemask(_hCommDL, _hCommDL, &trace_mask);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1107 #else
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1108 vsi_gettracemask(hCommDL, hCommDL, &trace_mask);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1109 #endif
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1110 if ((trace_mask & TC_USER1) EQ 0)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1111 return;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1112
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1113 if (trace_time EQ 0)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1114 vsi_t_time (VSI_CALLER &trace_time);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1115
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1116 #if defined(INVOKE_SIGNAL)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1117 if (dl_data->interrupt_context)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1118 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1119 sig_invoke_com_l2trace (trace_type, channel, ch_type, trace_time, data);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1120 return;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1121 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1122 #endif /* INVOKE_SIGNAL */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1123 dl_fast_trace(trace_type, channel, ch_type, trace_time, trace_mask, data);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1124 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1125 #endif /* DL_TRACE_ENABLED && DL_IMMEDIATE_TRACE */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1126
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1127 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1128 +--------------------------------------------------------------------+
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1129 | PROJECT : GSM-PS (6147) MODULE : DL_COM |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1130 | STATE : code ROUTINE : com_l3trace |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1131 +--------------------------------------------------------------------+
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1132
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1133 PURPOSE : Send L3 trace.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1134
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1135 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1136
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1137 GLOBAL void com_l3trace (UBYTE type, UBYTE ch_type, UBYTE *frame)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1138 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1139 GET_INSTANCE_DATA;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1140 ULONG trace_mask;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1141
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1142 #ifdef TI_PS_HCOMM_CHANGE
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1143 vsi_gettracemask(_hCommDL, _hCommDL, &trace_mask);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1144 #else
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1145 vsi_gettracemask(hCommDL, hCommDL, &trace_mask);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1146 #endif
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1147 if ((trace_mask & TC_USER4) EQ 0)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1148 return;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1149
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1150 #if defined(INVOKE_SIGNAL)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1151 if (dl_data->interrupt_context)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1152 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1153 sig_invoke_com_l3trace (type, ch_type, frame);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1154 return;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1155 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1156 #endif /* INVOKE_SIGNAL */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1157
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1158 if (type EQ TRACE_UPLINK)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1159 { /* uplink acknowledged */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1160 T_DL_DATA_REQ *d = (T_DL_DATA_REQ *)frame;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1161 com_print_l3trace (TRACE_UPLINK, ch_type, d->sapi, (UBYTE *)&d->sdu);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1162 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1163 else if (type EQ TRACE_DOWNLINK)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1164 { /* downlink */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1165 T_DL_DATA_IND *d = (T_DL_DATA_IND *)frame;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1166 com_print_l3trace (TRACE_DOWNLINK, ch_type, d->sapi, (UBYTE *)&d->sdu);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1167 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1168 else if ((type EQ TRACE_UACK_UP) OR (type EQ TRACE_UACK_DN))
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1169 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1170 com_print_l3trace (type, ch_type, PS_SAPI_0, frame);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1171 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1172 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1173
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1174 GLOBAL void com_print_l3trace (UBYTE type, UBYTE ch_type, UBYTE sapi, UBYTE *l3msg)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1175 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1176 char description[40];
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1177
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1178 switch (type)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1179 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1180 case TRACE_UPLINK:
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1181 case TRACE_DOWNLINK:
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1182 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1183 T_sdu *sdu = (T_sdu *)l3msg;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1184 sprintf (description, "L3 %s ch=%u SAPI%u",
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1185 type EQ TRACE_UPLINK ? "UP" : "DN", ch_type, sapi);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1186 #ifdef TI_PS_HCOMM_CHANGE
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1187 TRACE_BINDUMP(_hCommDL, TC_USER4, description,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1188 sdu->buf+(sdu->o_buf>>3), (sdu->l_buf>>3));
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1189 #else
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1190 TRACE_BINDUMP(hCommDL, TC_USER4, description,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1191 sdu->buf+(sdu->o_buf>>3), (sdu->l_buf>>3));
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1192 #endif
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1193 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1194 break;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1195 case TRACE_UACK_UP:
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1196 case TRACE_UACK_DN:
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1197 if (GET_BTER_FORMAT (&l3msg[0]) EQ SHORT_L2_HEADER_TYPE_1)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1198 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1199 sprintf (description, "L3 %s ch=%u SAPI%u RR Short PD header",
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1200 type EQ TRACE_UACK_UP ? "UP" : "DN", ch_type, sapi);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1201 #ifdef TI_PS_HCOMM_CHANGE
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1202 TRACE_BINDUMP(_hCommDL, TC_USER4, description, l3msg, DL_N201_SACCH_Bter);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1203 #else
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1204 TRACE_BINDUMP(hCommDL, TC_USER4, description, l3msg, DL_N201_SACCH_Bter);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1205 #endif
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1206 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1207 else
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1208 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1209 sprintf (description, "L3 %s ch=%u SAPI%u",
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1210 type EQ TRACE_UACK_UP ? "UP" : "DN", ch_type, sapi);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1211 #ifdef TI_PS_HCOMM_CHANGE
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1212 TRACE_BINDUMP(_hCommDL, TC_USER4, description, l3msg, DL_N201_SACCH_A_B);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1213 #else
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1214 TRACE_BINDUMP(hCommDL, TC_USER4, description, l3msg, DL_N201_SACCH_A_B);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1215 #endif
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1216 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1217 break;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1218 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1219 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1220 #endif /* !NTRACE */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1221
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1222 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1223 +--------------------------------------------------------------------+
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1224 | PROJECT : GSM-PS (6147) MODULE : DL_COM |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1225 | STATE : code ROUTINE : com_init_data |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1226 +--------------------------------------------------------------------+
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1227
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1228 PURPOSE : Initializes the data for one instance.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1229
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1230 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1231
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1232 GLOBAL void com_init_data (void)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1233 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1234 GET_INSTANCE_DATA;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1235 TRACE_FUNCTION ("com_init_data()");
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1236
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1237 memset (dl_data, 0, sizeof (T_DL_DATA_STORE));
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1238
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1239 dl_data->cch[C_DCCH0].T200_counter = 0;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1240 dl_data->cch[C_DCCH3].T200_counter = 0;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1241 dl_data->cch[C_SACCH0].T200_counter = 0;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1242 dl_data->dcch0_in_msg = NULL;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1243 dl_data->dcch3_in_msg = NULL;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1244
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1245 dl_data->dcch0_disc_request = FALSE;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1246 dl_data->dcch3_disc_request = FALSE;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1247 dl_data->RR_dedicated = FALSE;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1248 dl_data->fn = NOT_PRESENT_32BIT;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1249
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1250 #if defined(INVOKE_SIGNAL)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1251 sig_init_signal_data ();
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1252 #endif /* INVOKE_SIGNAL */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1253 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1254
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1255
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1256 #if defined (DL_TRACE_ENABLED) || defined (FF_EM_MODE)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1257 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1258 * Some of the functions originally designed for DL tracing are used as well for
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1259 * the engineering mode and therefore defined here.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1260 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1261
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1262 GLOBAL void com_semaphore_err (void)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1263 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1264 #if defined(_SIMULATION_)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1265 SYST_TRACE ("DL:error:semaphore");
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1266 TRACE_ASSERT (1);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1267 #else /* _SIMULATION_ */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1268 static UCHAR out = 0;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1269 if (!out)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1270 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1271 out = 1;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1272 SYST_TRACE ("DL:error:semaphore");
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1273 vsi_t_sleep(VSI_CALLER 10000);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1274 TRACE_ASSERT (1);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1275 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1276 #endif /* _SIMULATION_ */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1277 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1278
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1279 GLOBAL int com_enter_critical_section (T_HANDLE sem)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1280 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1281 if (vsi_s_get (VSI_CALLER sem) NEQ VSI_OK)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1282 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1283 com_semaphore_err();
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1284 return -1;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1285 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1286 else
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1287 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1288 return 0;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1289 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1290 }/*endfunc com_enter_critical_section*/
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1291
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1292 GLOBAL int com_leave_critical_section (T_HANDLE sem)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1293 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1294 if (vsi_s_release (VSI_CALLER sem) NEQ VSI_OK)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1295 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1296 com_semaphore_err();
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1297 return -1;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1298 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1299 else
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1300 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1301 return 0;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1302 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1303 }/* endfunc com_leave_critical_section */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1304
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1305 #if !defined(DL_IMMEDIATE_TRACE)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1306 GLOBAL int com_semaphore_state (T_HANDLE sem)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1307 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1308 USHORT semCount;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1309
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1310 if (vsi_s_status (VSI_CALLER sem, &semCount) NEQ VSI_OK)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1311 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1312 com_semaphore_err ();
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1313 return -1;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1314 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1315 if (semCount EQ 0)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1316 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1317 SYST_TRACE ("DL:semCount == 0");
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1318 return 1;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1319 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1320 else
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1321 return 0;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1322 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1323 #endif /* !DL_IMMEDIATE_TRACE */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1324 #endif /* defined (DL_TRACE_ENABLED) || defined (FF_EM_MODE) */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1325
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1326 #endif /* DL_COM_C */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1327
|