mirror of
				https://github.com/subsurface/subsurface.git
				synced 2025-02-19 22:16:15 +00:00 
			
		
		
		
	Implemented serial_set_break for FTDI
Setting break is required to wake up Cochran DCs (it doesn't make sense to me, but it's needed). Signed-off-by: John Van Ostrand <john@vanostrand.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
		
							parent
							
								
									166eb17ac2
								
							
						
					
					
						commit
						866a25f90e
					
				
					 1 changed files with 15 additions and 4 deletions
				
			
		| 
						 | 
					@ -69,6 +69,9 @@ typedef struct ftdi_serial_t {
 | 
				
			||||||
	int halfduplex;
 | 
						int halfduplex;
 | 
				
			||||||
	unsigned int baudrate;
 | 
						unsigned int baudrate;
 | 
				
			||||||
	unsigned int nbits;
 | 
						unsigned int nbits;
 | 
				
			||||||
 | 
						unsigned int databits;
 | 
				
			||||||
 | 
						unsigned int stopbits;
 | 
				
			||||||
 | 
						unsigned int parity;
 | 
				
			||||||
} ftdi_serial_t;
 | 
					} ftdi_serial_t;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static dc_status_t serial_ftdi_get_received (dc_custom_io_t *io, size_t *value)
 | 
					static dc_status_t serial_ftdi_get_received (dc_custom_io_t *io, size_t *value)
 | 
				
			||||||
| 
						 | 
					@ -172,6 +175,9 @@ static dc_status_t serial_ftdi_open (dc_custom_io_t *io, dc_context_t *context,
 | 
				
			||||||
	device->halfduplex = 0;
 | 
						device->halfduplex = 0;
 | 
				
			||||||
	device->baudrate = 0;
 | 
						device->baudrate = 0;
 | 
				
			||||||
	device->nbits = 0;
 | 
						device->nbits = 0;
 | 
				
			||||||
 | 
						device->databits = 0;
 | 
				
			||||||
 | 
						device->stopbits = 0;
 | 
				
			||||||
 | 
						device->parity = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Initialize device ftdi context
 | 
						// Initialize device ftdi context
 | 
				
			||||||
	INFO(0, "initialize ftdi_ctx");
 | 
						INFO(0, "initialize ftdi_ctx");
 | 
				
			||||||
| 
						 | 
					@ -334,6 +340,9 @@ static dc_status_t serial_ftdi_configure (dc_custom_io_t *io, unsigned int baudr
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	device->baudrate = baudrate;
 | 
						device->baudrate = baudrate;
 | 
				
			||||||
	device->nbits = 1 + databits + stopbits + (parity ? 1 : 0);
 | 
						device->nbits = 1 + databits + stopbits + (parity ? 1 : 0);
 | 
				
			||||||
 | 
						device->databits = databits;
 | 
				
			||||||
 | 
						device->stopbits = stopbits;
 | 
				
			||||||
 | 
						device->parity = parity;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return DC_STATUS_SUCCESS;
 | 
						return DC_STATUS_SUCCESS;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -535,7 +544,7 @@ static dc_status_t serial_ftdi_send_break (dc_custom_io_t *io)
 | 
				
			||||||
	return DC_STATUS_UNSUPPORTED;
 | 
						return DC_STATUS_UNSUPPORTED;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static dc_status_t serial_ftdi_set_break (dc_custom_io_t *io, int level)
 | 
					static dc_status_t serial_ftdi_set_break (dc_custom_io_t *io, unsigned int level)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	ftdi_serial_t *device = (ftdi_serial_t*) io->userdata;
 | 
						ftdi_serial_t *device = (ftdi_serial_t*) io->userdata;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -544,7 +553,10 @@ static dc_status_t serial_ftdi_set_break (dc_custom_io_t *io, int level)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	INFO (device->context, "Break: value=%i", level);
 | 
						INFO (device->context, "Break: value=%i", level);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Not implemented in libftdi yet. Research it further.
 | 
						if (ftdi_set_line_property2(device->ftdi_ctx, device->databits, device->stopbits, device->parity, level)) {
 | 
				
			||||||
 | 
							ERROR (device->context, "%s", ftdi_get_error_string(device->ftdi_ctx));
 | 
				
			||||||
 | 
							return DC_STATUS_IO;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return DC_STATUS_UNSUPPORTED;
 | 
						return DC_STATUS_UNSUPPORTED;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -598,6 +610,5 @@ dc_custom_io_t serial_ftdi_ops = {
 | 
				
			||||||
	.serial_set_halfduplex = serial_ftdi_set_halfduplex,
 | 
						.serial_set_halfduplex = serial_ftdi_set_halfduplex,
 | 
				
			||||||
// Can't be done in ftdi?
 | 
					// Can't be done in ftdi?
 | 
				
			||||||
// only used in vyper2
 | 
					// only used in vyper2
 | 
				
			||||||
// NULL means NOP
 | 
						.serial_set_break = serial_ftdi_set_break,
 | 
				
			||||||
	.serial_set_break = NULL
 | 
					 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue