Files
microchip-application-bmd38…/led_drv.c
T

125 lines
2.6 KiB
C

#include "led_drv.h"
#include "nrf_log.h"
#include "FreeRTOS.h"
#include "semphr.h"
#include "task.h"
#if (DEF_APA102_2020_ENABLED)
#include "apa102_2020.h"
static const led_drv_if_t *p_inst = &apa102_drv;
#else
static led_drv_if_t *p_inst = NULL;
#endif
#if (DEF_LED_DRV_ENABLED)
static bool btWaitLedFlag = 0;
static bool noEventLedFlag = 0;
static bool preWorkLedFlag = 0;
static bool workingLedFlag = 0;
static bool postWorkLedFlag = 0;
int32_t led_mode(uint16_t mode_status)
{
btWaitLedFlag = 0;
noEventLedFlag = 0;
preWorkLedFlag = 0;
workingLedFlag = 0;
postWorkLedFlag = 0;
switch (mode_status)
{
case BT_WAIT:
btWaitLedFlag = 1;
NRF_LOG_INFO("%s(BT_WAIT) is unimplemented.", __FUNCTION__);
break;
case NO_EVENT:
noEventLedFlag = 1;
NRF_LOG_INFO("%s(NO_EVENT) is unimplemented.", __FUNCTION__);
break;
case PRE_WORK:
preWorkLedFlag = 1;
NRF_LOG_INFO("%s(PRE_WORK) is unimplemented.", __FUNCTION__);
break;
case WORKING:
workingLedFlag = 1;
NRF_LOG_INFO("%s(WORKING) is unimplemented.", __FUNCTION__);
break;
case POST_WORK:
postWorkLedFlag = 1;
NRF_LOG_INFO("%s(POST_WORK) is unimplemented.", __FUNCTION__);
break;
default:
NRF_LOG_INFO("%s(default) is unimplemented.", __FUNCTION__);
break;
}
return 0;
}
int32_t led_set(struct led_color color)
{
if (p_inst == NULL)
{
return LED_DRV_ERROR;
}
if (p_inst->set != NULL)
{
for (int i = 0; i < LED_COUNT; i++)
{
p_inst->set(i, color, 1);
}
return LED_DRV_SUCCESS;
}
return LED_DRV_SUCCESS;
}
int32_t led_single_led_set(uint32_t idx, struct led_color color, uint8_t brightness)
{
if (p_inst == NULL)
{
return LED_DRV_ERROR;
}
if (p_inst->set != NULL)
{
p_inst->set(idx, color, brightness);
return LED_DRV_SUCCESS;
}
return LED_DRV_SUCCESS;
}
int32_t led_init(void)
{
if (p_inst == NULL)
{
return LED_DRV_ERROR;
}
return p_inst->init(LED_COUNT);
}
int32_t led_as_rainbow(void)
{
uint8_t color_idx;
struct led_color color[6] = { LED_RED, LED_ORANGE, LED_YELLOW, LED_GREEN, LED_BLUE, LED_PURPLE };
for (int i = 0; i < LED_COUNT; i++)
{
color_idx = i % COUNT_ARRAY_SIZE(color);
led_single_led_set(i, color[color_idx], 1);
}
return 0;
}
#endif /* ! DEF_LED_DRV_ENABLED */