Red Rackham wrote:
>
> I think I have finally figured it out. Thanks for the suggestion, I
> ran the executable (compiled C code) and it worked, and it returned 0x8B.
>
> Previously I saw this value and thought was bunkum. I thought it was
> incorrect because of the way ctypes encodes a string buffer: ('value',
> '\x8b|'). I was probably thrown off by the '|' in the string. Not
> sure why that gets returned. I guess to get a real value out of that
> buffer you have to use the 're' module or something.
>
You need to use your head to figure this out, and thinking of the "re"
module is not using your head.
The only way to pass buffers around in Python 2 is as strings. The
answer is that your ioctl is returning TWO bytes: 8B and 7C. It is not
uncommon practice in FX2 firmware to return an error code in the first
byte, so perhaps the port value is actually the second byte: 7C. You
can tell this for sure by checking the firmware source code.
If you really want to handle the result as hex byte values, you can use
struct or array:
import struct
s = '\x8b|'
t = struct.unpack('BB', s )
print [hex(i) for i in t]
import array
x = array('B')
x.fromstring( s )
t = x.tolist()
print [hex(i) for i in t]
> Except that now I'm trying to read PORTD which is also returning the
> same value (0x8B) but I'm expecting a different value. So either it's
> just a coincidence that I read 0x8B, or I have my data aligned wrong
> and it's getting a '0' in the field where it's expecting a 7 for PORTD.
Are you getting two bytes here as well? What's the second byte?
--
Tim Roberts, [email protected]
Providenza & Boekelheide, Inc.
_______________________________________________
python-win32 mailing list
[email protected]
http://mail.python.org/mailman/listinfo/python-win32