This shows you the differences between two versions of the page.

Link to this comparison view

linux_serial_programming [2019/03/31 14:49] (current)
Line 1: Line 1:
 +====== Linux Serial Programming ======
 +There is ''​%%termios%%''​ which is the linux library of accessing the serial port. It is super
 +fucking complicated.
 +There are some concepts to keep in mind.
 +**1. Canonical mode**: This is most useful when dealing with real terminals, or devices that provide line-by-line ​
 +communication. The terminal driver returns data line-by-line.
 +**2. Non-canonical mode:** In this mode, no special processing is done, and the terminal driver returns individual characters.
 +**3. "​Blocking"​**:​ sets whether a read() on the port waits for the specified number of
 +characters to arrive. Setting no blocking means that a read() returns however many
 +characters are available without waiting for more, up to the buffer limit.
 +The man page ([[http://​man7.org/​linux/​man-pages/​man3/​termios.3.html|link]]) for
 +''​%%termios%%''​ is actually pretty useful. This is not that complicated. I, and you, can
 +friggin do this.
 +There is an interesting function called ''​%%cfmakeraw%%''​ that sets the terminal to what I
 +want I think I want. 
 +===== General Programming Serial Stuff =====
 +If you use ''​%%printf%%''​ to print to the terminal be aware that ''​%%stdout%%''​ is buffered! That
 +means that it doesn'​t just instantaneously print to the terminal. It either waits for
 +a new line, has a timeout (i think) or a buffer fills up. 
 +To get ''​%%printf%%''​ to print immediately either call ''​%%fflush(stdout)%%''​ or do the following to
 +make the buffer size smaller:
 +<code c>
 +// printf which uses stdout is buffered. The larger the buffer, the slower it
 +// will post to the terminal. I can either set the buffer to smaller size like
 +// the following, or call fflush(stdout) to force a write to the terminal
 +char buffer[10];
 +setvbuf(stdout,​ buffer, _IOFBF, sizeof(buffer));​
 +===== General OS Serial Stuff =====
 +To list the USB devices by dev path use this script ([[http://​unix.stackexchange.com/​questions/​144029/​command-to-determine-ports-of-a-device-like-dev-ttyusb0|link]]).
 +I have added this script to ''​%%paul_scripts%%''​ and added an alias called ''​%%listusb%%''​ to my ''​%%.zshrc%%''​ file.
  • linux_serial_programming.txt
  • Last modified: 2019/03/31 14:49
  • (external edit)