Untitled

Pasted by zyp on Sat Apr 2 16:20:31 2011 UTC as C++
I2CConfig i2cconfig = {
	opmodeI2C,
	100000,
	stdDutyCycle,
	0,
	0
};

void cba(I2CDriver* i2cp, I2CSlaveConfig* i2cscfg) {
	if(i2cp->id_slave_config->restart) {
		i2cp->id_slave_config->restart = FALSE;
		i2cMasterReceive(i2cp, i2cscfg);
	} else {
		i2cMasterStop(i2cp);
	}
}

void cbe(I2CDriver* i2cp, I2CSlaveConfig* i2cscfg) {
	while(1);
}

i2cblock_t rxdata[6];
i2cblock_t txdata[2] = {0x1d};

I2CSlaveConfig i2c_gyro = {
	cba,
	
	cbe,
	
	rxdata,
	6,
	6,
	0,
	
	txdata,
	2,
	1,
	0,
	
	0x68,
	TRUE
};

int main(void) {
	halInit();
	chSysInit();
	
	led_thread.start();
	
	i2cStart(&I2CD2, &i2cconfig);
	while(I2CD2.id_state != I2C_READY) {
		chThdSleepMilliseconds(1);
	}
	
	palSetPadMode(GPIOB, 10, PAL_MODE_STM32_ALTERNATE_OPENDRAIN);
	palSetPadMode(GPIOB, 11, PAL_MODE_STM32_ALTERNATE_OPENDRAIN);
	
	i2cMasterTransmit(&I2CD2, &i2c_gyro);

	...
}