Include core function processing in request and response building.
This commit is contained in:
parent
4ef306ce05
commit
99c9e0036a
66
models.py
66
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
|
||||
|
|
|
@ -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),
|
||||
}
|
||||
|
|
Reference in New Issue