mirror of https://github.com/joan2937/pigpio
Expose serial number
This commit is contained in:
parent
27b5ea9c58
commit
f385cb7d80
|
@ -343,6 +343,7 @@ UTILITIES
|
|||
|
||||
H/HELP :: Display command help ::
|
||||
HWVER :: Get hardware version :: gpioHardwareRevision
|
||||
SERNM :: Get hardware serial number :: gpioHardwareSerialNumber
|
||||
MICS v :: Microseconds delay :: gpioDelay
|
||||
MILS v :: Milliseconds delay :: gpioDelay
|
||||
PIGPV :: Get pigpio library version :: gpioVersion
|
||||
|
@ -1259,6 +1260,19 @@ $ pigs hwver # On a B+
|
|||
16
|
||||
...
|
||||
|
||||
SERNM ::
|
||||
This command returns the hardware serial number of the Pi.
|
||||
|
||||
The hardware serial number is found on the serial line of /proc/cpuinfo.
|
||||
|
||||
If the hardware revision can not be found or is not a valid hexadecimal
|
||||
number the command returns 0.
|
||||
|
||||
...
|
||||
$ pigs sernm
|
||||
571858502
|
||||
...
|
||||
|
||||
I2CC ::
|
||||
This command closes an I2C handle [*h*] previously opened with [*I2CO*].
|
||||
|
||||
|
|
|
@ -1006,6 +1006,22 @@ uint32_t spi_flags<br></td>
|
|||
<td valign="top">4*X<br></td>
|
||||
<td valign="top">uint32_t pars[X]<br></td>
|
||||
</tr>
|
||||
<!--tr>
|
||||
<td valign="top">WVCAP<br></td>
|
||||
<td valign="top">118<br></td>
|
||||
<td valign="top">todo<br></td>
|
||||
<td valign="top">todo<br></td>
|
||||
<td valign="top">todo<br></td>
|
||||
<td valign="top">todo<br></td>
|
||||
</tr!-->
|
||||
<tr>
|
||||
<td valign="top">SERNM<br></td>
|
||||
<td valign="top">117<br></td>
|
||||
<td valign="top">script_id<br></td>
|
||||
<td valign="top">0<br></td>
|
||||
<td valign="top">4*X<br></td>
|
||||
<td valign="top">uint32_t pars[X]<br></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<h3><a name="Response" id="Response"></a>Response</h3>
|
||||
|
@ -1984,6 +2000,22 @@ uint8_t data[X]</td>
|
|||
<td valign="top">0<br></td>
|
||||
<td valign="top">-<br></td>
|
||||
</tr>
|
||||
<!--tr>
|
||||
<td valign="top">WVCAP<br></td>
|
||||
<td valign="top">118<br></td>
|
||||
<td valign="top">-<br></td>
|
||||
<td valign="top">-<br></td>
|
||||
<td valign="top">wave id<br></td>
|
||||
<td valign="top">-<br></td>
|
||||
</tr-->
|
||||
<tr>
|
||||
<td valign="top">SERNM *<br></td>
|
||||
<td valign="top">119<br></td>
|
||||
<td valign="top">-<br></td>
|
||||
<td valign="top">-<br></td>
|
||||
<td valign="top">serial number<br></td>
|
||||
<td valign="top">-<br></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<code><br></code>
|
||||
|
|
|
@ -94,6 +94,7 @@ cmdInfo_t cmdInfo[]=
|
|||
{PI_CMD_HP, "HP", 131, 0, 1}, // gpioHardwarePWM
|
||||
|
||||
{PI_CMD_HWVER, "HWVER", 101, 4, 1}, // gpioHardwareRevision
|
||||
{PI_CMD_SERNM, "SERNM", 101, 4, 1}, // gpioHardwareSerialNumber
|
||||
|
||||
{PI_CMD_I2CC, "I2CC", 112, 0, 1}, // i2cClose
|
||||
{PI_CMD_I2CO, "I2CO", 131, 2, 1}, // i2cOpen
|
||||
|
@ -307,6 +308,7 @@ H/HELP Display command help\n\
|
|||
HC g f Set hardware clock frequency\n\
|
||||
HP g f dc Set hardware PWM frequency and dutycycle\n\
|
||||
HWVER Get hardware version\n\
|
||||
SERNM Get hardware serial number\n\
|
||||
\n\
|
||||
I2CC h Close I2C handle\n\
|
||||
I2CO bus device flags | Open I2C bus and device with flags\n\
|
||||
|
@ -671,7 +673,7 @@ int cmdParse(
|
|||
case 101: /* BR1 BR2 CGI H HELP HWVER
|
||||
DCRA HALT INRA NO
|
||||
PIGPV POPA PUSHA RET T TICK WVBSY WVCLR
|
||||
WVCRE WVGO WVGOR WVHLT WVNEW
|
||||
WVCRE WVGO WVGOR WVHLT WVNEW SERNM
|
||||
|
||||
No parameters, always valid.
|
||||
*/
|
||||
|
|
2
pigpio.3
2
pigpio.3
|
@ -10733,6 +10733,8 @@ A 16-bit word value.
|
|||
.br
|
||||
#define PI_CMD_WVCAP 118
|
||||
.br
|
||||
#define PI_CMD_SERNM 119
|
||||
.br
|
||||
|
||||
.br
|
||||
|
||||
|
|
37
pigpio.c
37
pigpio.c
|
@ -2097,6 +2097,8 @@ static int myDoCommand(uintptr_t *p, unsigned bufSize, char *buf)
|
|||
|
||||
case PI_CMD_HWVER: res = gpioHardwareRevision(); break;
|
||||
|
||||
case PI_CMD_SERNM: res = gpioHardwareSerialNumber(); break;
|
||||
|
||||
|
||||
|
||||
case PI_CMD_I2CC: res = i2cClose(p[1]); break;
|
||||
|
@ -13846,6 +13848,41 @@ unsigned gpioHardwareRevision(void)
|
|||
}
|
||||
|
||||
|
||||
unsigned int gpioHardwareSerialNumber(void)
|
||||
{
|
||||
static unsigned serial = 0;
|
||||
|
||||
FILE * filp;
|
||||
char buf[512];
|
||||
char term;
|
||||
|
||||
DBG(DBG_USER, "");
|
||||
|
||||
if (serial) return serial;
|
||||
|
||||
filp = fopen ("/proc/cpuinfo", "r");
|
||||
|
||||
|
||||
if (filp != NULL)
|
||||
{
|
||||
while (fgets(buf, sizeof(buf), filp) != NULL)
|
||||
{
|
||||
if (!strncasecmp("serial\t\t: ", buf, 10))
|
||||
{
|
||||
if (sscanf(buf+10, "%x%c", &serial, &term) == 2)
|
||||
{
|
||||
if (term != '\n') serial = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
fclose(filp);
|
||||
}
|
||||
|
||||
DBG(DBG_USER, "serial number=%x", serial);
|
||||
|
||||
return serial;
|
||||
}
|
||||
|
||||
/* ----------------------------------------------------------------------- */
|
||||
|
||||
int gpioCfgBufferSize(unsigned millis)
|
||||
|
|
2
pigpio.h
2
pigpio.h
|
@ -4298,6 +4298,7 @@ for "Revision : 000f" the function returns 15.
|
|||
for "Revision : 000g" the function returns 0.
|
||||
D*/
|
||||
|
||||
unsigned int gpioHardwareSerialNumber(void);
|
||||
|
||||
/*F*/
|
||||
unsigned gpioVersion(void);
|
||||
|
@ -6317,6 +6318,7 @@ PARAMS*/
|
|||
#define PI_CMD_PROCU 117
|
||||
#define PI_CMD_WVCAP 118
|
||||
|
||||
#define PI_CMD_SERNM 119
|
||||
/*DEF_E*/
|
||||
|
||||
/*
|
||||
|
|
25
pigpio.py
25
pigpio.py
|
@ -317,6 +317,7 @@ UTILITIES
|
|||
get_current_tick Get current tick (microseconds)
|
||||
|
||||
get_hardware_revision Get hardware revision
|
||||
get_hardware_serial_number Get hardware serial number
|
||||
get_pigpio_version Get the pigpio version
|
||||
|
||||
pigpio.error_text Gets error text from error number
|
||||
|
@ -573,6 +574,7 @@ _PI_CMD_EVT =116
|
|||
|
||||
_PI_CMD_PROCU=117
|
||||
_PI_CMD_WVCAP=118
|
||||
_PI_CMD_SERNM=119
|
||||
|
||||
# pigpio error numbers
|
||||
|
||||
|
@ -2089,6 +2091,29 @@ class pi():
|
|||
"""
|
||||
return _pigpio_command(self.sl, _PI_CMD_HWVER, 0, 0)
|
||||
|
||||
def get_hardware_serial_number(self):
|
||||
"""
|
||||
Returns the Pi's hardware serial number in decimal base.
|
||||
|
||||
The hardware serial number is the last few characters on the
|
||||
Serial line of /proc/cpuinfo.
|
||||
|
||||
If the hardware revision can not be found or is not a valid
|
||||
hexadecimal number the function returns 0.
|
||||
|
||||
...
|
||||
print(pi.get_hardware_serial_number())
|
||||
571858502
|
||||
...
|
||||
|
||||
To get the hexadecimal value as displayed in /proc/cpuinfo:
|
||||
...
|
||||
print("0x{:016x}".format(pi.get_hardware_serial_number()))
|
||||
0x000000002215de46
|
||||
"""
|
||||
return _pigpio_command(self.sl, _PI_CMD_SERNM, 0, 0)
|
||||
|
||||
|
||||
def get_pigpio_version(self):
|
||||
"""
|
||||
Returns the pigpio software version.
|
||||
|
|
|
@ -668,6 +668,9 @@ uint32_t get_current_tick(void)
|
|||
uint32_t get_hardware_revision(void)
|
||||
{return pigpio_command(gPigCommand, PI_CMD_HWVER, 0, 0, 1);}
|
||||
|
||||
uint32_t get_hardware_sernum(void)
|
||||
{return pigpio_command(gPigCommand, PI_CMD_SERNM, 0, 0, 1);}
|
||||
|
||||
uint32_t get_pigpio_version(void)
|
||||
{return pigpio_command(gPigCommand, PI_CMD_PIGPV, 0, 0, 1);}
|
||||
|
||||
|
|
|
@ -886,6 +886,9 @@ uint32_t get_current_tick(int pi)
|
|||
uint32_t get_hardware_revision(int pi)
|
||||
{return pigpio_command(pi, PI_CMD_HWVER, 0, 0, 1);}
|
||||
|
||||
uint32_t get_hardware_serial_number(int pi)
|
||||
{return pigpio_command(pi, PI_CMD_SERNM, 0, 0, 1);}
|
||||
|
||||
uint32_t get_pigpio_version(int pi)
|
||||
{return pigpio_command(pi, PI_CMD_PIGPV, 0, 0, 1);}
|
||||
|
||||
|
|
29
pigs.1
29
pigs.1
|
@ -591,6 +591,9 @@ Display command help
|
|||
.B HWVER
|
||||
Get hardware version
|
||||
.P
|
||||
.B SERNM
|
||||
Get hardware serial number
|
||||
.P
|
||||
.B MICS v
|
||||
Microseconds delay
|
||||
.P
|
||||
|
@ -2255,6 +2258,32 @@ $ pigs hwver # On a B+
|
|||
16
|
||||
.br
|
||||
|
||||
.br
|
||||
|
||||
.IP "\fBSERNM \fP - Get hardware serial number"
|
||||
.IP "" 4
|
||||
This command returns the hardware serial number of the Pi.
|
||||
|
||||
.br
|
||||
The hardware serial number is found on the serial line of /proc/cpuinfo.
|
||||
|
||||
|
||||
.br
|
||||
If the hardware serial number can not be found or is not a valid hexadecimal
|
||||
number the command returns 0.
|
||||
|
||||
.br
|
||||
|
||||
\fBExample\fP
|
||||
.br
|
||||
|
||||
.EX
|
||||
$ pigs sernm
|
||||
.br
|
||||
571858502
|
||||
.br
|
||||
|
||||
|
||||
.EE
|
||||
|
||||
.br
|
||||
|
|
|
@ -50,6 +50,8 @@ void t0()
|
|||
printf("pigpio version %d.\n", gpioVersion());
|
||||
|
||||
printf("Hardware revision %d.\n", gpioHardwareRevision());
|
||||
|
||||
printf("Hardware serialnumber %u.\n", gpioHardwareSerialNumber());
|
||||
}
|
||||
|
||||
void t1()
|
||||
|
|
3
x_pigs
3
x_pigs
|
@ -55,6 +55,9 @@ if [[ ${#s} = 5423 ]]; then echo "HELP ok"; else echo "HELP fail (${#s})"; fi
|
|||
s=$(pigs hwver)
|
||||
if [[ $s -ne 0 ]]; then echo "HWVER ok"; else echo "HWVER fail ($s)"; fi
|
||||
|
||||
s=$(pigs sernm)
|
||||
if [[ $s -ne 0 ]]; then echo "SERNM ok"; else echo "SERNM fail ($s)"; fi
|
||||
|
||||
s=$(pigs mics 1000)
|
||||
if [[ $s = "" ]]; then echo "MICS ok"; else echo "MICS fail ($s)"; fi
|
||||
|
||||
|
|
4
x_pipe
4
x_pipe
|
@ -76,6 +76,10 @@ echo "hwver" >/dev/pigpio
|
|||
read -t 1 s </dev/pigout
|
||||
if [[ $s -ne 0 ]]; then echo "HWVER ok"; else echo "HWVER fail ($s)"; fi
|
||||
|
||||
echo "sernm" >/dev/pigpio
|
||||
read -t 1 s </dev/pigout
|
||||
if [[ $s -ne 0 ]]; then echo "SERNM ok"; else echo "SERNM fail ($s)"; fi
|
||||
|
||||
echo "mics 1000" >/dev/pigpio
|
||||
read -t 1 s </dev/pigout
|
||||
if [[ $s = 0 ]]; then echo "MICS ok"; else echo "MICS fail ($s)"; fi
|
||||
|
|
Loading…
Reference in New Issue