[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Commit-gnuradio] r3587 - gnuradio/branches/developers/jcorgan/pager/gr-
From: |
jcorgan |
Subject: |
[Commit-gnuradio] r3587 - gnuradio/branches/developers/jcorgan/pager/gr-pager/src |
Date: |
Tue, 19 Sep 2006 13:34:40 -0600 (MDT) |
Author: jcorgan
Date: 2006-09-19 13:34:40 -0600 (Tue, 19 Sep 2006)
New Revision: 3587
Modified:
gnuradio/branches/developers/jcorgan/pager/gr-pager/src/pager_flex_deframer.cc
gnuradio/branches/developers/jcorgan/pager/gr-pager/src/pager_flex_message.cc
gnuradio/branches/developers/jcorgan/pager/gr-pager/src/pager_flex_message.h
gnuradio/branches/developers/jcorgan/pager/gr-pager/src/pageri_flex_modes.cc
Log:
Work-in-progress
Modified:
gnuradio/branches/developers/jcorgan/pager/gr-pager/src/pager_flex_deframer.cc
===================================================================
---
gnuradio/branches/developers/jcorgan/pager/gr-pager/src/pager_flex_deframer.cc
2006-09-19 17:08:50 UTC (rev 3586)
+++
gnuradio/branches/developers/jcorgan/pager/gr-pager/src/pager_flex_deframer.cc
2006-09-19 19:34:40 UTC (rev 3587)
@@ -40,8 +40,8 @@
pager_flex_deframer::pager_flex_deframer(int rate) :
gr_block ("flex_deframer",
- gr_make_io_signature (1, 1, sizeof(unsigned char)),
- gr_make_io_signature (1, 1, sizeof(gr_int32))),
+ gr_make_io_signature (1, 1, sizeof(unsigned char)),
+ gr_make_io_signature (1, 1, sizeof(gr_int32))),
d_sync(rate/1600) // Maximum samples per baud
{
d_rate = rate;
@@ -137,7 +137,7 @@
d_end = d_index;
d_center = index_avg(d_start, d_end);
d_count = 0;
- fprintf(stderr, "SYNC1=%08X\n", flex_modes[d_mode].sync);
+// fprintf(stderr, "SYNC1=%08X\n", flex_modes[d_mode].sync);
}
void pager_flex_deframer::enter_sync2()
Modified:
gnuradio/branches/developers/jcorgan/pager/gr-pager/src/pager_flex_message.cc
===================================================================
---
gnuradio/branches/developers/jcorgan/pager/gr-pager/src/pager_flex_message.cc
2006-09-19 17:08:50 UTC (rev 3586)
+++
gnuradio/branches/developers/jcorgan/pager/gr-pager/src/pager_flex_message.cc
2006-09-19 19:34:40 UTC (rev 3587)
@@ -34,8 +34,8 @@
pager_flex_message::pager_flex_message() :
gr_block ("flex_message",
- gr_make_io_signature (1, 1, sizeof(gr_int32)),
- gr_make_io_signature (1, 1, sizeof(unsigned char)))
+ gr_make_io_signature (1, 1, sizeof(gr_int32)),
+ gr_make_io_signature (1, 1, sizeof(unsigned char)))
{
enter_start();
}
@@ -47,39 +47,79 @@
void pager_flex_message::enter_start()
{
d_state = ST_START;
- d_mode = -1;
+ d_mode = -1;
+ d_frame = -1;
+ d_cycle = -1;
+ d_unknown1 = 0;
+ d_unknown2 = 0;
}
void pager_flex_message::enter_fiw()
{
- d_state = ST_FIW;
+ d_state = ST_FIW;
}
void pager_flex_message::enter_data()
{
- d_state = ST_DATA;
- d_codewords = flex_modes[d_mode].phases*88;
+ d_state = ST_DATA;
+ d_codewords = flex_modes[d_mode].phases*88;
}
void pager_flex_message::enter_output()
{
- d_state = ST_OUTPUT;
+ d_state = ST_OUTPUT;
}
+unsigned char reverse_bits8(unsigned char val)
+{
+ // This method was attributed to Rich Schroeppel in the Programming
+ // Hacks section of Beeler, M., Gosper, R. W., and Schroeppel, R.
+ // HAKMEM. MIT AI Memo 239, Feb. 29, 1972.
+ //
+ // Reverses 8 bits in 5 machine operations with 64 bit arch
+ return (val * 0x0202020202ULL & 0x010884422010ULL) % 1023;
+}
+
+void print_binary(int bits, gr_int32 val)
+{
+ val = val << (32-bits);
+ for (int i = 0; i < bits; i++) {
+ if ((val & 0x80000000) >> 31)
+ putchar('1');
+ else
+ putchar('0');
+ val = val << 1;
+ }
+}
+
void pager_flex_message::parse_fiw(gr_int32 fiw)
{
- printf("FIW (raw) = %08X\n", fiw);
+ // Cycle is bits 27-24, reversed and flipped
+ d_cycle = reverse_bits8((fiw >> 20) & 0xF0)^0x0F;
+
+ // Frame is bits 23-17, reversed and flipped
+ d_frame = reverse_bits8((fiw >> 16) & 0xFE)^0x7F;
+
+ // Bits 16-11 are some sort of marker
+ d_unknown1 = (fiw >> 11) & 0x3F;
+
+ // Bits 31-28 are frame number related, but unknown function
+ d_unknown2 = reverse_bits8((fiw >> 24) & 0xF0);
+
+ printf("FIW=0x%08X Cycle=%i Frame=%i Unknown1=0x%02X Unknown2=0x%02X\n",
+ fiw, d_cycle, d_frame, d_unknown1, d_unknown2);
+ fflush(stdout);
}
void pager_flex_message::parse_codeword(gr_int32 code)
{
- printf("CODE = %08X\n", code);
+// printf("CODE = %08X\n", code);
}
int pager_flex_message::general_work(int noutput_items,
gr_vector_int &ninput_items,
gr_vector_const_void_star &input_items,
- gr_vector_void_star &output_items)
+ gr_vector_void_star &output_items)
{
const gr_int32 *in = (gr_int32 *)input_items[0];
unsigned char *out = (unsigned char *)output_items[0];
@@ -90,27 +130,27 @@
while (i < ninputs && j < noutput_items) {
switch (d_state) {
case ST_START:
- d_mode = find_flex_mode(*in++); i++;
- if (d_mode >= 0) {
- printf("Flex mode = %i, sync code =
%08X\n", d_mode, flex_modes[d_mode].sync);
- enter_fiw();
- }
+ d_mode = find_flex_mode(*in++); i++;
+ if (d_mode >= 0) {
+ printf("SYNC=%08X ", flex_modes[d_mode].sync);
+ enter_fiw();
+ }
break;
- case ST_FIW:
- parse_fiw(*in++); i++;
- enter_data();
- break;
+ case ST_FIW:
+ parse_fiw(*in++); i++;
+ enter_data();
+ break;
- case ST_DATA:
- parse_codeword(*in++); i++;
- if (--d_codewords == 0)
- enter_output();
- break;
+ case ST_DATA:
+ parse_codeword(*in++); i++;
+ if (--d_codewords == 0)
+ enter_output();
+ break;
- case ST_OUTPUT:
- enter_start();
- break;
+ case ST_OUTPUT:
+ enter_start();
+ break;
default:
assert(0); // memory corruption of d_state if ever gets here
Modified:
gnuradio/branches/developers/jcorgan/pager/gr-pager/src/pager_flex_message.h
===================================================================
---
gnuradio/branches/developers/jcorgan/pager/gr-pager/src/pager_flex_message.h
2006-09-19 17:08:50 UTC (rev 3586)
+++
gnuradio/branches/developers/jcorgan/pager/gr-pager/src/pager_flex_message.h
2006-09-19 19:34:40 UTC (rev 3587)
@@ -44,20 +44,25 @@
// State machine transitions
void enter_start();
- void enter_fiw();
- void enter_data();
- void enter_output();
+ void enter_fiw();
+ void enter_data();
+ void enter_output();
- void parse_fiw(gr_int32 fiw);
- void parse_codeword(gr_int32 code);
+ void parse_fiw(gr_int32 fiw);
+ void parse_codeword(gr_int32 code);
// Simple state machine
enum state_t { ST_START, ST_FIW, ST_DATA, ST_OUTPUT };
state_t d_state;
- int d_mode; // Current FLEX mode of operation
- int d_codewords; // Codewords remaining in frame
+ int d_mode; // Current FLEX mode of operation
+ int d_codewords; // Codewords remaining in frame
+ int d_cycle; // Current FLEX transmission cycle number
+ int d_frame; // Current FLEX transmission frame number
+ unsigned int d_unknown1; // Unknown field #1
+ unsigned int d_unknown2; // Unknown field #2
+
public:
~pager_flex_message();
Modified:
gnuradio/branches/developers/jcorgan/pager/gr-pager/src/pageri_flex_modes.cc
===================================================================
---
gnuradio/branches/developers/jcorgan/pager/gr-pager/src/pageri_flex_modes.cc
2006-09-19 17:08:50 UTC (rev 3586)
+++
gnuradio/branches/developers/jcorgan/pager/gr-pager/src/pageri_flex_modes.cc
2006-09-19 19:34:40 UTC (rev 3587)
@@ -34,10 +34,10 @@
int find_flex_mode(gr_int32 sync_code)
{
- for (int i = 0; i < num_flex_modes; i++)
- if (flex_modes[i].sync == sync_code)
- return i;
+ for (int i = 0; i < num_flex_modes; i++)
+ if (flex_modes[i].sync == sync_code)
+ return i;
- // Not found
- return -1;
+ // Not found
+ return -1;
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Commit-gnuradio] r3587 - gnuradio/branches/developers/jcorgan/pager/gr-pager/src,
jcorgan <=