#include "TegraDetector.h" #include #include #define KERNEL_CONFIG "/proc/config.gz" #define KERNEL_CONFIG_MAX_LINE_WIDTH 512 #define KERNEL_CONFIG_TEGRA_MAGIC "CONFIG_ARCH_TEGRA=y" #define KERNEL_CONFIG_TEGRA2_MAGIC "CONFIG_ARCH_TEGRA_2x_SOC=y" #define KERNEL_CONFIG_TEGRA3_MAGIC "CONFIG_ARCH_TEGRA_3x_SOC=y" #define KERNEL_CONFIG_TEGRA4_MAGIC "CONFIG_ARCH_TEGRA_11x_SOC=y" #define MAX_DATA_LEN 4096 int DetectTegra() { int result = TEGRA_NOT_TEGRA; gzFile kernelConfig = gzopen(KERNEL_CONFIG, "r"); if (kernelConfig != 0) { char tmpbuf[KERNEL_CONFIG_MAX_LINE_WIDTH]; const char *tegra_config = KERNEL_CONFIG_TEGRA_MAGIC; const char *tegra2_config = KERNEL_CONFIG_TEGRA2_MAGIC; const char *tegra3_config = KERNEL_CONFIG_TEGRA3_MAGIC; const char *tegra4_config = KERNEL_CONFIG_TEGRA4_MAGIC; int len = strlen(tegra_config); int len2 = strlen(tegra2_config); int len3 = strlen(tegra3_config); int len4 = strlen(tegra4_config); while (0 != gzgets(kernelConfig, tmpbuf, KERNEL_CONFIG_MAX_LINE_WIDTH)) { if (0 == strncmp(tmpbuf, tegra_config, len)) { result = 1; } if (0 == strncmp(tmpbuf, tegra2_config, len2)) { result = 2; break; } if (0 == strncmp(tmpbuf, tegra3_config, len3)) { result = 3; break; } if (0 == strncmp(tmpbuf, tegra4_config, len4)) { result = 4; break; } } gzclose(kernelConfig); } else { result = TEGRA_DETECTOR_ERROR; } return result; }