fork of StateScript

Dependencies:   mbed SOMO_II

Fork of stateScript_v2 by Mattias Karlsson

Committer:
alustig3
Date:
Fri Apr 28 14:47:55 2017 +0000
Revision:
10:f65649c13b5b
Parent:
9:f783bce314cd
Code is now compatible with FRDM-K64F.; Replaced SMARTWAV with SOMO-II

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mkarlsso 0:8dbd6bd9167f 1 #ifndef HARDWARWEINTERFACE_H
mkarlsso 0:8dbd6bd9167f 2 #define HARDWARWEINTERFACE_H
mkarlsso 0:8dbd6bd9167f 3
mkarlsso 0:8dbd6bd9167f 4 #include <stdint.h>
mkarlsso 0:8dbd6bd9167f 5 #include <string>
mkarlsso 3:d7b0a0890d96 6 #include <cstdlib>
mkarlsso 3:d7b0a0890d96 7 #include <string.h>
mkarlsso 0:8dbd6bd9167f 8
mkarlsso 0:8dbd6bd9167f 9 #define PENDINGTRIGGERBUFFERSIZE 10
mkarlsso 0:8dbd6bd9167f 10
mkarlsso 0:8dbd6bd9167f 11 //#define NUMPORTS 8 //the number of ports available on the hardware
mkarlsso 0:8dbd6bd9167f 12
mkarlsso 0:8dbd6bd9167f 13 using namespace std;
mkarlsso 0:8dbd6bd9167f 14
mkarlsso 0:8dbd6bd9167f 15 //for debugging output
mkarlsso 0:8dbd6bd9167f 16 //#define DEBUGOUTPUT
mkarlsso 0:8dbd6bd9167f 17
mkarlsso 0:8dbd6bd9167f 18 //used to organize digital change events
mkarlsso 0:8dbd6bd9167f 19 struct changeEvent {
mkarlsso 0:8dbd6bd9167f 20 uint32_t timeStamp;
mkarlsso 0:8dbd6bd9167f 21 bool triggered;
mkarlsso 0:8dbd6bd9167f 22 };
mkarlsso 0:8dbd6bd9167f 23
mkarlsso 0:8dbd6bd9167f 24 class sDigitalOut
mkarlsso 0:8dbd6bd9167f 25 {
mkarlsso 0:8dbd6bd9167f 26 public:
mkarlsso 0:8dbd6bd9167f 27 sDigitalOut();
mkarlsso 0:8dbd6bd9167f 28
mkarlsso 0:8dbd6bd9167f 29 virtual void init(int pin) = 0;
mkarlsso 0:8dbd6bd9167f 30 virtual void write(int value) = 0;
mkarlsso 0:8dbd6bd9167f 31 virtual int read() = 0;
mkarlsso 0:8dbd6bd9167f 32 protected:
mkarlsso 0:8dbd6bd9167f 33
mkarlsso 0:8dbd6bd9167f 34 };
mkarlsso 0:8dbd6bd9167f 35
mkarlsso 7:5fe7329751d4 36 class sAnalogIn
mkarlsso 7:5fe7329751d4 37 {
mkarlsso 7:5fe7329751d4 38 public:
mkarlsso 7:5fe7329751d4 39 sAnalogIn();
mkarlsso 7:5fe7329751d4 40
mkarlsso 7:5fe7329751d4 41 virtual void init(int pin) = 0;
mkarlsso 7:5fe7329751d4 42 virtual int read() = 0;
alustig3 9:f783bce314cd 43 volatile int32_t* hardwareStatePtr;
mkarlsso 7:5fe7329751d4 44
mkarlsso 7:5fe7329751d4 45
mkarlsso 7:5fe7329751d4 46 protected:
mkarlsso 7:5fe7329751d4 47
mkarlsso 7:5fe7329751d4 48
mkarlsso 7:5fe7329751d4 49 };
mkarlsso 7:5fe7329751d4 50
mkarlsso 7:5fe7329751d4 51 class sAnalogOut
mkarlsso 7:5fe7329751d4 52 {
mkarlsso 7:5fe7329751d4 53 public:
mkarlsso 7:5fe7329751d4 54 sAnalogOut();
mkarlsso 7:5fe7329751d4 55
mkarlsso 7:5fe7329751d4 56 virtual void init(int pin) = 0;
mkarlsso 7:5fe7329751d4 57 virtual void write(int value) = 0;
mkarlsso 7:5fe7329751d4 58 virtual int read() = 0;
mkarlsso 7:5fe7329751d4 59 protected:
mkarlsso 7:5fe7329751d4 60
mkarlsso 7:5fe7329751d4 61 };
mkarlsso 7:5fe7329751d4 62
mkarlsso 7:5fe7329751d4 63
mkarlsso 7:5fe7329751d4 64
mkarlsso 0:8dbd6bd9167f 65 class sDigitalIn
mkarlsso 0:8dbd6bd9167f 66 {
mkarlsso 0:8dbd6bd9167f 67 public:
mkarlsso 0:8dbd6bd9167f 68 sDigitalIn();
mkarlsso 0:8dbd6bd9167f 69
mkarlsso 0:8dbd6bd9167f 70 virtual void init(int pin) = 0;
mkarlsso 0:8dbd6bd9167f 71 virtual int read() = 0;
mkarlsso 0:8dbd6bd9167f 72 virtual void interrupt_up_callback() = 0;
mkarlsso 0:8dbd6bd9167f 73 virtual void interrupt_down_callback() = 0;
mkarlsso 2:35266b266eaa 74 void setUpdate(bool);
mkarlsso 0:8dbd6bd9167f 75
mkarlsso 0:8dbd6bd9167f 76 changeEvent lastUpEvent;
mkarlsso 0:8dbd6bd9167f 77 changeEvent lastDownEvent;
mkarlsso 0:8dbd6bd9167f 78
mkarlsso 0:8dbd6bd9167f 79 protected:
mkarlsso 0:8dbd6bd9167f 80
mkarlsso 2:35266b266eaa 81 bool updating;
mkarlsso 2:35266b266eaa 82 changeEvent bufferedUpEvent;
mkarlsso 2:35266b266eaa 83 changeEvent bufferedDownEvent;
mkarlsso 0:8dbd6bd9167f 84 void addStateChange(int newState, uint32_t timeStamp);
mkarlsso 0:8dbd6bd9167f 85
mkarlsso 0:8dbd6bd9167f 86 };
mkarlsso 0:8dbd6bd9167f 87
mkarlsso 0:8dbd6bd9167f 88 class sSerialPort
mkarlsso 0:8dbd6bd9167f 89 {
mkarlsso 0:8dbd6bd9167f 90 public:
mkarlsso 0:8dbd6bd9167f 91 sSerialPort();
mkarlsso 0:8dbd6bd9167f 92
mkarlsso 0:8dbd6bd9167f 93 virtual void init() = 0;
mkarlsso 0:8dbd6bd9167f 94 virtual bool readable() = 0;
mkarlsso 0:8dbd6bd9167f 95 virtual char readChar() = 0;
mkarlsso 0:8dbd6bd9167f 96 virtual void writeChar(char s)= 0;
mkarlsso 3:d7b0a0890d96 97 virtual int requestToWriteString(char *s, int numBytes) = 0;
mkarlsso 3:d7b0a0890d96 98
mkarlsso 0:8dbd6bd9167f 99 protected:
mkarlsso 0:8dbd6bd9167f 100
mkarlsso 0:8dbd6bd9167f 101
mkarlsso 0:8dbd6bd9167f 102 };
mkarlsso 0:8dbd6bd9167f 103
mkarlsso 0:8dbd6bd9167f 104 class sSound
mkarlsso 0:8dbd6bd9167f 105 {
mkarlsso 0:8dbd6bd9167f 106 public:
mkarlsso 0:8dbd6bd9167f 107 sSound();
mkarlsso 0:8dbd6bd9167f 108 void setFile(string fileNameIn);
mkarlsso 0:8dbd6bd9167f 109 void setVolume(int* volumeIn);
mkarlsso 0:8dbd6bd9167f 110 void setVolume(int volumeIn);
mkarlsso 0:8dbd6bd9167f 111 void setPlayback(bool playIn);
mkarlsso 0:8dbd6bd9167f 112 void setReset();
mkarlsso 0:8dbd6bd9167f 113 virtual void execute() = 0;
mkarlsso 0:8dbd6bd9167f 114
mkarlsso 0:8dbd6bd9167f 115 protected:
mkarlsso 0:8dbd6bd9167f 116 char fileName[21];
mkarlsso 0:8dbd6bd9167f 117 bool fileNameExists;
mkarlsso 0:8dbd6bd9167f 118 int* volumePtr;
mkarlsso 0:8dbd6bd9167f 119 int volume;
mkarlsso 0:8dbd6bd9167f 120 bool play;
mkarlsso 0:8dbd6bd9167f 121 bool reset;
mkarlsso 0:8dbd6bd9167f 122 };
mkarlsso 0:8dbd6bd9167f 123
mkarlsso 0:8dbd6bd9167f 124 class sSystem
mkarlsso 0:8dbd6bd9167f 125 {
mkarlsso 0:8dbd6bd9167f 126 public:
mkarlsso 0:8dbd6bd9167f 127 sSystem();
mkarlsso 0:8dbd6bd9167f 128 virtual void timerinit() = 0;
mkarlsso 0:8dbd6bd9167f 129 virtual void setStandAloneClock() = 0;
mkarlsso 0:8dbd6bd9167f 130 virtual void setSlaveClock() = 0;
mkarlsso 0:8dbd6bd9167f 131 virtual sDigitalOut* getDigitalOutPtr(int portNum) = 0;
mkarlsso 0:8dbd6bd9167f 132 virtual sDigitalIn* getDigitalInPtr(int portNum) = 0;
mkarlsso 7:5fe7329751d4 133 virtual sAnalogOut* getAnalogOutPtr(int portNum) = 0;
mkarlsso 7:5fe7329751d4 134 virtual sAnalogIn* getAnalogInPtr(int portNum) = 0;
mkarlsso 0:8dbd6bd9167f 135 virtual sSound* createNewSoundAction() = 0;
mkarlsso 0:8dbd6bd9167f 136 virtual void externalClockReset() = 0; //needs to reset harware timer before calling immediateClockReset();
mkarlsso 0:8dbd6bd9167f 137 virtual void incrementClock() = 0;
mkarlsso 0:8dbd6bd9167f 138 virtual void mainLoopToDo();
mkarlsso 0:8dbd6bd9167f 139 virtual void pauseInterrupts();
mkarlsso 0:8dbd6bd9167f 140 virtual void resumeInterrupts();
mkarlsso 7:5fe7329751d4 141 virtual void reset();
mkarlsso 8:872b843a3053 142 virtual void setMaxAnalogOut(int value);
mkarlsso 0:8dbd6bd9167f 143 virtual int getPendingFunctionTriggers(uint16_t *bufferPtr); //Returns the number of pending shortcut triggers
mkarlsso 0:8dbd6bd9167f 144 virtual uint32_t getDigitalOutputChangeFlags();
mkarlsso 0:8dbd6bd9167f 145 virtual uint32_t getDigitalInputChangeFlags();
mkarlsso 3:d7b0a0890d96 146 void setPortUpdatesOn(int portNum);
mkarlsso 3:d7b0a0890d96 147 void setPortUpdatesOff(int portNum);
alustig3 9:f783bce314cd 148 virtual bool digitalOutNeedsUpdate();
alustig3 9:f783bce314cd 149 virtual bool digitalInNeedsUpdate();
mkarlsso 3:d7b0a0890d96 150 bool* getIgnoreUpdates();
alustig3 9:f783bce314cd 151 virtual uint16_t getHardwareModelNumber();
alustig3 9:f783bce314cd 152 virtual uint16_t getHardwareSerialNumber();
alustig3 9:f783bce314cd 153 virtual uint8_t getHardwareMajorVersion();
alustig3 9:f783bce314cd 154 virtual uint8_t getHardwareMinorVersion();
alustig3 9:f783bce314cd 155
alustig3 9:f783bce314cd 156
mkarlsso 3:d7b0a0890d96 157
mkarlsso 0:8dbd6bd9167f 158
mkarlsso 0:8dbd6bd9167f 159
mkarlsso 0:8dbd6bd9167f 160 protected:
mkarlsso 0:8dbd6bd9167f 161
mkarlsso 0:8dbd6bd9167f 162 //virtual void timerInterrupt() = 0;
mkarlsso 0:8dbd6bd9167f 163
alustig3 10:f65649c13b5b 164 void immediateClockReset();
mkarlsso 0:8dbd6bd9167f 165 int currentDINPin;
mkarlsso 0:8dbd6bd9167f 166 int currentDOUTPin;
mkarlsso 0:8dbd6bd9167f 167 uint32_t currentDigitalOuputStates;
mkarlsso 0:8dbd6bd9167f 168 uint32_t currentDigitalInputStates;
mkarlsso 3:d7b0a0890d96 169 bool ignorePortUpdates[32];
mkarlsso 0:8dbd6bd9167f 170
mkarlsso 0:8dbd6bd9167f 171
mkarlsso 0:8dbd6bd9167f 172
mkarlsso 0:8dbd6bd9167f 173
mkarlsso 0:8dbd6bd9167f 174 };
mkarlsso 0:8dbd6bd9167f 175
mkarlsso 0:8dbd6bd9167f 176
mkarlsso 0:8dbd6bd9167f 177 //Used to buffer output text. Used mainly for 'display' commands within the script,
mkarlsso 0:8dbd6bd9167f 178 //and alloed the reset of the block to execute quickly instead. The text is then streamed out
mkarlsso 0:8dbd6bd9167f 179 //slowly via serial (one character per main loop execution). outputStream is a simple circular
mkarlsso 0:8dbd6bd9167f 180 //buffer that cannot be resized after initiation.
mkarlsso 0:8dbd6bd9167f 181 class outputStream {
mkarlsso 0:8dbd6bd9167f 182
mkarlsso 0:8dbd6bd9167f 183 public:
mkarlsso 0:8dbd6bd9167f 184 outputStream(int bufferSizeIn);
mkarlsso 0:8dbd6bd9167f 185 ~outputStream();
mkarlsso 0:8dbd6bd9167f 186 void setSerial(sSerialPort *s);
mkarlsso 3:d7b0a0890d96 187 void send(const string &outputString);
mkarlsso 3:d7b0a0890d96 188 void send(const char* s);
mkarlsso 0:8dbd6bd9167f 189 void debug(const char* s);
mkarlsso 3:d7b0a0890d96 190 outputStream &operator<<(const string &outputString);
mkarlsso 0:8dbd6bd9167f 191 outputStream &operator<<(int outputNum);
mkarlsso 0:8dbd6bd9167f 192 outputStream &operator<<(uint32_t outputNum);
mkarlsso 0:8dbd6bd9167f 193 outputStream &operator<<(const char* s);
mkarlsso 0:8dbd6bd9167f 194 char getNextChar();
mkarlsso 0:8dbd6bd9167f 195 bool unsentData;
mkarlsso 0:8dbd6bd9167f 196 void flush();
mkarlsso 0:8dbd6bd9167f 197
mkarlsso 0:8dbd6bd9167f 198 private:
mkarlsso 0:8dbd6bd9167f 199 int readHead;
mkarlsso 0:8dbd6bd9167f 200 int writeHead;
mkarlsso 0:8dbd6bd9167f 201 int totalWriteHead;
mkarlsso 0:8dbd6bd9167f 202 int totalReadHead;
mkarlsso 0:8dbd6bd9167f 203 int bufferSize;
mkarlsso 0:8dbd6bd9167f 204 char tmpOut;
mkarlsso 0:8dbd6bd9167f 205 char* outputBuffer;
mkarlsso 0:8dbd6bd9167f 206 sSerialPort* serialPtr;
mkarlsso 0:8dbd6bd9167f 207 };
mkarlsso 0:8dbd6bd9167f 208
mkarlsso 0:8dbd6bd9167f 209
mkarlsso 0:8dbd6bd9167f 210
mkarlsso 0:8dbd6bd9167f 211 #endif // HARDWARWEINTERFACE_H