avr-fw-modules/core/src/i2cee_identify.c

76 lines
1.2 KiB
C
Executable File

#include <sys/i2ceeprom.h>
#include <sys/assert.h>
#include <stdint.h>
#include <rb2/regbus.h>
#include <hwo/i2c.h>
struct _i2cee i2cee;
int32_t eeptr;
int32_t eevalue;
int32_t eestatus;
void i2cee_identify(void){
uint8_t i;
uint8_t buffer[4];
uint16_t result;
for (i=0;i<8;i++){
buffer[0] = 0x00;
buffer[1] = 0x00;
result = (i2c_transfer( 0xA0 + (i<<1), buffer, 2 ));
if (result == 2){
i2cee.emask |= (1<<i);
i2cee.size += 1L<<16;
};
};
};
uint8_t i2cee_register_proc(RB2_REGISTER *reg,RB2_TELEGRAM *telegram){
if (telegram->flags.read){
switch (telegram->regno){
case 0x9000:
telegram->i32 = i2cee_size();
return 0;
case 0x9001:
telegram->i32 = i2cee.emask;
return 0;
case 0x9010:
telegram->i32 = eeptr;
return 0;
case 0x9011:
telegram->i32 = eevalue;
return 0;
case 0x9012:
telegram->i32 = eestatus;
return 0;
};
} else {
switch (telegram->regno){
case 0x9010:
eeptr = telegram->i32;
i2cee_load(eeptr,&eevalue,4);
return 0;
case 0x9011:
eevalue = telegram->i32;
eestatus = i2cee_save(eeptr,&eevalue,4);
return 0;
case 0x9012:
return 0;
};
};
return -1;
};