Skip to content

Commit 1654242

Browse files
committed
GET /gotapi/midi/onMessage の実装を追加。
1 parent 7ec2113 commit 1654242

1 file changed

Lines changed: 47 additions & 13 deletions

File tree

dConnectDevicePlugin/dConnectDeviceMidi/plugin/src/main/java/org/deviceconnect/android/deviceplugin/midi/DConnectMidiDeviceService.java

Lines changed: 47 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)