国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

USB鍵盤鼠標描述符及數據格式分析

這篇具有很好參考價值的文章主要介紹了USB鍵盤鼠標描述符及數據格式分析。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

一:鍵盤

? ? ? ? 1:鍵盤的hid描述符如下,數據的輸入斷點為中斷方式,當有鍵盤敲擊事件時,會上報長度為8字節(jié)的數據描述符,描述符共有8字節(jié)的輸入報告和1字節(jié)的輸出報告。

????????0x05,0x01,// Global Generic Desktop

????????0x09,0x06,// Local KeyBoard

????????0xA1,0x01,// Main app collection

????????0x05,0x07,// Global KeyBoard

????????//第1字節(jié)

????????0x19,0xe0,// Local Usage Min (KeyBoard LeftControl)

????????0x29,0xe7,// Local Usage Max (KeyBoard Right GUI)

????????0x15,0x00,// Global Logical Min

????????0x25,0x01,// Global Logical Max

????????0x95,0x08,// Global ReportCount

????????0x75,0x01,// Global ReportSize

????????0x81,0x02,// Main Input(Data,Var,Abs)

????????//第2字節(jié)

????????0x95,0x01,// Global ReportCount

????????0x75,0x08,// Global ReportSize

????????0x81,0x03,// Main Input(Cnst,Var,Abs)

????????//第3-8字節(jié)

????????0x95,0x06,// Global ReportCount

????????0x75,0x08,// Global ReportSize

????????0x15,0x00,// Global Logical Min

????????0x26,0xff,0x00,//Global Logical Max

????????0x19,0x00,// Local Usage Min

????????0x29,0x65,// Local Usage Max

????????0x81,0x00,// Main Output(Data,Ary,Abs)

????????//1字節(jié)輸出報告

????????0x15,0x00,// Global Logical Min

????????0x25,0x01,// Global Logical Max

????????0x95,0x05,// Global ReportCount

????????0x75,0x01,// Global ReportSize

????????0x05,0x08,// Global LED

????????0x19,0x01,// Local Usage Min

????????0x29,0x05,// Local Usage Max

????????0x91,0x02,// Main Output(Data,Var,Abs)

????????//補足上面變成1個字節(jié)

????????0x95,0x01,// Global ReportCount

????????0x75,0x03,// Global ReportSize

????????0x91,0x03,// Main Output(Cnst,Var,Abs)

????????0xc0? ????// Main End collection

2:1字節(jié)的輸出報告

? ? ? ? 如果不給鍵盤配置OUT端點,那么鍵盤的1字節(jié)輸出報告將由控制端點的SetReport進行傳輸。這1個字節(jié)總共用了5bit和3bit常量來補足1個字節(jié)。5bits用來點亮特殊鍵盤上的led燈,比如鍵盤的大小寫,數字鍵等。

3:8字節(jié)的輸入報告

? ? ? ? BYTE? ? ? ? bit7? ? ? ? bit6? ? ? ? ?bit5? ? ? ? ?bit4? ? ? ? ?bit3? ? ? ? bit2? ? ? ? bit1? ? ? ? bit0

? ? ? ? ? ?0? ? ? ? ? ?r-gui? ? ? ? r-alt?? ? ? r-shitf? ? ? ?r-ctrl? ? ? ? l-gui? ? ? ?l-alt? ? ? ?l-shift? ? ? l-ctrl

? ? ? ? ? ?1? ? ? ? ? reserved

? ? ? ? ? ?2? ? ? ? ? keyboard page usage

? ? ? ? ? ?3? ? ? ? ? keyboard page usage

? ? ? ? ? ?4? ? ? ? ? keyboard page usage

? ? ? ? ? ?5? ? ? ? ? keyboard page usage

? ? ? ? ? ?6? ? ? ? ? keyboard page usage

? ? ? ? ? ?7? ? ? ? ? keyboard page usage

? ? ? ? BYTE0 各bit表示足有GUI(win),Alt,Shift,Ctrl鍵是否按下,按下為1。

? ? ? ? BYTE1 保留

