Package | Description |
---|---|
com.diozero |
Support for devices representing actual devices such as LEDs, Buttons including GPIO, SPI and I2C devices.
|
com.diozero.api |
Lower-level APIs for interfacing with devices.
|
com.diozero.api.imu | |
com.diozero.api.motor | |
com.diozero.internal.spi | |
com.diozero.sampleapps |
Sample applications.
|
com.diozero.sandpit |
Modifier and Type | Method and Description |
---|---|
void |
Buzzer.beep()
Beep repeatedly in a background thread.
|
void |
Buzzer.beep(float onTime,
float offTime,
int n,
boolean background)
Beep.
|
void |
PwmLed.blink()
Blink the LED on and off indefinitely.
|
void |
LED.blink()
Blink indefinitely with 1 second on and 1 second off.
|
void |
PwmLed.blink(float onTime,
float offTime,
int iterations,
boolean background)
Blink the LED on and off repeatedly.
|
void |
LED.blink(float onTime,
float offTime,
int n,
boolean background)
Blink.
|
void |
PCA9685.close() |
void |
McpAdc.close() |
void |
MCP23017.close() |
void |
I2CLcd.close() |
void |
BME280.close() |
void |
PCA9685.closeChannel(int channel) |
void |
MCP23017.closePin(int pinNumber) |
float |
HCSR04.getDistanceCm()
Send a pulse to HCSR04 and compute the echo to obtain distance
|
float |
GP2Y0A21YK.getDistanceCm()
Read distance in centimetres, range 10 to 80cm.
|
float |
LDR.getLdrResistance()
Read the resistance across the LDR.
|
float |
TSL2561.getLuminosity()
Converts the raw sensor values to the standard SI lux equivalent.
|
float |
BMP180.getPressure()
Read the barometric pressure (in hPa) from the device.
|
float |
TMP36.getScaledValue() |
float |
W1ThermSensor.getTemperature()
Get temperature in degrees celsius
|
float |
TMP36.getTemperature()
Get the current temperature in °C.
|
float |
BMP180.getTemperature()
Method for reading the temperature.
|
float |
PCA9685.getValue(int channel) |
float |
McpAdc.getValue(int adcPin)
Read the analog value in the range 0..1 or -1..1 (if the ADC type is signed)
|
boolean |
MCP23017.getValue(int pinNumber) |
float[] |
RgbPwmLed.getValues()
Get the value of all LEDs.
|
boolean[] |
RgbLed.getValues()
Get the state of all LEDs.
|
boolean |
PwmLed.isLit()
Return true if the PWM value is >0.
|
boolean |
LED.isLit()
Return true if the LED is currently on.
|
void |
RgbPwmLed.off()
Turn all LEDs off.
|
void |
RgbLed.off()
Turn all LEDs off.
|
void |
RgbPwmLed.on()
Turn all LEDs on.
|
void |
RgbLed.on()
Turn all LEDs on.
|
GpioAnalogInputDeviceInterface |
McpAdc.provisionAnalogInputPin(int pinNumber)
Device Factory SPI method
|
GpioDigitalInputDeviceInterface |
MCP23017.provisionDigitalInputPin(int pinNumber,
GpioPullUpDown pud,
GpioEventTrigger trigger) |
GpioDigitalOutputDeviceInterface |
MCP23017.provisionDigitalOutputPin(int pinNumber,
boolean initialValue) |
PwmOutputDeviceInterface |
PCA9685.provisionPwmOutputPin(int channel,
float initialValue) |
void |
PwmLed.pulse()
Pulse the LED on and off indefinitely.
|
void |
PwmLed.pulse(float fadeTime,
int steps,
int iterations,
boolean background)
Pulse the LED on and off repeatedly.
|
void |
BMP180.readCalibrationData()
This method reads the calibration data common for the Temperature sensor
and Barometer sensor included in the BMP180
|
void |
TSL2561.setGain(int gain)
Adjusts the gain on the TSL2561 (adjusts the sensitivity to light)
|
void |
PCA9685.setServoPulseWidthMs(int channel,
double pulseWidthMs)
Set the pulse duration (micro-seconds)
E.g.
|
void |
MCP23017.setValue(int pinNumber,
boolean value) |
void |
PCA9685.setValue(int channel,
float value)
Set PWM output on a specific channel, value must be 0..1
|
void |
RgbLed.setValues(boolean red,
boolean green,
boolean blue)
Set the state of all LEDs.
|
void |
RgbPwmLed.setValues(float red,
float green,
float blue)
Set the value of all LEDs.
|
void |
RgbPwmLed.toggle()
Toggle the state of all LEDs.
|
void |
RgbLed.toggle()
Toggle the state of all LEDs.
|
Constructor and Description |
---|
BMP180(BMP180.BMPMode mode)
Constructor
|
BMP180(int controllerNumber,
int clockFrequency,
BMP180.BMPMode mode) |
Button(GpioDeviceFactoryInterface deviceFactory,
int pinNumber,
GpioPullUpDown pud) |
Button(int pinNumber)
Pull up / down configuration defaults to NONE.
|
Button(int pinNumber,
GpioPullUpDown pud) |
Buzzer(int pinNumber) |
Buzzer(int pinNumber,
boolean activeHigh) |
CamJamKitDualMotor() |
GP2Y0A21YK(AnalogInputDeviceFactoryInterface deviceFactory,
int pinNumber,
float vRef) |
GP2Y0A21YK(int pinNumber,
float vRef) |
HCSR04(int triggerGpioNum,
int echoGpioNum)
Initialise GPIO to echo and trigger pins
|
HTS221(int controller,
int address) |
LDR(AnalogInputDeviceFactoryInterface deviceFactory,
int pinNumber,
float vRef,
float r1) |
LDR(int pinNumber,
float vRef,
float r1) |
LED(GpioDeviceFactoryInterface deviceFactory,
int pinNumber) |
LED(int pinNumber) |
LED(int pinNumber,
boolean activeHigh) |
MCP23017() |
MCP23017(int interruptPinNumber) |
MCP23017(int interruptPinNumberA,
int interruptPinNumberB) |
MCP23017(int controller,
int address,
int interruptPinNumber) |
MCP23017(int controller,
int address,
int interruptPinNumberA,
int interruptPinNumberB) |
McpAdc(McpAdc.Type type,
int chipSelect) |
McpAdc(McpAdc.Type type,
int controller,
int chipSelect) |
PCA9685(int pwmFrequency) |
PCA9685(int controller,
int address,
int pwmFrequency) |
PwmLed(int pinNumber) |
PwmLed(int pinNumber,
float initialValue) |
PwmLed(PwmOutputDeviceFactoryInterface deviceFactory,
int pinNumber) |
PwmLed(PwmOutputDeviceFactoryInterface deviceFactory,
int pinNumber,
float initialValue) |
RgbLed(GpioDeviceFactoryInterface deviceFactory,
int redPin,
int greenPin,
int bluePin) |
RgbLed(int redPin,
int greenPin,
int bluePin) |
RgbPwmLed(int redPin,
int greenPin,
int bluePin) |
RgbPwmLed(PwmOutputDeviceFactoryInterface deviceFactory,
int redPin,
int greenPin,
int bluePin) |
RyanteckDualMotor() |
TMP36(AnalogInputDeviceFactoryInterface deviceFactory,
int pinNumber,
float vRef,
float tempOffset) |
TSL2561(int tsl2561Package) |
TSL2561(int controllerNumber,
int addressSize,
int clockFreq,
int tsl2561Package) |
Modifier and Type | Method and Description |
---|---|
void |
SpiDevice.close() |
void |
I2CDevice.close() |
void |
AnalogInputDevice.close() |
protected void |
PwmOutputDevice.fadeInOutLoop(float fadeTime,
int steps,
int iterations,
boolean background) |
float |
DistanceSensorInterface.getDistanceCm() |
float |
LuminositySensorInterface.getLuminosity() |
float |
PressureSensorInterface.getPressure() |
float |
AnalogInputDevice.getScaledValue()
Get the scaled value in the range 0..range (if unsigned) or -range..range
(if signed)
|
float |
TemperatureSensorInterface.getTemperature()
Get temperature in degrees celsius
|
float |
AnalogInputDevice.getUnscaledValue()
Get the unscaled normalised value in the range 0..1 (if unsigned) or
-1..1 (if signed)
|
float |
PwmOutputDevice.getValue()
Get the current PWM output value (0..1).
|
boolean |
DigitalInputDevice.getValue()
Read the current underlying state of the input pin.
|
boolean |
DigitalInputDevice.isActive()
Read the current on/off state for this device taking into account the
pull up / down configuration.
|
boolean |
PwmOutputDevice.isOn()
Get the device on / off status.
|
boolean |
DigitalOutputDevice.isOn()
Get the device on / off status.
|
void |
PwmOutputDevice.off()
Turn off the device (same as
setValue(0) ). |
void |
DigitalOutputDevice.off()
Turn off the device.
|
void |
PwmOutputDevice.on()
Turn on the device (same as
setValue(1) ). |
void |
DigitalOutputDevice.on()
Turn on the device.
|
protected void |
PwmOutputDevice.onOffLoop(float onTime,
float offTime,
int n,
boolean background) |
void |
DigitalOutputDevice.onOffLoop(float onTime,
float offTime,
int n,
boolean background)
Toggle the device on-off.
|
void |
I2CDevice.read(int address,
int subAddressSize,
ByteBuffer buffer) |
byte[] |
I2CDevice.read(int address,
int subAddressSize,
int count) |
boolean |
I2CDevice.readBit(int regAddr,
int bitNum)
Read a single bit from an 8-bit device register.
|
byte |
I2CDevice.readBits(int regAddr,
int bitStart,
int length)
Read multiple bits from an 8-bit device register.
|
byte |
I2CDevice.readByte() |
byte |
I2CDevice.readByte(int regAddr)
Read single byte from an 8-bit device register.
|
byte |
I2CDevice.readByte(int address,
int subAddressSize) |
byte[] |
I2CDevice.readBytes(int regAddr,
int length)
Read multiple bytes from an 8-bit device register.
|
short |
I2CDevice.readShort(int address) |
short |
I2CDevice.readShort(int address,
int subAddressSize) |
short |
I2CDevice.readShort(int address,
int subAddressSize,
ByteOrder order) |
short |
I2CDevice.readUByte(int regAddr) |
long |
I2CDevice.readUInt(int address,
int subAddressSize,
int bytes) |
long |
I2CDevice.readUInt(int address,
int subAddressSize,
int length,
ByteOrder order) |
int |
I2CDevice.readUShort(int address) |
int |
I2CDevice.readUShort(int address,
int subAddressSize) |
int |
I2CDevice.readUShort(int address,
int subAddressSize,
ByteOrder order) |
void |
DigitalOutputDevice.setOn(boolean on)
Turn the device on or off.
|
void |
PwmOutputDevice.setValue(float value)
Set the PWM output value (0..1).
|
protected void |
PwmOutputDevice.setValueInternal(float value) |
void |
DigitalOutputDevice.setValueUnsafe(boolean value)
Unsafe operation that has no synchronisation checks and doesn't compensate
for active low logic.
|
void |
PwmOutputDevice.toggle()
Toggle the state of the device (same as
setValue(1 - getvalue())
). |
void |
DigitalOutputDevice.toggle()
Toggle the state of the device.
|
void |
I2CDevice.write(int register,
int subAddressSize,
byte value)
Writes a single byte to a register
|
void |
I2CDevice.write(int register,
int subAddressSize,
byte[] value)
Writes a single byte to a register
|
ByteBuffer |
SpiDevice.writeAndRead(ByteBuffer out) |
void |
I2CDevice.writeBit(int regAddr,
int bitNum,
boolean value)
write a single bit in an 8-bit device register.
|
void |
I2CDevice.writeBit(int regAddr,
int bitNum,
int value)
write a single bit in an 8-bit device register.
|
void |
I2CDevice.writeBits(int regAddr,
int bitStart,
int length,
int data)
Write multiple bits in an 8-bit device register.
|
void |
I2CDevice.writeByte(int regAddr,
byte data)
Write single byte to an 8-bit device register.
|
void |
I2CDevice.writeByte(int regAddr,
int data)
Write single byte to an 8-bit device register.
|
void |
I2CDevice.writeBytes(int regAddr,
int length,
byte[] data)
Write multiple bytes to an 8-bit device register.
|
void |
I2CDevice.writeBytes(int regAddr,
int length,
byte[] data,
int offset) |
void |
I2CDevice.writeShort(int regAddr,
short val) |
void |
I2CDevice.writeWord(int regAddr,
int data)
Write single word to a 16-bit device register.
|
Constructor and Description |
---|
AnalogInputDevice(AnalogInputDeviceFactoryInterface deviceFactory,
int pinNumber,
float range) |
AnalogInputDevice(int pinNumber,
float range) |
DigitalInputDevice(GpioDeviceFactoryInterface deviceFactory,
int pinNumber,
GpioPullUpDown pud,
GpioEventTrigger trigger) |
DigitalInputDevice(int pinNumber) |
DigitalInputDevice(int pinNumber,
GpioPullUpDown pud,
GpioEventTrigger trigger) |
DigitalOutputDevice(GpioDeviceFactoryInterface deviceFactory,
int pinNumber,
boolean activeHigh,
boolean initialValue) |
DigitalOutputDevice(int pinNumber)
Defaults to active high logic, initial value is off.
|
DigitalOutputDevice(int pinNumber,
boolean activeHigh,
boolean initialValue) |
I2CDevice(I2CDeviceFactoryInterface deviceFactory,
int controller,
int address,
int addressSize,
int clockFrequency,
ByteOrder order) |
I2CDevice(int controller,
int address,
int addressSize,
int clockFrequency) |
I2CDevice(int controller,
int address,
int addressSize,
int clockFrequency,
ByteOrder order) |
PwmOutputDevice(int pinNumber) |
PwmOutputDevice(int pinNumber,
float initialValue) |
PwmOutputDevice(PwmOutputDeviceFactoryInterface pwmDeviceFactory,
int pinNumber,
float initialValue) |
SmoothedInputDevice(GpioDeviceFactoryInterface deviceFactory,
int pinNumber,
GpioPullUpDown pud,
int threshold,
int eventAge,
int eventDetectPeriod) |
SmoothedInputDevice(int pinNumber,
GpioPullUpDown pud,
int threshold,
int eventAge,
int eventDetectPeriod) |
SpiDevice(int chipSelect) |
SpiDevice(int controller,
int chipSelect) |
SpiDevice(int controller,
int chipSelect,
int frequency,
SpiClockMode mode) |
WaitableDigitalInputDevice(GpioDeviceFactoryInterface deviceFactory,
int pinNumber,
GpioPullUpDown pud,
GpioEventTrigger trigger) |
WaitableDigitalInputDevice(int pinNumber) |
WaitableDigitalInputDevice(int pinNumber,
GpioPullUpDown pud,
GpioEventTrigger trigger) |
Modifier and Type | Method and Description |
---|---|
org.apache.commons.math3.geometry.euclidean.threed.Vector3D |
ImuInterface.getAccelerometerData() |
org.apache.commons.math3.geometry.euclidean.threed.Vector3D |
ImuInterface.getCompassData() |
org.apache.commons.math3.geometry.euclidean.threed.Vector3D |
ImuInterface.getGyroData() |
ImuData |
ImuInterface.getImuData() |
Modifier and Type | Method and Description |
---|---|
void |
Motor.backward()
Backward at full speed
|
void |
DigitalMotor.backward() |
void |
MotorInterface.backward(float speed) |
void |
Motor.backward(float speed) |
void |
DualMotor.backward(float speed) |
void |
DualMotor.backwardLeft(float speed) |
void |
DualMotor.backwardRight(float speed) |
void |
Motor.forward()
Forward at full speed
|
void |
DigitalMotor.forward() |
void |
MotorInterface.forward(float speed) |
void |
Motor.forward(float speed) |
void |
DualMotor.forward(float speed) |
void |
DualMotor.forwardLeft(float speed) |
void |
DualMotor.forwardRight(float speed) |
float |
MotorInterface.getValue() |
float |
Motor.getValue()
Represents the speed of the motor as a floating point value between -1
(full speed backward) and 1 (full speed forward)
|
float |
DigitalMotor.getValue()
Represents the speed of the motor as a floating point value between -1
(full speed backward) and 1 (full speed forward)
|
float[] |
DualMotor.getValues() |
boolean |
MotorInterface.isActive() |
boolean |
Motor.isActive() |
boolean |
DigitalMotor.isActive() |
void |
MotorInterface.reverse() |
void |
MotorBase.reverse()
Reverse direction of the motors
|
void |
DualMotor.reverse() |
void |
DigitalMotor.reverse() |
void |
DualMotor.rotateLeft(float speed) |
void |
DualMotor.rotateRight(float speed) |
void |
MotorInterface.setValue(float value) |
void |
MotorBase.setValue(float value)
Set the speed of the motor as a floating point value between -1 (full
speed backward) and 1 (full speed forward)
|
void |
DualMotor.setValues(float leftValue,
float rightValue)
Set the speed and direction for both motors (clockwise / counter-clockwise)
|
void |
MotorInterface.stop() |
void |
Motor.stop() |
void |
DualMotor.stop() |
void |
DigitalMotor.stop() |
Constructor and Description |
---|
DigitalMotor(int forwardPin,
int backwardPin) |
Motor(int forwardPwmPin,
int backwardPwmPin) |
Motor(PwmOutputDeviceFactoryInterface deviceFactory,
int forwardPwmPin,
int backwardPwmPin) |
Modifier and Type | Method and Description |
---|---|
protected abstract void |
AbstractDevice.closeDevice() |
protected abstract GpioAnalogInputDeviceInterface |
BaseNativeDeviceFactory.createAnalogInputPin(String key,
int pinNumber) |
protected abstract GpioAnalogOutputDeviceInterface |
BaseNativeDeviceFactory.createAnalogOutputPin(String key,
int pinNumber) |
protected abstract GpioDigitalInputDeviceInterface |
BaseNativeDeviceFactory.createDigitalInputPin(String key,
int pinNumber,
GpioPullUpDown pud,
GpioEventTrigger trigger) |
protected abstract GpioDigitalOutputDeviceInterface |
BaseNativeDeviceFactory.createDigitalOutputPin(String key,
int pinNumber,
boolean initialValue) |
protected abstract I2CDeviceInterface |
BaseNativeDeviceFactory.createI2CDevice(String key,
int controller,
int address,
int addressSize,
int clockFrequency) |
protected abstract PwmOutputDeviceInterface |
BaseNativeDeviceFactory.createPwmOutputPin(String key,
int pinNumber,
float initialValue,
PwmType pwmType) |
protected abstract SpiDeviceInterface |
BaseNativeDeviceFactory.createSpiDevice(String key,
int controller,
int chipSelect,
int frequency,
SpiClockMode spiClockMode) |
float |
PwmOutputDeviceInterface.getValue()
Get the current PWM output value (0..1)
|
boolean |
GpioDigitalOutputDeviceInterface.getValue() |
boolean |
GpioDigitalInputDeviceInterface.getValue() |
float |
GpioAnalogInputDeviceInterface.getValue() |
GpioAnalogInputDeviceInterface |
BaseNativeDeviceFactory.provisionAnalogInputPin(int pinNumber) |
GpioAnalogInputDeviceInterface |
AnalogInputDeviceFactoryInterface.provisionAnalogInputPin(int pinNumber) |
GpioAnalogOutputDeviceInterface |
BaseNativeDeviceFactory.provisionAnalogOutputPin(int pinNumber) |
GpioAnalogOutputDeviceInterface |
AnalogOutputDeviceFactoryInterface.provisionAnalogOutputPin(int pinNumber) |
GpioDigitalInputDeviceInterface |
GpioDeviceFactoryInterface.provisionDigitalInputPin(int pinNumber,
GpioPullUpDown pud,
GpioEventTrigger trigger) |
GpioDigitalInputDeviceInterface |
BaseNativeDeviceFactory.provisionDigitalInputPin(int pinNumber,
GpioPullUpDown pud,
GpioEventTrigger trigger) |
GpioDigitalOutputDeviceInterface |
GpioDeviceFactoryInterface.provisionDigitalOutputPin(int pinNumber,
boolean initialValue) |
GpioDigitalOutputDeviceInterface |
BaseNativeDeviceFactory.provisionDigitalOutputPin(int pinNumber,
boolean initialValue) |
I2CDeviceInterface |
I2CDeviceFactoryInterface.provisionI2CDevice(int controller,
int address,
int addressSize,
int clockFrequency) |
I2CDeviceInterface |
BaseNativeDeviceFactory.provisionI2CDevice(int controller,
int address,
int addressSize,
int clockFrequency) |
PwmOutputDeviceInterface |
PwmOutputDeviceFactoryInterface.provisionPwmOutputPin(int pinNumber,
float initialValue) |
PwmOutputDeviceInterface |
BaseNativeDeviceFactory.provisionPwmOutputPin(int pinNumber,
float initialValue) |
SpiDeviceInterface |
SpiDeviceFactoryInterface.provisionSpiDevice(int controller,
int chipSelect,
int frequency,
SpiClockMode spiClockMode) |
SpiDeviceInterface |
BaseNativeDeviceFactory.provisionSpiDevice(int controller,
int chipSelect,
int frequency,
SpiClockMode spiClockMode) |
void |
I2CDeviceInterface.read(int register,
int subAddressSize,
ByteBuffer buffer) |
void |
GpioDigitalOutputDeviceInterface.setValue(boolean value) |
void |
PwmOutputDeviceInterface.setValue(float value)
Set the PWM output value (0..1)
|
void |
GpioAnalogOutputDeviceInterface.setValue(float value) |
void |
I2CDeviceInterface.write(int register,
int subAddressSize,
ByteBuffer buffer) |
ByteBuffer |
SpiDeviceInterface.writeAndRead(ByteBuffer out) |
Modifier and Type | Method and Description |
---|---|
void |
CamJamRobot.close() |
void |
CamJamLineFollower.close() |
Modifier and Type | Method and Description |
---|---|
void |
TB6612FNGMotor.backward(float speed) |
void |
PCF8591.close() |
void |
TB6612FNGMotor.forward(float speed) |
float |
HCSR04UsingWait.getDistanceCm()
Send a pulse to HCSR04 and compute the echo to obtain distance
|
float |
HCSR04UsingEvents.getDistanceCm()
Send a pulse to HCSR04 and compute the echo to obtain distance
|
float |
TB6612FNGMotor.getValue()
Represents the speed of the motor as a floating point value between -1
(full speed backward) and 1 (full speed forward)
|
float |
PCF8591.getValue(int adcPin)
Read the analog value in the range 0..1
|
boolean |
TB6612FNGMotor.isActive() |
GpioAnalogInputDeviceInterface |
PCF8591.provisionAnalogInputPin(int pinNumber) |
GpioAnalogOutputDeviceInterface |
PCF8591.provisionAnalogOutputPin(int pinNumber) |
void |
PCF8591.setValue(int dacPin,
float value)
Set the analog output value.
|
void |
TB6612FNGMotor.stop() |
Constructor and Description |
---|
DebouncedDigitalInputDevice(int pinNumber) |
DebouncedDigitalInputDevice(int pinNumber,
GpioPullUpDown pud,
float debounceTime) |
DebouncedDigitalInputDevice(int pinNumber,
GpioPullUpDown pud,
float debounceTime,
GpioEventTrigger trigger) |
HCSR04UsingEvents(int triggerGpioNum,
int echoGpioNum)
Initialise GPIO to echo and trigger pins
|
HCSR04UsingWait(int triggerGpioNum,
int echoGpioNum)
Initialise GPIO to echo and trigger pins
|
MotionSensor(int pinNumber)
Defaults 'threshold' to 1, eventAge t0 20ms and eventDetectPeriod to 10ms.
|
MotionSensor(int pinNumber,
GpioPullUpDown pud,
int threshold,
int eventAge,
int eventDetectPeriod) |
MotionSensor(int pinNumber,
int threshold,
int eventAge,
int eventDetectPeriod) |
Servo(int pinNumber,
int pwmFrequency,
float initialPulseWidthMs) |
Servo(PwmOutputDeviceFactoryInterface pwmDeviceFactory,
int pinNumber,
int pwmFrequency,
float initialPulseWidthMs) |
TB6612FNGDualMotorDriver(int leftMotorClockwiseControlPinNumber,
int leftMotorCounterClockwiseControlPinNumber,
int leftMotorPwmPinNumber,
int rightMotorClockwiseControlPinNumber,
int rightMotorCounterClockwiseControlPinNumber,
int rightMotorPwmPinNumber) |
TB6612FNGDualMotorDriver(PwmOutputDeviceFactoryInterface pwmDeviceFactory,
int leftMotorClockwiseControlPinNumber,
int leftMotorCounterClockwiseControlPinNumber,
int leftMotorPwmPinNumber,
int rightMotorClockwiseControlPinNumber,
int rightMotorCounterClockwiseControlPinNumber,
int rightMotorPwmPinNumber) |
Copyright © 2016 mattjlewis. All rights reserved.