Migrate grc blocks from xml to yaml
Convert the blocks using cmdline_converter.py script from
c861a840e3/cmdline_converter.py
Change-Id: Iee5c611a2e100bd2fdf487611a867dc937d8c292
This commit is contained in:
parent
1789ae28ee
commit
14ea82d227
|
@ -26,5 +26,5 @@ add_subdirectory(misc_utils)
|
||||||
add_subdirectory(transmitter)
|
add_subdirectory(transmitter)
|
||||||
add_subdirectory(trx)
|
add_subdirectory(trx)
|
||||||
install(FILES
|
install(FILES
|
||||||
gsm_block_tree.xml DESTINATION share/gnuradio/grc/blocks
|
gsm.tree.yml DESTINATION share/gnuradio/grc/blocks
|
||||||
)
|
)
|
||||||
|
|
|
@ -18,8 +18,8 @@
|
||||||
# Boston, MA 02110-1301, USA.
|
# Boston, MA 02110-1301, USA.
|
||||||
|
|
||||||
install(FILES
|
install(FILES
|
||||||
gsm_control_channels_decoder.xml
|
gsm_control_channels_decoder.block.yml
|
||||||
gsm_tch_f_decoder.xml
|
gsm_tch_f_decoder.block.yml
|
||||||
gsm_tch_h_decoder.xml
|
gsm_tch_h_decoder.block.yml
|
||||||
DESTINATION share/gnuradio/grc/blocks
|
DESTINATION share/gnuradio/grc/blocks
|
||||||
)
|
)
|
||||||
|
|
|
@ -0,0 +1,19 @@
|
||||||
|
# auto-generated by grc.converter
|
||||||
|
|
||||||
|
id: gsm_control_channels_decoder
|
||||||
|
label: Control channels decoder
|
||||||
|
|
||||||
|
inputs:
|
||||||
|
- domain: message
|
||||||
|
id: bursts
|
||||||
|
|
||||||
|
outputs:
|
||||||
|
- domain: message
|
||||||
|
id: msgs
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
templates:
|
||||||
|
imports: import grgsm
|
||||||
|
make: grgsm.control_channels_decoder()
|
||||||
|
|
||||||
|
file_format: 1
|
|
@ -1,16 +0,0 @@
|
||||||
<?xml version="1.0"?>
|
|
||||||
<block>
|
|
||||||
<name>Control channels decoder</name>
|
|
||||||
<key>gsm_control_channels_decoder</key>
|
|
||||||
<import>import grgsm</import>
|
|
||||||
<make>grgsm.control_channels_decoder()</make>
|
|
||||||
<sink>
|
|
||||||
<name>bursts</name>
|
|
||||||
<type>message</type>
|
|
||||||
</sink>
|
|
||||||
<source>
|
|
||||||
<name>msgs</name>
|
|
||||||
<type>message</type>
|
|
||||||
<optional>1</optional>
|
|
||||||
</source>
|
|
||||||
</block>
|
|
|
@ -0,0 +1,41 @@
|
||||||
|
# auto-generated by grc.converter
|
||||||
|
|
||||||
|
id: gsm_tch_f_decoder
|
||||||
|
label: TCH/F decoder
|
||||||
|
|
||||||
|
parameters:
|
||||||
|
- id: mode
|
||||||
|
label: TCH coding mode
|
||||||
|
dtype: enum
|
||||||
|
options: [grgsm.TCH_FS, grgsm.TCH_EFR, grgsm.TCH_AFS12_2, grgsm.TCH_AFS10_2, grgsm.TCH_AFS7_95,
|
||||||
|
grgsm.TCH_AFS7_4, grgsm.TCH_AFS6_7, grgsm.TCH_AFS5_9, grgsm.TCH_AFS5_15, grgsm.TCH_AFS4_75]
|
||||||
|
option_labels: [GSM-FR, GSM-EFR, GSM-AMR 12.2, GSM-AMR 10.2, GSM-AMR 7.95, GSM-AMR
|
||||||
|
7.4, GSM-AMR 6.7, GSM-AMR 5.9, GSM-AMR 5.15, GSM-AMR 4.75]
|
||||||
|
- id: boundary_check
|
||||||
|
label: Voice boundary detection
|
||||||
|
dtype: bool
|
||||||
|
default: 'False'
|
||||||
|
options: ['False', 'True']
|
||||||
|
|
||||||
|
inputs:
|
||||||
|
- domain: message
|
||||||
|
id: bursts
|
||||||
|
|
||||||
|
outputs:
|
||||||
|
- domain: message
|
||||||
|
id: msgs
|
||||||
|
optional: true
|
||||||
|
- domain: message
|
||||||
|
id: voice
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
templates:
|
||||||
|
imports: import grgsm
|
||||||
|
make: grgsm.tch_f_decoder(${mode}, ${boundary_check})
|
||||||
|
|
||||||
|
documentation: "If \"Voice boundary detection\" is enabled, then only bursts are decoded\
|
||||||
|
\ as voice where\n\n- the framenumber is greater then the framenumber of a received\
|
||||||
|
\ \"Connect\" or \"Connect Acknowlegde\" message, and \n- the framenumber is less\
|
||||||
|
\ then the framenumber of a \"Release\" message"
|
||||||
|
|
||||||
|
file_format: 1
|
|
@ -1,90 +0,0 @@
|
||||||
<?xml version="1.0"?>
|
|
||||||
<block>
|
|
||||||
<name>TCH/F decoder</name>
|
|
||||||
<key>gsm_tch_f_decoder</key>
|
|
||||||
<import>import grgsm</import>
|
|
||||||
<make>grgsm.tch_f_decoder($mode, $boundary_check)</make>
|
|
||||||
|
|
||||||
<param>
|
|
||||||
<name>TCH coding mode</name>
|
|
||||||
<key>mode</key>
|
|
||||||
<type>enum</type>
|
|
||||||
<option>
|
|
||||||
<name>GSM-FR</name>
|
|
||||||
<key>grgsm.TCH_FS</key>
|
|
||||||
</option>
|
|
||||||
<option>
|
|
||||||
<name>GSM-EFR</name>
|
|
||||||
<key>grgsm.TCH_EFR</key>
|
|
||||||
</option>
|
|
||||||
<option>
|
|
||||||
<name>GSM-AMR 12.2</name>
|
|
||||||
<key>grgsm.TCH_AFS12_2</key>
|
|
||||||
</option>
|
|
||||||
<option>
|
|
||||||
<name>GSM-AMR 10.2</name>
|
|
||||||
<key>grgsm.TCH_AFS10_2</key>
|
|
||||||
</option>
|
|
||||||
<option>
|
|
||||||
<name>GSM-AMR 7.95</name>
|
|
||||||
<key>grgsm.TCH_AFS7_95</key>
|
|
||||||
</option>
|
|
||||||
<option>
|
|
||||||
<name>GSM-AMR 7.4</name>
|
|
||||||
<key>grgsm.TCH_AFS7_4</key>
|
|
||||||
</option>
|
|
||||||
<option>
|
|
||||||
<name>GSM-AMR 6.7</name>
|
|
||||||
<key>grgsm.TCH_AFS6_7</key>
|
|
||||||
</option>
|
|
||||||
<option>
|
|
||||||
<name>GSM-AMR 5.9</name>
|
|
||||||
<key>grgsm.TCH_AFS5_9</key>
|
|
||||||
</option>
|
|
||||||
<option>
|
|
||||||
<name>GSM-AMR 5.15</name>
|
|
||||||
<key>grgsm.TCH_AFS5_15</key>
|
|
||||||
</option>
|
|
||||||
<option>
|
|
||||||
<name>GSM-AMR 4.75</name>
|
|
||||||
<key>grgsm.TCH_AFS4_75</key>
|
|
||||||
</option>
|
|
||||||
</param>
|
|
||||||
<param>
|
|
||||||
<name>Voice boundary detection</name>
|
|
||||||
<key>boundary_check</key>
|
|
||||||
<value>False</value>
|
|
||||||
<type>bool</type>
|
|
||||||
<option>
|
|
||||||
<name>False</name>
|
|
||||||
<key>False</key>
|
|
||||||
</option>
|
|
||||||
<option>
|
|
||||||
<name>True</name>
|
|
||||||
<key>True</key>
|
|
||||||
</option>
|
|
||||||
</param>
|
|
||||||
|
|
||||||
<sink>
|
|
||||||
<name>bursts</name>
|
|
||||||
<type>message</type>
|
|
||||||
</sink>
|
|
||||||
<source>
|
|
||||||
<name>msgs</name>
|
|
||||||
<type>message</type>
|
|
||||||
<optional>1</optional>
|
|
||||||
</source>
|
|
||||||
<source>
|
|
||||||
<name>voice</name>
|
|
||||||
<type>message</type>
|
|
||||||
<optional>1</optional>
|
|
||||||
</source>
|
|
||||||
|
|
||||||
<doc>
|
|
||||||
If "Voice boundary detection" is enabled, then only bursts are decoded as voice where
|
|
||||||
|
|
||||||
- the framenumber is greater then the framenumber of a received "Connect" or "Connect Acknowlegde" message, and
|
|
||||||
- the framenumber is less then the framenumber of a "Release" message
|
|
||||||
</doc>
|
|
||||||
|
|
||||||
</block>
|
|
|
@ -0,0 +1,51 @@
|
||||||
|
# auto-generated by grc.converter
|
||||||
|
|
||||||
|
id: gsm_tch_h_decoder
|
||||||
|
label: TCH/H decoder
|
||||||
|
|
||||||
|
parameters:
|
||||||
|
- id: sub_channel
|
||||||
|
label: Sub-channel number
|
||||||
|
dtype: int
|
||||||
|
default: '0'
|
||||||
|
options: ['0', '1']
|
||||||
|
hide: none
|
||||||
|
- id: multi_rate
|
||||||
|
label: MultiRate configuration
|
||||||
|
dtype: string
|
||||||
|
- id: boundary_check
|
||||||
|
label: Voice boundary detection
|
||||||
|
dtype: bool
|
||||||
|
default: 'False'
|
||||||
|
options: ['False', 'True']
|
||||||
|
|
||||||
|
inputs:
|
||||||
|
- domain: message
|
||||||
|
id: bursts
|
||||||
|
|
||||||
|
outputs:
|
||||||
|
- domain: message
|
||||||
|
id: msgs
|
||||||
|
optional: true
|
||||||
|
- domain: message
|
||||||
|
id: voice
|
||||||
|
optional: true
|
||||||
|
asserts:
|
||||||
|
- ${ sub_channel > -1 and sub_channel < 2 }
|
||||||
|
|
||||||
|
templates:
|
||||||
|
imports: import grgsm
|
||||||
|
make: grgsm.tch_h_decoder(${sub_channel}, ${multi_rate}, ${boundary_check})
|
||||||
|
|
||||||
|
documentation: |-
|
||||||
|
The MultiRate configuration string should contains the hex string from the
|
||||||
|
MultiRate configuration element from the Assignment Command message.
|
||||||
|
Example: 28111a40.
|
||||||
|
See 3GPP TS 44.018 - 10.5.2.21aa MultiRate configuratio
|
||||||
|
|
||||||
|
If "Voice boundary detection" is enabled, then only bursts are decoded as voice where
|
||||||
|
|
||||||
|
- the framenumber is greater then the framenumber of a received "Connect" or "Connect Acknowlegde" message, and
|
||||||
|
- the framenumber is less then the framenumber of a "Release" message
|
||||||
|
|
||||||
|
file_format: 1
|
|
@ -1,70 +0,0 @@
|
||||||
<?xml version="1.0"?>
|
|
||||||
<block>
|
|
||||||
<name>TCH/H decoder</name>
|
|
||||||
<key>gsm_tch_h_decoder</key>
|
|
||||||
<import>import grgsm</import>
|
|
||||||
<make>grgsm.tch_h_decoder($sub_channel, $multi_rate, $boundary_check)</make>
|
|
||||||
|
|
||||||
<param>
|
|
||||||
<name>Sub-channel number</name>
|
|
||||||
<key>sub_channel</key>
|
|
||||||
<value>0</value>
|
|
||||||
<type>int</type>
|
|
||||||
<hide>none</hide>
|
|
||||||
<option>
|
|
||||||
<name>0</name>
|
|
||||||
<key>0</key>
|
|
||||||
</option>
|
|
||||||
<option>
|
|
||||||
<name>1</name>
|
|
||||||
<key>1</key>
|
|
||||||
</option>
|
|
||||||
</param>
|
|
||||||
<param>
|
|
||||||
<name>MultiRate configuration</name>
|
|
||||||
<key>multi_rate</key>
|
|
||||||
<type>string</type>
|
|
||||||
</param>
|
|
||||||
<param>
|
|
||||||
<name>Voice boundary detection</name>
|
|
||||||
<key>boundary_check</key>
|
|
||||||
<value>False</value>
|
|
||||||
<type>bool</type>
|
|
||||||
<option>
|
|
||||||
<name>False</name>
|
|
||||||
<key>False</key>
|
|
||||||
</option>
|
|
||||||
<option>
|
|
||||||
<name>True</name>
|
|
||||||
<key>True</key>
|
|
||||||
</option>
|
|
||||||
</param>
|
|
||||||
<check>$sub_channel() > -1 and $sub_channel() < 2</check>
|
|
||||||
<sink>
|
|
||||||
<name>bursts</name>
|
|
||||||
<type>message</type>
|
|
||||||
</sink>
|
|
||||||
<source>
|
|
||||||
<name>msgs</name>
|
|
||||||
<type>message</type>
|
|
||||||
<optional>1</optional>
|
|
||||||
</source>
|
|
||||||
<source>
|
|
||||||
<name>voice</name>
|
|
||||||
<type>message</type>
|
|
||||||
<optional>1</optional>
|
|
||||||
</source>
|
|
||||||
|
|
||||||
<doc>
|
|
||||||
The MultiRate configuration string should contains the hex string from the
|
|
||||||
MultiRate configuration element from the Assignment Command message.
|
|
||||||
Example: 28111a40.
|
|
||||||
See 3GPP TS 44.018 - 10.5.2.21aa MultiRate configuratio
|
|
||||||
|
|
||||||
If "Voice boundary detection" is enabled, then only bursts are decoded as voice where
|
|
||||||
|
|
||||||
- the framenumber is greater then the framenumber of a received "Connect" or "Connect Acknowlegde" message, and
|
|
||||||
- the framenumber is less then the framenumber of a "Release" message
|
|
||||||
</doc>
|
|
||||||
|
|
||||||
</block>
|
|
|
@ -18,5 +18,6 @@
|
||||||
# Boston, MA 02110-1301, USA.
|
# Boston, MA 02110-1301, USA.
|
||||||
|
|
||||||
install(FILES
|
install(FILES
|
||||||
gsm_decryption.xml DESTINATION share/gnuradio/grc/blocks
|
gsm_decryption.block.yml
|
||||||
|
DESTINATION share/gnuradio/grc/blocks
|
||||||
)
|
)
|
||||||
|
|
|
@ -0,0 +1,31 @@
|
||||||
|
# auto-generated by grc.converter
|
||||||
|
|
||||||
|
id: gsm_decryption
|
||||||
|
label: Decryption
|
||||||
|
|
||||||
|
parameters:
|
||||||
|
- id: k_c
|
||||||
|
label: Kc session key
|
||||||
|
dtype: int_vector
|
||||||
|
default: '[0,0,0,0,0,0,0,0]'
|
||||||
|
- id: a5_version
|
||||||
|
label: A5 version
|
||||||
|
dtype: int
|
||||||
|
default: '1'
|
||||||
|
|
||||||
|
inputs:
|
||||||
|
- domain: message
|
||||||
|
id: bursts
|
||||||
|
|
||||||
|
outputs:
|
||||||
|
- domain: message
|
||||||
|
id: bursts
|
||||||
|
asserts:
|
||||||
|
- ${ a5_version > 0 }
|
||||||
|
- ${ a5_version < 5 }
|
||||||
|
|
||||||
|
templates:
|
||||||
|
imports: import grgsm
|
||||||
|
make: grgsm.decryption(${k_c}, ${a5_version})
|
||||||
|
|
||||||
|
file_format: 1
|
|
@ -1,34 +0,0 @@
|
||||||
<?xml version="1.0"?>
|
|
||||||
<block>
|
|
||||||
<name>Decryption</name>
|
|
||||||
<key>gsm_decryption</key>
|
|
||||||
<import>import grgsm</import>
|
|
||||||
<make>grgsm.decryption($k_c, $a5_version)</make>
|
|
||||||
|
|
||||||
<param>
|
|
||||||
<name>Kc session key</name>
|
|
||||||
<key>k_c</key>
|
|
||||||
<value>[0,0,0,0,0,0,0,0]</value>
|
|
||||||
<type>int_vector</type>
|
|
||||||
</param>
|
|
||||||
|
|
||||||
<param>
|
|
||||||
<name>A5 version</name>
|
|
||||||
<key>a5_version</key>
|
|
||||||
<value>1</value>
|
|
||||||
<type>int</type>
|
|
||||||
</param>
|
|
||||||
|
|
||||||
<check>$a5_version > 0</check>
|
|
||||||
<check>$a5_version < 5</check>
|
|
||||||
|
|
||||||
<sink>
|
|
||||||
<name>bursts</name>
|
|
||||||
<type>message</type>
|
|
||||||
</sink>
|
|
||||||
<source>
|
|
||||||
<name>bursts</name>
|
|
||||||
<type>message</type>
|
|
||||||
</source>
|
|
||||||
|
|
||||||
</block>
|
|
|
@ -18,11 +18,11 @@
|
||||||
# Boston, MA 02110-1301, USA.
|
# Boston, MA 02110-1301, USA.
|
||||||
|
|
||||||
install(FILES
|
install(FILES
|
||||||
gsm_universal_ctrl_chans_demapper.xml
|
gsm_universal_ctrl_chans_demapper.block.yml
|
||||||
gsm_bcch_ccch_demapper.xml
|
gsm_bcch_ccch_demapper.block.yml
|
||||||
gsm_bcch_ccch_sdcch4_demapper.xml
|
gsm_bcch_ccch_sdcch4_demapper.block.yml
|
||||||
gsm_sdcch8_demapper.xml
|
gsm_sdcch8_demapper.block.yml
|
||||||
gsm_tch_f_chans_demapper.xml
|
gsm_tch_f_chans_demapper.block.yml
|
||||||
gsm_tch_h_chans_demapper.xml
|
gsm_tch_h_chans_demapper.block.yml
|
||||||
DESTINATION share/gnuradio/grc/blocks
|
DESTINATION share/gnuradio/grc/blocks
|
||||||
)
|
)
|
||||||
|
|
|
@ -0,0 +1,35 @@
|
||||||
|
# auto-generated by grc.converter
|
||||||
|
|
||||||
|
id: gsm_bcch_ccch_demapper
|
||||||
|
label: BCCH + CCCH Demapper
|
||||||
|
|
||||||
|
parameters:
|
||||||
|
- id: timeslot_nr
|
||||||
|
label: timeslot_nr
|
||||||
|
dtype: raw
|
||||||
|
default: '0'
|
||||||
|
|
||||||
|
inputs:
|
||||||
|
- domain: message
|
||||||
|
id: bursts
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
outputs:
|
||||||
|
- domain: message
|
||||||
|
id: bursts
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
templates:
|
||||||
|
imports: import grgsm
|
||||||
|
make: |-
|
||||||
|
grgsm.gsm_bcch_ccch_demapper(
|
||||||
|
timeslot_nr=${timeslot_nr},
|
||||||
|
)
|
||||||
|
callbacks:
|
||||||
|
- set_timeslot_nr(${timeslot_nr})
|
||||||
|
|
||||||
|
documentation: |-
|
||||||
|
Piotr Krysik
|
||||||
|
Demapper for BCCH + CCCH control channels. This corresponds to channel combination iv specified in GSM 05.02, section 6.4
|
||||||
|
|
||||||
|
file_format: 1
|
|
@ -1,30 +0,0 @@
|
||||||
<block>
|
|
||||||
<name>BCCH + CCCH Demapper</name>
|
|
||||||
<key>gsm_bcch_ccch_demapper</key>
|
|
||||||
<category></category>
|
|
||||||
<import>import grgsm</import>
|
|
||||||
<make>grgsm.gsm_bcch_ccch_demapper(
|
|
||||||
timeslot_nr=$timeslot_nr,
|
|
||||||
)</make>
|
|
||||||
<callback>set_timeslot_nr($timeslot_nr)</callback>
|
|
||||||
<param>
|
|
||||||
<name>timeslot_nr</name>
|
|
||||||
<key>timeslot_nr</key>
|
|
||||||
<value>0</value>
|
|
||||||
<type>raw</type>
|
|
||||||
</param>
|
|
||||||
<sink>
|
|
||||||
<name>bursts</name>
|
|
||||||
<type>message</type>
|
|
||||||
<optional>1</optional>
|
|
||||||
</sink>
|
|
||||||
<source>
|
|
||||||
<name>bursts</name>
|
|
||||||
<type>message</type>
|
|
||||||
<optional>1</optional>
|
|
||||||
</source>
|
|
||||||
<doc>Piotr Krysik
|
|
||||||
Demapper for BCCH + CCCH control channels. This corresponds to channel combination iv specified in GSM 05.02, section 6.4
|
|
||||||
</doc>
|
|
||||||
<grc_source>gr-gsm/hier_blocks/demapping/gsm_bcch_ccch_demapper.grc</grc_source>
|
|
||||||
</block>
|
|
|
@ -0,0 +1,35 @@
|
||||||
|
# auto-generated by grc.converter
|
||||||
|
|
||||||
|
id: gsm_bcch_ccch_sdcch4_demapper
|
||||||
|
label: BCCH + CCCH + SDCCH/4 Demapper
|
||||||
|
|
||||||
|
parameters:
|
||||||
|
- id: timeslot_nr
|
||||||
|
label: timeslot_nr
|
||||||
|
dtype: raw
|
||||||
|
default: '0'
|
||||||
|
|
||||||
|
inputs:
|
||||||
|
- domain: message
|
||||||
|
id: bursts
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
outputs:
|
||||||
|
- domain: message
|
||||||
|
id: bursts
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
templates:
|
||||||
|
imports: import grgsm
|
||||||
|
make: |-
|
||||||
|
grgsm.gsm_bcch_ccch_sdcch4_demapper(
|
||||||
|
timeslot_nr=${timeslot_nr},
|
||||||
|
)
|
||||||
|
callbacks:
|
||||||
|
- set_timeslot_nr(${timeslot_nr})
|
||||||
|
|
||||||
|
documentation: |-
|
||||||
|
Piotr Krysik
|
||||||
|
Demapper for BCCH + CCCH + SDCCH/4 + SACCH/C4 control channels. This corresponds to channel combination v specified in GSM 05.02, section 6.4
|
||||||
|
|
||||||
|
file_format: 1
|
|
@ -1,30 +0,0 @@
|
||||||
<block>
|
|
||||||
<name>BCCH + CCCH + SDCCH/4 Demapper</name>
|
|
||||||
<key>gsm_bcch_ccch_sdcch4_demapper</key>
|
|
||||||
<category></category>
|
|
||||||
<import>import grgsm</import>
|
|
||||||
<make>grgsm.gsm_bcch_ccch_sdcch4_demapper(
|
|
||||||
timeslot_nr=$timeslot_nr,
|
|
||||||
)</make>
|
|
||||||
<callback>set_timeslot_nr($timeslot_nr)</callback>
|
|
||||||
<param>
|
|
||||||
<name>timeslot_nr</name>
|
|
||||||
<key>timeslot_nr</key>
|
|
||||||
<value>0</value>
|
|
||||||
<type>raw</type>
|
|
||||||
</param>
|
|
||||||
<sink>
|
|
||||||
<name>bursts</name>
|
|
||||||
<type>message</type>
|
|
||||||
<optional>1</optional>
|
|
||||||
</sink>
|
|
||||||
<source>
|
|
||||||
<name>bursts</name>
|
|
||||||
<type>message</type>
|
|
||||||
<optional>1</optional>
|
|
||||||
</source>
|
|
||||||
<doc>Piotr Krysik
|
|
||||||
Demapper for BCCH + CCCH + SDCCH/4 + SACCH/C4 control channels. This corresponds to channel combination v specified in GSM 05.02, section 6.4
|
|
||||||
</doc>
|
|
||||||
<grc_source>gr-gsm/hier_blocks/demapping/gsm_bcch_ccch_sdcch4_demapper.grc</grc_source>
|
|
||||||
</block>
|
|
|
@ -0,0 +1,35 @@
|
||||||
|
# auto-generated by grc.converter
|
||||||
|
|
||||||
|
id: gsm_sdcch8_demapper
|
||||||
|
label: SDCCH/8 Demapper
|
||||||
|
|
||||||
|
parameters:
|
||||||
|
- id: timeslot_nr
|
||||||
|
label: timeslot_nr
|
||||||
|
dtype: raw
|
||||||
|
default: '1'
|
||||||
|
|
||||||
|
inputs:
|
||||||
|
- domain: message
|
||||||
|
id: bursts
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
outputs:
|
||||||
|
- domain: message
|
||||||
|
id: bursts
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
templates:
|
||||||
|
imports: import grgsm
|
||||||
|
make: |-
|
||||||
|
grgsm.gsm_sdcch8_demapper(
|
||||||
|
timeslot_nr=${timeslot_nr},
|
||||||
|
)
|
||||||
|
callbacks:
|
||||||
|
- set_timeslot_nr(${timeslot_nr})
|
||||||
|
|
||||||
|
documentation: |-
|
||||||
|
Piotr Krysik
|
||||||
|
Demapper for SDCCH/8 + SACCH/C8 control channels. This corresponds to channel combination vii specified in GSM 05.02, section 6.4
|
||||||
|
|
||||||
|
file_format: 1
|
|
@ -1,30 +0,0 @@
|
||||||
<block>
|
|
||||||
<name>SDCCH/8 Demapper</name>
|
|
||||||
<key>gsm_sdcch8_demapper</key>
|
|
||||||
<category></category>
|
|
||||||
<import>import grgsm</import>
|
|
||||||
<make>grgsm.gsm_sdcch8_demapper(
|
|
||||||
timeslot_nr=$timeslot_nr,
|
|
||||||
)</make>
|
|
||||||
<callback>set_timeslot_nr($timeslot_nr)</callback>
|
|
||||||
<param>
|
|
||||||
<name>timeslot_nr</name>
|
|
||||||
<key>timeslot_nr</key>
|
|
||||||
<value>1</value>
|
|
||||||
<type>raw</type>
|
|
||||||
</param>
|
|
||||||
<sink>
|
|
||||||
<name>bursts</name>
|
|
||||||
<type>message</type>
|
|
||||||
<optional>1</optional>
|
|
||||||
</sink>
|
|
||||||
<source>
|
|
||||||
<name>bursts</name>
|
|
||||||
<type>message</type>
|
|
||||||
<optional>1</optional>
|
|
||||||
</source>
|
|
||||||
<doc>Piotr Krysik
|
|
||||||
Demapper for SDCCH/8 + SACCH/C8 control channels. This corresponds to channel combination vii specified in GSM 05.02, section 6.4
|
|
||||||
</doc>
|
|
||||||
<grc_source>gr-gsm/hier_blocks/demapping/gsm_sdcch8_demapper.grc</grc_source>
|
|
||||||
</block>
|
|
|
@ -0,0 +1,30 @@
|
||||||
|
# auto-generated by grc.converter
|
||||||
|
|
||||||
|
id: gsm_tch_f_chans_demapper
|
||||||
|
label: TCH/F Demapper
|
||||||
|
|
||||||
|
parameters:
|
||||||
|
- id: timeslot_nr
|
||||||
|
label: Timeslot
|
||||||
|
dtype: int
|
||||||
|
default: '2'
|
||||||
|
hide: part
|
||||||
|
|
||||||
|
inputs:
|
||||||
|
- domain: message
|
||||||
|
id: bursts
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
outputs:
|
||||||
|
- domain: message
|
||||||
|
id: tch_bursts
|
||||||
|
optional: true
|
||||||
|
- domain: message
|
||||||
|
id: acch_bursts
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
templates:
|
||||||
|
imports: import grgsm
|
||||||
|
make: grgsm.tch_f_chans_demapper(${timeslot_nr})
|
||||||
|
|
||||||
|
file_format: 1
|
|
@ -1,31 +0,0 @@
|
||||||
<?xml version="1.0"?>
|
|
||||||
<block>
|
|
||||||
<name>TCH/F Demapper</name>
|
|
||||||
<key>gsm_tch_f_chans_demapper</key>
|
|
||||||
<import>import grgsm</import>
|
|
||||||
<make>grgsm.tch_f_chans_demapper($timeslot_nr)</make>
|
|
||||||
|
|
||||||
<param>
|
|
||||||
<name>Timeslot</name>
|
|
||||||
<key>timeslot_nr</key>
|
|
||||||
<value>2</value>
|
|
||||||
<type>int</type>
|
|
||||||
<hide>part</hide>
|
|
||||||
</param>
|
|
||||||
|
|
||||||
<sink>
|
|
||||||
<name>bursts</name>
|
|
||||||
<type>message</type>
|
|
||||||
<optional>1</optional>
|
|
||||||
</sink>
|
|
||||||
<source>
|
|
||||||
<name>tch_bursts</name>
|
|
||||||
<type>message</type>
|
|
||||||
<optional>1</optional>
|
|
||||||
</source>
|
|
||||||
<source>
|
|
||||||
<name>acch_bursts</name>
|
|
||||||
<type>message</type>
|
|
||||||
<optional>1</optional>
|
|
||||||
</source>
|
|
||||||
</block>
|
|
|
@ -0,0 +1,37 @@
|
||||||
|
# auto-generated by grc.converter
|
||||||
|
|
||||||
|
id: gsm_tch_h_chans_demapper
|
||||||
|
label: TCH/H Demapper
|
||||||
|
|
||||||
|
parameters:
|
||||||
|
- id: timeslot_nr
|
||||||
|
label: Timeslot
|
||||||
|
dtype: int
|
||||||
|
default: '2'
|
||||||
|
hide: none
|
||||||
|
- id: tch_h_channel
|
||||||
|
label: Sub-channel number
|
||||||
|
dtype: int
|
||||||
|
default: '0'
|
||||||
|
options: ['0', '1']
|
||||||
|
hide: none
|
||||||
|
|
||||||
|
inputs:
|
||||||
|
- domain: message
|
||||||
|
id: bursts
|
||||||
|
|
||||||
|
outputs:
|
||||||
|
- domain: message
|
||||||
|
id: tch_bursts
|
||||||
|
optional: true
|
||||||
|
- domain: message
|
||||||
|
id: acch_bursts
|
||||||
|
optional: true
|
||||||
|
asserts:
|
||||||
|
- ${ tch_h_channel > -1 and tch_h_channel < 2 }
|
||||||
|
|
||||||
|
templates:
|
||||||
|
imports: import grgsm
|
||||||
|
make: grgsm.tch_h_chans_demapper(${timeslot_nr}, ${tch_h_channel})
|
||||||
|
|
||||||
|
file_format: 1
|
|
@ -1,47 +0,0 @@
|
||||||
<?xml version="1.0"?>
|
|
||||||
<block>
|
|
||||||
<name>TCH/H Demapper</name>
|
|
||||||
<key>gsm_tch_h_chans_demapper</key>
|
|
||||||
<import>import grgsm</import>
|
|
||||||
<make>grgsm.tch_h_chans_demapper($timeslot_nr, $tch_h_channel)</make>
|
|
||||||
|
|
||||||
<param>
|
|
||||||
<name>Timeslot</name>
|
|
||||||
<key>timeslot_nr</key>
|
|
||||||
<value>2</value>
|
|
||||||
<type>int</type>
|
|
||||||
<hide>none</hide>
|
|
||||||
</param>
|
|
||||||
|
|
||||||
<param>
|
|
||||||
<name>Sub-channel number</name>
|
|
||||||
<key>tch_h_channel</key>
|
|
||||||
<value>0</value>
|
|
||||||
<type>int</type>
|
|
||||||
<hide>none</hide>
|
|
||||||
<option>
|
|
||||||
<name>0</name>
|
|
||||||
<key>0</key>
|
|
||||||
</option>
|
|
||||||
<option>
|
|
||||||
<name>1</name>
|
|
||||||
<key>1</key>
|
|
||||||
</option>
|
|
||||||
</param>
|
|
||||||
<check>$tch_h_channel() > -1 and $tch_h_channel() < 2</check>
|
|
||||||
|
|
||||||
<sink>
|
|
||||||
<name>bursts</name>
|
|
||||||
<type>message</type>
|
|
||||||
</sink>
|
|
||||||
<source>
|
|
||||||
<name>tch_bursts</name>
|
|
||||||
<type>message</type>
|
|
||||||
<optional>1</optional>
|
|
||||||
</source>
|
|
||||||
<source>
|
|
||||||
<name>acch_bursts</name>
|
|
||||||
<type>message</type>
|
|
||||||
<optional>1</optional>
|
|
||||||
</source>
|
|
||||||
</block>
|
|
|
@ -0,0 +1,61 @@
|
||||||
|
# auto-generated by grc.converter
|
||||||
|
|
||||||
|
id: gsm_universal_ctrl_chans_demapper
|
||||||
|
label: Universal Control Channels Demapper
|
||||||
|
|
||||||
|
parameters:
|
||||||
|
- id: timeslot_nr
|
||||||
|
label: timeslot_nr
|
||||||
|
dtype: int
|
||||||
|
default: '0'
|
||||||
|
hide: part
|
||||||
|
- id: downlink_starts_fn_mod51
|
||||||
|
label: downlink_starts_fn_mod51
|
||||||
|
dtype: int_vector
|
||||||
|
default: '[0,0,2,2,2,2,6,6,6,6,0,0,12,12,12,12,16,16,16,16,0,0,22,22,22,22,26,26,26,26,0,0,32,32,32,32,36,36,36,36,0,0,42,42,42,42,46,46,46,46,0,]'
|
||||||
|
hide: part
|
||||||
|
- id: downlink_channel_types
|
||||||
|
label: downlink_channel_types
|
||||||
|
dtype: int_vector
|
||||||
|
default: '[0,0,1,1,1,1,2,2,2,2,0,0,2,2,2,2,2,2,2,2,0,0,2,2,2,2,2,2,2,2,0,0,2,2,2,2,2,2,2,2,0,0,2,2,2,2,2,2,2,2,0,]'
|
||||||
|
hide: part
|
||||||
|
- id: downlink_subslots
|
||||||
|
label: downlink_subslots
|
||||||
|
dtype: int_vector
|
||||||
|
default: '[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,]'
|
||||||
|
hide: part
|
||||||
|
- id: uplink_starts_fn_mod51
|
||||||
|
label: uplink_starts_fn_mod51
|
||||||
|
dtype: int_vector
|
||||||
|
default: '[0,0,0,0,0,0,6,6,6,6,10,10,10,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,37,41,41,41,41,0,0,47,47,47,47]'
|
||||||
|
hide: part
|
||||||
|
- id: uplink_channel_types
|
||||||
|
label: uplink_channel_types
|
||||||
|
dtype: int_vector
|
||||||
|
default: '[2,2,2,2,0,0,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,0,0,2,2,2,2,]'
|
||||||
|
hide: part
|
||||||
|
- id: uplink_subslots
|
||||||
|
label: uplink_subslots
|
||||||
|
dtype: int_vector
|
||||||
|
default: '[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,]'
|
||||||
|
hide: part
|
||||||
|
|
||||||
|
inputs:
|
||||||
|
- domain: message
|
||||||
|
id: bursts
|
||||||
|
|
||||||
|
outputs:
|
||||||
|
- domain: message
|
||||||
|
id: bursts
|
||||||
|
|
||||||
|
templates:
|
||||||
|
imports: import grgsm
|
||||||
|
make: grgsm.universal_ctrl_chans_demapper(${timeslot_nr}, ${downlink_starts_fn_mod51},
|
||||||
|
${downlink_channel_types}, ${downlink_subslots}, ${uplink_starts_fn_mod51},
|
||||||
|
${uplink_channel_types}, ${uplink_subslots})
|
||||||
|
|
||||||
|
documentation: |-
|
||||||
|
Universal demapper for control channels.
|
||||||
|
Author: Piotr Krysik
|
||||||
|
|
||||||
|
file_format: 1
|
|
@ -1,76 +0,0 @@
|
||||||
<?xml version="1.0"?>
|
|
||||||
<block>
|
|
||||||
<name>Universal Control Channels Demapper</name>
|
|
||||||
<key>gsm_universal_ctrl_chans_demapper</key>
|
|
||||||
<import>import grgsm</import>
|
|
||||||
<make>grgsm.universal_ctrl_chans_demapper($timeslot_nr, $downlink_starts_fn_mod51, $downlink_channel_types, $downlink_subslots, $uplink_starts_fn_mod51, $uplink_channel_types, $uplink_subslots)</make>
|
|
||||||
|
|
||||||
<param>
|
|
||||||
<name>timeslot_nr</name>
|
|
||||||
<key>timeslot_nr</key>
|
|
||||||
<value>0</value>
|
|
||||||
<type>int</type>
|
|
||||||
<hide>part</hide>
|
|
||||||
</param>
|
|
||||||
|
|
||||||
<param>
|
|
||||||
<name>downlink_starts_fn_mod51</name>
|
|
||||||
<key>downlink_starts_fn_mod51</key>
|
|
||||||
<value>[0,0,2,2,2,2,6,6,6,6,0,0,12,12,12,12,16,16,16,16,0,0,22,22,22,22,26,26,26,26,0,0,32,32,32,32,36,36,36,36,0,0,42,42,42,42,46,46,46,46,0,]</value>
|
|
||||||
<type>int_vector</type>
|
|
||||||
<hide>part</hide>
|
|
||||||
</param>
|
|
||||||
|
|
||||||
<param>
|
|
||||||
<name>downlink_channel_types</name>
|
|
||||||
<key>downlink_channel_types</key>
|
|
||||||
<value>[0,0,1,1,1,1,2,2,2,2,0,0,2,2,2,2,2,2,2,2,0,0,2,2,2,2,2,2,2,2,0,0,2,2,2,2,2,2,2,2,0,0,2,2,2,2,2,2,2,2,0,]</value>
|
|
||||||
<type>int_vector</type>
|
|
||||||
<hide>part</hide>
|
|
||||||
</param>
|
|
||||||
|
|
||||||
<param>
|
|
||||||
<name>downlink_subslots</name>
|
|
||||||
<key>downlink_subslots</key>
|
|
||||||
<value>[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,]</value>
|
|
||||||
<type>int_vector</type>
|
|
||||||
<hide>part</hide>
|
|
||||||
</param>
|
|
||||||
|
|
||||||
<param>
|
|
||||||
<name>uplink_starts_fn_mod51</name>
|
|
||||||
<key>uplink_starts_fn_mod51</key>
|
|
||||||
<value>[0,0,0,0,0,0,6,6,6,6,10,10,10,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,37,41,41,41,41,0,0,47,47,47,47]</value>
|
|
||||||
<type>int_vector</type>
|
|
||||||
<hide>part</hide>
|
|
||||||
</param>
|
|
||||||
|
|
||||||
<param>
|
|
||||||
<name>uplink_channel_types</name>
|
|
||||||
<key>uplink_channel_types</key>
|
|
||||||
<value>[2,2,2,2,0,0,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,0,0,2,2,2,2,]</value>
|
|
||||||
<type>int_vector</type>
|
|
||||||
<hide>part</hide>
|
|
||||||
</param>
|
|
||||||
|
|
||||||
<param>
|
|
||||||
<name>uplink_subslots</name>
|
|
||||||
<key>uplink_subslots</key>
|
|
||||||
<value>[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,]</value>
|
|
||||||
<type>int_vector</type>
|
|
||||||
<hide>part</hide>
|
|
||||||
</param>
|
|
||||||
|
|
||||||
<sink>
|
|
||||||
<name>bursts</name>
|
|
||||||
<type>message</type>
|
|
||||||
</sink>
|
|
||||||
<source>
|
|
||||||
<name>bursts</name>
|
|
||||||
<type>message</type>
|
|
||||||
</source>
|
|
||||||
<doc>
|
|
||||||
Universal demapper for control channels.
|
|
||||||
Author: Piotr Krysik
|
|
||||||
</doc>
|
|
||||||
</block>
|
|
|
@ -18,12 +18,13 @@
|
||||||
# Boston, MA 02110-1301, USA.
|
# Boston, MA 02110-1301, USA.
|
||||||
|
|
||||||
install(FILES
|
install(FILES
|
||||||
gsm_burst_timeslot_splitter.xml
|
gsm_burst_timeslot_splitter.block.yml
|
||||||
gsm_burst_fnr_filter.xml
|
gsm_burst_fnr_filter.block.yml
|
||||||
gsm_burst_timeslot_filter.xml
|
gsm_burst_timeslot_filter.block.yml
|
||||||
gsm_burst_type_filter.xml
|
gsm_burst_type_filter.block.yml
|
||||||
gsm_dummy_burst_filter.xml
|
gsm_dummy_burst_filter.block.yml
|
||||||
gsm_burst_sdcch_subslot_splitter.xml
|
gsm_burst_sdcch_subslot_splitter.block.yml
|
||||||
gsm_burst_sdcch_subslot_filter.xml
|
gsm_burst_sdcch_subslot_filter.block.yml
|
||||||
gsm_uplink_downlink_splitter.xml DESTINATION share/gnuradio/grc/blocks
|
gsm_uplink_downlink_splitter.block.yml
|
||||||
|
DESTINATION share/gnuradio/grc/blocks
|
||||||
)
|
)
|
||||||
|
|
|
@ -0,0 +1,33 @@
|
||||||
|
# auto-generated by grc.converter
|
||||||
|
|
||||||
|
id: gsm_burst_fnr_filter
|
||||||
|
label: Burst Framenumber Filter
|
||||||
|
|
||||||
|
parameters:
|
||||||
|
- id: mode
|
||||||
|
label: Mode
|
||||||
|
dtype: enum
|
||||||
|
options: [grgsm.FILTER_LESS_OR_EQUAL, grgsm.FILTER_GREATER_OR_EQUAL]
|
||||||
|
option_labels: [Less or equal, Greater or equal]
|
||||||
|
- id: fnr
|
||||||
|
label: Framenumber
|
||||||
|
dtype: int
|
||||||
|
default: '1500123'
|
||||||
|
|
||||||
|
inputs:
|
||||||
|
- domain: message
|
||||||
|
id: in
|
||||||
|
|
||||||
|
outputs:
|
||||||
|
- domain: message
|
||||||
|
id: out
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
templates:
|
||||||
|
imports: import grgsm
|
||||||
|
make: grgsm.burst_fnr_filter(${mode}, ${fnr})
|
||||||
|
|
||||||
|
documentation: |-
|
||||||
|
Burst framenumber filter forwards only blocks with a framenumber satisfying the configured mode, i.e. if mode is "Less or equal", then only bursts with a smaller or equal framenumber are forwarded.
|
||||||
|
|
||||||
|
file_format: 1
|
|
@ -1,42 +0,0 @@
|
||||||
<?xml version="1.0"?>
|
|
||||||
<block>
|
|
||||||
<name>Burst Framenumber Filter</name>
|
|
||||||
<key>gsm_burst_fnr_filter</key>
|
|
||||||
<import>import grgsm</import>
|
|
||||||
<make>grgsm.burst_fnr_filter($mode, $fnr)</make>
|
|
||||||
|
|
||||||
<param>
|
|
||||||
<name>Mode</name>
|
|
||||||
<key>mode</key>
|
|
||||||
<type>enum</type>
|
|
||||||
<option>
|
|
||||||
<name>Less or equal</name>
|
|
||||||
<key>grgsm.FILTER_LESS_OR_EQUAL</key>
|
|
||||||
</option>
|
|
||||||
<option>
|
|
||||||
<name>Greater or equal</name>
|
|
||||||
<key>grgsm.FILTER_GREATER_OR_EQUAL</key>
|
|
||||||
</option>
|
|
||||||
</param>
|
|
||||||
<param>
|
|
||||||
<name>Framenumber</name>
|
|
||||||
<key>fnr</key>
|
|
||||||
<value>1500123</value>
|
|
||||||
<type>int</type>
|
|
||||||
</param>
|
|
||||||
|
|
||||||
<sink>
|
|
||||||
<name>in</name>
|
|
||||||
<type>message</type>
|
|
||||||
</sink>
|
|
||||||
|
|
||||||
<source>
|
|
||||||
<name>out</name>
|
|
||||||
<type>message</type>
|
|
||||||
<optional>1</optional>
|
|
||||||
</source>
|
|
||||||
|
|
||||||
<doc>
|
|
||||||
Burst framenumber filter forwards only blocks with a framenumber satisfying the configured mode, i.e. if mode is "Less or equal", then only bursts with a smaller or equal framenumber are forwarded.
|
|
||||||
</doc>
|
|
||||||
</block>
|
|
|
@ -0,0 +1,34 @@
|
||||||
|
# auto-generated by grc.converter
|
||||||
|
|
||||||
|
id: gsm_burst_sdcch_subslot_filter
|
||||||
|
label: Burst SDCCH Subslot Filter
|
||||||
|
|
||||||
|
parameters:
|
||||||
|
- id: mode
|
||||||
|
label: Mode
|
||||||
|
dtype: enum
|
||||||
|
options: [grgsm.SS_FILTER_SDCCH8, grgsm.SS_FILTER_SDCCH4]
|
||||||
|
option_labels: [SDCCH/8, SDCCH/4]
|
||||||
|
- id: subslot
|
||||||
|
label: Subslot
|
||||||
|
dtype: int
|
||||||
|
default: '0'
|
||||||
|
hide: none
|
||||||
|
|
||||||
|
inputs:
|
||||||
|
- domain: message
|
||||||
|
id: in
|
||||||
|
|
||||||
|
outputs:
|
||||||
|
- domain: message
|
||||||
|
id: out
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
templates:
|
||||||
|
imports: import grgsm
|
||||||
|
make: grgsm.burst_sdcch_subslot_filter(${mode}, ${subslot})
|
||||||
|
|
||||||
|
documentation: |-
|
||||||
|
This block forwards only bursts in the subslot given by the parameter
|
||||||
|
|
||||||
|
file_format: 1
|
|
@ -1,44 +0,0 @@
|
||||||
<?xml version="1.0"?>
|
|
||||||
<block>
|
|
||||||
<name>Burst SDCCH Subslot Filter</name>
|
|
||||||
<key>gsm_burst_sdcch_subslot_filter</key>
|
|
||||||
<import>import grgsm</import>
|
|
||||||
<make>grgsm.burst_sdcch_subslot_filter($mode, $subslot)</make>
|
|
||||||
|
|
||||||
<param>
|
|
||||||
<name>Mode</name>
|
|
||||||
<key>mode</key>
|
|
||||||
<type>enum</type>
|
|
||||||
<option>
|
|
||||||
<name>SDCCH/8</name>
|
|
||||||
<key>grgsm.SS_FILTER_SDCCH8</key>
|
|
||||||
</option>
|
|
||||||
<option>
|
|
||||||
<name>SDCCH/4</name>
|
|
||||||
<key>grgsm.SS_FILTER_SDCCH4</key>
|
|
||||||
</option>
|
|
||||||
</param>
|
|
||||||
|
|
||||||
<param>
|
|
||||||
<name>Subslot</name>
|
|
||||||
<key>subslot</key>
|
|
||||||
<value>0</value>
|
|
||||||
<type>int</type>
|
|
||||||
<hide>none</hide>
|
|
||||||
</param>
|
|
||||||
|
|
||||||
<sink>
|
|
||||||
<name>in</name>
|
|
||||||
<type>message</type>
|
|
||||||
</sink>
|
|
||||||
|
|
||||||
<source>
|
|
||||||
<name>out</name>
|
|
||||||
<type>message</type>
|
|
||||||
<optional>1</optional>
|
|
||||||
</source>
|
|
||||||
|
|
||||||
<doc>
|
|
||||||
This block forwards only bursts in the subslot given by the parameter
|
|
||||||
</doc>
|
|
||||||
</block>
|
|
|
@ -0,0 +1,39 @@
|
||||||
|
# auto-generated by grc.converter
|
||||||
|
|
||||||
|
id: gsm_burst_sdcch_subslot_splitter
|
||||||
|
label: Burst SDCCH Subslot Splitter
|
||||||
|
|
||||||
|
parameters:
|
||||||
|
- id: ports
|
||||||
|
label: Mode
|
||||||
|
dtype: enum
|
||||||
|
options: ['8', '4']
|
||||||
|
option_labels: [SDCCH/8, SDCCH/4]
|
||||||
|
hide: part
|
||||||
|
|
||||||
|
inputs:
|
||||||
|
- domain: message
|
||||||
|
id: in
|
||||||
|
|
||||||
|
outputs:
|
||||||
|
- domain: message
|
||||||
|
id: out
|
||||||
|
multiplicity: ${ ports }
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
templates:
|
||||||
|
imports: import grgsm
|
||||||
|
make: |-
|
||||||
|
grgsm.burst_sdcch_subslot_splitter(
|
||||||
|
% if int(ports)==4:
|
||||||
|
grgsm.SPLITTER_SDCCH4
|
||||||
|
% else:
|
||||||
|
grgsm.SPLITTER_SDCCH8
|
||||||
|
% endif
|
||||||
|
)
|
||||||
|
|
||||||
|
documentation: |-
|
||||||
|
Burst SDCCH subslot splitter distributes bursts to eight different output ports depending on the subslots to which the bursts belong.
|
||||||
|
This means subslot 0 bursts are sent to port out0, subslot 1 bursts on port out1, and so on.
|
||||||
|
|
||||||
|
file_format: 1
|
|
@ -1,44 +0,0 @@
|
||||||
<?xml version="1.0"?>
|
|
||||||
<block>
|
|
||||||
<name>Burst SDCCH Subslot Splitter</name>
|
|
||||||
<key>gsm_burst_sdcch_subslot_splitter</key>
|
|
||||||
<import>import grgsm</import>
|
|
||||||
<make>grgsm.burst_sdcch_subslot_splitter(
|
|
||||||
#if int($ports())==4 #
|
|
||||||
grgsm.SPLITTER_SDCCH4
|
|
||||||
#else
|
|
||||||
grgsm.SPLITTER_SDCCH8
|
|
||||||
#end if
|
|
||||||
)</make>
|
|
||||||
|
|
||||||
<param>
|
|
||||||
<name>Mode</name>
|
|
||||||
<key>ports</key>
|
|
||||||
<type>enum</type>
|
|
||||||
<option>
|
|
||||||
<name>SDCCH/8</name>
|
|
||||||
<key>8</key>
|
|
||||||
</option>
|
|
||||||
<option>
|
|
||||||
<name>SDCCH/4</name>
|
|
||||||
<key>4</key>
|
|
||||||
</option>
|
|
||||||
</param>
|
|
||||||
|
|
||||||
<sink>
|
|
||||||
<name>in</name>
|
|
||||||
<type>message</type>
|
|
||||||
</sink>
|
|
||||||
|
|
||||||
<source>
|
|
||||||
<name>out</name>
|
|
||||||
<type>message</type>
|
|
||||||
<nports>$ports</nports>
|
|
||||||
<optional>1</optional>
|
|
||||||
</source>
|
|
||||||
|
|
||||||
<doc>
|
|
||||||
Burst SDCCH subslot splitter distributes bursts to eight different output ports depending on the subslots to which the bursts belong.
|
|
||||||
This means subslot 0 bursts are sent to port out0, subslot 1 bursts on port out1, and so on.
|
|
||||||
</doc>
|
|
||||||
</block>
|
|
|
@ -0,0 +1,29 @@
|
||||||
|
# auto-generated by grc.converter
|
||||||
|
|
||||||
|
id: gsm_burst_timeslot_filter
|
||||||
|
label: Burst Timeslot Filter
|
||||||
|
|
||||||
|
parameters:
|
||||||
|
- id: timeslot
|
||||||
|
label: Timeslot
|
||||||
|
dtype: int
|
||||||
|
default: '0'
|
||||||
|
hide: none
|
||||||
|
|
||||||
|
inputs:
|
||||||
|
- domain: message
|
||||||
|
id: in
|
||||||
|
|
||||||
|
outputs:
|
||||||
|
- domain: message
|
||||||
|
id: out
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
templates:
|
||||||
|
imports: import grgsm
|
||||||
|
make: grgsm.burst_timeslot_filter(${timeslot})
|
||||||
|
|
||||||
|
documentation: |-
|
||||||
|
This block forwards only bursts in the timeslot given by the parameter
|
||||||
|
|
||||||
|
file_format: 1
|
|
@ -1,30 +0,0 @@
|
||||||
<?xml version="1.0"?>
|
|
||||||
<block>
|
|
||||||
<name>Burst Timeslot Filter</name>
|
|
||||||
<key>gsm_burst_timeslot_filter</key>
|
|
||||||
<import>import grgsm</import>
|
|
||||||
<make>grgsm.burst_timeslot_filter($timeslot)</make>
|
|
||||||
|
|
||||||
<param>
|
|
||||||
<name>Timeslot</name>
|
|
||||||
<key>timeslot</key>
|
|
||||||
<value>0</value>
|
|
||||||
<type>int</type>
|
|
||||||
<hide>none</hide>
|
|
||||||
</param>
|
|
||||||
|
|
||||||
<sink>
|
|
||||||
<name>in</name>
|
|
||||||
<type>message</type>
|
|
||||||
</sink>
|
|
||||||
|
|
||||||
<source>
|
|
||||||
<name>out</name>
|
|
||||||
<type>message</type>
|
|
||||||
<optional>1</optional>
|
|
||||||
</source>
|
|
||||||
|
|
||||||
<doc>
|
|
||||||
This block forwards only bursts in the timeslot given by the parameter
|
|
||||||
</doc>
|
|
||||||
</block>
|
|
|
@ -0,0 +1,24 @@
|
||||||
|
# auto-generated by grc.converter
|
||||||
|
|
||||||
|
id: gsm_burst_timeslot_splitter
|
||||||
|
label: Burst Timeslot Splitter
|
||||||
|
|
||||||
|
inputs:
|
||||||
|
- domain: message
|
||||||
|
id: in
|
||||||
|
|
||||||
|
outputs:
|
||||||
|
- domain: message
|
||||||
|
id: out
|
||||||
|
multiplicity: '8'
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
templates:
|
||||||
|
imports: import grgsm
|
||||||
|
make: grgsm.burst_timeslot_splitter()
|
||||||
|
|
||||||
|
documentation: "Burst timeslot splitter distributes bursts to eight different output\
|
||||||
|
\ ports depending on the timeslots of the bursts. \nThis means timeslot 0 bursts\
|
||||||
|
\ are sent to port out0, timeslot 1 bursts on port out1, and so on."
|
||||||
|
|
||||||
|
file_format: 1
|
|
@ -1,24 +0,0 @@
|
||||||
<?xml version="1.0"?>
|
|
||||||
<block>
|
|
||||||
<name>Burst Timeslot Splitter</name>
|
|
||||||
<key>gsm_burst_timeslot_splitter</key>
|
|
||||||
<import>import grgsm</import>
|
|
||||||
<make>grgsm.burst_timeslot_splitter()</make>
|
|
||||||
|
|
||||||
<sink>
|
|
||||||
<name>in</name>
|
|
||||||
<type>message</type>
|
|
||||||
</sink>
|
|
||||||
|
|
||||||
<source>
|
|
||||||
<name>out</name>
|
|
||||||
<type>message</type>
|
|
||||||
<nports>8</nports>
|
|
||||||
<optional>1</optional>
|
|
||||||
</source>
|
|
||||||
|
|
||||||
<doc>
|
|
||||||
Burst timeslot splitter distributes bursts to eight different output ports depending on the timeslots of the bursts.
|
|
||||||
This means timeslot 0 bursts are sent to port out0, timeslot 1 bursts on port out1, and so on.
|
|
||||||
</doc>
|
|
||||||
</block>
|
|
|
@ -0,0 +1,31 @@
|
||||||
|
# auto-generated by grc.converter
|
||||||
|
|
||||||
|
id: gsm_burst_type_filter
|
||||||
|
label: Burst Type Filter
|
||||||
|
|
||||||
|
parameters:
|
||||||
|
- id: selected_burst_types
|
||||||
|
label: Selected burst types
|
||||||
|
dtype: int_vector
|
||||||
|
default: '[0,1,2,3,4,5,6,7]'
|
||||||
|
|
||||||
|
inputs:
|
||||||
|
- domain: message
|
||||||
|
id: bursts_in
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
outputs:
|
||||||
|
- domain: message
|
||||||
|
id: bursts_out
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
templates:
|
||||||
|
imports: import grgsm
|
||||||
|
make: grgsm.burst_type_filter(${selected_burst_types})
|
||||||
|
|
||||||
|
documentation: |-
|
||||||
|
This block filters bursts based on their type.
|
||||||
|
|
||||||
|
For more information on burst types, see GSM 05.02.
|
||||||
|
|
||||||
|
file_format: 1
|
|
@ -1,32 +0,0 @@
|
||||||
<?xml version="1.0"?>
|
|
||||||
<block>
|
|
||||||
<name>Burst Type Filter</name>
|
|
||||||
<key>gsm_burst_type_filter</key>
|
|
||||||
<import>import grgsm</import>
|
|
||||||
<make>grgsm.burst_type_filter($selected_burst_types)</make>
|
|
||||||
|
|
||||||
<param>
|
|
||||||
<name>Selected burst types</name>
|
|
||||||
<key>selected_burst_types</key>
|
|
||||||
<value>[0,1,2,3,4,5,6,7]</value>
|
|
||||||
<type>int_vector</type>
|
|
||||||
</param>
|
|
||||||
|
|
||||||
<sink>
|
|
||||||
<name>bursts_in</name>
|
|
||||||
<type>message</type>
|
|
||||||
<optional>1</optional>
|
|
||||||
</sink>
|
|
||||||
|
|
||||||
<source>
|
|
||||||
<name>bursts_out</name>
|
|
||||||
<type>message</type>
|
|
||||||
<optional>1</optional>
|
|
||||||
</source>
|
|
||||||
|
|
||||||
<doc>
|
|
||||||
This block filters bursts based on their type.
|
|
||||||
|
|
||||||
For more information on burst types, see GSM 05.02.
|
|
||||||
</doc>
|
|
||||||
</block>
|
|
|
@ -0,0 +1,22 @@
|
||||||
|
# auto-generated by grc.converter
|
||||||
|
|
||||||
|
id: gsm_dummy_burst_filter
|
||||||
|
label: Dummy Burst Filter
|
||||||
|
|
||||||
|
inputs:
|
||||||
|
- domain: message
|
||||||
|
id: in
|
||||||
|
|
||||||
|
outputs:
|
||||||
|
- domain: message
|
||||||
|
id: out
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
templates:
|
||||||
|
imports: import grgsm
|
||||||
|
make: grgsm.dummy_burst_filter()
|
||||||
|
|
||||||
|
documentation: "This block filters dummy bursts. \n\nFor more information on dummy\
|
||||||
|
\ bursts, see GSM 05.02."
|
||||||
|
|
||||||
|
file_format: 1
|
|
@ -1,24 +0,0 @@
|
||||||
<?xml version="1.0"?>
|
|
||||||
<block>
|
|
||||||
<name>Dummy Burst Filter</name>
|
|
||||||
<key>gsm_dummy_burst_filter</key>
|
|
||||||
<import>import grgsm</import>
|
|
||||||
<make>grgsm.dummy_burst_filter()</make>
|
|
||||||
|
|
||||||
<sink>
|
|
||||||
<name>in</name>
|
|
||||||
<type>message</type>
|
|
||||||
</sink>
|
|
||||||
|
|
||||||
<source>
|
|
||||||
<name>out</name>
|
|
||||||
<type>message</type>
|
|
||||||
<optional>1</optional>
|
|
||||||
</source>
|
|
||||||
|
|
||||||
<doc>
|
|
||||||
This block filters dummy bursts.
|
|
||||||
|
|
||||||
For more information on dummy bursts, see GSM 05.02.
|
|
||||||
</doc>
|
|
||||||
</block>
|
|
|
@ -0,0 +1,23 @@
|
||||||
|
# auto-generated by grc.converter
|
||||||
|
|
||||||
|
id: gsm_uplink_downlink_splitter
|
||||||
|
label: Up/Down-link splitter
|
||||||
|
|
||||||
|
inputs:
|
||||||
|
- domain: message
|
||||||
|
id: in
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
outputs:
|
||||||
|
- domain: message
|
||||||
|
id: downlink
|
||||||
|
optional: true
|
||||||
|
- domain: message
|
||||||
|
id: uplink
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
templates:
|
||||||
|
imports: import grgsm
|
||||||
|
make: grgsm.uplink_downlink_splitter()
|
||||||
|
|
||||||
|
file_format: 1
|
|
@ -1,22 +0,0 @@
|
||||||
<?xml version="1.0"?>
|
|
||||||
<block>
|
|
||||||
<name>Up/Down-link splitter</name>
|
|
||||||
<key>gsm_uplink_downlink_splitter</key>
|
|
||||||
<import>import grgsm</import>
|
|
||||||
<make>grgsm.uplink_downlink_splitter()</make>
|
|
||||||
<sink>
|
|
||||||
<name>in</name>
|
|
||||||
<type>message</type>
|
|
||||||
<optional>1</optional>
|
|
||||||
</sink>
|
|
||||||
<source>
|
|
||||||
<name>downlink</name>
|
|
||||||
<type>message</type>
|
|
||||||
<optional>1</optional>
|
|
||||||
</source>
|
|
||||||
<source>
|
|
||||||
<name>uplink</name>
|
|
||||||
<type>message</type>
|
|
||||||
<optional>1</optional>
|
|
||||||
</source>
|
|
||||||
</block>
|
|
|
@ -0,0 +1,58 @@
|
||||||
|
'[GSM]':
|
||||||
|
- Receiver:
|
||||||
|
- gsm_receiver
|
||||||
|
- gsm_receiver_with_uplink
|
||||||
|
- gsm_cx_channel_hopper
|
||||||
|
- gsm_fcch_burst_tagger
|
||||||
|
- gsm_sch_detector
|
||||||
|
- gsm_fcch_detector
|
||||||
|
- gsm_clock_offset_control
|
||||||
|
- gsm_input
|
||||||
|
- Transmitter:
|
||||||
|
- gsm_txtime_bursts_tagger
|
||||||
|
- gsm_txtime_setter
|
||||||
|
- gsm_gmsk_mod
|
||||||
|
- gsm_preprocess_tx_burst
|
||||||
|
- gsm_gen_test_ab
|
||||||
|
- Transceiver:
|
||||||
|
- gsm_trx_burst_if
|
||||||
|
- Logical channels demapping:
|
||||||
|
- gsm_universal_ctrl_chans_demapper
|
||||||
|
- gsm_bcch_ccch_demapper
|
||||||
|
- gsm_bcch_ccch_sdcch4_demapper
|
||||||
|
- gsm_sdcch8_demapper
|
||||||
|
- gsm_tch_f_chans_demapper
|
||||||
|
- gsm_tch_h_chans_demapper
|
||||||
|
- Decryption:
|
||||||
|
- gsm_decryption
|
||||||
|
- Decoding:
|
||||||
|
- gsm_control_channels_decoder
|
||||||
|
- gsm_tch_f_decoder
|
||||||
|
- gsm_tch_h_decoder
|
||||||
|
- Flow control:
|
||||||
|
- gsm_burst_timeslot_splitter
|
||||||
|
- gsm_burst_sdcch_subslot_splitter
|
||||||
|
- gsm_burst_timeslot_filter
|
||||||
|
- gsm_burst_sdcch_subslot_filter
|
||||||
|
- gsm_burst_fnr_filter
|
||||||
|
- gsm_burst_type_filter
|
||||||
|
- gsm_dummy_burst_filter
|
||||||
|
- gsm_uplink_downlink_splitter
|
||||||
|
- Utilities:
|
||||||
|
- gsm_bursts_printer
|
||||||
|
- gsm_burst_file_sink
|
||||||
|
- gsm_burst_file_source
|
||||||
|
- gsm_collect_system_info
|
||||||
|
- gsm_message_file_sink
|
||||||
|
- gsm_message_file_source
|
||||||
|
- gsm_extract_system_info
|
||||||
|
- gsm_extract_immediate_assignment
|
||||||
|
- gsm_extract_cmc
|
||||||
|
- gsm_extract_assignment_cmd
|
||||||
|
- gsm_controlled_rotator_cc
|
||||||
|
- gsm_controlled_fractional_resampler_cc
|
||||||
|
- gsm_message_printer
|
||||||
|
- gsm_clock_offset_corrector_tagged
|
||||||
|
- gsm_msg_to_tag
|
||||||
|
- gsm_tmsi_dumper
|
||||||
|
- gsm_burst_to_fn_time
|
|
@ -1,87 +0,0 @@
|
||||||
<?xml version="1.0"?>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
###################################################
|
|
||||||
##Block Tree for GSM blocks.
|
|
||||||
###################################################
|
|
||||||
-->
|
|
||||||
|
|
||||||
<cat>
|
|
||||||
<name></name> <!-- Blank for Root Name -->
|
|
||||||
<cat>
|
|
||||||
<name>GSM</name>
|
|
||||||
<cat>
|
|
||||||
<name>Receiver</name>
|
|
||||||
<block>gsm_receiver</block>
|
|
||||||
<block>gsm_receiver_with_uplink</block>
|
|
||||||
<block>gsm_cx_channel_hopper</block>
|
|
||||||
<block>gsm_fcch_burst_tagger</block>
|
|
||||||
<block>gsm_sch_detector</block>
|
|
||||||
<block>gsm_fcch_detector</block>
|
|
||||||
<block>gsm_clock_offset_control</block>
|
|
||||||
<block>gsm_input</block>
|
|
||||||
</cat>
|
|
||||||
<cat>
|
|
||||||
<name>Transmitter</name>
|
|
||||||
<block>gsm_txtime_bursts_tagger</block>
|
|
||||||
<block>gsm_txtime_setter</block>
|
|
||||||
<block>gsm_gmsk_mod</block>
|
|
||||||
<block>gsm_preprocess_tx_burst</block>
|
|
||||||
<block>gsm_gen_test_ab</block>
|
|
||||||
</cat>
|
|
||||||
<cat>
|
|
||||||
<name>Transceiver</name>
|
|
||||||
<block>gsm_trx_burst_if</block>
|
|
||||||
</cat>
|
|
||||||
<cat>
|
|
||||||
<name>Logical channels demapping</name>
|
|
||||||
<block>gsm_universal_ctrl_chans_demapper</block>
|
|
||||||
<block>gsm_bcch_ccch_demapper</block>
|
|
||||||
<block>gsm_bcch_ccch_sdcch4_demapper</block>
|
|
||||||
<block>gsm_sdcch8_demapper</block>
|
|
||||||
<block>gsm_tch_f_chans_demapper</block>
|
|
||||||
<block>gsm_tch_h_chans_demapper</block>
|
|
||||||
</cat>
|
|
||||||
<cat>
|
|
||||||
<name>Decryption</name>
|
|
||||||
<block>gsm_decryption</block>
|
|
||||||
</cat>
|
|
||||||
<cat>
|
|
||||||
<name>Decoding</name>
|
|
||||||
<block>gsm_control_channels_decoder</block>
|
|
||||||
<block>gsm_tch_f_decoder</block>
|
|
||||||
<block>gsm_tch_h_decoder</block>
|
|
||||||
</cat>
|
|
||||||
<cat>
|
|
||||||
<name>Flow control</name>
|
|
||||||
<block>gsm_burst_timeslot_splitter</block>
|
|
||||||
<block>gsm_burst_sdcch_subslot_splitter</block>
|
|
||||||
<block>gsm_burst_timeslot_filter</block>
|
|
||||||
<block>gsm_burst_sdcch_subslot_filter</block>
|
|
||||||
<block>gsm_burst_fnr_filter</block>
|
|
||||||
<block>gsm_burst_type_filter</block>
|
|
||||||
<block>gsm_dummy_burst_filter</block>
|
|
||||||
<block>gsm_uplink_downlink_splitter</block>
|
|
||||||
</cat>
|
|
||||||
<cat>
|
|
||||||
<name>Utilities</name>
|
|
||||||
<block>gsm_bursts_printer</block>
|
|
||||||
<block>gsm_burst_file_sink</block>
|
|
||||||
<block>gsm_burst_file_source</block>
|
|
||||||
<block>gsm_collect_system_info</block>
|
|
||||||
<block>gsm_message_file_sink</block>
|
|
||||||
<block>gsm_message_file_source</block>
|
|
||||||
<block>gsm_extract_system_info</block>
|
|
||||||
<block>gsm_extract_immediate_assignment</block>
|
|
||||||
<block>gsm_extract_cmc</block>
|
|
||||||
<block>gsm_extract_assignment_cmd</block>
|
|
||||||
<block>gsm_controlled_rotator_cc</block>
|
|
||||||
<block>gsm_controlled_fractional_resampler_cc</block>
|
|
||||||
<block>gsm_message_printer</block>
|
|
||||||
<block>gsm_clock_offset_corrector_tagged</block>
|
|
||||||
<block>gsm_msg_to_tag</block>
|
|
||||||
<block>gsm_tmsi_dumper</block>
|
|
||||||
<block>gsm_burst_to_fn_time</block>
|
|
||||||
</cat>
|
|
||||||
</cat>
|
|
||||||
</cat>
|
|
|
@ -18,22 +18,22 @@
|
||||||
# Boston, MA 02110-1301, USA.
|
# Boston, MA 02110-1301, USA.
|
||||||
|
|
||||||
install(FILES
|
install(FILES
|
||||||
gsm_extract_system_info.xml
|
gsm_extract_system_info.block.yml
|
||||||
gsm_extract_immediate_assignment.xml
|
gsm_extract_immediate_assignment.block.yml
|
||||||
gsm_collect_system_info.xml
|
gsm_collect_system_info.block.yml
|
||||||
gsm_extract_cmc.xml
|
gsm_extract_cmc.block.yml
|
||||||
gsm_extract_assignment_cmd.xml
|
gsm_extract_assignment_cmd.block.yml
|
||||||
gsm_controlled_rotator_cc.xml
|
gsm_controlled_rotator_cc.block.yml
|
||||||
gsm_message_printer.xml
|
gsm_message_printer.block.yml
|
||||||
gsm_bursts_printer.xml
|
gsm_bursts_printer.block.yml
|
||||||
gsm_clock_offset_corrector_tagged.xml
|
gsm_clock_offset_corrector_tagged.block.yml
|
||||||
gsm_tmsi_dumper.xml
|
gsm_tmsi_dumper.block.yml
|
||||||
gsm_burst_file_sink.xml
|
gsm_burst_file_sink.block.yml
|
||||||
gsm_burst_file_source.xml
|
gsm_burst_file_source.block.yml
|
||||||
gsm_message_file_sink.xml
|
gsm_message_file_sink.block.yml
|
||||||
gsm_message_file_source.xml
|
gsm_message_file_source.block.yml
|
||||||
gsm_msg_to_tag.xml
|
gsm_msg_to_tag.block.yml
|
||||||
gsm_controlled_fractional_resampler_cc.xml
|
gsm_controlled_fractional_resampler_cc.block.yml
|
||||||
gsm_burst_to_fn_time.xml
|
gsm_burst_to_fn_time.block.yml
|
||||||
DESTINATION share/gnuradio/grc/blocks
|
DESTINATION share/gnuradio/grc/blocks
|
||||||
)
|
)
|
||||||
|
|
|
@ -0,0 +1,20 @@
|
||||||
|
# auto-generated by grc.converter
|
||||||
|
|
||||||
|
id: gsm_burst_file_sink
|
||||||
|
label: Burst File Sink
|
||||||
|
|
||||||
|
parameters:
|
||||||
|
- id: filename
|
||||||
|
label: Destination file
|
||||||
|
dtype: file_open
|
||||||
|
default: /tmp/bursts
|
||||||
|
|
||||||
|
inputs:
|
||||||
|
- domain: message
|
||||||
|
id: in
|
||||||
|
|
||||||
|
templates:
|
||||||
|
imports: import grgsm
|
||||||
|
make: grgsm.burst_file_sink(${filename})
|
||||||
|
|
||||||
|
file_format: 1
|
|
@ -1,19 +0,0 @@
|
||||||
<?xml version="1.0"?>
|
|
||||||
<block>
|
|
||||||
<name>Burst File Sink</name>
|
|
||||||
<key>gsm_burst_file_sink</key>
|
|
||||||
<import>import grgsm</import>
|
|
||||||
<make>grgsm.burst_file_sink($filename)</make>
|
|
||||||
|
|
||||||
<param>
|
|
||||||
<name>Destination file</name>
|
|
||||||
<key>filename</key>
|
|
||||||
<value>/tmp/bursts</value>
|
|
||||||
<type>file_open</type>
|
|
||||||
</param>
|
|
||||||
|
|
||||||
<sink>
|
|
||||||
<name>in</name>
|
|
||||||
<type>message</type>
|
|
||||||
</sink>
|
|
||||||
</block>
|
|
|
@ -0,0 +1,20 @@
|
||||||
|
# auto-generated by grc.converter
|
||||||
|
|
||||||
|
id: gsm_burst_file_source
|
||||||
|
label: Burst File Source
|
||||||
|
|
||||||
|
parameters:
|
||||||
|
- id: filename
|
||||||
|
label: Source file
|
||||||
|
dtype: file_open
|
||||||
|
default: /tmp/bursts
|
||||||
|
|
||||||
|
outputs:
|
||||||
|
- domain: message
|
||||||
|
id: out
|
||||||
|
|
||||||
|
templates:
|
||||||
|
imports: import grgsm
|
||||||
|
make: grgsm.burst_file_source(${filename})
|
||||||
|
|
||||||
|
file_format: 1
|
|
@ -1,19 +0,0 @@
|
||||||
<?xml version="1.0"?>
|
|
||||||
<block>
|
|
||||||
<name>Burst File Source</name>
|
|
||||||
<key>gsm_burst_file_source</key>
|
|
||||||
<import>import grgsm</import>
|
|
||||||
<make>grgsm.burst_file_source($filename)</make>
|
|
||||||
|
|
||||||
<param>
|
|
||||||
<name>Source file</name>
|
|
||||||
<key>filename</key>
|
|
||||||
<value>/tmp/bursts</value>
|
|
||||||
<type>file_open</type>
|
|
||||||
</param>
|
|
||||||
|
|
||||||
<source>
|
|
||||||
<name>out</name>
|
|
||||||
<type>message</type>
|
|
||||||
</source>
|
|
||||||
</block>
|
|
|
@ -0,0 +1,20 @@
|
||||||
|
# auto-generated by grc.converter
|
||||||
|
|
||||||
|
id: gsm_burst_to_fn_time
|
||||||
|
label: Burst to FN time
|
||||||
|
|
||||||
|
inputs:
|
||||||
|
- domain: message
|
||||||
|
id: bursts_in
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
outputs:
|
||||||
|
- domain: message
|
||||||
|
id: fn_time_out
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
templates:
|
||||||
|
imports: import grgsm
|
||||||
|
make: grgsm.burst_to_fn_time()
|
||||||
|
|
||||||
|
file_format: 1
|
|
@ -1,19 +0,0 @@
|
||||||
<?xml version="1.0"?>
|
|
||||||
<block>
|
|
||||||
<name>Burst to FN time</name>
|
|
||||||
<key>gsm_burst_to_fn_time</key>
|
|
||||||
<import>import grgsm</import>
|
|
||||||
<make>grgsm.burst_to_fn_time()</make>
|
|
||||||
|
|
||||||
<sink>
|
|
||||||
<name>bursts_in</name>
|
|
||||||
<type>message</type>
|
|
||||||
<optional>1</optional>
|
|
||||||
</sink>
|
|
||||||
|
|
||||||
<source>
|
|
||||||
<name>fn_time_out</name>
|
|
||||||
<type>message</type>
|
|
||||||
<optional>1</optional>
|
|
||||||
</source>
|
|
||||||
</block>
|
|
|
@ -0,0 +1,57 @@
|
||||||
|
# auto-generated by grc.converter
|
||||||
|
|
||||||
|
id: gsm_bursts_printer
|
||||||
|
label: Bursts Printer
|
||||||
|
|
||||||
|
parameters:
|
||||||
|
- id: prepend_string
|
||||||
|
label: Prepend String
|
||||||
|
dtype: string
|
||||||
|
hide: part
|
||||||
|
- id: prepend_fnr
|
||||||
|
label: Prepend Frame Number
|
||||||
|
dtype: bool
|
||||||
|
default: 'False'
|
||||||
|
options: ['False', 'True']
|
||||||
|
- id: prepend_frame_count
|
||||||
|
label: Prepend Frame Count
|
||||||
|
dtype: bool
|
||||||
|
default: 'False'
|
||||||
|
options: ['False', 'True']
|
||||||
|
- id: print_payload_only
|
||||||
|
label: Print payload only
|
||||||
|
dtype: bool
|
||||||
|
default: 'False'
|
||||||
|
options: ['False', 'True']
|
||||||
|
- id: ignore_dummy_bursts
|
||||||
|
label: Ignore dummy bursts
|
||||||
|
dtype: bool
|
||||||
|
default: 'False'
|
||||||
|
options: ['False', 'True']
|
||||||
|
|
||||||
|
inputs:
|
||||||
|
- domain: message
|
||||||
|
id: bursts
|
||||||
|
|
||||||
|
templates:
|
||||||
|
imports: |-
|
||||||
|
import grgsm
|
||||||
|
import pmt
|
||||||
|
make: |-
|
||||||
|
grgsm.bursts_printer(pmt.intern(${prepend_string}), ${prepend_fnr},
|
||||||
|
${prepend_frame_count}, ${print_payload_only}, ${ignore_dummy_bursts})
|
||||||
|
|
||||||
|
documentation: |-
|
||||||
|
This block prints bursts to output. By default the whole burst including tail bits, stealing bits and training sequence is printed.
|
||||||
|
|
||||||
|
If "Prepend Frame Number" is enabled, then the framenumber is prepended to each burst.
|
||||||
|
|
||||||
|
If "Prepend Frame Count" is enabled, then the frame count for A5 is prependend to each burst.
|
||||||
|
|
||||||
|
If "Print payload only" is enabled, then only the two data blocks of a burst are printed, tail bits, stealing bits and training sequence are omitted.
|
||||||
|
|
||||||
|
If "Ignore dummy bursts" is enabled, then the burst printer will not print dummy bursts (see GSM 05.02)
|
||||||
|
|
||||||
|
Enabling first three options (or all four options) results in an output that is similar to the output of airprobe, i.e. the format is "frame_nr frame_count: databits"
|
||||||
|
|
||||||
|
file_format: 1
|
|
@ -1,92 +0,0 @@
|
||||||
<?xml version="1.0"?>
|
|
||||||
<block>
|
|
||||||
<name>Bursts Printer</name>
|
|
||||||
<key>gsm_bursts_printer</key>
|
|
||||||
<import>import grgsm</import>
|
|
||||||
<import>import pmt</import>
|
|
||||||
<make>grgsm.bursts_printer(pmt.intern($prepend_string), $prepend_fnr,
|
|
||||||
$prepend_frame_count, $print_payload_only, $ignore_dummy_bursts)</make>
|
|
||||||
|
|
||||||
<param>
|
|
||||||
<name>Prepend String</name>
|
|
||||||
<key>prepend_string</key>
|
|
||||||
<value></value>
|
|
||||||
<type>string</type>
|
|
||||||
<hide>part</hide>
|
|
||||||
</param>
|
|
||||||
<param>
|
|
||||||
<name>Prepend Frame Number</name>
|
|
||||||
<key>prepend_fnr</key>
|
|
||||||
<value>False</value>
|
|
||||||
<type>bool</type>
|
|
||||||
<option>
|
|
||||||
<name>False</name>
|
|
||||||
<key>False</key>
|
|
||||||
</option>
|
|
||||||
<option>
|
|
||||||
<name>True</name>
|
|
||||||
<key>True</key>
|
|
||||||
</option>
|
|
||||||
</param>
|
|
||||||
<param>
|
|
||||||
<name>Prepend Frame Count</name>
|
|
||||||
<key>prepend_frame_count</key>
|
|
||||||
<value>False</value>
|
|
||||||
<type>bool</type>
|
|
||||||
<option>
|
|
||||||
<name>False</name>
|
|
||||||
<key>False</key>
|
|
||||||
</option>
|
|
||||||
<option>
|
|
||||||
<name>True</name>
|
|
||||||
<key>True</key>
|
|
||||||
</option>
|
|
||||||
</param>
|
|
||||||
<param>
|
|
||||||
<name>Print payload only</name>
|
|
||||||
<key>print_payload_only</key>
|
|
||||||
<value>False</value>
|
|
||||||
<type>bool</type>
|
|
||||||
<option>
|
|
||||||
<name>False</name>
|
|
||||||
<key>False</key>
|
|
||||||
</option>
|
|
||||||
<option>
|
|
||||||
<name>True</name>
|
|
||||||
<key>True</key>
|
|
||||||
</option>
|
|
||||||
</param>
|
|
||||||
<param>
|
|
||||||
<name>Ignore dummy bursts</name>
|
|
||||||
<key>ignore_dummy_bursts</key>
|
|
||||||
<value>False</value>
|
|
||||||
<type>bool</type>
|
|
||||||
<option>
|
|
||||||
<name>False</name>
|
|
||||||
<key>False</key>
|
|
||||||
</option>
|
|
||||||
<option>
|
|
||||||
<name>True</name>
|
|
||||||
<key>True</key>
|
|
||||||
</option>
|
|
||||||
</param>
|
|
||||||
|
|
||||||
<sink>
|
|
||||||
<name>bursts</name>
|
|
||||||
<type>message</type>
|
|
||||||
</sink>
|
|
||||||
|
|
||||||
<doc>
|
|
||||||
This block prints bursts to output. By default the whole burst including tail bits, stealing bits and training sequence is printed.
|
|
||||||
|
|
||||||
If "Prepend Frame Number" is enabled, then the framenumber is prepended to each burst.
|
|
||||||
|
|
||||||
If "Prepend Frame Count" is enabled, then the frame count for A5 is prependend to each burst.
|
|
||||||
|
|
||||||
If "Print payload only" is enabled, then only the two data blocks of a burst are printed, tail bits, stealing bits and training sequence are omitted.
|
|
||||||
|
|
||||||
If "Ignore dummy bursts" is enabled, then the burst printer will not print dummy bursts (see GSM 05.02)
|
|
||||||
|
|
||||||
Enabling first three options (or all four options) results in an output that is similar to the output of airprobe, i.e. the format is "frame_nr frame_count: databits"
|
|
||||||
</doc>
|
|
||||||
</block>
|
|
|
@ -0,0 +1,56 @@
|
||||||
|
# auto-generated by grc.converter
|
||||||
|
|
||||||
|
id: gsm_clock_offset_corrector_tagged
|
||||||
|
label: Clock Offset Corrector Tagged
|
||||||
|
|
||||||
|
parameters:
|
||||||
|
- id: fc
|
||||||
|
label: fc
|
||||||
|
dtype: raw
|
||||||
|
default: 936.6e6
|
||||||
|
- id: ppm
|
||||||
|
label: ppm
|
||||||
|
dtype: raw
|
||||||
|
default: '0'
|
||||||
|
- id: samp_rate_in
|
||||||
|
label: samp_rate_in
|
||||||
|
dtype: raw
|
||||||
|
default: 1625000.0/6.0*4.0
|
||||||
|
- id: osr
|
||||||
|
label: OSR
|
||||||
|
dtype: raw
|
||||||
|
default: osr
|
||||||
|
|
||||||
|
inputs:
|
||||||
|
- domain: message
|
||||||
|
id: ctrl
|
||||||
|
optional: true
|
||||||
|
- domain: stream
|
||||||
|
dtype: complex
|
||||||
|
vlen: 1
|
||||||
|
|
||||||
|
outputs:
|
||||||
|
- domain: stream
|
||||||
|
dtype: complex
|
||||||
|
vlen: 1
|
||||||
|
|
||||||
|
templates:
|
||||||
|
imports: import grgsm
|
||||||
|
make: |-
|
||||||
|
grgsm.clock_offset_corrector_tagged(
|
||||||
|
fc=${fc},
|
||||||
|
samp_rate_in=${samp_rate_in},
|
||||||
|
ppm=${ppm},
|
||||||
|
osr=${osr}
|
||||||
|
)
|
||||||
|
callbacks:
|
||||||
|
- set_fc(${fc})
|
||||||
|
- set_ppm(${ppm})
|
||||||
|
- set_samp_rate_in(${samp_rate_in})
|
||||||
|
- set_osr(${osr})
|
||||||
|
|
||||||
|
documentation: |-
|
||||||
|
Piotr Krysik
|
||||||
|
Clock offset corrector with blocks that use tags to switch offsets
|
||||||
|
|
||||||
|
file_format: 1
|
|
@ -1,57 +0,0 @@
|
||||||
<block>
|
|
||||||
<name>Clock Offset Corrector Tagged</name>
|
|
||||||
<key>gsm_clock_offset_corrector_tagged</key>
|
|
||||||
<import>import grgsm</import>
|
|
||||||
<make>grgsm.clock_offset_corrector_tagged(
|
|
||||||
fc=$fc,
|
|
||||||
samp_rate_in=$samp_rate_in,
|
|
||||||
ppm=$ppm,
|
|
||||||
osr=$osr
|
|
||||||
)</make>
|
|
||||||
<callback>set_fc($fc)</callback>
|
|
||||||
<callback>set_ppm($ppm)</callback>
|
|
||||||
<callback>set_samp_rate_in($samp_rate_in)</callback>
|
|
||||||
<callback>set_osr($osr)</callback>
|
|
||||||
<param>
|
|
||||||
<name>fc</name>
|
|
||||||
<key>fc</key>
|
|
||||||
<value>936.6e6</value>
|
|
||||||
<type>raw</type>
|
|
||||||
</param>
|
|
||||||
<param>
|
|
||||||
<name>ppm</name>
|
|
||||||
<key>ppm</key>
|
|
||||||
<value>0</value>
|
|
||||||
<type>raw</type>
|
|
||||||
</param>
|
|
||||||
<param>
|
|
||||||
<name>samp_rate_in</name>
|
|
||||||
<key>samp_rate_in</key>
|
|
||||||
<value>1625000.0/6.0*4.0</value>
|
|
||||||
<type>raw</type>
|
|
||||||
</param>
|
|
||||||
<param>
|
|
||||||
<name>OSR</name>
|
|
||||||
<key>osr</key>
|
|
||||||
<value>osr</value>
|
|
||||||
<type>raw</type>
|
|
||||||
</param>
|
|
||||||
<sink>
|
|
||||||
<name>ctrl</name>
|
|
||||||
<type>message</type>
|
|
||||||
<optional>1</optional>
|
|
||||||
</sink>
|
|
||||||
<sink>
|
|
||||||
<name>in</name>
|
|
||||||
<type>complex</type>
|
|
||||||
<vlen>1</vlen>
|
|
||||||
</sink>
|
|
||||||
<source>
|
|
||||||
<name>out</name>
|
|
||||||
<type>complex</type>
|
|
||||||
<vlen>1</vlen>
|
|
||||||
</source>
|
|
||||||
<doc>Piotr Krysik
|
|
||||||
Clock offset corrector with blocks that use tags to switch offsets
|
|
||||||
</doc>
|
|
||||||
</block>
|
|
|
@ -0,0 +1,23 @@
|
||||||
|
# auto-generated by grc.converter
|
||||||
|
|
||||||
|
id: gsm_collect_system_info
|
||||||
|
label: Collect System Info
|
||||||
|
|
||||||
|
inputs:
|
||||||
|
- domain: message
|
||||||
|
id: msgs
|
||||||
|
|
||||||
|
templates:
|
||||||
|
imports: import grgsm
|
||||||
|
make: grgsm.collect_system_info()
|
||||||
|
|
||||||
|
documentation: |-
|
||||||
|
This blocks collect System Information Messages, which can be retrieved using the following methods:
|
||||||
|
|
||||||
|
get_framenumbers(): Get the list with the framenumbers of the System Information Messages
|
||||||
|
|
||||||
|
get_system_information_type(): Get the types of the System Information Messages
|
||||||
|
|
||||||
|
get_data(): Get the whole System Information Messages in Hex representation
|
||||||
|
|
||||||
|
file_format: 1
|
|
@ -1,20 +0,0 @@
|
||||||
<?xml version="1.0"?>
|
|
||||||
<block>
|
|
||||||
<name>Collect System Info</name>
|
|
||||||
<key>gsm_collect_system_info</key>
|
|
||||||
<import>import grgsm</import>
|
|
||||||
<make>grgsm.collect_system_info()</make>
|
|
||||||
<sink>
|
|
||||||
<name>msgs</name>
|
|
||||||
<type>message</type>
|
|
||||||
</sink>
|
|
||||||
<doc>
|
|
||||||
This blocks collect System Information Messages, which can be retrieved using the following methods:
|
|
||||||
|
|
||||||
get_framenumbers(): Get the list with the framenumbers of the System Information Messages
|
|
||||||
|
|
||||||
get_system_information_type(): Get the types of the System Information Messages
|
|
||||||
|
|
||||||
get_data(): Get the whole System Information Messages in Hex representation
|
|
||||||
</doc>
|
|
||||||
</block>
|
|
|
@ -0,0 +1,28 @@
|
||||||
|
# auto-generated by grc.converter
|
||||||
|
|
||||||
|
id: gsm_controlled_fractional_resampler_cc
|
||||||
|
label: Controlled Fractional Resampler
|
||||||
|
|
||||||
|
parameters:
|
||||||
|
- id: phase_shift
|
||||||
|
label: Phase Shift
|
||||||
|
dtype: real
|
||||||
|
- id: resamp_ratio
|
||||||
|
label: Resampling Ratio
|
||||||
|
dtype: real
|
||||||
|
|
||||||
|
inputs:
|
||||||
|
- domain: stream
|
||||||
|
dtype: complex
|
||||||
|
|
||||||
|
outputs:
|
||||||
|
- domain: stream
|
||||||
|
dtype: complex
|
||||||
|
|
||||||
|
templates:
|
||||||
|
imports: import grgsm
|
||||||
|
make: grgsm.controlled_fractional_resampler_cc(${phase_shift}, ${resamp_ratio})
|
||||||
|
callbacks:
|
||||||
|
- set_resamp_ratio(${resamp_ratio})
|
||||||
|
|
||||||
|
file_format: 1
|
|
@ -1,26 +0,0 @@
|
||||||
<?xml version="1.0"?>
|
|
||||||
<block>
|
|
||||||
<name>Controlled Fractional Resampler</name>
|
|
||||||
<key>gsm_controlled_fractional_resampler_cc</key>
|
|
||||||
<import>import grgsm</import>
|
|
||||||
<make>grgsm.controlled_fractional_resampler_cc($phase_shift, $resamp_ratio)</make>
|
|
||||||
<callback>set_resamp_ratio($resamp_ratio)</callback>
|
|
||||||
<param>
|
|
||||||
<name>Phase Shift</name>
|
|
||||||
<key>phase_shift</key>
|
|
||||||
<type>real</type>
|
|
||||||
</param>
|
|
||||||
<param>
|
|
||||||
<name>Resampling Ratio</name>
|
|
||||||
<key>resamp_ratio</key>
|
|
||||||
<type>real</type>
|
|
||||||
</param>
|
|
||||||
<sink>
|
|
||||||
<name>in</name>
|
|
||||||
<type>complex</type>
|
|
||||||
</sink>
|
|
||||||
<source>
|
|
||||||
<name>out</name>
|
|
||||||
<type>complex</type>
|
|
||||||
</source>
|
|
||||||
</block>
|
|
|
@ -0,0 +1,26 @@
|
||||||
|
# auto-generated by grc.converter
|
||||||
|
|
||||||
|
id: gsm_controlled_rotator_cc
|
||||||
|
label: Controlled Rotator
|
||||||
|
|
||||||
|
parameters:
|
||||||
|
- id: phase_inc
|
||||||
|
label: phase_inc
|
||||||
|
dtype: real
|
||||||
|
default: '0'
|
||||||
|
|
||||||
|
inputs:
|
||||||
|
- domain: stream
|
||||||
|
dtype: complex
|
||||||
|
|
||||||
|
outputs:
|
||||||
|
- domain: stream
|
||||||
|
dtype: complex
|
||||||
|
|
||||||
|
templates:
|
||||||
|
imports: import grgsm
|
||||||
|
make: grgsm.controlled_rotator_cc(${phase_inc})
|
||||||
|
callbacks:
|
||||||
|
- set_phase_inc(${phase_inc})
|
||||||
|
|
||||||
|
file_format: 1
|
|
@ -1,23 +0,0 @@
|
||||||
<?xml version="1.0"?>
|
|
||||||
<block>
|
|
||||||
<name>Controlled Rotator</name>
|
|
||||||
<key>gsm_controlled_rotator_cc</key>
|
|
||||||
<import>import grgsm</import>
|
|
||||||
<make>grgsm.controlled_rotator_cc($phase_inc)</make>
|
|
||||||
<callback>set_phase_inc($phase_inc)</callback>
|
|
||||||
<param>
|
|
||||||
<name>phase_inc</name>
|
|
||||||
<key>phase_inc</key>
|
|
||||||
<value>0</value>
|
|
||||||
<type>real</type>
|
|
||||||
</param>
|
|
||||||
<sink>
|
|
||||||
<name>in</name>
|
|
||||||
<type>complex</type>
|
|
||||||
</sink>
|
|
||||||
<source>
|
|
||||||
<name>out</name>
|
|
||||||
<type>complex</type>
|
|
||||||
</source>
|
|
||||||
</block>
|
|
||||||
|
|
|
@ -0,0 +1,22 @@
|
||||||
|
# auto-generated by grc.converter
|
||||||
|
|
||||||
|
id: gsm_extract_assignment_cmd
|
||||||
|
label: Extract Assignment Command
|
||||||
|
|
||||||
|
inputs:
|
||||||
|
- domain: message
|
||||||
|
id: msgs
|
||||||
|
|
||||||
|
templates:
|
||||||
|
imports: import grgsm
|
||||||
|
make: grgsm.extract_assignment_cmd()
|
||||||
|
|
||||||
|
documentation: |-
|
||||||
|
Extracts Assignemnt Commands.
|
||||||
|
|
||||||
|
Input: decoded control channel messages
|
||||||
|
|
||||||
|
The information can be retrieved using following function:
|
||||||
|
get_assignment_commands()
|
||||||
|
|
||||||
|
file_format: 1
|
|
@ -1,20 +0,0 @@
|
||||||
<?xml version="1.0"?>
|
|
||||||
<block>
|
|
||||||
<name>Extract Assignment Command</name>
|
|
||||||
<key>gsm_extract_assignment_cmd</key>
|
|
||||||
<import>import grgsm</import>
|
|
||||||
<make>grgsm.extract_assignment_cmd()</make>
|
|
||||||
<sink>
|
|
||||||
<name>msgs</name>
|
|
||||||
<type>message</type>
|
|
||||||
</sink>
|
|
||||||
<doc>
|
|
||||||
Extracts Assignemnt Commands.
|
|
||||||
|
|
||||||
Input: decoded control channel messages
|
|
||||||
|
|
||||||
The information can be retrieved using following function:
|
|
||||||
get_assignment_commands()
|
|
||||||
|
|
||||||
</doc>
|
|
||||||
</block>
|
|
|
@ -0,0 +1,22 @@
|
||||||
|
# auto-generated by grc.converter
|
||||||
|
|
||||||
|
id: gsm_extract_cmc
|
||||||
|
label: Extract Cipher Mode Command
|
||||||
|
|
||||||
|
inputs:
|
||||||
|
- domain: message
|
||||||
|
id: msgs
|
||||||
|
|
||||||
|
templates:
|
||||||
|
imports: import grgsm
|
||||||
|
make: grgsm.extract_cmc()
|
||||||
|
|
||||||
|
documentation: |-
|
||||||
|
Extracts the framenumber and the assigned encryption algorithm from Cipher Mode Commands.
|
||||||
|
|
||||||
|
Input: decoded control channel messages
|
||||||
|
|
||||||
|
The information can be retrieved using following functions:
|
||||||
|
get_frame_numbers(), get_a5_versions()
|
||||||
|
|
||||||
|
file_format: 1
|
|
@ -1,20 +0,0 @@
|
||||||
<?xml version="1.0"?>
|
|
||||||
<block>
|
|
||||||
<name>Extract Cipher Mode Command</name>
|
|
||||||
<key>gsm_extract_cmc</key>
|
|
||||||
<import>import grgsm</import>
|
|
||||||
<make>grgsm.extract_cmc()</make>
|
|
||||||
<sink>
|
|
||||||
<name>msgs</name>
|
|
||||||
<type>message</type>
|
|
||||||
</sink>
|
|
||||||
<doc>
|
|
||||||
Extracts the framenumber and the assigned encryption algorithm from Cipher Mode Commands.
|
|
||||||
|
|
||||||
Input: decoded control channel messages
|
|
||||||
|
|
||||||
The information can be retrieved using following functions:
|
|
||||||
get_frame_numbers(), get_a5_versions()
|
|
||||||
|
|
||||||
</doc>
|
|
||||||
</block>
|
|
|
@ -0,0 +1,46 @@
|
||||||
|
# auto-generated by grc.converter
|
||||||
|
|
||||||
|
id: gsm_extract_immediate_assignment
|
||||||
|
label: Extract Immediate Assignment
|
||||||
|
|
||||||
|
parameters:
|
||||||
|
- id: print_immediate_assignments
|
||||||
|
label: Print
|
||||||
|
dtype: bool
|
||||||
|
default: 'False'
|
||||||
|
options: ['False', 'True']
|
||||||
|
- id: ignore_gprs
|
||||||
|
label: Ignore GPRS
|
||||||
|
dtype: bool
|
||||||
|
default: 'False'
|
||||||
|
options: ['False', 'True']
|
||||||
|
- id: unique_references
|
||||||
|
label: Unique per request ref
|
||||||
|
dtype: bool
|
||||||
|
default: 'False'
|
||||||
|
options: ['False', 'True']
|
||||||
|
|
||||||
|
inputs:
|
||||||
|
- domain: message
|
||||||
|
id: msgs
|
||||||
|
|
||||||
|
templates:
|
||||||
|
imports: import grgsm
|
||||||
|
make: grgsm.extract_immediate_assignment(${print_immediate_assignments}, ${ignore_gprs},
|
||||||
|
${unique_references})
|
||||||
|
|
||||||
|
documentation: |-
|
||||||
|
Extracts the assignment information from immediate assignments, i.e. timeslot, channel type, etc.
|
||||||
|
|
||||||
|
Input: decoded control channel messages
|
||||||
|
|
||||||
|
If "Print" is enabled, the information will be printed to output also,
|
||||||
|
else the data can be retrieved using functions:
|
||||||
|
|
||||||
|
get_frame_numbers(), get_channel_types(), get_timeslots(), get_subchannels(), get_hopping(), get_maios(), get_hsns(), get_arfcns(), get_timing_advances(), get_mobile_allocations()
|
||||||
|
|
||||||
|
If "Ignore GPRS" is enabled, the extractor will ignore Immediate Assignments that assign GPRS channels.
|
||||||
|
|
||||||
|
If "Unique per request ref" is enabled, the extractor will capture the first Immediate Assignment for every unique request reference, and ignore further duplicate assignments
|
||||||
|
|
||||||
|
file_format: 1
|
|
@ -1,71 +0,0 @@
|
||||||
<?xml version="1.0"?>
|
|
||||||
<block>
|
|
||||||
<name>Extract Immediate Assignment</name>
|
|
||||||
<key>gsm_extract_immediate_assignment</key>
|
|
||||||
<import>import grgsm</import>
|
|
||||||
<make>grgsm.extract_immediate_assignment($print_immediate_assignments, $ignore_gprs, $unique_references)</make>
|
|
||||||
|
|
||||||
<param>
|
|
||||||
<name>Print</name>
|
|
||||||
<key>print_immediate_assignments</key>
|
|
||||||
<value>False</value>
|
|
||||||
<type>bool</type>
|
|
||||||
<option>
|
|
||||||
<name>False</name>
|
|
||||||
<key>False</key>
|
|
||||||
</option>
|
|
||||||
<option>
|
|
||||||
<name>True</name>
|
|
||||||
<key>True</key>
|
|
||||||
</option>
|
|
||||||
</param>
|
|
||||||
<param>
|
|
||||||
<name>Ignore GPRS</name>
|
|
||||||
<key>ignore_gprs</key>
|
|
||||||
<value>False</value>
|
|
||||||
<type>bool</type>
|
|
||||||
<option>
|
|
||||||
<name>False</name>
|
|
||||||
<key>False</key>
|
|
||||||
</option>
|
|
||||||
<option>
|
|
||||||
<name>True</name>
|
|
||||||
<key>True</key>
|
|
||||||
</option>
|
|
||||||
</param>
|
|
||||||
<param>
|
|
||||||
<name>Unique per request ref</name>
|
|
||||||
<key>unique_references</key>
|
|
||||||
<value>False</value>
|
|
||||||
<type>bool</type>
|
|
||||||
<option>
|
|
||||||
<name>False</name>
|
|
||||||
<key>False</key>
|
|
||||||
</option>
|
|
||||||
<option>
|
|
||||||
<name>True</name>
|
|
||||||
<key>True</key>
|
|
||||||
</option>
|
|
||||||
</param>
|
|
||||||
|
|
||||||
<sink>
|
|
||||||
<name>msgs</name>
|
|
||||||
<type>message</type>
|
|
||||||
</sink>
|
|
||||||
|
|
||||||
<doc>
|
|
||||||
Extracts the assignment information from immediate assignments, i.e. timeslot, channel type, etc.
|
|
||||||
|
|
||||||
Input: decoded control channel messages
|
|
||||||
|
|
||||||
If "Print" is enabled, the information will be printed to output also,
|
|
||||||
else the data can be retrieved using functions:
|
|
||||||
|
|
||||||
get_frame_numbers(), get_channel_types(), get_timeslots(), get_subchannels(), get_hopping(), get_maios(), get_hsns(), get_arfcns(), get_timing_advances(), get_mobile_allocations()
|
|
||||||
|
|
||||||
If "Ignore GPRS" is enabled, the extractor will ignore Immediate Assignments that assign GPRS channels.
|
|
||||||
|
|
||||||
If "Unique per request ref" is enabled, the extractor will capture the first Immediate Assignment for every unique request reference, and ignore further duplicate assignments
|
|
||||||
|
|
||||||
</doc>
|
|
||||||
</block>
|
|
|
@ -0,0 +1,16 @@
|
||||||
|
# auto-generated by grc.converter
|
||||||
|
|
||||||
|
id: gsm_extract_system_info
|
||||||
|
label: Extract System Info
|
||||||
|
|
||||||
|
inputs:
|
||||||
|
- domain: message
|
||||||
|
id: msgs
|
||||||
|
- domain: message
|
||||||
|
id: bursts
|
||||||
|
|
||||||
|
templates:
|
||||||
|
imports: import grgsm
|
||||||
|
make: grgsm.extract_system_info()
|
||||||
|
|
||||||
|
file_format: 1
|
|
@ -1,18 +0,0 @@
|
||||||
<?xml version="1.0"?>
|
|
||||||
<block>
|
|
||||||
<name>Extract System Info</name>
|
|
||||||
<key>gsm_extract_system_info</key>
|
|
||||||
<import>import grgsm</import>
|
|
||||||
<make>grgsm.extract_system_info()</make>
|
|
||||||
|
|
||||||
<sink>
|
|
||||||
<name>msgs</name>
|
|
||||||
<type>message</type>
|
|
||||||
</sink>
|
|
||||||
|
|
||||||
<sink>
|
|
||||||
<name>bursts</name>
|
|
||||||
<type>message</type>
|
|
||||||
</sink>
|
|
||||||
|
|
||||||
</block>
|
|
|
@ -0,0 +1,23 @@
|
||||||
|
# auto-generated by grc.converter
|
||||||
|
|
||||||
|
id: gsm_message_file_sink
|
||||||
|
label: Message File Sink
|
||||||
|
|
||||||
|
parameters:
|
||||||
|
- id: filename
|
||||||
|
label: Destination file
|
||||||
|
dtype: file_open
|
||||||
|
default: /tmp/output.msg
|
||||||
|
|
||||||
|
inputs:
|
||||||
|
- domain: message
|
||||||
|
id: in
|
||||||
|
|
||||||
|
templates:
|
||||||
|
imports: import grgsm
|
||||||
|
make: grgsm.message_file_sink(${filename})
|
||||||
|
|
||||||
|
documentation: |-
|
||||||
|
This block stores incoming gsm messages to a file.
|
||||||
|
|
||||||
|
file_format: 1
|
|
@ -1,23 +0,0 @@
|
||||||
<?xml version="1.0"?>
|
|
||||||
<block>
|
|
||||||
<name>Message File Sink</name>
|
|
||||||
<key>gsm_message_file_sink</key>
|
|
||||||
<import>import grgsm</import>
|
|
||||||
<make>grgsm.message_file_sink($filename)</make>
|
|
||||||
|
|
||||||
<param>
|
|
||||||
<name>Destination file</name>
|
|
||||||
<key>filename</key>
|
|
||||||
<value>/tmp/output.msg</value>
|
|
||||||
<type>file_open</type>
|
|
||||||
</param>
|
|
||||||
|
|
||||||
<sink>
|
|
||||||
<name>in</name>
|
|
||||||
<type>message</type>
|
|
||||||
</sink>
|
|
||||||
|
|
||||||
<doc>
|
|
||||||
This block stores incoming gsm messages to a file.
|
|
||||||
</doc>
|
|
||||||
</block>
|
|
|
@ -0,0 +1,23 @@
|
||||||
|
# auto-generated by grc.converter
|
||||||
|
|
||||||
|
id: gsm_message_file_source
|
||||||
|
label: Message File Source
|
||||||
|
|
||||||
|
parameters:
|
||||||
|
- id: filename
|
||||||
|
label: Source file
|
||||||
|
dtype: file_open
|
||||||
|
default: /tmp/output.msg
|
||||||
|
|
||||||
|
outputs:
|
||||||
|
- domain: message
|
||||||
|
id: out
|
||||||
|
|
||||||
|
templates:
|
||||||
|
imports: import grgsm
|
||||||
|
make: grgsm.message_file_source(${filename})
|
||||||
|
|
||||||
|
documentation: |-
|
||||||
|
This block outputs gsm messages stored in a file.
|
||||||
|
|
||||||
|
file_format: 1
|
|
@ -1,23 +0,0 @@
|
||||||
<?xml version="1.0"?>
|
|
||||||
<block>
|
|
||||||
<name>Message File Source</name>
|
|
||||||
<key>gsm_message_file_source</key>
|
|
||||||
<import>import grgsm</import>
|
|
||||||
<make>grgsm.message_file_source($filename)</make>
|
|
||||||
|
|
||||||
<param>
|
|
||||||
<name>Source file</name>
|
|
||||||
<key>filename</key>
|
|
||||||
<value>/tmp/output.msg</value>
|
|
||||||
<type>file_open</type>
|
|
||||||
</param>
|
|
||||||
|
|
||||||
<source>
|
|
||||||
<name>out</name>
|
|
||||||
<type>message</type>
|
|
||||||
</source>
|
|
||||||
|
|
||||||
<doc>
|
|
||||||
This block outputs gsm messages stored in a file.
|
|
||||||
</doc>
|
|
||||||
</block>
|
|
|
@ -0,0 +1,39 @@
|
||||||
|
# auto-generated by grc.converter
|
||||||
|
|
||||||
|
id: gsm_message_printer
|
||||||
|
label: Message Printer
|
||||||
|
|
||||||
|
parameters:
|
||||||
|
- id: prepend_string
|
||||||
|
label: Prepend String
|
||||||
|
dtype: string
|
||||||
|
hide: part
|
||||||
|
- id: prepend_fnr
|
||||||
|
label: Prepend Frame Number
|
||||||
|
dtype: bool
|
||||||
|
default: 'False'
|
||||||
|
options: ['False', 'True']
|
||||||
|
- id: prepend_frame_count
|
||||||
|
label: Prepend Frame Count
|
||||||
|
dtype: bool
|
||||||
|
default: 'False'
|
||||||
|
options: ['False', 'True']
|
||||||
|
- id: print_gsmtap_header
|
||||||
|
label: Print GSMTap header
|
||||||
|
dtype: bool
|
||||||
|
default: 'False'
|
||||||
|
options: ['False', 'True']
|
||||||
|
|
||||||
|
inputs:
|
||||||
|
- domain: message
|
||||||
|
id: msgs
|
||||||
|
|
||||||
|
templates:
|
||||||
|
imports: |-
|
||||||
|
import grgsm
|
||||||
|
import pmt
|
||||||
|
make: |-
|
||||||
|
grgsm.message_printer(pmt.intern(${prepend_string}), ${prepend_fnr},
|
||||||
|
${prepend_frame_count}, ${print_gsmtap_header})
|
||||||
|
|
||||||
|
file_format: 1
|
|
@ -1,64 +0,0 @@
|
||||||
<?xml version="1.0"?>
|
|
||||||
<block>
|
|
||||||
<name>Message Printer</name>
|
|
||||||
<key>gsm_message_printer</key>
|
|
||||||
<import>import grgsm</import>
|
|
||||||
<import>import pmt</import>
|
|
||||||
<make>grgsm.message_printer(pmt.intern($prepend_string), $prepend_fnr,
|
|
||||||
$prepend_frame_count, $print_gsmtap_header)</make>
|
|
||||||
|
|
||||||
<param>
|
|
||||||
<name>Prepend String</name>
|
|
||||||
<key>prepend_string</key>
|
|
||||||
<value></value>
|
|
||||||
<type>string</type>
|
|
||||||
<hide>part</hide>
|
|
||||||
</param>
|
|
||||||
<param>
|
|
||||||
<name>Prepend Frame Number</name>
|
|
||||||
<key>prepend_fnr</key>
|
|
||||||
<value>False</value>
|
|
||||||
<type>bool</type>
|
|
||||||
<option>
|
|
||||||
<name>False</name>
|
|
||||||
<key>False</key>
|
|
||||||
</option>
|
|
||||||
<option>
|
|
||||||
<name>True</name>
|
|
||||||
<key>True</key>
|
|
||||||
</option>
|
|
||||||
</param>
|
|
||||||
<param>
|
|
||||||
<name>Prepend Frame Count</name>
|
|
||||||
<key>prepend_frame_count</key>
|
|
||||||
<value>False</value>
|
|
||||||
<type>bool</type>
|
|
||||||
<option>
|
|
||||||
<name>False</name>
|
|
||||||
<key>False</key>
|
|
||||||
</option>
|
|
||||||
<option>
|
|
||||||
<name>True</name>
|
|
||||||
<key>True</key>
|
|
||||||
</option>
|
|
||||||
</param>
|
|
||||||
<param>
|
|
||||||
<name>Print GSMTap header</name>
|
|
||||||
<key>print_gsmtap_header</key>
|
|
||||||
<value>False</value>
|
|
||||||
<type>bool</type>
|
|
||||||
<option>
|
|
||||||
<name>False</name>
|
|
||||||
<key>False</key>
|
|
||||||
</option>
|
|
||||||
<option>
|
|
||||||
<name>True</name>
|
|
||||||
<key>True</key>
|
|
||||||
</option>
|
|
||||||
</param>
|
|
||||||
|
|
||||||
<sink>
|
|
||||||
<name>msgs</name>
|
|
||||||
<type>message</type>
|
|
||||||
</sink>
|
|
||||||
</block>
|
|
|
@ -0,0 +1,21 @@
|
||||||
|
# auto-generated by grc.converter
|
||||||
|
|
||||||
|
id: gsm_msg_to_tag
|
||||||
|
label: Message To Tag
|
||||||
|
|
||||||
|
inputs:
|
||||||
|
- domain: stream
|
||||||
|
dtype: complex
|
||||||
|
- domain: message
|
||||||
|
id: msg
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
outputs:
|
||||||
|
- domain: stream
|
||||||
|
dtype: complex
|
||||||
|
|
||||||
|
templates:
|
||||||
|
imports: import grgsm
|
||||||
|
make: grgsm.msg_to_tag()
|
||||||
|
|
||||||
|
file_format: 1
|
|
@ -1,23 +0,0 @@
|
||||||
<?xml version="1.0"?>
|
|
||||||
<block>
|
|
||||||
<name>Message To Tag</name>
|
|
||||||
<key>gsm_msg_to_tag</key>
|
|
||||||
<import>import grgsm</import>
|
|
||||||
<make>grgsm.msg_to_tag()</make>
|
|
||||||
|
|
||||||
<sink>
|
|
||||||
<name>in</name>
|
|
||||||
<type>complex</type>
|
|
||||||
</sink>
|
|
||||||
|
|
||||||
<sink>
|
|
||||||
<name>msg</name>
|
|
||||||
<type>message</type>
|
|
||||||
<optional>1</optional>
|
|
||||||
</sink>
|
|
||||||
|
|
||||||
<source>
|
|
||||||
<name>out</name>
|
|
||||||
<type>complex</type>
|
|
||||||
</source>
|
|
||||||
</block>
|
|
|
@ -0,0 +1,16 @@
|
||||||
|
# auto-generated by grc.converter
|
||||||
|
|
||||||
|
id: gsm_tmsi_dumper
|
||||||
|
label: TMSI Dumper
|
||||||
|
|
||||||
|
inputs:
|
||||||
|
- domain: message
|
||||||
|
id: msgs
|
||||||
|
|
||||||
|
templates:
|
||||||
|
imports: |-
|
||||||
|
import grgsm
|
||||||
|
import pmt
|
||||||
|
make: grgsm.tmsi_dumper()
|
||||||
|
|
||||||
|
file_format: 1
|
|
@ -1,13 +0,0 @@
|
||||||
<?xml version="1.0"?>
|
|
||||||
<block>
|
|
||||||
<name>TMSI Dumper</name>
|
|
||||||
<key>gsm_tmsi_dumper</key>
|
|
||||||
<import>import grgsm</import>
|
|
||||||
<import>import pmt</import>
|
|
||||||
<make>grgsm.tmsi_dumper()</make>
|
|
||||||
|
|
||||||
<sink>
|
|
||||||
<name>msgs</name>
|
|
||||||
<type>message</type>
|
|
||||||
</sink>
|
|
||||||
</block>
|
|
|
@ -18,8 +18,9 @@
|
||||||
# Boston, MA 02110-1301, USA.
|
# Boston, MA 02110-1301, USA.
|
||||||
|
|
||||||
install(FILES
|
install(FILES
|
||||||
gsm_burst_source.xml
|
gsm_burst_source.block.xml
|
||||||
gsm_burst_sink.xml
|
gsm_burst_sink.block.xml
|
||||||
gsm_message_source.xml
|
gsm_message_source.block.xml
|
||||||
gsm_message_sink.xml DESTINATION share/gnuradio/grc/blocks
|
gsm_message_sink.block.xml
|
||||||
|
DESTINATION share/gnuradio/grc/blocks
|
||||||
)
|
)
|
||||||
|
|
|
@ -0,0 +1,14 @@
|
||||||
|
# auto-generated by grc.converter
|
||||||
|
|
||||||
|
id: gsm_burst_sink
|
||||||
|
label: Burst Sink
|
||||||
|
|
||||||
|
inputs:
|
||||||
|
- domain: message
|
||||||
|
id: in
|
||||||
|
|
||||||
|
templates:
|
||||||
|
imports: import grgsm
|
||||||
|
make: grgsm.burst_sink()
|
||||||
|
|
||||||
|
file_format: 1
|
|
@ -1,12 +0,0 @@
|
||||||
<?xml version="1.0"?>
|
|
||||||
<block>
|
|
||||||
<name>Burst Sink</name>
|
|
||||||
<key>gsm_burst_sink</key>
|
|
||||||
<import>import grgsm</import>
|
|
||||||
<make>grgsm.burst_sink()</make>
|
|
||||||
|
|
||||||
<sink>
|
|
||||||
<name>in</name>
|
|
||||||
<type>message</type>
|
|
||||||
</sink>
|
|
||||||
</block>
|
|
|
@ -0,0 +1,30 @@
|
||||||
|
# auto-generated by grc.converter
|
||||||
|
|
||||||
|
id: gsm_burst_source
|
||||||
|
label: Burst Source
|
||||||
|
|
||||||
|
parameters:
|
||||||
|
- id: framenumbers
|
||||||
|
label: Frame numbers
|
||||||
|
dtype: int_vector
|
||||||
|
default: '[]'
|
||||||
|
hide: part
|
||||||
|
- id: timeslots
|
||||||
|
label: Timeslots
|
||||||
|
dtype: int_vector
|
||||||
|
default: '[]'
|
||||||
|
hide: part
|
||||||
|
- id: bursts
|
||||||
|
label: Bursts
|
||||||
|
dtype: raw
|
||||||
|
default: '[[],]'
|
||||||
|
|
||||||
|
outputs:
|
||||||
|
- domain: message
|
||||||
|
id: out
|
||||||
|
|
||||||
|
templates:
|
||||||
|
imports: import grgsm
|
||||||
|
make: grgsm.burst_source(${framenumbers}, ${timeslots}, ${bursts})
|
||||||
|
|
||||||
|
file_format: 1
|
|
@ -1,35 +0,0 @@
|
||||||
<?xml version="1.0"?>
|
|
||||||
<block>
|
|
||||||
<name>Burst Source</name>
|
|
||||||
<key>gsm_burst_source</key>
|
|
||||||
<import>import grgsm</import>
|
|
||||||
<make>grgsm.burst_source($framenumbers, $timeslots, $bursts)</make>
|
|
||||||
|
|
||||||
<param>
|
|
||||||
<name>Frame numbers</name>
|
|
||||||
<key>framenumbers</key>
|
|
||||||
<value>[]</value>
|
|
||||||
<type>int_vector</type>
|
|
||||||
<hide>part</hide>
|
|
||||||
</param>
|
|
||||||
|
|
||||||
<param>
|
|
||||||
<name>Timeslots</name>
|
|
||||||
<key>timeslots</key>
|
|
||||||
<value>[]</value>
|
|
||||||
<type>int_vector</type>
|
|
||||||
<hide>part</hide>
|
|
||||||
</param>
|
|
||||||
|
|
||||||
<param>
|
|
||||||
<name>Bursts</name>
|
|
||||||
<key>bursts</key>
|
|
||||||
<value>[[],]</value>
|
|
||||||
<type>raw</type>
|
|
||||||
</param>
|
|
||||||
|
|
||||||
<source>
|
|
||||||
<name>out</name>
|
|
||||||
<type>message</type>
|
|
||||||
</source>
|
|
||||||
</block>
|
|
|
@ -0,0 +1,19 @@
|
||||||
|
# auto-generated by grc.converter
|
||||||
|
|
||||||
|
id: gsm_message_sink
|
||||||
|
label: Message Sink
|
||||||
|
|
||||||
|
inputs:
|
||||||
|
- domain: message
|
||||||
|
id: in
|
||||||
|
|
||||||
|
templates:
|
||||||
|
imports: import grgsm
|
||||||
|
make: grgsm.message_sink()
|
||||||
|
|
||||||
|
documentation: |-
|
||||||
|
This block is a message sink for testing purposes.
|
||||||
|
|
||||||
|
The data can be retrieved using function get_messages()
|
||||||
|
|
||||||
|
file_format: 1
|
|
@ -1,19 +0,0 @@
|
||||||
<?xml version="1.0"?>
|
|
||||||
<block>
|
|
||||||
<name>Message Sink</name>
|
|
||||||
<key>gsm_message_sink</key>
|
|
||||||
<import>import grgsm</import>
|
|
||||||
<make>grgsm.message_sink()</make>
|
|
||||||
|
|
||||||
<sink>
|
|
||||||
<name>in</name>
|
|
||||||
<type>message</type>
|
|
||||||
</sink>
|
|
||||||
|
|
||||||
<doc>
|
|
||||||
This block is a message sink for testing purposes.
|
|
||||||
|
|
||||||
The data can be retrieved using function get_messages()
|
|
||||||
|
|
||||||
</doc>
|
|
||||||
</block>
|
|
|
@ -0,0 +1,39 @@
|
||||||
|
# auto-generated by grc.converter
|
||||||
|
|
||||||
|
id: gsm_message_source
|
||||||
|
label: Message Source
|
||||||
|
|
||||||
|
parameters:
|
||||||
|
- id: messages
|
||||||
|
label: Messages
|
||||||
|
dtype: raw
|
||||||
|
default: '["02 04 01 00 00 00 c9 00 00 1d 3c e5 02 00 01 00 15 06 21 00 01 f0
|
||||||
|
2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b",
|
||||||
|
|
||||||
|
"02 04 01 00 00 00 ca 00 00 1d 3c e9 02 00 02 00 15 06 21 00 01 f0 2b 2b 2b
|
||||||
|
2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b",
|
||||||
|
|
||||||
|
"02 04 01 00 00 00 cb 00 00 1d 3d 0e 01 00 00 00 59 06 1a 00 00 00 00 00 00
|
||||||
|
00 00 00 00 00 00 00 00 00 00 ff e5 04 00",
|
||||||
|
|
||||||
|
"02 04 01 00 00 00 cb 00 00 1d 3d 12 02 00 00 00 15 06 21 00 01 f0 2b 2b 2b
|
||||||
|
2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b"]'
|
||||||
|
hide: 'true'
|
||||||
|
|
||||||
|
outputs:
|
||||||
|
- domain: message
|
||||||
|
id: msgs
|
||||||
|
|
||||||
|
templates:
|
||||||
|
imports: import grgsm
|
||||||
|
make: grgsm.message_source(${messages})
|
||||||
|
|
||||||
|
documentation: |-
|
||||||
|
This block is a basic message source for testing purposes.
|
||||||
|
|
||||||
|
It takes a list of strings as input, where each string
|
||||||
|
is a whitespace-separated list of hexadecimal values representing the data bytes of a message including the gsmtap header.
|
||||||
|
|
||||||
|
Such strings can be obtained using the message printer with option "Print GSMTap header"
|
||||||
|
|
||||||
|
file_format: 1
|
|
@ -1,32 +0,0 @@
|
||||||
<?xml version="1.0"?>
|
|
||||||
<block>
|
|
||||||
<name>Message Source</name>
|
|
||||||
<key>gsm_message_source</key>
|
|
||||||
<import>import grgsm</import>
|
|
||||||
<make>grgsm.message_source($messages)</make>
|
|
||||||
|
|
||||||
<param>
|
|
||||||
<name>Messages</name>
|
|
||||||
<key>messages</key>
|
|
||||||
<value>["02 04 01 00 00 00 c9 00 00 1d 3c e5 02 00 01 00 15 06 21 00 01 f0 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b",
|
|
||||||
"02 04 01 00 00 00 ca 00 00 1d 3c e9 02 00 02 00 15 06 21 00 01 f0 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b",
|
|
||||||
"02 04 01 00 00 00 cb 00 00 1d 3d 0e 01 00 00 00 59 06 1a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ff e5 04 00",
|
|
||||||
"02 04 01 00 00 00 cb 00 00 1d 3d 12 02 00 00 00 15 06 21 00 01 f0 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b"]</value>
|
|
||||||
<type>raw</type>
|
|
||||||
<hide>true</hide>
|
|
||||||
</param>
|
|
||||||
|
|
||||||
<source>
|
|
||||||
<name>msgs</name>
|
|
||||||
<type>message</type>
|
|
||||||
</source>
|
|
||||||
|
|
||||||
<doc>
|
|
||||||
This block is a basic message source for testing purposes.
|
|
||||||
|
|
||||||
It takes a list of strings as input, where each string
|
|
||||||
is a whitespace-separated list of hexadecimal values representing the data bytes of a message including the gsmtap header.
|
|
||||||
|
|
||||||
Such strings can be obtained using the message printer with option "Print GSMTap header"
|
|
||||||
</doc>
|
|
||||||
</block>
|
|
|
@ -18,12 +18,13 @@
|
||||||
# Boston, MA 02110-1301, USA.
|
# Boston, MA 02110-1301, USA.
|
||||||
|
|
||||||
install(FILES
|
install(FILES
|
||||||
gsm_input.xml
|
gsm_input.block.yml
|
||||||
gsm_receiver.xml
|
gsm_receiver.block.yml
|
||||||
gsm_receiver_with_uplink.xml
|
gsm_receiver_with_uplink.block.yml
|
||||||
gsm_fcch_burst_tagger.xml
|
gsm_fcch_burst_tagger.block.yml
|
||||||
gsm_sch_detector.xml
|
gsm_sch_detector.block.yml
|
||||||
gsm_fcch_detector.xml
|
gsm_fcch_detector.block.yml
|
||||||
gsm_cx_channel_hopper.xml
|
gsm_cx_channel_hopper.block.yml
|
||||||
gsm_clock_offset_control.xml DESTINATION share/gnuradio/grc/blocks
|
gsm_clock_offset_control.block.yml
|
||||||
|
DESTINATION share/gnuradio/grc/blocks
|
||||||
)
|
)
|
||||||
|
|
|
@ -0,0 +1,35 @@
|
||||||
|
# auto-generated by grc.converter
|
||||||
|
|
||||||
|
id: gsm_clock_offset_control
|
||||||
|
label: GSM Clock Offset Control
|
||||||
|
|
||||||
|
parameters:
|
||||||
|
- id: fc
|
||||||
|
label: fc
|
||||||
|
dtype: float
|
||||||
|
default: fc
|
||||||
|
- id: osr
|
||||||
|
label: OSR
|
||||||
|
dtype: int
|
||||||
|
default: osr
|
||||||
|
- id: samp_rate
|
||||||
|
label: samp_rate
|
||||||
|
dtype: float
|
||||||
|
default: samp_rate
|
||||||
|
|
||||||
|
inputs:
|
||||||
|
- domain: message
|
||||||
|
id: measurements
|
||||||
|
|
||||||
|
outputs:
|
||||||
|
- domain: message
|
||||||
|
id: ctrl
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
templates:
|
||||||
|
imports: import grgsm
|
||||||
|
make: grgsm.clock_offset_control(${fc}, ${samp_rate}, ${osr})
|
||||||
|
callbacks:
|
||||||
|
- set_fc(${fc})
|
||||||
|
|
||||||
|
file_format: 1
|
|
@ -1,38 +0,0 @@
|
||||||
<?xml version="1.0"?>
|
|
||||||
<block>
|
|
||||||
<name>GSM Clock Offset Control</name>
|
|
||||||
<key>gsm_clock_offset_control</key>
|
|
||||||
<import>import grgsm</import>
|
|
||||||
<make>grgsm.clock_offset_control($fc, $samp_rate, $osr)</make>
|
|
||||||
<callback>set_fc($fc)</callback>
|
|
||||||
<param>
|
|
||||||
<name>fc</name>
|
|
||||||
<key>fc</key>
|
|
||||||
<value>fc</value>
|
|
||||||
<type>float</type>
|
|
||||||
</param>
|
|
||||||
<param>
|
|
||||||
<name>OSR</name>
|
|
||||||
<key>osr</key>
|
|
||||||
<value>osr</value>
|
|
||||||
<type>int</type>
|
|
||||||
</param>
|
|
||||||
|
|
||||||
<param>
|
|
||||||
<name>samp_rate</name>
|
|
||||||
<key>samp_rate</key>
|
|
||||||
<value>samp_rate</value>
|
|
||||||
<type>float</type>
|
|
||||||
</param>
|
|
||||||
|
|
||||||
<sink>
|
|
||||||
<name>measurements</name>
|
|
||||||
<type>message</type>
|
|
||||||
</sink>
|
|
||||||
|
|
||||||
<source>
|
|
||||||
<name>ctrl</name>
|
|
||||||
<type>message</type>
|
|
||||||
<optional>1</optional>
|
|
||||||
</source>
|
|
||||||
</block>
|
|
|
@ -0,0 +1,30 @@
|
||||||
|
# auto-generated by grc.converter
|
||||||
|
|
||||||
|
id: gsm_cx_channel_hopper
|
||||||
|
label: CX Channel Hopper
|
||||||
|
|
||||||
|
parameters:
|
||||||
|
- id: ma
|
||||||
|
label: MA
|
||||||
|
dtype: int_vector
|
||||||
|
default: '[]'
|
||||||
|
- id: maio
|
||||||
|
label: MAIO
|
||||||
|
dtype: int
|
||||||
|
- id: hsn
|
||||||
|
label: HSN
|
||||||
|
dtype: int
|
||||||
|
|
||||||
|
inputs:
|
||||||
|
- domain: message
|
||||||
|
id: CX
|
||||||
|
|
||||||
|
outputs:
|
||||||
|
- domain: message
|
||||||
|
id: bursts
|
||||||
|
|
||||||
|
templates:
|
||||||
|
imports: import grgsm
|
||||||
|
make: grgsm.cx_channel_hopper(${ma}, ${maio}, ${hsn})
|
||||||
|
|
||||||
|
file_format: 1
|
|
@ -1,35 +0,0 @@
|
||||||
<?xml version="1.0"?>
|
|
||||||
<block>
|
|
||||||
<name>CX Channel Hopper</name>
|
|
||||||
<key>gsm_cx_channel_hopper</key>
|
|
||||||
<import>import grgsm</import>
|
|
||||||
<make>grgsm.cx_channel_hopper($ma, $maio, $hsn)</make>
|
|
||||||
<param>
|
|
||||||
<name>MA</name>
|
|
||||||
<key>ma</key>
|
|
||||||
<value>[]</value>
|
|
||||||
<type>int_vector</type>
|
|
||||||
</param>
|
|
||||||
|
|
||||||
<param>
|
|
||||||
<name>MAIO</name>
|
|
||||||
<key>maio</key>
|
|
||||||
<type>int</type>
|
|
||||||
</param>
|
|
||||||
|
|
||||||
<param>
|
|
||||||
<name>HSN</name>
|
|
||||||
<key>hsn</key>
|
|
||||||
<type>int</type>
|
|
||||||
</param>
|
|
||||||
|
|
||||||
<sink>
|
|
||||||
<name>CX</name>
|
|
||||||
<type>message</type>
|
|
||||||
</sink>
|
|
||||||
|
|
||||||
<source>
|
|
||||||
<name>bursts</name>
|
|
||||||
<type>message</type>
|
|
||||||
</source>
|
|
||||||
</block>
|
|
|
@ -0,0 +1,26 @@
|
||||||
|
# auto-generated by grc.converter
|
||||||
|
|
||||||
|
id: gsm_fcch_burst_tagger
|
||||||
|
label: FCCH Burst Tagger
|
||||||
|
|
||||||
|
parameters:
|
||||||
|
- id: OSR
|
||||||
|
label: OSR
|
||||||
|
dtype: int
|
||||||
|
|
||||||
|
inputs:
|
||||||
|
- domain: stream
|
||||||
|
dtype: complex
|
||||||
|
- label: threshold
|
||||||
|
domain: stream
|
||||||
|
dtype: float
|
||||||
|
|
||||||
|
outputs:
|
||||||
|
- domain: stream
|
||||||
|
dtype: complex
|
||||||
|
|
||||||
|
templates:
|
||||||
|
imports: import grgsm
|
||||||
|
make: grgsm.fcch_burst_tagger(${OSR})
|
||||||
|
|
||||||
|
file_format: 1
|
|
@ -1,27 +0,0 @@
|
||||||
<?xml version="1.0"?>
|
|
||||||
<block>
|
|
||||||
<name>FCCH Burst Tagger</name>
|
|
||||||
<key>gsm_fcch_burst_tagger</key>
|
|
||||||
<import>import grgsm</import>
|
|
||||||
<make>grgsm.fcch_burst_tagger($OSR)</make>
|
|
||||||
<param>
|
|
||||||
<name>OSR</name>
|
|
||||||
<key>OSR</key>
|
|
||||||
<type>int</type>
|
|
||||||
</param>
|
|
||||||
|
|
||||||
<sink>
|
|
||||||
<name>in</name>
|
|
||||||
<type>complex</type>
|
|
||||||
</sink>
|
|
||||||
|
|
||||||
<sink>
|
|
||||||
<name>threshold</name>
|
|
||||||
<type>float</type>
|
|
||||||
</sink>
|
|
||||||
|
|
||||||
<source>
|
|
||||||
<name>out</name>
|
|
||||||
<type>complex</type>
|
|
||||||
</source>
|
|
||||||
</block>
|
|
|
@ -0,0 +1,32 @@
|
||||||
|
# auto-generated by grc.converter
|
||||||
|
|
||||||
|
id: gsm_fcch_detector
|
||||||
|
label: FCCH Bursts Detector
|
||||||
|
|
||||||
|
parameters:
|
||||||
|
- id: OSR
|
||||||
|
label: OverSamplingRatio
|
||||||
|
dtype: int
|
||||||
|
default: '4'
|
||||||
|
|
||||||
|
inputs:
|
||||||
|
- domain: stream
|
||||||
|
dtype: complex
|
||||||
|
vlen: 1
|
||||||
|
|
||||||
|
outputs:
|
||||||
|
- domain: stream
|
||||||
|
dtype: complex
|
||||||
|
vlen: 1
|
||||||
|
|
||||||
|
templates:
|
||||||
|
imports: import grgsm
|
||||||
|
make: grgsm.fcch_detector(${OSR})
|
||||||
|
callbacks:
|
||||||
|
- set_OSR(${OSR})
|
||||||
|
|
||||||
|
documentation: |-
|
||||||
|
Piotr Krysik
|
||||||
|
Detects positions of FCCH bursts. At the end of each detected FCCH burst adds to the stream a tag with key "fcch" and value which is a frequency offset estimate. The input sampling frequency should be integer multiply of GSM GMKS symbol rate - 1625000/6 Hz.
|
||||||
|
|
||||||
|
file_format: 1
|
|
@ -1,27 +0,0 @@
|
||||||
<?xml version="1.0"?>
|
|
||||||
<block>
|
|
||||||
<name>FCCH Bursts Detector</name>
|
|
||||||
<key>gsm_fcch_detector</key>
|
|
||||||
<import>import grgsm</import>
|
|
||||||
<make>grgsm.fcch_detector($OSR)</make>
|
|
||||||
<callback>set_OSR($OSR)</callback>
|
|
||||||
<param>
|
|
||||||
<name>OverSamplingRatio</name>
|
|
||||||
<key>OSR</key>
|
|
||||||
<value>4</value>
|
|
||||||
<type>int</type>
|
|
||||||
</param>
|
|
||||||
<sink>
|
|
||||||
<name>in</name>
|
|
||||||
<type>complex</type>
|
|
||||||
<vlen>1</vlen>
|
|
||||||
</sink>
|
|
||||||
<source>
|
|
||||||
<name>out</name>
|
|
||||||
<type>complex</type>
|
|
||||||
<vlen>1</vlen>
|
|
||||||
</source>
|
|
||||||
<doc>Piotr Krysik
|
|
||||||
Detects positions of FCCH bursts. At the end of each detected FCCH burst adds to the stream a tag with key "fcch" and value which is a frequency offset estimate. The input sampling frequency should be integer multiply of GSM GMKS symbol rate - 1625000/6 Hz.</doc>
|
|
||||||
<grc_source>/home/piotr/Odbiornik_gsm/gr-gsm/examples/gsm_fcch_detector.grc</grc_source>
|
|
||||||
</block>
|
|
|
@ -0,0 +1,60 @@
|
||||||
|
# auto-generated by grc.converter
|
||||||
|
|
||||||
|
id: gsm_input
|
||||||
|
label: GSM Input Adaptor
|
||||||
|
|
||||||
|
parameters:
|
||||||
|
- id: ppm
|
||||||
|
label: ppm
|
||||||
|
dtype: float
|
||||||
|
default: ppm
|
||||||
|
hide: part
|
||||||
|
- id: osr
|
||||||
|
label: OSR
|
||||||
|
dtype: int
|
||||||
|
default: osr
|
||||||
|
hide: part
|
||||||
|
- id: fc
|
||||||
|
label: fc
|
||||||
|
dtype: float
|
||||||
|
default: fc
|
||||||
|
hide: part
|
||||||
|
- id: samp_rate_in
|
||||||
|
label: samp_rate_in
|
||||||
|
dtype: float
|
||||||
|
default: samp_rate_in
|
||||||
|
hide: part
|
||||||
|
|
||||||
|
inputs:
|
||||||
|
- domain: stream
|
||||||
|
dtype: complex
|
||||||
|
vlen: 1
|
||||||
|
- domain: message
|
||||||
|
id: ctrl_in
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
outputs:
|
||||||
|
- domain: stream
|
||||||
|
dtype: complex
|
||||||
|
vlen: 1
|
||||||
|
|
||||||
|
templates:
|
||||||
|
imports: import grgsm
|
||||||
|
make: |-
|
||||||
|
grgsm.gsm_input(
|
||||||
|
ppm=${ppm},
|
||||||
|
osr=${osr},
|
||||||
|
fc=${fc},
|
||||||
|
samp_rate_in=${samp_rate_in},
|
||||||
|
)
|
||||||
|
callbacks:
|
||||||
|
- set_ppm(${ppm})
|
||||||
|
- set_osr(${osr})
|
||||||
|
- set_fc(${fc})
|
||||||
|
- set_samp_rate_in(${samp_rate_in})
|
||||||
|
|
||||||
|
documentation: |-
|
||||||
|
Piotr Krysik
|
||||||
|
Adaptor of input stream for the GSM receiver. Contains frequency offset corrector and resampler to correct carrier frequency and sampling frequency offsets. At the end it has LP filter for filtering of a GSM channel.
|
||||||
|
|
||||||
|
file_format: 1
|
|
@ -1,61 +0,0 @@
|
||||||
<block>
|
|
||||||
<name>GSM Input Adaptor</name>
|
|
||||||
<key>gsm_input</key>
|
|
||||||
<category></category>
|
|
||||||
<import>import grgsm</import>
|
|
||||||
<make>grgsm.gsm_input(
|
|
||||||
ppm=$ppm,
|
|
||||||
osr=$osr,
|
|
||||||
fc=$fc,
|
|
||||||
samp_rate_in=$samp_rate_in,
|
|
||||||
)</make>
|
|
||||||
<callback>set_ppm($ppm)</callback>
|
|
||||||
<callback>set_osr($osr)</callback>
|
|
||||||
<callback>set_fc($fc)</callback>
|
|
||||||
<callback>set_samp_rate_in($samp_rate_in)</callback>
|
|
||||||
<param>
|
|
||||||
<name>ppm</name>
|
|
||||||
<key>ppm</key>
|
|
||||||
<value>ppm</value>
|
|
||||||
<type>float</type>
|
|
||||||
<hide>part</hide>
|
|
||||||
</param>
|
|
||||||
<param>
|
|
||||||
<name>OSR</name>
|
|
||||||
<key>osr</key>
|
|
||||||
<value>osr</value>
|
|
||||||
<type>int</type>
|
|
||||||
<hide>part</hide>
|
|
||||||
</param>
|
|
||||||
<param>
|
|
||||||
<name>fc</name>
|
|
||||||
<key>fc</key>
|
|
||||||
<value>fc</value>
|
|
||||||
<type>float</type>
|
|
||||||
<hide>part</hide>
|
|
||||||
</param>
|
|
||||||
<param>
|
|
||||||
<name>samp_rate_in</name>
|
|
||||||
<key>samp_rate_in</key>
|
|
||||||
<value>samp_rate_in</value>
|
|
||||||
<type>float</type>
|
|
||||||
<hide>part</hide>
|
|
||||||
</param>
|
|
||||||
<sink>
|
|
||||||
<name>in</name>
|
|
||||||
<type>complex</type>
|
|
||||||
<vlen>1</vlen>
|
|
||||||
</sink>
|
|
||||||
<sink>
|
|
||||||
<name>ctrl_in</name>
|
|
||||||
<type>message</type>
|
|
||||||
<optional>True</optional>
|
|
||||||
</sink>
|
|
||||||
<source>
|
|
||||||
<name>out</name>
|
|
||||||
<type>complex</type>
|
|
||||||
<vlen>1</vlen>
|
|
||||||
</source>
|
|
||||||
<doc>Piotr Krysik
|
|
||||||
Adaptor of input stream for the GSM receiver. Contains frequency offset corrector and resampler to correct carrier frequency and sampling frequency offsets. At the end it has LP filter for filtering of a GSM channel.</doc>
|
|
||||||
</block>
|
|
|
@ -0,0 +1,49 @@
|
||||||
|
# auto-generated by grc.converter
|
||||||
|
|
||||||
|
id: gsm_receiver
|
||||||
|
label: GSM Receiver
|
||||||
|
|
||||||
|
parameters:
|
||||||
|
- id: osr
|
||||||
|
label: Oversampling ratio
|
||||||
|
dtype: int
|
||||||
|
default: '4'
|
||||||
|
- id: cell_allocation
|
||||||
|
label: Cell allocation
|
||||||
|
dtype: float_vector
|
||||||
|
default: '[0]'
|
||||||
|
hide: part
|
||||||
|
- id: tseq_nums
|
||||||
|
label: TSEQ numbers
|
||||||
|
dtype: int_vector
|
||||||
|
default: '[]'
|
||||||
|
hide: part
|
||||||
|
- id: num_streams
|
||||||
|
label: Num Streams
|
||||||
|
dtype: int
|
||||||
|
default: '1'
|
||||||
|
hide: part
|
||||||
|
|
||||||
|
inputs:
|
||||||
|
- domain: stream
|
||||||
|
dtype: complex
|
||||||
|
multiplicity: ${ num_streams }
|
||||||
|
|
||||||
|
outputs:
|
||||||
|
- domain: message
|
||||||
|
id: C0
|
||||||
|
optional: true
|
||||||
|
- domain: message
|
||||||
|
id: CX
|
||||||
|
optional: true
|
||||||
|
- domain: message
|
||||||
|
id: measurements
|
||||||
|
optional: true
|
||||||
|
asserts:
|
||||||
|
- ${ num_streams >= 0 }
|
||||||
|
|
||||||
|
templates:
|
||||||
|
imports: import grgsm
|
||||||
|
make: grgsm.receiver(${osr}, ${cell_allocation}, ${tseq_nums}, False)
|
||||||
|
|
||||||
|
file_format: 1
|
|
@ -1,63 +0,0 @@
|
||||||
<?xml version="1.0"?>
|
|
||||||
<block>
|
|
||||||
<name>GSM Receiver</name>
|
|
||||||
<key>gsm_receiver</key>
|
|
||||||
<import>import grgsm</import>
|
|
||||||
<make>grgsm.receiver($osr, $cell_allocation, $tseq_nums, False)</make>
|
|
||||||
|
|
||||||
<param>
|
|
||||||
<name>Oversampling ratio</name>
|
|
||||||
<key>osr</key>
|
|
||||||
<value>4</value>
|
|
||||||
<type>int</type>
|
|
||||||
</param>
|
|
||||||
|
|
||||||
<param>
|
|
||||||
<name>Cell allocation</name>
|
|
||||||
<key>cell_allocation</key>
|
|
||||||
<value>[0]</value>
|
|
||||||
<type>float_vector</type>
|
|
||||||
<hide>part</hide>
|
|
||||||
</param>
|
|
||||||
|
|
||||||
<param>
|
|
||||||
<name>TSEQ numbers</name>
|
|
||||||
<key>tseq_nums</key>
|
|
||||||
<value>[]</value>
|
|
||||||
<type>int_vector</type>
|
|
||||||
<hide>part</hide>
|
|
||||||
</param>
|
|
||||||
|
|
||||||
<param>
|
|
||||||
<name>Num Streams</name>
|
|
||||||
<key>num_streams</key>
|
|
||||||
<value>1</value>
|
|
||||||
<type>int</type>
|
|
||||||
<hide>part</hide>
|
|
||||||
</param>
|
|
||||||
<check>$num_streams >= 0</check>
|
|
||||||
|
|
||||||
<sink>
|
|
||||||
<name>in</name>
|
|
||||||
<type>complex</type>
|
|
||||||
<nports>$num_streams</nports>
|
|
||||||
</sink>
|
|
||||||
|
|
||||||
<source>
|
|
||||||
<name>C0</name>
|
|
||||||
<type>message</type>
|
|
||||||
<optional>1</optional>
|
|
||||||
</source>
|
|
||||||
|
|
||||||
<source>
|
|
||||||
<name>CX</name>
|
|
||||||
<type>message</type>
|
|
||||||
<optional>1</optional>
|
|
||||||
</source>
|
|
||||||
|
|
||||||
<source>
|
|
||||||
<name>measurements</name>
|
|
||||||
<type>message</type>
|
|
||||||
<optional>1</optional>
|
|
||||||
</source>
|
|
||||||
</block>
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue