17.8.2.2.1 Code

The following must be added to the user application:

A sample buffer to write from, a reversed buffer to write from and length of buffers.
#define DATA_LENGTH 8

static uint8_t wr_buffer[DATA_LENGTH] = {
    0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07
};

static uint8_t wr_buffer_reversed[DATA_LENGTH] = {
    0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00
};

static uint8_t rd_buffer[DATA_LENGTH];
Address of slave:
#define SLAVE_ADDRESS 0x12
Globally accessible module structure:
struct i2c_master_module i2c_master_instance;
Globally accessible packet:
struct i2c_master_packet wr_packet;
struct i2c_master_packet rd_packet;
Function for setting up module:
void configure_i2c(void)
{
    /* Initialize config structure and software module */
    struct i2c_master_config config_i2c_master;
    i2c_master_get_config_defaults(&config_i2c_master);

    /* Change buffer timeout to something longer */
    config_i2c_master.buffer_timeout = 65535;

    /* Initialize and enable device with config */
    while(i2c_master_init(&i2c_master_instance, CONF_I2C_MASTER_MODULE, &config_i2c_master)     \
            != STATUS_OK);

    i2c_master_enable(&i2c_master_instance);
}
Callback function for write complete:
void i2c_write_complete_callback(
        struct i2c_master_module *const module)
{
    /* Initiate new packet read */
    i2c_master_read_packet_job(&i2c_master_instance,&rd_packet);
}
Function for setting up the callback functionality of the driver:
void configure_i2c_callbacks(void)
{
    /* Register callback function. */
    i2c_master_register_callback(&i2c_master_instance, i2c_write_complete_callback,
            I2C_MASTER_CALLBACK_WRITE_COMPLETE);
    i2c_master_enable_callback(&i2c_master_instance,
            I2C_MASTER_CALLBACK_WRITE_COMPLETE);
}
Add to user application main():
/* Configure device and enable. */
configure_i2c();
/* Configure callbacks and enable. */
configure_i2c_callbacks();