Skip to content

Commit 3f56c20

Browse files
cpu(), system() better parsing Raspberry Pi revision codes
1 parent 6ec3bc9 commit 3f56c20

File tree

7 files changed

+357
-108
lines changed

7 files changed

+357
-108
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ For major (breaking) changes - version 3 and 2 see end of page.
3030

3131
| Version | Date | Comment |
3232
| -------------- | -------------- | -------- |
33+
| 4.29.1 | 2020-11-08 | `cpu()`, `system()` better parsing Raspberry Pi revision codes |
3334
| 4.29.0 | 2020-11-08 | `fsSize()` correct fs type detection macOS (HFS, APFS, NFS) |
3435
| 4.28.1 | 2020-11-05 | code cleanup, removing debug console.log() |
3536
| 4.28.0 | 2020-11-04 | `graphics()` added deviceName (windows) |

docs/history.html

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,11 @@ <h3>Full version history</h3>
8383
</tr>
8484
</thead>
8585
<tbody>
86+
<tr>
87+
<th scope="row">4.29.1</th>
88+
<td>2020-11-08</td>
89+
<td><span class="code">system()</span> better parsing Raspberry Pi revision codes</td>
90+
</tr>
8691
<tr>
8792
<th scope="row">4.29.0</th>
8893
<td>2020-11-08</td>

docs/index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,7 @@
168168
<img class="logo" src="assets/logo.png">
169169
<div class="title">systeminformation</div>
170170
<div class="subtitle"><span id="typed"></span></div>
171-
<div class="version">Current Version: <span id="version">4.29.0</span></div>
171+
<div class="version">Current Version: <span id="version">4.29.1</span></div>
172172
<button class="btn btn-light" onclick="location.href='https://github.com/sebhildebrandt/systeminformation'">View on Github <i class=" fab fa-github"></i></button>
173173
</div>
174174
<div class="down">

