Skip to content

Commit

Permalink
web midi and websockets
Browse files Browse the repository at this point in the history
  • Loading branch information
marchingband committed Mar 15, 2022
1 parent 48b7288 commit ba1a190
Show file tree
Hide file tree
Showing 4 changed files with 54 additions and 5 deletions.
22 changes: 22 additions & 0 deletions src/midi.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,17 @@

midiXparser midiParser;
midiXparser usbMidiParser;
midiXparser webMidiParser;
uint8_t *msg;
uint8_t *usb_msg;
uint8_t *web_msg;


void midi_parser_init(void)
{
midiParser.setMidiMsgFilter( midiXparser::channelVoiceMsgTypeMsk );
usbMidiParser.setMidiMsgFilter( midiXparser::channelVoiceMsgTypeMsk );
webMidiParser.setMidiMsgFilter( midiXparser::channelVoiceMsgTypeMsk );
}

extern "C" uint8_t* midi_parse(uint8_t in)
Expand Down Expand Up @@ -51,4 +54,23 @@ extern "C" uint8_t* usb_midi_parse(uint8_t in)
}
}
return NULL;
}

extern "C" uint8_t* web_midi_parse(uint8_t in)
{
// log_i("got a byte %d", in);
if ( webMidiParser.parse( in ) ) // Do we received a channel voice msg ?
{
if (
webMidiParser.isMidiStatus(midiXparser::noteOnStatus) ||
webMidiParser.isMidiStatus(midiXparser::noteOffStatus) ||
webMidiParser.isMidiStatus(midiXparser::programChangeStatus) ||
webMidiParser.isMidiStatus(midiXparser::controlChangeStatus)
)
{
web_msg = webMidiParser.getMidiMsg();
return web_msg;
}
}
return NULL;
}
7 changes: 4 additions & 3 deletions src/midi.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,10 @@ void midi_parser_init(void);
extern "C" {
#endif

uint8_t* midi_parse(uint8_t in);
uint8_t* usb_midi_parse(uint8_t in);
void midi_hook_default(uint8_t *in);
uint8_t* midi_parse(uint8_t in);
uint8_t* usb_midi_parse(uint8_t in);
uint8_t* web_midi_parse(uint8_t in);
void midi_hook_default(uint8_t *in);

#ifdef __cplusplus
}
Expand Down
20 changes: 20 additions & 0 deletions src/midi_in.c
Original file line number Diff line number Diff line change
Expand Up @@ -29,10 +29,12 @@ esp_err_t ret;
QueueHandle_t wav_player_queue;
QueueHandle_t uart_queue; // uart Events queue
QueueHandle_t uart_queue_usb; // usb uart Events queue
QueueHandle_t web_midi_queue; // usb uart Events queue

struct wav_player_event_t wav_player_event;
uint8_t *msg;
uint8_t *usb_msg;
uint8_t *web_msg;
struct metadata_t metadata;

void(*midi_hook)(uint8_t *in);
Expand Down Expand Up @@ -173,6 +175,22 @@ static void read_uart_task()
}
}

static void web_midi_task()
{
uint8_t web_midi_byte;
for(;;)
{
if(xQueueReceive(web_midi_queue, (void *)&web_midi_byte, (portTickType)portMAX_DELAY))
{
web_msg = web_midi_parse(web_midi_byte);
if(web_msg)
{
handle_midi(web_msg);
}
}
}
}

static void read_usb_uart_task()
{
uart_event_t event;
Expand Down Expand Up @@ -432,6 +450,8 @@ void midi_init(bool useUsbMidi)
init_uart();
midi_hook = midi_hook_default;
xTaskCreatePinnedToCore(read_uart_task, "read_uart_task", 4096, NULL, 3, NULL, 0);
web_midi_queue = xQueueCreate(64, sizeof(uint8_t));
xTaskCreatePinnedToCore(web_midi_task, "web_midi_task", 4096, NULL, 3, NULL, 0);
if(useUsbMidi)
{
init_gpio_usb();
Expand Down
10 changes: 8 additions & 2 deletions src/server.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,8 @@ extern "C" void sendWSMsg(char* msg){

cJSON *ws_root;

QueueHandle_t web_midi_queue;

void onWsEvent(AsyncWebSocket * server, AsyncWebSocketClient * client, AwsEventType type, void * arg, uint8_t *data, size_t len){
if(type == WS_EVT_CONNECT){
Serial.printf("ws[%s][%u] connect\n", server->url(), client->id());
Expand All @@ -83,8 +85,12 @@ void onWsEvent(AsyncWebSocket * server, AsyncWebSocketClient * client, AwsEventT
String msg = "";
if(info->final && info->index == 0 && info->len == len){
//the whole message is in a single frame and we got all of it's data
ws_root = cJSON_Parse((char *)data);
on_rpc_in(ws_root);
// ws_root = cJSON_Parse((char *)data);
// on_rpc_in(ws_root);
for(int i=0; i<len; i++){
// log_i("got midi %d index:%d", data[i], i);
xQueueSendToBack(web_midi_queue, (void *)&data[i], portMAX_DELAY);
}
}
}
}
Expand Down

0 comments on commit ba1a190

Please sign in to comment.