packages feed

hlibBladeRF-0.1.0.0: src/LibBladeRF/Flash.hs

{-|
  Module      : $Header$
  Copyright   : (c) 2014 Edward O'Callaghan
  License     : LGPL-2.1
  Maintainer  : eocallaghan@alterapraxis.com
  Stability   : provisional
  Portability : portable

  This module encapsulates flash libbladeRF library functions.
  WARNING !!! Untested !!!
-}

module LibBladeRF.Flash ( bladeRFEraseFlash
                        , bladeRFReadFlash
--                        , bladeRFWriteFlash
                        ) where

import Foreign
import Foreign.C.Types
import Foreign.C.String

import Bindings.LibBladeRF
import LibBladeRF.LibBladeRF


-- | Erase regions of the bladeRF's SPI flash
--
-- This function operates in units of 64KiB erase blocks
bladeRFEraseFlash :: DeviceHandle  -- ^ Device handle
                  -> Word32        -- ^ Erase block to start erasing at
                  -> Word32        -- ^ Number of blocks to erase.
                  -> IO CInt
bladeRFEraseFlash dev b c = c'bladerf_erase_flash (unDeviceHandle dev) b c

-- | Read data from the bladeRF's SPI flash
--
-- This function operates in units of 256-byte pages.
bladeRFReadFlash :: DeviceHandle -- ^ Device handle
                 -> Word32       -- ^ Page to begin reading from
                 -> Word32       -- ^ Number of pages to read
                 -> IO (CInt, Word8)
bladeRFReadFlash dev p c = do
  bptr <- malloc :: IO (Ptr Word8)
  ret <- c'bladerf_read_flash (unDeviceHandle dev) bptr p c
  buffer <- peek bptr
  free bptr
  return (ret, buffer)

-- | Write data from the bladeRF's SPI flash
-- FIXME - how to pass in a buffer of data???
--bladeRFWriteFlash :: DeviceHandle -> Word32 -> Word32 -> IO (CInt, Word8)
--bladeRFWriteFlash dev p c = do
--  bptr <- malloc :: IO (Ptr Word8)
--  ret <- c'bladerf_write_flash (unDeviceHandle dev) bptr p c
--  buffer <- peek bptr
--  free bptr
--  return (ret, buffer)