/*31.7.1999 : Zeitmessung jetzt mit struct tms, ist genauer als time.
              Es wird einmal vor dem Messen und einmal nach dem Messen
              die Zeit bestimmt.Der Zeitpunkt der Messung ist das 
              arithmetische Mittel dieser beiden Zeiten. Beim ME-32 dauert
              eine Messung ca. 0.4s
  27.7.1999 : Programmtext aufgeräumt 
  24.7.1999 : Der Rückgabe-String des DMM wird nicht mehr mit sscanf
              bearbeitet, weil der String bei manchen Geräten (M-4650 CR) 
              nicht mehr aufsplittbar war. Jetzt wird nur noch der Meßwert 
              extrahiert (3.-10. Stelle) und dieser so wie er ist in das 
              Outputfile geschrieben.
              Wichtig: Geräte mit einer Übertragungsgeschwindigkeit von 600 
              Baud oder kleiner, vertragen nur alle 2 oder mehr Sekunden 
              eine Abfrage!
              Dieses Programm ist mit folgenden VOLTCRAFT Geräten getestet:
                     M-3850D
                     ME-32
                     M-4650 CR (Thanks to Robert Jördens)

              Feedback und Verbesserungsvoschläge an andreas@abluecher.de

              Download: www.abluecher.de */

#include <stdio.h>
#include <time.h>
#include <sys/times.h>
#include "messlib.h"


void main(int argc, char *argv[])
{
  char dmm_string[14];
  char dummy[14];
  int dmm_fd;
  FILE *out_fd;
  int m,zaehler=0;
  struct tms tms_begin,tms_vor,tms_nach; 
  clock_t begin,vor,nach;
  double zeit_vorher,zeit_nacher,zeit_real;

  char * wert;

  if(argc!=6){
    fprintf(stdout,"usage: messung  port baudrate delta_time number");
    fprintf(stdout," output_filename\n");
    fprintf(stdout,"\n\n");
    fprintf(stdout,"	port           =/dev/ttySX\n");
    fprintf(stdout,"	baudrate       =Übertragungsgeschwindigkeit\n");    
    fprintf(stdout,"	delta_time     =Zeit zwischen zwei Messungen\n");
    fprintf(stdout,"	number         =Anzahl der Messungen\n");
    fprintf(stdout,"	output_filename=Name des Output-Files\n");
    fprintf(stdout,"\n\n");
    fprintf(stdout,"EXAMPLE: messung /dev/ttyS2 1200 10 20 messung.out\n");
    exit();
  }  
 

  fprintf(stdout,"Öffne DMM-Port %s mit Übertragungsgeschwindigkeit %s .\n",
          argv[1],argv[2]);
  if((dmm_fd=init_dmm(argv[1],atoi(argv[2])))<1){
    fprintf(stderr,"Fehler beim Initialisieren von %s !\n",argv[1]);
    exit();
  }

  begin=times(&tms_begin);    /*Eichzeitmessung*/
  fprintf(stdout,"  Zeit [s]     Messwert \n");
  while(zaehler++<atoi(argv[4])){
    vor=times(&tms_vor);      /*Zeitmessung vor Messung*/
    if(read_dmmd(dmm_fd,dmm_string)==1){
      nach=times(&tms_nach);  /*Zeitmessung nach Messung*/
      for(m=1;m<4;m++){
         read_dmm(dmm_fd,dummy);
      }
      /*Berechnung des Zeitpunktes der Messung*/
      zeit_vorher=((double)(vor-begin))/ CLK_TCK;
      zeit_nacher=((double)(nach-begin))/ CLK_TCK;
      zeit_real=(zeit_nacher+zeit_vorher)/2;
 
      wert=&dmm_string[2];   
      dmm_string[9]='\0';  
      if(!(out_fd=fopen(argv[5],"a+"))){
        fprintf(stdout,"Outputfile  %s kann nicht geöffnet werden! \n",
                argv[5]);
        exit();
      }
      fprintf(out_fd,"%7.2f %s\n",zeit_real,wert);
      fclose(out_fd);
      fprintf(stdout,"%7.2f        %s\n",zeit_real,wert);
      sleep(atoi(argv[3]));
    }
    else{
      fprintf(stderr,"Fehler beim Lesen von %s !\n",argv[1]);
    }
  }
  close_dmm(dmm_fd);
}
  
