<?xml version="1.0" encoding="utf-8"?>
<WorkflowBuilder Version="2.9.0"
                 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                 xmlns:rx="clr-namespace:Bonsai.Reactive;assembly=Bonsai.Core"
                 xmlns:harp="clr-namespace:Bonsai.Harp;assembly=Bonsai.Harp"
                 xmlns:wie="clr-namespace:Bonsai.Windows.Input;assembly=Bonsai.Windows.Input"
                 xmlns:beh="clr-namespace:Harp.Behavior;assembly=Harp.Behavior"
                 xmlns:ui="clr-namespace:Bonsai.Design;assembly=Bonsai.Design"
                 xmlns="https://bonsai-rx.org/2018/workflow">
  <Workflow>
    <Nodes>
      <Expression xsi:type="Annotation">
        <Name>Harp Device Pattern</Name>
        <Text><![CDATA[]]></Text>
      </Expression>
      <Expression xsi:type="rx:BehaviorSubject" TypeArguments="harp:HarpMessage">
        <rx:Name>Behavior Commands</rx:Name>
      </Expression>
      <Expression xsi:type="Combinator">
        <Combinator xsi:type="beh:Device">
          <harp:OperationMode>Active</harp:OperationMode>
          <harp:OperationLed>On</harp:OperationLed>
          <harp:DumpRegisters>true</harp:DumpRegisters>
          <harp:VisualIndicators>On</harp:VisualIndicators>
          <harp:Heartbeat>Disabled</harp:Heartbeat>
          <harp:IgnoreErrors>false</harp:IgnoreErrors>
          <harp:PortName>COM8</harp:PortName>
        </Combinator>
      </Expression>
      <Expression xsi:type="Combinator">
        <Combinator xsi:type="beh:DeviceDataWriter">
          <beh:Path>Behavior.harp</beh:Path>
          <beh:Buffered>true</beh:Buffered>
          <beh:Overwrite>false</beh:Overwrite>
          <beh:FilterType>Include</beh:FilterType>
          <beh:MessageType xsi:nil="true" />
        </Combinator>
      </Expression>
      <Expression xsi:type="rx:PublishSubject">
        <Name>Behavior Events</Name>
      </Expression>
      <Expression xsi:type="Annotation">
        <Name>Visualize Poke Events</Name>
        <Text><![CDATA[]]></Text>
      </Expression>
      <Expression xsi:type="SubscribeSubject">
        <Name>Behavior Events</Name>
      </Expression>
      <Expression xsi:type="beh:Parse">
        <harp:Register xsi:type="beh:TimestampedDigitalInputState" />
      </Expression>
      <Expression xsi:type="ui:VisualizerWindow">
        <ui:Visible>true</ui:Visible>
        <ui:Location>
          <ui:X>400</ui:X>
          <ui:Y>100</ui:Y>
        </ui:Location>
        <ui:Size>
          <ui:Width>300</ui:Width>
          <ui:Height>300</ui:Height>
        </ui:Size>
        <ui:WindowState xsi:nil="true" />
      </Expression>
      <Expression xsi:type="Annotation">
        <Name>Configure Input Filter</Name>
        <Text><![CDATA[]]></Text>
      </Expression>
      <Expression xsi:type="Combinator">
        <Combinator xsi:type="wie:KeyDown">
          <wie:Filter>A</wie:Filter>
          <wie:SuppressRepetitions>false</wie:SuppressRepetitions>
        </Combinator>
      </Expression>
      <Expression xsi:type="beh:CreateMessage">
        <harp:MessageType>Write</harp:MessageType>
        <harp:Payload xsi:type="beh:CreatePokeInputFilterPayload">
          <beh:PokeInputFilter>5</beh:PokeInputFilter>
        </harp:Payload>
      </Expression>
      <Expression xsi:type="MulticastSubject">
        <Name>Behavior Commands</Name>
      </Expression>
      <Expression xsi:type="Annotation">
        <Name>Drive the Poke LED</Name>
        <Text><![CDATA[]]></Text>
      </Expression>
      <Expression xsi:type="Combinator">
        <Combinator xsi:type="wie:KeyDown">
          <wie:Filter>S</wie:Filter>
          <wie:SuppressRepetitions>false</wie:SuppressRepetitions>
        </Combinator>
      </Expression>
      <Expression xsi:type="beh:CreateMessage">
        <harp:MessageType>Write</harp:MessageType>
        <harp:Payload xsi:type="beh:CreateOutputSetPayload">
          <beh:OutputSet>DOPort0</beh:OutputSet>
        </harp:Payload>
      </Expression>
      <Expression xsi:type="MulticastSubject">
        <Name>Behavior Commands</Name>
      </Expression>
      <Expression xsi:type="Combinator">
        <Combinator xsi:type="wie:KeyDown">
          <wie:Filter>D</wie:Filter>
          <wie:SuppressRepetitions>false</wie:SuppressRepetitions>
        </Combinator>
      </Expression>
      <Expression xsi:type="beh:CreateMessage">
        <harp:MessageType>Write</harp:MessageType>
        <harp:Payload xsi:type="beh:CreateOutputClearPayload">
          <beh:OutputClear>DOPort0</beh:OutputClear>
        </harp:Payload>
      </Expression>
      <Expression xsi:type="MulticastSubject">
        <Name>Behavior Commands</Name>
      </Expression>
      <Expression xsi:type="Annotation">
        <Name>Deliver Rewards</Name>
        <Text><![CDATA[]]></Text>
      </Expression>
      <Expression xsi:type="Combinator">
        <Combinator xsi:type="wie:KeyDown">
          <wie:Filter>F</wie:Filter>
          <wie:SuppressRepetitions>false</wie:SuppressRepetitions>
        </Combinator>
      </Expression>
      <Expression xsi:type="beh:CreateMessage">
        <harp:MessageType>Write</harp:MessageType>
        <harp:Payload xsi:type="beh:CreatePulseSupplyPort0Payload">
          <beh:PulseSupplyPort0>15</beh:PulseSupplyPort0>
        </harp:Payload>
      </Expression>
      <Expression xsi:type="MulticastSubject">
        <Name>Behavior Commands</Name>
      </Expression>
      <Expression xsi:type="SubscribeSubject">
        <Name>Behavior Events</Name>
      </Expression>
      <Expression xsi:type="beh:Parse">
        <harp:Register xsi:type="beh:DigitalInputState" />
      </Expression>
      <Expression xsi:type="HasFlag">
        <Operand xsi:type="WorkflowProperty" TypeArguments="beh:DigitalInputs">
          <Value>DIPort0</Value>
        </Operand>
      </Expression>
      <Expression xsi:type="rx:Condition">
        <Workflow>
          <Nodes>
            <Expression xsi:type="WorkflowInput">
              <Name>Source1</Name>
            </Expression>
            <Expression xsi:type="WorkflowOutput" />
          </Nodes>
          <Edges>
            <Edge From="0" To="1" Label="Source1" />
          </Edges>
        </Workflow>
      </Expression>
      <Expression xsi:type="beh:CreateMessage">
        <harp:MessageType>Write</harp:MessageType>
        <harp:Payload xsi:type="beh:CreateOutputSetPayload">
          <beh:OutputSet>SupplyPort0</beh:OutputSet>
        </harp:Payload>
      </Expression>
      <Expression xsi:type="MulticastSubject">
        <Name>Behavior Commands</Name>
      </Expression>
    </Nodes>
    <Edges>
      <Edge From="1" To="2" Label="Source1" />
      <Edge From="2" To="3" Label="Source1" />
      <Edge From="3" To="4" Label="Source1" />
      <Edge From="6" To="7" Label="Source1" />
      <Edge From="7" To="8" Label="Source1" />
      <Edge From="10" To="11" Label="Source1" />
      <Edge From="11" To="12" Label="Source1" />
      <Edge From="14" To="15" Label="Source1" />
      <Edge From="15" To="16" Label="Source1" />
      <Edge From="17" To="18" Label="Source1" />
      <Edge From="18" To="19" Label="Source1" />
      <Edge From="21" To="22" Label="Source1" />
      <Edge From="22" To="23" Label="Source1" />
      <Edge From="24" To="25" Label="Source1" />
      <Edge From="25" To="26" Label="Source1" />
      <Edge From="26" To="27" Label="Source1" />
      <Edge From="27" To="28" Label="Source1" />
      <Edge From="28" To="29" Label="Source1" />
    </Edges>
  </Workflow>
</WorkflowBuilder>