? ? ? ? BYTE2-7 表示此時按下的其他所有鍵盤按鍵的鍵碼,從低到高填充,沒按就是0x00.如果同時按下的鍵超過允許,則顯示0xff。

????????keyboard page usage 定義如下:

? ? ? ? #define ? ? ? ?KB_ERROR ? ? ? ? ? ?0x01

? ? ? ? #define ? ? ? ?KB_A ? ? ? ? ? ? ? ?0x04

? ? ? ? #define ? ? ? ?KB_B ? ? ? ? ? ? ? ?0x05

? ? ? ? #define ? ? ? ?KB_C ? ? ? ? ? ? ? ?0x06

? ? ? ? #define ? ? ? ?KB_D ? ? ? ? ? ? ? ?0x07

? ? ? ? #define ? ? ? ?KB_E ? ? ? ? ? ? ? ?0x08

? ? ? ? #define ? ? ? ?KB_F ? ? ? ? ? ? ? ?0x09

? ? ? ? #define ? ? ? ?KB_G ? ? ? ? ? ? ? ?0x0A

? ? ? ? #define ? ? ? ?KB_H ? ? ? ? ? ? ? ?0x0B

? ? ? ? #define ? ? ? ?KB_I ? ? ? ? ? ? ? ?0x0C

? ? ? ? #define ? ? ? ?KB_J ? ? ? ? ? ? ? ?0x0D

? ? ? ? #define ? ? ? ?KB_K ? ? ? ? ? ? ? ?0x0E

? ? ? ? #define ? ? ? ?KB_L ? ? ? ? ? ? ? ?0x0F

? ? ? ? #define ? ? ? ?KB_M ? ? ? ? ? ? ? ?0x10

? ? ? ? #define ? ? ? ?KB_N ? ? ? ? ? ? ? ?0x11

? ? ? ? #define ? ? ? ?KB_O ? ? ? ? ? ? ? ?0x12

? ? ? ? #define ? ? ? ?KB_P ? ? ? ? ? ? ? ?0x13

? ? ? ? #define ? ? ? ?KB_Q ? ? ? ? ? ? ? ?0x14

? ? ? ? #define ? ? ? ?KB_R ? ? ? ? ? ? ? ?0x15

? ? ? ? #define ? ? ? ?KB_S ? ? ? ? ? ? ? ?0x16

? ? ? ? #define ? ? ? ?KB_T ? ? ? ? ? ? ? ?0x17

? ? ? ? #define ? ? ? ?KB_U ? ? ? ? ? ? ? ?0x18

? ? ? ? #define ? ? ? ?KB_V ? ? ? ? ? ? ? ?0x19

? ? ? ? #define ? ? ? ?KB_W ? ? ? ? ? ? ? ?0x1A

? ? ? ? #define ? ? ? ?KB_X ? ? ? ? ? ? ? ?0x1B

? ? ? ? #define ? ? ? ?KB_Y ? ? ? ? ? ? ? ?0x1C

? ? ? ? #define ? ? ? ?KB_Z ? ? ? ? ? ? ? ?0x1D

? ? ? ? #define ? ? ? ?KB_1 ? ? ? ? ? ? ? ?0x1E

? ? ? ? #define ? ? ? ?KB_2 ? ? ? ? ? ? ? ?0x1F

? ? ? ? #define ? ? ? ?KB_3 ? ? ? ? ? ? ? ?0x20

? ? ? ? #define ? ? ? ?KB_4 ? ? ? ? ? ? ? ?0x21

? ? ? ? #define ? ? ? ?KB_5 ? ? ? ? ? ? ? ?0x22

? ? ? ? #define ? ? ? ?KB_6 ? ? ? ? ? ? ? ?0x23

? ? ? ? #define ? ? ? ?KB_7 ? ? ? ? ? ? ? ?0x24

? ? ? ? #define ? ? ? ?KB_8 ? ? ? ? ? ? ? ?0x25

? ? ? ? #define ? ? ? ?KB_9 ? ? ? ? ? ? ? ?0x26

? ? ? ? #define ? ? ? ?KB_0 ? ? ? ? ? ? ? ?0x27

