Unable to detect connected serial devices using Circuits.UART

I have a POS machine and say several serial devices are connected like scanner to COM1 , card reader to COM2, printer to COM3 or any order, i am unable to detect so using circuits.uart

The output comes as follows :

Circuits.UART.enumerate
#=> %{"ttyS0" => %{}, "ttyS1" => %{}, "ttyS2" => %{}, "ttyS3" => %{}}  

Any insight on how we could detect the devices? :frowning:

Thanks in advance

As far as I remember COM ports do not communicate some ā€œconnectedā€ status or similar, you need to probe them yourself. Best is probably to require fixed ports for auxiliary devices and provide default configs for that or require the user to set each device up correclty via configuration of some kind.

So even if we fix ports for the devices, like suppose com1 for cardreader and com2 for scanner, canā€™t i get the info if the device is physically connected to the com ports via checking any logs or something else??

How do i know the device connected to com1 is cardreader itself and not scanner?

You ask it. Thatā€™s the nature of the old Serial Ports. ^.^

Thatā€™s the problem we have to solve, how to ask ? :stuck_out_tongue:

You need to look that up in the technical documentation of the device, the chapter that describes the on-the-wire-protocol.

1 Like

Precisely, itā€™s very specific per each device. This was one of the major reasons the Universal Serial Bus standard (USB) was so much better than the old Serial (excepting that it lost streaming, which it regained in 3.0).

Back in the days I had a printer with 9 pins that also had emulation for 7 an d 24 pins.

Itā€™s protocol had no way to ask if itā€™s there or what it is. Everything you sent to the printer caused at least a moving head.

And the only command that did not cause printing but gave a response back was asking for the current mode.

So it was idiomatic to ā€œaskā€ for the current mode and assume itā€™s the correct device if it answered with one of the 6 valid modes (7, 9, 24 pins in either text or graphical mode).

This was actually a command which started scanning on a hand scanner I had that time. And if you didnā€™t move the scanner within a timeout period, it actually responded with a valid printer mode. This timeout was about 15 seconds.

2 Likes