mirror of
https://github.com/eclipse/upm.git
synced 2025-03-15 04:57:30 +03:00
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:
parent
d183c9574d
commit
bd7930f249
6
src/hlg150h/CMakeLists.txt
Normal file
6
src/hlg150h/CMakeLists.txt
Normal 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
96
src/hlg150h/hlg150h.cxx
Normal 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
79
src/hlg150h/hlg150h.h
Normal 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;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
8
src/hlg150h/jsupm_hlg150h.i
Normal file
8
src/hlg150h/jsupm_hlg150h.i
Normal file
@ -0,0 +1,8 @@
|
||||
%module jsupm_hlg150h
|
||||
%include "../upm.i"
|
||||
|
||||
%{
|
||||
#include "hlg150h.h"
|
||||
%}
|
||||
|
||||
%include "hlg150h.h"
|
46
src/hlg150h/mraa-utils.cxx
Normal file
46
src/hlg150h/mraa-utils.cxx
Normal 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
37
src/hlg150h/mraa-utils.h
Normal 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);
|
||||
};
|
||||
|
||||
|
||||
|
9
src/hlg150h/pyupm_hlg150h.i
Normal file
9
src/hlg150h/pyupm_hlg150h.i
Normal file
@ -0,0 +1,9 @@
|
||||
%module pyupm_hlg150h
|
||||
%include "../upm.i"
|
||||
|
||||
%feature("autodoc", "3");
|
||||
|
||||
%include "hlg150h.h"
|
||||
%{
|
||||
#include "hlg150h.h"
|
||||
%}
|
Loading…
x
Reference in New Issue
Block a user