Пример #1
0
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);
}
Пример #2
0
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);
	}
}