96boards: add support to HiKey 96board
[contrib/mraa.git] / src / arm / arm.c
index 5706013..a3363c0 100644 (file)
 
 #include "mraa_internal.h"
 #include "arm/raspberry_pi.h"
+#include "arm/beaglebone.h"
+#include "arm/banana.h"
+#include "arm/96boards.h"
+
 
 mraa_platform_t
 mraa_arm_platform()
@@ -36,6 +40,7 @@ mraa_arm_platform()
     size_t len = 100;
     char* line = malloc(len);
     FILE* fh = fopen("/proc/cpuinfo", "r");
+
     if (fh != NULL) {
         while (getline(&line, &len, fh) != -1) {
             if (strncmp(line, "Hardware", 8) == 0) {
@@ -45,19 +50,53 @@ mraa_arm_platform()
                 if (strstr(line, "BCM2709")) {
                     platform_type = MRAA_RASPBERRY_PI;
                 }
+                if (strstr(line, "Generic AM33XX")) {
+                    platform_type = MRAA_BEAGLEBONE;
+                }
+               if (strstr(line, "HiKey Development Board")) {
+                    platform_type = MRAA_96BOARDS;
+                }
+                if (strstr(line, "sun7i")) {
+                    if (mraa_file_contains("/sys/firmware/devicetree/base/model", "Banana Pro")) {
+                        platform_type = MRAA_BANANA;
+                    }
+                    if (mraa_file_contains("/sys/firmware/devicetree/base/model", "Banana Pi")) {
+                        platform_type = MRAA_BANANA;
+                    }
+                    // For old kernels
+                    if (mraa_file_exist("/sys/class/leds/green:ph24:led1")) {
+                        platform_type = MRAA_BANANA;
+                    }
+                }
             }
+
         }
         fclose(fh);
     }
     free(line);
 
+    /* Get compatible string from Device tree for boards that dont have enough info in /proc/cpuinfo */
+    if (platform_type == MRAA_UNKNOWN_PLATFORM) {
+        if (mraa_file_contains("/sys/firmware/devicetree/base/compatible", "qcom,apq8016-sbc"))
+                   platform_type = MRAA_96BOARDS;
+     }
+
     switch (platform_type) {
         case MRAA_RASPBERRY_PI:
             plat = mraa_raspberry_pi();
             break;
+        case MRAA_BEAGLEBONE:
+            plat = mraa_beaglebone();
+            break;
+        case MRAA_BANANA:
+            plat = mraa_banana();
+            break;
+        case MRAA_96BOARDS:
+            plat = mraa_96boards();
+            break;
         default:
-            plat = mraa_raspberry_pi();
-            syslog(LOG_ERR, "Platform not supported, initialising as MRAA_RASPBERRY_PI");
+            plat = NULL;
+            syslog(LOG_ERR, "Unknown Platform, currently not supported by MRAA");
     }
     return platform_type;
 }