This commit is contained in:
Christian L. V. Madsen
2024-08-17 13:42:34 +02:00
parent ed36495f58
commit a13b50e47f
2 changed files with 69 additions and 3 deletions

View File

@@ -5,8 +5,21 @@
* Author: Chris
*/
#include "cm_pcf8574_driver.h"
#include <stddef.h>
int cm_pcf8574_RegTransEvt(cm_pcf8574_t inst, void i2c_inst, setGet_I2C_Event_fpt i2c_transfer_evt){
#define NUM_OF_RETRYS 3
static int checkInst(cm_pcf8574_t *inst){
if(inst->i2c_transfer_evt == NULL)return CM_PCF8574_NOK;
if(inst->i2c_inst == NULL)return CM_PCF8574_NOK;
return CM_PCF8574_OK;
}
int cm_pcf8574_RegTransEvt(cm_pcf8574_t *inst, void *i2c_inst, setGet_I2C_Event_fpt i2c_transfer_evt){
if(inst == NULL) return CM_PCF8574_NOK;
@@ -19,3 +32,47 @@ int cm_pcf8574_RegTransEvt(cm_pcf8574_t inst, void i2c_inst, setGet_I2C_Event_fp
}
/*// No need to do this.. because I2C driver does this for us..
int cm_pcf8574_IsDeviceActive(cm_pcf8574_t *inst){
if(checkInst(inst)) return CM_PCF8574_NOK;
uint8_t tx_buf[1] = {0};
uint8_t ret = 0;
for(uint8_t retry_ctr = 0; retry_ctr < NUM_OF_RETRYS; retry_ctr++){
ret = inst->i2c_transfer_evt(inst->i2c_inst, (uint8_t*)&tx_buf, 2, CM_PCF8574_I2C_GET);
if(ret == 0)return 0;
}
return ret;
}*/
int cm_pcf8574_SetPort(cm_pcf8574_t *inst, uint8_t port_val){
if(checkInst(inst)) return CM_PCF8574_NOK;
//inst->Port_1 = (cm_io_port_t)port_val;
return inst->i2c_transfer_evt(inst->i2c_inst, (uint8_t*)&port_val, sizeof(inst->Port_1), CM_PCF8574_I2C_SET);
return 0;
}
// ret = inst->i2c_transfer_evt(inst->i2c_transfer_inst, (uint8_t*)&tx_buf, 2, LTR390_I2C_SET);
int cm_pcf8574_Init(cm_pcf8574_t *inst){
if(checkInst(inst)) return CM_PCF8574_NOK;
//return cm_pcf8574_IsDeviceActive(inst);
return 0;
}

View File

@@ -8,11 +8,19 @@
#ifndef PCF8574_IO_EXPANDER_CM_PCF8574_DRIVER_H_
#define PCF8574_IO_EXPANDER_CM_PCF8574_DRIVER_H_
#include "stdint.h"
enum{
CM_PCF8574_OK = 0,
CM_PCF8574_NOK
};
enum{
CM_PCF8574_I2C_GET = 0,
CM_PCF8574_I2C_SET = 1,
};
typedef int (*setGet_I2C_Event_fpt)(void *inst, uint8_t *data, uint32_t len, uint8_t set_get);
@@ -38,7 +46,8 @@ typedef struct{
}cm_pcf8574_t;
int cm_pcf8574_RegTransEvt(cm_pcf8574_t inst, void i2c_inst, setGet_I2C_Event_fpt i2c_transfer_evt);
int cm_pcf8574_init(cm_pcf8574_t *inst);
int cm_pcf8574_SetPort(cm_pcf8574_t *inst, uint8_t port_val);
int cm_pcf8574_RegTransEvt(cm_pcf8574_t *inst, void *i2c_inst, setGet_I2C_Event_fpt i2c_transfer_evt);
int cm_pcf8574_Init(cm_pcf8574_t *inst);
#endif /* PCF8574_IO_EXPANDER_CM_PCF8574_DRIVER_H_ */