? ? ? ? #define ? ? ? ?KB_ENTER ? ? ? ? ? ?0x28

? ? ? ? #define ? ? ? ?KB_ESC ? ? ? ? ? ? ? ?0x29

? ? ? ? #define ? ? ? ?KB_BACKSPACE ? ? ? ?0x2A

? ? ? ? #define ? ? ? ?KB_TAB ? ? ? ? ? ? ? ?0x2B

? ? ? ? #define ? ? ? ?KB_SPACE ? ? ? ? ? ?0x2C

? ? ? ? #define ? ? ? ?KB_MIUS ? ? ? ? ? ? ? ?0x2D ? ?//-_

? ? ? ? #define ? ? ? ?KB_EQUAL ? ? ? ? ? ?0x2E ? ?//=+

? ? ? ? #define ? ? ? ?KB_LSQUBRACKET ? ? ? ?0x2F ? ?//[{

? ? ? ? #define ? ? ? ?KB_RSQUBRACKET ? ? ? ?0x30 ? ?//]}

? ? ? ? #define ? ? ? ?KB_BACKSLASH ? ? ? ?0x31 ? ?//\|

? ? ? ? #define ? ? ? ?KB_SEMICOLON ? ? ? ?0x33 ? ?//;:

? ? ? ? #define ? ? ? ?KB_APOSTROPHE ? ? ? ?0x34 ? ?//'"

? ? ? ? #define ? ? ? ?KB_TILDE ? ? ? ? ? ?0x35 ? ?//`~

? ? ? ? #define ? ? ? ?KB_COMMA ? ? ? ? ? ?0x36 ? ?//,<

? ? ? ? #define ? ? ? ?KB_FULLSTOP ? ? ? ? ? ?0x37 ? ?//.>

? ? ? ? #define ? ? ? ?KB_SLASH ? ? ? ? ? ?0x38 ? ?///?

? ? ? ? #define ? ? ? ?KB_CAPSLOCK ? ? ? ? ? ?0x39 ?

? ? ? ? #define ? ? ? ?KB_F1 ? ? ? ? ? ? ? ?0x3A

? ? ? ? #define ? ? ? ?KB_F2 ? ? ? ? ? ? ? ?0x3B

? ? ? ? #define ? ? ? ?KB_F3 ? ? ? ? ? ? ? ?0x3C

? ? ? ? #define ? ? ? ?KB_F4 ? ? ? ? ? ? ? ?0x3D

? ? ? ? #define ? ? ? ?KB_F5 ? ? ? ? ? ? ? ?0x3E

? ? ? ? #define ? ? ? ?KB_F6 ? ? ? ? ? ? ? ?0x3F

? ? ? ? #define ? ? ? ?KB_F7 ? ? ? ? ? ? ? ?0x40

? ? ? ? #define ? ? ? ?KB_F8 ? ? ? ? ? ? ? ?0x41

? ? ? ? #define ? ? ? ?KB_F9 ? ? ? ? ? ? ? ?0x42

? ? ? ? #define ? ? ? ?KB_F10 ? ? ? ? ? ? ? ?0x43

? ? ? ? #define ? ? ? ?KB_F11 ? ? ? ? ? ? ? ?0x44

? ? ? ? #define ? ? ? ?KB_F12 ? ? ? ? ? ? ? ?0x45

? ? ? ? #define ? ? ? ?KB_PRTSCR ? ? ? ? ? ?0x46

? ? ? ? #define ? ? ? ?KB_SCOLLLOCK ? ? ? ?0x47

? ? ? ? #define ? ? ? ?KB_PAUSE ? ? ? ? ? ?0x48

? ? ? ? #define ? ? ? ?KB_INSERT ? ? ? ? ? ?0x49

? ? ? ? #define ? ? ? ?KB_HOME ? ? ? ? ? ? ? ?0x4A

? ? ? ? #define ? ? ? ?KB_PAGEUP ? ? ? ? ? ?0x4B

? ? ? ? #define ? ? ? ?KB_DELETE ? ? ? ? ? ?0x4C

? ? ? ? #define ? ? ? ?KB_END ? ? ? ? ? ? ? ?0x4D

