OK, I'm stupid... Sorry for using the devel-list for such a fu.....
thing.
Charles
On 2002.05.10 18:00 Charles Fl�che wrote:
> Who ! What's a problem !
>
> This is my source code :
>
> /* START OF SOURCE */
>
> * tests midi
> Utilisation de l'API rawmidi
> On passe pars l'API rawmidi
> TEST 1 : dump store
> TEST 2 : dump edit buffer (programme 0, tous les param�tres � 0)
> TEST 3 : dump all data
> TEST 4 : request all data (dump du message et reception du
> sysex en retour)
> TEST 5 : program change vers 00
> */
>
> #include <stdio.h>
> #include <unistd.h>
> #include <time.h>
> #include <sys/types.h>
> #include <sys/stat.h>
> #include <fcntl.h>
> #include <stdlib.h>
> #include <alsa/asoundlib.h>
>
>
> void store(snd_rawmidi_t *handle) {
>
> snd_rawmidi_write (handle, "\xf0\x00\x00\x0e\x12\x00\x03\xF7",
> 8);
> snd_rawmidi_drain(handle);
> }
>
> void deb(int fd) {
> // pour se rapprocher de la realite future du programme, un
> tableau de unsigned char est passe � write
> unsigned char
> sysex[]="\xF0\x00\x00\x0E\x12\x00\x00\x00\x00\x00\x00\xF7";
> write (fd,sysex,12);
> }
>
> void dad(snd_rawmidi_t *handle) {
> // pour se rapprocher de la realite future du programme, un
> tableau de unsigned char est passe � write
> int i;
> int flag;
> struct timespec *delay;
> unsigned char
>
>sysex[]="\xF0\x00\x00\x0E\x12\x00\x01\x03\x00\x00\x24\x50\x01\x3F\x30\x01\x50\x1E\x01\x32\x20\x01\x25\x3F\x01\x44\x12\x01\x5A\x7F\x01\x0F\x57\x01\x38\x1E\x01\x35\x60\x01\x3D\x4F\x01\x4E\x11\x01\x2A\x4B\x01\x44\x60\x01\x40\x55\x01\x32\x61\x01\x19\x75\x01\x63\x73\x01\x18\x54\x01\x3C\x50\x01\x2A\x54\x01\x21\x55\x01\x34\x22\x01\x30\x66\x01\x2B\x46\x01\x15\x6F\x01\x31\x4A\x01\x40\x7F\x01\x51\x47\x01\x03\x25\x01\x11\x0F\x01\x02\x0F\x01\x08\x24\x01\x0E\x0A\x01\x03\x1E\x01\x05\x1E\x01\x08\x14\x01\x19\x0F\x01\x01\x7D\x01\x07\x1E\x01\x04\x19\x01\x02\x5B\x01\x04\x0F\x01\x03\x15\x01\x02\x47\x01\x03\x19\x01\x06\x7D\x01\x05\x64\x01\x0A\x4B\x01\x02\x00\x01\x30\x00\x01\x55\x00\x01\x46\x10\x01\x1E\x00\x01\x0D\x1E\x01\x00\x00\x01\x00\x63\x01\x64\x1C\x01\x66\x07\x01\x1E\x46\x01\x46\x1E\x01\x2A\x3A\x01\x0B\x0B\x01\x3B\x2A\x01\x0E\x0E\x01\x13\x07\x01\x3C\x28\x01\x13\x18\x01\x0B\x0A\x01\x3F\x01\x01\x50\x00\x01\x18\x00\x01\x40\x0E\x01\x20\x14\x01\x4B\x03\x01\x29\x05\x01\x44\x0C\x01\x00\x14\x01\x3C\x29\x
> 01
>
>\x25\x05\x01\x5F\x1B\x01\x32\x32\x01\x1A\x58\x01\x39\x4B\x01\x2D\x06\x01\x3C\x02\x01\x3B\x3D\x01\x43\x49\x01\x48\x04\x01\x49\x03\x01\x50\x03\x01\x48\x05\x01\x38\x32\x01\x19\x0E\x01\x52\x64\x01\x4A\x04\x01\x25\x4B\x01\x4D\x0B\x01\x35\x01\x01\xF7";
>
> delay=(struct timespec *)malloc(sizeof(struct timespec));
> // definie le delai de 10ms
> delay->tv_sec=0;
> delay->tv_nsec=10000000;
> //envoie l'entete du sysex
> for (i=0;i<7;i++)
> snd_rawmidi_write (handle,&sysex[i],1);
> snd_rawmidi_drain(handle);
> flag=0;
> while (i!=308) {
> snd_rawmidi_write (handle,&sysex[i],1);
> i++;
> flag++;
> if (flag==3) {
> nanosleep(delay,NULL);
> flag=0;
> snd_rawmidi_drain(handle);
> }
> }
> }
>
> void pc(int fd){
> // program change vers programme 0
> write (fd,"\xc0\x0",2);
> }
>
> void affiche(unsigned char a[]) {
> int i=-1;
> printf("SySex recu : \n");
> while (a[i++] != 0xF7) {
> printf("%x",a[i]);
> printf(" ");
> }
> printf("\n");
> printf("\n");
> return;
> }
>
> void rp(snd_rawmidi_t *handle_in,snd_rawmidi_t *handle_out) {
> unsigned char buf[307];
>
> snd_rawmidi_write(handle_out,"\xF0\x00\x00\x0E\x12\x00\x41\xF7",8);
> snd_rawmidi_drain(handle_out);
> snd_rawmidi_read(handle_in,buf,308);
>
> affiche(buf);
>
> }
>
> int main (int argc,char **argv) {
> int fd;
> int err;
> snd_rawmidi_t *handle_in,*handle_out;
> char *device_in = NULL;
> char *device_out = NULL;
> //ouverture du node en lecture
> err = snd_rawmidi_open(&handle_in, NULL, device_in, 0);
> if (err)
> printf("snd_rawmidi_open IN a echoue...\n");
> //ouverture du node en lecture
> err = snd_rawmidi_open(NULL, &handle_out, device_out, 0);
> if (err)
> printf("snd_rawmidi_open OUT a echoue...\n");
> printf("Store\n");
> store(handle_out);
> sleep(1);
> /* printf("Dump Edit Buffer\n");
> deb(fd);
> sleep(1);*/
> printf("Dump All Data\n");
> dad(handle_out);
> sleep(1);
> /* printf("Program Change\n");
> pc(fd);
> sleep(1);*/
> printf("Request All Program\n");
> rp(handle_in,handle_out);
> sleep(1);
> return 0;
> }
>
> /* END OF SOURCE */
>
> First, it isn't well programmed, I know it ! In fact, I've programmed
> this one using nodes (/dev/midi), passing trough the rawmidi api. So
> in this source, you'll see trace of the old source... But now, I'm
> trying to use the rawmidi interface. This program compile well, but
> at execution, I could see this :
>
> api: rawmidi.c:301: snd_rawmidi_open: Assertion `(inputp ||
> outputp) && name' failed.
>
> (note : first word, api, is the name of my source)
>
> What's the problem ?
>
> This one has been tested on :
>
> linux 2.4.18
> very last alsa ! (Release Candidate 0.9 RC1)
> maestro3
> emu10k1 on another computer with same kernel and same alsa
>
> If anyone could help me, I'll be very very happy, and my teacher too
> !! (this project is for my studies...)
>
> Thanx for all !
>
> Charles
>
> _______________________________________________________________
>
> Have big pipes? SourceForge.net is looking for download mirrors. We
> supply
> the hardware. You get the recognition. Email Us:
> [EMAIL PROTECTED]
> _______________________________________________
> Alsa-devel mailing list
> [EMAIL PROTECTED]
> https://lists.sourceforge.net/lists/listinfo/alsa-devel
_______________________________________________________________
Have big pipes? SourceForge.net is looking for download mirrors. We supply
the hardware. You get the recognition. Email Us: [EMAIL PROTECTED]
_______________________________________________
Alsa-devel mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/alsa-devel