Exemple #1
0
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);
        }
    }
}