[v0.92][ARM] Print ACII art based on SoC instead of CPU vendor. Add snapdragon ASCII art. Refactor printer to save some lines of code

This commit is contained in:
Dr-Noob
2020-11-26 16:42:36 +01:00
parent 89e5e30e53
commit c62a63f539
6 changed files with 109 additions and 94 deletions

View File

@@ -16,7 +16,7 @@ static char* soc_trademark_string[] = {
[SOC_EXYNOS] = "Exynos", [SOC_EXYNOS] = "Exynos",
}; };
bool match_soc(struct system_on_chip* soc, char* raw_name, char* expected_name, char* soc_name, SOC soc_vendor, int32_t process) { bool match_soc(struct system_on_chip* soc, char* raw_name, char* expected_name, char* soc_name, VENDOR soc_vendor, int32_t process) {
if(strlen(raw_name) > strlen(expected_name)) if(strlen(raw_name) > strlen(expected_name))
return false; return false;
@@ -407,6 +407,10 @@ char* get_soc_name(struct system_on_chip* soc) {
return soc->soc_name; return soc->soc_name;
} }
VENDOR get_soc_vendor(struct system_on_chip* soc) {
return soc->soc_vendor;
}
char* get_str_process(struct system_on_chip* soc) { char* get_str_process(struct system_on_chip* soc) {
char* str; char* str;

View File

@@ -1,10 +1,9 @@
#ifndef __SOC__ #ifndef __SOC__
#define __SOC__ #define __SOC__
#include "../common/cpu.h"
#include <stdint.h> #include <stdint.h>
typedef int32_t SOC;
enum { enum {
SOC_UNKNOWN, SOC_UNKNOWN,
SOC_SNAPDRAGON, SOC_SNAPDRAGON,
@@ -13,7 +12,7 @@ enum {
}; };
struct system_on_chip { struct system_on_chip {
SOC soc_vendor; VENDOR soc_vendor;
int32_t process; int32_t process;
char* soc_name; char* soc_name;
char* raw_name; char* raw_name;
@@ -21,6 +20,7 @@ struct system_on_chip {
struct system_on_chip* get_soc(); struct system_on_chip* get_soc();
char* get_soc_name(struct system_on_chip* soc); char* get_soc_name(struct system_on_chip* soc);
VENDOR get_soc_vendor(struct system_on_chip* soc);
char* get_str_process(struct system_on_chip* soc); char* get_str_process(struct system_on_chip* soc);
#endif #endif

View File

@@ -66,6 +66,28 @@
\ \
\ \
" "
#define SNAPDRAGON_ASCII \
" @@ \
@@@@@@ @@@@@@ \
@ @@@@@ @@@ \
@@@@ @@@@@@ @@@ \
@@@@@@@@@@@@@ @@ \
@@@@@@@@@@@@@@@ @@ \
@@@@@@@@@@@@@@@@@@ @@ \
@@@@@@@@@@@@@@@@@@@@@ @@ \
@@@@@@@@@@@@@@@@@@@@@@ @@ \
@@@@@@@@@@@@@@@@@@@@@@ @@ \
@@@@@@@@@@@@@@@@@@@ @@ \
@@ @@@@@@@@@@@@@@@@ @@ \
@@@@@ @@@@@@@@@@@@@@ @@ \
@@@@@@@@@ @@@@@@@@@@@@@ @@@ \
@@@@@@@@@@ @@@@@@@@@@@ @@@ \
@@@@@@@@ @@@@@@@@@@ @@@ \
@@@@@@@@@@@@@@@@@@@@ \
\
"
#define UNKNOWN_ASCII \ #define UNKNOWN_ASCII \
" \ " \
@@ -92,6 +114,7 @@ static const char* ASCII_ARRAY [] = {
AMD_ASCII, AMD_ASCII,
INTEL_ASCII, INTEL_ASCII,
ARM_ASCII, ARM_ASCII,
SNAPDRAGON_ASCII,
UNKNOWN_ASCII UNKNOWN_ASCII
}; };

View File

@@ -33,13 +33,6 @@ enum {
HV_VENDOR_INVALID HV_VENDOR_INVALID
}; };
enum {
SOC_VENDOR_QUALCOMM,
SOC_VENDOR_HUAWUEI,
SOC_VENDOR_SAMSUNG,
SOC_VENDOR_UNKNOWN
};
#define UNKNOWN_FREQ -1 #define UNKNOWN_FREQ -1
#define CPU_NAME_MAX_LENGTH 64 #define CPU_NAME_MAX_LENGTH 64

View File

@@ -13,7 +13,7 @@
#include "../arm/midr.h" #include "../arm/midr.h"
#endif #endif
static const char* VERSION = "0.91"; static const char* VERSION = "0.92";
void print_help(char *argv[]) { void print_help(char *argv[]) {
printf("Usage: %s [--version] [--help] [--debug] [--style \"fancy\"|\"retro\"|\"legacy\"] [--color \"intel\"|\"amd\"|'R,G,B:R,G,B:R,G,B:R,G,B']\n\n", argv[0]); printf("Usage: %s [--version] [--help] [--debug] [--style \"fancy\"|\"retro\"|\"legacy\"] [--color \"intel\"|\"amd\"|'R,G,B:R,G,B:R,G,B:R,G,B']\n\n", argv[0]);

View File

@@ -24,34 +24,24 @@
#define MAX_ATTRIBUTES 100 #define MAX_ATTRIBUTES 100
#define COL_NONE "" #define COLOR_NONE ""
#define COL_INTEL_FANCY_1 "\x1b[46;1m" #define COLOR_FG_BLACK "\x1b[30;1m"
#define COL_INTEL_FANCY_2 "\x1b[47;1m" #define COLOR_FG_RED "\x1b[31;1m"
#define COL_INTEL_FANCY_3 "\x1b[36;1m" #define COLOR_FG_GREEN "\x1b[32;1m"
#define COL_INTEL_FANCY_4 "\x1b[37;1m" #define COLOR_FG_YELLOW "\x1b[33;1m"
#define COL_INTEL_RETRO_1 "\x1b[36;1m" #define COLOR_FG_BLUE "\x1b[34;1m"
#define COL_INTEL_RETRO_2 "\x1b[37;1m" #define COLOR_FG_MAGENTA "\x1b[35;1m"
#define COLOR_FG_CYAN "\x1b[36;1m"
#define COL_AMD_FANCY_1 "\x1b[47;1m" #define COLOR_FG_WHITE "\x1b[37;1m"
#define COL_AMD_FANCY_2 "\x1b[42;1m" #define COLOR_BG_BLACK "\x1b[40;1m"
#define COL_AMD_FANCY_3 "\x1b[37;1m" #define COLOR_BG_RED "\x1b[41;1m"
#define COL_AMD_FANCY_4 "\x1b[32;1m" #define COLOR_BG_GREEN "\x1b[42;1m"
#define COL_AMD_RETRO_1 "\x1b[37;1m" #define COLOR_BG_YELLOW "\x1b[43;1m"
#define COL_AMD_RETRO_2 "\x1b[32;1m" #define COLOR_BG_BLUE "\x1b[44;1m"
#define COLOR_BG_MAGENTA "\x1b[45;1m"
#define COL_ARM_FANCY_1 "\x1b[46;1m" #define COLOR_BG_CYAN "\x1b[46;1m"
#define COL_ARM_FANCY_2 "\x1b[46;1m" #define COLOR_BG_WHITE "\x1b[47;1m"
#define COL_ARM_FANCY_3 "\x1b[37;1m" #define COLOR_RESET "\x1b[m"
#define COL_ARM_FANCY_4 "\x1b[36;1m"
#define COL_ARM_RETRO_1 "\x1b[36;1m"
#define COL_ARM_RETRO_2 "\x1b[37;1m"
#define COL_UNKNOWN_FANCY_1 "\x1b[47;1m"
#define COL_UNKNOWN_FANCY_2 "\x1b[47;1m"
#define COL_UNKNOWN_FANCY_3 "\x1b[37;1m"
#define COL_UNKNOWN_FANCY_4 "\x1b[31;1m"
#define COL_UNKNOWN_RETRO "\x1b[32;0m"
#define RESET "\x1b[m"
enum { enum {
#ifdef ARCH_X86 #ifdef ARCH_X86
@@ -147,63 +137,54 @@ char* rgb_to_ansi(struct color* c, bool background, bool bold) {
return str; return str;
} }
struct ascii* set_ascii(VENDOR cpuVendor, STYLE style, struct colors* cs) { struct ascii* set_ascii(VENDOR vendor, STYLE style, struct colors* cs) {
char *COL_FANCY_1, *COL_FANCY_2, *COL_FANCY_3, *COL_FANCY_4, *COL_RETRO_1, *COL_RETRO_2, *COL_RETRO_3, *COL_RETRO_4; char *COL_FANCY_1, *COL_FANCY_2, *COL_FANCY_3, *COL_FANCY_4, *COL_RETRO_1, *COL_RETRO_2, *COL_RETRO_3, *COL_RETRO_4;
struct ascii* art = malloc(sizeof(struct ascii)); struct ascii* art = malloc(sizeof(struct ascii));
art->n_attributes_set = 0; art->n_attributes_set = 0;
art->vendor = cpuVendor; art->vendor = vendor;
art->attributes = malloc(sizeof(struct attribute *) * MAX_ATTRIBUTES); art->attributes = malloc(sizeof(struct attribute *) * MAX_ATTRIBUTES);
for(uint32_t i=0; i < MAX_ATTRIBUTES; i++) { for(uint32_t i=0; i < MAX_ATTRIBUTES; i++) {
art->attributes[i] = malloc(sizeof(struct attribute)); art->attributes[i] = malloc(sizeof(struct attribute));
art->attributes[i]->type = 0; art->attributes[i]->type = 0;
art->attributes[i]->value = NULL; art->attributes[i]->value = NULL;
} }
strcpy(art->reset,RESET); strcpy(art->reset, COLOR_RESET);
#ifdef ARCH_X86
if(art->vendor == CPU_VENDOR_INTEL) { if(art->vendor == CPU_VENDOR_INTEL) {
COL_FANCY_1 = COL_INTEL_FANCY_1; COL_FANCY_1 = COLOR_BG_CYAN;
COL_FANCY_2 = COL_INTEL_FANCY_2; COL_FANCY_2 = COLOR_BG_WHITE;
COL_FANCY_3 = COL_INTEL_FANCY_3; COL_FANCY_3 = COLOR_FG_CYAN;
COL_FANCY_4 = COL_INTEL_FANCY_4; COL_FANCY_4 = COLOR_FG_WHITE;
COL_RETRO_1 = COL_INTEL_RETRO_1;
COL_RETRO_2 = COL_INTEL_RETRO_2;
COL_RETRO_3 = COL_INTEL_RETRO_1;
COL_RETRO_4 = COL_INTEL_RETRO_2;
art->ascii_chars[0] = '#'; art->ascii_chars[0] = '#';
} }
else if(art->vendor == CPU_VENDOR_AMD) { else if(art->vendor == CPU_VENDOR_AMD) {
COL_FANCY_1 = COL_AMD_FANCY_1; COL_FANCY_1 = COLOR_BG_WHITE;
COL_FANCY_2 = COL_AMD_FANCY_2; COL_FANCY_2 = COLOR_BG_GREEN;
COL_FANCY_3 = COL_AMD_FANCY_3; COL_FANCY_3 = COLOR_FG_WHITE;
COL_FANCY_4 = COL_AMD_FANCY_4; COL_FANCY_4 = COLOR_FG_GREEN;
COL_RETRO_1 = COL_AMD_RETRO_1;
COL_RETRO_2 = COL_AMD_RETRO_2;
COL_RETRO_3 = COL_AMD_RETRO_1;
COL_RETRO_4 = COL_AMD_RETRO_2;
art->ascii_chars[0] = '@'; art->ascii_chars[0] = '@';
} }
else if(art->vendor == CPU_VENDOR_ARM) { #elif ARCH_ARM
COL_FANCY_1 = COL_ARM_FANCY_1; if(art->vendor == SOC_SNAPDRAGON) {
COL_FANCY_2 = COL_ARM_FANCY_2; COL_FANCY_1 = COLOR_BG_CYAN;
COL_FANCY_3 = COL_ARM_FANCY_3; COL_FANCY_2 = COLOR_BG_CYAN;
COL_FANCY_4 = COL_ARM_FANCY_4; COL_FANCY_3 = COLOR_FG_WHITE;
COL_RETRO_1 = COL_ARM_RETRO_1; COL_FANCY_4 = COLOR_FG_CYAN;
COL_RETRO_2 = COL_ARM_RETRO_2; art->ascii_chars[0] = '@';
COL_RETRO_3 = COL_ARM_RETRO_1;
COL_RETRO_4 = COL_ARM_RETRO_2;
art->ascii_chars[0] = '#';
} }
else { else {
COL_FANCY_1 = COL_UNKNOWN_FANCY_1; COL_FANCY_1 = COLOR_BG_CYAN;
COL_FANCY_2 = COL_UNKNOWN_FANCY_2; COL_FANCY_2 = COLOR_BG_CYAN;
COL_FANCY_3 = COL_UNKNOWN_FANCY_3; COL_FANCY_3 = COLOR_FG_WHITE;
COL_FANCY_4 = COL_UNKNOWN_FANCY_4; COL_FANCY_4 = COLOR_FG_CYAN;
COL_RETRO_1 = COL_UNKNOWN_RETRO;
COL_RETRO_2 = COL_UNKNOWN_RETRO;
COL_RETRO_3 = COL_UNKNOWN_RETRO;
COL_RETRO_4 = COL_UNKNOWN_RETRO;
art->ascii_chars[0] = '#'; art->ascii_chars[0] = '#';
} }
#endif
COL_RETRO_1 = COL_FANCY_3;
COL_RETRO_2 = COL_FANCY_4;
COL_RETRO_3 = COL_RETRO_1;
COL_RETRO_4 = COL_RETRO_2;
art->ascii_chars[1] = '#'; art->ascii_chars[1] = '#';
#ifdef _WIN32 #ifdef _WIN32
@@ -232,10 +213,10 @@ struct ascii* set_ascii(VENDOR cpuVendor, STYLE style, struct colors* cs) {
switch(art->style) { switch(art->style) {
case STYLE_LEGACY: case STYLE_LEGACY:
strcpy(art->color1_ascii,COL_NONE); strcpy(art->color1_ascii, COLOR_NONE);
strcpy(art->color2_ascii,COL_NONE); strcpy(art->color2_ascii, COLOR_NONE);
strcpy(art->color1_text,COL_NONE); strcpy(art->color1_text, COLOR_NONE);
strcpy(art->color2_text,COL_NONE); strcpy(art->color2_text, COLOR_NONE);
art->reset[0] = '\0'; art->reset[0] = '\0';
break; break;
case STYLE_FANCY: case STYLE_FANCY:
@@ -283,14 +264,19 @@ struct ascii* set_ascii(VENDOR cpuVendor, STYLE style, struct colors* cs) {
} }
char tmp[NUMBER_OF_LINES*LINE_SIZE]; char tmp[NUMBER_OF_LINES*LINE_SIZE];
#ifdef ARCH_X86
if(art->vendor == CPU_VENDOR_INTEL) if(art->vendor == CPU_VENDOR_INTEL)
strcpy(tmp, INTEL_ASCII); strcpy(tmp, INTEL_ASCII);
else if(art->vendor == CPU_VENDOR_AMD) else if(art->vendor == CPU_VENDOR_AMD)
strcpy(tmp, AMD_ASCII); strcpy(tmp, AMD_ASCII);
else if(art->vendor == CPU_VENDOR_ARM)
strcpy(tmp, ARM_ASCII);
else else
strcpy(tmp, UNKNOWN_ASCII); strcpy(tmp, UNKNOWN_ASCII);
#elif ARCH_ARM
if(art->vendor == SOC_SNAPDRAGON)
strcpy(tmp, SNAPDRAGON_ASCII);
else
strcpy(tmp, ARM_ASCII);
#endif
for(int i=0; i < NUMBER_OF_LINES; i++) for(int i=0; i < NUMBER_OF_LINES; i++)
strncpy(art->art[i], tmp + i*LINE_SIZE, LINE_SIZE); strncpy(art->art[i], tmp + i*LINE_SIZE, LINE_SIZE);
@@ -404,7 +390,11 @@ void print_ascii(struct ascii* art) {
} }
bool print_cpufetch_x86(struct ascii* art, struct cpuInfo* cpu, struct colors* cs) { bool print_cpufetch_x86(struct cpuInfo* cpu, STYLE s, struct colors* cs) {
struct ascii* art = set_ascii(get_cpu_vendor(cpu), s, cs);
if(art == NULL)
return false;
char* uarch = get_str_uarch(cpu); char* uarch = get_str_uarch(cpu);
char* manufacturing_process = get_str_process(cpu); char* manufacturing_process = get_str_process(cpu);
char* sockets = get_str_sockets(cpu->topo); char* sockets = get_str_sockets(cpu->topo);
@@ -494,8 +484,10 @@ void print_ascii_arm(struct ascii* art, uint32_t la) {
printf("\n"); printf("\n");
for(uint32_t n=0;n<NUMBER_OF_LINES;n++) { for(uint32_t n=0;n<NUMBER_OF_LINES;n++) {
for(int i=0;i<LINE_SIZE;i++) { for(int i=0;i<LINE_SIZE;i++) {
if(art->art[n][i] == '#') if(art->art[n][i] == '@')
printf("%s%c%s", art->color1_ascii, art->ascii_chars[0], art->reset); printf("%s%c%s", art->color1_ascii, art->ascii_chars[0], art->reset);
else if(art->art[n][i] == '#')
printf("%s%c%s", art->color2_ascii, art->ascii_chars[1], art->reset);
else else
printf("%c",art->art[n][i]); printf("%c",art->art[n][i]);
} }
@@ -534,6 +526,8 @@ void print_ascii(struct ascii* art) {
if(art->vendor == CPU_VENDOR_ARM) if(art->vendor == CPU_VENDOR_ARM)
print_ascii_arm(art, longest_attribute); print_ascii_arm(art, longest_attribute);
if(art->vendor == SOC_SNAPDRAGON)
print_ascii_arm(art, longest_attribute);
else { else {
printWarn("Invalid CPU vendor: %d\n", art->vendor); printWarn("Invalid CPU vendor: %d\n", art->vendor);
print_ascii_arm(art, longest_attribute); print_ascii_arm(art, longest_attribute);
@@ -541,7 +535,11 @@ void print_ascii(struct ascii* art) {
} }
bool print_cpufetch_arm(struct ascii* art, struct cpuInfo* cpu, struct colors* cs) { bool print_cpufetch_arm(struct cpuInfo* cpu, STYLE s, struct colors* cs) {
struct ascii* art = set_ascii(get_soc_vendor(cpu->soc), s, cs);
if(art == NULL)
return false;
char* manufacturing_process = get_str_process(cpu->soc); char* manufacturing_process = get_str_process(cpu->soc);
char* soc_name = get_soc_name(cpu->soc); char* soc_name = get_soc_name(cpu->soc);
setAttribute(art,ATTRIBUTE_SOC,soc_name); setAttribute(art,ATTRIBUTE_SOC,soc_name);
@@ -620,21 +618,18 @@ bool print_cpufetch_arm(struct ascii* art, struct cpuInfo* cpu, struct colors* c
bool print_cpufetch(struct cpuInfo* cpu, STYLE s, struct colors* cs) { bool print_cpufetch(struct cpuInfo* cpu, STYLE s, struct colors* cs) {
// Sanity check of ASCII arts // Sanity check of ASCII arts
for(int i=0; i < 4; i++) { int len = sizeof(ASCII_ARRAY) / sizeof(ASCII_ARRAY[0]);
for(int i=0; i < len; i++) {
const char* ascii = ASCII_ARRAY[i]; const char* ascii = ASCII_ARRAY[i];
if(strlen(ascii) != (NUMBER_OF_LINES * LINE_SIZE)-1) { if(strlen(ascii) != (NUMBER_OF_LINES * LINE_SIZE)-1) {
printBug("ASCII art %d is wrong! ASCII length: %d, expected length: %d", i, strlen(ascii), (NUMBER_OF_LINES * LINE_SIZE)-1); printBug("ASCII art %d is wrong! ASCII length: %d, expected length: %d", i, strlen(ascii), (NUMBER_OF_LINES * LINE_SIZE)-1);
return false; return false;
} }
} }
struct ascii* art = set_ascii(get_cpu_vendor(cpu), s, cs);
if(art == NULL)
return false;
#ifdef ARCH_X86 #ifdef ARCH_X86
return print_cpufetch_x86(art, cpu, cs); return print_cpufetch_x86(cpu, s, cs);
#elif ARCH_ARM #elif ARCH_ARM
return print_cpufetch_arm(art, cpu, cs); return print_cpufetch_arm(cpu, s, cs);
#endif #endif
} }