Erick / Mbed 2 deprecated ICE-F412

Dependencies:   mbed-rtos mbed

Committer:
jmarkel44
Date:
Tue Jan 24 19:05:33 2017 +0000
Revision:
0:61364762ee0e
Port from IAR to Nucleo-F412 board

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jmarkel44 0:61364762ee0e 1 /******************************************************************************
jmarkel44 0:61364762ee0e 2 *
jmarkel44 0:61364762ee0e 3 * File: SetpointControl.h
jmarkel44 0:61364762ee0e 4 * Desciption: ICE Timer Control Class
jmarkel44 0:61364762ee0e 5 *
jmarkel44 0:61364762ee0e 6 *****************************************************************************/
jmarkel44 0:61364762ee0e 7 #ifndef SEQUENCECONTROL_H
jmarkel44 0:61364762ee0e 8 #define SEQUENCECONTROL_H
jmarkel44 0:61364762ee0e 9
jmarkel44 0:61364762ee0e 10 #include <global.h>
jmarkel44 0:61364762ee0e 11 #include <string>
jmarkel44 0:61364762ee0e 12 #include <stdio.h>
jmarkel44 0:61364762ee0e 13 #include <vector>
jmarkel44 0:61364762ee0e 14
jmarkel44 0:61364762ee0e 15 #define SEQUENCE_CONTROL_DEBUG
jmarkel44 0:61364762ee0e 16 #define SEQUENCE_CONTROL_FILENAME_PREFIX "seq_"
jmarkel44 0:61364762ee0e 17
jmarkel44 0:61364762ee0e 18 typedef enum {
jmarkel44 0:61364762ee0e 19 SEQUENCE_CONTROL_OK,
jmarkel44 0:61364762ee0e 20 SEQUENCE_CONTROL_UNK_STATE,
jmarkel44 0:61364762ee0e 21 SEQUENCE_CONTROL_ERROR,
jmarkel44 0:61364762ee0e 22 SEQUENCE_CONTROL_DESTROY,
jmarkel44 0:61364762ee0e 23 SEQUENCE_CONTROL_BAD_CONTROL_TYPE,
jmarkel44 0:61364762ee0e 24 SEQUENCE_CONTROL_BAD_ACTION
jmarkel44 0:61364762ee0e 25 } SequenceControlError_t;
jmarkel44 0:61364762ee0e 26
jmarkel44 0:61364762ee0e 27 //! SequenceControl - implements a sequence control that is comprised of
jmarkel44 0:61364762ee0e 28 // sub-controls and operations to achieve a sequence of activities.
jmarkel44 0:61364762ee0e 29 class SequenceControl
jmarkel44 0:61364762ee0e 30 {
jmarkel44 0:61364762ee0e 31 private:
jmarkel44 0:61364762ee0e 32 std::string controlFile; // the control file
jmarkel44 0:61364762ee0e 33 std::string id; // unique identifier
jmarkel44 0:61364762ee0e 34 std::string startTrigger; // start trigger: once the start
jmarkel44 0:61364762ee0e 35 // trigger evals to true, the
jmarkel44 0:61364762ee0e 36 // control will start executing
jmarkel44 0:61364762ee0e 37 // the entries in the sequence table
jmarkel44 0:61364762ee0e 38
jmarkel44 0:61364762ee0e 39 typedef struct Action_tag {
jmarkel44 0:61364762ee0e 40 std::string action; // create/delete/execute
jmarkel44 0:61364762ee0e 41 std::string id; // control, vreg or script identifier
jmarkel44 0:61364762ee0e 42 float value; // for assignment action
jmarkel44 0:61364762ee0e 43 } Action_t;
jmarkel44 0:61364762ee0e 44
jmarkel44 0:61364762ee0e 45 // A Sequence Entry:
jmarkel44 0:61364762ee0e 46 //
jmarkel44 0:61364762ee0e 47 // startTrigger -> an expression that evals to true
jmarkel44 0:61364762ee0e 48 // actions[] -> list of actions to perform when the start condition is satisfied
jmarkel44 0:61364762ee0e 49 // stopTrigger -> an expression that evals to true
jmarkel44 0:61364762ee0e 50 //
jmarkel44 0:61364762ee0e 51 typedef struct SequenceEntry_tag {
jmarkel44 0:61364762ee0e 52 std::string startTrigger; // trigger to load the sequence
jmarkel44 0:61364762ee0e 53 std::vector<Action_t> actions; // actions to perform
jmarkel44 0:61364762ee0e 54 std::string stopTrigger; // trigger to load the next entry
jmarkel44 0:61364762ee0e 55 } SequenceEntry;
jmarkel44 0:61364762ee0e 56
jmarkel44 0:61364762ee0e 57 // the sequence table
jmarkel44 0:61364762ee0e 58 std::vector<SequenceEntry> sequenceTable;
jmarkel44 0:61364762ee0e 59
jmarkel44 0:61364762ee0e 60 // state machine information
jmarkel44 0:61364762ee0e 61 enum SequenceControlState_t {
jmarkel44 0:61364762ee0e 62 SEQ_STATE_INIT, // object successfully created
jmarkel44 0:61364762ee0e 63 SEQ_STATE_START, // object programmatically started
jmarkel44 0:61364762ee0e 64 SEQ_STATE_LOADING_NEXT_ENTRY, // loading the next entry (transient)
jmarkel44 0:61364762ee0e 65 SEQ_STATE_WAITING_START, // waiting for entry start trigger(s)
jmarkel44 0:61364762ee0e 66 SEQ_STATE_WAITING_STOP, // waiting for entry stop trigger(s)
jmarkel44 0:61364762ee0e 67 SEQ_STATE_FINISHED, // finished with all entries in the sequence table
jmarkel44 0:61364762ee0e 68 SEQ_STATE_FAILED, // something went awry
jmarkel44 0:61364762ee0e 69 SEQ_STATE_MAX
jmarkel44 0:61364762ee0e 70 };
jmarkel44 0:61364762ee0e 71
jmarkel44 0:61364762ee0e 72 SequenceControlState_t currentState; // control's current state
jmarkel44 0:61364762ee0e 73 SequenceEntry currentEntry; // currently loaded entry in the seq table
jmarkel44 0:61364762ee0e 74 unsigned int nextEntryIndex; // next entry index
jmarkel44 0:61364762ee0e 75
jmarkel44 0:61364762ee0e 76 /// validate the contents of the control file
jmarkel44 0:61364762ee0e 77 bool validateControlData(const char *);
jmarkel44 0:61364762ee0e 78
jmarkel44 0:61364762ee0e 79 /// assign control data from control file to object data
jmarkel44 0:61364762ee0e 80 void copyControlData(const char *);
jmarkel44 0:61364762ee0e 81
jmarkel44 0:61364762ee0e 82 /// has the control starting trigger fired?
jmarkel44 0:61364762ee0e 83 bool isControlStartTriggerOn(void);
jmarkel44 0:61364762ee0e 84
jmarkel44 0:61364762ee0e 85 /// has the sequence entry starting trigger fired?
jmarkel44 0:61364762ee0e 86 bool isCurrentEntryStartTriggerOn(void);
jmarkel44 0:61364762ee0e 87
jmarkel44 0:61364762ee0e 88 /// has the sequence entry stopping trigger fired?
jmarkel44 0:61364762ee0e 89 bool isCurrentEntryStopTriggerOn(void);
jmarkel44 0:61364762ee0e 90
jmarkel44 0:61364762ee0e 91 /// load the next entry from the sequence table
jmarkel44 0:61364762ee0e 92 bool loadNextEntry(void);
jmarkel44 0:61364762ee0e 93
jmarkel44 0:61364762ee0e 94 /// perform the actions from the sequence entry
jmarkel44 0:61364762ee0e 95 SequenceControlError_t performActions(void);
jmarkel44 0:61364762ee0e 96
jmarkel44 0:61364762ee0e 97 /// create a control from the sequence table
jmarkel44 0:61364762ee0e 98 SequenceControlError_t createSubControl(const std::string controlId,
jmarkel44 0:61364762ee0e 99 Control_t type);
jmarkel44 0:61364762ee0e 100
jmarkel44 0:61364762ee0e 101 /// delete a control from the sequence table
jmarkel44 0:61364762ee0e 102 SequenceControlError_t destroySubControl(const std::string controlId,
jmarkel44 0:61364762ee0e 103 Control_t type);
jmarkel44 0:61364762ee0e 104
jmarkel44 0:61364762ee0e 105 /// assign a virtual register
jmarkel44 0:61364762ee0e 106 bool assignRegister(const std::string id, float value);
jmarkel44 0:61364762ee0e 107
jmarkel44 0:61364762ee0e 108 public:
jmarkel44 0:61364762ee0e 109 /// create a sequence control
jmarkel44 0:61364762ee0e 110 SequenceControl() {
jmarkel44 0:61364762ee0e 111 currentState = SEQ_STATE_INIT;
jmarkel44 0:61364762ee0e 112 nextEntryIndex = 0;
jmarkel44 0:61364762ee0e 113 };
jmarkel44 0:61364762ee0e 114 /// destructor
jmarkel44 0:61364762ee0e 115 ~SequenceControl() {
jmarkel44 0:61364762ee0e 116 printf("\r%s invoked\n", __func__);
jmarkel44 0:61364762ee0e 117 }
jmarkel44 0:61364762ee0e 118
jmarkel44 0:61364762ee0e 119 /// load sequence control data from a JSON configuration file
jmarkel44 0:61364762ee0e 120 bool load(std::string filename);
jmarkel44 0:61364762ee0e 121
jmarkel44 0:61364762ee0e 122 /// start the sequence control
jmarkel44 0:61364762ee0e 123 void start(void);
jmarkel44 0:61364762ee0e 124
jmarkel44 0:61364762ee0e 125 /// the motor
jmarkel44 0:61364762ee0e 126 SequenceControlError_t run(void);
jmarkel44 0:61364762ee0e 127
jmarkel44 0:61364762ee0e 128 /// display the pertinents
jmarkel44 0:61364762ee0e 129 void display(void);
jmarkel44 0:61364762ee0e 130
jmarkel44 0:61364762ee0e 131 /// get sequence control identifier
jmarkel44 0:61364762ee0e 132 std::string getId(void) const { return id; }
jmarkel44 0:61364762ee0e 133
jmarkel44 0:61364762ee0e 134 /// get starting trigger
jmarkel44 0:61364762ee0e 135 std::string getStartTrigger(void) const { return startTrigger; }
jmarkel44 0:61364762ee0e 136 };
jmarkel44 0:61364762ee0e 137
jmarkel44 0:61364762ee0e 138 #endif
jmarkel44 0:61364762ee0e 139