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