• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 <stdint.h>
17 #include <securec.h>
18 #include <ohos_init.h>
19 #include <cmsis_os.h>
20 #include "service.h"
21 #include "samgr_lite.h"
22 #include "time_adapter.h"
23 
24 #define TOTAL_SPEC_TASK_NUM 19
25 
26 static const char *g_specTaskService[] = {
27     "ltsk_s1", "ltsk_s2", "ltsk_s3",
28     "otsk_s1", "otsk_s2", "otsk_s3", "otsk_s4",
29     "otsk_s5", "otsk_s6", "otsk_s7", "otsk_s8",
30     "otsk_s9", "otsk_s10", "otsk_s11", "otsk_s12",
31     "otsk_s13", "otsk_s14", "otsk_s15", "otsk_s16",
32 };
33 static const char *g_specServiceName1[] = {
34     "l6tsk_s1", "l6tsk_s2"
35 };
36 static const char *g_specServiceName2[] = {
37     "l7tsk_s1", "l7tsk_s2", "l7tsk_s3"
38 };
39 static const char *g_specServiceName3[] = {
40     "l8tsk_s1", "l8tsk_s2", "l8tsk_s3", "l8tsk_s4"
41 };
42 static const char *GetName(Service *service);
43 static const char *GetSpec1Name(Service *service);
44 static const char *GetSpec2Name(Service *service);
45 static const char *GetSpec3Name(Service *service);
46 static BOOL Initialize(Service *service, Identity identity);
47 static BOOL MessageHandle(Service *service, Request *msg);
48 static TaskConfig GetLowTagTaskConfig(Service *service);
49 static TaskConfig GetHighTagTaskConfig(Service *service);
50 static TaskConfig GetSpec1TagTaskConfig(Service *service);
51 static TaskConfig GetSpec2TagTaskConfig(Service *service);
52 static TaskConfig GetSpec3TagTaskConfig(Service *service);
53 static Service g_example[] = {
54     {GetName, Initialize, MessageHandle, GetLowTagTaskConfig},
55     {GetName, Initialize, MessageHandle, GetLowTagTaskConfig},
56     {GetName, Initialize, MessageHandle, GetLowTagTaskConfig},
57     {GetName, Initialize, MessageHandle, GetHighTagTaskConfig},
58     {GetName, Initialize, MessageHandle, GetHighTagTaskConfig},
59     {GetName, Initialize, MessageHandle, GetHighTagTaskConfig},
60     {GetName, Initialize, MessageHandle, GetHighTagTaskConfig},
61     {GetName, Initialize, MessageHandle, GetHighTagTaskConfig},
62     {GetName, Initialize, MessageHandle, GetHighTagTaskConfig},
63     {GetName, Initialize, MessageHandle, GetHighTagTaskConfig},
64     {GetName, Initialize, MessageHandle, GetHighTagTaskConfig},
65     {GetName, Initialize, MessageHandle, GetHighTagTaskConfig},
66     {GetName, Initialize, MessageHandle, GetHighTagTaskConfig},
67     {GetName, Initialize, MessageHandle, GetHighTagTaskConfig},
68     {GetName, Initialize, MessageHandle, GetHighTagTaskConfig},
69     {GetName, Initialize, MessageHandle, GetHighTagTaskConfig},
70     {GetName, Initialize, MessageHandle, GetHighTagTaskConfig},
71     {GetName, Initialize, MessageHandle, GetHighTagTaskConfig},
72     {GetName, Initialize, MessageHandle, GetHighTagTaskConfig}
73 };
74 static Service g_exampleSpec1[] = {
75     {GetSpec1Name, Initialize, MessageHandle, GetSpec1TagTaskConfig},
76     {GetSpec1Name, Initialize, MessageHandle, GetSpec1TagTaskConfig}
77 };
78 static Service g_exampleSpec2[] = {
79     {GetSpec2Name, Initialize, MessageHandle, GetSpec2TagTaskConfig},
80     {GetSpec2Name, Initialize, MessageHandle, GetSpec2TagTaskConfig},
81     {GetSpec2Name, Initialize, MessageHandle, GetSpec2TagTaskConfig}
82 };
83 static Service g_exampleSpec3[] = {
84     {GetSpec3Name, Initialize, MessageHandle, GetSpec3TagTaskConfig},
85     {GetSpec3Name, Initialize, MessageHandle, GetSpec3TagTaskConfig},
86     {GetSpec3Name, Initialize, MessageHandle, GetSpec3TagTaskConfig},
87     {GetSpec3Name, Initialize, MessageHandle, GetSpec3TagTaskConfig}
88 };
89 static uint32_t g_initIndex = 0;
90 
GetName(Service * service)91 static const char *GetName(Service *service)
92 {
93     int i;
94     for (i = 0; i < TOTAL_SPEC_TASK_NUM; ++i) {
95         if (service == &g_example[i]) {
96             return g_specTaskService[i];
97         }
98     }
99     return NULL;
100 }
101 
GetSpec1Name(Service * service)102 static const char *GetSpec1Name(Service *service)
103 {
104     int i;
105     // g_exampleSpec1 has 2 services
106     for (i = 0; i < 2; ++i) {
107         if (service == &g_exampleSpec1[i]) {
108             return g_specServiceName1[i];
109         }
110     }
111     return NULL;
112 }
113 
GetSpec2Name(Service * service)114 static const char *GetSpec2Name(Service *service)
115 {
116     int i;
117     // g_exampleSpec2 has 3 services
118     for (i = 0; i < 3; ++i) {
119         if (service == &g_exampleSpec2[i]) {
120             return g_specServiceName2[i];
121         }
122     }
123     return NULL;
124 }
125 
GetSpec3Name(Service * service)126 static const char *GetSpec3Name(Service *service)
127 {
128     int i;
129     // g_exampleSpec3 has 4 services
130     for (i = 0; i < 4; ++i) {
131         if (service == &g_exampleSpec3[i]) {
132             return g_specServiceName3[i];
133         }
134     }
135     return NULL;
136 }
137 
Initialize(Service * service,Identity identity)138 static BOOL Initialize(Service *service, Identity identity)
139 {
140     (void)identity;
141     printf("[Specified Task Test][TaskID:%u][Step:%u][Reg Finish S:%s]Time: %llu!\n",
142            (int)osThreadGetId(), g_initIndex++, service->GetName(service), SAMGR_GetProcessTime());
143     return TRUE;
144 }
145 
MessageHandle(Service * service,Request * msg)146 static BOOL MessageHandle(Service *service, Request *msg)
147 {
148     printf("[Specified Task Test][TaskID:%u][Step:%u][S:%s] msgId<%d> \n",
149            (int)osThreadGetId(), g_initIndex++, service->GetName(service), msg->msgId);
150     return FALSE;
151 }
152 
GetLowTagTaskConfig(Service * service)153 static TaskConfig GetLowTagTaskConfig(Service *service)
154 {
155     (void)service;
156     int16 customLevelLow = LEVEL_CUSTOM_BEGIN + 1;
157     TaskConfig config = {customLevelLow, PRI_NORMAL,
158                          0x400, 16, SPECIFIED_TASK};
159     return config;
160 }
161 
GetHighTagTaskConfig(Service * service)162 static TaskConfig GetHighTagTaskConfig(Service *service)
163 {
164     (void)service;
165     int16 customLevelHigh = LEVEL_CUSTOM_BEGIN + 2; // Custom level 2
166     TaskConfig config = {customLevelHigh, PRI_NORMAL,
167                          0x400, 16, SPECIFIED_TASK};
168     return config;
169 }
170 
GetSpec1TagTaskConfig(Service * service)171 static TaskConfig GetSpec1TagTaskConfig(Service *service)
172 {
173     (void)service;
174     int16 customLevelSpec1 = LEVEL_CUSTOM_BEGIN + 3; // Custom level 3
175     TaskConfig config = {customLevelSpec1, PRI_NORMAL,
176                          0x400, 16, SPECIFIED_TASK};
177     return config;
178 }
179 
GetSpec2TagTaskConfig(Service * service)180 static TaskConfig GetSpec2TagTaskConfig(Service *service)
181 {
182     (void)service;
183     int16 customLevelSpec2 = LEVEL_CUSTOM_BEGIN + 4; // Custom level 4
184     TaskConfig config = {customLevelSpec2, PRI_NORMAL,
185                          0x400, 16, SPECIFIED_TASK};
186     return config;
187 }
188 
GetSpec3TagTaskConfig(Service * service)189 static TaskConfig GetSpec3TagTaskConfig(Service *service)
190 {
191     (void)service;
192     int16 customLevelSpec3 = LEVEL_CUSTOM_BEGIN + 5; // Custom level 5
193     TaskConfig config = {customLevelSpec3, PRI_NORMAL,
194                          0x400, 16, SPECIFIED_TASK};
195     return config;
196 }
197 
SInit(Service * demo)198 static void SInit(Service *demo)
199 {
200     SAMGR_GetInstance()->RegisterService(demo);
201 
202     printf("[Specified Task Test][TaskID:%u][Step:%u][SYSEX Reg S:%s]Time: %llu!\n",
203            (int)osThreadGetId(), g_initIndex++, demo->GetName(demo), SAMGR_GetProcessTime());
204 }
205 
SSInit(void)206 static void SSInit(void)
207 {
208     int i;
209     for (i = 0; i < TOTAL_SPEC_TASK_NUM; ++i) {
210         SInit(&g_example[i]);
211     }
212 
213     // g_exampleSpec1 has 2 services
214     for (i = 0; i < 2; ++i) {
215         SInit(&g_exampleSpec1[i]);
216     }
217     // g_exampleSpec2 has 3 services
218     for (i = 0; i < 3; ++i) {
219         SInit(&g_exampleSpec2[i]);
220     }
221     // g_exampleSpec3 has 4 services
222     for (i = 0; i < 4; ++i) {
223         SInit(&g_exampleSpec3[i]);
224     }
225 }
226 
227 SYSEX_SERVICE_INIT(SSInit);
228