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 }