4
4
using System . Collections . Generic ;
5
5
using System . Globalization ;
6
6
using System . IO ;
7
- using System . Linq ;
8
7
9
8
#endregion
10
9
@@ -19,9 +18,9 @@ public class Board
19
18
#region Fields
20
19
21
20
private static readonly Lazy < Board > board = new Lazy < Board > ( LoadBoard ) ;
22
- private readonly Dictionary < string , string > settings ;
23
21
24
- private const string raspberryPiProcessor = "BCM2708" ;
22
+ private readonly Dictionary < string , string > settings ;
23
+ private readonly HashSet < string > raspberryPiProcessors = new HashSet < string > ( new [ ] { "BCM2708" , "BCM2709" } , StringComparer . InvariantCultureIgnoreCase ) ;
25
24
26
25
#endregion
27
26
@@ -52,7 +51,7 @@ public static Board Current
52
51
/// </value>
53
52
public bool IsRaspberryPi
54
53
{
55
- get { return string . Equals ( Processor , raspberryPiProcessor , StringComparison . InvariantCultureIgnoreCase ) ; }
54
+ get { return raspberryPiProcessors . Contains ( Processor ) ; }
56
55
}
57
56
58
57
/// <summary>
@@ -76,7 +75,9 @@ public int Firmware
76
75
{
77
76
string revision ;
78
77
int firmware ;
79
- if ( settings . TryGetValue ( "Revision" , out revision ) && ! string . IsNullOrEmpty ( revision ) && int . TryParse ( revision , NumberStyles . HexNumber , CultureInfo . InvariantCulture , out firmware ) )
78
+ if ( settings . TryGetValue ( "Revision" , out revision )
79
+ && ! string . IsNullOrEmpty ( revision )
80
+ && int . TryParse ( revision , NumberStyles . HexNumber , CultureInfo . InvariantCulture , out firmware ) )
80
81
return firmware ;
81
82
82
83
return 0 ;
@@ -90,7 +91,8 @@ public string SerialNumber
90
91
{
91
92
get {
92
93
string serial ;
93
- if ( settings . TryGetValue ( "Serial" , out serial ) && ! string . IsNullOrEmpty ( serial ) )
94
+ if ( settings . TryGetValue ( "Serial" , out serial )
95
+ && ! string . IsNullOrEmpty ( serial ) )
94
96
return serial ;
95
97
96
98
return null ;
@@ -139,6 +141,10 @@ public char Model
139
141
case 0x10 :
140
142
return 'B' ;
141
143
144
+ case 0x1040 :
145
+ case 0x1041 :
146
+ return '2' ;
147
+
142
148
default :
143
149
return ( char ) 0 ;
144
150
}
@@ -175,6 +181,10 @@ public int Revision
175
181
176
182
case 0x10 :
177
183
return 3 ; // Model B+, rev3
184
+
185
+ case 0x1040 :
186
+ case 0x1041 :
187
+ return 4 ;
178
188
179
189
default :
180
190
return 0 ; // Unknown
@@ -191,16 +201,27 @@ private static Board LoadBoard()
191
201
try
192
202
{
193
203
const string filePath = "/proc/cpuinfo" ;
194
- var settings = File . ReadAllLines ( filePath )
195
- . Where ( l => ! string . IsNullOrEmpty ( l ) )
196
- . Select ( l =>
204
+
205
+ var cpuInfo = File . ReadAllLines ( filePath ) ;
206
+ var settings = new Dictionary < string , string > ( ) ;
207
+ var suffix = string . Empty ;
208
+
209
+ foreach ( var l in cpuInfo )
210
+ {
211
+ var separator = l . IndexOf ( ':' ) ;
212
+
213
+ if ( ! string . IsNullOrWhiteSpace ( l ) && separator > 0 )
197
214
{
198
- var separator = l . IndexOf ( ':' ) ;
199
- return separator >= 0
200
- ? new KeyValuePair < string , string > ( l . Substring ( 0 , separator ) . Trim ( ) , l . Substring ( separator + 1 ) . Trim ( ) )
201
- : new KeyValuePair < string , string > ( l , null ) ;
202
- } )
203
- . ToDictionary ( p => p . Key , p => p . Value ) ;
215
+ var key = l . Substring ( 0 , separator ) . Trim ( ) ;
216
+ var val = l . Substring ( separator + 1 ) . Trim ( ) ;
217
+ if ( string . Equals ( key , "processor" , StringComparison . InvariantCultureIgnoreCase ) )
218
+ suffix = "." + val ;
219
+
220
+ settings . Add ( key + suffix , val ) ;
221
+ }
222
+ else
223
+ suffix = "" ;
224
+ }
204
225
205
226
return new Board ( settings ) ;
206
227
}
0 commit comments