Official reference client implementation for Cumulocity SmartREST on u-blox C027.
Dependencies: C027_Support C12832 LM75B MMA7660 MbedSmartRest mbed-rtos mbed
Fork of MbedSmartRestMain by
Diff: io/DeviceFeedback.cpp
- Revision:
- 65:a62dbef2f924
- Child:
- 67:c360a2b2c948
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/io/DeviceFeedback.cpp Thu Oct 30 13:38:20 2014 +0000 @@ -0,0 +1,81 @@ +#include "DeviceFeedback.h" +#include <stdlib.h> +#include <string.h> + +#define MSG_CLOSE_RELAY 1 +#define MSG_OPEN_RELAY 2 + +DeviceFeedback::DeviceFeedback(PwmOut speaker) : + _speaker(speaker), + _thread(DeviceFeedback::thread_func, this) +{ +} + +void DeviceFeedback::closeRelay() +{ + uint8_t *msg; + + msg = _mail.alloc(); + *msg = MSG_CLOSE_RELAY; + _mail.put(msg); +} + +void DeviceFeedback::openRelay() +{ + uint8_t *msg; + + msg = _mail.alloc(); + *msg = MSG_OPEN_RELAY; + _mail.put(msg); +} + +void DeviceFeedback::thread() +{ + osEvent evt; uint8_t *msg; + bool relayState = false; + + while (true) { + if ((evt = _mail.get(1000)).status == osEventMail) { + msg = (uint8_t*)evt.value.p; + switch (*msg) { + case MSG_CLOSE_RELAY: + if (!relayState) { + relayState = true; + for (float i=2000.0; i<10000.0; i+=100) { + _speaker.period(1.0/i); + _speaker = 0.5; + Thread::wait(20); + } + _speaker = 0.0; + } + break; + case MSG_OPEN_RELAY: + if (relayState) { + relayState = false; + for (float i=10000.0; i>2000.0; i-=100) { + _speaker.period(1.0/i); + _speaker = 0.5; + Thread::wait(20); + } + _speaker = 0.0; + } + break; + } + _mail.free(msg); + } + + if (relayState) { + _speaker.period(1.0/10000); + _speaker = 0.5; + Thread::wait(20); + _speaker = 0.0; + } + } +} + +void DeviceFeedback::thread_func(void const *arg) +{ + DeviceFeedback *that; + that = (DeviceFeedback*)arg; + that->thread(); +}