Created interface Port. Rationalized documentation.

This commit is contained in:
Cristian Maglie
2016-04-24 17:19:32 +02:00
parent 88e647775e
commit f5be203394
6 changed files with 56 additions and 38 deletions

View File

@@ -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, &params) != 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,
}