/****************************************************************************** * * Copyright(c) 2019 Realtek Corporation. * * This program is free software; you can redistribute it and/or modify it * under the terms of version 2 of the GNU General Public License as * published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * *****************************************************************************/ #include "hal_str_proc.h" bool hal_is_comment_string( char *szStr ) { if (*szStr == '/' && *(szStr + 1) == '/') return true; else return false; } bool hal_get_fractionvalue_fromstring( char *szStr, u8 *pInteger, u8 *pFraction, u32 *pu4bMove ) { char *szScan = szStr; /* Initialize output. */ *pu4bMove = 0; *pInteger = 0; *pFraction = 0; /* Skip leading space. */ while (*szScan != '\0' && (*szScan == ' ' || *szScan == '\t')) { ++szScan; ++(*pu4bMove); } if (*szScan < '0' || *szScan > '9') return false; /* Parse each digit. */ do { (*pInteger) *= 10; *pInteger += (*szScan - '0'); ++szScan; ++(*pu4bMove); if (*szScan == '.') { ++szScan; ++(*pu4bMove); if (*szScan < '0' || *szScan > '9') return false; *pFraction += (*szScan - '0') * 10; ++szScan; ++(*pu4bMove); if (*szScan >= '0' && *szScan <= '9') { *pFraction += *szScan - '0'; ++szScan; ++(*pu4bMove); } return true; } } while (*szScan >= '0' && *szScan <= '9'); return true; } bool hal_is_alpha(char ch_tmp) { if ((ch_tmp >= 'a' && ch_tmp <= 'z') || (ch_tmp >= 'A' && ch_tmp <= 'Z')) return true; else return false; } bool hal_ishexdigit(char ch_tmp) { if ((ch_tmp >= '0' && ch_tmp <= '9') || (ch_tmp >= 'a' && ch_tmp <= 'f') || (ch_tmp >= 'A' && ch_tmp <= 'F')) return true; else return false; } bool hal_get_hexvalue_fromstring( char *szStr, u32 *pu4bVal, u32 *pu4bMove ) { char *szScan = szStr; /* Check input parameter. */ if (szStr == NULL || pu4bVal == NULL || pu4bMove == NULL) { PHL_INFO("GetHexValueFromString(): Invalid inpur argumetns! szStr: %p, pu4bVal: %p, pu4bMove: %p\n", szStr, pu4bVal, pu4bMove); return false; } /* Initialize output. */ *pu4bMove = 0; *pu4bVal = 0; /* Skip leading space. */ while (*szScan != '\0' && (*szScan == ' ' || *szScan == '\t')) { szScan++; (*pu4bMove)++; } /* Skip leading '0x' or '0X'. */ if (*szScan == '0' && (*(szScan + 1) == 'x' || *(szScan + 1) == 'X')) { szScan += 2; (*pu4bMove) += 2; } /* Check if szScan is now pointer to a character for hex digit, */ /* if not, it means this is not a valid hex number. */ if (!hal_ishexdigit(*szScan)) return false; /* Parse each digit. */ do { (*pu4bVal) <<= 4; *pu4bVal += hal_mapchar_tohexdigit(*szScan); szScan++; (*pu4bMove)++; } while (hal_ishexdigit(*szScan)); return true; } bool hal_is_allspace_tab( char *data, u8 size ) { u8 cnt = 0, NumOfSpaceAndTab = 0; while (size > cnt) { if (data[cnt] == ' ' || data[cnt] == '\t' || data[cnt] == '\0') ++NumOfSpaceAndTab; ++cnt; } return size == NumOfSpaceAndTab; } u32 hal_mapchar_tohexdigit( char chTmp ) { if (chTmp >= '0' && chTmp <= '9') return chTmp - '0'; else if (chTmp >= 'a' && chTmp <= 'f') return 10 + (chTmp - 'a'); else if (chTmp >= 'A' && chTmp <= 'F') return 10 + (chTmp - 'A'); else return 0; } bool hal_parse_fiedstring(char *in_str, u32 *start, char *out_str, char lqualifier, char rqualifier) { u32 i = 0, j = 0; char c = in_str[(*start)++]; if (c != lqualifier) return false; i = (*start); c = in_str[(*start)++]; while (c != rqualifier && c != '\0') c = in_str[(*start)++]; if (c == '\0') return false; j = (*start) - 2; _os_strncpy((char *)out_str, (const char *)(in_str + i), j - i + 1); return true; } bool hal_get_u1bint_fromstr_indec(char *str, u8 *pint) { u16 i = 0; *pint = 0; while (str[i] != '\0') { if (str[i] >= '0' && str[i] <= '9') { *pint *= 10; *pint += (str[i] - '0'); } else return false; ++i; } return true; } bool hal_get_s1bint_fromstr_indec(char *str, s8 *val) { u8 negative = 0; u16 i = 0; *val = 0; while (str[i] != '\0') { if (i == 0 && (str[i] == '+' || str[i] == '-')) { if (str[i] == '-') negative = 1; } else if (str[i] >= '0' && str[i] <= '9') { *val *= 10; *val += (str[i] - '0'); } else return false; ++i; } if (negative) *val = -*val; return true; }