/* hamlib - (C) Frank Singleton 2000 (vk3fcs@ix.netcom.com) * * testlibft747.c - (C) Frank Singleton 2000 (vk3fcs@ix.netcom.com) * This program tests the libft747.so API for communicating * via serial interface to an FT-747GX using the "CAT" interface * box (FIF-232C) or similar. * * * $Id: testlibft747.c,v 1.7 2000-07-30 05:05:10 javabear Exp $ * */ #include #include /* Standard input/output definitions */ #include /* String function definitions */ #include /* UNIX standard function definitions */ #include /* File control definitions */ #include /* Error number definitions */ #include /* POSIX terminal control definitions */ #include #include "testlibft747.h" #include "ft747.h" static unsigned char datain[350]; /* data read from rig */ struct ft747_update_data { unsigned char displayed_status; unsigned char displayed_freq[5]; unsigned char current_band_data; unsigned char vfo_a_status; unsigned char vfo_a_freq_block[5]; }; /* * Decode routines for status update map */ static void decode_status_flags(unsigned char flags) { if((flags & SF_DLOCK) != 0 ) { printf("Dial Lock = SET \n"); } else { printf("Dial Lock = CLEAR \n"); } if((flags & SF_SPLIT) != 0 ) { printf("Split = SET \n"); } else { printf("Split = CLEAR \n"); } if((flags & SF_CLAR) != 0 ) { printf("Clar = SET \n"); } else { printf("Clar = CLEAR \n"); } if((flags & SF_VFOAB) != 0 ) { printf("VFO = B \n"); } else { printf("VFO = A \n"); } if((flags & SF_VFOMR) != 0 ) { printf("VFO/MR = MR \n"); } else { printf("VFO/MR = VFO \n"); } if((flags & SF_RXTX) != 0 ) { printf("RX/TX = TX \n"); } else { printf("RX/TX = RX \n"); } if((flags & SF_PRI) != 0 ) { printf("Priority Monitoring = ON \n"); } else { printf("Priority Monitoring = OFF \n"); } } /* * Decode routines for status update map */ static void decode_mode_bit_map(unsigned char mbm) { unsigned char mask = 0x1f; unsigned char mode = mbm & mask; /* grab operating mode */ printf("mbm = %x, mode = %x \n",mbm, mode); switch(mode) { case MODE_FM: printf("Current Mode = FM \n"); break; case MODE_AM: printf("Current Mode = AM \n"); break; case MODE_CW: printf("Current Mode = CW \n"); printf("MODE_CW = %i \n", MODE_CW); break; case MODE_USB: printf("Current Mode = USB \n"); break; case MODE_LSB: printf("Current Mode = LSB \n"); break; default: printf("Current mode = XXXXX \n"); break; } if((mbm & MODE_NAR) != 0 ) { printf("Narrow = SET \n"); } else { printf("Narrow = CLEAR \n"); } } /* * Decode routines for status update map */ static void decode_band_data(unsigned char data) { unsigned char mask = 0x0f; unsigned char bd = data & mask; /* grab band data */ printf("Band data is %f - %f \n", band_data[bd], band_data[bd+1]); } /* * Simple test to see if we are talking to the RIG. */ static int test(fd) { struct ft747_update_data *header; cmd_set_split_yes(fd); sleep(1); cmd_set_split_no(fd); sleep(1); cmd_set_dlock_on(fd); sleep(1); cmd_set_dlock_off(fd); sleep(1); cmd_set_select_vfo_a(fd); sleep(1); cmd_set_up500k(fd); sleep(1); cmd_set_down500k(fd); sleep(1); /* cmd_memory_to_vfo(fd,1); */ sleep(1); /* cmd_vfo_to_memory(fd,2); */ sleep(1); cmd_set_mode(fd,3); /* cw */ cmd_set_ptt_on(fd); /* stand back .. */ sleep(1); cmd_set_ptt_off(fd); /* phew.. */ sleep(1); cmd_set_pacing(fd,0); /* set pacing */ cmd_get_update_store(fd,datain); /* read (sleep) and store in datain */ header = (struct ft747_update_data *) &datain; /* overlay header onto datain */ printf("Frequency = %x.%.2x%.2x%.2x \n", header->displayed_freq[1], header->displayed_freq[2], header->displayed_freq[3], header->displayed_freq[4] ); decode_status_flags(datain[0]); /* decode flags */ printf("Displayed Memory = %i \n", datain[23]); decode_mode_bit_map(datain[24]); /* decode mode bit map */ decode_band_data(datain[6]); /* decode current band data */ return 0; } /* * Main program starts here.. */ int main(void) { int fd; fd = rig_open(SERIAL_PORT); printf("port opened ok \n"); test(fd); printf("testing communication result ok \n"); rig_close(fd); printf("port closed ok \n"); return 0; }