update code
Dependencies: X_NUCLEO_IKS01A1 mbed-rtos mbed
main.cpp@0:4a8b751dbe7c, 2016-05-02 (annotated)
- Committer:
- acarter2
- Date:
- Mon May 02 15:26:28 2016 +0000
- Revision:
- 0:4a8b751dbe7c
- Child:
- 1:4cd93767691a
buffer
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
acarter2 | 0:4a8b751dbe7c | 1 | #include <stdlib.h> |
acarter2 | 0:4a8b751dbe7c | 2 | #include <pthread.h> |
acarter2 | 0:4a8b751dbe7c | 3 | #include <semaphore.h> |
acarter2 | 0:4a8b751dbe7c | 4 | #include "buffer.h" |
acarter2 | 0:4a8b751dbe7c | 5 | |
acarter2 | 0:4a8b751dbe7c | 6 | #include "mbed.h" |
acarter2 | 0:4a8b751dbe7c | 7 | |
acarter2 | 0:4a8b751dbe7c | 8 | //#include "string.h" |
acarter2 | 0:4a8b751dbe7c | 9 | #include <stdio.h> |
acarter2 | 0:4a8b751dbe7c | 10 | #include <ctype.h> |
acarter2 | 0:4a8b751dbe7c | 11 | #include "x_nucleo_iks01a1.h" |
acarter2 | 0:4a8b751dbe7c | 12 | #include "rtos.h" |
acarter2 | 0:4a8b751dbe7c | 13 | |
acarter2 | 0:4a8b751dbe7c | 14 | #define RAND_DIVISOR 100000000 |
acarter2 | 0:4a8b751dbe7c | 15 | #define TRUE 1 |
acarter2 | 0:4a8b751dbe7c | 16 | |
acarter2 | 0:4a8b751dbe7c | 17 | //setting out variables |
acarter2 | 0:4a8b751dbe7c | 18 | |
acarter2 | 0:4a8b751dbe7c | 19 | /** |
acarter2 | 0:4a8b751dbe7c | 20 | / this is setting up the connection from the board |
acarter2 | 0:4a8b751dbe7c | 21 | **/ |
acarter2 | 0:4a8b751dbe7c | 22 | |
acarter2 | 0:4a8b751dbe7c | 23 | static X_NUCLEO_IKS01A1 *mems_expansion_board = X_NUCLEO_IKS01A1::Instance(D14, D15); |
acarter2 | 0:4a8b751dbe7c | 24 | static HumiditySensor *humidity_sensor = mems_expansion_board->ht_sensor; |
acarter2 | 0:4a8b751dbe7c | 25 | static PressureSensor *pressure_sensor = mems_expansion_board->pt_sensor; |
acarter2 | 0:4a8b751dbe7c | 26 | static TempSensor *temp_sensor1 = mems_expansion_board->ht_sensor; |
acarter2 | 0:4a8b751dbe7c | 27 | static TempSensor *temp_sensor2 = mems_expansion_board->pt_sensor; |
acarter2 | 0:4a8b751dbe7c | 28 | |
acarter2 | 0:4a8b751dbe7c | 29 | typedf int buffer_item; |
acarter2 | 0:4a8b751dbe7c | 30 | #define BUFFER_SIZE 75 |
acarter2 | 0:4a8b751dbe7c | 31 | |
acarter2 | 0:4a8b751dbe7c | 32 | // mutex lock |
acarter2 | 0:4a8b751dbe7c | 33 | pthread_mutex_t mutex; |
acarter2 | 0:4a8b751dbe7c | 34 | |
acarter2 | 0:4a8b751dbe7c | 35 | //semaphores |
acarter2 | 0:4a8b751dbe7c | 36 | sem_t full, empty; |
acarter2 | 0:4a8b751dbe7c | 37 | |
acarter2 | 0:4a8b751dbe7c | 38 | //buffer |
acarter2 | 0:4a8b751dbe7c | 39 | buffer_item buffer[BUFFER_SIZE]; |
acarter2 | 0:4a8b751dbe7c | 40 | |
acarter2 | 0:4a8b751dbe7c | 41 | //buffer counter |
acarter2 | 0:4a8b751dbe7c | 42 | int counter; |
acarter2 | 0:4a8b751dbe7c | 43 | |
acarter2 | 0:4a8b751dbe7c | 44 | pthread_t tid; //thread id |
acarter2 | 0:4a8b751dbe7c | 45 | pthread_attr_t attr; //set of thread attributes |
acarter2 | 0:4a8b751dbe7c | 46 | |
acarter2 | 0:4a8b751dbe7c | 47 | void *producer(void *param); //producer thread |
acarter2 | 0:4a8b751dbe7c | 48 | void *consumer(void *param); //consumer thread |
acarter2 | 0:4a8b751dbe7c | 49 | |
acarter2 | 0:4a8b751dbe7c | 50 | volatile char memorySample[150][200]; |
acarter2 | 0:4a8b751dbe7c | 51 | |
acarter2 | 0:4a8b751dbe7c | 52 | char values[20][20]; |
acarter2 | 0:4a8b751dbe7c | 53 | |
acarter2 | 0:4a8b751dbe7c | 54 | /* |
acarter2 | 0:4a8b751dbe7c | 55 | / this is will make sure the contant valid of how much data will be sorted or not as this |
acarter2 | 0:4a8b751dbe7c | 56 | /could help when the data range. |
acarter2 | 0:4a8b751dbe7c | 57 | */ |
acarter2 | 0:4a8b751dbe7c | 58 | int amountOfSample = 150; |
acarter2 | 0:4a8b751dbe7c | 59 | |
acarter2 | 0:4a8b751dbe7c | 60 | |
acarter2 | 0:4a8b751dbe7c | 61 | uint8_t id; |
acarter2 | 0:4a8b751dbe7c | 62 | |
acarter2 | 0:4a8b751dbe7c | 63 | |
acarter2 | 0:4a8b751dbe7c | 64 | //class |
acarter2 | 0:4a8b751dbe7c | 65 | |
acarter2 | 0:4a8b751dbe7c | 66 | class KeyLocks { |
acarter2 | 0:4a8b751dbe7c | 67 | |
acarter2 | 0:4a8b751dbe7c | 68 | public: |
acarter2 | 0:4a8b751dbe7c | 69 | int key; |
acarter2 | 0:4a8b751dbe7c | 70 | |
acarter2 | 0:4a8b751dbe7c | 71 | KeyLocks(){ |
acarter2 | 0:4a8b751dbe7c | 72 | |
acarter2 | 0:4a8b751dbe7c | 73 | key = 0; |
acarter2 | 0:4a8b751dbe7c | 74 | |
acarter2 | 0:4a8b751dbe7c | 75 | } |
acarter2 | 0:4a8b751dbe7c | 76 | |
acarter2 | 0:4a8b751dbe7c | 77 | bool unlock(void) |
acarter2 | 0:4a8b751dbe7c | 78 | { |
acarter2 | 0:4a8b751dbe7c | 79 | if(key == 0){ |
acarter2 | 0:4a8b751dbe7c | 80 | |
acarter2 | 0:4a8b751dbe7c | 81 | key = 1; |
acarter2 | 0:4a8b751dbe7c | 82 | return true; |
acarter2 | 0:4a8b751dbe7c | 83 | |
acarter2 | 0:4a8b751dbe7c | 84 | }else{ |
acarter2 | 0:4a8b751dbe7c | 85 | return false; |
acarter2 | 0:4a8b751dbe7c | 86 | |
acarter2 | 0:4a8b751dbe7c | 87 | } |
acarter2 | 0:4a8b751dbe7c | 88 | } |
acarter2 | 0:4a8b751dbe7c | 89 | |
acarter2 | 0:4a8b751dbe7c | 90 | bool lock(void) |
acarter2 | 0:4a8b751dbe7c | 91 | { |
acarter2 | 0:4a8b751dbe7c | 92 | if(key == 1){ |
acarter2 | 0:4a8b751dbe7c | 93 | |
acarter2 | 0:4a8b751dbe7c | 94 | key = 0; |
acarter2 | 0:4a8b751dbe7c | 95 | return true; |
acarter2 | 0:4a8b751dbe7c | 96 | |
acarter2 | 0:4a8b751dbe7c | 97 | }else{ |
acarter2 | 0:4a8b751dbe7c | 98 | return false; |
acarter2 | 0:4a8b751dbe7c | 99 | |
acarter2 | 0:4a8b751dbe7c | 100 | } |
acarter2 | 0:4a8b751dbe7c | 101 | } |
acarter2 | 0:4a8b751dbe7c | 102 | |
acarter2 | 0:4a8b751dbe7c | 103 | }; |
acarter2 | 0:4a8b751dbe7c | 104 | |
acarter2 | 0:4a8b751dbe7c | 105 | class SampleRate : public KeyLocks |
acarter2 | 0:4a8b751dbe7c | 106 | { |
acarter2 | 0:4a8b751dbe7c | 107 | public: |
acarter2 | 0:4a8b751dbe7c | 108 | /* |
acarter2 | 0:4a8b751dbe7c | 109 | /this is going the amount of time which the data sample will be taking and this will have |
acarter2 | 0:4a8b751dbe7c | 110 | /a default stating of every 15 second but can be changed |
acarter2 | 0:4a8b751dbe7c | 111 | */ |
acarter2 | 0:4a8b751dbe7c | 112 | int sampleRate; |
acarter2 | 0:4a8b751dbe7c | 113 | |
acarter2 | 0:4a8b751dbe7c | 114 | SampleRate(){ |
acarter2 | 0:4a8b751dbe7c | 115 | |
acarter2 | 0:4a8b751dbe7c | 116 | sampleRate = 15; |
acarter2 | 0:4a8b751dbe7c | 117 | |
acarter2 | 0:4a8b751dbe7c | 118 | } |
acarter2 | 0:4a8b751dbe7c | 119 | |
acarter2 | 0:4a8b751dbe7c | 120 | int getSampleRate(void) |
acarter2 | 0:4a8b751dbe7c | 121 | { |
acarter2 | 0:4a8b751dbe7c | 122 | return sampleRate; |
acarter2 | 0:4a8b751dbe7c | 123 | } |
acarter2 | 0:4a8b751dbe7c | 124 | void setSampleRate(double newSampleRate){ |
acarter2 | 0:4a8b751dbe7c | 125 | |
acarter2 | 0:4a8b751dbe7c | 126 | sampleRate = newSampleRate; |
acarter2 | 0:4a8b751dbe7c | 127 | |
acarter2 | 0:4a8b751dbe7c | 128 | } |
acarter2 | 0:4a8b751dbe7c | 129 | |
acarter2 | 0:4a8b751dbe7c | 130 | |
acarter2 | 0:4a8b751dbe7c | 131 | |
acarter2 | 0:4a8b751dbe7c | 132 | }; |
acarter2 | 0:4a8b751dbe7c | 133 | |
acarter2 | 0:4a8b751dbe7c | 134 | |
acarter2 | 0:4a8b751dbe7c | 135 | class TakeSample : public KeyLocks |
acarter2 | 0:4a8b751dbe7c | 136 | { |
acarter2 | 0:4a8b751dbe7c | 137 | public: |
acarter2 | 0:4a8b751dbe7c | 138 | /* |
acarter2 | 0:4a8b751dbe7c | 139 | /this is going to take the sample or not as this can change if the person thing it could happen |
acarter2 | 0:4a8b751dbe7c | 140 | /which will see if the data is stored |
acarter2 | 0:4a8b751dbe7c | 141 | */ |
acarter2 | 0:4a8b751dbe7c | 142 | bool takeSample; |
acarter2 | 0:4a8b751dbe7c | 143 | |
acarter2 | 0:4a8b751dbe7c | 144 | TakeSample(){ |
acarter2 | 0:4a8b751dbe7c | 145 | takeSample = true; |
acarter2 | 0:4a8b751dbe7c | 146 | } |
acarter2 | 0:4a8b751dbe7c | 147 | |
acarter2 | 0:4a8b751dbe7c | 148 | int getTakeSample(void) |
acarter2 | 0:4a8b751dbe7c | 149 | { |
acarter2 | 0:4a8b751dbe7c | 150 | return takeSample; |
acarter2 | 0:4a8b751dbe7c | 151 | } |
acarter2 | 0:4a8b751dbe7c | 152 | void setTakeSample(bool newTakeSample){ |
acarter2 | 0:4a8b751dbe7c | 153 | |
acarter2 | 0:4a8b751dbe7c | 154 | takeSample = newTakeSample; |
acarter2 | 0:4a8b751dbe7c | 155 | |
acarter2 | 0:4a8b751dbe7c | 156 | } |
acarter2 | 0:4a8b751dbe7c | 157 | }; |
acarter2 | 0:4a8b751dbe7c | 158 | |
acarter2 | 0:4a8b751dbe7c | 159 | |
acarter2 | 0:4a8b751dbe7c | 160 | |
acarter2 | 0:4a8b751dbe7c | 161 | class SampleTemp: public KeyLocks |
acarter2 | 0:4a8b751dbe7c | 162 | { |
acarter2 | 0:4a8b751dbe7c | 163 | public: |
acarter2 | 0:4a8b751dbe7c | 164 | |
acarter2 | 0:4a8b751dbe7c | 165 | SampleTemp(){} |
acarter2 | 0:4a8b751dbe7c | 166 | float currentTemp; |
acarter2 | 0:4a8b751dbe7c | 167 | /* |
acarter2 | 0:4a8b751dbe7c | 168 | /this is the fuction which will get the humidity for the external devices |
acarter2 | 0:4a8b751dbe7c | 169 | */ |
acarter2 | 0:4a8b751dbe7c | 170 | float getTemp(void) |
acarter2 | 0:4a8b751dbe7c | 171 | { |
acarter2 | 0:4a8b751dbe7c | 172 | temp_sensor1->GetTemperature(¤tTemp); |
acarter2 | 0:4a8b751dbe7c | 173 | return currentTemp; |
acarter2 | 0:4a8b751dbe7c | 174 | } |
acarter2 | 0:4a8b751dbe7c | 175 | }; |
acarter2 | 0:4a8b751dbe7c | 176 | |
acarter2 | 0:4a8b751dbe7c | 177 | class SampleHumitaty: public KeyLocks |
acarter2 | 0:4a8b751dbe7c | 178 | { |
acarter2 | 0:4a8b751dbe7c | 179 | public: |
acarter2 | 0:4a8b751dbe7c | 180 | |
acarter2 | 0:4a8b751dbe7c | 181 | SampleHumitaty(){} |
acarter2 | 0:4a8b751dbe7c | 182 | |
acarter2 | 0:4a8b751dbe7c | 183 | float currentHumitaty; |
acarter2 | 0:4a8b751dbe7c | 184 | /* |
acarter2 | 0:4a8b751dbe7c | 185 | /this is the fuction which will get the humidity for the external devices |
acarter2 | 0:4a8b751dbe7c | 186 | */ |
acarter2 | 0:4a8b751dbe7c | 187 | float getHumidity() |
acarter2 | 0:4a8b751dbe7c | 188 | { |
acarter2 | 0:4a8b751dbe7c | 189 | humidity_sensor->GetHumidity(¤tHumitaty); |
acarter2 | 0:4a8b751dbe7c | 190 | return currentHumitaty; |
acarter2 | 0:4a8b751dbe7c | 191 | |
acarter2 | 0:4a8b751dbe7c | 192 | } |
acarter2 | 0:4a8b751dbe7c | 193 | }; |
acarter2 | 0:4a8b751dbe7c | 194 | |
acarter2 | 0:4a8b751dbe7c | 195 | |
acarter2 | 0:4a8b751dbe7c | 196 | class SamplePressure: public KeyLocks |
acarter2 | 0:4a8b751dbe7c | 197 | |
acarter2 | 0:4a8b751dbe7c | 198 | { |
acarter2 | 0:4a8b751dbe7c | 199 | public: |
acarter2 | 0:4a8b751dbe7c | 200 | |
acarter2 | 0:4a8b751dbe7c | 201 | SamplePressure(){} |
acarter2 | 0:4a8b751dbe7c | 202 | |
acarter2 | 0:4a8b751dbe7c | 203 | float currentPressure; |
acarter2 | 0:4a8b751dbe7c | 204 | /* |
acarter2 | 0:4a8b751dbe7c | 205 | /this is the fuction which will get the pressure for the external devices |
acarter2 | 0:4a8b751dbe7c | 206 | */ |
acarter2 | 0:4a8b751dbe7c | 207 | float getPressure() |
acarter2 | 0:4a8b751dbe7c | 208 | { |
acarter2 | 0:4a8b751dbe7c | 209 | pressure_sensor->GetPressure(¤tPressure); |
acarter2 | 0:4a8b751dbe7c | 210 | return currentPressure; |
acarter2 | 0:4a8b751dbe7c | 211 | } |
acarter2 | 0:4a8b751dbe7c | 212 | }; |
acarter2 | 0:4a8b751dbe7c | 213 | |
acarter2 | 0:4a8b751dbe7c | 214 | class SampleDisplay: public KeyLocks |
acarter2 | 0:4a8b751dbe7c | 215 | { |
acarter2 | 0:4a8b751dbe7c | 216 | public: |
acarter2 | 0:4a8b751dbe7c | 217 | /* |
acarter2 | 0:4a8b751dbe7c | 218 | /this is the variable to see if the data will be display or not after the data being sorted |
acarter2 | 0:4a8b751dbe7c | 219 | /this can change by the user input |
acarter2 | 0:4a8b751dbe7c | 220 | */ |
acarter2 | 0:4a8b751dbe7c | 221 | |
acarter2 | 0:4a8b751dbe7c | 222 | bool display; |
acarter2 | 0:4a8b751dbe7c | 223 | |
acarter2 | 0:4a8b751dbe7c | 224 | SampleDisplay(){ |
acarter2 | 0:4a8b751dbe7c | 225 | display = false; |
acarter2 | 0:4a8b751dbe7c | 226 | } |
acarter2 | 0:4a8b751dbe7c | 227 | |
acarter2 | 0:4a8b751dbe7c | 228 | bool getTakeDisplay(void) |
acarter2 | 0:4a8b751dbe7c | 229 | { |
acarter2 | 0:4a8b751dbe7c | 230 | return display; |
acarter2 | 0:4a8b751dbe7c | 231 | } |
acarter2 | 0:4a8b751dbe7c | 232 | void setDisplay(bool newSampleDisplay){ |
acarter2 | 0:4a8b751dbe7c | 233 | |
acarter2 | 0:4a8b751dbe7c | 234 | display = newSampleDisplay; |
acarter2 | 0:4a8b751dbe7c | 235 | |
acarter2 | 0:4a8b751dbe7c | 236 | } |
acarter2 | 0:4a8b751dbe7c | 237 | }; |
acarter2 | 0:4a8b751dbe7c | 238 | |
acarter2 | 0:4a8b751dbe7c | 239 | |
acarter2 | 0:4a8b751dbe7c | 240 | |
acarter2 | 0:4a8b751dbe7c | 241 | |
acarter2 | 0:4a8b751dbe7c | 242 | class BufferStartPointer: public KeyLocks |
acarter2 | 0:4a8b751dbe7c | 243 | { |
acarter2 | 0:4a8b751dbe7c | 244 | public: |
acarter2 | 0:4a8b751dbe7c | 245 | /* |
acarter2 | 0:4a8b751dbe7c | 246 | /this is the pointer to start of the buffer as this will make the buffer be cycler |
acarter2 | 0:4a8b751dbe7c | 247 | */ |
acarter2 | 0:4a8b751dbe7c | 248 | int bufferStartPointer; |
acarter2 | 0:4a8b751dbe7c | 249 | |
acarter2 | 0:4a8b751dbe7c | 250 | BufferStartPointer(){ |
acarter2 | 0:4a8b751dbe7c | 251 | bufferStartPointer = 0; |
acarter2 | 0:4a8b751dbe7c | 252 | } |
acarter2 | 0:4a8b751dbe7c | 253 | |
acarter2 | 0:4a8b751dbe7c | 254 | int getBufferStartPointer (void) |
acarter2 | 0:4a8b751dbe7c | 255 | { |
acarter2 | 0:4a8b751dbe7c | 256 | return bufferStartPointer; |
acarter2 | 0:4a8b751dbe7c | 257 | } |
acarter2 | 0:4a8b751dbe7c | 258 | void setBufferStartPointer (int newBufferStartPointer ){ |
acarter2 | 0:4a8b751dbe7c | 259 | |
acarter2 | 0:4a8b751dbe7c | 260 | bufferStartPointer = newBufferStartPointer; |
acarter2 | 0:4a8b751dbe7c | 261 | |
acarter2 | 0:4a8b751dbe7c | 262 | } |
acarter2 | 0:4a8b751dbe7c | 263 | }; |
acarter2 | 0:4a8b751dbe7c | 264 | |
acarter2 | 0:4a8b751dbe7c | 265 | |
acarter2 | 0:4a8b751dbe7c | 266 | class BufferEndPointer: public KeyLocks |
acarter2 | 0:4a8b751dbe7c | 267 | { |
acarter2 | 0:4a8b751dbe7c | 268 | public: |
acarter2 | 0:4a8b751dbe7c | 269 | /* |
acarter2 | 0:4a8b751dbe7c | 270 | /this is the pointer to End of the buffer as this will make the buffer be cycler |
acarter2 | 0:4a8b751dbe7c | 271 | */ |
acarter2 | 0:4a8b751dbe7c | 272 | int bufferEndPointer; |
acarter2 | 0:4a8b751dbe7c | 273 | |
acarter2 | 0:4a8b751dbe7c | 274 | BufferEndPointer(){ |
acarter2 | 0:4a8b751dbe7c | 275 | bufferEndPointer = 0; |
acarter2 | 0:4a8b751dbe7c | 276 | } |
acarter2 | 0:4a8b751dbe7c | 277 | |
acarter2 | 0:4a8b751dbe7c | 278 | int getBufferEndPointer (void) |
acarter2 | 0:4a8b751dbe7c | 279 | { |
acarter2 | 0:4a8b751dbe7c | 280 | return bufferEndPointer; |
acarter2 | 0:4a8b751dbe7c | 281 | } |
acarter2 | 0:4a8b751dbe7c | 282 | void setBufferEndPointer (int newBufferEndPointer ){ |
acarter2 | 0:4a8b751dbe7c | 283 | |
acarter2 | 0:4a8b751dbe7c | 284 | bufferEndPointer = newBufferEndPointer; |
acarter2 | 0:4a8b751dbe7c | 285 | |
acarter2 | 0:4a8b751dbe7c | 286 | } |
acarter2 | 0:4a8b751dbe7c | 287 | }; |
acarter2 | 0:4a8b751dbe7c | 288 | |
acarter2 | 0:4a8b751dbe7c | 289 | void initialiseBufferData(){ |
acarter2 | 0:4a8b751dbe7c | 290 | //create mutex lock |
acarter2 | 0:4a8b751dbe7c | 291 | pthread_mutex_init(&mutex, NULL); |
acarter2 | 0:4a8b751dbe7c | 292 | |
acarter2 | 0:4a8b751dbe7c | 293 | //create full semaphore and initialise to 0 |
acarter2 | 0:4a8b751dbe7c | 294 | sem_init(&full, 0, 0); |
acarter2 | 0:4a8b751dbe7c | 295 | |
acarter2 | 0:4a8b751dbe7c | 296 | //create empty semaphore and initialise to BUFFER_SIZE |
acarter2 | 0:4a8b751dbe7c | 297 | sem_init(&empty, 0, BUFFER_SIZE); |
acarter2 | 0:4a8b751dbe7c | 298 | |
acarter2 | 0:4a8b751dbe7c | 299 | //get default attributes |
acarter2 | 0:4a8b751dbe7c | 300 | pthread_attr_init(&attr); |
acarter2 | 0:4a8b751dbe7c | 301 | |
acarter2 | 0:4a8b751dbe7c | 302 | //init buffer |
acarter2 | 0:4a8b751dbe7c | 303 | counter = 0; |
acarter2 | 0:4a8b751dbe7c | 304 | } |
acarter2 | 0:4a8b751dbe7c | 305 | |
acarter2 | 0:4a8b751dbe7c | 306 | //producer thread |
acarter2 | 0:4a8b751dbe7c | 307 | void *producer(void *param){ |
acarter2 | 0:4a8b751dbe7c | 308 | buffer_item item; |
acarter2 | 0:4a8b751dbe7c | 309 | |
acarter2 | 0:4a8b751dbe7c | 310 | while(TRUE){ |
acarter2 | 0:4a8b751dbe7c | 311 | //sleep for random amount of time |
acarter2 | 0:4a8b751dbe7c | 312 | int rNum = rand() / RAND_DIVISOR; |
acarter2 | 0:4a8b751dbe7c | 313 | sleep(rNum); |
acarter2 | 0:4a8b751dbe7c | 314 | |
acarter2 | 0:4a8b751dbe7c | 315 | //generate random number |
acarter2 | 0:4a8b751dbe7c | 316 | item = rand(); |
acarter2 | 0:4a8b751dbe7c | 317 | |
acarter2 | 0:4a8b751dbe7c | 318 | //get empty lock |
acarter2 | 0:4a8b751dbe7c | 319 | sem_wait(&empty); |
acarter2 | 0:4a8b751dbe7c | 320 | //get mutex lock |
acarter2 | 0:4a8b751dbe7c | 321 | pthread_mutex_lock(&mutex); |
acarter2 | 0:4a8b751dbe7c | 322 | |
acarter2 | 0:4a8b751dbe7c | 323 | if(insert_item(item)){ |
acarter2 | 0:4a8b751dbe7c | 324 | fprint(stderr, "Producer report error condition\n"); |
acarter2 | 0:4a8b751dbe7c | 325 | } |
acarter2 | 0:4a8b751dbe7c | 326 | else{ |
acarter2 | 0:4a8b751dbe7c | 327 | printf("producer produced %d\n", item); |
acarter2 | 0:4a8b751dbe7c | 328 | } |
acarter2 | 0:4a8b751dbe7c | 329 | //release mutex lock |
acarter2 | 0:4a8b751dbe7c | 330 | pthread_mutex_unlock(&mutex); |
acarter2 | 0:4a8b751dbe7c | 331 | //signal full |
acarter2 | 0:4a8b751dbe7c | 332 | sem_post(&full); |
acarter2 | 0:4a8b751dbe7c | 333 | } |
acarter2 | 0:4a8b751dbe7c | 334 | } |
acarter2 | 0:4a8b751dbe7c | 335 | |
acarter2 | 0:4a8b751dbe7c | 336 | //consumer thread |
acarter2 | 0:4a8b751dbe7c | 337 | void *consumer(void { |
acarter2 | 0:4a8b751dbe7c | 338 | buffer_item item; |
acarter2 | 0:4a8b751dbe7c | 339 | |
acarter2 | 0:4a8b751dbe7c | 340 | while(TRUE){ |
acarter2 | 0:4a8b751dbe7c | 341 | //sleep for random amount of time |
acarter2 | 0:4a8b751dbe7c | 342 | int rNum = rand() / RAND_DIVISOR; |
acarter2 | 0:4a8b751dbe7c | 343 | sleep(rNum); |
acarter2 | 0:4a8b751dbe7c | 344 | |
acarter2 | 0:4a8b751dbe7c | 345 | //get full lock |
acarter2 | 0:4a8b751dbe7c | 346 | sem_wait(&full); |
acarter2 | 0:4a8b751dbe7c | 347 | //get mutex lock |
acarter2 | 0:4a8b751dbe7c | 348 | pthread_mutex_lock(&mutex); |
acarter2 | 0:4a8b751dbe7c | 349 | if(remove_item(&item)){ |
acarter2 | 0:4a8b751dbe7c | 350 | fprint(stderr, "Consumer report error condition\n"); |
acarter2 | 0:4a8b751dbe7c | 351 | } |
acarter2 | 0:4a8b751dbe7c | 352 | else{ |
acarter2 | 0:4a8b751dbe7c | 353 | printf("Consumer consumer %d\n", item); |
acarter2 | 0:4a8b751dbe7c | 354 | } |
acarter2 | 0:4a8b751dbe7c | 355 | |
acarter2 | 0:4a8b751dbe7c | 356 | //release mutex ock |
acarter2 | 0:4a8b751dbe7c | 357 | pthread_mutex_unlock(&mutex); |
acarter2 | 0:4a8b751dbe7c | 358 | //signal empty |
acarter2 | 0:4a8b751dbe7c | 359 | sem_post(&empty); |
acarter2 | 0:4a8b751dbe7c | 360 | } |
acarter2 | 0:4a8b751dbe7c | 361 | } |
acarter2 | 0:4a8b751dbe7c | 362 | |
acarter2 | 0:4a8b751dbe7c | 363 | //add item to buffer |
acarter2 | 0:4a8b751dbe7c | 364 | int insert_item(buffer_item item) { |
acarter2 | 0:4a8b751dbe7c | 365 | //when buffer not full add item and increase counter |
acarter2 | 0:4a8b751dbe7c | 366 | if(counter < BUFFER_SIZE){ |
acarter2 | 0:4a8b751dbe7c | 367 | buffer[counter] = item; |
acarter2 | 0:4a8b751dbe7c | 368 | counter++ |
acarter2 | 0:4a8b751dbe7c | 369 | return 0; |
acarter2 | 0:4a8b751dbe7c | 370 | } |
acarter2 | 0:4a8b751dbe7c | 371 | else{ //buffer full error |
acarter2 | 0:4a8b751dbe7c | 372 | return -1 |
acarter2 | 0:4a8b751dbe7c | 373 | } |
acarter2 | 0:4a8b751dbe7c | 374 | } |
acarter2 | 0:4a8b751dbe7c | 375 | |
acarter2 | 0:4a8b751dbe7c | 376 | //remove item from buffer |
acarter2 | 0:4a8b751dbe7c | 377 | int remove_item(buffer_item *item){ |
acarter2 | 0:4a8b751dbe7c | 378 | //when buffer not empty remove item and decrease counter |
acarter2 | 0:4a8b751dbe7c | 379 | if(counter > 0){ |
acarter2 | 0:4a8b751dbe7c | 380 | *item = buffer[(counter-1)]; |
acarter2 | 0:4a8b751dbe7c | 381 | counter--; |
acarter2 | 0:4a8b751dbe7c | 382 | return 0; |
acarter2 | 0:4a8b751dbe7c | 383 | } |
acarter2 | 0:4a8b751dbe7c | 384 | else{ //empty buffer error |
acarter2 | 0:4a8b751dbe7c | 385 | return -1; |
acarter2 | 0:4a8b751dbe7c | 386 | } |
acarter2 | 0:4a8b751dbe7c | 387 | } |
acarter2 | 0:4a8b751dbe7c | 388 | |
acarter2 | 0:4a8b751dbe7c | 389 | |
acarter2 | 0:4a8b751dbe7c | 390 | |
acarter2 | 0:4a8b751dbe7c | 391 | |
acarter2 | 0:4a8b751dbe7c | 392 | |
acarter2 | 0:4a8b751dbe7c | 393 | |
acarter2 | 0:4a8b751dbe7c | 394 | |
acarter2 | 0:4a8b751dbe7c | 395 | |
acarter2 | 0:4a8b751dbe7c | 396 | //this is setting all the function for the treads in the program |
acarter2 | 0:4a8b751dbe7c | 397 | |
acarter2 | 0:4a8b751dbe7c | 398 | |
acarter2 | 0:4a8b751dbe7c | 399 | /* |
acarter2 | 0:4a8b751dbe7c | 400 | /this is fucntion which the important the updateSample rate |
acarter2 | 0:4a8b751dbe7c | 401 | */ |
acarter2 | 0:4a8b751dbe7c | 402 | void updateSample(SamplePressure* pressure, SampleHumitaty* humitaty, SampleTemp* tempeture) |
acarter2 | 0:4a8b751dbe7c | 403 | { |
acarter2 | 0:4a8b751dbe7c | 404 | while(!pressure->lock()){}; |
acarter2 | 0:4a8b751dbe7c | 405 | |
acarter2 | 0:4a8b751dbe7c | 406 | float currentPressure = pressure->getPressure(); |
acarter2 | 0:4a8b751dbe7c | 407 | pressure->unlock(); |
acarter2 | 0:4a8b751dbe7c | 408 | |
acarter2 | 0:4a8b751dbe7c | 409 | while(!humitaty->lock()){}; |
acarter2 | 0:4a8b751dbe7c | 410 | |
acarter2 | 0:4a8b751dbe7c | 411 | float current= humitaty->getHumidity(); |
acarter2 | 0:4a8b751dbe7c | 412 | humitaty->unlock(); |
acarter2 | 0:4a8b751dbe7c | 413 | |
acarter2 | 0:4a8b751dbe7c | 414 | |
acarter2 | 0:4a8b751dbe7c | 415 | while(!tempeture->lock()){}; |
acarter2 | 0:4a8b751dbe7c | 416 | |
acarter2 | 0:4a8b751dbe7c | 417 | float currentTemp= tempeture->getTemp(); |
acarter2 | 0:4a8b751dbe7c | 418 | tempeture->unlock(); |
acarter2 | 0:4a8b751dbe7c | 419 | |
acarter2 | 0:4a8b751dbe7c | 420 | } |
acarter2 | 0:4a8b751dbe7c | 421 | |
acarter2 | 0:4a8b751dbe7c | 422 | |
acarter2 | 0:4a8b751dbe7c | 423 | void splitString(char inputString[]){ |
acarter2 | 0:4a8b751dbe7c | 424 | int sizeOfArray = 1000; |
acarter2 | 0:4a8b751dbe7c | 425 | char opertaion[sizeOfArray]; |
acarter2 | 0:4a8b751dbe7c | 426 | char data[sizeOfArray]; |
acarter2 | 0:4a8b751dbe7c | 427 | |
acarter2 | 0:4a8b751dbe7c | 428 | for (int i = 0; i < 20; i++){ |
acarter2 | 0:4a8b751dbe7c | 429 | for (int j = 0; i < 20; j++){ |
acarter2 | 0:4a8b751dbe7c | 430 | values[i][j] =' '; |
acarter2 | 0:4a8b751dbe7c | 431 | |
acarter2 | 0:4a8b751dbe7c | 432 | } |
acarter2 | 0:4a8b751dbe7c | 433 | } |
acarter2 | 0:4a8b751dbe7c | 434 | |
acarter2 | 0:4a8b751dbe7c | 435 | for (int i = 0; i < sizeOfArray; i++){ |
acarter2 | 0:4a8b751dbe7c | 436 | |
acarter2 | 0:4a8b751dbe7c | 437 | if(inputString[i] == '<'){ |
acarter2 | 0:4a8b751dbe7c | 438 | for(int j=0; j < i; j++){ |
acarter2 | 0:4a8b751dbe7c | 439 | |
acarter2 | 0:4a8b751dbe7c | 440 | opertaion[j] = inputString[j]; |
acarter2 | 0:4a8b751dbe7c | 441 | |
acarter2 | 0:4a8b751dbe7c | 442 | } |
acarter2 | 0:4a8b751dbe7c | 443 | |
acarter2 | 0:4a8b751dbe7c | 444 | int index = 0; |
acarter2 | 0:4a8b751dbe7c | 445 | |
acarter2 | 0:4a8b751dbe7c | 446 | for(int k=i+1; k < sizeOfArray - 1; k++){ |
acarter2 | 0:4a8b751dbe7c | 447 | |
acarter2 | 0:4a8b751dbe7c | 448 | data[index] = (inputString[k]); |
acarter2 | 0:4a8b751dbe7c | 449 | index++; |
acarter2 | 0:4a8b751dbe7c | 450 | |
acarter2 | 0:4a8b751dbe7c | 451 | } |
acarter2 | 0:4a8b751dbe7c | 452 | |
acarter2 | 0:4a8b751dbe7c | 453 | |
acarter2 | 0:4a8b751dbe7c | 454 | |
acarter2 | 0:4a8b751dbe7c | 455 | for(int y = 0; y < 20; y++){ |
acarter2 | 0:4a8b751dbe7c | 456 | values[0][y] = opertaion[y]; |
acarter2 | 0:4a8b751dbe7c | 457 | } |
acarter2 | 0:4a8b751dbe7c | 458 | |
acarter2 | 0:4a8b751dbe7c | 459 | for(int z = 0;z < 20; z++){ |
acarter2 | 0:4a8b751dbe7c | 460 | values[1][z] = data[z]; |
acarter2 | 0:4a8b751dbe7c | 461 | } |
acarter2 | 0:4a8b751dbe7c | 462 | |
acarter2 | 0:4a8b751dbe7c | 463 | break; |
acarter2 | 0:4a8b751dbe7c | 464 | |
acarter2 | 0:4a8b751dbe7c | 465 | } |
acarter2 | 0:4a8b751dbe7c | 466 | } |
acarter2 | 0:4a8b751dbe7c | 467 | } |
acarter2 | 0:4a8b751dbe7c | 468 | |
acarter2 | 0:4a8b751dbe7c | 469 | /* |
acarter2 | 0:4a8b751dbe7c | 470 | /this is going to sort the string to see the opertion which will picked the opertion which |
acarter2 | 0:4a8b751dbe7c | 471 | /need the be carried out and the put the data in to the tread to then which the tread will |
acarter2 | 0:4a8b751dbe7c | 472 | /do it operation |
acarter2 | 0:4a8b751dbe7c | 473 | */ |
acarter2 | 0:4a8b751dbe7c | 474 | void sortString(char inputString[]) |
acarter2 | 0:4a8b751dbe7c | 475 | { |
acarter2 | 0:4a8b751dbe7c | 476 | |
acarter2 | 0:4a8b751dbe7c | 477 | //if("DELETE" == values[0]){ |
acarter2 | 0:4a8b751dbe7c | 478 | |
acarter2 | 0:4a8b751dbe7c | 479 | //printCurrentRecord(values[]); |
acarter2 | 0:4a8b751dbe7c | 480 | |
acarter2 | 0:4a8b751dbe7c | 481 | //} |
acarter2 | 0:4a8b751dbe7c | 482 | |
acarter2 | 0:4a8b751dbe7c | 483 | //https://developer.mbed.org/teams/Students-Plymouth-University-UK-SoCEM/ |
acarter2 | 0:4a8b751dbe7c | 484 | |
acarter2 | 0:4a8b751dbe7c | 485 | } |
acarter2 | 0:4a8b751dbe7c | 486 | |
acarter2 | 0:4a8b751dbe7c | 487 | |
acarter2 | 0:4a8b751dbe7c | 488 | |
acarter2 | 0:4a8b751dbe7c | 489 | |
acarter2 | 0:4a8b751dbe7c | 490 | /* |
acarter2 | 0:4a8b751dbe7c | 491 | /this is function that will written to the memory of the from the buffer so that will be fast |
acarter2 | 0:4a8b751dbe7c | 492 | / and did not lose anydata |
acarter2 | 0:4a8b751dbe7c | 493 | */ |
acarter2 | 0:4a8b751dbe7c | 494 | void writtenToMemory(const void* arg ) |
acarter2 | 0:4a8b751dbe7c | 495 | { |
acarter2 | 0:4a8b751dbe7c | 496 | |
acarter2 | 0:4a8b751dbe7c | 497 | } |
acarter2 | 0:4a8b751dbe7c | 498 | |
acarter2 | 0:4a8b751dbe7c | 499 | |
acarter2 | 0:4a8b751dbe7c | 500 | /* |
acarter2 | 0:4a8b751dbe7c | 501 | /this is he deleteRecords which will move the buffer regard so that the bufferent will over |
acarter2 | 0:4a8b751dbe7c | 502 | /write to the old data in the fifo buffer |
acarter2 | 0:4a8b751dbe7c | 503 | */ |
acarter2 | 0:4a8b751dbe7c | 504 | void deleteRecord(const void* arg ) |
acarter2 | 0:4a8b751dbe7c | 505 | { |
acarter2 | 0:4a8b751dbe7c | 506 | |
acarter2 | 0:4a8b751dbe7c | 507 | } |
acarter2 | 0:4a8b751dbe7c | 508 | |
acarter2 | 0:4a8b751dbe7c | 509 | |
acarter2 | 0:4a8b751dbe7c | 510 | /* |
acarter2 | 0:4a8b751dbe7c | 511 | /read Record is the most reason data which which is store in the data |
acarter2 | 0:4a8b751dbe7c | 512 | */ |
acarter2 | 0:4a8b751dbe7c | 513 | void readRecord(const void* arg ) |
acarter2 | 0:4a8b751dbe7c | 514 | { |
acarter2 | 0:4a8b751dbe7c | 515 | |
acarter2 | 0:4a8b751dbe7c | 516 | } |
acarter2 | 0:4a8b751dbe7c | 517 | |
acarter2 | 0:4a8b751dbe7c | 518 | |
acarter2 | 0:4a8b751dbe7c | 519 | /* |
acarter2 | 0:4a8b751dbe7c | 520 | /read Record is the selected data which be passed in as a a string |
acarter2 | 0:4a8b751dbe7c | 521 | */ |
acarter2 | 0:4a8b751dbe7c | 522 | void printCurrentRecord(char displayString[], int length) |
acarter2 | 0:4a8b751dbe7c | 523 | { |
acarter2 | 0:4a8b751dbe7c | 524 | |
acarter2 | 0:4a8b751dbe7c | 525 | for(int i = 0; i < length - 1; i++){ |
acarter2 | 0:4a8b751dbe7c | 526 | |
acarter2 | 0:4a8b751dbe7c | 527 | const char letter = displayString[i]; |
acarter2 | 0:4a8b751dbe7c | 528 | printf('%c', letter); |
acarter2 | 0:4a8b751dbe7c | 529 | |
acarter2 | 0:4a8b751dbe7c | 530 | |
acarter2 | 0:4a8b751dbe7c | 531 | } |
acarter2 | 0:4a8b751dbe7c | 532 | |
acarter2 | 0:4a8b751dbe7c | 533 | char letter = displayString[length - 1]; |
acarter2 | 0:4a8b751dbe7c | 534 | //printf('%c\n',letter); |
acarter2 | 0:4a8b751dbe7c | 535 | |
acarter2 | 0:4a8b751dbe7c | 536 | |
acarter2 | 0:4a8b751dbe7c | 537 | } |
acarter2 | 0:4a8b751dbe7c | 538 | |
acarter2 | 0:4a8b751dbe7c | 539 | void deleteAll(BufferStartPointer* bufferStart, BufferEndPointer* bufferEnd){ |
acarter2 | 0:4a8b751dbe7c | 540 | |
acarter2 | 0:4a8b751dbe7c | 541 | while(bufferStart -> lock()){} |
acarter2 | 0:4a8b751dbe7c | 542 | bufferStart -> setBufferStartPointer(0); |
acarter2 | 0:4a8b751dbe7c | 543 | bufferStart -> unlock(); |
acarter2 | 0:4a8b751dbe7c | 544 | |
acarter2 | 0:4a8b751dbe7c | 545 | while(bufferEnd -> lock()){}; |
acarter2 | 0:4a8b751dbe7c | 546 | bufferEnd -> setBufferEndPointer(0); |
acarter2 | 0:4a8b751dbe7c | 547 | bufferEnd -> unlock(); |
acarter2 | 0:4a8b751dbe7c | 548 | |
acarter2 | 0:4a8b751dbe7c | 549 | |
acarter2 | 0:4a8b751dbe7c | 550 | // need the ram memory |
acarter2 | 0:4a8b751dbe7c | 551 | |
acarter2 | 0:4a8b751dbe7c | 552 | |
acarter2 | 0:4a8b751dbe7c | 553 | |
acarter2 | 0:4a8b751dbe7c | 554 | |
acarter2 | 0:4a8b751dbe7c | 555 | |
acarter2 | 0:4a8b751dbe7c | 556 | } |
acarter2 | 0:4a8b751dbe7c | 557 | |
acarter2 | 0:4a8b751dbe7c | 558 | /* |
acarter2 | 0:4a8b751dbe7c | 559 | /this is the fuction which update the the sample rate so the int to |
acarter2 | 0:4a8b751dbe7c | 560 | /update the value whoch might hange |
acarter2 | 0:4a8b751dbe7c | 561 | */ |
acarter2 | 0:4a8b751dbe7c | 562 | void updateSampleRate(double newSampleRate, SampleRate* sampleRate) |
acarter2 | 0:4a8b751dbe7c | 563 | { |
acarter2 | 0:4a8b751dbe7c | 564 | while(!sampleRate -> lock()){}; |
acarter2 | 0:4a8b751dbe7c | 565 | char outputString[20]; |
acarter2 | 0:4a8b751dbe7c | 566 | if(newSampleRate =>0.1 && newSampleRate =<60.0){ |
acarter2 | 0:4a8b751dbe7c | 567 | sampleRate -> setSampleRate(newSampleRate); |
acarter2 | 0:4a8b751dbe7c | 568 | outputString = 'UPDATE<' + sampleRate+ '>'; |
acarter2 | 0:4a8b751dbe7c | 569 | }else{ |
acarter2 | 0:4a8b751dbe7c | 570 | outputString = 'OUT OF RANGE'; |
acarter2 | 0:4a8b751dbe7c | 571 | } |
acarter2 | 0:4a8b751dbe7c | 572 | sampleRate -> unlock(); |
acarter2 | 0:4a8b751dbe7c | 573 | |
acarter2 | 0:4a8b751dbe7c | 574 | } |
acarter2 | 0:4a8b751dbe7c | 575 | |
acarter2 | 0:4a8b751dbe7c | 576 | /*/ |
acarter2 | 0:4a8b751dbe7c | 577 | /this is update the the log so see if the log if the the sample rate |
acarter2 | 0:4a8b751dbe7c | 578 | ozr not |
acarter2 | 0:4a8b751dbe7c | 579 | */ |
acarter2 | 0:4a8b751dbe7c | 580 | void updateLog(char logType[], TakeSample* takeSample) |
acarter2 | 0:4a8b751dbe7c | 581 | { |
acarter2 | 0:4a8b751dbe7c | 582 | char output[20]; |
acarter2 | 0:4a8b751dbe7c | 583 | |
acarter2 | 0:4a8b751dbe7c | 584 | while(!takeSample -> lock()){}(); |
acarter2 | 0:4a8b751dbe7c | 585 | if(logType[0] == 'N' || logType[0] == 'N'){ |
acarter2 | 0:4a8b751dbe7c | 586 | if(logType[1] == 'O' || logType[0] == 'o'){ |
acarter2 | 0:4a8b751dbe7c | 587 | takeSample -> setTakeSample(false); |
acarter2 | 0:4a8b751dbe7c | 588 | output ='Log<ON>'; |
acarter2 | 0:4a8b751dbe7c | 589 | } |
acarter2 | 0:4a8b751dbe7c | 590 | |
acarter2 | 0:4a8b751dbe7c | 591 | } |
acarter2 | 0:4a8b751dbe7c | 592 | |
acarter2 | 0:4a8b751dbe7c | 593 | if(logType[0] == 'Y' || logType[0] == 'y'){ |
acarter2 | 0:4a8b751dbe7c | 594 | if(logType[1] == 'E' || logType[0] == 'e'){ |
acarter2 | 0:4a8b751dbe7c | 595 | if(logType[2] == 'E' || logType[0] == 'e'){ |
acarter2 | 0:4a8b751dbe7c | 596 | takeSample -> setTakeSample(true); |
acarter2 | 0:4a8b751dbe7c | 597 | output ='Log<OFF>'; |
acarter2 | 0:4a8b751dbe7c | 598 | } |
acarter2 | 0:4a8b751dbe7c | 599 | } |
acarter2 | 0:4a8b751dbe7c | 600 | } |
acarter2 | 0:4a8b751dbe7c | 601 | takeSample -> unlock(); |
acarter2 | 0:4a8b751dbe7c | 602 | |
acarter2 | 0:4a8b751dbe7c | 603 | //need output tread |
acarter2 | 0:4a8b751dbe7c | 604 | |
acarter2 | 0:4a8b751dbe7c | 605 | } |
acarter2 | 0:4a8b751dbe7c | 606 | |
acarter2 | 0:4a8b751dbe7c | 607 | /* |
acarter2 | 0:4a8b751dbe7c | 608 | /tthis is update th date which the system will go from and with change |
acarter2 | 0:4a8b751dbe7c | 609 | / the date so that the records are set with the date. |
acarter2 | 0:4a8b751dbe7c | 610 | */ |
acarter2 | 0:4a8b751dbe7c | 611 | void updateDate(char newDate[]) |
acarter2 | 0:4a8b751dbe7c | 612 | { |
acarter2 | 0:4a8b751dbe7c | 613 | |
acarter2 | 0:4a8b751dbe7c | 614 | } |
acarter2 | 0:4a8b751dbe7c | 615 | |
acarter2 | 0:4a8b751dbe7c | 616 | /* |
acarter2 | 0:4a8b751dbe7c | 617 | /tthis is update th time which the system will go from and with change |
acarter2 | 0:4a8b751dbe7c | 618 | / the time so that the records are set with the date. |
acarter2 | 0:4a8b751dbe7c | 619 | */ |
acarter2 | 0:4a8b751dbe7c | 620 | void updateTime(char newTime[]) |
acarter2 | 0:4a8b751dbe7c | 621 | { |
acarter2 | 0:4a8b751dbe7c | 622 | |
acarter2 | 0:4a8b751dbe7c | 623 | } |
acarter2 | 0:4a8b751dbe7c | 624 | |
acarter2 | 0:4a8b751dbe7c | 625 | void updateDisplayState(SampleDisplay* sampleDisplay, char displayString[]){ |
acarter2 | 0:4a8b751dbe7c | 626 | |
acarter2 | 0:4a8b751dbe7c | 627 | char output[20]; |
acarter2 | 0:4a8b751dbe7c | 628 | |
acarter2 | 0:4a8b751dbe7c | 629 | while(!sampleDisplay -> lock()){}; |
acarter2 | 0:4a8b751dbe7c | 630 | if(displayString[0] == 'N' || displayString[0] == 'N'){ |
acarter2 | 0:4a8b751dbe7c | 631 | if(displayString[1] == 'O' || displayString[1] == 'o'){ |
acarter2 | 0:4a8b751dbe7c | 632 | sampleDisplay -> setDisplay(false); |
acarter2 | 0:4a8b751dbe7c | 633 | output ='SAMPLING<ON>'; |
acarter2 | 0:4a8b751dbe7c | 634 | } |
acarter2 | 0:4a8b751dbe7c | 635 | |
acarter2 | 0:4a8b751dbe7c | 636 | } |
acarter2 | 0:4a8b751dbe7c | 637 | |
acarter2 | 0:4a8b751dbe7c | 638 | if(displayString[0] == 'Y' || displayString[0] == 'y'){ |
acarter2 | 0:4a8b751dbe7c | 639 | if(displayString[1] == 'E' || displayString[0] == 'e'){ |
acarter2 | 0:4a8b751dbe7c | 640 | if(displayString[2] == 'E' || displayString[0] == 'e'){ |
acarter2 | 0:4a8b751dbe7c | 641 | sampleDisplay -> setDisplay(true); |
acarter2 | 0:4a8b751dbe7c | 642 | output ='SAMPLING<OFF>'; |
acarter2 | 0:4a8b751dbe7c | 643 | } |
acarter2 | 0:4a8b751dbe7c | 644 | } |
acarter2 | 0:4a8b751dbe7c | 645 | } |
acarter2 | 0:4a8b751dbe7c | 646 | sampleDisplay -> unlock(); |
acarter2 | 0:4a8b751dbe7c | 647 | |
acarter2 | 0:4a8b751dbe7c | 648 | } |
acarter2 | 0:4a8b751dbe7c | 649 | |
acarter2 | 0:4a8b751dbe7c | 650 | void readInput(){ |
acarter2 | 0:4a8b751dbe7c | 651 | |
acarter2 | 0:4a8b751dbe7c | 652 | char ch; |
acarter2 | 0:4a8b751dbe7c | 653 | char input[100]; |
acarter2 | 0:4a8b751dbe7c | 654 | int index = 0; |
acarter2 | 0:4a8b751dbe7c | 655 | do |
acarter2 | 0:4a8b751dbe7c | 656 | { |
acarter2 | 0:4a8b751dbe7c | 657 | ch = getchar(); |
acarter2 | 0:4a8b751dbe7c | 658 | if(ch != EOF || ch != '\n'|| ch != ' '){ |
acarter2 | 0:4a8b751dbe7c | 659 | input[index] = ch; |
acarter2 | 0:4a8b751dbe7c | 660 | index++; |
acarter2 | 0:4a8b751dbe7c | 661 | } |
acarter2 | 0:4a8b751dbe7c | 662 | |
acarter2 | 0:4a8b751dbe7c | 663 | }while( ch != '\n' || ch != EOF); |
acarter2 | 0:4a8b751dbe7c | 664 | |
acarter2 | 0:4a8b751dbe7c | 665 | if(index > 1){ |
acarter2 | 0:4a8b751dbe7c | 666 | |
acarter2 | 0:4a8b751dbe7c | 667 | //Thread stringMutipluation; |
acarter2 | 0:4a8b751dbe7c | 668 | |
acarter2 | 0:4a8b751dbe7c | 669 | //stringMutipluation =7 new Thread(sortString); |
acarter2 | 0:4a8b751dbe7c | 670 | |
acarter2 | 0:4a8b751dbe7c | 671 | |
acarter2 | 0:4a8b751dbe7c | 672 | } |
acarter2 | 0:4a8b751dbe7c | 673 | } |
acarter2 | 0:4a8b751dbe7c | 674 | |
acarter2 | 0:4a8b751dbe7c | 675 | |
acarter2 | 0:4a8b751dbe7c | 676 | // setting up gobal treads to be uses in the program |
acarter2 | 0:4a8b751dbe7c | 677 | //Thread producter(); |
acarter2 | 0:4a8b751dbe7c | 678 | //Thread customer; |
acarter2 | 0:4a8b751dbe7c | 679 | //Thread tempTread; |
acarter2 | 0:4a8b751dbe7c | 680 | //Thread humTread; |
acarter2 | 0:4a8b751dbe7c | 681 | //Thread pressTread(; |
acarter2 | 0:4a8b751dbe7c | 682 | //Thread displayTread; |
acarter2 | 0:4a8b751dbe7c | 683 | //Thread sampleTread; |
acarter2 | 0:4a8b751dbe7c | 684 | Thread inputTread; |
acarter2 | 0:4a8b751dbe7c | 685 | Thread deleteRecordTread(deleteRecord); |
acarter2 | 0:4a8b751dbe7c | 686 | //Thread setDateTread; |
acarter2 | 0:4a8b751dbe7c | 687 | //Thread setTimeTread; |
acarter2 | 0:4a8b751dbe7c | 688 | //Thread dsiplaySelectedRecord; |
acarter2 | 0:4a8b751dbe7c | 689 | //Thread updateTakeDisplay; |
acarter2 | 0:4a8b751dbe7c | 690 | //Thread updateTreadTiming; |
acarter2 | 0:4a8b751dbe7c | 691 | //Thread stringMutipluation; |
acarter2 | 0:4a8b751dbe7c | 692 | |
acarter2 | 0:4a8b751dbe7c | 693 | |
acarter2 | 0:4a8b751dbe7c | 694 | PwmOut mypwm(PWM_OUT); |
acarter2 | 0:4a8b751dbe7c | 695 | |
acarter2 | 0:4a8b751dbe7c | 696 | DigitalOut myled(LED1); |
acarter2 | 0:4a8b751dbe7c | 697 | |
acarter2 | 0:4a8b751dbe7c | 698 | int main() { |
acarter2 | 0:4a8b751dbe7c | 699 | |
acarter2 | 0:4a8b751dbe7c | 700 | //loop counter |
acarter2 | 0:4a8b751dbe7c | 701 | int i; |
acarter2 | 0:4a8b751dbe7c | 702 | |
acarter2 | 0:4a8b751dbe7c | 703 | int argc; |
acarter2 | 0:4a8b751dbe7c | 704 | |
acarter2 | 0:4a8b751dbe7c | 705 | //verify correct number of arguments passed into buffer |
acarter2 | 0:4a8b751dbe7c | 706 | if(argc != 4){ |
acarter2 | 0:4a8b751dbe7c | 707 | fprint(stderr, "USAGE:./main.out <INT> <INT> <INT>\n"); |
acarter2 | 0:4a8b751dbe7c | 708 | } |
acarter2 | 0:4a8b751dbe7c | 709 | |
acarter2 | 0:4a8b751dbe7c | 710 | int mainSleepTime = atoi(argv[1]);//time in seconds for main to sleep |
acarter2 | 0:4a8b751dbe7c | 711 | int numProd = atoi(argv[2]); //number of producer threads |
acarter2 | 0:4a8b751dbe7c | 712 | int numCons = atoi(argv[3]); //number of consumer threads |
acarter2 | 0:4a8b751dbe7c | 713 | |
acarter2 | 0:4a8b751dbe7c | 714 | //initialise buffer data |
acarter2 | 0:4a8b751dbe7c | 715 | initialiseBufferData(); |
acarter2 | 0:4a8b751dbe7c | 716 | |
acarter2 | 0:4a8b751dbe7c | 717 | //create producer threads |
acarter2 | 0:4a8b751dbe7c | 718 | for(i = 0; i < numProd; i++){ |
acarter2 | 0:4a8b751dbe7c | 719 | pthread_create(&tid, &attr, producer, NULL); |
acarter2 | 0:4a8b751dbe7c | 720 | |
acarter2 | 0:4a8b751dbe7c | 721 | } |
acarter2 | 0:4a8b751dbe7c | 722 | |
acarter2 | 0:4a8b751dbe7c | 723 | //create cinsumer threads |
acarter2 | 0:4a8b751dbe7c | 724 | for(i = 0; i < numProd; i++){ |
acarter2 | 0:4a8b751dbe7c | 725 | pthread_create(&tid, &attr, consumer, NULL); |
acarter2 | 0:4a8b751dbe7c | 726 | } |
acarter2 | 0:4a8b751dbe7c | 727 | |
acarter2 | 0:4a8b751dbe7c | 728 | //sleep for specified amount of time in ms |
acarter2 | 0:4a8b751dbe7c | 729 | sleep(mainSleepTime); |
acarter2 | 0:4a8b751dbe7c | 730 | |
acarter2 | 0:4a8b751dbe7c | 731 | SampleRate sampleRate = SampleRate(); |
acarter2 | 0:4a8b751dbe7c | 732 | TakeSample takeSample = TakeSample(); |
acarter2 | 0:4a8b751dbe7c | 733 | SampleTemp sampleTemp = SampleTemp(); |
acarter2 | 0:4a8b751dbe7c | 734 | SampleHumitaty sampleHumitaty = SampleHumitaty(); |
acarter2 | 0:4a8b751dbe7c | 735 | SamplePressure samplePressure = SamplePressure(); |
acarter2 | 0:4a8b751dbe7c | 736 | SampleDisplay sampleDisplay = SampleDisplay(); |
acarter2 | 0:4a8b751dbe7c | 737 | BufferStartPointer bufferStartPointer = BufferStartPointer(); |
acarter2 | 0:4a8b751dbe7c | 738 | BufferEndPointer bufferEndPointer = BufferEndPointer(); |
acarter2 | 0:4a8b751dbe7c | 739 | |
acarter2 | 0:4a8b751dbe7c | 740 | |
acarter2 | 0:4a8b751dbe7c | 741 | while(1) { |
acarter2 | 0:4a8b751dbe7c | 742 | |
acarter2 | 0:4a8b751dbe7c | 743 | readInput(); |
acarter2 | 0:4a8b751dbe7c | 744 | |
acarter2 | 0:4a8b751dbe7c | 745 | |
acarter2 | 0:4a8b751dbe7c | 746 | myled = !myled; |
acarter2 | 0:4a8b751dbe7c | 747 | wait(1); |
acarter2 | 0:4a8b751dbe7c | 748 | } |
acarter2 | 0:4a8b751dbe7c | 749 | } |
acarter2 | 0:4a8b751dbe7c | 750 |