in linux le posrte seriali "virtuali" sono tutte quelle elencate in /dev/tty*
quindi facenso un ls /dev/tty* ottengo qualcosa del genere:
/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
[ 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?
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:
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 |
|
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
cat /proc/consoles
tty0 -WU (EC p ) 4:2
non lo vede.
mentre:
non ritorna nulla.
ed infine:
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':
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
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 .....