示例#1
0
文件: test.py 项目: kurenai-ryu/hrp
    def test_correct_tcp(self, subprocess, socket):
        """

        Test for correct tcp connection

        """
        #HRP.set_log_level_debug()
        subprocess.call.return_value = 0
        socket.return_value.connect_ex.return_value = 0
        socket.return_value.recv.side_effect = BASIC_CONNECT
        conn = HRP('192.168.1.116')
        conn.connect()
        subprocess.call.assert_called()
        socket.return_value.connect_ex.assert_called_with(('192.168.1.116', 9090))
示例#2
0
文件: test.py 项目: kurenai-ryu/hrp
    def test_correct_connect(self, subprocess, socket):
        """

        test for correct tco and initial data reading

        """
        #HRP.set_log_level_debug()
        subprocess.call.return_value = 0
        socket.return_value.connect_ex.return_value = 0
        socket.return_value.recv.side_effect = BASIC_CONNECT
        conn = HRP('192.168.1.116')
        conn.connect() # parsed reader_info & reader_ability
        self.assertEqual(conn.name, "CL7206B2_20170606", "incorrect name %s" % conn.name)
        self.assertEqual(conn.version, "1.1.16", "incorrect version %s" % conn.version)
        self.assertEqual(conn.deltalive, datetime.timedelta(seconds=90178), "incorrect live %s" % conn.deltalive)
        self.assertEqual(conn.min_power, 0, "incorrect min_pow %s" % conn.min_power)
        self.assertEqual(conn.max_power, 36, "incorrect max_pow %s" % conn.max_power)
        self.assertEqual(conn.antennas, 4, "incorrect antennas %s" % conn.antennas)
示例#3
0
    def __init__(self, request, client_address, server):
        self.request = request
        self.client_address = client_address
        self.server = server

        # for partial data transfers
        self.expectingRemainingBytes = 0
        self.partialData = ''

        # set up HRP connection
        if not FAKE_MODE:
            self.hrp = HRP(ip=HRP_HOST,
                           port=HRP_PORT,
                           ommit_ping=False,
                           timeout=10)
            # self.hrp.set_log_level_debug()
            logger.info('Connecting to HRP reader...')
            if HAVE_LCD:
                display.lcd_display_string('Connecting:HRP', 2)
            connected = False
            while not connected:
                try:
                    self.hrp.connect()
                    self.hrp_filter_time, self.hrp_rssi_threshold = self.hrp.tag_filter(
                    )
                    self.hrp.tag_filter(HRP_TAG_FILTER_MS, HRP_TAG_FILTER_RSSI)
                    connected = True
                except HRPFrameError:
                    logger.warning(
                        'Connect didn\'t work, disconnecting and trying again ...'
                    )
                    self.hrp.disconnect()
                except HRPNetworkError:
                    logger.warning(
                        'Could not connect to reader, waiting and trying again ...'
                    )
                    self.hrp.disconnect()
                    time.sleep(BACKOFF_TIME)

        self.setup()
        try:
            self.handle()
        finally:
            self.finish()
示例#4
0
文件: test.py 项目: kurenai-ryu/hrp
    def test_incorrect_ping(self, subprocess):
        """

        test for incorrect ping

        """
        #HRP.set_log_level_debug()
        subprocess.call.return_value = 1
        conn = HRP('192.168.1.116')
        self.assertRaisesRegex(HRPNetworkError, "can't reach reader", conn.connect)
示例#5
0
文件: test.py 项目: kurenai-ryu/hrp
    def test_correct_ping(self, subprocess, socket):
        """

        test for correct ping, but missing tcp connection

        """
        #HRP.set_log_level_debug()
        subprocess.call.return_value = 0
        socket.return_value.connect_ex.return_value = 1
        conn = HRP('192.168.1.116')
        self.assertRaisesRegex(HRPNetworkError, "can't connect tcp reader", conn.connect)
示例#6
0
文件: test.py 项目: kurenai-ryu/hrp
    def test_command_send(self, subprocess, socket):
        """

        test send packets

        """
        #HRP.set_log_level_debug()
        subprocess.call.return_value = 0
        socket.return_value.connect_ex.return_value = 0
        socket.return_value.recv.side_effect = BASIC_CONNECT
        conn = HRP('192.168.1.116')
        conn.connect()
        conn._send_packet(5, 5) # TEST,swr detect,""
        socket.return_value.send.assert_called_with(codecs.decode("AA050500004444",'hex'))
        conn._send_packet(2, 255) # OP, stop command
        socket.return_value.send.assert_called_with(codecs.decode("AA02FF0000A40F",'hex'))
