/************************************************/
/*                                              */
/* File         : VmeLib.c                      */
/* Description  : Read and write register function   */
/*                                              */
/* Author       : Maurizio De Nino              */
/* Modified by  : Sfiligoi Igor                 */
/*                                              */
/* Created      : 01/10/97                      */
/* Last modified: 21/10/97                      */
/*                                              */
/************************************************/


#include <stdio.h>
#include <stdlib.h>
#include <Vme.h>
#include <Vme_am.h>
#include "VmeLib.h"


#ifndef u_char
#define u_char unsigned char
#endif

#ifndef u_short
#define u_short unsigned short
#endif

#ifndef u_int
#define u_int unsigned int
#endif

/************************************************************************/
/*
   Funzioni di libreria che dovrebbero interfacciarsi con quelle comprese
   nel <Vme.h>
*/
/*************************************************************************/

unsigned char myVme_D08READ(ROCKM_id this_board,unsigned int offset)
{   	
 unsigned char reg08;
 unsigned char  *aptr;
        
 aptr=(u_char *)((u_char *)this_board->map_ptr+this_board->offs+offset);
 
#ifdef DEBUG
 printf("read addr:%p",aptr);
#endif
 
 Vme_D08READ(this_board->map_ptr,aptr,reg08);
 
#ifdef DEBUG
 printf(" : %x\n",reg08);
#endif
 
 return reg08;
}



void myVme_D08WRITE(ROCKM_id this_board,unsigned int offset,unsigned char data)
{   		
 unsigned char *aptr;

 aptr=(u_char *)this_board->map_ptr+this_board->offs+offset;
 
#ifdef DEBUG
 printf("write addr: %p : %x\n",aptr,data);
#endif
 
 Vme_D08WRITE(this_board->map_ptr,aptr,data);	
}



unsigned short myVme_D16READ(ROCKM_id this_board,unsigned int offset)
{   		
 unsigned short reg16;
 unsigned short *aptr;

 aptr=(u_short *)((u_char *)this_board->map_ptr+this_board->offs+offset);
 
#ifdef DEBUG
 printf("read addr:%p",aptr);
#endif
 
 Vme_D16READ(this_board->map_ptr,aptr,reg16);
 
#ifdef DEBUG
 printf(" : %x\n",reg16);
#endif
 
 return reg16;
}



void myVme_D16WRITE(ROCKM_id this_board,unsigned int offset,unsigned short data)
{   		
 unsigned short *aptr;

 aptr=(u_short *)((u_char *)this_board->map_ptr+this_board->offs+offset);
 
#ifdef DEBUG
 printf("write addr: %p : %x\n",aptr,data);
#endif
 
 Vme_D16WRITE(this_board->map_ptr,aptr,data);	
}





u_int myVme_D32READ(ROCKM_id this_board,u_int offset)
{   		
 u_int reg32;
 u_int *aptr;

 aptr=(u_int *)((u_char *)this_board->map_ptr+this_board->offs+offset);
 
#ifdef DEBUG
 printf("read addr:%p",aptr);
#endif
 
 Vme_D32READ(this_board->map_ptr,aptr,reg32);
 
#ifdef DEBUG
 printf(" : %x\n",reg32);
#endif
 
 return reg32;
}



void myVme_D32WRITE(ROCKM_id this_board,u_int offset,u_int data)
{   		
 u_int *aptr;

 aptr=(u_int *)((u_char *)this_board->map_ptr+this_board->offs+offset);
 
#ifdef DEBUG
 printf("write addr: %p : %x\n",aptr,data);
#endif

 Vme_D32WRITE(this_board->map_ptr,aptr,data);	
}