在host是window的情形下,从window发送数据给adb,这样就主从就可以通信了,但是如果adb那边在做耗时的事情,没有及时响应fastboo的命令,这种情形下window好等多久呢?答案是5s。code如下。超过5s就认为通信失败.这种情形下一般要提供处理接受window 发送过来命令进程的优先级,以减少响应的时间
xref: /system/core/fastboot/usb_windows.c
int usb_write(usb_handle* handle, const void* data, int len) {
156 unsigned long time_out = 5000;
157 unsigned long written = 0;
158 unsigned count = 0;
159 int ret;
160
161 DBG("usb_write %d\n", len);
162 if (NULL != handle) {
163 // Perform write
164 while(len > 0) {
165 int xfer = (len > MAX_USBFS_BULK_SIZE) ? MAX_USBFS_BULK_SIZE : len;
166 ret = AdbWriteEndpointSync(handle->adb_write_pipe,
167 (void*)data,
168 (unsigned long)xfer,
169 &written,
170 time_out);
171 errno = GetLastError();
172 DBG("AdbWriteEndpointSync returned %d, errno: %d\n", ret, errno);
173 if (ret == 0) {
174 // assume ERROR_INVALID_HANDLE indicates we are disconnected
175 if (errno == ERROR_INVALID_HANDLE)
176 usb_kick(handle);
177 return -1;
178 }
179
180 count += written;
181 len -= written;
182 data = (const char *)data + written;
183
184 if (len == 0)
185 return count;
186 }
187 } else {
188 DBG("usb_write NULL handle\n");
189 SetLastError(ERROR_INVALID_HANDLE);
190 }
191
192 DBG("usb_write failed: %d\n", errno);
193
194 return -1;
195}
xref: /system/core/fastboot/usb_windows.c
int usb_write(usb_handle* handle, const void* data, int len) {
156 unsigned long time_out = 5000;
157 unsigned long written = 0;
158 unsigned count = 0;
159 int ret;
160
161 DBG("usb_write %d\n", len);
162 if (NULL != handle) {
163 // Perform write
164 while(len > 0) {
165 int xfer = (len > MAX_USBFS_BULK_SIZE) ? MAX_USBFS_BULK_SIZE : len;
166 ret = AdbWriteEndpointSync(handle->adb_write_pipe,
167 (void*)data,
168 (unsigned long)xfer,
169 &written,
170 time_out);
171 errno = GetLastError();
172 DBG("AdbWriteEndpointSync returned %d, errno: %d\n", ret, errno);
173 if (ret == 0) {
174 // assume ERROR_INVALID_HANDLE indicates we are disconnected
175 if (errno == ERROR_INVALID_HANDLE)
176 usb_kick(handle);
177 return -1;
178 }
179
180 count += written;
181 len -= written;
182 data = (const char *)data + written;
183
184 if (len == 0)
185 return count;
186 }
187 } else {
188 DBG("usb_write NULL handle\n");
189 SetLastError(ERROR_INVALID_HANDLE);
190 }
191
192 DBG("usb_write failed: %d\n", errno);
193
194 return -1;
195}