Merge pull request #107 from yuyangh/yuyangh/add_ASHA_L2CAP

add ASHA L2CAP and Event Emitter
This commit is contained in:
Gilles Boccon-Gibod
2023-01-13 11:05:16 -08:00
committed by GitHub

View File

@@ -31,6 +31,7 @@ from ..gatt import (
Characteristic, Characteristic,
CharacteristicValue, CharacteristicValue,
) )
from ..device import Device
# ----------------------------------------------------------------------------- # -----------------------------------------------------------------------------
# Logging # Logging
@@ -50,9 +51,13 @@ class AshaService(TemplateService):
SUPPORTED_CODEC_ID = [0x02, 0x01] # Codec IDs [G.722 at 16 kHz] SUPPORTED_CODEC_ID = [0x02, 0x01] # Codec IDs [G.722 at 16 kHz]
RENDER_DELAY = [00, 00] RENDER_DELAY = [00, 00]
def __init__(self, capability: int, hisyncid: List[int]): def __init__(self, capability: int, hisyncid: List[int], device: Device, psm=0):
self.hisyncid = hisyncid self.hisyncid = hisyncid
self.capability = capability # Device Capabilities [Left, Monaural] self.capability = capability # Device Capabilities [Left, Monaural]
self.device = device
self.emitted_data_name = 'ASHA_data_' + str(self.capability)
self.audio_out_data = b''
self.psm = psm # a non-zero psm is mainly for testing purpose
# Handler for volume control # Handler for volume control
def on_volume_write(_connection, value): def on_volume_write(_connection, value):
@@ -116,9 +121,18 @@ class AshaService(TemplateService):
CharacteristicValue(write=on_volume_write), CharacteristicValue(write=on_volume_write),
) )
# TODO add real psm value # Register an L2CAP CoC server
self.psm = 0x0080 def on_coc(channel):
# self.psm = device.register_l2cap_channel_server(0, on_coc, 8) def on_data(data):
logging.debug(f'<<< data received:{data}')
self.emit(self.emitted_data_name, data)
self.audio_out_data += data
channel.sink = on_data
# let the server find a free PSM
self.psm = self.device.register_l2cap_channel_server(self.psm, on_coc, 8)
self.le_psm_out_characteristic = Characteristic( self.le_psm_out_characteristic = Characteristic(
GATT_ASHA_LE_PSM_OUT_CHARACTERISTIC, GATT_ASHA_LE_PSM_OUT_CHARACTERISTIC,
Characteristic.READ, Characteristic.READ,