Hello Wander,

Now I am very much confused about everythin going on with Pyusb.
1. First with installation.
    I installed ----> libusb-1.-00 from synaptic
                       > '
http://sourceforge.net/projects/pyusb/files/latest/download'
                           got the pyusb files, unzipped and installed as
                           $ sudo python setup.py install

The following code works.
> =========================================================
>
>> import usb.core
>> import usb.util
>>
>> # find our device
>> dev = usb.core.find(idVendor=0x0dd4, idProduct=0x01a8)
>>
>> # was it found?
>> if dev is None:
>>     raise ValueError('Device not found')
>>
>> # set the active configuration. With no arguments, the first
>> # configuration will be the active one
>> dev.set_configuration()
>>
>> # get an endpoint instance
>> cfg = dev.get_active_configuration()
>> interface_number = cfg[(0,0)].bInterfaceNumber
>> alternate_setting = usb.control.get_interface(dev,interface_number)
>> intf = usb.util.find_descriptor(cfg, bInterfaceNumber = interface_number,
>>                                 bAlternateSetting = alternate_setting
>> )
>>
>> ep = usb.util.find_descriptor(
>>     intf,
>>     # match the first OUT endpoint
>>     custom_match = \
>>     lambda e: \
>>         usb.util.endpoint_direction(e.bEndpointAddress) == \
>>         usb.util.ENDPOINT_OUT
>> )
>>
>> assert ep is not None
>>
>> # write the data
>> print ep.write('\x10')
>> print ep.read(1,0)
>>
>
> =========================================================
> Output is:
>
> $ sudo python hardware_monitor_printer.py
>> bytes written:  1
>> bytes read:  array('B', [0])
>>
>
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

Then I tried my original code.
=========================================================

#!/usr/bin/python
>
> import usb
> import time
>
> class HardwareMonitor_printer(object):
>     def __init__(self, vendor_id, product_id):
>         self.device_found = False # True if device found
>         busses = usb.busses() # enumerate busses
>         self.handle = None
>         for bus in busses:
>                 devices = bus.devices
>                 for dev in devices:
>                     if dev.idVendor == vendor_id and dev.idProduct ==
> product_id: # device matches
>                         self.dev = dev
>                         self.conf = self.dev.configurations[0]
>                         self.intf = self.conf.interfaces[0][0]
>                         self.endpoints = []
>                         for endpoint in self.intf.endpoints:
>
> self.endpoints.append(endpoint)
>                         self.device_found = True
>                         return
>
>     def open(self):
>         if self.handle:
>             self.handle = None
>         try:
>             self.handle = self.dev.open()
>             if self.handle.is_kernel_driver_active(self.intf):
>                 try:
>                     self.handle.detach_kernel_driver(self.intf)
>                 except Exception as e:
>                     print "ERROR: Could not detach device from kernel:", e
>                 else:
>                     self.handle.claimInterface(self.intf)
>                     self.handle.setConfiguration(self.conf)
>                     self.handle.setAltInterface(self.intf)
>             return True
>         except:
>             return False
>
>     def write(self, ep , buff, timeout=100):
>         try:
>             return self.handle.interruptWrite(ep, buff, timeout) #return
> bytes written
>         except usb.USBError as e:
>             print e
>             return 0
>
>     def read(self, ep, size, timeout=100):
>         try:
>             return self.handle.interruptRead(ep, size, timeout) # return
> data read
>         except:
>             return []
>
>     def getDeviceName(self):
>         try:
>             for i in range (1, 4):
>                 print self.handle.getString(i,25)
>         except IOError as e:
>             print e
>
>     def endpoint(self):
>             return self.endpoints
>
> if __name__ == '__main__':
>     printer = HardwareMonitor_printer(0xdd4,0x1a8)
>     if printer.device_found:
>         printer.open()
>         print 'endpoints: ', (printer.endpoints)
>         printer.getDeviceName()
>         try:
>             bytes_written = printer.write(1, [0x10], 100)
>             print 'bytes written: ', bytes_written
>         except usb.USBError, e:
>             print e
>         bytes_read = printer.read(0x81, 64)
>         print 'bytes read: ', bytes_read
>     else:
>         print 'device not found!!!'
>

=========================================================
It gives the device info but also errors.

$ sudo python hardware_monitor_printer.py
> endpoints:  [<usb.legacy.Endpoint object at 0x8b46f2c>,
> <usb.legacy.Endpoint object at 0x8b46eac>]
> CUSTOM Engineering S.p.A.
> TG2480-H
> Self Power Mode
> Traceback (most recent call last):
>   File "hardware_monitor_printer.py", line 122, in <module>
>     bytes_written = printer.write(1, [0x10], 100)
>   File "hardware_monitor_printer.py", line 94, in write
>     return self.handle.interruptWrite(ep, buff, timeout) #return bytes
> written
>   File "/usr/local/lib/python2.6/dist-packages/usb/legacy.py", line 171,
> in interruptWrite
>     return self.dev.write(endpoint, buffer, self.__claimed_interface,
> timeout)
>   File "/usr/local/lib/python2.6/dist-packages/usb/core.py", line 613, in
> write
>     fn = fn_map[self._ctx.get_endpoint_type(self, endpoint, intf)]
>   File "/usr/local/lib/python2.6/dist-packages/usb/core.py", line 183, in
> get_endpoint_type
>     etype = util.endpoint_type(e.bmAttributes)
> AttributeError: 'NoneType' object has no attribute 'bmAttributes'
>


2. Now if I install python-usb from synaptic.
    It only gives error like this with my original code( the code with
'import usb'...)

$ sudo python hardware_monitor_printer.py
> endpoints:  [<usb.Endpoint object at 0xb7805090>, <usb.Endpoint object at
> 0xb7805080>]
> CUSTOM Engineering S.p.A.
> TG2480-H
> Self Power Mode
> error submitting URB: No such file or directory
> bytes written:  0
> bytes read:  []


3. So where am I missing.

   - Did I installed files correctly ??
   - Do I need to install python-usb from *synaptic* or not ?

4. This is my device info.

> Device: 004
>   Device class: 0
>   Device sub class: 0
>   Device protocol: 0
>   Max packet size: 64
>   idVendor: 3540
>   idProduct: 424
>   Device Version: 01.19
>   Configuration: 1
>     Total length: 32
>     selfPowered: 1
>     remoteWakeup: 0
>     maxPower: 4
>     Interface: 0
>     Alternate Setting: 0
>       Interface class: 7
>       Interface sub class: 1
>       Interface protocol: 2
>       Endpoint: 0x81L
>         Type: 2
>         Max packet size: 64
>         Interval: 0
>       Endpoint: 0x2L
>         Type: 2
>         Max packet size: 64
>         Interval: 0
>
Got this info through
usbenum.py<http://wiki.erazor-zone.de/wiki:projects:python:pyusb:setup:examples:usbenum>and
it says written by Wander
Lairson Costa

5. Since I have my device info, endpoint info(above), why cant I write into
my device.
    If the parameters for *write(self, ep , buff, timeout=100) *is wrong
    Please somebody find a way out to work this code.

If I lag any information please feel free to ask for any information.

Regards,
Bibek Chitrakar
------------------------------------------------------------------------------
Keep Your Developer Skills Current with LearnDevNow!
The most comprehensive online learning library for Microsoft developers
is just $99.99! Visual Studio, SharePoint, SQL - plus HTML5, CSS3, MVC3,
Metro Style Apps, more. Free future releases when you subscribe now!
http://p.sf.net/sfu/learndevnow-d2d
_______________________________________________
pyusb-users mailing list
pyusb-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/pyusb-users

Reply via email to