packages feed

myo-0.2.0.0: examples/WS.hs

{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE OverloadedStrings #-}
module Main where

import Myo.WebSockets
import Network.WebSockets
import qualified Data.Aeson as JSON
import Control.Monad
import Data.String.Conv
import Lens.Family2

main :: IO ()
main = connect V3 "com.example.appid" "localhost" 10138 myoApp

myoApp :: Connection -> IO ()
myoApp conn = forever $ do
  newData <- receiveData conn
  let msg = JSON.eitherDecode' newData
  case msg of
    Left e   -> do
      putStrLn e
      print newData
    Right r -> case r of
      Evt my -> case my ^. mye_type of
          EVT_Paired -> putStrLn "MYO PAIRED!"
          EVT_Connected -> putStrLn "MYO CONNECTED!"
          EVT_Pose -> case my ^. mye_pose of
              Nothing -> putStrLn "GOT A POSE!"
              Just  Double_Tap -> do
                putStrLn $ "GOT POSE: " ++ show Double_Tap
                let vCmd = newCommand (my ^. mye_myo) (Set_Locking_Policy LKP_standard)
                putStrLn $ toS $ JSON.encode vCmd
                sendCommand conn vCmd
              Just  p -> putStrLn $ "GOT POSE: " ++ show p
          EVT_Arm_Synced -> do
            putStrLn "MYO ARM SYNCED"
          EVT_Arm_Unsynced -> putStrLn "MYO ARM UNSYNCED"
          _ -> return ()
      Cmd c -> print c
      Ack a -> do
        putStrLn "Acknowledged command!"
        print a