me8100_test_dio/me8100_test_dio.c
changeset 0 c9b8efdb5369
child 3 fc24e3b47731
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/me8100_test_dio/me8100_test_dio.c	Wed Jan 16 14:01:55 2002 +0100
@@ -0,0 +1,219 @@
+/*
+ * Source File : me8100_test_dio.c
+ * Destination : me8100_test_dio
+ * Author      : GG (Guenter Gebhardt)                                 
+ *    
+ *                                                                     
+ * File History: Version   Date       Editor   Action                  
+ *---------------------------------------------------------------------
+ *               1.00.00   01.07.12   GG       first release           
+ *                                                                     
+ *---------------------------------------------------------------------
+ *                                                                     
+ * Description:
+ *   This program shows the use of the driver and the digital inputs
+ *   and outputs. First the outputs are tested in sink and source mode. 
+ *   Then the inputs are tested.
+ */
+#include <stdio.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <sys/ioctl.h>
+#include <signal.h>
+#include <linux/spinlock.h>
+
+#include "../me8100.h"
+
+int main(void){
+  int err = 0;
+  int minor = 0;
+  int count = 0;
+  int i;
+  static int file_handle = -1;
+
+  unsigned short ctrl_a;
+  unsigned short ctrl_b;
+  unsigned short value_a;
+  unsigned short value_b;
+
+  printf("%c%3s", 27, "[2J");
+  printf("<<<--- ME8100 TESTPROGRAM FOR DIO --->>>\n\n");
+
+  /*
+   * You can select up to four me8100 baords, if installed.
+   * 0 is the first board.
+   */
+  printf("Please type in the Minor Device Number of Board to open : ");
+  count = scanf("%d", &minor);
+  if(!count){
+    printf("Invalid Input !\n");
+    return 1;
+  }
+  printf("Open path /dev/me8100_%d !\n\n", minor);
+  
+  switch(minor){
+  case 0:
+    file_handle = open("/dev/me8100_0", O_RDWR, 0);
+    break;
+  case 1:
+    file_handle = open("/dev/me8100_1", O_RDWR, 0);
+    break;
+  case 2:
+    file_handle = open("/dev/me8100_2", O_RDWR, 0);
+    break;
+  case 3:
+    file_handle = open("/dev/me8100_3", O_RDWR, 0);
+    break;
+  default:
+    printf("Invalid Input !\n");
+    return 1;
+  }
+
+  if(file_handle < 0){
+    printf("Cannot open path !\n");
+    return 1;
+  }
+
+  /*
+   * DIGITAL I/O 
+   *
+   * Now that you have access to the me8100 have to configurate
+   * the board according to your needs. 
+   * The ME8100_B has got two output ports with 16 bit each. You can
+   * decide wether the port is driven as sink or as source.
+   * Additionally, you have to enable the outputs explicitly.
+   */
+
+
+  /*------------------ BOTH OUTPUT PORTS AS SOURCE --------------------------*/
+
+  printf("\nPlease press return to test both output ports as source :\n");
+  getchar();
+  getchar();
+  
+  /* Setup for the first output port */
+  ctrl_a = 0x90; /* We want to configure as source and to enable the outputs */
+  err = ioctl(file_handle , ME8100_WRITE_CTRL_A, &ctrl_a);
+  if(err){
+    printf("Cannot setup output port A \n");
+    return 1;
+  }
+
+  /* Setup for the second output port */
+  ctrl_b = 0x90; /* We want to configure as source and to enable the outputs */
+  err = ioctl(file_handle , ME8100_WRITE_CTRL_B, &ctrl_b);
+  if(err){
+    printf("Cannot setup output port B \n");
+    return 1;
+  }
+
+  for(i = 0; i < 16; i++){
+    /* Write to port A */
+    value_a = 0x1 << i;
+    err = ioctl(file_handle, ME8100_WRITE_DO_A, &value_a); /* Do the job */
+    if(err){
+      printf("Cannot write to output port A \n");
+      return 1;
+    }
+    printf("Write to Port A : 0x%04X\n", value_a);
+    
+    /* Write to port B */
+    value_b = 0x8000 >> i;
+    err = ioctl(file_handle, ME8100_WRITE_DO_B, &value_b); /* Do the job */
+    if(err){
+      printf("Cannot write to port B \n");
+      return 1;
+    }
+    printf("Write to Port B : 0x%04X\n\n", value_b);
+    sleep(1);
+  }
+
+
+  /*-------------------- BOTH OUTPUT PORTS AS SINK --------------------------*/
+
+  printf("Please press return to test both output ports as sink :\n");
+  getchar();
+  
+  /* Setup for the first output port */
+  ctrl_a = 0x80; /* We want to configure as sink and to enable the outputs */
+  err = ioctl(file_handle , ME8100_WRITE_CTRL_A, &ctrl_a);
+  if(err){
+    printf("Cannot setup output port A \n");
+    return 1;
+  }
+
+  /* Setup for the second output port */
+  ctrl_b = 0x80; /* We want to configure as sink and to enable the outputs */
+  err = ioctl(file_handle , ME8100_WRITE_CTRL_B, &ctrl_b);
+  if(err){
+    printf("Cannot setup output port B \n");
+    return 1;
+  }
+
+  for(i = 0; i < 16; i++){
+    /* Write to port A */
+    value_a = 0x1 << i;
+    err = ioctl(file_handle, ME8100_WRITE_DO_A, &value_a); /* Do the job */
+    if(err){
+      printf("Cannot write to output port A \n");
+      return 1;
+    }
+    printf("Write to Port A : 0x%04X\n", value_a);
+    
+    /* Write to port B */
+    value_b = 0x8000 >> i;
+    err = ioctl(file_handle, ME8100_WRITE_DO_B, &value_b); /* Do the job */
+    if(err){
+      printf("Cannot write to port B \n");
+      return 1;
+    }
+    printf("Write to Port B : 0x%04X\n\n", value_b);
+    sleep(1);
+  }
+
+
+  /*--------------------------- READ FROM BOTH INPUT PORTS -----------------------*/
+
+  printf("Please press return to read from both input ports :\n");
+  getchar();
+
+  for(i = 0; i < 20; i++){
+    /* Read from port A */
+    err = ioctl(file_handle, ME8100_READ_DI_A, &value_a);  /* Do the job */
+    if(err){
+      printf("Cannot read port A \n");
+      return 1;
+    }
+    /* 
+     * The result is put into value_a. 
+     * We simply print the result as a hex number. 
+     */
+    printf("Read from Port A: 0x%04X\n", value_a);
+    
+    
+    /* Read from port B */
+    err = ioctl(file_handle, ME8100_READ_DI_B, &value_b);  /* Do the job */
+    if(err){
+      printf("Cannot read port B \n");
+      return 1;
+    }
+    /* 
+     * The result is put into value_b. 
+     * We simply print the result as a hex number. 
+     */
+    printf("Read from Port B: 0x%04X\n\n", value_b);
+    sleep(1);
+  }
+
+
+  /*-------------------------------- END ------------------------------------*/
+
+  printf("Close path to me8100_%d\n", minor);
+  err = close(file_handle);
+  if(err){
+    printf("Kann Pfad nicht schliessen\n");
+    return 1;
+  }
+
+  return 0;
+}