mirror of
				https://github.com/mik3y/usb-serial-for-android
				synced 2025-10-31 10:27:27 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			65 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			65 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /*
 | |
|   bridge USB-serial to hardware-serial
 | |
| 
 | |
|   for Arduinos based on ATmega32u4 (Leonardo and compatible Pro Micro, Micro)
 | |
|   hardware serial is configured with baud-rate, databits, stopbits, parity as send over USB
 | |
| 
 | |
|   see https://github.com/arduino/Arduino/tree/master/hardware/arduino/avr/cores/arduino 
 | |
|   -> CDC.cpp|HardwareSerial.cpp for serial implementation details
 | |
| 
 | |
|   this sketch is mainly for demonstration / test of CDC communication
 | |
|   performance as real usb-serial bridge would be inacceptable as each byte is send in separate USB packet
 | |
| */
 | |
| 
 | |
| uint32_t baud = 9600;
 | |
| uint8_t databits = 8;
 | |
| uint8_t stopbits = 1;
 | |
| uint8_t parity = 0;
 | |
| 
 | |
| void setup() {
 | |
|   Serial.begin(baud); // USB
 | |
|   Serial1.begin(baud, SERIAL_8N1);
 | |
| }
 | |
| 
 | |
| void loop() {
 | |
|   // show USB connected state
 | |
|   if (Serial) TXLED1;
 | |
|   else        TXLED0;
 | |
| 
 | |
|   // configure hardware serial
 | |
|   if (Serial.baud() != baud ||
 | |
|       Serial.numbits() != databits ||
 | |
|       Serial.stopbits() != stopbits ||
 | |
|       Serial.paritytype() != parity) {
 | |
|     baud = Serial.baud();
 | |
|     databits = Serial.numbits();
 | |
|     stopbits = Serial.stopbits();
 | |
|     parity = Serial.paritytype();
 | |
|     uint8_t config = 0; // ucsrc register
 | |
|     switch (databits) {
 | |
|       case 5: break;
 | |
|       case 6: config |= 2; break;
 | |
|       case 7: config |= 4; break;
 | |
|       case 8: config |= 6; break;
 | |
|       default: config |= 6;
 | |
|     }
 | |
|     switch (stopbits) {
 | |
|       case 2: config |= 8;
 | |
|         // 1.5 stopbits not supported
 | |
|     }
 | |
|     switch (parity) {
 | |
|       case 1: config |= 0x30; break; // odd
 | |
|       case 2: config |= 0x20; break; // even
 | |
|         // mark, space not supported
 | |
|     }
 | |
|     Serial1.end();
 | |
|     Serial1.begin(baud, config);
 | |
|   }
 | |
| 
 | |
|   // bridge
 | |
|   if (Serial.available() > 0)
 | |
|     Serial1.write(Serial.read());
 | |
|   if (Serial1.available() > 0)
 | |
|     Serial.write(Serial1.read());
 | |
| }
 |