http://mbed.org/users/shintamainjp/notebook/starboard_expbrd-one_ex1_en/

Dependencies:   mbed RemoteIR SuperTweet ConfigFile EthernetNetIf

Committer:
shintamainjp
Date:
Thu Nov 04 14:33:07 2010 +0000
Revision:
1:c4cfd136f9c7
Parent:
0:db299c5a18ba
Added license terms.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
shintamainjp 1:c4cfd136f9c7 1 /**
shintamainjp 1:c4cfd136f9c7 2 * =============================================================================
shintamainjp 1:c4cfd136f9c7 3 * My home light controller.
shintamainjp 1:c4cfd136f9c7 4 * http://mbed.org/users/shintamainjp/notebook/starboard_expbrd-one_ex1_en/
shintamainjp 1:c4cfd136f9c7 5 * =============================================================================
shintamainjp 1:c4cfd136f9c7 6 * Copyright (c) 2010 Shinichiro Nakamura (CuBeatSystems)
shintamainjp 1:c4cfd136f9c7 7 *
shintamainjp 1:c4cfd136f9c7 8 * Permission is hereby granted, free of charge, to any person obtaining a copy
shintamainjp 1:c4cfd136f9c7 9 * of this software and associated documentation files (the "Software"), to deal
shintamainjp 1:c4cfd136f9c7 10 * in the Software without restriction, including without limitation the rights
shintamainjp 1:c4cfd136f9c7 11 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
shintamainjp 1:c4cfd136f9c7 12 * copies of the Software, and to permit persons to whom the Software is
shintamainjp 1:c4cfd136f9c7 13 * furnished to do so, subject to the following conditions:
shintamainjp 1:c4cfd136f9c7 14 *
shintamainjp 1:c4cfd136f9c7 15 * The above copyright notice and this permission notice shall be included in
shintamainjp 1:c4cfd136f9c7 16 * all copies or substantial portions of the Software.
shintamainjp 1:c4cfd136f9c7 17 *
shintamainjp 1:c4cfd136f9c7 18 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
shintamainjp 1:c4cfd136f9c7 19 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
shintamainjp 1:c4cfd136f9c7 20 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
shintamainjp 1:c4cfd136f9c7 21 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
shintamainjp 1:c4cfd136f9c7 22 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
shintamainjp 1:c4cfd136f9c7 23 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
shintamainjp 1:c4cfd136f9c7 24 * THE SOFTWARE.
shintamainjp 1:c4cfd136f9c7 25 * =============================================================================
shintamainjp 1:c4cfd136f9c7 26 */
shintamainjp 1:c4cfd136f9c7 27
shintamainjp 0:db299c5a18ba 28 #include "MyHomeLight.h"
shintamainjp 0:db299c5a18ba 29 #include "RemoteIR.h"
shintamainjp 0:db299c5a18ba 30
shintamainjp 0:db299c5a18ba 31 const MyHomeLight::light_signal_t MyHomeLight::lights[8] = {
shintamainjp 0:db299c5a18ba 32 {0, "\x2C\x52\x09\x02\x08\x82"},
shintamainjp 0:db299c5a18ba 33 {1, "\x2C\x52\x09\x02\x0A\xA2"},
shintamainjp 0:db299c5a18ba 34 {2, "\x2C\x52\x09\x02\x0C\xC2"},
shintamainjp 0:db299c5a18ba 35 {3, "\x2C\x52\x09\x02\x0E\xE2"},
shintamainjp 0:db299c5a18ba 36 {4, "\x2C\x52\x09\x42\x08\xC2"},
shintamainjp 0:db299c5a18ba 37 {5, "\x2C\x52\x09\x42\x0A\xE2"},
shintamainjp 0:db299c5a18ba 38 {6, "\x2C\x52\x09\x42\x0C\x82"},
shintamainjp 0:db299c5a18ba 39 {7, "\x2C\x52\x09\x42\x0E\xA2"},
shintamainjp 0:db299c5a18ba 40 };
shintamainjp 0:db299c5a18ba 41
shintamainjp 0:db299c5a18ba 42 /**
shintamainjp 0:db299c5a18ba 43 * Create.
shintamainjp 0:db299c5a18ba 44 *
shintamainjp 0:db299c5a18ba 45 * @param tx_pin Pin of IR transmitter.
shintamainjp 0:db299c5a18ba 46 */
shintamainjp 0:db299c5a18ba 47 MyHomeLight::MyHomeLight(PinName tx_pin) : tx(tx_pin) {
shintamainjp 0:db299c5a18ba 48 }
shintamainjp 0:db299c5a18ba 49
shintamainjp 0:db299c5a18ba 50 /**
shintamainjp 0:db299c5a18ba 51 * Dispose.
shintamainjp 0:db299c5a18ba 52 */
shintamainjp 0:db299c5a18ba 53 MyHomeLight::~MyHomeLight() {
shintamainjp 0:db299c5a18ba 54 }
shintamainjp 0:db299c5a18ba 55
shintamainjp 0:db299c5a18ba 56 /**
shintamainjp 0:db299c5a18ba 57 * Toggle state.
shintamainjp 0:db299c5a18ba 58 *
shintamainjp 0:db299c5a18ba 59 * @param channel Target channel number.
shintamainjp 0:db299c5a18ba 60 * @return true if it succeed.
shintamainjp 0:db299c5a18ba 61 */
shintamainjp 0:db299c5a18ba 62 bool MyHomeLight::toggle(const int channel) {
shintamainjp 0:db299c5a18ba 63 RemoteIR::Format fmt = RemoteIR::AEHA;
shintamainjp 0:db299c5a18ba 64 uint8_t *sig = getLightSignal(channel);
shintamainjp 0:db299c5a18ba 65 if (sig != NULL) {
shintamainjp 0:db299c5a18ba 66 for (int i = 0; i < 2; i++) {
shintamainjp 0:db299c5a18ba 67 while (tx.getState() != TransmitterIR::Idle) {
shintamainjp 0:db299c5a18ba 68 wait_us(100);
shintamainjp 0:db299c5a18ba 69 }
shintamainjp 0:db299c5a18ba 70 tx.setData(fmt, sig, 48);
shintamainjp 0:db299c5a18ba 71 wait_ms(120);
shintamainjp 0:db299c5a18ba 72 }
shintamainjp 0:db299c5a18ba 73 return true;
shintamainjp 0:db299c5a18ba 74 }
shintamainjp 0:db299c5a18ba 75 return false;
shintamainjp 0:db299c5a18ba 76 }
shintamainjp 0:db299c5a18ba 77
shintamainjp 0:db299c5a18ba 78 /**
shintamainjp 0:db299c5a18ba 79 * Get a signal for a light.
shintamainjp 0:db299c5a18ba 80 *
shintamainjp 0:db299c5a18ba 81 * @param channel Channel of a light.
shintamainjp 0:db299c5a18ba 82 *
shintamainjp 0:db299c5a18ba 83 * @return A pointer to a signal.
shintamainjp 0:db299c5a18ba 84 */
shintamainjp 0:db299c5a18ba 85 uint8_t *MyHomeLight::getLightSignal(int channel) {
shintamainjp 0:db299c5a18ba 86 const int n = sizeof(lights) / sizeof(lights[0]);
shintamainjp 0:db299c5a18ba 87 if ((0 <= channel) && (channel <= n - 1)) {
shintamainjp 0:db299c5a18ba 88 return (uint8_t *)lights[channel].signal;
shintamainjp 0:db299c5a18ba 89 }
shintamainjp 0:db299c5a18ba 90 return NULL;
shintamainjp 0:db299c5a18ba 91 }