? ? ? ? #define ? ? ? ?KB_PAGEDOWN ? ? ? ? ? ?0x4E

? ? ? ? #define ? ? ? ?KB_RARROW ? ? ? ? ? ?0x4F

? ? ? ? #define ? ? ? ?KB_LARROW ? ? ? ? ? ?0x50

? ? ? ? #define ? ? ? ?KB_DARROW ? ? ? ? ? ?0x51

? ? ? ? #define ? ? ? ?KB_UARROW ? ? ? ? ? ?0x52

? ? ? ? #define ? ? ? ?KB_NUMLOCK ? ? ? ? ? ?0x53

? ? ? ? #define ? ? ? ?KB_PAD_DIV ? ? ? ? ? ?0x54 ? ?///

? ? ? ? #define ? ? ? ?KB_PAD_MUL ? ? ? ? ? ?0x55 ? ?//*

? ? ? ? #define ? ? ? ?KB_PAD_MINUS ? ? ? ?0x56 ? ?//-

? ? ? ? #define ? ? ? ?KB_PAD_PLUS ? ? ? ? ? 0x57 ? ?//+

? ? ? ? #define ? ? ? ?KB_PAD_ENTER ? ? ? ?0x58

? ? ? ? #define ? ? ? ?KB_PAD_1 ? ? ? ? ? ?0x59

? ? ? ? #define ? ? ? ?KB_PAD_2 ? ? ? ? ? ?0x5A

? ? ? ? #define ? ? ? ?KB_PAD_3 ? ? ? ? ? ?0x5B

? ? ? ? #define ? ? ? ?KB_PAD_4 ? ? ? ? ? ?0x5C

? ? ? ? #define ? ? ? ?KB_PAD_5 ? ? ? ? ? ?0x5D

? ? ? ? #define ? ? ? ?KB_PAD_6 ? ? ? ? ? ?0x5E

? ? ? ? #define ? ? ? ?KB_PAD_7 ? ? ? ? ? ?0x5F

? ? ? ? #define ? ? ? ?KB_PAD_8 ? ? ? ? ? ?0x60

? ? ? ? #define ? ? ? ?KB_PAD_9 ? ? ? ? ? ?0x61

? ? ? ? #define ? ? ? ?KB_PAD_0 ? ? ? ? ? ?0x62

? ? ? ? #define ? ? ? ?KB_PAD_DEL ? ? ? ? ? 0x63

? ? ? ? #define ? ? ? ?KB_APPLICATION ? ? ? ?0x65 ? ?//RWin右邊鍵

二:鼠標

? ? ? ? 1:鼠標描述符如下

? ? ? ? 0x05,0x01, // Global Generic Desktop

? ? ? ? 0x09,0x02, // Local Mouse

? ? ? ? 0xa1,0x01, // Main app collection

? ? ? ? 0x09,0x01, // Local Pointer

? ? ? ? 0xa1,0x00, // Main phy collection

? ? ? ? 0x95,0x03, // Global ReportCount

? ? ? ? 0x75,0x01, // Global ReportSize

? ? ? ? 0x05,0x09, // Global Button

? ? ? ? 0x19,0x01, // Local Usage Min

? ? ? ? 0x29,0x03, // Local Usage Max

? ? ? ? 0x15,0x00, // Global Logical Min

? ? ? ? 0x25,0x01, // Global Logical Max

? ? ? ? 0x81,0x02, // Main Input(Data,Var,Abs)

? ? ? ? 0x95,0x01, // Global ReportCount

? ? ? ? 0x75,0x05, // Global ReportSize

? ? ? ? 0x81,0x03, // Main Input(Cnsr,Var,Abs)

? ? ? ? 0x95,0x03,0x75,0x08, // Global ReportCount Global ReportSize

? ? ? ? 0x05,0x01, // Global Generic Desktip

? ? ? ? 0x09,0x30, // Local X

? ? ? ? 0x09,0x31, // Local Y

? ? ? ? 0x09,0x38, // Locak Wheel

? ? ? ? 0x15,0x81, // Global Logical Min

? ? ? ? 0x25,0x7f, // Global Logical Max

