4 #include "../include/asoundlib.h"
7 static void usage(void)
9 fprintf(stderr, "usage: rawmidi [options]\n");
10 fprintf(stderr, " options:\n");
11 fprintf(stderr, " -v: verbose mode\n");
12 fprintf(stderr, " -i device-id : test ALSA input device\n");
13 fprintf(stderr, " -o device-id : test ALSA output device\n");
14 fprintf(stderr, " -I node : test input node\n");
15 fprintf(stderr, " -O node : test output node\n");
16 fprintf(stderr, " -t: test midi thru\n");
17 fprintf(stderr, " example:\n");
18 fprintf(stderr, " rawmidi -i hw:0,0 -O /dev/midi1\n");
19 fprintf(stderr, " tests input for card 0, device 0, using snd_rawmidi API\n");
20 fprintf(stderr, " and /dev/midi1 using file descriptors\n");
25 void sighandler(int dum)
30 int main(int argc,char** argv)
36 char *device_in = NULL;
37 char *device_out = NULL;
39 char *node_out = NULL;
41 int fd_in = -1,fd_out = -1;
42 snd_rawmidi_t *handle_in = 0,*handle_out = 0;
49 for (i = 1 ; i<argc ; i++) {
50 if (argv[i][0]=='-') {
63 device_in = argv[++i];
71 device_out = argv[++i];
82 fprintf(stderr,"Using: \n");
83 fprintf(stderr,"Input: ");
85 fprintf(stderr,"device %s\n",device_in);
87 fprintf(stderr,"%s\n",node_in);
89 fprintf(stderr,"NONE\n");
91 fprintf(stderr,"Output: ");
93 fprintf(stderr,"device %s\n",device_out);
95 fprintf(stderr,"%s\n",node_out);
97 fprintf(stderr,"NONE\n");
102 err = snd_rawmidi_open(&handle_in,NULL,device_in,0);
104 fprintf(stderr,"snd_rawmidi_open %s failed: %d\n",device_in,err);
107 if (node_in && (!node_out || strcmp(node_out,node_in))) {
108 fd_in = open(node_in,O_RDONLY);
110 fprintf(stderr,"open %s for input failed\n",node_in);
114 signal(SIGINT,sighandler);
117 err = snd_rawmidi_open(NULL,&handle_out,device_out,0);
119 fprintf(stderr,"snd_rawmidi_open %s failed: %d\n",device_out,err);
122 if (node_out && (!node_in || strcmp(node_out,node_in))) {
123 fd_out = open(node_out,O_WRONLY);
125 fprintf(stderr,"open %s for output failed\n",node_out);
129 if (node_in && node_out && strcmp(node_out,node_in)==0) {
130 fd_in = fd_out = open(node_out,O_RDWR);
132 fprintf(stderr,"open %s for input and output failed\n",node_out);
139 if (handle_in || fd_in!=-1) {
140 fprintf(stderr,"Read midi in\n");
141 fprintf(stderr,"Press ctrl-c to stop\n");
147 snd_rawmidi_read(handle_in,&ch,1);
149 fprintf(stderr,"read %02x\n",ch);
158 fprintf(stderr,"read %02x\n",ch);
163 if (handle_out || fd_out!=-1) {
164 fprintf(stderr,"Writing note on / note off\n");
169 ch=0x90; snd_rawmidi_write(handle_out,&ch,1);
170 ch=60; snd_rawmidi_write(handle_out,&ch,1);
171 ch=100; snd_rawmidi_write(handle_out,&ch,1);
172 snd_rawmidi_drain(handle_out);
174 ch=0x90; snd_rawmidi_write(handle_out,&ch,1);
175 ch=60; snd_rawmidi_write(handle_out,&ch,1);
176 ch=0; snd_rawmidi_write(handle_out,&ch,1);
177 snd_rawmidi_drain(handle_out);
181 ch=0x90; write(fd_out,&ch,1);
182 ch=60; write(fd_out,&ch,1);
183 ch=100; write(fd_out,&ch,1);
185 ch=0x90; write(fd_out,&ch,1);
186 ch=60; write(fd_out,&ch,1);
187 ch=0; write(fd_out,&ch,1);
190 if ((handle_in || fd_in!=-1) && (handle_out || fd_out!=-1)) {
192 fprintf(stderr,"Testing midi thru in\n");
198 snd_rawmidi_read(handle_in,&ch,1);
204 fprintf(stderr,"thru: %02x\n",ch);
208 snd_rawmidi_write(handle_out,&ch,1);
209 snd_rawmidi_drain(handle_out);
216 fprintf(stderr,"Testing midi thru needs both input and output\n");
222 fprintf(stderr,"Closing\n");
226 snd_rawmidi_drain(handle_in);
227 snd_rawmidi_close(handle_in);
230 snd_rawmidi_drain(handle_out);
231 snd_rawmidi_close(handle_out);