|
@ -6,11 +6,75 @@ |
|
|
#define BLINK_CNT 1 |
|
|
#define BLINK_CNT 1 |
|
|
#define BLINK_PERIOD_MS (100) |
|
|
#define BLINK_PERIOD_MS (100) |
|
|
|
|
|
|
|
|
|
|
|
#define LIGHT_PWM_DRIVER 1 |
|
|
|
|
|
|
|
|
|
|
|
// LED_GREEN_PIN |
|
|
|
|
|
|
|
|
|
|
|
#if LIGHT_PWM_DRIVER |
|
|
|
|
|
|
|
|
|
|
|
typedef struct { |
|
|
|
|
|
nrf_drv_pwm_t driver; |
|
|
|
|
|
nrf_pwm_values_individual_t seq_values; |
|
|
|
|
|
nrf_pwm_sequence_t seq; |
|
|
|
|
|
nrf_drv_pwm_config_t config; |
|
|
|
|
|
} pwm_light_ctrl_t; |
|
|
|
|
|
|
|
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
|
|
static pwm_light_ctrl_t light_ctrl = { |
|
|
|
|
|
.driver = NRF_DRV_PWM_INSTANCE(LIGHT_PWM_INSTANCE), |
|
|
|
|
|
.seq_values = {0}, |
|
|
|
|
|
.seq = |
|
|
|
|
|
{ |
|
|
|
|
|
.values.p_individual = &light_ctrl.seq_values, |
|
|
|
|
|
.length = NRF_PWM_VALUES_LENGTH(light_ctrl.seq_values), |
|
|
|
|
|
.repeats = 0, |
|
|
|
|
|
.end_delay = 0, |
|
|
|
|
|
}, |
|
|
|
|
|
.config = |
|
|
|
|
|
{ |
|
|
|
|
|
|
|
|
|
|
|
.output_pins = |
|
|
|
|
|
{ |
|
|
|
|
|
LED_GREEN_PIN, // |
|
|
|
|
|
NRF_DRV_PWM_PIN_NOT_USED, |
|
|
|
|
|
NRF_DRV_PWM_PIN_NOT_USED, |
|
|
|
|
|
NRF_DRV_PWM_PIN_NOT_USED, |
|
|
|
|
|
}, |
|
|
|
|
|
.irq_priority = APP_IRQ_PRIORITY_LOWEST, |
|
|
|
|
|
.base_clock = NRF_PWM_CLK_250kHz, |
|
|
|
|
|
.count_mode = NRF_PWM_MODE_UP, |
|
|
|
|
|
.top_value = 100, // 125kHz / 46 = 2.717k |
|
|
|
|
|
.load_mode = NRF_PWM_LOAD_INDIVIDUAL, |
|
|
|
|
|
.step_mode = NRF_PWM_STEP_AUTO, |
|
|
|
|
|
|
|
|
|
|
|
}, |
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
static LightEffect m_light_effect; |
|
|
static LightEffect m_light_effect; |
|
|
static bool m_led_green_light_state; |
|
|
static bool m_led_green_light_state; |
|
|
static int m_blink_cnt; |
|
|
static int m_blink_cnt; |
|
|
APP_TIMER_DEF(m_green_light_effect_tmr); |
|
|
APP_TIMER_DEF(m_green_light_effect_tmr); |
|
|
|
|
|
|
|
|
|
|
|
void BoardLight_setGreenLightState(bool state) { |
|
|
|
|
|
#if LIGHT_PWM_DRIVER |
|
|
|
|
|
if (state) { |
|
|
|
|
|
light_ctrl.seq_values.channel_0 = 95; // 设置占空比,数值最大不超过 top_value |
|
|
|
|
|
nrfx_pwm_simple_playback(&light_ctrl.driver, &light_ctrl.seq, 1, NRF_DRV_PWM_FLAG_LOOP); |
|
|
|
|
|
} else { |
|
|
|
|
|
nrfx_pwm_stop(&light_ctrl.driver, true); |
|
|
|
|
|
} |
|
|
|
|
|
#else |
|
|
|
|
|
if (state) { |
|
|
|
|
|
nrf_gpio_pin_set(LED_GREEN_PIN); |
|
|
|
|
|
m_led_green_light_state = true; |
|
|
|
|
|
} else { |
|
|
|
|
|
nrf_gpio_pin_clear(LED_GREEN_PIN); |
|
|
|
|
|
m_led_green_light_state = false; |
|
|
|
|
|
} |
|
|
|
|
|
#endif |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
static void BoardLight_effect_tmr_handler(void* p_context) { // |
|
|
static void BoardLight_effect_tmr_handler(void* p_context) { // |
|
|
if (m_light_effect == kLightEffect_close) { |
|
|
if (m_light_effect == kLightEffect_close) { |
|
|
if (m_led_green_light_state) { |
|
|
if (m_led_green_light_state) { |
|
@ -38,22 +102,15 @@ static void BoardLight_effect_tmr_handler(void *p_context) { // |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
void BoardLight_Init() { |
|
|
void BoardLight_Init() { |
|
|
znrf_gpio_cfg_output(LED_GREEN_PIN, NRF_GPIO_PIN_NOPULL); |
|
|
|
|
|
|
|
|
|
|
|
ZERROR_CHECK(app_timer_create(&m_green_light_effect_tmr, APP_TIMER_MODE_REPEATED, BoardLight_effect_tmr_handler)); |
|
|
ZERROR_CHECK(app_timer_create(&m_green_light_effect_tmr, APP_TIMER_MODE_REPEATED, BoardLight_effect_tmr_handler)); |
|
|
|
|
|
#if LIGHT_PWM_DRIVER |
|
|
|
|
|
APP_ERROR_CHECK(nrfx_pwm_init(&light_ctrl.driver, &light_ctrl.config, NULL)); |
|
|
|
|
|
#else |
|
|
|
|
|
znrf_gpio_cfg_output(LED_GREEN_PIN, NRF_GPIO_PIN_NOPULL); |
|
|
|
|
|
#endif |
|
|
} |
|
|
} |
|
|
void BoardLight_load() {} |
|
|
void BoardLight_load() {} |
|
|
void BoardLight_unload() {} |
|
|
|
|
|
|
|
|
|
|
|
void BoardLight_setGreenLightState(bool state) { |
|
|
|
|
|
if (state) { |
|
|
|
|
|
nrf_gpio_pin_set(LED_GREEN_PIN); |
|
|
|
|
|
m_led_green_light_state = true; |
|
|
|
|
|
} else { |
|
|
|
|
|
nrf_gpio_pin_clear(LED_GREEN_PIN); |
|
|
|
|
|
m_led_green_light_state = false; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
void BoardLight_unload() { BoardLight_setGreenLightEffect(kLightEffect_close); } |
|
|
|
|
|
|
|
|
void BoardLight_toggleGreenLightState() { nrf_gpio_pin_toggle(LED_GREEN_PIN); } |
|
|
void BoardLight_toggleGreenLightState() { nrf_gpio_pin_toggle(LED_GREEN_PIN); } |
|
|
|
|
|
|
|
|