123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245 |
- #include "vl6180x_i2c.h"
- #ifndef I2C_BUFFER_CONFIG
- #error "I2C_BUFFER_CONFIG not defined"
- #endif
- #if I2C_BUFFER_CONFIG == 0
-
- uint8_t i2c_global_buffer[VL6180x_MAX_I2C_XFER_SIZE];
- #define DECL_I2C_BUFFER
- #define VL6180x_GetI2cBuffer(dev, n_byte) i2c_global_buffer
- #elif I2C_BUFFER_CONFIG == 1
-
- #define DECL_I2C_BUFFER uint8_t LocBuffer[VL6180x_MAX_I2C_XFER_SIZE];
- #define VL6180x_GetI2cBuffer(dev, n_byte) LocBuffer
- #elif I2C_BUFFER_CONFIG == 2
-
- #define DECL_I2C_BUFFER
- #else
- #error "invalid I2C_BUFFER_CONFIG "
- #endif
- int VL6180x_WrByte(VL6180xDev_t dev, uint16_t index, uint8_t data){
- int status;
- uint8_t *buffer;
- DECL_I2C_BUFFER
- VL6180x_I2C_USER_VAR
- VL6180x_GetI2CAccess(dev);
- buffer=VL6180x_GetI2cBuffer(dev,3);
- buffer[0]=index>>8;
- buffer[1]=index&0xFF;
- buffer[2]=data;
- status=VL6180x_I2CWrite(dev, buffer,(uint8_t)3);
- VL6180x_DoneI2CAcces(dev);
- return status;
- }
- int VL6180x_WrWord(VL6180xDev_t dev, uint16_t index, uint16_t data){
- int status;
- DECL_I2C_BUFFER
- uint8_t *buffer;
- VL6180x_I2C_USER_VAR
- VL6180x_GetI2CAccess(dev);
- buffer=VL6180x_GetI2cBuffer(dev,4);
- buffer[0]=index>>8;
- buffer[1]=index&0xFF;
- buffer[2]=data>>8;
- buffer[3]=data&0xFF;
- status=VL6180x_I2CWrite(dev, buffer,(uint8_t)4);
- VL6180x_DoneI2CAcces(dev);
- return status;
- }
- int VL6180x_WrDWord(VL6180xDev_t dev, uint16_t index, uint32_t data){
- VL6180x_I2C_USER_VAR
- DECL_I2C_BUFFER
- int status;
- uint8_t *buffer;
- VL6180x_GetI2CAccess(dev);
- buffer=VL6180x_GetI2cBuffer(dev,6);
- buffer[0]=index>>8;
- buffer[1]=index&0xFF;
- buffer[2]=data>>24;
- buffer[3]=(data>>16)&0xFF;
- buffer[4]=(data>>8)&0xFF;;
- buffer[5]=data&0xFF;
- status=VL6180x_I2CWrite(dev, buffer,(uint8_t)6);
- VL6180x_DoneI2CAcces(dev);
- return status;
- }
- int VL6180x_UpdateByte(VL6180xDev_t dev, uint16_t index, uint8_t AndData, uint8_t OrData){
- VL6180x_I2C_USER_VAR
- int status;
- uint8_t *buffer;
- DECL_I2C_BUFFER
- VL6180x_GetI2CAccess(dev);
- buffer=VL6180x_GetI2cBuffer(dev,3);
- buffer[0]=index>>8;
- buffer[1]=index&0xFF;
- status=VL6180x_I2CWrite(dev, (uint8_t *)buffer,(uint8_t)2);
- if( !status ){
-
- status=VL6180x_I2CRead(dev, &buffer[2],1);
- if( !status ){
- buffer[2]=(buffer[2]&AndData)|OrData;
- status=VL6180x_I2CWrite(dev, buffer, (uint8_t)3);
- }
- }
- VL6180x_DoneI2CAcces(dev);
- return status;
- }
- int VL6180x_RdByte(VL6180xDev_t dev, uint16_t index, uint8_t *data){
- VL6180x_I2C_USER_VAR
- int status;
- uint8_t *buffer;
- DECL_I2C_BUFFER
- VL6180x_GetI2CAccess(dev);
- buffer=VL6180x_GetI2cBuffer(dev,2);
- buffer[0]=index>>8;
- buffer[1]=index&0xFF;
- status=VL6180x_I2CWrite(dev, buffer, (uint8_t)2);
- if( !status ){
- status=VL6180x_I2CRead(dev, buffer,1);
- if( !status ){
- *data=buffer[0];
- }
- }
- VL6180x_DoneI2CAcces(dev);
- return status;
- }
- int VL6180x_RdWord(VL6180xDev_t dev, uint16_t index, uint16_t *data){
- VL6180x_I2C_USER_VAR
- int status;
- uint8_t *buffer;
- DECL_I2C_BUFFER
- VL6180x_GetI2CAccess(dev);
- buffer=VL6180x_GetI2cBuffer(dev,2);
- buffer[0]=index>>8;
- buffer[1]=index&0xFF;
- status=VL6180x_I2CWrite(dev, buffer, (uint8_t)2);
- if( !status){
- status=VL6180x_I2CRead(dev, buffer,2);
- if( !status ){
-
- *data=((uint16_t)buffer[0]<<8)|(uint16_t)buffer[1];
- }
- }
- VL6180x_DoneI2CAcces(dev);
- return status;
- }
- int VL6180x_RdDWord(VL6180xDev_t dev, uint16_t index, uint32_t *data){
- VL6180x_I2C_USER_VAR
- int status;
- uint8_t *buffer;
- DECL_I2C_BUFFER
- VL6180x_GetI2CAccess(dev);
- buffer=VL6180x_GetI2cBuffer(dev,4);
- buffer[0]=index>>8;
- buffer[1]=index&0xFF;
- status=VL6180x_I2CWrite(dev, (uint8_t *) buffer, (uint8_t)2);
- if( !status ){
- status=VL6180x_I2CRead(dev, buffer,4);
- if( !status ){
-
- *data=((uint32_t)buffer[0]<<24)|((uint32_t)buffer[1]<<16)|((uint32_t)buffer[2]<<8)|((uint32_t)buffer[3]);
- }
- }
- VL6180x_DoneI2CAcces(dev);
- return status;
- }
- int VL6180x_RdMulti(VL6180xDev_t dev, uint16_t index, uint8_t *data, int nData){
- VL6180x_I2C_USER_VAR
- int status;
- uint8_t *buffer;
- DECL_I2C_BUFFER
- VL6180x_GetI2CAccess(dev);
- buffer=VL6180x_GetI2cBuffer(dev,2);
- buffer[0]=index>>8;
- buffer[1]=index&0xFF;
- status=VL6180x_I2CWrite(dev, (uint8_t *) buffer, (uint8_t)2);
- if( !status ){
- status=VL6180x_I2CRead(dev, data, nData);
- }
- VL6180x_DoneI2CAcces(dev);
- return status;
- }
|