@@ -85,6 +85,10 @@ public class DConnectMidiDeviceService extends DConnectService implements MidiMe
8585 */
8686 private final ServiceInfo mServiceInfo ;
8787
88+ /**
89+ * 直前の MIDI メッセージ受信イベント.
90+ */
91+ private MidiMessageEvent mLastMessageEvent ;
8892
8993 private DConnectMidiDeviceService (final @ NonNull String serviceId , final MidiDeviceInfo deviceInfo ) {
9094 super (serviceId );
@@ -213,6 +217,25 @@ public boolean onRequest(final Intent request, final Intent response) {
213217 }
214218 });
215219
220+ // GET /gotapi/midi/onMessage
221+ addApi (new GetApi () {
222+ @ Override
223+ public String getAttribute () {
224+ return "onMessage" ;
225+ }
226+
227+ @ Override
228+ public boolean onRequest (final Intent request , final Intent response ) {
229+ MidiMessageEvent lastEvent = mLastMessageEvent ;
230+ if (lastEvent != null ) {
231+ response .putExtra ("message" , lastEvent .getMessage ());
232+ response .putExtra ("port" , lastEvent .getPort ());
233+ }
234+ setResult (response , DConnectMessage .RESULT_OK );
235+ return true ;
236+ }
237+ });
238+
216239 // PUT /gotapi/midi/onMessage
217240 addApi (new PutApi () {
218241 @ Override
@@ -395,17 +418,21 @@ public void onSend(final byte[] data, final int offset, final int count, final l
395418 List <Event > events = EventManager .INSTANCE .getEventList (getId (), "midi" , null , "onMessage" );
396419 String message = stringify (data , offset , count );
397420 LOGGER .info ("Event: /midi/onMessage: size = " + events .size () + ", message = " + message );
421+
422+ MidiMessageEvent messageEvent = new MidiMessageEvent (port , message );
398423 for (Event event : events ) {
399424 Intent intent = EventManager .createEventMessage (event );
400- intent .putExtra ("message" , stringify ( data , offset , count ));
401- intent .putExtra ("port" , port );
425+ intent .putExtra ("message" , messageEvent . getMessage ( ));
426+ intent .putExtra ("port" , messageEvent . getPort () );
402427 getPluginContext ().sendEvent (intent , event .getAccessToken ());
403428 }
404429
405430 MidiMessage midiMessage = mMessageParser .parse (data , offset , count );
406431 if (midiMessage != null ) {
407432 handleParsedMessage (port , midiMessage , timestamp );
408433 }
434+
435+ mLastMessageEvent = messageEvent ;
409436 }
410437 };
411438 }
@@ -478,17 +505,6 @@ static String createServiceId(final MidiDeviceInfo deviceInfo) {
478505 return concat (array );
479506 }
480507
481- static String createServiceId (final BluetoothDevice device ) {
482- final String deviceType = "bluetooth" ;
483- final String deviceId = device .getAddress ();
484- final String [] array = {
485- "midi" ,
486- deviceType ,
487- deviceId
488- };
489- return concat (array );
490- }
491-
492508 private static String createServiceName (final MidiDeviceInfo deviceInfo ) {
493509 Bundle props = deviceInfo .getProperties ();
494510 if (props != null ) {
@@ -521,4 +537,22 @@ private String stringify(final byte[] message, final int offset, final int count
521537 }
522538 return result .toString ();
523539 }
540+
541+ private static class MidiMessageEvent {
542+ private final int mPort ;
543+ private final String mMessage ;
544+
545+ public MidiMessageEvent (final int port , final String message ) {
546+ mPort = port ;
547+ mMessage = message ;
548+ }
549+
550+ public int getPort () {
551+ return mPort ;
552+ }
553+
554+ public String getMessage () {
555+ return mMessage ;
556+ }
557+ }
524558}
0 commit comments