? ? ? ? 0x81,0x06, // Main Input(Data,Var,Rel)

? ? ? ? 0xc0, ? ? ?// Main End collection

????????鼠標發(fā)送給PC的數據每次4個字節(jié)。

????????BYTE1字節(jié):
????????bit7~3:補充的常數,無意義,這里為0即可
????????bit2: 1表示中鍵按下
????????bit1: 1表示右鍵按下 0表示右鍵抬起
????????bit0: 1表示左鍵按下 0表示左鍵抬起
????????BYTE2 — X坐標變化量,與byte的bit4組成9位符號數,負數表示向左移,正數表右移。用補碼表示變化量
????????BYTE3 — Y坐標變化量,與byte的bit5組成9位符號數,負數表示向下移,正數表上移。用補碼表示變化量
????????BYTE4 — 滾輪變化。0x01(1)表示滾輪向前滾動一格;0xFF(-1)表示滾輪向后滾動一格;0x80(-0)是個中間值,不滾動

? ? ? ? 實際測試:

????????BYTE2 X坐標變化量,當BYTE1的bit4為0的時候,0x01~0x7F為向左移動,0x81~0xFF為向右移動,0x00,0x80為不移動。BYTE1的bit4為1的時候,依舊。試驗數據是跟BYTE1的bit4沒什么關系。

????????BYTE3的變化跟BYTE2的一樣。
因此BYTE2/BYTE3/BYTE4的變化趨勢都是一樣的,中間是分界點,山峰結構。從低到高,再從高到低。

????????

?文章來源地址http://www.zghlxwxcb.cn/news/detail-855444.html

