Add HR demapping
diff --git a/grc/demapping/gsm_tch_f_chans_demapper.xml b/grc/demapping/gsm_tch_f_chans_demapper.xml
index 23d77ee..c87776a 100644
--- a/grc/demapping/gsm_tch_f_chans_demapper.xml
+++ b/grc/demapping/gsm_tch_f_chans_demapper.xml
@@ -3,16 +3,41 @@
   <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>
+  <make>grgsm.tch_f_chans_demapper($timeslot_nr, $tch_type, $tch_h_channel)</make>
 
   <param>
-    <name>timeslot_nr</name>
+    <name>Timeslot</name>
     <key>timeslot_nr</key>
     <value>2</value>
     <type>int</type>
     <hide>part</hide>
   </param>
 
+  <param>
+    <name>TCH Type</name>
+    <key>tch_type</key>
+    <value>0</value>
+    <type>int</type>
+    <hide>part</hide>
+    <option>
+      <name>Full rate</name>
+      <key>0</key>
+    </option>
+    <option>
+      <name>Half rate</name>
+      <key>1</key>
+    </option>
+  </param>
+
+  <param>
+    <name>TCH/H Channel</name>
+    <key>tch_h_channel</key>
+    <value>0</value>
+    <type>int</type>
+    <hide>#if $tch_type() == 0 then 'all' else 'none'#</hide>
+  </param>
+  <check>$tch_h_channel() &gt; -1 and $tch_h_channel() &lt; 2</check>
+
   <sink>
     <name>bursts</name>
     <type>message</type>
diff --git a/include/grgsm/demapping/tch_f_chans_demapper.h b/include/grgsm/demapping/tch_f_chans_demapper.h
index c04c749..32bed30 100644
--- a/include/grgsm/demapping/tch_f_chans_demapper.h
+++ b/include/grgsm/demapping/tch_f_chans_demapper.h
@@ -48,7 +48,7 @@
        * class. gsm::tch_f_chans_demapper::make is the public interface for
        * creating new instances.
        */
-      static sptr make(unsigned int timeslot_nr);
+      static sptr make(unsigned int timeslot_nr, int tch_type, int tch_h_channel);
     };
 
   } // namespace gsm
diff --git a/lib/demapping/tch_f_chans_demapper_impl.cc b/lib/demapping/tch_f_chans_demapper_impl.cc
index 9865a47..0841fd2 100644
--- a/lib/demapping/tch_f_chans_demapper_impl.cc
+++ b/lib/demapping/tch_f_chans_demapper_impl.cc
@@ -109,11 +109,11 @@
         }
     }
 
-    void tch_f_chans_demapper_impl::sacch_tch_demapper(uint32_t fn_mod13, uint32_t fn_mod26, uint32_t frame_nr,
-                                                       pmt::pmt_t *d_bursts_sacch,
-                                                       uint32_t *d_frame_numbers_sacch, pmt::pmt_t d_bursts[3][8],
-                                                       uint32_t d_frame_numbers[3][8], pmt::pmt_t msg_out)
-    {
+void tch_f_chans_demapper_impl::sacch_tch_demapper(uint32_t fn_mod13, u_int32_t fn_mod26, uint32_t frame_nr,
+                                                   pmt::pmt_t *d_bursts_sacch,
+                                                   uint32_t *d_frame_numbers_sacch, pmt::pmt_t d_bursts[3][8],
+                                                   uint32_t d_frame_numbers[3][8], pmt::pmt_t msg_out)
+{
         bool frames_are_consecutive = true;
         if (fn_mod13 == 12)
         {
diff --git a/lib/demapping/tch_f_chans_demapper_impl.h b/lib/demapping/tch_f_chans_demapper_impl.h
index bef018d..7a546e7 100644
--- a/lib/demapping/tch_f_chans_demapper_impl.h
+++ b/lib/demapping/tch_f_chans_demapper_impl.h
@@ -32,6 +32,8 @@
     {
      private:
       unsigned int d_timeslot;
+      int d_tch_type;
+      int d_tch_h_channel;
       // Downlink
       uint32_t d_frame_numbers_dl[3][8];       // for checking consecutive frame numbers of tch
       uint32_t d_frame_numbers_sacch_dl[4];    // for checking consecutive frame numbers of sacch
@@ -49,7 +51,7 @@
                               uint32_t d_frame_numbers[3][8], pmt::pmt_t msg_out);
 
      public:
-      tch_f_chans_demapper_impl(unsigned int timeslot_nr);
+      tch_f_chans_demapper_impl(unsigned int timeslot_nr, int tch_type, int tch_h_channel);
       ~tch_f_chans_demapper_impl();
 
       void filter_tch_chans(pmt::pmt_t msg);