]> jspc29.x-matter.uni-frankfurt.de Git - trbnettools.git/commitdiff
update
authorhadaq <hadaq>
Thu, 29 Nov 2012 21:15:24 +0000 (21:15 +0000)
committerhadaq <hadaq>
Thu, 29 Nov 2012 21:15:24 +0000 (21:15 +0000)
trbrich/trb_i2c.c

index 27d47afe71683cd0ccf942130e9548f84c630059..f36675ad7e23ff7c7f8b29b08fa100972643ef24 100644 (file)
 
 #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] <COMMAND>\n", progName);
+  printf("Usage: %s [-h] [-d] [-d level] [-V] <COMMAND>\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 <value> to <register>\n"); 
   printf("   r <trb_address <chip> <register>          -> "
          "read <value> from <register>\n");
-  printf("   c <trb_address                            -> "
+  printf("   c <trb_address>                           -> "
          "clear I2C-Bus on <trb_address>\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);