到了這里,關于USB鍵盤鼠標描述符及數據格式分析的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • stm32 USB復合設備 cubeMX庫一鍵生成 多路CDC串口 HID鼠標鍵盤 Composite Device

    stm32 USB復合設備 cubeMX庫一鍵生成 多路CDC串口 HID鼠標鍵盤 Composite Device

    最近有個需求,需要同時用usb鍵盤鼠標和虛擬串口等,因為平時沒怎么研究過usb協(xié)議,所以自己寫復合設備一直沒有成功,然后正巧在github上看到了一個stm32的一個usb復合設備庫,可以快速配置usb組合設備,并且支持超級多路串口 Gihub地址 https://github.com/alambe94/I-CUBE-USBD-Compo

    2024年02月09日
    瀏覽(34)
  • 【流量分析】USB鍵盤與鼠標流量分析

    【流量分析】USB鍵盤與鼠標流量分析

    USB流量指的是USB設備接口的流量,攻擊者能夠通過監(jiān)聽usb接口流量獲取鍵盤敲擊鍵、鼠標移動與點擊、存儲設備的銘文傳輸通信、USB無線網卡網絡傳輸內容等等。 在CTF中,USB流量分析主要以鍵盤和鼠標流量為主。 下面通過簡單的講解與例題的展示,分析鍵盤流量與鼠標流量

    2024年02月08日
    瀏覽(17)
  • USB HID鍵盤實現全鍵無沖解析

    USB HID鍵盤實現全鍵無沖解析

    目錄 前言 設備描述符 配置描述符 配置描述符 接口描述符 HID描述符 端點描述符 HID類報表描述符 輸入輸出數據解析 其他 ? ? ? ? 看了稚輝君的瀚文鍵盤的源碼之后對于鍵盤全鍵無沖的實現還是存在很多疑問。1、HID報表描述符的內容到底什么意思?2、瀚文源碼里的鍵值映射

    2024年02月09日
    瀏覽(71)
  • STM32。USB HID,如何發(fā)送標準鍵盤的按鍵報告?

    STM32。USB HID,如何發(fā)送標準鍵盤的按鍵報告?

    我們要求STM32芯片的usb和windows電腦的USB接口進行連接,然后STM32芯片發(fā)送usb數據給windows電腦,實現電腦上按下一個f按鍵的效果。 下面開始操作: 使用STM32CubeMX生成代碼,先選擇對應的usb口 然后選擇第三方軟件,選擇HID 然后點擊生成代碼,這時候就會生成usbd_hid.c相關的代碼

    2024年02月12日
    瀏覽(23)
  • USB標準鍵盤按鍵數據包格式解析

    標準鍵盤一次發(fā)送8個字節(jié),解釋如下: BYTE1 – |–bit0: Left Control是否按下,按下為1 |–bit1: Left Shift 是否按下,按下為1 |–bit2: Left Alt 是否按下,按下為1 |–bit3: Left GUI 是否按下,按下為1 |–bit4: Right Control是否按下,按下為1 |–bit5: Right Shift 是否按下,按下為1 |–bit6: Right

    2024年02月01日
    瀏覽(21)
  • 第10課【STM32 USB通訊協(xié)議實戰(zhàn)】HID鍵盤+CDC虛擬串口組合設備

    第10課【STM32 USB通訊協(xié)議實戰(zhàn)】HID鍵盤+CDC虛擬串口組合設備

    文章中的部分概念可參考第9課【USB協(xié)議】USB總線 接口 端點 管道 數據包 枚舉 STM32_USB-FS-Device_Lib V4.1.0 USB協(xié)議中為了提供對多樣設備的支持,定義了許多外部設備子類,常見的包括: 人機交互類設備HID(Human Interface Device) 通信類設備CDC(Communicate Device Class) 大容量存儲設備

    2024年02月04日
    瀏覽(70)
  • linux嵌入式開發(fā)-Zynq開發(fā)板配置usb_gadget模擬HID鼠標

    linux嵌入式開發(fā)-Zynq開發(fā)板配置usb_gadget模擬HID鼠標

    在PC上使用VMWare,在ubuntu下創(chuàng)建petalinux工程,編譯內核,vmware、vivdado、petalinux的安裝詳見alinx官方教程course4-linux實驗中的步驟 創(chuàng)建petalinux工程,在工程目錄下打開終端,輸入命令準備編譯內核 然后編譯內核: 進入Devicedrivers - USB Support,勾選USB Gadget Support(按Y) 進入USB Gadge

    2024年02月04日
    瀏覽(42)
  • 串口轉HID鍵盤鼠標芯片沁恒微電子CH9329

    串口轉HID鍵盤鼠標芯片沁恒微電子CH9329

    概述 沁恒微電子CH9329 是一款串口轉標準 USB HID 設備(鍵盤、鼠標、自定義 HID)芯片,根據不同的工作模式, 在電腦上可被識別為標準的 USB 鍵盤設備、USB 鼠標設備或自定義 HID 類設備。該芯片接收客戶端發(fā)送過來的串口數據,并按照 HID 類設備規(guī)范,將數據先進行打包再通過

    2024年02月10日
    瀏覽(18)
  • USB鼠標實現——設備描述符(一)

    USB鼠標實現——設備描述符(一)

    倉庫地址 枚舉過程 USB鼠標實現——設備描述符(一) USB鼠標實現——設置地址(二) USB鼠標實現——配置描述符集合(三) USB鼠標實現——字符串描述符(四) USB鼠標實現——設備限定描述符(五) USB鼠標實現——設置配置和獲取配置(六) USB鼠標實現——報告描述符

    2024年02月09日
    瀏覽(86)
  • 基于XG24-EK2703A的BLE HID藍牙鍵盤+鼠標復合設備功能開發(fā)(BLE+HID+FreeRTOS+Gecko SDK)

    基于XG24-EK2703A的BLE HID藍牙鍵盤+鼠標復合設備功能開發(fā)(BLE+HID+FreeRTOS+Gecko SDK)

    ?? 【Funpack3-1】基于XG24-EK2703A的BLE HID藍牙鍵盤+鼠標復合設備 ?? Github: EmbeddedCamerata/XG24_ble_hid_keymouse 本項目基于Silicon Labs XG24-EK2703A開發(fā)板,通過HID協(xié)議實現了一個藍牙鍵盤+鼠標復合設備,可通過按鍵實現上下翻頁、發(fā)送字符功能。使用板載兩個按鍵,當BTN0按下,向上翻頁;

    2024年01月25日
    瀏覽(25)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包