From 0c8d5c07ee5233d7c6f764d53cdc32d1f0a0418b Mon Sep 17 00:00:00 2001 From: Harald Welte Date: Sun, 16 Jul 2017 18:53:58 +0200 Subject: GSM_Types: Add RSL channel number IE encoder/decoder --- sysinfo/GSM_Types.ttcn | 63 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) diff --git a/sysinfo/GSM_Types.ttcn b/sysinfo/GSM_Types.ttcn index 3313d7c4..ecc714b0 100644 --- a/sysinfo/GSM_Types.ttcn +++ b/sysinfo/GSM_Types.ttcn @@ -441,5 +441,68 @@ module GSM_Types { other, OTHERWISE; )" } + /* TS 48.058 9.3.1 Channel Number IE */ + type enumerated RslChanNr0 { + RSL_CHAN_NR_INVALID ('00'H), + RSL_CHAN_NR_Bm_ACCH ('01'H), + RSL_CHAN_NR_BCCH ('10'H), + RSL_CHAN_NR_RACH ('11'H), + RSL_CHAN_NR_PCH_AGCH ('12'H) + } with { variant "FIELDLENGTH(5)" }; + + type record RslChanNr2 { + BIT4 tag ('0001'B), + uint1_t sub_chan + } with { variant "FIELDLENGTH(5)" }; + + type record RslChanNr4 { + BIT3 tag ('001'B), + uint2_t sub_chan + } with { variant "FIELDLENGTH(5)" }; + + type record RslChanNr8 { + BIT2 tag ('01'B), + uint3_t sub_chan + } with { variant "FIELDLENGTH(5)" }; + + type union RslChanNrU { + RslChanNr0 ch0, + RslChanNr2 lm, + RslChanNr4 sdcch4, + RslChanNr8 sdcch8 + } with { + variant "TAG(lm, tag = '0001'B; + sdcch4, tag = '001'B; + sdcch8, tag = '01'B; + ch0, OTHERWISE)" + variant "FIELDLENGTH(5)" + }; + + type record RslChannelNr { + RslChanNrU u, + uint3_t tn + } with { variant "FIELDLENGTH(8)" }; + + template RslChannelNr t_RslChanNr0(template uint3_t tn, template RslChanNr0 cht) := { + u := { ch0 := cht }, + tn := tn + } + + template RslChannelNr t_RslChanNr_RACH(template uint3_t tn) := t_RslChanNr0(tn, RSL_CHAN_NR_RACH); + template RslChannelNr t_RslChanNr_BCCH(template uint3_t tn) := t_RslChanNr0(tn, RSL_CHAN_NR_BCCH); + template RslChannelNr t_RslChanNr_PCH_AGCH(template uint3_t tn) := t_RslChanNr0(tn, RSL_CHAN_NR_PCH_AGCH); + template RslChannelNr t_RslChanNr_Bm(template uint3_t tn) := t_RslChanNr0(tn, RSL_CHAN_NR_Bm_ACCH); + template RslChannelNr t_RslChanNr_Lm(template uint3_t tn, uint1_t sub_slot) := { + u := { lm := { tag := '0001'B, sub_chan := sub_slot } }, + tn := tn + } + template RslChannelNr t_RslChanNr_SDCCH4(template uint3_t tn, template uint2_t sub_slot) := { + u := { sdcch4 := { tag := '001'B, sub_chan := sub_slot } }, + tn := tn + } + template RslChannelNr t_RslChanNr_SDCCH8(template uint3_t tn, template uint3_t sub_slot) := { + u := { sdcch8 := { tag := '01'B, sub_chan := sub_slot } }, + tn := tn + } } with { encode "RAW"; variant "FIELDORDER(msb)" } -- cgit v1.2.3