搜索
bottom↓
回复: 11

圈圈中USB HID鼠标开发的一个问题

[复制链接]

出0入0汤圆

发表于 2010-4-12 10:30:24 | 显示全部楼层 |阅读模式
买了圈圈的书,带了PCB板,很顺利地,焊好板,烧程序,一调就通。真舒服!整了那个USBMouse的试了下,用SSCOM接收返回来的信息,有些疑问。
下面是通过串口返回来的调试信息
缘何会有多次获取同一种信息的命令?
在第一次获取设备描述符,主机只接收前8BYTE,设置地址后会再一次获取全部16BYTE的设备描述符这个可以理解
但为什么会有多次获取"字符串描述符呢(语言ID)"和"字符串描述符呢(产品序列号)"还有"字符串描述符呢(产品描述)"?
这个过程只是一个特例还是全部USB HID鼠标都一样的?

断开USB连接。
连接USB。
USB总线复位。
USB总线挂起。
USB总线挂起。
USB总线复位。
USB总线挂起。
USB总线挂起。
USB总线复位。

USB端点0输出中断。
读端点0缓冲区8字节。
0x80 0x06 0x00 0x01 0x00 0x00 0x40 0x00
USB标准输入请求:获取描述符——设备描述符。

写端点0缓冲区16字节。
0x12 0x01 0x10 0x01 0x00 0x00 0x00 0x10 0x88 0x88 0x01 0x00 0x00 0x01 0x01 0x02
USB端点0输入中断。
写端点0缓冲区2字节。
0x03 0x01
USB总线复位。

USB端点0输出中断。
读端点0缓冲区8字节。
0x00 0x05 0x01 0x00 0x00 0x00 0x00 0x00
USB标准输出请求:设置地址。地址为:0x01
写端点0缓冲区0字节。
USB端点0输入中断。

USB端点0输出中断。
读端点0缓冲区8字节。
0x80 0x06 0x00 0x01 0x00 0x00 0x12 0x00
USB标准输入请求:获取描述符——设备描述符。

写端点0缓冲区16字节。
0x12 0x01 0x10 0x01 0x00 0x00 0x00 0x10 0x88 0x88 0x01 0x00 0x00 0x01 0x01 0x02
USB端点0输入中断。
写端点0缓冲区2字节。
0x03 0x01
USB端点0输入中断。

USB端点0输出中断。
读端点0缓冲区8字节。
0x80 0x06 0x00 0x02 0x00 0x00 0x09 0x00
USB标准输入请求:获取描述符——配置描述符。

写端点0缓冲区9字节。
0x09 0x02 0x22 0x00 0x01 0x01 0x00 0x80 0x32
USB端点0输入中断。

USB端点0输出中断。
读端点0缓冲区8字节。
0x80 0x06 0x00 0x03 0x00 0x00 0xFF 0x00
USB标准输入请求:获取描述符——字符串描述符(语言ID)。

写端点0缓冲区4字节。
0x04 0x03 0x09 0x04
USB端点0输入中断。

USB端点0输出中断。
读端点0缓冲区8字节。
0x80 0x06 0x03 0x03 0x09 0x04 0xFF 0x00
USB标准输入请求:获取描述符——字符串描述符(产品序列号)。

写端点0缓冲区16字节。
0x16 0x03 0x32 0x00 0x30 0x00 0x30 0x00 0x38 0x00 0x2D 0x00 0x30 0x00 0x37 0x00
USB端点0输入中断。
写端点0缓冲区6字节。
0x2D 0x00 0x30 0x00 0x37 0x00
USB端点0输入中断。

USB端点0输出中断。
读端点0缓冲区8字节。
0x80 0x06 0x00 0x02 0x00 0x00 0xFF 0x00
USB标准输入请求:获取描述符——配置描述符。

写端点0缓冲区16字节。
0x09 0x02 0x22 0x00 0x01 0x01 0x00 0x80 0x32 0x09 0x04 0x00 0x00 0x01 0x03 0x01
USB端点0输入中断。
写端点0缓冲区16字节。
0x02 0x00 0x09 0x21 0x10 0x01 0x21 0x01 0x22 0x34 0x00 0x07 0x05 0x81 0x03 0x10
USB端点0输入中断。
写端点0缓冲区2字节。
0x00 0x0A
USB端点0输入中断。

