Include core function processing in request and response building.

This commit is contained in:
Mikaël Ates 2013-10-07 15:36:48 +02:00
parent 4ef306ce05
commit 99c9e0036a
2 changed files with 114 additions and 33 deletions

View File

@ -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

View File

@ -18,66 +18,93 @@
along with this program. If not, see <http://www.gnu.org/licenses/>.
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),
}