コード例 #1
0
ファイル: wmt_conf.c プロジェクト: John677/Kernal_k3note
static INT32 wmt_conf_parse(P_DEV_WMT pWmtDev, const PINT8 pInBuf, UINT32 size)
{
	PINT8 pch;
	PINT8 pBuf;
	PINT8 pLine;
	PINT8 pKey;
	PINT8 pVal;
	PINT8 pPos;
	INT32 ret = 0;
	INT32 i = 0;
	PINT8 pa = NULL;

	pBuf = osal_malloc(size);
	if (!pBuf)
		return -1;

	osal_memcpy(pBuf, pInBuf, size);
	pBuf[size] = '\0';

	pch = pBuf;
	/* pch is to be updated by strsep(). Keep pBuf unchanged!! */

#if 0
	{
		PINT8 buf_ptr = pBuf;
		INT32 k = 0;
		WMT_INFO_FUNC("%s len=%d", "wmcfg.content:", size);
		for (k = 0; k < size; k++) {
			/* if(k%16 == 0)  WMT_INFO_FUNC("\n"); */
			WMT_INFO_FUNC("%c", buf_ptr[k]);
		}
		WMT_INFO_FUNC("--end\n");
	}
#endif

	while ((pLine = osal_strsep(&pch, "\r\n")) != NULL) {
		/* pch is updated to the end of pLine by strsep() and updated to '\0' */
		/*WMT_INFO_FUNC("strsep offset(%d), char(%d, '%c' )\n", pLine-pBuf, *pLine, *pLine); */
		/* parse each line */

		/* WMT_INFO_FUNC("==> Line = (%s)\n", pLine); */

		if (!*pLine)
			continue;

		pVal = osal_strchr(pLine, '=');
		if (!pVal) {
			WMT_WARN_FUNC("mal-format cfg string(%s)\n", pLine);
			continue;
		}

		/* |<-pLine->|'='<-pVal->|'\n' ('\0')|  */
		*pVal = '\0';	/* replace '=' with '\0' to get key */
		/* |<-pKey->|'\0'|<-pVal->|'\n' ('\0')|  */
		pKey = pLine;

		if ((pVal - pBuf) < size)
			pVal++;

		/*key handling */
		pPos = pKey;
		/*skip space characeter */
		while (((*pPos) == ' ') || ((*pPos) == '\t') || ((*pPos) == '\n')) {
			if ((pPos - pBuf) >= size)
				break;
			pPos++;
		}
		/*key head */
		pKey = pPos;
		while (((*pPos) != ' ') && ((*pPos) != '\t') && ((*pPos) != '\0') && ((*pPos) != '\n')) {
			if ((pPos - pBuf) >= size)
				break;
			pPos++;
		}
		/*key tail */
		(*pPos) = '\0';

		/*value handling */
		pPos = pVal;
		/*skip space characeter */
		while (((*pPos) == ' ') || ((*pPos) == '\t') || ((*pPos) == '\n')) {
			if ((pPos - pBuf) >= size)
				break;
			pPos++;
		}
		/*value head */
		pVal = pPos;
		while (((*pPos) != ' ') && ((*pPos) != '\t') && ((*pPos) != '\0') && ((*pPos) != '\n')) {
			if ((pPos - pBuf) >= size)
				break;
			pPos++;
		}
		/*value tail */
		(*pPos) = '\0';

		/* WMT_DBG_FUNC("parse (key: #%s#, value: #%s#)\n", pKey, pVal); */
		ret = wmt_conf_parse_pair(pWmtDev, pKey, pVal);
		WMT_WARN_FUNC("parse (%s, %s, %d)\n", pKey, pVal, ret);
		if (ret)
			WMT_WARN_FUNC("parse fail (%s, %s, %d)\n", pKey, pVal, ret);
	}

	for (i = 0; i < NUM_WMTCFG_FIELDS; i++) {
		const struct parse_data *field = &wmtcfg_fields[i];
		pa = field->writer(pWmtDev, field);
		if (pa) {
			WMT_DBG_FUNC("#%d(%s)=>%s\n", i, field->name, pa);
			osal_free(pa);
		} else {
			WMT_ERR_FUNC("failed to parse '%s'.\n", field->name);
		}
	}
	osal_free(pBuf);
	return 0;
}
コード例 #2
0
ファイル: stp_dbg.c プロジェクト: Scorpio92/mediatek
INT32 _stp_dbg_parser_assert_str(CHAR *str, ENUM_ASSERT_INFO_PARSER_TYPE type)
{
    char *pStr = NULL;
    char *pDtr = NULL;
    char *pTemp = NULL;
    char *pTemp2 = NULL;
    char tempBuf[64] = {0};
    UINT32 len = 0;

    char *parser_sub_string[] = {
        "<ASSERT> ",
        "id=",
        "isr=",
        "irq=",
        "rc="
    };

    if (!str) {
        STP_DBG_ERR_FUNC("NULL string source\n");
        return -1;
    }

    if (!g_stp_dbg_cpupcr) {
        STP_DBG_ERR_FUNC("NULL pointer\n");
        return -2;
    }

    pStr = str;
    STP_DBG_DBG_FUNC("source infor:%s\n", pStr);

    switch (type) {
    case STP_DBG_ASSERT_INFO:
        pDtr = osal_strstr(pStr, parser_sub_string[type]);

        if (NULL != pDtr) {
            pDtr += osal_strlen(parser_sub_string[type]);
            pTemp = osal_strchr(pDtr, ' ');
        } else {
            STP_DBG_ERR_FUNC("parser str is NULL,substring(%s)\n", parser_sub_string[type]);
            return -3;
        }

        len = pTemp - pDtr;
        osal_memcpy(&g_stp_dbg_cpupcr->assert_info[0], "assert@", osal_strlen("assert@"));
        osal_memcpy(&g_stp_dbg_cpupcr->assert_info[osal_strlen("assert@")], pDtr, len);
        g_stp_dbg_cpupcr->assert_info[osal_strlen("assert@") + len] = '_';

        pTemp = osal_strchr(pDtr, '#');
        pTemp += 1;

        pTemp2 = osal_strchr(pTemp, ' ');
        osal_memcpy(&g_stp_dbg_cpupcr->assert_info[osal_strlen("assert@") + len + 1], pTemp, pTemp2 - pTemp);
        g_stp_dbg_cpupcr->assert_info[osal_strlen("assert@") + len + 1 + pTemp2 - pTemp] = '\0';
        STP_DBG_INFO_FUNC("assert info:%s\n", &g_stp_dbg_cpupcr->assert_info[0]);
        break;

    case STP_DBG_FW_TASK_ID:
        pDtr = osal_strstr(pStr, parser_sub_string[type]);

        if (NULL != pDtr) {
            pDtr += osal_strlen(parser_sub_string[type]);
            pTemp = osal_strchr(pDtr, ' ');
        } else {
            STP_DBG_ERR_FUNC("parser str is NULL,substring(%s)\n", parser_sub_string[type]);
            return -3;
        }

        len = pTemp - pDtr;
        osal_memcpy(&tempBuf[0], pDtr, len);
        tempBuf[len] = '\0';
        g_stp_dbg_cpupcr->fwTaskId = osal_strtol(tempBuf, NULL, 16);

        STP_DBG_INFO_FUNC("fw task id :%x\n", (UINT32)osal_strtol(tempBuf, NULL, 16));
        break;

    case STP_DBG_FW_ISR:
        pDtr = osal_strstr(pStr, parser_sub_string[type]);

        if (NULL != pDtr) {
            pDtr += osal_strlen(parser_sub_string[type]);
            pTemp = osal_strchr(pDtr, ',');
        } else {
            STP_DBG_ERR_FUNC("parser str is NULL,substring(%s)\n", parser_sub_string[type]);
            return -3;
        }

        len = pTemp - pDtr;
        osal_memcpy(&tempBuf[0], pDtr, len);
        tempBuf[len] = '\0';

        g_stp_dbg_cpupcr->fwIsr = osal_strtol(tempBuf, NULL, 16);

        STP_DBG_INFO_FUNC("fw isr str:%x\n", (UINT32)osal_strtol(tempBuf, NULL, 16));
        break;

    case STP_DBG_FW_IRQ:
        pDtr = osal_strstr(pStr, parser_sub_string[type]);

        if (NULL != pDtr) {
            pDtr += osal_strlen(parser_sub_string[type]);
            pTemp = osal_strchr(pDtr, ',');
        } else {
            STP_DBG_ERR_FUNC("parser str is NULL,substring(%s)\n", parser_sub_string[type]);
            return -3;
        }

        len = pTemp - pDtr;
        osal_memcpy(&tempBuf[0], pDtr, len);
        tempBuf[len] = '\0';
        g_stp_dbg_cpupcr->fwRrq = osal_strtol(tempBuf, NULL, 16);

        STP_DBG_INFO_FUNC("fw irq value:%x\n", (UINT32)osal_strtol(tempBuf, NULL, 16));
        break;

    case STP_DBG_ASSERT_TYPE:
        pDtr = osal_strstr(pStr, parser_sub_string[type]);

        if (NULL != pDtr) {
            pDtr += osal_strlen(parser_sub_string[type]);
            pTemp = osal_strchr(pDtr, ',');
        } else {
            STP_DBG_ERR_FUNC("parser str is NULL,substring(%s)\n", parser_sub_string[type]);
            return -3;
        }

        len = pTemp - pDtr;
        osal_memcpy(&tempBuf[0], pDtr, len);
        tempBuf[len] = '\0';

        if (0 == osal_memcmp(tempBuf, "*", len)) {
            osal_memcpy(&g_stp_dbg_cpupcr->assert_type[0], "general assert", osal_strlen("general assert"));
        }

        if (0 == osal_memcmp(tempBuf, "Watch Dog Timeout", len)) {
            osal_memcpy(&g_stp_dbg_cpupcr->assert_type[0], "wdt", osal_strlen("wdt"));
        }

        if (0 == osal_memcmp(tempBuf, "RB_FULL", osal_strlen("RB_FULL"))) {
            osal_memcpy(&g_stp_dbg_cpupcr->assert_type[0], tempBuf, len);

            pDtr = osal_strstr(&g_stp_dbg_cpupcr->assert_type[0], "RB_FULL(");

            if (NULL != pDtr) {
                pDtr += osal_strlen("RB_FULL(");
                pTemp = osal_strchr(pDtr, ')');
            } else {
                STP_DBG_ERR_FUNC("parser str is NULL,substring(RB_FULL()\n");
                return -4;
            }

            len = pTemp - pDtr;
            osal_memcpy(&tempBuf[0], pDtr, len);
            tempBuf[len] = '\0';

            g_stp_dbg_cpupcr->fwTaskId = osal_strtol(tempBuf, NULL, 16);

            STP_DBG_INFO_FUNC("update fw task id :%x\n", (UINT32)osal_strtol(tempBuf, NULL, 16));
        }

        STP_DBG_INFO_FUNC("fw asert type:%s\n", g_stp_dbg_cpupcr->assert_type);
        break;

    default:
        STP_DBG_ERR_FUNC("unknow parser type\n");
        break;
    }

    return 0;
}