summaryrefslogtreecommitdiffstats
path: root/ipc_unit_test
diff options
context:
space:
mode:
Diffstat (limited to 'ipc_unit_test')
-rw-r--r--ipc_unit_test/CMakeLists.txt22
-rw-r--r--ipc_unit_test/ipc_unit_test_client.c171
-rw-r--r--ipc_unit_test/ipc_unit_test_common.c100
-rw-r--r--ipc_unit_test/ipc_unit_test_common.h34
-rw-r--r--ipc_unit_test/ipc_unit_test_server.c218
5 files changed, 545 insertions, 0 deletions
diff --git a/ipc_unit_test/CMakeLists.txt b/ipc_unit_test/CMakeLists.txt
new file mode 100644
index 0000000..944ad0b
--- /dev/null
+++ b/ipc_unit_test/CMakeLists.txt
@@ -0,0 +1,22 @@
+# Copyright (c) 2021, Nippon Seiki Co., Ltd.
+# SPDX-License-Identifier: Apache-2.0
+
+# Define project Targets
+set(TEST_CLIENT_NAME ipc_unit_test_client)
+set(TEST_SERVER_NAME ipc_unit_test_server)
+
+add_executable(${TEST_CLIENT_NAME} ipc_unit_test_client.c ipc_unit_test_common.c)
+target_link_libraries(${TEST_CLIENT_NAME} ${TARGET_NAME})
+target_include_directories(${TEST_CLIENT_NAME} PRIVATE
+ ./
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../include>
+)
+
+add_executable(${TEST_SERVER_NAME} ipc_unit_test_server.c ipc_unit_test_common.c)
+target_link_libraries(${TEST_SERVER_NAME} ${TARGET_NAME})
+target_include_directories(${TEST_SERVER_NAME} PRIVATE
+ ./
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../include>
+)
+
+
diff --git a/ipc_unit_test/ipc_unit_test_client.c b/ipc_unit_test/ipc_unit_test_client.c
new file mode 100644
index 0000000..cc09d2a
--- /dev/null
+++ b/ipc_unit_test/ipc_unit_test_client.c
@@ -0,0 +1,171 @@
+/*
+ * Copyright (c) 2021, Nippon Seiki Co., Ltd.
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * 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 <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stdbool.h>
+#include <unistd.h>
+#include <cluster_ipc.h>
+
+#include "ipc_unit_test_common.h"
+
+IPC_DATA_IC_SERVICE_S g_dataIcService;
+
+static void changeNotifyCb(void* pData, signed int size, int kind);
+static void helpPrint(void);
+static void listPrint(void);
+
+int main(void)
+{
+ IPC_RET_E ret;
+ char command[10];
+ char dummy[10];
+ bool isRunning = true;
+ signed int size;
+ char *pRetStr;
+
+ memset(&g_dataIcService, 0, sizeof(g_dataIcService));
+
+ ret = ipcClientStart(IPC_USAGE_TYPE_IC_SERVICE);
+ if (ret != IPC_RET_OK) {
+ printf("ipcClientStart Error:%d\n", ret);
+ goto end;
+ }
+
+ ret = ipcRegisterCallback(IPC_USAGE_TYPE_IC_SERVICE, changeNotifyCb);
+ if (ret != IPC_RET_OK) {
+ printf("ipcRegisterCallback Error:%d\n", ret);
+ goto end;
+ }
+
+ while(isRunning) {
+ printf("command (h=help, q=quit):");
+ pRetStr = fgets(command, 10, stdin);
+ if (pRetStr == NULL) {
+ continue;
+ }
+ memcpy(dummy, command, 10);
+
+ while(strlen(dummy) == 9 && dummy[8] != '\n') {
+ pRetStr = fgets(dummy, 10, stdin);
+ if (pRetStr == NULL) {
+ break;
+ }
+ }
+
+ command[strlen(command)-1] = '\0';
+
+ switch(command[0]) {
+ case 'h':
+ helpPrint();
+ break;
+ case 'q':
+ isRunning = false;
+ break;
+ case 'r':
+ size = sizeof(g_dataIcService);
+ ret = ipcReadDataPool(IPC_USAGE_TYPE_IC_SERVICE, &g_dataIcService, &size);
+ printf("ipcReadDataPool return:%d\n", ret);
+ listPrint();
+ break;
+ default:
+ break;
+ }
+ }
+
+end:
+ ipcClientStop(IPC_USAGE_TYPE_IC_SERVICE);
+ printf("bye...\n");
+ sleep(1);
+
+ return 0;
+}
+
+static void changeNotifyCb(void* pData, signed int size, int kind)
+{
+ signed long longVal;
+ signed int intVal;
+ signed short shortVal;
+ signed char charVal;
+
+ printf("Enter %s\n", __func__);
+
+ switch(size) {
+ case 8:
+ longVal = *((signed long*)pData);
+ printf("kind = %d, size = %d, data=%ld\n", kind, size, longVal);
+ break;
+ case 4:
+ intVal = *((signed int*)pData);
+ printf("kind = %d, size = %d, data=%d\n", kind, size, intVal);
+ break;
+ case 2:
+ shortVal = *((signed short *)pData);
+ printf("kind = %d, size = %d, data=%d\n", kind, size, shortVal);
+ break;
+ default:
+ charVal = *((signed char *)pData);
+ printf("kind = %d, size = %d, data=%d\n", kind, size, charVal);
+ break;
+ }
+ printf("Leave %s\n", __func__);
+ return;
+}
+
+static void helpPrint(void)
+{
+ printf("\n-----------\n");
+ printf("'h' : help\n");
+ printf("'q' : quit\n");
+ printf("'r' : read from Client data pool\n");
+ printf("-----------\n\n");
+}
+
+static void listPrint(void)
+{
+ int i;
+ signed long longVal;
+ signed int intVal;
+ signed short shortVal;
+ signed char charVal;
+ void *pValue;
+
+ for (i = 0; i < IC_SERVICE_LIST_NUM; i++) {
+ pValue = (void *)&g_dataIcService + IcServiceList[i].offset;
+ switch(IcServiceList[i].size) {
+ case 8:
+ longVal = *((signed long*)pValue);
+ printf("%3d: %s(%d) = %ld\n", i, IcServiceList[i].name, IcServiceList[i].size, longVal);
+ break;
+ case 4:
+ intVal = *((signed int*)pValue);
+ printf("%3d: %s(%d) = %d\n", i, IcServiceList[i].name, IcServiceList[i].size, intVal);
+ break;
+ case 2:
+ shortVal = *((signed short *)pValue);
+ printf("%3d: %s(%d) = %d\n", i, IcServiceList[i].name, IcServiceList[i].size, shortVal);
+ break;
+ default:
+ charVal = *((signed char *)pValue);
+ printf("%3d: %s(%d) = %d\n", i, IcServiceList[i].name, IcServiceList[i].size, charVal);
+ break;
+ }
+ }
+}
+
diff --git a/ipc_unit_test/ipc_unit_test_common.c b/ipc_unit_test/ipc_unit_test_common.c
new file mode 100644
index 0000000..26d4830
--- /dev/null
+++ b/ipc_unit_test/ipc_unit_test_common.c
@@ -0,0 +1,100 @@
+/*
+ * Copyright (c) 2021, Nippon Seiki Co., Ltd.
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * 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 <cluster_ipc.h>
+#include "ipc_unit_test_common.h"
+
+IPC_UNIT_TEST_DATA_LIST IcServiceList[] = {
+ DEFINE_STRUCT_DATA(IPC_DATA_IC_SERVICE_S, turnR),
+ DEFINE_STRUCT_DATA(IPC_DATA_IC_SERVICE_S, turnL),
+ DEFINE_STRUCT_DATA(IPC_DATA_IC_SERVICE_S, brake),
+ DEFINE_STRUCT_DATA(IPC_DATA_IC_SERVICE_S, seatbelt),
+ DEFINE_STRUCT_DATA(IPC_DATA_IC_SERVICE_S, frontRightSeatbelt),
+ DEFINE_STRUCT_DATA(IPC_DATA_IC_SERVICE_S, frontCenterSeatbelt),
+ DEFINE_STRUCT_DATA(IPC_DATA_IC_SERVICE_S, frontLeftSeatbelt),
+ DEFINE_STRUCT_DATA(IPC_DATA_IC_SERVICE_S, mid1RightSeatbelt),
+ DEFINE_STRUCT_DATA(IPC_DATA_IC_SERVICE_S, mid1CenterSeatbelt),
+ DEFINE_STRUCT_DATA(IPC_DATA_IC_SERVICE_S, mid1LeftSeatbelt),
+ DEFINE_STRUCT_DATA(IPC_DATA_IC_SERVICE_S, mid2RightSeatbelt),
+ DEFINE_STRUCT_DATA(IPC_DATA_IC_SERVICE_S, mid2CenterSeatbelt),
+ DEFINE_STRUCT_DATA(IPC_DATA_IC_SERVICE_S, mid2LeftSeatbelt),
+ DEFINE_STRUCT_DATA(IPC_DATA_IC_SERVICE_S, rearRightSeatbelt),
+ DEFINE_STRUCT_DATA(IPC_DATA_IC_SERVICE_S, rearCenterSeatbelt),
+ DEFINE_STRUCT_DATA(IPC_DATA_IC_SERVICE_S, rearLeftSeatbelt),
+ DEFINE_STRUCT_DATA(IPC_DATA_IC_SERVICE_S, highbeam),
+ DEFINE_STRUCT_DATA(IPC_DATA_IC_SERVICE_S, door),
+ DEFINE_STRUCT_DATA(IPC_DATA_IC_SERVICE_S, frontRightDoor),
+ DEFINE_STRUCT_DATA(IPC_DATA_IC_SERVICE_S, frontLeftDoor),
+ DEFINE_STRUCT_DATA(IPC_DATA_IC_SERVICE_S, rearRightDoor),
+ DEFINE_STRUCT_DATA(IPC_DATA_IC_SERVICE_S, rearLeftDoor),
+ DEFINE_STRUCT_DATA(IPC_DATA_IC_SERVICE_S, trunkDoor),
+ DEFINE_STRUCT_DATA(IPC_DATA_IC_SERVICE_S, hoodDoor),
+ DEFINE_STRUCT_DATA(IPC_DATA_IC_SERVICE_S, eps),
+ DEFINE_STRUCT_DATA(IPC_DATA_IC_SERVICE_S, srsAirbag),
+ DEFINE_STRUCT_DATA(IPC_DATA_IC_SERVICE_S, abs),
+ DEFINE_STRUCT_DATA(IPC_DATA_IC_SERVICE_S, lowBattery),
+ DEFINE_STRUCT_DATA(IPC_DATA_IC_SERVICE_S, oilPress),
+ DEFINE_STRUCT_DATA(IPC_DATA_IC_SERVICE_S, engine),
+ DEFINE_STRUCT_DATA(IPC_DATA_IC_SERVICE_S, fuel),
+ DEFINE_STRUCT_DATA(IPC_DATA_IC_SERVICE_S, immobi),
+ DEFINE_STRUCT_DATA(IPC_DATA_IC_SERVICE_S, tmFail),
+ DEFINE_STRUCT_DATA(IPC_DATA_IC_SERVICE_S, espAct),
+ DEFINE_STRUCT_DATA(IPC_DATA_IC_SERVICE_S, espOff),
+ DEFINE_STRUCT_DATA(IPC_DATA_IC_SERVICE_S, adaptingLighting),
+ DEFINE_STRUCT_DATA(IPC_DATA_IC_SERVICE_S, autoStop),
+ DEFINE_STRUCT_DATA(IPC_DATA_IC_SERVICE_S, autoStopFail),
+ DEFINE_STRUCT_DATA(IPC_DATA_IC_SERVICE_S, parkingLights),
+ DEFINE_STRUCT_DATA(IPC_DATA_IC_SERVICE_S, frontFog),
+ DEFINE_STRUCT_DATA(IPC_DATA_IC_SERVICE_S, exteriorLightFault),
+ DEFINE_STRUCT_DATA(IPC_DATA_IC_SERVICE_S, accFail),
+ DEFINE_STRUCT_DATA(IPC_DATA_IC_SERVICE_S, ldwOff),
+ DEFINE_STRUCT_DATA(IPC_DATA_IC_SERVICE_S, hillDescent),
+ DEFINE_STRUCT_DATA(IPC_DATA_IC_SERVICE_S, autoHiBeamGreen),
+ DEFINE_STRUCT_DATA(IPC_DATA_IC_SERVICE_S, autoHiBeamAmber),
+ DEFINE_STRUCT_DATA(IPC_DATA_IC_SERVICE_S, sportsMode),
+ DEFINE_STRUCT_DATA(IPC_DATA_IC_SERVICE_S, ldwOperate),
+ DEFINE_STRUCT_DATA(IPC_DATA_IC_SERVICE_S, generalWarn),
+ DEFINE_STRUCT_DATA(IPC_DATA_IC_SERVICE_S, drivingPowerMode),
+ DEFINE_STRUCT_DATA(IPC_DATA_IC_SERVICE_S, hotTemp),
+ DEFINE_STRUCT_DATA(IPC_DATA_IC_SERVICE_S, lowTemp),
+ DEFINE_STRUCT_DATA(IPC_DATA_IC_SERVICE_S, gearAtVal),
+ DEFINE_STRUCT_DATA(IPC_DATA_IC_SERVICE_S, gearMtVal),
+ DEFINE_STRUCT_DATA(IPC_DATA_IC_SERVICE_S, spAnalogVal),
+ DEFINE_STRUCT_DATA(IPC_DATA_IC_SERVICE_S, spAnaDigUnitVal),
+ DEFINE_STRUCT_DATA(IPC_DATA_IC_SERVICE_S, taAnalogVal),
+ DEFINE_STRUCT_DATA(IPC_DATA_IC_SERVICE_S, trcomTripAVal),
+ DEFINE_STRUCT_DATA(IPC_DATA_IC_SERVICE_S, trcomTripBVal),
+ DEFINE_STRUCT_DATA(IPC_DATA_IC_SERVICE_S, trcomOdoVal),
+ DEFINE_STRUCT_DATA(IPC_DATA_IC_SERVICE_S, trcomUnitVal),
+ DEFINE_STRUCT_DATA(IPC_DATA_IC_SERVICE_S, avgSpeedAVal),
+ DEFINE_STRUCT_DATA(IPC_DATA_IC_SERVICE_S, avgSpeedBVal),
+ DEFINE_STRUCT_DATA(IPC_DATA_IC_SERVICE_S, hourAVal),
+ DEFINE_STRUCT_DATA(IPC_DATA_IC_SERVICE_S, hourBVal),
+ DEFINE_STRUCT_DATA(IPC_DATA_IC_SERVICE_S, minuteAVal),
+ DEFINE_STRUCT_DATA(IPC_DATA_IC_SERVICE_S, minuteBVal),
+ DEFINE_STRUCT_DATA(IPC_DATA_IC_SERVICE_S, secondAVal),
+ DEFINE_STRUCT_DATA(IPC_DATA_IC_SERVICE_S, secondBVal),
+ DEFINE_STRUCT_DATA(IPC_DATA_IC_SERVICE_S, oTempVal),
+ DEFINE_STRUCT_DATA(IPC_DATA_IC_SERVICE_S, oTempUnitVal),
+ DEFINE_STRUCT_DATA(IPC_DATA_IC_SERVICE_S, cruRangeVal),
+ DEFINE_STRUCT_DATA(IPC_DATA_IC_SERVICE_S, avgFuelAVal),
+ DEFINE_STRUCT_DATA(IPC_DATA_IC_SERVICE_S, avgFuelBVal),
+ DEFINE_STRUCT_DATA(IPC_DATA_IC_SERVICE_S, insFuelAVal),
+ DEFINE_STRUCT_DATA(IPC_DATA_IC_SERVICE_S, insFuelBVal),
+ DEFINE_STRUCT_DATA(IPC_DATA_IC_SERVICE_S, fuelEconomyUnitVal)
+};
+
diff --git a/ipc_unit_test/ipc_unit_test_common.h b/ipc_unit_test/ipc_unit_test_common.h
new file mode 100644
index 0000000..e0a3ed5
--- /dev/null
+++ b/ipc_unit_test/ipc_unit_test_common.h
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2021, Nippon Seiki Co., Ltd.
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * 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 IPC_UNIT_TEST_COMMON_H
+#define IPC_UNIT_TEST_COMMON_H
+#include <stddef.h>
+
+#define DEFINE_STRUCT_DATA(struct_name, member) \
+ {#member, offsetof(struct_name, member), sizeof(((struct_name *)0)->member)}
+#define IC_SERVICE_LIST_NUM (77)
+
+typedef struct {
+ const char *name;
+ int offset;
+ int size;
+} IPC_UNIT_TEST_DATA_LIST;
+
+extern IPC_UNIT_TEST_DATA_LIST IcServiceList[];
+
+#endif // IPC_UNIT_TEST_COMMON_H
diff --git a/ipc_unit_test/ipc_unit_test_server.c b/ipc_unit_test/ipc_unit_test_server.c
new file mode 100644
index 0000000..807db2c
--- /dev/null
+++ b/ipc_unit_test/ipc_unit_test_server.c
@@ -0,0 +1,218 @@
+/*
+ * Copyright (c) 2021, Nippon Seiki Co., Ltd.
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * 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 <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <stdbool.h>
+
+#include <cluster_ipc.h>
+
+#include "ipc_unit_test_common.h"
+
+static void helpPrint(void);
+static void helpWritePrint(void);
+static void listPrint(void);
+static void writeData(void);
+static void writeDataToStruct(int id, long value);
+
+IPC_DATA_IC_SERVICE_S g_dataIcService;
+
+int main(void)
+{
+ IPC_RET_E ret;
+ char command[10];
+ char dummy[10];
+ bool isRunning = true;
+ char *pRetStr;
+
+ memset(&g_dataIcService, 0, sizeof(g_dataIcService));
+
+ ret = ipcServerStart(IPC_USAGE_TYPE_IC_SERVICE);
+ if (ret != IPC_RET_OK) {
+ printf("ipcServerStart Error:%d\n", ret);
+ goto end;
+ }
+
+ while(isRunning) {
+ printf("command (h=help, q=quit):");
+ pRetStr = fgets(command, 10, stdin);
+ if (pRetStr == NULL) {
+ continue;
+ }
+ memcpy(dummy, command, 10);
+
+ while(strlen(dummy) == 9 && dummy[8] != '\n') {
+ pRetStr = fgets(dummy, 10, stdin);
+ if (pRetStr == NULL) {
+ break;
+ }
+ }
+
+ command[strlen(command)-1] = '\0';
+
+ switch(command[0]) {
+ case 'h':
+ helpPrint();
+ break;
+ case 'q':
+ isRunning = false;
+ break;
+ case 'l':
+ listPrint();
+ break;
+ case 'w':
+ writeData();
+ break;
+ case 's':
+ ret = ipcSendMessage(IPC_USAGE_TYPE_IC_SERVICE, (const void*)&g_dataIcService, sizeof(g_dataIcService));
+ printf("ipcSendMessage return:%d\n", ret);
+ break;
+ default:
+ break;
+ }
+ }
+
+end:
+ ipcServerStop(IPC_USAGE_TYPE_IC_SERVICE);
+ printf("bye...\n");
+ sleep(1);
+
+ return 0;
+}
+
+static void helpPrint(void)
+{
+ printf("\n-----------\n");
+ printf("'h' : help\n");
+ printf("'q' : quit\n");
+ printf("'l' : list of Server data\n");
+ printf("'w' : write to Server data\n");
+ printf("'s' : send data to Client\n");
+ printf("-----------\n\n");
+}
+
+static void listPrint(void)
+{
+ int i;
+ signed long longVal;
+ signed int intVal;
+ signed short shortVal;
+ signed char charVal;
+ void *pValue;
+
+ for (i = 0; i < IC_SERVICE_LIST_NUM; i++) {
+ pValue = (void *)&g_dataIcService + IcServiceList[i].offset;
+ switch(IcServiceList[i].size) {
+ case 8:
+ longVal = *((signed long*)pValue);
+ printf("%3d: %s(%d) = %ld\n", i, IcServiceList[i].name, IcServiceList[i].size, longVal);
+ break;
+ case 4:
+ intVal = *((signed int*)pValue);
+ printf("%3d: %s(%d) = %d\n", i, IcServiceList[i].name, IcServiceList[i].size, intVal);
+ break;
+ case 2:
+ shortVal = *((signed short *)pValue);
+ printf("%3d: %s(%d) = %d\n", i, IcServiceList[i].name, IcServiceList[i].size, shortVal);
+ break;
+ default:
+ charVal = *((signed char *)pValue);
+ printf("%3d: %s(%d) = %d\n", i, IcServiceList[i].name, IcServiceList[i].size, charVal);
+ break;
+ }
+ }
+}
+
+static void writeData(void)
+{
+ char command[40];
+ char dummy[40];
+ bool isRunning = true;
+ int i;
+
+ int id;
+ long value;
+
+ char *pRetStr;
+
+ while(isRunning) {
+ printf("write command (h=help q=goto main menu):");
+ pRetStr = fgets(command, 40, stdin);
+ if (pRetStr == NULL) {
+ continue;
+ }
+ memcpy(dummy, command, 40);
+
+ while(strlen(dummy) == 39 && dummy[38] != '\n') {
+ pRetStr = fgets(dummy, 40, stdin);
+ if (pRetStr == NULL) {
+ break;
+ }
+ }
+
+ command[strlen(command)-1] = '\0';
+ switch(command[0]) {
+ case 'h':
+ helpWritePrint();
+ break;
+ case 'q':
+ isRunning = false;
+ break;
+ case 'l':
+ listPrint();
+ break;
+ default:
+ // write data
+ id = (int)strtol(command, NULL, 0);
+ value = 0;
+ for (i = 0; i < strlen(command); i++) {
+ if (command[i] == ' ') {
+ value = (int)strtol(&command[i], NULL, 0);
+ }
+ }
+ writeDataToStruct(id, value);
+ }
+ }
+}
+
+static void helpWritePrint(void)
+{
+ printf("\n-----------\n");
+ printf("'h' : help\n");
+ printf("'q' : goto main menu\n");
+ printf("'l' : list of Server data\n");
+ printf("<ID> <value>: write data\n");
+ printf(" ex)\n");
+ printf(" write command 2 4\n");
+ printf(" -> 2: brake = 4\n");
+ printf("-----------\n\n");
+}
+
+static void writeDataToStruct(int id, long value)
+{
+ void *pValue;
+
+ if (id < 0 || IC_SERVICE_LIST_NUM < id) {
+ return;
+ }
+
+ pValue = (void *)&g_dataIcService + IcServiceList[id].offset;
+ memcpy(pValue, (void *)&value, IcServiceList[id].size);
+}
+