• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /* ------------------------------------------------------------------
2  * Copyright (C) 1998-2009 PacketVideo
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
13  * express or implied.
14  * See the License for the specific language governing permissions
15  * and limitations under the License.
16  * -------------------------------------------------------------------
17  */
18 // ----------------------------------------------------------------------
19 //
20 // This Software is an original work of authorship of PacketVideo Corporation.
21 // Portions of the Software were developed in collaboration with NTT  DoCoMo,
22 // Inc. or were derived from the public domain or materials licensed from
23 // third parties.  Title and ownership, including all intellectual property
24 // rights in and to the Software shall remain with PacketVideo Corporation
25 // and NTT DoCoMo, Inc.
26 //
27 // -----------------------------------------------------------------------
28 /************************************************************************/
29 /*  file name       : H245Inf.h                                            */
30 /*  file contents   : H.245 Interface Information Definition                  */
31 /*  draw            : '96.10.04                                         */
32 /*----------------------------------------------------------------------*/
33 /*  amendment       :                                                   */
34 /*                          Copyright (C) 1996 NTT DoCoMo               */
35 /************************************************************************/
36 #ifndef _H245INF_
37 #define _H245INF_
38 
39 
40 /************************************************************************/
41 /*  Headerfile Include                                                  */
42 /************************************************************************/
43 #include "control_msg_hdr.h"
44 
45 /************************************************************************/
46 /*  Interface Information Type Definition                               */
47 /************************************************************************/
48 #define     H245_USER           0       /* H.245 User Information */
49 #define     H245_PRIMITIVE      1       /* H.245 Primitive Information */
50 #define     H245_ERROR          2       /* H.245 Error Information */
51 #define     H245_TIMEOUT        3       /* H.245 Timeout Information */
52 
53 
54 /************************************************************************/
55 /*  Interface Information Id Definition: User Operation Id              */
56 /************************************************************************/
57 typedef enum _userreportid
58 {
59 //    E_User_Ce_Req_Idc ,             /* ( 0) Capability exchange Request Indication        */
60 //    E_User_Ce_Rjt_Idc ,             /* ( 1) Capability exchange Reject Indication         */
61 //    E_User_Msd_Rjt_Idc ,            /* ( 2) Master slave determination Reject Indication  */
62 //    E_User_Msd_Err_Idc ,            /* ( 3) Master slave determination Error Indication   */
63     E_User_Lc_Req_Idc = 4 ,           /* ( 4) Uni-directional Logical Channel signalling Request Indication */
64     E_User_Lc_Rls_Idc ,             /* ( 5) Uni-directional Logical Channel signalling Release Indication */
65     E_User_Lc_Err_Idc ,             /* ( 6) Uni-directional Logical Channel signalling Error Indication   */
66     E_User_Lc_RlsCfm_Idc ,          /* ( 7) Uni-directional Logical Channel signalling RlsCfm Indication  */
67     E_User_Blc_Req_Idc ,            /* ( 8) Bi-directional Logical Channel signalling Request Indication */
68     E_User_Blc_Rls_Idc ,            /* ( 9) Bi-directional Logical Channel signalling Release Indication */
69     E_User_Blc_Err_Idc ,            /* (10) Bi-directional Logical Channel signalling Error Indication   */
70     E_User_Blc_RlsCfm_Idc ,         /* (11) Bi-directional Logical Channel signalling RlsCfm Indication  */
71     E_User_Clc_Req_Idc ,            /* (12) Close Logical Channel Request Indication      */
72     E_User_Clc_Rjt_Idc ,            /* (13) Close Logical Channel Reject Indication       */
73     E_User_Mt_Req_Idc ,             /* (14) H.223 Multiplex Table Request Indication      */
74     E_User_Mt_Rjt_Idc ,             /* (15) H.223 Multiplex Table Reject Indication       */
75     E_User_Rme_Req_Idc ,            /* (16) Request Multiplex Entry Request Indication */
76     E_User_Rme_Rjt_Idc ,            /* (17) Request Multiplex Entry Reject Indication  */
77     E_User_Mr_Req_Idc ,             /* (18) Mode request Request Indication */
78     E_User_Mr_Rjt_Idc ,             /* (19) Mode request Reject Indication  */
79     E_User_Rtd_Rjt_Idc ,            /* (20) Round trip delay Reject Indication */
80     E_User_Ml_Req_Idc ,             /* (21) Maintenance Loop Request Indication */
81     E_User_Ml_Rjt_Idc ,             /* (22) Maintenance Loop Reject Indication  */
82     E_User_Ml_Err_Idc ,             /* (23) Maintenance Loop Error Indication  */
83     E_User_CSUP_Done                /* (24) Call Setup Done Signal (WWU)        */
84 } ENUM_UserReportId ;
85 
86 
87 typedef enum _useroperationid
88 {
89 //    E_User_Ce_Instruct ,            /* ( 0) Capability exchange     */
90     E_User_Mt_Instruct = 1 ,          /* ( 1) H.223 Multiplex Table   */
91     E_User_Rme_Instruct ,           /* ( 2) Request Multiplex Entry */
92     E_User_Mr_Instruct ,            /* ( 3) Mode Request            */
93     E_User_Rtd_Instruct ,           /* ( 4) Round trip delay        */
94     E_User_Ml_Instruct ,            /* ( 5) Maintenance Loop        */
95 
96     E_User_Connect ,                /* ( 6) Connect to Remote       */
97     E_User_Open ,                   /* ( 7) Session Open            */
98     E_User_Consent ,                /* ( 8) Concent                 */
99     E_User_Reject ,                 /* ( 9) Reject                  */
100     E_User_Retry ,                  /* (10) Retry                   */
101     E_User_Close ,                  /* (11) Session Close           */
102     E_User_Disconnect ,             /* (12) Disconnect              */
103 
104     E_User_NonProcedure,            /* (13) Non Procedure           */
105     E_User_TestButton,              /* (14) Test Button (RAN TB)    */
106 
107     E_User_Stcs_Instruct,           /* (15) Send Terminal Cap Set  (RAN) */
108     E_User_Hmr_Instruct,            /* (16) H223Multiplex Reconfig (RAN) */
109     E_User_Rcc_Instruct,            /* (17) RequestChannelClose    (RAN) */
110     E_User_Clc_Instruct             /* (18) CloseLogicalChannel    (RAN) */
111 } ENUM_UserOperationId ;
112 
113 
114 /************************************************************************/
115 /*  Interface Information Id Definition: Primitive Id                   */
116 /************************************************************************/
117 typedef enum _primitiveid
118 {
119     /* Request primitive */
120 
121 //    E_PtvId_Msd_Dtm_Req ,           /* (  0) DETERMINE.request ( MSD ) */
122 //    E_PtvId_Ce_Trf_Req ,            /* (  1) TRANSFER.request ( CE ) */
123 //    E_PtvId_Ce_Rjt_Req ,            /* (  2) REJECT.request ( CE ) */
124     E_PtvId_Lc_Etb_Req = 3 ,          /* (  3) ESTABLISH.request ( LC ) */
125     E_PtvId_Lc_Rls_Req ,            /* (  4) RELEASE.request ( LC ) */
126     E_PtvId_Blc_Etb_Req ,           /* (  5) ESTABLISH.request ( B-LC ) */
127     E_PtvId_Blc_Rls_Req ,           /* (  6) RELEASE.request ( B-LC ) */
128     E_PtvId_Clc_Cls_Req ,           /* (  7) CLOSE.request ( CLC ) */
129     E_PtvId_Clc_Rjt_Req ,           /* (  8) REJECT.request ( CLC ) */
130     E_PtvId_Mt_Trf_Req ,            /* (  9) TRANSFER.request ( MT ) */
131     E_PtvId_Mt_Rjt_Req ,            /* ( 10) REJECT.request ( MT ) */
132     E_PtvId_Rme_Send_Req ,          /* ( 11) SEND.request ( RME ) */
133     E_PtvId_Rme_Rjt_Req ,           /* ( 12) REJECT.request ( RME ) */
134     E_PtvId_Mr_Trf_Req ,            /* ( 13) TRANSFER.request ( MR ) */
135     E_PtvId_Mr_Rjt_Req ,            /* ( 14) REJECT.request ( MR ) */
136     E_PtvId_Rtd_Trf_Req ,           /* ( 15) TRANSFER.request ( RTD ) */
137     E_PtvId_Ml_Loop_Req ,           /* ( 16) LOOP.request ( ML ) */
138     E_PtvId_Ml_Rls_Req ,            /* ( 17) RELEASE.request ( ML ) */
139 
140     /* Indication primitive */
141 
142 //    E_PtvId_Msd_Dtm_Idc ,           /* ( 18) DETERMINE.indication ( MSD ) */
143 //    E_PtvId_Msd_Rjt_Idc ,           /* ( 19) REJECT.indication ( MSD ) */
144 //    E_PtvId_Msd_Err_Idc ,           /* ( 20) ERROR.indication ( MSD ) */
145 //    E_PtvId_Ce_Trf_Idc ,            /* ( 21) TRANSFER.indication ( CE ) */
146 //    E_PtvId_Ce_Rjt_Idc ,            /* ( 22) REJECT.indication ( CE ) */
147     E_PtvId_Lc_Etb_Idc = 23 ,          /* ( 23) ESTABLISH.indication ( LC ) */
148     E_PtvId_Lc_Rls_Idc ,            /* ( 24) RELEASE.indication ( LC ) */
149     E_PtvId_Lc_Err_Idc ,            /* ( 25) ERROR.indication ( LC ) */
150     E_PtvId_Blc_Etb_Idc ,           /* ( 26) ESTABLISH.indication ( B-LC ) */
151     E_PtvId_Blc_Rls_Idc ,           /* ( 27) RELEASE.indication ( B-LC ) */
152     E_PtvId_Blc_Err_Idc ,           /* ( 28) ERROR.indication ( B-LC ) */
153     E_PtvId_Clc_Cls_Idc ,           /* ( 29) CLOSE.indication ( CLC ) */
154     E_PtvId_Clc_Rjt_Idc ,           /* ( 30) REJECT.indication ( CLC ) */
155     E_PtvId_Mt_Trf_Idc ,            /* ( 31) TRANSFER.indication ( MT ) */
156     E_PtvId_Mt_Rjt_Idc ,            /* ( 32) REJECT.indication ( MT ) */
157     E_PtvId_Rme_Send_Idc ,          /* ( 33) SEND.indication ( RME ) */
158     E_PtvId_Rme_Rjt_Idc ,           /* ( 34) REJECT.indication ( RME ) */
159     E_PtvId_Mr_Trf_Idc ,            /* ( 35) TRANSFER.indication ( MR ) */
160     E_PtvId_Mr_Rjt_Idc ,            /* ( 36) REJECT.indication ( MR ) */
161     E_PtvId_Rtd_Exp_Idc ,           /* ( 37) EXPIRY.indication ( RTD ) */
162     E_PtvId_Ml_Loop_Idc ,           /* ( 38) LOOP.indication ( ML ) */
163     E_PtvId_Ml_Rls_Idc ,            /* ( 39) RELEASE.indication ( ML ) */
164     E_PtvId_Ml_Err_Idc ,            /* ( 40) ERROR.indication ( ML ) */
165 
166     /* Response primitive */
167 
168     E_PtvId_Ce_Trf_Rps ,            /* ( 41) TRANSFER.response ( CE ) */
169     E_PtvId_Lc_Etb_Rps ,            /* ( 42) ESTABLISH.response ( LC ) */
170     E_PtvId_Blc_Etb_Rps ,           /* ( 43) ESTABLISH.response ( B-LC ) */
171     E_PtvId_Clc_Cls_Rps ,           /* ( 44) CLOSE.response ( CLC ) */
172     E_PtvId_Mt_Trf_Rps ,            /* ( 45) TRANSFER.response ( MT ) */
173     E_PtvId_Rme_Send_Rps ,          /* ( 46) SEND.response ( RME ) */
174     E_PtvId_Mr_Trf_Rps ,            /* ( 47) TRANSFER.response ( MR ) */
175     E_PtvId_Ml_Loop_Rps ,           /* ( 48) LOOP.response ( ML ) */
176 
177     /* Confirm primitive */
178 
179     E_PtvId_Msd_Dtm_Cfm ,           /* ( 49) DETERMINE.confirm ( MSD ) */
180     E_PtvId_Ce_Trf_Cfm ,            /* ( 50) TRANSFER.confirm ( CE ) */
181     E_PtvId_Lc_Etb_Cfm ,            /* ( 51) ESTABLISH.confirm ( LC ) */
182     E_PtvId_Lc_Rls_Cfm ,            /* ( 52) RELEASE.confirm ( LC ) */
183     E_PtvId_Blc_Etb_Cfm ,           /* ( 53) ESTABLISH.confirm ( BLC ) */
184     E_PtvId_Blc_Etb_Cfm2,           /* WWU_BLC */
185     E_PtvId_Blc_Rls_Cfm ,           /* ( 54) RELEASE.confirm ( BLC ) */
186     E_PtvId_Clc_Cls_Cfm ,           /* ( 55) CLOSE.confirm ( CLC ) */
187     E_PtvId_Mt_Trf_Cfm ,            /* ( 56) TRANSFER.confirm ( MT ) */
188     E_PtvId_Rme_Send_Cfm ,          /* ( 57) SEND.confirm ( RME ) */
189     E_PtvId_Mr_Trf_Cfm ,            /* ( 58) TRANSFER.confirm ( MR ) */
190     E_PtvId_Rtd_Trf_Cfm ,           /* ( 59) TRANSFER.confirm ( RTD ) */
191     E_PtvId_Ml_Loop_Cfm ,           /* ( 60) LOOP.confirm ( ML ) */
192 
193     /* Other primitive */
194     E_PtvId_Nsd_Req ,               /* ( 61) NONSTANDARDMESSAGE_REQUEST ( NSD ) */
195     E_PtvId_Nsd_Req_Cfm ,           /* ( 62) NONSTANDARDMESSAGE_REQUEST.confirm ( NSD ) */
196     E_PtvId_Nsd_Rps ,               /* ( 63) NONSTANDARDMESSAGE_RESPONSE ( NSD ) */
197     E_PtvId_Nsd_Rps_Cfm ,           /* ( 64) NONSTANDARDMESSAGE_RESPONSE.confirm ( NSD ) */
198     E_PtvId_Nsd_Cmd ,               /* ( 65) NONSTANDARDMESSAGE_COMMAND ( NSD ) */
199     E_PtvId_Nsd_Cmd_Cfm ,           /* ( 66) NONSTANDARDMESSAGE_COMMAND.confirm ( NSD ) */
200     E_PtvId_Nsd_Idc ,               /* ( 67) NONSTANDARDMESSAGE_INDICATION ( NSD ) */
201     E_PtvId_Nsd_Idc_Cfm ,           /* ( 68) NONSTANDARDMESSAGE_INDICATION.confirm ( NSD ) */
202 
203     E_PtvId_Cm_Req ,                /* ( 69) COMMUNICATIONMODE_REQUEST ( CM ) */
204     E_PtvId_Cm_Req_Cfm ,            /* ( 70) COMMUNICATIONMODE_REQUEST.confirm ( CM ) */
205     E_PtvId_Cm_Rps ,                /* ( 71) COMMUNICATIONMODE_RESPONSE ( CM ) */
206     E_PtvId_Cm_Rps_Cfm ,            /* ( 72) COMMUNICATIONMODE_RESPONSE.confirm ( CM ) */
207     E_PtvId_Cm_Cmd ,                /* ( 73) COMMUNICATIONMODE_COMMAND ( CM ) */
208     E_PtvId_Cm_Cmd_Cfm ,            /* ( 74) COMMUNICATIONMODE_COMMAND.confirm ( CM ) */
209 
210     E_PtvId_H223aar ,               /* ( 75) H223ANNEXARECONFIGURATION ( H223AAR ) */
211     E_PtvId_H223aar_Cfm ,           /* ( 76) H223ANNEXARECONFIGURATION.confirm ( H223AAR ) */
212     E_PtvId_H223aar_Ack ,           /* ( 77) H223ANNEXARECONFIGURATION_ACK ( H223AAR ) */
213     E_PtvId_H223aar_Ack_Cfm ,       /* ( 78) H223ANNEXARECONFIGURATION_ACK.confirm ( H223AAR ) */
214     E_PtvId_H223aar_Rjt ,           /* ( 79) H223ANNEXARECONFIGURATION_REJECT ( H223AAR ) */
215     E_PtvId_H223aar_Rjt_Cfm ,       /* ( 80) H223ANNEXARECONFIGURATION_REJECT.confirm ( H223AAR ) */
216 
217     E_PtvId_Cnf_Req ,               /* ( 81) CONFERENCE_REQUEST ( CNF ) */
218     E_PtvId_Cnf_Req_Cfm ,           /* ( 82) CONFERENCE_REQUEST.confirm ( CNF ) */
219     E_PtvId_Cnf_Rps ,               /* ( 83) CONFERENCE_RESPONSE ( CNF ) */
220     E_PtvId_Cnf_Rps_Cfm ,           /* ( 84) CONFERENCE_RESPONSE.confirm ( CNF ) */
221 
222     E_PtvId_Cmd_Stcs ,              /* ( 85) SENDTERMINALCAPABILITYSET ( CMD ) */
223     E_PtvId_Cmd_Stcs_Cfm ,          /* ( 86) SENDTERMINALCAPABILITYSET.confirm ( CMD ) */
224     E_PtvId_Cmd_Ecrpt ,             /* ( 87) ENCRYPTIONCOMMAND ( CMD ) */
225     E_PtvId_Cmd_Ecrpt_Cfm ,         /* ( 88) ENCRYPTIONCOMMAND.confirm ( CMD ) */
226     E_PtvId_Cmd_Fc ,                /* ( 89) FLOWCONTROLCOMMAND ( CMD ) */
227     E_PtvId_Cmd_Fc_Cfm ,            /* ( 90) FLOWCONTROLCOMMAND.confirm ( CMD ) */
228     E_PtvId_Cmd_Es ,                /* ( 91) ENDSESSIONCOMMAND ( CMD ) */
229     E_PtvId_Cmd_Es_Cfm ,            /* ( 92) ENDSESSIONCOMMAND.confirm ( CMD ) */
230     E_PtvId_Cmd_Mscl ,              /* ( 93) MISCELLANEOUSCOMMAND ( CMD ) */
231     E_PtvId_Cmd_Mscl_Cfm ,          /* ( 94) MISCELLANEOUSCOMMAND.confirm ( CMD ) */
232     E_PtvId_Cmd_Cnf ,               /* ( 95) CONFERENCECOMMAND ( CMD ) */
233     E_PtvId_Cmd_Cnf_Cfm ,           /* ( 96) CONFERENCECOMMAND.confirm ( CMD ) */
234 
235     E_PtvId_Idc_Fnu ,               /* ( 97) FUNCTIONNOTUNDERSTOOD ( IDC ) */
236     E_PtvId_Idc_Fnu_Cfm ,           /* ( 98) FUNCTIONNOTUNDERSTOOD.confirm ( IDC ) */
237     E_PtvId_Idc_Mscl ,              /* ( 99) MISCELLANEOUSINDICATION ( IDC ) */
238     E_PtvId_Idc_Mscl_Cfm ,          /* (100) MISCELLANEOUSINDICATION.confirm ( IDC ) */
239     E_PtvId_Idc_Jtr ,               /* (101) JITTERINDICATION ( IDC ) */
240     E_PtvId_Idc_Jtr_Cfm ,           /* (102) JITTERINDICATION.confirm ( IDC ) */
241     E_PtvId_Idc_H223skw ,           /* (103) H223SKEWINDICATION ( IDC ) */
242     E_PtvId_Idc_H223skw_Cfm ,       /* (104) H223SKEWINDICATION.confirm ( IDC ) */
243     E_PtvId_Idc_Nwatmvc ,           /* (105) NEWATMVCINDICATION ( IDC ) */
244     E_PtvId_Idc_Nwatmvc_Cfm ,       /* (106) NEWATMVCINDICATION.confirm ( IDC ) */
245     E_PtvId_Idc_Ui ,                /* (107) USERINPUTINDICATION ( IDC ) */
246     E_PtvId_Idc_Ui_Cfm ,            /* (108) USERINPUTINDICATION.confirm ( IDC ) */
247     E_PtvId_Idc_Cnf ,               /* (109) CONFERENCEINDICATION ( IDC ) */
248     E_PtvId_Idc_Cnf_Cfm ,           /* (110) CONFERENCEINDICATION.confirm ( IDC ) */
249     E_PtvId_Idc_H2250mxskw ,        /* (111) H2250MAXIMUMSKEWINDICATION ( IDC ) */
250     E_PtvId_Idc_H2250mxskw_Cfm ,    /* (112) H2250MAXIMUMSKEWINDICATION.confirm ( IDC ) */
251     E_PtvId_Idc_Mclct ,             /* (113) MCLOCATIONINDICATION ( IDC ) */
252     E_PtvId_Idc_Mclct_Cfm ,         /* (114) MCLOCATIONINDICATION.confirm ( IDC ) */
253     E_PtvId_Idc_Vi ,                /* (115) VENDORIDENTIFICATION ( IDC ) */
254     E_PtvId_Idc_Vi_Cfm ,            /* (116) VENDORIDENTIFICATION.confirm ( IDC ) */
255     E_PtvId_Idc_Fns ,               /* (117) FUNCTIONNOTSUPPORTED ( IDC ) */
256     E_PtvId_Idc_Fns_Cfm,            /* (118) FUNCTIONNOTSUPPORTED.confirm ( IDC ) */
257     E_PtvId_Idc_Fc,                 /* (119) FLOWCONTROL( IDC ) */
258     E_PtvId_Idc_Fc_Cfm,            /* (120) FLOWCONTROL.confirm ( IDC ) */
259 
260     /* Additional events (RAN) */
261     /* (NOTE: above numbers are off by 1) */
262     E_PtvId_Cmd_Hmr ,              /* (120) H223MultiplexReconfiguration ( CMD ) */
263     E_PtvId_Cmd_Hmr_Cfm            /* (121) H223MultiplexReconfiguration.confirm ( CMD ) */
264 } ENUM_PrimitiveId ;
265 
266 /************************************************************************/
267 /*  Interface Information Id Definition:                                */
268 /*                                     Internal Error Occurence Routine */
269 /************************************************************************/
270 #define     H245_INTERNAL_ERROR_TSC         0       /* Occur in Terminal Status Control Routine */
271 #define     H245_INTERNAL_ERROR_SE          1       /* Occur in Control Entity Routine ( Signalling Entity ) */
272 #define     H245_INTERNAL_ERROR_SRP         2       /* Occur in Simple Retransmission Protocol Routine */
273 
274 
275 /************************************************************************/
276 /*  Interface Information Id Definition: Timer Id                       */
277 /************************************************************************/
278 typedef enum _timerid
279 {
280     E_TmrId_Msd_T106 ,              /* ( 0) Master Slave Determination */
281     E_TmrId_Ce_T101 ,               /* ( 1) Capability Exchange */
282     E_TmrId_LcBlc_T103 ,            /* ( 2) Uni-Directional and Bi-Directional Logical Channel Signalling */
283     E_TmrId_Clc_T108 ,              /* ( 3) Close Logical Channel */
284     E_TmrId_Mt_T104 ,               /* ( 4) Multiplex Table */
285     E_TmrId_Rme_T107 ,              /* ( 5) Request Multiplex Entry */
286     E_TmrId_Mr_T109 ,               /* ( 6) Mode Request */
287     E_TmrId_Rtd_T105 ,              /* ( 7) Round Trip Delay */
288     E_TmrId_Ml_T102                 /* ( 8) Maintenance Loop */
289 } ENUM_TimerId ;
290 
291 
292 /************************************************************************/
293 /*  Interface Information Structure Type Definitions                    */
294 /************************************************************************/
295 typedef S_ControlMsgHeader S_InfHeader;
296 typedef PS_ControlMsgHeader PS_InfHeader;
297 
298 typedef struct
299 {
300     uint32 iT101; /* Capability Exchange */
301     uint32 iT103; /* OLC/OBLC */
302     uint32 iT104; /* MT */
303     uint32 iT105; /* RTD */
304     uint32 iT106; /* MSD */
305     uint32 iT107; /* RME */
306     uint32 iT108; /* CLC */
307     uint32 iT109; /* MR */
308 } H245TimerValues;
309 
310 #endif /* _H245INF_ */
311 
312