#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