From: Nicolas P. <nic...@aa...> - 2019-11-21 13:30:10
|
Raphaël, To convert numerical values to byte strings, and vice versa, please use the struct API : import struct s = struct.pack("<BL", 0, 5) v1, v2 = struct.unpack("<BL", s) Please see the struct help for further details. Nicolas Le 21/11/2019 à 12:00, raphael moreau a écrit : > > Bonjour, > > Thank you for your answer, > > The DP5_Programmer's guide can be found here: > > http://experimentationlab.berkeley.edu/sites/default/files/images/DP5_Programmers_Guide_A4.pdf > > And the entire code is here (Python_SDK\pyDppUSB): > > https://www.amptek.com/-/media/ametekamptek/documents/softwares/Python_SDK.zip?la=en > > I run the pyDP5.py module (Python_SDK\pyDppUSB\pyDP5.py), and here is > a selected part (from Python_SDK\pyDppUSB\DppLibusb.py) that I'm > interested in. As I said, this code was provide by Amptek when I > contacted them, but it's for demo only in python 2, and not offically > supported (that's the reason why it's pretty "dirty", with the few > correction I already added): > > from vbfunctions import * > from vbclasses import * > import usb > import sys > import time > from dppStatus import * > import codecs > > decode_hex = codecs.getdecoder("hex_codec") > > LIBUSB_TIMEOUT = 500 > > #REQUEST_STATUS_PACKET = > decode_hex('F5FA01010000FE0F') # Request Status Packet > REQUEST_STATUS_PACKET = '\xf5\xfa\x01\x01\x00\x00\xfe\x0f' > > > #------------------------------------------------------------------------------- > # DppLibusb Class > #------------------------------------------------------------------------------- > > class DppLibusb(): > def __init__(self): > self.VENDOR = 0x10C4 > self.PRODUCT = 0x842A > self.CONFIGURATION = 1 > self.INTERFACE = 0 > self.ENDPOINT_IN = 0x81 > self.ENDPOINT_OUT = 0x02 > > self.device = None > self.handle = None > > self.device = usb.core.find(idVendor=0x10c4, idProduct=0x842a) > > #for bus in usb.busses(): > # for dev in bus.devices: > # if dev.idVendor == self.VENDOR and dev.idProduct == > self.PRODUCT: > # self.device = dev > > self.strStatus = str() > self.bArrStatusIn = bytes() > self.bArrBuffer = bytes() > self.AckPid2 = bytes() > self.AckMsg = str() > #self.STATUS = STATUS > self.DataRaw = bytes() > self.Channels = int() > self.Data = int() > self.Header = bytes() > > self.bArrArrBuffer = bytearray() > > if self.open() == None: > print (sys.stderr, "Unable to open DppLibusb device!") > sys.exit() > return None > > def isConnected(self): > _ret = False > iNumBytes = 0 > print("Get Status") > > *try:* > * iNumBytes = self.write(REQUEST_STATUS_PACKET, > LIBUSB_TIMEOUT)* > ** > * except usb.USBError as err:* > * pass* > * if iNumBytes > 0:* > * print ('Bytes Out =',iNumBytes) # debug* > * try:* > ** > * self.bArrArrBuffer = self.read(128, LIBUSB_TIMEOUT)* > * self.bArrStatusIn = bytearray(self.bArrArrBuffer)* > ** > * except usb.USBError as err:* > * pass* > > > if len(self.bArrStatusIn) > 0: > print ("STATUS.RAW type ", type(self.STATUS.RAW)) > self.STATUS.RAW = bytearray(self.bArrStatusIn[6:70]) > if len(self.STATUS.RAW) > 0: > Process_Status(self.STATUS) > if (self.STATUS.SerialNumber > 0): > _ret = True > return _ret > > While the iNumbytes get a value from the *iNumBytes = > self.write(REQUEST_STATUS_PACKET, LIBUSB_TIMEOUT)* (which might be a > wrong value), the *self.bArrArrBuffer = self.read(128, > LIBUSB_TIMEOUT)* is never reached. So my guess is that the > REQUEST_STATUS_PACKET is in the wrong format, thus my original > question : how do I write and read instruction in hexadecimal ? Is > converting the whole instruction in string via REQUEST_STATUS_PACKET = > '\xf5\xfa\x01\x01\x00\x00\xfe\x0f' correct ? (I doubt it is). Again, > sorry for the "messy" code, and thanks for any answer provided. > > Best regards > > Raphaël > > > Message du 21/11/19 10:11 > > De : "Nicolas Pinault via pyusb-users" > <pyu...@li...> > > A : pyu...@li... > > Copie à : "Nicolas Pinault" <nic...@aa...> > > Objet : Re: [pyusb-users] Writing and reading hexadecimal command > > > > > Bonjour Raphaël, > > > > You do not provide enought information. > > Can you provide a link to the DP5 documentation ? > > Can you provide a small code sample ? > > > > Bonne journée, > > Nicolas > > > > > > Le 21/11/2019 à 09:43, raphael moreau a écrit : > > > > > Good morning pyusb users, > > > > > > I'm writing you this emial because I'm facing an issue that > I did not succed to resolve until now, and I'm sure you will. > > > > > > I'm currently working on a Python project which involve the > communication witn an USB Device (DP5 Amptek SDD Detector, an > x-ray detector), and after a few test it seems that my device > dont understand what I'm telling him to do. > > > > > > I started with the basic, a Device Status request, which is > the following (.jgp screenshot, I hope you'll be able to see it): > > > > > > > > > I tried the classic dev.write(x,test,x), with test = > '\xf5\xfa\x01\x01\x00\x00\xfe\x0f', or test = > '\xf5\xfa1100\xfe\x0f' but the expected result, which is the > following(same here, .jpg screenshot): > > > > > > > > > does not seems to be return with res = dev.read(x, length, > x) with length = 128 or length = 64 (seems odd to me for the > 128 but i guess it's for the array format?) > > > > > > > > > My question is therefore quit simple, how do I pass and read > thoses command ? > > > > > > I'm using python 3, and I have no problem in term of > identification of the device, configuration, interface and > endpoint IN and OUT, with pyusb. > > > > > > The program I'm using is an old python 2 demo supplied by > the manufacturer which is not supported by them. > > > I precise that I'm rather new to USB and programming in > general, so I apologize if this question seems basic, or had > already been answered to. > > > > > > Thank you for any response, > > > > > > Best regards, > > > > > > > > > > > > Raphaël Moreau > > > > > > > > > > > > > > > > > > > > > > _______________________________________________ > pyusb-users mailing list > pyu...@li... > https://lists.sourceforge.net/lists/listinfo/pyusb-users > > > > > > > > > > _______________________________________________ > pyusb-users mailing list > pyu...@li... > https://lists.sourceforge.net/lists/listinfo/pyusb-users > > > > _______________________________________________ > pyusb-users mailing list > pyu...@li... > https://lists.sourceforge.net/lists/listinfo/pyusb-users |