USB端点0输出中断。
读端点0缓冲区8字节。
0x80 0x06 0x00 0x03 0x00 0x00 0xFF 0x00
USB标准输入请求:获取描述符——字符串描述符(语言ID)。

写端点0缓冲区4字节。
0x04 0x03 0x09 0x04
USB端点0输入中断。

USB端点0输出中断。
读端点0缓冲区8字节。
0x80 0x06 0x02 0x03 0x09 0x04 0xFF 0x00
USB标准输入请求:获取描述符——字符串描述符(产品描述)。

写端点0缓冲区16字节。
0x22 0x03 0x0A 0x30 0x08 0x57 0x08 0x57 0x59 0x65 0x60 0x4F 0xA9 0x73 0x55 0x00
USB端点0输入中断。
写端点0缓冲区16字节。
0x53 0x00 0x42 0x00 0x0B 0x30 0x4B 0x4E 0x55 0x00 0x53 0x00 0x42 0x00 0x20 0x9F
USB端点0输入中断。
写端点0缓冲区2字节。
0x07 0x68
USB端点0输入中断。

USB端点0输出中断。
读端点0缓冲区8字节。
0x80 0x06 0x00 0x03 0x00 0x00 0xFF 0x00
USB标准输入请求:获取描述符——字符串描述符(语言ID)。

写端点0缓冲区4字节。
0x04 0x03 0x09 0x04
USB端点0输入中断。

USB端点0输出中断。
读端点0缓冲区8字节。
0x80 0x06 0x02 0x03 0x09 0x04 0xFF 0x00
USB标准输入请求:获取描述符——字符串描述符(产品描述)。

写端点0缓冲区16字节。
0x22 0x03 0x0A 0x30 0x08 0x57 0x08 0x57 0x59 0x65 0x60 0x4F 0xA9 0x73 0x55 0x00
USB端点0输入中断。
写端点0缓冲区16字节。
0x53 0x00 0x42 0x00 0x0B 0x30 0x4B 0x4E 0x55 0x00 0x53 0x00 0x42 0x00 0x20 0x9F
USB端点0输入中断。
写端点0缓冲区2字节。
0x07 0x68
USB端点0输入中断。

USB端点0输出中断。
读端点0缓冲区8字节。
0x80 0x06 0x00 0x01 0x00 0x00 0x12 0x00
USB标准输入请求:获取描述符——设备描述符。

写端点0缓冲区16字节。
0x12 0x01 0x10 0x01 0x00 0x00 0x00 0x10 0x88 0x88 0x01 0x00 0x00 0x01 0x01 0x02
USB端点0输入中断。
写端点0缓冲区2字节。
0x03 0x01
USB端点0输入中断。

USB端点0输出中断。
读端点0缓冲区8字节。
0x80 0x06 0x00 0x02 0x00 0x00 0x09 0x00
USB标准输入请求:获取描述符——配置描述符。

写端点0缓冲区9字节。
0x09 0x02 0x22 0x00 0x01 0x01 0x00 0x80 0x32
USB端点0输入中断。

USB端点0输出中断。
读端点0缓冲区8字节。
0x80 0x06 0x00 0x02 0x00 0x00 0x22 0x00
USB标准输入请求:获取描述符——配置描述符。

写端点0缓冲区16字节。
0x09 0x02 0x22 0x00 0x01 0x01 0x00 0x80 0x32 0x09 0x04 0x00 0x00 0x01 0x03 0x01
USB端点0输入中断。
写端点0缓冲区16字节。
0x02 0x00 0x09 0x21 0x10 0x01 0x21 0x01 0x22 0x34 0x00 0x07 0x05 0x81 0x03 0x10
USB端点0输入中断。
写端点0缓冲区2字节。
0x00 0x0A
USB端点0输入中断。

USB端点0输出中断。
读端点0缓冲区8字节。
0x00 0x09 0x01 0x00 0x00 0x00 0x00 0x00
USB标准输出请求:设置配置。
写端点0缓冲区0字节。
USB端点0输入中断。

USB端点0输出中断。
读端点0缓冲区8字节。
0x21 0x0A 0x00 0x00 0x00 0x00 0x00 0x00
USB类输出请求:设置空闲。
写端点0缓冲区0字节。
USB端点0输入中断。

