[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[netbsd,07478] SD-90 USB MIDI support



kayです。

  最近 Roland の SC-8850 に続いて SD-90 を購入したので使えるようにして
みました。

#なんかいい、MIDI のツール類ないですかねぇ?SONAR はあるんですが、
#NetBSD で使えるツールが欲しいので、、、、

  あと、umidi.c におそらく BUG が一個と、UMIDI_DEBUG を定義するとコン
パイルできないという問題があるので、とりあえずコンパイル可能にするため
の修正も入ってます。

  とりあえず、SC-8850 も SD-90 も複数のパートを持っているわけですが、
とりあえず使えるのは一つだけです。

  複数使えるようにすると最初の1回はちゃんと動く(みたいな)んですが、二
回目以降が正しく働きません。ただ、DEBUG オプションをつけたカーネルで 
midi_debug, umidi_debug, usb_debug などを変更してデバッグメッセージを
大量に出すようにすると何度か動くこともありますので、タイミング的な問題
なのかも知れません。

  一応、SD-90 の usbctl の結果を載せておきます。SC-8850 と比べてインター
フェースが2つほど増えていて、USB の入出力機能もあるようなので、uaudio 
で入出力できるようにできるのではないかと思いますが、どうやったらいいか
調べてないので手を出していません。

#uaudio_quirks.c とかつくって誤魔化す必要があるのかな?
#友人談「なんでいまさら MIDI なんかにはまる?」ごもっとも、、、、

DEVICE addr 5
DEVICE descriptor:
bLength=18 bDescriptorType=device(1) bcdUSB=1.10 bDeviceClass=255 bDeviceSubClass=255
bDeviceProtocol=255 bMaxPacketSize=8 idVendor=0x0582 idProduct=0x0016 bcdDevice=100
iManufacturer=1(Roland) iProduct=2(EDIROL SD-90) iSerialNumber=0() bNumConfigurations=1

CONFIGURATION descriptor 0:
bLength=9 bDescriptorType=config(2) wTotalLength=159 bNumInterface=3
bConfigurationValue=1 iConfiguration=0() bmAttributes=c0 bMaxPower=0 mA

INTERFACE descriptor 0:
bLength=9 bDescriptorType=interface(4) bInterfaceNumber=0 bAlternateSetting=0
bNumEndpoints=0 bInterfaceClass=255 bInterfaceSubClass=2
bInterfaceProtocol=0 iInterface=0()

INTERFACE descriptor 1:
bLength=9 bDescriptorType=interface(4) bInterfaceNumber=0 bAlternateSetting=1
bNumEndpoints=1 bInterfaceClass=255 bInterfaceSubClass=2
bInterfaceProtocol=0 iInterface=0()

Unknown descriptor (class 255/2):
bLength=7 bDescriptorType=36 bDescriptorSubtype=1 ...

Unknown descriptor (class 255/2):
bLength=11 bDescriptorType=36 bDescriptorSubtype=2 ...

ENDPOINT descriptor:
bLength=9 bDescriptorType=endpoint(5) bEndpointAddress=1-out
bmAttributes=isochronous wMaxPacketSize=288 bInterval=1

Unknown descriptor (class 255/2):
bLength=7 bDescriptorType=37 bDescriptorSubtype=1 ...

INTERFACE descriptor 2:
bLength=9 bDescriptorType=interface(4) bInterfaceNumber=1 bAlternateSetting=0
bNumEndpoints=0 bInterfaceClass=255 bInterfaceSubClass=2
bInterfaceProtocol=0 iInterface=0()

INTERFACE descriptor 3:
bLength=9 bDescriptorType=interface(4) bInterfaceNumber=1 bAlternateSetting=1
bNumEndpoints=1 bInterfaceClass=255 bInterfaceSubClass=2
bInterfaceProtocol=0 iInterface=0()

Unknown descriptor (class 255/2):
bLength=7 bDescriptorType=36 bDescriptorSubtype=1 ...

Unknown descriptor (class 255/2):
bLength=11 bDescriptorType=36 bDescriptorSubtype=2 ...

ENDPOINT descriptor:
bLength=9 bDescriptorType=endpoint(5) bEndpointAddress=1-in
bmAttributes=isochronous wMaxPacketSize=288 bInterval=1

Unknown descriptor (class 255/2):
bLength=7 bDescriptorType=37 bDescriptorSubtype=1 ...

INTERFACE descriptor 4:
bLength=9 bDescriptorType=interface(4) bInterfaceNumber=2 bAlternateSetting=0
bNumEndpoints=2 bInterfaceClass=255 bInterfaceSubClass=255
bInterfaceProtocol=0 iInterface=0()

ENDPOINT descriptor:
bLength=7 bDescriptorType=endpoint(5) bEndpointAddress=2-out
bmAttributes=bulk wMaxPacketSize=32 bInterval=1

ENDPOINT descriptor:
bLength=7 bDescriptorType=endpoint(5) bEndpointAddress=2-in
bmAttributes=bulk wMaxPacketSize=32 bInterval=1

INTERFACE descriptor 5:
bLength=9 bDescriptorType=interface(4) bInterfaceNumber=2 bAlternateSetting=1
bNumEndpoints=2 bInterfaceClass=255 bInterfaceSubClass=255
bInterfaceProtocol=0 iInterface=0()

ENDPOINT descriptor:
bLength=7 bDescriptorType=endpoint(5) bEndpointAddress=2-out
bmAttributes=bulk wMaxPacketSize=32 bInterval=1

ENDPOINT descriptor:
bLength=7 bDescriptorType=endpoint(5) bEndpointAddress=2-in
bmAttributes=interrupt wMaxPacketSize=32 bInterval=1

current configuration 1

----------


Index: umidi.c
===================================================================
RCS file: /export/home3/NetBSD-CVS/syssrc/sys/dev/usb/umidi.c,v
retrieving revision 1.14
diff -u -r1.14 umidi.c
--- umidi.c	2002/03/08 17:24:06	1.14
+++ umidi.c	2002/03/31 04:28:17
@@ -812,7 +812,7 @@
 {
 	if ((mididev->flags&FWRITE) && mididev->out_jack)
 		close_out_jack(mididev->out_jack);
-	if ((mididev->flags&FWRITE) && mididev->in_jack)
+	if ((mididev->flags&FREAD) && mididev->in_jack)
 		close_in_jack(mididev->in_jack);
 
 	if (mididev->out_jack)
@@ -1073,8 +1073,8 @@
 static void
 dump_jack(struct umidi_jack *jack)
 {
-	DPRINTFN(10, ("\t\t\tep=%p, mididev=%p\n",
-		      jack->endpoint, jack->mididev));
+	DPRINTFN(10, ("\t\t\tep=%p\n",
+		      jack->endpoint));
 }
 
 #endif /* UMIDI_DEBUG */
@@ -1241,7 +1241,7 @@
 	}
 	if (!jack->binded || !jack->opened)
 		return;
-	DPR_PACKET(in, ep->sc, &jack->buffer);
+	DPR_PACKET(in, ep->sc, &jack->packet);
 	if (jack->u.in.intr) {
 		for (i=0; i<len; i++) {
 			(*jack->u.in.intr)(jack->arg, ep->buffer[i+1]);
Index: umidi_quirks.c
===================================================================
RCS file: /export/home3/NetBSD-CVS/syssrc/sys/dev/usb/umidi_quirks.c,v
retrieving revision 1.3
diff -u -r1.3 umidi_quirks.c
--- umidi_quirks.c	2001/11/13 06:24:56	1.3
+++ umidi_quirks.c	2002/03/31 04:28:17
@@ -108,6 +108,36 @@
 
 
 /*
+ * ROLAND SD-90
+ */
+UMQ_FIXED_EP_DEF(ROLAND, ROLAND_SD90, 2, 1, 1) = {
+	/* out */
+	{ 0, 1 },
+	/* in */
+	{ 1, 1 }
+};
+
+UMQ_DEF(ROLAND, ROLAND_SD90, 2) = {
+	UMQ_FIXED_EP_REG(ROLAND, ROLAND_SD90, 2),
+	UMQ_TERMINATOR
+};
+
+/*
+ * ROLAND SC-8850
+ */
+UMQ_FIXED_EP_DEF(ROLAND, ROLAND_SC8850, 2, 1, 1) = {
+	/* out */
+	{ 0, 1 },
+	/* in */
+	{ 1, 1 }
+};
+
+UMQ_DEF(ROLAND, ROLAND_SC8850, 2) = {
+	UMQ_FIXED_EP_REG(ROLAND, ROLAND_SC8850, 2),
+	UMQ_TERMINATOR
+};
+
+/*
  * ROLAND UM-1
  */
 UMQ_FIXED_EP_DEF(ROLAND, ROLAND_UM1, 2, 1, 1) = {
@@ -146,6 +176,8 @@
 struct umidi_quirk umidi_quirklist[] = {
 	UMQ_REG(YAMAHA, YAMAHA_UX256, ANYIFACE),
 	UMQ_REG(YAMAHA, ANYPRODUCT, ANYIFACE),
+	UMQ_REG(ROLAND, ROLAND_SD90, 2),
+	UMQ_REG(ROLAND, ROLAND_SC8850, 2),
 	UMQ_REG(ROLAND, ROLAND_UM1, 2),
 	UMQ_REG(ROLAND, ROLAND_UM880N, 0),
 	UMQ_TERMINATOR
Index: usbdevs
===================================================================
RCS file: /export/home3/NetBSD-CVS/syssrc/sys/dev/usb/usbdevs,v
retrieving revision 1.239
diff -u -r1.239 usbdevs
--- usbdevs	2002/03/28 20:42:08	1.239
+++ usbdevs	2002/03/31 04:28:17
@@ -1030,9 +1030,11 @@
 product	RAINBOW IKEY2000	0x1200	i-Key 2000  
 
 /* Roland products */
+product	ROLAND SC8850		0x0003	EDIROL SC-8850 MIDI
 product	ROLAND UM1		0x0009	UM-1 MIDI I/F
 product	ROLAND UM880N		0x0014	EDIROL UM-880 MIDI I/F (native)
 product	ROLAND UM880G		0x0015	EDIROL UM-880 MIDI I/F (generic)
+product	ROLAND SD90		0x0016	EDIROL SD-90 MIDI
 
 /* Rockfire products */
 product ROCKFIRE GAMEPAD	0x2033	gamepad 203USB
-- 
吉田恵介@川崎市高津区千年 (kay@xxxxxxxxxxxx)
ホームページ http://www.kaynet.or.jp/~kay/