Added FUSE support #55
|
@ -1,61 +0,0 @@
|
|||
package fusefs
|
||||
|
||||
import (
|
||||
"go.arsenm.dev/infinitime"
|
||||
"context"
|
||||
"strconv"
|
||||
)
|
||||
|
||||
func converterU8(ctx context.Context, in <-chan uint8) <-chan []byte {
|
||||
out := make(chan []byte, 2)
|
||||
go func() {
|
||||
for {
|
||||
select {
|
||||
case <- ctx.Done():
|
||||
return
|
||||
case event := <-in:
|
||||
out <- []byte(strconv.Itoa(int(event)) + "\n")
|
||||
}
|
||||
}
|
||||
}()
|
||||
return out
|
||||
}
|
||||
|
||||
func converterU32(ctx context.Context, in <-chan uint32) <-chan []byte {
|
||||
out := make(chan []byte, 2)
|
||||
go func() {
|
||||
for {
|
||||
select {
|
||||
case <- ctx.Done():
|
||||
return
|
||||
case event := <-in:
|
||||
out <- []byte(strconv.Itoa(int(event)) + "\n")
|
||||
}
|
||||
}
|
||||
}()
|
||||
return out
|
||||
}
|
||||
|
||||
func converterMotionValues(ctx context.Context, in <-chan infinitime.MotionValues) <-chan []byte {
|
||||
out := make(chan []byte, 2)
|
||||
go func() {
|
||||
for {
|
||||
select {
|
||||
case <- ctx.Done():
|
||||
return
|
||||
case event := <-in:
|
||||
out <- []byte(strconv.Itoa(int(event.X)) + " " + strconv.Itoa(int(event.Y)) + " " + strconv.Itoa(int(event.Z)) + "\n")
|
||||
}
|
||||
}
|
||||
}()
|
||||
return out
|
||||
}
|
||||
|
||||
func converter1String(ctx context.Context, in string) <-chan []byte {
|
||||
out := make(chan []byte, 2)
|
||||
out <- []byte(in + "\n")
|
||||
close(out)
|
||||
return out
|
||||
}
|
||||
|
||||
|
|
@ -10,13 +10,13 @@ import (
|
|||
"github.com/hanwen/go-fuse/v2/fuse"
|
||||
"io"
|
||||
"bytes"
|
||||
"strconv"
|
||||
)
|
||||
|
||||
type ITProperty struct {
|
||||
name string
|
||||
Ino uint64
|
||||
oneshot bool
|
||||
gen func(context.Context) (<-chan []byte, error)
|
||||
gen func() ([]byte, error)
|
||||
}
|
||||
|
||||
|
||||
|
@ -55,40 +55,35 @@ func BuildRootNode(dev *infinitime.Device) (*ITNode, error) {
|
|||
var properties = make([]ITProperty, 6)
|
||||
|
||||
func BuildProperties(dev *infinitime.Device) {
|
||||
properties[0] = ITProperty{"heartrate", 2, true,
|
||||
func(ctx context.Context) (<-chan []byte, error) {
|
||||
ans, err := dev.WatchHeartRate(ctx)
|
||||
return converterU8(ctx, ans), err
|
||||
properties[0] = ITProperty{"heartrate", 2,
|
||||
func() ([]byte, error) {
|
||||
ans, err := dev.HeartRate()
|
||||
return []byte(strconv.Itoa(int(ans)) + "\n"), err
|
||||
}}
|
||||
properties[1] = ITProperty{"battery", 3, true,
|
||||
func(ctx context.Context) (<-chan []byte, error) {
|
||||
ans, err := dev.WatchBatteryLevel(ctx)
|
||||
return converterU8(ctx, ans), err
|
||||
properties[1] = ITProperty{"battery", 3,
|
||||
func() ([]byte, error) {
|
||||
ans, err := dev.BatteryLevel()
|
||||
return []byte(strconv.Itoa(int(ans)) + "\n"), err
|
||||
}}
|
||||
properties[2] = ITProperty{"motion", 4, true,
|
||||
func(ctx context.Context) (<-chan []byte, error) {
|
||||
ans, err := dev.WatchMotion(ctx)
|
||||
return converterMotionValues(ctx, ans), err
|
||||
properties[2] = ITProperty{"motion", 4,
|
||||
func() ([]byte, error) {
|
||||
ans, err := dev.Motion()
|
||||
return []byte(strconv.Itoa(int(ans.X)) + " " + strconv.Itoa(int(ans.Y)) + " " + strconv.Itoa(int(ans.Z)) + "\n"), err
|
||||
}}
|
||||
properties[3] = ITProperty{"motion", 5, true,
|
||||
func(ctx context.Context) (<-chan []byte, error) {
|
||||
ans, err := dev.WatchMotion(ctx)
|
||||
return converterMotionValues(ctx, ans), err
|
||||
properties[3] = ITProperty{"stepcount", 6,
|
||||
func() ([]byte, error) {
|
||||
ans, err := dev.StepCount()
|
||||
return []byte(strconv.Itoa(int(ans)) + "\n"), err
|
||||
}}
|
||||
properties[4] = ITProperty{"stepcount", 6, true,
|
||||
func(ctx context.Context) (<-chan []byte, error) {
|
||||
ans, err := dev.WatchStepCount(ctx)
|
||||
return converterU32(ctx, ans), err
|
||||
}}
|
||||
properties[5] = ITProperty{"version", 7, true,
|
||||
func(ctx context.Context) (<-chan []byte, error) {
|
||||
properties[4] = ITProperty{"version", 7,
|
||||
func() ([]byte, error) {
|
||||
ans, err := dev.Version()
|
||||
return converter1String(ctx, ans), err
|
||||
return []byte(ans + "\n"), err
|
||||
}}
|
||||
properties[6] = ITProperty{"address", 8, true,
|
||||
func(ctx context.Context) (<-chan []byte, error) {
|
||||
properties[5] = ITProperty{"address", 8,
|
||||
func() ([]byte, error) {
|
||||
yannickulrich marked this conversation as resolved
Outdated
|
||||
ans := dev.Address()
|
||||
return converter1String(ctx, ans), nil
|
||||
return []byte(ans + "\n"), nil
|
||||
}}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
These variables should go above
BuildRootNode
because it's using them and it would be more readable that way. Also, Go doesn't require semicolons, you can remove those.Done in
673383f