diff options
author | Jim Dixon <telesistant@hotmail.com> | 2008-05-16 00:51:14 +0000 |
---|---|---|
committer | Jim Dixon <telesistant@hotmail.com> | 2008-05-16 00:51:14 +0000 |
commit | 76707a409c8cce29ae8a001e3b3c1e6b43b078d0 (patch) | |
tree | 4442fe9b29cb1bfb68f9e8e538932f64de425e60 /channels/xpmr/xpmr.h | |
parent | 5168282ba1030064777679caaca672787e743975 (diff) |
Bring all app_rpt and chan_usbradio stuff up to date
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@116731 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'channels/xpmr/xpmr.h')
-rwxr-xr-x | channels/xpmr/xpmr.h | 620 |
1 files changed, 514 insertions, 106 deletions
diff --git a/channels/xpmr/xpmr.h b/channels/xpmr/xpmr.h index b39ce23d6..49f5148fa 100755 --- a/channels/xpmr/xpmr.h +++ b/channels/xpmr/xpmr.h @@ -5,15 +5,25 @@ * * 20070808 1235 Steven Henke, W9SH, sph@xelatec.com * - * See http://www.asterisk.org for more information about - * the Asterisk project. Please do not directly contact - * any of the maintainers of this project for assistance; - * the project provides a web site, mailing lists and IRC - * channels for your use. + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * This version may be optionally licenced under the GNU LGPL licence. + * + * A license has been granted to Digium (via disclaimer) for the use of + * this code. * - * This program is free software, distributed under the terms of - * the GNU General Public License Version 2. See the LICENSE file - * at the top of the source tree. */ /*! \file @@ -23,25 +33,73 @@ * \author Steven Henke, W9SH <sph@xelatec.com> Xelatec, LLC */ -#ifndef XPMR_H -#define XPMR_H 1 +#ifndef XPMR_H +#define XPMR_H 1 + +#define XPMR_DEV 0 // when running in test mode + +#define XPMR_TRACE_LEVEL 0 + +#ifdef RADIO_RTX +#define DTX_PROG 1 // rf transceiver module +#define XPMR_PPTP 0 // parallel port test probe +#else +#define DTX_PROG 0 +#define XPMR_PPTP 0 +#endif + +#if (DTX_PROG == 1) || XPMR_PPTP == 1 +#include <parapindriver.h> +#endif #ifdef CHAN_USBRADIO #define XPMR_DEBUG0 1 -#define XPMR_TRACE 0 +#define XPMR_TRACE 1 +#define TRACEO(level,a) { if ( o->tracelevel >= level ) {printf a;} } #else #define XPMR_DEBUG0 1 #define XPMR_TRACE 1 +#define TRACEO(level,a) #endif + +#define LSD_DFS 5 +#define LSD_DFD 1 + +#if(XPMR_DEBUG0 == 1) +#define XPMR_DEBUG_CHANS 16 +#define TSCOPE(a) {strace a;} +#else +#define XPMR_DEBUG_CHANS 0 +#define TSCOPE(a) +#endif + +#define XPMR_TRACE_AMP 8192 + +// TRACEM(3,TSYS_LSD,("pmr_lsdctl_exec() RX FRAME UNPROCESSED.\n")); #if(XPMR_TRACE == 1) #define TRACEX(a) {printf a;} #define TRACEXL(a) {printf("%s @ %u : ",__FILE__ ,__LINE__); printf a; } -#define TRACEXT(a) { struct timeval hack; gettimeofday(&hack,NULL); printf("%ld.",hack.tv_sec%100000); printf("%i : ",(int)hack.tv_usec); printf a; } +#define TRACEXT(a) {struct timeval hack; gettimeofday(&hack,NULL); printf("%ld.",hack.tv_sec%100000); printf("%i : ",(int)hack.tv_usec); printf a; } +#define TRACEXR(a) {printf a;} +#define TRACEC(level,a) {if(pChan->tracelevel>=level){printf("%08i ",pChan->frameCountRx);printf a;} } +#define TRACEF(level,a) {if(pChan->tracelevel>=level){printf a;} } +#define TRACEJ(level,a) {if(XPMR_TRACE_LEVEL>=level){printf a;} } +#define TRACES(level,a) {if(mySps->parentChan->tracelevel >= level){printf a;} } +#define TRACET(level,a) {if(pChan->tracelevel>=level){printf("%08i %02i",pChan->frameCountRx,pChan->rptnum);printf a;} } +#define TRACEXR(a) {printf a;} +#define TRACEM(level,sys,a) {if(pChan->tracelevel>=level || (pChan->tracesys[sys])){printf a;} } #else #define TRACEX(a) #define TRACEXL(a) #define TRACEXT(a) +#define TRACEC(level,a) +#define TRACEF(level,a) +#define TRACEJ(level,a) +#define TRACES(level,a) +#define TRACET(level,a) +#define TRACEXR(a) +#define TRACEM(level,sys,a) #endif #define i8 int8_t @@ -52,11 +110,18 @@ #define u32 u_int32_t #define i64 int64_t #define u64 u_int64_t - + +#define M_Q31 0x80000000 // +#define M_Q30 0x40000000 // +#define M_Q29 0x20000000 // +#define M_Q28 0x10000000 // +#define M_Q27 0x08000000 // +#define M_Q26 0x04000000 // +#define M_Q25 0x02000000 // #define M_Q24 0x01000000 // #define M_Q23 0x00800000 // #define M_Q22 0x00400000 // -#define M_Q21 0x00200000 // +#define M_Q21 0x00200000 // undsoweiter #define M_Q20 0x00100000 // 1048576 #define M_Q19 0x00080000 // 524288 #define M_Q18 0x00040000 // 262144 @@ -86,8 +151,11 @@ #define SAMPLES_PER_BLOCK 160 #define MS_PER_FRAME 20 +#define SAMPLES_PER_MS 8 -#define CTCSS_NUM_CODES 38 +#define CTCSS_NULL -1 +#define CTCSS_RXONLY -2 +#define CTCSS_NUM_CODES 38 // 0 - 37 #define CTCSS_SCOUNT_MUL 100 #define CTCSS_INTEGRATE 3932 // 32767*.120 // 120/1000 // 0.120 #define CTCSS_INPUT_LIMIT 1000 @@ -98,6 +166,61 @@ #define CTCSS_TURN_OFF_SHIFT 240 // degrees #define TOC_NOTONE_TIME 600 // ms +#define DDB_FRAME_SIZE 160 // clock de-drift defaults +#define DDB_FRAMES_IN_BUFF 8 +#define DDB_ERR_MODULUS 10000 + +#define DCS_TURN_OFF_TIME 180 + +#define NUM_TXLSD_FRAMEBUFFERS 4 + +#define CHAN_TXSTATE_IDLE 0 +#define CHAN_TXSTATE_ACTIVE 1 +#define CHAN_TXSTATE_TOC 2 +#define CHAN_TXSTATE_HANGING 3 +#define CHAN_TXSTATE_FINISHING 4 +#define CHAN_TXSTATE_COMPLETE 5 +#define CHAN_TXSTATE_USURPED 9 + +#define SMODE_NULL 0 +#define SMODE_CARRIER 1 +#define SMODE_CTCSS 2 +#define SMODE_DCS 3 +#define SMODE_LSD 4 +#define SMODE_MPT 5 +#define SMODE_DST 6 +#define SMODE_P25 7 +#define SMODE_MDC 8 + + +#define SPS_OPT_START 1 +#define SPS_OPT_STOP 2 +#define SPS_OPT_TURNOFF 3 +#define SPS_OPT_STOPNOW 4 + +#define SPS_STAT_STOPPED 0 +#define SPS_STAT_STARTING 1 +#define SPS_STAT_RUNNING 2 +#define SPS_STAT_HALTING 3 + + +#define PP_BIT_TEST 6 +#define PP_REG_LEN 32 +#define PP_BIT_TIME 100000 + +#define DTX_CLK LP_PIN02 +#define DTX_DATA LP_PIN03 +#define DTX_ENABLE LP_PIN04 +#define DTX_TX LP_PIN05 // only used on older mods +#define DTX_TXPWR LP_PIN06 // not used +#define DTX_TP1 LP_PIN07 // not used +#define DTX_TP2 LP_PIN08 // not used + +#define BIN_PROG_0 LP_PIN06 +#define BIN_PROG_1 LP_PIN07 +#define BIN_PROG_2 LP_PIN08 +#define BIN_PROG_3 LP_PIN09 + #ifndef CHAN_USBRADIO enum {RX_AUDIO_NONE,RX_AUDIO_SPEAKER,RX_AUDIO_FLAT}; enum {TX_AUDIO_NONE,TX_AUDIO_FLAT,TX_AUDIO_FILTERED,TX_AUDIO_PROC}; @@ -108,6 +231,130 @@ enum {TX_OUT_OFF,TX_OUT_VOICE,TX_OUT_LSD,TX_OUT_COMPOSITE,TX_OUT_AUX}; enum {TOC_NONE,TOC_PHASE,TOC_NOTONE}; #endif +enum dbg_pts { + +RX_INPUT, +RX_NOISE_AMP, +RX_NOISE_TRIG, + +RX_CTCSS_LPF, +RX_CTCSS_CENTER, +RX_CTCSS_NRZ, +RX_CTCSS_CLK, +RX_CTCSS_P0, +RX_CTCSS_P1, +RX_CTCSS_ACCUM, +RX_CTCSS_DVDT, +RX_CTCSS_DECODE, + +RX_DCS_CENTER, +RX_DCS_DEC, +RX_DCS_DIN, +RX_DCS_CLK, +RX_DCS_DAT, + +RX_LSD_LPF, +RX_LSD_CLK, +RX_LSD_DAT, +RX_LSD_DEC, + +RX_LSD_CENTER, +RX_LSD_SYNC, +RX_LSD_STATE, +RX_LSD_ERR, +RX_LSD_INTE, + +RX_SMODE, + +TX_PTT_IN, +TX_PTT_OUT, + +TX_DEDRIFT_LEAD, +TX_DEDRIFT_ERR, +TX_DEDRIFT_FACTOR, +TX_DEDRIFT_DRIFT, +TX_DEDRIFT_TWIDDLE, + +TX_CTCSS_GEN, + +TX_SIGGEN_0, + +TX_DCS_CLK, +TX_DCS_DAT, +TX_DCS_LPF, + +TX_LSD_CLK, +TX_LSD_DAT, +TX_LSD_GEN, +TX_LSD_LPF, + +TX_NET_INT, +TX_VOX_HPF, +TX_VOX_LIM, + +TX_VOX_LPF, + +TX_OUT_A, +TX_OUT_B, + +NUM_DEBUG_PTS +}; + +typedef struct +{ + i16 mode; + i16 point[NUM_DEBUG_PTS]; + i16 trace[16]; + i16 scale[16]; + i16 offset[16]; + i16 buffer[16 * SAMPLES_PER_BLOCK]; // allocate for rx and tx + i16 *source[16]; +} t_sdbg; + +typedef struct +{ + i16 lock; + i16 option; // 1 = data in, 0 = data out + i16 debug; + i16 debugcnt; + i32 rxframecnt; + i32 txframecnt; + + i32 skew; + + i16 frames; + i16 framesize; + i16 buffersize; + + i32 timer; + + i32 x0,x1,y0,y1; + + i16 inputindex; + i16 outputindex; + i16 lead; + i16 err; + i16 accum; + + i16 *ptr; // source or destination + i16 *buff; + + i16 inputcnt; + i16 initcnt; + + i32 factor; + i32 drift; + i32 modulus; + i32 z1; + struct { + unsigned rxlock:1; + unsigned txlock:1; + unsigned twiddle:1; + unsigned doitnow:1; + }b; +} +t_dedrift; + /* one structure for each ctcss tone to decode */ @@ -121,7 +368,7 @@ typedef struct i16 enabled; i16 state; // dead, running, error i16 zIndex; // z bucket index - i16 z[4]; // maw sph today + i16 z[4]; i16 zi; i16 dvu; i16 dvd; @@ -130,78 +377,62 @@ typedef struct i16 hyst; i16 decode; i16 diffpeak; - i16 debug; // value held from last pass + i16 debug; + + #if XPMR_DEBUG0 == 1 + i16 lasttv0; + i16 lasttv1; + i16 lasttv2; + i16 lasttv3; + i16 *pDebug0; // pointer to debug output i16 *pDebug1; // pointer to debug output i16 *pDebug2; // pointer to debug output + i16 *pDebug3; // pointer to debug output + #endif } t_tdet; typedef struct { i16 enabled; // if 0 none, 0xFFFF all tones, or single tone - i16 *input; + i16 *input; // source data i16 clamplitude; i16 center; i16 decode; // current ctcss decode index i32 BlankingTimer; u32 TurnOffTimer; - t_tdet tdet[CTCSS_NUM_CODES]; i16 gain; i16 limit; + i16 debugIndex; i16 *pDebug0; i16 *pDebug1; i16 *pDebug2; + i16 *pDebug3; i16 testIndex; i16 multiFreq; i8 relax; + t_tdet tdet[CTCSS_NUM_CODES]; -} t_dec_ctcss; + i8 numrxcodes; + i16 rxCtcssMap[CTCSS_NUM_CODES]; + char *rxctcss[CTCSS_NUM_CODES]; // pointers to each tone in string above + char *txctcss[CTCSS_NUM_CODES]; -typedef struct -{ - i16 enabled; // if 0 none, 0xFFFF all tones, or single tone - i16 clamplitude; - i16 center; - i16 decode; // current ctcss decode value - i32 BlankingTimer; - u32 TurnOffTimer; - i16 gain; - i16 limit; - i16 *pDebug0; - i16 *pDebug1; - i16 rxPolarity; -} t_dec_dcs; + i32 txctcssdefault_index; + float txctcssdefault_value; + + struct{ + unsigned valid:1; + }b; +} t_dec_ctcss; /* - Low Speed Data decoding both polarities + Low Speed Data +*/ +/* + general purpose pmr signal processing element */ -typedef struct -{ - i16 counter; // counter to next sample - i16 synced; - u32 syncCorr[2]; - u32 data[2]; - i16 state; // disabled, enabled, - i16 decode; - i16 debug; - - i16 polarity; - u32 frameNum; - - u16 area; - u16 chan; - u16 home; - u16 id; - u16 free; - - u16 crc; - i16 rssi; - -} t_decLsd; - - -/* general purpose pmr signal processing element */ struct t_pmr_chan; @@ -211,6 +442,7 @@ typedef struct t_pmr_sps i16 enabled; // enabled/disabled + struct t_pmr_chan *parentChan; i16 *source; // source buffer @@ -220,7 +452,9 @@ typedef struct t_pmr_sps i16 numChanOut; // allows output direct to interleaved buffer i16 selChanOut; - u32 ticks; + i32 ticks; + i32 timer; + i32 count; void *buff; // this structure's internal buffer @@ -258,6 +492,29 @@ typedef struct t_pmr_sps i16 err; // error condition i16 option; // option / request zero i16 state; // stopped, start, stopped assumes zero'd + + i16 pending; + + struct { + unsigned hit:1; + unsigned hitlast:1; + unsigned hita:1; + unsigned hitb:1; + unsigned bithit:1; + unsigned now:1; + unsigned next:1; + unsigned prev:1; + unsigned clock:1; + unsigned hold:1; + unsigned opt1:1; + unsigned opt2:1; + unsigned polarity:1; + unsigned dotting:1; + unsigned lastbitpending:1; + unsigned outzero:1; + unsigned settling:1; + unsigned syncing:1; + }b; i16 cleared; // output buffer cleared @@ -288,14 +545,28 @@ typedef struct t_pmr_sps } t_pmr_sps; + +struct t_dec_dcs; +struct t_lsd_control; +struct t_decLsd;; +struct t_encLsd; + /* pmr channel */ typedef struct t_pmr_chan { i16 index; // which one + i16 devicenum; // belongs to + + char *name; + i16 enabled; // enabled/disabled i16 status; // ok, error, busy, idle, initializing + + i16 tracelevel; + i16 tracetype; + u32 tracemask; i16 nSamplesRx; // max frame size i16 nSamplesTx; @@ -306,11 +577,23 @@ typedef struct t_pmr_chan i16 inputGain; i16 inputOffset; + i32 ticks; // time ticks u32 frameCountRx; // number processed u32 frameCountTx; + i8 txframelock; + i32 txHangTime; + i32 txHangTimer; i32 txTurnOff; + i16 txBufferClear; + + u32 txfreq; + u32 rxfreq; + i8 txpower; + + i32 txsettletime; // in samples + i32 txsettletimer; i16 rxDC; // average DC value of input i16 rxSqSet; // carrier squelch threshold @@ -319,6 +602,7 @@ typedef struct t_pmr_chan i16 rxQuality; // signal quality metric i16 rxCarrierDetect; // carrier detect i16 rxCdType; + i16 rxSqVoxAdj; i16 rxExtCarrierDetect; i32 inputBlanking; // Tx pulse eliminator @@ -340,20 +624,54 @@ typedef struct t_pmr_chan char radioDuplex; - struct { - unsigned pmrNoiseSquelch:1; - unsigned rxHpf:1; - unsigned txHpf:1; - unsigned txLpf:1; - unsigned rxDeEmphasis:1; - unsigned txPreEmphasis:1; - unsigned startSpecialTone:1; - unsigned stopSpecialTone:1; - unsigned doingSpecialTone:1; - unsigned extCarrierDetect:1; - unsigned txCapture:1; - unsigned rxCapture:1; - }b; + char *pStr; + + // start channel signaling codes source + char *pRxCodeSrc; // source + char *pTxCodeSrc; // source + char *pTxCodeDefault; // source + // end channel signaling codes source + + // start signaling code info derived from source + i16 numrxcodes; + i16 numtxcodes; + char *pRxCodeStr; // copied and cut up + char **pRxCode; // pointers to subs + char *pTxCodeStr; + char **pTxCode; + + char txctcssdefault[16]; // codes from higher level + + char *rxctcssfreqs; // rest are derived from this + char *txctcssfreqs; + + char numrxctcssfreqs; + char numtxctcssfreqs; + + char *rxctcss[CTCSS_NUM_CODES]; // pointers to each tone in string above + char *txctcss[CTCSS_NUM_CODES]; + + i16 rxCtcssMap[CTCSS_NUM_CODES]; + + i8 txcodedefaultsmode; + i16 txctcssdefault_index; + float txctcssdefault_value; + + char txctcssfreq[32]; // encode now + char rxctcssfreq[32]; // decode now + // end most of signaling code info derived from source + + struct t_lsd_control *pLsdCtl; + + i16 rptnum; + i16 area; + char *ukey; + u32 idleinterval; + char turnoffs; + + char pplock; + + t_dedrift dd; i16 dummy; @@ -379,21 +697,34 @@ typedef struct t_pmr_chan i16 rxCarrierPoint; i16 rxCarrierHyst; - - i16 rxCtcssMap[CTCSS_NUM_CODES]; i16 txCtcssTocShift; i16 txCtcssTocTime; i8 txTocType; - float txCtcssFreq; - float rxCtcssFreq; - float rxInputGain; - - i16 rxCtcssIndex; + i16 smode; // ctcss, dcs, lsd + i16 smodecode; + i16 smodewas; // ctcss, dcs, lsd + i32 smodetimer; // in ms + i32 smodetime; // to set in ms + + t_dec_ctcss *rxCtcss; + struct t_dec_dcs *decDcs; + struct t_decLsd *decLsd; + struct t_encLsd *pLsdEnc; + + i16 clamplitudeDcs; + i16 centerDcs; + u32 dcsBlankingTimer; + i16 dcsDecode; // current dcs decode value + + i16 clamplitudeLsd; + i16 centerLsd; + i16 txPttIn; // from external request i16 txPttOut; // to radio hardware + i16 txPttHid; i16 bandwidth; // wide/narrow i16 txCompand; // type @@ -410,12 +741,15 @@ typedef struct t_pmr_chan i16 function; - i16 txState; // off,settling,on,hangtime,turnoff + i16 txState; // off,settling,on,hangtime,turnoff + + i16 spsIndex; - t_pmr_sps *spsMeasure; // measurement block + t_pmr_sps *spsMeasure; // measurement block t_pmr_sps *spsRx; // 1st signal processing struct t_pmr_sps *spsRxLsd; + t_pmr_sps *spsRxLsdNrz; t_pmr_sps *spsRxDeEmp; t_pmr_sps *spsRxHpf; t_pmr_sps *spsRxVox; @@ -423,14 +757,14 @@ typedef struct t_pmr_chan t_pmr_sps *spsRxOut; // Last signal processing struct t_pmr_sps *spsTx; // 1st signal processing struct - - t_pmr_sps *spsTxLsdLpf; + t_pmr_sps *spsTxOutA; // Last signal processing struct - t_pmr_sps *spsTxOutB; // Last signal processing struct t_pmr_sps *spsSigGen0; // ctcss t_pmr_sps *spsSigGen1; // test and other tones + t_pmr_sps *spsLsdGen; + t_pmr_sps *spsTxLsdLpf; // tune tweaks @@ -452,6 +786,58 @@ typedef struct t_pmr_chan i32 *ptxLimiterAdjust; // from calling application + struct { + unsigned pmrNoiseSquelch:1; + unsigned rxHpf:1; + unsigned txHpf:1; + unsigned txLpf:1; + unsigned rxDeEmphasis:1; + unsigned txPreEmphasis:1; + unsigned startSpecialTone:1; + unsigned stopSpecialTone:1; + unsigned doingSpecialTone:1; + unsigned extCarrierDetect:1; + unsigned txCapture:1; + unsigned rxCapture:1; + unsigned reprog:1; + unsigned radioactive:1; + unsigned rxplmon:1; + unsigned remoted:1; + unsigned loopback:1; + unsigned rxpolarity:1; + unsigned txpolarity:1; + unsigned dcsrxpolarity:1; + unsigned dcstxpolarity:1; + unsigned lsdrxpolarity:1; + unsigned lsdtxpolarity:1; + unsigned txsettling:1; + unsigned smodeturnoff:1; + + unsigned ctcssRxEnable:1; + unsigned ctcssTxEnable:1; + unsigned dcsRxEnable:1; + unsigned dcsTxEnable:1; + unsigned lmrRxEnable:1; + unsigned lmrTxEnable:1; + unsigned mdcRxEnable:1; + unsigned mdcTxEnable:1; + unsigned dstRxEnable:1; + unsigned dstTxEnable:1; + unsigned p25RxEnable:1; + unsigned p25TxEnable:1; + unsigned ax25Enable:1; + + unsigned txCtcssInhibit:1; + + unsigned rxkeyed:1; + unsigned rxhalted:1; + unsigned txhalted:1; + unsigned pptp_p1:1; + unsigned pptp_p2:1; + unsigned tuning:1; + unsigned pttwas:1; + }b; + i16 *pRxDemod; // buffers i16 *pRxBase; // decimated lpf input i16 *pRxNoise; @@ -463,7 +849,10 @@ typedef struct t_pmr_chan i16 *pRxLsdLimit; // LSD Limited i16 *pRxCtcss; // i16 *pRxSquelch; + i16 *prxVoxMeas; + i16 *prxMeasure; + i16 *pTxInput; // input data i16 *pTxBase; // input data i16 *pTxHpf; i16 *pTxPreEmp; @@ -474,11 +863,6 @@ typedef struct t_pmr_chan i16 *pTxMod; // upsampled, low pass filtered i16 *pTxOut; // - - i16 *pTxPttIn; - i16 *pTxPttOut; - i16 *pTxHang; - i16 *pTxCode; i16 *pSigGen0; i16 *pSigGen1; @@ -488,6 +872,12 @@ typedef struct t_pmr_chan i16 *pNull; + #if XPMR_DEBUG0 == 1 + + i16 *pRxLsdCen; + + i16 *pTstTxOut; + i16 *prxDebug; // consolidated debug buffer i16 *ptxDebug; // consolidated debug buffer @@ -501,23 +891,23 @@ typedef struct t_pmr_chan i16 *ptxDebug2; i16 *ptxDebug3; - t_dec_ctcss *rxCtcss; - - i16 clamplitudeDcs; - i16 centerDcs; - u32 dcsBlankingTimer; - i16 dcsDecode; // current dcs decode value + #endif - i16 clamplitudeLsd; - i16 centerLsd; - t_decLsd decLsd[2]; // for both polarities + i16 numDebugChannels; + + t_sdbg *sdbg; } t_pmr_chan; -static i16 TxTestTone(t_pmr_chan *pChan, i16 function); +/* + function prototype declarations +*/ +void strace(i16 point, t_sdbg *sdbg, i16 index, i16 value); +void strace2(t_sdbg *sdbg); +static i16 TxTestTone(t_pmr_chan *pChan, i16 function); t_pmr_chan *createPmrChannel(t_pmr_chan *tChan, i16 numSamples); -t_pmr_sps *createPmrSps(void); +t_pmr_sps *createPmrSps(t_pmr_chan *pChan); i16 destroyPmrChannel(t_pmr_chan *pChan); i16 destroyPmrSps(t_pmr_sps *pSps); i16 pmr_rx_frontend(t_pmr_sps *mySps); @@ -531,10 +921,28 @@ i16 SoftLimiter(t_pmr_sps *mySps); i16 SigGen(t_pmr_sps *mySps); i16 pmrMixer(t_pmr_sps *mySps); i16 DelayLine(t_pmr_sps *mySps); -i16 PmrRx(t_pmr_chan *PmrChan, i16 *input, i16 *output); -i16 PmrTx(t_pmr_chan *PmrChan, i16 *input, i16 *output); + +i16 PmrRx(t_pmr_chan *PmrChan, i16 *input, i16 *outputrx, i16 *outputtx ); +i16 PmrTx(t_pmr_chan *PmrChan, i16 *input); + +i16 string_parse(char *src, char **dest, char ***ptrs); +i16 code_string_parse(t_pmr_chan *pChan); + i16 CtcssFreqIndex(float freq); i16 MeasureBlock(t_pmr_sps *mySps); + +void dedrift (t_pmr_chan *pChan); +void dedrift_write (t_pmr_chan *pChan, i16 *src); + +void ppspiout (u32 spidata); +void progdtx (t_pmr_chan *pChan); +void ppbinout (u8 chan); + +#if XPMR_PPTP == 1 +void pptp_init (void); +void pptp_write (i16 bit, i16 state); +#endif + #endif /* ! XPMR_H */ /* end of file */ |