@@ -57,21 +57,47 @@ boolean CUDPMIDIDevice::Initialize (void)
5757 }
5858 else
5959 LOGNOTE (" RTP Listener initialized" );
60- m_pUDPMIDIReceiver = new CUDPMIDIReceiver ( this );
61- if (!m_pUDPMIDIReceiver-> Initialize ())
60+
61+ if (m_pConfig-> GetUDPMIDIEnabled ())
6262 {
63- LOGERR (" Failed to init UDP MIDI receiver" );
64- delete m_pUDPMIDIReceiver;
65- m_pUDPMIDIReceiver = nullptr ;
63+ m_pUDPMIDIReceiver = new CUDPMIDIReceiver (this );
64+ if (!m_pUDPMIDIReceiver->Initialize ())
65+ {
66+ LOGERR (" Failed to init UDP MIDI receiver" );
67+ delete m_pUDPMIDIReceiver;
68+ m_pUDPMIDIReceiver = nullptr ;
69+ }
70+ else
71+ LOGNOTE (" UDP MIDI receiver initialized" );
72+
73+ // UDP MIDI send socket setup (default: broadcast 255.255.255.255:1999)
74+ m_UDPDestAddress.Set (0xFFFFFFFF ); // Broadcast by default
75+ m_UDPDestPort = 1999 ;
76+ if (m_pConfig->GetUDPMIDIIPAddress ().IsSet ())
77+ {
78+ m_UDPDestAddress.Set ( m_pConfig->GetUDPMIDIIPAddress () );
79+ }
80+ CString IPAddressString;
81+ m_UDPDestAddress.Format (&IPAddressString);
82+
83+ // address 0.0.0.0 disables transmit
84+ if (!m_UDPDestAddress.IsNull ())
85+ {
86+ CNetSubSystem* pNet = CNetSubSystem::Get ();
87+ m_pUDPSendSocket = new CSocket (pNet, IPPROTO_UDP);
88+ m_pUDPSendSocket->Connect (m_UDPDestAddress, m_UDPDestPort);
89+ m_pUDPSendSocket->SetOptionBroadcast (TRUE );
90+
91+ LOGNOTE (" UDP MIDI sender initialized. target is %s" ,
92+ (const char *)IPAddressString);
93+ }
94+ else
95+ LOGNOTE (" UDP MIDI sender disabled. target was %s" ,
96+ (const char *)IPAddressString);
97+
6698 }
6799 else
68- LOGNOTE (" UDP MIDI receiver initialized" );
69-
70- // UDP MIDI send socket setup (default: broadcast 255.255.255.255:1999)
71- CNetSubSystem* pNet = CNetSubSystem::Get ();
72- m_pUDPSendSocket = new CSocket (pNet, IPPROTO_UDP);
73- m_UDPDestAddress.Set (0xFFFFFFFF ); // Broadcast by default
74- m_UDPDestPort = 1999 ;
100+ LOGNOTE (" UDP MIDI is disabled in configuration" );
75101
76102 return true ;
77103}
@@ -85,11 +111,13 @@ void CUDPMIDIDevice::OnAppleMIDIDataReceived(const u8* pData, size_t nSize)
85111
86112void CUDPMIDIDevice::OnAppleMIDIConnect (const CIPAddress* pIPAddress, const char * pName)
87113{
114+ m_bIsAppleMIDIConnected = true ;
88115 LOGNOTE (" RTP Device connected" );
89116}
90117
91118void CUDPMIDIDevice::OnAppleMIDIDisconnect (const CIPAddress* pIPAddress, const char * pName)
92119{
120+ m_bIsAppleMIDIConnected = false ;
93121 LOGNOTE (" RTP Device disconnected" );
94122}
95123
@@ -100,17 +128,21 @@ void CUDPMIDIDevice::OnUDPMIDIDataReceived(const u8* pData, size_t nSize)
100128
101129void CUDPMIDIDevice::Send (const u8 *pMessage, size_t nLength, unsigned nCable)
102130{
103- bool sentRTP = false ;
104- if (m_pAppleMIDIParticipant && m_pAppleMIDIParticipant->SendMIDIToHost (pMessage, nLength)) {
105- sentRTP = true ;
106- LOGNOTE (" Sent %zu bytes to RTP-MIDI host" , nLength);
131+ if (m_pAppleMIDIParticipant && m_bIsAppleMIDIConnected) {
132+ bool res = m_pAppleMIDIParticipant->SendMIDIToHost (pMessage, nLength);
133+ if (!res) {
134+ LOGERR (" Failed to send %u bytes to RTP-MIDI host" , (unsigned long ) nLength);
135+ } else {
136+ // LOGDBG("Sent %u bytes to RTP-MIDI host", (unsigned long) nLength);
137+ }
107138 }
108- if (!sentRTP && m_pUDPSendSocket) {
139+
140+ if (m_pUDPSendSocket) {
109141 int res = m_pUDPSendSocket->SendTo (pMessage, nLength, 0 , m_UDPDestAddress, m_UDPDestPort);
110142 if (res < 0 ) {
111- LOGERR (" Failed to send %zu bytes to UDP MIDI host" , nLength);
143+ LOGERR (" Failed to send %u bytes to UDP MIDI host" , ( unsigned long ) nLength);
112144 } else {
113- LOGNOTE (" Sent %zu bytes to UDP MIDI host (broadcast) " , nLength);
145+ // LOGDBG ("Sent %u bytes to UDP MIDI host", (unsigned long) nLength);
114146 }
115147 }
116148}
0 commit comments