packages feed

gpmf 0.1.1.2 → 0.1.2.0

raw patch · 4 files changed

+39/−30 lines, 4 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

+ GoPro.GPMF.Lenses: _GComplex :: Prism' Value (String, [Value])
+ GoPro.GPMF.Lenses: _GDouble :: Prism' Value Double
+ GoPro.GPMF.Lenses: _GFloat :: Prism' Value [Float]
+ GoPro.GPMF.Lenses: _GFourCC :: Prism' Value FourCC
+ GoPro.GPMF.Lenses: _GInt16 :: Prism' Value [Int16]
+ GoPro.GPMF.Lenses: _GInt32 :: Prism' Value [Int32]
+ GoPro.GPMF.Lenses: _GInt64 :: Prism' Value [Int64]
+ GoPro.GPMF.Lenses: _GInt8 :: Prism' Value [Int8]
+ GoPro.GPMF.Lenses: _GNested :: Prism' Value (FourCC, [Value])
+ GoPro.GPMF.Lenses: _GQ32 :: Prism' Value [Word32]
+ GoPro.GPMF.Lenses: _GQ64 :: Prism' Value [Word64]
+ GoPro.GPMF.Lenses: _GString :: Prism' Value String
+ GoPro.GPMF.Lenses: _GTimestamp :: Prism' Value UTCTime
+ GoPro.GPMF.Lenses: _GUUID :: Prism' Value [Word8]
+ GoPro.GPMF.Lenses: _GUint16 :: Prism' Value [Word16]
+ GoPro.GPMF.Lenses: _GUint32 :: Prism' Value [Word32]
+ GoPro.GPMF.Lenses: _GUint64 :: Prism' Value [Word64]
+ GoPro.GPMF.Lenses: _GUint8 :: Prism' Value [Word8]
+ GoPro.GPMF.Lenses: _GUnknown :: Prism' Value (Char, Int, Int, [[Word8]])

Files

