Autore Topic: Elencare e selezionare la seriale funzionante  (Letto 375 volte)

Offline allegfede

  • Gran Maestro dei Gamberi
  • *****
  • Post: 738
    • Mostra profilo
Elencare e selezionare la seriale funzionante
« il: 20 Giugno 2017, 17:20:04 »
in linux le posrte seriali "virtuali" sono tutte quelle elencate in /dev/tty*
quindi facenso un ls /dev/tty* ottengo qualcosa del genere:
Codice: [Seleziona]
/dev/tty    /dev/tty23  /dev/tty39  /dev/tty54      /dev/ttyS10  /dev/ttyS26
/dev/tty0   /dev/tty24  /dev/tty4   /dev/tty55      /dev/ttyS11  /dev/ttyS27
/dev/tty1   /dev/tty25  /dev/tty40  /dev/tty56      /dev/ttyS12  /dev/ttyS28
/dev/tty10  /dev/tty26  /dev/tty41  /dev/tty57      /dev/ttyS13  /dev/ttyS29
/dev/tty11  /dev/tty27  /dev/tty42  /dev/tty58      /dev/ttyS14  /dev/ttyS3
/dev/tty12  /dev/tty28  /dev/tty43  /dev/tty59      /dev/ttyS15  /dev/ttyS30
/dev/tty13  /dev/tty29  /dev/tty44  /dev/tty6       /dev/ttyS16  /dev/ttyS31
/dev/tty14  /dev/tty3   /dev/tty45  /dev/tty60      /dev/ttyS17  /dev/ttyS4
/dev/tty15  /dev/tty30  /dev/tty46  /dev/tty61      /dev/ttyS18  /dev/ttyS5
/dev/tty16  /dev/tty31  /dev/tty47  /dev/tty62      /dev/ttyS19  /dev/ttyS6
/dev/tty17  /dev/tty32  /dev/tty48  /dev/tty63      /dev/ttyS2   /dev/ttyS7
/dev/tty18  /dev/tty33  /dev/tty49  /dev/tty7       /dev/ttyS20  /dev/ttyS8
/dev/tty19  /dev/tty34  /dev/tty5   /dev/tty8       /dev/ttyS21  /dev/ttyS9
/dev/tty2   /dev/tty35  /dev/tty50  /dev/tty9       /dev/ttyS22
/dev/tty20  /dev/tty36  /dev/tty51  /dev/ttyprintk  /dev/ttyS23
/dev/tty21  /dev/tty37  /dev/tty52  /dev/ttyS0      /dev/ttyS24
/dev/tty22  /dev/tty38  /dev/tty53  /dev/ttyS1      /dev/ttyS25

pero' in realta' ho poche VERE seriali connesse al pc e un modo per vedere dalla shell e' con il comando dmesg | grep tty
Codice: [Seleziona]
[    0.000000] console [tty0] enabled
[    0.733800] 00:05: ttyS0 at I/O 0x3f8 (irq = 4, base_baud = 115200) is a 16550A

c'e' un modo "semplice" di ottenere la stessa cosa con gli oggetti NET di gambas?
se corri, morirai stanco (motto degli sniper)

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Elencare e selezionare la seriale funzionante
« Risposta #1 il: 20 Giugno 2017, 18:23:13 »
c'e' un modo "semplice" di ottenere la stessa cosa con gli oggetti NET di gambas?

Ah, malandrino !    ;D
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Elencare e selezionare la seriale funzionante
« Risposta #2 il: 20 Giugno 2017, 18:34:51 »
in linux le posrte seriali "virtuali" sono tutte quelle elencate in /dev/tty*
Ehmmm... :-X credo che le porte seriali siano quelle il cui file-device sia rappresentato da un nome del tipo ttySx, dove x è un numero progressivo.

http://www.pluto.it/files/ildp/HOWTO/Serial-HOWTO/Serial-HOWTO-3.html
ftp://ftp.lyx.org/pub/sgml-tools/website/HOWTO/Text-Terminal-HOWTO/t1162.html
http://www.linux.it/~rubini/docs/pty/pty.html
https://unix.stackexchange.com/questions/149236/look-up-the-device-from-its-tty-file
http://www.linuxquestions.org/questions/linux-hardware-18/difference-between-tty-and-ttys-605986/


...ed infatti se in Terminale dai questo comando:
 ~ $ dmesg | grep serial
ottieni solo il file-device avente nome ttySx


« Ultima modifica: 22 Giugno 2017, 14:45:59 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Elencare e selezionare la seriale funzionante
« Risposta #3 il: 20 Giugno 2017, 20:57:41 »
c'e' un modo "semplice" di ottenere la stessa cosa
Con riferimento alle console virtuali, atteso che il file di sistema "/proc/consoles" contiene tutte i file-device delle console virtuali correntemente utilizzate, quindi attive, possiamo dunque in modo agevole utilizzare questo semplicissimo codice:
Codice: [Seleziona]
Public Sub Main()

  Dim s As String
  Dim ss As String[]
 
  s = File.Load("/proc/consoles")
 
  ss = Split(s, "\n")
 
  For Each s In ss
    Print s
  Next
   
End

I simboli alfabetici presenti in ciascuna riga mostrata hanno il significato (si faccia particolare attenzione alla lettera "E" !) descritto nel file proc.txt, che qui riporto in sintesi:

2.0 /proc/consoles
------------------
Shows registered system console lines.

To see which character device lines are currently used for the system console
/dev/console, you may simply look into the file /proc/consoles:

  > cat /proc/consoles
  tty0                 -WU (ECp)       4:7

The columns are:

