SysComMsg *SysComCreateMsg(MsgType_t msgtype, u16 sizeofmsg, u16 transid, SthreadId sender, SthreadId receiver) { SysComMsg* msg = NULL; void* payload = NULL; mico_rtos_lock_mutex(&SysComMutex); msg = (SysComMsg*)MemMalloc(SIZEOF_STRUCT_SYSCOM); if(msg == NULL) { SysCom_ERR("SysComCreateMsg: msg malloc failed"); } else { SysCom_DBG("SysComCreateMsg: malloc msg(addr: 0x%08X) successfully", (addP_t)msg); payload = MemMalloc(sizeofmsg); if(payload == NULL) { SysCom_ERR("SysComCreateMsg: malloc payload failed"); SysComDestroyMsg(msg); SysCom_DBG("SysComCreateMsg: msg destroyed"); msg = NULL; } else { SysCom_DBG("SysComCreateMsg: malloc payload(addr: 0x%08X) successfully", (addP_t)payload); msg->sender = sender; msg->receiver = receiver; msg->msgType = msgtype; msg->transId = transid; msg->payload = payload; } } mico_rtos_unlock_mutex(&SysComMutex); return (SysComMsg*)msg; }
// Handle Subscribe/Query Message static void ObjectHandleMessage() { OSStatus err = kUnknownErr; SysComMsg* msg = NULL; Object_INF("ObjectHandleMessage: Started"); err = SysComHandleMsg(msg, ESM_OBJECT_THREAD_ID, 100); if((err == kNoErr) && (msg != NULL)) { switch(msg->msgType) { case API_OBJECT_SUBSCRIBE_REQ_MSG: ObjectHandleSubscribeReqMessage(msg); break; case API_OBJECT_DISTNAME_QUERY_REQ_MSG: ObjectHandleDistQueryReqMessage(msg); break; default: break; } err = SysComDestroyMsg(msg); if(err != kNoErr) { Object_ERR("ObjectHandleMessage: SysComDestroyMsg failed with err_code(%d)", err); } } }