Karpova Lab fork of stateScript

Dependencies:   SMARTWAV SOMO_II mbed

Fork of stateScript_v2_karpova by Andy Lustig

Committer:
alustig3
Date:
Thu Jan 28 16:47:32 2016 +0000
Revision:
9:f15ad8d18881
Parent:
3:d7b0a0890d96
Added pin designations for Karpova Lab's Ephys module 1.2 and Max module 1.1.; Code is now compatible with SOMO II sound module.

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 0:8dbd6bd9167f 36 class sDigitalIn
mkarlsso 0:8dbd6bd9167f 37 {
mkarlsso 0:8dbd6bd9167f 38 public:
mkarlsso 0:8dbd6bd9167f 39 sDigitalIn();
mkarlsso 0:8dbd6bd9167f 40
mkarlsso 0:8dbd6bd9167f 41 virtual void init(int pin) = 0;
mkarlsso 0:8dbd6bd9167f 42 virtual int read() = 0;
mkarlsso 0:8dbd6bd9167f 43 virtual void interrupt_up_callback() = 0;
mkarlsso 0:8dbd6bd9167f 44 virtual void interrupt_down_callback() = 0;
mkarlsso 2:35266b266eaa 45 void setUpdate(bool);
mkarlsso 0:8dbd6bd9167f 46
mkarlsso 0:8dbd6bd9167f 47 changeEvent lastUpEvent;
mkarlsso 0:8dbd6bd9167f 48 changeEvent lastDownEvent;
mkarlsso 0:8dbd6bd9167f 49
mkarlsso 0:8dbd6bd9167f 50 protected:
mkarlsso 0:8dbd6bd9167f 51
mkarlsso 2:35266b266eaa 52 bool updating;
mkarlsso 2:35266b266eaa 53 changeEvent bufferedUpEvent;
mkarlsso 2:35266b266eaa 54 changeEvent bufferedDownEvent;
mkarlsso 0:8dbd6bd9167f 55 void addStateChange(int newState, uint32_t timeStamp);
mkarlsso 0:8dbd6bd9167f 56
mkarlsso 0:8dbd6bd9167f 57 };
mkarlsso 0:8dbd6bd9167f 58
mkarlsso 0:8dbd6bd9167f 59 class sSerialPort
mkarlsso 0:8dbd6bd9167f 60 {
mkarlsso 0:8dbd6bd9167f 61 public:
mkarlsso 0:8dbd6bd9167f 62 sSerialPort();
mkarlsso 0:8dbd6bd9167f 63
mkarlsso 0:8dbd6bd9167f 64 virtual void init() = 0;
mkarlsso 0:8dbd6bd9167f 65 virtual bool readable() = 0;
mkarlsso 0:8dbd6bd9167f 66 virtual char readChar() = 0;
mkarlsso 0:8dbd6bd9167f 67 virtual void writeChar(char s)= 0;
mkarlsso 3:d7b0a0890d96 68 virtual int requestToWriteString(char *s, int numBytes) = 0;
mkarlsso 3:d7b0a0890d96 69
mkarlsso 0:8dbd6bd9167f 70 protected:
mkarlsso 0:8dbd6bd9167f 71
mkarlsso 0:8dbd6bd9167f 72
mkarlsso 0:8dbd6bd9167f 73 };
mkarlsso 0:8dbd6bd9167f 74
mkarlsso 0:8dbd6bd9167f 75 class sSound
mkarlsso 0:8dbd6bd9167f 76 {
mkarlsso 0:8dbd6bd9167f 77 public:
mkarlsso 0:8dbd6bd9167f 78 sSound();
mkarlsso 0:8dbd6bd9167f 79 void setFile(string fileNameIn);
alustig3 9:f15ad8d18881 80 void setFile(unsigned char fileNumIn);
mkarlsso 0:8dbd6bd9167f 81 void setVolume(int* volumeIn);
mkarlsso 0:8dbd6bd9167f 82 void setVolume(int volumeIn);
mkarlsso 0:8dbd6bd9167f 83 void setPlayback(bool playIn);
mkarlsso 0:8dbd6bd9167f 84 void setReset();
mkarlsso 0:8dbd6bd9167f 85 virtual void execute() = 0;
mkarlsso 0:8dbd6bd9167f 86
mkarlsso 0:8dbd6bd9167f 87 protected:
mkarlsso 0:8dbd6bd9167f 88 char fileName[21];
mkarlsso 0:8dbd6bd9167f 89 bool fileNameExists;
alustig3 9:f15ad8d18881 90 unsigned char fileNum;
alustig3 9:f15ad8d18881 91 bool givenTrackNum;
mkarlsso 0:8dbd6bd9167f 92 int* volumePtr;
mkarlsso 0:8dbd6bd9167f 93 int volume;
mkarlsso 0:8dbd6bd9167f 94 bool play;
mkarlsso 0:8dbd6bd9167f 95 bool reset;
mkarlsso 0:8dbd6bd9167f 96 };
mkarlsso 0:8dbd6bd9167f 97
mkarlsso 0:8dbd6bd9167f 98 class sSystem
mkarlsso 0:8dbd6bd9167f 99 {
mkarlsso 0:8dbd6bd9167f 100 public:
mkarlsso 0:8dbd6bd9167f 101 sSystem();
mkarlsso 0:8dbd6bd9167f 102 virtual void timerinit() = 0;
mkarlsso 0:8dbd6bd9167f 103 virtual void setStandAloneClock() = 0;
mkarlsso 0:8dbd6bd9167f 104 virtual void setSlaveClock() = 0;
mkarlsso 0:8dbd6bd9167f 105 virtual sDigitalOut* getDigitalOutPtr(int portNum) = 0;
mkarlsso 0:8dbd6bd9167f 106 virtual sDigitalIn* getDigitalInPtr(int portNum) = 0;
mkarlsso 0:8dbd6bd9167f 107 virtual sSound* createNewSoundAction() = 0;
mkarlsso 0:8dbd6bd9167f 108 virtual void externalClockReset() = 0; //needs to reset harware timer before calling immediateClockReset();
mkarlsso 0:8dbd6bd9167f 109 virtual void incrementClock() = 0;
mkarlsso 0:8dbd6bd9167f 110 virtual void mainLoopToDo();
mkarlsso 0:8dbd6bd9167f 111 virtual void pauseInterrupts();
mkarlsso 0:8dbd6bd9167f 112 virtual void resumeInterrupts();
mkarlsso 0:8dbd6bd9167f 113 virtual int getPendingFunctionTriggers(uint16_t *bufferPtr); //Returns the number of pending shortcut triggers
mkarlsso 0:8dbd6bd9167f 114 virtual uint32_t getDigitalOutputChangeFlags();
mkarlsso 0:8dbd6bd9167f 115 virtual uint32_t getDigitalInputChangeFlags();
mkarlsso 3:d7b0a0890d96 116 void setPortUpdatesOn(int portNum);
mkarlsso 3:d7b0a0890d96 117 void setPortUpdatesOff(int portNum);
mkarlsso 3:d7b0a0890d96 118 bool* getIgnoreUpdates();
mkarlsso 3:d7b0a0890d96 119
mkarlsso 0:8dbd6bd9167f 120
mkarlsso 0:8dbd6bd9167f 121
mkarlsso 0:8dbd6bd9167f 122 protected:
mkarlsso 0:8dbd6bd9167f 123
mkarlsso 0:8dbd6bd9167f 124 //virtual void timerInterrupt() = 0;
mkarlsso 0:8dbd6bd9167f 125
mkarlsso 3:d7b0a0890d96 126 void immediateClockReset();
mkarlsso 0:8dbd6bd9167f 127 int currentDINPin;
mkarlsso 0:8dbd6bd9167f 128 int currentDOUTPin;
mkarlsso 0:8dbd6bd9167f 129 uint32_t currentDigitalOuputStates;
mkarlsso 0:8dbd6bd9167f 130 uint32_t currentDigitalInputStates;
mkarlsso 3:d7b0a0890d96 131 bool ignorePortUpdates[32];
mkarlsso 0:8dbd6bd9167f 132
mkarlsso 0:8dbd6bd9167f 133
mkarlsso 0:8dbd6bd9167f 134
mkarlsso 0:8dbd6bd9167f 135
mkarlsso 0:8dbd6bd9167f 136 };
mkarlsso 0:8dbd6bd9167f 137
mkarlsso 0:8dbd6bd9167f 138
mkarlsso 0:8dbd6bd9167f 139 //Used to buffer output text. Used mainly for 'display' commands within the script,
mkarlsso 0:8dbd6bd9167f 140 //and alloed the reset of the block to execute quickly instead. The text is then streamed out
mkarlsso 0:8dbd6bd9167f 141 //slowly via serial (one character per main loop execution). outputStream is a simple circular
mkarlsso 0:8dbd6bd9167f 142 //buffer that cannot be resized after initiation.
mkarlsso 0:8dbd6bd9167f 143 class outputStream {
mkarlsso 0:8dbd6bd9167f 144
mkarlsso 0:8dbd6bd9167f 145 public:
mkarlsso 0:8dbd6bd9167f 146 outputStream(int bufferSizeIn);
mkarlsso 0:8dbd6bd9167f 147 ~outputStream();
mkarlsso 0:8dbd6bd9167f 148 void setSerial(sSerialPort *s);
mkarlsso 3:d7b0a0890d96 149 void send(const string &outputString);
mkarlsso 3:d7b0a0890d96 150 void send(const char* s);
mkarlsso 0:8dbd6bd9167f 151 void debug(const char* s);
mkarlsso 3:d7b0a0890d96 152 outputStream &operator<<(const string &outputString);
mkarlsso 0:8dbd6bd9167f 153 outputStream &operator<<(int outputNum);
mkarlsso 0:8dbd6bd9167f 154 outputStream &operator<<(uint32_t outputNum);
mkarlsso 0:8dbd6bd9167f 155 outputStream &operator<<(const char* s);
mkarlsso 0:8dbd6bd9167f 156 char getNextChar();
mkarlsso 0:8dbd6bd9167f 157 bool unsentData;
mkarlsso 0:8dbd6bd9167f 158 void flush();
mkarlsso 0:8dbd6bd9167f 159
mkarlsso 0:8dbd6bd9167f 160 private:
mkarlsso 0:8dbd6bd9167f 161 int readHead;
mkarlsso 0:8dbd6bd9167f 162 int writeHead;
mkarlsso 0:8dbd6bd9167f 163 int totalWriteHead;
mkarlsso 0:8dbd6bd9167f 164 int totalReadHead;
mkarlsso 0:8dbd6bd9167f 165 int bufferSize;
mkarlsso 0:8dbd6bd9167f 166 char tmpOut;
mkarlsso 0:8dbd6bd9167f 167 char* outputBuffer;
mkarlsso 0:8dbd6bd9167f 168 sSerialPort* serialPtr;
mkarlsso 0:8dbd6bd9167f 169 };
mkarlsso 0:8dbd6bd9167f 170
mkarlsso 0:8dbd6bd9167f 171
mkarlsso 0:8dbd6bd9167f 172
mkarlsso 0:8dbd6bd9167f 173 #endif // HARDWARWEINTERFACE_H