diff --git a/.gitignore b/.gitignore index a1338d6..fc79cc3 100644 --- a/.gitignore +++ b/.gitignore @@ -1,14 +1,8 @@ -# Binaries for programs and plugins -*.exe *.dll -*.so *.dylib - -# Test binary, build with `go test -c` -*.test - -# Output of the go coverage tool, specifically when used with LiteIDE +*.exe *.out - -# Project-local glide cache, RE: https://github.com/Masterminds/glide/issues/736 +*.so +*.test .glide/ +linux-input-control diff --git a/main.go b/main.go new file mode 100644 index 0000000..cb64d6b --- /dev/null +++ b/main.go @@ -0,0 +1,60 @@ +package main + +import ( + "encoding/binary" + "log" + "os" +) + +var ( + senable = []byte("a") + sdisable = []byte("d") +) + +func main() { + // TODO: command line flag + masterPath := "/dev/input/event0" + slavePath := "/sys/bus/i2c/devices/0-0050/neocmd" + + var master, slave *os.File + var err error + if master, err = os.Open(masterPath); err != nil { + log.Fatal("open ", masterPath, err) + } + + slaveState := true + evb := make([]byte, 16) + for { + n, err := master.Read(evb) + if err != nil { + log.Print("master.Read: ", err) + continue + } + if n != 16 { + log.Printf("master.Read invalid event size=%d, ignore", n) + continue + } + evType := binary.LittleEndian.Uint16(evb[8:]) + evCode := binary.LittleEndian.Uint16(evb[10:]) + evValue := binary.LittleEndian.Uint32(evb[12:]) + log.Printf("event type=%d code=%d value=%d", evType, evCode, evValue) + + if evType == 1 && evCode == 116 && evValue == 1 { + sb := senable + slaveState = !slaveState + if !slaveState { + sb = sdisable + } + log.Printf("power key pressed, new slavestate=%v writing=%s", slaveState, string(sb)) + if slave, err = os.OpenFile(slavePath, os.O_WRONLY|os.O_TRUNC, 0644); err != nil { + log.Fatal("open ", slavePath, err) + } + if _, err = slave.WriteAt(sb, 0); err != nil { + log.Fatal("slave.Write ", err) + } + if err = slave.Close(); err != nil { + log.Fatal("slave.Close ", err) + } + } + } +} diff --git a/readme.md b/readme.md new file mode 100644 index 0000000..6ab3f1e --- /dev/null +++ b/readme.md @@ -0,0 +1,17 @@ +What +==== + +For XCSoar flight pilots. Switch IR touchpad on/off with power button on Kobo. + + +Instruction +=========== + +Build: `ARCH=arm GOARM=7 GOOS=linux go build` +Upload: `tnftp -u kobo@192.168.1.111: linux-input-control` + + +Contact +======= + +temotor@gmail.com