⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hfmodem.h

📁 基于组件方式开发操作系统的OSKIT源代码
💻 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 + -