static void smp_cmd_ident_addr_info_dump(int level, struct frame *frm) { uint8_t type = p_get_u8(frm); char addr[18]; p_indent(level, frm); p_ba2str((bdaddr_t *) frm, addr); printf("bdaddr %s (%s)\n", addr, type == 0x00 ? "Public" : "Random"); }
static inline void bdaddr_dump(int level, char *str, struct frame *frm) { char addr[18]; p_ba2str(frm->ptr, addr); p_indent(level, frm); printf("%s: bdaddr %s\n", str, addr); }
void csr_dump(int level, struct frame *frm) { uint8_t desc, cid, type; uint16_t handle, master, addr; desc = CSR_U8(frm); cid = desc & 0x3f; switch (cid) { case 2: bccmd_dump(level, frm); break; case 20: type = CSR_U8(frm); if (!p_filter(FILT_LMP)) { switch (type) { case 0x0f: frm->handle = ((uint8_t *) frm->ptr)[17]; frm->master = 0; frm->len--; lmp_dump(level, frm); return; case 0x10: frm->handle = ((uint8_t *) frm->ptr)[17]; frm->master = 1; frm->len--; lmp_dump(level, frm); return; case 0x12: handle = CSR_U16(frm); master = CSR_U16(frm); addr = CSR_U16(frm); p_indent(level, frm); printf("FHS: handle %d addr %d (%s)\n", handle, addr, master ? "master" : "slave"); if (!master) { char addr[18]; p_ba2str((bdaddr_t *) frm->ptr, addr); p_indent(level + 1, frm); printf("bdaddr %s class " "0x%2.2x%2.2x%2.2x\n", addr, ((uint8_t *) frm->ptr)[8], ((uint8_t *) frm->ptr)[7], ((uint8_t *) frm->ptr)[6]); } return; case 0x7b: p_indent(level, frm); printf("LMP(r): duplicate (same SEQN)\n"); return; } } p_indent(level, frm); printf("CSR: Debug (type 0x%2.2x)\n", type); raw_dump(level, frm); break; default: p_indent(level, frm); printf("CSR: %s (channel %d)%s\n", cid2str(cid), cid, frag2str(desc)); raw_dump(level, frm); break; } }