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
io/DeviceFeedback.cpp@71:063c45e99578, 2015-02-16 (annotated)
- 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?
User | Revision | Line number | New 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 | } |