333 lines
7.8 KiB
C
333 lines
7.8 KiB
C
|
#include "ak517.h"
|
||
|
|
||
|
#ifdef USE_AK517
|
||
|
|
||
|
/* 0: 未播放; 1: 正在播放 */
|
||
|
static uint8_t ak517_status = 0; /* 播放状态(模块) */
|
||
|
static uint8_t ak517_play_status = 0; /* 播放状态(用户) */
|
||
|
|
||
|
static uint8_t ak517_send_count = 0;
|
||
|
|
||
|
static uint8_t ak517_status_stop_try_count = 0;
|
||
|
static uint8_t ak517_status_playing_try_count = 0;
|
||
|
|
||
|
static uint8_t ak517_door_opening_warning_task_uuid = 0;
|
||
|
static uint8_t ak517_left_turn_warning_task_uuid = 0;
|
||
|
static uint8_t ak517_right_turn_warning_task_uuid = 0;
|
||
|
static uint8_t ak517_reverse_warning_task_uuid = 0;
|
||
|
static uint8_t ak517_arrival_warning_task_uuid = 0;
|
||
|
static uint8_t ak517_departure_warning_task_uuid = 0;
|
||
|
static uint8_t ak517_please_note_that_task_uuid = 0;
|
||
|
|
||
|
static void ak517_door_opening_warning_task(uint8_t uuid);
|
||
|
static void ak517_left_turn_warning_task(uint8_t uuid);
|
||
|
static void ak517_right_turn_warning_task(uint8_t uuid);
|
||
|
static void ak517_reverse_warning_task(uint8_t uuid);
|
||
|
static void ak517_arrival_warning_task(uint8_t uuid);
|
||
|
static void ak517_departure_warning_task(uint8_t uuid);
|
||
|
static void ak517_please_note_that_task(uint8_t uuid);
|
||
|
static void ak517_status_parsing_task(uint8_t uuid);
|
||
|
|
||
|
void ak517_init(void)
|
||
|
{
|
||
|
/* 创建任务, 并挂起 */
|
||
|
ak517_door_opening_warning_task_uuid = task_create(ak517_door_opening_warning_task, 200);
|
||
|
task_suspend(ak517_door_opening_warning_task_uuid);
|
||
|
|
||
|
ak517_left_turn_warning_task_uuid = task_create(ak517_left_turn_warning_task, 200);
|
||
|
task_suspend(ak517_left_turn_warning_task_uuid);
|
||
|
|
||
|
ak517_right_turn_warning_task_uuid = task_create(ak517_right_turn_warning_task, 200);
|
||
|
task_suspend(ak517_right_turn_warning_task_uuid);
|
||
|
|
||
|
ak517_reverse_warning_task_uuid = task_create(ak517_reverse_warning_task, 200);
|
||
|
task_suspend(ak517_reverse_warning_task_uuid);
|
||
|
|
||
|
ak517_arrival_warning_task_uuid = task_create(ak517_arrival_warning_task, 200);
|
||
|
task_suspend(ak517_arrival_warning_task_uuid);
|
||
|
|
||
|
ak517_departure_warning_task_uuid = task_create(ak517_departure_warning_task, 200);
|
||
|
task_suspend(ak517_departure_warning_task_uuid);
|
||
|
|
||
|
ak517_please_note_that_task_uuid = task_create(ak517_please_note_that_task, 100);
|
||
|
task_suspend(ak517_please_note_that_task_uuid);
|
||
|
|
||
|
task_create(ak517_status_parsing_task, 10);
|
||
|
}
|
||
|
|
||
|
void ak517_send_pulse(uint8_t count)
|
||
|
{
|
||
|
for (uint8_t i = 0; i < count; i++)
|
||
|
{
|
||
|
gpio_bit_write(AK517_TG1_PERIPH, AK517_TG1_PIN, SET);
|
||
|
delay_us(100);
|
||
|
gpio_bit_write(AK517_TG1_PERIPH, AK517_TG1_PIN, RESET);
|
||
|
delay_us(100);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @brief 音量 +
|
||
|
*/
|
||
|
void ak517_volume_up(void)
|
||
|
{
|
||
|
ak517_send_pulse(2);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @brief 音量 -
|
||
|
*/
|
||
|
void ak517_volume_down(void)
|
||
|
{
|
||
|
ak517_send_pulse(3);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @brief 停止播放
|
||
|
*/
|
||
|
void ak517_stop(void)
|
||
|
{
|
||
|
/* 停止 */
|
||
|
ak517_send_pulse(1);
|
||
|
|
||
|
delay_ms(100);
|
||
|
|
||
|
ak517_play_status = 0;
|
||
|
|
||
|
/* 挂起任务 */
|
||
|
task_suspend(ak517_door_opening_warning_task_uuid);
|
||
|
task_suspend(ak517_left_turn_warning_task_uuid);
|
||
|
task_suspend(ak517_right_turn_warning_task_uuid);
|
||
|
task_suspend(ak517_reverse_warning_task_uuid);
|
||
|
task_suspend(ak517_arrival_warning_task_uuid);
|
||
|
task_suspend(ak517_departure_warning_task_uuid);
|
||
|
task_suspend(ak517_please_note_that_task_uuid);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @brief 开门预警
|
||
|
*/
|
||
|
void ak517_door_opening_warning(void)
|
||
|
{
|
||
|
task_resume(ak517_door_opening_warning_task_uuid);
|
||
|
}
|
||
|
|
||
|
void ak517_left_turn_warning(void)
|
||
|
{
|
||
|
task_resume(ak517_left_turn_warning_task_uuid);
|
||
|
}
|
||
|
|
||
|
void ak517_right_turn_warning(void)
|
||
|
{
|
||
|
task_resume(ak517_right_turn_warning_task_uuid);
|
||
|
}
|
||
|
|
||
|
void ak517_reverse_warning(void)
|
||
|
{
|
||
|
task_resume(ak517_reverse_warning_task_uuid);
|
||
|
}
|
||
|
|
||
|
void ak517_arrival_warning(void)
|
||
|
{
|
||
|
task_resume(ak517_arrival_warning_task_uuid);
|
||
|
}
|
||
|
|
||
|
void ak517_departure_warning(void)
|
||
|
{
|
||
|
//task_resume(ak517_status_parsing_task_uuid);
|
||
|
}
|
||
|
|
||
|
void ak517_please_note_that(void)
|
||
|
{
|
||
|
/* 开始任务 */
|
||
|
task_resume(ak517_please_note_that_task_uuid);
|
||
|
}
|
||
|
|
||
|
static void ak517_door_opening_warning_task(uint8_t uuid)
|
||
|
{
|
||
|
/* 默认以200ms间隔检测 */
|
||
|
task_set_frequency(uuid, 200);
|
||
|
|
||
|
/* 未播放语音 */
|
||
|
if(ak517_status == 0)
|
||
|
{
|
||
|
if(ak517_play_status == 0)
|
||
|
{
|
||
|
/* 车辆上下客,请勿靠近 */
|
||
|
ak517_send_pulse(7);
|
||
|
|
||
|
/* 正在播放, 此时 模块状态 应为 1 */
|
||
|
ak517_play_status = 1;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
/* 未播放 */
|
||
|
ak517_play_status = 0;
|
||
|
|
||
|
task_set_frequency(uuid, 2000);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
static void ak517_left_turn_warning_task(uint8_t uuid)
|
||
|
{
|
||
|
/* 默认以200ms间隔检测 */
|
||
|
task_set_frequency(uuid, 200);
|
||
|
|
||
|
/* 未播放语音 */
|
||
|
if(ak517_status == 0)
|
||
|
{
|
||
|
if(ak517_play_status == 0)
|
||
|
{
|
||
|
/* 车辆左转,请注意避让 */
|
||
|
ak517_send_pulse(9);
|
||
|
|
||
|
/* 正在播放, 此时 模块状态 应为 1 */
|
||
|
ak517_play_status = 1;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
/* 未播放 */
|
||
|
ak517_play_status = 0;
|
||
|
|
||
|
task_set_frequency(uuid, 2000);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void ak517_right_turn_warning_task(uint8_t uuid)
|
||
|
{
|
||
|
/* 默认以200ms间隔检测 */
|
||
|
task_set_frequency(uuid, 200);
|
||
|
|
||
|
/* 未播放语音 */
|
||
|
if(ak517_status == 0)
|
||
|
{
|
||
|
if(ak517_play_status == 0)
|
||
|
{
|
||
|
/* 车辆右转,请注意避让 */
|
||
|
ak517_send_pulse(8);
|
||
|
|
||
|
/* 正在播放, 此时 模块状态 应为 1 */
|
||
|
ak517_play_status = 1;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
/* 未播放 */
|
||
|
ak517_play_status = 0;
|
||
|
|
||
|
task_set_frequency(uuid, 2000);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void ak517_reverse_warning_task(uint8_t uuid)
|
||
|
{
|
||
|
/* 默认以200ms间隔检测 */
|
||
|
task_set_frequency(uuid, 200);
|
||
|
|
||
|
/* 未播放语音 */
|
||
|
if(ak517_status == 0)
|
||
|
{
|
||
|
if(ak517_play_status == 0)
|
||
|
{
|
||
|
/* 倒车,请注意避让 */
|
||
|
ak517_send_pulse(12);
|
||
|
|
||
|
/* 正在播放, 此时 模块状态 应为 1 */
|
||
|
ak517_play_status = 1;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
/* 未播放 */
|
||
|
ak517_play_status = 0;
|
||
|
|
||
|
task_set_frequency(uuid, 2000);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
static void ak517_arrival_warning_task(uint8_t uuid)
|
||
|
{
|
||
|
/* 默认以200ms间隔检测 */
|
||
|
task_set_frequency(uuid, 200);
|
||
|
|
||
|
/* 未播放语音 */
|
||
|
if(ak517_status == 0)
|
||
|
{
|
||
|
if(ak517_play_status == 0)
|
||
|
{
|
||
|
/* 车辆进站,请注意 */
|
||
|
ak517_send_pulse(6);
|
||
|
|
||
|
/* 正在播放, 此时 模块状态 应为 1 */
|
||
|
ak517_play_status = 1;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
/* 未播放 */
|
||
|
ak517_play_status = 0;
|
||
|
|
||
|
task_set_frequency(uuid, 2000);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
static void ak517_departure_warning_task(uint8_t uuid)
|
||
|
{
|
||
|
}
|
||
|
|
||
|
static void ak517_please_note_that_task(uint8_t uuid)
|
||
|
{
|
||
|
ak517_send_count++;
|
||
|
|
||
|
switch (ak517_send_count)
|
||
|
{
|
||
|
case 1:
|
||
|
ak517_send_pulse(18); /* 请 */
|
||
|
task_set_frequency(uuid, 360);
|
||
|
break;
|
||
|
case 2:
|
||
|
ak517_send_pulse(28); /* 注意 */
|
||
|
task_set_frequency(uuid, 450);
|
||
|
break;
|
||
|
case 3:
|
||
|
ak517_send_count = 0;
|
||
|
task_set_frequency(uuid, 2000);
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
static void ak517_status_parsing_task(uint8_t uuid)
|
||
|
{
|
||
|
/* 正在播放 */
|
||
|
if(gpio_input_bit_get(AK517_TG4_PERIPH, AK517_TG4_PIN) == SET)
|
||
|
{
|
||
|
ak517_status_playing_try_count++;
|
||
|
|
||
|
if(ak517_status_playing_try_count > 4)
|
||
|
{
|
||
|
ak517_status = SET;
|
||
|
|
||
|
ak517_status_playing_try_count = 0;
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
ak517_status_stop_try_count++;
|
||
|
|
||
|
if(ak517_status_stop_try_count > 4)
|
||
|
{
|
||
|
ak517_status = RESET;
|
||
|
|
||
|
ak517_status_stop_try_count = 0;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//static uint8_t ak517_play_status(void)
|
||
|
//{
|
||
|
// return gpio_input_bit_get(AK517_TG4_PERIPH, AK517_TG4_PIN);
|
||
|
//}
|
||
|
|
||
|
#endif
|