Attempted fix of Offset issues and utilizing enums in place of hardcoded numbers.

Changes to be committed:
	modified:   software/script/chameleon_cli_unit.py
	modified:   software/script/chameleon_cmd.py
This commit is contained in:
Alexander Featherston
2023-08-11 01:16:25 -04:00
parent c197a0ff05
commit d77ca3cd7d
2 changed files with 74 additions and 17 deletions
+11 -5
View File
@@ -788,9 +788,11 @@ class SlotIndexRequireUint(DeviceRequiredUnit):
@staticmethod
def add_slot_args(parser: ArgumentParserNoExit):
slot_choices = [1, 2, 3, 4, 5, 6, 7, 8]
slot_choices = chameleon_cmd.SlotNumber.list()
help_str = f"Slot Indexes: {slot_choices}"
parser.add_argument('-s', "--slot", type=int, required=True,
help="Slot index", metavar="number", choices=slot_choices)
help=help_str, metavar="number", choices=slot_choices)
return parser
class SenseTypeRequireUint(DeviceRequiredUnit):
@@ -803,9 +805,12 @@ class SenseTypeRequireUint(DeviceRequiredUnit):
@staticmethod
def add_sense_type_args(parser: ArgumentParserNoExit):
slot_choices = [1, 2]
slot_list = chameleon_cmd.TagSenseType.list()
slot_choices = chameleon_cmd.TagSenseType.choices()
help_str = f"Sense Types: {slot_list}"
parser.add_argument('-st', "--sense_type", type=int, required=True,
help="Sense type", metavar="number", choices=slot_choices)
help=help_str, metavar="number", choices=slot_choices)
return parser
@@ -910,7 +915,7 @@ class HWSlotNickSet(SlotIndexRequireUint, SenseTypeRequireUint):
parser = ArgumentParserNoExit()
self.add_slot_args(parser)
self.add_sense_type_args(parser)
parser.add_argument('-n', '--name', type=str, required=True, help="Yout tag nick name for slot")
parser.add_argument('-n', '--name', type=str, required=True, help="Your tag nick name for slot")
return parser
# hw slot nick set -s 1 -st 1 -n 测试名称保存
@@ -921,6 +926,7 @@ class HWSlotNickSet(SlotIndexRequireUint, SenseTypeRequireUint):
if len(name.encode(encoding="gbk")) > 32:
raise ValueError("Your tag nick name too long.")
self.cmd_positive.set_slot_tag_nick_name(slot_num, sense_type, name)
#print(f'{slot_num} selected for nickname {name}.')
print(f' - Set tag nick name for slot {slot_num} success.')
+63 -12
View File
@@ -42,6 +42,37 @@ DATA_CMD_SET_MF1_DETECTION_ENABLE = 5003
DATA_CMD_GET_MF1_DETECTION_COUNT = 5004
DATA_CMD_GET_MF1_DETECTION_RESULT = 5005
@enum.unique
class SlotNumber(enum.IntEnum):
SLOT_1 = 0,
SLOT_2 = 1,
SLOT_3 = 2,
SLOT_4 = 3,
SLOT_5 = 4,
SLOT_6 = 5,
SLOT_7 = 6,
SLOT_8 = 7,
SLOT_NO = 8,
@staticmethod
def list(exclude_unknown=True):
enum_list = []
for name, value in SlotNumber.__members__.items():
if value == SlotNumber.SLOT_NO:
continue
enum_list.append(int(name.replace('SLOT_','')))
return enum_list
@staticmethod
def fix(index: int):
for name, value in SlotNumber.__members__.items():
if value == SlotNumber.SLOT_NO:
continue
if index == int(name.replace('SLOT_','')):
return value
@enum.unique
class TagSenseType(enum.IntEnum):
@@ -52,6 +83,26 @@ class TagSenseType(enum.IntEnum):
# 高频13.56mhz场感应
TAG_SENSE_HF = 2,
@staticmethod
def list(exclude_unknown=True):
enum_list = []
for name, value in TagSenseType.__members__.items():
if value == TagSenseType.TAG_SENSE_NO:
continue
enum_list.append(f"{name.replace('TAG_SENSE_','')} = {value}")
return enum_list
@staticmethod
def choices(exclude_unknown=True):
choice_list = []
for name, value in TagSenseType.__members__.items():
if value == TagSenseType.TAG_SENSE_NO:
continue
choice_list.append(value)
return choice_list
@enum.unique
class TagSpecificType(enum.IntEnum):
@@ -267,7 +318,7 @@ class BaseChameleonCMD:
data.extend(key)
return self.device.send_cmd_sync(DATA_CMD_WRITE_EM410X_TO_T5577, 0x00, data)
def set_slot_activated(self, slot_index):
def set_slot_activated(self, slot_index: SlotNumber):
"""
设置当前激活使用的卡槽
:param slot_index: 卡槽索引,从 1 - 8(不是从0下标开始)
@@ -276,10 +327,10 @@ class BaseChameleonCMD:
if slot_index < 1 or slot_index > 8:
raise ValueError("The slot index range error(1-8)")
data = bytearray()
data.append(slot_index - 1)
data.append(SlotNumber.fix(slot_index))
return self.device.send_cmd_sync(DATA_CMD_SET_SLOT_ACTIVATED, 0x00, data)
def set_slot_tag_type(self, slot_index: int, tag_type: TagSpecificType):
def set_slot_tag_type(self, slot_index: SlotNumber, tag_type: TagSpecificType):
"""
设置当前卡槽的模拟卡的标签类型
注意:此操作并不会更改flash中的数据,flash中的数据的变动仅在下次保存时更新
@@ -290,11 +341,11 @@ class BaseChameleonCMD:
if slot_index < 1 or slot_index > 8:
raise ValueError("The slot index range error(1-8)")
data = bytearray()
data.append(slot_index - 1)
data.append(SlotNumber.fix(slot_index))
data.append(tag_type)
return self.device.send_cmd_sync(DATA_CMD_SET_SLOT_TAG_TYPE, 0x00, data)
def set_slot_data_default(self, slot_index: int, tag_type: TagSpecificType):
def set_slot_data_default(self, slot_index: SlotNumber, tag_type: TagSpecificType):
"""
设置指定卡槽的模拟卡的数据为缺省数据
注意:此API会将flash中的数据一并进行设置
@@ -305,11 +356,11 @@ class BaseChameleonCMD:
if slot_index < 1 or slot_index > 8:
raise ValueError("The slot index range error(1-8)")
data = bytearray()
data.append(slot_index - 1)
data.append(SlotNumber.fix(slot_index))
data.append(tag_type)
return self.device.send_cmd_sync(DATA_CMD_SET_SLOT_DATA_DEFAULT, 0x00, data)
def set_slot_enable(self, slot_index: int, enable: bool):
def set_slot_enable(self, slot_index: SlotNumber, enable: bool):
"""
设置指定的卡槽是否使能
:param slot_index: 卡槽号码
@@ -319,7 +370,7 @@ class BaseChameleonCMD:
if slot_index < 1 or slot_index > 8:
raise ValueError("The slot index range error(1-8)")
data = bytearray()
data.append(slot_index - 1)
data.append(SlotNumber.fix(slot_index))
data.append(0x01 if enable else 0x00)
return self.device.send_cmd_sync(DATA_CMD_SET_SLOT_ENABLE, 0X00, data)
@@ -386,7 +437,7 @@ class BaseChameleonCMD:
data.extend(uid)
return self.device.send_cmd_sync(DATA_CMD_SET_MF1_ANTI_COLLISION_RES, 0X00, data)
def set_slot_tag_nick_name(self, slot: int, sense_type: int, name: str):
def set_slot_tag_nick_name(self, slot: SlotNumber, sense_type: TagSenseType, name: str):
"""
设置MF1的模拟卡的防冲撞资源信息
:param slot: 卡槽号码
@@ -395,11 +446,11 @@ class BaseChameleonCMD:
:return:
"""
data = bytearray()
data.extend([slot, sense_type])
data.extend([SlotNumber.fix(slot), sense_type])
data.extend(name.encode(encoding="gbk"))
return self.device.send_cmd_sync(DATA_CMD_SET_SLOT_TAG_NICK, 0x00, data)
def get_slot_tag_nick_name(self, slot: int, sense_type: int):
def get_slot_tag_nick_name(self, slot: SlotNumber, sense_type: TagSenseType):
"""
设置MF1的模拟卡的防冲撞资源信息
:param slot: 卡槽号码
@@ -408,7 +459,7 @@ class BaseChameleonCMD:
:return:
"""
data = bytearray()
data.extend([slot, sense_type])
data.extend([SlotNumber.fix(slot), sense_type])
return self.device.send_cmd_sync(DATA_CMD_GET_SLOT_TAG_NICK, 0x00, data)
def update_slot_data_config(self):