• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2020-2021 Huawei Device Co., Ltd.
3  *
4  * HDF is dual licensed: you can use it either under the terms of
5  * the GPL, or the BSD license, at your option.
6  * See the LICENSE file in the root of this repository for complete details.
7  */
8 
9 #include "hdf_message_looper.h"
10 #include "hdf_message_task.h"
11 #include "osal_message.h"
12 
HdfMessageLooperStart(struct HdfMessageLooper * looper)13 void HdfMessageLooperStart(struct HdfMessageLooper *looper)
14 {
15     struct HdfMessage *message = NULL;
16     while (looper != NULL) {
17         message = HdfMessageQueueNext(&looper->messageQueue);
18         if (message != NULL) {
19             if (message->messageId == MESSAGE_STOP_LOOP) {
20                 HdfMessageRecycle(message);
21                 OsalMessageQueueDestroy(&looper->messageQueue);
22                 break;
23             } else if (message->target != NULL) {
24                 struct HdfMessageTask *task = message->target;
25                 task->DispatchMessage(task, message);
26             }
27             HdfMessageRecycle(message);
28         }
29     }
30 }
31 
HdfMessageLooperStop(struct HdfMessageLooper * looper)32 void HdfMessageLooperStop(struct HdfMessageLooper *looper)
33 {
34     if (looper == NULL) {
35         return;
36     }
37 
38     struct HdfMessage *message = HdfMessageObtain(0);
39     if (message != NULL) {
40         message->messageId = MESSAGE_STOP_LOOP;
41         HdfMessageQueueEnqueue(&looper->messageQueue, message, 0);
42     }
43 }
44 
HdfMessageLooperConstruct(struct HdfMessageLooper * looper)45 void HdfMessageLooperConstruct(struct HdfMessageLooper *looper)
46 {
47     if (looper != NULL) {
48         OsalMessageQueueInit(&looper->messageQueue);
49         looper->Start = HdfMessageLooperStart;
50         looper->Stop = HdfMessageLooperStop;
51     }
52 }
53 
54