mirror of
https://github.com/galaxyproject/galaxy.git
synced 2026-09-24 16:30:27 +08:00
93 lines
3.2 KiB
Python
93 lines
3.2 KiB
Python
import sys, os
|
|
import serial
|
|
import array
|
|
import time
|
|
import optparse
|
|
import ConfigParser, logging
|
|
from scanner_interface import ScannerInterface
|
|
|
|
logging.basicConfig(level=logging.DEBUG)
|
|
log = logging.getLogger( 'Scanner' )
|
|
|
|
# command prefix: SYN M CR
|
|
cmd = [22, 77, 13]
|
|
response = { 6: 'ACK', 5: 'ENQ', 21: 'NAK' }
|
|
image_scanner_report = 'RPTSCN.'
|
|
get_prefix1 = 'PREBK2?.'
|
|
get_prefix2 = ':4820:PREBK2?.'
|
|
set_prefix = 'PREBK2995859.'
|
|
clear_prefix = 'PRECA2.'
|
|
|
|
def get_prefix_cmd(name):
|
|
return ':' + name + ':' + 'PREBK2?.'
|
|
|
|
def set_prefix_cmd(name, prefix):
|
|
prefix_str = ''
|
|
for c in prefix:
|
|
prefix_str = prefix_str + hex(ord(c))[2:]
|
|
return ':' + name + ':' + 'PREBK299' + prefix_str + '!'
|
|
|
|
def read_config_file(config_file):
|
|
config = ConfigParser.ConfigParser()
|
|
config.read(config_file)
|
|
count = 1
|
|
scanners_list = []
|
|
while True:
|
|
section = 'scanner%i' % count
|
|
if config.has_section(section):
|
|
scanner = dict(name=config.get(section, 'name'),
|
|
prefix=config.get(section, 'prefix'),
|
|
state=config.get(section, 'state'))
|
|
scanners_list.append(scanner)
|
|
count = count + 1
|
|
else:
|
|
return scanners_list
|
|
|
|
def main():
|
|
usage = "python %s -p PORT -c CONFIG_FILE [ OPTION ]" % sys.argv[0]
|
|
parser = optparse.OptionParser(usage=usage)
|
|
parser.add_option('-p', '--port', help='Name of the port where the scanner is connected',
|
|
dest='port', action='store')
|
|
parser.add_option('-c', '--config-file', help='config file with all the AMQP config parameters',
|
|
dest='config_file', action='store')
|
|
parser.add_option('-r', '--report', help='scanner report',
|
|
dest='report', action='store_true', default=False)
|
|
parser.add_option('-i', '--install', help='install the scanners',
|
|
dest='install', action='store_true', default=False)
|
|
(opts, args) = parser.parse_args()
|
|
# validate
|
|
if not opts.port:
|
|
parser.print_help()
|
|
sys.exit(0)
|
|
if ( opts.report or opts.install ) and not opts.config_file:
|
|
parser.print_help()
|
|
sys.exit(0)
|
|
|
|
# create the scanner interface
|
|
si = ScannerInterface(opts.port)
|
|
if opts.install:
|
|
scanners_list = read_config_file(opts.config_file)
|
|
for scanner in scanners_list:
|
|
msg = set_prefix_cmd(scanner['name'], scanner['prefix'])
|
|
si.send(msg)
|
|
response = si.recv()
|
|
if not response:
|
|
log.error("Scanner %s could not be installed." % scanner['name'])
|
|
elif opts.report:
|
|
si.send(image_scanner_report)
|
|
rep = si.recv()
|
|
log.info(rep)
|
|
scanners_list = read_config_file(opts.config_file)
|
|
for scanner in scanners_list:
|
|
msg = get_prefix_cmd(scanner['name'])
|
|
si.send(msg)
|
|
response = si.recv()
|
|
if response:
|
|
log.info('PREFIX for scanner %s: %s' % (scanner['name'], chr(int(response[8:12][:2], 16))+chr(int(response[8:12][2:], 16)) ))
|
|
si.close()
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|