160 lines
3.6 KiB
Java
160 lines
3.6 KiB
Java
package SBC;
|
|
|
|
import lombok.Getter;
|
|
|
|
@SuppressWarnings("unused")
|
|
public class PCF8574 extends I2C_Device{
|
|
|
|
private byte data = 0x00;
|
|
private final @Getter String[] pinNames = new String[8];
|
|
|
|
/**
|
|
* Create new PCF8574
|
|
* @param bus_number I2C Bus Number
|
|
* @param address PCF8574 Address
|
|
*/
|
|
public PCF8574(int bus_number, int address){
|
|
super(bus_number, address);
|
|
for(int i=0; i<8; i++){
|
|
pinNames[i] = i+"";
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Set new Pin Name
|
|
* @param pin pin number, 0-7
|
|
* @param name new name
|
|
*/
|
|
public void setPinName(int pin, String name){
|
|
if (pin<0 || pin>7) return;
|
|
pinNames[pin] = name;
|
|
}
|
|
|
|
/**
|
|
* Get Pin Name
|
|
* @param pin pin number, 0-7
|
|
* @return pin name, or null if not available
|
|
*/
|
|
public String getPinName(int pin){
|
|
if (pin<0 || pin>7) return null;
|
|
return pinNames[pin];
|
|
}
|
|
|
|
/**
|
|
* Set All Pins High
|
|
* @return true if successful
|
|
*/
|
|
public boolean AllOn(){
|
|
if (super.isOpened()){
|
|
if (super.WriteBytes(new byte[]{(byte)0xFF})>0){
|
|
data = (byte)0xFF;
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* Set all Pins Low
|
|
* @return true if successful
|
|
*/
|
|
public boolean AllOff(){
|
|
if (super.isOpened()){
|
|
if (super.WriteBytes(new byte[]{(byte)0x00})>0){
|
|
data = (byte)0x00;
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* Set Pin by Pin Name
|
|
* @param pinName pin name
|
|
* @return true if successful
|
|
*/
|
|
public boolean SetPin(String pinName){
|
|
for(int i=0; i<8; i++){
|
|
if (pinNames[i].equals(pinName)){
|
|
return SetPin(i);
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
* Set Pin High
|
|
* @param pin pin number 0-7
|
|
* @return true if successful
|
|
*/
|
|
public boolean SetPin(int pin){
|
|
if (pin<0 || pin>7) return false;
|
|
if (super.isOpened()){
|
|
byte temp = (byte) (data | (1<<pin));
|
|
return super.WriteBytes(new byte[]{temp})>0;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* Clear Pin by Pin Name
|
|
* @param pinName pin name
|
|
* @return true if successful
|
|
*/
|
|
public boolean ClearPin(String pinName){
|
|
for(int i=0; i<8; i++){
|
|
if (pinNames[i].equals(pinName)){
|
|
return ClearPin(i);
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* Set Pin Low
|
|
* @param pin pin number 0-7
|
|
* @return true if successful
|
|
*/
|
|
public boolean ClearPin(int pin){
|
|
if (pin<0 || pin>7) return false;
|
|
if (super.isOpened()){
|
|
byte temp = (byte) (data & ~(1<<pin));
|
|
return super.WriteBytes(new byte[]{temp})>0;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
|
|
/**
|
|
* Read Pin by Pin Name
|
|
* @param pinName pin name
|
|
* @return 1 if high, 0 if low, -1 if error
|
|
*/
|
|
public int ReadPin(String pinName){
|
|
for(int i=0; i<8; i++){
|
|
if (pinNames[i].equals(pinName)){
|
|
return ReadPin(i);
|
|
}
|
|
}
|
|
return -1;
|
|
}
|
|
|
|
|
|
/**
|
|
* Read Pin
|
|
* @param pin pin to read, 0 - 7
|
|
* @return 1 if high, 0 if low, -1 if error
|
|
*/
|
|
public int ReadPin(int pin){
|
|
if (pin<0 || pin>7) return -1;
|
|
if (super.isOpened()){
|
|
byte[] buffer = super.ReadBytes(1);
|
|
byte masker = (byte) (1<<pin);
|
|
return (buffer[0] & masker) > 0 ? 1 : 0;
|
|
}
|
|
return -1;
|
|
}
|
|
}
|