patch-2.1.63 linux/include/linux/radio.h
Next file: linux/include/linux/raid1.h
Previous file: linux/include/linux/proc_fs.h
Back to the patch index
Back to the overall index
- Lines: 135
- Date:
Tue Nov 4 10:23:25 1997
- Orig file:
v2.1.62/linux/include/linux/radio.h
- Orig date:
Wed Dec 31 16:00:00 1969
diff -u --recursive --new-file v2.1.62/linux/include/linux/radio.h linux/include/linux/radio.h
@@ -0,0 +1,134 @@
+/*
+ * linux/radio.h
+ *
+ * Include for radio card support under linux
+ * Another pointless suid-binary removal utility... :-)
+ */
+
+#ifndef _LINUX_RADIO_H
+#define _LINUX_RADIO_H
+
+#include <linux/ioctl.h>
+
+/*
+ * Constants
+ */
+/* Various types of Radio card... */
+/* (NB. I've made this a bit-field. It might make the difference one day.) */
+#define RADIO_TYPE_UNSUP 0x0000
+#define RADIO_TYPE_RTRACK 0x0001 /* AIMSlab RadioTrack (RadioReveal) card -- basic, to say the least */
+#define RADIO_TYPE_WINRADIO 0x0002 /* Dunno, but made by someone */
+#define RADIO_TYPE_TYPHOON 0x0004 /* It exists... */
+
+/* waveband types */
+#define RADIO_PROTOCOL_AM 0x0010 /* AM "protocol" */
+#define RADIO_PROTOCOL_FM 0x0020 /* FM "protocol" */
+#define RADIO_PROTOCOL_SSB 0x0040 /* SSB */
+/* and no doubt some other stuff, too (Brian?) */
+
+
+/* the following are _very_ inaccurate; essentially, all that
+ * they do is provide a "name" for client programs
+ */
+#define RADIO_BAND_UNKNOWN 0x0000 /* other */
+#define RADIO_BAND_AM_SW 0x0100 /* short wave (?) */
+#define RADIO_BAND_AM_MW 0x0200 /* medium wave (540 - 1600) */
+#define RADIO_BAND_AM_LW 0x0400 /* long wave (150 - 270) */
+#define RADIO_BAND_FM_STD 0x1000 /* "standard" FM band (i.e. 88 - 108 or so) */
+
+
+/* Since floating-point stuff is illegal in the kernel, we use these
+ * pairs of macros to convert to, and from userland floats
+ * (I hope these are general enough!)
+ */
+/* Remember to make sure that all of these are integral... */
+/* Also remember to pass sensible things in here (MHz for FM, kHz for AM) */
+#define RADIO_FM_RES 100 /* 0.01 MHZ */
+#define RADIO_FM_FRTOINT(fl) ((int)(((float)(fl))*RADIO_FM_RES))
+#define RADIO_FM_INTTOFR(fr) ((float)(((int)(fr))/RADIO_FM_RES))
+
+/* Old RadioTrack definitions
+#define RADIO_FM_FRTOINT(fl) ((int)(((float)(fl)-88.0)*40)+0xf6c)
+#define RADIO_FM_INTTOFR(fr) ((float)(((fr)-0xf6c)/40)+88.0)
+*/
+
+#define RADIO_AM_RES 1 /* 1 kHz */
+#define RADIO_AM_FRTOINT(fl) ((int)(((float)(fl))*RADIO_AM_RES))
+#define RADIO_AM_INTTOFR(fr) ((float)(((int)(fr))/RADIO_AM_RES))
+
+
+/*
+ * Structures
+ */
+/* query structures */
+struct radio_cap {
+ int dev_num; /* device index */
+ int type; /* device type (see above) */
+ int num_bwidths; /* number of "bandwidths" supported */
+ int volmin, volmax; /* min/max in steps of one */
+};
+
+struct radio_band {
+ int dev_num; /* device index (IN) */
+ int index; /* "bandwidth" index (IN) */
+ int proto; /* protocol (AM, FM, SSB, etc) (OUT) */
+ int types; /* see RADIO_BAND_* above */
+ int freqmin,freqmax; /* encoded according to the macros above */
+ int strmin,strmax; /* min/max signal strength (steps of 1) */
+};
+
+/* Previously, this was in four separate structures:
+ * radio_vol, radio_freq, radio_band and radio_sigstr,
+ * That was foolish, but now it's not so obvious what's going on.
+ * Be careful.
+ */
+
+struct radio_ctl {
+ int dev_num; /* device index (IN) */
+ int value; /* volume, frequency, band, sigstr */
+};
+
+
+/*
+ * ioctl numbers
+ */
+/* You have _how_ many radio devices? =) */
+#define RADIO_NUMDEVS _IOR(0x8c, 0x00, int)
+#define RADIO_GETCAPS _IOR(0x8c, 0x01, struct radio_cap)
+#define RADIO_GETBNDCAP _IOR(0x8c, 0x02, struct radio_band)
+
+#define RADIO_SETVOL _IOW(0x8c, 0x10, struct radio_ctl)
+#define RADIO_GETVOL _IOR(0x8c, 0x11, struct radio_ctl)
+#define RADIO_SETBAND _IOW(0x8c, 0x12, struct radio_ctl)
+#define RADIO_GETBAND _IOR(0x8c, 0x13, struct radio_ctl)
+#define RADIO_SETFREQ _IOW(0x8c, 0x14, struct radio_ctl)
+#define RADIO_GETFREQ _IOR(0x8c, 0x15, struct radio_ctl)
+
+#define RADIO_GETSIGSTR _IOR(0x8c, 0x30, struct radio_ctl)
+
+/* kernel specific stuff... */
+#ifdef __KERNEL__
+/* Try to keep the number of function pointers to a minimum.
+ * Devices are responsible for updating, or otherwise, the
+ * variables here, not the outside wrapper.
+ */
+struct radio_device;
+
+int radio_add_device(struct radio_device *newdev);
+
+struct radio_device {
+ struct radio_cap *cap;
+ struct radio_band *bands; /* pointer to array of radio_bands */
+ int (*setvol)(struct radio_device*,int);
+ int curvol;
+ int (*setband)(struct radio_device*,int);
+ int curband;
+ int (*setfreq)(struct radio_device*,int);
+ int curfreq;
+ int (*getsigstr)(struct radio_device*);
+ struct radio_device *next;
+ void *misc; /* device internal storage... (eg i/o addresses, etc */
+};
+#endif /* __KERNEL__ */
+
+#endif /* _LINUX_RADIO_H */
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen, slshen@lbl.gov