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:
Sun Nov 30 19:34:49 2014 +0000
Revision:
67:c360a2b2c948
Parent:
65:a62dbef2f924
Child:
71:063c45e99578
refactor credentials persistence, add factory reset upon fire press button

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 67:c360a2b2c948 5 #define MSG_BEEP_SUCCESS 1
vwochnik 67:c360a2b2c948 6 #define MSG_BEEP_FAILURE 2
vwochnik 67:c360a2b2c948 7 #define MSG_CLOSE_RELAY 3
vwochnik 67:c360a2b2c948 8 #define MSG_OPEN_RELAY 4
vwochnik 65:a62dbef2f924 9
vwochnik 65:a62dbef2f924 10 DeviceFeedback::DeviceFeedback(PwmOut speaker) :
vwochnik 65:a62dbef2f924 11 _speaker(speaker),
vwochnik 65:a62dbef2f924 12 _thread(DeviceFeedback::thread_func, this)
vwochnik 65:a62dbef2f924 13 {
vwochnik 65:a62dbef2f924 14 }
vwochnik 65:a62dbef2f924 15
vwochnik 67:c360a2b2c948 16 void DeviceFeedback::beepSuccess()
vwochnik 67:c360a2b2c948 17 {
vwochnik 67:c360a2b2c948 18 sendMessage(MSG_BEEP_SUCCESS);
vwochnik 67:c360a2b2c948 19 }
vwochnik 67:c360a2b2c948 20
vwochnik 67:c360a2b2c948 21 void DeviceFeedback::beepFailure()
vwochnik 67:c360a2b2c948 22 {
vwochnik 67:c360a2b2c948 23 sendMessage(MSG_BEEP_FAILURE);
vwochnik 67:c360a2b2c948 24 }
vwochnik 67:c360a2b2c948 25
vwochnik 65:a62dbef2f924 26 void DeviceFeedback::closeRelay()
vwochnik 65:a62dbef2f924 27 {
vwochnik 67:c360a2b2c948 28 sendMessage(MSG_CLOSE_RELAY);
vwochnik 65:a62dbef2f924 29 }
vwochnik 65:a62dbef2f924 30
vwochnik 65:a62dbef2f924 31 void DeviceFeedback::openRelay()
vwochnik 65:a62dbef2f924 32 {
vwochnik 67:c360a2b2c948 33 sendMessage(MSG_OPEN_RELAY);
vwochnik 67:c360a2b2c948 34 }
vwochnik 67:c360a2b2c948 35
vwochnik 67:c360a2b2c948 36 void DeviceFeedback::sendMessage(uint8_t msg)
vwochnik 67:c360a2b2c948 37 {
vwochnik 67:c360a2b2c948 38 uint8_t *msgPtr;
vwochnik 65:a62dbef2f924 39
vwochnik 67:c360a2b2c948 40 msgPtr = _mail.alloc();
vwochnik 67:c360a2b2c948 41 *msgPtr = msg;
vwochnik 67:c360a2b2c948 42 _mail.put(msgPtr);
vwochnik 65:a62dbef2f924 43 }
vwochnik 65:a62dbef2f924 44
vwochnik 65:a62dbef2f924 45 void DeviceFeedback::thread()
vwochnik 65:a62dbef2f924 46 {
vwochnik 65:a62dbef2f924 47 osEvent evt; uint8_t *msg;
vwochnik 65:a62dbef2f924 48 bool relayState = false;
vwochnik 65:a62dbef2f924 49
vwochnik 65:a62dbef2f924 50 while (true) {
vwochnik 65:a62dbef2f924 51 if ((evt = _mail.get(1000)).status == osEventMail) {
vwochnik 65:a62dbef2f924 52 msg = (uint8_t*)evt.value.p;
vwochnik 65:a62dbef2f924 53 switch (*msg) {
vwochnik 67:c360a2b2c948 54 case MSG_BEEP_SUCCESS:
vwochnik 67:c360a2b2c948 55 for (float i=2000.0; i<10000.0; i+=2000.0) {
vwochnik 67:c360a2b2c948 56 _speaker.period(1.0/i);
vwochnik 67:c360a2b2c948 57 _speaker = 0.5;
vwochnik 67:c360a2b2c948 58 Thread::wait(200);
vwochnik 67:c360a2b2c948 59 _speaker = 0.0;
vwochnik 67:c360a2b2c948 60 Thread::wait(50);
vwochnik 67:c360a2b2c948 61 }
vwochnik 67:c360a2b2c948 62 break;
vwochnik 67:c360a2b2c948 63 case MSG_BEEP_FAILURE:
vwochnik 67:c360a2b2c948 64 for (float i=10000.0; i>2000.0; i-=2000.0) {
vwochnik 67:c360a2b2c948 65 _speaker.period(1.0/i);
vwochnik 67:c360a2b2c948 66 _speaker = 0.5;
vwochnik 67:c360a2b2c948 67 Thread::wait(200);
vwochnik 67:c360a2b2c948 68 _speaker = 0.0;
vwochnik 67:c360a2b2c948 69 Thread::wait(50);
vwochnik 67:c360a2b2c948 70 }
vwochnik 67:c360a2b2c948 71 break;
vwochnik 65:a62dbef2f924 72 case MSG_CLOSE_RELAY:
vwochnik 65:a62dbef2f924 73 if (!relayState) {
vwochnik 65:a62dbef2f924 74 relayState = true;
vwochnik 65:a62dbef2f924 75 for (float i=2000.0; i<10000.0; i+=100) {
vwochnik 65:a62dbef2f924 76 _speaker.period(1.0/i);
vwochnik 65:a62dbef2f924 77 _speaker = 0.5;
vwochnik 65:a62dbef2f924 78 Thread::wait(20);
vwochnik 65:a62dbef2f924 79 }
vwochnik 65:a62dbef2f924 80 _speaker = 0.0;
vwochnik 65:a62dbef2f924 81 }
vwochnik 65:a62dbef2f924 82 break;
vwochnik 65:a62dbef2f924 83 case MSG_OPEN_RELAY:
vwochnik 65:a62dbef2f924 84 if (relayState) {
vwochnik 65:a62dbef2f924 85 relayState = false;
vwochnik 65:a62dbef2f924 86 for (float i=10000.0; i>2000.0; i-=100) {
vwochnik 65:a62dbef2f924 87 _speaker.period(1.0/i);
vwochnik 65:a62dbef2f924 88 _speaker = 0.5;
vwochnik 65:a62dbef2f924 89 Thread::wait(20);
vwochnik 65:a62dbef2f924 90 }
vwochnik 65:a62dbef2f924 91 _speaker = 0.0;
vwochnik 65:a62dbef2f924 92 }
vwochnik 65:a62dbef2f924 93 break;
vwochnik 65:a62dbef2f924 94 }
vwochnik 65:a62dbef2f924 95 _mail.free(msg);
vwochnik 65:a62dbef2f924 96 }
vwochnik 65:a62dbef2f924 97
vwochnik 65:a62dbef2f924 98 if (relayState) {
vwochnik 65:a62dbef2f924 99 _speaker.period(1.0/10000);
vwochnik 65:a62dbef2f924 100 _speaker = 0.5;
vwochnik 65:a62dbef2f924 101 Thread::wait(20);
vwochnik 65:a62dbef2f924 102 _speaker = 0.0;
vwochnik 65:a62dbef2f924 103 }
vwochnik 65:a62dbef2f924 104 }
vwochnik 65:a62dbef2f924 105 }
vwochnik 65:a62dbef2f924 106
vwochnik 65:a62dbef2f924 107 void DeviceFeedback::thread_func(void const *arg)
vwochnik 65:a62dbef2f924 108 {
vwochnik 65:a62dbef2f924 109 DeviceFeedback *that;
vwochnik 65:a62dbef2f924 110 that = (DeviceFeedback*)arg;
vwochnik 65:a62dbef2f924 111 that->thread();
vwochnik 65:a62dbef2f924 112 }