USB端点0输出中断。
读端点0缓冲区8字节。
0x81 0x06 0x00 0x22 0x00 0x00 0x74 0x00
USB标准输入请求:获取描述符——报告描述符。
写端点0缓冲区16字节。
0x05 0x01 0x09 0x02 0xA1 0x01 0x09 0x01 0xA1 0x00 0x05 0x09 0x19 0x01 0x29 0x03
USB端点0输入中断。
写端点0缓冲区16字节。
0x15 0x00 0x25 0x01 0x95 0x03 0x75 0x01 0x81 0x02 0x95 0x01 0x75 0x05 0x81 0x03
USB端点0输入中断。
写端点0缓冲区16字节。
0x05 0x01 0x09 0x30 0x09 0x31 0x09 0x38 0x15 0x81 0x25 0x7F 0x75 0x08 0x95 0x03
USB端点0输入中断。
写端点0缓冲区4字节。
0x81 0x06 0xC0 0xC0
USB端点0输入中断。

USB端点0输出中断。
读端点0缓冲区0字节。

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

 楼主| 发表于 2010-4-12 11:26:43 | 显示全部楼层
以下是圈圈程序中定义的各种数据,包括设备描述符,语言描述符,ID描述,产品描述,配置描述等





code uint8 DeviceDescriptor[0x12]=  //设备描述符为18字节
{
//bLength字段。设备描述符的长度为18(0x12)字节
0x12,

//bDescriptorType字段。设备描述符的编号为0x01
0x01,

//bcdUSB字段。这里设置版本为USB1.1,即0x0110。
//由于是小端结构,所以低字节在先,即0x10,0x01。
0x10,
0x01,

//bDeviceClass字段。我们不在设备描述符中定义设备类,
//而在接口描述符中定义设备类,所以该字段的值为0。
0x00,

//bDeviceSubClass字段。bDeviceClass字段为0时,该字段也为0。
0x00,

//bDeviceProtocol字段。bDeviceClass字段为0时,该字段也为0。
0x00,

//bMaxPacketSize0字段。PDIUSBD12的端点0大小的16字节。
0x10,

//idVender字段。厂商ID号,我们这里取0x8888,仅供实验用。
//实际产品不能随便使用厂商ID号,必须跟USB协会申请厂商ID号。
//注意小端模式,低字节在先。
0x88,
0x88,

//idProduct字段。产品ID号,由于是第一个实验,我们这里取0x0001。
//注意小端模式,低字节应该在前。
0x01,
0x00,

//bcdDevice字段。我们这个USB鼠标刚开始做,就叫它1.0版吧,即0x0100。
//小端模式,低字节在先。
0x00,
0x01,

//iManufacturer字段。厂商字符串的索引值,为了方便记忆和管理,
//字符串索引就从1开始吧。
0x01,

//iProduct字段。产品字符串的索引值。刚刚用了1,这里就取2吧。
//注意字符串索引值不要使用相同的值。
0x02,

//iSerialNumber字段。设备的序列号字符串索引值。
//这里取3就可以了。
0x03,

//bNumConfigurations字段。该设备所具有的配置数。
//我们只需要一种配置就行了,因此该值设置为1。
0x01
};
//////////////////////////设备描述符完毕//////////////////////////////

