76 lines
1.2 KiB
C
76 lines
1.2 KiB
C
|
#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;
|
||
|
};
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|