On 27/06/17 19:04, Johan Hovold wrote:
>> What's the "proper" way to configure such ports for RS-422 and/or 4-wire
>> RS-485?  Is there an example driver in the tree that I can use as a
>> guide to porting Moxa's mode-switch code over to the ti_usb_3410_5052
>> driver?
> 
> I'm afraid not. We have the TIOCSRS485 ioctl, but that doesn't really
> fit here (currently) as we're not just enabling 2-wire-rs485 style
> signalling (using RTS to control the tranceiver), but are also
> configuring the electrical interface (e.g. which pins on the DB9
> connector are being used for which functions).
> 
> This question is raised every now and then; typically when a new
> driver is being merged (e.g. mxuport or when support for your device was
> added), but we have yet to decide on the proper interface.
> 
> Extending the TIOCSRS485 ioctl has been discussed, and one alternative
> could be a sysfs-based interface as this would typically be something
> you'd want to configure at boot and before opening the device (and
> toggling DTR).

I did consider sysfs this morning… this would make a lot of sense.
These things being USB, it is possible that a udev trigger could put it
in the appropriate mode when they are plugged in.  Sounds a much better
option than re-purposing other fields.

> Either way, we need do determine the right level of abstraction as some
> of the related properties are fairly device dependent (master/slave
> mode, terminating resistors, auto direction, echo, etc).
> 
> For the record, note that we do have the mxser driver, and a few more
> old drivers, implementing custom ioctls for this, but we really should
> not be adding more of those.

Yeah, I won't be adding ioctls… it makes the interface too
hardware-specific.  If anything, the ioctls might be a hint to what
enumerated properties to expose on sysfs, then the ioctl interface can
be gradually phased out.

I'll have a look at mxser.  At this point I'm thinking gathering a
listing of what devices support what configuration options would be
worthwhile.  I know the UPort 1150 supports 2-wire RS-485, 4-wire
RS-485, RS-422 and RS-232… the UPort 1100 drops support for RS-232… I
don't think either offer termination resistance options.

Maybe a good start would be a "standard" option (referring to the
physical signalling standard, TTL/RS-232/RS-422/RS-485), that lists the
available standards when read and shows the "selected" standard in
brackets (like the 'trigger' option of the LEDs sysfs interface)… so for
this case:

# cat /sys/class/tty/ttyUSB0/standard
[rs232] rs422 rs485 rs485fd

and to select 4-wire ("full duplex") RS-485, one does:
# echo rs485fd > /sys/class/tty/ttyUSB0/standard

A hypothetical dongle that supports pin re-mapping might have
properties: rxd, txd, rts, cts, dtr, dsr, cd, ri, gnd (for RS-232; maybe
a, b and gnd for RS-485 or txa, txb, rxa, rxb, gnd for
RS-422/full-duplex-RS-485) that gives the pin numbers/labels:

cd: [1] 2 3 4 5 6 7 8 9
rx: 1 [2] 3 4 5 6 7 8 9
tx: 1 2 [3] 4 5 6 7 8 9
… etc …

and termination resistance (separate options for RX and TX) might be a
selection of off, and the available resistances. (e.g. "50", "75",
"120", "1k" … whatever the device supports.)

I'm open to ideas here, I'm not sure how many configurable serial
interfaces there are out there (USB or otherwise), so if people watching
the list can provide some examples of these devices, this will be a big
help.

Regards,
-- 
Stuart Longland (aka Redhatter, VK4MSL)

I haven't lost my mind...
  ...it's backed up on a tape somewhere.

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to