lib/cpu.js

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -468,6 +468,7 @@ function getCpu() {
468468
result = cpuBrandManufacturer(result);
469469
result.vendor = util.getValue(lines, 'vendor id');
470470
// if (!result.vendor) { result.vendor = util.getValue(lines, 'anbieterkennung'); }
471+
471472
result.family = util.getValue(lines, 'cpu family');
472473
// if (!result.family) { result.family = util.getValue(lines, 'prozessorfamilie'); }
473474
result.model = util.getValue(lines, 'model:');
@@ -492,12 +493,25 @@ function getCpu() {
492493
result.processors = processorsInt;
493494
result.governor = util.getValue(lines, 'governor') || '';
494495

496+
// Test Raspberry
497+
if (result.vendor === 'ARM') {
498+
const linesRpi = fs.readFileSync('/proc/cpuinfo').toString().split('\n');
499+
const rPIRevision = util.decodePiCpuinfo(linesRpi);
500+
if (rPIRevision.model.toLowerCase().indexOf('raspberry') >= 0) {
501+
result.family = result.manufacturer
502+
result.manufacturer = rPIRevision.manufacturer;
503+
result.brand = rPIRevision.processor;
504+
result.revision = rPIRevision.revisionCode;
505+
result.socket = 'SOC';
506+
}
507+
}
508+
495509
// socket type
496510
let lines2 = [];
497511
exec('export LC_ALL=C; dmidecode –t 4 2>/dev/null | grep "Upgrade: Socket"; unset LC_ALL', function (error2, stdout2) {
498512
lines2 = stdout2.toString().split('\n');
499513
if (lines2 && lines2.length) {
500-
result.socket = util.getValue(lines2, 'Upgrade').replace('Socket', '').trim();
514+
result.socket = util.getValue(lines2, 'Upgrade').replace('Socket', '').trim() || result.socket;
501515
}
502516
resolve(result);
503517
});

lib/index.d.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,20 @@ export namespace Systeminformation {
1515

1616
// 2. System (HW)
1717

18+
interface RaspberryRevisionData {
19+
manufacturer: string;
20+
processor: string;
21+
type: string;
22+
revision: string;
23+
}
1824
interface SystemData {
1925
manufacturer: string;
2026
model: string;
2127
version: string;
2228
serial: string;
2329
uuid: string;
2430
sku: string;
31+
raspberry?: RaspberryRevisionData;
2532
}
2633

2734
interface BiosData {

lib/system.js

Lines changed: 120 additions & 106 deletions
Original file line numberDiff line numberDiff line change
@@ -94,116 +94,130 @@ function system(callback) {
9494
result.model = util.getValue(lines, 'hardware', ':', true).toUpperCase();
9595
result.version = util.getValue(lines, 'revision', ':', true).toLowerCase();
9696
result.serial = util.getValue(lines, 'serial', ':', true);
97-
97+
const model = util.getValue(lines, 'model:', ':', true);
9898
// reference values: https://elinux.org/RPi_HardwareHistory
9999
// https://www.raspberrypi.org/documentation/hardware/raspberrypi/revision-codes/README.md
100-
if (result.model === 'BCM2835' || result.model === 'BCM2708' || result.model === 'BCM2709' || result.model === 'BCM2835' || result.model === 'BCM2837') {
101-
102-
// Pi 4
103-
if (['d03114'].indexOf(result.version) >= 0) {
104-
result.model = result.model + ' - Pi 4 Model B';
105-
result.version = result.version + ' - Rev. 1.4';
106-
}
107-
if (['b03112', 'c03112'].indexOf(result.version) >= 0) {
108-
result.model = result.model + ' - Pi 4 Model B';
109-
result.version = result.version + ' - Rev. 1.2';
110-
}
111-
if (['a03111', 'b03111', 'c03111'].indexOf(result.version) >= 0) {
112-
result.model = result.model + ' - Pi 4 Model B';
113-
result.version = result.version + ' - Rev. 1.1';
114-
}
115-
// Pi 3
116-
if (['a02082', 'a22082', 'a32082', 'a52082'].indexOf(result.version) >= 0) {
117-
result.model = result.model + ' - Pi 3 Model B';
118-
result.version = result.version + ' - Rev. 1.2';
119-
}
120-
if (['a22083'].indexOf(result.version) >= 0) {
121-
result.model = result.model + ' - Pi 3 Model B';
122-
result.version = result.version + ' - Rev. 1.3';
123-
}
124-
if (['a020d3'].indexOf(result.version) >= 0) {
125-
result.model = result.model + ' - Pi 3 Model B+';
126-
result.version = result.version + ' - Rev. 1.3';
127-
}
128-
if (['9020e0'].indexOf(result.version) >= 0) {
129-
result.model = result.model + ' - Pi 3 Model A+';
130-
result.version = result.version + ' - Rev. 1.3';
131-
}
132-
// Pi 2 Model B
133-
if (['a01040'].indexOf(result.version) >= 0) {
134-
result.model = result.model + ' - Pi 2 Model B';
135-
result.version = result.version + ' - Rev. 1.0';
136-
}
137-
if (['a01041', 'a21041'].indexOf(result.version) >= 0) {
138-
result.model = result.model + ' - Pi 2 Model B';
139-
result.version = result.version + ' - Rev. 1.1';
140-
}
141-
if (['a22042', 'a02042'].indexOf(result.version) >= 0) {
142-
result.model = result.model + ' - Pi 2 Model B';
143-
result.version = result.version + ' - Rev. 1.2';
144-
}
145-
146-
// Compute Model
147-
if (['a02100'].indexOf(result.version) >= 0) {
148-
result.model = result.model + ' - Pi CM3+';
149-
result.version = result.version + ' - Rev 1.0';
150-
}
151-
if (['a020a0', 'a220a0'].indexOf(result.version) >= 0) {
152-
result.model = result.model + ' - Pi CM3';
153-
result.version = result.version + ' - Rev 1.0';
154-
}
155-
if (['900061'].indexOf(result.version) >= 0) {
156-
result.model = result.model + ' - Pi CM';
157-
result.version = result.version + ' - Rev 1.1';
158-
}
159-
160-
// Pi Zero
161-
if (['900092', '920092'].indexOf(result.version) >= 0) {
162-
result.model = result.model + ' - Pi Zero';
163-
result.version = result.version + ' - Rev 1.2';
164-
}
165-
if (['900093', '920093'].indexOf(result.version) >= 0) {
166-
result.model = result.model + ' - Pi Zero';
167-
result.version = result.version + ' - Rev 1.3';
168-
}
169-
if (['9000c1'].indexOf(result.version) >= 0) {
170-
result.model = result.model + ' - Pi Zero W';
171-
result.version = result.version + ' - Rev 1.1';
172-
}
173-
174-
// A, B, A+ B+
175-
if (['0002', '0003'].indexOf(result.version) >= 0) {
176-
result.model = result.model + ' - Pi Model B';
177-
result.version = result.version + ' - Rev 1.0';
178-
}
179-
if (['0004', '0005', '0006', '000d', '000e', '000f'].indexOf(result.version) >= 0) {
180-
result.model = result.model + ' - Pi Model B';
181-
result.version = result.version + ' - Rev 2.0';
182-
}
183-
if (['0007', '0008', '0009'].indexOf(result.version) >= 0) {
184-
result.model = result.model + ' - Pi Model A';
185-
result.version = result.version + ' - Rev 2.0';
186-
}
187-
if (['0010'].indexOf(result.version) >= 0) {
188-
result.model = result.model + ' - Pi Model B+';
189-
result.version = result.version + ' - Rev 1.0';
190-
}
191-
if (['0012'].indexOf(result.version) >= 0) {
192-
result.model = result.model + ' - Pi Model A+';
193-
result.version = result.version + ' - Rev 1.0';
194-
}
195-
if (['0013', '900032'].indexOf(result.version) >= 0) {
196-
result.model = result.model + ' - Pi Model B+';
197-
result.version = result.version + ' - Rev 1.2';
198-
}
199-
if (['0015', '900021'].indexOf(result.version) >= 0) {
200-
result.model = result.model + ' - Pi Model A+';
201-
result.version = result.version + ' - Rev 1.1';
202-
}
203-
if (result.model.indexOf('Pi') !== -1 && result.version) { // Pi, Pi Zero
204-
result.manufacturer = 'Raspberry Pi Foundation';
100+
if ((result.model === 'BCM2835' || result.model === 'BCM2708' || result.model === 'BCM2709' || result.model === 'BCM2835' || result.model === 'BCM2837') && model.toLowerCase().indexOf('raspberry') >= 0) {
101+
const rPIRevision = util.decodePiCpuinfo(lines);
102+
result.model = rPIRevision.model;
103+
result.version = rPIRevision.revisionCode;
104+
result.manufacturer = 'Raspberry Pi Foundation';
105+
result.raspberry = {
106+
manufacturer: rPIRevision.manufacturer,
107+
processor: rPIRevision.processor,
108+
type: rPIRevision.type,
109+
revision: rPIRevision.revision
205110
}
206111
}
112+
113+
// if (result.model === 'BCM2835' || result.model === 'BCM2708' || result.model === 'BCM2709' || result.model === 'BCM2835' || result.model === 'BCM2837') {
114+
115+
116+
// // Pi 4
117+
// if (['d03114'].indexOf(result.version) >= 0) {
118+
// result.model = result.model + ' - Pi 4 Model B';
119+
// result.version = result.version + ' - Rev. 1.4';
120+
// }
121+
// if (['b03112', 'c03112'].indexOf(result.version) >= 0) {
122+
// result.model = result.model + ' - Pi 4 Model B';
123+
// result.version = result.version + ' - Rev. 1.2';
124+
// }
125+
// if (['a03111', 'b03111', 'c03111'].indexOf(result.version) >= 0) {
126+
// result.model = result.model + ' - Pi 4 Model B';
127+
// result.version = result.version + ' - Rev. 1.1';
128+
// }
129+
// // Pi 3
130+
// if (['a02082', 'a22082', 'a32082', 'a52082'].indexOf(result.version) >= 0) {
131+
// result.model = result.model + ' - Pi 3 Model B';
132+
// result.version = result.version + ' - Rev. 1.2';
133+
// }
134+
// if (['a22083'].indexOf(result.version) >= 0) {
135+
// result.model = result.model + ' - Pi 3 Model B';
136+
// result.version = result.version + ' - Rev. 1.3';
137+
// }
138+
// if (['a020d3'].indexOf(result.version) >= 0) {
139+
// result.model = result.model + ' - Pi 3 Model B+';
140+
// result.version = result.version + ' - Rev. 1.3';
141+
// }
142+
// if (['9020e0'].indexOf(result.version) >= 0) {
143+
// result.model = result.model + ' - Pi 3 Model A+';
144+
// result.version = result.version + ' - Rev. 1.3';
145+
// }
146+
// // Pi 2 Model B
147+
// if (['a01040'].indexOf(result.version) >= 0) {
148+
// result.model = result.model + ' - Pi 2 Model B';
149+
// result.version = result.version + ' - Rev. 1.0';
150+
// }
151+
// if (['a01041', 'a21041'].indexOf(result.version) >= 0) {
152+
// result.model = result.model + ' - Pi 2 Model B';
153+
// result.version = result.version + ' - Rev. 1.1';
154+
// }
155+
// if (['a22042', 'a02042'].indexOf(result.version) >= 0) {
156+
// result.model = result.model + ' - Pi 2 Model B';
157+
// result.version = result.version + ' - Rev. 1.2';
158+
// }
159+
160+
// // Compute Model
161+
// if (['a02100'].indexOf(result.version) >= 0) {
162+
// result.model = result.model + ' - Pi CM3+';
163+
// result.version = result.version + ' - Rev 1.0';
164+
// }
165+
// if (['a020a0', 'a220a0'].indexOf(result.version) >= 0) {
166+
// result.model = result.model + ' - Pi CM3';
167+
// result.version = result.version + ' - Rev 1.0';
168+
// }
169+
// if (['900061'].indexOf(result.version) >= 0) {
170+
// result.model = result.model + ' - Pi CM';
171+
// result.version = result.version + ' - Rev 1.1';
172+
// }
173+
174+
// // Pi Zero
175+
// if (['900092', '920092'].indexOf(result.version) >= 0) {
176+
// result.model = result.model + ' - Pi Zero';
177+
// result.version = result.version + ' - Rev 1.2';
178+
// }
179+
// if (['900093', '920093'].indexOf(result.version) >= 0) {
180+
// result.model = result.model + ' - Pi Zero';
181+
// result.version = result.version + ' - Rev 1.3';
182+
// }
183+
// if (['9000c1'].indexOf(result.version) >= 0) {
184+
// result.model = result.model + ' - Pi Zero W';
185+
// result.version = result.version + ' - Rev 1.1';
186+
// }
187+
188+
// // A, B, A+ B+
189+
// if (['0002', '0003'].indexOf(result.version) >= 0) {
190+
// result.model = result.model + ' - Pi Model B';
191+
// result.version = result.version + ' - Rev 1.0';
192+
// }
193+
// if (['0004', '0005', '0006', '000d', '000e', '000f'].indexOf(result.version) >= 0) {
194+
// result.model = result.model + ' - Pi Model B';
195+
// result.version = result.version + ' - Rev 2.0';
196+
// }
197+
// if (['0007', '0008', '0009'].indexOf(result.version) >= 0) {
198+
// result.model = result.model + ' - Pi Model A';
199+
// result.version = result.version + ' - Rev 2.0';
200+
// }
201+
// if (['0010'].indexOf(result.version) >= 0) {
202+
// result.model = result.model + ' - Pi Model B+';
203+
// result.version = result.version + ' - Rev 1.0';
204+
// }
205+
// if (['0012'].indexOf(result.version) >= 0) {
206+
// result.model = result.model + ' - Pi Model A+';
207+
// result.version = result.version + ' - Rev 1.0';
208+
// }
209+
// if (['0013', '900032'].indexOf(result.version) >= 0) {
210+
// result.model = result.model + ' - Pi Model B+';
211+
// result.version = result.version + ' - Rev 1.2';
212+
// }
213+
// if (['0015', '900021'].indexOf(result.version) >= 0) {
214+
// result.model = result.model + ' - Pi Model A+';
215+
// result.version = result.version + ' - Rev 1.1';
216+
// }
217+
// if (result.model.indexOf('Pi') !== -1 && result.version) { // Pi, Pi Zero
218+
// result.manufacturer = 'Raspberry Pi Foundation';
219+
// }
220+
// }
207221
}
208222
if (callback) { callback(result); }
209223
resolve(result);

0 commit comments

Comments
 (0)