/*----------------------------------------------------------------------------*/
/* Copyright (c) Kauai Labs 2015. All Rights Reserved. */
/* */
/* Created in support of Team 2465 (Kauaibots). Go Purple Wave! */
/* */
/* Open Source Software - may be modified and shared by FRC teams. Any */
/* modifications to this code must be accompanied by the \License.txt file */
/* in the root directory of the project. */
/*----------------------------------------------------------------------------*/
package com.kauailabs.navx.frc;
import edu.wpi.first.wpilibj.I2C;
class RegisterIO_I2C implements IRegisterIO{
I2C port;
boolean trace = true;
public RegisterIO_I2C( I2C i2c_port ) {
port = i2c_port;
}
@Override
public boolean init() {
return true;
}
@Override
public boolean write(byte address, byte value ) {
boolean success = port.write(address | 0x80, value);
if ( !success && trace ) System.out.println("navX-MXP I2C Write Error");
return success;
}
final static int MAX_WPILIB_I2C_READ_BYTES = 127;
@Override
public boolean read(byte first_address, byte[] buffer) {
int len = buffer.length;
int buffer_offset = 0;
while ( len > 0 ) {
int read_len = (len > MAX_WPILIB_I2C_READ_BYTES) ? MAX_WPILIB_I2C_READ_BYTES : len;
byte[] read_buffer = new byte[read_len];
if (!port.write(first_address + buffer_offset, read_len) &&
!port.readOnly(read_buffer, read_len) ) {
System.arraycopy(read_buffer, 0, buffer, buffer_offset, read_len);
buffer_offset += read_len;
len -= read_len;
} else {
if (trace) System.out.println("navX-MXP I2C Read Error");
break;
}
}
return (len == 0);
}
@Override
public boolean shutdown() {
return true;
}
}