rk3568_ubuntu_r60_v1.3.2/yocto/meta-tvis-app/recipes/hvgo-tvis/files/hvgo.c

99 lines
2.1 KiB
C
Raw Normal View History

#include <stdio.h>
#include <time.h>
#include <string.h>
/* 硬件类型 */
#define MODEL "SG368Z(RK3568) HDMI+VGA (Linux)"
/* 固件版本 */
#define FIRMWARE "V1.00"
/* 固件版本 */
#define DATE "20240321-2343"
void get_version_process(void);
static void exec(char* data, char* command, char* filter);
int main(int argc, char *argv[])
{
if(argc == 1)
{
printf("Usage:\r\n");
printf("hvgo: show this usage\r\n");
printf("hvgo version: get version\r\n");
printf("\r\n");
return 0;
}
if(strcmp(argv[1], "version") == 0)
get_version_process();
return 0;
}
void get_version_process(void)
{
char os_data[1024] = {0}, kernel_data[1024] = {0};
exec(os_data, "cat /etc/issue", "\\n \\l");
exec(kernel_data, "cat /proc/version", "");
/* 系统版本 */
printf("OS: %s\r\n", os_data);
/* 硬件类型 */
printf("MODEL: %s\r\n", MODEL);
/* 固件版本 */
printf("FIRMWARE: %s\r\n", FIRMWARE);
/* 固件生成日期 */
printf("DATE: %s\r\n", DATE);
/* 系统内核版本信息 */
printf("KERNEL: %s\r\n", kernel_data);
printf("\r\n");
}
void replace(char *str, char *orig, char *rep)
{
if(strlen(orig) > 0)
{
static char buffer[1024];
char *p;
while (p = strstr(str, orig))
{
memcpy(buffer, str, p-str);
buffer[p-str] = '\0';
strcat(buffer, rep);
strcat(buffer, p+strlen(orig));
strcpy(str, buffer);
}
}
}
void replace_char(char *str, char find, char replace)
{
for (int i = 0; str[i]; i++){
if (str[i] == find){
str[i] = replace;
}
}
}
static void exec(char* data, char* command, char* filter)
{
FILE *fp;
char buffer[1024];
fp = popen(command, "r"); // 打开 messages 日志文件并只显示最后一行
fgets(buffer, sizeof(buffer), fp);
strcpy(data, buffer);
pclose(fp);
replace(data, filter, "");
replace_char(data, '\n', ' ');
replace_char(data, '\r', ' ');
}