packages feed

myo-0.1.0.0: src/Myo/Foreign/Device.hsc

module Myo.Foreign.Device where

import Foreign.Storable
import Foreign.Ptr
import Foreign.ForeignPtr
import Foreign.C.Types

#include "libmyo.h"

data MyoDevice_t
type MyoDevice = ForeignPtr MyoDevice_t

data Vibration =
    VibrationShort
  | VibrationMedium
  | VibrationLong

instance Storable Vibration where
	sizeOf _ = (#size libmyo_vibration_type_t)
	alignment _ = alignment (undefined :: Ptr Vibration)
	peek ptr = do
	  v <- peekByteOff ptr 0
	  return $ case (v :: CInt) of
	    0 -> VibrationShort
	    1 -> VibrationMedium
	    _ -> VibrationLong
	poke p v = case v of
	  VibrationShort  -> pokeByteOff p 0 (0 :: Int)
	  VibrationMedium -> pokeByteOff p 1 (1 :: Int)
	  VibrationLong   -> pokeByteOff p 2  (2 :: Int)