23 #include "netmidiinput_p.h"
24 #include "netmidiinput.h"
29 static QString DEFAULT_PUBLIC_NAME(QLatin1String(
"MIDI In"));
31 NetMIDIInputPrivate::NetMIDIInputPrivate(
QObject *parent) :
QObject(parent),
32 m_inp(qobject_cast<NetMIDIInput *>(parent)),
38 m_publicName(DEFAULT_PUBLIC_NAME),
39 m_groupAddress(QHostAddress(STR_ADDRESS))
41 for(
int i=MULTICAST_PORT; i<LAST_PORT; ++i) {
42 m_inputDevices << QString::number(i);
46 void NetMIDIInputPrivate::open(QString portName)
48 int p = m_inputDevices.indexOf(portName);
51 m_socket =
new QUdpSocket();
52 m_parser =
new MIDIParser(m_inp);
53 m_port = MULTICAST_PORT + p;
54 m_currentInput = portName;
55 m_socket->bind(QHostAddress::AnyIPv4, m_port, QUdpSocket::ShareAddress);
56 m_socket->setSocketOption(QAbstractSocket::MulticastLoopbackOption, 0);
57 m_socket->setSocketOption(QAbstractSocket::MulticastTtlOption, 1);
58 if (m_iface.isValid()) {
59 m_socket->joinMulticastGroup(m_groupAddress, m_iface);
61 m_socket->joinMulticastGroup(m_groupAddress);
63 connect(m_socket, SIGNAL(readyRead()),
this, SLOT(processIncomingMessages()));
68 void NetMIDIInputPrivate::close()
74 m_currentInput.clear();
77 void NetMIDIInputPrivate::initialize(QSettings *settings)
80 settings->beginGroup(
"Network");
81 QString ifaceName = settings->value(
"interface", QString()).toString();
82 QString address = settings->value(
"address", STR_ADDRESS).toString();
84 if (!ifaceName.isEmpty()) {
85 m_iface = QNetworkInterface::interfaceFromName(ifaceName);
87 if (!address.isEmpty()) {
88 m_groupAddress.setAddress(address);
93 void NetMIDIInputPrivate::setMIDIThruDevice(MIDIOutput* device)
97 m_parser->setMIDIThruDevice(device);
101 void NetMIDIInputPrivate::processIncomingMessages()
103 while (m_socket->hasPendingDatagrams()) {
105 datagram.resize(m_socket->pendingDatagramSize());
106 m_socket->readDatagram(datagram.data(), datagram.size());
108 m_parser->parse(datagram);
The QObject class is the base class of all Qt objects.