diff --git a/examples/servDisc/servDisc.c~ b/examples/servDisc/servDisc.c~
--- /dev/null
@@ -0,0 +1,586 @@
+/**************************************************************************************************\r
+ * Filename: servDisc.c\r
+ * Description: This file contains servDisc application.\r
+ *\r
+ *\r
+ * Copyright (C) 2013 Texas Instruments Incorporated - http://www.ti.com/\r
+ *\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions\r
+ * are met:\r
+ *\r
+ * Redistributions of source code must retain the above copyright\r
+ * notice, this list of conditions and the following disclaimer.\r
+ *\r
+ * Redistributions in binary form must reproduce the above copyright\r
+ * notice, this list of conditions and the following disclaimer in the\r
+ * documentation and/or other materials provided with the\r
+ * distribution.\r
+ *\r
+ * Neither the name of Texas Instruments Incorporated nor the names of\r
+ * its contributors may be used to endorse or promote products derived\r
+ * from this software without specific prior written permission.\r
+ *\r
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\r
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\r
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\r
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\r
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\r
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\r
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\r
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ *\r
+ */\r
+\r
+/*********************************************************************\r
+ * INCLUDES\r
+ */\r
+#include <string.h>\r
+#include <stdio.h>\r
+#include <unistd.h>\r
+#include <stdlib.h>\r
+\r
+#include "rpc.h"\r
+#include "mtSys.h"\r
+#include "mtZdo.h"\r
+#include "mtAf.h"\r
+#include "mtParser.h"\r
+#include "mtSapi.h"\r
+#include "rpcTransport.h"\r
+#include "dbgPrint.h"\r
+#include "hostConsole.h"\r
+\r
+/*********************************************************************\r
+ * MACROS\r
+ */\r
+\r
+/*********************************************************************\r
+ * TYPES\r
+ */\r
+\r
+/*********************************************************************\r
+ * LOCAL VARIABLE\r
+ */\r
+\r
+//init ZDO device state\r
+devStates_t devState = DEV_HOLD;\r
+uint8_t gSrcEndPoint = 1;\r
+uint8_t gDstEndPoint = 1;\r
+\r
+/*********************************************************************\r
+ * LOCAL FUNCTIONS\r
+ */\r
+//ZDO Callbacks\r
+static uint8_t mtZdoStateChangeIndCb(uint8_t newDevState);\r
+static uint8_t mtZdoSimpleDescRspCb(SimpleDescRspFormat_t *msg);\r
+static uint8_t mtZdoActiveEpRspCb(ActiveEpRspFormat_t *msg);\r
+static uint8_t mtZdoEndDeviceAnnceIndCb(EndDeviceAnnceIndFormat_t *msg);\r
+\r
+//SYS Callbacks\r
+\r
+static uint8_t mtSysResetIndCb(ResetIndFormat_t *msg);\r
+\r
+//helper functions\r
+static uint8_t setNVStartup(uint8_t startupOption);\r
+static uint8_t setNVChanList(uint32_t chanList);\r
+static uint8_t setNVPanID(uint32_t panId);\r
+static uint8_t setNVDevType(uint8_t devType);\r
+static int32_t startNetwork(void);\r
+static int32_t registerAf(void);\r
+\r
+/*********************************************************************\r
+ * CALLBACK FUNCTIONS\r
+ */\r
+\r
+// SYS callbacks\r
+static mtSysCb_t mtSysCb =\r
+ { NULL, NULL, NULL, mtSysResetIndCb, NULL, NULL, NULL, NULL, NULL, NULL,\r
+ NULL, NULL, NULL, NULL };\r
+\r
+static mtZdoCb_t mtZdoCb =\r
+ { NULL, // MT_ZDO_NWK_ADDR_RSP\r
+ NULL, // MT_ZDO_IEEE_ADDR_RSP\r
+ NULL, // MT_ZDO_NODE_DESC_RSP\r
+ NULL, // MT_ZDO_POWER_DESC_RSP\r
+ mtZdoSimpleDescRspCb, // MT_ZDO_SIMPLE_DESC_RSP\r
+ mtZdoActiveEpRspCb, // MT_ZDO_ACTIVE_EP_RSP\r
+ NULL, // MT_ZDO_MATCH_DESC_RSP\r
+ NULL, // MT_ZDO_COMPLEX_DESC_RSP\r
+ NULL, // MT_ZDO_USER_DESC_RSP\r
+ NULL, // MT_ZDO_USER_DESC_CONF\r
+ NULL, // MT_ZDO_SERVER_DISC_RSP\r
+ NULL, // MT_ZDO_END_DEVICE_BIND_RSP\r
+ NULL, // MT_ZDO_BIND_RSP\r
+ NULL, // MT_ZDO_UNBIND_RSP\r
+ NULL, // MT_ZDO_MGMT_NWK_DISC_RSP\r
+ NULL, // MT_ZDO_MGMT_LQI_RSP\r
+ NULL, // MT_ZDO_MGMT_RTG_RSP\r
+ NULL, // MT_ZDO_MGMT_BIND_RSP\r
+ NULL, // MT_ZDO_MGMT_LEAVE_RSP\r
+ NULL, // MT_ZDO_MGMT_DIRECT_JOIN_RSP\r
+ NULL, // MT_ZDO_MGMT_PERMIT_JOIN_RSP\r
+ mtZdoStateChangeIndCb, // MT_ZDO_STATE_CHANGE_IND\r
+ mtZdoEndDeviceAnnceIndCb, // MT_ZDO_END_DEVICE_ANNCE_IND\r
+ NULL, // MT_ZDO_SRC_RTG_IND\r
+ NULL, //MT_ZDO_BEACON_NOTIFY_IND\r
+ NULL, //MT_ZDO_JOIN_CNF\r
+ NULL, //MT_ZDO_NWK_DISCOVERY_CNF\r
+ NULL, // MT_ZDO_CONCENTRATOR_IND_CB\r
+ NULL, // MT_ZDO_LEAVE_IND\r
+ NULL, //MT_ZDO_STATUS_ERROR_RSP\r
+ NULL, //MT_ZDO_MATCH_DESC_RSP_SENT\r
+ NULL, NULL };\r
+\r
+static uint8_t mtSysResetIndCb(ResetIndFormat_t *msg)\r
+{\r
+\r
+ consolePrint("ZNP Version: %d.%d.%d\n", msg->MajorRel, msg->MinorRel,\r
+ msg->HwRev);\r
+ return 0;\r
+}\r
+\r
+/********************************************************************\r
+ * START OF ZDO CALL BACK FUNCTIONS\r
+ */\r
+\r
+static uint8_t mtZdoStateChangeIndCb(uint8_t newDevState)\r
+{\r
+\r
+ switch (newDevState)\r
+ {\r
+ case DEV_HOLD:\r
+ dbg_print(PRINT_LEVEL_INFO,\r
+ "mtZdoStateChangeIndCb: Initialized - not started automatically\n");\r
+ break;\r
+ case DEV_INIT:\r
+ dbg_print(PRINT_LEVEL_INFO,\r
+ "mtZdoStateChangeIndCb: Initialized - not connected to anything\n");\r
+ break;\r
+ case DEV_NWK_DISC:\r
+ dbg_print(PRINT_LEVEL_INFO,\r
+ "mtZdoStateChangeIndCb: Discovering PAN's to join\n");\r
+ consolePrint("Network Discovering\n");\r
+ break;\r
+ case DEV_NWK_JOINING:\r
+ dbg_print(PRINT_LEVEL_INFO, "mtZdoStateChangeIndCb: Joining a PAN\n");\r
+ consolePrint("Network Joining\n");\r
+ break;\r
+ case DEV_NWK_REJOIN:\r
+ dbg_print(PRINT_LEVEL_INFO,\r
+ "mtZdoStateChangeIndCb: ReJoining a PAN, only for end devices\n");\r
+ consolePrint("Network Rejoining\n");\r
+ break;\r
+ case DEV_END_DEVICE_UNAUTH:\r
+ consolePrint("Network Authenticating\n");\r
+ dbg_print(PRINT_LEVEL_INFO,\r
+ "mtZdoStateChangeIndCb: Joined but not yet authenticated by trust center\n");\r
+ break;\r
+ case DEV_END_DEVICE:\r
+ consolePrint("Network Joined\n");\r
+ dbg_print(PRINT_LEVEL_INFO,\r
+ "mtZdoStateChangeIndCb: Started as device after authentication\n");\r
+ break;\r
+ case DEV_ROUTER:\r
+ consolePrint("Network Joined\n");\r
+ dbg_print(PRINT_LEVEL_INFO,\r
+ "mtZdoStateChangeIndCb: Device joined, authenticated and is a router\n");\r
+ break;\r
+ case DEV_COORD_STARTING:\r
+ consolePrint("Network Starting\n");\r
+ dbg_print(PRINT_LEVEL_INFO,\r
+ "mtZdoStateChangeIndCb: Started as Zigbee Coordinator\n");\r
+ break;\r
+ case DEV_ZB_COORD:\r
+ consolePrint("Network Started\n");\r
+ dbg_print(PRINT_LEVEL_INFO,\r
+ "mtZdoStateChangeIndCb: Started as Zigbee Coordinator\n");\r
+ break;\r
+ case DEV_NWK_ORPHAN:\r
+ consolePrint("Network Orphaned\n");\r
+ dbg_print(PRINT_LEVEL_INFO,\r
+ "mtZdoStateChangeIndCb: Device has lost information about its parent\n");\r
+ break;\r
+ default:\r
+ dbg_print(PRINT_LEVEL_INFO, "mtZdoStateChangeIndCb: unknown state");\r
+ break;\r
+ }\r
+\r
+ devState = (devStates_t) newDevState;\r
+\r
+ return SUCCESS;\r
+}\r
+static uint8_t mtZdoSimpleDescRspCb(SimpleDescRspFormat_t *msg)\r
+{\r
+\r
+ if (msg->Status == MT_RPC_SUCCESS)\r
+ {\r
+ consolePrint("\tEndpoint: 0x%02X\n", msg->Endpoint);\r
+ consolePrint("\tProfileID: 0x%04X\n", msg->ProfileID);\r
+ consolePrint("\tDeviceID: 0x%04X\n", msg->DeviceID);\r
+ consolePrint("\tDeviceVersion: 0x%02X\n", msg->DeviceVersion);\r
+ consolePrint("\tNumInClusters: %d\n", msg->NumInClusters);\r
+ uint32_t i;\r
+ for (i = 0; i < msg->NumInClusters; i++)\r
+ {\r
+ consolePrint("\t\tInClusterList[%d]: 0x%04X\n", i,\r
+ msg->InClusterList[i]);\r
+ }\r
+ consolePrint("\tNumOutClusters: %d\n", msg->NumOutClusters);\r
+ for (i = 0; i < msg->NumOutClusters; i++)\r
+ {\r
+ consolePrint("\t\tOutClusterList[%d]: 0x%04X\n", i,\r
+ msg->OutClusterList[i]);\r
+ }\r
+ consolePrint("\n");\r
+ }\r
+ else\r
+ {\r
+ consolePrint("SimpleDescRsp Status: FAIL 0x%02X\n", msg->Status);\r
+ }\r
+\r
+ return msg->Status;\r
+}\r
+static uint8_t mtZdoActiveEpRspCb(ActiveEpRspFormat_t *msg)\r
+{\r
+\r
+ SimpleDescReqFormat_t simReq;\r
+ if (msg->Status == MT_RPC_SUCCESS)\r
+ {\r
+ simReq.DstAddr = msg->NwkAddr;\r
+ simReq.NwkAddrOfInterest = msg->NwkAddr;\r
+ consolePrint("Number of Endpoints: %d\n", msg->ActiveEPCount);\r
+ uint32_t i;\r
+ for (i = 0; i < msg->ActiveEPCount; i++)\r
+ {\r
+ simReq.Endpoint = msg->ActiveEPList[i];\r
+ zdoSimpleDescReq(&simReq);\r
+ }\r
+ }\r
+ else\r
+ {\r
+ consolePrint("ActiveEpRsp Status: FAIL 0x%02X\n", msg->Status);\r
+ }\r
+\r
+ return msg->Status;\r
+}\r
+\r
+static uint8_t mtZdoEndDeviceAnnceIndCb(EndDeviceAnnceIndFormat_t *msg)\r
+{\r
+\r
+ ActiveEpReqFormat_t actReq;\r
+ actReq.DstAddr = msg->NwkAddr;\r
+ actReq.NwkAddrOfInterest = msg->NwkAddr;\r
+ consolePrint("\nNew device joined network.\nNwkAddr: 0x%04X\n",\r
+ msg->NwkAddr);\r
+ zdoActiveEpReq(&actReq);\r
+ return 0;\r
+}\r
+\r
+// helper functions for building and sending the NV messages\r
+static uint8_t setNVStartup(uint8_t startupOption)\r
+{\r
+ uint8_t status;\r
+ OsalNvWriteFormat_t nvWrite;\r
+\r
+ // sending startup option\r
+ nvWrite.Id = ZCD_NV_STARTUP_OPTION;\r
+ nvWrite.Offset = 0;\r
+ nvWrite.Len = 1;\r
+ nvWrite.Value[0] = startupOption;\r
+ status = sysOsalNvWrite(&nvWrite);\r
+\r
+ dbg_print(PRINT_LEVEL_INFO, "\nNV Write Startup Option cmd sent[%d]...\n",\r
+ status);\r
+\r
+ return status;\r
+}\r
+\r
+static uint8_t setNVDevType(uint8_t devType)\r
+{\r
+ uint8_t status;\r
+ OsalNvWriteFormat_t nvWrite;\r
+\r
+ // setting dev type\r
+ nvWrite.Id = ZCD_NV_LOGICAL_TYPE;\r
+ nvWrite.Offset = 0;\r
+ nvWrite.Len = 1;\r
+ nvWrite.Value[0] = devType;\r
+ status = sysOsalNvWrite(&nvWrite);\r
+\r
+ dbg_print(PRINT_LEVEL_INFO, "\n");\r
+ dbg_print(PRINT_LEVEL_INFO, "NV Write Device Type cmd sent... [%d]\n",\r
+ status);\r
+\r
+ return status;\r
+}\r
+\r
+static uint8_t setNVPanID(uint32_t panId)\r
+{\r
+ uint8_t status;\r
+ OsalNvWriteFormat_t nvWrite;\r
+\r
+ dbg_print(PRINT_LEVEL_INFO, "\nNV Write PAN ID cmd sending...\n");\r
+\r
+ nvWrite.Id = ZCD_NV_PANID;\r
+ nvWrite.Offset = 0;\r
+ nvWrite.Len = 2;\r
+ nvWrite.Value[0] = LO_UINT16(panId);\r
+ nvWrite.Value[1] = HI_UINT16(panId);\r
+ status = sysOsalNvWrite(&nvWrite);\r
+\r
+ dbg_print(PRINT_LEVEL_INFO, "\nNV Write PAN ID cmd sent...[%d]\n", status);\r
+\r
+ return status;\r
+}\r
+\r
+static uint8_t setNVChanList(uint32_t chanList)\r
+{\r
+ OsalNvWriteFormat_t nvWrite;\r
+ uint8_t status;\r
+\r
+ // setting chanList\r
+ nvWrite.Id = ZCD_NV_CHANLIST;\r
+ nvWrite.Offset = 0;\r
+ nvWrite.Len = 4;\r
+ nvWrite.Value[0] = BREAK_UINT32(chanList, 0);\r
+ nvWrite.Value[1] = BREAK_UINT32(chanList, 1);\r
+ nvWrite.Value[2] = BREAK_UINT32(chanList, 2);\r
+ nvWrite.Value[3] = BREAK_UINT32(chanList, 3);\r
+ status = sysOsalNvWrite(&nvWrite);\r
+\r
+ dbg_print(PRINT_LEVEL_INFO, "\n");\r
+ dbg_print(PRINT_LEVEL_INFO, "NV Write Channel List cmd sent...[%d]\n",\r
+ status);\r
+\r
+ return status;\r
+}\r
+\r
+static int32_t startNetwork(void)\r
+{\r
+ char cDevType;\r
+ uint8_t devType;\r
+ int32_t status;\r
+ uint8_t newNwk = 0;\r
+ char sCh[128];\r
+\r
+ do\r
+ {\r
+ consolePrint("Do you wish to start/join a new network? (y/n)\n");\r
+ consoleGetLine(sCh, 128);\r
+ if (sCh[0] == 'n' || sCh[0] == 'N')\r
+ {\r
+ status = setNVStartup(0);\r
+ }\r
+ else if (sCh[0] == 'y' || sCh[0] == 'Y')\r
+ {\r
+ status = setNVStartup(\r
+ ZCD_STARTOPT_CLEAR_STATE | ZCD_STARTOPT_CLEAR_CONFIG);\r
+ newNwk = 1;\r
+\r
+ }\r
+ else\r
+ {\r
+ consolePrint("Incorrect input please type y or n\n");\r
+ }\r
+ } while (sCh[0] != 'y' && sCh[0] != 'Y' && sCh[0] != 'n' && sCh[0] != 'N');\r
+\r
+ if (status != MT_RPC_SUCCESS)\r
+ {\r
+ dbg_print(PRINT_LEVEL_WARNING, "network start failed\n");\r
+ return -1;\r
+ }\r
+ consolePrint("Resetting ZNP\n");\r
+ ResetReqFormat_t resReq;\r
+ resReq.Type = 1;\r
+ sysResetReq(&resReq);\r
+ //flush the rsp\r
+ rpcWaitMqClientMsg(5000);\r
+\r
+ if (newNwk)\r
+ {\r
+ #ifndef CC26xx\r
+ consolePrint(\r
+ "Enter device type c: Coordinator, r: Router, e: End Device:\n");\r
+ consoleGetLine(sCh, 128);\r
+ cDevType = sCh[0];\r
+\r
+ switch (cDevType)\r
+ {\r
+ case 'c':\r
+ case 'C':\r
+ devType = DEVICETYPE_COORDINATOR;\r
+ break;\r
+ case 'r':\r
+ case 'R':\r
+ devType = DEVICETYPE_ROUTER;\r
+ break;\r
+ case 'e':\r
+ case 'E':\r
+ default:\r
+ devType = DEVICETYPE_ENDDEVICE;\r
+ break;\r
+ }\r
+ status = setNVDevType(devType);\r
+\r
+ if (status != MT_RPC_SUCCESS)\r
+ {\r
+ dbg_print(PRINT_LEVEL_WARNING, "setNVDevType failed\n");\r
+ return 0;\r
+ }\r
+ #endif //CC26xx\r
+\r
+ //Select random PAN ID for Coord and join any PAN for RTR/ED\r
+ status = setNVPanID(0xFFFF);\r
+ if (status != MT_RPC_SUCCESS)\r
+ {\r
+ dbg_print(PRINT_LEVEL_WARNING, "setNVPanID failed\n");\r
+ return -1;\r
+ }\r
+ consolePrint("Enter channel 11-26:\n");\r
+ consoleGetLine(sCh, 128);\r
+\r
+ status = setNVChanList(1 << atoi(sCh));\r
+ if (status != MT_RPC_SUCCESS)\r
+ {\r
+ dbg_print(PRINT_LEVEL_INFO, "setNVPanID failed\n");\r
+ return -1;\r
+ }\r
+\r
+ }\r
+\r
+ registerAf();\r
+ consolePrint("EndPoint: 1\n");\r
+\r
+ status = zdoInit();\r
+ if (status == NEW_NETWORK)\r
+ {\r
+ dbg_print(PRINT_LEVEL_INFO, "zdoInit NEW_NETWORK\n");\r
+ status = MT_RPC_SUCCESS;\r
+ }\r
+ else if (status == RESTORED_NETWORK)\r
+ {\r
+ dbg_print(PRINT_LEVEL_INFO, "zdoInit RESTORED_NETWORK\n");\r
+ status = MT_RPC_SUCCESS;\r
+ }\r
+ else\r
+ {\r
+ dbg_print(PRINT_LEVEL_INFO, "zdoInit failed\n");\r
+ status = -1;\r
+ }\r
+\r
+ dbg_print(PRINT_LEVEL_INFO, "process zdoStatechange callbacks\n");\r
+\r
+ //flush AREQ ZDO State Change messages\r
+ while (status != -1)\r
+ {\r
+ status = rpcWaitMqClientMsg(5000);\r
+\r
+ if (((devType == DEVICETYPE_COORDINATOR) && (devState == DEV_ZB_COORD))\r
+ || ((devType == DEVICETYPE_ROUTER) && (devState == DEV_ROUTER))\r
+ || ((devType == DEVICETYPE_ENDDEVICE)\r
+ && (devState == DEV_END_DEVICE)))\r
+ {\r
+ break;\r
+ }\r
+ }\r
+ //set startup option back to keep configuration in case of reset\r
+ status = setNVStartup(0);\r
+ if (devState < DEV_END_DEVICE)\r
+ {\r
+ //start network failed\r
+ return -1;\r
+ }\r
+\r
+ return 0;\r
+}\r
+\r
+static int32_t registerAf(void)\r
+{\r
+ int32_t status = 0;\r
+ RegisterFormat_t reg;\r
+\r
+ reg.EndPoint = 1;\r
+ reg.AppProfId = 0x0104;\r
+ reg.AppDeviceId = 0x0100;\r
+ reg.AppDevVer = 1;\r
+ reg.LatencyReq = 0;\r
+ reg.AppNumInClusters = 1;\r
+ reg.AppInClusterList[0] = 0x0006;\r
+ reg.AppNumOutClusters = 0;\r
+\r
+ status = afRegister(®);\r
+ return status;\r
+}\r
+\r
+/*********************************************************************\r
+ * INTERFACE FUNCTIONS\r
+ */\r
+uint32_t appInit(void)\r
+{\r
+ int32_t status = 0;\r
+ uint32_t msgCnt = 0;\r
+\r
+ //Flush all messages from the que\r
+ while (status != -1)\r
+ {\r
+ status = rpcWaitMqClientMsg(10);\r
+ if (status != -1)\r
+ {\r
+ msgCnt++;\r
+ }\r
+ }\r
+\r
+ dbg_print(PRINT_LEVEL_INFO, "flushed %d message from msg queue\n", msgCnt);\r
+\r
+ //Register Callbacks MT system callbacks\r
+ sysRegisterCallbacks(mtSysCb);\r
+ zdoRegisterCallbacks(mtZdoCb);\r
+\r
+ return 0;\r
+}\r
+\r
+void* appProcess(void *argument)\r
+{\r
+ int32_t status = 0;\r
+ //Flush all messages from the que\r
+ while (status != -1)\r
+ {\r
+ status = rpcWaitMqClientMsg(50);\r
+ }\r
+\r
+ //init variable\r
+ devState = DEV_HOLD;\r
+ gSrcEndPoint = 1;\r
+ gDstEndPoint = 1;\r
+\r
+ status = startNetwork();\r
+ if (status != -1)\r
+ {\r
+ consolePrint("Network up\n\n");\r
+ }\r
+ else\r
+ {\r
+ consolePrint("Network Error\n\n");\r
+ }\r
+\r
+ sysGetExtAddr();\r
+\r
+ OsalNvWriteFormat_t nvWrite;\r
+ nvWrite.Id = ZCD_NV_ZDO_DIRECT_CB;\r
+ nvWrite.Offset = 0;\r
+ nvWrite.Len = 1;\r
+ nvWrite.Value[0] = 1;\r
+ status = sysOsalNvWrite(&nvWrite);\r
+\r
+ while (1)\r
+ {\r
+ status = rpcWaitMqClientMsg(1000);\r
+ }\r
+\r
+ return 0;\r
+}\r
+\r