#include <trbnet.h>
#include <trberror.h>
-#define BUFFER_SIZE 4096
+#define BUFFER_SIZE (6 * 4096)
-static const char trb_i2c_version[] = "$Revision: 1.5 $";
+static const char trb_i2c_version[] = "$Revision: 1.6 $";
static const uint16_t trb_i2c_register = 0x8040;
int i;
trb_debug = 0;
- trb_lazy = 0;
/* Parse Arguments */
while ((i = getopt(argc, argv, "+hd:V")) != -1) {
/* I2C write */
/*************************************************/
- uint32_t buffer[BUFFER_SIZE];
+ uint32_t *buffer = NULL;
uint32_t value = 0;
uint16_t trb_address = 0;
uint8_t i2c_chip = 0;
exit(EXIT_FAILURE);
}
+ buffer = (uint32_t*)malloc(sizeof(uint32_t) * BUFFER_SIZE);
+ if (buffer == NULL) abort();
+
trb_address = (uint16_t)strtoul(argv[optind + 1], NULL, 0);
i2c_chip = (uint8_t)strtoul(argv[optind + 2], NULL, 0);
i2c_register = (uint8_t)strtoul(argv[optind + 3], NULL, 0);
/* Check whether I2C is ready */
if (readI2CRegister(trb_address, 0, buffer, BUFFER_SIZE) == -1) {
+ free(buffer);
exit(EXIT_FAILURE);
}
if (trb_register_write(trb_address, trb_i2c_register, value) == -1) {
trb_error("Error writing value");
clearI2C(trb_address);
+ free(buffer);
exit(EXIT_FAILURE);
}
if ((status = readI2CRegister(trb_address, 1, buffer, BUFFER_SIZE))
== -1) {
clearI2C(trb_address);
+ free(buffer);
exit(EXIT_FAILURE);
}
/* Clear IC2 bus */
if (clearI2C(trb_address) == -1) {
+ free(buffer);
exit(EXIT_FAILURE);
}
+ free(buffer);
} else if (strcmp(argv[optind], "r") == 0) {
/*************************************************/
/* I2C read */
/*************************************************/
- uint32_t buffer[BUFFER_SIZE];
+ uint32_t *buffer = NULL;
int status = 0;
uint16_t trb_address = 0;
uint32_t value = 0;
usage(argv[0]);
exit(EXIT_FAILURE);
}
-
+
+ buffer = (uint32_t*)malloc(sizeof(uint32_t) * BUFFER_SIZE);
+ if (buffer == NULL) abort();
+
trb_address = (uint16_t)strtoul(argv[optind + 1], NULL, 0);
i2c_chip = (uint8_t)strtoul(argv[optind + 2], NULL, 0);
i2c_register = (uint8_t)strtoul(argv[optind + 3], NULL, 0);
/* Check whether I2C is ready */
if (readI2CRegister(trb_address, 0, buffer, BUFFER_SIZE) == -1) {
trb_error("I2C not ready");
+ free(buffer);
exit(EXIT_FAILURE);
}
if (trb_register_write(trb_address, trb_i2c_register, value) == -1) {
trb_error("Error reading value");
clearI2C(trb_address);
+ free(buffer);
exit(EXIT_FAILURE);
}
if ((status = readI2CRegister(trb_address, 1, buffer, BUFFER_SIZE))
== -1) {
clearI2C(trb_address);
+ free(buffer);
exit(EXIT_FAILURE);
}
/* Clear IC2 bus */
if (clearI2C(trb_address) == -1) {
+ free(buffer);
exit(EXIT_FAILURE);
}
printf("0x%04x 0x%02x\n", buffer[i], buffer[i + 1] & 0xff);
}
+ free(buffer);
} else if (strcmp(argv[optind], "c") == 0) {
/*************************************************/