Nano LD_PRELOAD wrapper
[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 #define BUFFER_SIZE 1
9 #define LATENCY 0
10
11 static snd_rawmidi_t *midi_in, *midi_out;
12 struct ftdi_context ftdi;
13
14 int main(void) {
15
16
17 snd_rawmidi_open(&midi_in, &midi_out, "virtual", SND_RAWMIDI_NONBLOCK);
18 //snd_rawmidi_open(&midi_in, &midi_out, "virtual", 0);
19
20
21 if (ftdi_init( &ftdi )) {
22 fprintf(stderr, "usb - init error !\n");
23 return 1;
24 }
25
26 if (ftdi_usb_open(&ftdi, 0x0403, 0x6001)) {
27 fprintf(stderr, "usb - open error (cannot find?) !\n");
28 fprintf(stderr, "ftdi_usb_open failed, error (%s)\n", ftdi_get_error_string(&ftdi));
29 ftdi_deinit( &ftdi );
30 return 2;
31 }
32
33 if (ftdi_usb_reset( &ftdi )) {
34 fprintf(stderr, "usb - reset error !\n");
35 ftdi_usb_close( &ftdi );
36 ftdi_deinit( &ftdi );
37 return 3;
38 }
39
40 ftdi_disable_bitbang( &ftdi );
41 ftdi_set_baudrate(&ftdi, BAUD);
42
43 unsigned char buf[BUFFER_SIZE];
44 int ret;
45 while(1) {
46 //FTDI2MIDI
47 ret = ftdi_read_data(&ftdi, buf, BUFFER_SIZE);
48 if(ret < 0) break;
49 if(ret > 0) snd_rawmidi_write(midi_out, buf, BUFFER_SIZE);
50
51 //MIDI2FTDI
52 /*
53 ret = snd_rawmidi_read(midi_in, buf,BUFFER_SIZE);
54 if(ret < 0 && ret != -EAGAIN) break;
55 if(ret > 0) ftdi_write_data(&ftdi, buf,BUFFER_SIZE);
56 */
57 usleep(LATENCY);
58 }
59 exit(0);
60 }
This page took 0.294241 seconds and 4 git commands to generate.