2019-11-29 01:52:56 -07:00
|
|
|
#include <stdint.h>
|
2019-12-01 14:18:31 -07:00
|
|
|
#include <bcm2835.h>
|
2019-11-29 01:52:56 -07:00
|
|
|
#include "log.h"
|
2019-12-05 18:21:37 -07:00
|
|
|
#include "scode.h"
|
2019-11-29 02:05:30 -07:00
|
|
|
#include "gpio.h"
|
2019-11-29 01:52:56 -07:00
|
|
|
|
2019-12-01 14:18:31 -07:00
|
|
|
#define GLINE_BUTTON1 17
|
|
|
|
#define GLINE_BUTTON2 22
|
|
|
|
#define GLINE_BUTTON3 23
|
|
|
|
#define GLINE_BUTTON4 27
|
|
|
|
#define GLINE_BACKLIGHT 18
|
2019-11-29 01:52:56 -07:00
|
|
|
|
2019-12-01 14:34:57 -07:00
|
|
|
#define PWM_BACKLIGHT 0
|
2019-11-29 01:52:56 -07:00
|
|
|
|
2019-12-05 18:21:37 -07:00
|
|
|
HRESULT Gpio_setup(void)
|
2019-11-29 01:52:56 -07:00
|
|
|
{
|
2019-12-01 14:18:31 -07:00
|
|
|
if (!bcm2835_init())
|
|
|
|
{
|
|
|
|
Log(LFATAL, "Error initializing BCM2835 library");
|
2019-12-05 18:21:37 -07:00
|
|
|
return E_FAIL;
|
2019-12-01 14:18:31 -07:00
|
|
|
}
|
2019-11-29 01:52:56 -07:00
|
|
|
|
2019-12-01 14:18:31 -07:00
|
|
|
/* configure the buttons */
|
|
|
|
bcm2835_gpio_set_pud(GLINE_BUTTON1, BCM2835_GPIO_PUD_UP);
|
|
|
|
bcm2835_gpio_fsel(GLINE_BUTTON1, BCM2835_GPIO_FSEL_INPT);
|
|
|
|
bcm2835_gpio_set_pud(GLINE_BUTTON2, BCM2835_GPIO_PUD_UP);
|
|
|
|
bcm2835_gpio_fsel(GLINE_BUTTON2, BCM2835_GPIO_FSEL_INPT);
|
|
|
|
bcm2835_gpio_set_pud(GLINE_BUTTON3, BCM2835_GPIO_PUD_UP);
|
|
|
|
bcm2835_gpio_fsel(GLINE_BUTTON3, BCM2835_GPIO_FSEL_INPT);
|
|
|
|
bcm2835_gpio_set_pud(GLINE_BUTTON4, BCM2835_GPIO_PUD_UP);
|
|
|
|
bcm2835_gpio_fsel(GLINE_BUTTON4, BCM2835_GPIO_FSEL_INPT);
|
2019-11-29 01:52:56 -07:00
|
|
|
|
2019-12-01 14:34:57 -07:00
|
|
|
/* configure the PWM for the backlight */
|
|
|
|
bcm2835_gpio_set_pud(GLINE_BACKLIGHT, BCM2835_GPIO_PUD_OFF);
|
|
|
|
bcm2835_gpio_fsel(GLINE_BACKLIGHT, BCM2835_GPIO_FSEL_ALT5);
|
|
|
|
bcm2835_pwm_set_clock(BCM2835_PWM_CLOCK_DIVIDER_2);
|
|
|
|
bcm2835_pwm_set_mode(PWM_BACKLIGHT, 1, 1);
|
2019-12-01 15:43:05 -07:00
|
|
|
bcm2835_pwm_set_range(PWM_BACKLIGHT, GSB_BACKLIGHT_MAX + 1);
|
|
|
|
bcm2835_pwm_set_data(PWM_BACKLIGHT, GSB_BACKLIGHT_MAX);
|
2019-11-29 01:52:56 -07:00
|
|
|
|
2019-12-05 18:21:37 -07:00
|
|
|
return S_OK;
|
2019-11-29 01:52:56 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
void Gpio_cleanup(void)
|
|
|
|
{
|
2019-12-01 14:34:57 -07:00
|
|
|
/* close down the backlight lines */
|
|
|
|
bcm2835_pwm_set_mode(PWM_BACKLIGHT, 1, 0);
|
|
|
|
bcm2835_gpio_set_pud(GLINE_BACKLIGHT, BCM2835_GPIO_PUD_OFF);
|
|
|
|
bcm2835_gpio_fsel(GLINE_BACKLIGHT, BCM2835_GPIO_FSEL_INPT);
|
2019-12-01 14:18:31 -07:00
|
|
|
|
|
|
|
/* close down the button lines */
|
|
|
|
bcm2835_gpio_set_pud(GLINE_BUTTON1, BCM2835_GPIO_PUD_OFF);
|
|
|
|
bcm2835_gpio_fsel(GLINE_BUTTON1, BCM2835_GPIO_FSEL_INPT);
|
|
|
|
bcm2835_gpio_set_pud(GLINE_BUTTON2, BCM2835_GPIO_PUD_OFF);
|
|
|
|
bcm2835_gpio_fsel(GLINE_BUTTON2, BCM2835_GPIO_FSEL_INPT);
|
|
|
|
bcm2835_gpio_set_pud(GLINE_BUTTON3, BCM2835_GPIO_PUD_OFF);
|
|
|
|
bcm2835_gpio_fsel(GLINE_BUTTON3, BCM2835_GPIO_FSEL_INPT);
|
|
|
|
bcm2835_gpio_set_pud(GLINE_BUTTON4, BCM2835_GPIO_PUD_OFF);
|
|
|
|
bcm2835_gpio_fsel(GLINE_BUTTON4, BCM2835_GPIO_FSEL_INPT);
|
|
|
|
|
|
|
|
if (!bcm2835_close())
|
|
|
|
Log(LWARN, "Closing BCM2835 library failed");
|
2019-11-29 01:52:56 -07:00
|
|
|
}
|
|
|
|
|
2019-12-05 18:21:37 -07:00
|
|
|
UINT32 Gpio_read_buttons(void)
|
2019-12-01 01:02:08 -07:00
|
|
|
{
|
2019-12-05 18:21:37 -07:00
|
|
|
UINT32 rc = 0;
|
2019-12-01 01:02:08 -07:00
|
|
|
|
2019-12-01 14:18:31 -07:00
|
|
|
if (bcm2835_gpio_lev(GLINE_BUTTON1) == LOW)
|
2019-12-01 15:45:46 -07:00
|
|
|
rc |= GRB_STATE_BUTTON1;
|
2019-12-01 14:18:31 -07:00
|
|
|
if (bcm2835_gpio_lev(GLINE_BUTTON2) == LOW)
|
2019-12-01 15:45:46 -07:00
|
|
|
rc |= GRB_STATE_BUTTON2;
|
2019-12-01 14:18:31 -07:00
|
|
|
if (bcm2835_gpio_lev(GLINE_BUTTON3) == LOW)
|
2019-12-01 15:45:46 -07:00
|
|
|
rc |= GRB_STATE_BUTTON3;
|
2019-12-01 14:18:31 -07:00
|
|
|
if (bcm2835_gpio_lev(GLINE_BUTTON4) == LOW)
|
2019-12-01 15:45:46 -07:00
|
|
|
rc |= GRB_STATE_BUTTON4;
|
2019-12-01 01:21:26 -07:00
|
|
|
return rc;
|
2019-12-01 01:02:08 -07:00
|
|
|
}
|
2019-12-01 14:34:57 -07:00
|
|
|
|
2019-12-05 18:21:37 -07:00
|
|
|
void Gpio_set_backlight(UINT32 level)
|
2019-12-01 14:34:57 -07:00
|
|
|
{
|
2019-12-01 15:43:05 -07:00
|
|
|
if (level > GSB_BACKLIGHT_MAX)
|
|
|
|
level = GSB_BACKLIGHT_MAX;
|
2019-12-01 14:34:57 -07:00
|
|
|
bcm2835_pwm_set_data(PWM_BACKLIGHT, level);
|
|
|
|
}
|