FTDI USB MIDI connection
[mirrors/Programs.git] / c / ghetto-sound-system / ftdi-midi.c
1 #include <stdio.h>
2 #include <unistd.h>
3 #include <alsa/asoundlib.h>
4 #include <ftdi.h>
5
6
7 #define BAUD 31250
8
9 static snd_rawmidi_t *midi_in, *midi_out;
10 struct ftdi_context ftdi;
11
12 int main(void) {
13
14
15 snd_rawmidi_open(&midi_in, &midi_out, "virtual", SND_RAWMIDI_NONBLOCK);
16 //snd_rawmidi_open(&midi_in, &midi_out, "virtual", 0);
17
18
19 if (ftdi_init( &ftdi )) {
20 fprintf(stderr, "usb - init error !\n");
21 return 1;
22 }
23
24 if (ftdi_usb_open(&ftdi, 0x0403, 0x6001)) {
25 fprintf(stderr, "usb - open error (cannot find?) !\n");
26 fprintf(stderr, "ftdi_usb_open failed, error (%s)\n", ftdi_get_error_string(&ftdi));
27 ftdi_deinit( &ftdi );
28 return 2;
29 }
30
31 if (ftdi_usb_reset( &ftdi )) {
32 fprintf(stderr, "usb - reset error !\n");
33 ftdi_usb_close( &ftdi );
34 ftdi_deinit( &ftdi );
35 return 3;
36 }
37
38 ftdi_disable_bitbang( &ftdi );
39 ftdi_set_baudrate(&ftdi, BAUD);
40
41 unsigned char buf;
42 int ret;
43 while(1) {
44 //FTDI2MIDI
45 ret = ftdi_read_data(&ftdi,&buf,1);
46 if(ret < 0) break;
47 if(ret > 0) snd_rawmidi_write(midi_out, &buf, 1);
48
49 //MIDI2FTDI
50 ret = snd_rawmidi_read(midi_in,&buf,1);
51 if(ret < 0 && ret != -EAGAIN) break;
52 if(ret > 0) ftdi_write_data(&ftdi, &buf, 1);
53
54 usleep(1000);
55 }
56 exit(0);
57 }
This page took 0.277809 seconds and 4 git commands to generate.