ble: Bluetooth Low Energy (BLE) peripherals

[ bsd3, library, program, unclassified ] [ Propose Tags ]

This package provides a Haskell API for writing Bluetooth Low Energy peripherals.


[Skip to Readme]

Flags

Manual Flags

NameDescriptionDefault
bluez543

Bluez version 5.43 or greater

Disabled
hasbluez

Whether to run tests that require Bluez

Enabled

Use -f <flag> to enable a flag, or -f -<flag> to disable that flag. More info

Downloads

Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees

Candidates

  • No Candidates
Versions [RSS] 0.1.0.0, 0.1.1.0, 0.1.2.0, 0.1.3.0, 0.2.0.0, 0.3.0.0, 0.3.1.0, 0.3.2.0, 0.3.2.1, 0.3.3.0, 0.3.4.0, 0.4.0.0, 0.4.1, 0.4.2
Dependencies base (>=4.8 && <4.10), ble, bytestring (>=0.10 && <0.11), cereal (>=0.4 && <0.6), containers (>=0.5 && <0.6), d-bus (>=0.1.5 && <0.2), data-default-class (>=0.0 && <0.2), hslogger, markdown-unlit, microlens (>=0.4 && <0.5), microlens-ghc (>=0.4 && <0.5), microlens-th (>=0.4 && <0.5), mtl (>=2.2 && <2.3), random (>=1 && <2), stm, text (>=1 && <2), transformers (>=0.4 && <0.6), uuid (>=1 && <2) [details]
License BSD-3-Clause
Copyright 2016 Julian K. Arni
Author Julian K. Arni
Maintainer jkarni@turingjump.com
Home page http://github.com/plow-technologies/ble#readme
Bug tracker https://github.com/plow-technologies/ble/issues
Source repo head: git clone https://github.com/plow-technologies/ble
Uploaded by jkarni at 2017-05-07T13:11:39Z
Distributions
Executables readme, hrs, auth
Downloads 10517 total (44 in the last 30 days)
Rating (no votes yet) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs uploaded by user [build log]
All reported builds failed as of 2017-05-07 [all 3 reports]

Readme for ble-0.3.4.0

[back to package description]

ble - Bluetooth Low Energy for Haskell

ble is a Haskell library for writing Bluetooth Low Energy peripherals (and soon centrals).

For usage, see the haddocks. There are also examples in examples directory.

Example

The code below is a simple example of a complete Bluetooth Low Energy application. The application allows a counter to be read, and adds one to the value of the counter, as well as allowing the counter to be set to any value.

module Main (main) where

import Bluetooth
import Control.Concurrent     (threadDelay)
import Control.Concurrent.STM
import Control.Monad.IO.Class

main :: IO ()
main = do
  ref <- newTVarIO 0
  conn <- connect
  x <- runBluetoothM (registerAndAdvertiseApplication $ app ref) conn
  case x of
    Right _ -> putStrLn "Started BLE counter application!"
    Left e -> error $ "Error starting application " ++ show e
  threadDelay maxBound

app :: TVar Int -> Application
app ref
  = "/com/turingjump/example/counter"
     & services .~ [counter ref]

counter :: TVar Int -> Service
counter ref
  = "4f1f704f-0a0b-49e4-bd27-6368f27697a7"
     & characteristics .~ [getCounter ref]

getCounter :: TVar Int -> CharacteristicBS
getCounter ref
  = "90874979-563e-4224-9da6-3b1a6c03e97d"
      & readValue  ?~ encodeRead readV
      & writeValue ?~ encodeWrite writeV
      & properties .~ [CPRead, CPWrite]
  where
    readV :: Handler Int
    readV = liftIO $ do
      v <- atomically $ modifyTVar' ref succ >> readTVar ref
      putStrLn $ "Value requested. New value: " ++ show v
      return v

    writeV :: Int -> Handler Bool
    writeV i = liftIO $ do
      v <- atomically $ swapTVar ref i
      putStrLn $ "Value changed to: " ++ show i
      putStrLn $ "Old value: " ++ show v
      return True

Requirements

ble currently only supports Linux, and requires Bluez versions 5.41 and up. To see what version you are running, type:

bluetoothd --version