mirror of
https://github.com/signalwire/freeswitch.git
synced 2025-02-23 01:50:05 +00:00
145 lines
4.4 KiB
C
145 lines
4.4 KiB
C
/*
|
|
* FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
|
|
* Copyright (C) 2005-2014, Anthony Minessale II <anthm@freeswitch.org>
|
|
*
|
|
* Version: MPL 1.1
|
|
*
|
|
* The contents of this file are subject to the Mozilla Public License Version
|
|
* 1.1 (the "License"); you may not use this file except in compliance with
|
|
* the License. You may obtain a copy of the License at
|
|
* http://www.mozilla.org/MPL/
|
|
*
|
|
* Software distributed under the License is distributed on an "AS IS" basis,
|
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
|
* for the specific language governing rights and limitations under the
|
|
* License.
|
|
*
|
|
* The Original Code is FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
|
|
*
|
|
* The Initial Developer of the Original Code is
|
|
* Anthony Minessale II <anthm@freeswitch.org>
|
|
* Portions created by the Initial Developer are Copyright (C)
|
|
* the Initial Developer. All Rights Reserved.
|
|
*
|
|
* Contributor(s):
|
|
*
|
|
* Anthony Minessale II <anthm@freeswitch.org>
|
|
*
|
|
* mod_fsk -- FSK data transfer
|
|
*
|
|
*/
|
|
#ifndef __FSK_CALLER_ID_H
|
|
#define __FSK_CALLER_ID_H
|
|
SWITCH_BEGIN_EXTERN_C
|
|
#include "fsk.h"
|
|
#include "uart.h"
|
|
|
|
#define FSK_MOD_FACTOR 0x10000
|
|
|
|
typedef enum {
|
|
ENDIAN_BIG = 1,
|
|
ENDIAN_LITTLE = -1
|
|
} endian_t;
|
|
|
|
typedef enum {
|
|
CID_TYPE_SDMF = 0x04,
|
|
CID_TYPE_MDMF = 0x80
|
|
} cid_type_t;
|
|
|
|
typedef enum {
|
|
MDMF_DATETIME = 1,
|
|
MDMF_PHONE_NUM = 2,
|
|
MDMF_DDN = 3,
|
|
MDMF_NO_NUM = 4,
|
|
MDMF_PHONE_NAME = 7,
|
|
MDMF_NO_NAME = 8,
|
|
MDMF_ALT_ROUTE = 9,
|
|
MDMF_NAME_VALUE = 10,
|
|
MDMF_INVALID = 11
|
|
} mdmf_type_t;
|
|
|
|
struct bitstream {
|
|
uint8_t *data;
|
|
uint32_t datalen;
|
|
uint32_t byte_index;
|
|
uint8_t bit_index;
|
|
int8_t endian;
|
|
uint8_t top;
|
|
uint8_t bot;
|
|
uint8_t ss;
|
|
uint8_t ssv;
|
|
};
|
|
|
|
struct fsk_data_state {
|
|
dsp_fsk_handle_t *fsk1200_handle;
|
|
uint8_t init;
|
|
uint8_t *buf;
|
|
size_t bufsize;
|
|
size_t blen;
|
|
size_t bpos;
|
|
size_t dlen;
|
|
size_t ppos;
|
|
int checksum;
|
|
};
|
|
|
|
typedef struct bitstream bitstream_t;
|
|
typedef struct fsk_data_state fsk_data_state_t;
|
|
typedef switch_status_t (*fsk_write_sample_t)(int16_t *buf, size_t buflen, void *user_data);
|
|
|
|
struct fsk_modulator {
|
|
teletone_dds_state_t dds;
|
|
bitstream_t bs;
|
|
uint32_t carrier_bits_start;
|
|
uint32_t carrier_bits_stop;
|
|
uint32_t chan_sieze_bits;
|
|
uint32_t bit_factor;
|
|
uint32_t bit_accum;
|
|
uint32_t sample_counter;
|
|
int32_t samples_per_bit;
|
|
int32_t est_bytes;
|
|
fsk_modem_types_t modem_type;
|
|
fsk_data_state_t *fsk_data;
|
|
fsk_write_sample_t write_sample_callback;
|
|
void *user_data;
|
|
int16_t sample_buffer[64];
|
|
};
|
|
|
|
|
|
typedef int (*fsk_data_decoder_t)(fsk_data_state_t *state);
|
|
|
|
typedef void (*logger_t)(const char *file, const char *func, int line, int level, const char *fmt, ...);
|
|
typedef struct fsk_modulator fsk_modulator_t;
|
|
|
|
switch_status_t fsk_data_init(fsk_data_state_t *state, uint8_t *data, uint32_t datalen);
|
|
void bitstream_init(bitstream_t *bsp, uint8_t *data, uint32_t datalen, endian_t endian, uint8_t ss);
|
|
int8_t bitstream_get_bit(bitstream_t *bsp);
|
|
switch_status_t fsk_data_add_mdmf(fsk_data_state_t *state, mdmf_type_t type, const uint8_t *data, uint32_t datalen);
|
|
switch_status_t fsk_data_add_checksum(fsk_data_state_t *state);
|
|
switch_status_t fsk_data_parse(fsk_data_state_t *state, size_t *type, char **data, size_t *len);
|
|
switch_status_t fsk_demod_feed(fsk_data_state_t *state, int16_t *data, size_t samples);
|
|
switch_status_t fsk_demod_destroy(fsk_data_state_t *state);
|
|
int fsk_demod_init(fsk_data_state_t *state, int rate, uint8_t *buf, size_t bufsize);
|
|
size_t fsk_modulator_generate_bit(fsk_modulator_t *fsk_trans, int8_t bit, int16_t *buf, size_t buflen);
|
|
int32_t fsk_modulator_generate_carrier_bits(fsk_modulator_t *fsk_trans, uint32_t bits);
|
|
void fsk_modulator_generate_chan_sieze(fsk_modulator_t *fsk_trans);
|
|
void fsk_modulator_send_data(fsk_modulator_t *fsk_trans);
|
|
switch_status_t fsk_modulator_init(fsk_modulator_t *fsk_trans,
|
|
fsk_modem_types_t modem_type,
|
|
uint32_t sample_rate,
|
|
fsk_data_state_t *fsk_data,
|
|
float db_level,
|
|
uint32_t carrier_bits_start,
|
|
uint32_t carrier_bits_stop,
|
|
uint32_t chan_sieze_bits,
|
|
fsk_write_sample_t write_sample_callback,
|
|
void *user_data);
|
|
|
|
|
|
#define fsk_modulator_send_all(_it) fsk_modulator_generate_chan_sieze(_it); \
|
|
fsk_modulator_generate_carrier_bits(_it, _it->carrier_bits_start); \
|
|
fsk_modulator_send_data(_it); \
|
|
fsk_modulator_generate_carrier_bits(_it, _it->carrier_bits_stop)
|
|
|
|
SWITCH_END_EXTERN_C
|
|
#endif
|