📄 hidp.c
字号:
/* * * Bluetooth packet analyzer - HIDP parser * * Copyright (C) 2003-2005 Marcel Holtmann <marcel@holtmann.org> * * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * * $Id: hidp.c,v 1.6 2005/02/01 14:36:59 holtmann Exp $ */#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <errno.h>#include <string.h>#include <sys/types.h>#include <netinet/in.h>#include "parser.h"static char *type2str(uint8_t head){ switch (head & 0xf0) { case 0x00: return "Handshake"; case 0x10: return "Control"; case 0x40: return "Get report"; case 0x50: return "Set report"; case 0x60: return "Get protocol"; case 0x70: return "Set protocol"; case 0x80: return "Get idle"; case 0x90: return "Set idle"; case 0xa0: return "Data"; case 0xb0: return "Data continuation"; default: return "Reserved"; }}static char *result2str(uint8_t head){ switch (head & 0x0f) { case 0x00: return "Successful"; case 0x01: return "Not ready"; case 0x02: return "Invalid report ID"; case 0x03: return "Unsupported request"; case 0x04: return "Invalid parameter"; case 0x0e: return "Unknown"; case 0x0f: return "Fatal"; default: return "Reserved"; }}static char *operation2str(uint8_t head){ switch (head & 0x0f) { case 0x00: return "No operation"; case 0x01: return "Hard reset"; case 0x02: return "Soft reset"; case 0x03: return "Suspend"; case 0x04: return "Exit suspend"; case 0x05: return "Virtual cable unplug"; default: return "Reserved"; }}static char *report2str(uint8_t head){ switch (head & 0x03) { case 0x00: return "Other report"; case 0x01: return "Input report"; case 0x02: return "Output report"; case 0x03: return "Feature report"; default: return "Reserved"; }}static char *protocol2str(uint8_t head){ switch (head & 0x01) { case 0x00: return "Boot protocol"; case 0x01: return "Report protocol"; default: return "Reserved"; }}void hidp_dump(int level, struct frame *frm){ uint8_t hdr; char *param; hdr = 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);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -