This program demonstrates the use of the API. It could be compiled with the command
gcc -o rm_sample -I$COMMONINC rm_sample.c $COMMONLIB/rm.o
/*****************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <rm.h>
int main(void) {
int antlist[RM_ARRAY_SIZE];
int status, antenna, i;
char name[RM_NAME_LENGTH];
char **namelist;
int num_alloc;
double dval_array[RM_ARRAY_SIZE],dval;
short sval_array[RM_ARRAY_SIZE],sval;
/* intialize */
status = rm_open(antlist);
if(status != RM_SUCCESS) {
rm_error_message(status, "rm_open()");
exit(1);
}
/* report the list of available antennas */
printf("available antennas: ");
i=0;
while(antlist[i] != RM_ANT_LIST_END) printf("%d ",antlist[i++]);
printf("\n");
/* report the list of allocation names */
status = rm_get_num_alloc(&num_alloc);
if(status != RM_SUCCESS) {
rm_error_message(status, "rm_get_num_alloc()");
exit(1);
}
namelist = (char **)malloc(num_alloc*sizeof(char *));
for(i=0; i<num_alloc; i++)
namelist[i] = (char *)malloc(RM_NAME_LENGTH);
status = rm_get_alloc_names(namelist);
if(status != RM_SUCCESS) {
rm_error_message(status, "rm_get_alloc_names()");
exit(1);
}
printf("Allocation list (%d entries):\n",num_alloc);
for(i=0; i<num_alloc; i++)
printf(" %s\n",namelist[i]);
/* write the double precision value 1.234 to */
/* RM_HOUR_ANGLE_HR_D on antenna 1 */
dval = 1.234;
status = rm_write(RM_ANT_1, "RM_HOUR_ANGLE_HR_D", &dval);
if(status != RM_SUCCESS) {
rm_error_message(status, "rm_write()");
exit(1);
}
/* write the short integer value 1 to RM_YIG1_LOCKED_S for */
/* all antennas which have cards in this crate; send notification to */
/* the receiving ends */
i=0;
while(antlist[i] != RM_ANT_LIST_END) sval_array[ antlist[i++] ] = 1;
status = rm_write_notify(RM_ANT_ALL, "RM_YIG1_LOCKED_S", sval_array);
if(status != RM_SUCCESS) {
rm_error_message(status, "rm_write_notify()");
exit(1);
}
/* read the double precision float from RM_HOUR_ANGLE_HR_D */
/* for antenna 7 */
status = rm_read(RM_ANT_1, "RM_HOUR_ANGLE_HR_D", &dval);
if(status != RM_SUCCESS) {
rm_error_message(status, "rm_read()");
exit(1);
}
/* read the double precision float values at RM_HOUR_ANGLE_HR_D */
/* for all antennas */
status = rm_read(RM_ANT_ALL, "RM_HOUR_ANGLE_HR_D", dval_array);
if(status != RM_SUCCESS) {
rm_error_message(status, "rm_read()");
exit(1);
}
i=0;
while(antlist[i] != RM_ANT_LIST_END)
printf("value at \"%s\" for antenna %d is %f\n",
"RM_HOUR_ANGLE_HR_D", i, dval_array[ antlist[i++] ]);
/* wait for the data to change at RM_YIG1_LOCKED_S on any antenna */
status = rm_monitor(RM_ANT_ALL, "RM_YIG1_LOCKED_S");
if(status != RM_SUCCESS) {
rm_error_message(status, "rm_monitor()");
exit(1);
}
status = rm_read_wait(&antenna, name, &sval);
if(status != RM_SUCCESS) {
rm_error_message(status, "rm_read_wait()");
exit(1);
}
printf("Data changed at \"%s\", antenna %d; new value is %d\n",
name, antenna, sval);
/* finished */
status = rm_close();
if(status != RM_SUCCESS) {
rm_error_message(status, "rm_close()");
exit(1);
}
return(0);
}