diff options
Diffstat (limited to 'src/pocsag/pocsag.h')
-rw-r--r-- | src/pocsag/pocsag.h | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/src/pocsag/pocsag.h b/src/pocsag/pocsag.h new file mode 100644 index 0000000..311e81a --- /dev/null +++ b/src/pocsag/pocsag.h @@ -0,0 +1,111 @@ +#include "../libmobile/sender.h" + +enum pocsag_function { + POCSAG_FUNCTION_NUMERIC = 0, + POCSAG_FUNCTION_BEEP1, + POCSAG_FUNCTION_BEEP2, + POCSAG_FUNCTION_ALPHA, +}; + +extern const char *pocsag_function_name[4]; + +enum pocsag_state { + POCSAG_IDLE = 0, + POCSAG_PREAMBLE, + POCSAG_MESSAGE, +}; + +enum pocsag_language { + LANGUAGE_DEFAULT = 0, + LANGUAGE_GERMAN, +}; + +struct pocsag; + +/* instance of outgoing message */ +typedef struct pocsag_msg { + struct pocsag_msg *next; + struct pocsag *pocsag; + int callref; /* call reference */ + uint32_t ric; /* current pager ID */ + enum pocsag_function function; /* current function */ + char data[256]; /* message to be transmitted */ + int data_length; /* length of message that is not 0-terminated */ + int data_index; /* current character transmitting */ + int bit_index; /* current bit transmitting */ + int repeat; /* how often the message is sent */ +} pocsag_msg_t; + +/* instance of pocsag transmitter/receiver */ +typedef struct pocsag { + sender_t sender; + + /* system info */ + int tx; /* can transmit */ + int rx; /* can receive */ + enum pocsag_language language; /* special characters */ + enum pocsag_function default_function; /* default function, if not given by caller */ + const char *default_message; /* default message, if caller has no caller ID */ + + /* tx states */ + enum pocsag_state state; /* state (idle, preamble, message) */ + pocsag_msg_t *current_msg; /* msg, if message codewords are transmitted */ + int word_count; /* counter for codewords */ + int idle_count; /* counts when to go idle */ + uint32_t scan_from, scan_to; /* if not equal: scnning mode */ + + /* rx states */ + int rx_msg_valid; /* currently in receiving message state */ + uint32_t rx_msg_ric; /* ric of message */ + enum pocsag_function rx_msg_function; /* function of message */ + char rx_msg_data[256]; /* data buffer */ + int rx_msg_data_length; /* complete characters received */ + int rx_msg_bit_index; /* current bit received for alphanumeric */ + + /* calls */ + pocsag_msg_t *msg_list; /* linked list of all calls */ + + /* display measurements */ + dispmeasparam_t *dmp_tone_level; + dispmeasparam_t *dmp_tone_quality; + + /* dsp states */ + double fsk_deviation; /* deviation of FSK signal on sound card */ + double fsk_polarity; /* polarity of FSK signal (-1.0 = bit '1' is down) */ + sample_t fsk_ramp_up[256]; /* samples of upward ramp shape */ + sample_t fsk_ramp_down[256]; /* samples of downward ramp shape */ + double fsk_bitduration; /* duration of a bit in samples */ + double fsk_bitstep; /* fraction of a bit each sample */ + sample_t *fsk_tx_buffer; /* tx buffer for one data block */ + int fsk_tx_buffer_size; /* size of tx buffer (in samples) */ + int fsk_tx_buffer_length; /* usage of buffer (in samples) */ + int fsk_tx_buffer_pos; /* current position sending buffer */ + double fsk_tx_phase; /* current bit position */ + uint8_t fsk_tx_lastbit; /* last bit of last message, to correctly ramp */ + double fsk_rx_phase; /* current sample position */ + uint8_t fsk_rx_lastbit; /* last bit of last message, to detect level */ + uint32_t fsk_rx_word; /* shift register to receive codeword */ + int fsk_rx_sync; /* counts down to next sync */ + int fsk_rx_index; /* counts bits of received codeword */ +} pocsag_t; + +int msg_receive(const char *text); + +int pocsag_function_name2value(const char *text); +void pocsag_list_channels(void); +double pocsag_channel2freq(const char *kanal, double *deviation, double *polarity, int *baudrate); +const char *pocsag_number_valid(const char *number); +void pocsag_add_id(const char *id); +int pocsag_init(void); +void pocsag_exit(void); +int pocsag_init(void); +void pocsag_exit(void); +void pocsag_new_state(pocsag_t *pocsag, enum pocsag_state new_state); +void pocsag_msg_receive(enum pocsag_language language, const char *channel, uint32_t ric, enum pocsag_function function, const char *message); +int pocsag_create(const char *kanal, double frequency, const char *device, int use_sdr, int samplerate, double rx_gain, double tx_gain, int tx, int rx, enum pocsag_language language, int baudrate, double deviation, double polarity, enum pocsag_function function, const char *message, uint32_t scan_from, uint32_t scan_to, const char *write_rx_wave, const char *write_tx_wave, const char *read_rx_wave, const char *read_tx_wave, int loopback); +void pocsag_destroy(sender_t *sender); +void pocsag_msg_send(enum pocsag_language language, const char *text); +void pocsag_msg_destroy(pocsag_msg_t *msg); +void pocsag_get_id(pocsag_t *euro, char *id); +void pocsag_receive_id(pocsag_t *euro, char *id); + |