Bmag incl gps rettelse

Dependencies:   mbed WDT MODSERIAL BME280

Branch:
MbedBMAGThrRev
Revision:
27:efd122db8855
Parent:
24:099df3fa2b13
Child:
28:ed0d29f63b55
--- a/main.h	Tue Aug 15 13:41:07 2017 +0000
+++ b/main.h	Wed Aug 23 13:22:54 2017 +0000
@@ -1,5 +1,6 @@
 #include <string>
 #include "mbed.h"
+#include "rtos.h"
 #include <Ticker.h>
 #include "MODSERIAL/MODSERIAL.h"
 #include "NMEA/NMEA.h"
@@ -7,7 +8,6 @@
 #include "WDT/WDT.h"
 #include "SPS/SPS.h"
 #include "BMAG/BMAG.h"
-#include "EA_OLED/EA_OLED.h"
 #include "ErrorHandler/ErrorHandler.h"
 
 #define FWSRCVERSION "x"
@@ -37,9 +37,6 @@
 //BMAG Rx callback prototype
 void bmagrxCallback(MODSERIAL_IRQ_INFO *q);
 
-//EA_OLED display
-static EA_OLED display;
-
 //GPS NMEA Parser
 static NMEA gpsNMEA;
 
@@ -47,6 +44,117 @@
 static BMAG magParser;
 
 
+//EA_OLED display
+Thread thr_writelines;
+SPI * spiptr;
+DigitalOut * csptr;
+string l1;
+string l2;
+    
+void init_config(char c){
+    *csptr = 0; //chip select to start data transmission    
+    spiptr->write(c);
+    *csptr = 1; //chip select to end data transmission
+    wait_us(2);       
+};
+
+    
+void EA_OLED(){
+    //clear l1 and l2
+    
+    l1 = "";
+    l2 = "";
+    
+    spiptr = new SPI(p5, p6, p7);
+    csptr = new DigitalOut(p8); 
+    
+    *csptr = 1; //high at idle 
+    
+    spiptr->format(10,3); //10bit, high steady state clock
+    spiptr->frequency(1000000); //1MHz spi clock 
+    
+    
+    //function set european chararacter set
+    init_config(0x39);
+    //display off
+    init_config(0x08);
+    //entry mode set increment cursor by 1 not shifting display
+    init_config(0x06);
+    //Character mode and internel power on
+    init_config(0x17);
+    //clear display
+    init_config(0x01);
+    //return home
+    init_config(0x02);
+    //display on
+    init_config(0x0C);        
+    wait_ms(10); //Time to stabilize (wont work without)
+    
+     
+};
 
 
+void clear_display(){
+    //clear display
+    init_config(0x01);
+    Thread::wait(1);
+    Thread::yield();
+    while(1){
+        Thread::wait(2000);
+        Thread::yield();       
+    }
+       
+};
 
+void clear_display_waiting(){
+    //clear display
+    init_config(0x01);
+    wait_ms(1);
+       
+};
+
+void write_lines(){
+        
+        //cursor return
+        *csptr = 0; //chip select to start data transmission    
+        spiptr->write(0x02);
+        *csptr = 1; //chip select to end data transmission
+        Thread::wait(1);
+        
+        //write l1
+        for(int i = 0; i < strlen(l1.c_str()); i++){
+            *csptr = 0; //chip select to start data transmission
+            spiptr->write(0x200 | l1[i]); //add 0x02 for character transmission
+            *csptr = 1; //chip select to end data transmission
+            Thread::wait(1);        
+        }
+               
+        //cursor return + cursor pos set
+        init_config(0x02);
+        Thread::wait(1);
+        for(int i = 0; i < 64; i++){
+
+            *csptr = 0; //chip select to start data transmission    
+            spiptr->write(0x14);
+            *csptr = 1; //chip select to end data transmission
+            Thread::wait(1);           
+        }   
+        
+        
+        //write l2
+        for(int i = 0; i < strlen(l2.c_str()); i++){
+            *csptr = 0; //chip select to start data transmission
+            spiptr->write(0x200 | l2[i]); //add 0x02 for character transmission
+            *csptr = 1; //chip select to end data transmission
+            Thread::wait(1);        
+        }
+        
+        Thread::yield();        
+        while(1){
+            Thread::wait(2000);
+            Thread::yield();     
+        }
+        
+                 
+};
+