This API has been developed in the C programming language, using Objective Systems' ASN1C compiler to generate the structures and encode/decode functions. The code was generated from a mixture of ASN.1 and CSN.1 specifications. In cases where the relevant technical specifications did not use either ASN.1 or CSN.1, we approximated the given message or information element using one of these notations. Since this was an approximation, it was also necessary to use a combination of configuration directives and custom code to achieve the desired results. The configuration directives are made effective by using the '-3gl3' command-line option with ASN1C. Our white paper, "Using ASN.1 to Describe 3GPP Messages", describes how messages were approximated using ASN.1. (Note that this paper does not reflect our more recent capability to directly compile CSN.1 notation.)
The end result is an API that consisted of C types and structures similar to what a user would get by compiling a standard ASN.1 specification. The other benefit of this approach is that in addition to encode/decode functions, supporting functions such as print, copy, compare, etc. can be generated from the definitions.
Note that one or more ASN.1 modules are associated with each of the above 3GPP specifications. In some of these modules, PDU (“Protocol Definition Unit”) types are defined. These PDU types are used to represent an entire group of (or possibly all) messages from that module. Common fields are also factored out into the PDU type.
The prefixes for each of the types in the API are given in the following table:
TS24008IE |
prefix for the information elements defined in 24.008 |
TS24008Msg |
prefix for the messages defined in 24.008 |
TS24011IE |
prefix for the information elements defined in 24.011 |
TS24011Msg |
prefix for the messages defined in 24.011 |
TS24301IE |
prefix for the information elements defined in 24.301 |
TS24301Msg |
prefix for the messages defined in 24.301 |
TS24501IE |
prefix for the information elements defined in 24.501 |
TS24501Msg |
prefix for the messages defined in 24.501 |
TS44018IE |
prefix for the information elements defined in 44.018 |
TS44018Msg |
prefix for the messages defined in 44.018 |
TS44060IE |
prefix for the information elements defined in 44.060 |
The PDU types we have defined are given in the following table:
TS24008Msg_PDU |
PDU for the messages defined in 24.008 |
TS24011Msg_CP_PDU |
PDU for the CP messages defined in 24.011 |
TS24011Msg_RP_PDU |
PDU for the RP messages defined in 24.011 |
TS24301Msg_PDU |
PDU for the messages defined in 24.301 |
TS24501Msg_PDU |
PDU for the messages defined in 24.501 |
TS44018Msg_L2_PSEUDO_LEN_PDU |
PDU for 44.018 RRC messages using an L2 Pseudo Length |
TS44018Msg_RR_Short_PD_PDU |
PDU for 44.018 RRC messages using a short protocol discriminator |
TS44018Msg_DL_DCCH_PDU |
PDU for 44.018 RRC standard L3 messages transmitted on the main DCCH from network to MS (downlink) |
TS44018Msg_UL_DCCH_PDU |
PDU for 44.018 RRC standard L3 messages transmitted on the main DCCH from MS to network (uplink) |
TS44018Msg_UL_SACCH_PDU |
PDU for 44.018 RRC standard L3 messages transmitted on the SACCH from MS to network (uplink) |
Note that for 44.018 RRC messages, you must choose the PDU type according to the message format and (in some cases) the channel and message direction.