// 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) }
// check if device is a keyboard, mouse or touchpad. func correctDevice(dev *evdev.Device) bool { // check if device is a keyboard if dev.Test(dev.EventTypes(), evdev.EvSync, evdev.EvKeys, evdev.EvMisc, evdev.EvLed, evdev.EvRepeat) { return true } // check if device is a mouse if dev.Test(dev.EventTypes(), evdev.EvSync, evdev.EvKeys, evdev.EvRelative, evdev.EvMisc) { return true } // check if device is a touchpad if dev.Test(dev.EventTypes(), evdev.EvSync, evdev.EvKeys, evdev.EvAbsolute) { return true } return false }