si1147_i2c.c
Go to the documentation of this file.00001
00018 #include "i2cdrv.h"
00019 #include "si1147_i2c.h"
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00047 int Si1147_Read_Register (I2C_TypeDef *i2c,uint8_t addr, uint8_t reg, uint8_t *data)
00048 {
00049 I2C_TransferSeq_TypeDef seq;
00050 I2C_TransferReturn_TypeDef ret;
00051 uint8_t i2c_write_data[1];
00052
00053
00054 (void) i2c;
00055
00056 seq.addr = addr;
00057 seq.flags = I2C_FLAG_WRITE_READ;
00058
00059 i2c_write_data[0] = reg;
00060 seq.buf[0].data = i2c_write_data;
00061 seq.buf[0].len = 1;
00062
00063 seq.buf[1].data = data;
00064 seq.buf[1].len = 1;
00065
00066 ret = I2CDRV_Transfer(&seq);
00067 if (ret != i2cTransferDone)
00068 {
00069 *data = 0xff;
00070 return((int) ret);
00071 }
00072
00073 return((int) 1);
00074 }
00075
00076
00091 int Si1147_Write_Register (I2C_TypeDef *i2c,uint8_t addr, uint8_t reg, uint8_t data)
00092 {
00093 I2C_TransferSeq_TypeDef seq;
00094 I2C_TransferReturn_TypeDef ret;
00095 uint8_t i2c_write_data[2];
00096 uint8_t i2c_read_data[1];
00097
00098 (void) i2c;
00099
00100 seq.addr = addr;
00101 seq.flags = I2C_FLAG_WRITE;
00102
00103 i2c_write_data[0] = reg;
00104 i2c_write_data[1] = data;
00105 seq.buf[0].data = i2c_write_data;
00106 seq.buf[0].len = 2;
00107 seq.buf[1].data = i2c_read_data;
00108 seq.buf[1].len = 0;
00109
00110 ret = I2CDRV_Transfer(&seq);
00111 if (ret != i2cTransferDone)
00112 {
00113 return((int) ret);
00114 }
00115
00116 return((int) 0);
00117 }
00118
00119
00136 int Si1147_Write_Block_Register (I2C_TypeDef *i2c,uint8_t addr, uint8_t reg, uint8_t length, uint8_t const *data)
00137 {
00138 I2C_TransferSeq_TypeDef seq;
00139 I2C_TransferReturn_TypeDef ret;
00140 uint8_t i2c_write_data[10];
00141 uint8_t i2c_read_data[1];
00142 int i;
00143
00144 (void) i2c;
00145
00146 seq.addr = addr;
00147 seq.flags = I2C_FLAG_WRITE;
00148
00149 i2c_write_data[0] = reg;
00150 for (i=0; i<length;i++)
00151 {
00152 i2c_write_data[i+1] = data[i];
00153 }
00154 seq.buf[0].data = i2c_write_data;
00155 seq.buf[0].len = 1+length;
00156 seq.buf[1].data = i2c_read_data;
00157 seq.buf[1].len = 0;
00158
00159 ret = I2CDRV_Transfer(&seq);
00160 if (ret != i2cTransferDone)
00161 {
00162 return((int) ret);
00163 }
00164
00165 return((int) 0);
00166 }
00167
00168
00185 int Si1147_Read_Block_Register (I2C_TypeDef *i2c,uint8_t addr, uint8_t reg, uint8_t length, uint8_t *data)
00186 {
00187 I2C_TransferSeq_TypeDef seq;
00188 I2C_TransferReturn_TypeDef ret;
00189 uint8_t i2c_write_data[1];
00190
00191 (void) i2c;
00192
00193 seq.addr = addr;
00194 seq.flags = I2C_FLAG_WRITE_READ;
00195
00196 i2c_write_data[0] = reg;
00197 seq.buf[0].data = i2c_write_data;
00198 seq.buf[0].len = 1;
00199
00200 seq.buf[1].data = data;
00201 seq.buf[1].len = length;
00202 ret = I2CDRV_Transfer(&seq);
00203 if (ret != i2cTransferDone)
00204 {
00205 return((int) ret);
00206 }
00207
00208 return((int) length);
00209 }
00210