Files
galaxy/scripts/galaxy_messaging/client/scanner_interface.py
T

76 lines
2.5 KiB
Python

import sys, os
import serial
import array
import time
import optparse
import ConfigParser
import logging
logging.basicConfig(level=logging.INFO)
log = logging.getLogger( 'ScannerInterface' )
class ScannerInterface( object ):
cmdprefix = [22, 77, 13]
response = { 6: 'ACK', 5: 'ENQ', 21: 'NAK' }
def __init__( self, port ):
if os.name in ['posix', 'mac']:
self.port = port
elif os.name == 'nt':
self.port = int(port)
if self.port:
self.open()
def open(self):
try:
self.serial_conn = serial.Serial(self.port)
except serial.SerialException:
log.exception('Unable to open port: %s' % str(self.port))
sys.exit(1)
log.debug('Port %s is open: %s' %( str(self.port), self.serial_conn.isOpen() ) )
def is_open(self):
return self.serial_conn.isOpen()
def close(self):
self.serial_conn.close()
log.debug('Port %s is open: %s' %( str(self.port), self.serial_conn.isOpen() ) )
def send(self, msg):
message = self.cmdprefix + map(ord, msg)
byte_array = array.array('B', message)
log.debug('Sending message to %s: %s' % ( str(self.port), message) )
bytes = self.serial_conn.write( byte_array.tostring() )
log.debug('%i bytes out of %i bytes sent to the scanner' % ( bytes, len(message) ) )
def recv(self):
time.sleep(1)
self.serial_conn.flush()
nbytes = self.serial_conn.inWaiting()
log.debug('%i bytes received' % nbytes)
if nbytes:
msg = self.serial_conn.read(nbytes)
byte_array = map(ord, msg)
log.debug('Message received [%s]: %s' % (self.response.get(byte_array[len(byte_array)-2], byte_array[len(byte_array)-2]),
msg))
return msg
else:
log.error('Error!')
return None
def setup_recv(self, callback):
self.recv_callback = callback
def wait(self):
nbytes = self.serial_conn.inWaiting()
if nbytes:
msg = self.serial_conn.read(nbytes)
byte_array = map(ord, msg)
log.debug('Message received [%s]: %s' % (self.response.get(byte_array[len(byte_array)-2], byte_array[len(byte_array)-2],
msg)))
if self.recv_callback:
self.recv_callback(msg)
return