Microcontroller firmware that uses a simple, yet powerful scripting language to control the timing of input and output events with high temporal resolution. Written by Mattias Karlsson

Dependencies:   SMARTWAV mbed

Committer:
mkarlsso
Date:
Tue Feb 07 18:45:25 2017 +0000
Revision:
7:5fe7329751d4
Parent:
4:abee20c0bf2a
Fixed flip command for digital outputs

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mkarlsso 0:8dbd6bd9167f 1 #ifndef MBEDINTERFACE_H
mkarlsso 0:8dbd6bd9167f 2 #define MBEDINTERFACE_H
mkarlsso 0:8dbd6bd9167f 3
mkarlsso 0:8dbd6bd9167f 4 #include "hardwareInterface.h"
mkarlsso 0:8dbd6bd9167f 5 #include "mbed.h"
mkarlsso 0:8dbd6bd9167f 6 #include <stdint.h>
mkarlsso 0:8dbd6bd9167f 7 #include "SMARTWAV.h"
mkarlsso 0:8dbd6bd9167f 8 #include <string.h>
mkarlsso 0:8dbd6bd9167f 9 #include <string>
mkarlsso 0:8dbd6bd9167f 10 #include <vector>
mkarlsso 0:8dbd6bd9167f 11 #include <queue>
mkarlsso 0:8dbd6bd9167f 12 #include <sstream>
mkarlsso 0:8dbd6bd9167f 13
mkarlsso 0:8dbd6bd9167f 14
mkarlsso 0:8dbd6bd9167f 15 //#define MBED_RF
mkarlsso 0:8dbd6bd9167f 16
mkarlsso 0:8dbd6bd9167f 17
mkarlsso 7:5fe7329751d4 18 //#define NUMPORTS 10 //the number of ports available on this hardware
mkarlsso 7:5fe7329751d4 19 #define NUMDIGINPORTS 8
mkarlsso 7:5fe7329751d4 20 #define NUMDIGOUTPORTS 8
mkarlsso 7:5fe7329751d4 21 #define NUMANINPORTS 1
mkarlsso 7:5fe7329751d4 22 #define NUMANOUTPORTS 1
mkarlsso 0:8dbd6bd9167f 23
mkarlsso 3:d7b0a0890d96 24 #define NUMEVENTS 50
mkarlsso 3:d7b0a0890d96 25 #define NUMCONDITIONS 150
mkarlsso 3:d7b0a0890d96 26 #define NUMINTCOMPARE 150
mkarlsso 3:d7b0a0890d96 27 #define NUMACTIONS 150
mkarlsso 3:d7b0a0890d96 28 #define NUMPORTMESSAGES 150
mkarlsso 3:d7b0a0890d96 29 #define NUMINTOPERATIONS 150
mkarlsso 3:d7b0a0890d96 30 #define NUMDISPLAYACTIONS 30
mkarlsso 3:d7b0a0890d96 31 #define NUMTRIGGERACTIONS 30
mkarlsso 3:d7b0a0890d96 32 #define NUMFUNCTIONS 50
mkarlsso 3:d7b0a0890d96 33 #define INPUTCHARBUFFERSIZE 3072
mkarlsso 3:d7b0a0890d96 34
mkarlsso 0:8dbd6bd9167f 35
mkarlsso 0:8dbd6bd9167f 36
mkarlsso 0:8dbd6bd9167f 37 /*
mkarlsso 0:8dbd6bd9167f 38 class MBEDTimer : public sTimer
mkarlsso 0:8dbd6bd9167f 39 {
mkarlsso 0:8dbd6bd9167f 40 public:
mkarlsso 0:8dbd6bd9167f 41 sTimer();
mkarlsso 0:8dbd6bd9167f 42 virtual void init() = 0;
mkarlsso 0:8dbd6bd9167f 43 virtual void timeout_callback() = 0;
mkarlsso 0:8dbd6bd9167f 44
mkarlsso 0:8dbd6bd9167f 45 };
mkarlsso 0:8dbd6bd9167f 46
mkarlsso 0:8dbd6bd9167f 47 class MBEDExternalSync : public sExternalSync
mkarlsso 0:8dbd6bd9167f 48 {
mkarlsso 0:8dbd6bd9167f 49 public:
mkarlsso 0:8dbd6bd9167f 50 MBEDExternalSync();
mkarlsso 0:8dbd6bd9167f 51 void init();
mkarlsso 0:8dbd6bd9167f 52 void interrupt_callback();
mkarlsso 0:8dbd6bd9167f 53 void reset_callback();
mkarlsso 0:8dbd6bd9167f 54
mkarlsso 0:8dbd6bd9167f 55 };*/
mkarlsso 0:8dbd6bd9167f 56
mkarlsso 7:5fe7329751d4 57 class MBEDAnalogOut : public sAnalogOut
mkarlsso 7:5fe7329751d4 58 {
mkarlsso 7:5fe7329751d4 59 public:
mkarlsso 7:5fe7329751d4 60 MBEDAnalogOut();
mkarlsso 0:8dbd6bd9167f 61
mkarlsso 7:5fe7329751d4 62 void init(int pin);
mkarlsso 7:5fe7329751d4 63 void write(int value);
mkarlsso 7:5fe7329751d4 64 int read();
mkarlsso 7:5fe7329751d4 65
mkarlsso 7:5fe7329751d4 66 private:
mkarlsso 7:5fe7329751d4 67 //define the hardware output pin
mkarlsso 7:5fe7329751d4 68 uint8_t pinNumber;
mkarlsso 7:5fe7329751d4 69 AnalogOut *outpin;
mkarlsso 7:5fe7329751d4 70 bool pinExists;
mkarlsso 7:5fe7329751d4 71
mkarlsso 7:5fe7329751d4 72 };
mkarlsso 7:5fe7329751d4 73
mkarlsso 7:5fe7329751d4 74 class MBEDAnalogIn : public sAnalogIn
mkarlsso 7:5fe7329751d4 75 {
mkarlsso 7:5fe7329751d4 76 public:
mkarlsso 7:5fe7329751d4 77 MBEDAnalogIn();
mkarlsso 7:5fe7329751d4 78
mkarlsso 7:5fe7329751d4 79 void init(int pin);
mkarlsso 7:5fe7329751d4 80 int read();
mkarlsso 7:5fe7329751d4 81
mkarlsso 7:5fe7329751d4 82 protected:
mkarlsso 7:5fe7329751d4 83
mkarlsso 7:5fe7329751d4 84 private:
mkarlsso 7:5fe7329751d4 85 uint8_t pinNumber;
mkarlsso 7:5fe7329751d4 86 AnalogIn *inpin;
mkarlsso 7:5fe7329751d4 87 bool pinExists;
mkarlsso 7:5fe7329751d4 88
mkarlsso 7:5fe7329751d4 89
mkarlsso 7:5fe7329751d4 90 };
mkarlsso 0:8dbd6bd9167f 91
mkarlsso 0:8dbd6bd9167f 92 class MBEDDigitalOut : public sDigitalOut
mkarlsso 0:8dbd6bd9167f 93 {
mkarlsso 0:8dbd6bd9167f 94 public:
mkarlsso 0:8dbd6bd9167f 95 MBEDDigitalOut();
mkarlsso 0:8dbd6bd9167f 96
mkarlsso 0:8dbd6bd9167f 97 void init(int pin);
mkarlsso 0:8dbd6bd9167f 98 void write(int value);
mkarlsso 0:8dbd6bd9167f 99 int read();
mkarlsso 0:8dbd6bd9167f 100
mkarlsso 0:8dbd6bd9167f 101 private:
mkarlsso 0:8dbd6bd9167f 102 DigitalOut *outpin;
mkarlsso 4:abee20c0bf2a 103 bool pinExists;
mkarlsso 0:8dbd6bd9167f 104
mkarlsso 0:8dbd6bd9167f 105 };
mkarlsso 0:8dbd6bd9167f 106
mkarlsso 0:8dbd6bd9167f 107 class MBEDDigitalIn : public sDigitalIn
mkarlsso 0:8dbd6bd9167f 108 {
mkarlsso 0:8dbd6bd9167f 109 public:
mkarlsso 0:8dbd6bd9167f 110 MBEDDigitalIn();
mkarlsso 0:8dbd6bd9167f 111
mkarlsso 0:8dbd6bd9167f 112 void init(int pin);
mkarlsso 0:8dbd6bd9167f 113 int read();
mkarlsso 0:8dbd6bd9167f 114 void interrupt_up_callback();
mkarlsso 0:8dbd6bd9167f 115 void interrupt_down_callback();
mkarlsso 0:8dbd6bd9167f 116 protected:
mkarlsso 3:d7b0a0890d96 117
mkarlsso 3:d7b0a0890d96 118
mkarlsso 0:8dbd6bd9167f 119
mkarlsso 0:8dbd6bd9167f 120 private:
mkarlsso 0:8dbd6bd9167f 121 DigitalIn *inpin;
mkarlsso 0:8dbd6bd9167f 122 InterruptIn *inpin_interrupt;
mkarlsso 4:abee20c0bf2a 123 bool pinExists;
mkarlsso 0:8dbd6bd9167f 124
mkarlsso 0:8dbd6bd9167f 125 };
mkarlsso 0:8dbd6bd9167f 126
mkarlsso 0:8dbd6bd9167f 127 class MBEDSerialPort : public sSerialPort
mkarlsso 0:8dbd6bd9167f 128 {
mkarlsso 0:8dbd6bd9167f 129 public:
mkarlsso 0:8dbd6bd9167f 130 MBEDSerialPort();
mkarlsso 0:8dbd6bd9167f 131
mkarlsso 0:8dbd6bd9167f 132 void init();
mkarlsso 0:8dbd6bd9167f 133 bool readable();
mkarlsso 0:8dbd6bd9167f 134 char readChar();
mkarlsso 0:8dbd6bd9167f 135 void writeChar(char s);
mkarlsso 3:d7b0a0890d96 136 int requestToWriteString(char *s, int numBytes);
mkarlsso 0:8dbd6bd9167f 137 Serial *serialToPC;
mkarlsso 0:8dbd6bd9167f 138
mkarlsso 0:8dbd6bd9167f 139 private:
mkarlsso 0:8dbd6bd9167f 140 //Serial communication
mkarlsso 3:d7b0a0890d96 141
mkarlsso 0:8dbd6bd9167f 142
mkarlsso 0:8dbd6bd9167f 143 };
mkarlsso 0:8dbd6bd9167f 144
mkarlsso 0:8dbd6bd9167f 145 class MBEDSound: public sSound
mkarlsso 0:8dbd6bd9167f 146 {
mkarlsso 0:8dbd6bd9167f 147 public:
mkarlsso 0:8dbd6bd9167f 148 MBEDSound();
mkarlsso 0:8dbd6bd9167f 149 void execute();
mkarlsso 0:8dbd6bd9167f 150
mkarlsso 0:8dbd6bd9167f 151 private:
mkarlsso 0:8dbd6bd9167f 152
mkarlsso 0:8dbd6bd9167f 153 };
mkarlsso 0:8dbd6bd9167f 154
mkarlsso 0:8dbd6bd9167f 155 class MBEDSystem: public sSystem
mkarlsso 0:8dbd6bd9167f 156 {
mkarlsso 0:8dbd6bd9167f 157 public:
mkarlsso 0:8dbd6bd9167f 158 MBEDSystem();
mkarlsso 0:8dbd6bd9167f 159 void timerinit();
mkarlsso 0:8dbd6bd9167f 160 void setStandAloneClock();
mkarlsso 0:8dbd6bd9167f 161 void setSlaveClock();
mkarlsso 0:8dbd6bd9167f 162 sDigitalOut* getDigitalOutPtr(int portNum);
mkarlsso 0:8dbd6bd9167f 163 sDigitalIn* getDigitalInPtr(int portNum);
mkarlsso 7:5fe7329751d4 164 sAnalogOut* getAnalogOutPtr(int portNum);
mkarlsso 7:5fe7329751d4 165 sAnalogIn* getAnalogInPtr(int portNum);
mkarlsso 0:8dbd6bd9167f 166 sSound* createNewSoundAction();
mkarlsso 3:d7b0a0890d96 167 void pauseInterrupts();
mkarlsso 3:d7b0a0890d96 168 void resumeInterrupts();
mkarlsso 0:8dbd6bd9167f 169 void incrementClock();
mkarlsso 0:8dbd6bd9167f 170 void externalClockReset(); //needs to reset harware timer before calling immediateClockReset();
mkarlsso 0:8dbd6bd9167f 171 void mainLoopToDo();
mkarlsso 3:d7b0a0890d96 172
mkarlsso 0:8dbd6bd9167f 173 protected:
mkarlsso 3:d7b0a0890d96 174
mkarlsso 0:8dbd6bd9167f 175 //Pins for clock syncing
mkarlsso 0:8dbd6bd9167f 176 InterruptIn clockResetInt;
mkarlsso 0:8dbd6bd9167f 177 InterruptIn clockExternalIncrement;
mkarlsso 3:d7b0a0890d96 178
mkarlsso 0:8dbd6bd9167f 179 private:
mkarlsso 7:5fe7329751d4 180 MBEDDigitalIn dIn[NUMDIGINPORTS];
mkarlsso 7:5fe7329751d4 181 MBEDDigitalOut dOut[NUMDIGOUTPORTS];
mkarlsso 7:5fe7329751d4 182 MBEDAnalogIn aIn[NUMANINPORTS];
mkarlsso 7:5fe7329751d4 183 MBEDAnalogOut aOut[NUMANOUTPORTS];
mkarlsso 0:8dbd6bd9167f 184 };
mkarlsso 0:8dbd6bd9167f 185
mkarlsso 0:8dbd6bd9167f 186 #endif // MBEDINTERFACE_H