Arduino: What is the best way to send and receive data with I2C?
As others said, you need to define a small protocol.  An example protocol could be something like the following:

[LENGTH] [INSTR] [DATA] [BCC]

where INSTR would be a command and data some payload associated to that piece of data.  LENGTH_DATA would be the amount of bytes for the packet (including INSTR &amp; BCC) and BCC a kind of checksum of all the packet's data.

If you want a command that turn on/off a led, then you can have this command:

[0x04] [0x01] [LED_STATE] [BCC]

To send mouse data:

[0x07] [0x02] [X_H] [X_L] [Y_H] [H_L] [BCC]

Basically, you can't send anything larger than 8 bit at once with an Arduino, but you may well split your number in smaller chunks.  I don't know much about Arduino code, but the actual implementation could be something like that:

struct
   {
    unsigned long int X;
    unsigned long int Y;
   } mouse;

unsigned char buffer[20];
unsigned char bufferIndex=0;

void validatePacket(void)
{
 int i;
 unsigned char bcc=0;

 for(i=0;i&lt;bufferIndex;bcc^=buffer[i++]);
 return ~(bcc+1);
}

void dataReceived(int byteCount)
{
 int i;

 while(Wire.available()&gt;0)
 {
  buffer[bufferIndex++]=Wire.read();
  if(bufferIndex==buffer[0]) // Check if we received "length" bytes.
  {
   if(validatePacket())
   {
    switch(buffer[1])
    {
     case 0x01: // Led toggle command.
      digitalWrite(13,buffer[2]?HIGH:LOW);
     break;
     case 0x02: // Mouse data.
      mouse.X=(unsigned long int)buffer[2]&lt;&lt;8+buffer[3];
      mouse.Y=(unsigned long int)buffer[4]&lt;&lt;8+buffer[5];
     break;
     default: // Unknown command.
      Serial.print("Bad packet");
     break;
    }
   }
   else
   {
    Serial.print("Bad checksum");
   }
   bufferIndex=0;
  }
 }
}


Well, something of the like.  The protocol is crappy and not so much bullet-proof (if length is corrupted, you could get your communication channel to stall), but it is an example.  You can modify it as much as you like.  By the way, it is not tested nor compiled so I don't even know if it is valid Arduino code.