packages feed

hans-2.4.0.0: src/Hans/Device/Ivc.hs

{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE FlexibleContexts #-}
module Hans.Device.Ivc (
    ivcSend
  , ivcReceiveLoop
  ) where

import Hans.Layer.Ethernet (EthernetHandle,queueEthernet)
import Communication.IVC as IVC
import Control.Monad (forever,when)
import qualified Data.ByteString as S

ivcSend :: IVC.WriteableChan c S.ByteString => c -> S.ByteString -> IO ()
ivcSend chan = IVC.put chan

ivcReceiveLoop :: IVC.ReadableChan c S.ByteString => c -> EthernetHandle -> IO ()
ivcReceiveLoop chan eth = forever $
  do bs <- IVC.get chan
     when (S.length bs > 14) (queueEthernet eth bs)