Home
JAQForum Ver 24.01
Log In or Join  
Active Topics
Local Time 11:02 01 Aug 2025 Privacy Policy
Jump to

Notice. New forum software under development. It's going to miss a few functions and look a bit ugly for a while, but I'm working on it full time now as the old forum was too unstable. Couple days, all good. If you notice any issues, please contact me.

Forum Index : Microcontroller and PC projects : serial port watcher - linux 64-bit

Author Message
robert.rozee
Guru

Joined: 31/12/2012
Location: New Zealand
Posts: 2442
Posted: 02:35pm 23 Apr 2020
Copy link to clipboard 
Print this post

here's a handy little utility that linux should really have built in:

Serial Watcher (24-april-2020).zip

it is a 64-bit GUI program that creates a small window (about 150 pixels wide) on the desktop showing all the 'live' serial ports on the machine. these are serial ports that are real, working, with a device driver associated. as ports are plugged, they will be added to the window, as they are unplugged they will be removed.

it looks like this sitting on the empty desktop:


the executable is enormous (3mb) because of the lazarus GUI runtime engine. i shall ponder on how best to get around this in a future version. essentially, the only GUI component is a single TMemo sitting on an otherwise blank TForm. i feel it may well be possible to roll this in a more diy fashion for a considerably smaller executable!

please let me know how it works  

cheers,
rob   :-)
 
Volhout
Guru

Joined: 05/03/2018
Location: Netherlands
Posts: 5089
Posted: 03:43pm 23 Apr 2020
Copy link to clipboard 
Print this post

Hi Robert,

yes, I like.... especially if it can be made universal and small.

I am curious, how do you get the status ?
For USB ports I usually do an ls /dev/ttyA* or ls /dev/ttyU*
But to find an active ttyS* from the zillions in the list is a bridge to far for me.

Regards,

Vollhout
PicomiteVGA PETSCII ROBOTS
 
cs41
Newbie

Joined: 08/08/2016
Location: Australia
Posts: 27
Posted: 09:51am 24 Apr 2020
Copy link to clipboard 
Print this post

Hi Robert,

Great little program and just what I have needed for so  long.
Easy to use...  and gets results quickly.
Sure ..  we can use the command line, and often do, but this is simpler.
Runs well on my Mint 19.3  system.

Many thanks for that.  I'm sure it will be appreciated by many Linux users.

cs.
 
cs41
Newbie

Joined: 08/08/2016
Location: Australia
Posts: 27
Posted: 09:52am 24 Apr 2020
Copy link to clipboard 
Print this post

Hi Robert,

Great little program and just what I have needed for so  long.
Easy to use...  and gets results quickly.
Sure ..  we can use the command line, and often do, but this is simpler.
Runs well on my Mint 19.3  system.

Many thanks for that.  I'm sure it will be appreciated by many Linux users.

cs.
 
robert.rozee
Guru

Joined: 31/12/2012
Location: New Zealand
Posts: 2442
Posted: 02:11pm 24 Apr 2020
Copy link to clipboard 
Print this post

the inner workings are, in principal, surprisingly simple.

for each entry in /dev that is a serial port (ie ttyXXXn), there exists a corresponding entry in /sys/class/tty with further directories existing below that entry. the one of interest is of the form:

/sys/class/tty/NAME/device/driver
where NAME is the device name from /dev

for example, for /dev/ttyACM0 there exists /sys/class/tty/ttyACM0/device/driver

now /sys/class/tty/NAME/device/driver is a symlink to the actual driver, and we use a kernel (?) call to extract from /sys/class/tty/NAME/device/driver the true name of the device driver.

if the true name is NOT "serial8250", we can assume that the entry in /dev is alive, and our work is done. we can move on to the next entry.

however, if the device driver name is "serial8250", we then need to do a fileopen on the entry in /dev and call ioCtl to check that the driver type is not 0 (PORT_UNKNOWN).


in the case of my desktop machine, there exists on the motherboard a serial port, which appears as /dev/ttyS0. however, the driver is NOT called "serial8250", with the port implemented by an I2C device. so we can't assume that every /dev/ttyS* is an old-style 8250/16550 serial port!


on startup, the "watcher" scans /sys/class/tty/tty*, and for each entry found that meets the above criteria adds the NAME to the TMemo displayed. it then sets up a watch on /dev for any changes (items added or removed).

when a change occurs:
1. if the NAME is in the TMemo, it is removed.
2. the above check is done on NAME, and if it passes then NAME is added back into the TMemo.


hopefully this makes it all as clear as mud! i'd suggest having a look at the file "unit1.pas" that contains all the code that implements this. while looking intimidating, it is a series of quite simple steps.


cheers,
rob   :-)
 
robert.rozee
Guru

Joined: 31/12/2012
Location: New Zealand
Posts: 2442
Posted: 02:15pm 24 Apr 2020
Copy link to clipboard 
Print this post

cs41: am glad the program is useful for you     to be honest, i'm amazed that something similar doesn't already exist. i guess it comes down to the problem that the people who develop linux are just a little too involved in the technicalities of it all to appreciate the plight of the 'common user on the street', who really just wants simple solutions.


cheers,
rob   :-)
 
CircuitGizmos

Guru

Joined: 08/09/2011
Location: United States
Posts: 1427
Posted: 02:58pm 24 Apr 2020
Copy link to clipboard 
Print this post

This is my version for Windows. I usually keep it running.



It is great that you created one for Linux. Well done!
Micromites and Maximites! - Beginning Maximite
 
JohnS
Guru

Joined: 18/11/2011
Location: United Kingdom
Posts: 4044
Posted: 02:59pm 24 Apr 2020
Copy link to clipboard 
Print this post

rob,

Or the common user really doesn't use ttyACM0 etc :)

Hardly anyone plugs hardware in... sad, isn't it...

I tend to look at dmesg | tail when I plug anything in (usually get /dev/ttyUSB0).

John
Edited 2020-04-25 01:00 by JohnS
 
Volhout
Guru

Joined: 05/03/2018
Location: Netherlands
Posts: 5089
Posted: 03:09pm 24 Apr 2020
Copy link to clipboard 
Print this post

Dear Rob,

Is this nice tool something that can be adapted to something that is permanently in the tray ? Like the volume control icon, or a network icon, that once you click/hover over opens to a list of options.
That would really make it into something permanent for all developers that use a linux as their platform.

I like it as is, (and it works on my systems) but this would be even better.

Regards,

Volhout
PicomiteVGA PETSCII ROBOTS
 
Print this page


To reply to this topic, you need to log in.

The Back Shed's forum code is written, and hosted, in Australia.
© JAQ Software 2025