First draft HMC5883 magnetometer sensor using physical quantities, outputting via serial port using std::cout on mbed os 5

Revision:
11:de7c9ae7ef65
Parent:
10:75c8ce89aeb7
--- a/main.cpp	Thu Mar 26 21:59:18 2020 +0000
+++ b/main.cpp	Thu Mar 26 22:58:21 2020 +0000
@@ -2,31 +2,19 @@
 #include "mbed.h"
 #include "magnetometer.h"
 
-namespace {   
-
-    // do something with magnetometer output
-    void callback(quan::three_d::vect<quan::magnetic_flux_density::uT> const & v)
-    {
-        std::cout << "val = " << v << '\n';
-    }
-    
-}// namespace
-
 void loop_forever(std::string const & str);
 
-int main()
+void mag_service()
 {
-    DigitalOut led2(LED2,1);
-    std::cout << "magnetometer test\n";
+    std::cout << "magnetometer service\n";
 
     if ( !mag_init()){
         loop_forever("failed to init magnetometer\n");
     }
     
     uint64_t constexpr update_rate_ms = 20U;
-        
-    auto prev_led = Kernel::get_ms_count();
-    auto now = Kernel::get_ms_count();
+
+    auto wake = Kernel::get_ms_count();
 
     for (;;){
         
@@ -38,16 +26,37 @@
         
         quan::three_d::vect<quan::magnetic_flux_density::uT> v;
         if (mag_read(v)){
-            callback(v);
-        }
-        
-        if ( (now - prev_led) >= 500U){
-            prev_led = now;
-            led2 = (led2 == 0) ? 1: 0;
+            std::cout << "val = " << v << '\n';
         }
-        
-        auto const next_wake = now + update_rate_ms;
-        ThisThread::sleep_until(next_wake);
-        now = next_wake;
+      
+        wake += update_rate_ms;
+        ThisThread::sleep_until(wake);
     }
+}
+
+void led_blink_service()
+{
+    DigitalOut led(LED2,1);
+    
+    std::cout << "Blink service\n";
+    
+    uint64_t constexpr update_rate_ms = 500U;
+    auto wake = Kernel::get_ms_count();
+    for (;;){
+        wake += update_rate_ms;
+        ThisThread::sleep_until(wake);
+        led = ( led == 0) ? 1: 0;
+    }
+}
+
+int main()
+{
+    Thread magThread;
+    magThread.start(mag_service);
+    
+    Thread blinkThread;
+    blinkThread.start(led_blink_service);
+    
+    for (;;){;}
+    
 }
\ No newline at end of file