Statistics
| Branch: | Tag: | Revision:

root / gr-pager / src / pager_flex_sync.h @ f003cdd0

History | View | Annotate | Download (3 kB)

1 aa0555b4 jcorgan
/*
2 aa0555b4 jcorgan
 * Copyright 2006 Free Software Foundation, Inc.
3 aa0555b4 jcorgan
 * 
4 aa0555b4 jcorgan
 * This file is part of GNU Radio
5 aa0555b4 jcorgan
 * 
6 aa0555b4 jcorgan
 * GNU Radio is free software; you can redistribute it and/or modify
7 aa0555b4 jcorgan
 * it under the terms of the GNU General Public License as published by
8 aa0555b4 jcorgan
 * the Free Software Foundation; either version 2, or (at your option)
9 aa0555b4 jcorgan
 * any later version.
10 aa0555b4 jcorgan
 * 
11 aa0555b4 jcorgan
 * GNU Radio is distributed in the hope that it will be useful,
12 aa0555b4 jcorgan
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 aa0555b4 jcorgan
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 aa0555b4 jcorgan
 * GNU General Public License for more details.
15 aa0555b4 jcorgan
 * 
16 aa0555b4 jcorgan
 * You should have received a copy of the GNU General Public License
17 aa0555b4 jcorgan
 * along with GNU Radio; see the file COPYING.  If not, write to
18 aa0555b4 jcorgan
 * the Free Software Foundation, Inc., 51 Franklin Street,
19 aa0555b4 jcorgan
 * Boston, MA 02110-1301, USA.
20 aa0555b4 jcorgan
 */
21 aa0555b4 jcorgan
22 f003cdd0 jcorgan
#ifndef INCLUDED_PAGER_FLEX_SYNC_H
23 f003cdd0 jcorgan
#define INCLUDED_PAGER_FLEX_SYNC_H
24 aa0555b4 jcorgan
25 aa0555b4 jcorgan
#include <gr_block.h>
26 aa0555b4 jcorgan
27 f003cdd0 jcorgan
class pager_flex_sync;
28 f003cdd0 jcorgan
typedef boost::shared_ptr<pager_flex_sync> pager_flex_sync_sptr;
29 aa0555b4 jcorgan
typedef std::vector<gr_int64> gr_int64_vector;
30 aa0555b4 jcorgan
31 f003cdd0 jcorgan
pager_flex_sync_sptr pager_make_flex_sync(int rate);
32 aa0555b4 jcorgan
33 aa0555b4 jcorgan
/*!
34 f003cdd0 jcorgan
 * \brief flex sync description
35 aa0555b4 jcorgan
 * \ingroup block
36 aa0555b4 jcorgan
 */
37 aa0555b4 jcorgan
38 f003cdd0 jcorgan
class pager_flex_sync : public gr_block
39 aa0555b4 jcorgan
{
40 aa0555b4 jcorgan
private:
41 aa0555b4 jcorgan
    // Constructors
42 f003cdd0 jcorgan
    friend pager_flex_sync_sptr pager_make_flex_sync(int rate);
43 f003cdd0 jcorgan
    pager_flex_sync(int rate);
44 aa0555b4 jcorgan
   
45 aa0555b4 jcorgan
    // State machine transitions
46 aa0555b4 jcorgan
    void enter_idle();
47 aa0555b4 jcorgan
    void enter_syncing();
48 aa0555b4 jcorgan
    void enter_sync1();
49 aa0555b4 jcorgan
    void enter_sync2();
50 aa0555b4 jcorgan
    void enter_data();
51 aa0555b4 jcorgan
52 aa0555b4 jcorgan
    int index_avg(int start, int end);
53 aa0555b4 jcorgan
    bool test_sync(unsigned char sym);
54 f003cdd0 jcorgan
    void parse_fiw();
55 f003cdd0 jcorgan
    int output_symbol(unsigned char sym);    
56 aa0555b4 jcorgan
    
57 aa0555b4 jcorgan
    // Simple state machine
58 f003cdd0 jcorgan
    enum state_t { ST_IDLE, ST_SYNCING, ST_SYNC1, ST_SYNC2, ST_DATA };
59 aa0555b4 jcorgan
    state_t d_state;     
60 aa0555b4 jcorgan
61 aa0555b4 jcorgan
    int d_rate;     // Incoming sample rate
62 aa0555b4 jcorgan
    int d_index;    // Index into current baud
63 aa0555b4 jcorgan
    int d_start;    // Start of good sync 
64 aa0555b4 jcorgan
    int d_center;   // Center of bit
65 aa0555b4 jcorgan
    int d_end;      // End of good sync
66 aa0555b4 jcorgan
    int d_count;    // Bit counter
67 aa0555b4 jcorgan
68 aa0555b4 jcorgan
    int d_mode;     // Current packet mode
69 aa0555b4 jcorgan
    int d_baudrate; // Current decoding baud rate
70 aa0555b4 jcorgan
    int d_levels;   // Current decoding levels
71 aa0555b4 jcorgan
    int d_spb;      // Current samples per baud
72 f003cdd0 jcorgan
    bool d_hibit;   // Alternating bit indicator for 3200 bps
73 f003cdd0 jcorgan
    
74 f003cdd0 jcorgan
    gr_int32 d_fiw; // Frame information word
75 f003cdd0 jcorgan
    int d_frame;    // Current FLEX frame
76 f003cdd0 jcorgan
    int d_cycle;    // Current FLEX cycle
77 f003cdd0 jcorgan
    int d_unknown1;
78 f003cdd0 jcorgan
    int d_unknown2;
79 f003cdd0 jcorgan
80 f003cdd0 jcorgan
    unsigned char d_bit_a;
81 f003cdd0 jcorgan
    unsigned char d_bit_b;
82 f003cdd0 jcorgan
    unsigned char d_bit_c;
83 f003cdd0 jcorgan
    unsigned char d_bit_d;
84 f003cdd0 jcorgan
    
85 f003cdd0 jcorgan
    unsigned char *d_phase_a;  
86 f003cdd0 jcorgan
    unsigned char *d_phase_b;
87 f003cdd0 jcorgan
    unsigned char *d_phase_c;
88 f003cdd0 jcorgan
    unsigned char *d_phase_d;
89 f003cdd0 jcorgan
    
90 aa0555b4 jcorgan
    gr_int64_vector d_sync; // Trial synchronizers
91 aa0555b4 jcorgan
92 aa0555b4 jcorgan
public:
93 aa0555b4 jcorgan
    void forecast(int noutput_items, gr_vector_int &inputs_required);
94 aa0555b4 jcorgan
95 aa0555b4 jcorgan
    int general_work(int noutput_items,
96 aa0555b4 jcorgan
                     gr_vector_int &ninput_items,
97 aa0555b4 jcorgan
                     gr_vector_const_void_star &input_items, 
98 aa0555b4 jcorgan
                     gr_vector_void_star &output_items);
99 aa0555b4 jcorgan
};
100 aa0555b4 jcorgan
101 f003cdd0 jcorgan
#endif /* INCLUDED_PAGER_FLEX_SYNC_H */