Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: C027_Support C12832 LM75B MMA7660 MbedSmartRest mbed-rtos mbed
Fork of MbedSmartRestMain by
io/DeviceFeedback.cpp@76:b07effe83fb8, 2015-02-25 (annotated)
- Committer:
- xinlei
- Date:
- Wed Feb 25 10:06:11 2015 +0000
- Revision:
- 76:b07effe83fb8
- Parent:
- 71:063c45e99578
- Child:
- 78:bf32dfe6c47f
watchdog: added watchdog;
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; |
xinlei | 76:b07effe83fb8 | 87 | // for (float i=2000.0; i<10000.0; i+=100) { |
xinlei | 76:b07effe83fb8 | 88 | // _speaker.period(1.0/i); |
xinlei | 76:b07effe83fb8 | 89 | // _speaker = 0.5; |
xinlei | 76:b07effe83fb8 | 90 | // Thread::wait(20); |
xinlei | 76:b07effe83fb8 | 91 | // } |
xinlei | 76:b07effe83fb8 | 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; |
xinlei | 76:b07effe83fb8 | 98 | // for (float i=10000.0; i>2000.0; i-=100) { |
xinlei | 76:b07effe83fb8 | 99 | // _speaker.period(1.0/i); |
xinlei | 76:b07effe83fb8 | 100 | // _speaker = 0.5; |
xinlei | 76:b07effe83fb8 | 101 | // Thread::wait(20); |
xinlei | 76:b07effe83fb8 | 102 | // } |
xinlei | 76:b07effe83fb8 | 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 | |
xinlei | 76:b07effe83fb8 | 110 | // if (relayState) { |
xinlei | 76:b07effe83fb8 | 111 | // _speaker.period(1.0/10000); |
xinlei | 76:b07effe83fb8 | 112 | // _speaker = 0.5; |
xinlei | 76:b07effe83fb8 | 113 | // Thread::wait(20); |
xinlei | 76:b07effe83fb8 | 114 | // _speaker = 0.0; |
xinlei | 76:b07effe83fb8 | 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 | } |