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
@ -40,31 +40,87 @@ led_context led_init(int pin){
|
|||||||
(led_context)malloc(sizeof(struct _led_context));
|
(led_context)malloc(sizeof(struct _led_context));
|
||||||
|
|
||||||
if (!dev)
|
if (!dev)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
|
dev->name = NULL;
|
||||||
|
dev->gpioled = NULL;
|
||||||
|
|
||||||
dev->led_pin = pin;
|
dev->led_pin = pin;
|
||||||
dev->gpio = mraa_gpio_init(dev->led_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) {
|
||||||
return NULL;
|
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;
|
return dev;
|
||||||
}
|
}
|
||||||
|
|
||||||
void led_close(led_context 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);
|
free(dev);
|
||||||
}
|
}
|
||||||
|
|
||||||
upm_result_t led_on(led_context dev){
|
upm_result_t led_on(led_context dev){
|
||||||
if (mraa_gpio_write(dev->gpio, 1) != MRAA_SUCCESS)
|
if (dev->gpio) {
|
||||||
return UPM_ERROR_OPERATION_FAILED;
|
// 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;
|
return UPM_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
upm_result_t led_off(led_context dev){
|
upm_result_t led_off(led_context dev){
|
||||||
if (mraa_gpio_write(dev->gpio, 0) != MRAA_SUCCESS)
|
if (dev->gpio) {
|
||||||
return UPM_ERROR_OPERATION_FAILED;
|
// 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;
|
return UPM_SUCCESS;
|
||||||
}
|
}
|
||||||
|
@ -35,33 +35,41 @@ using namespace upm;
|
|||||||
|
|
||||||
Led::Led(int pin)
|
Led::Led(int pin)
|
||||||
{
|
{
|
||||||
if ( !(m_gpio = mraa_gpio_init(pin)) ) {
|
if ( !(m_led = led_init(pin)) ) {
|
||||||
throw std::invalid_argument(std::string(__FUNCTION__) +
|
throw std::invalid_argument(std::string(__FUNCTION__) +
|
||||||
": mraa_gpio_init() failed, invalid pin?");
|
": mraa_gpio_init() failed, invalid pin?");
|
||||||
return;
|
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()
|
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) {
|
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);
|
return write(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
mraa_result_t Led::off()
|
upm_result_t Led::off()
|
||||||
{
|
{
|
||||||
return write(0);
|
return write(0);
|
||||||
}
|
}
|
||||||
|
@ -33,6 +33,11 @@
|
|||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include "upm.h"
|
#include "upm.h"
|
||||||
#include "mraa/gpio.h"
|
#include "mraa/gpio.h"
|
||||||
|
#include "mraa/led.h"
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @file led.h
|
* @file led.h
|
||||||
@ -47,7 +52,10 @@
|
|||||||
*/
|
*/
|
||||||
typedef struct _led_context {
|
typedef struct _led_context {
|
||||||
mraa_gpio_context gpio;
|
mraa_gpio_context gpio;
|
||||||
|
mraa_led_context gpioled;
|
||||||
int led_pin;
|
int led_pin;
|
||||||
|
const char* name;
|
||||||
|
int max_brightness;
|
||||||
} *led_context;
|
} *led_context;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -58,6 +66,14 @@ typedef struct _led_context {
|
|||||||
*/
|
*/
|
||||||
led_context led_init(int pin);
|
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
|
* LED Initialization function
|
||||||
*
|
*
|
||||||
@ -81,4 +97,8 @@ upm_result_t led_on(led_context dev);
|
|||||||
*/
|
*/
|
||||||
upm_result_t led_off(led_context dev);
|
upm_result_t led_off(led_context dev);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif /* LED_LED_H_ */
|
#endif /* LED_LED_H_ */
|
||||||
|
@ -27,7 +27,6 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <mraa/gpio.hpp>
|
|
||||||
#include "led.h"
|
#include "led.h"
|
||||||
|
|
||||||
namespace upm {
|
namespace upm {
|
||||||
@ -67,6 +66,12 @@ class Led {
|
|||||||
* @param pin Pin to use
|
* @param pin Pin to use
|
||||||
*/
|
*/
|
||||||
Led(int pin);
|
Led(int pin);
|
||||||
|
/**
|
||||||
|
* LED constructor
|
||||||
|
*
|
||||||
|
* @param name Linux gpioled device name
|
||||||
|
*/
|
||||||
|
Led(std::string name);
|
||||||
/**
|
/**
|
||||||
* LED destructor
|
* LED destructor
|
||||||
*/
|
*/
|
||||||
@ -82,24 +87,24 @@ class Led {
|
|||||||
*
|
*
|
||||||
* @return 0 if successful, non-zero otherwise
|
* @return 0 if successful, non-zero otherwise
|
||||||
*/
|
*/
|
||||||
mraa_result_t write(int value);
|
upm_result_t write(int value);
|
||||||
/**
|
/**
|
||||||
* Turns the LED off
|
* Turns the LED off
|
||||||
*
|
*
|
||||||
* @return 0 if successful, non-zero otherwise
|
* @return 0 if successful, non-zero otherwise
|
||||||
*/
|
*/
|
||||||
mraa_result_t off();
|
upm_result_t off();
|
||||||
/**
|
/**
|
||||||
* Turns the LED on
|
* Turns the LED on
|
||||||
*
|
*
|
||||||
* @return 0 if successful, non-zero otherwise
|
* @return 0 if successful, non-zero otherwise
|
||||||
*/
|
*/
|
||||||
mraa_result_t on();
|
upm_result_t on();
|
||||||
std::string name()
|
std::string name()
|
||||||
{
|
{
|
||||||
return "LED Sensor";
|
return "LED Sensor";
|
||||||
}
|
}
|
||||||
private:
|
private:
|
||||||
mraa_gpio_context m_gpio;
|
led_context m_led;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user