init
This commit is contained in:
@@ -0,0 +1,77 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
from .base import G2InventoryResponse as BaseG2InventoryResponse, ReaderCommand, ReaderResponseFrame, Tag, TagData
|
||||
from .command import G2_TAG_INVENTORY
|
||||
|
||||
G2_TAG_INVENTORY_PARAM_MEMORY_EPC = 0x01
|
||||
G2_TAG_INVENTORY_PARAM_MEMORY_TID = 0x02
|
||||
G2_TAG_INVENTORY_PARAM_MEMORY_USER = 0x03
|
||||
|
||||
G2_TAG_INVENTORY_PARAM_SESSION_S0 = 0x00
|
||||
G2_TAG_INVENTORY_PARAM_SESSION_S1 = 0x01
|
||||
G2_TAG_INVENTORY_PARAM_SESSION_S2 = 0x02
|
||||
G2_TAG_INVENTORY_PARAM_SESSION_S3 = 0x03
|
||||
G2_TAG_INVENTORY_PARAM_SESSION_SMART = 0xFF
|
||||
|
||||
G2_TAG_INVENTORY_PARAM_ANTENNA_1 = 0x80
|
||||
G2_TAG_INVENTORY_PARAM_ANTENNA_2 = 0x81
|
||||
G2_TAG_INVENTORY_PARAM_ANTENNA_3 = 0x82
|
||||
G2_TAG_INVENTORY_PARAM_ANTENNA_4 = 0x83
|
||||
|
||||
G2_TAG_INVENTORY_PARAM_TARGET_A = 0x00
|
||||
G2_TAG_INVENTORY_PARAM_TARGET_B = 0x01
|
||||
|
||||
|
||||
class G2InventoryCommand(ReaderCommand):
|
||||
|
||||
def __init__(self, addr=0xFF, q_value=15, deliver_statistics=0, strategy=0, fast_id=0,
|
||||
session=G2_TAG_INVENTORY_PARAM_SESSION_S0, mask_source=G2_TAG_INVENTORY_PARAM_MEMORY_EPC,
|
||||
target=G2_TAG_INVENTORY_PARAM_TARGET_A, antenna=G2_TAG_INVENTORY_PARAM_ANTENNA_1, scan_time=0x14):
|
||||
# TODO check q_value in range 0 ~ 15, session 0 ~ 3
|
||||
mask_data = [0x00, 0x00, 0x00]
|
||||
q_value_byte = (deliver_statistics << 7) + (strategy << 6) + (fast_id << 5) + q_value
|
||||
cmd_data = [q_value_byte, session, mask_source] + mask_data + [target, antenna, scan_time]
|
||||
super(G2InventoryCommand, self).__init__(G2_TAG_INVENTORY, addr, data=cmd_data)
|
||||
|
||||
|
||||
def _translate_antenna_num(antenna_code):
|
||||
if antenna_code == 1:
|
||||
return 1
|
||||
elif antenna_code == 2:
|
||||
return 2
|
||||
elif antenna_code == 4:
|
||||
return 3
|
||||
elif antenna_code == 8:
|
||||
return 4
|
||||
else:
|
||||
return None
|
||||
|
||||
|
||||
class G2InventoryResponseFrame(ReaderResponseFrame):
|
||||
|
||||
tag_prefix_bytes = 0
|
||||
tag_suffix_bytes = 1
|
||||
|
||||
tag_data_prefix_bytes = 1 # Number of bytes before 'num tags' byte
|
||||
|
||||
def __init__(self, resp_bytes, offset=0):
|
||||
super(G2InventoryResponseFrame, self).__init__(resp_bytes, offset)
|
||||
self.num_tags = 0
|
||||
self.antenna = 0
|
||||
if len(self.data) > self.tag_data_prefix_bytes:
|
||||
self.antenna = _translate_antenna_num(self.data[0])
|
||||
self.num_tags = self.data[1]
|
||||
|
||||
def get_tag(self):
|
||||
tag_data_prefix_and_num_tags_bytes = self.tag_data_prefix_bytes + 1
|
||||
if len(self.data) > tag_data_prefix_and_num_tags_bytes:
|
||||
tag_data = TagData(self.data[self.tag_data_prefix_bytes:], prefix_bytes=self.tag_prefix_bytes, suffix_bytes=self.tag_suffix_bytes)
|
||||
for data_item in tag_data.get_tag_data():
|
||||
epc_value = data_item[1]
|
||||
rssi = data_item[2][0]
|
||||
yield Tag(epc_value, antenna_num=self.antenna, rssi=rssi)
|
||||
|
||||
|
||||
class G2InventoryResponse(BaseG2InventoryResponse):
|
||||
|
||||
frame_class = G2InventoryResponseFrame
|
||||
Reference in New Issue
Block a user