Added USB API

This commit is contained in:
Cristian Maglie
2016-10-08 11:15:50 +02:00
parent e9103998c3
commit 5050c50185
6 changed files with 100 additions and 0 deletions

View File

@@ -0,0 +1,29 @@
//
// Copyright 2014-2016 Cristian Maglie. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
//
package serial_test
import "fmt"
import "log"
import "go.bug.st/serial.v1"
func ExampleGetDetailedPortsList() {
ports, err := serial.GetDetailedPortsList()
if err != nil {
log.Fatal(err)
}
if len(ports) == 0 {
fmt.Println("No serial ports found!")
return
}
for _, port := range ports {
fmt.Printf("Found port: %s\n", port.Name)
if port.IsUSB {
fmt.Printf(" USB ID %s:%s\n", port.VID, port.PID)
fmt.Printf(" USB serial %s\n", port.SerialNumber)
}
}
}

View File

@@ -55,6 +55,25 @@ func GetPortsList() ([]string, error) {
return nativeGetPortsList() return nativeGetPortsList()
} }
// PortDetails contains detailed information about USB serial port.
// Use GetDetailedPortsList function to retrieve it.
type PortDetails struct {
Name string
IsUSB bool
VID string
PID string
SerialNumber string
Manufacturer string
Product string
}
// GetDetailedPortsList retrieve ports details like USB VID/PID.
// Please note that this function may not be available on all OS:
// in that case a FunctionNotImplemented error is returned.
func GetDetailedPortsList() ([]*PortDetails, error) {
return nativeGetDetailedPortsList()
}
// Mode describes a serial port configuration. // Mode describes a serial port configuration.
type Mode struct { type Mode struct {
BaudRate int // The serial port bitrate (aka Baudrate) BaudRate int // The serial port bitrate (aka Baudrate)
@@ -121,6 +140,8 @@ const (
ErrorEnumeratingPorts ErrorEnumeratingPorts
// PortClosed the port has been closed while the operation is in progress // PortClosed the port has been closed while the operation is in progress
PortClosed PortClosed
// FunctionNotImplemented the requested function is not implemented
FunctionNotImplemented
) )
// EncodedErrorString returns a string explaining the error code // EncodedErrorString returns a string explaining the error code
@@ -146,6 +167,8 @@ func (e PortError) EncodedErrorString() string {
return "Could not enumerate serial ports" return "Could not enumerate serial ports"
case PortClosed: case PortClosed:
return "Port has been closed" return "Port has been closed"
case FunctionNotImplemented:
return "Function not implemented"
default: default:
return "Other error" return "Other error"
} }

12
usb_darwin.go Normal file
View File

@@ -0,0 +1,12 @@
//
// Copyright 2014-2016 Cristian Maglie. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
//
package serial // import "go.bug.st/serial.v1"
func nativeGetDetailedPortsList() ([]*PortDetails, error) {
// TODO
return nil, &PortError{code: FunctionNotImplemented}
}

12
usb_freebsd.go Normal file
View File

@@ -0,0 +1,12 @@
//
// Copyright 2014-2016 Cristian Maglie. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
//
package serial // import "go.bug.st/serial.v1"
func nativeGetDetailedPortsList() ([]*PortDetails, error) {
// TODO
return nil, &PortError{code: FunctionNotImplemented}
}

12
usb_linux.go Normal file
View File

@@ -0,0 +1,12 @@
//
// Copyright 2014-2016 Cristian Maglie. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
//
package serial // import "go.bug.st/serial.v1"
func nativeGetDetailedPortsList() ([]*PortDetails, error) {
// TODO
return nil, &PortError{code: FunctionNotImplemented}
}

12
usb_windows.go Normal file
View File

@@ -0,0 +1,12 @@
//
// Copyright 2014-2016 Cristian Maglie. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
//
package serial // import "go.bug.st/serial.v1"
func nativeGetDetailedPortsList() ([]*PortDetails, error) {
// TODO
return nil, &PortError{code: FunctionNotImplemented}
}