// setEffects creates, uploads and plays a new Force feedback effect. // This function uploads only 1 effect, but it can deal with // up to N effects at the same time. Where N is whatever value // returned from `Device.ForceFeedbackCaps()`. func setEffects(dev *evdev.Device) { _, caps := dev.ForceFeedbackCaps() var effect evdev.Effect effect.Id = -1 effect.Trigger.Button = 0 effect.Trigger.Interval = 0 effect.Replay.Length = 20000 // 20 seconds effect.Replay.Delay = 0 // Some samples of various effect types. // (un)comment any one to try them out. Note that // the device must support a given effect type. switch { case dev.Test(caps, evdev.FFRumble): rumble(&effect) case dev.Test(caps, evdev.FFPeriodic): periodic(&effect) case dev.Test(caps, evdev.FFConstant): constant(&effect) case dev.Test(caps, evdev.FFSpring): spring(&effect) case dev.Test(caps, evdev.FFDamper): damper(&effect) } // Upload the effect. dev.SetEffects(&effect) fmt.Printf("Effect id: %d\n", effect.Id) // Play the effect. dev.PlayEffect(effect.Id) // Delete the effect. dev.UnsetEffects(&effect) }