mirror of
https://github.com/rwinkhart/sys.git
synced 2026-08-28 04:46:44 -04:00
unix: add ioctl wrappers for RTC wake alarm on Linux
Add wrappers to set and get RTC wake alarm on Linux via the RTC_WKALM_SET and RTC_WKALM_RD ioctls. Change-Id: I98c36b2252b2fe65cfaba5dde879f6019ff1ae91 GitHub-Last-Rev: a78d0f41932c6f400784b65b1fff10eb6f1a802c GitHub-Pull-Request: golang/sys#71 Reviewed-on: https://go-review.googlesource.com/c/sys/+/236140 Run-TryBot: Ian Lance Taylor <iant@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
This commit is contained in:
committed by
Ian Lance Taylor
parent
8d3cce7afc
commit
6fdc65e7d9
@@ -97,6 +97,12 @@ func IoctlSetRTCTime(fd int, value *RTCTime) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func IoctlSetRTCWkAlrm(fd int, value *RTCWkAlrm) error {
|
||||||
|
err := ioctl(fd, RTC_WKALM_SET, uintptr(unsafe.Pointer(value)))
|
||||||
|
runtime.KeepAlive(value)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
func IoctlGetUint32(fd int, req uint) (uint32, error) {
|
func IoctlGetUint32(fd int, req uint) (uint32, error) {
|
||||||
var value uint32
|
var value uint32
|
||||||
err := ioctl(fd, req, uintptr(unsafe.Pointer(&value)))
|
err := ioctl(fd, req, uintptr(unsafe.Pointer(&value)))
|
||||||
@@ -109,6 +115,12 @@ func IoctlGetRTCTime(fd int) (*RTCTime, error) {
|
|||||||
return &value, err
|
return &value, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func IoctlGetRTCWkAlrm(fd int) (*RTCWkAlrm, error) {
|
||||||
|
var value RTCWkAlrm
|
||||||
|
err := ioctl(fd, RTC_WKALM_RD, uintptr(unsafe.Pointer(&value)))
|
||||||
|
return &value, err
|
||||||
|
}
|
||||||
|
|
||||||
//sys Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error)
|
//sys Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error)
|
||||||
|
|
||||||
func Link(oldpath string, newpath string) (err error) {
|
func Link(oldpath string, newpath string) (err error) {
|
||||||
|
|||||||
@@ -73,6 +73,22 @@ func TestIoctlGetRTCTime(t *testing.T) {
|
|||||||
t.Logf("RTC time: %04d-%02d-%02d %02d:%02d:%02d", v.Year+1900, v.Mon+1, v.Mday, v.Hour, v.Min, v.Sec)
|
t.Logf("RTC time: %04d-%02d-%02d %02d:%02d:%02d", v.Year+1900, v.Mon+1, v.Mday, v.Hour, v.Min, v.Sec)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestIoctlGetRTCWkAlrm(t *testing.T) {
|
||||||
|
f, err := os.Open("/dev/rtc0")
|
||||||
|
if err != nil {
|
||||||
|
t.Skipf("skipping test, %v", err)
|
||||||
|
}
|
||||||
|
defer f.Close()
|
||||||
|
|
||||||
|
v, err := unix.IoctlGetRTCWkAlrm(int(f.Fd()))
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("failed to perform ioctl: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
t.Logf("RTC wake alarm enabled '%d'; time: %04d-%02d-%02d %02d:%02d:%02d",
|
||||||
|
v.Enabled, v.Time.Year+1900, v.Time.Mon+1, v.Time.Mday, v.Time.Hour, v.Time.Min, v.Time.Sec)
|
||||||
|
}
|
||||||
|
|
||||||
func TestPpoll(t *testing.T) {
|
func TestPpoll(t *testing.T) {
|
||||||
if runtime.GOOS == "android" {
|
if runtime.GOOS == "android" {
|
||||||
t.Skip("mkfifo syscall is not available on android, skipping test")
|
t.Skip("mkfifo syscall is not available on android, skipping test")
|
||||||
|
|||||||
Reference in New Issue
Block a user