diff --git a/src/hlg150h/CMakeLists.txt b/src/hlg150h/CMakeLists.txt new file mode 100644 index 00000000..d3c21976 --- /dev/null +++ b/src/hlg150h/CMakeLists.txt @@ -0,0 +1,6 @@ +include_directories(..) +set (libname "hlg150h") +set (libdescription “Lighting power supply”) +set (module_src ${libname}.cxx mraa-utils.cxx) +set (module_h ${libname}.h) +upm_module_init() diff --git a/src/hlg150h/hlg150h.cxx b/src/hlg150h/hlg150h.cxx new file mode 100644 index 00000000..8fbd0717 --- /dev/null +++ b/src/hlg150h/hlg150h.cxx @@ -0,0 +1,96 @@ +#include +#include +#include +#include "hlg150h.h" +#include "mraa-utils.h" + +#define PWM_PERIOD 3333 + +using namespace upm; + +HLG150H::HLG150H(int pinRelay, int pinPWM) +{ + int dutyPercent = 0; + status = mraa::SUCCESS; + this->pinRelay = pinRelay; + isPoweredShadow = false; + pwmBrightness = new mraa::Pwm(pinPWM); + if (pwmBrightness == NULL) + UPM_THROW("pwm init failed"); + status = pwmBrightness->enable(true); + status = pwmBrightness->period_us(PWM_PERIOD); + if (!isConfigured()) + UPM_THROW("pwm config failed."); + dutyPercent = getBrightness(); + isPoweredShadow = dutyPercent > 10; +} + +HLG150H::~HLG150H() +{ + delete pwmBrightness; +} + +bool HLG150H::isConfigured() +{ + return status == mraa::SUCCESS; +} + + +void HLG150H::setPowerOn() +{ + isPoweredShadow = true; + MraaUtils::setGpio(pinRelay, 0); +} + +void HLG150H::setPowerOff() +{ + isPoweredShadow = false; + MraaUtils::setGpio(pinRelay, 1); +} + +bool HLG150H::isPowered() +{ + // Can't read GPIO state as setting in to input mode turns off relay + // Instead we return a shadow variable + /* + int level; + if (MraaUtils::getGpio(pinRelay, &level) == MRAA_SUCCESS) + return level == 1; + else + return false; + */ + return isPoweredShadow; +} + + +// If duty is less than 10% light will flicker +void HLG150H::setBrightness(int dutyPercent) +{ + if (dutyPercent < 10) + dutyPercent = 10; + if (isConfigured()) + { + int dutyUs = (PWM_PERIOD * dutyPercent) / 100; + dutyUs = PWM_PERIOD - dutyUs; + status = pwmBrightness->pulsewidth_us(dutyUs); + // std::cout << "Brightness = " << dutyPercent << "%, duty = " << dutyUs << "us" << std::endl; + } + else + UPM_THROW("setBrightness failed"); + +} + + +int HLG150H::getBrightness() +{ + if (isConfigured()) + { + float duty = pwmBrightness->read(); + int dutyPercent = static_cast(100.0 * (1.0 - duty) + 0.5); + return dutyPercent; + } + else + UPM_THROW("getBrightness failed"); +} + + diff --git a/src/hlg150h/hlg150h.h b/src/hlg150h/hlg150h.h new file mode 100644 index 00000000..6eeb66f0 --- /dev/null +++ b/src/hlg150h/hlg150h.h @@ -0,0 +1,79 @@ +/* + * Author: Henry Bruce + * Copyright (c) 2014 Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#include "upm/iLightController.h" +// #include "mraa/gpio.hpp" +#include "mraa/pwm.hpp" + +namespace upm +{ + +/** + * @brief Meanwell HLG150H Lighting power supply controller library + * @defgroup hlg150h libupm-hlg150h + * @ingroup pwm light ilightcontroller + */ + +/** + * @brief API for HLG-150H Lighting Power Supply Controller + * + * The Mean Well + * [HLG-150H](http://www.meanwell.com/webapp/product/search.aspx?prod=HLG-150H) + * 150W Single Output Switching Power Supply + * + * @library hlg150h + * @sensor hlg150h + * @comname HLG150H lighting controller + * @altname HLG150H + * @type light + * @con pwm + * @if ilightcontroller + */ + +class HLG150H : public upm::ILightController +{ +public: + HLG150H(int pinRelay, int pinPWM); + ~HLG150H(); + +protected: + bool isConfigured(); + const char* getModuleName() { return "hlg150h"; } + void setPowerOn(); + void setPowerOff(); + bool isPowered(); + void setBrightness(int dutyPercent); + int getBrightness(); + +private: + mraa::Result status; + bool isPoweredShadow; + int pinRelay; + mraa::Pwm* pwmBrightness; +}; + +} + + + diff --git a/src/hlg150h/jsupm_hlg150h.i b/src/hlg150h/jsupm_hlg150h.i new file mode 100644 index 00000000..26823f32 --- /dev/null +++ b/src/hlg150h/jsupm_hlg150h.i @@ -0,0 +1,8 @@ +%module jsupm_hlg150h +%include "../upm.i" + +%{ + #include "hlg150h.h" +%} + +%include "hlg150h.h" diff --git a/src/hlg150h/mraa-utils.cxx b/src/hlg150h/mraa-utils.cxx new file mode 100644 index 00000000..00158e17 --- /dev/null +++ b/src/hlg150h/mraa-utils.cxx @@ -0,0 +1,46 @@ +/* + * Author: Henry Bruce + * Copyright (c) 2014 Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#include "mraa-utils.h" +#include "mraa/gpio.hpp" + + #define UPM_THROW(msg) throw std::runtime_error(std::string(__FUNCTION__) + ": " + (msg)) + +void MraaUtils::setGpio(int pin, int level) +{ + mraa::Gpio gpio(pin); + gpio.dir(mraa::DIR_OUT); + if (gpio.write(level) != mraa::SUCCESS) + UPM_THROW("gpio write failed"); +} + + +int MraaUtils::getGpio(int pin) +{ + mraa::Gpio gpio(pin); + gpio.dir(mraa::DIR_IN); + return gpio.read(); +} + + diff --git a/src/hlg150h/mraa-utils.h b/src/hlg150h/mraa-utils.h new file mode 100644 index 00000000..f9e6acc3 --- /dev/null +++ b/src/hlg150h/mraa-utils.h @@ -0,0 +1,37 @@ +/* + * Author: Henry Bruce + * Copyright (c) 2014 Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#pragma once + +#include "mraa/types.h" + +class __attribute__ ((visibility("hidden"))) MraaUtils +{ +public: + static void setGpio(int pin, int level); + static int getGpio(int pin); +}; + + + diff --git a/src/hlg150h/pyupm_hlg150h.i b/src/hlg150h/pyupm_hlg150h.i new file mode 100644 index 00000000..5bea646a --- /dev/null +++ b/src/hlg150h/pyupm_hlg150h.i @@ -0,0 +1,9 @@ +%module pyupm_hlg150h +%include "../upm.i" + +%feature("autodoc", "3"); + +%include "hlg150h.h" +%{ + #include "hlg150h.h" +%}