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 Vincent Wochnik

Committer:
vwochnik
Date:
Thu Oct 30 13:38:20 2014 +0000
Revision:
65:a62dbef2f924
Child:
67:c360a2b2c948
operation support

Who changed what in which revision?

UserRevisionLine numberNew contents of line
vwochnik 65:a62dbef2f924 1 #include "DeviceFeedback.h"
vwochnik 65:a62dbef2f924 2 #include <stdlib.h>
vwochnik 65:a62dbef2f924 3 #include <string.h>
vwochnik 65:a62dbef2f924 4
vwochnik 65:a62dbef2f924 5 #define MSG_CLOSE_RELAY 1
vwochnik 65:a62dbef2f924 6 #define MSG_OPEN_RELAY 2
vwochnik 65:a62dbef2f924 7
vwochnik 65:a62dbef2f924 8 DeviceFeedback::DeviceFeedback(PwmOut speaker) :
vwochnik 65:a62dbef2f924 9 _speaker(speaker),
vwochnik 65:a62dbef2f924 10 _thread(DeviceFeedback::thread_func, this)
vwochnik 65:a62dbef2f924 11 {
vwochnik 65:a62dbef2f924 12 }
vwochnik 65:a62dbef2f924 13
vwochnik 65:a62dbef2f924 14 void DeviceFeedback::closeRelay()
vwochnik 65:a62dbef2f924 15 {
vwochnik 65:a62dbef2f924 16 uint8_t *msg;
vwochnik 65:a62dbef2f924 17
vwochnik 65:a62dbef2f924 18 msg = _mail.alloc();
vwochnik 65:a62dbef2f924 19 *msg = MSG_CLOSE_RELAY;
vwochnik 65:a62dbef2f924 20 _mail.put(msg);
vwochnik 65:a62dbef2f924 21 }
vwochnik 65:a62dbef2f924 22
vwochnik 65:a62dbef2f924 23 void DeviceFeedback::openRelay()
vwochnik 65:a62dbef2f924 24 {
vwochnik 65:a62dbef2f924 25 uint8_t *msg;
vwochnik 65:a62dbef2f924 26
vwochnik 65:a62dbef2f924 27 msg = _mail.alloc();
vwochnik 65:a62dbef2f924 28 *msg = MSG_OPEN_RELAY;
vwochnik 65:a62dbef2f924 29 _mail.put(msg);
vwochnik 65:a62dbef2f924 30 }
vwochnik 65:a62dbef2f924 31
vwochnik 65:a62dbef2f924 32 void DeviceFeedback::thread()
vwochnik 65:a62dbef2f924 33 {
vwochnik 65:a62dbef2f924 34 osEvent evt; uint8_t *msg;
vwochnik 65:a62dbef2f924 35 bool relayState = false;
vwochnik 65:a62dbef2f924 36
vwochnik 65:a62dbef2f924 37 while (true) {
vwochnik 65:a62dbef2f924 38 if ((evt = _mail.get(1000)).status == osEventMail) {
vwochnik 65:a62dbef2f924 39 msg = (uint8_t*)evt.value.p;
vwochnik 65:a62dbef2f924 40 switch (*msg) {
vwochnik 65:a62dbef2f924 41 case MSG_CLOSE_RELAY:
vwochnik 65:a62dbef2f924 42 if (!relayState) {
vwochnik 65:a62dbef2f924 43 relayState = true;
vwochnik 65:a62dbef2f924 44 for (float i=2000.0; i<10000.0; i+=100) {
vwochnik 65:a62dbef2f924 45 _speaker.period(1.0/i);
vwochnik 65:a62dbef2f924 46 _speaker = 0.5;
vwochnik 65:a62dbef2f924 47 Thread::wait(20);
vwochnik 65:a62dbef2f924 48 }
vwochnik 65:a62dbef2f924 49 _speaker = 0.0;
vwochnik 65:a62dbef2f924 50 }
vwochnik 65:a62dbef2f924 51 break;
vwochnik 65:a62dbef2f924 52 case MSG_OPEN_RELAY:
vwochnik 65:a62dbef2f924 53 if (relayState) {
vwochnik 65:a62dbef2f924 54 relayState = false;
vwochnik 65:a62dbef2f924 55 for (float i=10000.0; i>2000.0; i-=100) {
vwochnik 65:a62dbef2f924 56 _speaker.period(1.0/i);
vwochnik 65:a62dbef2f924 57 _speaker = 0.5;
vwochnik 65:a62dbef2f924 58 Thread::wait(20);
vwochnik 65:a62dbef2f924 59 }
vwochnik 65:a62dbef2f924 60 _speaker = 0.0;
vwochnik 65:a62dbef2f924 61 }
vwochnik 65:a62dbef2f924 62 break;
vwochnik 65:a62dbef2f924 63 }
vwochnik 65:a62dbef2f924 64 _mail.free(msg);
vwochnik 65:a62dbef2f924 65 }
vwochnik 65:a62dbef2f924 66
vwochnik 65:a62dbef2f924 67 if (relayState) {
vwochnik 65:a62dbef2f924 68 _speaker.period(1.0/10000);
vwochnik 65:a62dbef2f924 69 _speaker = 0.5;
vwochnik 65:a62dbef2f924 70 Thread::wait(20);
vwochnik 65:a62dbef2f924 71 _speaker = 0.0;
vwochnik 65:a62dbef2f924 72 }
vwochnik 65:a62dbef2f924 73 }
vwochnik 65:a62dbef2f924 74 }
vwochnik 65:a62dbef2f924 75
vwochnik 65:a62dbef2f924 76 void DeviceFeedback::thread_func(void const *arg)
vwochnik 65:a62dbef2f924 77 {
vwochnik 65:a62dbef2f924 78 DeviceFeedback *that;
vwochnik 65:a62dbef2f924 79 that = (DeviceFeedback*)arg;
vwochnik 65:a62dbef2f924 80 that->thread();
vwochnik 65:a62dbef2f924 81 }