X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;ds=sidebyside;f=ucs2-interface%2Fucs-xml%2FUcsXml.c;h=c86746f94fab3fe0de75da0ce5ca3ed08c40909c;hb=a18a8321a061ae60aec72d4cba4974ddf0bcf8f8;hp=fcbe5f5151db19e8a9e602b6721bf2f682c21bd0;hpb=1f25b3a06ec284ee132bae8a81e183bb2a9ec819;p=apps%2Fagl-service-unicens.git diff --git a/ucs2-interface/ucs-xml/UcsXml.c b/ucs2-interface/ucs-xml/UcsXml.c index fcbe5f5..c86746f 100644 --- a/ucs2-interface/ucs-xml/UcsXml.c +++ b/ucs2-interface/ucs-xml/UcsXml.c @@ -38,7 +38,7 @@ /************************************************************************/ #define COMPILETIME_CHECK(cond) (void)sizeof(int[2 * !!(cond) - 1]) -#define RETURN_ASSERT(result) { assert(false); return result; } +#define RETURN_ASSERT(result) { UcsXml_CB_OnError("Assertion in file=%s, line=%d", 2, __FILE__, __LINE__); return result; } #define MISC_HB(value) ((uint8_t)((uint16_t)(value) >> 8)) #define MISC_LB(value) ((uint8_t)((uint16_t)(value) & (uint16_t)0xFF)) @@ -54,6 +54,7 @@ struct UcsXmlRoute struct UcsXmlScript { + bool inUse; char scriptName[32]; Ucs_Rm_Node_t *node; struct UcsXmlScript *next; @@ -278,9 +279,9 @@ UcsXmlVal_t *UcsXml_Parse(const char *xmlString) return val; ERROR: if (Parse_MemoryError == result) - UcsXml_CB_OnError("XML error, aborting..", 0); + UcsXml_CB_OnError("XML memory error, aborting..", 0); else - UcsXml_CB_OnError("Allocation error, aborting..", 0); + UcsXml_CB_OnError("XML parsing error, aborting..", 0); assert(false); if (!tree) mxmlDelete(tree); @@ -687,6 +688,8 @@ static ParseResult_t ParseAll(mxml_node_t *tree, UcsXmlVal_t *ucs, PrivateData_t /*Iterate all scripts. No scripts at all is allowed*/ if(GetElement(tree, SCRIPT, true, &sub, false)) { + bool found = true; + struct UcsXmlScript *scrlist = priv->pScrLst; while(sub) { result = ParseScript(sub, priv); @@ -695,6 +698,18 @@ static ParseResult_t ParseAll(mxml_node_t *tree, UcsXmlVal_t *ucs, PrivateData_t if(!GetElement(sub, SCRIPT, false, &sub, false)) break; } + /* Check if all scripts where referenced */ + while(NULL != scrlist) + { + if (!scrlist->inUse) + { + UcsXml_CB_OnError("Script not defined:'%s', used by node=0x%X", 1, scrlist->scriptName, scrlist->node->signature_ptr->node_address); + found = false; + } + scrlist = scrlist->next; + } + if (!found) + RETURN_ASSERT(Parse_XmlError); } return result; } @@ -995,6 +1010,7 @@ static ParseResult_t ParseSocket(mxml_node_t *soc, bool isSource, MSocketType_t /*Connect in and out socket once they are created*/ if (priv->conData.inSocket && priv->conData.outSocket) { + bool mostIsInput; bool mostIsOutput; Ucs_Rm_EndPoint_t *ep; struct UcsXmlRoute *route; @@ -1031,7 +1047,13 @@ static ParseResult_t ParseSocket(mxml_node_t *soc, bool isSource, MSocketType_t ep = MCalloc(&priv->objList, 1, sizeof(Ucs_Rm_EndPoint_t)); if (NULL == ep) RETURN_ASSERT(Parse_MemoryError); + mostIsInput = (UCS_XRM_RC_TYPE_MOST_SOCKET == *((Ucs_Xrm_ResourceType_t *)priv->conData.inSocket)); mostIsOutput = (UCS_XRM_RC_TYPE_MOST_SOCKET == *((Ucs_Xrm_ResourceType_t *)priv->conData.outSocket)); + if (!mostIsInput && !mostIsOutput) + { + UcsXml_CB_OnError("At least one MOST socket required per connection", 0); + RETURN_ASSERT(Parse_XmlError); + } ep->endpoint_type = mostIsOutput ? UCS_RM_EP_SOURCE : UCS_RM_EP_SINK; ep->jobs_list_ptr = GetJobList(*jobList, &priv->objList); if(NULL == ep->jobs_list_ptr) RETURN_ASSERT(Parse_MemoryError); @@ -1102,7 +1124,7 @@ static ParseResult_t ParseScript(mxml_node_t *scr, PrivateData_t *priv) if (Parse_Success != result) return result; } else { UcsXml_CB_OnError("Unknown script action:'%s'", 1, txt); - /*RETURN_ASSERT(Parse_XmlError);*/ + RETURN_ASSERT(Parse_XmlError); } if (!GetElementArray(act, ALL_SCRIPTS, &txt, &act)) break; @@ -1117,6 +1139,7 @@ static ParseResult_t ParseScript(mxml_node_t *scr, PrivateData_t *priv) Ucs_Rm_Node_t *node = scrlist->node; node->script_list_ptr = script; node->script_list_size = actCnt; + scrlist->inUse = true; found = true; } scrlist = scrlist->next; @@ -1277,7 +1300,11 @@ static ParseResult_t ParseScriptPortCreate(mxml_node_t *act, Ucs_Ns_Script_t *sc speed = 0; else if (0 == strcmp(txt, I2C_SPEED_FAST)) speed = 1; - else RETURN_ASSERT(Parse_XmlError); + else + { + UcsXml_CB_OnError("Invalid I2C speed:'%s'", 1, txt); + RETURN_ASSERT(Parse_XmlError); + } req = scr->send_cmd; res = scr->exp_result; req->InstId = res->InstId = 1; @@ -1317,6 +1344,11 @@ static ParseResult_t ParseScriptPortWrite(mxml_node_t *act, Ucs_Ns_Script_t *scr mode = 1; else if (0 == strcmp(txt, I2C_WRITE_MODE_BURST)) mode = 2; + else + { + UcsXml_CB_OnError("Invalid I2C mode:'%s'", 1, txt); + RETURN_ASSERT(Parse_XmlError); + } } else { mode = 0; } @@ -1458,7 +1490,11 @@ static ParseResult_t ParseRoutes(UcsXmlVal_t *ucs, PrivateData_t *priv) } sourceRoute = sourceRoute->next; } - assert(routeAmount == ucs->routesSize); + if (routeAmount != ucs->routesSize) + { + UcsXml_CB_OnError("At least one sink (num=%d) is not connected, because of wrong Route name!", 2, (routeAmount - ucs->routesSize)); + RETURN_ASSERT(Parse_XmlError); + } #ifdef DEBUG /* Third perform checks when running in debug mode*/