RTEMS sound device driver
Pattara Kiatisevi
pkiatisevi at student.ei.uni-stuttgart.de
Sun Feb 10 01:09:17 UTC 2002
It works now! Thank you everybody.
Ok, next step I will be implementing this sound driver. Still I have more
questions. Do we have such things like these in RTEMS (or please point
me to the manual)?
-printk() hmmm and how to see the log output? :)
-kmalloc()
-copy_to_user()
-copy_from_user()
Thank you,
Pattara
The best things in life are free. - B.G. DeSilva (1927)
----------------------------------------------------------------------
Ott Pattara Kiatisevi T L W G
M.Sc. INFOTECH Student, Stuttgart, Germany http://linux.thai.net/
----------------------------------------------------------------------
On Fri, 8 Feb 2002, Joel Sherrill wrote:
> Pattara Kiatisevi wrote:
> >
> > OK, meanwhile I am trying this static method as you suggested while
> > waiting for the new dynamic one. (In the hope also to understand more
> > about RTEMS)
> >
> > 1.I created sound.h in my local application directory containing:
> >
> > #define SOUND_DRIVER_TABLE_ENTRY \
> > { sound_initialize, sound_open, sound_close, \
> > sound_read, sound_write, sound_control }
> > and the declarations of these 6 functions (copied from in console.h).
> >
> > 2.I created sound.c containing:
> >
> > rtems_device_driver sound_initialize(
> > rtems_device_major_number major,
> > rtems_device_minor_number minor,
> > void *arg
> > )
> > {
> > rtems_status_code status;
> >
> > /*
> > * Register Device Names
> > */
> >
> > status = rtems_io_register_name( "/dev/dsp", major, 0 );
> > if (status != RTEMS_SUCCESSFUL)
> > rtems_fatal_error_occurred(status);
> >
> > /*
> > * Initialize Hardware
> > */
> >
> > return RTEMS_SUCCESSFUL;
> > }
> >
> > For the rest 5 functions, I just have "return RTEMS_SUCCESSFUL;" inside.
> >
> > 3.In my application header, I have such thing like this:
> >
> > [cut]
> > #define CONFIGURE_HAS_OWN_DEVICE_DRIVER_TABLE
> >
> > #define CONFIGURE_MAXIMUM_DRIVERS 10
>
>
> > #include <console.h>
> > #include "sound.h"
> >
> > rtems_driver_address_table Device_drivers[] = {
> > CONSOLE_DRIVER_TABLE_ENTRY,
> > SOUND_DRIVER_TABLE_ENTRY,
> > { NULL, NULL, NULL, NULL, NULL, NULL }
> > };
> >
> > #include <confdefs.h>
> >
> > [cut]
> >
> > #define open_mode 1
> > #define DEVICE_NAME "/dev/dsp"
> >
> > [cut]
> > /* Open sound device */
> > if ( (audio_fd = open(DEVICE_NAME, open_mode, 0) ) == -1 ) {
> > /* open of a device failed */
> > perror(DEVICE_NAME);
> > exit(1);
> > }
> >
> > Then I compiled and ran the code and got this error:
> >
> > /dev/dsp: Too many open files in system
> >
> > Do you have any clues?
>
> The error message was actually right in this case. :)
>
> By default, RTEMS only provides 3 file descriptors (stdin, out,
> and error).
>
> #define CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS XXX
>
> where XXX is some number greater than 3. :)
>
> > Thank you very much,
> > Pattara
> >
> > On Thu, 7 Feb 2002, Aaron J. Grier wrote:
> >
> > > On Fri, Feb 08, 2002 at 12:02:33AM +0100, Pattara Kiatisevi wrote:
> > >
> > > > But how exactly is this "registering" process? I took a look at the
> > > > existing driver code as suggested and draft the steps as follow.
> > >
> > > rtems_io_register_name binds a name in filesystem space to the device
> > > driver.
> > >
> > > > -I create a file contained device driver's code: sound-driver.c
> > > > -Which should contain initialize(), open(), close(), read(),
> > > > write(), and control(). Arguments of these functions = like in console.c?
> > >
> > > yes.
> > >
> > > > -In the initialize() I would have sth. like:
> > > >
> > > > rtems_io_register_name( "/dev/dsp", major, 0 );
> > > >
> > > > -In my application file, I do open(), ioctl(), write(), close() to
> > > > /dev/dsp as usual.
> > >
> > > you understand correctly.
> > >
> > > > -And then how can I tell RTEMS to call this sound device driver when there
> > > > is access to /dev/dsp?
> > >
> > > after registering the device with rtems_io_register_name, you can
> > > perform standard operations like open(), close(), lseek(), dup(), etc.
> > > on your file. RTEMS handles the "mid level" between these calls and
> > > your device driver calls.
> > >
> > > > Something to do with #def CONFIGURE_HAS_OWN_DEVICE_DRIVER_TABLE and I
> > > > have to create my own Device_drivers? (Hmm, but how and where? :) )
> > >
> > > look at c/src/lib/include/console.h. you define a table entry, and the
> > > extern declarations for your driver entry points, then somewhere in your
> > > confdefs.h:
> > >
> > > #define CONFIGURE_HAS_OWN_DEVICE_DRIVER_TABLE
> > >
> > > #include <console.h>
> > >
> > > rtems_driver_address_table Device_drivers[] = {
> > > CONSOLE_DRIVER_TABLE_ENTRY,
> > > { NULL, NULL, NULL, NULL, NULL, NULL }
> > > };
> > >
> > > getting everything glued in to autoconf/automake so that they will be
> > > compiled and linked into your BSP is a whole other story. :) let us
> > > know if you need help with that.
> > >
> > > --
> > > Aaron J. Grier | Frye Electronics, Tigard, OR | aaron at frye.com
> > > "In a few thousand years people will be scratching their heads
> > > wondering how on earth the first computer was invented and
> > > bootstrapped without a prior computer to do it with."
> > > -- Chris Malcolm, on comp.arch
> > >
> > >
>
> --
> Joel Sherrill, Ph.D. Director of Research & Development
> joel at OARcorp.com On-Line Applications Research
> Ask me about RTEMS: a free RTOS Huntsville AL 35805
> Support Available (256) 722-9985
>
>
More information about the users
mailing list