//USB报告描述符的定义
code uint8 ReportDescriptor[]=
{
//每行开始的第一字节为该条目的前缀,前缀的格式为:
//D7~D4:bTag。D3~D2:bType;D1~D0:bSize。以下分别对每个条目注释。

//这是一个全局(bType为1)条目,选择用途页为普通桌面Generic Desktop Page(0x01)
//后面跟一字节数据(bSize为1),后面的字节数就不注释了,
//自己根据bSize来判断。
0x05, 0x01, // USAGE_PAGE (Generic Desktop)

//这是一个局部(bType为2)条目,说明接下来的应用集合用途用于鼠标
0x09, 0x02, // USAGE (Mouse)

//这是一个主条目(bType为0)条目,开集合,后面跟的数据0x01表示
//该集合是一个应用集合。它的性质在前面由用途页和用途定义为
//普通桌面用的鼠标。
0xa1, 0x01, // COLLECTION (Application)

//这是一个局部条目。说明用途为指针集合
0x09, 0x01, //   USAGE (Pointer)

//这是一个主条目,开集合,后面跟的数据0x00表示该集合是一个
//物理集合,用途由前面的局部条目定义为指针集合。
0xa1, 0x00, //   COLLECTION (Physical)

//这是一个全局条目,选择用途页为按键(Button Page(0x09))
0x05, 0x09, //     USAGE_PAGE (Button)

//这是一个局部条目,说明用途的最小值为1。实际上是鼠标左键。
0x19, 0x01, //     USAGE_MINIMUM (Button 1)

//这是一个局部条目,说明用途的最大值为3。实际上是鼠标中键。
0x29, 0x03, //     USAGE_MAXIMUM (Button 3)

//这是一个全局条目,说明返回的数据的逻辑值(就是我们返回的数据域的值啦)
//最小为0。因为我们这里用Bit来表示一个数据域,因此最小为0,最大为1。
0x15, 0x00, //     LOGICAL_MINIMUM (0)

//这是一个全局条目,说明逻辑值最大为1。
0x25, 0x01, //     LOGICAL_MAXIMUM (1)

//这是一个全局条目,说明数据域的数量为三个。
0x95, 0x03, //     REPORT_COUNT (3)

//这是一个全局条目,说明每个数据域的长度为1个bit。
0x75, 0x01, //     REPORT_SIZE (1)

//这是一个主条目,说明有3个长度为1bit的数据域(数量和长度
//由前面的两个全局条目所定义)用来做为输入,
//属性为:Data,Var,Abs。Data表示这些数据可以变动,Var表示
//这些数据域是独立的,每个域表示一个意思。Abs表示绝对值。
//这样定义的结果就是,第一个数据域bit0表示按键1(左键)是否按下,
//第二个数据域bit1表示按键2(右键)是否按下,第三个数据域bit2表示
//按键3(中键)是否按下。
0x81, 0x02, //     INPUT (Data,Var,Abs)

//这是一个全局条目,说明数据域数量为1个
0x95, 0x01, //     REPORT_COUNT (1)

//这是一个全局条目,说明每个数据域的长度为5bit。
0x75, 0x05, //     REPORT_SIZE (5)

//这是一个主条目,输入用,由前面两个全局条目可知,长度为5bit,
//数量为1个。它的属性为常量(即返回的数据一直是0)。
//这个只是为了凑齐一个字节(前面用了3个bit)而填充的一些数据
//而已,所以它是没有实际用途的。
0x81, 0x03, //     INPUT (Cnst,Var,Abs)

//这是一个全局条目,选择用途页为普通桌面Generic Desktop Page(0x01)
0x05, 0x01, //     USAGE_PAGE (Generic Desktop)

//这是一个局部条目,说明用途为X轴
0x09, 0x30, //     USAGE (X)

//这是一个局部条目,说明用途为Y轴
0x09, 0x31, //     USAGE (Y)

//这是一个局部条目,说明用途为滚轮
0x09, 0x38, //     USAGE (Wheel)

//下面两个为全局条目,说明返回的逻辑最小和最大值。
//因为鼠标指针移动时,通常是用相对值来表示的,
//相对值的意思就是,当指针移动时,只发送移动量。
//往右移动时,X值为正;往下移动时,Y值为正。
//对于滚轮,当滚轮往上滚时,值为正。
0x15, 0x81, //     LOGICAL_MINIMUM (-127)
0x25, 0x7f, //     LOGICAL_MAXIMUM (127)

//这是一个全局条目,说明数据域的长度为8bit。
0x75, 0x08, //     REPORT_SIZE (8)

//这是一个全局条目,说明数据域的个数为3个。
0x95, 0x03, //     REPORT_COUNT (3)

//这是一个主条目。它说明这三个8bit的数据域是输入用的,
//属性为:Data,Var,Rel。Data说明数据是可以变的,Var说明
//这些数据域是独立的,即第一个8bit表示X轴,第二个8bit表示
//Y轴,第三个8bit表示滚轮。Rel表示这些值是相对值。
0x81, 0x06, //     INPUT (Data,Var,Rel)

//下面这两个主条目用来关闭前面的集合用。
//我们开了两个集合,所以要关两次。bSize为0,所以后面没数据。
0xc0,       //   END_COLLECTION
0xc0        // END_COLLECTION
};
//通过上面的报告描述符的定义,我们知道返回的输入报告具有4字节。
//第一字节的低3位用来表示按键是否按下的,高5位为常数0,无用。
//第二字节表示X轴改的变量,第三字节表示Y轴的改变量,第四字节表示
//滚轮的改变量。我们在中断端点1中应该要按照上面的格式返回实际的
//鼠标数据。
///////////////////////////报告描述符完毕////////////////////////////

