mirror of
https://github.com/eclipse/upm.git
synced 2025-03-15 04:57:30 +03:00
led: update to use gpioled if desired, better C code wrapper
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
This commit is contained in:
parent
b367a63010
commit
b244fe45d1
@ -42,29 +42,85 @@ led_context led_init(int pin){
|
||||
if (!dev)
|
||||
return NULL;
|
||||
|
||||
dev->name = NULL;
|
||||
dev->gpioled = NULL;
|
||||
|
||||
dev->led_pin = pin;
|
||||
dev->gpio = mraa_gpio_init(dev->led_pin);
|
||||
|
||||
if (mraa_gpio_dir(dev->gpio, MRAA_GPIO_OUT) != MRAA_SUCCESS)
|
||||
if (mraa_gpio_dir(dev->gpio, MRAA_GPIO_OUT) != MRAA_SUCCESS) {
|
||||
printf("%s: Unable to set pin %d as output.\n", __FUNCTION__, pin);
|
||||
free(dev);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return dev;
|
||||
}
|
||||
|
||||
led_context led_init_str(const char* name){
|
||||
// make sure MRAA is initialized
|
||||
int mraa_rv;
|
||||
if ((mraa_rv = mraa_init()) != MRAA_SUCCESS)
|
||||
{
|
||||
printf("%s: mraa_init() failed (%d).\n", __FUNCTION__, mraa_rv);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
led_context dev =
|
||||
(led_context)malloc(sizeof(struct _led_context));
|
||||
|
||||
if (!dev)
|
||||
return NULL;
|
||||
|
||||
dev->led_pin = -1;
|
||||
dev->gpio = NULL;
|
||||
|
||||
dev->name = name;
|
||||
dev->gpioled = mraa_led_init(name);
|
||||
|
||||
if (!dev->gpioled) {
|
||||
printf("%s: Unable to initialize gpioled device (%s).\n", __FUNCTION__, dev->name);
|
||||
free(dev);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
dev->max_brightness = mraa_led_read_max_brightness(dev->gpioled);
|
||||
|
||||
return dev;
|
||||
}
|
||||
|
||||
void led_close(led_context dev){
|
||||
if (dev->gpio) {
|
||||
mraa_gpio_close(dev->gpio);
|
||||
}
|
||||
if (dev->gpioled) {
|
||||
mraa_led_close(dev->gpioled);
|
||||
}
|
||||
free(dev);
|
||||
}
|
||||
|
||||
upm_result_t led_on(led_context dev){
|
||||
if (dev->gpio) {
|
||||
// using gpio pin
|
||||
if (mraa_gpio_write(dev->gpio, 1) != MRAA_SUCCESS)
|
||||
return UPM_ERROR_OPERATION_FAILED;
|
||||
|
||||
} else {
|
||||
// using gpioled device
|
||||
if (mraa_led_set_brightness(dev->gpioled, dev->max_brightness) != MRAA_SUCCESS)
|
||||
return UPM_ERROR_OPERATION_FAILED;
|
||||
}
|
||||
return UPM_SUCCESS;
|
||||
}
|
||||
|
||||
upm_result_t led_off(led_context dev){
|
||||
if (dev->gpio) {
|
||||
// using gpio pin
|
||||
if (mraa_gpio_write(dev->gpio, 0) != MRAA_SUCCESS)
|
||||
return UPM_ERROR_OPERATION_FAILED;
|
||||
|
||||
} else {
|
||||
// using gpioled device
|
||||
if (mraa_led_set_brightness(dev->gpioled, 0) != MRAA_SUCCESS)
|
||||
return UPM_ERROR_OPERATION_FAILED;
|
||||
}
|
||||
return UPM_SUCCESS;
|
||||
}
|
||||
|
@ -35,33 +35,41 @@ using namespace upm;
|
||||
|
||||
Led::Led(int pin)
|
||||
{
|
||||
if ( !(m_gpio = mraa_gpio_init(pin)) ) {
|
||||
if ( !(m_led = led_init(pin)) ) {
|
||||
throw std::invalid_argument(std::string(__FUNCTION__) +
|
||||
": mraa_gpio_init() failed, invalid pin?");
|
||||
return;
|
||||
}
|
||||
mraa_gpio_dir(m_gpio, MRAA_GPIO_OUT);
|
||||
}
|
||||
|
||||
Led::Led(std::string name)
|
||||
{
|
||||
if ( !(m_led = led_init_str(name.c_str())) ) {
|
||||
throw std::invalid_argument(std::string(__FUNCTION__) +
|
||||
": mraa_led_init() failed, invalid led name?");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
Led::~Led()
|
||||
{
|
||||
mraa_gpio_close(m_gpio);
|
||||
led_close(m_led);
|
||||
}
|
||||
|
||||
mraa_result_t Led::write(int value)
|
||||
upm_result_t Led::write(int value)
|
||||
{
|
||||
if (value >= 1) {
|
||||
return mraa_gpio_write(m_gpio, 1);
|
||||
return led_on(m_led);
|
||||
}
|
||||
return mraa_gpio_write(m_gpio, 0);
|
||||
return led_off(m_led);
|
||||
}
|
||||
|
||||
mraa_result_t Led::on()
|
||||
upm_result_t Led::on()
|
||||
{
|
||||
return write(1);
|
||||
}
|
||||
|
||||
mraa_result_t Led::off()
|
||||
upm_result_t Led::off()
|
||||
{
|
||||
return write(0);
|
||||
}
|
||||
|
@ -33,6 +33,11 @@
|
||||
#include <stdint.h>
|
||||
#include "upm.h"
|
||||
#include "mraa/gpio.h"
|
||||
#include "mraa/led.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @file led.h
|
||||
@ -47,7 +52,10 @@
|
||||
*/
|
||||
typedef struct _led_context {
|
||||
mraa_gpio_context gpio;
|
||||
mraa_led_context gpioled;
|
||||
int led_pin;
|
||||
const char* name;
|
||||
int max_brightness;
|
||||
} *led_context;
|
||||
|
||||
/**
|
||||
@ -58,6 +66,14 @@ typedef struct _led_context {
|
||||
*/
|
||||
led_context led_init(int pin);
|
||||
|
||||
/**
|
||||
* LED Initialization function
|
||||
*
|
||||
* @param name Linux gpioled device to use
|
||||
* @return The sensor context
|
||||
*/
|
||||
led_context led_init_str(const char* name);
|
||||
|
||||
/**
|
||||
* LED Initialization function
|
||||
*
|
||||
@ -81,4 +97,8 @@ upm_result_t led_on(led_context dev);
|
||||
*/
|
||||
upm_result_t led_off(led_context dev);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* LED_LED_H_ */
|
||||
|
@ -27,7 +27,6 @@
|
||||
#pragma once
|
||||
|
||||
#include <string>
|
||||
#include <mraa/gpio.hpp>
|
||||
#include "led.h"
|
||||
|
||||
namespace upm {
|
||||
@ -67,6 +66,12 @@ class Led {
|
||||
* @param pin Pin to use
|
||||
*/
|
||||
Led(int pin);
|
||||
/**
|
||||
* LED constructor
|
||||
*
|
||||
* @param name Linux gpioled device name
|
||||
*/
|
||||
Led(std::string name);
|
||||
/**
|
||||
* LED destructor
|
||||
*/
|
||||
@ -82,24 +87,24 @@ class Led {
|
||||
*
|
||||
* @return 0 if successful, non-zero otherwise
|
||||
*/
|
||||
mraa_result_t write(int value);
|
||||
upm_result_t write(int value);
|
||||
/**
|
||||
* Turns the LED off
|
||||
*
|
||||
* @return 0 if successful, non-zero otherwise
|
||||
*/
|
||||
mraa_result_t off();
|
||||
upm_result_t off();
|
||||
/**
|
||||
* Turns the LED on
|
||||
*
|
||||
* @return 0 if successful, non-zero otherwise
|
||||
*/
|
||||
mraa_result_t on();
|
||||
upm_result_t on();
|
||||
std::string name()
|
||||
{
|
||||
return "LED Sensor";
|
||||
}
|
||||
private:
|
||||
mraa_gpio_context m_gpio;
|
||||
led_context m_led;
|
||||
};
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user