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 */ |