示例#7
0
文件: basic.py 项目: kurenai-ryu/hrp
"""

import sys
import os
import traceback
import codecs

#fix path to use local module
sys.path.insert(1,
                os.path.dirname(os.path.dirname(os.path.realpath(__file__))))

from hrp import HRP, const, exception
from hrp.tag import TidReadParameter, TagAddress, MatchParameter

try:
    conn = HRP(ip='192.168.1.116', port=9090, ommit_ping=False, timeout=10)
    #conn.set_log_level_debug() # enable for debug information
    print("Connecting")
    conn.connect()
    filter_time, RSSI_threshold = conn.tag_filter()
    conn.stop()  #always before reading tag!
    conn.tag_filter(100, 0)
    print("Connected! press Ctrl+C to break")
    #       tid=TidReadParameter(0, 6), #test read 6 word tid (12 bytes 24 chars)
    #       edata=TagAddress(0x02, 8), #test read exendend EPC with 8 words
    #       edata=TagAddress(0x02, 8), #test read exendend EPC with 8 words

    counter = 0
    for tag in conn.read_tag(antennas=const.ANTENNA_1 | const.ANTENNA_2,
                             tid=TidReadParameter(0, 6),
                             udata=TagAddress(0x28, 40),
示例#8
0
from hrp import HRP

portfolio_1 = HRP()

portfolio_1.main()
示例#9
0
文件: test.py 项目: kurenai-ryu/hrp
 def tearDown(self):
     """ clear test """
     HRP.set_log_level()# reset
示例#10
0
class LLRPMessageHandler(SocketServer.StreamRequestHandler):
    def __init__(self, request, client_address, server):
        self.request = request
        self.client_address = client_address
        self.server = server

        # for partial data transfers
        self.expectingRemainingBytes = 0
        self.partialData = ''

        # set up HRP connection
        if not FAKE_MODE:
            self.hrp = HRP(ip=HRP_HOST,
                           port=HRP_PORT,
                           ommit_ping=False,
                           timeout=10)
            # self.hrp.set_log_level_debug()
            logger.info('Connecting to HRP reader...')
            if HAVE_LCD:
                display.lcd_display_string('Connecting:HRP', 2)
            connected = False
            while not connected:
                try:
                    self.hrp.connect()
                    self.hrp_filter_time, self.hrp_rssi_threshold = self.hrp.tag_filter(
                    )
                    self.hrp.tag_filter(HRP_TAG_FILTER_MS, HRP_TAG_FILTER_RSSI)
                    connected = True
                except HRPFrameError:
                    logger.warning(
                        'Connect didn\'t work, disconnecting and trying again ...'
                    )
                    self.hrp.disconnect()
                except HRPNetworkError:
                    logger.warning(
                        'Could not connect to reader, waiting and trying again ...'
                    )
                    self.hrp.disconnect()
                    time.sleep(BACKOFF_TIME)

        self.setup()
        try:
            self.handle()
        finally:
            self.finish()

    def handle(self):
        global message_seq
        # send a ReaderEventNotification on connection
        msg_dict = {
            'READER_EVENT_NOTIFICATION': {
                'Ver': 1,
                'Type': 63,
                'ID': 0,
                'ReaderEventNotificationData': {
                    'UTCTimestamp': {
                        'Microseconds': int(time.time() * 10e5)
                    },
                    'ConnectionAttemptEvent': {
                        'Status': 'Success'
                    }
                }
            }
        }
        llrp_msg = LLRPMessage(msgdict=msg_dict)
        self.request.send(llrp_msg.msgbytes)
        message_seq = message_seq + 1
        data = self.request.recv(1024)
        logger.debug('got %d bytes from reader: %s', len(data), hexlify(data))
        """
        XXX this block could be deleted
        """
        if self.expectingRemainingBytes:
            if len(data) >= self.expectingRemainingBytes:
                data = self.partialData + data
                self.partialData = ''
                self.expectingRemainingBytes -= len(data)
            else:
                # still not enough; wait until next time
                self.partialData += data
                self.expectingRemainingBytes -= len(data)
                return

        while data:
            # parse the message header to grab its length
            if len(data) >= LLRPMessage.full_hdr_len:
                msg_type, msg_len, message_id = \
                    struct.unpack(LLRPMessage.full_hdr_fmt,
                                  data[:LLRPMessage.full_hdr_len])
            else:
                # XXX
                logger.warning('Too few bytes (%d) to unpack message header',
                               len(data))
                self.partialData = data
                self.expectingRemainingBytes = \
                    LLRPMessage.full_hdr_len - len(data)
                break

            logger.debug('expect %d bytes (have %d)', msg_len, len(data))

            if len(data) < msg_len:
                # XXX
                # got too few bytes
                logger.debug("Less than an LLRP Message Size")
                self.partialData = data
                self.expectingRemainingBytes = msg_len - len(data)
                break
            else:
                # got at least the right number of bytes
                self.expectingRemainingBytes = 0
                try:
                    lmsg = LLRPMessage(msgbytes=data[:msg_len])
                    self.handle_message(lmsg, message_seq)
                    message_seq = message_seq + 1
                    data = self.request.recv(1024)
                except LLRPError:
                    logger.exception(
                        'Failed to decode LLRPMessage; '
                        'will not decode %d remaining bytes', len(data))
                    break
                except HRPFrameError:
                    logger.exception('Error with HRP Reader. Disconnecting')
                    break

        message_seq = 1

    def handle_message(self, lmsg, message_seq):
        msg_type = lmsg.getName()
        if msg_type == 'GET_SUPPORTED_VERSION':
            # we only support reader version 1, this is a v2 command.
            msg_dict = {
                'GET_SUPPORTED_VERSION_RESPONSE': {
                    'Ver': 1,
                    'Type': 56,
                    'ID': message_seq,
                    'CurrentVersion': 1,
                    'SupportedVersion': 1,
                    'LLRPStatus': {
                        'Type': 287,
                        'StatusCode': 'UnsupportedVersion',
                        'ErrorDescription': 'We only support v1',
                    }
                }
            }
            llrp_msg = LLRPMessage(msgdict=msg_dict)
            self.request.send(llrp_msg.msgbytes)

        if msg_type == 'GET_READER_CAPABILITIES':
            msg_dict = {
                'GET_READER_CAPABILITIES_RESPONSE': {
                    'Ver': 1,
                    'Type': 11,
                    'ID': message_seq,
                    'LLRPStatus': {
                        'Type': 287,
                        'StatusCode': 'Success',
                        'ErrorDescription': '',
                    },
                    'GeneralDeviceCapabilities': {
                        'MaxNumberOfAntennaSupported': 4,
                        'CanSetAntennaProperties': 0,
                        'HasUTCClockCapability': 1,
                        'DeviceManufacturerName': 0,
                        'ModelName': 7206,
                        'ReaderFirmwareVersion': '1',
                    },
                }
            }
            llrp_msg = LLRPMessage(msgdict=msg_dict)
            self.request.send(llrp_msg.msgbytes)

        if msg_type == 'GET_ROSPECS':
            # send a GET_ROSPECS_RESPONSE
            msg_dict = {
                'GET_ROSPECS_RESPONSE': {
                    'Ver': 1,
                    'Type': 36,
                    'ID': message_seq,
                    'LLRPStatus': {
                        'Type': 287,
                        'StatusCode': 'Success',
                        'ErrorDescription': '',
                    },
                }
            }
            llrp_msg = LLRPMessage(msgdict=msg_dict)
            self.request.send(llrp_msg.msgbytes)

        if msg_type == 'DELETE_ACCESSSPEC':
            # send a DELETE_ACCESSSPEC_RESPONSE
            msg_dict = {
                'DELETE_ACCESSSPEC_RESPONSE': {
                    'Ver': 1,
                    'Type': 51,
                    'ID': message_seq,
                    'LLRPStatus': {
                        'Type': 287,
                        'StatusCode': 'Success',
                        'ErrorDescription': '',
                    },
                }
            }
            llrp_msg = LLRPMessage(msgdict=msg_dict)
            self.request.send(llrp_msg.msgbytes)

        if msg_type == 'DELETE_ROSPEC':
            # send a DELETE_ROSPEC_RESPONSE
            msg_dict = {
                'DELETE_ROSPEC_RESPONSE': {
                    'Ver': 1,
                    'Type': 31,
                    'ID': message_seq,
                    'LLRPStatus': {
                        'Type': 287,
                        'StatusCode': 'Success',
                        'ErrorDescription': '',
                    },
                }
            }
            llrp_msg = LLRPMessage(msgdict=msg_dict)
            self.request.send(llrp_msg.msgbytes)

        # New in WebScorer 4.3.0 update
        if msg_type == 'GET_READER_CONFIG':
            # send a GET_READER_CONFIG_RESPONSE
            msg_dict = {
                'GET_READER_CONFIG_RESPONSE': {
                    'Ver': 1,
                    'Type': 12,
                    'ID': message_seq,
                    'LLRPStatus': {
                        'Type': 287,
                        'StatusCode': 'Success',
                        'ErrorDescription': '',
                    },
                }
            }
            llrp_msg = LLRPMessage(msgdict=msg_dict)
            self.request.send(llrp_msg.msgbytes)

        if msg_type == 'SET_READER_CONFIG':
            # send a SET_READER_CONFIG_RESPONSE
            msg_dict = {
                'SET_READER_CONFIG_RESPONSE': {
                    'Ver': 1,
                    'Type': 13,
                    'ID': message_seq,
                    'LLRPStatus': {
                        'Type': 287,
                        'StatusCode': 'Success',
                        'ErrorDescription': '',
                    },
                }
            }
            llrp_msg = LLRPMessage(msgdict=msg_dict)
            self.request.send(llrp_msg.msgbytes)

        if msg_type == 'ADD_ROSPEC':
            # send a ADD_ROSPEC_RESPONSE
            msg_dict = {
                'ADD_ROSPEC_RESPONSE': {
                    'Ver': 1,
                    'Type': 30,
                    'ID': message_seq,
                    'LLRPStatus': {
                        'Type': 287,
                        'StatusCode': 'Success',
                        'ErrorDescription': '',
                    },
                }
            }
            llrp_msg = LLRPMessage(msgdict=msg_dict)
            self.request.send(llrp_msg.msgbytes)

        if msg_type == 'ENABLE_ROSPEC':
            # send a ADD_ROSPEC_RESPONSE
            msg_dict = {
                'ENABLE_ROSPEC_RESPONSE': {
                    'Ver': 1,
                    'Type': 34,
                    'ID': message_seq,
                    'LLRPStatus': {
                        'Type': 287,
                        'StatusCode': 'Success',
                        'ErrorDescription': '',
                    },
                }
            }
            llrp_msg = LLRPMessage(msgdict=msg_dict)
            self.request.send(llrp_msg.msgbytes)
            if HAVE_LCD:
                display.lcd_display_string('Reading tags  ', 2)

        if msg_type == 'ENABLE_ROSPEC' or msg_type == 'KEEPALIVE_ACK':
            # send some tags!
            if FAKE_MODE:
                timestamp = int(time.time() * 10e5)
                msg_dict = {
                    'RO_ACCESS_REPORT': {
                        'Ver':
                        1,
                        'Type':
                        61,
                        'ID':
                        message_seq,
                        'TagReportData': [{
                            'Type': 240,
                            'EPCData': {
                                'Type': 241,
                                'EPCLengthBits': 96,
                                'EPC': '001060310000000000000881'
                            },
                            'FirstSeenTimestampUTC': {
                                'Type': 2,
                                'Microseconds': timestamp
                            },
                            'LastSeenTimestampUTC': {
                                'Type': 4,
                                'Microseconds': timestamp
                            }
                        }, {
                            'Type': 240,
                            'EPCData': {
                                'Type': 241,
                                'EPCLengthBits': 96,
                                'EPC': '001060310000000000000882'
                            },
                            'FirstSeenTimestampUTC': {
                                'Type': 2,
                                'Microseconds': timestamp
                            },
                            'LastSeenTimestampUTC': {
                                'Type': 4,
                                'Microseconds': timestamp
                            }
                        }],
                    }
                }
                llrp_msg = LLRPMessage(msgdict=msg_dict)
                self.request.send(llrp_msg.msgbytes)

            if not FAKE_MODE:
                keepalive_timer = 0
                # This enables antenna port 1 and 3.
                for tag in self.hrp.read_tag(antennas=5,
                                             match=MatchParameter(
                                                 const.MATCH_EPC, 0x20,
                                                 codecs.decode(
                                                     'b20200411666', 'hex'))):
                    #for tag in self.hrp.read_tag(antennas=5):
                    if tag is not None:
                        timestamp = int(time.time() * 10e5)
                        tag_hex = codecs.encode(tag.epc, 'hex')
                        logger.info("TAG FOUND: " + tag_hex)
                        msg_dict = {
                            'RO_ACCESS_REPORT': {
                                'Ver':
                                1,
                                'Type':
                                61,
                                'ID':
                                message_seq,
                                'TagReportData': [{
                                    'Type': 240,
                                    'EPCData': {
                                        'Type': 241,
                                        'EPCLengthBits': len(tag_hex) * 4,
                                        'EPC': tag_hex
                                    },
                                    'FirstSeenTimestampUTC': {
                                        'Type': 2,
                                        'Microseconds': timestamp
                                    },
                                    'LastSeenTimestampUTC': {
                                        'Type': 4,
                                        'Microseconds': timestamp
                                    },
                                    'PeakRSSI': {
                                        'Type': 6,
                                        'PeakRSSI': tag.rssi
                                    }
                                }]
                            }
                        }

                        llrp_msg = LLRPMessage(msgdict=msg_dict)
                        self.request.send(llrp_msg.msgbytes)
                    else:
                        logger.info("TIMEOUT")
                        keepalive_timer = keepalive_timer + 1
                        if keepalive_timer > KEEPALIVE_THRESHOLD:
                            self.hrp.end_read_tag = True
                            message_seq = message_seq + 1
                            msg_dict = {
                                'KEEPALIVE': {
                                    'Ver': 1,
                                    'Type': 62,
                                    'ID': message_seq
                                }
                            }
                            llrp_msg = LLRPMessage(msgdict=msg_dict)
                            self.request.send(llrp_msg.msgbytes)

                self.hrp.tag_filter(self.hrp_filter_time,
                                    self.hrp_rssi_threshold)

        if msg_type == 'CLOSE_CONNECTION':
            # send a CLOSE_CONNECTION_RESPONSE
            msg_dict = {
                'CLOSE_CONNECTION_RESPONSE': {
                    'Ver': 1,
                    'Type': 4,
                    'ID': message_seq,
                    'LLRPStatus': {
                        'Type': 287,
                        'StatusCode': 'Success',
                        'ErrorDescription': '',
                    },
                }
            }
            llrp_msg = LLRPMessage(msgdict=msg_dict)
            self.request.send(llrp_msg.msgbytes)

    def finish(self):
        if not FAKE_MODE:
            self.hrp.disconnect()
        if HAVE_LCD:
            display.lcd_display_string('Disconnected', 2)
示例#11
0
import sys
import os
import traceback
import codecs

import time

#fix path to use local module
sys.path.insert(1,
                os.path.dirname(os.path.dirname(os.path.realpath(__file__))))

from hrp import HRP, const, exception
from hrp.tag import TidReadParameter, TagAddress, MatchParameter

try:
    conn = HRP(ip='192.168.1.116', port=9090, ommit_ping=False, timeout=10)
    conn.set_log_level_debug()  # enable for debug information
    print("Connecting")
    conn.connect()
    conn.stop()  #always before reading tag!
    #conn.read_tag(tid=TidReadParameter(0, 10)) #test
    #conn.read_tag(edata=TagAddress(0x2D, 2)) #test
    tags = conn.read_single_scan(
        antennas=const.ANTENNA_1 | const.ANTENNA_2,
        #match=MatchParameter(const.MATCH_EPC, 32, codecs.decode('560179','hex')), # match EPC starting with 56 01 79
        #match=MatchParameter(const.MATCH_TID, 0, codecs.decode('e280b0a020','hex')), # match TID starting with e2 80 b0 a0 20
        tid=TidReadParameter(0, 6),
        #edata=TagAddress(0x02, 8)
    )  #test single read!
    if not tags:
        print("No tag found")
示例#12
0
"""

