hlg150: Initial Implementation Meanwell HLG150 based LED light controller

Signed-off-by: Henry Bruce <henry.bruce@intel.com>
Signed-off-by: Abhishek Malik <abhishek.malik@intel.com>
This commit is contained in:
Henry Bruce 2016-01-06 15:25:18 -08:00 committed by Abhishek Malik
parent d183c9574d
commit bd7930f249
7 changed files with 281 additions and 0 deletions

View File

@ -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()

96
src/hlg150h/hlg150h.cxx Normal file
View File

@ -0,0 +1,96 @@
#include <iostream>
#include <stdexcept>
#include <unistd.h>
#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<int>(100.0 * (1.0 - duty) + 0.5);
return dutyPercent;
}
else
UPM_THROW("getBrightness failed");
}

79
src/hlg150h/hlg150h.h Normal file
View File

@ -0,0 +1,79 @@
/*
* Author: Henry Bruce <henry.bruce@intel.com>
* 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;
};
}

View File

@ -0,0 +1,8 @@
%module jsupm_hlg150h
%include "../upm.i"
%{
#include "hlg150h.h"
%}
%include "hlg150h.h"

View File

@ -0,0 +1,46 @@
/*
* Author: Henry Bruce <henry.bruce@intel.com>
* 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();
}

37
src/hlg150h/mraa-utils.h Normal file
View File

@ -0,0 +1,37 @@
/*
* Author: Henry Bruce <henry.bruce@intel.com>
* 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);
};

View File

@ -0,0 +1,9 @@
%module pyupm_hlg150h
%include "../upm.i"
%feature("autodoc", "3");
%include "hlg150h.h"
%{
#include "hlg150h.h"
%}