This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

Can't read ttyGS0 if usb cable was re-plugged

Hi,

Our product uses the usb for console login.

1. plug usb cable and then open ttyGS0 --> OK

2. open ttyGS0 and then plug usb cable --> nothing can be read from ttyGS0

I am not sure if this is normal for using serial gadget.

Is there any way to test if the cable is plugged or not?

This could help me to add code to reopen ttyGS0.

Thanks.

** AM335x SDK V1.00.00

  • Hi AFu Lai,

    Could you post the output of the "ls /dev/tty*" command executed on your PC in both cases:
    1. when console is OK
    2. when nothing can be read from tty
    to compare whether present some differences.

    BR
    Tsvetolin Shulev

  • Hi,

    nothing is different@@

    / $ ls /dev/tty*
    /dev/tty     /dev/tty19   /dev/tty3    /dev/tty40   /dev/tty51   /dev/tty62
    /dev/tty0    /dev/tty2    /dev/tty30   /dev/tty41   /dev/tty52   /dev/tty63
    /dev/tty1    /dev/tty20   /dev/tty31   /dev/tty42   /dev/tty53   /dev/tty7
    /dev/tty10   /dev/tty21   /dev/tty32   /dev/tty43   /dev/tty54   /dev/tty8
    /dev/tty11   /dev/tty22   /dev/tty33   /dev/tty44   /dev/tty55   /dev/tty9
    /dev/tty12   /dev/tty23   /dev/tty34   /dev/tty45   /dev/tty56   /dev/ttyGS0
    /dev/tty13   /dev/tty24   /dev/tty35   /dev/tty46   /dev/tty57   /dev/ttyO0
    /dev/tty14   /dev/tty25   /dev/tty36   /dev/tty47   /dev/tty58   /dev/ttyS0
    /dev/tty15   /dev/tty26   /dev/tty37   /dev/tty48   /dev/tty59   /dev/ttyS1
    /dev/tty16   /dev/tty27   /dev/tty38   /dev/tty49   /dev/tty6    /dev/ttyS2
    /dev/tty17   /dev/tty28   /dev/tty39   /dev/tty5    /dev/tty60   /dev/ttyS3
    /dev/tty18   /dev/tty29   /dev/tty4    /dev/tty50   /dev/tty61
    / $ # now run microcom
    / $ ls /dev/tty*
    /dev/tty     /dev/tty19   /dev/tty3    /dev/tty40   /dev/tty51   /dev/tty62
    /dev/tty0    /dev/tty2    /dev/tty30   /dev/tty41   /dev/tty52   /dev/tty63
    /dev/tty1    /dev/tty20   /dev/tty31   /dev/tty42   /dev/tty53   /dev/tty7
    /dev/tty10   /dev/tty21   /dev/tty32   /dev/tty43   /dev/tty54   /dev/tty8
    /dev/tty11   /dev/tty22   /dev/tty33   /dev/tty44   /dev/tty55   /dev/tty9
    /dev/tty12   /dev/tty23   /dev/tty34   /dev/tty45   /dev/tty56   /dev/ttyGS0
    /dev/tty13   /dev/tty24   /dev/tty35   /dev/tty46   /dev/tty57   /dev/ttyO0
    /dev/tty14   /dev/tty25   /dev/tty36   /dev/tty47   /dev/tty58   /dev/ttyS0
    /dev/tty15   /dev/tty26   /dev/tty37   /dev/tty48   /dev/tty59   /dev/ttyS1
    /dev/tty16   /dev/tty27   /dev/tty38   /dev/tty49   /dev/tty6    /dev/ttyS2
    /dev/tty17   /dev/tty28   /dev/tty39   /dev/tty5    /dev/tty60   /dev/ttyS3
    /dev/tty18   /dev/tty29   /dev/tty4    /dev/tty50   /dev/tty61
    / $ # re-plug cable
    / $ ls /dev/tty*
    /dev/tty     /dev/tty19   /dev/tty3    /dev/tty40   /dev/tty51   /dev/tty62
    /dev/tty0    /dev/tty2    /dev/tty30   /dev/tty41   /dev/tty52   /dev/tty63
    /dev/tty1    /dev/tty20   /dev/tty31   /dev/tty42   /dev/tty53   /dev/tty7
    /dev/tty10   /dev/tty21   /dev/tty32   /dev/tty43   /dev/tty54   /dev/tty8
    /dev/tty11   /dev/tty22   /dev/tty33   /dev/tty44   /dev/tty55   /dev/tty9
    /dev/tty12   /dev/tty23   /dev/tty34   /dev/tty45   /dev/tty56   /dev/ttyGS0
    /dev/tty13   /dev/tty24   /dev/tty35   /dev/tty46   /dev/tty57   /dev/ttyO0
    /dev/tty14   /dev/tty25   /dev/tty36   /dev/tty47   /dev/tty58   /dev/ttyS0
    /dev/tty15   /dev/tty26   /dev/tty37   /dev/tty48   /dev/tty59   /dev/ttyS1
    /dev/tty16   /dev/tty27   /dev/tty38   /dev/tty49   /dev/tty6    /dev/ttyS2
    /dev/tty17   /dev/tty28   /dev/tty39   /dev/tty5    /dev/tty60   /dev/ttyS3
    /dev/tty18   /dev/tty29   /dev/tty4    /dev/tty50   /dev/tty61

  • Once g_serial is notified with USB disconnection message, it will try to hangup opened tty.
    That's the reason why application has to reopen ttyGS#.

    A simple solution is to use ioctl for requesting 'FIONREAD' information before reading out data from tty buffer.
    The errno will be 'EIO' if cable was removed.
    ** for my case, select function doesn't work for detecting out EIO.