/**
   * Send a message on the CAN bus through the CAN driver in FRC_NetworkCommunication
   *
   * <p>Trusted messages require a 2-byte token at the beginning of the data payload. If the message
   * being sent is trusted, make space for the token.
   *
   * @param messageID The messageID to be used on the CAN bus
   * @param data The up to 8 bytes of data to be sent with the message
   * @param dataSize Specify how much of the data in "data" to send
   */
  protected static void sendMessage(int messageID, byte[] data, int dataSize)
      throws CANTimeoutException {
    final int[] kTrustedMessages = {
      JaguarCANProtocol.LM_API_VOLT_T_EN, JaguarCANProtocol.LM_API_VOLT_T_SET,
      JaguarCANProtocol.LM_API_SPD_T_EN, JaguarCANProtocol.LM_API_SPD_T_SET,
      JaguarCANProtocol.LM_API_VCOMP_T_EN, JaguarCANProtocol.LM_API_VCOMP_T_SET,
      JaguarCANProtocol.LM_API_POS_T_EN, JaguarCANProtocol.LM_API_POS_T_SET,
      JaguarCANProtocol.LM_API_ICTRL_T_EN, JaguarCANProtocol.LM_API_ICTRL_T_SET
    };

    byte i;
    for (i = 0; i < kTrustedMessages.length; i++) {
      if ((kFullMessageIDMask & messageID) == kTrustedMessages[i]) {
        sendTrustedDataBuffer[0] = 0;
        sendTrustedDataBuffer[1] = 0;
        // Make sure the data will still fit after adjusting for the token.
        if (dataSize > JaguarCANDriver.kMaxMessageDataSize - 2) {
          throw new RuntimeException("CAN message has too much data.");
        }

        byte j;
        for (j = 0; j < dataSize; j++) {
          sendTrustedDataBuffer[j + 2] = data[j];
        }

        JaguarCANDriver.sendMessage(messageID, sendTrustedDataBuffer, dataSize + 2);
        return;
      }
    }
    JaguarCANDriver.sendMessage(messageID, data, dataSize);
  }
 /**
  * Receive a message from the CAN bus through the CAN driver in FRC_NetworkCommunication
  *
  * @param messageID The messageID to read from the CAN bus
  * @param data The up to 8 bytes of data that was received with the message
  * @param timeout Specify how long to wait for a message (in seconds)
  */
 protected static byte receiveMessage(int messageID, byte[] data, double timeout)
     throws CANTimeoutException {
   JaguarCANDriver canDriver = new JaguarCANDriver();
   byte dataSize = canDriver.receiveMessage(messageID, data, timeout);
   return dataSize;
 }