diff --git a/fuse.go b/fuse.go new file mode 100644 index 0000000..3b7ee77 --- /dev/null +++ b/fuse.go @@ -0,0 +1,76 @@ +package main +import ( + "go.arsenm.dev/itd/internal/fusefs" + "os" + "github.com/hanwen/go-fuse/v2/fs" + "github.com/hanwen/go-fuse/v2/fuse" + "go.arsenm.dev/logger/log" + "context" + "go.arsenm.dev/infinitime" +) + +func startFuse(ctx context.Context, dev *infinitime.Device) error { + // This is where we'll mount the FS + os.Mkdir(k.String("fuse.mountpoint"), 0755) + root := &ITNode{kind: 0} + server, err := fs.Mount(k.String("fuse.mountpoint"), root, &fs.Options{ + MountOptions: fuse.MountOptions{ + // Set to true to see how the file system works. + Debug: false, + SingleThreaded: true, + }, + }) + if err != nil { + log.Error("Mounting failed"). + Str("target", k.String("fuse.mountpoint")). + Err(err). + Send() + return err + } + + log.Info("Mounted on target"). + Str("target", k.String("fuse.mountpoint")). + Send() + + properties[0] = ITProperty{"heartrate", 2, + func(ctx context.Context) (<-chan []byte, error) { + ans, err := dev.WatchHeartRate(ctx) + return converterU8(ctx, ans), err + }} + properties[1] = ITProperty{"battery", 3, + func(ctx context.Context) (<-chan []byte, error) { + ans, err := dev.WatchBatteryLevel(ctx) + return converterU8(ctx, ans), err + }} + properties[2] = ITProperty{"motion", 4, + func(ctx context.Context) (<-chan []byte, error) { + ans, err := dev.WatchMotion(ctx) + return converterMotionValues(ctx, ans), err + }} + properties[3] = ITProperty{"stepcount", 5, + func(ctx context.Context) (<-chan []byte, error) { + ans, err := dev.WatchStepCount(ctx) + return converterU32(ctx, ans), err + }} + properties[4] = ITProperty{"version", 6, + func(ctx context.Context) (<-chan []byte, error) { + ans, err := dev.Version() + return converter1String(ctx, ans), err + }} + properties[5] = ITProperty{"address", 7, + func(ctx context.Context) (<-chan []byte, error) { + ans := dev.Address() + return converter1String(ctx, ans), nil + }} + + myfs, err = dev.FS() + if err != nil { + log.Warn("Error getting BLE filesystem").Err(err).Send() + return err + } + inodemap = make(map[string]uint64) + + // Wait until unmount before exiting + go server.Serve() + return nil +} diff --git a/internal/fusefs/fuse.go b/internal/fusefs/fuse.go index 5c3fdec..d8b6530 100644 --- a/internal/fusefs/fuse.go +++ b/internal/fusefs/fuse.go @@ -1,10 +1,9 @@ -package main +package fusefs import ( "go.arsenm.dev/infinitime" "go.arsenm.dev/infinitime/blefs" "go.arsenm.dev/logger/log" - "os" "context" "syscall" "github.com/hanwen/go-fuse/v2/fs" @@ -550,69 +549,3 @@ var _ = (fs.NodeRmdirer)((*ITNode)(nil)) func (f *ITNode) Rmdir(ctx context.Context, name string) syscall.Errno { return f.Unlink(ctx, name) } - -func startFuse(ctx context.Context, dev *infinitime.Device) error { - // This is where we'll mount the FS - os.Mkdir(k.String("fuse.mountpoint"), 0755) - root := &ITNode{kind: 0} - server, err := fs.Mount(k.String("fuse.mountpoint"), root, &fs.Options{ - MountOptions: fuse.MountOptions{ - // Set to true to see how the file system works. - Debug: false, - SingleThreaded: true, - }, - }) - if err != nil { - log.Error("Mounting failed"). - Str("target", k.String("fuse.mountpoint")). - Err(err). - Send() - return err - } - - log.Info("Mounted on target"). - Str("target", k.String("fuse.mountpoint")). - Send() - - properties[0] = ITProperty{"heartrate", 2, - func(ctx context.Context) (<-chan []byte, error) { - ans, err := dev.WatchHeartRate(ctx) - return converterU8(ctx, ans), err - }} - properties[1] = ITProperty{"battery", 3, - func(ctx context.Context) (<-chan []byte, error) { - ans, err := dev.WatchBatteryLevel(ctx) - return converterU8(ctx, ans), err - }} - properties[2] = ITProperty{"motion", 4, - func(ctx context.Context) (<-chan []byte, error) { - ans, err := dev.WatchMotion(ctx) - return converterMotionValues(ctx, ans), err - }} - properties[3] = ITProperty{"stepcount", 5, - func(ctx context.Context) (<-chan []byte, error) { - ans, err := dev.WatchStepCount(ctx) - return converterU32(ctx, ans), err - }} - properties[4] = ITProperty{"version", 6, - func(ctx context.Context) (<-chan []byte, error) { - ans, err := dev.Version() - return converter1String(ctx, ans), err - }} - properties[5] = ITProperty{"address", 7, - func(ctx context.Context) (<-chan []byte, error) { - ans := dev.Address() - return converter1String(ctx, ans), nil - }} - - myfs, err = dev.FS() - if err != nil { - log.Warn("Error getting BLE filesystem").Err(err).Send() - return err - } - inodemap = make(map[string]uint64) - - // Wait until unmount before exiting - go server.Serve() - return nil -}