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&#39;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&#39;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-&gt;cur_altsetting;<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 struct dt981=
2_private *devpriv =3D dev-&gt;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-&gt;cur_altsetting;<br><br>=C2=
=A0 =C2=A0 =C2=A0 =C2=A0 if (host-&gt;desc.bNumEndpoints !=3D 6) {<br>=C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 dev_err(dev-&gt;class_=
dev, &quot;Wrong number of endpoints %d, num alts %d\n&quot;, host-&gt;desc=
.bNumEndpoints,<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
intf-&gt;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-&gt;class_dev, &quot;Number of endpoints %=
d, num alts %d\n&quot;, host-&gt;desc.bNumEndpoints,<br>=C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 intf-&gt;num_altsetting);<br><br>=C2=
=A0 =C2=A0 =C2=A0 =C2=A0 for (i =3D 0; i &lt; host-&gt;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 &amp;host-&gt;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-&gt;cmd_wr.addr =3D ep-&gt;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-&gt=
;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-&gt;cmd_rd.addr =3D ep-&gt;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-&gt;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-&gt;bEndpointAddress &amp; 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-&gt;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 &quot;Endpoint has wrong direction %d\n&quot;,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 &#39;dt9812&#39; 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 &lt;=
<a href=3D"mailto:[email protected]">[email protected]</a>&gt; 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, &#39;fred brooks&#39; via Comedi: Linux Control and <b=
r>
Measurement Device Interface wrote:<br>
&gt; <br>
&gt; Trying to get this to work with a DT9812 but am having some strange <b=
r>
&gt; problems. The first thing is the returned product ID is sort of revers=
ed <br>
&gt; from the device model.<br>
&gt;=C2=A0 =C2=A0usb 4-1: New USB device found, idVendor=3D0867, idProduct=
=3D1298, <br>
&gt; bcdDevice=3D 0.00<br>
&gt; <br>
&gt; The driver dt9812_usb_table in dt9812.c was changed to match that numb=
er.<br>
&gt; <br>
&gt; static const struct usb_device_id dt9812_usb_table[] =3D {<br>
&gt;=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 { USB_DEVICE(0x0867, 0x1298) },<br>
&gt;=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 { }<br>
&gt; };<br>
&gt; <br>
&gt; The original value inthe driver struct was=C2=A0=C2=A0(0x0867, 0x9812)=
<br>
&gt; <br>
&gt; Now the recompiled=C2=A0 dt9812 module actually loads and tried to run=
 but <br>
&gt; this is the result:<br>
&gt; <br>
&gt; [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> &lt;htt=
p:// <br>
&gt; <a href=3D"http://www.comedi.org/" rel=3D"noreferrer" target=3D"_blank=
">www.comedi.org/</a>&gt;<br>
&gt; [240608.298984] comedi comedi0: Wrong number of endpoints<br>
&gt; [240608.298990] dt9812 3-9.3:1.0: driver &#39;dt9812&#39; failed to au=
to- <br>
&gt; configure device.<br>
&gt; [240608.299072] usbcore: registered new interface driver dt9812<br>
&gt; <br>
&gt; The number of end points returned is zero.<br>
[snip]<br>
&gt; Running Debian=C2=A06.12.20-amd64 and I also tried with an Orange PI a=
rm64 <br>
&gt; machine with the same result after the driver modifications=C2=A0to ma=
tch <br>
&gt; the=C2=A0idProduct=3D1298<br>
&gt; <br>
&gt; Source of the error message.<br>
&gt; static int dt9812_find_endpoints(struct comedi_device *dev)<br>
&gt; {<br>
&gt;=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 struct usb_interface *intf =3D comed=
i_to_usb_interface(dev);<br>
&gt;=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 struct usb_host_interface *host =3D =
intf-&gt;cur_altsetting;<br>
&gt;=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 struct dt9812_private *devpriv =3D d=
ev-&gt;private;<br>
&gt;=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 struct usb_endpoint_descriptor *ep;<=
br>
&gt;=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 int i;<br>
&gt; <br>
&gt;=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 if (host-&gt;desc.bNumEndpoints !=3D=
 5) {<br>
&gt;=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 dev_err(=
dev-&gt;class_dev, &quot;Wrong number of endpoints\n&quot;);<br>
&gt;=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 return -=
ENODEV;<br>
&gt;=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 }<br>
&gt; <br>
&gt; Yes, the DT9812 works using the Windows driver=C2=A0 running Win11<br>
<br>
Looking at the &quot;DT9812_Kmdf.inf&quot; file from the Windows drivers in=
stalled <br>
by the &quot;Omni-CD&quot;<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&amp;PID_1298 appears to be a &quot;DT9812 Firm=
ware <br>
Loader&quot; device. That .inf file also supports &quot;DT9812&quot; (PID 0=
x9812), <br>
&quot;DT9813&quot; (PID 0x9813), and &quot;DT9814&quot; (PID 0x9814).=C2=A0=
 The &quot;DT9812 Firmware <br>
Loader&quot; 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>
&quot;DT9812 Firmware Loader&quot; device is a hardware re-spin of the old =
device? <br>
I don&#39;t really know, to be honest.<br>
<br>
-- <br>
-=3D( Ian Abbott &lt;<a href=3D"mailto:[email protected]" target=3D"_blank"=
>[email protected]</a>&gt; || MEV Ltd. is a company=C2=A0 )=3D-<br>
-=3D( registered in England &amp; Wales.=C2=A0 Regd. number: 02862268.=C2=
=A0 )=3D-<br>
-=3D( Regd. addr.: S11 &amp; 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&quot; 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&quot; 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--