cs-midi/MIDI_Interfaces/AppleMIDI_Interface.cpp

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