On Thursday 01 January 2009 6:07:43 am Jared D. McNeill wrote: > A hardware driver using MI audio can provide its own ioctls, you could > use that for your driver (or layer another API between MI audio and your > driver using custom ioctls). I've been teaching a "driver writing" class at Western Washington University for several years and I've been using a simple, inexpensive A to D card as the device for which the students are to write a "new" driver. Part of the reason for this was the lack of any A to D card support in NetBSD. My initial look at the audio(4) layer made me think that it was too audio specific for a general purpose A to D driver. Yes, you could add MD ioctls, but there appeared to me to have a lot ioctls in the MI layer that would not make sense for a general A to D card. For example, the ioctl AUDIO_GETENC (audio_encoding_t) and the fields in the struct audio_prinfo like gain, balance, and encoding. The card I use in the class is Measurement Computing PCI DAS-08. It is a simple 8 channel, 8 or 12 bit converter. It can sample only one channel at a time. I'm sure the interface I designed for the students is way to simple for a general A to D framework, but it can give you an example of a much simpler framework for A to D generic work. The generic API was ioctl control and reading the data via the device. The set of ioctls are: #define DAS_START_SAMPLING _IO ('D', 0) #define DAS_STOP_SAMPLING _IO ('D', 1) /* Rate ... int is time in units of 10E-5 seconds. So 100000 is 1 second. */ #define DAS_SET_RATE _IOW('D', 2, int) #define DAS_GET_RATE _IOR('D', 3, int) /* Channel is a number from 0 to 7. */ #define DAS_SET_CHANNEL _IOW('D', 4, int) #define DAS_GET_CHANNEL _IOR('D', 5, int) This is WAY to simple for general purpose API for A to D work, but you asked for some ideas. We have had many working drivers for this card. --Phil -- Phil Nelson (phil at cs.wwu.edu) http://www.cs.wwu.edu/nelson NetBSD: http://www.NetBSD.org Coda: http://www.coda.cs.cmu.edu
Description: This is a digitally signed message part.