1
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 is part of the entity LLC and implements all
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
18 | procedures and functions as described in the
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
19 | SDL-documentation (UITX-statemachine)
|
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
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
23 #ifndef LLC_UITXF_C
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
24 #define LLC_UITXF_C
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
25 #endif
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
26
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
27 #define ENTITY_LLC
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
28
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
29 /*==== INCLUDES =============================================================*/
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
30
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
31 #include "typedefs.h" /* to get Condat data types */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
32 #include "vsi.h" /* to get a lot of macros */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
33 #include "macdef.h"
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
34 #include "gprs.h"
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
35 #include "gsm.h" /* to get a lot of macros */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
36 #include "cnf_llc.h" /* to get cnf-definitions */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
37 #include "mon_llc.h" /* to get mon-definitions */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
38 #include "prim.h" /* to get the definitions of used SAP and directions */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
39 #include "llc.h" /* to get the global entity definitions */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
40
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
41 /*==== CONST ================================================================*/
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
42
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
43 /*==== LOCAL VARS ===========================================================*/
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
44
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
45 /*==== PRIVATE FUNCTIONS ====================================================*/
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
46
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
47 /*==== PUBLIC FUNCTIONS =====================================================*/
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
48
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
49
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
50
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
51 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
52 +------------------------------------------------------------------------------
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
53 | Function : uitx_init
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
54 +------------------------------------------------------------------------------
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
55 | Description : This procedure initialises all necessary variables of
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
56 | ui_frames_tx for all SAPIs.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
57 |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
58 | Parameters :
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
59 |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
60 +------------------------------------------------------------------------------
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
61 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
62 GLOBAL void uitx_init (void)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
63 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
64 TRACE_FUNCTION( "uitx_init" );
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
65
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
66 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
67 * Initialise every incarnation of UITX with state TLLI_UNASSIGNED_NOT_READY.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
68 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
69 SWITCH_SERVICE (llc, uitx, 0);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
70 INIT_STATE (UITX_0, UITX_TLLI_UNASSIGNED_NOT_READY);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
71
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
72 SWITCH_SERVICE (llc, uitx, 1);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
73 INIT_STATE (UITX_1, UITX_TLLI_UNASSIGNED_NOT_READY);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
74
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
75 SWITCH_SERVICE (llc, uitx, 2);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
76 INIT_STATE (UITX_2, UITX_TLLI_UNASSIGNED_NOT_READY);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
77
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
78 SWITCH_SERVICE (llc, uitx, 3);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
79 INIT_STATE (UITX_3, UITX_TLLI_UNASSIGNED_NOT_READY);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
80
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
81 SWITCH_SERVICE (llc, uitx, 4);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
82 INIT_STATE (UITX_4, UITX_TLLI_UNASSIGNED_NOT_READY);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
83
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
84 SWITCH_SERVICE (llc, uitx, 5);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
85 INIT_STATE (UITX_5, UITX_TLLI_UNASSIGNED_NOT_READY);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
86
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
87 return;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
88 } /* uitx_init() */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
89
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
90
|
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 +------------------------------------------------------------------------------
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
94 | Function : uitx_init_sapi
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
95 +------------------------------------------------------------------------------
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
96 | Description : This procedure initialises all necessary variables of
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
97 | ui_frames_tx for the given SAPI.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
98 |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
99 | Parameters :
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
100 |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
101 +------------------------------------------------------------------------------
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
102 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
103 GLOBAL void uitx_init_sapi (void)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
104 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
105 TRACE_FUNCTION( "uitx_init_sapi" );
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
106
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
107 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
108 * <R.LLC.TLLI_ASS.A.007>, <R.LLC.TLLI_ASS.A.008>
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
109 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
110 llc_data->uitx->vu = 0;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
111
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
112 return;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
113 } /* uitx_init_sapi() */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
114
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
115
|
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 | Function : uitx_build_ui_header
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
120 +------------------------------------------------------------------------------
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
121 | Description : This procedure inserts the address and control field of an UI
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
122 | frame in the given sdu. sdu already contains the user data.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
123 | The variable cipher indicates the setting of the E bit. The
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
124 | variable relclass contains the information if the frame shall
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
125 | be transmitted in protected or unprotected mode, which is
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
126 | needed in this function to set the PM bit properly.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
127 |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
128 | Parameters : sdu - a valid pointer to a T_sdu variable, must contain enough
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
129 | spare octets at the beginning for the LLC header fields
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
130 | (address + control field = 3 octets for UI frames)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
131 | cr_bit - C/R bit
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
132 | sapi - a valid SAPI for unacknowledged operation
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
133 | nu - N(U)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
134 | cipher - ciphering indicator (see LL SAP: LL-UNITDATA-REQ)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
135 | relclass - QoS reliability class (see LL SAP), must not be set
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
136 | to LL_RELCLASS_SUB
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
137 |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
138 +------------------------------------------------------------------------------
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
139 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
140 GLOBAL void uitx_build_ui_header
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
141 (
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
142 #ifdef LL_DESC
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
143 T_desc_list3* desc_list3,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
144 #else
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
145 T_sdu *sdu,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
146 #endif
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
147 T_BIT cr_bit,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
148 UBYTE sapi,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
149 T_FRAME_NUM nu,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
150 UBYTE cipher,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
151 UBYTE relclass
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
152 )
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
153
|
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 #ifdef LL_DESC
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
157 T_desc3 *desc3 = (T_desc3*)(desc_list3->first);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
158 UBYTE *buf = (UBYTE*)(desc3->buffer);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
159 #endif
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
160
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
161 TRACE_FUNCTION( "uitx_build_ui_header" );
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
162
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
163 #ifdef LL_DESC
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
164 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
165 * set new offset (3 octets earlier) and new length of desc_list3
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
166 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
167 desc3->offset -= UI_CTRL_MIN_OCTETS;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
168 desc3->len += UI_CTRL_MIN_OCTETS;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
169 desc_list3->list_len += UI_CTRL_MIN_OCTETS;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
170 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
171 * insert address field (PD is always 0)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
172 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
173 buf[desc3->offset] = ((UBYTE)cr_bit << 6) | sapi;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
174
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
175 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
176 * insert 1st octet of control field
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
177 * (UI code + 3 most significant bits of N(U))
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
178 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
179 buf[desc3->offset+1]= 0xC0 | (UBYTE)(nu >> 6);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
180
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
181 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
182 * insert 2nd octet of control field
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
183 * (6 least significant bits of N(U) + E bit + PM bit)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
184 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
185 buf[desc3->offset+2]= (((UBYTE)nu & 0x3F) << 2);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
186
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
187 if (cipher == LL_CIPHER_ON)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
188 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
189 buf[desc3->offset+2] |= 0x02;
|
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 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
193 * all reliability classes except LL_NO_REL request protected data
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
194 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
195 if (relclass != LL_NO_REL)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
196 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
197 buf[desc3->offset+2] |= 0x01;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
198 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
199
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
200 return;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
201
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
202 #else
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
203
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
204 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
205 * set new offset (3 octets earlier) and new length of sdu
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
206 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
207 sdu->o_buf -= UI_CTRL_MIN_OCTETS * 8;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
208 sdu->l_buf += UI_CTRL_MIN_OCTETS * 8;
|
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 * insert address field (PD is always 0)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
212 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
213 sdu->buf[sdu->o_buf/8] = ((UBYTE)cr_bit << 6) | sapi;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
214
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
215 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
216 * insert 1st octet of control field
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
217 * (UI code + 3 most significant bits of N(U))
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
218 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
219 sdu->buf[(sdu->o_buf/8)+1] = 0xC0 | (UBYTE)(nu >> 6);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
220
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
221 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
222 * insert 2nd octet of control field
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
223 * (6 least significant bits of N(U) + E bit + PM bit)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
224 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
225 sdu->buf[(sdu->o_buf/8)+2] = (((UBYTE)nu & 0x3F) << 2);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
226
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
227 if (cipher == LL_CIPHER_ON)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
228 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
229 sdu->buf[(sdu->o_buf/8)+2] |= 0x02;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
230 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
231
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
232 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
233 * all reliability classes except LL_NO_REL request protected data
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
234 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
235 if (relclass != LL_NO_REL)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
236 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
237 sdu->buf[(sdu->o_buf/8)+2] |= 0x01;
|
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 return;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
241
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
242 #endif /* LL_DESC */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
243
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
244 } /* uitx_build_ui_header() */
|