#include <stdio.h>
#include <Error.h>
#include <GeoVme.h>
#include <dmap.h>

int main(int argc, char *argv[])
{
  int res;
  DMAP_CHAN_EL data;

  if (argc!=7)
    {
      printf("Use: dmapgetone GeoVmeMap dmap chain crate slot channel\n");
      return 1;
    }

  GeoVmeLoadMap(argv[1]);


  if (dmap_load(argv[2])!=DMAP_ERROR_OK)
    {
      printf("Error in dmap_load\n");
      return 2;
    }

  res = dmap_get(atoi(argv[3]),atoi(argv[4]),atoi(argv[5]),atoi(argv[6]),&data);

  if (res==DMAP_ERROR_EMPTY)
    printf("Channel empty!");
  else if (res!=DMAP_ERROR_OK)
    printf("Error in dmap_get.\n");
  else
    {
      printf("Board type: %i\n",data.btype);

      switch (data.btype)
	{
	case DMAP_BTYPE_CALTDC:
	case DMAP_BTYPE_CALADC:
	  printf("Detector: %i\nModule: %i\nPlane: %i\nColumn: %i\nSide: %i\n",
		 data.data.cal.detector,
		 data.data.cal.module,
		 data.data.cal.plane,
		 data.data.cal.column,
		 data.data.cal.side);
	  break;\
	case DMAP_BTYPE_CHATDC:
	  printf("Layer: %i\nWire: %i\n",
		 data.data.chamber.layer,
		 data.data.chamber.wire);
	  break;
	case DMAP_BTYPE_QCALTDC:
	case DMAP_BTYPE_QCALADC:
	  printf("Detector: %i\nModule: %i\n",
		 data.data.qcal.detector,
		 data.data.qcal.module);
	  break;
	}
    }

  dmap_dispose();
  GeoVmeUnloadMap();

  return 0;
}