This library is designed to create and run state graphs. It supports hierarchical states and parallel states execution.

Revision:
4:22b4462fcb26
Parent:
2:5e2336b52d0a
--- a/utt_foobar.h	Tue Feb 12 08:56:43 2019 +0000
+++ b/utt_foobar.h	Tue Feb 02 20:47:45 2021 +0000
@@ -1,89 +1,20 @@
+    
+
 #ifndef __UTT_FOOBAR_H__
 #define __UTT_FOOBAR_H__
 
+#include "mbed.h"
 #include "StateMachine.h"
-#include "Logger.h"
-
-
-// different commands to set the update rate from once a second (1 Hz) to 10 times a second (10Hz)
-// Note that these only control the rate at which the position is echoed, to actually speed up the
-// position fix you must also send one of the position fix rate commands below too.
-#define PMTK_SET_NMEA_UPDATE_100_MILLIHERTZ  "$PMTK220,10000*2F" // Once every 10 seconds, 100 millihertz.
-#define PMTK_SET_NMEA_UPDATE_200_MILLIHERTZ  "$PMTK220,5000*1B"  // Once every 5 seconds, 200 millihertz.
-#define PMTK_SET_NMEA_UPDATE_1HZ  "$PMTK220,1000*1F"
-#define PMTK_SET_NMEA_UPDATE_5HZ  "$PMTK220,200*2C"
-#define PMTK_SET_NMEA_UPDATE_10HZ "$PMTK220,100*2F"
-// Position fix update rate commands.
-#define PMTK_API_SET_FIX_CTL_100_MILLIHERTZ  "$PMTK300,10000,0,0,0,0*2C" // Once every 10 seconds, 100 millihertz.
-#define PMTK_API_SET_FIX_CTL_200_MILLIHERTZ  "$PMTK300,5000,0,0,0,0*18"  // Once every 5 seconds, 200 millihertz.
-#define PMTK_API_SET_FIX_CTL_1HZ  "$PMTK300,1000,0,0,0,0*1C"
-#define PMTK_API_SET_FIX_CTL_5HZ  "$PMTK300,200,0,0,0,0*2F"
-// Can't fix position faster than 5 times a second!
-
-
-#define PMTK_SET_BAUD_57600 "$PMTK251,57600*2C"
-#define PMTK_SET_BAUD_9600 "$PMTK251,9600*17"
-
-// turn on only the second sentence (GPRMC)
-#define PMTK_SET_NMEA_OUTPUT_RMCONLY "$PMTK314,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0*29"
-// turn on GPRMC and GGA
-#define PMTK_SET_NMEA_OUTPUT_RMCGGA "$PMTK314,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0*28"
-// turn on ALL THE DATA
-#define PMTK_SET_NMEA_OUTPUT_ALLDATA "$PMTK314,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0*28"
-// turn off output
-#define PMTK_SET_NMEA_OUTPUT_OFF "$PMTK314,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0*28"
-
-// to generate your own sentences, check out the MTK command datasheet and use a checksum calculator
-// such as the awesome http://www.hhhh.org/wiml/proj/nmeaxor.html
-
-#define PMTK_LOCUS_STARTLOG  "$PMTK185,0*22"
-#define PMTK_LOCUS_STOPLOG "$PMTK185,1*23"
-#define PMTK_LOCUS_STARTSTOPACK "$PMTK001,185,3*3C"
-#define PMTK_LOCUS_QUERY_STATUS "$PMTK183*38"
-#define PMTK_LOCUS_ERASE_FLASH "$PMTK184,1*22"
-#define LOCUS_OVERLAP 0
-#define LOCUS_FULLSTOP 1
-
-#define PMTK_ENABLE_SBAS "$PMTK313,1*2E"
-#define PMTK_ENABLE_WAAS "$PMTK301,2*2E"
-
-// standby command & boot successful message
-#define PMTK_STANDBY "$PMTK161,0*28"
-#define PMTK_STANDBY_SUCCESS "$PMTK001,161,3*36"  // Not needed currently
-#define PMTK_AWAKE "$PMTK010,002*2D"
-
-// ask for the release and version
-#define PMTK_Q_RELEASE "$PMTK605*31"
-
-// request for updates on antenna status 
-#define PGCMD_ANTENNA "$PGCMD,33,1*6C" 
-#define PGCMD_NOANTENNA "$PGCMD,33,0*6D" 
-
-// how long to wait when we're looking for a response
-#define MAXWAITSENTENCE 5
-
+ 
 class Foo : public State{
-
+ 
 public:
-
+ 
     static const char* OUTCOME_BAR;
-
+ 
     Foo(const char* uuid, UserData *ud): 
       State(uuid){ 
         /* Capture UserData, see in utt_foobar_with_ud.h example. */ 
-        
-        gps_Serial = new RawSerial(D10, D2);
-        gps_Serial->baud(9600);
-        nnema = new char[129];
-        
-        sendCommand(PMTK_SET_NMEA_OUTPUT_RMCGGA);
-        sendCommand(PMTK_SET_NMEA_UPDATE_5HZ);
-        sendCommand(PMTK_API_SET_FIX_CTL_5HZ);
-        sendCommand(PGCMD_ANTENNA);
-    }
-    
-    void sendCommand(const char *str) {
-        gps_Serial->printf(str);
     }
     
     virtual void onEntry(){ 
@@ -92,41 +23,22 @@
     
     virtual const char* onExecute(){
         /* Do something */
-        
-        int offset = 0;
-        memset(nnema,'x',129);
-        
-        
-        while(gps_Serial->readable()){
-            
-            char c = gps_Serial->getc();
-            //Logger::info("%c",c);
-            nnema[offset++] = c;
-        }      
-        //nnema[++offset] = '\0';
-        
-        Logger::info("%i = %s",offset, nnema);
-        
         return OUTCOME_BAR;
     }
     
     virtual void onExit(){
         /* Do something before exit state */
     }
-    
-private:
-    RawSerial *gps_Serial;
-    char* nnema;
 };
-
+ 
 const char* Foo::OUTCOME_BAR = "OUTCOME_BAR";
-
+ 
 class Bar : public State{
-
+ 
 public:
-
+ 
     static const char* OUTCOME_FOO;
-
+ 
     Bar(const char* uuid, UserData *ud):
       State(uuid){ 
         /* Capture UserData, see in utt_foobar_with_ud.h example. */ 
@@ -138,7 +50,6 @@
     
     virtual const char* onExecute(){
         /* Do something */
-        wait(1);
         return OUTCOME_FOO;
     }
     
@@ -146,13 +57,13 @@
         /* Do something before exit state */
     }
 };
-
+ 
 const char* Bar::OUTCOME_FOO = "OUTCOME_FOO";
-
+ 
 class FooBar : public StateMachine{
-
+ 
 public:
-
+ 
     FooBar(const char* uuid):
         StateMachine(uuid),
         foo(NULL), bar(NULL)
@@ -170,15 +81,15 @@
         // Set the first state calling when the state machine starts
         this->setInitialState(STATE(foo)); 
     }
-
+ 
 private:
     Foo *foo;
     Bar *bar;
 };
-
+ 
 // Preempt state mahine button
 InterruptIn button(PC_13);
-
+ 
 void unit_test(){
     
     FooBar foobar("FOOBAR_SM");
@@ -189,6 +100,6 @@
     
     Logger::info("STATE MACHINE FINISHED WITH OUTCOME \"%s\"",foobar.execute()); 
 }
-
-
+ 
+ 
 #endif /* #ifndef __UTT_FOOBAR_H__*/
\ No newline at end of file