📄 dtmfi.h
字号:
/*---------------------------------------------------------------------*
* *
* THIS IS AN UNPUBLISHED WORK CONTAINING CONFIDENTIAL AND PROPRIETARY *
* INFORMATION. IF PUBLICATION OCCURS, THE FOLLOWING NOTICE APPLIES: *
* "COPYRIGHT 2001 MICHAEL TSIROULNIKOV, ALL RIGHTS RESERVED" *
* *
*---------------------------------------------------------------------*/
#ifndef _dtmfi_h
#define _dtmfi_h
#include "dtmf_miket.h"
#ifndef TRUE
#define TRUE (1)
#endif
#ifndef FALSE
#define FALSE (0)
#endif
#if ! defined (_std_defs_)
#define _std_defs_
typedef unsigned short U16;
typedef short S16;
typedef unsigned long U32;
typedef long S32;
#endif
/*--------------------- local defs ------------------------------------*/
#define DTMF_ST_IDLE (0)
#define DTMF_ST_MAYBE (1)
#define DTMF_ST_TONE (2)
#define DTMF_ST_GOOD_TONE (3)
#define DTMF_ST_END (4)
#define DTMF_ST_ABORT (5)
#define DTMF_ST_MAX (6)
#define DTMF_2KFLT_SZ (19)
#define DTMF_2KFLT_HSZ (5)
#define DTMF_DR (10) /* decimation ratio */
#define DTMF_2KDR (2)
#define DTMF_BPDR (5)
#define DTMF_BPFR_SZ (IDTMF_FR_SZ/DTMF_2KDR)
#define DTMF_DFR_SZ (IDTMF_FR_SZ/DTMF_DR)
#define DTMF_BPFLT_SZ (31)
#define DTMF_LO_DFT_SZ (12)
#define DTMF_LOSD_SZ ((DTMF_LO_DFT_SZ-DTMF_DFR_SZ)*2)
#define DTMF_HI_DFT_SZ (8)
#define DTMF_HISD_SZ ((DTMF_HI_DFT_SZ-DTMF_DFR_SZ)*2)
#define DTMF_MASK_MIN_EN (1<<0)
#define DTMF_MASK_SUM_EN (1<<1)
#define DTMF_MASK_RS_EDGE (1<<2)
#define DTMF_MASK_FL_EDGE (1<<3)
#define DTMF_MASK_STABLE (1<<4)
#define DTMF_MASK_2K_BOUND (1<<5)
#define DTMF_MASK_FWD_TWIST (1<<6)
#define DTMF_MASK_REV_TWIST (1<<7)
#define DTMF_MASK_ENERGY (0x00ff)
#define DTMF_MASK_LO_PART (1<<8)
#define DTMF_MASK_LO_CLEAN (1<<9)
#define DTMF_MASK_LO_INRANGE (1<<10)
#define DTMF_MASK_SAME_FRQ (1<<11)
#define DTMF_MASK_HI_PART (1<<12)
#define DTMF_MASK_HI_CLEAN (1<<13)
#define DTMF_MASK_HI_INRANGE (1<<14)
#define DTMF_MASK_SPECTRUM (0x7f00)
typedef struct DTMF_tStats {
S16 sEn;
S16 sLoEn;
S16 sHiEn;
S16 sLoFreqDev;
S16 sHiFreqDev;
} DTMF_tStats;
typedef struct DTMF_tSc {
#if (IDTMF_FR_SZ != 80)
S32 slFrameEn;
#endif
S32 slLoBpEn;
S32 slHiBpEn;
S32 slDialEn;
S16 asLoMainEn[4];
S16 asLoDevEn[4];
S16 asHiMainEn[4];
S16 asHiDevEn[4];
S16 as2kData[IDTMF_FR_SZ+DTMF_2KFLT_SZ]; /* 40+19 */
S16 asBpData[IDTMF_FR_SZ/2+DTMF_BPFLT_SZ];/* 20+31 */
S16 asLoData[DTMF_LO_DFT_SZ*2]; /* 12*2 */
S16 asHiData[DTMF_HI_DFT_SZ*2]; /* 8*2 */
S16 sLoBpEn;
S16 sLoMaxFreqEn;
S16 sLoNextEn;
S16 sLoFreqNo;
S16 sLoFreqDev;
S16 sHiBpEn;
S16 sHiMaxFreqEn;
S16 sHiNextEn;
S16 sHiFreqNo;
S16 sHiFreqDev;
S16 s2kEnDlt;
S16 sSumEn; /* 8 */
S16 sSumDialEn;
#if (IDTMF_FR_SZ == 80)
S16 sDialEn;
S16 sFrameEn;
#else
#endif
S16 sTestFailed;
S16 sDigit;
} DTMF_tSc;
typedef struct DTMF_tDbv
{
#if (IDTMF_FR_SZ == 80)
#else
S32 slDialEn;
S32 slFrameEn;
#endif
S16 sState; /* state of DTMF state machine */
S16 sLastDigit; /* low + high*4 */
S16 sGood; /* good frame counter */
S16 sBad; /* bad frame counter */
S16 asSumEn[6]; /* 6w frame energy history */
#if (IDTMF_FR_SZ == 80)
#else
S16 sZFrameEn;
#endif
DTMF_tStats Stat; /* 5w */
} DTMF_tDbv; /* 20 words */
typedef struct DTMF_tDb /* 92 words */
{
DTMF_tDbv v; /* 20 */
const IDTMF_tCfg *pCfg; /* 2 */
S16 sIsOff; /* 1 */
S16 as2kDataSav[DTMF_2KFLT_SZ]; /* 19 */
S16 asBpDataSav[DTMF_BPFLT_SZ]; /* 31 */
S16 asLoDataSav[DTMF_LOSD_SZ]; /* 16 */
#if (IDTMF_FR_SZ != 80)
S16 asHiDataSav[DTMF_HISD_SZ]; /* 8 */
#endif
} DTMF_tDb;
/*--------------------- public vars- ----------------------------------*/
/*--------------------- local vars ------------------------------------*/
extern const S16 dtmf_aLoBpI[];
extern const S16 dtmf_aHiBpI[];
extern const S16 dtmf_aDialI[];
extern const S16 dtmf_aLoBpQ[];
extern const S16 dtmf_aHiBpQ[];
extern const S16 dtmf_aDialQ[];
extern const S16 dtmf_aLo[];
extern const S16 dtmf_aHi[];
extern const S16 dtmf_a697[];
extern const S16 dtmf_a770[];
extern const S16 dtmf_a852[];
extern const S16 dtmf_a941[];
extern const S16 dtmf_a1209[];
extern const S16 dtmf_a1336[];
extern const S16 dtmf_a1477[];
extern const S16 dtmf_a1633[];
/*--------------------- local functions -------------------------------*/
extern S16 dtmf_en2log (S32 slEn);
extern void dtmf_filter_test (DTMF_tDb *pDb, DTMF_tSc *pSc, S16 *psIn);
extern void dtmf_move_data_in (DTMF_tDb *pDb, DTMF_tSc *pSc, S16 *psIn);
extern void dtmf_2k_filter (DTMF_tDb *pDb, DTMF_tSc *pSc);
extern void dtmf_dial_filter (DTMF_tDb *pDb, DTMF_tSc *pSc);
extern void dtmf_lo_filter (DTMF_tDb *pDb, DTMF_tSc *pSc);
extern void dtmf_lo_dft_main (DTMF_tDb *pDb, DTMF_tSc *pSc);
extern void dtmf_lo_sort (DTMF_tDb *pDb, DTMF_tSc *pSc);
extern void dtmf_lo_dft_dev (DTMF_tDb *pDb, DTMF_tSc *pSc);
extern void dtmf_lo_freq (DTMF_tDb *pDb, DTMF_tSc *pSc);
extern void dtmf_hi_filter (DTMF_tDb *pDb, DTMF_tSc *pSc);
extern void dtmf_hi_dft_main (DTMF_tDb *pDb, DTMF_tSc *pSc);
extern void dtmf_hi_sort (DTMF_tDb *pDb, DTMF_tSc *pSc);
extern void dtmf_hi_dft_dev (DTMF_tDb *pDb, DTMF_tSc *pSc);
extern void dtmf_hi_freq (DTMF_tDb *pDb, DTMF_tSc *pSc);
extern void dtmf_frame_en (DTMF_tDb *pDb, DTMF_tSc *pSc);
extern void dtmf_move_data_out (DTMF_tDb *pDb, DTMF_tSc *pSc);
/*--------------------- public functions -----------------------------*/
/*---------------------------------------------------------------------*/
#endif /* _dtmfi_h */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -