Corrected setting of header fields in the universal demapper
diff --git a/lib/demapping/universal_ctrl_chans_demapper_impl.cc b/lib/demapping/universal_ctrl_chans_demapper_impl.cc
index 6754e57..dc1670d 100644
--- a/lib/demapping/universal_ctrl_chans_demapper_impl.cc
+++ b/lib/demapping/universal_ctrl_chans_demapper_impl.cc
@@ -73,7 +73,7 @@
         std::copy(uplink_starts_fn_mod51.begin(), uplink_starts_fn_mod51.end(), d_uplink_starts_fn_mod51.begin());
         std::copy(uplink_channel_types.begin(), uplink_channel_types.end(), d_uplink_channel_types.begin());
         std::copy(uplink_subslots.begin(), uplink_subslots.end(), d_uplink_subslots.begin());
-       
+        
         message_port_register_in(pmt::mp("bursts"));
         set_msg_handler(pmt::mp("bursts"), boost::bind(&universal_ctrl_chans_demapper_impl::filter_ctrl_chans, this, _1));
         message_port_register_out(pmt::mp("bursts"));
@@ -86,10 +86,11 @@
     {
     }
     
-    void universal_ctrl_chans_demapper_impl::filter_ctrl_chans(pmt::pmt_t msg)
+    void universal_ctrl_chans_demapper_impl::filter_ctrl_chans(pmt::pmt_t burst_in)
     {
-        pmt::pmt_t header_plus_burst = pmt::cdr(msg);
-        gsmtap_hdr * header = (gsmtap_hdr *)pmt::blob_data(header_plus_burst);
+        pmt::pmt_t header_plus_burst = pmt::cdr(burst_in);
+        int8_t * burst_in_int8 = (int8_t *)pmt::blob_data(header_plus_burst);        
+        gsmtap_hdr * header = (gsmtap_hdr *)(burst_in_int8);
 
         if(header->timeslot==d_timeslot_nr)
         {
@@ -101,14 +102,15 @@
             
             uint32_t frame_nr = be32toh(header->frame_number); //get frame number
             uint32_t fn_mod51 = frame_nr % 51; //frame number modulo 51
+            uint32_t fn_mod102 = frame_nr % 102; //frame number modulo 102
             
-            //crate new message
-            int8_t new_msg[sizeof(gsmtap_hdr)+BURST_SIZE];
-            gsmtap_hdr * new_hdr = (gsmtap_hdr*)new_msg;
-            memcpy(new_msg, header, sizeof(gsmtap_hdr)+BURST_SIZE);
-            pmt::pmt_t msg_binary_blob = pmt::make_blob(new_msg,sizeof(gsmtap_hdr)+BURST_SIZE);
-            pmt::pmt_t msg_out = pmt::cons(pmt::PMT_NIL, msg_binary_blob);
-
+            //create new burst
+            int8_t burst_tmp[sizeof(gsmtap_hdr)+BURST_SIZE];
+            memcpy(burst_tmp, burst_in_int8, sizeof(gsmtap_hdr)+BURST_SIZE);
+            pmt::pmt_t msg_binary_blob = pmt::make_blob(burst_tmp,sizeof(gsmtap_hdr)+BURST_SIZE);
+            pmt::pmt_t burst_out = pmt::cons(pmt::PMT_NIL, msg_binary_blob);
+            gsmtap_hdr * new_header = (gsmtap_hdr *)pmt::blob_data(msg_binary_blob);
+                        
             //get information if burst is from uplink or downlink            
             bool uplink_burst = (be16toh(header->arfcn) & 0x4000) ? true : false;
 
@@ -129,19 +131,22 @@
                       
             uint32_t fn51_start = starts_fn_mod51[fn_mod51];
             uint32_t fn51_stop = fn51_start + 3;
-            uint32_t ch_type = channel_types[fn_mod51];
 
+            //set type
+            new_header->type = GSMTAP_TYPE_UM;
+            //set type of the channel
+            uint32_t ch_type = channel_types[fn_mod51];
             if(ch_type != 0)
             {
-                new_hdr->sub_type = ch_type;
+                new_header->sub_type = ch_type;
             }
-            new_hdr->sub_slot = subslots[fn_mod51 + (51 * (frame_nr % 2))];
+            new_header->sub_slot = subslots[fn_mod51 + (51 * (frame_nr % 2))];
             
             if(fn_mod51>=fn51_start && fn_mod51<=fn51_stop)
             {
                 uint32_t ii = fn_mod51 - fn51_start;
                 frame_numbers[ii] = frame_nr;
-                bursts[ii] = msg_out;
+                bursts[ii] = burst_out;
             }
             
             if(fn_mod51==fn51_stop)
@@ -163,7 +168,7 @@
                     {
                         message_port_pub(pmt::mp("bursts"), bursts[jj]);
                     }
-                } 
+                }
             }
         }
     }