58 if (data > 2 || data < 1) {
109 bool read = device_address_8 & 254;
110 uint8_t device_address = device_address_8 >> 1;
148 _i2c->setTimeout(1000);
153 #if (I2C_NUMBER_OF_INTERFACES > 1)
158 _i2c->setTimeout(1000);
164 #if (I2C_NUMBER_OF_INTERFACES > 2)
169 _i2c->setTimeout(1000);
181void Interface_i2c::write(uint8_t device_address, uint8_t register_address, uint8_t data_ls, uint8_t data_ms)
volatile {
185 _i2c->beginTransmission(device_address);
188 _i2c->write(data_ls);
190 result =
_i2c->endTransmission(
true);
212void Interface_i2c::read(uint8_t device_address, uint8_t register_address, uint8_t number_of_bytes)
volatile{
214 if (number_of_bytes > 32) {
226 if (byte_mulitply != 0) {
227 _i2c->beginTransmission(device_address);
228 _i2c->write(register_address);
229 result =
_i2c->endTransmission(
false);
238 else byte_mulitply = 1;
239 result =
_i2c->requestFrom(device_address,number_of_bytes*byte_mulitply,
true);
241 if(result!=byte_mulitply){
248 if (
_i2c->available() == number_of_bytes*byte_mulitply) {
249 uint8_t position = 0;
250 for (position = 0; position < number_of_bytes; position++){
254 data_ls =
_i2c->read();
255 data_ms =
_i2c->read();
258 data_ms =
_i2c->read();
259 data_ls =
_i2c->read();
262 data_ls =
_i2c->read();
285 if (byte_mulitply != 0) {
286 _i2c->beginTransmission(device_address);
287 _i2c->write(register_address);
288 result =
_i2c->endTransmission();
297 else byte_mulitply = 1;
298 result =
_i2c->requestFrom(device_address,byte_mulitply,
true);
300 if(result!=byte_mulitply){
307 if (
_i2c->available() == byte_mulitply) {
310 data |= (
_i2c->read()<<8);
313 data = (
_i2c->read()<<8);
314 data |=
_i2c->read();
Interface_i2c(uint8_t id, uint32_t freqency=100000U)
static volatile uint8_t width[I2C_NUMBER_OF_INTERFACES]
void read(uint8_t device_address, uint8_t register_address, uint8_t number_of_bytes) volatile
uint16_t read_return(uint8_t device_address, uint8_t register_address) volatile
static volatile bool active[I2C_NUMBER_OF_INTERFACES]
static volatile uint8_t byte_order[I2C_NUMBER_OF_INTERFACES]
static void configure(uint8_t id, uint8_t config, uint8_t data)
static volatile Interface_i2c * inst[I2C_NUMBER_OF_INTERFACES]
void write(uint8_t device_address, uint8_t register_address, uint8_t data_ms, uint8_t data_ls) volatile
static void process_packet(uint8_t id, uint8_t device_address, uint8_t register_address, uint8_t data_ms, uint8_t data_ls)
static volatile uint32_t frequency[I2C_NUMBER_OF_INTERFACES]
void error_message(uint8_t error_header, uint8_t source_header, uint32_t value, uint8_t sub_source_header)
void send_data_i2c(uint8_t header, uint8_t device_address_8, uint8_t register_address, uint8_t value_ms, uint8_t value_ls, bool is_confirmation)
void send_config(uint8_t header, uint8_t config_header, uint8_t value)
@ OUT_ERROR_INTERFACE_NOT_ACTIVE
@ OUT_ERROR_UNKNOWN_CONFIGURATION
@ OUT_ERROR_PERIPHERAL_INTERFACE_NOT_READY
@ OUT_ERROR_CONFIGURATION_OUT_OF_BOUNDS
bool reserve_output_pin(uint8_t id, uint8_t from_instruction)
bool reserve_input_pin(uint8_t id, uint8_t from_instruction)
#define I2C_NUMBER_OF_INTERFACES