[Tutor] Passing Data to .DLL

Wilson, Pete Pete.Wilson at atmel.com
Wed Oct 22 02:04:18 CEST 2014


I am having problems passing a pointer and uint8 to a .DLL. I have been successful registering call -backs with this .DLL. So it is all 32-bit and ctypes are working. Everything is working up to the line #set-up ProcessingIncomingSerialData. I tried the direct approach and then morphing the call-back style but yummy_thing is not so yummy... The python code is below..

The definition from the .DLL header is
[cid:image002.png at 01CFED51.0C6D7E70]

# Python code starts here.....

''' read_bat.py
'''

from serial import *
from string import *
from time import *

system_state = "G2G"

''' --- REMOVED Set-up the COMM port ----
print("Enter COM port number")
user_comm_port = raw_input()

try:
    dut_serial_port = Serial(port="COM"+user_comm_port, baudrate=115200, timeout=1)
except:
    system_state = "FUBAR"
    print "Serial Port Problem"

try:
    dut_serial_port.isOpen()
    print("COM" + user_comm_port + " is open")
except:
    print "Serial Port Problem"
    system_state = "FUBAR"

-------------------------------------------'''

#Set-up and register cb_send_serial_data

from ctypes import *

pt_dll = CDLL("c:/py_stuff/ProductionTest.dll")

SendSerialData_t = CFUNCTYPE(None, POINTER(c_uint8), c_uint8)

reg_send_serial_data = pt_dll.RegSendSerialData
reg_send_serial_data.argtypes = [SendSerialData_t]
reg_send_serial_data.restype = None


global new_serial_tx_data
global new_serial_size

def send_serial_data(tx_data, size):
    # testing
    print "tx_data = ", tx_data
    print "size = ", size
    print "tx_data[:size] = ", tx_data[:size]

    global new_serial_tx_data
    new_serial_tx_data = tx_data[:size]

    global new_serial_size
    new_serial_size = size

cb_send_serial_data = SendSerialData_t(send_serial_data)
global cb_send_serial_data

reg_send_serial_data(cb_send_serial_data)

print "reg_send_serial_data done"

#Set-up and register cb_bat_vol_read
#this triggers send_serial_data when it is registered.


BatVolReadRequest_t = CFUNCTYPE(None, c_uint16, c_uint8)

prod_bat_vol_read_request = pt_dll.ProdBatVolReadRequest
prod_bat_vol_read_request.argtypes = [BatVolReadRequest_t]
prod_bat_vol_read_request.restype = None

def bat_vol_read(bat_vol, status):
    print "bat_vol_read()"
    # testing
    print bat_vol, status

cb_bat_vol_read = BatVolReadRequest_t(bat_vol_read)

prod_bat_vol_read_request(cb_bat_vol_read)

print "prod_bat_vol_read_request done"


''' ------------REMOVED serial access for example -----
#push new_serial_tx_data  out the serial port to the DUT.

print new_serial_tx_data

dut_serial_port.write(new_serial_tx_data)
dut_serial_port.write("\r \n")
sleep(1)


#and check to see the DUT's reply...


global new_serial_rx_data
#new_serial_rx_data =""
global rx_buf
rx_buf = []

try:
    string_buf = dut_serial_port.readline()
except:
    system_state = "FUBAR"
    print "serial read problem"

rx_buf = list(string_buf)
print "string_buf = ", string_buf
print "rx_buf = ", rx_buf

-----------------------------------------------'''

#set-up ProcessingIncomingSerialData

print "breakpoint"

class rx_data_t:
    def _init_(self):
        #self.ret = None
        self.data = []
        self.size = ''

fake_rx_data = rx_data_t()

fake_rx_data.data = ['\x01', '\x05', '\x00', '\x1c', '\x00', '\x99', '\x0c', '\x04']
fake_rx_data.size = 8

print "fake_rx_data.data = ", fake_rx_data.data
print "fake_rx_data.size = ", fake_rx_data.size

ProcessIncomingSerialData_t = CFUNCTYPE(None, POINTER(c_uint8), c_uint16)

process_incoming_serial_data = pt_dll.ProcessIncomingSerialData
process_incoming_serial_data.argtypes = [ProcessIncomingSerialData_t]
#process_incoming_serial_data.argtypes = [POINTER(c_uint8), c_uint16]
process_incoming_serial_data.restype = None

yummy_thing = ProcessIncomingSerialData_t(fake_rx_data)passing pointers to

process_incoming_serial_data(yummy_thing)
#process_incoming_serial_data(fake_rx_data)

print "Done."
print "system_state = ", system_state
#print "Closing COM port", user_comm_port
#dut_serial_port.close()
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20141022/8f661e80/attachment-0001.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: image002.png
Type: image/png
Size: 62037 bytes
Desc: image002.png
URL: <http://mail.python.org/pipermail/tutor/attachments/20141022/8f661e80/attachment-0001.png>


More information about the Tutor mailing list