On 22/10/14 01:04, Wilson, Pete wrote:
The python code is below..

''' read_bat.py
'''

You are using triple quoted strings as a commenting feature.
Thats good practice where you want a docstring to appear in
the help() screen but its not so good for comments like the
above or where you are commenting out code blocks because
the quotes are esy to miss and hard to spot the closing
match.  (OK in an IDE because it colours the string but
in a mail message its much harder to see)

Could you, when posting long bits of code, please remove
the commented out sections - it makes us (well me at least)
much more willing to study the code. I've tried to remove
the redundant sections below, and made a few style comments.
But apart from the spurious 'comment' at the end of the
calling line I don't see anything obvious.

from serial import *
from string import *

Are you sure you need string? It is very rarely used and I
don't see it anywhere in your code?

from time import *

Also in general its bad practice to use this style of import.
The risk of name collisions is quite high. If you don;t like the long names use an alias:

import serial as ser

for example.

system_state = "G2G"

#Set-up and register cb_send_serial_data
from ctypes import *

And its best to keep the imports all together

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

You don't need the global keyword at the module level,
its only needed inside the function to indicate that
the variable is non-local.

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

Its traditional to put all the global declarations together
at the top of the function.

     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()"
     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"

#set-up ProcessingIncomingSerialData

print "breakpoint"

class rx_data_t:
     def _init_(self):
         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

I'm not sure why you used a class here. But if you are
using one you might as well make the __init__() do
something useful:

class rx_data_t:
    def _init_(self,data=[],size=None):
        self.data = data
        self.size = size

And then initialize it on creation:

fake_rx_data = rx_data_t(['\x01','\x05','\x00','\x1c',
                          '\x00','\x99', '\x0c','\x04'],
                          8)

But since the class doesn't do anything(no methods)
you might as well just use a tuple or dictionary.

fake_rx_data = {data: ['\x01','\x05','\x00','\x1c',
                       '\x00','\x99', '\x0c','\x04'],
                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.restype = None

yummy_thing = ProcessIncomingSerialData_t(fake_rx_data)passing pointers to

Is there supposed to be comment marker after the parens?

process_incoming_serial_data(yummy_thing)
print "Done."
print "system_state = ", system_state

--
Alan G
Author of the Learn to Program web site
http://www.alan-g.me.uk/
http://www.flickr.com/photos/alangauldphotos

_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor

Reply via email to