Loading ...
Sorry, an error occurred while loading the content.

Re: [tracker2] More on scripting language

Expand Messages
  • rahammond@charter.net
    Sounds good Scott! Roger KC0MWM www.cnnsp.org
    Message 1 of 16 , Nov 14, 2007
    • 0 Attachment
      Sounds good Scott!

      Roger KC0MWM
      www.cnnsp.org


      ---- Scott Miller <scott@...> wrote:
      > Here's some more on my current thinking for the scripting language...
      >
      > The script editor screen will be part of otwincfg. You'll have a
      > scrollable list showing the current program, with an option to delete a
      > line or to insert a command or condition.
      >
      > Elsewhere on the screen, or in separate pop-up dialogs, you'll build
      > each command or condition from drop-downs and entry blanks. There will
      > be only a couple of user-accessible 'variables', mostly for use as counters.
      >
      > One counter will increment automatically with each fractional-second
      > 'tick', another with each second, a third will be the existing external
      > counter input, and there will probably be one additional generic
      > counter. There will also be a set of 8 binary flags that can be tested,
      > set, and cleared to keep track of program state.
      >
      > Conditions include:
      >
      > Event (to include system startup, IRQ/button press, once per second, and
      > profile switch)
      > Profile in use (1 or 2)
      > Condition flags (on/off/don't care for each flag)
      > Memory value (to include I/O pins)
      > Counter value (less than/greater than/equal to)
      > Remote command (for user-defined command macros)
      > Altitude/speed (less than/greater than/equal to)
      >
      > Commands include:
      >
      > Set condition flags on/off
      > Set profile
      > Execute console command (with arguments)
      > Execute console command and send results to designated station
      > Increment, decrement, or set counter
      > Set memory value ('poke'), to include I/O pins
      >
      > An example program for multiple beacons:
      >
      > ONCE EACH SECOND
      > IF SECOND = 120
      > EXECUTE COMMAND BEACON "This is beacon 1"
      > END BLOCK
      > IF SECOND = 240
      > EXECUTE COMMAND BEACON "This is beacon 2"
      > END BLOCK
      > IF SECOND = 360
      > EXECUTE COMMAND BEACON "This is beacon 3"
      > SET SECOND = 0
      > END BLOCK
      > END BLOCK
      >
      > That sets up three separate beacons (which might be repeater objects) in
      > a rotating cycle. Since the block executes only once a second, you
      > don't have to worry about it executing the command more than once and
      > having SECOND = x be true multiple times. Note that BEACON currently
      > doesn't actually send raw text, but I intend to make it do so.
      >
      > Another example, for a balloon:
      >
      > ON STARTUP
      > SET PORT A BIT 3 OUTPUT
      > END BLOCK
      >
      > IF TICK = 1000
      > SET PORT A BIT 3 ON
      > END BLOCK
      >
      > IF TICK = 1003
      > SET PORT A BIT 3 OFF
      > SET TICK = 0
      > END BLOCK
      >
      > ON COMMAND "cutdown"
      > EXECUTE COMMAND COMMENT "Going down!"
      > EXECUTE COMMAND PULSE 15
      > EXECUTE COMMAND REPLY "Cutdown fired"
      > END BLOCK
      >
      > This does two things - first, it turns on an I/O bit for 3 ticks every
      > 1000 ticks (to trigger a camera shutter), and second, it adds a
      > remotely-accessible macro called CUTDOWN. An authorized remote user can
      > now send CMD CUTDOWN and it'll set a new comment, fire the cutdown
      > devices for 15 seconds, and send a response back to the originating
      > station confirming the command.
      >
      > I think the above should be enough to get started and provide some
      > useful features. Any comments?
      >
      > Scott
      >
    • James Ewen
      ... WOOHOO!!! You better watch out Scott, next time I see you, I might want to kiss you! This is excellent... I have to sit and digest this for a while, and
      Message 2 of 16 , Nov 14, 2007
      • 0 Attachment
        On Nov 14, 2007 4:21 PM, Scott Miller <scott@...> wrote:

        > Any comments?

        WOOHOO!!!

        You better watch out Scott, next time I see you, I might want to kiss you!

        This is excellent... I have to sit and digest this for a while, and
        try and figure out what more we could add into it.

        I know you had a way to watch for and record maximum altitude on your
        balloon flight. That way the maximum altitude could be sent even if
        the balloon position report did not coincide with the burst time.

        Also, if we could watch for a post burst altitude drop, and have the
        unit fire a cutdown command to clear away the balloon fragments before
        they tangle into the parachute would be great.

        Okay, now I want a secondary commandable output, one that could be
        used after cutdown to deploy the parachute for a HALO (High Altitude
        Low Opening) flight. Cutdown post burst, and drop like a rock until
        10,000 ft AGL, then deploy the parachute. Of course, all controlled by
        the scripts built into the OT2.

        Wow, if they had a OT2 back in the 60's, they could have sent a man to
        the moon with one!

        James
        VE6SRV
      • Scott Miller
        ... Should be easy enough, since they re both already in there as 16-bit integers. ... Yeah, both of those are in my notes, though I think I didn t post that.
        Message 3 of 16 , Nov 14, 2007
        • 0 Attachment
          > Additional counters:
          >
          > Time since last beacon
          > Time since own beacon heard digipeated

          Should be easy enough, since they're both already in there as 16-bit
          integers.

          > Valid GPS fix
          > Supply voltage (greater than/less than)

          Yeah, both of those are in my notes, though I think I didn't post that.
          I'll probably also have an ON GPS LOSS event, too.

          > Would it be possible in the limited code space to have some limited
          > variables?
          >
          > For example:
          >
          > SET %1 = "callsign@... <mailto:callsign%40email.com>"

          Well, in that example it's more of a constant than a variable... yeah,
          it could probably be done, but it'd complicate things. I'll keep it in
          mind, though.

          Scott
        • Scott Miller
          Great, now I just need about a week of uninterrupted programming time to implement it! =] Got family coming for Thanksgiving, starting Friday, so it s hard
          Message 4 of 16 , Nov 14, 2007
          • 0 Attachment
            Great, now I just need about a week of uninterrupted programming time to
            implement it! =] Got family coming for Thanksgiving, starting Friday,
            so it's hard to say where I'm going to squeeze things in for the next
            week or two.

            Scott

            rahammond@... wrote:
            >
            >
            > Sounds good Scott!
            >
            > Roger KC0MWM
            > www.cnnsp.org
            >
          • Scott Miller
            ... That was a hard-coded function, and had the advantage of having some extra storage space set aside for the high-water mark. The script language so far
            Message 5 of 16 , Nov 14, 2007
            • 0 Attachment
              > I know you had a way to watch for and record maximum altitude on your
              > balloon flight. That way the maximum altitude could be sent even if
              > the balloon position report did not coincide with the burst time.

              That was a hard-coded function, and had the advantage of having some
              extra storage space set aside for the high-water mark. The script
              language so far doesn't have any way to assign one variable's value to
              another, so you couldn't do that in quite the same way.

              > Also, if we could watch for a post burst altitude drop, and have the
              > unit fire a cutdown command to clear away the balloon fragments before
              > they tangle into the parachute would be great.

              What you could do is set a few threshold levels, and set flags at each
              level. If you see that the 80,000' flag is set but the altitude is now
              less than 75,000', you know you're descending.

              IF ALTITUDE > 80000
              SET FLAG 1
              END BLOCK

              IF FLAG 1 SET
              IF ALTITUDE < 75000
              EXECUTE COMMAND BEACON "Aiiiieeeeeee!!!"
              CLEAR FLAG 1
              END BLOCK
              END BLOCK

              I think I'm going to start prototyping the script engine soon. Gotta
              figure out how often I want it to execute a script 'tick'. The system
              ticks are 1/1024 second, but that's way too often. I think 1/10 second
              would be plenty, and would still catch events like button presses. Or
              if I add more keyboard interrupts, maybe 1/5 second would be OK.

              Scott
            • Scott Miller
              I think I m going to declare success for the night and give it a rest. I ve got the skeleton of the script engine started, script memory has been set aside,
              Message 6 of 16 , Nov 14, 2007
              • 0 Attachment
                I think I'm going to declare success for the night and give it a rest.

                I've got the skeleton of the script engine started, script memory has
                been set aside, the handler is called every 1/8 second (128 system
                ticks), and the STARTUP, SECOND, and FIX LOST events are set up.

                I implemented an opcode the prints 'A', and one that prints 'B', and one
                that tests if the SECOND event flag is set. It's currently running a
                5-byte script that prints 'B' every 1/8 second, and then prints 'A' once
                a second.

                Right now, conditionals are absolute branches - i.e., internally ONCE
                EACH SECOND equates to 'if second flag not set, jump to address nnnn'.
                The advantage of this is that it's fast, simple, and allows for GOTOs
                and things if I want to add them to the language.

                The downside is that the compiler/editor has to do an extra step to
                calculate each target address. It also means that in the future it'd be
                more difficult to build a command-line editor.

                An alternative might be to have a match end marker opcode. That means
                counting IFs and END IFs and scanning through every instruction in
                between, which is going to be slower and might introduce other problems.
                It avoids having to calculate addresses, though.

                Fun stuff. I've got to go dig up my book on 'little languages' again
                and see what insight it has.

                Too tired to do that tonight, though.

                Scott

                Bob Burns W9RXR wrote:
                >
                >
                > At 06:21 PM 11/14/2007, Scott Miller wrote:
                >
                > >I think the above should be enough to get started and provide some
                > >useful features. Any comments?
                >
                > Other than "Bring it on!"?
                >
                > Additional counters:
                >
                > Time since last beacon
                > Time since own beacon heard digipeated
                >
                > Additional conditions:
                >
                > Valid GPS fix
                > Supply voltage (greater than/less than)
                >
                > Would it be possible in the limited code space to have some limited
                > variables?
                >
                > For example:
                >
                > SET %1 = "callsign@... <mailto:callsign%40email.com>"
                > ONCE EACH SECOND
                > IF SECOND = 120
                > EXECUTE COMMAND BEACON "This is beacon 1" %1
                > END BLOCK
                > IF SECOND = 240
                > EXECUTE COMMAND BEACON "This is beacon 2" %1
                > END BLOCK
                > IF SECOND = 360
                > EXECUTE COMMAND BEACON "This is beacon 3" %1
                > SET SECOND = 0
                > END BLOCK
                > END BLOCK
                >
                > This would tack the contents of %1 onto every beacon command.
                >
                > Bob...
                >
              • Carlos E. Requejo
                Hi Scott: I have setup in my truck the OT2 Proto C with a Garmin GPSMAP 276C both together work very good with my Icom IC-706MKIIG but my own Digi Echo s
                Message 7 of 16 , Nov 15, 2007
                • 0 Attachment

                  Hi Scott:

                  I have setup in my truck the OT2 Proto C with a Garmin GPSMAP 276C both together work very good with my Icom IC-706MKIIG but my own Digi Echo’s appear in the GPS like Waypoints with the “S” changed to “N” in position field  the rest of the data is correct.

                  Any ideas ?

                   

                  Thanks

                  73’s

                   

                  Carlos

                  LU1ERT

                   

                   

                • Carlos E. Requejo
                  Hi Scott: I have setup in my truck the OT2 Proto C with a Garmin GPSMAP 276C in port B working in Garmin mode, both together work very good with my Icom
                  Message 8 of 16 , Nov 19, 2007
                  • 0 Attachment

                    Hi Scott:

                    I have setup in my truck the OT2 Proto C with a Garmin GPSMAP 276C in port “B” working in Garmin mode, both together work very good with my Icom IC-706MKIIG, all the herrings positions appear very good in the screen, but my own Digi Echo’s appear in the GPS like Waypoints with the “S” changed to “N” in position field, the rest of the data is correct.

                    I don’t use MNEMA Mode because the GPS show up a lot of “Database Errors” in this mode.

                    Please find attached to this e-mail the Configuration file of the OT2.

                    This behavior is correct?

                    Thank you in advance.

                    73’s

                    LU1ERT

                    Carlos  

                     

                     

                  • Bob Burns W9RXR
                    ... WB4APR keeps pushing Proportional Pathing as an alternative to Smart Beaconing. I still think SB is a good concept for mobile stations, but Bob presented
                    Message 9 of 16 , Nov 23, 2007
                    • 0 Attachment
                      At 01:44 AM 11/15/2007, Scott Miller wrote:
                      >I implemented an opcode the prints 'A', and one that prints 'B', and
                      >one that tests if the SECOND event flag is set. It's currently
                      >running a 5-byte script that prints 'B' every 1/8 second, and then
                      >prints 'A' once a second.

                      WB4APR keeps pushing Proportional Pathing as an alternative to Smart
                      Beaconing. I still think SB is a good concept for mobile stations,
                      but Bob presented an scenario recently that points out the value of PP.

                      The scenario involves using APRS to call "CQ" while travelling down
                      the highway. You beacon at a 1-minute rate so other nearby mobiles
                      can see you. If you and another APRS mobile are travelling opposite
                      directions at 60 MPH, your relative speed is 120 MPH. At a 1-minute
                      rate, you could be 2 miles from each other between beacons--even more
                      at a slower beacon rate which could put you out of simplex voice
                      range very quickly. However, to keep from flooding the network, you
                      beacon at a 1-minute rate with no hops, 2 minutes with one hop, 4
                      minutes with two hops, etc.

                      So, could your scripting language be used to set up something along
                      the lines of Proportional Pathing where the path changes through some
                      pre-determined pattern?

                      Bob...
                    • Wes Johnston, AI4PX
                      Something I d like to see is a way to implement a change of SSID when pressing the change mode button. Presently we use an OT to drop a bread crumb marker
                      Message 10 of 16 , Nov 23, 2007
                      • 0 Attachment
                        Something I'd like to see is a way to implement a change of SSID when pressing the change mode button.  Presently we use an OT to drop a bread crumb marker that is a different SSID than the tracker's callsign.  When the button is released the callsign changes back to the original ssid and leaves the alternate callsign/ssid on the map.  It would be nice if I could increase a counter each time the button is pushed and have it cycle between two limits.... say for example 10 to 15 each time the button is pushed. 

                        example.  Tracker mode 1 callsign is ai4px-5.
                        tracker mode 2 callsign is activated when I press the mode change button and the mode 2 callsign will sequence thru ai4px-10, -11, -12 -13 -14 -15 .  It'll leave a nice set of objects on the screen and not over write the one from the last time the button was pushed.

                        Also, it'd be neat to attach a resistor ladder to an analog input, and have the icon beable to change depending on the measured voltage on the analog input.  In this manner my motocross sweep rider could have 3 buttons to push, button 1 would increment the mode 2 SSID and make the icon something indicating a wreck.  Pressing button two would increment the mode 2 ssid and cause the icon to be an ambulance.  Button three would do the same but set a 3rd icon.  This would allow the sweep rider to indicate to us breakdowns, riders needing gas and riders needing medical help. 

                        I hope it's clear what I'm looking for.....
                        Wes

                        On Nov 15, 2007 1:44 AM, Scott Miller <scott@...> wrote:

                        I think I'm going to declare success for the night and give it a rest.

                        I've got the skeleton of the script engine started, script memory has
                        been set aside, the handler is called every 1/8 second (128 system
                        ticks), and the STARTUP, SECOND, and FIX LOST events are set up.

                        I implemented an opcode the prints 'A', and one that prints 'B', and one
                        that tests if the SECOND event flag is set. It's currently running a
                        5-byte script that prints 'B' every 1/8 second, and then prints 'A' once
                        a second.

                        Right now, conditionals are absolute branches - i.e., internally ONCE
                        EACH SECOND equates to 'if second flag not set, jump to address nnnn'.
                        The advantage of this is that it's fast, simple, and allows for GOTOs
                        and things if I want to add them to the language.

                        The downside is that the compiler/editor has to do an extra step to
                        calculate each target address. It also means that in the future it'd be
                        more difficult to build a command-line editor.

                        An alternative might be to have a match end marker opcode. That means
                        counting IFs and END IFs and scanning through every instruction in
                        between, which is going to be slower and might introduce other problems.
                        It avoids having to calculate addresses, though.

                        Fun stuff. I've got to go dig up my book on 'little languages' again
                        and see what insight it has.

                        Too tired to do that tonight, though.

                        Scott



                        Bob Burns W9RXR wrote:
                        >
                        >
                        > At 06:21 PM 11/14/2007, Scott Miller wrote:
                        >
                        > >I think the above should be enough to get started and provide some
                        > >useful features. Any comments?
                        >
                        > Other than "Bring it on!"?
                        >
                        > Additional counters:
                        >
                        > Time since last beacon
                        > Time since own beacon heard digipeated
                        >
                        > Additional conditions:

                        >
                        > Valid GPS fix
                        > Supply voltage (greater than/less than)
                        >
                        > Would it be possible in the limited code space to have some limited
                        > variables?
                        >
                        > For example:
                        >
                        > SET %1 = "callsign@... <mailto:callsign%40email.com>"
                        > ONCE EACH SECOND
                        > IF SECOND = 120
                        > EXECUTE COMMAND BEACON "This is beacon 1" %1

                        > END BLOCK
                        > IF SECOND = 240
                        > EXECUTE COMMAND BEACON "This is beacon 2" %1
                        > END BLOCK
                        > IF SECOND = 360
                        > EXECUTE COMMAND BEACON "This is beacon 3" %1

                        > SET SECOND = 0
                        > END BLOCK
                        > END BLOCK
                        >
                        > This would tack the contents of %1 onto every beacon command.
                        >
                        > Bob...
                        >




                        --
                        Where there is silence, there is no Hope
                      • Bob Burns W9RXR
                        ... Neat idea! The same sort of approach could be used by Skywarn spotters to select various APRS symbols depending on what they are seeing (hail, wall cloud,
                        Message 11 of 16 , Nov 23, 2007
                        • 0 Attachment
                          At 08:38 PM 11/23/2007, Wes Johnston, AI4PX wrote:

                          >Also, it'd be neat to attach a resistor ladder to an analog input,
                          >and have the icon beable to change depending on the measured voltage
                          >on the analog input.

                          Neat idea! The same sort of approach could be used by Skywarn
                          spotters to select various APRS symbols depending on what they are
                          seeing (hail, wall cloud, tornado, etc.).

                          Bob...
                        • Scott Miller
                          That should all be doable with the scripting language as it s currently envisioned. You ll just have to have it execute a MYCALL command. I may also add an
                          Message 12 of 16 , Nov 23, 2007
                          • 0 Attachment
                            That should all be doable with the scripting language as it's currently
                            envisioned. You'll just have to have it execute a MYCALL command. I
                            may also add an OBJECT command to transmit an object at the current
                            position with a given name and description.

                            Scott

                            Wes Johnston, AI4PX wrote:
                            >
                            >
                            > Something I'd like to see is a way to implement a change of SSID when
                            > pressing the change mode button. Presently we use an OT to drop a bread
                            > crumb marker that is a different SSID than the tracker's callsign. When
                            > the button is released the callsign changes back to the original ssid
                            > and leaves the alternate callsign/ssid on the map. It would be nice if
                            > I could increase a counter each time the button is pushed and have it
                            > cycle between two limits.... say for example 10 to 15 each time the
                            > button is pushed.
                            >
                            > example. Tracker mode 1 callsign is ai4px-5.
                            > tracker mode 2 callsign is activated when I press the mode change button
                            > and the mode 2 callsign will sequence thru ai4px-10, -11, -12 -13 -14
                            > -15 . It'll leave a nice set of objects on the screen and not over
                            > write the one from the last time the button was pushed.
                            >
                            > Also, it'd be neat to attach a resistor ladder to an analog input, and
                            > have the icon beable to change depending on the measured voltage on the
                            > analog input. In this manner my motocross sweep rider could have 3
                            > buttons to push, button 1 would increment the mode 2 SSID and make the
                            > icon something indicating a wreck. Pressing button two would increment
                            > the mode 2 ssid and cause the icon to be an ambulance. Button three
                            > would do the same but set a 3rd icon. This would allow the sweep rider
                            > to indicate to us breakdowns, riders needing gas and riders needing
                            > medical help.
                            >
                            > I hope it's clear what I'm looking for.....
                            > Wes
                            >
                            > On Nov 15, 2007 1:44 AM, Scott Miller <scott@...
                            > <mailto:scott@...>> wrote:
                            >
                            > I think I'm going to declare success for the night and give it a rest.
                            >
                            > I've got the skeleton of the script engine started, script memory has
                            > been set aside, the handler is called every 1/8 second (128 system
                            > ticks), and the STARTUP, SECOND, and FIX LOST events are set up.
                            >
                            > I implemented an opcode the prints 'A', and one that prints 'B', and
                            > one
                            > that tests if the SECOND event flag is set. It's currently running a
                            > 5-byte script that prints 'B' every 1/8 second, and then prints 'A'
                            > once
                            > a second.
                            >
                            > Right now, conditionals are absolute branches - i.e., internally ONCE
                            > EACH SECOND equates to 'if second flag not set, jump to address nnnn'.
                            > The advantage of this is that it's fast, simple, and allows for GOTOs
                            > and things if I want to add them to the language.
                            >
                            > The downside is that the compiler/editor has to do an extra step to
                            > calculate each target address. It also means that in the future it'd be
                            > more difficult to build a command-line editor.
                            >
                            > An alternative might be to have a match end marker opcode. That means
                            > counting IFs and END IFs and scanning through every instruction in
                            > between, which is going to be slower and might introduce other
                            > problems.
                            > It avoids having to calculate addresses, though.
                            >
                            > Fun stuff. I've got to go dig up my book on 'little languages' again
                            > and see what insight it has.
                            >
                            > Too tired to do that tonight, though.
                            >
                            > Scott
                            >
                            >
                            >
                            > Bob Burns W9RXR wrote:
                            > >
                            > >
                            > > At 06:21 PM 11/14/2007, Scott Miller wrote:
                            > >
                            > > >I think the above should be enough to get started and provide some
                            > > >useful features. Any comments?
                            > >
                            > > Other than "Bring it on!"?
                            > >
                            > > Additional counters:
                            > >
                            > > Time since last beacon
                            > > Time since own beacon heard digipeated
                            > >
                            > > Additional conditions:
                            >
                            > >
                            > > Valid GPS fix
                            > > Supply voltage (greater than/less than)
                            > >
                            > > Would it be possible in the limited code space to have some limited
                            > > variables?
                            > >
                            > > For example:
                            > >
                            > > SET %1 = "callsign@... <mailto:callsign%40email.com>
                            > <mailto:callsign%40email.com <mailto:callsign%40email.com>>"
                            > > ONCE EACH SECOND
                            > > IF SECOND = 120
                            > > EXECUTE COMMAND BEACON "This is beacon 1" %1
                            >
                            > > END BLOCK
                            > > IF SECOND = 240
                            > > EXECUTE COMMAND BEACON "This is beacon 2" %1
                            > > END BLOCK
                            > > IF SECOND = 360
                            > > EXECUTE COMMAND BEACON "This is beacon 3" %1
                            >
                            > > SET SECOND = 0
                            > > END BLOCK
                            > > END BLOCK
                            > >
                            > > This would tack the contents of %1 onto every beacon command.
                            > >
                            > > Bob...
                            > >
                            >
                            >
                            >
                            >
                            > --
                            > Where there is silence, there is no Hope
                            >
                          • Scott Miller
                            Yes, that shouldn t be a problem. You d eventually wear out the flash memory changing it all the time, but it should be on the order of several years before
                            Message 13 of 16 , Nov 25, 2007
                            • 0 Attachment
                              Yes, that shouldn't be a problem. You'd eventually wear out the flash
                              memory changing it all the time, but it should be on the order of
                              several years before you reach the minimum number of guaranteed erase
                              cycles.

                              Scott

                              > So, could your scripting language be used to set up something along
                              > the lines of Proportional Pathing where the path changes through some
                              > pre-determined pattern?
                            • Scott Miller
                              The language will have the equivalent of peek and poke instructions, too, so it ll be possible to do some of that with digital I/Os. How much of the
                              Message 14 of 16 , Nov 25, 2007
                              • 0 Attachment
                                The language will have the equivalent of 'peek' and 'poke' instructions,
                                too, so it'll be possible to do some of that with digital I/Os. How
                                much of the hardware details I'll abstract in the virtual machine
                                remains to be decided.

                                Even if the VM only does raw PEEKs and POKEs, the programming interface
                                could provide some shortcuts for the standard I/Os. The first version
                                will probably rely on some address tables, though - if you want to set
                                an I/O pin, you'll have to set the data direction register and then the
                                pin state manually.

                                Scott

                                Bob Burns W9RXR wrote:
                                >
                                >
                                > At 08:38 PM 11/23/2007, Wes Johnston, AI4PX wrote:
                                >
                                > >Also, it'd be neat to attach a resistor ladder to an analog input,
                                > >and have the icon beable to change depending on the measured voltage
                                > >on the analog input.
                                >
                                > Neat idea! The same sort of approach could be used by Skywarn
                                > spotters to select various APRS symbols depending on what they are
                                > seeing (hail, wall cloud, tornado, etc.).
                                >
                                > Bob...
                                >
                              Your message has been successfully submitted and would be delivered to recipients shortly.