#include "power_display_service.h" #include "securec.h" #include "sys_config.h" #include "common_def.h" #include "sys_typedef.h" #include "service_alarm.h" #include "soc_osal.h" #include "cmsis_os2.h" #include "sql_alarm.h" #include "rtc_api.h" #include "task_service_timer.h" #include "TjdUiMsgCenter.h" #include static struct alarm_time g_time_data; struct delay_alarm g_delay_alarm; static bool isDayInMask(uint8_t dayOfWeek, uint8_t dayMask) { // 检查dayOfWeek是否在有效范围内(0-6代表周日到周六) if (dayOfWeek >= 7) { return false; } // 对于周日(dayOfWeek为0),我们需要检查dayMask中的0x40位 if (dayOfWeek == 0) { return (dayMask & 0x40) != 0; } // 对于其他天(周一至周六),我们可以直接进行位运算 uint8_t mask = 1 << (dayOfWeek - 1); // 注意这里减1,因为dayMask从0x01开始(周一) return (dayMask & mask) != 0; } static signed int tjd_service_alarm_handle(void *param) { struct rtc_class_ops *rtc_handle = tjd_driver_rtc_get_ops(); struct rtc_time time; rtc_handle->get_rtc_time(&time); uint8_t weekday = time.tm_wday; uint8_t hour = time.tm_hour; uint8_t minute = time.tm_min; uint8_t second = time.tm_sec; if (second != 0) return 1000; uint8_t alarm_counts = sql_alarm_get_alarm_number(NULL); uint8_t alarms_id[alarm_counts]; uint8_t *array_ptr = alarms_id; sql_alarm_get_alarm_index_list(&array_ptr); if (g_delay_alarm.enable) { if (g_delay_alarm.time.hour==hour && g_delay_alarm.time.minute==minute){ // 发送通知 g_delay_alarm.enable = false; g_time_data.hour = g_delay_alarm.time.hour; g_time_data.minute = g_delay_alarm.time.minute; uint32_t size = sizeof(struct alarm_time); TjdUiMsgEventPublish(TJDUI_TOPIC_EVENT_ALARM, &g_time_data, size); } } for (int i=0; iget_screen_state() != SCREEN_ON) { display_api->turn_on_screen(); } // display_api->set_screen_set_keepon_timeout(timeout); return; }