59 lines
1.4 KiB
Go
59 lines
1.4 KiB
Go
//go:build linux
|
|
|
|
/*
|
|
* ============================================================================
|
|
* Projekt.....: rs2322tcp
|
|
* Datei.......: internal/client/virtual_port_number_linux.go
|
|
* Copyright (C) 2026 Dieter Lang
|
|
*
|
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
|
*
|
|
* Beschreibung:
|
|
* Linux-spezifische Umwandlung eines konfigurierten virtuellen
|
|
* seriellen Ports in dessen numerische Portnummer.
|
|
* ============================================================================
|
|
*/
|
|
|
|
package client
|
|
|
|
import (
|
|
"fmt"
|
|
"strconv"
|
|
"strings"
|
|
)
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
// Virtual port number
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
// virtualPortNumber converts a configured /dev/ttyUSBxxx path into its
|
|
// numeric virtual port number.
|
|
func virtualPortNumber(path string) (int, error) {
|
|
const prefix = "/dev/ttyUSB"
|
|
|
|
if !strings.HasPrefix(path, prefix) {
|
|
return 0, fmt.Errorf(
|
|
"invalid virtual port %q: expected /dev/ttyUSB<number>",
|
|
path,
|
|
)
|
|
}
|
|
|
|
value := strings.TrimPrefix(path, prefix)
|
|
|
|
if value == "" {
|
|
return 0, fmt.Errorf(
|
|
"invalid virtual port %q: port number is missing",
|
|
path,
|
|
)
|
|
}
|
|
|
|
number, err := strconv.Atoi(value)
|
|
if err != nil {
|
|
return 0, fmt.Errorf(
|
|
"invalid virtual port %q: invalid port number",
|
|
path,
|
|
)
|
|
}
|
|
|
|
return number, nil
|
|
}
|