arduino-copilot 1.6.0 → 1.7.0
raw patch · 20 files changed
+94/−82 lines, 20 filesdep ~sketch-frp-copilotPVP ok
version bump matches the API change (PVP)
Dependency ranges changed: sketch-frp-copilot
API changes (from Hackage documentation)
- Copilot.Arduino: data PinId
- Copilot.Arduino: instance Sketch.FRP.Copilot.Types.Input Copilot.Arduino.Internals.PinId Copilot.Arduino.ClockMicros GHC.Word.Word32
- Copilot.Arduino: instance Sketch.FRP.Copilot.Types.Input Copilot.Arduino.Internals.PinId Copilot.Arduino.ClockMillis GHC.Word.Word32
- Copilot.Arduino.Internals: PinId :: Int16 -> PinId
- Copilot.Arduino.Internals: instance GHC.Classes.Eq Copilot.Arduino.Internals.PinId
- Copilot.Arduino.Internals: instance GHC.Classes.Ord Copilot.Arduino.Internals.PinId
- Copilot.Arduino.Internals: instance GHC.Show.Show Copilot.Arduino.Internals.PinId
- Copilot.Arduino.Internals: instance Sketch.FRP.Copilot.Types.IsAnalogInputPin t => Sketch.FRP.Copilot.Types.Input Copilot.Arduino.Internals.PinId (Copilot.Arduino.Internals.Pin t) Copilot.Arduino.Internals.ADC
- Copilot.Arduino.Internals: instance Sketch.FRP.Copilot.Types.IsDigitalIOPin t => Sketch.FRP.Copilot.Types.Input Copilot.Arduino.Internals.PinId (Copilot.Arduino.Internals.Pin t) GHC.Types.Bool
- Copilot.Arduino.Internals: instance Sketch.FRP.Copilot.Types.IsDigitalIOPin t => Sketch.FRP.Copilot.Types.Output Copilot.Arduino.Internals.PinId (Copilot.Arduino.Internals.Pin t) (Sketch.FRP.Copilot.Types.Event () (Copilot.Language.Stream.Stream GHC.Types.Bool))
- Copilot.Arduino.Internals: instance Sketch.FRP.Copilot.Types.IsPWMPin t => Sketch.FRP.Copilot.Types.Output Copilot.Arduino.Internals.PinId (Copilot.Arduino.Internals.Pin t) (Sketch.FRP.Copilot.Types.Event 'Sketch.FRP.Copilot.Types.PWM (Copilot.Language.Stream.Stream GHC.Word.Word8))
- Copilot.Arduino.Internals: instance Sketch.FRP.Copilot.Types.Output Copilot.Arduino.Internals.PinId Sketch.FRP.Copilot.Delay Sketch.FRP.Copilot.MicroSeconds
- Copilot.Arduino.Internals: instance Sketch.FRP.Copilot.Types.Output Copilot.Arduino.Internals.PinId Sketch.FRP.Copilot.Delay Sketch.FRP.Copilot.MilliSeconds
- Copilot.Arduino.Internals: newtype PinId
- Copilot.Arduino.Library.EEPROMex: instance (Copilot.Arduino.Internals.ShowCType t, Copilot.Arduino.Library.EEPROMex.EEPROMable t) => Sketch.FRP.Copilot.Types.Input Copilot.Arduino.Internals.PinId (Copilot.Arduino.Library.EEPROMex.RangeReads t) t
- Copilot.Arduino.Library.EEPROMex: instance Copilot.Arduino.Library.EEPROMex.EEPROMable t => Sketch.FRP.Copilot.Types.Output Copilot.Arduino.Internals.PinId (Copilot.Arduino.Library.EEPROMex.Location t) (Sketch.FRP.Copilot.Types.Event () (Copilot.Language.Stream.Stream t))
- Copilot.Arduino.Library.EEPROMex: instance Copilot.Arduino.Library.EEPROMex.EEPROMable t => Sketch.FRP.Copilot.Types.Output Copilot.Arduino.Internals.PinId (Copilot.Arduino.Library.EEPROMex.Range t) (Copilot.Arduino.Library.EEPROMex.RangeWrites t)
- Copilot.Arduino.Library.EEPROMex: instance Copilot.Arduino.Library.EEPROMex.EEPROMable t => Sketch.FRP.Copilot.Types.Output Copilot.Arduino.Internals.PinId (Copilot.Arduino.Library.EEPROMex.Range t) (Sketch.FRP.Copilot.Types.Event () (Copilot.Arduino.Library.EEPROMex.RangeWrites t))
- Copilot.Arduino.Library.Random: instance Sketch.FRP.Copilot.Types.Input Copilot.Arduino.Internals.PinId Copilot.Arduino.Library.Random.RandomInput GHC.Word.Word32
- Copilot.Arduino.Library.Random: instance Sketch.FRP.Copilot.Types.Output Copilot.Arduino.Internals.PinId Copilot.Arduino.Library.Random.RandomSeed (Sketch.FRP.Copilot.Types.Event () (Copilot.Language.Stream.Stream Copilot.Arduino.Internals.ADC))
- Copilot.Arduino.Library.Random: instance Sketch.FRP.Copilot.Types.Output Copilot.Arduino.Internals.PinId Copilot.Arduino.Library.Random.RandomSeed (Sketch.FRP.Copilot.Types.Event () (Copilot.Language.Stream.Stream GHC.Word.Word8))
- Copilot.Arduino.Library.Serial.Device: instance Sketch.FRP.Copilot.Types.Input Copilot.Arduino.Internals.PinId Copilot.Arduino.Library.Serial.Device.SerialDevice GHC.Int.Int8
- Copilot.Arduino.Library.Serial.Device: instance Sketch.FRP.Copilot.Types.Output Copilot.Arduino.Internals.PinId Copilot.Arduino.Library.Serial.Device.SerialDevice (Sketch.FRP.Copilot.Types.Event () [Copilot.Arduino.Library.Serial.Device.FormatOutput])
- Copilot.Arduino.Library.Serial.Device: instance Sketch.FRP.Copilot.Types.Output Copilot.Arduino.Internals.PinId Copilot.Arduino.Library.Serial.Device.SerialDevice [Copilot.Arduino.Library.Serial.Device.FormatOutput]
+ Copilot.Arduino: data Arduino
+ Copilot.Arduino: instance Sketch.FRP.Copilot.Types.Input Copilot.Arduino.Internals.Arduino Copilot.Arduino.ClockMicros GHC.Word.Word32
+ Copilot.Arduino: instance Sketch.FRP.Copilot.Types.Input Copilot.Arduino.Internals.Arduino Copilot.Arduino.ClockMillis GHC.Word.Word32
+ Copilot.Arduino.Internals: Arduino :: Int16 -> Arduino
+ Copilot.Arduino.Internals: instance GHC.Classes.Eq Copilot.Arduino.Internals.Arduino
+ Copilot.Arduino.Internals: instance GHC.Classes.Ord Copilot.Arduino.Internals.Arduino
+ Copilot.Arduino.Internals: instance GHC.Show.Show Copilot.Arduino.Internals.Arduino
+ Copilot.Arduino.Internals: instance Sketch.FRP.Copilot.Types.Context Copilot.Arduino.Internals.Arduino
+ Copilot.Arduino.Internals: instance Sketch.FRP.Copilot.Types.IsAnalogInputPin t => Sketch.FRP.Copilot.Types.Input Copilot.Arduino.Internals.Arduino (Copilot.Arduino.Internals.Pin t) Copilot.Arduino.Internals.ADC
+ Copilot.Arduino.Internals: instance Sketch.FRP.Copilot.Types.IsDigitalIOPin t => Sketch.FRP.Copilot.Types.Input Copilot.Arduino.Internals.Arduino (Copilot.Arduino.Internals.Pin t) GHC.Types.Bool
+ Copilot.Arduino.Internals: instance Sketch.FRP.Copilot.Types.IsDigitalIOPin t => Sketch.FRP.Copilot.Types.Output Copilot.Arduino.Internals.Arduino (Copilot.Arduino.Internals.Pin t) (Sketch.FRP.Copilot.Types.Event () (Copilot.Language.Stream.Stream GHC.Types.Bool))
+ Copilot.Arduino.Internals: instance Sketch.FRP.Copilot.Types.IsPWMPin t => Sketch.FRP.Copilot.Types.Output Copilot.Arduino.Internals.Arduino (Copilot.Arduino.Internals.Pin t) (Sketch.FRP.Copilot.Types.Event 'Sketch.FRP.Copilot.Types.PWM (Copilot.Language.Stream.Stream GHC.Word.Word8))
+ Copilot.Arduino.Internals: instance Sketch.FRP.Copilot.Types.Output Copilot.Arduino.Internals.Arduino Sketch.FRP.Copilot.Delay Sketch.FRP.Copilot.MicroSeconds
+ Copilot.Arduino.Internals: instance Sketch.FRP.Copilot.Types.Output Copilot.Arduino.Internals.Arduino Sketch.FRP.Copilot.Delay Sketch.FRP.Copilot.MilliSeconds
+ Copilot.Arduino.Internals: newtype Arduino
+ Copilot.Arduino.Library.EEPROMex: instance (Copilot.Arduino.Internals.ShowCType t, Copilot.Arduino.Library.EEPROMex.EEPROMable t) => Sketch.FRP.Copilot.Types.Input Copilot.Arduino.Internals.Arduino (Copilot.Arduino.Library.EEPROMex.RangeReads t) t
+ Copilot.Arduino.Library.EEPROMex: instance Copilot.Arduino.Library.EEPROMex.EEPROMable t => Sketch.FRP.Copilot.Types.Output Copilot.Arduino.Internals.Arduino (Copilot.Arduino.Library.EEPROMex.Location t) (Sketch.FRP.Copilot.Types.Event () (Copilot.Language.Stream.Stream t))
+ Copilot.Arduino.Library.EEPROMex: instance Copilot.Arduino.Library.EEPROMex.EEPROMable t => Sketch.FRP.Copilot.Types.Output Copilot.Arduino.Internals.Arduino (Copilot.Arduino.Library.EEPROMex.Range t) (Copilot.Arduino.Library.EEPROMex.RangeWrites t)
+ Copilot.Arduino.Library.EEPROMex: instance Copilot.Arduino.Library.EEPROMex.EEPROMable t => Sketch.FRP.Copilot.Types.Output Copilot.Arduino.Internals.Arduino (Copilot.Arduino.Library.EEPROMex.Range t) (Sketch.FRP.Copilot.Types.Event () (Copilot.Arduino.Library.EEPROMex.RangeWrites t))
+ Copilot.Arduino.Library.Random: instance Sketch.FRP.Copilot.Types.Input Copilot.Arduino.Internals.Arduino Copilot.Arduino.Library.Random.RandomInput GHC.Word.Word32
+ Copilot.Arduino.Library.Random: instance Sketch.FRP.Copilot.Types.Output Copilot.Arduino.Internals.Arduino Copilot.Arduino.Library.Random.RandomSeed (Sketch.FRP.Copilot.Types.Event () (Copilot.Language.Stream.Stream Copilot.Arduino.Internals.ADC))
+ Copilot.Arduino.Library.Random: instance Sketch.FRP.Copilot.Types.Output Copilot.Arduino.Internals.Arduino Copilot.Arduino.Library.Random.RandomSeed (Sketch.FRP.Copilot.Types.Event () (Copilot.Language.Stream.Stream GHC.Word.Word8))
+ Copilot.Arduino.Library.Serial.Device: instance Sketch.FRP.Copilot.Types.Input Copilot.Arduino.Internals.Arduino Copilot.Arduino.Library.Serial.Device.SerialDevice GHC.Int.Int8
+ Copilot.Arduino.Library.Serial.Device: instance Sketch.FRP.Copilot.Types.Output Copilot.Arduino.Internals.Arduino Copilot.Arduino.Library.Serial.Device.SerialDevice (Sketch.FRP.Copilot.Types.Event () [Copilot.Arduino.Library.Serial.Device.FormatOutput])
+ Copilot.Arduino.Library.Serial.Device: instance Sketch.FRP.Copilot.Types.Output Copilot.Arduino.Internals.Arduino Copilot.Arduino.Library.Serial.Device.SerialDevice [Copilot.Arduino.Library.Serial.Device.FormatOutput]
- Copilot.Arduino: (=:) :: Output pinid o t => o -> t -> GenSketch pinid ()
+ Copilot.Arduino: (=:) :: Output ctx o t => o -> t -> GenSketch ctx ()
- Copilot.Arduino: class Input pinid o t
+ Copilot.Arduino: class Input ctx o t
- Copilot.Arduino: class Output pinid o t
+ Copilot.Arduino: class Output ctx o t
- Copilot.Arduino: input :: Input pinid o t => o -> GenSketch pinid (Behavior t)
+ Copilot.Arduino: input :: Input ctx o t => o -> GenSketch ctx (Behavior t)
- Copilot.Arduino: input' :: Input pinid o t => o -> [t] -> GenSketch pinid (Behavior t)
+ Copilot.Arduino: input' :: Input ctx o t => o -> [t] -> GenSketch ctx (Behavior t)
- Copilot.Arduino: scheduleB :: (Typed t, Eq t, Ord pinid) => Behavior t -> [(t, GenSketch pinid ())] -> GenSketch pinid ()
+ Copilot.Arduino: scheduleB :: (Typed t, Eq t, Context ctx) => Behavior t -> [(t, GenSketch ctx ())] -> GenSketch ctx ()
- Copilot.Arduino: sketchSpec :: Ord pinid => GenSketch pinid a -> Spec
+ Copilot.Arduino: sketchSpec :: Context ctx => GenSketch ctx a -> Spec
- Copilot.Arduino: type Sketch = GenSketch PinId
+ Copilot.Arduino: type Sketch = GenSketch Arduino
- Copilot.Arduino: whenB :: Ord pinid => Behavior Bool -> GenSketch pinid t -> GenSketch pinid t
+ Copilot.Arduino: whenB :: Context ctx => Behavior Bool -> GenSketch ctx t -> GenSketch ctx t
- Copilot.Arduino.Internals: Pin :: PinId -> Pin t
+ Copilot.Arduino.Internals: Pin :: Arduino -> Pin t
- Copilot.Arduino.Internals: type Framework = GenFramework PinId
+ Copilot.Arduino.Internals: type Framework = GenFramework Arduino
- Copilot.Arduino.Internals: type Sketch = GenSketch PinId
+ Copilot.Arduino.Internals: type Sketch = GenSketch Arduino
Files
- CHANGELOG +7/−0
- Examples/Blink/stack.yaml +1/−1
- Examples/Button/stack.yaml +1/−1
- Examples/ButtonHold/stack.yaml +1/−1
- Examples/EEPROM/stack.yaml +1/−1
- Examples/EEPROMrange/stack.yaml +1/−1
- Examples/Random/stack.yaml +1/−1
- Examples/SerialPort/Demo.hs +1/−1
- Examples/SerialPort/stack.yaml +1/−1
- Examples/WaterHeater/stack.yaml +1/−1
- arduino-copilot.cabal +2/−2
- src/Copilot/Arduino.hs +5/−5
- src/Copilot/Arduino/Internals.hs +20/−15
- src/Copilot/Arduino/Library/EEPROMex.hs +4/−4
- src/Copilot/Arduino/Library/Random.hs +3/−3
- src/Copilot/Arduino/Library/Serial/Device.hs +4/−4
- src/Copilot/Arduino/Main.hs +1/−1
- src/Copilot/Arduino/Nano.hs +20/−20
- src/Copilot/Arduino/Uno.hs +18/−18
- stack.yaml +1/−1
CHANGELOG view
@@ -1,3 +1,10 @@+arduino-copilot (1.7.0) upstream; urgency=medium++ * Added the Arduino data type, which replaces the PinId type used in the+ last release.++ -- Joey Hess <id@joeyh.name> Mon, 14 Feb 2022 21:07:09 -0400+ arduino-copilot (1.6.0) unstable; urgency=medium * Refactored non-Arduino-specific code into sketch-frp-copilot.
Examples/Blink/stack.yaml view
@@ -3,7 +3,7 @@ - '../..' resolver: lts-18.9 extra-deps: -- sketch-frp-copilot-1.0.0+- sketch-frp-copilot-1.0.1 - copilot-3.7 - copilot-c99-3.7 - copilot-core-3.7
Examples/Button/stack.yaml view
@@ -3,7 +3,7 @@ - '../..' resolver: lts-18.9 extra-deps: -- sketch-frp-copilot-1.0.0+- sketch-frp-copilot-1.0.1 - copilot-3.7 - copilot-c99-3.7 - copilot-core-3.7
Examples/ButtonHold/stack.yaml view
@@ -3,7 +3,7 @@ - '../..' resolver: lts-18.9 extra-deps: -- sketch-frp-copilot-1.0.0+- sketch-frp-copilot-1.0.1 - copilot-3.7 - copilot-c99-3.7 - copilot-core-3.7
Examples/EEPROM/stack.yaml view
@@ -3,7 +3,7 @@ - '../..' resolver: lts-18.9 extra-deps: -- sketch-frp-copilot-1.0.0+- sketch-frp-copilot-1.0.1 - copilot-3.7 - copilot-c99-3.7 - copilot-core-3.7
Examples/EEPROMrange/stack.yaml view
@@ -3,7 +3,7 @@ - '../..' resolver: lts-18.9 extra-deps: -- sketch-frp-copilot-1.0.0+- sketch-frp-copilot-1.0.1 - copilot-3.7 - copilot-c99-3.7 - copilot-core-3.7
Examples/Random/stack.yaml view
@@ -3,7 +3,7 @@ - '../..' resolver: lts-18.9 extra-deps: -- sketch-frp-copilot-1.0.0+- sketch-frp-copilot-1.0.1 - copilot-3.7 - copilot-c99-3.7 - copilot-core-3.7
Examples/SerialPort/Demo.hs view
@@ -21,7 +21,7 @@ userIsTyping :: Behavior Int8 -> Behavior Bool userIsTyping userinput = userinput /= constant Serial.noInput -getSerial :: Input PinId o Int8 => Bool -> o -> Sketch (Behavior Int8)+getSerial :: Input Arduino o Int8 => Bool -> o -> Sketch (Behavior Int8) getSerial True i = input' i (repeat Serial.noInput) getSerial False _ = return (constant Serial.noInput)
Examples/SerialPort/stack.yaml view
@@ -3,7 +3,7 @@ - '../..' resolver: lts-18.9 extra-deps: -- sketch-frp-copilot-1.0.0+- sketch-frp-copilot-1.0.1 - copilot-3.7 - copilot-c99-3.7 - copilot-core-3.7
Examples/WaterHeater/stack.yaml view
@@ -3,7 +3,7 @@ - '../..' resolver: lts-18.9 extra-deps: -- sketch-frp-copilot-1.0.0+- sketch-frp-copilot-1.0.1 - copilot-3.7 - copilot-c99-3.7 - copilot-core-3.7
arduino-copilot.cabal view
@@ -1,5 +1,5 @@ Name: arduino-copilot-Version: 1.6.0+Version: 1.7.0 Cabal-Version: >= 1.10 License: BSD3 Maintainer: Joey Hess <id@joeyh.name>@@ -114,7 +114,7 @@ Copilot.Arduino.Main Build-Depends: base (>= 4.5 && < 5),- sketch-frp-copilot (== 1.0.0),+ sketch-frp-copilot (== 1.0.1), copilot (== 3.7.*), copilot-c99 (== 3.7.*), copilot-language (== 3.7.*),
src/Copilot/Arduino.hs view
@@ -18,6 +18,7 @@ arduino, Sketch, Pin,+ Arduino, -- * Functional reactive programming Behavior, TypedBehavior(..),@@ -49,7 +50,6 @@ IsDigitalIOPin, IsAnalogInputPin, IsPWMPin,- PinId, -- * Utilities blinking, firstIteration,@@ -106,10 +106,10 @@ data ClockMillis = ClockMillis data ClockMicros = ClockMicros -instance Input PinId ClockMillis Word32 where+instance Input Arduino ClockMillis Word32 where input' ClockMillis = inputClock "millis" -instance Input PinId ClockMicros Word32 where+instance Input Arduino ClockMicros Word32 where input' ClockMicros = inputClock "micros" inputClock :: [Char] -> [Word32] -> Sketch (Behavior Word32)@@ -139,7 +139,7 @@ -- | The on-board LED. led :: Pin '[ 'DigitalIO ]-led = Pin (PinId 13)+led = Pin (Arduino 13) -- | Normally when a digital value is read from a `Pin`, it is configured -- without the internal pullup resistor being enabled. Use this to enable@@ -152,6 +152,6 @@ pullup :: IsDigitalIOPin t => Pin t -> Sketch () pullup (Pin p) = tell [(\_ -> return (), \_ -> f)] where- f = (emptyFramework @PinId)+ f = (emptyFramework @Arduino) { pinmodes = M.singleton p (S.singleton InputPullupMode) }
src/Copilot/Arduino/Internals.hs view
@@ -32,10 +32,10 @@ -- -- While it is a monad, a Sketch's outputs are not updated in any -- particular order, because Copilot does not guarantee any order.-type Sketch = GenSketch PinId+type Sketch = GenSketch Arduino -- | The framework of a sketch.-type Framework = GenFramework PinId+type Framework = GenFramework Arduino -- | A pin on the Arduino board. --@@ -45,16 +45,21 @@ -- -- A type-level list indicates how a Pin can be used, so the haskell -- compiler will detect impossible uses of pins.-newtype Pin t = Pin PinId+newtype Pin t = Pin Arduino deriving (Show, Eq, Ord) -newtype PinId = PinId Int16+-- | Indicates that you're programming an arduino, and not some+-- other kind of hardware. The similar library zephyr-copilot allows+-- programming other embedded boards in a very similar style to this one.+newtype Arduino = Arduino Int16 deriving (Show, Eq, Ord) -instance IsDigitalIOPin t => Output PinId (Pin t) (Event () (Stream Bool)) where- (Pin p@(PinId n)) =: (Event b c) = do+instance Context Arduino++instance IsDigitalIOPin t => Output Arduino (Pin t) (Event () (Stream Bool)) where+ (Pin p@(Arduino n)) =: (Event b c) = do (f, triggername) <- defineTriggerAlias' ("pin_" <> show n) "digitalWrite" $- (emptyFramework @PinId)+ (emptyFramework @Arduino) { pinmodes = M.singleton p (S.singleton OutputMode) } tell [(go triggername, const f)]@@ -63,8 +68,8 @@ let c' = addTriggerLimit tl c in trigger triggername c' [arg (constant n), arg b] -instance IsPWMPin t => Output PinId (Pin t) (Event 'PWM (Stream Word8)) where- (Pin (PinId n)) =: (Event v c) = do+instance IsPWMPin t => Output Arduino (Pin t) (Event 'PWM (Stream Word8)) where+ (Pin (Arduino n)) =: (Event v c) = do (f, triggername) <- defineTriggerAlias' ("pin_" <> show n) "analogWrite" mempty tell [(go triggername, const f)] where@@ -73,8 +78,8 @@ in trigger triggername c' [arg (constant n), arg v] -- analogWrite does not need any pinmodes set up -instance IsDigitalIOPin t => Input PinId (Pin t) Bool where- input' (Pin p@(PinId n)) interpretvalues = mkInput $ InputSource+instance IsDigitalIOPin t => Input Arduino (Pin t) Bool where+ input' (Pin p@(Arduino n)) interpretvalues = mkInput $ InputSource { defineVar = mkCChunk [CLine $ "bool " <> varname <> ";"] , setupInput = mempty , inputPinmode = M.singleton p InputMode@@ -91,8 +96,8 @@ -- | Value read from an Arduino's ADC. Ranges from 0-1023. type ADC = Int16 -instance IsAnalogInputPin t => Input PinId (Pin t) ADC where- input' (Pin (PinId n)) interpretvalues = mkInput $ InputSource+instance IsAnalogInputPin t => Input Arduino (Pin t) ADC where+ input' (Pin (Arduino n)) interpretvalues = mkInput $ InputSource { defineVar = mkCChunk [CLine $ "int " <> varname <> ";"] , setupInput = mempty , inputPinmode = mempty@@ -121,7 +126,7 @@ instance ShowCType Float where showCType _ = "float" instance ShowCType Double where showCType _ = "double" -instance Output PinId Delay MilliSeconds where+instance Output Arduino Delay MilliSeconds where Delay =: (MilliSeconds n) = do (f, triggername) <- defineTriggerAlias "delay" mempty tell [(go triggername, \_ -> f)]@@ -130,7 +135,7 @@ let c = getTriggerLimit tl in trigger triggername c [arg n] -instance Output PinId Delay MicroSeconds where+instance Output Arduino Delay MicroSeconds where Delay =: (MicroSeconds n) = do (f, triggername) <- defineTriggerAlias "delayMicroseconds" mempty tell [(go triggername, \_ -> f)]
src/Copilot/Arduino/Library/EEPROMex.hs view
@@ -192,7 +192,7 @@ data Location t = Location UniqueId -instance EEPROMable t => Output PinId (Location t) (Event () (Stream t)) where+instance EEPROMable t => Output Arduino (Location t) (Event () (Stream t)) where Location i =: (Event v c) = do (f, triggername) <- defineTriggerAlias (eepromWriterName i) mempty tell [(go triggername, \_ -> f)]@@ -257,10 +257,10 @@ -- instead they loop back to the start of the Range. type RangeIndex = Word16 -instance EEPROMable t => Output PinId (Range t) (RangeWrites t) where+instance EEPROMable t => Output Arduino (Range t) (RangeWrites t) where (=:) = writeRange true -instance EEPROMable t => Output PinId (Range t) (Event () (RangeWrites t)) where+instance EEPROMable t => Output Arduino (Range t) (Event () (RangeWrites t)) where range =: Event ws c = writeRange c range ws @@ -356,7 +356,7 @@ cnt = [startidx+1] ++ rest rest = cnt + 1 -instance (ShowCType t, EEPROMable t) => Input PinId (RangeReads t) t where+instance (ShowCType t, EEPROMable t) => Input Arduino (RangeReads t) t where input' (RangeReads range startidx idx) interpretvalues = do -- This trigger writes value of idx -- to indexvarname. The next time through the loop,
src/Copilot/Arduino/Library/Random.hs view
@@ -43,11 +43,11 @@ data RandomSeed = RandomSeed -instance Output PinId RandomSeed (Event () (Stream Word8)) where+instance Output Arduino RandomSeed (Event () (Stream Word8)) where RandomSeed =: e = randomSeedWith e -- Seeds with the first 8 bits read from the ADC, discarding the rest.-instance Output PinId RandomSeed (Event () (Stream ADC)) where+instance Output Arduino RandomSeed (Event () (Stream ADC)) where RandomSeed =: e = randomSeedWith e randomSeedWith :: Typed a => Event p (Stream a) -> Sketch ()@@ -82,7 +82,7 @@ randomR :: (Word32, Word32) -> RandomInput randomR (lo, hi) = RandomInput lo hi -instance Input PinId RandomInput Word32 where+instance Input Arduino RandomInput Word32 where input' (RandomInput lo hi) interpretvalues = do i <- getUniqueId "random" let varname = uniqueName "randomval" i
src/Copilot/Arduino/Library/Serial/Device.hs view
@@ -46,7 +46,7 @@ -> Pin tx -> Baud -> Sketch ()-configureD d@(SerialDeviceName devname) (Pin (PinId rxpin)) (Pin (PinId txpin)) (Baud n) = do+configureD d@(SerialDeviceName devname) (Pin (Arduino rxpin)) (Pin (Arduino txpin)) (Baud n) = do baudD d n tell [(\_ -> return (), \_ -> f)] where@@ -67,7 +67,7 @@ newtype SerialDevice = SerialDevice SerialDeviceName -instance Input PinId SerialDevice Int8 where+instance Input Arduino SerialDevice Int8 where input' (SerialDevice (SerialDeviceName devname)) interpretvalues = mkInput s where@@ -89,10 +89,10 @@ noInput :: Int8 noInput = -1 -instance Output PinId SerialDevice [FormatOutput] where+instance Output Arduino SerialDevice [FormatOutput] where sdn =: l = sdn =: (Event l true :: Event () [FormatOutput]) -instance Output PinId SerialDevice (Event () [FormatOutput]) where+instance Output Arduino SerialDevice (Event () [FormatOutput]) where SerialDevice sdn@(SerialDeviceName devname) =: (Event l c) = do u <- getUniqueId "serial" let outputfuncname = uniqueName ("output_" <> devname) u
src/Copilot/Arduino/Main.hs view
@@ -141,7 +141,7 @@ mapMaybe setuppinmode (M.toList $ pinmodes f) in f { setups = pinsetups <> setups f } where- setuppinmode (PinId n, s)+ setuppinmode (Arduino n, s) | s == S.singleton OutputMode = setmode n "OUTPUT" | s == S.singleton InputMode =
src/Copilot/Arduino/Nano.hs view
@@ -33,32 +33,32 @@ pin2, pin4, pin7, pin8, pin12, pin13 :: Pin '[ 'DigitalIO ] pin3, pin5, pin6, pin9, pin10, pin11 :: Pin '[ 'DigitalIO, 'PWM ]-pin2 = Pin (PinId 2)-pin3 = Pin (PinId 3)-pin4 = Pin (PinId 4)-pin5 = Pin (PinId 5)-pin6 = Pin (PinId 6)-pin7 = Pin (PinId 7)-pin8 = Pin (PinId 8)-pin9 = Pin (PinId 9)-pin10 = Pin (PinId 10)-pin11 = Pin (PinId 11)-pin12 = Pin (PinId 12)+pin2 = Pin (Arduino 2)+pin3 = Pin (Arduino 3)+pin4 = Pin (Arduino 4)+pin5 = Pin (Arduino 5)+pin6 = Pin (Arduino 6)+pin7 = Pin (Arduino 7)+pin8 = Pin (Arduino 8)+pin9 = Pin (Arduino 9)+pin10 = Pin (Arduino 10)+pin11 = Pin (Arduino 11)+pin12 = Pin (Arduino 12) -- | This pin is connected to the `led`-pin13 = Pin (PinId 13)+pin13 = Pin (Arduino 13) a0, a1, a2, a3, a4, a5 :: Pin '[ 'AnalogInput, 'DigitalIO ]-a0 = Pin (PinId 14)-a1 = Pin (PinId 15)-a2 = Pin (PinId 16)-a3 = Pin (PinId 17)-a4 = Pin (PinId 18)-a5 = Pin (PinId 19)+a0 = Pin (Arduino 14)+a1 = Pin (Arduino 15)+a2 = Pin (Arduino 16)+a3 = Pin (Arduino 17)+a4 = Pin (Arduino 18)+a5 = Pin (Arduino 19) -- | Limited to analog input. a6, a7 :: Pin '[ 'AnalogInput ]-a6 = Pin (PinId 20)-a7 = Pin (PinId 21)+a6 = Pin (Arduino 20)+a7 = Pin (Arduino 21) -- | Different versions of Arduino Nano have different EEPROM sizes. -- This is a safe value that will work on all versions.
src/Copilot/Arduino/Uno.hs view
@@ -31,27 +31,27 @@ pin2, pin4, pin7, pin8, pin12, pin13 :: Pin '[ 'DigitalIO ] pin3, pin5, pin6, pin9, pin10, pin11 :: Pin '[ 'DigitalIO, 'PWM ]-pin2 = Pin (PinId 2)-pin3 = Pin (PinId 3)-pin4 = Pin (PinId 4)-pin5 = Pin (PinId 5)-pin6 = Pin (PinId 6)-pin7 = Pin (PinId 7)-pin8 = Pin (PinId 8)-pin9 = Pin (PinId 9)-pin10 = Pin (PinId 10)-pin11 = Pin (PinId 11)-pin12 = Pin (PinId 12)+pin2 = Pin (Arduino 2)+pin3 = Pin (Arduino 3)+pin4 = Pin (Arduino 4)+pin5 = Pin (Arduino 5)+pin6 = Pin (Arduino 6)+pin7 = Pin (Arduino 7)+pin8 = Pin (Arduino 8)+pin9 = Pin (Arduino 9)+pin10 = Pin (Arduino 10)+pin11 = Pin (Arduino 11)+pin12 = Pin (Arduino 12) -- | This pin drives the `led`-pin13 = Pin (PinId 13)+pin13 = Pin (Arduino 13) a0, a1, a2, a3, a4, a5 :: Pin '[ 'AnalogInput, 'DigitalIO ]-a0 = Pin (PinId 14)-a1 = Pin (PinId 15)-a2 = Pin (PinId 16)-a3 = Pin (PinId 17)-a4 = Pin (PinId 18)-a5 = Pin (PinId 19)+a0 = Pin (Arduino 14)+a1 = Pin (Arduino 15)+a2 = Pin (Arduino 16)+a3 = Pin (Arduino 17)+a4 = Pin (Arduino 18)+a5 = Pin (Arduino 19) sizeOfEEPROM :: Word16 sizeOfEEPROM = 512
stack.yaml view
@@ -2,7 +2,7 @@ - '.' resolver: lts-18.9 extra-deps:-- sketch-frp-copilot-1.0.0+- sketch-frp-copilot-1.0.1 - copilot-3.7 - copilot-c99-3.7 - copilot-core-3.7