Lizzy project

Dependencies:   aconno_I2C Lis2dh12 adc52832_common aconno_SEGGER_RTT

Revision:
8:7ba4f82de9b6
Child:
9:aef8bb3d13ed
diff -r ac8277568115 -r 7ba4f82de9b6 tasks/tasks.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tasks/tasks.cpp	Tue Mar 20 15:13:51 2018 +0000
@@ -0,0 +1,209 @@
+#include "main.h"
+#include "bsp_buzz.h"
+#include "bsp_led.h"
+#include "aconno_ble.h"
+#include "tasks.h"
+#include "GapAdvertisingData.h"
+
+
+DigitalOut redLed(RED_LED_PIN);
+#if NANO_MODULE == 0
+DigitalOut greenLed(GREEN_LED_PIN);
+DigitalOut blueLed(BLUE_LED_PIN);
+#endif
+
+Buzz buzzer(NRF_PWM2, BUZZER_PIN);
+
+static advertising_packet advertisementPacket;
+static GapAdvertisingData adv_data = GapAdvertisingData();
+
+
+#if TEST_LEDS_BUZZ
+Ticker test_ticker;
+#endif
+
+
+void tasks_init()
+{
+    redLed = 1;
+    greenLed = 1;
+    blueLed = 1;
+    
+#if TEST_LEDS_BUZZ
+    test_ticker.attach(led_tick, 0.5);
+#endif
+}
+
+#if TEST_LEDS_BUZZ
+void buzz_tick()
+{
+    static int start = 1;
+    
+    if (start)
+    {
+        buzzer.enable();
+        start = 0;
+    }
+    else
+    {
+        buzzer.disable();
+        start = 1;
+        led_tick();
+        test_ticker.detach();
+        test_ticker.attach(led_tick, 0.5);
+    }
+}
+
+void led_tick()
+{
+    static int count = 0;
+    
+    switch(count)
+    {
+        case 0:
+            redLed = 0;
+            break;
+            
+        case 1:
+            redLed = 1;
+            greenLed = 0;
+            break;
+            
+        case 2:
+            greenLed = 1;
+            blueLed = 0;
+            break;
+        
+        default:
+            blueLed = 1;
+            count = -1;
+            buzz_tick();
+            test_ticker.detach();
+            test_ticker.attach(buzz_tick, BUZZ_TIME_S);
+    }
+    
+    count++;
+}
+#endif
+
+void measureF(Lis2dh12 *mems)
+{
+    while (1)
+    {
+        advertisementPacket.header = APPLICATION_ID;
+        advertisementPacket.type = 0x00;
+        advertisementPacket.gyroscope[0] = (int16_t)0;
+        advertisementPacket.gyroscope[1] = (int16_t)0;
+        advertisementPacket.gyroscope[2] = (int16_t)0;
+        advertisementPacket.magnetometer[0] = (int16_t)0;
+        advertisementPacket.magnetometer[1] = (int16_t)0;
+        advertisementPacket.magnetometer[2] = (int16_t)0;
+        
+        
+        advertisementPacket.accelerometer[0] = (int16_t)mems->readXAxis();
+        advertisementPacket.accelerometer[1] = (int16_t)mems->readYAxis();
+        advertisementPacket.accelerometer[2] = (int16_t)mems->readZAxis();
+        
+        //advertisementPacket.acc_lsb_value = 0xC000;
+        advertisementPacket.acc_lsb_value = 0x0100;
+        
+        updateServiceT.signal_set(MEAS_DONE);
+        bleT.signal_set(MEAS_DONE);
+        
+        wait_ms(MEASURE_INTERVAL_MS);
+    }
+}
+
+void updateServiceF()
+{
+    while (1)
+    {
+        Thread::signal_wait(MEAS_DONE);
+        updateServiceT.signal_clr(MEAS_DONE);
+        
+        lizzy_service->set_acc_data(advertisementPacket.accelerometer);
+    }
+}
+
+void updateBuzzLedsF()
+{
+    while (1)
+    {
+        Thread::signal_wait(UPDATE_BUZZ_LEDS);
+        updateBuzzLedsT.signal_clr(UPDATE_BUZZ_LEDS);
+        
+        if (buzzer.get_state() != (lizzy_service->get_buzz_state()))
+        {
+            if (lizzy_service->get_buzz_state())
+                buzzer.enable();
+            else
+                buzzer.disable();
+        }
+        if (!redLed != (lizzy_service->get_red_state()))
+        {
+            redLed = !(lizzy_service->get_red_state());
+        }
+        if (!greenLed != (lizzy_service->get_green_state()))
+        {
+            greenLed = !(lizzy_service->get_green_state());
+        }
+        if (!blueLed != (lizzy_service->get_blue_state()))
+        {
+            blueLed = !(lizzy_service->get_blue_state());
+        }
+    }
+}
+
+void bleF(BLE *ble)
+{
+    while(true)
+    {
+        Thread::signal_wait(MEAS_DONE);
+        bleT.signal_clr(MEAS_DONE);
+        
+        
+        printf("%6d\t", advertisementPacket.accelerometer[0]);
+        printf("%6d\t", advertisementPacket.accelerometer[1]);
+        printf("%6d\r\n", advertisementPacket.accelerometer[2]);
+
+        //updatePayload(ble, &advertisementPacket);
+        
+        /* setup advertising */
+        
+        
+        /*
+        GapAdvertisingData advetisementData = GapAdvertisingData();
+        advetisementData = ble->getAdvertisingData();
+        advetisementData.updateData(advetisementData.MANUFACTURER_SPECIFIC_DATA, (uint8_t *)&advertisementPacket, sizeof(advertising_packet));
+        ble->setAdvertisingData(advetisementData);
+        */
+        adv_data = ble->getAdvertisingData();
+        adv_data.updateData(adv_data.MANUFACTURER_SPECIFIC_DATA, (uint8_t *)&advertisementPacket, sizeof(advertisementPacket));
+        ble->setAdvertisingData(adv_data);
+        
+        
+        //printf("Ble advertisement is ON.\r\n");
+        
+        #if DEBUG_LED
+            redLed = 0;
+        #endif
+        //ble->gap().startAdvertising();
+        //wait_ms(1000);
+        
+        //wait_ms(MEASURE_INTERVAL_MS);
+        //wait_ms(1000);
+        
+        //printf("Ble advertisement is OFF.\r\n\r\n");
+        #if DEBUG_LED
+            redLed = 1;
+        #endif
+        //ble->gap().stopAdvertising();
+        /*
+        GapAdvertisingData advetisementData = GapAdvertisingData();
+        advetisementData = ble->getAdvertisingData();
+        advetisementData.updateData(advetisementData.MANUFACTURER_SPECIFIC_DATA, (uint8_t *)&advertisementPacket, sizeof(advertising_packet));
+        ble->setAdvertisingData(advetisementData);
+        */
+        //wait_ms(100);
+    }
+}
\ No newline at end of file