device   name of the device
operations   R = can do read operations
W = can do write operations
U = can do unblank
flags E = it is enabled
C = it is preferred console
B = it is primary boot console
p = it is used for printk buffer
b = it is not a TTY but a Braille device
a = it is safe to use when cpu is offline
major:minor major and minor number of the device separated by a colon


« Ultima modifica: 22 Giugno 2017, 14:47:12 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline allegfede

  • Gran Maestro dei Gamberi
  • *****
  • Post: 738
    • Mostra profilo
Re:Elencare e selezionare la seriale funzionante
« Risposta #4 il: 22 Giugno 2017, 13:31:35 »
mhhh effettivamente le varie implementazioni differiscono un po' dai risultati.
Stranamente per esempio il mio arduino collegato, che mi fa' da risponditore seriale, ho fatto un programmino che quando gli invio una stringa di comando me la disegna sul display lcd 16x2, se do' il comando
Codice: [Seleziona]
 cat /proc/consoles
tty0                 -WU (EC p  )    4:2
non lo vede.

mentre:
Codice: [Seleziona]
dmesg | grep serial
non ritorna nulla.

ed infine:
Codice: [Seleziona]
dmesg | grep tty
[    0.000000] console [tty0] enabled
[    0.732949] 00:05: ttyS0 at I/O 0x3f8 (irq = 4, base_baud = 115200) is a 16550A
[ 1644.161611] cdc_acm 5-1.3:1.0: ttyACM0: USB ACM device

Penso che faro' un grep tty per poi scremare le console "terminale" (tty0-1-2 etc) da quelle "uart" (ttyS0-S1-etc) ed infine i device speciali tipo arduino (ttyACM0-ACM1 etc)

alla fine me la sono cavata cosi':
Codice: [Seleziona]
Public Sub Form_Open()
Dim ritorno As String
Dim Seriali As String[]

Dim NomeSeriale As String

  Shell "dmesg | grep tty" To ritorno
 
  Seriali = Split(ritorno, "\n")
 
  For Each NomeSeriale In Seriali
    If (NomeSeriale Like "*ttyS[0-9]*") Or (NomeSeriale Like "*ttyACM[0-9]*") Or (NomeSeriale Like "*ttyUSB[0-9]*") Then
      ComboBox_Tty.Add(ExtractNomeSeriale(NomeSeriale), ComboBox_Tty.Count)
    Endif
  Next

End

Public Function ExtractNomeSeriale(RitornoShell As String) As String
Dim Appoggio As String
 
  Appoggio = Mid(RitornoShell, InStr(RitornoShell, "tty"))
  Appoggio = Replace(Appoggio, ":", "")
  Appoggio = Replace(Appoggio, "]", "")
  Appoggio = Mid(appoggio, 1, InStr(Appoggio, " "))
 
  Return Trim(Appoggio)
 
End
« Ultima modifica: 22 Giugno 2017, 13:46:45 da allegfede »
se corri, morirai stanco (motto degli sniper)

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Elencare e selezionare la seriale funzionante
« Risposta #5 il: 22 Giugno 2017, 18:05:46 »
Codice: [Seleziona]
dmesg | grep serial
non ritorna nulla.

Se lanci da Terminale questo comando:

~ $ sudo cat /proc/tty/driver/serial

cosa ottieni ?
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline allegfede

  • Gran Maestro dei Gamberi
  • *****
  • Post: 738
    • Mostra profilo
Re:Elencare e selezionare la seriale funzionante
« Risposta #6 il: 22 Giugno 2017, 18:22:57 »
Codice: [Seleziona]
serinfo:1.0 driver revision:
0: uart:16550A port:000003F8 irq:4 tx:0 rx:0
1: uart:unknown port:000002F8 irq:3
2: uart:unknown port:000003E8 irq:4
3: uart:unknown port:000002E8 irq:3
4: uart:unknown port:00000000 irq:0
5: uart:unknown port:00000000 irq:0
6: uart:unknown port:00000000 irq:0
7: uart:unknown port:00000000 irq:0
8: uart:unknown port:00000000 irq:0
9: uart:unknown port:00000000 irq:0
10: uart:unknown port:00000000 irq:0
11: uart:unknown port:00000000 irq:0
12: uart:unknown port:00000000 irq:0
13: uart:unknown port:00000000 irq:0
14: uart:unknown port:00000000 irq:0
15: uart:unknown port:00000000 irq:0
16: uart:unknown port:00000000 irq:0
17: uart:unknown port:00000000 irq:0
18: uart:unknown port:00000000 irq:0
19: uart:unknown port:00000000 irq:0
20: uart:unknown port:00000000 irq:0
21: uart:unknown port:00000000 irq:0
22: uart:unknown port:00000000 irq:0
23: uart:unknown port:00000000 irq:0
24: uart:unknown port:00000000 irq:0
25: uart:unknown port:00000000 irq:0
26: uart:unknown port:00000000 irq:0
27: uart:unknown port:00000000 irq:0
28: uart:unknown port:00000000 irq:0
29: uart:unknown port:00000000 irq:0
30: uart:unknown port:00000000 irq:0
31: uart:unknown port:00000000 irq:0

ma devo essere superuser .....
se corri, morirai stanco (motto degli sniper)

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Elencare e selezionare la seriale funzionante
« Risposta #7 il: 22 Giugno 2017, 19:15:50 »
ma devo essere superuser .....
Sì.

Ad ogni modo l'elenco dei dispositivi seriali di sistema sono contenuti in quel percorso; e le porte seriali attive sono evidentemente quelle, nelle quali è assente la stringa "unknown".
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »