USB-HIDЭÒéÖÐÎİæ

196 ¼ÆËã»ú¸ß¼¶½Ó¿Úʵ¼ù

8.3.3 ½Ó¿ÚÃèÊö·û

½Ó¿ÚÃèÊö·ûµÄ´úÂëÈçÏ¡£

;========================================= ; Interface descriptor ½Ó¿ÚÃèÊö·û ;========================================= InterfaceDescriptor0: DB 0x09 ; bLength = 9£¬¸ÃÃèÊö·û³¤¶È DB 0x04 ; bDescriptorType = 4£¬±íÃ÷ÊǽӿÚÃèÊö·û DB 0x00 ; bInterfaceNumber = 0£¬´Ë½Ó¿ÚµÄʶ±ð±êʶ·û DB 0x00 ; bAlternateSetting = 0£¬±íʾ´Ë½Ó¿ÚÎÞÌæ´úÉèÖÃÖµ DB 0x01 ; bNumEndpoints = 1£¬±¾½Ó¿ÚµÄ¶ËµãÊýÄ¿£¬HIDÉ豸ʹÓö˵ã1 DB 0x03 ; bInterfaceClass = 3£¬±íʾ¸ÃÉ豸ÊÇHIDÀà±ð DB 0x01 ; bInterfaceSubClass = 1£¬±íʾ֧³ÖÆô¶¯½Ó¿Ú DB 0x01 ; bInterfaceProtocol = 1£¬±íʾ֧³Ö¼üÅÌЭÒé DB 0x00 ; iInterface = 0£¬½Ó¿ÚÃèÊö·û˵Ã÷×Ö·û´®µÄË÷ÒýÖµ£¬0±íʾÎÞ×Ö·û´® 8.3.4 HIDÃèÊö·û

HIDÃèÊö·ûµÄ´úÂëÈçÏ¡£

;========================================= ; HID descriptor HIDÃèÊö·û ;========================================= HIDDescriptor0: DB 0x09 ; bLength = 9£¬¸ÃÃèÊö·û³¤¶È DB 0x21 ; bDescriptorType = 21h£¬±íÃ÷ÊÇHIDÃèÊö·û DB 0x00, 0x01 ; bcdHID = 0100£¬HID¹æ·¶°æ±¾Îª1.00 DB 0x00 ; bCountryCode = 0£¬Ó²¼þÉ豸ËùÔÚ¹ú¼ÒµÄ¹ú¼Ò´úÂ룬0±íʾδָÃ÷ DB 0x01 ; nNumDescriptors = 1£¬±íʾ֧³ÖµÄÃèÊö·ûÓÐ1¸ö£¬¼´Ò»¸ö±¨±íÃèÊö·û DB 0x22 ; bDescriptorType = 22h£¬ÃèÊö·ûÀà±ð£¬±íʾ֧³ÖµÄÃèÊö·ûÊDZ¨±íÃèÊö·û DB 0x3F, 0x00 ; wDescriptorLength = 63£¬±íʾ֧³ÖµÄ±¨±íÃèÊö·ûµÄ³¤¶È 8.3.5 ¶ËµãÃèÊö·û

¶ËµãÃèÊö·ûµÄ´úÂëÈçÏ¡£

;========================================= ; EndPoint descriptor ¶ËµãÃèÊö·û ;========================================= EndpointDescriptor0: DB 0x07 ; bLength = 7£¬¸ÃÃèÊö·û³¤¶È DB 0x05 ; bDescriptorType = 5£¬±íÃ÷ÊǶ˵ãÃèÊö·û DB 0x81 ; bEndpointAddress = 1000 0001b£¬±íʾ1ºÅÊäÈë¶Ëµã DB 0X03 ; bmAttributes = 00000011b£¬±íʾÖжÏÀàÐͶ˵ã DB 0x08, 0x00 ; wMaxPacketSize = 8£¬¶Ëµã·¢ËͺͽÓÊÕµÄ×î´ó°ü³ß´çΪ8 DB 10 ; bInterval = 10£¬±íʾÖж϶˵ãÂÖѯʱ¼ä¼ä¸ôΪ10ms 8.3.6 ×Ö·û´®ÃèÊö·û

×Ö·û´®ÃèÊö·ûµÄ´úÂëÈçÏ¡£

µÚ8Õ USB½Ó¿ÚHIDÉ豸 197

;========================================= ; String descriptor ×Ö·û´®ÃèÊö·û

;========================================= StringDescriptor0: DB 0x04 ; bLength = 4£¬×Ö·û´®ÃèÊö·û0µÄ³¤¶ÈΪ4 DB 0x03 ; bDescriptorType = 3£¬±íÃ÷ÊÇ×Ö·û´®ÃèÊö·û DB 0x09, 0x00 ; wLANGID = 0009h£¬±íÃ÷ÊÇÓ¢Óï DB 0x0A ; bLength = 10£¬×Ö·û´®ÃèÊö·ûµÄ³¤¶ÈΪ10 DB 0x03 ; bDescriptorType = 3£¬±íÃ÷ÊÇ×Ö·û´®ÃèÊö·û DB 0x41, 0x00, 0x43, 0x00, 0x4D, 0x00, 0x45, 0x00 ; bString = ¡°ACME¡°£¬Unicode±àÂëµÄ×Ö·û´® DB 0x22 ; bLength = 34£¬×Ö·û´®ÃèÊö·ûµÄ³¤¶ÈΪ34 DB 0x03 ; bDescriptorType = 3£¬±íÃ÷ÊÇ×Ö·û´®ÃèÊö·û DB 0x4C, 0x00, 0x6F, 0x00, 0x63, 0x00, 0x61, 0x00 DB 0x74, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x20, 0x00 DB 0x4B, 0x00, 0x65, 0x00, 0x79, 0x00, 0x62, 0x00 DB 0x6F, 0x00, 0x61, 0x00, 0x72, 0x00, 0x64, 0x00 ; bString = ¡°Locator Keyboard¡°£¬Unicode±àÂëµÄ×Ö·û´® DB 0x0E ; bLength = 14£¬×Ö·û´®ÃèÊö·ûµÄ³¤¶ÈΪ14 DB 0x03 ; bDescriptorType = 3£¬±íÃ÷ÊÇ×Ö·û´®ÃèÊö·û DB 0x41, 0x00, 0x42, 0x00, 0x43, 0x00, 0x21, 0x00 DB 0x22, 0x00, 0x23, 0x00 ; bString = ¡°ABC123¡°£¬Unicode±àÂëµÄ×Ö·û´®

8.3.7 ±¨±íÃèÊö·û

±¨±íÃèÊö·ûµÄ´úÂëÈçÏ¡£

;========================================= ;HID Reports Descriptor ±¨±íÃèÊö·û

;========================================= DB 0x05, 1 ; Usage Page (1: Generic Desktop) DB 0x09, 6 ; Usage (6: Keyboard) ±íʾ±¨±í¶¨ÒåµÄÊÇHID¼üÅÌ DB 0xA1, 1 ; Collection (1: Application) ====================¼¯ºÏ¿ªÊ¼ ; ; ÒÔ϶¨ÒåÁ˼üÅ̵ÄÐÞÊμüÊäÈ뱨±í£¬¹²ÓÐ8¸ö¼ü£¬×é³ÉÒ»¸ö×Ö½Ú ; Ó÷¨¼ûHID Usage TableÖеĵÚ10½ÚÖеļüÅÌÓ÷¨¶¨Òå DB 0x05, 7 ; Usage page (7: Key Codes) DB 0x19, 224 ; Usage Minimum (224) DB 0x29, 231 ; Usage Maximum (231) DB 0x15, 0 ; Logical Minimum (0) DB 0x25, 1 ; Logical Maximum (1) DB 0x75, 1 ; Report Size (1) DB 0x95, 8 ; Report Count (8) DB 0x81, 2 ; Input (Data,Variable,Absolute) ; ; ÒÔ϶¨ÒåÁËÒ»¸ö±£Áô×Ö½ÚµÄÊäÈ뱨±í DB 0x95, 1 ; Report Count (1) DB 0x75, 8 ; Report Size (8), DB 0x81, 1 ; Input (Constant) = Reserved Byte ; ; ÒÔ϶¨ÒåÁ˼üÅ̵ÄLEDָʾµÆÊä³ö±¨±íÏîÄ¿£¬¹²ÓÐ5¸öָʾµÆ ; Ó÷¨¼ûHID Usage TableÖеĵÚ11½ÚÖеÄLEDÓ÷¨¶¨Òå DB 0x95, 5 ; Report Count (5)

