You've already forked TEF6686_Driver
xrd protocol
This commit is contained in:
69
tef.py
69
tef.py
@@ -110,17 +110,20 @@ class TEF6686(BaseTEF668X):
|
||||
@_command_wrapper
|
||||
def APPL_Set_OperationMode(self, mode: bool = True):
|
||||
return b"\x40\x01\x01" + mode.to_bytes(2, "big"), None, None
|
||||
@_command_wrapper
|
||||
def FM_Set_Stereo_Min(self, mode: int = 0, limit: int = 400):
|
||||
return b"\x20\x42\x01" + mode.to_bytes(2, "big") + limit.to_bytes(2, "big"), None, None
|
||||
|
||||
@staticmethod
|
||||
def _get_quality_data(data) -> tuple[None, None, None, None, None, None, None] | tuple[int, int, int, int, int, int, int]:
|
||||
if data[1] != 0: return None, None, None, None, None, None, None
|
||||
status = (data[2] << 8) | data[3]
|
||||
level = int.from_bytes(bytes([data[4], data[5]]), "big", signed=True)
|
||||
usn = (data[6] << 8) | data[7] # "noise" on AM
|
||||
wam = (data[8] << 8) | data[9] # "co-channel" on AM
|
||||
offset = int.from_bytes(bytes([data[10], data[11]]), "big", signed=True)
|
||||
bandwidth = (data[12] << 8) | data[13]
|
||||
modulation = (data[14] << 8) | data[15]
|
||||
if data[0] != 0: return None, None, None, None, None, None, None
|
||||
status = (data[1] << 8) | data[2]
|
||||
level = int.from_bytes(bytes([data[3], data[4]]), "big", signed=True)
|
||||
usn = (data[5] << 8) | data[6] # "noise" on AM
|
||||
wam = (data[7] << 8) | data[8] # "co-channel" on AM
|
||||
offset = int.from_bytes(bytes([data[9], data[10]]), "big", signed=True)
|
||||
bandwidth = (data[11] << 8) | data[12]
|
||||
modulation = (data[13] << 8) | data[14]
|
||||
return status, level, usn, wam, offset, bandwidth, modulation
|
||||
@_command_wrapper
|
||||
def FM_Get_Quality_Status(self):
|
||||
@@ -136,21 +139,21 @@ class TEF6686(BaseTEF668X):
|
||||
return b"\x21\x81\x01", 14, self._get_quality_data
|
||||
|
||||
@staticmethod
|
||||
def _get_rds_data_proc_decoder(data):
|
||||
if data[1] != 0: return None, None, None, None, None, None
|
||||
status = (data[2] << 8) | data[3]
|
||||
A_block = (data[4] << 8) | data[5]
|
||||
B_block = (data[6] << 8) | data[7]
|
||||
C_block = (data[8] << 8) | data[9]
|
||||
D_block = (data[10] << 8) | data[11]
|
||||
dec_error = (data[12] << 8) | data[13]
|
||||
def _get_rds_data_proc_decoder(data) -> tuple[None, None, None, None, None, None] | tuple[int, int, int, int, int, int]:
|
||||
if data[0] != 0: return None, None, None, None, None, None
|
||||
status = (data[1] << 8) | data[2]
|
||||
A_block = (data[3] << 8) | data[4]
|
||||
B_block = (data[5] << 8) | data[6]
|
||||
C_block = (data[7] << 8) | data[8]
|
||||
D_block = (data[9] << 8) | data[10]
|
||||
dec_error = (data[11] << 8) | data[12]
|
||||
return status, A_block, B_block, C_block, D_block, dec_error
|
||||
@staticmethod
|
||||
def _get_rds_data_proc_demodulator(data):
|
||||
if data[1] != 0: return None, None, None
|
||||
status = (data[2] << 8) | data[3]
|
||||
raw_data_high = (data[4] << 8) | data[5]
|
||||
raw_data_low = (data[6] << 8) | data[7]
|
||||
if data[0] != 0: return None, None, None
|
||||
status = (data[1] << 8) | data[2]
|
||||
raw_data_high = (data[3] << 8) | data[4]
|
||||
raw_data_low = (data[5] << 8) | data[6]
|
||||
return status, (raw_data_high << 16) | raw_data_low
|
||||
@_command_wrapper
|
||||
def FM_Get_RDS_Status__decoder(self):
|
||||
@@ -171,9 +174,9 @@ class TEF6686(BaseTEF668X):
|
||||
Returns None if there was a I2C error, or a tuple of booleans (FM Stereo/Mono and Analog/Digital radio [DR models])
|
||||
"""
|
||||
def proc(data):
|
||||
if data[1] != 0: return None
|
||||
input_att = (data[2] << 8) | data[3]
|
||||
feedback_att = (data[4] << 8) | data[5]
|
||||
if data[0] != 0: return None
|
||||
input_att = (data[1] << 8) | data[2]
|
||||
feedback_att = (data[3] << 8) | data[4]
|
||||
return input_att, feedback_att
|
||||
return b"\x20\x84\x01", 4, proc
|
||||
@_command_wrapper
|
||||
@@ -182,16 +185,26 @@ class TEF6686(BaseTEF668X):
|
||||
Returns None if there was a I2C error, or a tuple of booleans (FM Stereo/Mono and Analog/Digital radio [DR models])
|
||||
"""
|
||||
def proc(data):
|
||||
if data[1] != 0: return None
|
||||
if data[0] != 0: return None
|
||||
value = (data[-2] << 8) | data[-1]
|
||||
return (value & (1 << 15)) != 0, (value & (1 << 14)) != 0
|
||||
return b"\x20\x85\x01", 2, proc
|
||||
@_command_wrapper
|
||||
def FM_Get_Processing_Status(self):
|
||||
def proc(data):
|
||||
if data[0] != 0: return None, None, None, None
|
||||
softmute = (data[1] << 8) | data[2]
|
||||
highcut = (data[3] << 8) | data[4]
|
||||
stereo = (data[5] << 8) | data[6]
|
||||
sthiblend = (data[7] << 8) | data[8]
|
||||
return softmute, highcut, stereo, sthiblend
|
||||
return b"\x20\x86\x01", 2*4, proc
|
||||
@_command_wrapper
|
||||
def APPL_Get_Identification(self):
|
||||
def proc(data):
|
||||
if data[1] != 0: return None
|
||||
device = (data[2] << 8) | data[3]
|
||||
hw_version = (data[4] << 8) | data[5]
|
||||
sw_version = (data[6] << 8) | data[7]
|
||||
if data[0] != 0: return None
|
||||
device = (data[1] << 8) | data[2]
|
||||
hw_version = (data[3] << 8) | data[4]
|
||||
sw_version = (data[5] << 8) | data[6]
|
||||
return device, hw_version, sw_version
|
||||
return b"\x40\x82\x01", 6, proc
|
||||
Reference in New Issue
Block a user