Lizzy project
Dependencies: aconno_I2C Lis2dh12 adc52832_common aconno_SEGGER_RTT
Diff: tasks/tasks.cpp
- Revision:
- 8:7ba4f82de9b6
- Child:
- 9:aef8bb3d13ed
--- /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