198 ¼ÆËã»ú¸ß¼¶½Ó¿Úʵ¼ù DB 0x75, 1 ; Report Size (1) DB 0x05, 8 ; Usage Page (Page# for LEDs) DB 0x19, 1 ; Usage Minimum (1) DB 0x29, 5 ; Usage Maximum (5) DB 0x91, 2 ; Output (Data, Variable, Absolute) ; ; ÒÔ϶¨ÒåÁË3¸öÌî³ä룬ÓëÇ°ÃæµÄ5¸öLEDָʾµÆÊý¾Ý×é³ÉÒ»¸öÍêÕûµÄ×Ö½Ú DB 0x95, 1 ; Report Count (1) DB 0x75, 3 ; Report Size (3) DB 0x91, 1 ; Output (Constant) ; ; ÒÔ϶¨ÒåÁ˼üÅ̵İ´¼üÖµÊäÈ뱨±íÏîÄ¿£¬¹²6¸ö×Ö½Ú£¬´æ·Å¼ü±àºÅ£¨0~101£© ; Ó÷¨¼ûHID Usage TableÖеĵÚ10½ÚÖеļüÅÌÓ÷¨¶¨Òå £» ÕâÑùµÄÉè¼Æ¿ÉÒÔÔÊÐíÒ»´ÎÊäÈë6¸ö°´¼üµÄ¼üÖµ DB 0x95, 6 ; Report Count (6) DB 0x75, 8 ; Report Size (8) DB 0x15, 0 ; Logical Minimum (0) DB 0x25, 101 ; Logical Maximum (101) DB 0x05, 7 ; Usage Page (7: Key Codes) DB 0x19, 0 ; Usage Minimum (0) DB 0x29, 101 ; Usage Maximum (101) DB 0x81, 0 ; Input (Data, Array)

DB 0xC0 ; End_Collection ================================ ¼¯ºÏ½áÊø

ͨ¹ýÉÏÃæµÄ±¨±íÃèÊö·ûµÄ¶¨Ò壬ȷ¶¨Á˼üÅ̵ÄÊäÈ뱨±íºÍÊä³ö±¨±íµÄÊý¾Ý¸ñʽ¡£ÆäÖÐÊäÈ뱨±í¹²8¸ö×Ö½Ú£¬Êä³ö±¨±íÖ»ÓÐ1¸ö×Ö½Ú¡£

¼üÖµ6 ×Ö½Ú7

¼üÖµ5 ×Ö½Ú6

¼üÖµ4 ¼üÖµ3 ¼üÖµ2 ×Ö½Ú3

¼üÖµ1 ±£Áô ÐÞÊμü ×Ö½Ú0

×Ö½Ú5 ×Ö½Ú4 ×Ö½Ú2 ×Ö½Ú1

ͼ8-4 ¼üÅ̵ÄÊäÈ뱨±í¸ñʽ

7~5 4 3 2 1 0 ×Ö½Ú0 Nnm Lock ָʾµÆ Caps Lock ָʾµÆ Scroll Lock ָʾµÆ Compose ָʾµÆ Kana ָʾµÆ ³£Êý£¬±£Áô ͼ8-5 ¼üÅ̵ÄÊä³ö±¨±í¸ñʽ

µÚ8Õ USB½Ó¿ÚHIDÉ豸 199

8.4 HIDµÄÌØ¶¨ÇëÇó

³ýÁËUSBÉ豸µÄ11¸ö±ê×¼ÇëÇóÍ⣬HID¹æ·¶ÁíÍ⻹¶¨ÒåÁË6¸öHIDÌØ¶¨¿ØÖÆÇëÇó¡£ËùÓеÄHIDÉ豸¶¼±ØÐëÖ§³ÖGet_ReportÇëÇó£¬Í¬Ê±Ö§³ÖÆô¶¯µÄÉ豸±ØÐëÖ§³ÖGet_ProtocolÇëÇóºÍSet_ProtocolÇëÇ󣬯äËûµÄÇëÇóÊÇ¿ÉÑ¡ÔñµÄ¡£Èç¹ûÉ豸ûÓÐÖжÏÊä³ö¶Ëµã£¬´ËÉ豸ÐèÒªÖ§³ÖGet_ReportÇëÇóÀ´´ÓÖ÷»ú¶ÁÈ¡Êý¾Ý¡£

ÔÚ¿ØÖÆ´«ÊäµÄÉèÖý׶εÄÊý¾Ý°üÖеÄ8¸ö×Ö½ÚÖеĵÚÒ»×Ö½ÚbmRequestTypeµÄ±àÂ뺬Òå²ÎÔĵÚ6ÕÂÖеÄUSB±ê×¼ÇëÇó¡£µÚ2¸ö×Ö½ÚbRequest¶¨ÒåÇëÇóµÄÄÚÈÝ¡£wValueÒòÇëÇóµÄ²»Í¬¶ø²»Í¬¡£wIndexÖ¸Ã÷HIDËùÔڵĽӿڡ£

±í8-10 HIDÌØ¶¨µÄÇëÇó bmRequestType bRequest £¨Öµ£© 1 01 00001b 0 01 00001b 1 01 00001b 0 01 00001b 1 01 00001b 0 01 00001b Get_Report (1) Set_Report (9) Get_Idle (2) Set_Idle (10) Get_Protocol (3) Set_Protocol (11) wValue wIndex wLength Êý¾Ý½×¶Î ±¨±í ±¨±í ÏÐÖÃʱ¼ä ÎÞ 0: Æô¶¯Ð­Òé 1: ±¨±íЭÒé ÎÞ ±¨±íÀàÐÍ£¬±¨±íID ½Ó¿Ú ±¨±í³¤¶È ±¨±íÀàÐÍ£¬±¨±íID ½Ó¿Ú ±¨±í³¤¶È 0£¬±¨±íID ½Ó¿Ú 1 0 1 0 ÏÐÖÃʱ¼ä£¬±¨±íID ½Ó¿Ú 0 0: Æô¶¯Ð­Òé 1: ±¨±íЭÒé ½Ó¿Ú ½Ó¿Ú 8.4.1 Get_ReportÇëÇó

Get_ReportµÄ×÷ÓÃÊÇÆôÓÃÖ÷»úʹÓÿØÖÆ´«Ê䣬À´´ÓÉ豸¶ÁÈ¡Êý¾Ý¡£

ÔÚʹÓÃʱwValue×ֶεĸß×Ö½ÚÊDZ¨±íÀàÐÍ£¬1±íʾInput±¨±í£¬2±íʾOutput±¨±í£¬3±íʾFeature±¨±í¡£wValueµÄµÍ×Ö½ÚÊDZ¨±íµÄReport ID£¬Èç¹ûûÓж¨ÒåReport ID£¬¸Ã×Ö½ÚΪÉè0¡£

ÔÚЯ´øÇëÇóµÄ¿ØÖÆ´«ÊäµÄÊý¾Ý½×¶Î£¬HIDÉ豸»Ø´«Ö¸¶¨µÄ±¨±íÄÚÈÝ¡£

HlD¹æ·¶²»½¨ÒéʹÓøÃÇëÇó»ñµÃδ¾­¶¨Ê±µÄÊý¾Ý£¬ÕâÑùµÄÊý¾Ý½¨ÒéʹÓÃÖжÏÊäÈë¹ÜµÀ»ñµÃ¡£

¸ÃÇëÇóÓÃÀ´È¡µÃÔÚÖ÷»ú³õʼ»¯É豸ʱµÄÌØÕ÷ÏîĿ״̬ºÍÆäËûÐÅÏ¢¡£Ê¹Óÿª»úЭÒéµÄÖ÷»ú¿ÉÒÔʹÓôËÇëÇóÀ´»ñµÃ°´¼ü»òÊó±êÊý¾Ý¡£

8.4.2 Set_ReportÇëÇó

Set_ReportÇëÇóµÄ²ÎÊýº¬ÒåºÍGet_ReportÒ»Ñù£¬µ«Set_ReportÇëÇóµÄÊý¾Ý·½ÏòÓëGet_ReportÏà·´£¬ÔÚºóÃæµÄÊý¾Ý½×¶Î£¬Ö÷»ú´«Ëͱ¨±íµ½HIDÉ豸£¬ÕâÑùµÄÊä³ö±¨±í¿ÉÒÔÓÃÓÚ¸´Î»É豸µÄ¿ØÖÆ£¬¸´Î»²úÉúµÄЧ¹ûÈ¡¾öÓÚ¶ÔÓ¦µÄ¿ØÖƵÄÀàÐÍÊÇÏà¶Ô£¨Reletive£©µÄ»¹ÊǾø¶Ô£¨Absolute£©µÄ¡£

8.4.3 Set_IdleÇëÇó

Set_IdleÇëÇóµÄ×÷ÓÃÊǾ²Ä¬Ò»¸öÔÚÖжÏÊäÈë¹ÜµÀµÄÌØ¶¨µÄ±¨±í£¬Ö±µ½Ò»¸ö·¢ÉúÒ»¸öÏà¹ØµÄʼþ»ò¹ýÈ¥Á˹涨µÄʱ¼ä£¬µ±Êý¾Ý´ÓÉÏÒ»¸ö±¨±íºóûÓиıäʱ£¬¿ÉÒÔͨ¹ýÏÞÖÆÖжÏÊäÈë¶ËµãµÄ±¨±íƵÂÊÀ´½ÚÊ¡´«Êä´ø¿í¡£HIDÉ豸²»ÊDZØÐèÖ§³Ö´ËÇëÇó¡£

wValue×ֶεĸß×Ö½ÚÊÇÉèÖõÄÏÐÖÃʱ¼ä£¬ÊDZ¨±íÖ®¼äµÄ×î´ó¼ä¸ôʱ¼ä¡£¸Ã×Ö½ÚΪ0

200 ¼ÆËã»ú¸ß¼¶½Ó¿Úʵ¼ù

±íʾÏÐÖÃʱ¼äΪÎÞÏÞ³¤£¬ÔÚÕâÖÖÇé¿öÏ£¬É豸ֻÓÐÔÚ±¨±íÊý¾ÝÓиıäʱ²Å´«Ëͱ¨±í£¬·ñÔòÉ豸´«»ØÒ»¸öNAK¡£

wValue×ֶεĵÍ×Ö½Úָʾ´ËÇëÇóÓ¦Óõı¨±íµÄReport ID¡£Èç¹ûµÍ×Ö½ÚÊÇ0£¬´ËÇëÇóÓ¦Óõ½É豸µÄËùÓÐÊäÈ뱨±í¡£

ÏÐÖÃʱ¼äÒÔ4msΪµ¥Î»£¬·¶Î§ÔÚ4ms¡«1020msÖ®¼ä¡£Èç¹û±¨±íµÄÊý¾Ý×Ô´ÓÉÏÒ»´Î±¨±íºóÓиı䣬»òÊǽÓÊÕµ½Ò»¸öÇëÇó£¬É豸»á´«ËÍÒ»¸ö±¨±í¡£

Èç¹û±¨±íµÄÊý¾ÝûÓиı䣬¶øÇÒ´ÓÉÏÒ»´Î±¨±íºó¹ýÈ¥µÄʱ¼ä×ÔÉÐδ´ïµ½¹æ¶¨µÄÏÐÖÃʱ¼ä£¬É豸»á´«»ØÒ»¸öNAK¡£Èç¹û±¨±íµÄÊý¾ÝûÓиı䣬¶øÇÒ³ÖÐøÊ±¼äÒѾ­´ïµ½µÄÏÐÖÃʱ¼ä£¬É豸»á´«ËÍÒ»¸ö±¨±í¡£

ÏÐÖÃʱ¼äÉèÖÃΪ0±íʾÎÞÏÞ³¤µÄÏÐÖÃʱ¼ä£¬É豸ֻÓÐÔÚ±¨±íµÄÊý¾ÝÓиıäʱ²Å»á´«ËÍÒ»¸ö±¨±í£¬¶ÔÓÚÆäËûµÄÖжÏÊäÈëÇëÇóÔòÊÇ´«»ØNAK¡£

ÔÚ¼ì²âHIDÉ豸ʱ£¬WndowsµÄHIDÇý¶¯³ÌÐò»áÊÔͼ½«ÏÐÖÃʱ¼äÉèÖóÉ0¡£Èç¹ûHIDÉ豸²»Ö§³Ö´ËÇëÇó£¬Ö÷»ú»áÊÕµ½´«»ØµÄStall¡£

8.4.4 Get_IdleÇëÇó

Get_IdleÇëÇóµÄ×÷ÓÃÊǹýµÄÉ豸µÄµ±Ç°ÏÐÖÃʱ¼ä£¬ÔÚÊý¾Ý½×¶Î£¬HIDÉ豸»Ø´«Ò»¸ö×Ö½ÚµÄÏÐÖÃʱ¼äÖµ¡£

8.4.5 Get_ProtocolÇëÇó

Get_ProtocolÇëÇóµÄ×÷ÓÃÊÇÖ÷»ú»ñÈ¡É豸Ŀǰ×÷ÓõÄÊÇÆô¶¯Ð­Ò黹ÊDZ¨±íЭÒé¡£ ÔÚÊý¾Ý½×¶ÎÖÐÉ豸»Ø´«µÄ1¸ö×Ö½ÚÐÅÏ¢°üÖеÄÊý¾ÝֵΪ0±íʾÆô¶¯Ð­Ò飬Ϊ1±íʾ±¨±íЭÒé¡£

Æô¶¯É豸±ØÐèÖ§³Ö¸ÃÇëÇó¡£

8.4.6 Set_ProtocolÇëÇó

Set_ProtocolµÄ×÷ÓÃÊÇÖ÷»úÖ¸¶¨É豸ʹÓÃÆô¶¯Ð­Òé»ò±¨±íЭÒé¡£

ÔÚÊý¾Ý½×¶ÎÖÐÖ÷»ú´«Ë͵Ä1¸ö×Ö½ÚÐÅÏ¢°üÖеÄÊý¾ÝֵΪ0±íʾָ¶¨Æô¶¯Ð­Ò飬Ϊ1±íʾָ¶¨±¨±íЭÒé¡£

Æô¶¯É豸±ØÐèÖ§³Ö¸ÃÇëÇó¡£

8.5 HID³ÌÐòÉè¼Æ

HIDÉ豸ÊÇWindowsϵͳÌṩÁËÍêÉÆÖ§³ÖµÄÒ»À࣬ӦÓóÌÐò¿ÉÒÔͨ¹ý±ê×¼µÄAPIº¯Êýµ÷Óã¬ÊµÏÖÓëHIDÉ豸µÄͨÐÅ¡£WindowsϵͳÌṩÁ˼¸Ç§¸öAPIº¯Êý£¬×÷ΪӦÓóÌÐòÓë²Ù×÷ϵͳµÄ½Ó¿Ú£¬ÓëHIDÏà¹ØµÄAPIº¯Êý±»·â×°ÔÚhid.dll¡¢setupapi.dllºÍkernal32.dllÎļþÖС£

8.5.1 HID·ÃÎÊʹÓõÄAPIº¯Êý

Îļþhid.dllÖÐÌṩÁ˺ܶà¸öAPI£¬ÒòΪÓëHIDÉ豸ͨÐÅÓÐÒ»¶¨µÄ¸´ÔÓÐÔ¡£Ê×ÏÈ£¬ÔÚÓ¦ÓóÌÐòÓëHID´«ÊäÊý¾Ý֮ǰ£¬Ó¦ÓóÌÐò±ØÐëÏÈʶ±ð¸ÃÉ豸²¢ÇÒ¶ÁÈ¡ËüµÄ±¨±íÐÅÏ¢£¬ÕâЩ¶¯×÷ÐèÒªµ÷Óöà¸öAPIº¯Êý²Å¿ÉÒÔʵÏÖ¡£Ó¦ÓóÌÐòÐèҪѰÕÒÁ¬½Óµ½ÏµÍ³ÉϵÄÊÇÄÄЩHIDÉ豸£¬È»ºó¶Áȡÿ¸öÉ豸µÄÐÅÏ¢Ö±µ½²éÕÒµ½ËùÐèµÄÊôÐÔ¡£Èç¹ûÊǿͻ§»¯µÄÉ豸£¬Ó¦ÓóÌÐò¿ÉÒÔѰÕÒÌØ¶¨µÄ³§ÉÌÓë²úÆ·ID£¬»òÕßÓ¦ÓóÌÐò¿ÉÒÔѰÕÒÌØ¶¨ÀàÐ͵ÄÉ豸£¬ÀýÈç¼üÅÌ»òÊó±ê¡£

ÁªÏµ¿Í·þ£º779662525#qq.com(#Ìæ»»Îª@) ËÕICP±¸20003344ºÅ-4