//USB配置描述符集合的定义
//配置描述符总长度为9+9+9+7字节
code uint8 ConfigurationDescriptor[9+9+9+7]=
{
/***************配置描述符***********************/
//bLength字段。配置描述符的长度为9字节。
0x09,

//bDescriptorType字段。配置描述符编号为0x02。
0x02,

//wTotalLength字段。配置描述符集合的总长度,
//包括配置描述符本身、接口描述符、类描述符、端点描述符等。
sizeof(ConfigurationDescriptor)&0xFF, //低字节
(sizeof(ConfigurationDescriptor)>>8)&0xFF, //高字节

//bNumInterfaces字段。该配置包含的接口数,只有一个接口。
0x01,

//bConfiguration字段。该配置的值为1。
0x01,

//iConfigurationz字段,该配置的字符串索引。这里没有,为0。
0x00,

//bmAttributes字段,该设备的属性。由于我们的板子是总线供电的,
//并且我们不想实现远程唤醒的功能,所以该字段的值为0x80。
0x80,

//bMaxPower字段,该设备需要的最大电流量。由于我们的板子
//需要的电流不到100mA,因此我们这里设置为100mA。由于每单位
//电流为2mA,所以这里设置为50(0x32)。
0x32,

/*******************接口描述符*********************/
//bLength字段。接口描述符的长度为9字节。
0x09,

//bDescriptorType字段。接口描述符的编号为0x04。
0x04,

//bInterfaceNumber字段。该接口的编号,第一个接口,编号为0。
0x00,

//bAlternateSetting字段。该接口的备用编号,为0。
0x00,

//bNumEndpoints字段。非0端点的数目。由于USB鼠标只需要一个
//中断输入端点,因此该值为1。
0x01,

//bInterfaceClass字段。该接口所使用的类。USB鼠标是HID类,
//HID类的编码为0x03。
0x03,

//bInterfaceSubClass字段。该接口所使用的子类。在HID1.1协议中,
//只规定了一种子类:支持BIOS引导启动的子类。
//USB键盘、鼠标属于该子类,子类代码为0x01。
0x01,

//bInterfaceProtocol字段。
//则协议可选择鼠标和键盘。键盘代码为0x01,鼠标代码为0x02。
0x02,

//iConfiguration字段。
0x00,

/******************HID描述符************************/
//bLength字段。
0x09,

//bDescriptorType字段。
0x21,

//bcdHID字段。
0x10,
0x01,

//bCountyCode字段。
0x21,

//bNumDescriptors字段。
0x01,

//bDescriptorType字段。
0x22,

//bDescriptorLength字段。
sizeof(ReportDescriptor)&0xFF,
(sizeof(ReportDescriptor)>>8)&0xFF,

/**********************端点描述符***********************/
//bLength字段。端点描述符长度为7字节。
0x07,

//bDescriptorType字段。端点描述符编号为0x05。
0x05,

//bEndpointAddress字段。
0x81,

//bmAttributes字段。
//该端点为中断端点。
0x03,

//wMaxPacketSize字段。
0x10,
0x00,

0x0A
};
////////////////////////配置描述符集合完毕//////////////////////////

/************************语言ID的定义********************/
code uint8 LanguageId[4]=
{
0x04, //本描述符的长度
0x03, //字符串描述符
//0x0409为美式英语的ID
0x09,
0x04
};
////////////////////////语言ID完毕//////////////////////////////////