gpmf.cabal view
@@ -4,10 +4,10 @@ -- -- see: https://github.com/sol/hpack ----- hash: 7571cd9d9b95b052897d6f76314c207aa300046dabffcdf8131672c4291a2aee+-- hash: c6d29ad07f44b26f9f044367be3fffd8ca5de406a6c5228a26d694d5f3127f3a  name:           gpmf-version:        0.1.1.2+version:        0.1.2.0 description:    Please see the README on GitHub at <https://github.com/dustin/gpmf#readme> homepage:       https://github.com/dustin/gpmf#readme bug-reports:    https://github.com/dustin/gpmf/issues@@ -30,6 +30,7 @@       GoPro.Command.DEVCString       GoPro.DEVC       GoPro.GPMF+      GoPro.GPMF.Lenses   other-modules:       Paths_gpmf   hs-source-dirs:
src/GoPro/DEVC.hs view
@@ -29,17 +29,17 @@   Telemetry(..), tele_stmp, tele_tsmp, tele_name, tele_values   ) where -import           Control.Lens    hiding (cons)-import           Control.Monad   (guard)-import           Data.Foldable   (fold)-import           Data.List       (transpose)-import           Data.Map.Strict (Map)-import qualified Data.Map.Strict as Map-import           Data.Maybe      (fromMaybe, listToMaybe, mapMaybe)-import           Data.Time.Clock (UTCTime (..))-import           Data.Word       (Word64)+import           Control.Lens      hiding (cons)+import           Data.Foldable     (fold)+import           Data.List         (transpose)+import           Data.Map.Strict   (Map)+import qualified Data.Map.Strict   as Map+import           Data.Maybe        (fromMaybe, mapMaybe)+import           Data.Time.Clock   (UTCTime (..))+import           Data.Word         (Word64)  import           GoPro.GPMF+import           GoPro.GPMF.Lenses  data Accelerometer = Accelerometer     { _acc_temp :: Float@@ -156,7 +156,7 @@         updTele _ o                                 = o          tvals :: TVals-        tvals = (fromMaybe (TVUnknown vals) . ($ vals)) . foldr findGrokker (const Nothing) . concatMap four $ vals+        tvals = (fromMaybe (TVUnknown vals) . ($ vals)) . foldr findGrokker (const Nothing) . foldMap four $ vals           where             four (GNested (x, _)) = [x]             four _                = []@@ -172,22 +172,23 @@ mkDEVC _ = const Nothing  findVal :: FourCC -> [Value] -> Maybe [Value]-findVal f = listToMaybe . findAll f+findVal f = exactlyOne . findAll f  findAll :: FourCC -> [Value] -> [[Value]]-findAll f = mapMaybe g-  where-    g (GNested (fc, vs)) | fc == f = Just vs-    g _                            = Nothing+findAll f = toListOf (folded . _GNested . filtered (\(d,_) -> d == f) . _2) +exactlyOne :: [a] -> Maybe a+exactlyOne [a] = Just a+exactlyOne _   = Nothing+ grokSens :: FourCC -> (Float -> [(Float, Float, Float)] -> a) -> [Value] -> Maybe a grokSens sens cons vals = do-  GFloat templ <- listToMaybe =<< findVal "TMPC" vals-  GInt16 scall <- listToMaybe =<< findVal "SCAL" vals+  GFloat templ <- exactlyOne =<< findVal "TMPC" vals+  GInt16 scall <- exactlyOne =<< findVal "SCAL" vals   readings <- mapMaybe ungint <$> findVal sens vals -  temp <- listToMaybe templ-  scal <- realToFrac <$> listToMaybe scall+  temp <- exactlyOne templ+  scal <- realToFrac <$> exactlyOne scall   scaled <- traverse (trip . fmap (\x -> realToFrac x / scal)) readings    pure $ cons temp scaled@@ -215,11 +216,11 @@  grokGPS :: [Value] -> Maybe GPS grokGPS vals = do-  GUint16 [gpsp] <- listToMaybe =<< findVal "GPSP" vals-  GTimestamp time <- listToMaybe =<< findVal "GPSU" vals+  GUint16 [gpsp] <- exactlyOne =<< findVal "GPSP" vals+  GTimestamp time <- exactlyOne =<< findVal "GPSU" vals   scals <- mapMaybe (fmap realToFrac . anInt) <$> findVal "SCAL" vals   g5s <- findVal "GPS5" vals-  rs <- mconcat <$> traverse (readings scals) g5s+  rs <- fold <$> traverse (readings scals) g5s    pure $ GPS (fromIntegral gpsp) time rs @@ -231,13 +232,12 @@     readings _ _ = Nothing      anInt (GInt32 [x]) = Just x-    anInt _ = Nothing+    anInt _            = Nothing  grokAudioLevel :: [Value] -> Maybe AudioLevel grokAudioLevel vals = do-  alps <- transpose . mapMaybe de <$> findVal "AALP" vals-  guard $ length alps == 2-  pure $ AudioLevel (alps !! 0) (alps !! 1)+  [l1, l2] <- transpose . mapMaybe de <$> findVal "AALP" vals+  pure $ AudioLevel l1 l2    where de (GInt8 xs)      = Just $ fmap fromIntegral xs         de (GComplex _ xs) = Just . fold . mapMaybe de $ xs
src/GoPro/GPMF.hs view
@@ -9,8 +9,8 @@ A low-level parser for <https://github.com/gopro/gpmf-parser GPMF> telemetry data. -} -{-# LANGUAGE TupleSections #-} {-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE TupleSections #-}  module GoPro.GPMF (parseGPMF, Value(..), FourCC(..)) where @@ -28,7 +28,7 @@ import           Data.Time.Clock                  (UTCTime) import           Data.Time.Format                 (defaultTimeLocale, parseTimeM) import           Data.Word                        (Word16, Word32, Word64, Word8)-import GHC.Generics (Generic)+import           GHC.Generics                     (Generic)  {- Type Char	Definition	typedef	Comment
+ src/GoPro/GPMF/Lenses.hs view
@@ -0,0 +1,8 @@+{-# LANGUAGE TemplateHaskell #-}++module GoPro.GPMF.Lenses where++import           Control.Lens+import           GoPro.GPMF++makePrisms ''Value