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:
Vasil Velichkov 2019-08-28 18:46:34 +00:00 committed by Piotr Krysik
parent 1789ae28ee
commit 14ea82d227
118 changed files with 1888 additions and 2154 deletions

View File

@ -26,5 +26,5 @@ add_subdirectory(misc_utils)
add_subdirectory(transmitter)
add_subdirectory(trx)
install(FILES
gsm_block_tree.xml DESTINATION share/gnuradio/grc/blocks
gsm.tree.yml DESTINATION share/gnuradio/grc/blocks
)

View File

@ -18,8 +18,8 @@
# Boston, MA 02110-1301, USA.
install(FILES
gsm_control_channels_decoder.xml
gsm_tch_f_decoder.xml
gsm_tch_h_decoder.xml
gsm_control_channels_decoder.block.yml
gsm_tch_f_decoder.block.yml
gsm_tch_h_decoder.block.yml
DESTINATION share/gnuradio/grc/blocks
)

View File

@ -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

View File

@ -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>

View File

@ -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

View File

@ -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>

View File

@ -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

View File

@ -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() &gt; -1 and $sub_channel() &lt; 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>

View File

@ -18,5 +18,6 @@
# Boston, MA 02110-1301, USA.
install(FILES
gsm_decryption.xml DESTINATION share/gnuradio/grc/blocks
gsm_decryption.block.yml
DESTINATION share/gnuradio/grc/blocks
)

View File

@ -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

View File

@ -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 &gt; 0</check>
<check>$a5_version &lt; 5</check>
<sink>
<name>bursts</name>
<type>message</type>
</sink>
<source>
<name>bursts</name>
<type>message</type>
</source>
</block>

View File

@ -18,11 +18,11 @@
# Boston, MA 02110-1301, USA.
install(FILES
gsm_universal_ctrl_chans_demapper.xml
gsm_bcch_ccch_demapper.xml
gsm_bcch_ccch_sdcch4_demapper.xml
gsm_sdcch8_demapper.xml
gsm_tch_f_chans_demapper.xml
gsm_tch_h_chans_demapper.xml
gsm_universal_ctrl_chans_demapper.block.yml
gsm_bcch_ccch_demapper.block.yml
gsm_bcch_ccch_sdcch4_demapper.block.yml
gsm_sdcch8_demapper.block.yml
gsm_tch_f_chans_demapper.block.yml
gsm_tch_h_chans_demapper.block.yml
DESTINATION share/gnuradio/grc/blocks
)

View File

@ -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

View File

@ -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>

View File

@ -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

View File

@ -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>

View File

@ -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

View File

@ -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>

View File

@ -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

View File

@ -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>

View File

@ -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

View File

@ -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() &gt; -1 and $tch_h_channel() &lt; 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>

View File

@ -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

View File

@ -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>

View File

@ -18,12 +18,13 @@
# Boston, MA 02110-1301, USA.
install(FILES
gsm_burst_timeslot_splitter.xml
gsm_burst_fnr_filter.xml
gsm_burst_timeslot_filter.xml
gsm_burst_type_filter.xml
gsm_dummy_burst_filter.xml
gsm_burst_sdcch_subslot_splitter.xml
gsm_burst_sdcch_subslot_filter.xml
gsm_uplink_downlink_splitter.xml DESTINATION share/gnuradio/grc/blocks
gsm_burst_timeslot_splitter.block.yml
gsm_burst_fnr_filter.block.yml
gsm_burst_timeslot_filter.block.yml
gsm_burst_type_filter.block.yml
gsm_dummy_burst_filter.block.yml
gsm_burst_sdcch_subslot_splitter.block.yml
gsm_burst_sdcch_subslot_filter.block.yml
gsm_uplink_downlink_splitter.block.yml
DESTINATION share/gnuradio/grc/blocks
)

View File

@ -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

View File

@ -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>

View File

@ -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

View File

@ -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>

View File

@ -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

View File

@ -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>

View File

@ -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

View File

@ -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>

View File

@ -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

View File

@ -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>

View File

@ -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

View File

@ -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>

View File

@ -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

View File

@ -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>

View File

@ -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

View File

@ -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>

