Machine.hpp 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. /*
  2. Automaton.h - Reactive State Machine Framework for Arduino.
  3. Published under the MIT License (MIT), Copyright (c) 2015-2016, J.P. van der Landen
  4. */
  5. #pragma once
  6. class Machine {
  7. public:
  8. virtual int state( void );
  9. virtual Machine& trigger( int evt = 0 );
  10. Machine& cycle( uint32_t time = 0 );
  11. uint32_t state_millis;
  12. uint8_t flags = ATM_SLEEP_FLAG;
  13. state_t next_trigger = -1;
  14. uint8_t sleep( int8_t v = -1 );
  15. virtual int event( int id ) = 0; // Pure virtual methods -> make this an abstract class
  16. virtual void action( int id ) = 0;
  17. Machine* inventory_next;
  18. protected:
  19. Machine& state( int state );
  20. Machine& begin( const state_t tbl[], int width );
  21. const char* mapSymbol( int id, const char map[] );
  22. Machine& setTrace( Stream* stream, swcb_sym_t callback, const char symbols[] );
  23. void onPush( atm_connector connectors[], int id, int sub, int slots, int fill, Machine& machine, int event );
  24. void onPush( atm_connector connectors[], int id, int sub, int slots, int fill, atm_cb_push_t callback, int idx );
  25. void push( atm_connector connectors[], int id, int sub, int v, int up );
  26. const state_t* state_table;
  27. state_t next;
  28. state_t current = -1;
  29. state_t last_trigger = -1;
  30. const char* symbols;
  31. uint8_t state_width;
  32. swcb_sym_t callback_trace;
  33. Stream* stream_trace;
  34. uint32_t cycles;
  35. };