diff --git a/LICENSE b/LICENSE old mode 100755 new mode 100644 diff --git a/README.md b/README.md old mode 100755 new mode 100644 diff --git a/README_zh.md b/README_zh.md old mode 100755 new mode 100644 diff --git a/app/BUILD.gn b/app/BUILD.gn old mode 100755 new mode 100644 index 60b79734918b0c9a880742f795c909efb434f151..ae94e56f5890f82f85a6272a9ab8cf7960f96029 --- a/app/BUILD.gn +++ b/app/BUILD.gn @@ -1,20 +1,18 @@ -# Copyright (c) 2020 Huawei Device Co., Ltd. -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import("//build/lite/config/component/lite_component.gni") - -lite_component("app") { - features = [ - "startup", - ] -} +# Copyright (c) 2020-2022 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/lite/config/component/lite_component.gni") + +lite_component("app") { + features = [ "startup" ] +} diff --git a/app/demolink/BUILD.gn b/app/demolink/BUILD.gn old mode 100755 new mode 100644 index 3dceb613f8f2361b111115bbb1f52393c8ddf244..f46075f9430bda14b11444b96866edf67b0470b7 --- a/app/demolink/BUILD.gn +++ b/app/demolink/BUILD.gn @@ -1,23 +1,21 @@ -# Copyright (c) 2020 Huawei Device Co., Ltd. -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -static_library("example_demolink") { - sources = [ - "helloworld.c" - ] - - include_dirs = [ - "//utils/native/lite/include", - "//domains/iot/link/libbuild" - ] -} +# Copyright (c) 2020-2022 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +static_library("example_demolink") { + sources = [ "helloworld.c" ] + + include_dirs = [ + "//utils/native/lite/include", + "//domains/iot/link/libbuild", + ] +} diff --git a/app/demolink/helloworld.c b/app/demolink/helloworld.c old mode 100755 new mode 100644 index 05d5360ca3cc31b6e72e372b5dd95ad7a6d3cce5..f1deceadc62b5cdb0098cb0b9838465532b5bf1f --- a/app/demolink/helloworld.c +++ b/app/demolink/helloworld.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020 Huawei Device Co., Ltd. + * Copyright (c) 2020-2022 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at diff --git a/app/iothardware/BUILD.gn b/app/iothardware/BUILD.gn old mode 100755 new mode 100644 index fba5e4c47e1c62a0f5214f143b1a387e0d271440..d5344034c7fb59da811d3689339d836130956859 --- a/app/iothardware/BUILD.gn +++ b/app/iothardware/BUILD.gn @@ -1,24 +1,22 @@ -# Copyright (c) 2020 Huawei Device Co., Ltd. -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -static_library("led_example") { - sources = [ - "led_example.c" - ] - - include_dirs = [ - "//utils/native/lite/include", - "//kernel/liteos_m/kal/cmsis", - "//base/iot_hardware/peripheral/interfaces/kits", - ] -} +# Copyright (c) 2020-2022 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +static_library("led_example") { + sources = [ "led_example.c" ] + + include_dirs = [ + "//utils/native/lite/include", + "//kernel/liteos_m/kal/cmsis", + "//base/iot_hardware/peripheral/interfaces/kits", + ] +} diff --git a/app/iothardware/led_example.c b/app/iothardware/led_example.c old mode 100755 new mode 100644 index 73242242ef5e36fffc981c1b69e3e237f816600b..3ef20577e3adb5482be2012a61a1ee2fa88fd1c1 --- a/app/iothardware/led_example.c +++ b/app/iothardware/led_example.c @@ -1,84 +1,83 @@ -/* - * Copyright (c) 2020 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include - -#include - -#include "ohos_init.h" -#include "cmsis_os2.h" -#include "iot_gpio.h" - -#define LED_INTERVAL_TIME_US 300000 -#define LED_TASK_STACK_SIZE 512 -#define LED_TASK_PRIO 25 -#define LED_TEST_GPIO 9 // for hispark_pegasus -enum LedState { - LED_ON = 0, - LED_OFF, - LED_SPARK, -}; - -enum LedState g_ledState = LED_SPARK; - -static void *LedTask(const char *arg) -{ - (void)arg; - while (1) { - switch (g_ledState) { - case LED_ON: - IoTGpioSetOutputVal(LED_TEST_GPIO, 1); - usleep(LED_INTERVAL_TIME_US); - break; - case LED_OFF: - IoTGpioSetOutputVal(LED_TEST_GPIO, 0); - usleep(LED_INTERVAL_TIME_US); - break; - case LED_SPARK: - IoTGpioSetOutputVal(LED_TEST_GPIO, 0); - usleep(LED_INTERVAL_TIME_US); - IoTGpioSetOutputVal(LED_TEST_GPIO, 1); - usleep(LED_INTERVAL_TIME_US); - break; - default: - usleep(LED_INTERVAL_TIME_US); - break; - } - } - - return NULL; -} - -static void LedExampleEntry(void) -{ - osThreadAttr_t attr; - - IoTGpioInit(LED_TEST_GPIO); - IoTGpioSetDir(LED_TEST_GPIO, IOT_GPIO_DIR_OUT); - - attr.name = "LedTask"; - attr.attr_bits = 0U; - attr.cb_mem = NULL; - attr.cb_size = 0U; - attr.stack_mem = NULL; - attr.stack_size = LED_TASK_STACK_SIZE; - attr.priority = LED_TASK_PRIO; - - if (osThreadNew((osThreadFunc_t)LedTask, NULL, &attr) == NULL) { - printf("[LedExample] Falied to create LedTask!\n"); - } -} - -SYS_RUN(LedExampleEntry); +/* + * Copyright (c) 2020-2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include "ohos_init.h" +#include "cmsis_os2.h" +#include "iot_gpio.h" + +#define LED_INTERVAL_TIME_US 300000 +#define LED_TASK_STACK_SIZE 512 +#define LED_TASK_PRIO 25 +#define LED_TEST_GPIO 9 // for hispark_pegasus + +enum LedState { + LED_ON = 0, + LED_OFF, + LED_SPARK, +}; + +enum LedState g_ledState = LED_SPARK; + +static void *LedTask(const char *arg) +{ + (void)arg; + while (1) { + switch (g_ledState) { + case LED_ON: + IoTGpioSetOutputVal(LED_TEST_GPIO, 1); + usleep(LED_INTERVAL_TIME_US); + break; + case LED_OFF: + IoTGpioSetOutputVal(LED_TEST_GPIO, 0); + usleep(LED_INTERVAL_TIME_US); + break; + case LED_SPARK: + IoTGpioSetOutputVal(LED_TEST_GPIO, 0); + usleep(LED_INTERVAL_TIME_US); + IoTGpioSetOutputVal(LED_TEST_GPIO, 1); + usleep(LED_INTERVAL_TIME_US); + break; + default: + usleep(LED_INTERVAL_TIME_US); + break; + } + } + + return NULL; +} + +static void LedExampleEntry(void) +{ + osThreadAttr_t attr; + + IoTGpioInit(LED_TEST_GPIO); + IoTGpioSetDir(LED_TEST_GPIO, IOT_GPIO_DIR_OUT); + + attr.name = "LedTask"; + attr.attr_bits = 0U; + attr.cb_mem = NULL; + attr.cb_size = 0U; + attr.stack_mem = NULL; + attr.stack_size = LED_TASK_STACK_SIZE; + attr.priority = LED_TASK_PRIO; + + if (osThreadNew((osThreadFunc_t)LedTask, NULL, &attr) == NULL) { + printf("[LedExample] Failed to create LedTask!\n"); + } +} + +SYS_RUN(LedExampleEntry); diff --git a/app/samgr/BUILD.gn b/app/samgr/BUILD.gn old mode 100755 new mode 100644 index 36b2a6dcff1b7e84093e6459479b8e5fb63cdcef..1a8617eac4b03fcadecac8ccf5a860b3b0b643ee --- a/app/samgr/BUILD.gn +++ b/app/samgr/BUILD.gn @@ -1,36 +1,36 @@ -# Copyright (c) 2020 Huawei Device Co., Ltd. -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -static_library("example_samgr") { - sources = [ - "//test/xts/acts/distributed_schedule_lite/samgr_hal/utils/samgr_maintenance.c", - "bootstrap_example.c", - "broadcast_example.c", - "feature_example.c", - "maintenance_example.c", - "service_example.c", - "service_recovery_example.c", - "specified_task_example.c", - "task_example.c", - ] - - include_dirs = [ - "//utils/native/lite/include", - "//kernel/liteos_m/components/cmsis", - "//foundation/distributedschedule/samgr_lite/interfaces/kits/samgr", - "//foundation/distributedschedule/samgr_lite/interfaces/kits/communication/broadcast", - "//foundation/distributedschedule/samgr_lite/samgr/adapter", - "//foundation/distributedschedule/samgr_lite/samgr/source", - "//test/xts/acts/distributed_schedule_lite/samgr_hal/utils", - ] -} +# Copyright (c) 2020-2022 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +static_library("example_samgr") { + sources = [ + "//test/xts/acts/distributed_schedule_lite/samgr_hal/utils/samgr_maintenance.c", + "bootstrap_example.c", + "broadcast_example.c", + "feature_example.c", + "maintenance_example.c", + "service_example.c", + "service_recovery_example.c", + "specified_task_example.c", + "task_example.c", + ] + + include_dirs = [ + "//utils/native/lite/include", + "//kernel/liteos_m/components/cmsis", + "//foundation/distributedschedule/samgr_lite/interfaces/kits/samgr", + "//foundation/distributedschedule/samgr_lite/interfaces/kits/communication/broadcast", + "//foundation/distributedschedule/samgr_lite/samgr/adapter", + "//foundation/distributedschedule/samgr_lite/samgr/source", + "//test/xts/acts/distributed_schedule_lite/samgr_hal/utils", + ] +} diff --git a/app/samgr/bootstrap_example.c b/app/samgr/bootstrap_example.c old mode 100755 new mode 100644 index 05ceab74191e91717de5b29bc4e3bccbbbe5712f..a5977d7ee7c378622b982b23d8c1ea9b297dcebb --- a/app/samgr/bootstrap_example.c +++ b/app/samgr/bootstrap_example.c @@ -1,223 +1,241 @@ -/* - * Copyright (c) 2020 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "example.h" -#include -#include -#include -#include -#include -#include "time_adapter.h" - -typedef struct BootTestExample { - Service service; - Feature feature; -} BootTestExample; -static const char *GetName(Service *service); -static BOOL Initialize(Service *service, Identity identity); -static BOOL MessageHandle(Service *service, Request *msg); -static TaskConfig GetTaskConfig(Service *service); -static const char *FEATURE_GetName(Feature *feature); -static void FEATURE_OnInitialize(Feature *feature, Service *parent, Identity identity); -static void FEATURE_OnStop(Feature *feature, Identity identity); -static BOOL FEATURE_OnMessage(Feature *feature, Request *request); -static BootTestExample g_example[] = { - { - .service = {GetName, Initialize, MessageHandle, GetTaskConfig}, - .feature = {FEATURE_GetName, FEATURE_OnInitialize, FEATURE_OnStop, FEATURE_OnMessage} - }, { - .service = {GetName, Initialize, MessageHandle, GetTaskConfig}, - .feature = {FEATURE_GetName, FEATURE_OnInitialize, FEATURE_OnStop, FEATURE_OnMessage} - }, { - .service = {GetName, Initialize, MessageHandle, GetTaskConfig}, - .feature = {FEATURE_GetName, FEATURE_OnInitialize, FEATURE_OnStop, FEATURE_OnMessage} - }, { - .service = {GetName, Initialize, MessageHandle, GetTaskConfig}, - .feature = {FEATURE_GetName, FEATURE_OnInitialize, FEATURE_OnStop, FEATURE_OnMessage} - } -}; -static int g_initIndex = 0; -static const char *FEATURE_GetName(Feature *feature) -{ - // test cases service 0 - if (feature == &g_example[0].feature) { - return BOOT_SYS_FEATURE1; - } - // test cases service 1 - if (feature == &g_example[1].feature) { - return BOOT_SYS_FEATURE2; - } - // test cases service 2 - if (feature == &g_example[2].feature) { - return BOOT_SYSEX_FEATURE1; - } - // test cases service 3 - if (feature == &g_example[3].feature) { - return BOOT_SYSEX_FEATURE2; - } - return NULL; -} - -static void FEATURE_OnInitialize(Feature *feature, Service *parent, Identity identity) -{ - (void)identity; - printf("[Boot Test][TaskID:%p][Step:%d][Reg Finish S:%s, F:%s]Time: %llu!\n", - osThreadGetId(), g_initIndex++, parent->GetName(parent), feature->GetName(feature), SAMGR_GetProcessTime()); -} - -static void FEATURE_OnStop(Feature *feature, Identity identity) -{ - (void)feature; - (void)identity; -} - -static BOOL FEATURE_OnMessage(Feature *feature, Request *request) -{ - printf("[Boot Test][TaskID:%p][Step:%d][F:%s] msgId<%d> \n", - osThreadGetId(), g_initIndex++, feature->GetName(feature), request->msgId); - return FALSE; -} - -static const char *GetName(Service *service) -{ - // test cases service 0 - if (service == &g_example[0].service) { - return BOOT_SYS_SERVICE1; - } - // test cases service 1 - if (service == &g_example[1].service) { - return BOOT_SYS_SERVICE2; - } - // test cases service 2 - if (service == &g_example[2].service) { - return BOOT_SYSEX_SERVICE1; - } - // test cases service 3 - if (service == &g_example[3].service) { - return BOOT_SYSEX_SERVICE2; - } - return NULL; -} - -static BOOL Initialize(Service *service, Identity identity) -{ - (void)identity; - printf("[Boot Test][TaskID:%p][Step:%d][Reg Finish S:%s]Time: %llu!\n", - osThreadGetId(), g_initIndex++, service->GetName(service), SAMGR_GetProcessTime()); - return TRUE; -} - -static BOOL MessageHandle(Service *service, Request *msg) -{ - printf("[Boot Test][TaskID:%p][Step:%d][S:%s] msgId<%d> \n", - osThreadGetId(), g_initIndex++, service->GetName(service), msg->msgId); - return FALSE; -} - -static TaskConfig GetTaskConfig(Service *service) -{ - (void)service; - TaskConfig config = {LEVEL_HIGH, PRI_ABOVE_NORMAL, - 0x400, 2, SHARED_TASK}; - return config; -} -static void MInit(void) -{ - printf("[Boot Test][TaskID:%p][Step:%d][CORE INIT]Time: %llu!\n", - osThreadGetId(), g_initIndex++, SAMGR_GetProcessTime()); -} -static void MRun(void) -{ - printf("[Boot Test][TaskID:%p][Step:%d][SYS RUN]Time: %llu!\n", - osThreadGetId(), g_initIndex++, SAMGR_GetProcessTime()); -} -static void SInit(BootTestExample *demo) -{ - SAMGR_GetInstance()->RegisterService(&demo->service); - - // test cases service 2 - printf((demo < &g_example[2]) ? - "[Boot Test][TaskID:%p][Step:%d][SYS Reg S:%s]Time: %llu!\n" : - "[Boot Test][TaskID:%p][Step:%d][SYSEX Reg S:%s]Time: %llu!\n", - osThreadGetId(), g_initIndex++, demo->service.GetName(&demo->service), SAMGR_GetProcessTime()); -} -static void FInit(BootTestExample *demo) -{ - SAMGR_GetInstance()->RegisterFeature(demo->service.GetName(&demo->service), &demo->feature); - - // test cases service 2 - printf((demo < &g_example[2]) ? - "[Boot Test][TaskID:%p][Step:%d][SYS Reg S:%s, F:%s]Time: %llu!\n" : - "[Boot Test][TaskID:%p][Step:%d][SYSEX Reg S:%s, F:%s]Time: %llu!\n", - osThreadGetId(), g_initIndex++, demo->service.GetName(&demo->service), demo->feature.GetName(&demo->feature), - SAMGR_GetProcessTime()); -} -static void S1Init(void) -{ - // test cases service 0 - SInit(&g_example[0]); -} -static void S2Init(void) -{ - // test cases service 1 - SInit(&g_example[1]); -} -static void F1Init(void) -{ - // test cases feature 0 - FInit(&g_example[0]); -} -static void F2Init(void) -{ - // test cases feature 1 - FInit(&g_example[1]); -} -static void S3Init(void) -{ - // test cases service 2 - SInit(&g_example[2]); -} -static void S4Init(void) -{ - // test cases service 3 - SInit(&g_example[3]); -} -static void F3Init(void) -{ - // test cases feature 2 - FInit(&g_example[2]); -} -static void F4Init(void) -{ - // test cases feature 3 - FInit(&g_example[3]); -} -CORE_INIT(MInit); -SYS_RUN(MRun); -// init pri first -SYS_SERVICE_INIT_PRI(S1Init, 0); -// init pri second -SYS_SERVICE_INIT_PRI(S2Init, 1); -// init pri first -SYS_FEATURE_INIT_PRI(F1Init, 0); -// init pri second -SYS_FEATURE_INIT_PRI(F2Init, 1); -// init pri first -SYSEX_SERVICE_INIT_PRI(S3Init, 0); -// init pri second -SYSEX_SERVICE_INIT_PRI(S4Init, 1); -// init pri first -SYSEX_FEATURE_INIT_PRI(F3Init, 0); -// init pri second -SYSEX_FEATURE_INIT_PRI(F4Init, 1); +/* + * Copyright (c) 2020-2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "example.h" +#include +#include +#include +#include +#include +#include +#include "time_adapter.h" + +typedef struct BootTestExample { + Service service; + Feature feature; +} BootTestExample; + +static const char *GetName(Service *service); +static BOOL Initialize(Service *service, Identity identity); +static BOOL MessageHandle(Service *service, Request *msg); +static TaskConfig GetTaskConfig(Service *service); +static const char *FEATURE_GetName(Feature *feature); +static void FEATURE_OnInitialize(Feature *feature, Service *parent, Identity identity); +static void FEATURE_OnStop(Feature *feature, Identity identity); +static BOOL FEATURE_OnMessage(Feature *feature, Request *request); +static BootTestExample g_example[] = { + { + .service = {GetName, Initialize, MessageHandle, GetTaskConfig}, + .feature = {FEATURE_GetName, FEATURE_OnInitialize, FEATURE_OnStop, FEATURE_OnMessage} + }, { + .service = {GetName, Initialize, MessageHandle, GetTaskConfig}, + .feature = {FEATURE_GetName, FEATURE_OnInitialize, FEATURE_OnStop, FEATURE_OnMessage} + }, { + .service = {GetName, Initialize, MessageHandle, GetTaskConfig}, + .feature = {FEATURE_GetName, FEATURE_OnInitialize, FEATURE_OnStop, FEATURE_OnMessage} + }, { + .service = {GetName, Initialize, MessageHandle, GetTaskConfig}, + .feature = {FEATURE_GetName, FEATURE_OnInitialize, FEATURE_OnStop, FEATURE_OnMessage} + } +}; + +static uint32_t g_initIndex = 0; + +static const char *FEATURE_GetName(Feature *feature) +{ + // test cases service 0 + if (feature == &g_example[0].feature) { + return BOOT_SYS_FEATURE1; + } + // test cases service 1 + if (feature == &g_example[1].feature) { + return BOOT_SYS_FEATURE2; + } + // test cases service 2 + if (feature == &g_example[2].feature) { + return BOOT_SYSEX_FEATURE1; + } + // test cases service 3 + if (feature == &g_example[3].feature) { + return BOOT_SYSEX_FEATURE2; + } + return NULL; +} + +static void FEATURE_OnInitialize(Feature *feature, Service *parent, Identity identity) +{ + (void)identity; + printf("[Boot Test][TaskID:%u][Step:%u][Reg Finish S:%s, F:%s]Time: %llu!\n", + (int)osThreadGetId(), g_initIndex++, parent->GetName(parent), feature->GetName(feature), + SAMGR_GetProcessTime()); +} + +static void FEATURE_OnStop(Feature *feature, Identity identity) +{ + (void)feature; + (void)identity; +} + +static BOOL FEATURE_OnMessage(Feature *feature, Request *request) +{ + printf("[Boot Test][TaskID:%u][Step:%u][F:%s] msgId<%d> \n", + (int)osThreadGetId(), g_initIndex++, feature->GetName(feature), request->msgId); + return FALSE; +} + +static const char *GetName(Service *service) +{ + // test cases service 0 + if (service == &g_example[0].service) { + return BOOT_SYS_SERVICE1; + } + // test cases service 1 + if (service == &g_example[1].service) { + return BOOT_SYS_SERVICE2; + } + // test cases service 2 + if (service == &g_example[2].service) { + return BOOT_SYSEX_SERVICE1; + } + // test cases service 3 + if (service == &g_example[3].service) { + return BOOT_SYSEX_SERVICE2; + } + return NULL; +} + +static BOOL Initialize(Service *service, Identity identity) +{ + (void)identity; + printf("[Boot Test][TaskID:%u][Step:%u][Reg Finish S:%s]Time: %llu!\n", + (int)osThreadGetId(), g_initIndex++, service->GetName(service), SAMGR_GetProcessTime()); + return TRUE; +} + +static BOOL MessageHandle(Service *service, Request *msg) +{ + printf("[Boot Test][TaskID:%u][Step:%u][S:%s] msgId<%d> \n", + (int)osThreadGetId(), g_initIndex++, service->GetName(service), msg->msgId); + return FALSE; +} + +static TaskConfig GetTaskConfig(Service *service) +{ + (void)service; + TaskConfig config = {LEVEL_HIGH, PRI_ABOVE_NORMAL, + 0x400, 2, SHARED_TASK}; + return config; +} + +static void MInit(void) +{ + printf("[Boot Test][TaskID:%u][Step:%u][CORE INIT]Time: %llu!\n", + (int)osThreadGetId(), g_initIndex++, SAMGR_GetProcessTime()); +} +static void MRun(void) +{ + printf("[Boot Test][TaskID:%u][Step:%u][SYS RUN]Time: %llu!\n", + (int)osThreadGetId(), g_initIndex++, SAMGR_GetProcessTime()); +} + +static void SInit(BootTestExample *demo) +{ + SAMGR_GetInstance()->RegisterService(&demo->service); + + // test cases service 2 + printf((demo < &g_example[2]) ? + "[Boot Test][TaskID:%u][Step:%u][SYS Reg S:%s]Time: %llu!\n" : + "[Boot Test][TaskID:%u][Step:%u][SYSEX Reg S:%s]Time: %llu!\n", + (int)osThreadGetId(), g_initIndex++, demo->service.GetName(&demo->service), SAMGR_GetProcessTime()); +} + +static void FInit(BootTestExample *demo) +{ + SAMGR_GetInstance()->RegisterFeature(demo->service.GetName(&demo->service), &demo->feature); + + // test cases service 2 + printf((demo < &g_example[2]) ? + "[Boot Test][TaskID:%u][Step:%u][SYS Reg S:%s, F:%s]Time: %llu!\n" : + "[Boot Test][TaskID:%u][Step:%u][SYSEX Reg S:%s, F:%s]Time: %llu!\n", + (int)osThreadGetId(), g_initIndex++, demo->service.GetName(&demo->service), + demo->feature.GetName(&demo->feature), SAMGR_GetProcessTime()); +} + +static void S1Init(void) +{ + // test cases service 0 + SInit(&g_example[0]); +} + +static void S2Init(void) +{ + // test cases service 1 + SInit(&g_example[1]); +} + +static void F1Init(void) +{ + // test cases feature 0 + FInit(&g_example[0]); +} + +static void F2Init(void) +{ + // test cases feature 1 + FInit(&g_example[1]); +} + +static void S3Init(void) +{ + // test cases service 2 + SInit(&g_example[2]); +} + +static void S4Init(void) +{ + // test cases service 3 + SInit(&g_example[3]); +} + +static void F3Init(void) +{ + // test cases feature 2 + FInit(&g_example[2]); +} + +static void F4Init(void) +{ + // test cases feature 3 + FInit(&g_example[3]); +} + +CORE_INIT(MInit); +SYS_RUN(MRun); +// init pri first +SYS_SERVICE_INIT_PRI(S1Init, 0); +// init pri second +SYS_SERVICE_INIT_PRI(S2Init, 1); +// init pri first +SYS_FEATURE_INIT_PRI(F1Init, 0); +// init pri second +SYS_FEATURE_INIT_PRI(F2Init, 1); +// init pri first +SYSEX_SERVICE_INIT_PRI(S3Init, 0); +// init pri second +SYSEX_SERVICE_INIT_PRI(S4Init, 1); +// init pri first +SYSEX_FEATURE_INIT_PRI(F3Init, 0); +// init pri second +SYSEX_FEATURE_INIT_PRI(F4Init, 1); diff --git a/app/samgr/broadcast_example.c b/app/samgr/broadcast_example.c old mode 100755 new mode 100644 index 4f8e4a5f18102edc54fc6b75a42e5bd8fb6534af..5449be169384023d58be3e3392b3f2528e6d1828 --- a/app/samgr/broadcast_example.c +++ b/app/samgr/broadcast_example.c @@ -1,224 +1,241 @@ -/* - * Copyright (c) 2020 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "samgr_lite.h" -#include "broadcast_interface.h" -#include -#include -#include -#include -#include "time_adapter.h" - -#define TEST_LEN 10 -#define WAIT_PUB_PROC 1000 -#define BROADCASR_TEST_SERVICE "broadcast test" - -static uint32 g_callbackStep = 0; -static void C1Callback(Consumer *consumer, const Topic *topic, const Request *request) -{ - (void)consumer; - (void)topic; - printf("[Broadcast Test][TaskID:%p][Step:%d][C1 Callback]c1 is being called data is :%s \n", - osThreadGetId(), g_callbackStep++, (char *)request->data); -} - -static void C2Callback(Consumer *consumer, const Topic *topic, const Request *request) -{ - (void)consumer; - (void)topic; - printf("[Broadcast Test][TaskID:%p][Step:%d][C2 Callback]c2 is being called data is :%s \n", - osThreadGetId(), g_callbackStep++, (char *)request->data); -} - -static BOOL Equal(const Consumer *current, const Consumer *other) -{ - return (current->Notify == other->Notify); -} - -static const char *GetName(Service *service) -{ - (void)service; - return BROADCASR_TEST_SERVICE; -}; - -static Identity g_identity = { -1, -1, NULL}; -static volatile uint32 g_broadcastStep = 0; -static BOOL Initialize(Service *service, Identity identity) -{ - g_identity = identity; - (void)service; - printf("[Broadcast Test][TaskID:%p][Step:%d][Reg Finish S:%s]Time: %llu!\n", - osThreadGetId(), g_broadcastStep++, BROADCASR_TEST_SERVICE, SAMGR_GetProcessTime()); - return TRUE; -}; - -static BOOL MessageHandle(Service *service, Request *msg) -{ - printf("[Broadcast Test][TaskID: %p] msgId<%d>: %s \n", osThreadGetId(), msg->msgId, (char *)msg->data); - (void)service; - return FALSE; -}; - -static TaskConfig GetTaskConfig(Service *service) -{ - TaskConfig config = {LEVEL_HIGH, PRI_ABOVE_NORMAL, 0x800, 20, SHARED_TASK}; - (void)service; - return config; -}; - -static Service g_testService = {GetName, Initialize, MessageHandle, GetTaskConfig}; -static void Init(void) -{ - SAMGR_GetInstance()->RegisterService(&g_testService); - printf("[Broadcast Test][TaskID:%p][Step:%d][Reg S:%s]Time: %llu!\n", - osThreadGetId(), g_broadcastStep++, BROADCASR_TEST_SERVICE, SAMGR_GetProcessTime()); -} -SYSEX_SERVICE_INIT(Init); - -static PubSubInterface *CASE_GetIUnknown(void) -{ - PubSubInterface *fapi = NULL; - printf("[Broadcast Test][TaskID:%p][Step:%d][GetIUnknown S:%s]: BEGIN\n", - osThreadGetId(), g_broadcastStep++, BROADCASR_TEST_SERVICE); - IUnknown *iUnknown = SAMGR_GetInstance()->GetFeatureApi(BROADCAST_SERVICE, PUB_SUB_FEATURE); - if (iUnknown == NULL) { - printf("[Broadcast Test][TaskID:%p][Step:%d][GetDefaultFeatureApi S:%s]Error is NULL!\n", - osThreadGetId(), g_broadcastStep++, BROADCASR_TEST_SERVICE); - goto END; - } - - int result = iUnknown->QueryInterface(iUnknown, DEFAULT_VERSION, (void **)&fapi); - if (result != 0 || fapi == NULL) { - printf("[Broadcast Test][TaskID:%p][Step:%d][QueryInterface S:%s]Error is NULL!\n", - osThreadGetId(), g_broadcastStep++, BROADCASR_TEST_SERVICE); - goto END; - } - printf("[Broadcast Test][TaskID:%p][Step:%d][GetIUnknown S:%s]Success\n", - osThreadGetId(), g_broadcastStep++, BROADCASR_TEST_SERVICE); -END: - printf("[Broadcast Test][TaskID:%p][Step:%d][GetIUnknown S:%s]: END\n", - osThreadGetId(), g_broadcastStep++, BROADCASR_TEST_SERVICE); - return fapi; -} - -static uint32 g_addTopicStep = 0; -static uint32 g_unsubscribeTopicStep = 0; -static void CASE_AddAndUnsubscribeTopic(PubSubInterface *fapi) -{ - Subscriber *subscriber = &fapi->subscriber; - Provider *provider = &fapi->provider; - static Consumer c1 = {.identity = &g_identity, .Notify = C1Callback, .Equal = Equal}; - static Consumer c2 = {.identity = &g_identity, .Notify = C2Callback, .Equal = Equal}; - // add topic test - printf("[Topic Test][TaskID:%p][Step:%d][Add Topic]: BEGIN\n", osThreadGetId(), g_addTopicStep++); - Topic topic0 = 0; - subscriber->AddTopic((IUnknown *)fapi, &topic0); - subscriber->Subscribe((IUnknown *)fapi, &topic0, &c1); - subscriber->Subscribe((IUnknown *)fapi, &topic0, &c2); - provider->Publish((IUnknown *)fapi, &topic0, (uint8_t *) "==>111<==", TEST_LEN); - Topic topic1 = 0x10000; - subscriber->AddTopic((IUnknown *)fapi, &topic1); - subscriber->Subscribe((IUnknown *)fapi, &topic1, &c1); - subscriber->Subscribe((IUnknown *)fapi, &topic1, &c2); - provider->Publish((IUnknown *)fapi, &topic1, (uint8_t *) "==>444<==", TEST_LEN); - printf("[Topic Test][TaskID:%p][Step:%d][Add Topic]: Success!\n", osThreadGetId(), g_addTopicStep++); - printf("[Topic Test][TaskID:%p][Step:%d][Add Topic]: END\n", osThreadGetId(), g_addTopicStep++); - // unsubscribe topic0 test - printf("[Topic Test][TaskID:%p][Step:%d][Unsubscribe Topic]: BEGIN\n", osThreadGetId(), g_unsubscribeTopicStep++); - LOS_Msleep(WAIT_PUB_PROC); - subscriber->Unsubscribe((IUnknown *)fapi, &topic0, &c1); - provider->Publish((IUnknown *)fapi, &topic0, (uint8_t *) "@@@222@@@", TEST_LEN); - LOS_Msleep(WAIT_PUB_PROC); - subscriber->Unsubscribe((IUnknown *)fapi, &topic0, &c2); - provider->Publish((IUnknown *)fapi, &topic0, (uint8_t *) "@@@333@@@", TEST_LEN); - provider->Publish((IUnknown *)fapi, &topic1, (uint8_t *) "@@@444@@@", TEST_LEN); - printf("[Topic Test][TaskID:%p][Step:%d][Unsubscribe Topic]: Success!\n", - osThreadGetId(), g_unsubscribeTopicStep++); - printf("[Topic Test][TaskID:%p][Step:%d][Unsubscribe Topic]: END\n", osThreadGetId(), g_unsubscribeTopicStep++); -} - -static uint32 g_modifyConsumerStep = 0; -static void CASE_ModifyConsumer(PubSubInterface *fapi) -{ - Subscriber *subscriber = &fapi->subscriber; - Provider *provider = &fapi->provider; - static Consumer c1 = {.identity = &g_identity, .Notify = C1Callback, .Equal = Equal}; - static Consumer c2 = {.identity = &g_identity, .Notify = C2Callback, .Equal = Equal}; - // modify consumer test - printf("[Topic Test][TaskID:%p][Step:%d][Modify Consumer]: BEGIN\n", osThreadGetId(), g_modifyConsumerStep++); - Topic topic2 = 0x100; - subscriber->AddTopic((IUnknown *)fapi, &topic2); - subscriber->Subscribe((IUnknown *)fapi, &topic2, &c1); - provider->Publish((IUnknown *)fapi, &topic2, (uint8_t *) "==>555<==", TEST_LEN); - LOS_Msleep(WAIT_PUB_PROC); - subscriber->ModifyConsumer((IUnknown *)fapi, &topic2, &c1, &c2); - provider->Publish((IUnknown *)fapi, &topic2, (uint8_t *) "@@@555@@@", TEST_LEN); - printf("[Topic Test][TaskID:%p][Step:%d][Modify Consumer]: Success!\n", osThreadGetId(), g_modifyConsumerStep++); - printf("[Topic Test][TaskID:%p][Step:%d][Modify Consumer]: END\n", osThreadGetId(), g_modifyConsumerStep++); -} - -static uint32 g_reUnsubscribeTopic = 0; -static void CASE_ReUnsubscribeTopic(PubSubInterface *fapi) -{ - Subscriber *subscriber = &fapi->subscriber; - Provider *provider = &fapi->provider; - static Consumer c1 = {.identity = &g_identity, .Notify = C1Callback, .Equal = Equal}; - printf("[Topic Test][TaskID:%p][Step:%d][ReUnsubscribe Topic]: BEGIN\n", osThreadGetId(), g_reUnsubscribeTopic++); - Topic topic3 = 0x1000; - subscriber->AddTopic((IUnknown *)fapi, &topic3); - subscriber->Subscribe((IUnknown *)fapi, &topic3, &c1); - provider->Publish((IUnknown *)fapi, &topic3, (uint8_t *) "==>666<==", TEST_LEN); - LOS_Msleep(WAIT_PUB_PROC); - Consumer *retConsumer = subscriber->Unsubscribe((IUnknown *)fapi, &topic3, &c1); - if (retConsumer == NULL) { - printf("[Topic Test][TaskID:%p][Step:%d][ReUnsubscribe Topic]: Unsubscribe Topic lead to NULL return value\n", - osThreadGetId(), g_reUnsubscribeTopic++); - } - retConsumer = subscriber->Unsubscribe((IUnknown *)fapi, &topic3, &c1); - if (retConsumer == NULL) { - printf("[Topic Test][TaskID:%p][Step:%d][ReUnsubscribe Topic]: ReUnsubscribe Topic lead to NULL return value\n", - osThreadGetId(), g_reUnsubscribeTopic++); - } - provider->Publish((IUnknown *)fapi, &topic3, (uint8_t *) "@@@666@@@", TEST_LEN); - printf("[Topic Test][TaskID:%p][Step:%d][ReUnsubscribe Topic]: Success!\n", - osThreadGetId(), g_reUnsubscribeTopic++); - printf("[Topic Test][TaskID:%p][Step:%d][ReUnsubscribe Topic]: END\n", osThreadGetId(), g_reUnsubscribeTopic++); -} - -static void CASE_ReleaseIUnknown(PubSubInterface *fapi) -{ - printf("[Broadcast Test][TaskID:%p][Step:%d][ReleaseIUnknown S:%s]: BEGIN\n", - osThreadGetId(), g_broadcastStep++, BROADCASR_TEST_SERVICE); - int32 ref = fapi->Release((IUnknown *)fapi); - if (ref <= 0) { - printf("[Broadcast Test][TaskID:%p][Step:%d][ReleaseIUnknown S:%s]Error ref is %d!\n", - osThreadGetId(), g_broadcastStep++, BROADCASR_TEST_SERVICE, ref); - goto END; - } - printf("[Broadcast Test][TaskID:%p][Step:%d][ReleaseIUnknown S:%s]Success\n", - osThreadGetId(), g_broadcastStep++, BROADCASR_TEST_SERVICE); -END: - printf("[Broadcast Test][TaskID:%p][Step:%d][ReleaseIUnknown S:%s]: END\n", - osThreadGetId(), g_broadcastStep++, BROADCASR_TEST_SERVICE); -} - -static void RunTestCase(void) -{ - PubSubInterface *fapi = CASE_GetIUnknown(); - CASE_AddAndUnsubscribeTopic(fapi); - CASE_ModifyConsumer(fapi); - CASE_ReUnsubscribeTopic(fapi); - CASE_ReleaseIUnknown(fapi); -} -LAYER_INITCALL_DEF(RunTestCase, test, "test"); +/* + * Copyright (c) 2020-2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include "samgr_lite.h" +#include "broadcast_interface.h" +#include +#include +#include +#include +#include "time_adapter.h" + +#define TEST_LEN 10 +#define WAIT_PUB_PROC 1000 +#define BROADCAST_TEST_SERVICE "broadcast test" + +static uint32_t g_callbackStep = 0; + +static void C1Callback(Consumer *consumer, const Topic *topic, const Request *request) +{ + (void)consumer; + (void)topic; + printf("[Broadcast Test][TaskID:%u][Step:%u][C1 Callback]c1 is being called data is :%s \n", + (int)osThreadGetId(), g_callbackStep++, (char *)request->data); +} + +static void C2Callback(Consumer *consumer, const Topic *topic, const Request *request) +{ + (void)consumer; + (void)topic; + printf("[Broadcast Test][TaskID:%u][Step:%u][C2 Callback]c2 is being called data is :%s \n", + (int)osThreadGetId(), g_callbackStep++, (char *)request->data); +} + +static BOOL Equal(const Consumer *current, const Consumer *other) +{ + return (current->Notify == other->Notify); +} + +static const char *GetName(Service *service) +{ + (void)service; + return BROADCAST_TEST_SERVICE; +}; + +static Identity g_identity = { -1, -1, NULL}; +static volatile uint32_t g_broadcastStep = 0; + +static BOOL Initialize(Service *service, Identity identity) +{ + g_identity = identity; + (void)service; + printf("[Broadcast Test][TaskID:%u][Step:%u][Reg Finish S:%s]Time: %llu!\n", + (int)osThreadGetId(), g_broadcastStep++, BROADCAST_TEST_SERVICE, SAMGR_GetProcessTime()); + return TRUE; +}; + +static BOOL MessageHandle(Service *service, Request *msg) +{ + printf("[Broadcast Test][TaskID:%u] msgId<%d>: %s \n", (int)osThreadGetId(), msg->msgId, (char *)msg->data); + (void)service; + return FALSE; +}; + +static TaskConfig GetTaskConfig(Service *service) +{ + TaskConfig config = {LEVEL_HIGH, PRI_ABOVE_NORMAL, 0x800, 20, SHARED_TASK}; + (void)service; + return config; +}; + +static Service g_testService = {GetName, Initialize, MessageHandle, GetTaskConfig}; + +static void Init(void) +{ + SAMGR_GetInstance()->RegisterService(&g_testService); + printf("[Broadcast Test][TaskID:%u][Step:%u][Reg S:%s]Time: %llu!\n", + (int)osThreadGetId(), g_broadcastStep++, BROADCAST_TEST_SERVICE, SAMGR_GetProcessTime()); +} + +SYSEX_SERVICE_INIT(Init); + +static PubSubInterface *CASE_GetIUnknown(void) +{ + PubSubInterface *fapi = NULL; + printf("[Broadcast Test][TaskID:%u][Step:%u][GetIUnknown S:%s]: BEGIN\n", + (int)osThreadGetId(), g_broadcastStep++, BROADCAST_TEST_SERVICE); + IUnknown *iUnknown = SAMGR_GetInstance()->GetFeatureApi(BROADCAST_SERVICE, PUB_SUB_FEATURE); + if (iUnknown == NULL) { + printf("[Broadcast Test][TaskID:%u][Step:%u][GetDefaultFeatureApi S:%s]Error is NULL!\n", + (int)osThreadGetId(), g_broadcastStep++, BROADCAST_TEST_SERVICE); + goto END; + } + + int result = iUnknown->QueryInterface(iUnknown, DEFAULT_VERSION, (void **)&fapi); + if (result != 0 || fapi == NULL) { + printf("[Broadcast Test][TaskID:%u][Step:%u][QueryInterface S:%s]Error is NULL!\n", + (int)osThreadGetId(), g_broadcastStep++, BROADCAST_TEST_SERVICE); + goto END; + } + printf("[Broadcast Test][TaskID:%u][Step:%u][GetIUnknown S:%s]Success\n", + (int)osThreadGetId(), g_broadcastStep++, BROADCAST_TEST_SERVICE); +END: + printf("[Broadcast Test][TaskID:%u][Step:%u][GetIUnknown S:%s]: END\n", + (int)osThreadGetId(), g_broadcastStep++, BROADCAST_TEST_SERVICE); + return fapi; +} + +static uint32_t g_addTopicStep = 0; +static uint32_t g_unsubscribeTopicStep = 0; + +static void CASE_AddAndUnsubscribeTopic(PubSubInterface *fapi) +{ + Subscriber *subscriber = &fapi->subscriber; + Provider *provider = &fapi->provider; + static Consumer c1 = {.identity = &g_identity, .Notify = C1Callback, .Equal = Equal}; + static Consumer c2 = {.identity = &g_identity, .Notify = C2Callback, .Equal = Equal}; + // add topic test + printf("[Topic Test][TaskID:%u][Step:%u][Add Topic]: BEGIN\n", (int)osThreadGetId(), g_addTopicStep++); + Topic topic0 = 0; + subscriber->AddTopic((IUnknown *)fapi, &topic0); + subscriber->Subscribe((IUnknown *)fapi, &topic0, &c1); + subscriber->Subscribe((IUnknown *)fapi, &topic0, &c2); + provider->Publish((IUnknown *)fapi, &topic0, (uint8_t *) "==>111<==", TEST_LEN); + Topic topic1 = 0x10000; + subscriber->AddTopic((IUnknown *)fapi, &topic1); + subscriber->Subscribe((IUnknown *)fapi, &topic1, &c1); + subscriber->Subscribe((IUnknown *)fapi, &topic1, &c2); + provider->Publish((IUnknown *)fapi, &topic1, (uint8_t *) "==>444<==", TEST_LEN); + printf("[Topic Test][TaskID:%u][Step:%u][Add Topic]: Success!\n", (int)osThreadGetId(), g_addTopicStep++); + printf("[Topic Test][TaskID:%u][Step:%u][Add Topic]: END\n", (int)osThreadGetId(), g_addTopicStep++); + // unsubscribe topic0 test + printf("[Topic Test][TaskID:%u][Step:%u][Unsubscribe Topic]: BEGIN\n", (int)osThreadGetId(), + g_unsubscribeTopicStep++); + LOS_Msleep(WAIT_PUB_PROC); + subscriber->Unsubscribe((IUnknown *)fapi, &topic0, &c1); + provider->Publish((IUnknown *)fapi, &topic0, (uint8_t *) "@@@222@@@", TEST_LEN); + LOS_Msleep(WAIT_PUB_PROC); + subscriber->Unsubscribe((IUnknown *)fapi, &topic0, &c2); + provider->Publish((IUnknown *)fapi, &topic0, (uint8_t *) "@@@333@@@", TEST_LEN); + provider->Publish((IUnknown *)fapi, &topic1, (uint8_t *) "@@@444@@@", TEST_LEN); + printf("[Topic Test][TaskID:%u][Step:%u][Unsubscribe Topic]: Success!\n", + (int)osThreadGetId(), g_unsubscribeTopicStep++); + printf("[Topic Test][TaskID:%u][Step:%u][Unsubscribe Topic]: END\n", (int)osThreadGetId(), + g_unsubscribeTopicStep++); +} + +static uint32_t g_modifyConsumerStep = 0; + +static void CASE_ModifyConsumer(PubSubInterface *fapi) +{ + Subscriber *subscriber = &fapi->subscriber; + Provider *provider = &fapi->provider; + static Consumer c1 = {.identity = &g_identity, .Notify = C1Callback, .Equal = Equal}; + static Consumer c2 = {.identity = &g_identity, .Notify = C2Callback, .Equal = Equal}; + // modify consumer test + printf("[Topic Test][TaskID:%u][Step:%u][Modify Consumer]: BEGIN\n", (int)osThreadGetId(), + g_modifyConsumerStep++); + Topic topic2 = 0x100; + subscriber->AddTopic((IUnknown *)fapi, &topic2); + subscriber->Subscribe((IUnknown *)fapi, &topic2, &c1); + provider->Publish((IUnknown *)fapi, &topic2, (uint8_t *) "==>555<==", TEST_LEN); + LOS_Msleep(WAIT_PUB_PROC); + subscriber->ModifyConsumer((IUnknown *)fapi, &topic2, &c1, &c2); + provider->Publish((IUnknown *)fapi, &topic2, (uint8_t *) "@@@555@@@", TEST_LEN); + printf("[Topic Test][TaskID:%u][Step:%u][Modify Consumer]: Success!\n", (int)osThreadGetId(), + g_modifyConsumerStep++); + printf("[Topic Test][TaskID:%u][Step:%u][Modify Consumer]: END\n", (int)osThreadGetId(), + g_modifyConsumerStep++); +} + +static uint32_t g_reUnsubscribeTopic = 0; + +static void CASE_ReUnsubscribeTopic(PubSubInterface *fapi) +{ + Subscriber *subscriber = &fapi->subscriber; + Provider *provider = &fapi->provider; + static Consumer c1 = {.identity = &g_identity, .Notify = C1Callback, .Equal = Equal}; + printf("[Topic Test][TaskID:%u][Step:%u][ReUnsubscribe Topic]: BEGIN\n", (int)osThreadGetId(), + g_reUnsubscribeTopic++); + Topic topic3 = 0x1000; + subscriber->AddTopic((IUnknown *)fapi, &topic3); + subscriber->Subscribe((IUnknown *)fapi, &topic3, &c1); + provider->Publish((IUnknown *)fapi, &topic3, (uint8_t *) "==>666<==", TEST_LEN); + LOS_Msleep(WAIT_PUB_PROC); + Consumer *retConsumer = subscriber->Unsubscribe((IUnknown *)fapi, &topic3, &c1); + if (retConsumer == NULL) { + printf("[Topic Test][TaskID:%u][Step:%u][ReUnsubscribe Topic]: Unsubscribe Topic lead to NULL return value\n", + (int)osThreadGetId(), g_reUnsubscribeTopic++); + } + retConsumer = subscriber->Unsubscribe((IUnknown *)fapi, &topic3, &c1); + if (retConsumer == NULL) { + printf("[Topic Test][TaskID:%u][Step:%u][ReUnsubscribe Topic]: ReUnsubscribe Topic lead to NULL return value\n", + (int)osThreadGetId(), g_reUnsubscribeTopic++); + } + provider->Publish((IUnknown *)fapi, &topic3, (uint8_t *) "@@@666@@@", TEST_LEN); + printf("[Topic Test][TaskID:%u][Step:%u][ReUnsubscribe Topic]: Success!\n", + (int)osThreadGetId(), g_reUnsubscribeTopic++); + printf("[Topic Test][TaskID:%u][Step:%u][ReUnsubscribe Topic]: END\n", (int)osThreadGetId(), + g_reUnsubscribeTopic++); +} + +static void CASE_ReleaseIUnknown(PubSubInterface *fapi) +{ + printf("[Broadcast Test][TaskID:%u][Step:%u][ReleaseIUnknown S:%s]: BEGIN\n", + (int)osThreadGetId(), g_broadcastStep++, BROADCAST_TEST_SERVICE); + int32 ref = fapi->Release((IUnknown *)fapi); + if (ref <= 0) { + printf("[Broadcast Test][TaskID:%u][Step:%u][ReleaseIUnknown S:%s]Error ref is %d!\n", + (int)osThreadGetId(), g_broadcastStep++, BROADCAST_TEST_SERVICE, ref); + goto END; + } + printf("[Broadcast Test][TaskID:%u][Step:%u][ReleaseIUnknown S:%s]Success\n", + (int)osThreadGetId(), g_broadcastStep++, BROADCAST_TEST_SERVICE); +END: + printf("[Broadcast Test][TaskID:%u][Step:%u][ReleaseIUnknown S:%s]: END\n", + (int)osThreadGetId(), g_broadcastStep++, BROADCAST_TEST_SERVICE); +} + +static void RunTestCase(void) +{ + PubSubInterface *fapi = CASE_GetIUnknown(); + CASE_AddAndUnsubscribeTopic(fapi); + CASE_ModifyConsumer(fapi); + CASE_ReUnsubscribeTopic(fapi); + CASE_ReleaseIUnknown(fapi); +} + +LAYER_INITCALL_DEF(RunTestCase, test, "test"); diff --git a/app/samgr/example.h b/app/samgr/example.h old mode 100755 new mode 100644 index aeb0c767ff6b88840e19dc74e5eafeda4a4190b2..ebecce679ed24c17649daea8646ac406d1e10d2b --- a/app/samgr/example.h +++ b/app/samgr/example.h @@ -1,44 +1,36 @@ -/* - * Copyright (c) 2020 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef LITE_EXAMPLE_H -#define LITE_EXAMPLE_H -#ifdef __cplusplus -#if __cplusplus -extern "C" { -#endif -#endif -#define EXAMPLE_SERVICE "example" -#define EXAMPLE_FEATURE "example" - -#define BOOT_SYS_SERVICE1 "sys_s1" -#define BOOT_SYS_SERVICE2 "sys_s2" -#define BOOT_SYS_FEATURE1 "sys_f1" -#define BOOT_SYS_FEATURE2 "sys_f2" - -#define BOOT_SYSEX_SERVICE1 "sysex_s1" -#define BOOT_SYSEX_SERVICE2 "sysex_s2" -#define BOOT_SYSEX_FEATURE1 "sysex_f1" -#define BOOT_SYSEX_FEATURE2 "sysex_f2" - -#define TASK_SERVICE1 "task_s1" -#define TASK_SERVICE2 "task_s2" -#define TASK_SERVICE3 "task_s3" -#define TASK_SERVICE4 "task_s4" -#ifdef __cplusplus -#if __cplusplus -} -#endif -#endif -#endif // LITE_EXAMPLE_H +/* + * Copyright (c) 2020-2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#ifndef LITE_EXAMPLE_H +#define LITE_EXAMPLE_H + +#define EXAMPLE_SERVICE "example" +#define EXAMPLE_FEATURE "example" + +#define BOOT_SYS_SERVICE1 "sys_s1" +#define BOOT_SYS_SERVICE2 "sys_s2" +#define BOOT_SYS_FEATURE1 "sys_f1" +#define BOOT_SYS_FEATURE2 "sys_f2" + +#define BOOT_SYSEX_SERVICE1 "sysex_s1" +#define BOOT_SYSEX_SERVICE2 "sysex_s2" +#define BOOT_SYSEX_FEATURE1 "sysex_f1" +#define BOOT_SYSEX_FEATURE2 "sysex_f2" + +#define TASK_SERVICE1 "task_s1" +#define TASK_SERVICE2 "task_s2" +#define TASK_SERVICE3 "task_s3" +#define TASK_SERVICE4 "task_s4" + +#endif // LITE_EXAMPLE_H diff --git a/app/samgr/feature_example.c b/app/samgr/feature_example.c old mode 100755 new mode 100644 index c45ef8af5fe443399cb4ce628a95f5579bc9349a..692f46986e1273815e729755bdc3dc30197afa4e --- a/app/samgr/feature_example.c +++ b/app/samgr/feature_example.c @@ -1,305 +1,320 @@ -/* - * Copyright (c) 2020 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "example.h" -#include -#include -#include -#include -#include -#include "iunknown.h" -#include "feature.h" -#include "service.h" -#include "samgr_lite.h" -#include "time_adapter.h" - -#define WAIT_FEATURE_PROC 1000 -enum MessageId { - MSG_PROC, - MSG_TIME_PROC, -}; - -struct Payload { - int id; - const char *name; - int value; -}; - -typedef struct DemoApi { - INHERIT_IUNKNOWN; - BOOL (*AsyncCall)(IUnknown *iUnknown, const char *buff); - BOOL (*AsyncTimeCall)(IUnknown *iUnknown); - BOOL (*SyncCall)(IUnknown *iUnknown, struct Payload *payload); - BOOL (*AsyncCallBack)(IUnknown *iUnknown, const char *buff, Handler handler); -} DemoApi; - -typedef struct DemoFeature { - INHERIT_FEATURE; - INHERIT_IUNKNOWNENTRY(DemoApi); - Identity identity; -} DemoFeature; - -static BOOL AsyncCall(IUnknown *iUnknown, const char *body); -static BOOL AsyncTimeCall(IUnknown *iUnknown); -static BOOL SyncCall(IUnknown *iUnknown, struct Payload *payload); -static BOOL AsyncCallBack(IUnknown *iUnknown, const char *body, Handler handler); -static const char *FEATURE_GetName(Feature *feature); -static void FEATURE_OnInitialize(Feature *feature, Service *parent, Identity identity); -static void FEATURE_OnStop(Feature *feature, Identity identity); -static BOOL FEATURE_OnMessage(Feature *feature, Request *request); -static DemoFeature g_example = { - .GetName = FEATURE_GetName, - .OnInitialize = FEATURE_OnInitialize, - .OnStop = FEATURE_OnStop, - .OnMessage = FEATURE_OnMessage, - DEFAULT_IUNKNOWN_ENTRY_BEGIN, - .AsyncCall = AsyncCall, - .AsyncTimeCall = AsyncTimeCall, - .SyncCall = SyncCall, - .AsyncCallBack = AsyncCallBack, - DEFAULT_IUNKNOWN_ENTRY_END, - .identity = {-1, -1, NULL}, -}; -static int g_regStep = 0; -static const char *FEATURE_GetName(Feature *feature) -{ - (void)feature; - return EXAMPLE_FEATURE; -} - -static void FEATURE_OnInitialize(Feature *feature, Service *parent, Identity identity) -{ - DemoFeature *demoFeature = (DemoFeature *)feature; - demoFeature->identity = identity; - printf("[Register Test][TaskID:%p][Step:%d][Reg Finish S:%s, F:%s]Time: %llu!\n", - osThreadGetId(), g_regStep++, parent->GetName(parent), feature->GetName(feature), SAMGR_GetProcessTime()); -} - -static void FEATURE_OnStop(Feature *feature, Identity identity) -{ - (void)feature; - (void)identity; - g_example.identity.queueId = NULL; - g_example.identity.featureId = -1; - g_example.identity.serviceId = -1; -} - -static volatile uint32 g_asyncStep = 0; -static BOOL FEATURE_OnMessage(Feature *feature, Request *request) -{ - (void)feature; - if (request->msgId == MSG_PROC) { - printf("[LPC Test][TaskID:%p][Step:%d][OnMessage: S:%s, F:%s] msgId %s \n", - osThreadGetId(), g_asyncStep++, EXAMPLE_SERVICE, feature->GetName(feature), (char *)request->data); - Response response = {.data = "Yes, you did!", .len = 0}; - SAMGR_SendResponse(request, &response); - return TRUE; - } else { - if (request->msgId == MSG_TIME_PROC) { - LOS_Msleep(WAIT_FEATURE_PROC * 11); // sleep 11 seconds - printf("[LPC Test][TaskID:%p][OnMessage: S:%s, F:%s] Time Message Get Value<%s>!", - osThreadGetId(), EXAMPLE_SERVICE, feature->GetName(feature), request->msgValue ? "TRUE" : "FALSE"); - AsyncTimeCall(GET_IUNKNOWN(g_example)); - return FALSE; - } - } - printf("[LPC Test][TaskID:%p][Step:%d][OnMessage S:%s, F:%s] Inner Error! \n", - osThreadGetId(), g_asyncStep++, EXAMPLE_SERVICE, feature->GetName(feature)); - return FALSE; -} - -static BOOL SyncCall(IUnknown *iUnknown, struct Payload *payload) -{ - (void)iUnknown; - if (payload != NULL && payload->id >= 0 && payload->name != NULL) { - printf("[LPC Test][TaskID:%p][Step:%d][SyncCall API] Id:%d, name:%s, value:%d \n", - osThreadGetId(), g_asyncStep++, payload->id, payload->name, payload->value); - return TRUE; - } - printf("[LPC Test][TaskID:%p][Step:%d][SyncCall API] Input Error! \n", osThreadGetId(), g_asyncStep++); - return FALSE; -} - -static BOOL AsyncCall(IUnknown *iUnknown, const char *body) -{ - Request request = {.msgId = MSG_PROC, .msgValue = 0}; - request.len = (uint32_t)(strlen(body) + 1); - request.data = malloc(request.len); - if (request.data == NULL) { - return FALSE; - } - if (strcpy_s(request.data, request.len, body) != EOK) { - free(request.data); - return FALSE; - } - DemoFeature *feature = GET_OBJECT(iUnknown, DemoFeature, iUnknown); - printf("[LPC Test][TaskID:%p][Step:%d][AsyncCall API] Send request! \n", osThreadGetId(), g_asyncStep++); - return SAMGR_SendRequest(&feature->identity, &request, NULL); -} -static BOOL AsyncTimeCall(IUnknown *iUnknown) -{ - static int8 cnt = 0; - cnt = (cnt + 1) % 2; // mod 2 to get async status - Request request = {.msgId = MSG_TIME_PROC, .msgValue = cnt}; - DemoFeature *feature = GET_OBJECT(iUnknown, DemoFeature, iUnknown); - return SAMGR_SendRequest(&feature->identity, &request, NULL); -} -static BOOL AsyncCallBack(IUnknown *iUnknown, const char *body, Handler handler) -{ - Request request = {.msgId = MSG_PROC, .msgValue = 0}; - request.len = (uint32_t)(strlen(body) + 1); - request.data = malloc(request.len); - if (request.data == NULL) { - return FALSE; - } - if (strcpy_s(request.data, request.len, body) != EOK) { - free(request.data); - return FALSE; - } - DemoFeature *feature = GET_OBJECT(iUnknown, DemoFeature, iUnknown); - printf("[LPC Test][TaskID:%p][Step:%d][AsyncCallBack API] Send request! \n", - osThreadGetId(), g_asyncStep++); - return SAMGR_SendRequest(&feature->identity, &request, handler); -} - -static void Init(void) -{ - SAMGR_GetInstance()->RegisterFeature(EXAMPLE_SERVICE, (Feature *)&g_example); - SAMGR_GetInstance()->RegisterFeatureApi(EXAMPLE_SERVICE, EXAMPLE_FEATURE, GET_IUNKNOWN(g_example)); - printf("[Register Test][TaskID:%p][Step:%d][Reg S:%s, F:%s]Time: %llu!\n", - osThreadGetId(), g_regStep++, EXAMPLE_SERVICE, EXAMPLE_FEATURE, SAMGR_GetProcessTime()); -} -SYSEX_FEATURE_INIT(Init); -static int g_discoverStep = 0; -static DemoApi *CASE_GetIUnknown(void) -{ - DemoApi *demoApi = NULL; - printf("[Discover Test][TaskID:%p][Step:%d][GetIUnknown S:%s, F:%s]: BEGIN\n", - osThreadGetId(), g_discoverStep++, EXAMPLE_SERVICE, EXAMPLE_FEATURE); - IUnknown *iUnknown = SAMGR_GetInstance()->GetFeatureApi(EXAMPLE_SERVICE, EXAMPLE_FEATURE); - if (iUnknown == NULL) { - printf("[Discover Test][TaskID:%p][Step:%d][GetFeatureApi S:%s, F:%s]Error is NULL!\n", - osThreadGetId(), g_discoverStep++, EXAMPLE_SERVICE, EXAMPLE_FEATURE); - goto END; - } - int result = iUnknown->QueryInterface(iUnknown, DEFAULT_VERSION, (void **)&demoApi); - if (result != 0 || demoApi == NULL) { - printf("[Discover Test][TaskID:%p][Step:%d][QueryInterface S:%s, F:%s]Error is NULL!\n", - osThreadGetId(), g_discoverStep++, EXAMPLE_SERVICE, EXAMPLE_FEATURE); - goto END; - } - printf("[Discover Test][TaskID:%p][Step:%d][GetIUnknown S:%s, F:%s]Success\n", - osThreadGetId(), g_discoverStep++, EXAMPLE_SERVICE, EXAMPLE_FEATURE); -END: - printf("[Discover Test][TaskID:%p][Step:%d][GetIUnknown S:%s, F:%s]: END\n", - osThreadGetId(), g_discoverStep++, EXAMPLE_SERVICE, EXAMPLE_FEATURE); - return demoApi; -} - -static void CASE_SyncCall(DemoApi *demoApi) -{ - if (demoApi->SyncCall == NULL) { - return; - } - printf("[LPC Test][TaskID:%p][Step:%d][SyncCall]: BEGIN! \n", osThreadGetId(), g_asyncStep++); - struct Payload payload = { - .id = 0, - .name = "I wanna sync call good result!", - .value = 1 - }; - if (!demoApi->SyncCall((IUnknown *)demoApi, &payload)) { - printf("[LPC Test][TaskID:%p][Step:%d][SyncCall]Error return false! \n", - osThreadGetId(), g_asyncStep++); - goto END; - } - printf("[LPC Test][TaskID:%p][Step:%d][SyncCall]Success!\n", - osThreadGetId(), g_asyncStep++); -END: - printf("[LPC Test][TaskID:%p][Step:%d][SyncCall]: END\n", - osThreadGetId(), g_asyncStep++); -} - - -static void CASE_AsyncCall(DemoApi *demoApi) -{ - if (demoApi->AsyncCall == NULL) { - return; - } - printf("[LPC Test][TaskID:%p][Step:%d][AsyncCall]: BEGIN! \n", osThreadGetId(), g_asyncStep++); - uint32 count = g_asyncStep; - demoApi->AsyncCall((IUnknown *)demoApi, "I wanna async call good result!"); - LOS_Msleep(WAIT_FEATURE_PROC); - if (count == g_asyncStep) { - printf("[LPC Test][TaskID:%p][Step:%d][AsyncCall] result is faild! \n", osThreadGetId(), g_asyncStep++); - goto END; - } - printf("[LPC Test][TaskID:%p][Step:%d][AsyncCall]Success! \n", osThreadGetId(), g_asyncStep++); -END: - printf("[LPC Test][TaskID:%p][Step:%d][AsyncCall]: END! \n", osThreadGetId(), g_asyncStep++); -} - -static void CASE_AsyncTimeCall(DemoApi *demoApi) -{ - if (demoApi->AsyncCall == NULL) { - return; - } - demoApi->AsyncTimeCall((IUnknown *)demoApi); -} - -void AsyncHandler(const Request *request, const Response *response) -{ - (void)request; - printf("[LPC Test][TaskID:%p][Step:%d][AsyncCallBack]Success! Response:%s \n", - osThreadGetId(), g_asyncStep++, (char *)response->data); - printf("[LPC Test][TaskID:%p][Step:%d][AsyncCallBack]: END! \n", osThreadGetId(), g_asyncStep++); -} - -static void CASE_AsyncCallBack(DemoApi *demoApi) -{ - if (demoApi->AsyncCallBack == NULL) { - return; - } - printf("[LPC Test][TaskID:%p][Step:%d][AsyncCallBack]: BEGIN! \n", osThreadGetId(), g_asyncStep++); - demoApi->AsyncCallBack((IUnknown *)demoApi, "I wanna async call callback good result!", AsyncHandler); - printf("[LPC Test][TaskID:%p][Step:%d][AsyncCallBack]Wait for response! \n", - osThreadGetId(), g_asyncStep++); -} - -static void CASE_ReleaseIUnknown(DemoApi *demoApi) -{ - printf("[Discover Test][TaskID:%p][Step:%d][ReleaseIUnknown S:%s, F:%s]: BEGIN\n", - osThreadGetId(), g_discoverStep++, EXAMPLE_SERVICE, EXAMPLE_FEATURE); - int32 ref = demoApi->Release((IUnknown *)demoApi); - if (ref <= 0) { - printf("[Discover Test][TaskID:%p][Step:%d][ReleaseIUnknown S:%s, F:%s]Error ref is %d!\n", - osThreadGetId(), g_discoverStep++, EXAMPLE_SERVICE, EXAMPLE_FEATURE, ref); - goto END; - } - printf("[Discover Test][TaskID:%p][Step:%d][ReleaseIUnknown S:%s, F:%s]Success\n", - osThreadGetId(), g_discoverStep++, EXAMPLE_SERVICE, EXAMPLE_FEATURE); -END: - printf("[Discover Test][TaskID:%p][Step:%d][ReleaseIUnknown S:%s, F:%s]: END\n", - osThreadGetId(), g_discoverStep++, EXAMPLE_SERVICE, EXAMPLE_FEATURE); -} - -static void RunTestCase(void) -{ - DemoApi *demoApi = CASE_GetIUnknown(); - CASE_SyncCall(demoApi); - CASE_AsyncCall(demoApi); - CASE_AsyncCallBack(demoApi); - CASE_AsyncTimeCall(demoApi); - CASE_ReleaseIUnknown(demoApi); -} -LAYER_INITCALL_DEF(RunTestCase, test, "test"); +/* + * Copyright (c) 2020-2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "example.h" +#include +#include +#include +#include +#include +#include +#include "iunknown.h" +#include "feature.h" +#include "service.h" +#include "samgr_lite.h" +#include "time_adapter.h" + +#define WAIT_FEATURE_PROC 1000 + +enum MessageId { + MSG_PROC, + MSG_TIME_PROC, +}; + +struct Payload { + int id; + const char *name; + int value; +}; + +typedef struct DemoApi { + INHERIT_IUNKNOWN; + BOOL (*AsyncCall)(IUnknown *iUnknown, const char *buff); + BOOL (*AsyncTimeCall)(IUnknown *iUnknown); + BOOL (*SyncCall)(IUnknown *iUnknown, struct Payload *payload); + BOOL (*AsyncCallBack)(IUnknown *iUnknown, const char *buff, Handler handler); +} DemoApi; + +typedef struct DemoFeature { + INHERIT_FEATURE; + INHERIT_IUNKNOWNENTRY(DemoApi); + Identity identity; +} DemoFeature; + +static BOOL AsyncCall(IUnknown *iUnknown, const char *body); +static BOOL AsyncTimeCall(IUnknown *iUnknown); +static BOOL SyncCall(IUnknown *iUnknown, struct Payload *payload); +static BOOL AsyncCallBack(IUnknown *iUnknown, const char *body, Handler handler); +static const char *FEATURE_GetName(Feature *feature); +static void FEATURE_OnInitialize(Feature *feature, Service *parent, Identity identity); +static void FEATURE_OnStop(Feature *feature, Identity identity); +static BOOL FEATURE_OnMessage(Feature *feature, Request *request); +static DemoFeature g_example = { + .GetName = FEATURE_GetName, + .OnInitialize = FEATURE_OnInitialize, + .OnStop = FEATURE_OnStop, + .OnMessage = FEATURE_OnMessage, + DEFAULT_IUNKNOWN_ENTRY_BEGIN, + .AsyncCall = AsyncCall, + .AsyncTimeCall = AsyncTimeCall, + .SyncCall = SyncCall, + .AsyncCallBack = AsyncCallBack, + DEFAULT_IUNKNOWN_ENTRY_END, + .identity = {-1, -1, NULL}, +}; +static uint32_t g_regStep = 0; + +static const char *FEATURE_GetName(Feature *feature) +{ + (void)feature; + return EXAMPLE_FEATURE; +} + +static void FEATURE_OnInitialize(Feature *feature, Service *parent, Identity identity) +{ + DemoFeature *demoFeature = (DemoFeature *)feature; + demoFeature->identity = identity; + printf("[Register Test][TaskID:%u][Step:%u][Reg Finish S:%s, F:%s]Time: %llu!\n", + (int)osThreadGetId(), g_regStep++, parent->GetName(parent), feature->GetName(feature), + SAMGR_GetProcessTime()); +} + +static void FEATURE_OnStop(Feature *feature, Identity identity) +{ + (void)feature; + (void)identity; + g_example.identity.queueId = NULL; + g_example.identity.featureId = -1; + g_example.identity.serviceId = -1; +} + +static volatile uint32 g_asyncStep = 0; + +static BOOL FEATURE_OnMessage(Feature *feature, Request *request) +{ + (void)feature; + if (request->msgId == MSG_PROC) { + printf("[LPC Test][TaskID:%u][Step:%u][OnMessage: S:%s, F:%s] msgId %s \n", + (int)osThreadGetId(), g_asyncStep++, EXAMPLE_SERVICE, feature->GetName(feature), + (char *)request->data); + Response response = {.data = "Yes, you did!", .len = 0}; + SAMGR_SendResponse(request, &response); + return TRUE; + } else { + if (request->msgId == MSG_TIME_PROC) { + LOS_Msleep(WAIT_FEATURE_PROC * 11); // sleep 11 seconds + printf("[LPC Test][TaskID:%u][OnMessage: S:%s, F:%s] Time Message Get Value<%s>!", + (int)osThreadGetId(), EXAMPLE_SERVICE, feature->GetName(feature), + request->msgValue ? "TRUE" : "FALSE"); + AsyncTimeCall(GET_IUNKNOWN(g_example)); + return FALSE; + } + } + printf("[LPC Test][TaskID:%u][Step:%u][OnMessage S:%s, F:%s] Inner Error! \n", + (int)osThreadGetId(), g_asyncStep++, EXAMPLE_SERVICE, feature->GetName(feature)); + return FALSE; +} + +static BOOL SyncCall(IUnknown *iUnknown, struct Payload *payload) +{ + (void)iUnknown; + if (payload != NULL && payload->id >= 0 && payload->name != NULL) { + printf("[LPC Test][TaskID:%u][Step:%u][SyncCall API] Id:%d, name:%s, value:%d \n", + (int)osThreadGetId(), g_asyncStep++, payload->id, payload->name, payload->value); + return TRUE; + } + printf("[LPC Test][TaskID:%u][Step:%u][SyncCall API] Input Error! \n", (int)osThreadGetId(), g_asyncStep++); + return FALSE; +} + +static BOOL AsyncCall(IUnknown *iUnknown, const char *body) +{ + Request request = {.msgId = MSG_PROC, .msgValue = 0}; + request.len = (uint32_t)(strlen(body) + 1); + request.data = malloc(request.len); + if (request.data == NULL) { + return FALSE; + } + if (strcpy_s(request.data, request.len, body) != EOK) { + free(request.data); + return FALSE; + } + DemoFeature *feature = GET_OBJECT(iUnknown, DemoFeature, iUnknown); + printf("[LPC Test][TaskID:%u][Step:%u][AsyncCall API] Send request! \n", (int)osThreadGetId(), g_asyncStep++); + return SAMGR_SendRequest(&feature->identity, &request, NULL); +} + +static BOOL AsyncTimeCall(IUnknown *iUnknown) +{ + static int8 cnt = 0; + cnt = (cnt + 1) % 2; // mod 2 to get async status + Request request = {.msgId = MSG_TIME_PROC, .msgValue = cnt}; + DemoFeature *feature = GET_OBJECT(iUnknown, DemoFeature, iUnknown); + return SAMGR_SendRequest(&feature->identity, &request, NULL); +} + +static BOOL AsyncCallBack(IUnknown *iUnknown, const char *body, Handler handler) +{ + Request request = {.msgId = MSG_PROC, .msgValue = 0}; + request.len = (uint32_t)(strlen(body) + 1); + request.data = malloc(request.len); + if (request.data == NULL) { + return FALSE; + } + if (strcpy_s(request.data, request.len, body) != EOK) { + free(request.data); + return FALSE; + } + DemoFeature *feature = GET_OBJECT(iUnknown, DemoFeature, iUnknown); + printf("[LPC Test][TaskID:%u][Step:%u][AsyncCallBack API] Send request! \n", + (int)osThreadGetId(), g_asyncStep++); + return SAMGR_SendRequest(&feature->identity, &request, handler); +} + +static void Init(void) +{ + SAMGR_GetInstance()->RegisterFeature(EXAMPLE_SERVICE, (Feature *)&g_example); + SAMGR_GetInstance()->RegisterFeatureApi(EXAMPLE_SERVICE, EXAMPLE_FEATURE, GET_IUNKNOWN(g_example)); + printf("[Register Test][TaskID:%u][Step:%u][Reg S:%s, F:%s]Time: %llu!\n", + (int)osThreadGetId(), g_regStep++, EXAMPLE_SERVICE, EXAMPLE_FEATURE, SAMGR_GetProcessTime()); +} + +SYSEX_FEATURE_INIT(Init); + +static uint32_t g_discoverStep = 0; + +static DemoApi *CASE_GetIUnknown(void) +{ + DemoApi *demoApi = NULL; + printf("[Discover Test][TaskID:%u][Step:%u][GetIUnknown S:%s, F:%s]: BEGIN\n", + (int)osThreadGetId(), g_discoverStep++, EXAMPLE_SERVICE, EXAMPLE_FEATURE); + IUnknown *iUnknown = SAMGR_GetInstance()->GetFeatureApi(EXAMPLE_SERVICE, EXAMPLE_FEATURE); + if (iUnknown == NULL) { + printf("[Discover Test][TaskID:%u][Step:%u][GetFeatureApi S:%s, F:%s]Error is NULL!\n", + (int)osThreadGetId(), g_discoverStep++, EXAMPLE_SERVICE, EXAMPLE_FEATURE); + goto END; + } + int result = iUnknown->QueryInterface(iUnknown, DEFAULT_VERSION, (void **)&demoApi); + if (result != 0 || demoApi == NULL) { + printf("[Discover Test][TaskID:%u][Step:%u][QueryInterface S:%s, F:%s]Error is NULL!\n", + (int)osThreadGetId(), g_discoverStep++, EXAMPLE_SERVICE, EXAMPLE_FEATURE); + goto END; + } + printf("[Discover Test][TaskID:%u][Step:%u][GetIUnknown S:%s, F:%s]Success\n", + (int)osThreadGetId(), g_discoverStep++, EXAMPLE_SERVICE, EXAMPLE_FEATURE); +END: + printf("[Discover Test][TaskID:%u][Step:%u][GetIUnknown S:%s, F:%s]: END\n", + (int)osThreadGetId(), g_discoverStep++, EXAMPLE_SERVICE, EXAMPLE_FEATURE); + return demoApi; +} + +static void CASE_SyncCall(DemoApi *demoApi) +{ + if (demoApi->SyncCall == NULL) { + return; + } + printf("[LPC Test][TaskID:%u][Step:%u][SyncCall]: BEGIN! \n", (int)osThreadGetId(), g_asyncStep++); + struct Payload payload = { + .id = 0, + .name = "I want to sync call good result!", + .value = 1 + }; + if (!demoApi->SyncCall((IUnknown *)demoApi, &payload)) { + printf("[LPC Test][TaskID:%u][Step:%u][SyncCall]Error return false! \n", + (int)osThreadGetId(), g_asyncStep++); + goto END; + } + printf("[LPC Test][TaskID:%u][Step:%u][SyncCall]Success!\n", + (int)osThreadGetId(), g_asyncStep++); +END: + printf("[LPC Test][TaskID:%u][Step:%u][SyncCall]: END\n", + (int)osThreadGetId(), g_asyncStep++); +} + + +static void CASE_AsyncCall(DemoApi *demoApi) +{ + if (demoApi->AsyncCall == NULL) { + return; + } + printf("[LPC Test][TaskID:%u][Step:%u][AsyncCall]: BEGIN! \n", (int)osThreadGetId(), g_asyncStep++); + uint32 count = g_asyncStep; + demoApi->AsyncCall((IUnknown *)demoApi, "I want to async call good result!"); + LOS_Msleep(WAIT_FEATURE_PROC); + if (count == g_asyncStep) { + printf("[LPC Test][TaskID:%u][Step:%u][AsyncCall] result is failed! \n", (int)osThreadGetId(), + g_asyncStep++); + goto END; + } + printf("[LPC Test][TaskID:%u][Step:%u][AsyncCall]Success! \n", (int)osThreadGetId(), g_asyncStep++); +END: + printf("[LPC Test][TaskID:%u][Step:%u][AsyncCall]: END! \n", (int)osThreadGetId(), g_asyncStep++); +} + +static void CASE_AsyncTimeCall(DemoApi *demoApi) +{ + if (demoApi->AsyncCall == NULL) { + return; + } + demoApi->AsyncTimeCall((IUnknown *)demoApi); +} + +void AsyncHandler(const Request *request, const Response *response) +{ + (void)request; + printf("[LPC Test][TaskID:%u][Step:%u][AsyncCallBack]Success! Response:%s \n", + (int)osThreadGetId(), g_asyncStep++, (char *)response->data); + printf("[LPC Test][TaskID:%u][Step:%u][AsyncCallBack]: END! \n", (int)osThreadGetId(), g_asyncStep++); +} + +static void CASE_AsyncCallBack(DemoApi *demoApi) +{ + if (demoApi->AsyncCallBack == NULL) { + return; + } + printf("[LPC Test][TaskID:%u][Step:%u][AsyncCallBack]: BEGIN! \n", (int)osThreadGetId(), g_asyncStep++); + demoApi->AsyncCallBack((IUnknown *)demoApi, "I want to async call callback good result!", AsyncHandler); + printf("[LPC Test][TaskID:%u][Step:%u][AsyncCallBack]Wait for response! \n", + (int)osThreadGetId(), g_asyncStep++); +} + +static void CASE_ReleaseIUnknown(DemoApi *demoApi) +{ + printf("[Discover Test][TaskID:%u][Step:%u][ReleaseIUnknown S:%s, F:%s]: BEGIN\n", + (int)osThreadGetId(), g_discoverStep++, EXAMPLE_SERVICE, EXAMPLE_FEATURE); + int32 ref = demoApi->Release((IUnknown *)demoApi); + if (ref <= 0) { + printf("[Discover Test][TaskID:%u][Step:%u][ReleaseIUnknown S:%s, F:%s]Error ref is %d!\n", + (int)osThreadGetId(), g_discoverStep++, EXAMPLE_SERVICE, EXAMPLE_FEATURE, ref); + goto END; + } + printf("[Discover Test][TaskID:%u][Step:%u][ReleaseIUnknown S:%s, F:%s]Success\n", + (int)osThreadGetId(), g_discoverStep++, EXAMPLE_SERVICE, EXAMPLE_FEATURE); +END: + printf("[Discover Test][TaskID:%u][Step:%u][ReleaseIUnknown S:%s, F:%s]: END\n", + (int)osThreadGetId(), g_discoverStep++, EXAMPLE_SERVICE, EXAMPLE_FEATURE); +} + +static void RunTestCase(void) +{ + DemoApi *demoApi = CASE_GetIUnknown(); + CASE_SyncCall(demoApi); + CASE_AsyncCall(demoApi); + CASE_AsyncCallBack(demoApi); + CASE_AsyncTimeCall(demoApi); + CASE_ReleaseIUnknown(demoApi); +} + +LAYER_INITCALL_DEF(RunTestCase, test, "test"); diff --git a/app/samgr/maintenance_example.c b/app/samgr/maintenance_example.c old mode 100755 new mode 100644 index 33d677fd3646a7fc716c64ed11c1a2ae3507ee9b..b75240ae69fabbb760ae4c6dd30382c67fc428fd --- a/app/samgr/maintenance_example.c +++ b/app/samgr/maintenance_example.c @@ -1,171 +1,179 @@ -/* - * Copyright (c) 2020 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include -#include -#include -#include -#include "service.h" -#include "feature.h" -#include "samgr_lite.h" - -#define MAINTEN_SERVICE1 "mntn_s1" -#define MAINTEN_SERVICE2 "mntn_s2" -#define MAINTEN_SERVICE3 "mntn_s3" -#define MAINTEN_SERVICE4 "mntn_s4" -#define MAINTEN_FEATURE1 "mntn_f1" -#define MAINTEN_FEATURE2 "mntn_f2" -static const char *GetName(Service *service); -static BOOL Initialize(Service *service, Identity identity); -static BOOL MessageHandle(Service *service, Request *msg); -static TaskConfig GetTaskConfig(Service *service); -static const char *FEATURE_GetName(Feature *feature); -static void FEATURE_OnInitialize(Feature *feature, Service *parent, Identity identity); -static void FEATURE_OnStop(Feature *feature, Identity identity); -static BOOL FEATURE_OnMessage(Feature *feature, Request *request); -Service g_maintenExample1 = {GetName, Initialize, MessageHandle, GetTaskConfig}; -Service g_maintenExample2 = {GetName, Initialize, MessageHandle, GetTaskConfig}; -Service g_maintenExample3 = {GetName, Initialize, MessageHandle, GetTaskConfig}; -Service g_maintenExample4 = {GetName, Initialize, MessageHandle, GetTaskConfig}; -Feature g_maintenFeature1 = {FEATURE_GetName, FEATURE_OnInitialize, FEATURE_OnStop, FEATURE_OnMessage}; -Feature g_maintenFeature2 = {FEATURE_GetName, FEATURE_OnInitialize, FEATURE_OnStop, FEATURE_OnMessage}; -IUnknownEntry g_demoApi = {DEFAULT_IUNKNOWN_ENTRY_BEGIN, DEFAULT_IUNKNOWN_ENTRY_END}; - -static const char *FEATURE_GetName(Feature *feature) -{ - if (feature == &g_maintenFeature1) { - return MAINTEN_FEATURE1; - } - if (feature == &g_maintenFeature2) { - return MAINTEN_FEATURE2; - } - return NULL; -} - -static void FEATURE_OnInitialize(Feature *feature, Service *parent, Identity identity) -{ - (void)feature; - (void)parent; - (void)identity; -} - -static void FEATURE_OnStop(Feature *feature, Identity identity) -{ - (void)feature; - (void)identity; -} - -static BOOL FEATURE_OnMessage(Feature *feature, Request *request) -{ - (void)feature; - (void)request; - return FALSE; -} - -static const char *GetName(Service *service) -{ - if (service == &g_maintenExample1) { - return MAINTEN_SERVICE1; - } - if (service == &g_maintenExample2) { - return MAINTEN_SERVICE2; - } - if (service == &g_maintenExample3) { - return MAINTEN_SERVICE3; - } - if (service == &g_maintenExample4) { - return MAINTEN_SERVICE4; - } - return NULL; -} - -static BOOL Initialize(Service *service, Identity identity) -{ - (void)identity; - (void)service; - return TRUE; -} - -static BOOL MessageHandle(Service *service, Request *msg) -{ - (void)service; - (void)msg; - return FALSE; -} - -static TaskConfig GetTaskConfig(Service *service) -{ - (void)service; - TaskConfig config = {LEVEL_HIGH, PRI_NORMAL, - 0x800, 16, SHARED_TASK}; - if (service == &g_maintenExample4) { - config.priority = PRI_ABOVE_NORMAL; - config.stackSize = 0x400; - } - return config; -} - -static void SInit(Service *service) -{ - if (service == &g_maintenExample4) { - printf("[Maintenance Test][Before App Service Init]Print Uninitialized App Service\n"); - SAMGR_PrintServices(); - } - SAMGR_GetInstance()->RegisterService(service); -} - -static void FInit(Feature *feature) -{ - if (feature == &g_maintenFeature1) { - SAMGR_GetInstance()->RegisterFeature(MAINTEN_SERVICE1, feature); - SAMGR_GetInstance()->RegisterFeatureApi(MAINTEN_SERVICE1, MAINTEN_FEATURE1, GET_IUNKNOWN(g_demoApi)); - } - if (feature == &g_maintenFeature2) { - SAMGR_GetInstance()->RegisterFeature(MAINTEN_SERVICE2, feature); - SAMGR_GetInstance()->RegisterDefaultFeatureApi(MAINTEN_SERVICE2, GET_IUNKNOWN(g_demoApi)); - } -} - -static void S1Init(void) -{ - SInit(&g_maintenExample1); -} -static void S2Init(void) -{ - SInit(&g_maintenExample2); -} -static void S3Init(void) -{ - SInit(&g_maintenExample3); -} -static void S4Init(void) -{ - SInit(&g_maintenExample4); -} -static void F1Init(void) -{ - FInit(&g_maintenFeature1); -} -static void F2Init(void) -{ - FInit(&g_maintenFeature2); -} - -SYSEX_SERVICE_INIT(S1Init); -SYSEX_SERVICE_INIT(S2Init); -SYSEX_SERVICE_INIT(S3Init); -SYSEX_SERVICE_INIT(S4Init); -SYSEX_FEATURE_INIT(F1Init); -SYSEX_FEATURE_INIT(F2Init); +/* + * Copyright (c) 2020-2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include "service.h" +#include "feature.h" +#include "samgr_lite.h" + +#define MAINTEN_SERVICE1 "mntn_s1" +#define MAINTEN_SERVICE2 "mntn_s2" +#define MAINTEN_SERVICE3 "mntn_s3" +#define MAINTEN_SERVICE4 "mntn_s4" +#define MAINTEN_FEATURE1 "mntn_f1" +#define MAINTEN_FEATURE2 "mntn_f2" + +static const char *GetName(Service *service); +static BOOL Initialize(Service *service, Identity identity); +static BOOL MessageHandle(Service *service, Request *msg); +static TaskConfig GetTaskConfig(Service *service); +static const char *FEATURE_GetName(Feature *feature); +static void FEATURE_OnInitialize(Feature *feature, Service *parent, Identity identity); +static void FEATURE_OnStop(Feature *feature, Identity identity); +static BOOL FEATURE_OnMessage(Feature *feature, Request *request); + +Service g_maintenExample1 = {GetName, Initialize, MessageHandle, GetTaskConfig}; +Service g_maintenExample2 = {GetName, Initialize, MessageHandle, GetTaskConfig}; +Service g_maintenExample3 = {GetName, Initialize, MessageHandle, GetTaskConfig}; +Service g_maintenExample4 = {GetName, Initialize, MessageHandle, GetTaskConfig}; +Feature g_maintenFeature1 = {FEATURE_GetName, FEATURE_OnInitialize, FEATURE_OnStop, FEATURE_OnMessage}; +Feature g_maintenFeature2 = {FEATURE_GetName, FEATURE_OnInitialize, FEATURE_OnStop, FEATURE_OnMessage}; +IUnknownEntry g_demoApi = {DEFAULT_IUNKNOWN_ENTRY_BEGIN, DEFAULT_IUNKNOWN_ENTRY_END}; + +static const char *FEATURE_GetName(Feature *feature) +{ + if (feature == &g_maintenFeature1) { + return MAINTEN_FEATURE1; + } + if (feature == &g_maintenFeature2) { + return MAINTEN_FEATURE2; + } + return NULL; +} + +static void FEATURE_OnInitialize(Feature *feature, Service *parent, Identity identity) +{ + (void)feature; + (void)parent; + (void)identity; +} + +static void FEATURE_OnStop(Feature *feature, Identity identity) +{ + (void)feature; + (void)identity; +} + +static BOOL FEATURE_OnMessage(Feature *feature, Request *request) +{ + (void)feature; + (void)request; + return FALSE; +} + +static const char *GetName(Service *service) +{ + if (service == &g_maintenExample1) { + return MAINTEN_SERVICE1; + } + if (service == &g_maintenExample2) { + return MAINTEN_SERVICE2; + } + if (service == &g_maintenExample3) { + return MAINTEN_SERVICE3; + } + if (service == &g_maintenExample4) { + return MAINTEN_SERVICE4; + } + return NULL; +} + +static BOOL Initialize(Service *service, Identity identity) +{ + (void)identity; + (void)service; + return TRUE; +} + +static BOOL MessageHandle(Service *service, Request *msg) +{ + (void)service; + (void)msg; + return FALSE; +} + +static TaskConfig GetTaskConfig(Service *service) +{ + (void)service; + TaskConfig config = {LEVEL_HIGH, PRI_NORMAL, + 0x800, 16, SHARED_TASK}; + if (service == &g_maintenExample4) { + config.priority = PRI_ABOVE_NORMAL; + config.stackSize = 0x400; + } + return config; +} + +static void SInit(Service *service) +{ + if (service == &g_maintenExample4) { + printf("[Maintenance Test][Before App Service Init]Print Uninitialized App Service\n"); + SAMGR_PrintServices(); + } + SAMGR_GetInstance()->RegisterService(service); +} + +static void FInit(Feature *feature) +{ + if (feature == &g_maintenFeature1) { + SAMGR_GetInstance()->RegisterFeature(MAINTEN_SERVICE1, feature); + SAMGR_GetInstance()->RegisterFeatureApi(MAINTEN_SERVICE1, MAINTEN_FEATURE1, GET_IUNKNOWN(g_demoApi)); + } + if (feature == &g_maintenFeature2) { + SAMGR_GetInstance()->RegisterFeature(MAINTEN_SERVICE2, feature); + SAMGR_GetInstance()->RegisterDefaultFeatureApi(MAINTEN_SERVICE2, GET_IUNKNOWN(g_demoApi)); + } +} + +static void S1Init(void) +{ + SInit(&g_maintenExample1); +} + +static void S2Init(void) +{ + SInit(&g_maintenExample2); +} + +static void S3Init(void) +{ + SInit(&g_maintenExample3); +} + +static void S4Init(void) +{ + SInit(&g_maintenExample4); +} + +static void F1Init(void) +{ + FInit(&g_maintenFeature1); +} + +static void F2Init(void) +{ + FInit(&g_maintenFeature2); +} + +SYSEX_SERVICE_INIT(S1Init); +SYSEX_SERVICE_INIT(S2Init); +SYSEX_SERVICE_INIT(S3Init); +SYSEX_SERVICE_INIT(S4Init); +SYSEX_FEATURE_INIT(F1Init); +SYSEX_FEATURE_INIT(F2Init); diff --git a/app/samgr/service_example.c b/app/samgr/service_example.c old mode 100755 new mode 100644 index 6021f87856820321fcc620bff61b4f5d9a22a4cd..de411f0ab9e20b5d4b4d965fa14feab41712b267 --- a/app/samgr/service_example.c +++ b/app/samgr/service_example.c @@ -1,173 +1,187 @@ -/* - * Copyright (c) 2020 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "example.h" -#include -#include -#include -#include -#include "iunknown.h" -#include "feature.h" -#include "service.h" -#include "samgr_lite.h" -#include "time_adapter.h" - -typedef struct DefaultFeatureApi { - INHERIT_IUNKNOWN; - void (*SyncCall)(IUnknown *iUnknown); -} DefaultFeatureApi; - -typedef struct ExampleService { - INHERIT_SERVICE; - INHERIT_IUNKNOWNENTRY(DefaultFeatureApi); - Identity identity; -} ExampleService; - -static const char *GetName(Service *service) -{ - (void)service; - return EXAMPLE_SERVICE; -} -static int g_regStep = 0; -static BOOL Initialize(Service *service, Identity identity) -{ - ExampleService *example = (ExampleService *)service; - example->identity = identity; - printf("[Register Test][TaskID:%p][Step:%d][Reg Finish S:%s]Time: %llu!\n", - osThreadGetId(), g_regStep++, service->GetName(service), SAMGR_GetProcessTime()); - return TRUE; -} - -static BOOL MessageHandle(Service *service, Request *msg) -{ - printf("[LPC Test][TaskID: %p] msgId<%d>: %s \n", osThreadGetId(), msg->msgId, (char *)msg->data); - (void)service; - return FALSE; -} - -static TaskConfig GetTaskConfig(Service *service) -{ - (void)service; - TaskConfig config = {LEVEL_HIGH, PRI_BELOW_NORMAL, - 0x800, 20, SHARED_TASK}; - return config; -} -static volatile uint32 g_asyncStep = 0; -static void SyncCall(IUnknown *iUnknown) -{ - (void)iUnknown; - printf("[LPC Test][TaskID:%p][Step:%d][SyncCall API] Default Success!\n", osThreadGetId(), g_asyncStep++); -} -static ExampleService g_example = { - .GetName = GetName, - .Initialize = Initialize, - .MessageHandle = MessageHandle, - .GetTaskConfig = GetTaskConfig, - DEFAULT_IUNKNOWN_ENTRY_BEGIN, - .SyncCall = SyncCall, - DEFAULT_IUNKNOWN_ENTRY_END, -}; - -static void Init(void) -{ - SAMGR_GetInstance()->RegisterService((Service *)&g_example); - SAMGR_GetInstance()->RegisterDefaultFeatureApi(EXAMPLE_SERVICE, GET_IUNKNOWN(g_example)); - printf("[Register Test][TaskID:%p][Step:%d][Reg S:%s]Time: %llu!\n", - osThreadGetId(), g_regStep++, EXAMPLE_SERVICE, SAMGR_GetProcessTime()); -} -SYSEX_SERVICE_INIT(Init); - -static int g_discoverStep = 0; -static DefaultFeatureApi *CASE_GetIUnknown(void) -{ - DefaultFeatureApi *demoApi = NULL; - printf("[Discover Test][TaskID:%p][Step:%d][GetIUnknown S:%s]: BEGIN\n", - osThreadGetId(), g_discoverStep++, EXAMPLE_SERVICE); - IUnknown *iUnknown = SAMGR_GetInstance()->GetDefaultFeatureApi(EXAMPLE_SERVICE); - if (iUnknown == NULL) { - printf("[Discover Test][TaskID:%p][Step:%d][GetDefaultFeatureApi S:%s]Error is NULL!\n", - osThreadGetId(), g_discoverStep++, EXAMPLE_SERVICE); - goto END; - } - int result = iUnknown->QueryInterface(iUnknown, DEFAULT_VERSION, (void **)&demoApi); - if (result != 0 || demoApi == NULL) { - printf("[Discover Test][TaskID:%p][Step:%d][QueryInterface S:%s]Error is NULL!\n", - osThreadGetId(), g_discoverStep++, EXAMPLE_SERVICE); - goto END; - } - printf("[Discover Test][TaskID:%p][Step:%d][GetIUnknown S:%s]Success\n", - osThreadGetId(), g_discoverStep++, EXAMPLE_SERVICE); -END: - printf("[Discover Test][TaskID:%p][Step:%d][GetIUnknown S:%s]: END\n", - osThreadGetId(), g_discoverStep++, EXAMPLE_SERVICE); - return demoApi; -} - - -static void CASE_SyncCall(DefaultFeatureApi *defaultApi) -{ - printf("[LPC Test][TaskID:%p][Step:%d][DefaultFeature SyncCall]: BEGIN\n", osThreadGetId(), g_asyncStep++); - defaultApi->SyncCall((IUnknown *)defaultApi); - printf("[LPC Test][TaskID:%p][Step:%d][DefaultFeature SyncCall]: END\n", osThreadGetId(), g_asyncStep++); -} - -static void CASE_ReleaseIUnknown(DefaultFeatureApi *demoApi) -{ - printf("[Discover Test][TaskID:%p][Step:%d][ReleaseIUnknown S:%s]: BEGIN\n", - osThreadGetId(), g_discoverStep++, EXAMPLE_SERVICE); - int32 ref = demoApi->Release((IUnknown *)demoApi); - if (ref <= 0) { - printf("[Discover Test][TaskID:%p][Step:%d][ReleaseIUnknown S:%s]Error ref is %d!\n", - osThreadGetId(), g_discoverStep++, EXAMPLE_SERVICE, ref); - goto END; - } - printf("[Discover Test][TaskID:%p][Step:%d][ReleaseIUnknown S:%s]Success\n", - osThreadGetId(), g_discoverStep++, EXAMPLE_SERVICE); -END: - printf("[Discover Test][TaskID:%p][Step:%d][ReleaseIUnknown S:%s]: END\n", - osThreadGetId(), g_discoverStep++, EXAMPLE_SERVICE); -} -static void CASE_RegisterInvalidService(void) -{ - Service service = {.GetName = NULL, .GetTaskConfig = NULL, .Initialize = NULL, .MessageHandle = NULL}; - BOOL ret = SAMGR_GetInstance()->RegisterService(&service); - printf("Register Invalid Service %s\n", ret ? "TRUE" : "FALSE"); - - Feature feature = {.GetName = NULL, .OnInitialize = NULL, .OnMessage = NULL, .OnStop = NULL}; - ret = SAMGR_GetInstance()->RegisterFeature(EXAMPLE_SERVICE, &feature); - printf("Register Invalid Feature %s\n", ret ? "TRUE" : "FALSE"); - - IUnknownEntry entry = { - .ver = DEFAULT_VERSION, - .ref = 1, - .iUnknown = { - .QueryInterface = NULL, - .Release = NULL, - .AddRef = NULL - } - }; - ret = SAMGR_GetInstance()->RegisterDefaultFeatureApi(EXAMPLE_SERVICE, GET_IUNKNOWN(entry)); - printf("Register Invalid Default Api %s\n", ret ? "TRUE" : "FALSE"); - - ret = SAMGR_GetInstance()->RegisterFeatureApi(EXAMPLE_SERVICE, EXAMPLE_FEATURE "2", GET_IUNKNOWN(entry)); - printf("Register Invalid " EXAMPLE_FEATURE "2 Api %s\n", ret ? "TRUE" : "FALSE"); -} -static void RunTestCase(void) -{ - DefaultFeatureApi *defaultApi = CASE_GetIUnknown(); - CASE_RegisterInvalidService(); - CASE_SyncCall(defaultApi); - CASE_ReleaseIUnknown(defaultApi); -} -LAYER_INITCALL_DEF(RunTestCase, test, "test"); \ No newline at end of file +/* + * Copyright (c) 2020-2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "example.h" +#include +#include +#include +#include +#include +#include "iunknown.h" +#include "feature.h" +#include "service.h" +#include "samgr_lite.h" +#include "time_adapter.h" + +typedef struct DefaultFeatureApi { + INHERIT_IUNKNOWN; + void (*SyncCall)(IUnknown *iUnknown); +} DefaultFeatureApi; + +typedef struct ExampleService { + INHERIT_SERVICE; + INHERIT_IUNKNOWNENTRY(DefaultFeatureApi); + Identity identity; +} ExampleService; + +static const char *GetName(Service *service) +{ + (void)service; + return EXAMPLE_SERVICE; +} + +static uint32_t g_regStep = 0; + +static BOOL Initialize(Service *service, Identity identity) +{ + ExampleService *example = (ExampleService *)service; + example->identity = identity; + printf("[Register Test][TaskID:%u][Step:%u][Reg Finish S:%s]Time: %llu!\n", + (int)osThreadGetId(), g_regStep++, service->GetName(service), SAMGR_GetProcessTime()); + return TRUE; +} + +static BOOL MessageHandle(Service *service, Request *msg) +{ + printf("[LPC Test][TaskID:%u] msgId<%d>: %s \n", (int)osThreadGetId(), msg->msgId, (char *)msg->data); + (void)service; + return FALSE; +} + +static TaskConfig GetTaskConfig(Service *service) +{ + (void)service; + TaskConfig config = {LEVEL_HIGH, PRI_BELOW_NORMAL, + 0x800, 20, SHARED_TASK}; + return config; +} + +static volatile uint32 g_asyncStep = 0; + +static void SyncCall(IUnknown *iUnknown) +{ + (void)iUnknown; + printf("[LPC Test][TaskID:%u][Step:%u][SyncCall API] Default Success!\n", (int)osThreadGetId(), + g_asyncStep++); +} + +static ExampleService g_example = { + .GetName = GetName, + .Initialize = Initialize, + .MessageHandle = MessageHandle, + .GetTaskConfig = GetTaskConfig, + DEFAULT_IUNKNOWN_ENTRY_BEGIN, + .SyncCall = SyncCall, + DEFAULT_IUNKNOWN_ENTRY_END, +}; + +static void Init(void) +{ + SAMGR_GetInstance()->RegisterService((Service *)&g_example); + SAMGR_GetInstance()->RegisterDefaultFeatureApi(EXAMPLE_SERVICE, GET_IUNKNOWN(g_example)); + printf("[Register Test][TaskID:%u][Step:%u][Reg S:%s]Time: %llu!\n", + (int)osThreadGetId(), g_regStep++, EXAMPLE_SERVICE, SAMGR_GetProcessTime()); +} + +SYSEX_SERVICE_INIT(Init); + +static uint32_t g_discoverStep = 0; + +static DefaultFeatureApi *CASE_GetIUnknown(void) +{ + DefaultFeatureApi *demoApi = NULL; + printf("[Discover Test][TaskID:%u][Step:%u][GetIUnknown S:%s]: BEGIN\n", + (int)osThreadGetId(), g_discoverStep++, EXAMPLE_SERVICE); + IUnknown *iUnknown = SAMGR_GetInstance()->GetDefaultFeatureApi(EXAMPLE_SERVICE); + if (iUnknown == NULL) { + printf("[Discover Test][TaskID:%u][Step:%u][GetDefaultFeatureApi S:%s]Error is NULL!\n", + (int)osThreadGetId(), g_discoverStep++, EXAMPLE_SERVICE); + goto END; + } + int result = iUnknown->QueryInterface(iUnknown, DEFAULT_VERSION, (void **)&demoApi); + if (result != 0 || demoApi == NULL) { + printf("[Discover Test][TaskID:%u][Step:%u][QueryInterface S:%s]Error is NULL!\n", + (int)osThreadGetId(), g_discoverStep++, EXAMPLE_SERVICE); + goto END; + } + printf("[Discover Test][TaskID:%u][Step:%u][GetIUnknown S:%s]Success\n", + (int)osThreadGetId(), g_discoverStep++, EXAMPLE_SERVICE); +END: + printf("[Discover Test][TaskID:%u][Step:%u][GetIUnknown S:%s]: END\n", + (int)osThreadGetId(), g_discoverStep++, EXAMPLE_SERVICE); + return demoApi; +} + +static void CASE_SyncCall(DefaultFeatureApi *defaultApi) +{ + printf("[LPC Test][TaskID:%u][Step:%u][DefaultFeature SyncCall]: BEGIN\n", (int)osThreadGetId(), + g_asyncStep++); + defaultApi->SyncCall((IUnknown *)defaultApi); + printf("[LPC Test][TaskID:%u][Step:%u][DefaultFeature SyncCall]: END\n", (int)osThreadGetId(), + g_asyncStep++); +} + +static void CASE_ReleaseIUnknown(DefaultFeatureApi *demoApi) +{ + printf("[Discover Test][TaskID:%u][Step:%u][ReleaseIUnknown S:%s]: BEGIN\n", + (int)osThreadGetId(), g_discoverStep++, EXAMPLE_SERVICE); + int32 ref = demoApi->Release((IUnknown *)demoApi); + if (ref <= 0) { + printf("[Discover Test][TaskID:%u][Step:%u][ReleaseIUnknown S:%s]Error ref is %d!\n", + (int)osThreadGetId(), g_discoverStep++, EXAMPLE_SERVICE, ref); + goto END; + } + printf("[Discover Test][TaskID:%u][Step:%u][ReleaseIUnknown S:%s]Success\n", + (int)osThreadGetId(), g_discoverStep++, EXAMPLE_SERVICE); +END: + printf("[Discover Test][TaskID:%u][Step:%u][ReleaseIUnknown S:%s]: END\n", + (int)osThreadGetId(), g_discoverStep++, EXAMPLE_SERVICE); +} + +static void CASE_RegisterInvalidService(void) +{ + Service service = {.GetName = NULL, .GetTaskConfig = NULL, .Initialize = NULL, .MessageHandle = NULL}; + BOOL ret = SAMGR_GetInstance()->RegisterService(&service); + printf("Register Invalid Service %s\n", ret ? "TRUE" : "FALSE"); + + Feature feature = {.GetName = NULL, .OnInitialize = NULL, .OnMessage = NULL, .OnStop = NULL}; + ret = SAMGR_GetInstance()->RegisterFeature(EXAMPLE_SERVICE, &feature); + printf("Register Invalid Feature %s\n", ret ? "TRUE" : "FALSE"); + + IUnknownEntry entry = { + .ver = DEFAULT_VERSION, + .ref = 1, + .iUnknown = { + .QueryInterface = NULL, + .Release = NULL, + .AddRef = NULL + } + }; + ret = SAMGR_GetInstance()->RegisterDefaultFeatureApi(EXAMPLE_SERVICE, GET_IUNKNOWN(entry)); + printf("Register Invalid Default Api %s\n", ret ? "TRUE" : "FALSE"); + + ret = SAMGR_GetInstance()->RegisterFeatureApi(EXAMPLE_SERVICE, EXAMPLE_FEATURE "2", GET_IUNKNOWN(entry)); + printf("Register Invalid " EXAMPLE_FEATURE "2 Api %s\n", ret ? "TRUE" : "FALSE"); +} + +static void RunTestCase(void) +{ + DefaultFeatureApi *defaultApi = CASE_GetIUnknown(); + CASE_RegisterInvalidService(); + CASE_SyncCall(defaultApi); + CASE_ReleaseIUnknown(defaultApi); +} + +LAYER_INITCALL_DEF(RunTestCase, test, "test"); diff --git a/app/samgr/service_recovery_example.c b/app/samgr/service_recovery_example.c old mode 100755 new mode 100644 index 9c6783752ac5b8e4f04e9e5488e377a50d749211..fecc33b3f2acf98bb0197d956f8a0e604ce1e5c3 --- a/app/samgr/service_recovery_example.c +++ b/app/samgr/service_recovery_example.c @@ -1,113 +1,119 @@ -/* - * Copyright (c) 2020 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include -#include -#include -#include -#include "service.h" -#include "samgr_lite.h" - -#define TIME_UNLIMITED_CASE 0 -#define WAIT_BOOT_PROC ((1000) * (11)) -#define TEST_SYS_SERVICE1 "tst_sys1" -#define TEST_SYS_SERVICE2 "tst_sys2" -#define TEST_APP_SERVICE1 "tst_app1" -#define TEST_APP_SERVICE2 "tst_app2" -static const char *GetName(Service *service); -static BOOL Initialize(Service *service, Identity identity); -static BOOL MessageHandle(Service *service, Request *msg); -static TaskConfig GetTaskConfig(Service *service); -static Service g_testSys1 = {GetName, Initialize, MessageHandle, GetTaskConfig}; -static Service g_testSys2 = {GetName, Initialize, MessageHandle, GetTaskConfig}; -static Service g_testApp1 = {GetName, Initialize, MessageHandle, GetTaskConfig}; -static Service g_testApp2 = {GetName, Initialize, MessageHandle, GetTaskConfig}; - -static const char *GetName(Service *service) -{ - if (service == &g_testSys1) { - return TEST_SYS_SERVICE1; - } - if (service == &g_testSys2) { - return TEST_SYS_SERVICE2; - } - if (service == &g_testApp1) { - return TEST_APP_SERVICE1; - } - if (service == &g_testApp2) { - return TEST_APP_SERVICE2; - } - return NULL; -} - -static BOOL Initialize(Service *service, Identity identity) -{ - (void)identity; - if (service == &g_testSys1 || service == &g_testApp1) { - printf("[Recovery Test][Initialize]Time Out Case Running\n"); - LOS_Msleep(WAIT_BOOT_PROC); - return TRUE; - } -#if TIME_UNLIMITED_CASE - if (service == &g_testSys2 || service == &g_testApp2) { - printf("[Recovery Test][Initialize]Time Unlimited Case Running\n\n"); - while (1) { - (void)identity; - } - return TRUE; - } -#endif - return TRUE; -} - -static BOOL MessageHandle(Service *service, Request *msg) -{ - (void)service; - (void)msg; - return FALSE; -} - -static TaskConfig GetTaskConfig(Service *service) -{ - (void)service; - TaskConfig config = {LEVEL_HIGH, PRI_NORMAL, - 0x400, 16, SHARED_TASK}; - return config; -} - -static void SInit(Service *demo) -{ - SAMGR_GetInstance()->RegisterService(demo); -} - -static void SS1Init(void) -{ - SInit(&g_testSys1); -} -static void SS2Init(void) -{ - SInit(&g_testSys2); -} -static void AS1Init(void) -{ - SInit(&g_testApp1); -} -static void AS2Init(void) -{ - SInit(&g_testApp2); -} -SYS_SERVICE_INIT(SS1Init); -SYS_SERVICE_INIT(SS2Init); -SYSEX_SERVICE_INIT(AS1Init); -SYSEX_SERVICE_INIT(AS2Init); \ No newline at end of file +/* + * Copyright (c) 2020-2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include "service.h" +#include "samgr_lite.h" + +#define TIME_UNLIMITED_CASE 0 +#define WAIT_BOOT_PROC ((1000) * (11)) +#define TEST_SYS_SERVICE1 "tst_sys1" +#define TEST_SYS_SERVICE2 "tst_sys2" +#define TEST_APP_SERVICE1 "tst_app1" +#define TEST_APP_SERVICE2 "tst_app2" + +static const char *GetName(Service *service); +static BOOL Initialize(Service *service, Identity identity); +static BOOL MessageHandle(Service *service, Request *msg); +static TaskConfig GetTaskConfig(Service *service); +static Service g_testSys1 = {GetName, Initialize, MessageHandle, GetTaskConfig}; +static Service g_testSys2 = {GetName, Initialize, MessageHandle, GetTaskConfig}; +static Service g_testApp1 = {GetName, Initialize, MessageHandle, GetTaskConfig}; +static Service g_testApp2 = {GetName, Initialize, MessageHandle, GetTaskConfig}; + +static const char *GetName(Service *service) +{ + if (service == &g_testSys1) { + return TEST_SYS_SERVICE1; + } + if (service == &g_testSys2) { + return TEST_SYS_SERVICE2; + } + if (service == &g_testApp1) { + return TEST_APP_SERVICE1; + } + if (service == &g_testApp2) { + return TEST_APP_SERVICE2; + } + return NULL; +} + +static BOOL Initialize(Service *service, Identity identity) +{ + (void)identity; + if (service == &g_testSys1 || service == &g_testApp1) { + printf("[Recovery Test][Initialize]Time Out Case Running\n"); + LOS_Msleep(WAIT_BOOT_PROC); + return TRUE; + } +#if TIME_UNLIMITED_CASE + if (service == &g_testSys2 || service == &g_testApp2) { + printf("[Recovery Test][Initialize]Time Unlimited Case Running\n\n"); + while (1) { + (void)identity; + } + return TRUE; + } +#endif + return TRUE; +} + +static BOOL MessageHandle(Service *service, Request *msg) +{ + (void)service; + (void)msg; + return FALSE; +} + +static TaskConfig GetTaskConfig(Service *service) +{ + (void)service; + TaskConfig config = {LEVEL_HIGH, PRI_NORMAL, + 0x400, 16, SHARED_TASK}; + return config; +} + +static void SInit(Service *demo) +{ + SAMGR_GetInstance()->RegisterService(demo); +} + +static void SS1Init(void) +{ + SInit(&g_testSys1); +} + +static void SS2Init(void) +{ + SInit(&g_testSys2); +} + +static void AS1Init(void) +{ + SInit(&g_testApp1); +} + +static void AS2Init(void) +{ + SInit(&g_testApp2); +} + +SYS_SERVICE_INIT(SS1Init); +SYS_SERVICE_INIT(SS2Init); +SYSEX_SERVICE_INIT(AS1Init); +SYSEX_SERVICE_INIT(AS2Init); diff --git a/app/samgr/specified_task_example.c b/app/samgr/specified_task_example.c old mode 100755 new mode 100644 index 8c61574d83cb0ce5b8691f1d4d78732d59ba91c9..e146227f84e740cc4b6844081bf3151385c94b57 --- a/app/samgr/specified_task_example.c +++ b/app/samgr/specified_task_example.c @@ -1,223 +1,227 @@ -/* - * Copyright (c) 2020 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include -#include -#include -#include "service.h" -#include "samgr_lite.h" -#include "time_adapter.h" - -#define TOTAL_SPEC_TASK_NUM 19 -static const char *g_specTaskService[] = { - "ltsk_s1", "ltsk_s2", "ltsk_s3", - "otsk_s1", "otsk_s2", "otsk_s3", "otsk_s4", - "otsk_s5", "otsk_s6", "otsk_s7", "otsk_s8", - "otsk_s9", "otsk_s10", "otsk_s11", "otsk_s12", - "otsk_s13", "otsk_s14", "otsk_s15", "otsk_s16", -}; -static const char *g_specServiceName1[] = { - "l6tsk_s1", "l6tsk_s2" -}; -static const char *g_specServiceName2[] = { - "l7tsk_s1", "l7tsk_s2", "l7tsk_s3" -}; -static const char *g_specServiceName3[] = { - "l8tsk_s1", "l8tsk_s2", "l8tsk_s3", "l8tsk_s4" -}; -static const char *GetName(Service *service); -static const char *GetSpec1Name(Service *service); -static const char *GetSpec2Name(Service *service); -static const char *GetSpec3Name(Service *service); -static BOOL Initialize(Service *service, Identity identity); -static BOOL MessageHandle(Service *service, Request *msg); -static TaskConfig GetLowTagTaskConfig(Service *service); -static TaskConfig GetHighTagTaskConfig(Service *service); -static TaskConfig GetSpec1TagTaskConfig(Service *service); -static TaskConfig GetSpec2TagTaskConfig(Service *service); -static TaskConfig GetSpec3TagTaskConfig(Service *service); -static Service g_example[] = { - {GetName, Initialize, MessageHandle, GetLowTagTaskConfig}, - {GetName, Initialize, MessageHandle, GetLowTagTaskConfig}, - {GetName, Initialize, MessageHandle, GetLowTagTaskConfig}, - {GetName, Initialize, MessageHandle, GetHighTagTaskConfig}, - {GetName, Initialize, MessageHandle, GetHighTagTaskConfig}, - {GetName, Initialize, MessageHandle, GetHighTagTaskConfig}, - {GetName, Initialize, MessageHandle, GetHighTagTaskConfig}, - {GetName, Initialize, MessageHandle, GetHighTagTaskConfig}, - {GetName, Initialize, MessageHandle, GetHighTagTaskConfig}, - {GetName, Initialize, MessageHandle, GetHighTagTaskConfig}, - {GetName, Initialize, MessageHandle, GetHighTagTaskConfig}, - {GetName, Initialize, MessageHandle, GetHighTagTaskConfig}, - {GetName, Initialize, MessageHandle, GetHighTagTaskConfig}, - {GetName, Initialize, MessageHandle, GetHighTagTaskConfig}, - {GetName, Initialize, MessageHandle, GetHighTagTaskConfig}, - {GetName, Initialize, MessageHandle, GetHighTagTaskConfig}, - {GetName, Initialize, MessageHandle, GetHighTagTaskConfig}, - {GetName, Initialize, MessageHandle, GetHighTagTaskConfig}, - {GetName, Initialize, MessageHandle, GetHighTagTaskConfig} -}; -static Service g_exampleSpec1[] = { - {GetSpec1Name, Initialize, MessageHandle, GetSpec1TagTaskConfig}, - {GetSpec1Name, Initialize, MessageHandle, GetSpec1TagTaskConfig} -}; -static Service g_exampleSpec2[] = { - {GetSpec2Name, Initialize, MessageHandle, GetSpec2TagTaskConfig}, - {GetSpec2Name, Initialize, MessageHandle, GetSpec2TagTaskConfig}, - {GetSpec2Name, Initialize, MessageHandle, GetSpec2TagTaskConfig} -}; -static Service g_exampleSpec3[] = { - {GetSpec3Name, Initialize, MessageHandle, GetSpec3TagTaskConfig}, - {GetSpec3Name, Initialize, MessageHandle, GetSpec3TagTaskConfig}, - {GetSpec3Name, Initialize, MessageHandle, GetSpec3TagTaskConfig}, - {GetSpec3Name, Initialize, MessageHandle, GetSpec3TagTaskConfig} -}; -static int g_initIndex = 0; - -static const char *GetName(Service *service) -{ - int i; - for (i = 0; i < TOTAL_SPEC_TASK_NUM; ++i) { - if (service == &g_example[i]) { - return g_specTaskService[i]; - } - } - return NULL; -} - -static const char *GetSpec1Name(Service *service) -{ - int i; - // g_exampleSpec1 has 2 services - for (i = 0; i < 2; ++i) { - if (service == &g_exampleSpec1[i]) { - return g_specServiceName1[i]; - } - } - return NULL; -} - -static const char *GetSpec2Name(Service *service) -{ - int i; - // g_exampleSpec2 has 3 services - for (i = 0; i < 3; ++i) { - if (service == &g_exampleSpec2[i]) { - return g_specServiceName2[i]; - } - } - return NULL; -} - -static const char *GetSpec3Name(Service *service) -{ - int i; - // g_exampleSpec3 has 4 services - for (i = 0; i < 4; ++i) { - if (service == &g_exampleSpec3[i]) { - return g_specServiceName3[i]; - } - } - return NULL; -} - -static BOOL Initialize(Service *service, Identity identity) -{ - (void)identity; - printf("[Specified Task Test][TaskID:%p][Step:%d][Reg Finish S:%s]Time: %llu!\n", - osThreadGetId(), g_initIndex++, service->GetName(service), SAMGR_GetProcessTime()); - return TRUE; -} - -static BOOL MessageHandle(Service *service, Request *msg) -{ - printf("[Specified Task Test][TaskID:%p][Step:%d][S:%s] msgId<%d> \n", - osThreadGetId(), g_initIndex++, service->GetName(service), msg->msgId); - return FALSE; -} - -static TaskConfig GetLowTagTaskConfig(Service *service) -{ - (void)service; - int16 customLevelLow = LEVEL_CUSTOM_BEGIN + 1; - TaskConfig config = {customLevelLow, PRI_NORMAL, - 0x400, 16, SPECIFIED_TASK}; - return config; -} - -static TaskConfig GetHighTagTaskConfig(Service *service) -{ - (void)service; - int16 customLevelHigh = LEVEL_CUSTOM_BEGIN + 2; // Custom level 2 - TaskConfig config = {customLevelHigh, PRI_NORMAL, - 0x400, 16, SPECIFIED_TASK}; - return config; -} - -static TaskConfig GetSpec1TagTaskConfig(Service *service) -{ - (void)service; - int16 customLevelSpec1 = LEVEL_CUSTOM_BEGIN + 3; // Custom level 3 - TaskConfig config = {customLevelSpec1, PRI_NORMAL, - 0x400, 16, SPECIFIED_TASK}; - return config; -} - -static TaskConfig GetSpec2TagTaskConfig(Service *service) -{ - (void)service; - int16 customLevelSpec2 = LEVEL_CUSTOM_BEGIN + 4; // Custom level 4 - TaskConfig config = {customLevelSpec2, PRI_NORMAL, - 0x400, 16, SPECIFIED_TASK}; - return config; -} - -static TaskConfig GetSpec3TagTaskConfig(Service *service) -{ - (void)service; - int16 customLevelSpec3 = LEVEL_CUSTOM_BEGIN + 5; // Custom level 5 - TaskConfig config = {customLevelSpec3, PRI_NORMAL, - 0x400, 16, SPECIFIED_TASK}; - return config; -} - -static void SInit(Service *demo) -{ - SAMGR_GetInstance()->RegisterService(demo); - - printf("[Specified Task Test][TaskID:%p][Step:%d][SYSEX Reg S:%s]Time: %llu!\n", - osThreadGetId(), g_initIndex++, demo->GetName(demo), SAMGR_GetProcessTime()); -} -static void SSInit(void) -{ - int i; - for (i = 0; i < TOTAL_SPEC_TASK_NUM; ++i) { - SInit(&g_example[i]); - } - - // g_exampleSpec1 has 2 services - for (i = 0; i < 2; ++i) { - SInit(&g_exampleSpec1[i]); - } - // g_exampleSpec2 has 3 services - for (i = 0; i < 3; ++i) { - SInit(&g_exampleSpec2[i]); - } - // g_exampleSpec3 has 4 services - for (i = 0; i < 4; ++i) { - SInit(&g_exampleSpec3[i]); - } -} -SYSEX_SERVICE_INIT(SSInit); \ No newline at end of file +/* + * Copyright (c) 2020-2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include "service.h" +#include "samgr_lite.h" +#include "time_adapter.h" + +#define TOTAL_SPEC_TASK_NUM 19 + +static const char *g_specTaskService[] = { + "ltsk_s1", "ltsk_s2", "ltsk_s3", + "otsk_s1", "otsk_s2", "otsk_s3", "otsk_s4", + "otsk_s5", "otsk_s6", "otsk_s7", "otsk_s8", + "otsk_s9", "otsk_s10", "otsk_s11", "otsk_s12", + "otsk_s13", "otsk_s14", "otsk_s15", "otsk_s16", +}; +static const char *g_specServiceName1[] = { + "l6tsk_s1", "l6tsk_s2" +}; +static const char *g_specServiceName2[] = { + "l7tsk_s1", "l7tsk_s2", "l7tsk_s3" +}; +static const char *g_specServiceName3[] = { + "l8tsk_s1", "l8tsk_s2", "l8tsk_s3", "l8tsk_s4" +}; +static const char *GetName(Service *service); +static const char *GetSpec1Name(Service *service); +static const char *GetSpec2Name(Service *service); +static const char *GetSpec3Name(Service *service); +static BOOL Initialize(Service *service, Identity identity); +static BOOL MessageHandle(Service *service, Request *msg); +static TaskConfig GetLowTagTaskConfig(Service *service); +static TaskConfig GetHighTagTaskConfig(Service *service); +static TaskConfig GetSpec1TagTaskConfig(Service *service); +static TaskConfig GetSpec2TagTaskConfig(Service *service); +static TaskConfig GetSpec3TagTaskConfig(Service *service); +static Service g_example[] = { + {GetName, Initialize, MessageHandle, GetLowTagTaskConfig}, + {GetName, Initialize, MessageHandle, GetLowTagTaskConfig}, + {GetName, Initialize, MessageHandle, GetLowTagTaskConfig}, + {GetName, Initialize, MessageHandle, GetHighTagTaskConfig}, + {GetName, Initialize, MessageHandle, GetHighTagTaskConfig}, + {GetName, Initialize, MessageHandle, GetHighTagTaskConfig}, + {GetName, Initialize, MessageHandle, GetHighTagTaskConfig}, + {GetName, Initialize, MessageHandle, GetHighTagTaskConfig}, + {GetName, Initialize, MessageHandle, GetHighTagTaskConfig}, + {GetName, Initialize, MessageHandle, GetHighTagTaskConfig}, + {GetName, Initialize, MessageHandle, GetHighTagTaskConfig}, + {GetName, Initialize, MessageHandle, GetHighTagTaskConfig}, + {GetName, Initialize, MessageHandle, GetHighTagTaskConfig}, + {GetName, Initialize, MessageHandle, GetHighTagTaskConfig}, + {GetName, Initialize, MessageHandle, GetHighTagTaskConfig}, + {GetName, Initialize, MessageHandle, GetHighTagTaskConfig}, + {GetName, Initialize, MessageHandle, GetHighTagTaskConfig}, + {GetName, Initialize, MessageHandle, GetHighTagTaskConfig}, + {GetName, Initialize, MessageHandle, GetHighTagTaskConfig} +}; +static Service g_exampleSpec1[] = { + {GetSpec1Name, Initialize, MessageHandle, GetSpec1TagTaskConfig}, + {GetSpec1Name, Initialize, MessageHandle, GetSpec1TagTaskConfig} +}; +static Service g_exampleSpec2[] = { + {GetSpec2Name, Initialize, MessageHandle, GetSpec2TagTaskConfig}, + {GetSpec2Name, Initialize, MessageHandle, GetSpec2TagTaskConfig}, + {GetSpec2Name, Initialize, MessageHandle, GetSpec2TagTaskConfig} +}; +static Service g_exampleSpec3[] = { + {GetSpec3Name, Initialize, MessageHandle, GetSpec3TagTaskConfig}, + {GetSpec3Name, Initialize, MessageHandle, GetSpec3TagTaskConfig}, + {GetSpec3Name, Initialize, MessageHandle, GetSpec3TagTaskConfig}, + {GetSpec3Name, Initialize, MessageHandle, GetSpec3TagTaskConfig} +}; +static uint32_t g_initIndex = 0; + +static const char *GetName(Service *service) +{ + int i; + for (i = 0; i < TOTAL_SPEC_TASK_NUM; ++i) { + if (service == &g_example[i]) { + return g_specTaskService[i]; + } + } + return NULL; +} + +static const char *GetSpec1Name(Service *service) +{ + int i; + // g_exampleSpec1 has 2 services + for (i = 0; i < 2; ++i) { + if (service == &g_exampleSpec1[i]) { + return g_specServiceName1[i]; + } + } + return NULL; +} + +static const char *GetSpec2Name(Service *service) +{ + int i; + // g_exampleSpec2 has 3 services + for (i = 0; i < 3; ++i) { + if (service == &g_exampleSpec2[i]) { + return g_specServiceName2[i]; + } + } + return NULL; +} + +static const char *GetSpec3Name(Service *service) +{ + int i; + // g_exampleSpec3 has 4 services + for (i = 0; i < 4; ++i) { + if (service == &g_exampleSpec3[i]) { + return g_specServiceName3[i]; + } + } + return NULL; +} + +static BOOL Initialize(Service *service, Identity identity) +{ + (void)identity; + printf("[Specified Task Test][TaskID:%u][Step:%u][Reg Finish S:%s]Time: %llu!\n", + (int)osThreadGetId(), g_initIndex++, service->GetName(service), SAMGR_GetProcessTime()); + return TRUE; +} + +static BOOL MessageHandle(Service *service, Request *msg) +{ + printf("[Specified Task Test][TaskID:%u][Step:%u][S:%s] msgId<%d> \n", + (int)osThreadGetId(), g_initIndex++, service->GetName(service), msg->msgId); + return FALSE; +} + +static TaskConfig GetLowTagTaskConfig(Service *service) +{ + (void)service; + int16 customLevelLow = LEVEL_CUSTOM_BEGIN + 1; + TaskConfig config = {customLevelLow, PRI_NORMAL, + 0x400, 16, SPECIFIED_TASK}; + return config; +} + +static TaskConfig GetHighTagTaskConfig(Service *service) +{ + (void)service; + int16 customLevelHigh = LEVEL_CUSTOM_BEGIN + 2; // Custom level 2 + TaskConfig config = {customLevelHigh, PRI_NORMAL, + 0x400, 16, SPECIFIED_TASK}; + return config; +} + +static TaskConfig GetSpec1TagTaskConfig(Service *service) +{ + (void)service; + int16 customLevelSpec1 = LEVEL_CUSTOM_BEGIN + 3; // Custom level 3 + TaskConfig config = {customLevelSpec1, PRI_NORMAL, + 0x400, 16, SPECIFIED_TASK}; + return config; +} + +static TaskConfig GetSpec2TagTaskConfig(Service *service) +{ + (void)service; + int16 customLevelSpec2 = LEVEL_CUSTOM_BEGIN + 4; // Custom level 4 + TaskConfig config = {customLevelSpec2, PRI_NORMAL, + 0x400, 16, SPECIFIED_TASK}; + return config; +} + +static TaskConfig GetSpec3TagTaskConfig(Service *service) +{ + (void)service; + int16 customLevelSpec3 = LEVEL_CUSTOM_BEGIN + 5; // Custom level 5 + TaskConfig config = {customLevelSpec3, PRI_NORMAL, + 0x400, 16, SPECIFIED_TASK}; + return config; +} + +static void SInit(Service *demo) +{ + SAMGR_GetInstance()->RegisterService(demo); + + printf("[Specified Task Test][TaskID:%u][Step:%u][SYSEX Reg S:%s]Time: %llu!\n", + (int)osThreadGetId(), g_initIndex++, demo->GetName(demo), SAMGR_GetProcessTime()); +} + +static void SSInit(void) +{ + int i; + for (i = 0; i < TOTAL_SPEC_TASK_NUM; ++i) { + SInit(&g_example[i]); + } + + // g_exampleSpec1 has 2 services + for (i = 0; i < 2; ++i) { + SInit(&g_exampleSpec1[i]); + } + // g_exampleSpec2 has 3 services + for (i = 0; i < 3; ++i) { + SInit(&g_exampleSpec2[i]); + } + // g_exampleSpec3 has 4 services + for (i = 0; i < 4; ++i) { + SInit(&g_exampleSpec3[i]); + } +} + +SYSEX_SERVICE_INIT(SSInit); diff --git a/app/samgr/task_example.c b/app/samgr/task_example.c old mode 100755 new mode 100644 index 5c9061dc763372fefe0fd2e73c942c3ad87f5a04..cec06227f7ba65652e7be40930b16ec7d27ee8e1 --- a/app/samgr/task_example.c +++ b/app/samgr/task_example.c @@ -1,115 +1,123 @@ -/* - * Copyright (c) 2020 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "example.h" -#include -#include -#include -#include -#include -#include "time_adapter.h" - -static const char *GetName(Service *service); -static BOOL Initialize(Service *service, Identity identity); -static BOOL MessageHandle(Service *service, Request *msg); -static TaskConfig GetTaskConfig(Service *service); -static Service g_example[] = { - {GetName, Initialize, MessageHandle, GetTaskConfig}, - {GetName, Initialize, MessageHandle, GetTaskConfig}, - {GetName, Initialize, MessageHandle, GetTaskConfig}, - {GetName, Initialize, MessageHandle, GetTaskConfig} -}; -static int g_initIndex = 0; -static const char *GetName(Service *service) -{ - // test cases demo 0 - if (service == &g_example[0]) { - return TASK_SERVICE1; - } - // test cases demo 1 - if (service == &g_example[1]) { - return TASK_SERVICE2; - } - // test cases demo 2 - if (service == &g_example[2]) { - return TASK_SERVICE3; - } - // test cases demo 3 - if (service == &g_example[3]) { - return TASK_SERVICE4; - } - return NULL; -} - -static BOOL Initialize(Service *service, Identity identity) -{ - (void)identity; - printf("[Task Test][TaskID:%p][Step:%d][Reg Finish S:%s]Time: %llu!\n", - osThreadGetId(), g_initIndex++, service->GetName(service), SAMGR_GetProcessTime()); - return TRUE; -} - -static BOOL MessageHandle(Service *service, Request *msg) -{ - printf("[Task Test][TaskID:%p][Step:%d][S:%s] msgId<%d> \n", - osThreadGetId(), g_initIndex++, service->GetName(service), msg->msgId); - return FALSE; -} - -static TaskConfig GetTaskConfig(Service *service) -{ - TaskConfig config = {LEVEL_HIGH, PRI_NORMAL, - 0x800, 5, SHARED_TASK}; - // test cases demo 0 - if (service == &g_example[0]) { - config.taskFlags = SINGLE_TASK; - } - // test cases demo 3 - if (service == &g_example[3]) { - config.priority = PRI_ABOVE_NORMAL; - } - return config; -} - -static void SInit(Service *demo) -{ - SAMGR_GetInstance()->RegisterService(demo); - - printf("[Task Test][TaskID:%p][Step:%d][SYSEX Reg S:%s]Time: %llu!\n", - osThreadGetId(), g_initIndex++, demo->GetName(demo), SAMGR_GetProcessTime()); -} -static void S1Init(void) -{ - // test cases demo 0 - SInit(&g_example[0]); -} -static void S2Init(void) -{ - // test cases demo 1 - SInit(&g_example[1]); -} -static void S3Init(void) -{ - // test cases demo 2 - SInit(&g_example[2]); -} -static void S4Init(void) -{ - // test cases demo 3 - SInit(&g_example[3]); -} -SYSEX_SERVICE_INIT(S1Init); -SYSEX_SERVICE_INIT(S2Init); -SYSEX_SERVICE_INIT(S3Init); -SYSEX_SERVICE_INIT(S4Init); +/* + * Copyright (c) 2020-2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "example.h" +#include +#include +#include +#include +#include +#include +#include "time_adapter.h" + +static const char *GetName(Service *service); +static BOOL Initialize(Service *service, Identity identity); +static BOOL MessageHandle(Service *service, Request *msg); +static TaskConfig GetTaskConfig(Service *service); +static Service g_example[] = { + {GetName, Initialize, MessageHandle, GetTaskConfig}, + {GetName, Initialize, MessageHandle, GetTaskConfig}, + {GetName, Initialize, MessageHandle, GetTaskConfig}, + {GetName, Initialize, MessageHandle, GetTaskConfig} +}; +static int g_initIndex = 0; + +static const char *GetName(Service *service) +{ + // test cases demo 0 + if (service == &g_example[0]) { + return TASK_SERVICE1; + } + // test cases demo 1 + if (service == &g_example[1]) { + return TASK_SERVICE2; + } + // test cases demo 2 + if (service == &g_example[2]) { + return TASK_SERVICE3; + } + // test cases demo 3 + if (service == &g_example[3]) { + return TASK_SERVICE4; + } + return NULL; +} + +static BOOL Initialize(Service *service, Identity identity) +{ + (void)identity; + printf("[Task Test][TaskID:%u][Step:%u][Reg Finish S:%s]Time: %llu!\n", + (int)osThreadGetId(), g_initIndex++, service->GetName(service), SAMGR_GetProcessTime()); + return TRUE; +} + +static BOOL MessageHandle(Service *service, Request *msg) +{ + printf("[Task Test][TaskID:%u][Step:%u][S:%s] msgId<%d> \n", + (int)osThreadGetId(), g_initIndex++, service->GetName(service), msg->msgId); + return FALSE; +} + +static TaskConfig GetTaskConfig(Service *service) +{ + TaskConfig config = {LEVEL_HIGH, PRI_NORMAL, + 0x800, 5, SHARED_TASK}; + // test cases demo 0 + if (service == &g_example[0]) { + config.taskFlags = SINGLE_TASK; + } + // test cases demo 3 + if (service == &g_example[3]) { + config.priority = PRI_ABOVE_NORMAL; + } + return config; +} + +static void SInit(Service *demo) +{ + SAMGR_GetInstance()->RegisterService(demo); + + printf("[Task Test][TaskID:%u][Step:%u][SYSEX Reg S:%s]Time: %llu!\n", + (int)osThreadGetId(), g_initIndex++, demo->GetName(demo), SAMGR_GetProcessTime()); +} + +static void S1Init(void) +{ + // test cases demo 0 + SInit(&g_example[0]); +} + +static void S2Init(void) +{ + // test cases demo 1 + SInit(&g_example[1]); +} + +static void S3Init(void) +{ + // test cases demo 2 + SInit(&g_example[2]); +} + +static void S4Init(void) +{ + // test cases demo 3 + SInit(&g_example[3]); +} + +SYSEX_SERVICE_INIT(S1Init); +SYSEX_SERVICE_INIT(S2Init); +SYSEX_SERVICE_INIT(S3Init); +SYSEX_SERVICE_INIT(S4Init); diff --git a/app/startup/BUILD.gn b/app/startup/BUILD.gn old mode 100755 new mode 100644 index 396605f5aacabc16d92d12c84f08193cd73c92c5..e29411e64de800e8bbb65e6d41e7b3193400b7a3 --- a/app/startup/BUILD.gn +++ b/app/startup/BUILD.gn @@ -1,20 +1,18 @@ -# Copyright (c) 2020 Huawei Device Co., Ltd. -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -source_set("startup") { - sources = [ - - ] - - include_dirs = [ ] -} +# Copyright (c) 2020-2022 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +source_set("startup") { + sources = [] + + include_dirs = [] +}