diff options
Diffstat (limited to 'library/RLCMAC_CSN1_Types.ttcn')
-rw-r--r-- | library/RLCMAC_CSN1_Types.ttcn | 505 |
1 files changed, 492 insertions, 13 deletions
diff --git a/library/RLCMAC_CSN1_Types.ttcn b/library/RLCMAC_CSN1_Types.ttcn index cc1ae22a..a4ed3076 100644 --- a/library/RLCMAC_CSN1_Types.ttcn +++ b/library/RLCMAC_CSN1_Types.ttcn @@ -32,6 +32,8 @@ module RLCMAC_CSN1_Types { PACKET_TBF_RELEASE ('001000'B), PACKET_UL_ACK_NACK ('001001'B), PACKET_UL_ASSIGNMENT ('001010'B), + PACKET_CELL_CHANGE_CONTINUE ('001011'B), + PACKET_NEIGHBOUR_CELL_DATA ('001100'B), PACKET_DL_DUMMY_CTRL ('100101'B) } with { variant "FIELDLENGTH(6)" }; @@ -49,7 +51,7 @@ module RLCMAC_CSN1_Types { PACKET_EGPRS_DL_ACK_NACK ('001000'B), PACKET_PAUSE ('001001'B), ADDITIONAL_MS_RA_CAPABILITIES ('001011'B), - PACKET_CELL_CANGE_NOTIFICATION ('001100'B), + PACKET_CELL_CHANGE_NOTIFICATION ('001100'B), PACKET_SI_STATUS ('001101'B), PACKET_CS_REQUEST ('001110'B), MBMS_SERVICE_REQUEST ('001111'B), @@ -161,6 +163,80 @@ module RLCMAC_CSN1_Types { variant (tbf_starting_time) "PRESENCE(tbf_starting_time_present = '1'B)" }; + /* 11.2.9b Packet Measurement Order */ + type enumerated NetworkControlOrder { + NC_0 ('00'B), + NC_1 ('01'B), + NC_2 ('10'B), + NC_RESET ('11'B) + } with { variant "FIELDLENGTH(2)" }; + type record CellSelection { + BIT1 cell_barr_access_2, + BIT1 exc_acc, + BIT1 same_ra_as_serving_cell, + BIT1 gprs_rxlev_access_min_present ('0'B), + BIT1 gprs_temporary_offset_present ('0'B), + BIT1 gprs_reselct_offset_present ('0'B), + BIT1 hcs_params_present ('0'B), + BIT1 si13_pbcch_location_present ('0'B) + /* TODO: add optional parameters above^ */ + }; + type record AddFrequency { + uint10_t start_frequency, + uint6_t bsic, + BIT1 cell_sel_par_present, + CellSelection cell_sel_par optional, + uint5_t nr_of_frequencies, + uint3_t freq_diff_length + /* TODO: support Frequency diff list */ + } with { + variant (cell_sel_par) "PRESENCE(cell_sel_par_present = '1'B)" + }; + type record RepeatedAddFrequencyItem { + BIT1 presence, + AddFrequency item + } with { variant "PRESENCE(presence = '1'B)" }; + type record of uint6_t FreqIndexList; + type record of RepeatedAddFrequencyItem RepeatedAddFrequencyItemList; + type record NCFrequencyList { + BIT1 removed_freq_present, + uint5_t nr_of_removed_freq optional, + FreqIndexList removed_freq_index optional, + RepeatedAddFrequencyItemList repeated_add_frequency optional, + BIT1 repeated_add_frequency_term ('0'B) + } with { + variant (nr_of_removed_freq) "PRESENCE(removed_freq_present = '1'B)" + variant (removed_freq_index) "PRESENCE(removed_freq_present = '1'B)" + variant (nr_of_removed_freq) "LENGTHTO(removed_freq_index)-1" + variant (nr_of_removed_freq) "UNIT(elements)" + }; + type record NCMeasurementParameters { + NetworkControlOrder nco, + BIT1 nc_period_present, + uint3_t nc_non_drx_period optional, + uint3_t nc_reporting_period_i optional, + uint3_t nc_reporting_period_t optional, + BIT1 nc_freq_list_present, + NCFrequencyList nc_freq_list optional + } with { + variant (nc_non_drx_period) "PRESENCE(nc_period_present = '1'B)" + variant (nc_reporting_period_i) "PRESENCE(nc_period_present = '1'B)" + variant (nc_reporting_period_t) "PRESENCE(nc_period_present = '1'B)" + variant (nc_freq_list) "PRESENCE(nc_freq_list_present = '1'B)" + }; + type record PacketMeasOrder { + PageMode page_mode, + GlobalTfiOrTlli tfi_or_tlli, + uint3_t pmo_index, + uint3_t pmo_count, + BIT1 nc_meas_param_present, + NCMeasurementParameters nc_meas_param optional, + BIT1 zero('0'B) /* The value '1' was allocated in an earlier version of the protocol and shall not be used. */ + /* TODO: support Additions 98 onwards */ + } with { + variant (nc_meas_param) "PRESENCE(nc_meas_param_present = '1'B)" + }; + private type record PktDlAssRelAdditions { BIT1 rel99_presence, // 0/1 PktDlAssR99Additions rel99 optional @@ -416,18 +492,22 @@ module RLCMAC_CSN1_Types { } with { variant "TAG(ps, presence = '0'B; cs, presence = '1'B)" }; + type record RepeatedPageInfoItem { + BIT1 presence, + PageInfo item + } with { variant "PRESENCE(presence = '1'B)" }; + type record of RepeatedPageInfoItem RepeatedPageInfo; type record PacketPagingReq { PageMode page_mode, BIT1 persistence_levels_present, PersistenceLevels persistence_levels optional, BIT1 nln_present, uint2_t nln optional, - BIT1 repeated_pageinfo_present, - PageInfo repeated_pageinfo optional + RepeatedPageInfo repeated_pageinfo optional, + BIT1 repeated_pageinfo_term ('0'B) } with { variant (persistence_levels) "PRESENCE(persistence_levels_present = '1'B)" variant (nln) "PRESENCE(nln_present = '1'B)" - variant (repeated_pageinfo) "PRESENCE(repeated_pageinfo_present = '1'B)" }; /* 12.26 Extension Bits IE */ @@ -478,6 +558,7 @@ module RLCMAC_CSN1_Types { variant (cont_res_tlli) "BYTEORDER(first)" }; type record UlAckNackEgprs { + BIT2 msg_excape ('00'B), EgprsChCodingCommand ch_coding_cmd, BIT1 resegment, BIT1 preemptive_tx, @@ -581,14 +662,59 @@ module RLCMAC_CSN1_Types { variant (msg) "PRESENCE(msg_escape = '0'B)" }; + /* 11.2.2a Packet Cell Change Continue */ + type record PacketCellChangeContinue { + PageMode page_mode, + BIT1 zero ('0'B), + GlobalTfi gtfi, + BIT1 arfcn_bsic_presence, + uint10_t arfcn optional, + uint6_t bsic optional, + uint2_t container_id optional + } with { + variant (arfcn) "PRESENCE(arfcn_bsic_presence = '1'B)" + variant (bsic) "PRESENCE(arfcn_bsic_presence = '1'B)" + variant (container_id) "PRESENCE(arfcn_bsic_presence = '1'B)" + }; + + /* 11.2.9e Packet Neighbour Cell Data */ + type record PacketNeighbourCellDataContainer { + BIT3 pd, + uint5_t cd_length, + octetstring container_data + } with { + variant (cd_length) "LENGTHTO (container_data)" + variant (container_data) "BYTEORDER(first)" + }; + type record of PacketNeighbourCellDataContainer PacketNeighbourCellDataContainerList + type record PacketNeighbourCellData { + PageMode page_mode, + BIT1 zero ('0'B), + GlobalTfi gtfi, + uint2_t container_id, + BIT1 spare ('0'B), + uint5_t container_index, + BIT1 arfcn_bsic_presence, + uint10_t arfcn optional, + uint6_t bsic optional, + PacketNeighbourCellDataContainerList container_list + } with { + variant (arfcn) "PRESENCE(arfcn_bsic_presence = '1'B)" + variant (bsic) "PRESENCE(arfcn_bsic_presence = '1'B)" + }; + /* 11.2.0.1 */ type union RlcmacDlCtrlUnion { + PacketAccessReject access_reject, PacketDlAssignment dl_assignment, + PacketMeasOrder meas_order, PacketUlAssignment ul_assignment, PacketPagingReq paging, PacketUlAckNack ul_ack_nack, PacketDlDummy dl_dummy, PacketPwrControlTA pwr_ta, + PacketCellChangeContinue cell_chg_continue, + PacketNeighbourCellData neighbour_cell_data, octetstring other } with { variant "" }; @@ -596,12 +722,16 @@ module RLCMAC_CSN1_Types { RlcmacDlCtrlMsgType msg_type, RlcmacDlCtrlUnion u } with { - variant (u) "CROSSTAG(dl_assignment, msg_type = PACKET_DL_ASSIGNMENT; + variant (u) "CROSSTAG(access_reject, msg_type = PACKET_ACCESS_REJECT; + dl_assignment, msg_type = PACKET_DL_ASSIGNMENT; + meas_order, msg_type = PACKET_MEASUREMENT_ORDER; ul_assignment, msg_type = PACKET_UL_ASSIGNMENT; paging, msg_type = PACKET_PAGING_REQUEST; ul_ack_nack, msg_type = PACKET_UL_ACK_NACK; dl_dummy, msg_type = PACKET_DL_DUMMY_CTRL; pwr_ta, msg_type = PACKET_PWR_CONTROL_TA; + cell_chg_continue,msg_type = PACKET_CELL_CHANGE_CONTINUE; + neighbour_cell_data,msg_type = PACKET_NEIGHBOUR_CELL_DATA; other, OTHERWISE )" }; @@ -611,8 +741,37 @@ module RLCMAC_CSN1_Types { external function dec_RlcmacDlCtrlMsg(in octetstring stream) return RlcmacDlCtrlMsg with { extension "prototype(convert) decode(RAW)" }; + /* 11.2.1 Packet Access Reject */ + type record PacketAccessRejectIDSub { + BIT1 id_type, + PacketRequestReference req_ref optional, + GlobalTfi gtfi optional + } with { variant (req_ref) "PRESENCE(id_type = '0'B)" + variant (gtfi) "PRESENCE(id_type = '1'B)" + }; + type union PacketAccessRejectID { + GprsTlli tlli, + PacketAccessRejectIDSub id_sub + } with { variant (tlli) "BYTEORDER(first)" }; + type record PacketAccessRejectStruct { + BIT1 id_type, + PacketAccessRejectID id, + BIT1 wait_ind_presence, + uint8_t wait_ind optional, + BIT1 wait_ind_size optional + } with { variant (id) "CROSSTAG(tlli, id_type = '0'B; id_sub, id_type = '1'B)" + variant (wait_ind) "PRESENCE(wait_ind_presence = '1'B)" + variant (wait_ind_size) "PRESENCE(wait_ind_presence = '1'B)" + }; + type record PacketAccessReject { + PageMode page_mode, + PacketAccessRejectStruct reject_struct + /* TODO: Additional Reject */ + /* TODO: Rel5 additions */ + } with { variant "" }; + - /* 11.2.6 Packet Downlikn Ack/Nack */ + /* 11.2.6 Packet Downlink Ack/Nack */ type record ILevel { BIT1 presence, uint4_t i_level optional @@ -630,7 +789,60 @@ module RLCMAC_CSN1_Types { BIT1 chreq_desc_presence, ChannelReqDescription chreq_desc optional, ChannelQualityReport ch_qual_rep + } with { variant (chreq_desc) "PRESENCE(chreq_desc_presence = '1'B)" }; + + /* 11.2.6a Egprs Packet Downlink Ack/Nack */ + type record EgprsBEPLinkQualityMeasurements { + BIT1 gmsk_presence, + BIT5 gmsk_mean_bep optional, + BIT3 gmsk_cv_bep optional, + BIT1 psk8_presence, + BIT5 psk8_mean_bep optional, + BIT3 psk8_cv_bep optional + } with { variant (gmsk_mean_bep) "PRESENCE(gmsk_presence = '1'B)" + variant (gmsk_cv_bep) "PRESENCE(gmsk_presence = '1'B)" + variant (psk8_mean_bep) "PRESENCE(psk8_presence = '1'B)" + variant (psk8_cv_bep) "PRESENCE(psk8_presence = '1'B)" + }; + /* 12.5.4 EGPRS Timeslot Link Quality Measurements IE */ + type record BEPMeas { + BIT1 presence, + BIT1 is_8psk optional, + uint4_t bep_meas optional + } with { variant (is_8psk) "PRESENCE(presence = '1'B)" + variant (bep_meas) "PRESENCE(presence = '1'B)" + }; + type record length(8) of BEPMeas BEPMeasLi; + type record EgprsTimeslotLinkQualityMeasurements { + BIT1 bep_measurements_presence, + BEPMeasLi bep_meas optional, + BIT1 i_measurements_presence, + ILevels i_meas optional + } with { variant (bep_meas) "PRESENCE(bep_measurements_presence = '1'B)" + variant (i_meas) "PRESENCE(i_measurements_presence = '1'B)" + }; + /* Table 12.5.1.1 : EGPRS Channel Quality Report Information elements */ + type record EgprsChannelQualityReport { + EgprsBEPLinkQualityMeasurements bep_link_qual_meas, + uint6_t c_value, + EgprsTimeslotLinkQualityMeasurements ts_link_qual_meas } with { variant "" }; + type record EgprsPacketDlAckNack { + uint5_t dl_tfi, + BIT1 ms_oom, + BIT1 egprs_ch_qual_rep_presence, + EgprsChannelQualityReport egprs_ch_qual_rep optional, + BIT1 chreq_desc_presence, + ChannelReqDescription chreq_desc optional, + BIT1 pfi_presence, + BIT7 pfi optional, + BIT1 epdan_presence('0'B), + /* TODO: Implement EPD A/N */ + EgprsAckNackDescriptionIE ack_nack_desc_ie + } with { variant (chreq_desc) "PRESENCE(chreq_desc_presence = '1'B)" + variant (egprs_ch_qual_rep) "PRESENCE(egprs_ch_qual_rep_presence = '1'B)" + variant (pfi) "PRESENCE(pfi_presence = '1'B)" + }; /* 11.2.2 Packet Control Acknowledgement */ type enumerated CtrlAck { @@ -654,6 +866,38 @@ module RLCMAC_CSN1_Types { variant (tlli) "BYTEORDER(first)" }; + /* 11.2.9 Packet Measurement Report */ + type record NCMeasurement { + uint6_t frequency_n, + BIT1 bsic_n_presence, + BIT6 bsic_n optional, + uint6_t rxlev_n + } with { + variant (bsic_n) "PRESENCE(bsic_n_presence = '1'B)" + }; + type record of NCMeasurement NCMeasurementList; + type record NCMeasurementReport { + BIT1 nc_mode, + uint6_t rxlev_serving_cell, + BIT1 zero ('0'B), /*The value '1' was allocated in an earlier version of the protocol and shall not be used.*/ + uint3_t num_nc_measurements, + NCMeasurementList nm_measurements + } with { + variant (num_nc_measurements) "LENGTHTO(nm_measurements)" + variant (num_nc_measurements) "UNIT(elements)" + }; + type record PacketMeasReport { + GprsTlli tlli, + BIT1 psi5_change_mark_presence, + BIT2 psi5_change_mark optional, + BIT1 additions_99 ('0'B), /* TODO: 1 -> support Additions 99 onwards */ + NCMeasurementReport nc_meas_report optional + } with { + variant (tlli) "BYTEORDER(first)" + variant (psi5_change_mark) "PRESENCE(psi5_change_mark_presence = '1'B)" + variant (nc_meas_report) "PRESENCE(additions_99 = '0'B)" + }; + /* TS 44.060 sec 12.30 MS Radio Access Capability 2 * (for value part, see 3GPP TS 24.008 sec 10.5.5.12a and table 10.5.146) */ type union MSRadioAccCap2 { @@ -697,13 +941,173 @@ module RLCMAC_CSN1_Types { variant (sign_var) "PRESENCE(sign_var_presence = '1'B)" }; + /* 11.2.3a Packet Cell Change Notification, 3G Target Cell Struct (Rel-6 extension) */ + type record UtranTargetCellFdd { + uint14_t arfcn, + BIT1 bandwidth_presence, + uint3_t bandwidth optional, + uint10_t scrambling_code + } with { + variant (bandwidth) "PRESENCE(bandwidth_presence = '1'B)" + }; + type record UtranTargetCellTdd { + uint14_t arfcn, + BIT1 bandwidth_presence, + uint3_t bandwidth optional, + uint7_t cell_parameter, + BIT1 sync_case + } with { + variant (bandwidth) "PRESENCE(bandwidth_presence = '1'B)" + }; + type record UtranTargetCell { + BIT1 fdd_presence, + UtranTargetCellFdd fdd optional, + BIT1 tdd_presence, + UtranTargetCellTdd tdd optional, + uint6_t reporting_quantity + } with { + variant (fdd) "PRESENCE(fdd_presence = '1'B)" + variant (tdd) "PRESENCE(tdd_presence = '1'B)" + }; + + /* 11.2.3a Packet Cell Change Notification, Eutran Target Cell Struct (Rel-8 extension) */ + type record EutranTargetCell { + uint16_t earfcn, + BIT1 meas_bandwidth_presence, + uint3_t meas_bandwidth optional, + uint9_t phys_layer_cell_id, + uint6_t reporting_quantity + } with { + variant (meas_bandwidth) "PRESENCE(meas_bandwidth_presence = '1'B)" + }; + + /* 11.2.3a Packet Cell Change Notification, 3G CCN Measurement Report Struct (Rel-6 extension) */ + type record of UtranCCNMeasReportItem UtranReportingQuantityList; + type record UtranCCNMeasReportItem { + uint7_t cell_list_index, + uint6_t reporting_quantity + } with { variant "" }; + type record UtranCCNMeasReport { + uint3_t n_3g, + UtranReportingQuantityList cells + } with { + variant (n_3g) "LENGTHTO(cells) - 1" + variant (n_3g) "UNIT(elements)" + }; + + /* 11.2.3a Packet Cell Change Notification, E-UTRAN CCN Measurement Report Struct (Rel-8 extension) */ + type record length(1..4) of EutranCCNMeasReportItem EutranReportingQuantityList; + type record EutranCCNMeasReportItem { + uint3_t frequency_list_index, + uint9_t cell_identity, + uint6_t reporting_quantity + } with { variant "" }; + type record EutranCCNMeasReport { + uint1_t utran_ba_used, + uint2_t n_eutran, + EutranReportingQuantityList cells + } with { + variant (n_eutran) "LENGTHTO(cells) - 1" + variant (n_eutran) "UNIT(elements)" + }; + + type record NCMeasurementItem { + uint6_t freq, + BIT1 bsic_presence, + uint6_t bsic optional, + uint6_t rxlev + } with { + variant (bsic) "PRESENCE(bsic_presence = '1'B)" + }; + type record of NCMeasurementItem NCMeasurements; + type record CCNMeasReport { + uint6_t rxlev_servig_cell, + BIT1 zero ('0'B), + uint3_t num_meas, + NCMeasurements meas + } with { variant "" }; + + /* 11.2.3a Packet Cell Change Notification, Rel-Additions (Matrioshka) */ + private type record PktCellChgNotifAdditions { + BIT1 rel6_presence, + PktCellChgNotifR6Additions rel6 optional + } with { + variant (rel6) "PRESENCE(rel6_presence = '1'B)" + }; + private type record PktCellChgNotifR6Additions { + BIT1 utran_ba_used_presence, + uint1_t utran_ba_used optional, + UtranCCNMeasReport utran_ccn_meas_rep + } with { + variant (utran_ba_used) "PRESENCE(utran_ba_used_presence = '1'B)" + }; + + private type record PktCellChgNotifyU0 { + BIT1 tag ('0'B), + uint10_t arfcn, + uint6_t bsic + } with { variant "" }; + private type record PktCellChgNotifyU10 { + BIT2 tag ('10'B), + UtranTargetCell utran_target_cell + } with { variant "" }; + private type record PktCellChgNotifyU110 { + BIT3 tag ('110'B), + BIT1 arfcn_bsic_presence, + uint10_t arfcn optional, + uint6_t bsic optional, + BIT1 utran_target_cell_presence, + UtranTargetCell utran_target_cell optional, + BIT1 eutran_target_cell_presence, + EutranTargetCell eutran_target_cell optional, + BIT1 eutran_ccn_meas_rep_presence, + EutranCCNMeasReport eutran_ccn_meas_rep optional + } with { + variant (arfcn) "PRESENCE(arfcn_bsic_presence = '1'B)" + variant (bsic) "PRESENCE(arfcn_bsic_presence = '1'B)" + variant (utran_target_cell) "PRESENCE(utran_target_cell_presence = '1'B)" + variant (eutran_target_cell) "PRESENCE(eutran_target_cell_presence = '1'B)" + variant (eutran_ccn_meas_rep) "PRESENCE(eutran_ccn_meas_rep_presence = '1'B)" + }; + private type union PktCellChgNotifyUnion { + PktCellChgNotifyU0 u0, + PktCellChgNotifyU10 u10, /* Rel-6 additions */ + PktCellChgNotifyU110 u110 /* Rel-8 additions */ + /* TODO: PktCellChgNotifyU1110 Rel-9 additions */ + /* TODO: Message escape : { 1111 } bit (*) = <no string> > */ + } with { + variant "TAG(u0, tag = '0'B; + u10, tag = '10'B; + u110, tag = '110'B)" + }; + + /* 11.2.3a Packet Cell Change Notification, message body */ + type record PacketCellChangeNotification { + GlobalTfi gtfi, + PktCellChgNotifyUnion u, + BIT1 ba_psi3_presence, + BIT1 ba_used optional, + BIT2 psi3_change_mark optional, + BIT1 pmo_used, + BIT1 pccn_sending, + CCNMeasReport ccn_meas_rep, + /* Rel-Additions (Matrioshka) */ + PktCellChgNotifAdditions rel_additions optional + } with { + variant (ba_used) "PRESENCE(ba_psi3_presence = '0'B)" + variant (psi3_change_mark) "PRESENCE(ba_psi3_presence = '1'B)" + }; + /* 11.2.0.2 */ type union RlcmacUlCtrlUnion { - PacketCtrlAck ctrl_ack, - PacketDlAckNack dl_ack_nack, - PacketUlDummy ul_dummy, - PacketResourceReq resource_req, - octetstring other + PacketCtrlAck ctrl_ack, + PacketDlAckNack dl_ack_nack, + EgprsPacketDlAckNack dl_ack_nack_egprs, + PacketUlDummy ul_dummy, + PacketMeasReport meas_report, + PacketResourceReq resource_req, + PacketCellChangeNotification cell_chg_notif, + octetstring other } with { variant "" }; type record RlcmacUlCtrlMsg { @@ -712,8 +1116,11 @@ module RLCMAC_CSN1_Types { } with { variant (u) "CROSSTAG(ctrl_ack, msg_type = PACKET_CONTROL_ACK; dl_ack_nack, msg_type = PACKET_DL_ACK_NACK; + dl_ack_nack_egprs, msg_type = PACKET_EGPRS_DL_ACK_NACK; ul_dummy, msg_type = PACKET_UL_DUMMY_CTRL; + meas_report, msg_type = PACKET_MEASUREMENT_REPORT; resource_req, msg_type = PACKET_RESOURCE_REQUEST; + cell_chg_notif, msg_type = PACKET_CELL_CHANGE_NOTIFICATION; other, OTHERWISE )" }; @@ -732,6 +1139,27 @@ module RLCMAC_CSN1_Types { ReceivedBlockBitmap receive_block_bitmap } with { variant "" }; + /* 12.3.1 Egprs Ack/Nack Description */ + type bitstring UncompressedReceivedBlockBitmap length(64) with { variant "BYTEORDER(last)" }; + type record EgprsAckNackDescription { + BIT1 final_ack, + BIT1 begin_window, + BIT1 end_window, + uint11_t starting_seq_nr, + BIT1 compressed, + /* TODO: CompressedReceivedBlockBitmap urbb optional, */ + UncompressedReceivedBlockBitmap urbb optional + } with { variant (urbb) "PRESENCE(compressed = '0'B)" }; + type record EgprsAckNackDescriptionIE { + BIT1 len_present, + uint8_t len optional, + EgprsAckNackDescription acknack_desc + } with { variant (len) "PRESENCE(len_present = '1'B)" + variant (len) "LENGTHTO(acknack_desc)" + variant (len) "UNIT(bits)" + }; + + /* 12.7 Channel Request Description */ type enumerated RlcMode { RLC_MODE_ACKNOWLEDGED (0), @@ -763,7 +1191,7 @@ module RLCMAC_CSN1_Types { }; type record FreqDirect1 { uint6_t maio, - GprsMobileAllication mobile_allocation + GprsMobileAllocation mobile_allocation } type record FreqDirect2 { uint6_t maio, @@ -787,6 +1215,15 @@ module RLCMAC_CSN1_Types { variant (direct2) "PRESENCE(presence = '11'B)" }; + /* 12.9a GPRS Power Control Parameters */ + type record GprsPowerControlParameters { + uint4_t alpha, + BIT5 t_avg_w, + BIT5 t_avg_t, + BIT1 pc_meas_chan, + BIT4 n_avg_i + }; + /* 12.10 Global TFI */ type record GlobalTfi { boolean is_dl_tfi, @@ -801,7 +1238,7 @@ module RLCMAC_CSN1_Types { } with { variant (rfl_number_list) "PRESENCE(presence = '1'B)" }; - type record GprsMobileAllication { + type record GprsMobileAllocation { uint6_t hsn, BIT1 rfl_number_list_present, RflNumberList rfl_number_list optional, @@ -870,6 +1307,48 @@ module RLCMAC_CSN1_Types { variant (relative_k) "PRESENCE(presence = '1'B)" }; + /* 12.24 GPRS Cell Options */ + type record ExtensionInformation { + BIT1 egprs_supported, + BIT1 egprs_pkt_channel_req optional, + BIT4 bep_period optional, + BIT1 pfc_feature_mode, + BIT1 dtm_support, + BIT1 bss_paging_coordination, + /* REL-4 extension */ + BIT1 ccn_active optional, + BIT1 nw_ext_utbf optional + /* TODO: REL-6 extension */ + /* TODO: REL-7 extension */ + /* TODO: REL-10 extension */ + } with { + variant (egprs_pkt_channel_req) "PRESENCE(egprs_supported = '1'B)" + variant (bep_period) "PRESENCE(egprs_supported = '1'B)" + }; + type record GprsCellOptions { + BIT2 nmo, + BIT3 t3168, + BIT3 t3192, + BIT3 drx_timer_max, + BIT1 access_burst_type, + BIT1 control_ack_type, + uint4_t bs_cv_max, + BIT1 pan_presence, + uint3_t pan_dec optional, + uint3_t pan_inc optional, + BIT3 pan_max optional, + BIT1 ext_info_presence, + BIT6 ext_info_length optional, + ExtensionInformation ext_info optional + } with { + variant (pan_dec) "PRESENCE(pan_presence = '1'B)" + variant (pan_inc) "PRESENCE(pan_presence = '1'B)" + variant (pan_max) "PRESENCE(pan_presence = '1'B)" + variant (ext_info_length) "PRESENCE(ext_info_presence = '1'B)" + variant (ext_info) "PRESENCE(ext_info_presence = '1'B)" + /* TODO: mark REL-4 and upwards in ext_info as omit based on ext_info_length ? */ + }; + /* 3GPP TS 44.060, table 11.2.5a.2 "EGPRS PACKET CHANNEL REQUEST" */ type union EGPRSPktChRequest { EGPRSPktChRequest_MC5P2RB3 one_phase, |