code uint8 ManufacturerStringDescriptor[82]={
82,         //该描述符的长度为82字节
0x03,       //字符串描述符的类型编码为0x03
0x35, 0x75, //电
0x11, 0x81, //脑
0x08, 0x57, //圈
0x08, 0x57, //圈
0x84, 0x76, //的
0x55, 0x00, //U
0x53, 0x00, //S
0x42, 0x00, //B
0x13, 0x4e, //专
0x3a, 0x53, //区
0x20, 0x00, //
0x48, 0x00, //H
0x74, 0x00, //t
0x74, 0x00, //t
0x70, 0x00, //p
0x3a, 0x00, //:
0x2f, 0x00, ///
0x2f, 0x00, ///
0x67, 0x00, //g
0x72, 0x00, //r
0x6f, 0x00, //o
0x75, 0x00, //u
0x70, 0x00, //p
0x2e, 0x00, //.
0x65, 0x00, //e
0x64, 0x00, //d
0x6e, 0x00, //n
0x63, 0x00, //c
0x68, 0x00, //h
0x69, 0x00, //i
0x6e, 0x00, //n
0x61, 0x00, //a
0x2e, 0x00, //.
0x63, 0x00, //c
0x6f, 0x00, //o
0x6d, 0x00, //m
0x2f, 0x00, ///
0x39, 0x00, //9
0x33, 0x00, //3
0x2f, 0x00  ///
};
/////////////////////////厂商字符串结束/////////////////////////////

//字符串“《圈圈教你玩USB》之USB鼠标”的Unicode编码
//8位小端格式
code uint8 ProductStringDescriptor[34]={
34,         //该描述符的长度为34字节
0x03,       //字符串描述符的类型编码为0x03
0x0a, 0x30, //《
0x08, 0x57, //圈
0x08, 0x57, //圈
0x59, 0x65, //教
0x60, 0x4f, //你
0xa9, 0x73, //玩
0x55, 0x00, //U
0x53, 0x00, //S
0x42, 0x00, //B
0x0b, 0x30, //》
0x4b, 0x4e, //之
0x55, 0x00, //U
0x53, 0x00, //S
0x42, 0x00, //B
0x20, 0x9f, //鼠
0x07, 0x68  //标
};
////////////////////////产品字符串结束////////////////////////////

//字符串“2008-07-07”的Unicode编码
//8位小端格式
code uint8 SerialNumberStringDescriptor[22]={
22,         //该描述符的长度为22字节
0x03,       //字符串描述符的类型编码为0x03
0x32, 0x00, //2
0x30, 0x00, //0
0x30, 0x00, //0
0x38, 0x00, //8
0x2d, 0x00, //-
0x30, 0x00, //0
0x37, 0x00, //7
0x2d, 0x00, //-
0x30, 0x00, //0
0x37, 0x00  //7
};

出0入0汤圆

 楼主| 发表于 2010-4-12 13:34:32 | 显示全部楼层
没人顶自己顶

出0入0汤圆

发表于 2010-4-27 15:17:04 | 显示全部楼层
正在学习当中,我的板子还调补通呢,不能读取D12的ID,不知怎么回事。。。

出0入0汤圆

 楼主| 发表于 2010-7-1 16:42:51 | 显示全部楼层
我的倒是蛮顺利就调通了,现在已经把代码移到ATMEGA16里面,用的是Myhid里面的代码修改的!圈圈写的代码很好,容易移植!现在用VC自己整了一个通信的软件,也能实现数据传输了,下一步就要考虑怎么实现数据快速度传输了,兄弟,加油

出0入0汤圆

发表于 2010-8-3 16:53:59 | 显示全部楼层
我也买了这本书,可是好像有很多问题吖!
书上面经常代码不全。

出0入0汤圆

发表于 2010-8-9 13:07:49 | 显示全部楼层
那是因为我没有细看,现在越看越佩服圈圈了。。。
罚自己面壁去。。。

出0入0汤圆

发表于 2011-3-25 12:05:36 | 显示全部楼层
主要是因为不同层的软件需要获取这些信息。

出0入0汤圆

发表于 2011-12-10 11:11:06 | 显示全部楼层
mark  USB  圈圈的资料

出0入0汤圆

发表于 2011-12-11 19:47:11 | 显示全部楼层
标记。

出0入0汤圆

发表于 2011-12-14 00:09:13 | 显示全部楼层
mark!

出0入0汤圆

发表于 2013-5-18 10:37:10 | 显示全部楼层
crazydog2009 发表于 2010-7-1 16:42
我的倒是蛮顺利就调通了,现在已经把代码移到ATMEGA16里面,用的是Myhid里面的代码修改的!圈圈写的代码很 ...

恩,快速传送数据,是怎么搞的呀?
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-24 01:34

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表