diff --git a/serial.go b/serial.go index 24be176..625a249 100644 --- a/serial.go +++ b/serial.go @@ -6,7 +6,7 @@ package serial // import "go.bug.st/serial.v1" -//go:generate go run extras/mksyscall_windows.go -output syscall_windows.go serial_windows.go +//go:generate go run extras/mksyscall_windows.go -output zsyscall_windows.go syscall_windows.go // Port is the interface for a serial Port type Port interface { diff --git a/serial_darwin.go b/serial_darwin.go index 393236d..eb9a7ae 100644 --- a/serial_darwin.go +++ b/serial_darwin.go @@ -11,7 +11,5 @@ import "syscall" const devFolder = "/dev" const regexFilter = "^(cu|tty)\\..*" -//sys ioctl(fd int, req uint64, data uintptr) (err error) - const ioctlTcgetattr = syscall.TIOCGETA const ioctlTcsetattr = syscall.TIOCSETA diff --git a/serial_freebsd.go b/serial_freebsd.go index 1e09349..c237cfc 100644 --- a/serial_freebsd.go +++ b/serial_freebsd.go @@ -53,7 +53,5 @@ const tcCRTS_IFLOW uint32 = 0x00020000 const tcCRTSCTS uint32 = tcCCTS_OFLOW -//sys ioctl(fd int, req uint64, data uintptr) (err error) - const ioctlTcgetattr = syscall.TIOCGETA const ioctlTcsetattr = syscall.TIOCSETA diff --git a/serial_linux.go b/serial_linux.go index 89f3aed..281820f 100644 --- a/serial_linux.go +++ b/serial_linux.go @@ -60,7 +60,5 @@ const tcIUCLC = syscall.IUCLC const tcCRTSCTS uint32 = 0x80000000 -//sys ioctl(fd int, req uint64, data uintptr) (err error) - const ioctlTcgetattr = syscall.TCGETS const ioctlTcsetattr = syscall.TCSETS diff --git a/serial_windows.go b/serial_windows.go index b66842c..e261cbe 100644 --- a/serial_windows.go +++ b/serial_windows.go @@ -23,8 +23,6 @@ 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 nativeGetPortsList() ([]string, error) { subKey, err := syscall.UTF16PtrFromString("HARDWARE\\DEVICEMAP\\SERIALCOMM\\") if err != nil { @@ -181,10 +179,6 @@ type commTimeouts struct { WriteTotalTimeoutConstant uint32 } -//sys getCommState(handle syscall.Handle, dcb *dcb) (err error) = GetCommState -//sys setCommState(handle syscall.Handle, dcb *dcb) (err error) = SetCommState -//sys setCommTimeouts(handle syscall.Handle, timeouts *commTimeouts) (err error) = SetCommTimeouts - const ( noParity = 0 oddParity = 1 @@ -213,8 +207,6 @@ var stopBitsMap = map[StopBits]byte{ TwoStopBits: twoStopBits, } -//sys escapeCommFunction(handle syscall.Handle, function uint32) (res bool) = EscapeCommFunction - const ( commFunctionSetXOFF = 1 commFunctionSetXON = 2 @@ -226,8 +218,6 @@ const ( commFunctionClrBreak = 9 ) -//sys getCommModemStatus(handle syscall.Handle, bits *uint32) (res bool) = GetCommModemStatus - const ( msCTSOn = 0x0010 msDSROn = 0x0020 @@ -321,10 +311,6 @@ func (port *windowsPort) GetModemStatusBits() (*ModemStatusBits, error) { }, nil } -//sys createEvent(eventAttributes *uint32, manualReset bool, initialState bool, name *uint16) (handle syscall.Handle, err error) = CreateEventW -//sys resetEvent(handle syscall.Handle) (err error) = ResetEvent -//sys getOverlappedResult(handle syscall.Handle, overlapEvent *syscall.Overlapped, n *uint32, wait bool) (err error) = GetOverlappedResult - func createOverlappedEvent() (*syscall.Overlapped, error) { h, err := createEvent(nil, true, false, nil) return &syscall.Overlapped{HEvent: h}, err diff --git a/syscall_darwin.go b/syscall_darwin.go index c8cd031..0d33f37 100644 --- a/syscall_darwin.go +++ b/syscall_darwin.go @@ -4,18 +4,6 @@ // license that can be found in the LICENSE file. // -// This file is machine generated by the command: -// mksyscall.pl serial_darwin.go -// The generated stub is modified to make it compile under the "serial" package - package serial // import "go.bug.st/serial.v1" -import "syscall" - -func ioctl(fd int, req uint64, data uintptr) (err error) { - _, _, e1 := syscall.Syscall(syscall.SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(data)) - if e1 != 0 { - err = e1 - } - return -} +//sys ioctl(fd int, req uint64, data uintptr) (err error) diff --git a/syscall_freebsd.go b/syscall_freebsd.go index c8cd031..0d33f37 100644 --- a/syscall_freebsd.go +++ b/syscall_freebsd.go @@ -4,18 +4,6 @@ // license that can be found in the LICENSE file. // -// This file is machine generated by the command: -// mksyscall.pl serial_darwin.go -// The generated stub is modified to make it compile under the "serial" package - package serial // import "go.bug.st/serial.v1" -import "syscall" - -func ioctl(fd int, req uint64, data uintptr) (err error) { - _, _, e1 := syscall.Syscall(syscall.SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(data)) - if e1 != 0 { - err = e1 - } - return -} +//sys ioctl(fd int, req uint64, data uintptr) (err error) diff --git a/syscall_linux.go b/syscall_linux.go index cb216b1..0d33f37 100644 --- a/syscall_linux.go +++ b/syscall_linux.go @@ -4,18 +4,6 @@ // license that can be found in the LICENSE file. // -// This file is machine generated by the command: -// mksyscall.pl serial_linux.go -// The generated stub is modified to make it compile under the "serial" package - package serial // import "go.bug.st/serial.v1" -import "syscall" - -func ioctl(fd int, req uint64, data uintptr) (err error) { - _, _, e1 := syscall.Syscall(syscall.SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(data)) - if e1 != 0 { - err = e1 - } - return -} +//sys ioctl(fd int, req uint64, data uintptr) (err error) diff --git a/syscall_windows.go b/syscall_windows.go index a72df76..69c4550 100644 --- a/syscall_windows.go +++ b/syscall_windows.go @@ -1,138 +1,25 @@ -// MACHINE GENERATED BY 'go generate' COMMAND; DO NOT EDIT +// +// 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 +package serial // import "go.bug.st/serial.v1" -import ( - "syscall" - "unsafe" +//sys regEnumValue(key syscall.Handle, index uint32, name *uint16, nameLen *uint32, reserved *uint32, class *uint16, value *uint16, valueLen *uint32) (regerrno error) = advapi32.RegEnumValueW - "golang.org/x/sys/windows" -) +//sys getCommState(handle syscall.Handle, dcb *dcb) (err error) = GetCommState -var _ unsafe.Pointer +//sys setCommState(handle syscall.Handle, dcb *dcb) (err error) = SetCommState -var ( - modadvapi32 = windows.NewLazySystemDLL("advapi32.dll") - modkernel32 = windows.NewLazySystemDLL("kernel32.dll") +//sys setCommTimeouts(handle syscall.Handle, timeouts *commTimeouts) (err error) = SetCommTimeouts - procRegEnumValueW = modadvapi32.NewProc("RegEnumValueW") - procGetCommState = modkernel32.NewProc("GetCommState") - procSetCommState = modkernel32.NewProc("SetCommState") - procSetCommTimeouts = modkernel32.NewProc("SetCommTimeouts") - procEscapeCommFunction = modkernel32.NewProc("EscapeCommFunction") - procGetCommModemStatus = modkernel32.NewProc("GetCommModemStatus") - procCreateEventW = modkernel32.NewProc("CreateEventW") - procResetEvent = modkernel32.NewProc("ResetEvent") - procGetOverlappedResult = modkernel32.NewProc("GetOverlappedResult") -) +//sys escapeCommFunction(handle syscall.Handle, function uint32) (res bool) = EscapeCommFunction -func regEnumValue(key syscall.Handle, index uint32, name *uint16, nameLen *uint32, reserved *uint32, class *uint16, value *uint16, valueLen *uint32) (regerrno error) { - r0, _, _ := syscall.Syscall9(procRegEnumValueW.Addr(), 8, uintptr(key), uintptr(index), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(nameLen)), uintptr(unsafe.Pointer(reserved)), uintptr(unsafe.Pointer(class)), uintptr(unsafe.Pointer(value)), uintptr(unsafe.Pointer(valueLen)), 0) - if r0 != 0 { - regerrno = syscall.Errno(r0) - } - return -} +//sys getCommModemStatus(handle syscall.Handle, bits *uint32) (res bool) = GetCommModemStatus -func getCommState(handle syscall.Handle, dcb *dcb) (err error) { - r1, _, e1 := syscall.Syscall(procGetCommState.Addr(), 2, uintptr(handle), uintptr(unsafe.Pointer(dcb)), 0) - if r1 == 0 { - if e1 != 0 { - err = error(e1) - } else { - err = syscall.EINVAL - } - } - return -} +//sys createEvent(eventAttributes *uint32, manualReset bool, initialState bool, name *uint16) (handle syscall.Handle, err error) = CreateEventW -func setCommState(handle syscall.Handle, dcb *dcb) (err error) { - r1, _, e1 := syscall.Syscall(procSetCommState.Addr(), 2, uintptr(handle), uintptr(unsafe.Pointer(dcb)), 0) - if r1 == 0 { - if e1 != 0 { - err = error(e1) - } else { - err = syscall.EINVAL - } - } - return -} +//sys resetEvent(handle syscall.Handle) (err error) = ResetEvent -func setCommTimeouts(handle syscall.Handle, timeouts *commTimeouts) (err error) { - r1, _, e1 := syscall.Syscall(procSetCommTimeouts.Addr(), 2, uintptr(handle), uintptr(unsafe.Pointer(timeouts)), 0) - if r1 == 0 { - if e1 != 0 { - err = error(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func escapeCommFunction(handle syscall.Handle, function uint32) (res bool) { - r0, _, _ := syscall.Syscall(procEscapeCommFunction.Addr(), 2, uintptr(handle), uintptr(function), 0) - res = r0 != 0 - return -} - -func getCommModemStatus(handle syscall.Handle, bits *uint32) (res bool) { - r0, _, _ := syscall.Syscall(procGetCommModemStatus.Addr(), 2, uintptr(handle), uintptr(unsafe.Pointer(bits)), 0) - res = r0 != 0 - return -} - -func createEvent(eventAttributes *uint32, manualReset bool, initialState bool, name *uint16) (handle syscall.Handle, err error) { - var _p0 uint32 - if manualReset { - _p0 = 1 - } else { - _p0 = 0 - } - var _p1 uint32 - if initialState { - _p1 = 1 - } else { - _p1 = 0 - } - r0, _, e1 := syscall.Syscall6(procCreateEventW.Addr(), 4, uintptr(unsafe.Pointer(eventAttributes)), uintptr(_p0), uintptr(_p1), uintptr(unsafe.Pointer(name)), 0, 0) - handle = syscall.Handle(r0) - if handle == 0 { - if e1 != 0 { - err = error(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func resetEvent(handle syscall.Handle) (err error) { - r1, _, e1 := syscall.Syscall(procResetEvent.Addr(), 1, uintptr(handle), 0, 0) - if r1 == 0 { - if e1 != 0 { - err = error(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func getOverlappedResult(handle syscall.Handle, overlapEvent *syscall.Overlapped, n *uint32, wait bool) (err error) { - var _p0 uint32 - if wait { - _p0 = 1 - } else { - _p0 = 0 - } - r1, _, e1 := syscall.Syscall6(procGetOverlappedResult.Addr(), 4, uintptr(handle), uintptr(unsafe.Pointer(overlapEvent)), uintptr(unsafe.Pointer(n)), uintptr(_p0), 0, 0) - if r1 == 0 { - if e1 != 0 { - err = error(e1) - } else { - err = syscall.EINVAL - } - } - return -} +//sys getOverlappedResult(handle syscall.Handle, overlapEvent *syscall.Overlapped, n *uint32, wait bool) (err error) = GetOverlappedResult diff --git a/zsyscall_darwin.go b/zsyscall_darwin.go new file mode 100644 index 0000000..c8cd031 --- /dev/null +++ b/zsyscall_darwin.go @@ -0,0 +1,21 @@ +// +// 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. +// + +// This file is machine generated by the command: +// mksyscall.pl serial_darwin.go +// The generated stub is modified to make it compile under the "serial" package + +package serial // import "go.bug.st/serial.v1" + +import "syscall" + +func ioctl(fd int, req uint64, data uintptr) (err error) { + _, _, e1 := syscall.Syscall(syscall.SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(data)) + if e1 != 0 { + err = e1 + } + return +} diff --git a/zsyscall_freebsd.go b/zsyscall_freebsd.go new file mode 100644 index 0000000..c8cd031 --- /dev/null +++ b/zsyscall_freebsd.go @@ -0,0 +1,21 @@ +// +// 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. +// + +// This file is machine generated by the command: +// mksyscall.pl serial_darwin.go +// The generated stub is modified to make it compile under the "serial" package + +package serial // import "go.bug.st/serial.v1" + +import "syscall" + +func ioctl(fd int, req uint64, data uintptr) (err error) { + _, _, e1 := syscall.Syscall(syscall.SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(data)) + if e1 != 0 { + err = e1 + } + return +} diff --git a/zsyscall_linux.go b/zsyscall_linux.go new file mode 100644 index 0000000..cb216b1 --- /dev/null +++ b/zsyscall_linux.go @@ -0,0 +1,21 @@ +// +// 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. +// + +// This file is machine generated by the command: +// mksyscall.pl serial_linux.go +// The generated stub is modified to make it compile under the "serial" package + +package serial // import "go.bug.st/serial.v1" + +import "syscall" + +func ioctl(fd int, req uint64, data uintptr) (err error) { + _, _, e1 := syscall.Syscall(syscall.SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(data)) + if e1 != 0 { + err = e1 + } + return +} diff --git a/zsyscall_windows.go b/zsyscall_windows.go new file mode 100644 index 0000000..a72df76 --- /dev/null +++ b/zsyscall_windows.go @@ -0,0 +1,138 @@ +// MACHINE GENERATED BY 'go generate' COMMAND; DO NOT EDIT + +package serial + +import ( + "syscall" + "unsafe" + + "golang.org/x/sys/windows" +) + +var _ unsafe.Pointer + +var ( + modadvapi32 = windows.NewLazySystemDLL("advapi32.dll") + modkernel32 = windows.NewLazySystemDLL("kernel32.dll") + + procRegEnumValueW = modadvapi32.NewProc("RegEnumValueW") + procGetCommState = modkernel32.NewProc("GetCommState") + procSetCommState = modkernel32.NewProc("SetCommState") + procSetCommTimeouts = modkernel32.NewProc("SetCommTimeouts") + procEscapeCommFunction = modkernel32.NewProc("EscapeCommFunction") + procGetCommModemStatus = modkernel32.NewProc("GetCommModemStatus") + procCreateEventW = modkernel32.NewProc("CreateEventW") + procResetEvent = modkernel32.NewProc("ResetEvent") + procGetOverlappedResult = modkernel32.NewProc("GetOverlappedResult") +) + +func regEnumValue(key syscall.Handle, index uint32, name *uint16, nameLen *uint32, reserved *uint32, class *uint16, value *uint16, valueLen *uint32) (regerrno error) { + r0, _, _ := syscall.Syscall9(procRegEnumValueW.Addr(), 8, uintptr(key), uintptr(index), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(nameLen)), uintptr(unsafe.Pointer(reserved)), uintptr(unsafe.Pointer(class)), uintptr(unsafe.Pointer(value)), uintptr(unsafe.Pointer(valueLen)), 0) + if r0 != 0 { + regerrno = syscall.Errno(r0) + } + return +} + +func getCommState(handle syscall.Handle, dcb *dcb) (err error) { + r1, _, e1 := syscall.Syscall(procGetCommState.Addr(), 2, uintptr(handle), uintptr(unsafe.Pointer(dcb)), 0) + if r1 == 0 { + if e1 != 0 { + err = error(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func setCommState(handle syscall.Handle, dcb *dcb) (err error) { + r1, _, e1 := syscall.Syscall(procSetCommState.Addr(), 2, uintptr(handle), uintptr(unsafe.Pointer(dcb)), 0) + if r1 == 0 { + if e1 != 0 { + err = error(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func setCommTimeouts(handle syscall.Handle, timeouts *commTimeouts) (err error) { + r1, _, e1 := syscall.Syscall(procSetCommTimeouts.Addr(), 2, uintptr(handle), uintptr(unsafe.Pointer(timeouts)), 0) + if r1 == 0 { + if e1 != 0 { + err = error(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func escapeCommFunction(handle syscall.Handle, function uint32) (res bool) { + r0, _, _ := syscall.Syscall(procEscapeCommFunction.Addr(), 2, uintptr(handle), uintptr(function), 0) + res = r0 != 0 + return +} + +func getCommModemStatus(handle syscall.Handle, bits *uint32) (res bool) { + r0, _, _ := syscall.Syscall(procGetCommModemStatus.Addr(), 2, uintptr(handle), uintptr(unsafe.Pointer(bits)), 0) + res = r0 != 0 + return +} + +func createEvent(eventAttributes *uint32, manualReset bool, initialState bool, name *uint16) (handle syscall.Handle, err error) { + var _p0 uint32 + if manualReset { + _p0 = 1 + } else { + _p0 = 0 + } + var _p1 uint32 + if initialState { + _p1 = 1 + } else { + _p1 = 0 + } + r0, _, e1 := syscall.Syscall6(procCreateEventW.Addr(), 4, uintptr(unsafe.Pointer(eventAttributes)), uintptr(_p0), uintptr(_p1), uintptr(unsafe.Pointer(name)), 0, 0) + handle = syscall.Handle(r0) + if handle == 0 { + if e1 != 0 { + err = error(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func resetEvent(handle syscall.Handle) (err error) { + r1, _, e1 := syscall.Syscall(procResetEvent.Addr(), 1, uintptr(handle), 0, 0) + if r1 == 0 { + if e1 != 0 { + err = error(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func getOverlappedResult(handle syscall.Handle, overlapEvent *syscall.Overlapped, n *uint32, wait bool) (err error) { + var _p0 uint32 + if wait { + _p0 = 1 + } else { + _p0 = 0 + } + r1, _, e1 := syscall.Syscall6(procGetOverlappedResult.Addr(), 4, uintptr(handle), uintptr(unsafe.Pointer(overlapEvent)), uintptr(unsafe.Pointer(n)), uintptr(_p0), 0, 0) + if r1 == 0 { + if e1 != 0 { + err = error(e1) + } else { + err = syscall.EINVAL + } + } + return +}