/****************************************************************************** NAME vc_gencmd_until SYNOPSIS int vc_gencmd_until(const char *cmd, const char *error_string, int timeout); FUNCTION Sends the command repeatedly, until one of the following situations occurs: The specified response string is found within the gencmd response. The specified error string is found within the gencmd response. The timeout is reached. The timeout is a rough value, do not use it for precise timing. RETURNS 0 if the requested response was detected. 1 if the error string is detected or the timeout is reached. ******************************************************************************/ int vc_gencmd_until( char *cmd, const char *property, char *value, const char *error_string, int timeout) { char response[128]; int length; char *ret_value; int ret = 1; use_gencmd_service(); for (;timeout > 0; timeout -= 10) { vc_gencmd(response, (int)sizeof(response), cmd); if (strstr(response,error_string)) { ret = 1; break; } else if (vc_gencmd_string_property(response, property, &ret_value, &length) && strncmp(value,ret_value,(size_t)length)==0) { ret = 0; break; } vcos_sleep(10); } release_gencmd_service(); return ret; }
int vc_gencmd_number_property(char *text, const char *property, int *number) { char *value, temp; int length, retval; if (vc_gencmd_string_property(text, property, &value, &length) == 0) return 0; temp = value[length]; value[length] = 0; retval = sscanf(value, "0x%x", (unsigned int*)number); if (retval != 1) retval = sscanf(value, "%d", number); value[length] = temp; return retval; }
/****************************************************************************** NAME vc_gencmd_until SYNOPSIS int vc_gencmd_until(const char *cmd, const char *error_string, int timeout); FUNCTION Sends the command repeatedly, until one of the following situations occurs: The specified response string is found within the gencmd response. The specified error string is found within the gencmd response. The timeout is reached. The timeout is a rough value, do not use it for precise timing. RETURNS 0 if the requested response was detected. 1 if the error string is detected or the timeout is reached. ******************************************************************************/ int vc_gencmd_until( char *cmd, const char *property, char *value, const char *error_string, int timeout) { char response[128]; int length; char *ret_value; for (;timeout > 0; timeout -= 10) { vc_gencmd(response, (int)sizeof(response), cmd); if (strstr(response,error_string)) { return 1; } else if (vc_gencmd_string_property(response, property, &ret_value, &length) && strncmp(value,ret_value,(size_t)length)==0) { return 0; } vc_sleep(10); } // Timed out return 1; }