import sys
import os
import traceback
import codecs


#fix path to use local module
sys.path.insert(1,os.path.dirname(os.path.dirname(os.path.realpath(__file__))))

from hrp import HRP, const, exception
from hrp.tag import TidReadParameter, TagAddress, MatchParameter

try:
    conn = HRP(ip='192.168.1.116', port=9090, ommit_ping=False, timeout=10)
    conn.set_log_level_debug() # enable for debug information
    print ("Connecting")
    conn.connect()
    filter_time, RSSI_threshold = conn.tag_filter()
    conn.stop() #always before reading tag!
    conn.tag_filter(100, 0)
    print ("Connected! press Ctrl+C to break")
    #conn.read_tag(tid=TidReadParameter(0, 10)) #test
    #conn.read_tag(edata=TagAddress(0x2D, 2)) #test
    counter = 0
    for tag in conn.read_tag(
            antennas=const.ANTENNA_1 | const.ANTENNA_2,
            #match=MatchParameter(const.MATCH_EPC, 0x20, codecs.decode('560179','hex')), # match EPC starting with 56 01 79
            match=MatchParameter(const.MATCH_TID, 0x00, codecs.decode('e280b0a020','hex')), # match TID starting with e2 80 b0 a0 20
            tid=TidReadParameter(0, 6),