* Move pca9555 files to central location * Get pca9555 boards compiling * Slight alignment of rules.mkpull/6590/head 0.6.456
@ -1,78 +0,0 @@ | |||
/* Copyright 2019 | |||
* | |||
* This program is free software: you can redistribute it and/or modify | |||
* it under the terms of the GNU General Public License as published by | |||
* the Free Software Foundation, either version 2 of the License, or | |||
* (at your option) any later version. | |||
* | |||
* This program is distributed in the hope that it will be useful, | |||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
* GNU General Public License for more details. | |||
* | |||
* You should have received a copy of the GNU General Public License | |||
* along with this program. If not, see <http://www.gnu.org/licenses/>. | |||
*/ | |||
#include "i2c_master.h" | |||
#include "pca9555.h" | |||
#include "debug.h" | |||
#define SLAVE_TO_ADDR(n) (n << 1) | |||
#define TIMEOUT 100 | |||
enum { | |||
CMD_INPUT_0 = 0, | |||
CMD_INPUT_1, | |||
CMD_OUTPUT_0, | |||
CMD_OUTPUT_1, | |||
CMD_INVERSION_0, | |||
CMD_INVERSION_1, | |||
CMD_CONFIG_0, | |||
CMD_CONFIG_1, | |||
}; | |||
void pca9555_init(uint8_t slave_addr) { | |||
static uint8_t s_init = 0; | |||
if (!s_init) { | |||
i2c_init(); | |||
s_init = 1; | |||
} | |||
// TODO: could check device connected | |||
// i2c_start(SLAVE_TO_ADDR(slave) | I2C_WRITE); | |||
// i2c_stop(); | |||
} | |||
void pca9555_set_config(uint8_t slave_addr, uint8_t port, uint8_t conf) { | |||
uint8_t addr = SLAVE_TO_ADDR(slave_addr); | |||
uint8_t cmd = port ? CMD_CONFIG_1 : CMD_CONFIG_0; | |||
i2c_status_t ret = i2c_writeReg(addr, cmd, &conf, sizeof(conf), TIMEOUT); | |||
if (ret != I2C_STATUS_SUCCESS) { | |||
print("pca9555_set_config::FAILED\n"); | |||
} | |||
} | |||
void pca9555_set_output(uint8_t slave_addr, uint8_t port, uint8_t conf) { | |||
uint8_t addr = SLAVE_TO_ADDR(slave_addr); | |||
uint8_t cmd = port ? CMD_OUTPUT_1 : CMD_OUTPUT_0; | |||
i2c_status_t ret = i2c_writeReg(addr, cmd, &conf, sizeof(conf), TIMEOUT); | |||
if (ret != I2C_STATUS_SUCCESS) { | |||
print("pca9555_set_output::FAILED\n"); | |||
} | |||
} | |||
uint8_t pca9555_readPins(uint8_t slave_addr, uint8_t port) { | |||
uint8_t addr = SLAVE_TO_ADDR(slave_addr); | |||
uint8_t cmd = port ? CMD_INPUT_1 : CMD_INPUT_0; | |||
uint8_t data = 0; | |||
i2c_status_t ret = i2c_readReg(addr, cmd, &data, sizeof(data), TIMEOUT); | |||
if (ret != I2C_STATUS_SUCCESS) { | |||
print("pca9555_readPins::FAILED\n"); | |||
} | |||
return data; | |||
} |
@ -1,55 +0,0 @@ | |||
/* Copyright 2019 | |||
* | |||
* This program is free software: you can redistribute it and/or modify | |||
* it under the terms of the GNU General Public License as published by | |||
* the Free Software Foundation, either version 2 of the License, or | |||
* (at your option) any later version. | |||
* | |||
* This program is distributed in the hope that it will be useful, | |||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
* GNU General Public License for more details. | |||
* | |||
* You should have received a copy of the GNU General Public License | |||
* along with this program. If not, see <http://www.gnu.org/licenses/>. | |||
*/ | |||
#pragma once | |||
/* | |||
PCA9555 | |||
,----------. | |||
SDA --| SDA P00 |-- P00 | |||
SCL --| SCL P01 |-- P01 | |||
INT --| INT P02 |-- P02 | |||
| P03 |-- P03 | |||
A0 --| A0 P04 |-- P04 | |||
A1 --| A1 P05 |-- P05 | |||
A2 --| A2 P06 |-- P06 | |||
| P07 |-- P07 | |||
| | | |||
| P10 |-- P10 | |||
| P11 |-- P11 | |||
| P12 |-- P12 | |||
| P13 |-- P13 | |||
| P14 |-- P14 | |||
| P15 |-- P15 | |||
| P16 |-- P16 | |||
| P17 |-- P17 | |||
`----------' | |||
*/ | |||
#define PCA9555_PORT0 0 | |||
#define PCA9555_PORT1 1 | |||
#define ALL_OUTPUT 0 | |||
#define ALL_INPUT 0xFF | |||
#define ALL_LOW 0 | |||
#define ALL_HIGH 0xFF | |||
void pca9555_init(uint8_t slave_addr); | |||
void pca9555_set_config(uint8_t slave_addr, uint8_t port, uint8_t conf); | |||
void pca9555_set_output(uint8_t slave_addr, uint8_t port, uint8_t conf); | |||
uint8_t pca9555_readPins(uint8_t slave_addr, uint8_t port); |
@ -1,78 +0,0 @@ | |||
/* Copyright 2019 | |||
* | |||
* This program is free software: you can redistribute it and/or modify | |||
* it under the terms of the GNU General Public License as published by | |||
* the Free Software Foundation, either version 2 of the License, or | |||
* (at your option) any later version. | |||
* | |||
* This program is distributed in the hope that it will be useful, | |||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
* GNU General Public License for more details. | |||
* | |||
* You should have received a copy of the GNU General Public License | |||
* along with this program. If not, see <http://www.gnu.org/licenses/>. | |||
*/ | |||
#include "i2c_master.h" | |||
#include "pca9555.h" | |||
#include "debug.h" | |||
#define SLAVE_TO_ADDR(n) (n << 1) | |||
#define TIMEOUT 100 | |||
enum { | |||
CMD_INPUT_0 = 0, | |||
CMD_INPUT_1, | |||
CMD_OUTPUT_0, | |||
CMD_OUTPUT_1, | |||
CMD_INVERSION_0, | |||
CMD_INVERSION_1, | |||
CMD_CONFIG_0, | |||
CMD_CONFIG_1, | |||
}; | |||
void pca9555_init(uint8_t slave_addr) { | |||
static uint8_t s_init = 0; | |||
if (!s_init) { | |||
i2c_init(); | |||
s_init = 1; | |||
} | |||
// TODO: could check device connected | |||
// i2c_start(SLAVE_TO_ADDR(slave) | I2C_WRITE); | |||
// i2c_stop(); | |||
} | |||
void pca9555_set_config(uint8_t slave_addr, uint8_t port, uint8_t conf) { | |||
uint8_t addr = SLAVE_TO_ADDR(slave_addr); | |||
uint8_t cmd = port ? CMD_CONFIG_1 : CMD_CONFIG_0; | |||
i2c_status_t ret = i2c_writeReg(addr, cmd, &conf, sizeof(conf), TIMEOUT); | |||
if (ret != I2C_STATUS_SUCCESS) { | |||
print("pca9555_set_config::FAILED\n"); | |||
} | |||
} | |||
void pca9555_set_output(uint8_t slave_addr, uint8_t port, uint8_t conf) { | |||
uint8_t addr = SLAVE_TO_ADDR(slave_addr); | |||
uint8_t cmd = port ? CMD_OUTPUT_1 : CMD_OUTPUT_0; | |||
i2c_status_t ret = i2c_writeReg(addr, cmd, &conf, sizeof(conf), TIMEOUT); | |||
if (ret != I2C_STATUS_SUCCESS) { | |||
print("pca9555_set_output::FAILED\n"); | |||
} | |||
} | |||
uint8_t pca9555_readPins(uint8_t slave_addr, uint8_t port) { | |||
uint8_t addr = SLAVE_TO_ADDR(slave_addr); | |||
uint8_t cmd = port ? CMD_INPUT_1 : CMD_INPUT_0; | |||
uint8_t data = 0; | |||
i2c_status_t ret = i2c_readReg(addr, cmd, &data, sizeof(data), TIMEOUT); | |||
if (ret != I2C_STATUS_SUCCESS) { | |||
print("pca9555_readPins::FAILED\n"); | |||
} | |||
return data; | |||
} |
@ -1,55 +0,0 @@ | |||
/* Copyright 2019 | |||
* | |||
* This program is free software: you can redistribute it and/or modify | |||
* it under the terms of the GNU General Public License as published by | |||
* the Free Software Foundation, either version 2 of the License, or | |||
* (at your option) any later version. | |||
* | |||
* This program is distributed in the hope that it will be useful, | |||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
* GNU General Public License for more details. | |||
* | |||
* You should have received a copy of the GNU General Public License | |||
* along with this program. If not, see <http://www.gnu.org/licenses/>. | |||
*/ | |||
#pragma once | |||
/* | |||
PCA9555 | |||
,----------. | |||
SDA --| SDA P00 |-- P00 | |||
SCL --| SCL P01 |-- P01 | |||
INT --| INT P02 |-- P02 | |||
| P03 |-- P03 | |||
A0 --| A0 P04 |-- P04 | |||
A1 --| A1 P05 |-- P05 | |||
A2 --| A2 P06 |-- P06 | |||
| P07 |-- P07 | |||
| | | |||
| P10 |-- P10 | |||
| P11 |-- P11 | |||
| P12 |-- P12 | |||
| P13 |-- P13 | |||
| P14 |-- P14 | |||
| P15 |-- P15 | |||
| P16 |-- P16 | |||
| P17 |-- P17 | |||
`----------' | |||
*/ | |||
#define PCA9555_PORT0 0 | |||
#define PCA9555_PORT1 1 | |||
#define ALL_OUTPUT 0 | |||
#define ALL_INPUT 0xFF | |||
#define ALL_LOW 0 | |||
#define ALL_HIGH 0xFF | |||
void pca9555_init(uint8_t slave_addr); | |||
void pca9555_set_config(uint8_t slave_addr, uint8_t port, uint8_t conf); | |||
void pca9555_set_output(uint8_t slave_addr, uint8_t port, uint8_t conf); | |||
uint8_t pca9555_readPins(uint8_t slave_addr, uint8_t port); |