📄 hfmodem.h
字号:
/*****************************************************************************//* * hfmodem.h -- Linux soundcard HF FSK driver. * * Copyright (C) 1997 Thomas Sailer (sailer@ife.ee.ethz.ch) * Swiss Federal Institute of Technology (ETH), Electronics Lab * * 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., 675 Mass Ave, Cambridge, MA 02139, USA. * * * This is the Linux realtime sound output driver *//*****************************************************************************/#ifndef _HFMODEM_H#define _HFMODEM_H/* --------------------------------------------------------------------- */#include <linux/version.h>#include <linux/ioctl.h>#include <linux/types.h>#include <linux/fs.h>#if LINUX_VERSION_CODE >= 0x20100#include <linux/poll.h>#endif/* --------------------------------------------------------------------- */#define HFMODEM_MINOR 145#define HFMODEM_SRATE 8000#define HFMODEM_MAXBITS 4800 /* required for GTOR 300 baud mode */#define HFMODEM_MINBAUD 40#define HFMODEM_MAXBAUD 400#define HFMODEM_MAXCORRLEN ((HFMODEM_SRATE+HFMODEM_MINBAUD-1)/HFMODEM_MINBAUD)/* --------------------------------------------------------------------- */typedef unsigned long hfmodem_time_t;typedef int hfmodem_soft_t;typedef unsigned long hfmodem_id_t;/* --------------------------------------------------------------------- */struct hfmodem_ioctl_fsk_tx_request { hfmodem_time_t tstart; hfmodem_time_t tinc; int inv; hfmodem_id_t id; unsigned int nbits; unsigned char *data; unsigned int freq[2];};struct hfmodem_ioctl_fsk_rx_request { hfmodem_time_t tstart; hfmodem_time_t tinc; unsigned int baud; hfmodem_id_t id; unsigned int nbits; hfmodem_soft_t *data; unsigned int freq[2];};struct hfmodem_ioctl_mixer_params { int src; int igain; int ogain;};struct hfmodem_ioctl_sample_params { __s16 *data; int len;};#define HFMODEM_IOCTL_FSKTXREQUEST _IOW('H', 0, struct hfmodem_ioctl_fsk_tx_request)#define HFMODEM_IOCTL_FSKRXREQUEST _IOW('H', 1, struct hfmodem_ioctl_fsk_rx_request)#define HFMODEM_IOCTL_CLEARRQ _IO('H', 3)#define HFMODEM_IOCTL_GETCURTIME _IOR('H', 4, hfmodem_time_t)#define HFMODEM_IOCTL_WAITRQ _IOR('H', 5, hfmodem_id_t)#define HFMODEM_IOCTL_MIXERPARAMS _IOW('H', 6, struct hfmodem_ioctl_mixer_params)#define HFMODEM_IOCTL_SAMPLESTART _IOW('H', 7, struct hfmodem_ioctl_sample_params)#define HFMODEM_IOCTL_SAMPLEFINISHED _IO('H', 8)/* --------------------------------------------------------------------- */#ifdef __KERNEL__#include <linux/parport.h>#define DMA_MODE_AUTOINIT 0x10#define NR_DEVICE 1#define HFMODEM_FRAGSAMPLES (HFMODEM_SRATE/100)#define HFMODEM_FRAGSIZE (HFMODEM_FRAGSAMPLES*2)#define HFMODEM_NUMFRAGS 8#define HFMODEM_EXCESSFRAGS 3#define HFMODEM_NUMRXSLOTS 20#define HFMODEM_NUMTXSLOTS 4#define HFMODEM_CORRELATOR_CACHE 8enum slot_st { ss_unused = 0, ss_ready, ss_oper, ss_retired };typedef int hfmodem_conv_t;struct hfmodem_state { const struct hfmodem_scops *scops; /* io params */ struct { unsigned int base_addr; unsigned int dma; unsigned int irq; } io; struct { unsigned int seriobase; unsigned int pariobase; unsigned int midiiobase; unsigned int flags; struct pardevice *pardev; } ptt_out; struct { __s16 *buf; unsigned int lastfrag; unsigned int fragptr; unsigned int last_dmaptr; int ptt_frames; } dma; struct { unsigned int last_tvusec; unsigned long long time_cnt; hfmodem_time_t lasttime;#ifdef __i386__ unsigned int starttime_lo, starttime_hi;#endif /* __i386__ */ } clk; int active; struct wait_queue *wait; struct { __s16 *kbuf; __s16 *ubuf; __s16 *kptr; unsigned int size; int rem; } sbuf; struct { hfmodem_time_t last_time; unsigned int tx_phase; struct hfmodem_l1_rxslot { enum slot_st state; hfmodem_time_t tstart, tinc; hfmodem_soft_t *data; hfmodem_soft_t *userdata; unsigned int nbits; unsigned int cntbits; hfmodem_id_t id; unsigned int corrlen; hfmodem_conv_t scale; unsigned int corr_cache; } rxslots[HFMODEM_NUMRXSLOTS]; struct hfmodem_l1_txslot { enum slot_st state; hfmodem_time_t tstart, tinc; unsigned char *data; unsigned int nbits; unsigned int cntbits; hfmodem_id_t id; unsigned char inv; unsigned int phinc; unsigned int phase_incs[2]; } txslots[HFMODEM_NUMTXSLOTS]; } l1;};struct hfmodem_correlator_cache { int refcnt; int lru; unsigned short phase_incs[2]; hfmodem_conv_t correlator[2][2][HFMODEM_MAXCORRLEN];};struct hfmodem_scops { unsigned int extent; void (*init)(struct hfmodem_state *dev); void (*prepare_input)(struct hfmodem_state *dev); void (*trigger_input)(struct hfmodem_state *dev); void (*prepare_output)(struct hfmodem_state *dev); void (*trigger_output)(struct hfmodem_state *dev); void (*stop)(struct hfmodem_state *dev); unsigned int (*intack)(struct hfmodem_state *dev); void (*mixer)(struct hfmodem_state *dev, int src, int igain, int ogain);};/* --------------------------------------------------------------------- */extern int hfmodem_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg);#if LINUX_VERSION_CODE >= 0x20100extern unsigned int hfmodem_poll(struct file *file, poll_table *wait);#elseextern int hfmodem_select(struct inode *inode, struct file *file, int sel_type, select_table *wait);#endifextern void hfmodem_clear_rq(struct hfmodem_state *dev);extern void hfmodem_input_samples(struct hfmodem_state *dev, hfmodem_time_t tstart, hfmodem_time_t tinc, __s16 *samples);extern int hfmodem_output_samples(struct hfmodem_state *dev, hfmodem_time_t tstart, hfmodem_time_t tinc, __s16 *samples);extern long hfmodem_next_tx_event(struct hfmodem_state *dev, hfmodem_time_t curr);extern void hfmodem_finish_pending_rx_requests(struct hfmodem_state *dev);extern void hfmodem_wakeup(struct hfmodem_state *dev);extern int hfmodem_sbcprobe(struct hfmodem_state *dev);extern int hfmodem_wssprobe(struct hfmodem_state *dev);extern void hfmodem_refclock_probe(void);extern void hfmodem_refclock_init(struct hfmodem_state *dev);extern hfmodem_time_t hfmodem_refclock_current(struct hfmodem_state *dev, hfmodem_time_t expected, int exp_valid);/* --------------------------------------------------------------------- */extern const char hfmodem_drvname[];extern const char hfmodem_drvinfo[];extern struct hfmodem_state hfmodem_state[NR_DEVICE];extern struct hfmodem_correlator_cache hfmodem_correlator_cache[HFMODEM_CORRELATOR_CACHE];/* --------------------------------------------------------------------- */#endif /* __KERNEL__ *//* --------------------------------------------------------------------- */#endif /* _HFMODEM_H */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -