diff --git a/internal/fusefs/converters.go b/internal/fusefs/converters.go deleted file mode 100644 index c0a5cee..0000000 --- a/internal/fusefs/converters.go +++ /dev/null @@ -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 -} - - diff --git a/internal/fusefs/fuse.go b/internal/fusefs/fuse.go index b9f8ed0..fceaae0 100644 --- a/internal/fusefs/fuse.go +++ b/internal/fusefs/fuse.go @@ -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) { ans := dev.Address() - return converter1String(ctx, ans), nil + return []byte(ans + "\n"), nil }} }