pihwm  r1
A lightweight C library for Raspberry Pi hardware modules.
 All Data Structures Files Functions Modules Pages
pihwm.c
Go to the documentation of this file.
1 
28 #include <stdio.h>
29 #include <stdlib.h>
30 #include <linux/types.h>
31 #include "pihwm.h"
32 
109 board_t
111 {
112  FILE *info;
113  char rev_hex[5];
114  unsigned int rev_int = 0;
115 
116  board_t board;
117  board.model = -1;
118  board.rev = -1;
119  board.mem = -1;
120 
121  char *cmd = "cat /proc/cpuinfo | grep 'Revision' | awk '{print $3}'";
122 
123  if( !(info = popen(cmd, "r")) )
124  {
125  return board;
126  }
127 
128  if ( fgets(rev_hex, 5, info) != NULL )
129  {
130  sscanf(rev_hex, "%x", &rev_int);
131  }
132  else
133  {
134  return board;
135  }
136 
137  // Data from: http://raspberryalphaomega.org.uk/?p=428
138  switch(rev_int){
139  case 2:
140  case 3:
141  board.model = MODEL_B;
142  board.rev = REV_1;
143  board.mem = MEM_256;
144  break;
145 
146  case 4:
147  case 5:
148  case 6:
149  board.model = MODEL_B;
150  board.rev = REV_2;
151  board.mem = MEM_256;
152  break;
153 
154  case 7:
155  case 8:
156  case 9:
157  board.model = MODEL_A;
158  board.rev = REV_2;
159  board.mem = MEM_256;
160  break;
161 
162  case 13:
163  case 14:
164  case 15:
165  board.model = MODEL_B;
166  board.rev = REV_2;
167  board.mem = MEM_512;
168  break;
169 
170  default:
171  // Default values (-1) already set.
172  break;
173  }
174 
175  return board;
176 
177 }
178 
184 int
186 {
187  board_t b = board_info();
188  return b.model;
189 }
190 
196 int
198 {
199  board_t b = board_info();
200  return b.rev;
201 }
202 
208 int
210 {
211  board_t b = board_info();
212  return b.mem;
213 }
214 
222 int
223 check_kernel_module (char* modulename)
224 {
225  FILE *lsmod;
226  char cmd[100];
227  char modcount[2];
228  unsigned int modcount_int = 0;
229 
230  sprintf(cmd, "lsmod | grep %s | wc -l", modulename);
231 
232  if( !(lsmod = popen(cmd, "r")) )
233  {
234  return -1;
235  }
236 
237  if ( fgets(modcount, 2, lsmod) != NULL )
238  {
239  modcount_int = atoi(modcount);
240  }
241  else
242  {
243  return -1;
244  }
245 
246 
247  if ( modcount_int > 0 )
248  {
249  return 1;
250  }
251  else
252  {
253  return -1;
254  }
255 
256 }
257 
int board_mem()
Return the amount of system memory.
Definition: pihwm.c:209
board_t board_info()
Return board information (Model, PCB revision and Memory)
Definition: pihwm.c:110
Definition: pihwm.h:58
int check_kernel_module(char *modulename)
Check if the kernel module specified is loaded.
Definition: pihwm.c:223
int board_rev()
Return board revision.
Definition: pihwm.c:197
Header for general library functionality.
int board_model()
Return board model.
Definition: pihwm.c:185