![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
fork of StateScript
Fork of stateScript_v2 by
mbedInterface/mbedInterface.cpp@10:f65649c13b5b, 2017-04-28 (annotated)
- 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?
User | Revision | Line number | New contents of line |
---|---|---|---|
mkarlsso | 0:8dbd6bd9167f | 1 | #include "mbedInterface.h" |
mkarlsso | 0:8dbd6bd9167f | 2 | #include "mbed.h" |
mkarlsso | 0:8dbd6bd9167f | 3 | |
mkarlsso | 0:8dbd6bd9167f | 4 | //-------------------------------------------------------------- |
mkarlsso | 0:8dbd6bd9167f | 5 | //-------------------------------------------------------------- |
mkarlsso | 0:8dbd6bd9167f | 6 | //This section is required for all custom harware interfaces |
mkarlsso | 0:8dbd6bd9167f | 7 | |
mkarlsso | 0:8dbd6bd9167f | 8 | //globals defined in hardwareInterface.cpp |
mkarlsso | 0:8dbd6bd9167f | 9 | extern uint32_t timeKeeper; //the master clock |
mkarlsso | 3:d7b0a0890d96 | 10 | uint32_t uSec_SinceLastClockInc = 0; |
mkarlsso | 3:d7b0a0890d96 | 11 | uint32_t uSec_SinceLastReset = 0; |
mkarlsso | 3:d7b0a0890d96 | 12 | |
mkarlsso | 0:8dbd6bd9167f | 13 | extern bool resetTimer; |
mkarlsso | 0:8dbd6bd9167f | 14 | extern bool clockSlave; |
mkarlsso | 0:8dbd6bd9167f | 15 | extern bool changeToSlave; |
mkarlsso | 0:8dbd6bd9167f | 16 | extern bool changeToStandAlone; |
mkarlsso | 0:8dbd6bd9167f | 17 | extern outputStream textDisplay; |
mkarlsso | 0:8dbd6bd9167f | 18 | |
mkarlsso | 4:abee20c0bf2a | 19 | int externalIncrementMod = 1; |
mkarlsso | 0:8dbd6bd9167f | 20 | int externalIncrementCounter = 0; |
mkarlsso | 0:8dbd6bd9167f | 21 | |
mkarlsso | 0:8dbd6bd9167f | 22 | |
mkarlsso | 0:8dbd6bd9167f | 23 | #ifdef MBED_RF |
mkarlsso | 3:d7b0a0890d96 | 24 | //We are listening to an RF signal for hardware syncing---------------------------------------- |
mkarlsso | 0:8dbd6bd9167f | 25 | //Uses DB9->RJ45 connector to map the following channels: |
mkarlsso | 0:8dbd6bd9167f | 26 | //1: P28 Clock Signal In |
mkarlsso | 0:8dbd6bd9167f | 27 | //2: P27 Data Signal In |
mkarlsso | 0:8dbd6bd9167f | 28 | //3: P20 FiberLED Out Signal |
mkarlsso | 0:8dbd6bd9167f | 29 | //4: 5V |
mkarlsso | 0:8dbd6bd9167f | 30 | //5: GND |
mkarlsso | 0:8dbd6bd9167f | 31 | //6: P6 NC |
mkarlsso | 0:8dbd6bd9167f | 32 | //7: P7 NC |
mkarlsso | 0:8dbd6bd9167f | 33 | //8: P8 NC |
mkarlsso | 0:8dbd6bd9167f | 34 | |
mkarlsso | 0:8dbd6bd9167f | 35 | DigitalOut mainLED(LED1); |
mkarlsso | 0:8dbd6bd9167f | 36 | DigitalOut secondaryLED(LED2); |
mkarlsso | 0:8dbd6bd9167f | 37 | |
mkarlsso | 0:8dbd6bd9167f | 38 | bool lightOn = false; |
mkarlsso | 0:8dbd6bd9167f | 39 | bool lightOn2 = false; |
mkarlsso | 0:8dbd6bd9167f | 40 | int pulseCounter = 0; |
mkarlsso | 0:8dbd6bd9167f | 41 | uint32_t lastPulse = 0; |
mkarlsso | 0:8dbd6bd9167f | 42 | uint32_t currentRFTime = 0; |
mkarlsso | 0:8dbd6bd9167f | 43 | uint32_t lastRFTime = 0; |
mkarlsso | 0:8dbd6bd9167f | 44 | uint32_t timeKeeperAtCurrentRFTime = 0; |
mkarlsso | 0:8dbd6bd9167f | 45 | uint32_t timeKeeperAtLastRFTime = 0; |
mkarlsso | 0:8dbd6bd9167f | 46 | int RFSyncCounter = 0; |
mkarlsso | 0:8dbd6bd9167f | 47 | bool RFSyncReadable = false; |
mkarlsso | 0:8dbd6bd9167f | 48 | bool RFSyncWritable = true; |
mkarlsso | 0:8dbd6bd9167f | 49 | |
alustig3 | 10:f65649c13b5b | 50 | #ifdef LPC1768 |
mkarlsso | 0:8dbd6bd9167f | 51 | //Recieve clock signal from RF system |
mkarlsso | 0:8dbd6bd9167f | 52 | InterruptIn RFClock(p28); |
mkarlsso | 0:8dbd6bd9167f | 53 | DigitalIn RFData(p27); |
alustig3 | 10:f65649c13b5b | 54 | #endif |
alustig3 | 10:f65649c13b5b | 55 | |
alustig3 | 10:f65649c13b5b | 56 | #ifdef K64 |
alustig3 | 10:f65649c13b5b | 57 | InterruptIn RFClock(PTA1); |
alustig3 | 10:f65649c13b5b | 58 | DigitalIn RFData(PTB9); |
alustig3 | 10:f65649c13b5b | 59 | #endif |
mkarlsso | 0:8dbd6bd9167f | 60 | |
mkarlsso | 0:8dbd6bd9167f | 61 | |
mkarlsso | 0:8dbd6bd9167f | 62 | void callback_RFClock(void) { |
mkarlsso | 0:8dbd6bd9167f | 63 | |
mkarlsso | 0:8dbd6bd9167f | 64 | //if this amount of time has passed since the last pulse, we have a new timestamp |
mkarlsso | 0:8dbd6bd9167f | 65 | if ((timeKeeper-lastPulse) > 4) { |
mkarlsso | 0:8dbd6bd9167f | 66 | |
mkarlsso | 0:8dbd6bd9167f | 67 | //make sure the previous timestamp was 32 pulses |
mkarlsso | 0:8dbd6bd9167f | 68 | //if so, update lastRFTime |
mkarlsso | 0:8dbd6bd9167f | 69 | //we only process every 100th stamp (once every 10 seconds with 10 Hz timestamps) |
mkarlsso | 0:8dbd6bd9167f | 70 | if ((pulseCounter == 31) && (RFSyncCounter == 99)){ |
mkarlsso | 0:8dbd6bd9167f | 71 | if (RFSyncWritable) { |
mkarlsso | 0:8dbd6bd9167f | 72 | lastRFTime = currentRFTime; |
mkarlsso | 0:8dbd6bd9167f | 73 | timeKeeperAtLastRFTime = timeKeeperAtCurrentRFTime; |
mkarlsso | 0:8dbd6bd9167f | 74 | RFSyncReadable = true; |
mkarlsso | 0:8dbd6bd9167f | 75 | RFSyncWritable = false; |
mkarlsso | 0:8dbd6bd9167f | 76 | } |
mkarlsso | 0:8dbd6bd9167f | 77 | } |
mkarlsso | 0:8dbd6bd9167f | 78 | |
mkarlsso | 0:8dbd6bd9167f | 79 | pulseCounter = 0; |
mkarlsso | 0:8dbd6bd9167f | 80 | currentRFTime = 0; |
mkarlsso | 0:8dbd6bd9167f | 81 | timeKeeperAtCurrentRFTime = timeKeeper; |
mkarlsso | 0:8dbd6bd9167f | 82 | RFSyncCounter = (RFSyncCounter+1)%100; |
mkarlsso | 0:8dbd6bd9167f | 83 | |
mkarlsso | 0:8dbd6bd9167f | 84 | |
mkarlsso | 0:8dbd6bd9167f | 85 | if (lightOn) { |
mkarlsso | 0:8dbd6bd9167f | 86 | mainLED = 0; |
mkarlsso | 0:8dbd6bd9167f | 87 | lightOn = false; |
mkarlsso | 0:8dbd6bd9167f | 88 | } else { |
mkarlsso | 0:8dbd6bd9167f | 89 | mainLED = 1; |
mkarlsso | 0:8dbd6bd9167f | 90 | lightOn = true; |
mkarlsso | 0:8dbd6bd9167f | 91 | } |
mkarlsso | 0:8dbd6bd9167f | 92 | } else { |
mkarlsso | 0:8dbd6bd9167f | 93 | if (pulseCounter < 32) { |
mkarlsso | 0:8dbd6bd9167f | 94 | currentRFTime = (currentRFTime | ( RFData.read() << pulseCounter)); |
mkarlsso | 0:8dbd6bd9167f | 95 | pulseCounter++; |
mkarlsso | 0:8dbd6bd9167f | 96 | } |
mkarlsso | 0:8dbd6bd9167f | 97 | } |
mkarlsso | 0:8dbd6bd9167f | 98 | lastPulse = timeKeeper; |
mkarlsso | 0:8dbd6bd9167f | 99 | } |
mkarlsso | 0:8dbd6bd9167f | 100 | |
mkarlsso | 0:8dbd6bd9167f | 101 | //------------------------------------------------------------ |
mkarlsso | 0:8dbd6bd9167f | 102 | #endif |
mkarlsso | 0:8dbd6bd9167f | 103 | |
mkarlsso | 3:d7b0a0890d96 | 104 | void externalClockIncDown() { |
mkarlsso | 0:8dbd6bd9167f | 105 | |
mkarlsso | 3:d7b0a0890d96 | 106 | //The external clock increment signal pulse has come back down. If the pulse was long |
mkarlsso | 3:d7b0a0890d96 | 107 | //enough, then we condsider it a valid pulse (the pulses should be 0.5 ms long) |
mkarlsso | 3:d7b0a0890d96 | 108 | if ((clockSlave)&&(uSec_SinceLastClockInc >= 300)) { |
mkarlsso | 3:d7b0a0890d96 | 109 | uSec_SinceLastClockInc = 0; |
mkarlsso | 3:d7b0a0890d96 | 110 | timeKeeper++; |
mkarlsso | 3:d7b0a0890d96 | 111 | |
mkarlsso | 3:d7b0a0890d96 | 112 | //Clock resets happen upon update so we dont get a partial first ms |
mkarlsso | 3:d7b0a0890d96 | 113 | if (resetTimer) { |
mkarlsso | 3:d7b0a0890d96 | 114 | uSec_SinceLastReset = 0; |
mkarlsso | 3:d7b0a0890d96 | 115 | timeKeeper = 0; |
mkarlsso | 3:d7b0a0890d96 | 116 | resetTimer = false; |
mkarlsso | 3:d7b0a0890d96 | 117 | } |
mkarlsso | 3:d7b0a0890d96 | 118 | } |
mkarlsso | 3:d7b0a0890d96 | 119 | |
mkarlsso | 3:d7b0a0890d96 | 120 | } |
mkarlsso | 3:d7b0a0890d96 | 121 | |
mkarlsso | 3:d7b0a0890d96 | 122 | void externalResetDown() { |
mkarlsso | 3:d7b0a0890d96 | 123 | |
mkarlsso | 3:d7b0a0890d96 | 124 | //The external clock reset signal pulse has come back down. If the pulse was long |
mkarlsso | 3:d7b0a0890d96 | 125 | //enough, then we condsider it a valid pulse (the pulses should be 1 ms long) |
mkarlsso | 4:abee20c0bf2a | 126 | /* |
mkarlsso | 4:abee20c0bf2a | 127 | textDisplay << uSec_SinceLastReset; |
mkarlsso | 3:d7b0a0890d96 | 128 | if ((clockSlave)&&(uSec_SinceLastReset >= 700)) { |
mkarlsso | 3:d7b0a0890d96 | 129 | uSec_SinceLastReset = 0; |
mkarlsso | 3:d7b0a0890d96 | 130 | timeKeeper = 1; //It has been 1ms since the reset pulse went up |
mkarlsso | 3:d7b0a0890d96 | 131 | textDisplay << timeKeeper << " Clock reset\r\n"; |
mkarlsso | 4:abee20c0bf2a | 132 | }*/ |
mkarlsso | 3:d7b0a0890d96 | 133 | } |
mkarlsso | 0:8dbd6bd9167f | 134 | |
mkarlsso | 0:8dbd6bd9167f | 135 | //------------------------------------------------------------------------ |
mkarlsso | 0:8dbd6bd9167f | 136 | //------------------------------------------------------------------------ |
mkarlsso | 0:8dbd6bd9167f | 137 | |
mkarlsso | 0:8dbd6bd9167f | 138 | //MBED-specific stuff |
mkarlsso | 0:8dbd6bd9167f | 139 | //--------------------------------------------------------------------- |
mkarlsso | 0:8dbd6bd9167f | 140 | |
mkarlsso | 0:8dbd6bd9167f | 141 | //translate pin numbers to hardware pins |
mkarlsso | 0:8dbd6bd9167f | 142 | |
alustig3 | 10:f65649c13b5b | 143 | #ifdef LPC1768 |
alustig3 | 10:f65649c13b5b | 144 | PinName dInPins[NUMDIGINPORTS] = {p5,p14,p16,p17,p22,p24,p26,p30}; |
mkarlsso | 7:5fe7329751d4 | 145 | PinName dOutPins[NUMDIGOUTPORTS] = {p7,p15,p13,p11,p29,p25,p23,p21}; //With analog pins |
mkarlsso | 7:5fe7329751d4 | 146 | PinName aInPins[NUMANINPORTS] = {p20}; |
mkarlsso | 7:5fe7329751d4 | 147 | PinName aOutPins[NUMANOUTPORTS] = {p18}; |
alustig3 | 10:f65649c13b5b | 148 | // SOMO II sound module http://www.4dsystems.com.au/product/SOMO_II/ |
alustig3 | 10:f65649c13b5b | 149 | // Datasheet http://www.4dsystems.com.au/productpages/SOMO-II/downloads/SOMO-II_datasheet_R_1_2.pdf |
alustig3 | 10:f65649c13b5b | 150 | SOMO audio(p9,p10); //(TX,RX) |
alustig3 | 10:f65649c13b5b | 151 | #endif |
alustig3 | 10:f65649c13b5b | 152 | |
alustig3 | 10:f65649c13b5b | 153 | #ifdef K64 |
alustig3 | 10:f65649c13b5b | 154 | PinName dInPins[NUMDIGINPORTS] = {PTB2, PTB9, PTC10, PTA1, PTD1}; |
alustig3 | 10:f65649c13b5b | 155 | PinName dOutPins[NUMDIGOUTPORTS] = {PTB11, PTC14, PTC11, PTC15, PTE24, PTD4, PTC9, PTB18, PTD0}; |
alustig3 | 10:f65649c13b5b | 156 | PinName aInPins[NUMANINPORTS] = {}; |
alustig3 | 10:f65649c13b5b | 157 | PinName aOutPins[NUMANOUTPORTS] = {}; |
alustig3 | 10:f65649c13b5b | 158 | |
alustig3 | 10:f65649c13b5b | 159 | SOMO audio(PTC17,PTC16); //(TX,RX,Reset) |
alustig3 | 10:f65649c13b5b | 160 | #endif |
mkarlsso | 0:8dbd6bd9167f | 161 | |
mkarlsso | 3:d7b0a0890d96 | 162 | |
alustig3 | 10:f65649c13b5b | 163 | #ifdef LPC1768 |
mkarlsso | 0:8dbd6bd9167f | 164 | //This is the callback for the MBED timer |
mkarlsso | 0:8dbd6bd9167f | 165 | extern "C" void TIMER0_IRQHandler (void) { |
alustig3 | 10:f65649c13b5b | 166 | //The function is called every 1 ms |
alustig3 | 10:f65649c13b5b | 167 | if((LPC_TIM0->IR & 0x01) == 0x01) { // if MR0 interrupt, proceed |
alustig3 | 10:f65649c13b5b | 168 | LPC_TIM0->IR |= 1 << 0; // Clear MR0 interrupt flag |
alustig3 | 10:f65649c13b5b | 169 | timeKeeper++; |
mkarlsso | 4:abee20c0bf2a | 170 | |
alustig3 | 10:f65649c13b5b | 171 | if (resetTimer) { |
alustig3 | 10:f65649c13b5b | 172 | timeKeeper = 0; |
alustig3 | 10:f65649c13b5b | 173 | resetTimer = false; |
mkarlsso | 0:8dbd6bd9167f | 174 | } |
alustig3 | 10:f65649c13b5b | 175 | } |
mkarlsso | 0:8dbd6bd9167f | 176 | } |
mkarlsso | 0:8dbd6bd9167f | 177 | //----------------------------------------------------------------------- |
alustig3 | 10:f65649c13b5b | 178 | #endif |
mkarlsso | 0:8dbd6bd9167f | 179 | |
mkarlsso | 0:8dbd6bd9167f | 180 | |
mkarlsso | 0:8dbd6bd9167f | 181 | MBEDSystem::MBEDSystem(): |
alustig3 | 10:f65649c13b5b | 182 | #ifdef LPC1768 |
mkarlsso | 0:8dbd6bd9167f | 183 | clockResetInt(p5), |
mkarlsso | 0:8dbd6bd9167f | 184 | clockExternalIncrement(p8) { |
alustig3 | 10:f65649c13b5b | 185 | clockResetInt.rise(this, &MBEDSystem::externalClockReset); |
mkarlsso | 0:8dbd6bd9167f | 186 | |
alustig3 | 10:f65649c13b5b | 187 | #endif |
alustig3 | 10:f65649c13b5b | 188 | #ifdef K64 |
alustig3 | 10:f65649c13b5b | 189 | clockResetInt(PTD4), |
alustig3 | 10:f65649c13b5b | 190 | clockExternalIncrement(PTD6) { |
alustig3 | 10:f65649c13b5b | 191 | clockResetInt.rise(callback(this, &MBEDSystem::externalClockReset)); |
alustig3 | 10:f65649c13b5b | 192 | #endif |
alustig3 | 10:f65649c13b5b | 193 | |
mkarlsso | 3:d7b0a0890d96 | 194 | clockResetInt.fall(&externalResetDown); |
mkarlsso | 0:8dbd6bd9167f | 195 | clockResetInt.mode(PullDown); |
mkarlsso | 0:8dbd6bd9167f | 196 | |
mkarlsso | 0:8dbd6bd9167f | 197 | clockExternalIncrement.mode(PullDown); |
mkarlsso | 0:8dbd6bd9167f | 198 | |
mkarlsso | 0:8dbd6bd9167f | 199 | #ifdef MBED_RF |
mkarlsso | 0:8dbd6bd9167f | 200 | //Karpova version------------- |
mkarlsso | 0:8dbd6bd9167f | 201 | //Set up callbacks for RF clock signal |
mkarlsso | 0:8dbd6bd9167f | 202 | RFClock.rise(&callback_RFClock); |
mkarlsso | 0:8dbd6bd9167f | 203 | RFClock.mode(PullDown); |
mkarlsso | 0:8dbd6bd9167f | 204 | #endif |
mkarlsso | 0:8dbd6bd9167f | 205 | |
mkarlsso | 0:8dbd6bd9167f | 206 | //------------------------------- |
mkarlsso | 0:8dbd6bd9167f | 207 | |
mkarlsso | 7:5fe7329751d4 | 208 | for (int i=0; i < NUMDIGINPORTS; i++) { |
mkarlsso | 0:8dbd6bd9167f | 209 | dIn[i].init(i); |
mkarlsso | 7:5fe7329751d4 | 210 | } |
mkarlsso | 7:5fe7329751d4 | 211 | for (int i=0; i < NUMDIGOUTPORTS; i++) { |
mkarlsso | 0:8dbd6bd9167f | 212 | dOut[i].init(i); |
mkarlsso | 0:8dbd6bd9167f | 213 | } |
mkarlsso | 7:5fe7329751d4 | 214 | for (int i=0; i < NUMANINPORTS; i++) { |
mkarlsso | 7:5fe7329751d4 | 215 | aIn[i].init(i); |
mkarlsso | 7:5fe7329751d4 | 216 | } |
mkarlsso | 7:5fe7329751d4 | 217 | for (int i=0; i < NUMANOUTPORTS; i++) { |
mkarlsso | 7:5fe7329751d4 | 218 | aOut[i].init(i); |
mkarlsso | 7:5fe7329751d4 | 219 | } |
mkarlsso | 7:5fe7329751d4 | 220 | |
mkarlsso | 0:8dbd6bd9167f | 221 | |
mkarlsso | 0:8dbd6bd9167f | 222 | |
alustig3 | 10:f65649c13b5b | 223 | audio.reset(); |
mkarlsso | 0:8dbd6bd9167f | 224 | |
mkarlsso | 0:8dbd6bd9167f | 225 | } |
mkarlsso | 0:8dbd6bd9167f | 226 | |
mkarlsso | 0:8dbd6bd9167f | 227 | void MBEDSystem::timerinit() { |
alustig3 | 10:f65649c13b5b | 228 | #ifdef LPC1768 |
mkarlsso | 0:8dbd6bd9167f | 229 | //intiatiation of timer (specific to the LPC17xx chip). This is used in |
mkarlsso | 0:8dbd6bd9167f | 230 | //standalone mode to increment the clock every ms. |
mkarlsso | 0:8dbd6bd9167f | 231 | //---------------------------------------------------- |
mkarlsso | 0:8dbd6bd9167f | 232 | //LPC_SC->PCLKSEL1 &= (3 << 12); //mask |
mkarlsso | 0:8dbd6bd9167f | 233 | //LPC_SC->PCLKSEL1 |= (1 << 12); //sets it to 1*SystemCoreClock - table 42 (page 57 in user manual) |
mkarlsso | 0:8dbd6bd9167f | 234 | //LPC_SC->PCLKSEL0 &= (3 << 3); //mask |
mkarlsso | 0:8dbd6bd9167f | 235 | //LPC_SC->PCLKSEL0 |= (1 << 3); //sets it to 1*SystemCoreClock - table 42 (page 57 in user manual) |
alustig3 | 10:f65649c13b5b | 236 | LPC_SC->PCONP |=1<1; //timer0 power on |
mkarlsso | 4:abee20c0bf2a | 237 | |
mkarlsso | 4:abee20c0bf2a | 238 | |
mkarlsso | 0:8dbd6bd9167f | 239 | LPC_TIM0->MR0 = 23980; //1 msec |
mkarlsso | 3:d7b0a0890d96 | 240 | |
mkarlsso | 4:abee20c0bf2a | 241 | |
mkarlsso | 0:8dbd6bd9167f | 242 | //LPC_TIM0->PR = (SystemCoreClock / 1000000); //microsecond steps |
mkarlsso | 0:8dbd6bd9167f | 243 | //LPC_TIM0->MR0 = 1000; //100 msec |
mkarlsso | 0:8dbd6bd9167f | 244 | //LPC_TIM0->MR0 = (SystemCoreClock / 1000000); //microsecond steps |
mkarlsso | 0:8dbd6bd9167f | 245 | LPC_TIM0->MCR = 3; //interrupt and reset control |
mkarlsso | 0:8dbd6bd9167f | 246 | //3 = Interrupt & reset timer0 on match |
mkarlsso | 0:8dbd6bd9167f | 247 | //1 = Interrupt only, no reset of timer0 |
mkarlsso | 0:8dbd6bd9167f | 248 | NVIC_EnableIRQ(TIMER0_IRQn); //enable timer0 interrupt |
mkarlsso | 0:8dbd6bd9167f | 249 | LPC_TIM0->TCR = 1; //enable Timer0 |
mkarlsso | 0:8dbd6bd9167f | 250 | //-------------------------------------------------------------- |
alustig3 | 10:f65649c13b5b | 251 | #endif |
mkarlsso | 0:8dbd6bd9167f | 252 | } |
mkarlsso | 0:8dbd6bd9167f | 253 | |
mkarlsso | 3:d7b0a0890d96 | 254 | void MBEDSystem::pauseInterrupts() { |
mkarlsso | 3:d7b0a0890d96 | 255 | __disable_irq(); |
mkarlsso | 3:d7b0a0890d96 | 256 | } |
mkarlsso | 3:d7b0a0890d96 | 257 | |
mkarlsso | 3:d7b0a0890d96 | 258 | void MBEDSystem::resumeInterrupts() { |
mkarlsso | 3:d7b0a0890d96 | 259 | __enable_irq(); |
mkarlsso | 3:d7b0a0890d96 | 260 | } |
mkarlsso | 3:d7b0a0890d96 | 261 | |
mkarlsso | 0:8dbd6bd9167f | 262 | void MBEDSystem::mainLoopToDo() { |
mkarlsso | 0:8dbd6bd9167f | 263 | #ifdef MBED_RF |
mkarlsso | 0:8dbd6bd9167f | 264 | //Karpova version-------------------------- |
mkarlsso | 0:8dbd6bd9167f | 265 | //Karpova lab RF addition. Print out time sync. |
mkarlsso | 0:8dbd6bd9167f | 266 | if (RFSyncReadable) { |
mkarlsso | 0:8dbd6bd9167f | 267 | /* |
mkarlsso | 0:8dbd6bd9167f | 268 | ostringstream RFTimeConvert; |
mkarlsso | 0:8dbd6bd9167f | 269 | RFTimeConvert << timeKeeperAtLastRFTime << " " << "RFsync " << lastRFTime << " "; //broadcast the earliest timestamp when a change occured |
mkarlsso | 0:8dbd6bd9167f | 270 | |
mkarlsso | 0:8dbd6bd9167f | 271 | textDisplay.send(RFTimeConvert.str() + "\r\n"); |
mkarlsso | 0:8dbd6bd9167f | 272 | RFTimeConvert.clear(); |
mkarlsso | 0:8dbd6bd9167f | 273 | RFTimeConvert.seekp(0); |
mkarlsso | 0:8dbd6bd9167f | 274 | */ |
mkarlsso | 0:8dbd6bd9167f | 275 | |
mkarlsso | 0:8dbd6bd9167f | 276 | textDisplay << timeKeeperAtLastRFTime << " RFsync " << lastRFTime << "\r\n"; |
mkarlsso | 0:8dbd6bd9167f | 277 | |
mkarlsso | 0:8dbd6bd9167f | 278 | RFSyncReadable = false; |
mkarlsso | 0:8dbd6bd9167f | 279 | RFSyncWritable = true; |
mkarlsso | 0:8dbd6bd9167f | 280 | } |
mkarlsso | 0:8dbd6bd9167f | 281 | //------------------------------------------------------------ |
mkarlsso | 0:8dbd6bd9167f | 282 | #endif |
mkarlsso | 0:8dbd6bd9167f | 283 | } |
mkarlsso | 0:8dbd6bd9167f | 284 | |
mkarlsso | 0:8dbd6bd9167f | 285 | sDigitalOut* MBEDSystem::getDigitalOutPtr(int portNum){ |
mkarlsso | 7:5fe7329751d4 | 286 | if (portNum < NUMDIGOUTPORTS) { |
mkarlsso | 0:8dbd6bd9167f | 287 | return &dOut[portNum]; |
mkarlsso | 0:8dbd6bd9167f | 288 | } else { |
mkarlsso | 0:8dbd6bd9167f | 289 | return NULL; |
mkarlsso | 0:8dbd6bd9167f | 290 | } |
mkarlsso | 0:8dbd6bd9167f | 291 | } |
mkarlsso | 0:8dbd6bd9167f | 292 | |
mkarlsso | 0:8dbd6bd9167f | 293 | sDigitalIn* MBEDSystem::getDigitalInPtr(int portNum) { |
mkarlsso | 7:5fe7329751d4 | 294 | if (portNum < NUMDIGINPORTS) { |
mkarlsso | 0:8dbd6bd9167f | 295 | return &dIn[portNum]; |
mkarlsso | 0:8dbd6bd9167f | 296 | } else { |
mkarlsso | 0:8dbd6bd9167f | 297 | return NULL; |
mkarlsso | 0:8dbd6bd9167f | 298 | } |
mkarlsso | 0:8dbd6bd9167f | 299 | } |
mkarlsso | 0:8dbd6bd9167f | 300 | |
mkarlsso | 7:5fe7329751d4 | 301 | sAnalogOut* MBEDSystem::getAnalogOutPtr(int portNum){ |
mkarlsso | 7:5fe7329751d4 | 302 | if (portNum < NUMANOUTPORTS) { |
mkarlsso | 7:5fe7329751d4 | 303 | return &aOut[portNum]; |
mkarlsso | 7:5fe7329751d4 | 304 | } else { |
mkarlsso | 7:5fe7329751d4 | 305 | return NULL; |
mkarlsso | 7:5fe7329751d4 | 306 | } |
mkarlsso | 7:5fe7329751d4 | 307 | } |
mkarlsso | 7:5fe7329751d4 | 308 | |
mkarlsso | 7:5fe7329751d4 | 309 | sAnalogIn* MBEDSystem::getAnalogInPtr(int portNum) { |
mkarlsso | 7:5fe7329751d4 | 310 | if (portNum < NUMANINPORTS) { |
mkarlsso | 7:5fe7329751d4 | 311 | return &aIn[portNum]; |
mkarlsso | 7:5fe7329751d4 | 312 | } else { |
mkarlsso | 7:5fe7329751d4 | 313 | return NULL; |
mkarlsso | 7:5fe7329751d4 | 314 | } |
mkarlsso | 7:5fe7329751d4 | 315 | } |
mkarlsso | 7:5fe7329751d4 | 316 | |
mkarlsso | 0:8dbd6bd9167f | 317 | sSound* MBEDSystem::createNewSoundAction() { |
mkarlsso | 0:8dbd6bd9167f | 318 | MBEDSound *tmpSound = new MBEDSound(); |
mkarlsso | 0:8dbd6bd9167f | 319 | return tmpSound; |
mkarlsso | 0:8dbd6bd9167f | 320 | } |
mkarlsso | 0:8dbd6bd9167f | 321 | |
mkarlsso | 0:8dbd6bd9167f | 322 | |
mkarlsso | 0:8dbd6bd9167f | 323 | void MBEDSystem::externalClockReset() { |
mkarlsso | 0:8dbd6bd9167f | 324 | |
mkarlsso | 3:d7b0a0890d96 | 325 | //The pulse has gone high. When the pulse comes down we will check to see if it was long enough to be valid. |
mkarlsso | 3:d7b0a0890d96 | 326 | uSec_SinceLastReset = 0; |
mkarlsso | 3:d7b0a0890d96 | 327 | |
mkarlsso | 3:d7b0a0890d96 | 328 | |
mkarlsso | 4:abee20c0bf2a | 329 | |
mkarlsso | 0:8dbd6bd9167f | 330 | if (clockSlave) { |
alustig3 | 10:f65649c13b5b | 331 | #ifdef LPC1768 |
mkarlsso | 0:8dbd6bd9167f | 332 | LPC_TIM0->TCR = 0x02; // reset timer |
alustig3 | 10:f65649c13b5b | 333 | #endif |
mkarlsso | 0:8dbd6bd9167f | 334 | externalIncrementCounter = 0; |
mkarlsso | 4:abee20c0bf2a | 335 | |
mkarlsso | 0:8dbd6bd9167f | 336 | immediateClockReset(); |
mkarlsso | 4:abee20c0bf2a | 337 | } |
mkarlsso | 0:8dbd6bd9167f | 338 | |
mkarlsso | 0:8dbd6bd9167f | 339 | } |
mkarlsso | 0:8dbd6bd9167f | 340 | |
mkarlsso | 0:8dbd6bd9167f | 341 | void MBEDSystem::setStandAloneClock() { |
mkarlsso | 3:d7b0a0890d96 | 342 | clockSlave = false; |
alustig3 | 10:f65649c13b5b | 343 | #ifdef LPC1768 |
mkarlsso | 3:d7b0a0890d96 | 344 | NVIC_DisableIRQ(TIMER0_IRQn); // Disable the interrupt |
alustig3 | 10:f65649c13b5b | 345 | #endif |
mkarlsso | 3:d7b0a0890d96 | 346 | timerinit(); //set up and enable interrupt |
mkarlsso | 0:8dbd6bd9167f | 347 | clockExternalIncrement.rise(NULL); //remove the callback to the external interrupt |
mkarlsso | 3:d7b0a0890d96 | 348 | //clockExternalIncrement.fall(NULL); |
mkarlsso | 0:8dbd6bd9167f | 349 | changeToSlave = false; |
mkarlsso | 0:8dbd6bd9167f | 350 | changeToStandAlone = false; |
mkarlsso | 0:8dbd6bd9167f | 351 | } |
mkarlsso | 0:8dbd6bd9167f | 352 | |
mkarlsso | 0:8dbd6bd9167f | 353 | void MBEDSystem::setSlaveClock() { |
mkarlsso | 3:d7b0a0890d96 | 354 | clockSlave = true; |
alustig3 | 10:f65649c13b5b | 355 | #ifdef LPC1768 |
mkarlsso | 0:8dbd6bd9167f | 356 | NVIC_DisableIRQ(TIMER0_IRQn); // Disable the interrupt |
mkarlsso | 0:8dbd6bd9167f | 357 | clockExternalIncrement.rise(this, &MBEDSystem::incrementClock); |
alustig3 | 10:f65649c13b5b | 358 | #endif |
alustig3 | 10:f65649c13b5b | 359 | #ifdef K64 |
alustig3 | 10:f65649c13b5b | 360 | clockExternalIncrement.rise(callback(this, &MBEDSystem::incrementClock)); |
alustig3 | 10:f65649c13b5b | 361 | #endif |
alustig3 | 10:f65649c13b5b | 362 | |
mkarlsso | 0:8dbd6bd9167f | 363 | clockSlave = true; |
mkarlsso | 0:8dbd6bd9167f | 364 | changeToSlave = false; |
mkarlsso | 0:8dbd6bd9167f | 365 | changeToStandAlone = false; |
mkarlsso | 0:8dbd6bd9167f | 366 | } |
mkarlsso | 0:8dbd6bd9167f | 367 | |
mkarlsso | 0:8dbd6bd9167f | 368 | void MBEDSystem::incrementClock() { |
mkarlsso | 0:8dbd6bd9167f | 369 | |
mkarlsso | 0:8dbd6bd9167f | 370 | if (clockSlave) { |
mkarlsso | 3:d7b0a0890d96 | 371 | //The pulse has gone high. When the pulse comes down we will check to see if it was long enough to be valid. |
mkarlsso | 3:d7b0a0890d96 | 372 | //uSec_SinceLastClockInc = 0; |
mkarlsso | 3:d7b0a0890d96 | 373 | |
mkarlsso | 3:d7b0a0890d96 | 374 | |
mkarlsso | 3:d7b0a0890d96 | 375 | //The clock is incremented |
mkarlsso | 3:d7b0a0890d96 | 376 | |
mkarlsso | 0:8dbd6bd9167f | 377 | externalIncrementCounter = (externalIncrementCounter+1) % externalIncrementMod; |
mkarlsso | 0:8dbd6bd9167f | 378 | if (externalIncrementCounter==0) { |
mkarlsso | 0:8dbd6bd9167f | 379 | timeKeeper++; |
mkarlsso | 0:8dbd6bd9167f | 380 | } |
mkarlsso | 0:8dbd6bd9167f | 381 | |
mkarlsso | 0:8dbd6bd9167f | 382 | } else { |
mkarlsso | 0:8dbd6bd9167f | 383 | timeKeeper++; |
mkarlsso | 0:8dbd6bd9167f | 384 | } |
mkarlsso | 0:8dbd6bd9167f | 385 | //Clock resets happen upon update so we dont get a partial first ms |
mkarlsso | 3:d7b0a0890d96 | 386 | /* |
mkarlsso | 0:8dbd6bd9167f | 387 | if (resetTimer) { |
mkarlsso | 3:d7b0a0890d96 | 388 | uSec_SinceLastReset = 0; |
mkarlsso | 0:8dbd6bd9167f | 389 | timeKeeper = 0; |
mkarlsso | 0:8dbd6bd9167f | 390 | resetTimer = false; |
mkarlsso | 3:d7b0a0890d96 | 391 | }*/ |
mkarlsso | 0:8dbd6bd9167f | 392 | } |
mkarlsso | 0:8dbd6bd9167f | 393 | |
mkarlsso | 0:8dbd6bd9167f | 394 | //----------------------------------------------------- |
mkarlsso | 0:8dbd6bd9167f | 395 | |
mkarlsso | 0:8dbd6bd9167f | 396 | MBEDSound::MBEDSound() { |
mkarlsso | 0:8dbd6bd9167f | 397 | |
mkarlsso | 0:8dbd6bd9167f | 398 | } |
mkarlsso | 0:8dbd6bd9167f | 399 | |
mkarlsso | 0:8dbd6bd9167f | 400 | void MBEDSound::execute() { |
mkarlsso | 0:8dbd6bd9167f | 401 | if (reset) { |
alustig3 | 10:f65649c13b5b | 402 | audio.reset(); |
mkarlsso | 0:8dbd6bd9167f | 403 | } else if (!play) { |
alustig3 | 10:f65649c13b5b | 404 | audio.stopTrack(); |
mkarlsso | 0:8dbd6bd9167f | 405 | } else { |
mkarlsso | 0:8dbd6bd9167f | 406 | if (volume > -1) { |
alustig3 | 10:f65649c13b5b | 407 | audio.volume(volume); |
mkarlsso | 0:8dbd6bd9167f | 408 | } else if (volumePtr != NULL) { |
alustig3 | 10:f65649c13b5b | 409 | audio.volume(*volumePtr); |
mkarlsso | 0:8dbd6bd9167f | 410 | } |
mkarlsso | 0:8dbd6bd9167f | 411 | |
mkarlsso | 0:8dbd6bd9167f | 412 | if (fileNameExists) { |
alustig3 | 10:f65649c13b5b | 413 | //audio.playTracks(); |
alustig3 | 10:f65649c13b5b | 414 | audio.stopTrack(); |
alustig3 | 10:f65649c13b5b | 415 | audio.playTrackName(fileName); |
mkarlsso | 0:8dbd6bd9167f | 416 | } |
mkarlsso | 0:8dbd6bd9167f | 417 | } |
mkarlsso | 0:8dbd6bd9167f | 418 | } |
mkarlsso | 0:8dbd6bd9167f | 419 | |
mkarlsso | 0:8dbd6bd9167f | 420 | //----------------------------------------------------- |
mkarlsso | 7:5fe7329751d4 | 421 | MBEDAnalogOut::MBEDAnalogOut() { |
mkarlsso | 7:5fe7329751d4 | 422 | |
mkarlsso | 7:5fe7329751d4 | 423 | } |
mkarlsso | 7:5fe7329751d4 | 424 | |
mkarlsso | 7:5fe7329751d4 | 425 | void MBEDAnalogOut::init(int pin) { |
mkarlsso | 7:5fe7329751d4 | 426 | if (pin < NUMANOUTPORTS) { |
mkarlsso | 7:5fe7329751d4 | 427 | outpin = new AnalogOut(aOutPins[pin]); |
mkarlsso | 7:5fe7329751d4 | 428 | pinExists = true; |
mkarlsso | 7:5fe7329751d4 | 429 | } |
mkarlsso | 7:5fe7329751d4 | 430 | } |
mkarlsso | 7:5fe7329751d4 | 431 | |
mkarlsso | 7:5fe7329751d4 | 432 | int MBEDAnalogOut::read() { |
mkarlsso | 7:5fe7329751d4 | 433 | |
mkarlsso | 7:5fe7329751d4 | 434 | if (pinExists) { |
alustig3 | 9:f783bce314cd | 435 | return outpin->read()*3300.0; //read value is a float between 0 and 1.0 (max voltage). Convert to mV integer value. |
mkarlsso | 7:5fe7329751d4 | 436 | } else { |
mkarlsso | 7:5fe7329751d4 | 437 | return 0; |
mkarlsso | 7:5fe7329751d4 | 438 | } |
mkarlsso | 7:5fe7329751d4 | 439 | |
mkarlsso | 7:5fe7329751d4 | 440 | } |
mkarlsso | 7:5fe7329751d4 | 441 | |
mkarlsso | 7:5fe7329751d4 | 442 | void MBEDAnalogOut::write(int value) { |
mkarlsso | 7:5fe7329751d4 | 443 | |
mkarlsso | 7:5fe7329751d4 | 444 | if (pinExists) { |
mkarlsso | 7:5fe7329751d4 | 445 | |
mkarlsso | 7:5fe7329751d4 | 446 | outpin->write((float)value / 3300.0);//should be a float input (percentage). We convert from integer mV value. |
alustig3 | 9:f783bce314cd | 447 | |
mkarlsso | 7:5fe7329751d4 | 448 | } |
mkarlsso | 7:5fe7329751d4 | 449 | |
mkarlsso | 7:5fe7329751d4 | 450 | |
mkarlsso | 7:5fe7329751d4 | 451 | } |
mkarlsso | 7:5fe7329751d4 | 452 | //-------------------------------------------------------- |
mkarlsso | 7:5fe7329751d4 | 453 | |
mkarlsso | 7:5fe7329751d4 | 454 | MBEDAnalogIn::MBEDAnalogIn() { |
mkarlsso | 7:5fe7329751d4 | 455 | |
mkarlsso | 7:5fe7329751d4 | 456 | } |
mkarlsso | 7:5fe7329751d4 | 457 | |
mkarlsso | 7:5fe7329751d4 | 458 | void MBEDAnalogIn::init(int pin) { |
mkarlsso | 7:5fe7329751d4 | 459 | |
mkarlsso | 7:5fe7329751d4 | 460 | if (pin < NUMANINPORTS) { |
mkarlsso | 7:5fe7329751d4 | 461 | inpin = new AnalogIn(aInPins[pin]); |
mkarlsso | 7:5fe7329751d4 | 462 | pinExists = true; |
mkarlsso | 7:5fe7329751d4 | 463 | } |
mkarlsso | 7:5fe7329751d4 | 464 | |
mkarlsso | 7:5fe7329751d4 | 465 | } |
mkarlsso | 7:5fe7329751d4 | 466 | |
mkarlsso | 7:5fe7329751d4 | 467 | int MBEDAnalogIn::read() { |
mkarlsso | 7:5fe7329751d4 | 468 | |
mkarlsso | 7:5fe7329751d4 | 469 | if (pinExists) { |
alustig3 | 9:f783bce314cd | 470 | return inpin->read()*3300.0; //read value is a fload between 0 and 1.0 (max voltage). Convert to mV integer value. |
mkarlsso | 7:5fe7329751d4 | 471 | } else { |
mkarlsso | 7:5fe7329751d4 | 472 | return 0; |
mkarlsso | 7:5fe7329751d4 | 473 | } |
mkarlsso | 7:5fe7329751d4 | 474 | } |
mkarlsso | 7:5fe7329751d4 | 475 | |
mkarlsso | 7:5fe7329751d4 | 476 | |
mkarlsso | 7:5fe7329751d4 | 477 | //----------------------------------------------------- |
mkarlsso | 0:8dbd6bd9167f | 478 | MBEDDigitalOut::MBEDDigitalOut() { |
mkarlsso | 4:abee20c0bf2a | 479 | pinExists = false; |
mkarlsso | 0:8dbd6bd9167f | 480 | } |
mkarlsso | 0:8dbd6bd9167f | 481 | |
mkarlsso | 0:8dbd6bd9167f | 482 | void MBEDDigitalOut::init(int pin) { |
mkarlsso | 7:5fe7329751d4 | 483 | if (pin < NUMDIGOUTPORTS) { |
mkarlsso | 7:5fe7329751d4 | 484 | outpin = new DigitalOut(dOutPins[pin]); |
mkarlsso | 4:abee20c0bf2a | 485 | pinExists = true; |
mkarlsso | 4:abee20c0bf2a | 486 | } |
mkarlsso | 0:8dbd6bd9167f | 487 | } |
mkarlsso | 0:8dbd6bd9167f | 488 | |
mkarlsso | 0:8dbd6bd9167f | 489 | int MBEDDigitalOut::read() { |
mkarlsso | 4:abee20c0bf2a | 490 | if (pinExists) { |
mkarlsso | 4:abee20c0bf2a | 491 | return outpin->read(); |
mkarlsso | 4:abee20c0bf2a | 492 | } else { |
mkarlsso | 4:abee20c0bf2a | 493 | return 0; |
mkarlsso | 4:abee20c0bf2a | 494 | } |
mkarlsso | 0:8dbd6bd9167f | 495 | } |
mkarlsso | 0:8dbd6bd9167f | 496 | |
mkarlsso | 0:8dbd6bd9167f | 497 | void MBEDDigitalOut::write(int value) { |
mkarlsso | 4:abee20c0bf2a | 498 | if (pinExists) { |
mkarlsso | 4:abee20c0bf2a | 499 | |
mkarlsso | 4:abee20c0bf2a | 500 | outpin->write(value); |
mkarlsso | 4:abee20c0bf2a | 501 | } |
mkarlsso | 0:8dbd6bd9167f | 502 | } |
mkarlsso | 0:8dbd6bd9167f | 503 | //-------------------------------------------------------- |
mkarlsso | 0:8dbd6bd9167f | 504 | |
mkarlsso | 0:8dbd6bd9167f | 505 | MBEDDigitalIn::MBEDDigitalIn() { |
mkarlsso | 4:abee20c0bf2a | 506 | pinExists = false; |
mkarlsso | 0:8dbd6bd9167f | 507 | } |
mkarlsso | 0:8dbd6bd9167f | 508 | |
mkarlsso | 0:8dbd6bd9167f | 509 | void MBEDDigitalIn::init(int pin) { |
mkarlsso | 4:abee20c0bf2a | 510 | |
mkarlsso | 7:5fe7329751d4 | 511 | if (pin < NUMDIGINPORTS) { |
mkarlsso | 7:5fe7329751d4 | 512 | inpin = new DigitalIn(dInPins[pin]); |
mkarlsso | 7:5fe7329751d4 | 513 | inpin_interrupt = new InterruptIn(dInPins[pin]); |
mkarlsso | 4:abee20c0bf2a | 514 | inpin->mode(PullDown); |
mkarlsso | 4:abee20c0bf2a | 515 | //Set up callbacks for the port interrupts |
alustig3 | 10:f65649c13b5b | 516 | #ifdef LPC1768 |
mkarlsso | 4:abee20c0bf2a | 517 | inpin_interrupt->rise(this, &MBEDDigitalIn::interrupt_up_callback); |
mkarlsso | 4:abee20c0bf2a | 518 | inpin_interrupt->fall(this, &MBEDDigitalIn::interrupt_down_callback); |
alustig3 | 10:f65649c13b5b | 519 | #endif |
alustig3 | 10:f65649c13b5b | 520 | #ifdef K64 |
alustig3 | 10:f65649c13b5b | 521 | inpin_interrupt->rise(callback(this, &MBEDDigitalIn::interrupt_up_callback)); |
alustig3 | 10:f65649c13b5b | 522 | inpin_interrupt->fall(callback(this, &MBEDDigitalIn::interrupt_down_callback)); |
alustig3 | 10:f65649c13b5b | 523 | #endif |
mkarlsso | 4:abee20c0bf2a | 524 | pinExists = true; |
mkarlsso | 4:abee20c0bf2a | 525 | } |
mkarlsso | 0:8dbd6bd9167f | 526 | } |
mkarlsso | 0:8dbd6bd9167f | 527 | |
mkarlsso | 0:8dbd6bd9167f | 528 | int MBEDDigitalIn::read() { |
mkarlsso | 4:abee20c0bf2a | 529 | if (pinExists) { |
mkarlsso | 4:abee20c0bf2a | 530 | return inpin->read(); |
mkarlsso | 4:abee20c0bf2a | 531 | } else { |
mkarlsso | 4:abee20c0bf2a | 532 | return 0; |
mkarlsso | 4:abee20c0bf2a | 533 | } |
mkarlsso | 0:8dbd6bd9167f | 534 | } |
mkarlsso | 0:8dbd6bd9167f | 535 | |
mkarlsso | 0:8dbd6bd9167f | 536 | void MBEDDigitalIn::interrupt_up_callback() { |
mkarlsso | 0:8dbd6bd9167f | 537 | addStateChange(1, timeKeeper); |
mkarlsso | 0:8dbd6bd9167f | 538 | } |
mkarlsso | 0:8dbd6bd9167f | 539 | |
mkarlsso | 0:8dbd6bd9167f | 540 | void MBEDDigitalIn::interrupt_down_callback() { |
mkarlsso | 0:8dbd6bd9167f | 541 | addStateChange(0, timeKeeper); |
mkarlsso | 0:8dbd6bd9167f | 542 | } |
mkarlsso | 0:8dbd6bd9167f | 543 | |
mkarlsso | 0:8dbd6bd9167f | 544 | //---------------------------------------------------------- |
mkarlsso | 0:8dbd6bd9167f | 545 | MBEDSerialPort::MBEDSerialPort() { |
mkarlsso | 0:8dbd6bd9167f | 546 | |
mkarlsso | 0:8dbd6bd9167f | 547 | } |
mkarlsso | 0:8dbd6bd9167f | 548 | |
mkarlsso | 0:8dbd6bd9167f | 549 | void MBEDSerialPort::init() { |
mkarlsso | 0:8dbd6bd9167f | 550 | //Initialize serial communication |
mkarlsso | 0:8dbd6bd9167f | 551 | serialToPC = new Serial(USBTX, USBRX); // tx, rx |
mkarlsso | 0:8dbd6bd9167f | 552 | serialToPC->baud(115200); |
mkarlsso | 0:8dbd6bd9167f | 553 | |
mkarlsso | 0:8dbd6bd9167f | 554 | |
mkarlsso | 0:8dbd6bd9167f | 555 | } |
mkarlsso | 0:8dbd6bd9167f | 556 | |
mkarlsso | 0:8dbd6bd9167f | 557 | bool MBEDSerialPort::readable() { |
mkarlsso | 0:8dbd6bd9167f | 558 | return serialToPC->readable(); |
mkarlsso | 0:8dbd6bd9167f | 559 | } |
mkarlsso | 0:8dbd6bd9167f | 560 | |
mkarlsso | 0:8dbd6bd9167f | 561 | char MBEDSerialPort::readChar() { |
mkarlsso | 0:8dbd6bd9167f | 562 | return serialToPC->getc(); |
mkarlsso | 0:8dbd6bd9167f | 563 | } |
mkarlsso | 0:8dbd6bd9167f | 564 | |
mkarlsso | 0:8dbd6bd9167f | 565 | void MBEDSerialPort::writeChar(char s) { |
mkarlsso | 0:8dbd6bd9167f | 566 | serialToPC->printf("%c", s); |
mkarlsso | 0:8dbd6bd9167f | 567 | } |
mkarlsso | 3:d7b0a0890d96 | 568 | |
mkarlsso | 3:d7b0a0890d96 | 569 | int MBEDSerialPort::requestToWriteString(char *s, int numBytesRequested) { |
mkarlsso | 3:d7b0a0890d96 | 570 | //request to print a string to the serial output buffer |
mkarlsso | 3:d7b0a0890d96 | 571 | //function returns the number of chars actually accepted for output |
mkarlsso | 3:d7b0a0890d96 | 572 | int numBytesAccepted = 0; |
mkarlsso | 3:d7b0a0890d96 | 573 | while (numBytesAccepted < numBytesRequested) { |
mkarlsso | 3:d7b0a0890d96 | 574 | |
mkarlsso | 3:d7b0a0890d96 | 575 | writeChar(*(s+numBytesAccepted)); |
mkarlsso | 3:d7b0a0890d96 | 576 | numBytesAccepted++; |
mkarlsso | 3:d7b0a0890d96 | 577 | } |
mkarlsso | 3:d7b0a0890d96 | 578 | |
mkarlsso | 3:d7b0a0890d96 | 579 | return numBytesAccepted; |
mkarlsso | 3:d7b0a0890d96 | 580 | } |