/************************************************/
/*                                              */
/* File        : rockdcd.c                      */
/* Description : Decode the ROCK registers      */
/*                                              */
/* Author: Sfiligoi Igor                        */
/*                                              */
/* Created      : 29.01.1997                    */
/* Last modified: 04.04.1997                    */
/*                                              */
/************************************************/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include <Error.h>

#include <GeoVme.h>
#include <rock.h>

int main()
{
 ROCK_id rock_id;
 unsigned int val;
 int res;
 char *MapName;

 ErrorInit(Error_PRINT_OFF); /* Needed for the Error treatement. */
 
 MapName = getenv("GEOMAP");
 if (MapName==NULL)
   {
     fprintf(stderr,"Fatal error: GEOMAP not defined!\n\n");
     return 1;
   }
 
 GeoVmeLoadMap(MapName);

 res = rock_open(1,7,&rock_id);
 if (res!=ROCK_ERROR_OK)
   {
     printf("Error opening ROCK!\n");
     return 1;
   }

 printf("ROCK opened.\n");

 {
  ROCK_RESET_bits bits;

  printf("\nReset:\n==========\n");

  rock_read_reset(rock_id,bits);
  printf("fltrst: %x\n",bits.fltrst);
  printf("intrst: %x\n",bits.intrst);
  printf("auxrst: %x\n",bits.auxrst);
  printf("dfifo : %x\n",bits.dfifo);
  printf("efifo : %x\n",bits.efifo);
  printf("xintf : %x\n",bits.xintf);
  printf("tfifo : %x\n",bits.tfifo);
  printf("cintf : %x\n",bits.cintf);
 }

 {
  ROCK_FIFO_bits bits;

  printf("\nFIFO:\n==========\n");

  rock_read_fifo(rock_id,bits);
  printf("dff: %x\n",bits.dff);
  printf("dhf: %x\n",bits.dhf);
  printf("def: %x\n",bits.def);
  printf("eff: %x\n",bits.eff);
  printf("ehf: %x\n",bits.ehf);
  printf("eef: %x\n",bits.eef);
  printf("tef: %x\n",bits.tef);
  printf("tff: %x\n",bits.tff);
 }

 {
  ROCK_WATCHDOG_bits bits;

  printf("\nWatchdog:\n==========\n");

  rock_read_watchdog(rock_id,bits);
  printf("watchdog: 0x%02x\n",bits);
 }

 {
  ROCK_CSR0_bits bits;

  printf("\nCSR0:\n==========\n");

  rock_read_csr0(rock_id,bits);
  printf("efmode: %x\n",bits.efmode);
  printf("boe   : %x\n",bits.boe);
  printf("tkndis: %x\n",bits.tkndis);
  printf("inttrg: %x\n",bits.inttrg);
  printf("diag  : %x\n",bits.diag);
 }

 {
  ROCK_CSR1_bits bits;

  printf("\nCSR1:\n==========\n");

  rock_read_csr1(rock_id,bits);
  printf("tknin : %x\n",bits.tknin);
  printf("tknout: %x\n",bits.tknout);
  printf("ceob  : %x\n",bits.ceob);
  printf("cerr  : %x\n",bits.cerr);
  printf("crst  : %x\n",bits.crst);
  printf("crngt : %x\n",bits.crngt);
  printf("cbusy : %x\n",bits.cbusy);
  printf("ctrgv : %x\n",bits.ctrgv);
 }

 {
  ROCK_CSR2_bits bits;

  printf("\nCSR2:\n==========\n");

  rock_read_csr2(rock_id,bits);
  printf("efwren : %x\n",bits.efwren);
  printf("auxon  : %x\n",bits.auxon);
  printf("timeout: %x\n",bits.timeout);
  printf("elapsed: %x\n",bits.elapsed);
  printf("wscale : %x\n",bits.wscale);
 }

 {
  ROCK_ELAPSED_bits bits;

  printf("\nElapsed:\n==========\n");

  rock_read_elapsed(rock_id,bits);
  printf("elapsedtime: 0x%02x\n",bits);
 }

 {
  ROCK_TRIGGER_bits bits;

  printf("\nTrigger:\n==========\n");

  rock_read_trigger(rock_id,bits);
  printf("halt  : %x\n",bits.halt);
  printf("busy  : %x\n",bits.busy);
  printf("synchf: %x\n",bits.synchf);
  printf("xbusy : %x\n",bits.xbusy);
  printf("xberr : %x\n",bits.xberr);
 }

 {
  ROCK_TQUE_bits bits;

  printf("\nTQUE:\n==========\n");

  rock_read_tque(rock_id,bits);
  printf("tff : %x\n",bits.tff);
  printf("link: %x\n",bits.link);
  printf("qtrg: 0x%03x\n",bits.qtrg);
 }

 {
  ROCK_TNOW_bits bits;

  printf("\nTNOW:\n==========\n");

  rock_read_tnow(rock_id,bits);
  printf("cstate: 0x%01x\n",bits.cstate);
  printf("ptrg  : 0x%03x\n",bits.ptrg);
 }

 {
  ROCK_ROCKINFO_bits bits;

  printf("\nRockinfo:\n==========\n");

  rock_read_rockinfo(rock_id,bits);
  printf("sof      : %x\n",bits.sof);
  printf("eof      : %x\n",bits.eof);
  printf("syncrespf: %x\n",bits.syncrespf);
  printf("rocksfail: %x\n",bits.rocksfail);
  printf("slvsfail : %x\n",bits.slvsfail);
  printf("lwadd    : %x\n",bits.lwadd);
  printf("xadd     : %x\n",bits.xadd);
 }

 {
  ROCK_GOLDEN_bits bits;

  printf("\nGolden:\n==========\n");

  rock_read_golden(rock_id,bits);
  printf("last     : %x\n",bits.last);
  printf("cradd    : %x\n",bits.cradd);
  printf("goldenref: 0x%02x\n",bits.goldenref);
 }

 rock_close(rock_id);
 printf("ROCK closed\n");

 GeoVmeUnloadMap();

 return 0;
}