From 23e18f5327f0728cc8b3fbc2d6a6235364cc3230 Mon Sep 17 00:00:00 2001 From: hadaq Date: Thu, 29 Nov 2012 21:15:24 +0000 Subject: [PATCH] update --- trbrich/trb_i2c.c | 47 ++++++++++++++++++++++++++++++----------------- 1 file changed, 30 insertions(+), 17 deletions(-) diff --git a/trbrich/trb_i2c.c b/trbrich/trb_i2c.c index 27d47af..f36675a 100644 --- a/trbrich/trb_i2c.c +++ b/trbrich/trb_i2c.c @@ -11,17 +11,18 @@ #define BUFFER_SIZE (6 * 4096) -static const char trb_i2c_version[] = "$Revision: 1.8 $"; +static const char trb_i2c_version[] = "$Revision: 1.9 $"; -static const uint16_t trb_i2c_register = 0x8040; +static uint16_t trb_i2c_register = 0x8040; static const unsigned int timeout = 1000; void usage(const char *progName) { - printf("Usage: %s [-h] [-d level] [-V] \n", progName); + printf("Usage: %s [-h] [-d] [-d level] [-V] \n", progName); printf("Options:\n"); printf(" -h give this help\n"); + printf(" -s SPI Mode\n"); printf(" -d turn on Debugging Information\n"); printf(" -V Version number\n"); printf("\nCommands:\n"); @@ -29,7 +30,7 @@ void usage(const char *progName) "write to \n"); printf(" r -> " "read from \n"); - printf(" c " + printf(" c -> " "clear I2C-Bus on \n"); } @@ -125,14 +126,12 @@ int clearI2C(uint16_t trb_address) int main(int argc, char** argv) { - static const uint16_t trb_i2c_register = 0x8040; - int i; - + int spi_mode = 0; trb_debug = 0; /* Parse Arguments */ - while ((i = getopt(argc, argv, "+hd:V")) != -1) { + while ((i = getopt(argc, argv, "+hsd:V")) != -1) { switch (i) { case '?': usage(basename(argv[0])); @@ -140,6 +139,10 @@ int main(int argc, char** argv) case 'h': usage(basename(argv[0])); exit(EXIT_SUCCESS); + case 's': + spi_mode = 1; + trb_i2c_register = 0x8060; + break; case 'd': trb_debug = strtoul(optarg, NULL, 0); break; @@ -171,7 +174,7 @@ int main(int argc, char** argv) uint32_t value = 0; uint16_t trb_address = 0; uint8_t i2c_chip = 0; - uint8_t i2c_register = 0; + uint16_t i2c_register = 0; uint8_t i2c_value = 0; int status = 0; @@ -184,8 +187,10 @@ int main(int argc, char** argv) 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); + i2c_chip = spi_mode == 0 ? (uint8_t)strtoul(argv[optind + 2], NULL, 0) : 0; + i2c_register = spi_mode == 0 + ? (uint8_t)strtoul(argv[optind + 3], NULL, 0) + : (uint16_t)strtoul(argv[optind + 3], NULL, 0) & 0x1fff; i2c_value = (uint8_t)strtoul(argv[optind + 4], NULL, 0); /* Check whether I2C is ready */ @@ -195,7 +200,10 @@ int main(int argc, char** argv) } /* Write value */ - value = 0xbf000000 | (i2c_chip << 16) | (i2c_register << 8) | i2c_value; + value = spi_mode == 0 + ? 0xbf000000 | (i2c_chip << 16) | (i2c_register << 8) | i2c_value + : 0xbf000000 | (i2c_register << 8) | i2c_value; + if (trb_register_write(trb_address, trb_i2c_register, value) == -1) { trb_error("Error writing value"); clearI2C(trb_address); @@ -229,7 +237,7 @@ int main(int argc, char** argv) uint16_t trb_address = 0; uint32_t value = 0; uint8_t i2c_chip = 0; - uint8_t i2c_register = 0; + uint16_t i2c_register = 0; int i; @@ -242,9 +250,11 @@ int main(int argc, char** argv) 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); - + i2c_chip = spi_mode == 0 ? (uint8_t)strtoul(argv[optind + 2], NULL, 0) : 0; + i2c_register = spi_mode == 0 + ? (uint8_t)strtoul(argv[optind + 3], NULL, 0) + : (uint16_t)strtoul(argv[optind + 3], NULL, 0) & 0x1fff; + /* Check whether I2C is ready */ if (readI2CRegister(trb_address, 0, buffer, BUFFER_SIZE) == -1) { trb_error("I2C not ready"); @@ -253,7 +263,10 @@ int main(int argc, char** argv) } /* Read Value */ - value = 0xff000000 | (i2c_chip << 16) | (i2c_register << 8); + value = spi_mode == 0 + ? 0xff000000 | (i2c_chip << 16) | (i2c_register << 8) + : 0xff000000 | (i2c_register << 8); + if (trb_register_write(trb_address, trb_i2c_register, value) == -1) { trb_error("Error reading value"); clearI2C(trb_address); -- 2.43.0