mirror of
https://github.com/galaxyproject/galaxy.git
synced 2026-09-24 16:30:27 +08:00
76 lines
2.5 KiB
Python
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
|
|
|
|
|
|
|