58
grc/gsm.tree.yml Normal file
View File

@ -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

View File

@ -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>

View File

@ -18,22 +18,22 @@
# Boston, MA 02110-1301, USA.
install(FILES
gsm_extract_system_info.xml
gsm_extract_immediate_assignment.xml
gsm_collect_system_info.xml
gsm_extract_cmc.xml
gsm_extract_assignment_cmd.xml
gsm_controlled_rotator_cc.xml
gsm_message_printer.xml
gsm_bursts_printer.xml
gsm_clock_offset_corrector_tagged.xml
gsm_tmsi_dumper.xml
gsm_burst_file_sink.xml
gsm_burst_file_source.xml
gsm_message_file_sink.xml
gsm_message_file_source.xml
gsm_msg_to_tag.xml
gsm_controlled_fractional_resampler_cc.xml
gsm_burst_to_fn_time.xml
gsm_extract_system_info.block.yml
gsm_extract_immediate_assignment.block.yml
gsm_collect_system_info.block.yml
gsm_extract_cmc.block.yml
gsm_extract_assignment_cmd.block.yml
gsm_controlled_rotator_cc.block.yml
gsm_message_printer.block.yml
gsm_bursts_printer.block.yml
gsm_clock_offset_corrector_tagged.block.yml
gsm_tmsi_dumper.block.yml
gsm_burst_file_sink.block.yml
gsm_burst_file_source.block.yml
gsm_message_file_sink.block.yml
gsm_message_file_source.block.yml
gsm_msg_to_tag.block.yml
gsm_controlled_fractional_resampler_cc.block.yml
gsm_burst_to_fn_time.block.yml
DESTINATION share/gnuradio/grc/blocks
)

View File

@ -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

View File

@ -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>

View File

@ -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

View File

@ -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>

View File

@ -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

View File

@ -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>

View File

@ -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

View File

@ -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>

View File

@ -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

View File

@ -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>

View File

@ -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

View File

@ -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>

View File

@ -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

View File

@ -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>

View File

@ -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

View File

@ -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>

View File

@ -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

View File

@ -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>

View File

@ -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

View File

@ -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>

View File

@ -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

View File

@ -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>

View File

@ -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

View File

@ -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>

View File

@ -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

View File

@ -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>

View File

@ -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

View File

@ -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>

View File

@ -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

View File

@ -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>

View File

@ -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

View File

@ -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>

View File

@ -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

View File

@ -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>

View File

@ -18,8 +18,9 @@
# Boston, MA 02110-1301, USA.
install(FILES
gsm_burst_source.xml
gsm_burst_sink.xml
gsm_message_source.xml
gsm_message_sink.xml DESTINATION share/gnuradio/grc/blocks
gsm_burst_source.block.xml
gsm_burst_sink.block.xml
gsm_message_source.block.xml
gsm_message_sink.block.xml
DESTINATION share/gnuradio/grc/blocks
)

View File

@ -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

View File

@ -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>

View File

@ -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

View File

@ -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>

View File

@ -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

View File

@ -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>

View File

@ -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

View File

@ -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>

View File

@ -18,12 +18,13 @@
# Boston, MA 02110-1301, USA.
install(FILES
gsm_input.xml
gsm_receiver.xml
gsm_receiver_with_uplink.xml
gsm_fcch_burst_tagger.xml
gsm_sch_detector.xml
gsm_fcch_detector.xml
gsm_cx_channel_hopper.xml
gsm_clock_offset_control.xml DESTINATION share/gnuradio/grc/blocks
gsm_input.block.yml
gsm_receiver.block.yml
gsm_receiver_with_uplink.block.yml
gsm_fcch_burst_tagger.block.yml
gsm_sch_detector.block.yml
gsm_fcch_detector.block.yml
gsm_cx_channel_hopper.block.yml
gsm_clock_offset_control.block.yml
DESTINATION share/gnuradio/grc/blocks
)

View File

@ -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

View File

@ -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>

View File

@ -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

View File

@ -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>

View File

@ -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

View File

@ -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>

View File

@ -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

View File

@ -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>

View File

@ -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

View File

@ -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>

View File

@ -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

View File

@ -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 &gt;= 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