81 lines
2.3 KiB
C++
81 lines
2.3 KiB
C++
#include "AppleMIDI_Interface.hpp"
|
|
|
|
#include "lwip/apps/mdns.h"
|
|
#include "pico/cyw43_arch.h"
|
|
|
|
BEGIN_CS_NAMESPACE
|
|
|
|
AppleMIDI_Interface::AppleMIDI_Interface(const char *name, uint16_t port)
|
|
: session_(name, port), sessionName_(name), port_(port) {}
|
|
|
|
void AppleMIDI_Interface::begin() {
|
|
session_.setName(sessionName_);
|
|
session_.setPort(port_);
|
|
session_.begin();
|
|
initMDNS();
|
|
}
|
|
|
|
void AppleMIDI_Interface::initMDNS() {
|
|
cyw43_arch_lwip_begin();
|
|
mdns_resp_init();
|
|
struct netif *nif = &cyw43_state.netif[CYW43_ITF_STA];
|
|
mdns_resp_add_netif(nif, sessionName_);
|
|
mdns_resp_add_service(nif, sessionName_, "_apple-midi",
|
|
DNSSD_PROTO_UDP, port_, nullptr, nullptr);
|
|
cyw43_arch_lwip_end();
|
|
}
|
|
|
|
void AppleMIDI_Interface::update() {
|
|
session_.available();
|
|
MIDI_Interface::updateIncoming(this);
|
|
}
|
|
|
|
MIDIReadEvent AppleMIDI_Interface::read() {
|
|
return parser_.pull(AppleMIDIBytePuller{session_});
|
|
}
|
|
|
|
ChannelMessage AppleMIDI_Interface::getChannelMessage() const {
|
|
return parser_.getChannelMessage();
|
|
}
|
|
|
|
SysCommonMessage AppleMIDI_Interface::getSysCommonMessage() const {
|
|
return parser_.getSysCommonMessage();
|
|
}
|
|
|
|
RealTimeMessage AppleMIDI_Interface::getRealTimeMessage() const {
|
|
return parser_.getRealTimeMessage();
|
|
}
|
|
|
|
SysExMessage AppleMIDI_Interface::getSysExMessage() const {
|
|
return parser_.getSysExMessage();
|
|
}
|
|
|
|
void AppleMIDI_Interface::sendChannelMessageImpl(ChannelMessage msg) {
|
|
session_.beginTransmission(MIDI_NAMESPACE::MidiType::InvalidType);
|
|
session_.write(msg.header);
|
|
session_.write(msg.data1);
|
|
if (msg.hasTwoDataBytes())
|
|
session_.write(msg.data2);
|
|
}
|
|
|
|
void AppleMIDI_Interface::sendSysCommonImpl(SysCommonMessage msg) {
|
|
session_.beginTransmission(MIDI_NAMESPACE::MidiType::InvalidType);
|
|
session_.write(msg.header);
|
|
uint8_t ndata = msg.getNumberOfDataBytes();
|
|
if (ndata >= 1) session_.write(msg.data1);
|
|
if (ndata >= 2) session_.write(msg.data2);
|
|
}
|
|
|
|
void AppleMIDI_Interface::sendSysExImpl(SysExMessage msg) {
|
|
session_.beginTransmission(MIDI_NAMESPACE::MidiType::SystemExclusive);
|
|
for (uint16_t i = 0; i < msg.length; i++)
|
|
session_.write(msg.data[i]);
|
|
}
|
|
|
|
void AppleMIDI_Interface::sendRealTimeImpl(RealTimeMessage msg) {
|
|
session_.beginTransmission(MIDI_NAMESPACE::MidiType::InvalidType);
|
|
session_.write(msg.message);
|
|
}
|
|
|
|
END_CS_NAMESPACE
|