Created interface Port. Rationalized documentation.
This commit is contained in:
@@ -18,13 +18,13 @@ package serial // import "go.bug.st/serial"
|
||||
|
||||
import "syscall"
|
||||
|
||||
type Port struct {
|
||||
type windowsPort struct {
|
||||
handle syscall.Handle
|
||||
}
|
||||
|
||||
//sys RegEnumValue(key syscall.Handle, index uint32, name *uint16, nameLen *uint32, reserved *uint32, class *uint16, value *uint16, valueLen *uint32) (regerrno error) = advapi32.RegEnumValueW
|
||||
|
||||
func GetPortsList() ([]string, error) {
|
||||
func nativeGetPortsList() ([]string, error) {
|
||||
subKey, err := syscall.UTF16PtrFromString("HARDWARE\\DEVICEMAP\\SERIALCOMM\\")
|
||||
if err != nil {
|
||||
return nil, &PortError{code: ErrorEnumeratingPorts}
|
||||
@@ -55,11 +55,11 @@ func GetPortsList() ([]string, error) {
|
||||
return list, nil
|
||||
}
|
||||
|
||||
func (port *Port) Close() error {
|
||||
func (port *windowsPort) Close() error {
|
||||
return syscall.CloseHandle(port.handle)
|
||||
}
|
||||
|
||||
func (port *Port) Read(p []byte) (int, error) {
|
||||
func (port *windowsPort) Read(p []byte) (int, error) {
|
||||
var readed uint32
|
||||
params := &DCB{}
|
||||
for {
|
||||
@@ -82,7 +82,7 @@ func (port *Port) Read(p []byte) (int, error) {
|
||||
}
|
||||
}
|
||||
|
||||
func (port *Port) Write(p []byte) (int, error) {
|
||||
func (port *windowsPort) Write(p []byte) (int, error) {
|
||||
var writed uint32
|
||||
err := syscall.WriteFile(port.handle, p, &writed, nil)
|
||||
return int(writed), err
|
||||
@@ -170,7 +170,7 @@ const (
|
||||
TWOSTOPBITS = 2
|
||||
)
|
||||
|
||||
func (port *Port) SetMode(mode *Mode) error {
|
||||
func (port *windowsPort) SetMode(mode *Mode) error {
|
||||
params := DCB{}
|
||||
if GetCommState(port.handle, ¶ms) != nil {
|
||||
port.Close()
|
||||
@@ -195,7 +195,7 @@ func (port *Port) SetMode(mode *Mode) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func OpenPort(portName string, mode *Mode) (*Port, error) {
|
||||
func nativeOpen(portName string, mode *Mode) (*windowsPort, error) {
|
||||
portName = "\\\\.\\" + portName
|
||||
path, err := syscall.UTF16PtrFromString(portName)
|
||||
if err != nil {
|
||||
@@ -218,7 +218,7 @@ func OpenPort(portName string, mode *Mode) (*Port, error) {
|
||||
return nil, err
|
||||
}
|
||||
// Create the serial port
|
||||
port := &Port{
|
||||
port := &windowsPort{
|
||||
handle: handle,
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user