void hidp_dump(int level, struct frame *frm) { uint8_t hdr; char *param; hdr = p_get_u8(frm); switch (hdr & 0xf0) { case 0x00: param = result2str(hdr); break; case 0x10: param = operation2str(hdr); break; case 0x60: case 0x70: param = protocol2str(hdr); break; case 0x40: case 0x50: case 0xa0: case 0xb0: param = report2str(hdr); break; default: param = ""; break; } p_indent(level, frm); printf("HIDP: %s: %s\n", type2str(hdr), param); raw_dump(level, frm); }
static void parse_parameters(int level, struct frame *frm) { uint8_t param; uint16_t len; uint8_t pv8; while (frm->len > 3) { p_indent(level, frm); param = get_u8(frm); get_u8(frm); len = get_u16(frm); printf("%s (0x%02x) len %d = ", param2str(param), param, len); switch (param) { case SAP_PARAM_ID_MAX_MSG_SIZE: printf("%d\n", get_u16(frm)); break; case SAP_PARAM_ID_CONN_STATUS: pv8 = get_u8(frm); printf("0x%02x (%s)\n", pv8, status2str(pv8)); break; case SAP_PARAM_ID_RESULT_CODE: case SAP_PARAM_ID_CARD_READER_STATUS: pv8 = get_u8(frm); printf("0x%02x (%s)\n", pv8, result2str(pv8)); break; case SAP_PARAM_ID_DISCONNECT_IND: pv8 = get_u8(frm); printf("0x%02x (%s)\n", pv8, disctype2str(pv8)); break; case SAP_PARAM_ID_STATUS_CHANGE: pv8 = get_u8(frm); printf("0x%02x (%s)\n", pv8, statuschg2str(pv8)); break; case SAP_PARAM_ID_TRANSPORT_PROTOCOL: pv8 = get_u8(frm); printf("0x%02x (%s)\n", pv8, prot2str(pv8)); break; default: printf("\n"); raw_ndump(level + 1, frm, len); frm->ptr += len; frm->len -= len; } /* Skip padding */ frm->ptr += PADDING4(len); frm->len -= PADDING4(len); } }