Re: How work ioctl?
"Philippe Houdoin" <[email protected]> Fri, 10 Jan 2003 09:45:24 +0100 (added by [email protected])
| Newsgroups | gmane.os.openbeos.midi |
|---|---|
| Message-ID | <5860316475-BeMail@hamlet> |
Jerome wrote:
> I'm writing the milestone 3, but I have never use ioctl function.
>
> that what I write:
>
> FILE *fichier =3D fopen("/dev/midi/ymf754/1", "rw");
> int file =3D fileno(fichier); //result is 3 seems to be OK
I hope you mean here:
int fd =3D fileno(fichier);
Or, much simpler:
int fd =3D open("/dev/midi/ymf754/1", O=5FRDWR | O=5FEXCL);
> uchar *data =3D [0x90 0x39 0x64];
> midi=5Ftimed=5Fdata DataToSend;
> DataToSend.when =3D time;
> DataToSend.size =3D length;
> DataToSend.data =3D data;
> int i =3D ioctl(fd, B=5FMIDI=5FTIMED=5FWRITE, &DataToSend,
> sizeof(midi=5Ftimed=5Fdata));
>
> Like this in midi=5Fdriver.h
>
> But I have always i =3D=3D -1 that means an error appear
>
> If you have an idea
Most probably, the timed read and write API is not supported by current
BeOS midi drivers.
Since midi2 and his midi=5Fserver, the midi events read & write timing is
not done anymore (if
it was ever!!!) by /dev/midi/* drivers but by the midi=5Fserver and
BMidiConsumers/Producers.
I'm not sure, but I guess if you try to simply write(fd, data, 3); it
would works better.
When I worked on a usb=5Fmidi kernel driver, the midi=5Fserver seems to
never call ioctl(B=5FMIDI=5FTIMED=5F*) on it but simply do loop on read()
and, eventually, write() to it when an midi event raise.
You may want to ask Oliver about his YMP754 driver MIDI API support,
too...
-Philippe
--
Fortune Cookie Says:
Mandrell: "You know what I think?"
Doctor: "Ah, ah that's a catch question. With a brain your size you
don't think, right?"
-- Dr. Who