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:
xinlei
Date:
Mon Feb 16 09:17:30 2015 +0000
Revision:
71:063c45e99578
Parent:
67:c360a2b2c948
Child:
76:b07effe83fb8
Various minor bug fixes

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