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