I understand that supporting the Wire API is crucial since Particle tries to be Arduino compatible.
It would be nice if your Wire API was built on a more traditional embedded I2C API. I include the mbed API below since is is similar to the API provided by Keil, ChibiOS, and others vendors.
This removes the pain of 32 byte internal buffers and difficulties of dealing with complex devices that require many start, repeated start, and stop conditions.
Here is the mbed master I2C API:
I2C (PinName sda, PinName scl)
Create an I2C Master interface, connected to the specified pins.
void frequency (int hz)
Set the frequency of the I2C interface.
int read (int address, char *data, int length, bool repeated=false)
Read from an I2C slave.
int read (int ack)
Read a single byte from the I2C bus.
int write (int address, const char *data, int length, bool repeated=false)
Write to an I2C slave.
int write (int data)
Write single byte out on the I2C bus.
void start (void)
Creates a start condition on the I2C bus.
void stop (void)
Creates a stop condition on the I2C bus.
int transfer (int address, const char *tx_buffer, int tx_length, char *rx_buffer, int rx_length, const event_callback_t &callback, int event=I2C_EVENT_TRANSFER_COMPLETE, bool repeated=false)
Start non-blocking I2C transfer.
void abort_transfer ()
Abort the on-going I2C transfer.
It is easy to wrap the more traditional I2C API with a Wire API. I have done this.
Here is the mbed I2C class with more detail.