125 lines
2.6 KiB
C
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 */ |