1/*
2 * Copyright (c) 2020-2022 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 *    http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16#include "example.h"
17#include <stdint.h>
18#include <feature.h>
19#include <securec.h>
20#include <ohos_init.h>
21#include <samgr_lite.h>
22#include <cmsis_os.h>
23#include "time_adapter.h"
24
25static const char *GetName(Service *service);
26static BOOL Initialize(Service *service, Identity identity);
27static BOOL MessageHandle(Service *service, Request *msg);
28static TaskConfig GetTaskConfig(Service *service);
29static Service g_example[] = {
30    {GetName, Initialize, MessageHandle, GetTaskConfig},
31    {GetName, Initialize, MessageHandle, GetTaskConfig},
32    {GetName, Initialize, MessageHandle, GetTaskConfig},
33    {GetName, Initialize, MessageHandle, GetTaskConfig}
34};
35static int g_initIndex = 0;
36
37static const char *GetName(Service *service)
38{
39    // test cases demo 0
40    if (service == &g_example[0]) {
41        return TASK_SERVICE1;
42    }
43    // test cases demo 1
44    if (service == &g_example[1]) {
45        return TASK_SERVICE2;
46    }
47    // test cases demo 2
48    if (service == &g_example[2]) {
49        return TASK_SERVICE3;
50    }
51    // test cases demo 3
52    if (service == &g_example[3]) {
53        return TASK_SERVICE4;
54    }
55    return NULL;
56}
57
58static BOOL Initialize(Service *service, Identity identity)
59{
60    (void)identity;
61    printf("[Task Test][TaskID:%u][Step:%u][Reg Finish S:%s]Time: %llu!\n",
62           (int)osThreadGetId(), g_initIndex++, service->GetName(service), SAMGR_GetProcessTime());
63    return TRUE;
64}
65
66static BOOL MessageHandle(Service *service, Request *msg)
67{
68    printf("[Task Test][TaskID:%u][Step:%u][S:%s] msgId<%d> \n",
69           (int)osThreadGetId(), g_initIndex++, service->GetName(service), msg->msgId);
70    return FALSE;
71}
72
73static TaskConfig GetTaskConfig(Service *service)
74{
75    TaskConfig config = {LEVEL_HIGH, PRI_NORMAL,
76                         0x800, 5, SHARED_TASK};
77    // test cases demo 0
78    if (service == &g_example[0]) {
79        config.taskFlags = SINGLE_TASK;
80    }
81    // test cases demo 3
82    if (service == &g_example[3]) {
83        config.priority = PRI_ABOVE_NORMAL;
84    }
85    return config;
86}
87
88static void SInit(Service *demo)
89{
90    SAMGR_GetInstance()->RegisterService(demo);
91
92    printf("[Task Test][TaskID:%u][Step:%u][SYSEX Reg S:%s]Time: %llu!\n",
93           (int)osThreadGetId(), g_initIndex++, demo->GetName(demo), SAMGR_GetProcessTime());
94}
95
96static void S1Init(void)
97{
98    // test cases demo 0
99    SInit(&g_example[0]);
100}
101
102static void S2Init(void)
103{
104    // test cases demo 1
105    SInit(&g_example[1]);
106}
107
108static void S3Init(void)
109{
110    // test cases demo 2
111    SInit(&g_example[2]);
112}
113
114static void S4Init(void)
115{
116    // test cases demo 3
117    SInit(&g_example[3]);
118}
119
120SYSEX_SERVICE_INIT(S1Init);
121SYSEX_SERVICE_INIT(S2Init);
122SYSEX_SERVICE_INIT(S3Init);
123SYSEX_SERVICE_INIT(S4Init);
124