GetRaspberryHwRevision();

Mit der neuen Hardwarerevision 2.0 des Raspberry haben sich leider ein paar Ding geändert (http://www.raspberrypi.org/archives/1929). Damit die Anwendungssoftware entsprechend handeln kann, habe ich die folgende Funktion in C geschrieben. Viel Spaß damit:

#include 
#include 
#include 

//--------------------------------------------------------------------------------------------
// Name:          GetRaspberryHwRevision
// Function:      Check wich Hardware is used:
//                http://www.raspberrypi.org/archives/1929
//    
//                Model B Revision 1.0                                     2
//                Model B Revision 1.0 + ECN0001 (no fuses, D14 removed)   3
//                Model B Revision 2.0                                     4, 5, 6
//            
// Parameter:     -
// Return:      0=no info , 1=HW Rev.1, 2=HW Rev.2
//--------------------------------------------------------------------------------------------
int GetRaspberryHwRevision(void)
{    
    FILE *fp;
    char line[32];
    char s[32];
    int i;
    
    fp = fopen("/proc/cpuinfo", "r");        // open as file
    if(fp != NULL)
    {    
        while(fgets(line,32,fp))            // get line
        {
            sscanf(line,"%s : %x",(char*)&s,&i);    // parse for key and value
            //printf("[%s] [%i]rn",s,i);
            if(strcmp(s,"Revision") == 0)        // check for "Revision"
            {            
                //printf("Found: %s=%irn",s,i);
                if(i < 4)  return 1;
                else        return 2;
            }
        }
    }
    else
    {
        //printf("cpuinfo not available.rn"); 
        return 0;
    }
    //printf("no revision info available.rn"); 
    return 0;
}

...
printf("RaspberryHwRevision=%irn",GetRaspberryHwRevision());
...

Ein Kommentar zu “GetRaspberryHwRevision();

  1. Hallo, danke für den Codeschnipsel.

    Hier eine kleine Erweiterung, damit entsprechend auch auf Model A reagiert wird (Revision 8):


    if(strcmp(s,“Revision“) == 0) // check for „Revision“
    {
    //printf(„Found: %s=%irn“,s,i);
    if (i == 8) //A, rev1
    {
    return 3;
    }
    else if(i < 4) //B, rev1
    {
    return 1;
    }
    else //B, rev2
    {
    return 2;
    }
    }

Kommentar verfassen