update code

Dependencies:   X_NUCLEO_IKS01A1 mbed-rtos mbed

Revision:
1:4cd93767691a
Parent:
0:4a8b751dbe7c
Child:
2:c5fb78148ccc
--- a/main.cpp	Mon May 02 15:26:28 2016 +0000
+++ b/main.cpp	Tue May 03 10:39:27 2016 +0000
@@ -1,6 +1,6 @@
 #include <stdlib.h>
-#include <pthread.h>
-#include <semaphore.h>
+//#include <pthread.h>
+//#include <semaphore.h>
 #include "buffer.h"
 
 #include "mbed.h"
@@ -26,36 +26,37 @@
 static TempSensor *temp_sensor1 = mems_expansion_board->ht_sensor;
 static TempSensor *temp_sensor2 = mems_expansion_board->pt_sensor;
 
-typedf int buffer_item;
-#define BUFFER_SIZE 75
+/*
+/ this is will make sure the contant valid of how much data will be sorted or not as this
+/could help when the data range.
+*/
+const int amountOfSample = 150;
+
+
+const int BUFFER_SIZE = 75;
 
 // mutex lock
-pthread_mutex_t mutex;
+Mutex *bufferLock;
 
-//semaphores
-sem_t full, empty;
+
 
 //buffer
-buffer_item buffer[BUFFER_SIZE];
+char buffer_item[BUFFER_SIZE][200];
 
-//buffer counter
-int counter;
 
-pthread_t tid; //thread id
+Thread  tid; //thread id
 pthread_attr_t attr; //set of thread attributes
 
 void *producer(void *param); //producer thread
 void *consumer(void *param); //consumer thread
 
-volatile  char memorySample[150][200];
+
+
+volatile char memorySample[amountOfSample][200];
 
 char values[20][20];
 
-/*
-/ this is will make sure the contant valid of how much data will be sorted or not as this
-/could help when the data range.
-*/
-int amountOfSample = 150;
+
 
 
 uint8_t id;
@@ -254,12 +255,20 @@
         int getBufferStartPointer (void)
         {
              return bufferStartPointer;
+             key = 1;
         } 
         void setBufferStartPointer (int newBufferStartPointer ){
             
             bufferStartPointer = newBufferStartPointer;
             
-        }       
+        } 
+        void plusOne(void){ 
+            if(bufferStartPointer + 1 == BUFFER_SIZE){
+                bufferStartPointer = 0;
+            }else{
+                bufferStartPointer = bufferStartPointer + 1;
+                }
+        }    
 };
 
 
@@ -271,6 +280,7 @@
         */
         int bufferEndPointer;
         
+        
         BufferEndPointer(){
             bufferEndPointer = 0;
         }
@@ -283,7 +293,61 @@
             
             bufferEndPointer = newBufferEndPointer;
             
-        }       
+        } 
+        
+          void plusOne(void){ 
+            if(bufferEndPointer + 1 == BUFFER_SIZE){
+                bufferEndPointer = 0;
+            }else{
+                bufferEndPointer = bufferEndPointer + 1;
+                }
+        }        
+};
+
+class BufferSize: public KeyLocks
+{
+    
+    public:
+            int bufferSize;
+            Semaphore *EmptyBuffer;
+            Semaphore *fullBuffer;
+            
+            BufferSize(){
+                EmptyBuffer = new Semaphore(0);
+                sapceAvailable = new Semaphore(BUFFER_SIZE);
+                bufferSize = 0;
+                
+            }
+            
+            void increaseBufferSize(){
+                bufferSize = bufferSize + 1;
+            }
+            
+            void deincreaseBufferSize(){
+                bufferSize = bufferSize - 1;
+            }
+            
+            int getBufferSize(){
+                return bufferSize;
+            }
+            
+            int getEmptyBuffer(){
+                return EmptyBuffer -> wait();
+            }
+            
+            int getFullBuffer(){
+                return fullBuffer -> wait();
+            }
+            
+            void releaseEmptyBuffer(){
+                return EmptyBuffer -> release();
+            }
+            
+            void releaseFullBuffer(){
+                return fullBuffer -> release();
+            }
+    
+    
 };
 
 void initialiseBufferData(){
@@ -304,95 +368,39 @@
 }
 
 //producer thread
-void *producer(void *param){
-   buffer_item item;
+void *producer(char newItem[], BufferEndPointer *endPointer, BufferSize *bufferSize){
+   
+   while(!bufferSize->lock()){};
    
-   while(TRUE){
+   int size = bufferSize -> getBufferSize();
+   
+   while(size < BUFFER_SIZE){
        //sleep for random amount of time
-       int rNum = rand() / RAND_DIVISOR;
-       sleep(rNum);
-       
-       //generate random number
-       item = rand();
        
-       //get empty lock
-       sem_wait(&empty);
-       //get mutex lock
-       pthread_mutex_lock(&mutex);
+       //get the buffer
+       bufferLock->lock(); 
+
+           
+        while(!endPointer->lock()){};
        
-       if(insert_item(item)){
-           fprint(stderr, "Producer report error condition\n");
-        }
-        else{
-            printf("producer produced %d\n", item);
-        }
-        //release mutex lock
-        pthread_mutex_unlock(&mutex);
-        //signal full
-        sem_post(&full);
+        endPointer->plusOne();
+        buffer_item[endPointer->getBufferEndPointer()] = newItem[];
+        endPointer->unlock();
+        bufferLock->unlock();
+        while(!bufferSize->lock()){};
+        bufferSize ->increaseBufferSize();
+        size = bufferSize -> getBufferSize();       
+           
+        
     }
 }
 
 //consumer thread
-void *consumer(void {
-   buffer_item item;
+void *consumer(void *param) {
    
-   while(TRUE){
-       //sleep for random amount of time
-       int rNum = rand() / RAND_DIVISOR;
-       sleep(rNum);
-       
-       //get full lock
-       sem_wait(&full);
-       //get mutex lock
-       pthread_mutex_lock(&mutex);
-       if(remove_item(&item)){
-           fprint(stderr, "Consumer report error condition\n");
-        }
-        else{
-            printf("Consumer consumer %d\n", item);
-        }
-        
-        //release mutex ock
-        pthread_mutex_unlock(&mutex);
-        //signal empty
-        sem_post(&empty);
-    }
+  
 }
 
-//add item to buffer
-int insert_item(buffer_item item) {
-    //when buffer not full add item and increase counter
-    if(counter < BUFFER_SIZE){
-        buffer[counter] = item;
-        counter++
-        return 0;
-    }
-    else{ //buffer full error
-        return -1
-    }
-}
-
-//remove item from buffer
-int remove_item(buffer_item *item){
-    //when buffer not empty remove item and decrease counter
-    if(counter > 0){
-        *item = buffer[(counter-1)];
-        counter--;
-        return 0;
-    }
-    else{ //empty buffer error
-        return -1;
-    }
-}
-
-
-
-   
-    
-
-
-
 //this is setting all the function for the treads in the program
 
 
@@ -736,6 +744,7 @@
     SampleDisplay sampleDisplay = SampleDisplay();
     BufferStartPointer bufferStartPointer = BufferStartPointer();
     BufferEndPointer bufferEndPointer = BufferEndPointer();
+    bufferLock = new Mutex();
     
     
     while(1) {