aboutsummaryrefslogtreecommitdiffhomepage
path: root/backends/midi.c
diff options
context:
space:
mode:
authorcbdev <cb@cbcdn.com>2019-09-15 23:09:44 +0200
committercbdev <cb@cbcdn.com>2019-09-15 23:09:44 +0200
commit1c8d7c570678c2f4f3bf61529489336f9d085f8d (patch)
treec96fae6d14629160ab2f739ea8bd4741b77db6bd /backends/midi.c
parent9997c446677e490a0d376701f838e804c3b28644 (diff)
downloadmidimonster-1c8d7c570678c2f4f3bf61529489336f9d085f8d.tar.gz
midimonster-1c8d7c570678c2f4f3bf61529489336f9d085f8d.tar.bz2
midimonster-1c8d7c570678c2f4f3bf61529489336f9d085f8d.zip
Fix minor MIDI issues
Diffstat (limited to 'backends/midi.c')
-rw-r--r--backends/midi.c27
1 files changed, 15 insertions, 12 deletions
diff --git a/backends/midi.c b/backends/midi.c
index 571a61d..65ce48a 100644
--- a/backends/midi.c
+++ b/backends/midi.c
@@ -84,14 +84,14 @@ static instance* midi_instance(){
return inst;
}
-static int midi_configure_instance(instance* instance, char* option, char* value){
- midi_instance_data* data = (midi_instance_data*) instance->impl;
+static int midi_configure_instance(instance* inst, char* option, char* value){
+ midi_instance_data* data = (midi_instance_data*) inst->impl;
//FIXME maybe allow connecting more than one device
if(!strcmp(option, "read")){
//connect input device
if(data->read){
- fprintf(stderr, "MIDI port already connected to an input device\n");
+ fprintf(stderr, "MIDI instance %s was already connected to an input device\n", inst->name);
return 1;
}
data->read = strdup(value);
@@ -100,7 +100,7 @@ static int midi_configure_instance(instance* instance, char* option, char* value
else if(!strcmp(option, "write")){
//connect output device
if(data->write){
- fprintf(stderr, "MIDI port already connected to an output device\n");
+ fprintf(stderr, "MIDI instance %s was already connected to an output device\n", inst->name);
return 1;
}
data->write = strdup(value);
@@ -111,7 +111,7 @@ static int midi_configure_instance(instance* instance, char* option, char* value
return 1;
}
-static channel* midi_channel(instance* instance, char* spec){
+static channel* midi_channel(instance* inst, char* spec){
midi_channel_ident ident = {
.label = 0
};
@@ -142,13 +142,13 @@ static channel* midi_channel(instance* instance, char* spec){
old_syntax = 1;
}
else{
- fprintf(stderr, "Unknown MIDI channel specification %s\n", spec);
+ fprintf(stderr, "Unknown MIDI channel control type in %s\n", spec);
return NULL;
}
ident.fields.channel = strtoul(channel, &channel, 10);
if(ident.fields.channel > 15){
- fprintf(stderr, "MIDI channel out of range in channel spec %s\n", spec);
+ fprintf(stderr, "MIDI channel out of range in midi channel spec %s\n", spec);
return NULL;
}
@@ -176,18 +176,22 @@ static channel* midi_channel(instance* instance, char* spec){
ident.fields.type = pressure;
channel += 8;
}
- else if(!strncmp(channel, "pitch", 8)){
+ else if(!strncmp(channel, "pitch", 5)){
ident.fields.type = pitchbend;
}
else if(!strncmp(channel, "aftertouch", 10)){
ident.fields.type = aftertouch;
}
+ else{
+ fprintf(stderr, "Unknown MIDI channel control type in %s\n", spec);
+ return NULL;
+ }
}
ident.fields.control = strtoul(channel, NULL, 10);
if(ident.label){
- return mm_channel(instance, ident.label, 1);
+ return mm_channel(inst, ident.label, 1);
}
return NULL;
@@ -196,13 +200,12 @@ static channel* midi_channel(instance* instance, char* spec){
static int midi_set(instance* inst, size_t num, channel** c, channel_value* v){
size_t u;
snd_seq_event_t ev;
- midi_instance_data* data;
+ midi_instance_data* data = (midi_instance_data*) inst->impl;
midi_channel_ident ident = {
.label = 0
};
for(u = 0; u < num; u++){
- data = (midi_instance_data*) c[u]->instance->impl;
ident.label = c[u]->ident;
snd_seq_ev_clear(&ev);
@@ -334,7 +337,7 @@ static int midi_handle(size_t num, managed_fd* fds){
}
static int midi_start(){
- size_t n, p;
+ size_t n = 0, p;
int nfds, rv = 1;
struct pollfd* pfds = NULL;
instance** inst = NULL;