mirror of
				https://github.com/mik3y/usb-serial-for-android
				synced 2025-10-31 02:17:23 +00:00 
			
		
		
		
	SerialInputOutputManager.writeAsync(): handle SerialTimeoutException
This commit is contained in:
		
							parent
							
								
									cab862599d
								
							
						
					
					
						commit
						0c0275675f
					
				| @ -1525,6 +1525,15 @@ public class DeviceTest { | |||||||
|         data = telnet.read(2); |         data = telnet.read(2); | ||||||
|         assertEquals(2, data.length); |         assertEquals(2, data.length); | ||||||
|         usb.ioManager.setReadTimeout(200); |         usb.ioManager.setReadTimeout(200); | ||||||
|  | 
 | ||||||
|  |         // with internal SerialTimeoutException | ||||||
|  |         TestBuffer tbuf = new TestBuffer(usb.writeBufferSize + 2*usb.writePacketSize); | ||||||
|  |         usb.ioManager.setWriteTimeout(20); // tbuf len >= 128, needs 133msec @ 9600 baud | ||||||
|  |         usb.setParameters(9600, 8, 1, UsbSerialPort.PARITY_NONE); | ||||||
|  |         telnet.setParameters(9600, 8, 1, UsbSerialPort.PARITY_NONE); | ||||||
|  |         usb.ioManager.writeAsync(tbuf.buf); | ||||||
|  |         while(!tbuf.testRead(telnet.read(-1))) | ||||||
|  |             ; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     @Test |     @Test | ||||||
|  | |||||||
| @ -9,6 +9,7 @@ package com.hoho.android.usbserial.util; | |||||||
| import android.os.Process; | import android.os.Process; | ||||||
| import android.util.Log; | import android.util.Log; | ||||||
| 
 | 
 | ||||||
|  | import com.hoho.android.usbserial.driver.SerialTimeoutException; | ||||||
| import com.hoho.android.usbserial.driver.UsbSerialPort; | import com.hoho.android.usbserial.driver.UsbSerialPort; | ||||||
| 
 | 
 | ||||||
| import java.io.IOException; | import java.io.IOException; | ||||||
| @ -254,7 +255,23 @@ public class SerialInputOutputManager implements Runnable { | |||||||
|             if (DEBUG) { |             if (DEBUG) { | ||||||
|                 Log.d(TAG, "Writing data len=" + len); |                 Log.d(TAG, "Writing data len=" + len); | ||||||
|             } |             } | ||||||
|             mSerialPort.write(buffer, mWriteTimeout); |             try { | ||||||
|  |                 mSerialPort.write(buffer, mWriteTimeout); | ||||||
|  |             } catch (SerialTimeoutException ex) { | ||||||
|  |                 synchronized (mWriteBufferLock) { | ||||||
|  |                     byte[] buffer2 = null; | ||||||
|  |                     int len2 = mWriteBuffer.position(); | ||||||
|  |                     if (len2 > 0) { | ||||||
|  |                         buffer2 = new byte[len2]; | ||||||
|  |                         mWriteBuffer.rewind(); | ||||||
|  |                         mWriteBuffer.get(buffer2, 0, len2); | ||||||
|  |                         mWriteBuffer.clear(); | ||||||
|  |                     } | ||||||
|  |                     mWriteBuffer.put(buffer, ex.bytesTransferred, buffer.length - ex.bytesTransferred); | ||||||
|  |                     if (buffer2 != null) | ||||||
|  |                         mWriteBuffer.put(buffer2); | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user