From 99c9e0036a056a5ec84e359f8a6fd7aa69b7de43 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mika=C3=ABl=20Ates?= Date: Mon, 7 Oct 2013 15:36:48 +0200 Subject: [PATCH] Include core function processing in request and response building. --- models.py | 66 ++++++++++++++++++++++++++++++++++---- reader_configs.py | 81 +++++++++++++++++++++++++++++++---------------- 2 files changed, 114 insertions(+), 33 deletions(-) diff --git a/models.py b/models.py index 8c939f9..470e0f9 100644 --- a/models.py +++ b/models.py @@ -24,11 +24,14 @@ import utils from datetime import datetime +import core_standard + from serial import (Serial, EIGHTBITS, PARITY_NONE, STOPBITS_ONE) from _exceptions import (UnknownReaderTypeException, UnknownReaderException, BadLengthMessageException, BadCRCException, CommandResponseCodeMismatchException, UnknownReaderException, - StandardResponseError, UnknownResponseErrorType) + StandardResponseError, UnknownResponseErrorType, + ReaderResponseError) from commands_standard import COMMANDS as STANDARD_COMMANDS from errors_standard import ERRORS as STANDARD_ERRORS from reader_configs import READERS @@ -40,9 +43,10 @@ class RFIDReader(): ''' def __init__(self, *args, **kwargs): self.name = kwargs.pop('name', 'URL-W41-A-U04-5AA') - params, commands, errors = READERS[self.name] + params, commands, errors, core = READERS[self.name] self.commands = commands self.errors = errors + self.core = core self.reader_type = params.get('reader_type', 'SERIAL') if self.reader_type == 'SERIAL': self.port = params.get('port', '/dev/ttyUSB0') @@ -145,13 +149,29 @@ class Command(): self.code_cmd = STANDARD_COMMANDS[self.command_name]['code'] self.reserved = '\xaa\x55' self.data = kwargs.pop('data', '') - self.lout = utils.get_length_on_2_bytes(self.data) + data = self.data + self.data_to_process = kwargs.pop('data_to_process', None) + if self.data_to_process: + self.process_data() + data = self.data_processed + self.lout = utils.get_length_on_2_bytes(data) self.command = self.rfu + self.type_cmd + self.code_cmd + \ - self.reserved + self.lout + self.data + self.reserved + self.lout + data def set_command(self, string): self.command = string + def process_data(self): + if self.data_to_process and self.command_name: + core_method_name = self.command_name.lower() + try: + core_method = getattr(core_standard, core_method_name) + self.data_processed = core_method(self.data_to_process) + except: + self.data_processed = '' + else: + self.data_processed = '' + def build_message(self): self.sof = '\x02' self.length = utils.get_length_on_2_bytes(self.command) @@ -207,14 +227,31 @@ class ReaderCommand(Command): self.code_cmd = self.reader.commands[self.command_name]['code'] self.reserved = '\xaa\x55' self.data = kwargs.pop('data', '') - self.lout = utils.get_length_on_2_bytes(self.data) + data = self.data + self.data_to_process = kwargs.pop('data_to_process', None) + if self.data_to_process: + self.process_data() + data = self.data_processed + self.lout = utils.get_length_on_2_bytes(data) self.command = self.rfu + self.type_cmd + self.code_cmd + \ - self.reserved + self.lout + self.data + self.reserved + self.lout + data + + def process_data(self): + if self.data_to_process and self.command_name: + core_method_name = self.command_name.lower() + try: + core_method = getattr(self.reader.core, core_method_name) + self.data_processed = core_method(self.data_to_process) + except: + self.data_processed = '' + else: + self.data_processed = '' class Response(): def __init__(self, command, message, reader=None): self.message = message + self.command = command if len(message) < 13: raise BadLengthMessageException( 'Message must be at least 13 byte long (message: %s).' @@ -275,6 +312,23 @@ class Response(): raise UnknownResponseErrorType('Unknown type %s' % self.status_type.encode('hex')) self.time = None + if self.data: + self.process_data() + + def process_data(self): + self.processed_data = None + if self.data and self.command.command_name: + core_method_name = self.command.command_name.lower() + try: + module = None + if isinstance(self.command, ReaderCommand): + module = self.command.reader.core + else: + module = core_standard + core_method = getattr(module, core_method_name) + self.processed_data = core_method(self) + except Exception, err: + pass def pretty_print(self): display = None diff --git a/reader_configs.py b/reader_configs.py index 177559e..22c3329 100644 --- a/reader_configs.py +++ b/reader_configs.py @@ -18,66 +18,93 @@ along with this program. If not, see . - EPC1 GEN2 / ISO 18000-6C commands + Readers declaration file ''' from stid_readers.commands_basic import COMMANDS as BASIC_STID_COMMANDS from stid_readers.params_basic import PARAMS as BASIC_STID_PARAMS from stid_readers.errors_basic import ERRORS as BASIC_STID_ERRORS +from stid_readers import core as BASIC_STID_CORE READERS = { 'URL-W41-A-U04-5AA': \ - (BASIC_STID_PARAMS, BASIC_STID_COMMANDS, BASIC_STID_ERRORS), + (BASIC_STID_PARAMS, BASIC_STID_COMMANDS, + BASIC_STID_ERRORS, BASIC_STID_CORE), 'UR1-W42-E-U04-5AA': \ - (BASIC_STID_PARAMS, BASIC_STID_COMMANDS, BASIC_STID_ERRORS), + (BASIC_STID_PARAMS, BASIC_STID_COMMANDS, + BASIC_STID_ERRORS, BASIC_STID_CORE), 'URC-W42-E-U04-5AA': \ - (BASIC_STID_PARAMS, BASIC_STID_COMMANDS, BASIC_STID_ERRORS), + (BASIC_STID_PARAMS, BASIC_STID_COMMANDS, + BASIC_STID_ERRORS, BASIC_STID_CORE), 'URL-W51-A-U04-5AA': \ - (BASIC_STID_PARAMS, BASIC_STID_COMMANDS, BASIC_STID_ERRORS), + (BASIC_STID_PARAMS, BASIC_STID_COMMANDS, + BASIC_STID_ERRORS, BASIC_STID_CORE), 'UR1-W43-E-U04-7AA': \ - (BASIC_STID_PARAMS, BASIC_STID_COMMANDS, BASIC_STID_ERRORS), + (BASIC_STID_PARAMS, BASIC_STID_COMMANDS, + BASIC_STID_ERRORS, BASIC_STID_CORE), 'URC-W43-E-U04-7AA': \ - (BASIC_STID_PARAMS, BASIC_STID_COMMANDS, BASIC_STID_ERRORS), + (BASIC_STID_PARAMS, BASIC_STID_COMMANDS, + BASIC_STID_ERRORS, BASIC_STID_CORE), 'URL-Wx1-A-U04-5AA': \ - (BASIC_STID_PARAMS, BASIC_STID_COMMANDS, BASIC_STID_ERRORS), + (BASIC_STID_PARAMS, BASIC_STID_COMMANDS, + BASIC_STID_ERRORS, BASIC_STID_CORE), 'UR1-W52-E-U04-5AA': \ - (BASIC_STID_PARAMS, BASIC_STID_COMMANDS, BASIC_STID_ERRORS), + (BASIC_STID_PARAMS, BASIC_STID_COMMANDS, + BASIC_STID_ERRORS, BASIC_STID_CORE), 'URC-W52-E-U04-5AA': \ - (BASIC_STID_PARAMS, BASIC_STID_COMMANDS, BASIC_STID_ERRORS), + (BASIC_STID_PARAMS, BASIC_STID_COMMANDS, + BASIC_STID_ERRORS, BASIC_STID_CORE), 'URL-W41-B-U04-5AA': \ - (BASIC_STID_PARAMS, BASIC_STID_COMMANDS, BASIC_STID_ERRORS), + (BASIC_STID_PARAMS, BASIC_STID_COMMANDS, + BASIC_STID_ERRORS, BASIC_STID_CORE), 'UR1-W53-E-U04-7AA': \ - (BASIC_STID_PARAMS, BASIC_STID_COMMANDS, BASIC_STID_ERRORS), + (BASIC_STID_PARAMS, BASIC_STID_COMMANDS, + BASIC_STID_ERRORS, BASIC_STID_CORE), 'URC-W53-E-U04-7AA': \ - (BASIC_STID_PARAMS, BASIC_STID_COMMANDS, BASIC_STID_ERRORS), + (BASIC_STID_PARAMS, BASIC_STID_COMMANDS, + BASIC_STID_ERRORS, BASIC_STID_CORE), 'URL-W51-B-U04-5AA': \ - (BASIC_STID_PARAMS, BASIC_STID_COMMANDS, BASIC_STID_ERRORS), + (BASIC_STID_PARAMS, BASIC_STID_COMMANDS, + BASIC_STID_ERRORS, BASIC_STID_CORE), 'URD-W42-E-U04-5AA': \ - (BASIC_STID_PARAMS, BASIC_STID_COMMANDS, BASIC_STID_ERRORS), + (BASIC_STID_PARAMS, BASIC_STID_COMMANDS, + BASIC_STID_ERRORS, BASIC_STID_CORE), 'URL-Wx1-B-U04-5AA': \ - (BASIC_STID_PARAMS, BASIC_STID_COMMANDS, BASIC_STID_ERRORS), + (BASIC_STID_PARAMS, BASIC_STID_COMMANDS, + BASIC_STID_ERRORS, BASIC_STID_CORE), 'URD-W43-E-U04-7AA': \ - (BASIC_STID_PARAMS, BASIC_STID_COMMANDS, BASIC_STID_ERRORS), + (BASIC_STID_PARAMS, BASIC_STID_COMMANDS, + BASIC_STID_ERRORS, BASIC_STID_CORE), 'STR-W45-E-U04-5AA': \ - (BASIC_STID_PARAMS, BASIC_STID_COMMANDS, BASIC_STID_ERRORS), + (BASIC_STID_PARAMS, BASIC_STID_COMMANDS, + BASIC_STID_ERRORS, BASIC_STID_CORE), 'URD-W44-E-U04-5AA': \ - (BASIC_STID_PARAMS, BASIC_STID_COMMANDS, BASIC_STID_ERRORS), + (BASIC_STID_PARAMS, BASIC_STID_COMMANDS, + BASIC_STID_ERRORS, BASIC_STID_CORE), 'PSION WORKABOUT PRO3': \ - (BASIC_STID_PARAMS, BASIC_STID_COMMANDS, BASIC_STID_ERRORS), + (BASIC_STID_PARAMS, BASIC_STID_COMMANDS, + BASIC_STID_ERRORS, BASIC_STID_CORE), 'URD-W45-E-U04-5AA': \ - (BASIC_STID_PARAMS, BASIC_STID_COMMANDS, BASIC_STID_ERRORS), + (BASIC_STID_PARAMS, BASIC_STID_COMMANDS, + BASIC_STID_ERRORS, BASIC_STID_CORE), 'URD-W48-E-U04-5AA': \ - (BASIC_STID_PARAMS, BASIC_STID_COMMANDS, BASIC_STID_ERRORS), + (BASIC_STID_PARAMS, BASIC_STID_COMMANDS, + BASIC_STID_ERRORS, BASIC_STID_CORE), 'URD-W52-E-U04-5AA': \ - (BASIC_STID_PARAMS, BASIC_STID_COMMANDS, BASIC_STID_ERRORS), + (BASIC_STID_PARAMS, BASIC_STID_COMMANDS, + BASIC_STID_ERRORS, BASIC_STID_CORE), 'URD-W53-E-U04-7AA': \ - (BASIC_STID_PARAMS, BASIC_STID_COMMANDS, BASIC_STID_ERRORS), + (BASIC_STID_PARAMS, BASIC_STID_COMMANDS, + BASIC_STID_ERRORS, BASIC_STID_CORE), 'URD-W54-E-U04-5AA': \ - (BASIC_STID_PARAMS, BASIC_STID_COMMANDS, BASIC_STID_ERRORS), + (BASIC_STID_PARAMS, BASIC_STID_COMMANDS, + BASIC_STID_ERRORS, BASIC_STID_CORE), 'URD-W55-E-U04-5AA': \ - (BASIC_STID_PARAMS, BASIC_STID_COMMANDS, BASIC_STID_ERRORS), + (BASIC_STID_PARAMS, BASIC_STID_COMMANDS, + BASIC_STID_ERRORS, BASIC_STID_CORE), 'URD-W58-E-U04-5AA': \ - (BASIC_STID_PARAMS, BASIC_STID_COMMANDS, BASIC_STID_ERRORS), + (BASIC_STID_PARAMS, BASIC_STID_COMMANDS, + BASIC_STID_ERRORS, BASIC_STID_CORE), }