def _receptionHandler(self, data): if len(data) > 5: l2cap_data = data[5:] else: log.debug("Received invalid L2CAP data at handler: %s", data) return # prioritize specific CID handlers (length, cid) = struct.unpack_from("hh", l2cap_data) log.debug("Received L2CAP data for cid: %d, %s", cid, binascii.hexlify(l2cap_data)) if cid in self.cidHandlers: for handler in self.cidHandlers[cid]: handler(l2cap_data[4:]) for handler in self.handlers: handler(l2cap_data[4:])
def sendACL(self, data): data_len = p16(len(data)) handle = p16(self.handle | 0x2000) log.debug("Sent acl data: %s", binascii.hexlify(data).decode("utf-8")) self.core.sendH4(0x02, handle + data_len + data)
def registerACLHandler(self, handler): self.aclHandlers.append(handler) log.debug("Registered new acl handler")
def _aclEventHandler(self, data): log.debug("Received ACL data: %s", binascii.hexlify(data).decode("utf-8")) for handler in self.aclHandlers: handler(data)
def registerCIDHandler(self, handler, cid): if cid not in self.cidHandlers: self.cidHandlers[cid] = [] self.cidHandlers[cid].append(handler) log.debug("Registered L2CAP handler for CID %d", cid)
def registerHandler(self, handler): self.handlers.append(handler) log.debug("Registered L2CAP handler")
def sendData(self, data, cid): data_len = len(data) # if data_len > mtu log.debug("Sent L2CAP data to channel: %d, data: %s", cid, binascii.hexlify(data)) self.connection.sendACL(p16(data_len) + p16(cid) + data)