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 #include "hardwareInterface.h"
mkarlsso 0:8dbd6bd9167f 2 //#include <ostream>
mkarlsso 0:8dbd6bd9167f 3 #include <sstream>
mkarlsso 0:8dbd6bd9167f 4
mkarlsso 0:8dbd6bd9167f 5 using namespace std;
alustig3 9:f783bce314cd 6 //#define DEBUGOUTPUT
mkarlsso 0:8dbd6bd9167f 7 //In debug mode, debug messages output to the screen
mkarlsso 0:8dbd6bd9167f 8 #ifdef DEBUGOUTPUT
mkarlsso 0:8dbd6bd9167f 9 bool debugOut = true;
mkarlsso 0:8dbd6bd9167f 10 #else
mkarlsso 0:8dbd6bd9167f 11 bool debugOut = false;
mkarlsso 0:8dbd6bd9167f 12 #endif
mkarlsso 0:8dbd6bd9167f 13
mkarlsso 0:8dbd6bd9167f 14 uint32_t timeKeeper; //the main clock (updated every ms)
mkarlsso 0:8dbd6bd9167f 15 bool resetTimer;
mkarlsso 0:8dbd6bd9167f 16 bool clockSlave;
mkarlsso 0:8dbd6bd9167f 17 bool changeToSlave;
mkarlsso 0:8dbd6bd9167f 18 bool changeToStandAlone;
mkarlsso 0:8dbd6bd9167f 19
mkarlsso 0:8dbd6bd9167f 20
mkarlsso 0:8dbd6bd9167f 21 #ifdef MBEDHARDWARE
mkarlsso 0:8dbd6bd9167f 22
mkarlsso 0:8dbd6bd9167f 23 //On the MBED, this needs to be put on a defined bank of memory, or else we run out of memory
mkarlsso 0:8dbd6bd9167f 24 __attribute((section("AHBSRAM0"),aligned)) outputStream textDisplay(512);
mkarlsso 0:8dbd6bd9167f 25
mkarlsso 0:8dbd6bd9167f 26 #else
mkarlsso 0:8dbd6bd9167f 27 outputStream textDisplay(256);
mkarlsso 0:8dbd6bd9167f 28
mkarlsso 0:8dbd6bd9167f 29 #endif
mkarlsso 0:8dbd6bd9167f 30
mkarlsso 0:8dbd6bd9167f 31
mkarlsso 0:8dbd6bd9167f 32 //---------------------------------------------------------
mkarlsso 0:8dbd6bd9167f 33
mkarlsso 0:8dbd6bd9167f 34 sSystem::sSystem() {
mkarlsso 3:d7b0a0890d96 35 for (int i=0;i<32;i++) {
mkarlsso 7:5fe7329751d4 36 ignorePortUpdates[i] = true; //by default, all digital port changes are not automatically reported.
mkarlsso 3:d7b0a0890d96 37 }
mkarlsso 3:d7b0a0890d96 38 }
mkarlsso 0:8dbd6bd9167f 39
alustig3 9:f783bce314cd 40 uint16_t sSystem::getHardwareModelNumber(){
alustig3 9:f783bce314cd 41 return 0;
alustig3 9:f783bce314cd 42 }
alustig3 9:f783bce314cd 43
alustig3 9:f783bce314cd 44 uint16_t sSystem::getHardwareSerialNumber(){
alustig3 9:f783bce314cd 45 return 0;
alustig3 9:f783bce314cd 46 }
alustig3 9:f783bce314cd 47
alustig3 9:f783bce314cd 48 uint8_t sSystem::getHardwareMajorVersion(){
alustig3 9:f783bce314cd 49 return 0;
alustig3 9:f783bce314cd 50 }
alustig3 9:f783bce314cd 51
alustig3 9:f783bce314cd 52 uint8_t sSystem::getHardwareMinorVersion(){
alustig3 9:f783bce314cd 53 return 0;
alustig3 9:f783bce314cd 54 }
alustig3 9:f783bce314cd 55
alustig3 9:f783bce314cd 56 bool sSystem::digitalInNeedsUpdate() {
alustig3 9:f783bce314cd 57 //Default behavior is to read every pass through the main loop
alustig3 9:f783bce314cd 58 return true;
alustig3 9:f783bce314cd 59 }
alustig3 9:f783bce314cd 60
alustig3 9:f783bce314cd 61 bool sSystem::digitalOutNeedsUpdate() {
alustig3 9:f783bce314cd 62 //Default behavior is to read every pass through the main loop
alustig3 9:f783bce314cd 63 return true;
alustig3 9:f783bce314cd 64 }
alustig3 9:f783bce314cd 65
mkarlsso 3:d7b0a0890d96 66 //The user can toggle whether a particular port triggers a state update report every time it changes
mkarlsso 3:d7b0a0890d96 67 //This is useful for inputs that toggle continuously.
mkarlsso 3:d7b0a0890d96 68 void sSystem::setPortUpdatesOff(int portNum) {
mkarlsso 3:d7b0a0890d96 69 ignorePortUpdates[portNum] = true;
mkarlsso 3:d7b0a0890d96 70 }
mkarlsso 3:d7b0a0890d96 71
mkarlsso 3:d7b0a0890d96 72 void sSystem::setPortUpdatesOn(int portNum) {
mkarlsso 3:d7b0a0890d96 73 ignorePortUpdates[portNum] = false;
mkarlsso 3:d7b0a0890d96 74 }
mkarlsso 3:d7b0a0890d96 75
mkarlsso 3:d7b0a0890d96 76 bool* sSystem::getIgnoreUpdates() {
mkarlsso 3:d7b0a0890d96 77 return ignorePortUpdates;
mkarlsso 0:8dbd6bd9167f 78 }
mkarlsso 0:8dbd6bd9167f 79
mkarlsso 0:8dbd6bd9167f 80 void sSystem::immediateClockReset() {
mkarlsso 0:8dbd6bd9167f 81 //For external clock reset
mkarlsso 0:8dbd6bd9167f 82 timeKeeper = 0;
mkarlsso 0:8dbd6bd9167f 83 textDisplay << timeKeeper << " Clock reset\r\n";
mkarlsso 0:8dbd6bd9167f 84 }
mkarlsso 0:8dbd6bd9167f 85
mkarlsso 0:8dbd6bd9167f 86 void sSystem::mainLoopToDo() {
mkarlsso 0:8dbd6bd9167f 87
mkarlsso 0:8dbd6bd9167f 88 }
mkarlsso 0:8dbd6bd9167f 89
mkarlsso 0:8dbd6bd9167f 90 void sSystem::pauseInterrupts() {
mkarlsso 0:8dbd6bd9167f 91
mkarlsso 0:8dbd6bd9167f 92 }
mkarlsso 0:8dbd6bd9167f 93
mkarlsso 7:5fe7329751d4 94 void sSystem::reset() {
mkarlsso 7:5fe7329751d4 95
mkarlsso 7:5fe7329751d4 96 }
mkarlsso 7:5fe7329751d4 97
mkarlsso 8:872b843a3053 98 void sSystem::setMaxAnalogOut(int value) {
mkarlsso 8:872b843a3053 99
mkarlsso 8:872b843a3053 100 }
mkarlsso 8:872b843a3053 101
mkarlsso 0:8dbd6bd9167f 102 void sSystem::resumeInterrupts() {
mkarlsso 0:8dbd6bd9167f 103
mkarlsso 0:8dbd6bd9167f 104 }
mkarlsso 0:8dbd6bd9167f 105
mkarlsso 0:8dbd6bd9167f 106 int sSystem::getPendingFunctionTriggers(uint16_t *bufferPtr) {
mkarlsso 0:8dbd6bd9167f 107 return 0;
mkarlsso 0:8dbd6bd9167f 108 }
mkarlsso 0:8dbd6bd9167f 109
mkarlsso 0:8dbd6bd9167f 110 uint32_t sSystem::getDigitalOutputChangeFlags() {
mkarlsso 0:8dbd6bd9167f 111
mkarlsso 0:8dbd6bd9167f 112 }
mkarlsso 0:8dbd6bd9167f 113
mkarlsso 0:8dbd6bd9167f 114 uint32_t sSystem::getDigitalInputChangeFlags() {
mkarlsso 0:8dbd6bd9167f 115
mkarlsso 0:8dbd6bd9167f 116 }
mkarlsso 7:5fe7329751d4 117 //-----------------------------------------------------
mkarlsso 7:5fe7329751d4 118 sAnalogOut::sAnalogOut() {
mkarlsso 7:5fe7329751d4 119
mkarlsso 7:5fe7329751d4 120 }
mkarlsso 7:5fe7329751d4 121
mkarlsso 7:5fe7329751d4 122 //------------------------------------------------------
mkarlsso 7:5fe7329751d4 123 sAnalogIn::sAnalogIn() {
alustig3 9:f783bce314cd 124 hardwareStatePtr = NULL;
mkarlsso 7:5fe7329751d4 125 }
mkarlsso 7:5fe7329751d4 126
mkarlsso 0:8dbd6bd9167f 127
mkarlsso 0:8dbd6bd9167f 128 //------------------------------------------------------
mkarlsso 0:8dbd6bd9167f 129 sDigitalOut::sDigitalOut() {
mkarlsso 0:8dbd6bd9167f 130
mkarlsso 0:8dbd6bd9167f 131 }
mkarlsso 0:8dbd6bd9167f 132
mkarlsso 0:8dbd6bd9167f 133 //----------------------------------------------------
mkarlsso 0:8dbd6bd9167f 134 sDigitalIn::sDigitalIn() {
mkarlsso 0:8dbd6bd9167f 135 lastDownEvent.triggered = false;
mkarlsso 0:8dbd6bd9167f 136 lastUpEvent.triggered = false;
mkarlsso 2:35266b266eaa 137 bufferedDownEvent.triggered = false;
mkarlsso 2:35266b266eaa 138 bufferedUpEvent.triggered = false;
mkarlsso 2:35266b266eaa 139 updating = false;
mkarlsso 0:8dbd6bd9167f 140 }
mkarlsso 0:8dbd6bd9167f 141
mkarlsso 0:8dbd6bd9167f 142 void sDigitalIn::addStateChange(int newState, uint32_t timeStamp) {
mkarlsso 0:8dbd6bd9167f 143
mkarlsso 0:8dbd6bd9167f 144 //With levers and beam breaks, there will be flutter when triggers happen.
mkarlsso 0:8dbd6bd9167f 145 //The goal is to capture the initial event time, so we ignore extra triggers
mkarlsso 0:8dbd6bd9167f 146 //until it has been processed
mkarlsso 2:35266b266eaa 147 if (!updating) {
mkarlsso 2:35266b266eaa 148 if ((newState == 0) && (!lastDownEvent.triggered)){
mkarlsso 2:35266b266eaa 149 lastDownEvent.timeStamp = timeStamp;
mkarlsso 2:35266b266eaa 150 lastDownEvent.triggered = true;
mkarlsso 2:35266b266eaa 151 } else if ((newState == 1) && (!lastUpEvent.triggered)) {
mkarlsso 2:35266b266eaa 152 lastUpEvent.timeStamp = timeStamp;
mkarlsso 2:35266b266eaa 153 lastUpEvent.triggered = true;
mkarlsso 2:35266b266eaa 154 }
mkarlsso 2:35266b266eaa 155 } else {
mkarlsso 2:35266b266eaa 156 //If we are currently checking this input, then we buffer the trigger and deal with it after
mkarlsso 2:35266b266eaa 157 if (newState == 0){
mkarlsso 2:35266b266eaa 158 bufferedDownEvent.timeStamp = timeStamp;
mkarlsso 7:5fe7329751d4 159 bufferedDownEvent.triggered = true;
mkarlsso 2:35266b266eaa 160 } else if (newState == 1) {
mkarlsso 2:35266b266eaa 161 bufferedUpEvent.timeStamp = timeStamp;
mkarlsso 7:5fe7329751d4 162 bufferedUpEvent.triggered = true;
mkarlsso 2:35266b266eaa 163 }
mkarlsso 2:35266b266eaa 164 }
mkarlsso 2:35266b266eaa 165 /*
mkarlsso 0:8dbd6bd9167f 166 if ((newState == 0) && (!lastDownEvent.triggered)){
mkarlsso 0:8dbd6bd9167f 167 lastDownEvent.timeStamp = timeStamp;
mkarlsso 0:8dbd6bd9167f 168 lastDownEvent.triggered = true;
mkarlsso 0:8dbd6bd9167f 169 } else if ((newState == 1) && (!lastUpEvent.triggered)) {
mkarlsso 0:8dbd6bd9167f 170 lastUpEvent.timeStamp = timeStamp;
mkarlsso 0:8dbd6bd9167f 171 lastUpEvent.triggered = true;
mkarlsso 2:35266b266eaa 172 }*/
mkarlsso 2:35266b266eaa 173 }
mkarlsso 2:35266b266eaa 174
mkarlsso 2:35266b266eaa 175 void sDigitalIn::setUpdate(bool state) {
mkarlsso 2:35266b266eaa 176 updating = state; //If true, then we buffer any trigger events until the update check is done.
mkarlsso 2:35266b266eaa 177 if (!updating) {
mkarlsso 2:35266b266eaa 178 if (bufferedUpEvent.triggered) {
mkarlsso 2:35266b266eaa 179 lastUpEvent = bufferedUpEvent;
mkarlsso 2:35266b266eaa 180 }
mkarlsso 2:35266b266eaa 181 if (bufferedDownEvent.triggered) {
mkarlsso 2:35266b266eaa 182 lastDownEvent = bufferedDownEvent;
mkarlsso 2:35266b266eaa 183 }
mkarlsso 2:35266b266eaa 184 bufferedDownEvent.triggered = false;
mkarlsso 2:35266b266eaa 185 bufferedUpEvent.triggered = false;
mkarlsso 0:8dbd6bd9167f 186 }
mkarlsso 0:8dbd6bd9167f 187 }
mkarlsso 0:8dbd6bd9167f 188
mkarlsso 0:8dbd6bd9167f 189 //-----------------------------------------------------
mkarlsso 0:8dbd6bd9167f 190 sSerialPort::sSerialPort() {
mkarlsso 0:8dbd6bd9167f 191
mkarlsso 0:8dbd6bd9167f 192 }
mkarlsso 0:8dbd6bd9167f 193
mkarlsso 0:8dbd6bd9167f 194 //------------------------------------------------------
mkarlsso 0:8dbd6bd9167f 195
mkarlsso 0:8dbd6bd9167f 196 sSound::sSound(void):
mkarlsso 0:8dbd6bd9167f 197 fileNameExists(false),
mkarlsso 0:8dbd6bd9167f 198 volumePtr(NULL),
mkarlsso 0:8dbd6bd9167f 199 volume(-1),
mkarlsso 0:8dbd6bd9167f 200 play(true),
mkarlsso 0:8dbd6bd9167f 201 reset(false) {
mkarlsso 0:8dbd6bd9167f 202 }
mkarlsso 0:8dbd6bd9167f 203
mkarlsso 0:8dbd6bd9167f 204 void sSound::setFile(string fileNameIn) {
mkarlsso 0:8dbd6bd9167f 205 for (int i = 0; i < 20; i++) {
mkarlsso 0:8dbd6bd9167f 206 fileName[i] = NULL;
mkarlsso 0:8dbd6bd9167f 207 }
mkarlsso 0:8dbd6bd9167f 208 size_t length = fileNameIn.size();
mkarlsso 0:8dbd6bd9167f 209 if (length <= 20) {
mkarlsso 0:8dbd6bd9167f 210 fileNameIn.copy(fileName, length, 0);
mkarlsso 0:8dbd6bd9167f 211 fileNameExists = true;
mkarlsso 0:8dbd6bd9167f 212 }
mkarlsso 0:8dbd6bd9167f 213 }
mkarlsso 0:8dbd6bd9167f 214 void sSound::setVolume(int volumeIn) {
mkarlsso 0:8dbd6bd9167f 215
mkarlsso 0:8dbd6bd9167f 216 if ((volumeIn >= 0) && (volumeIn < 256)) {
mkarlsso 0:8dbd6bd9167f 217 volume = volumeIn;
mkarlsso 0:8dbd6bd9167f 218 volumePtr = NULL;
mkarlsso 0:8dbd6bd9167f 219 }
mkarlsso 0:8dbd6bd9167f 220 }
mkarlsso 0:8dbd6bd9167f 221
mkarlsso 0:8dbd6bd9167f 222 void sSound::setVolume(int* volumeIn) {
mkarlsso 0:8dbd6bd9167f 223
mkarlsso 0:8dbd6bd9167f 224 volume = -1;
mkarlsso 0:8dbd6bd9167f 225 volumePtr = volumeIn;
mkarlsso 0:8dbd6bd9167f 226
mkarlsso 0:8dbd6bd9167f 227 }
mkarlsso 0:8dbd6bd9167f 228
mkarlsso 0:8dbd6bd9167f 229 void sSound::setPlayback(bool playIn) {
mkarlsso 0:8dbd6bd9167f 230 play = playIn;
mkarlsso 0:8dbd6bd9167f 231 }
mkarlsso 0:8dbd6bd9167f 232
mkarlsso 0:8dbd6bd9167f 233 void sSound::setReset() {
mkarlsso 0:8dbd6bd9167f 234 reset = true;
mkarlsso 0:8dbd6bd9167f 235 }
mkarlsso 0:8dbd6bd9167f 236
mkarlsso 0:8dbd6bd9167f 237
mkarlsso 0:8dbd6bd9167f 238 //-----------------------------------------------------
mkarlsso 0:8dbd6bd9167f 239 outputStream::outputStream(int bufferSizeIn):
mkarlsso 0:8dbd6bd9167f 240 readHead(0),
mkarlsso 0:8dbd6bd9167f 241 writeHead(0),
mkarlsso 0:8dbd6bd9167f 242 totalWriteHead(0),
mkarlsso 0:8dbd6bd9167f 243 totalReadHead(0),
mkarlsso 0:8dbd6bd9167f 244 bufferSize(bufferSizeIn),
mkarlsso 0:8dbd6bd9167f 245 unsentData(false),
mkarlsso 0:8dbd6bd9167f 246 serialPtr(NULL) {
mkarlsso 0:8dbd6bd9167f 247
mkarlsso 0:8dbd6bd9167f 248 outputBuffer = new char[bufferSize];
mkarlsso 0:8dbd6bd9167f 249
mkarlsso 0:8dbd6bd9167f 250 }
mkarlsso 0:8dbd6bd9167f 251
mkarlsso 0:8dbd6bd9167f 252 outputStream::~outputStream() {
mkarlsso 0:8dbd6bd9167f 253 delete[] outputBuffer;
mkarlsso 0:8dbd6bd9167f 254 }
mkarlsso 0:8dbd6bd9167f 255
mkarlsso 0:8dbd6bd9167f 256 void outputStream::setSerial(sSerialPort *s) {
mkarlsso 0:8dbd6bd9167f 257 serialPtr = s;
mkarlsso 0:8dbd6bd9167f 258 }
mkarlsso 0:8dbd6bd9167f 259
mkarlsso 0:8dbd6bd9167f 260 //used to immediately write to serial port
mkarlsso 0:8dbd6bd9167f 261 void outputStream::flush() {
mkarlsso 0:8dbd6bd9167f 262 if (serialPtr != NULL) {
mkarlsso 0:8dbd6bd9167f 263 while(unsentData) {
mkarlsso 0:8dbd6bd9167f 264 serialPtr->writeChar(getNextChar());
mkarlsso 0:8dbd6bd9167f 265 }
mkarlsso 0:8dbd6bd9167f 266 }
mkarlsso 0:8dbd6bd9167f 267 }
mkarlsso 0:8dbd6bd9167f 268
mkarlsso 0:8dbd6bd9167f 269 //adds text to the buffer
mkarlsso 3:d7b0a0890d96 270 void outputStream::send(const string &outputString) {
mkarlsso 0:8dbd6bd9167f 271 int strLen = outputString.size();
mkarlsso 0:8dbd6bd9167f 272
mkarlsso 0:8dbd6bd9167f 273 int total = 0;
mkarlsso 0:8dbd6bd9167f 274 int chunk = 0;
mkarlsso 0:8dbd6bd9167f 275 if (totalWriteHead+strLen > (totalReadHead + bufferSize)) {
mkarlsso 0:8dbd6bd9167f 276 //We don't have enough space in the buffer, so flush it
mkarlsso 0:8dbd6bd9167f 277 flush();
mkarlsso 0:8dbd6bd9167f 278 }
mkarlsso 0:8dbd6bd9167f 279 if (!(totalWriteHead+strLen > (totalReadHead + bufferSize))) {
mkarlsso 0:8dbd6bd9167f 280 while (strLen - total > 0) {
mkarlsso 0:8dbd6bd9167f 281 chunk = min((bufferSize - writeHead), strLen - total);
mkarlsso 0:8dbd6bd9167f 282 outputString.copy(outputBuffer + writeHead, chunk, total);
mkarlsso 0:8dbd6bd9167f 283 writeHead = (writeHead + chunk) % bufferSize;
mkarlsso 0:8dbd6bd9167f 284 totalWriteHead += chunk;
mkarlsso 0:8dbd6bd9167f 285 total += chunk;
mkarlsso 0:8dbd6bd9167f 286 }
mkarlsso 0:8dbd6bd9167f 287 if (total > 0) {
mkarlsso 0:8dbd6bd9167f 288 unsentData = true;
mkarlsso 0:8dbd6bd9167f 289 }
mkarlsso 0:8dbd6bd9167f 290 }
mkarlsso 0:8dbd6bd9167f 291 }
mkarlsso 0:8dbd6bd9167f 292
mkarlsso 3:d7b0a0890d96 293 //adds text to the buffer
mkarlsso 3:d7b0a0890d96 294 void outputStream::send(const char *s) {
mkarlsso 3:d7b0a0890d96 295 int strLen = strlen(s);
mkarlsso 3:d7b0a0890d96 296
mkarlsso 3:d7b0a0890d96 297 int total = 0;
mkarlsso 3:d7b0a0890d96 298 //int chunk = 0;
mkarlsso 3:d7b0a0890d96 299 if (totalWriteHead+strLen > (totalReadHead + bufferSize)) {
mkarlsso 3:d7b0a0890d96 300 //We don't have enough space in the buffer, so flush it
mkarlsso 3:d7b0a0890d96 301 flush();
mkarlsso 3:d7b0a0890d96 302 }
mkarlsso 3:d7b0a0890d96 303 if (!(totalWriteHead+strLen > (totalReadHead + bufferSize))) {
mkarlsso 3:d7b0a0890d96 304 while (strLen - total > 0) {
mkarlsso 3:d7b0a0890d96 305 strncpy(outputBuffer + writeHead, s+total,1);
mkarlsso 3:d7b0a0890d96 306 total++;
mkarlsso 3:d7b0a0890d96 307 writeHead = (writeHead + 1) % bufferSize;
mkarlsso 3:d7b0a0890d96 308 totalWriteHead += 1;
mkarlsso 3:d7b0a0890d96 309
mkarlsso 3:d7b0a0890d96 310 /*
mkarlsso 3:d7b0a0890d96 311 chunk = min((bufferSize - writeHead), strLen - total);
mkarlsso 3:d7b0a0890d96 312 strncpy(outputBuffer + writeHead,);
mkarlsso 3:d7b0a0890d96 313 outputString.copy(outputBuffer + writeHead, chunk, total);
mkarlsso 3:d7b0a0890d96 314 writeHead = (writeHead + chunk) % bufferSize;
mkarlsso 3:d7b0a0890d96 315 totalWriteHead += chunk;
mkarlsso 3:d7b0a0890d96 316 total += chunk;
mkarlsso 3:d7b0a0890d96 317 */
mkarlsso 3:d7b0a0890d96 318 }
mkarlsso 3:d7b0a0890d96 319 if (total > 0) {
mkarlsso 3:d7b0a0890d96 320 unsentData = true;
mkarlsso 3:d7b0a0890d96 321 }
mkarlsso 3:d7b0a0890d96 322 }
mkarlsso 3:d7b0a0890d96 323 }
mkarlsso 3:d7b0a0890d96 324
mkarlsso 0:8dbd6bd9167f 325 void outputStream::debug(const char *s) {
mkarlsso 0:8dbd6bd9167f 326 //send to serial immediately, but only if debugOut is true
mkarlsso 0:8dbd6bd9167f 327 if (debugOut) {
mkarlsso 0:8dbd6bd9167f 328 string tmpString = string(s);
mkarlsso 0:8dbd6bd9167f 329 send(tmpString);
mkarlsso 0:8dbd6bd9167f 330 flush();
mkarlsso 0:8dbd6bd9167f 331 }
mkarlsso 0:8dbd6bd9167f 332 }
mkarlsso 0:8dbd6bd9167f 333
mkarlsso 0:8dbd6bd9167f 334 //Overloaded << operator to for debugging output. This eliminates the
mkarlsso 0:8dbd6bd9167f 335 //need for printf statements
mkarlsso 3:d7b0a0890d96 336 outputStream& outputStream::operator<<(const string &outputString) {
mkarlsso 0:8dbd6bd9167f 337 send(outputString);
mkarlsso 3:d7b0a0890d96 338
mkarlsso 0:8dbd6bd9167f 339 return *this;
mkarlsso 0:8dbd6bd9167f 340 }
mkarlsso 0:8dbd6bd9167f 341
mkarlsso 0:8dbd6bd9167f 342 outputStream& outputStream::operator<<(const char* s) {
mkarlsso 3:d7b0a0890d96 343 //string tmpString = string(s);
mkarlsso 3:d7b0a0890d96 344 //send(tmpString);
mkarlsso 3:d7b0a0890d96 345 send(s);
mkarlsso 0:8dbd6bd9167f 346 return *this;
mkarlsso 0:8dbd6bd9167f 347 }
mkarlsso 0:8dbd6bd9167f 348
mkarlsso 0:8dbd6bd9167f 349 outputStream& outputStream::operator<<(int outputNum) {
mkarlsso 0:8dbd6bd9167f 350 ostringstream varConvert;
mkarlsso 0:8dbd6bd9167f 351 varConvert << outputNum;
mkarlsso 0:8dbd6bd9167f 352 send(varConvert.str());
mkarlsso 0:8dbd6bd9167f 353 return *this;
mkarlsso 0:8dbd6bd9167f 354 }
mkarlsso 0:8dbd6bd9167f 355
mkarlsso 0:8dbd6bd9167f 356 outputStream& outputStream::operator<<(uint32_t outputNum) {
mkarlsso 0:8dbd6bd9167f 357 ostringstream varConvert;
mkarlsso 0:8dbd6bd9167f 358 varConvert << outputNum;
mkarlsso 0:8dbd6bd9167f 359 send(varConvert.str());
mkarlsso 0:8dbd6bd9167f 360 return *this;
mkarlsso 0:8dbd6bd9167f 361 }
mkarlsso 0:8dbd6bd9167f 362 //the main loop gets one character per loop and write it to the serial port
mkarlsso 0:8dbd6bd9167f 363 char outputStream::getNextChar() {
mkarlsso 0:8dbd6bd9167f 364
mkarlsso 0:8dbd6bd9167f 365
mkarlsso 0:8dbd6bd9167f 366 if (totalReadHead < totalWriteHead) {
mkarlsso 0:8dbd6bd9167f 367 tmpOut = *(outputBuffer+readHead);
mkarlsso 0:8dbd6bd9167f 368 readHead = (readHead+1) % bufferSize;
mkarlsso 0:8dbd6bd9167f 369 totalReadHead++;
mkarlsso 0:8dbd6bd9167f 370 if (totalReadHead >= totalWriteHead) {
mkarlsso 0:8dbd6bd9167f 371 unsentData = false;
mkarlsso 0:8dbd6bd9167f 372 }
mkarlsso 0:8dbd6bd9167f 373 }
mkarlsso 0:8dbd6bd9167f 374 return tmpOut;
mkarlsso 0:8dbd6bd9167f 375
mkarlsso 0:8dbd6bd9167f 376 }