Re: [comedi] dt9812.c comedi driver loading issues
fred brooks <[email protected]> Mon, 31 Mar 2025 06:12:38 -0700
| Newsgroups | gmane.linux.comedi |
|---|---|
| Message-ID | <CAJGujSafcMvPYihGWKFtCMKmBLNPzhS7jhFRd7Rv=sG0Md96-Q@mail.gmail.com> |
--0000000000006959e80631a32d05
Content-Type: multipart/alternative; boundary="0000000000006959e70631a32d03"
--0000000000006959e70631a32d03
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
Thanks for the reply. I'm trying a few things to get more info on the
device.
lsusb
Bus 003 Device 005: ID 0867:1298 Data Translation, Inc.
The alternative setting is zero on boot. That has zero endpoints.
lsusb -D /dev/bus/usb/003/005 gives 4 alts with 6 endpoints from 1 to 3
and zero endpoints in alt 0.
The first port, rest in an attachment. lo.txt
Device: ID 0867:1298 Data Translation, Inc.
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 2.00
bDeviceClass 255 Vendor Specific Class
bDeviceSubClass 255 Vendor Specific Subclass
bDeviceProtocol 255 Vendor Specific Protocol
bMaxPacketSize0 64
idVendor 0x0867 Data Translation, Inc.
idProduct 0x1298
bcdDevice 0.00
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 0x00ab
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 0
bInterfaceClass 255 Vendor Specific Class
bInterfaceSubClass 255 Vendor Specific Subclass
bInterfaceProtocol 255 Vendor Specific Protocol
iInterface 0
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 1
bNumEndpoints 6
bInterfaceClass 255 Vendor Specific Class
bInterfaceSubClass 255 Vendor Specific Subclass
bInterfaceProtocol 255 Vendor Specific Protocol
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x01 EP 1 OUT
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
I'm using usb_set_interface in a modifieddt9812_find_endpoints in the
driver to check various alts and end-points combinations.
static int dt9812_find_endpoints(struct comedi_device *dev)
{
struct usb_interface *intf =3D comedi_to_usb_interface(dev);
struct usb_host_interface *host =3D intf->cur_altsetting;
struct dt9812_private *devpriv =3D dev->private;
struct usb_endpoint_descriptor *ep;
int i;
usb_set_interface(comedi_to_usb_dev(dev), 0, 1);
intf =3D comedi_to_usb_interface(dev);
host =3D intf->cur_altsetting;
if (host->desc.bNumEndpoints !=3D 6) {
dev_err(dev->class_dev, "Wrong number of endpoints %d, num
alts %d\n", host->desc.bNumEndpoints,
intf->num_altsetting);
return -ENODEV;
}
dev_err(dev->class_dev, "Number of endpoints %d, num alts %d\n",
host->desc.bNumEndpoints,
intf->num_altsetting);
for (i =3D 0; i < host->desc.bNumEndpoints; ++i) {
int dir =3D -1;
ep =3D &host->endpoint[i].desc;
switch (i) {
case 0:
dir =3D USB_DIR_OUT;
devpriv->cmd_wr.addr =3D ep->bEndpointAddress;
devpriv->cmd_wr.size =3D usb_endpoint_maxp(ep);
break;
case 1:
dir =3D USB_DIR_IN;
devpriv->cmd_rd.addr =3D ep->bEndpointAddress;
devpriv->cmd_rd.size =3D usb_endpoint_maxp(ep);
break;
case 2:
/* unused message pipe */
dir =3D USB_DIR_OUT;
break;
case 3:
/* unused write stream */
dir =3D USB_DIR_OUT;
break;
case 4:
/* unused read stream */
dir =3D USB_DIR_IN;
break;
case 5:
/* unused write stream */
dir =3D USB_DIR_IN;
break;
}
if ((ep->bEndpointAddress & USB_DIR_IN) !=3D dir) {
dev_err(dev->class_dev,
"Endpoint has wrong direction %d\n",i);
return -ENODEV;
}
}
return 0;
}
[ 242.024005] comedi: version 0.7.76 - http://www.comedi.org
[ 242.028813] comedi comedi0: Number of endpoints 6, num alts 4
[ 243.035601] comedi comedi0: unable to reset configuration
[ 243.035620] dt9812 3-1.6:1.0: driver 'dt9812' failed to auto-configure
device.
[ 243.035773] dt9812: probe of 3-1.6:1.0 failed with error -22
[ 243.035799] usbcore: registered new interface driver dt9812
On Mon, Mar 31, 2025 at 4:48=E2=80=AFAM Ian Abbott <[email protected]> wrot=
e:
> Hi Fred,
>
> On 2025-03-29 20:45, 'fred brooks' via Comedi: Linux Control and
> Measurement Device Interface wrote:
> >
> > Trying to get this to work with a DT9812 but am having some strange
> > problems. The first thing is the returned product ID is sort of reverse=
d
> > from the device model.
> > usb 4-1: New USB device found, idVendor=3D0867, idProduct=3D1298,
> > bcdDevice=3D 0.00
> >
> > The driver dt9812_usb_table in dt9812.c was changed to match that numbe=
r.
> >
> > static const struct usb_device_id dt9812_usb_table[] =3D {
> > { USB_DEVICE(0x0867, 0x1298) },
> > { }
> > };
> >
> > The original value inthe driver struct was (0x0867, 0x9812)
> >
> > Now the recompiled dt9812 module actually loads and tried to run but
> > this is the result:
> >
> > [240608.280804] comedi: version 0.7.76 - http://www.comedi.org <http://
> > www.comedi.org/>
> > [240608.298984] comedi comedi0: Wrong number of endpoints
> > [240608.298990] dt9812 3-9.3:1.0: driver 'dt9812' failed to auto-
> > configure device.
> > [240608.299072] usbcore: registered new interface driver dt9812
> >
> > The number of end points returned is zero.
> [snip]
> > Running Debian 6.12.20-amd64 and I also tried with an Orange PI arm64
> > machine with the same result after the driver modifications to match
> > the idProduct=3D1298
> >
> > Source of the error message.
> > static int dt9812_find_endpoints(struct comedi_device *dev)
> > {
> > struct usb_interface *intf =3D comedi_to_usb_interface(dev);
> > struct usb_host_interface *host =3D intf->cur_altsetting;
> > struct dt9812_private *devpriv =3D dev->private;
> > struct usb_endpoint_descriptor *ep;
> > int i;
> >
> > if (host->desc.bNumEndpoints !=3D 5) {
> > dev_err(dev->class_dev, "Wrong number of endpoints\n")=
;
> > return -ENODEV;
> > }
> >
> > Yes, the DT9812 works using the Windows driver running Win11
>
> Looking at the "DT9812_Kmdf.inf" file from the Windows drivers installed
> by the "Omni-CD"
> https://files.digilent.com/#downloads/DTSoftware/Omni-CD/
> , in
> C:\Program Files (x86)\Data Translation\DeviceDriversEV\DT9812
> , the device ID USB\VID_0867&PID_1298 appears to be a "DT9812 Firmware
> Loader" device. That .inf file also supports "DT9812" (PID 0x9812),
> "DT9813" (PID 0x9813), and "DT9814" (PID 0x9814). The "DT9812 Firmware
> Loader" device uses a different kernel driver (.sys) file than the others=
:
>
> * DT9812 Firmware Loader: DT9812ld_x86.sys or dt9812ld_x64.sys
> * DT9812, DT9813, DT9814: DT9812k.sys or DT9812k_x64.sys
>
> Perhaps the ID changes after the firmware is updated? Or perhaps the
> "DT9812 Firmware Loader" device is a hardware re-spin of the old device?
> I don't really know, to be honest.
>
> --
> -=3D( Ian Abbott <[email protected]> || MEV Ltd. is a company )=3D-
> -=3D( registered in England & Wales. Regd. number: 02862268. )=3D-
> -=3D( Regd. addr.: S11 & 12 Building 67, Europa Business Park, )=3D-
> -=3D( Bird Hall Lane, STOCKPORT, SK3 0XA, UK. || www.mev.co.uk )=3D-
>
> --
> You received this message because you are subscribed to the Google Groups
> "Comedi: Linux Control and Measurement Device Interface" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To view this discussion visit
> https://groups.google.com/d/msgid/comedi_list/d63c20d2-71b6-4575-b46e-da4=
42161bf05%40mev.co.uk
> .
>
--=20
You received this message because you are subscribed to the Google Groups "=
Comedi: Linux Control and Measurement Device Interface" group.
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to [email protected].
To view this discussion visit https://groups.google.com/d/msgid/comedi_list=
/CAJGujSafcMvPYihGWKFtCMKmBLNPzhS7jhFRd7Rv%3DsG0Md96-Q%40mail.gmail.com.
--0000000000006959e70631a32d03
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr">Thanks for the reply. I'm trying a few things to get m=
ore info on the device.<div><br></div><div>=C2=A0lsusb<br>Bus 003 Device 00=
5: ID 0867:1298 Data Translation, Inc.=C2=A0</div><div><br></div><div>The=
=C2=A0alternative setting is zero on boot. That has zero endpoints.</div><d=
iv><br></div><div>=C2=A0lsusb -D /dev/bus/usb/003/005 gives 4 alts with 6 e=
ndpoints from 1 to 3 and zero endpoints in alt 0.</div><div><br></div><div>=
The first port, rest in an attachment. lo.txt</div><div>Device: ID 0867:129=
8 Data Translation, Inc. <br>Device Descriptor:<br>=C2=A0 bLength =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A018<br>=C2=A0 bDescriptorTyp=
e =C2=A0 =C2=A0 =C2=A0 =C2=A0 1<br>=C2=A0 bcdUSB =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 2.00<br>=C2=A0 bDeviceClass =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0255 Vendor Specific Class<br>=C2=A0 bDeviceSubClass =C2=A0 =C2=
=A0 =C2=A0 255 Vendor Specific Subclass<br>=C2=A0 bDeviceProtocol =C2=A0 =
=C2=A0 =C2=A0 255 Vendor Specific Protocol<br>=C2=A0 bMaxPacketSize0 =C2=A0=
=C2=A0 =C2=A0 =C2=A064<br>=C2=A0 idVendor =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 0x0867 Data Translation, Inc.<br>=C2=A0 idProduct =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A00x1298 <br>=C2=A0 bcdDevice =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A00.00<br>=C2=A0 iManufacturer =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 0 <b=
r>=C2=A0 iProduct =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A00 =
<br>=C2=A0 iSerial =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
0 <br>=C2=A0 bNumConfigurations =C2=A0 =C2=A0 =C2=A01<br>=C2=A0 Configurati=
on Descriptor:<br>=C2=A0 =C2=A0 bLength =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 9<br>=C2=A0 =C2=A0 bDescriptorType =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 2<br>=C2=A0 =C2=A0 wTotalLength =C2=A0 =C2=A0 =C2=A0 0x00ab<br>=
=C2=A0 =C2=A0 bNumInterfaces =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A01<br>=C2=A0 =
=C2=A0 bConfigurationValue =C2=A0 =C2=A0 1<br>=C2=A0 =C2=A0 iConfiguration =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A00 <br>=C2=A0 =C2=A0 bmAttributes =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 0x80<br>=C2=A0 =C2=A0 =C2=A0 (Bus Powered)<br>=C2=A0 =
=C2=A0 MaxPower =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0100mA<br>=
=C2=A0 =C2=A0 Interface Descriptor:<br>=C2=A0 =C2=A0 =C2=A0 bLength =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 9<br>=C2=A0 =C2=A0 =C2=A0 =
bDescriptorType =C2=A0 =C2=A0 =C2=A0 =C2=A0 4<br>=C2=A0 =C2=A0 =C2=A0 bInte=
rfaceNumber =C2=A0 =C2=A0 =C2=A0 =C2=A00<br>=C2=A0 =C2=A0 =C2=A0 bAlternate=
Setting =C2=A0 =C2=A0 =C2=A0 0<br>=C2=A0 =C2=A0 =C2=A0 bNumEndpoints =C2=A0=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 0<br>=C2=A0 =C2=A0 =C2=A0 bInterfaceClass =C2=
=A0 =C2=A0 =C2=A0 255 Vendor Specific Class<br>=C2=A0 =C2=A0 =C2=A0 bInterf=
aceSubClass =C2=A0 =C2=A0255 Vendor Specific Subclass<br>=C2=A0 =C2=A0 =C2=
=A0 bInterfaceProtocol =C2=A0 =C2=A0255 Vendor Specific Protocol<br>=C2=A0 =
=C2=A0 =C2=A0 iInterface =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A00 =
<br>=C2=A0 =C2=A0 Interface Descriptor:<br>=C2=A0 =C2=A0 =C2=A0 bLength =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 9<br>=C2=A0 =C2=A0 =C2=
=A0 bDescriptorType =C2=A0 =C2=A0 =C2=A0 =C2=A0 4<br>=C2=A0 =C2=A0 =C2=A0 b=
InterfaceNumber =C2=A0 =C2=A0 =C2=A0 =C2=A00<br>=C2=A0 =C2=A0 =C2=A0 bAlter=
nateSetting =C2=A0 =C2=A0 =C2=A0 1<br>=C2=A0 =C2=A0 =C2=A0 bNumEndpoints =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 6<br>=C2=A0 =C2=A0 =C2=A0 bInterfaceClas=
s =C2=A0 =C2=A0 =C2=A0 255 Vendor Specific Class<br>=C2=A0 =C2=A0 =C2=A0 bI=
nterfaceSubClass =C2=A0 =C2=A0255 Vendor Specific Subclass<br>=C2=A0 =C2=A0=
=C2=A0 bInterfaceProtocol =C2=A0 =C2=A0255 Vendor Specific Protocol<br>=C2=
=A0 =C2=A0 =C2=A0 iInterface =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A00 <br>=C2=A0 =C2=A0 =C2=A0 Endpoint Descriptor:<br>=C2=A0 =C2=A0 =C2=A0 =
=C2=A0 bLength =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 7<br=
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 bDescriptorType =C2=A0 =C2=A0 =C2=A0 =C2=A0 5<=
br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 bEndpointAddress =C2=A0 =C2=A0 0x01 =C2=A0EP=
1 OUT<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 bmAttributes =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A02<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 Transfer Type =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Bulk<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 Synch Type =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 None<br>=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 Usage Type =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 Data<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 wMaxPacketSize =C2=
=A0 =C2=A0 0x0040 =C2=A01x 64 bytes<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 bInterva=
l =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 0<br>=C2=A0 =C2=A0 =C2=
=A0 Endpoint Descriptor:<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 bLength =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 7<br>=C2=A0 =C2=A0 =C2=A0 =C2=
=A0 bDescriptorType =C2=A0 =C2=A0 =C2=A0 =C2=A0 5<br>=C2=A0 =C2=A0 =C2=A0 =
=C2=A0 bEndpointAddress =C2=A0 =C2=A0 0x81 =C2=A0EP 1 IN<br>=C2=A0 =C2=A0 =
=C2=A0 =C2=A0 bmAttributes =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A02<br>=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 Transfer Type =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0Bulk<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 Synch Type =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 None<br>=C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 Usage Type =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 D=
ata<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 wMaxPacketSize =C2=A0 =C2=A0 0x0040 =C2=
=A01x 64 bytes<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 bInterval =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 0</div><div><br></div><div>I'm using=C2=
=A0usb_set_interface in a modifieddt9812_find_endpoints in the=C2=A0 driver=
to check various alts and end-points combinations.=C2=A0</div><div><br></d=
iv><div>static int dt9812_find_endpoints(struct comedi_device *dev)<br>{<br=
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 struct usb_interface *intf =3D comedi_to_usb_i=
nterface(dev);<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 struct usb_host_interface *ho=
st =3D intf->cur_altsetting;<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 struct dt981=
2_private *devpriv =3D dev->private;<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 stru=
ct usb_endpoint_descriptor *ep;<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 int i;<br><b=
r>=C2=A0 =C2=A0 =C2=A0 =C2=A0 usb_set_interface(comedi_to_usb_dev(dev), 0, =
1);<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 intf =3D comedi_to_usb_interface(dev);<b=
r>=C2=A0 =C2=A0 =C2=A0 =C2=A0 host =3D intf->cur_altsetting;<br><br>=C2=
=A0 =C2=A0 =C2=A0 =C2=A0 if (host->desc.bNumEndpoints !=3D 6) {<br>=C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 dev_err(dev->class_=
dev, "Wrong number of endpoints %d, num alts %d\n", host->desc=
.bNumEndpoints,<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
intf->num_altsetting);<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 return -ENODEV;<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 }<br><br>=C2=A0 =
=C2=A0 =C2=A0 =C2=A0 dev_err(dev->class_dev, "Number of endpoints %=
d, num alts %d\n", host->desc.bNumEndpoints,<br>=C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 intf->num_altsetting);<br><br>=C2=
=A0 =C2=A0 =C2=A0 =C2=A0 for (i =3D 0; i < host->desc.bNumEndpoints; =
++i) {<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 int dir =
=3D -1;<br><br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ep =
=3D &host->endpoint[i].desc;<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 switch (i) {<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 case 0:<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 dir =3D USB_DIR_OUT;<br>=C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 d=
evpriv->cmd_wr.addr =3D ep->bEndpointAddress;<br>=C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 devpriv->=
;cmd_wr.size =3D usb_endpoint_maxp(ep);<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 break;<br>=C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 case 1:<br>=C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 dir =3D =
USB_DIR_IN;<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 devpriv->cmd_rd.addr =3D ep->bEndpointAddres=
s;<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 devpriv->cmd_rd.size =3D usb_endpoint_maxp(ep);<br>=C2=A0=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 break;<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 case =
2:<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 /* unused message pipe */<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 dir =3D USB_DIR_OUT;<b=
r>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 break;<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 case 3:<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 /* unused write stream */<br>=C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 dir =3D USB_=
DIR_OUT;<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 break;<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 case 4:<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 /* unused read stream */<br>=C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 d=
ir =3D USB_DIR_IN;<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 break;<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 case 5:<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 /* unused write stream */<br>=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 dir =3D USB_DIR_IN;<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 break;<br>=C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 }<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 if ((ep->bEndpointAddress & USB_DIR_IN) !=3D di=
r) {<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 dev_err(dev->class_dev,<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 "Endpoint has wrong direction %d\n",i);<br>=C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 r=
eturn -ENODEV;<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 }=
<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 }<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 return 0;<=
br>}</div><div><br></div><div>[ =C2=A0242.024005] comedi: version 0.7.76 - =
<a href=3D"http://www.comedi.org">http://www.comedi.org</a><br>[ =C2=A0242.=
028813] comedi comedi0: Number of endpoints 6, num alts 4<br>[ =C2=A0243.03=
5601] comedi comedi0: unable to reset configuration<br>[ =C2=A0243.035620] =
dt9812 3-1.6:1.0: driver 'dt9812' failed to auto-configure device.<=
br>[ =C2=A0243.035773] dt9812: probe of 3-1.6:1.0 failed with error -22<br>=
[ =C2=A0243.035799] usbcore: registered new interface driver dt9812</div></=
div><br><div class=3D"gmail_quote gmail_quote_container"><div dir=3D"ltr" c=
lass=3D"gmail_attr">On Mon, Mar 31, 2025 at 4:48=E2=80=AFAM Ian Abbott <=
<a href=3D"mailto:[email protected]">[email protected]</a>> wrote:<br></=
div><blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;bor=
der-left:1px solid rgb(204,204,204);padding-left:1ex">Hi Fred,<br>
<br>
On 2025-03-29 20:45, 'fred brooks' via Comedi: Linux Control and <b=
r>
Measurement Device Interface wrote:<br>
> <br>
> Trying to get this to work with a DT9812 but am having some strange <b=
r>
> problems. The first thing is the returned product ID is sort of revers=
ed <br>
> from the device model.<br>
>=C2=A0 =C2=A0usb 4-1: New USB device found, idVendor=3D0867, idProduct=
=3D1298, <br>
> bcdDevice=3D 0.00<br>
> <br>
> The driver dt9812_usb_table in dt9812.c was changed to match that numb=
er.<br>
> <br>
> static const struct usb_device_id dt9812_usb_table[] =3D {<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 { USB_DEVICE(0x0867, 0x1298) },<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 { }<br>
> };<br>
> <br>
> The original value inthe driver struct was=C2=A0=C2=A0(0x0867, 0x9812)=
<br>
> <br>
> Now the recompiled=C2=A0 dt9812 module actually loads and tried to run=
but <br>
> this is the result:<br>
> <br>
> [240608.280804] comedi: version 0.7.76 - <a href=3D"http://www.comedi.=
org" rel=3D"noreferrer" target=3D"_blank">http://www.comedi.org</a> <htt=
p:// <br>
> <a href=3D"http://www.comedi.org/" rel=3D"noreferrer" target=3D"_blank=
">www.comedi.org/</a>><br>
> [240608.298984] comedi comedi0: Wrong number of endpoints<br>
> [240608.298990] dt9812 3-9.3:1.0: driver 'dt9812' failed to au=
to- <br>
> configure device.<br>
> [240608.299072] usbcore: registered new interface driver dt9812<br>
> <br>
> The number of end points returned is zero.<br>
[snip]<br>
> Running Debian=C2=A06.12.20-amd64 and I also tried with an Orange PI a=
rm64 <br>
> machine with the same result after the driver modifications=C2=A0to ma=
tch <br>
> the=C2=A0idProduct=3D1298<br>
> <br>
> Source of the error message.<br>
> static int dt9812_find_endpoints(struct comedi_device *dev)<br>
> {<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 struct usb_interface *intf =3D comed=
i_to_usb_interface(dev);<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 struct usb_host_interface *host =3D =
intf->cur_altsetting;<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 struct dt9812_private *devpriv =3D d=
ev->private;<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 struct usb_endpoint_descriptor *ep;<=
br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 int i;<br>
> <br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 if (host->desc.bNumEndpoints !=3D=
5) {<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 dev_err(=
dev->class_dev, "Wrong number of endpoints\n");<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 return -=
ENODEV;<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 }<br>
> <br>
> Yes, the DT9812 works using the Windows driver=C2=A0 running Win11<br>
<br>
Looking at the "DT9812_Kmdf.inf" file from the Windows drivers in=
stalled <br>
by the "Omni-CD"<br>
<a href=3D"https://files.digilent.com/#downloads/DTSoftware/Omni-CD/" rel=
=3D"noreferrer" target=3D"_blank">https://files.digilent.com/#downloads/DTS=
oftware/Omni-CD/</a><br>
, in<br>
C:\Program Files (x86)\Data Translation\DeviceDriversEV\DT9812<br>
, the device ID USB\VID_0867&PID_1298 appears to be a "DT9812 Firm=
ware <br>
Loader" device. That .inf file also supports "DT9812" (PID 0=
x9812), <br>
"DT9813" (PID 0x9813), and "DT9814" (PID 0x9814).=C2=A0=
The "DT9812 Firmware <br>
Loader" device uses a different kernel driver (.sys) file than the oth=
ers:<br>
<br>
* DT9812 Firmware Loader: DT9812ld_x86.sys or dt9812ld_x64.sys<br>
* DT9812, DT9813, DT9814: DT9812k.sys or DT9812k_x64.sys<br>
<br>
Perhaps the ID changes after the firmware is updated?=C2=A0 Or perhaps the =
<br>
"DT9812 Firmware Loader" device is a hardware re-spin of the old =
device? <br>
I don't really know, to be honest.<br>
<br>
-- <br>
-=3D( Ian Abbott <<a href=3D"mailto:[email protected]" target=3D"_blank"=
>[email protected]</a>> || MEV Ltd. is a company=C2=A0 )=3D-<br>
-=3D( registered in England & Wales.=C2=A0 Regd. number: 02862268.=C2=
=A0 )=3D-<br>
-=3D( Regd. addr.: S11 & 12 Building 67, Europa Business Park, )=3D-<br=
>
-=3D( Bird Hall Lane, STOCKPORT, SK3 0XA, UK. || <a href=3D"http://www.mev.=
co.uk" rel=3D"noreferrer" target=3D"_blank">www.mev.co.uk</a> )=3D-<br>
<br>
-- <br>
You received this message because you are subscribed to the Google Groups &=
quot;Comedi: Linux Control and Measurement Device Interface" group.<br=
>
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a href=3D"mailto:comedi_list%[email protected]" targe=
t=3D"_blank">[email protected]</a>.<br>
To view this discussion visit <a href=3D"https://groups.google.com/d/msgid/=
comedi_list/d63c20d2-71b6-4575-b46e-da442161bf05%40mev.co.uk" rel=3D"norefe=
rrer" target=3D"_blank">https://groups.google.com/d/msgid/comedi_list/d63c2=
0d2-71b6-4575-b46e-da442161bf05%40mev.co.uk</a>.<br>
</blockquote></div>
<p></p>
-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;Comedi: Linux Control and Measurement Device Interface" group.<br=
/>
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a href=3D"mailto:[email protected]">comedi_=
[email protected]</a>.<br />
To view this discussion visit <a href=3D"https://groups.google.com/d/msgid/=
comedi_list/CAJGujSafcMvPYihGWKFtCMKmBLNPzhS7jhFRd7Rv%3DsG0Md96-Q%40mail.gm=
ail.com?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.com/d=
/msgid/comedi_list/CAJGujSafcMvPYihGWKFtCMKmBLNPzhS7jhFRd7Rv%3DsG0Md96-Q%40=
mail.gmail.com</a>.<br />
--0000000000006959e70631a32d03--
--0000000000006959e80631a32d05
Content-Type: text/plain; charset="US-ASCII"; name="lo.txt"
Content-Disposition: attachment; filename="lo.txt"
Content-Transfer-Encoding: base64
Content-ID: <f_m8x30qw80>
X-Attachment-Id: f_m8x30qw80
RGV2aWNlOiBJRCAwODY3OjEyOTggRGF0YSBUcmFuc2xhdGlvbiwgSW5jLiAKRGV2aWNlIERlc2Ny
aXB0b3I6CiAgYkxlbmd0aCAgICAgICAgICAgICAgICAxOAogIGJEZXNjcmlwdG9yVHlwZSAgICAg
ICAgIDEKICBiY2RVU0IgICAgICAgICAgICAgICAyLjAwCiAgYkRldmljZUNsYXNzICAgICAgICAg
IDI1NSBWZW5kb3IgU3BlY2lmaWMgQ2xhc3MKICBiRGV2aWNlU3ViQ2xhc3MgICAgICAgMjU1IFZl
bmRvciBTcGVjaWZpYyBTdWJjbGFzcwogIGJEZXZpY2VQcm90b2NvbCAgICAgICAyNTUgVmVuZG9y
IFNwZWNpZmljIFByb3RvY29sCiAgYk1heFBhY2tldFNpemUwICAgICAgICA2NAogIGlkVmVuZG9y
ICAgICAgICAgICAweDA4NjcgRGF0YSBUcmFuc2xhdGlvbiwgSW5jLgogIGlkUHJvZHVjdCAgICAg
ICAgICAweDEyOTggCiAgYmNkRGV2aWNlICAgICAgICAgICAgMC4wMAogIGlNYW51ZmFjdHVyZXIg
ICAgICAgICAgIDAgCiAgaVByb2R1Y3QgICAgICAgICAgICAgICAgMCAKICBpU2VyaWFsICAgICAg
ICAgICAgICAgICAwIAogIGJOdW1Db25maWd1cmF0aW9ucyAgICAgIDEKICBDb25maWd1cmF0aW9u
IERlc2NyaXB0b3I6CiAgICBiTGVuZ3RoICAgICAgICAgICAgICAgICA5CiAgICBiRGVzY3JpcHRv
clR5cGUgICAgICAgICAyCiAgICB3VG90YWxMZW5ndGggICAgICAgMHgwMGFiCiAgICBiTnVtSW50
ZXJmYWNlcyAgICAgICAgICAxCiAgICBiQ29uZmlndXJhdGlvblZhbHVlICAgICAxCiAgICBpQ29u
ZmlndXJhdGlvbiAgICAgICAgICAwIAogICAgYm1BdHRyaWJ1dGVzICAgICAgICAgMHg4MAogICAg
ICAoQnVzIFBvd2VyZWQpCiAgICBNYXhQb3dlciAgICAgICAgICAgICAgMTAwbUEKICAgIEludGVy
ZmFjZSBEZXNjcmlwdG9yOgogICAgICBiTGVuZ3RoICAgICAgICAgICAgICAgICA5CiAgICAgIGJE
ZXNjcmlwdG9yVHlwZSAgICAgICAgIDQKICAgICAgYkludGVyZmFjZU51bWJlciAgICAgICAgMAog
ICAgICBiQWx0ZXJuYXRlU2V0dGluZyAgICAgICAwCiAgICAgIGJOdW1FbmRwb2ludHMgICAgICAg
ICAgIDAKICAgICAgYkludGVyZmFjZUNsYXNzICAgICAgIDI1NSBWZW5kb3IgU3BlY2lmaWMgQ2xh
c3MKICAgICAgYkludGVyZmFjZVN1YkNsYXNzICAgIDI1NSBWZW5kb3IgU3BlY2lmaWMgU3ViY2xh
c3MKICAgICAgYkludGVyZmFjZVByb3RvY29sICAgIDI1NSBWZW5kb3IgU3BlY2lmaWMgUHJvdG9j
b2wKICAgICAgaUludGVyZmFjZSAgICAgICAgICAgICAgMCAKICAgIEludGVyZmFjZSBEZXNjcmlw
dG9yOgogICAgICBiTGVuZ3RoICAgICAgICAgICAgICAgICA5CiAgICAgIGJEZXNjcmlwdG9yVHlw
ZSAgICAgICAgIDQKICAgICAgYkludGVyZmFjZU51bWJlciAgICAgICAgMAogICAgICBiQWx0ZXJu
YXRlU2V0dGluZyAgICAgICAxCiAgICAgIGJOdW1FbmRwb2ludHMgICAgICAgICAgIDYKICAgICAg
YkludGVyZmFjZUNsYXNzICAgICAgIDI1NSBWZW5kb3IgU3BlY2lmaWMgQ2xhc3MKICAgICAgYklu
dGVyZmFjZVN1YkNsYXNzICAgIDI1NSBWZW5kb3IgU3BlY2lmaWMgU3ViY2xhc3MKICAgICAgYklu
dGVyZmFjZVByb3RvY29sICAgIDI1NSBWZW5kb3IgU3BlY2lmaWMgUHJvdG9jb2wKICAgICAgaUlu
dGVyZmFjZSAgICAgICAgICAgICAgMCAKICAgICAgRW5kcG9pbnQgRGVzY3JpcHRvcjoKICAgICAg
ICBiTGVuZ3RoICAgICAgICAgICAgICAgICA3CiAgICAgICAgYkRlc2NyaXB0b3JUeXBlICAgICAg
ICAgNQogICAgICAgIGJFbmRwb2ludEFkZHJlc3MgICAgIDB4MDEgIEVQIDEgT1VUCiAgICAgICAg
Ym1BdHRyaWJ1dGVzICAgICAgICAgICAgMgogICAgICAgICAgVHJhbnNmZXIgVHlwZSAgICAgICAg
ICAgIEJ1bGsKICAgICAgICAgIFN5bmNoIFR5cGUgICAgICAgICAgICAgICBOb25lCiAgICAgICAg
ICBVc2FnZSBUeXBlICAgICAgICAgICAgICAgRGF0YQogICAgICAgIHdNYXhQYWNrZXRTaXplICAg
ICAweDAwNDAgIDF4IDY0IGJ5dGVzCiAgICAgICAgYkludGVydmFsICAgICAgICAgICAgICAgMAog
ICAgICBFbmRwb2ludCBEZXNjcmlwdG9yOgogICAgICAgIGJMZW5ndGggICAgICAgICAgICAgICAg
IDcKICAgICAgICBiRGVzY3JpcHRvclR5cGUgICAgICAgICA1CiAgICAgICAgYkVuZHBvaW50QWRk
cmVzcyAgICAgMHg4MSAgRVAgMSBJTgogICAgICAgIGJtQXR0cmlidXRlcyAgICAgICAgICAgIDIK
ICAgICAgICAgIFRyYW5zZmVyIFR5cGUgICAgICAgICAgICBCdWxrCiAgICAgICAgICBTeW5jaCBU
eXBlICAgICAgICAgICAgICAgTm9uZQogICAgICAgICAgVXNhZ2UgVHlwZSAgICAgICAgICAgICAg
IERhdGEKICAgICAgICB3TWF4UGFja2V0U2l6ZSAgICAgMHgwMDQwICAxeCA2NCBieXRlcwogICAg
ICAgIGJJbnRlcnZhbCAgICAgICAgICAgICAgIDAKICAgICAgRW5kcG9pbnQgRGVzY3JpcHRvcjoK
ICAgICAgICBiTGVuZ3RoICAgICAgICAgICAgICAgICA3CiAgICAgICAgYkRlc2NyaXB0b3JUeXBl
ICAgICAgICAgNQogICAgICAgIGJFbmRwb2ludEFkZHJlc3MgICAgIDB4MDIgIEVQIDIgT1VUCiAg
ICAgICAgYm1BdHRyaWJ1dGVzICAgICAgICAgICAgMgogICAgICAgICAgVHJhbnNmZXIgVHlwZSAg
ICAgICAgICAgIEJ1bGsKICAgICAgICAgIFN5bmNoIFR5cGUgICAgICAgICAgICAgICBOb25lCiAg
ICAgICAgICBVc2FnZSBUeXBlICAgICAgICAgICAgICAgRGF0YQogICAgICAgIHdNYXhQYWNrZXRT
aXplICAgICAweDAwNDAgIDF4IDY0IGJ5dGVzCiAgICAgICAgYkludGVydmFsICAgICAgICAgICAg
ICAgMAogICAgICBFbmRwb2ludCBEZXNjcmlwdG9yOgogICAgICAgIGJMZW5ndGggICAgICAgICAg
ICAgICAgIDcKICAgICAgICBiRGVzY3JpcHRvclR5cGUgICAgICAgICA1CiAgICAgICAgYkVuZHBv
aW50QWRkcmVzcyAgICAgMHgwNCAgRVAgNCBPVVQKICAgICAgICBibUF0dHJpYnV0ZXMgICAgICAg
ICAgICAyCiAgICAgICAgICBUcmFuc2ZlciBUeXBlICAgICAgICAgICAgQnVsawogICAgICAgICAg
U3luY2ggVHlwZSAgICAgICAgICAgICAgIE5vbmUKICAgICAgICAgIFVzYWdlIFR5cGUgICAgICAg
ICAgICAgICBEYXRhCiAgICAgICAgd01heFBhY2tldFNpemUgICAgIDB4MDA0MCAgMXggNjQgYnl0
ZXMKICAgICAgICBiSW50ZXJ2YWwgICAgICAgICAgICAgICAwCiAgICAgIEVuZHBvaW50IERlc2Ny
aXB0b3I6CiAgICAgICAgYkxlbmd0aCAgICAgICAgICAgICAgICAgNwogICAgICAgIGJEZXNjcmlw
dG9yVHlwZSAgICAgICAgIDUKICAgICAgICBiRW5kcG9pbnRBZGRyZXNzICAgICAweDg2ICBFUCA2
IElOCiAgICAgICAgYm1BdHRyaWJ1dGVzICAgICAgICAgICAgMgogICAgICAgICAgVHJhbnNmZXIg
VHlwZSAgICAgICAgICAgIEJ1bGsKICAgICAgICAgIFN5bmNoIFR5cGUgICAgICAgICAgICAgICBO
b25lCiAgICAgICAgICBVc2FnZSBUeXBlICAgICAgICAgICAgICAgRGF0YQogICAgICAgIHdNYXhQ
YWNrZXRTaXplICAgICAweDAwNDAgIDF4IDY0IGJ5dGVzCiAgICAgICAgYkludGVydmFsICAgICAg
ICAgICAgICAgMAogICAgICBFbmRwb2ludCBEZXNjcmlwdG9yOgogICAgICAgIGJMZW5ndGggICAg
ICAgICAgICAgICAgIDcKICAgICAgICBiRGVzY3JpcHRvclR5cGUgICAgICAgICA1CiAgICAgICAg
YkVuZHBvaW50QWRkcmVzcyAgICAgMHg4OCAgRVAgOCBJTgogICAgICAgIGJtQXR0cmlidXRlcyAg
ICAgICAgICAgIDIKICAgICAgICAgIFRyYW5zZmVyIFR5cGUgICAgICAgICAgICBCdWxrCiAgICAg
ICAgICBTeW5jaCBUeXBlICAgICAgICAgICAgICAgTm9uZQogICAgICAgICAgVXNhZ2UgVHlwZSAg
ICAgICAgICAgICAgIERhdGEKICAgICAgICB3TWF4UGFja2V0U2l6ZSAgICAgMHgwMDQwICAxeCA2
NCBieXRlcwogICAgICAgIGJJbnRlcnZhbCAgICAgICAgICAgICAgIDAKICAgIEludGVyZmFjZSBE
ZXNjcmlwdG9yOgogICAgICBiTGVuZ3RoICAgICAgICAgICAgICAgICA5CiAgICAgIGJEZXNjcmlw
dG9yVHlwZSAgICAgICAgIDQKICAgICAgYkludGVyZmFjZU51bWJlciAgICAgICAgMAogICAgICBi
QWx0ZXJuYXRlU2V0dGluZyAgICAgICAyCiAgICAgIGJOdW1FbmRwb2ludHMgICAgICAgICAgIDYK
ICAgICAgYkludGVyZmFjZUNsYXNzICAgICAgIDI1NSBWZW5kb3IgU3BlY2lmaWMgQ2xhc3MKICAg
ICAgYkludGVyZmFjZVN1YkNsYXNzICAgIDI1NSBWZW5kb3IgU3BlY2lmaWMgU3ViY2xhc3MKICAg
ICAgYkludGVyZmFjZVByb3RvY29sICAgIDI1NSBWZW5kb3IgU3BlY2lmaWMgUHJvdG9jb2wKICAg
ICAgaUludGVyZmFjZSAgICAgICAgICAgICAgMCAKICAgICAgRW5kcG9pbnQgRGVzY3JpcHRvcjoK
ICAgICAgICBiTGVuZ3RoICAgICAgICAgICAgICAgICA3CiAgICAgICAgYkRlc2NyaXB0b3JUeXBl
ICAgICAgICAgNQogICAgICAgIGJFbmRwb2ludEFkZHJlc3MgICAgIDB4MDEgIEVQIDEgT1VUCiAg
ICAgICAgYm1BdHRyaWJ1dGVzICAgICAgICAgICAgMwogICAgICAgICAgVHJhbnNmZXIgVHlwZSAg
ICAgICAgICAgIEludGVycnVwdAogICAgICAgICAgU3luY2ggVHlwZSAgICAgICAgICAgICAgIE5v
bmUKICAgICAgICAgIFVzYWdlIFR5cGUgICAgICAgICAgICAgICBEYXRhCiAgICAgICAgd01heFBh
Y2tldFNpemUgICAgIDB4MDA0MCAgMXggNjQgYnl0ZXMKICAgICAgICBiSW50ZXJ2YWwgICAgICAg
ICAgICAgIDEwCiAgICAgIEVuZHBvaW50IERlc2NyaXB0b3I6CiAgICAgICAgYkxlbmd0aCAgICAg
ICAgICAgICAgICAgNwogICAgICAgIGJEZXNjcmlwdG9yVHlwZSAgICAgICAgIDUKICAgICAgICBi
RW5kcG9pbnRBZGRyZXNzICAgICAweDgxICBFUCAxIElOCiAgICAgICAgYm1BdHRyaWJ1dGVzICAg
ICAgICAgICAgMwogICAgICAgICAgVHJhbnNmZXIgVHlwZSAgICAgICAgICAgIEludGVycnVwdAog
ICAgICAgICAgU3luY2ggVHlwZSAgICAgICAgICAgICAgIE5vbmUKICAgICAgICAgIFVzYWdlIFR5
cGUgICAgICAgICAgICAgICBEYXRhCiAgICAgICAgd01heFBhY2tldFNpemUgICAgIDB4MDA0MCAg
MXggNjQgYnl0ZXMKICAgICAgICBiSW50ZXJ2YWwgICAgICAgICAgICAgIDEwCiAgICAgIEVuZHBv
aW50IERlc2NyaXB0b3I6CiAgICAgICAgYkxlbmd0aCAgICAgICAgICAgICAgICAgNwogICAgICAg
IGJEZXNjcmlwdG9yVHlwZSAgICAgICAgIDUKICAgICAgICBiRW5kcG9pbnRBZGRyZXNzICAgICAw
eDAyICBFUCAyIE9VVAogICAgICAgIGJtQXR0cmlidXRlcyAgICAgICAgICAgIDMKICAgICAgICAg
IFRyYW5zZmVyIFR5cGUgICAgICAgICAgICBJbnRlcnJ1cHQKICAgICAgICAgIFN5bmNoIFR5cGUg
ICAgICAgICAgICAgICBOb25lCiAgICAgICAgICBVc2FnZSBUeXBlICAgICAgICAgICAgICAgRGF0
YQogICAgICAgIHdNYXhQYWNrZXRTaXplICAgICAweDAwNDAgIDF4IDY0IGJ5dGVzCiAgICAgICAg
YkludGVydmFsICAgICAgICAgICAgICAxMAogICAgICBFbmRwb2ludCBEZXNjcmlwdG9yOgogICAg
ICAgIGJMZW5ndGggICAgICAgICAgICAgICAgIDcKICAgICAgICBiRGVzY3JpcHRvclR5cGUgICAg
ICAgICA1CiAgICAgICAgYkVuZHBvaW50QWRkcmVzcyAgICAgMHgwNCAgRVAgNCBPVVQKICAgICAg
ICBibUF0dHJpYnV0ZXMgICAgICAgICAgICAyCiAgICAgICAgICBUcmFuc2ZlciBUeXBlICAgICAg
ICAgICAgQnVsawogICAgICAgICAgU3luY2ggVHlwZSAgICAgICAgICAgICAgIE5vbmUKICAgICAg
ICAgIFVzYWdlIFR5cGUgICAgICAgICAgICAgICBEYXRhCiAgICAgICAgd01heFBhY2tldFNpemUg
ICAgIDB4MDA0MCAgMXggNjQgYnl0ZXMKICAgICAgICBiSW50ZXJ2YWwgICAgICAgICAgICAgICAw
CiAgICAgIEVuZHBvaW50IERlc2NyaXB0b3I6CiAgICAgICAgYkxlbmd0aCAgICAgICAgICAgICAg
ICAgNwogICAgICAgIGJEZXNjcmlwdG9yVHlwZSAgICAgICAgIDUKICAgICAgICBiRW5kcG9pbnRB
ZGRyZXNzICAgICAweDg2ICBFUCA2IElOCiAgICAgICAgYm1BdHRyaWJ1dGVzICAgICAgICAgICAg
MwogICAgICAgICAgVHJhbnNmZXIgVHlwZSAgICAgICAgICAgIEludGVycnVwdAogICAgICAgICAg
U3luY2ggVHlwZSAgICAgICAgICAgICAgIE5vbmUKICAgICAgICAgIFVzYWdlIFR5cGUgICAgICAg
ICAgICAgICBEYXRhCiAgICAgICAgd01heFBhY2tldFNpemUgICAgIDB4MDA0MCAgMXggNjQgYnl0
ZXMKICAgICAgICBiSW50ZXJ2YWwgICAgICAgICAgICAgIDEwCiAgICAgIEVuZHBvaW50IERlc2Ny
aXB0b3I6CiAgICAgICAgYkxlbmd0aCAgICAgICAgICAgICAgICAgNwogICAgICAgIGJEZXNjcmlw
dG9yVHlwZSAgICAgICAgIDUKICAgICAgICBiRW5kcG9pbnRBZGRyZXNzICAgICAweDg4ICBFUCA4
IElOCiAgICAgICAgYm1BdHRyaWJ1dGVzICAgICAgICAgICAgMgogICAgICAgICAgVHJhbnNmZXIg
VHlwZSAgICAgICAgICAgIEJ1bGsKICAgICAgICAgIFN5bmNoIFR5cGUgICAgICAgICAgICAgICBO
b25lCiAgICAgICAgICBVc2FnZSBUeXBlICAgICAgICAgICAgICAgRGF0YQogICAgICAgIHdNYXhQ
YWNrZXRTaXplICAgICAweDAwNDAgIDF4IDY0IGJ5dGVzCiAgICAgICAgYkludGVydmFsICAgICAg
ICAgICAgICAgMAogICAgSW50ZXJmYWNlIERlc2NyaXB0b3I6CiAgICAgIGJMZW5ndGggICAgICAg
ICAgICAgICAgIDkKICAgICAgYkRlc2NyaXB0b3JUeXBlICAgICAgICAgNAogICAgICBiSW50ZXJm
YWNlTnVtYmVyICAgICAgICAwCiAgICAgIGJBbHRlcm5hdGVTZXR0aW5nICAgICAgIDMKICAgICAg
Yk51bUVuZHBvaW50cyAgICAgICAgICAgNgogICAgICBiSW50ZXJmYWNlQ2xhc3MgICAgICAgMjU1
IFZlbmRvciBTcGVjaWZpYyBDbGFzcwogICAgICBiSW50ZXJmYWNlU3ViQ2xhc3MgICAgMjU1IFZl
bmRvciBTcGVjaWZpYyBTdWJjbGFzcwogICAgICBiSW50ZXJmYWNlUHJvdG9jb2wgICAgMjU1IFZl
bmRvciBTcGVjaWZpYyBQcm90b2NvbAogICAgICBpSW50ZXJmYWNlICAgICAgICAgICAgICAwIAog
ICAgICBFbmRwb2ludCBEZXNjcmlwdG9yOgogICAgICAgIGJMZW5ndGggICAgICAgICAgICAgICAg
IDcKICAgICAgICBiRGVzY3JpcHRvclR5cGUgICAgICAgICA1CiAgICAgICAgYkVuZHBvaW50QWRk
cmVzcyAgICAgMHgwMSAgRVAgMSBPVVQKICAgICAgICBibUF0dHJpYnV0ZXMgICAgICAgICAgICAz
CiAgICAgICAgICBUcmFuc2ZlciBUeXBlICAgICAgICAgICAgSW50ZXJydXB0CiAgICAgICAgICBT
eW5jaCBUeXBlICAgICAgICAgICAgICAgTm9uZQogICAgICAgICAgVXNhZ2UgVHlwZSAgICAgICAg
ICAgICAgIERhdGEKICAgICAgICB3TWF4UGFja2V0U2l6ZSAgICAgMHgwMDQwICAxeCA2NCBieXRl
cwogICAgICAgIGJJbnRlcnZhbCAgICAgICAgICAgICAgMTAKICAgICAgRW5kcG9pbnQgRGVzY3Jp
cHRvcjoKICAgICAgICBiTGVuZ3RoICAgICAgICAgICAgICAgICA3CiAgICAgICAgYkRlc2NyaXB0
b3JUeXBlICAgICAgICAgNQogICAgICAgIGJFbmRwb2ludEFkZHJlc3MgICAgIDB4ODEgIEVQIDEg
SU4KICAgICAgICBibUF0dHJpYnV0ZXMgICAgICAgICAgICAzCiAgICAgICAgICBUcmFuc2ZlciBU
eXBlICAgICAgICAgICAgSW50ZXJydXB0CiAgICAgICAgICBTeW5jaCBUeXBlICAgICAgICAgICAg
ICAgTm9uZQogICAgICAgICAgVXNhZ2UgVHlwZSAgICAgICAgICAgICAgIERhdGEKICAgICAgICB3
TWF4UGFja2V0U2l6ZSAgICAgMHgwMDQwICAxeCA2NCBieXRlcwogICAgICAgIGJJbnRlcnZhbCAg
ICAgICAgICAgICAgMTAKICAgICAgRW5kcG9pbnQgRGVzY3JpcHRvcjoKICAgICAgICBiTGVuZ3Ro
ICAgICAgICAgICAgICAgICA3CiAgICAgICAgYkRlc2NyaXB0b3JUeXBlICAgICAgICAgNQogICAg
ICAgIGJFbmRwb2ludEFkZHJlc3MgICAgIDB4MDIgIEVQIDIgT1VUCiAgICAgICAgYm1BdHRyaWJ1
dGVzICAgICAgICAgICAgMQogICAgICAgICAgVHJhbnNmZXIgVHlwZSAgICAgICAgICAgIElzb2No
cm9ub3VzCiAgICAgICAgICBTeW5jaCBUeXBlICAgICAgICAgICAgICAgTm9uZQogICAgICAgICAg
VXNhZ2UgVHlwZSAgICAgICAgICAgICAgIERhdGEKICAgICAgICB3TWF4UGFja2V0U2l6ZSAgICAg
MHgwMDQwICAxeCA2NCBieXRlcwogICAgICAgIGJJbnRlcnZhbCAgICAgICAgICAgICAgIDEKICAg
ICAgRW5kcG9pbnQgRGVzY3JpcHRvcjoKICAgICAgICBiTGVuZ3RoICAgICAgICAgICAgICAgICA3
CiAgICAgICAgYkRlc2NyaXB0b3JUeXBlICAgICAgICAgNQogICAgICAgIGJFbmRwb2ludEFkZHJl
c3MgICAgIDB4MDQgIEVQIDQgT1VUCiAgICAgICAgYm1BdHRyaWJ1dGVzICAgICAgICAgICAgMgog
ICAgICAgICAgVHJhbnNmZXIgVHlwZSAgICAgICAgICAgIEJ1bGsKICAgICAgICAgIFN5bmNoIFR5
cGUgICAgICAgICAgICAgICBOb25lCiAgICAgICAgICBVc2FnZSBUeXBlICAgICAgICAgICAgICAg
RGF0YQogICAgICAgIHdNYXhQYWNrZXRTaXplICAgICAweDAwNDAgIDF4IDY0IGJ5dGVzCiAgICAg
ICAgYkludGVydmFsICAgICAgICAgICAgICAgMAogICAgICBFbmRwb2ludCBEZXNjcmlwdG9yOgog
ICAgICAgIGJMZW5ndGggICAgICAgICAgICAgICAgIDcKICAgICAgICBiRGVzY3JpcHRvclR5cGUg
ICAgICAgICA1CiAgICAgICAgYkVuZHBvaW50QWRkcmVzcyAgICAgMHg4NiAgRVAgNiBJTgogICAg
ICAgIGJtQXR0cmlidXRlcyAgICAgICAgICAgIDEKICAgICAgICAgIFRyYW5zZmVyIFR5cGUgICAg
ICAgICAgICBJc29jaHJvbm91cwogICAgICAgICAgU3luY2ggVHlwZSAgICAgICAgICAgICAgIE5v
bmUKICAgICAgICAgIFVzYWdlIFR5cGUgICAgICAgICAgICAgICBEYXRhCiAgICAgICAgd01heFBh
Y2tldFNpemUgICAgIDB4MDA0MCAgMXggNjQgYnl0ZXMKICAgICAgICBiSW50ZXJ2YWwgICAgICAg
ICAgICAgICAxCiAgICAgIEVuZHBvaW50IERlc2NyaXB0b3I6CiAgICAgICAgYkxlbmd0aCAgICAg
ICAgICAgICAgICAgNwogICAgICAgIGJEZXNjcmlwdG9yVHlwZSAgICAgICAgIDUKICAgICAgICBi
RW5kcG9pbnRBZGRyZXNzICAgICAweDg4ICBFUCA4IElOCiAgICAgICAgYm1BdHRyaWJ1dGVzICAg
ICAgICAgICAgMgogICAgICAgICAgVHJhbnNmZXIgVHlwZSAgICAgICAgICAgIEJ1bGsKICAgICAg
ICAgIFN5bmNoIFR5cGUgICAgICAgICAgICAgICBOb25lCiAgICAgICAgICBVc2FnZSBUeXBlICAg
ICAgICAgICAgICAgRGF0YQogICAgICAgIHdNYXhQYWNrZXRTaXplICAgICAweDAwNDAgIDF4IDY0
IGJ5dGVzCiAgICAgICAgYkludGVydmFsICAgICAgICAgICAgICAgMApEZXZpY2UgU3RhdHVzOiAg
ICAgMHgwMDAwCiAgKEJ1cyBQb3dlcmVkKQo=
--0000000000006959e80631a32d05--