00001 /*
00002 Copyright (C) 1999 PolyWog and Javaman for Ghetto.Org
00003 This file is part of the PCR-1000 API Library.
00004
00005 The PCR-1000 API Library is free software; you can redistribute it and/or
00006 modify it under the terms of the GNU Library General Public License as
00007 published by the Free Software Foundation; either version 2 of the
00008 License, or (at your option) any later version.
00009
00010 The PCR-1000 API Library is distributed in the hope that it will be useful,
00011 but WITHOUT ANY WARRANTY; without even the implied warranty of
00012 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
00013 Library General Public License for more details.
00014
00015 You should have received a copy of the GNU Library General Public
00016 License along with the PCR-1000 API Library; see the file LICENSE. If not,
00017 write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
00018 Boston, MA 02111-1307, USA.
00019 */
00020
00021 /*
00022 * This file declares PCP.
00023 * PCP Is the actual object that interfaces with the GUI
00024 * This API deals with the error handling and the calls
00025 * that must be made to and from the radio, via the PComm
00026 * serial i/o object.
00027 */
00028
00029 #include "pcp.h"
00030
00031 #include <stdio.h>
00032 #include <unistd.h>
00033 #include <stdlib.h>
00034
00035 #if defined (SunOS) || defined (Irix)
00036 #include <strings.h>
00037 #else // def SunOs/Irix
00038 #include <string.h>
00039 #endif // def SunOs/Irix
00040
00041 PCP :: PCP(char *port, tcflag_t speed, const char *name)
00042 {
00043 PCPRadio = new PRadInf;
00044 PCPComm = new PComm(port, speed, name);
00045
00046 bzero(PCPRadio, sizeof( PRadInf));
00047 bzero(PCPTemp, sizeof(PCPTemp));
00048
00049 strncpy(PCPRadio->PCPPort, port, 0xff);
00050 PCPRadio->PCPSpeed = speed;
00051 PCPRadio->PCPVolume = 0;
00052 PCPRadio->PCPSquelch = 0;
00053 PCPRadio->PCPFreq = 146000000;
00054 strncpy(PCPRadio->PCPMode, PCRMODNFM, sizeof(PCPRadio->PCPMode));
00055 strncpy(PCPRadio->PCPFilter, PCRFLTR15, sizeof(PCPRadio->PCPFilter));
00056 PCPRadio->PCPToneSq=0;
00057 PCPRadio->PCPToneSqFloat=0.0;
00058 PCPRadio->PCPAutoGain=false;
00059 PCPRadio->PCPNoiseBlank=false;
00060 PCPRadio->PCPRFAttenuator=false;
00061 PCPRadio->PCPAutoUpdate = false;
00062 PCPStatus = false;
00063 }
00079 PCP :: ~PCP()
00080 {
00081 delete PCPComm;
00082 }
00090 bool PCP :: PCPInit(bool autoUpdate)
00091 {
00092 if (autoUpdate==false) {
00093 PCPComm->PCTell(PCRINITM);
00094 fprintf(stderr, "Radio is coming up. Please wait...\n");
00095 sleep(1);
00096 if (PCPStatus)
00097 if (PCPCheckResponse()) {
00098 PCPRadio->PCPAutoUpdate=false;
00099 return true;
00100 }
00101 } else {
00102 PCPComm->PCTell(PCRINITA);
00103 sleep(1);
00104 if (PCPStatus)
00105 if (PCPCheckResponse()) {
00106 PCPRadio->PCPAutoUpdate=true;
00107 return true;
00108 }
00109 }
00110
00111 return false;
00112 }
00131 bool PCP :: PCPPowerUp()
00132 {
00133 PCPComm->PCTell(PCRPWRON);
00134 if (PCPCheckResponse()) {
00135 // PCPCheckResponse();
00136 PCPStatus=true;
00137 return true;
00138 }
00139 return false;
00140 }
00152 bool PCP :: PCPPowerDown()
00153 {
00154 PCPComm->PCTell(PCRPWROFF);
00155 // if (PCPCheckResponse()) {
00156 PCPCheckResponse();
00157 PCPStatus=false;
00158 return true;
00159 // }
00160 // return false;
00161 }
00173 bool PCP :: PCPSetSpeed(tcflag_t speed)
00174 {
00175 if ( (B300<=speed)&&(speed<=B38400) ) {
00176 bzero(PCPRadio->PCPInitSpeed, sizeof(PCPRadio->PCPInitSpeed));
00177 switch (speed) {
00178 case B38400:
00179 // you probably want to set the speed
00180 // to fastest available, so let's put
00181 // this here first
00182 strncpy(PCPRadio->PCPInitSpeed, PCRBD38400,
00183 sizeof(PCPRadio->PCPInitSpeed)-1);
00184 break;
00185 case B19200:
00186 strncpy(PCPRadio->PCPInitSpeed, PCRBD19200,
00187 sizeof(PCPRadio->PCPInitSpeed)-1);
00188 break;
00189 case B300:
00190 strncpy(PCPRadio->PCPInitSpeed, PCRBD300,
00191 sizeof(PCPRadio->PCPInitSpeed)-1);
00192 break;
00193 case B1200:
00194 strncpy(PCPRadio->PCPInitSpeed, PCRBD1200,
00195 sizeof(PCPRadio->PCPInitSpeed)-1);
00196 break;
00197 case B2400:
00198 strncpy(PCPRadio->PCPInitSpeed, PCRBD2400,
00199 sizeof(PCPRadio->PCPInitSpeed)-1);
00200 break;
00201 default:
00202 // if all else fails, we'll always
00203 // have paris! ~=^)
00204 strncpy(PCPRadio->PCPInitSpeed, PCRBD9600,
00205 sizeof(PCPRadio->PCPInitSpeed)-1);
00206 }
00207 PCPComm->PCTell(PCPRadio->PCPInitSpeed);
00208 delete PCPComm;
00209 PCPComm = new PComm(PCPRadio->PCPPort, speed, "PCPComm_R");
00210 // investigate possible responses, i dont think one is given.
00211 // PCPCheckResponse();
00212 PCPRadio->PCPSpeed = speed;
00213 return true;
00214 }
00215
00216 return false;
00217 }
00246 bool PCP :: PCPSetPort(const char *port)
00247 {
00248 PCPComm->PCClose();
00249 return(PCPComm->PCOpen(port));
00250 }
00263 bool PCP :: PCPSetVolume(int volume)
00264 {
00265 if ((0<=volume)&&(volume<=99)) {
00266 bzero(PCPTemp, sizeof(PCPTemp));
00267 sprintf(PCPTemp, "%s%0.2d", PCRVOL, volume);
00268 PCPComm->PCTell(PCPTemp);
00269 if (PCPCheckResponse()) {
00270 PCPRadio->PCPVolume=volume;
00271 return true;
00272 }
00273 }
00274
00275 return false;
00276 }
00292 bool PCP :: PCPSetSquelch(int squelch)
00293 {
00294 if ((0<=squelch)&&(squelch<=99)) {
00295 bzero(PCPTemp, sizeof(PCPTemp));
00296 sprintf(PCPTemp, "%s%0.2d", PCRSQL, squelch);
00297 PCPComm->PCTell(PCPTemp);
00298 if (PCPCheckResponse()) {
00299 PCPRadio->PCPSquelch=squelch;
00300 return true;
00301 }
00302 }
00303
00304 return false;
00305 }
00322 bool PCP :: PCPSetFreq(pcrfreq_t freq)
00323 {
00324 char freqConv[32];
00325 bzero(freqConv, sizeof(freqConv));
00326
00327 if ((LOWERFRQ<=freq)&&(freq<=UPPERFRQ)) {
00328 bzero(PCPTemp, sizeof(PCPTemp));
00329 sprintf(freqConv, "%0.10lu", freq);
00330 strcpy(PCPTemp, PCRFRQ);
00331 strcat(PCPTemp, freqConv);
00332 strcat(PCPTemp, PCPRadio->PCPMode);
00333 strcat(PCPTemp, PCPRadio->PCPFilter);
00334 strcat(PCPTemp, "00");
00335 PCPComm->PCTell(PCPTemp);
00336 if (PCPCheckResponse()) {
00337 PCPRadio->PCPFreq=freq;
00338 #ifdef DEBUG_VER_
00339 fprintf(stderr, "PCP: PCPSETFREQ - Success\n");
00340 #endif
00341 return true;
00342 }
00343 }
00344 #ifdef DEBUG_VER_
00345 fprintf(stderr, "PCP: PCPSETFREQ - Failed\n");
00346 #endif
00347 return false;
00348 }
00374 bool PCP :: PCPSetMode(const char *mode)
00375 {
00376 char freqConv[32];
00377 char temp[8];
00378
00379 bzero(PCPTemp, sizeof(PCPTemp));
00380 sprintf(freqConv, "%0.10lu", PCPRadio->PCPFreq);
00381 strcpy(PCPTemp, PCRFRQ);
00382 strcat(PCPTemp, freqConv);
00383
00384 if ( strncmp(mode, "AM", 2)==0 ) {
00385 strcat(PCPTemp, PCRMODAM);
00386 strcpy(temp, PCRMODAM);
00387 } else if ( strncmp(mode, "CW", 2)== 0 ) {
00388 strcat(PCPTemp, PCRMODCW);
00389 strcpy(temp, PCRMODCW);
00390 } else if ( strncmp(mode, "LSB", 3)==0 ) {
00391 strcat(PCPTemp, PCRMODLSB);
00392 strcpy(temp, PCRMODLSB);
00393 } else if ( strncmp(mode, "USB", 3)==0 ) {
00394 strcat(PCPTemp, PCRMODUSB);
00395 strcpy(temp, PCRMODUSB);
00396 } else if ( strncmp(mode, "NFM", 3)==0 ) {
00397 strcat(PCPTemp, PCRMODNFM);
00398 strcpy(temp, PCRMODNFM);
00399 } else if ( strncmp(mode, "WFM", 3)==0 ) {
00400 strcat(PCPTemp, PCRMODWFM);
00401 strcpy(temp, PCRMODWFM);
00402 } else {
00403 return false;
00404 }
00405
00406 strcat(PCPTemp, PCPRadio->PCPFilter);
00407 strcat(PCPTemp, "00");
00408 PCPComm->PCTell(PCPTemp);
00409 if (PCPCheckResponse()) {
00410 #ifdef DEBUG_VER_
00411 fprintf(stderr, "Storing PCPRadio->PCPMode: %s\n", temp);
00412 #endif // DEBUG_VER_
00413 strcpy(PCPRadio->PCPMode,temp);
00414 return true;
00415 }
00416
00417 return false;
00418
00419 }
00441 bool PCP :: PCPSetFilter(const char *filter)
00442 {
00443 char freqConv[32];
00444 char temp[8];
00445
00446 bzero(PCPTemp, sizeof(PCPTemp));
00447 sprintf(freqConv, "%0.10lu", PCPRadio->PCPFreq);
00448 strcpy(PCPTemp, PCRFRQ);
00449 strcat(PCPTemp, freqConv);
00450 strcat(PCPTemp, PCPRadio->PCPMode);
00451
00452 if ( strncmp(filter, "3", 1)==0 ) {
00453 strcat(PCPTemp, PCRFLTR3);
00454 strcpy(temp, PCRFLTR3);
00455 } else if ( strncmp(filter, "6", 1)== 0 ) {
00456 strcat(PCPTemp, PCRFLTR6);
00457 strcpy(temp, PCRFLTR6);
00458 } else if ( strncmp(filter, "15", 2)==0 ) {
00459 strcat(PCPTemp, PCRFLTR15);
00460 strcpy(temp, PCRFLTR15);
00461 } else if ( strncmp(filter, "50", 2)==0 ) {
00462 strcat(PCPTemp, PCRFLTR50);
00463 strcpy(temp, PCRFLTR50);
00464 } else if ( strncmp(filter, "230", 3)==0 ) {
00465 strcat(PCPTemp, PCRFLTR230);
00466 strcpy(temp, PCRFLTR230);
00467 } else {
00468 return false;
00469 }
00470
00471 strcat(PCPTemp, "00");
00472 PCPComm->PCTell(PCPTemp);
00473 if (PCPCheckResponse()) {
00474 #ifdef DEBUG_VER_
00475 fprintf(stderr, "Storing PCPRadio->PCPFilter: %s\n", temp);
00476 #endif DEBUG_VER_
00477 strcpy(PCPRadio->PCPFilter,temp);
00478 return true;
00479 }
00480
00481 return false;
00482 }
00503 bool PCP :: PCPSetToneSq(const char *value)
00504 {
00505 #ifdef DEBUG_VER_
00506 fprintf(stderr, "PCP: PCPSETTONESQ (string) - %s\n", value);
00507 #endif // DEBUG_VER_
00508
00509 bzero(PCPTemp, sizeof(PCPTemp));
00510 strncpy(PCPTemp, PCRTSQL, sizeof(PCPTemp));
00511 strncat(PCPTemp, value, sizeof(PCPTemp));
00512 PCPComm->PCTell(PCPTemp);
00513 if (PCPCheckResponse()) {
00514 PCPRadio->PCPToneSq=value;
00515 return true;
00516 }
00517
00518 return false;
00519 }
00537 bool PCP :: PCPSetToneSq(float passvalue)
00538 {
00539 #ifdef DEBUG_VER_
00540 fprintf(stderr, "PCP: PCPSETTONESQ (float) - %f\n", passvalue);
00541 #endif // DEBUG_VER_
00542
00543 int tone;
00544
00545 tone = (int)(passvalue * 10.0 + .1); // Hack to remove truncating errors.
00546 PCPRadio->PCPToneSqFloat=passvalue;
00547
00548 switch (tone)
00549 {
00550 case 0: return PCPSetToneSq("00"); break;
00551 case 670: return PCPSetToneSq("01"); break;
00552 case 693: return PCPSetToneSq("02"); break;
00553 case 710: return PCPSetToneSq("03"); break;
00554 case 719: return PCPSetToneSq("04"); break;
00555 case 744: return PCPSetToneSq("05"); break;
00556 case 770: return PCPSetToneSq("06"); break;
00557 case 797: return PCPSetToneSq("07"); break;
00558 case 825: return PCPSetToneSq("08"); break;
00559 case 854: return PCPSetToneSq("09"); break;
00560 case 885: return PCPSetToneSq("0A"); break;
00561 case 915: return PCPSetToneSq("0B"); break;
00562 case 948: return PCPSetToneSq("0C"); break;
00563 case 974: return PCPSetToneSq("0D"); break;
00564 case 1000: return PCPSetToneSq("0E"); break;
00565 case 1035: return PCPSetToneSq("0F"); break;
00566 case 1072: return PCPSetToneSq("10"); break;
00567 case 1109: return PCPSetToneSq("11"); break;
00568 case 1148: return PCPSetToneSq("12"); break;
00569 case 1188: return PCPSetToneSq("13"); break;
00570 case 1230: return PCPSetToneSq("14"); break;
00571 case 1273: return PCPSetToneSq("15"); break;
00572 case 1318: return PCPSetToneSq("16"); break;
00573 case 1365: return PCPSetToneSq("17"); break;
00574 case 1413: return PCPSetToneSq("18"); break;
00575 case 1462: return PCPSetToneSq("19"); break;
00576 case 1514: return PCPSetToneSq("1A"); break;
00577 case 1567: return PCPSetToneSq("1B"); break;
00578 case 1598: return PCPSetToneSq("1C"); break;
00579 case 1622: return PCPSetToneSq("1D"); break;
00580 case 1655: return PCPSetToneSq("1E"); break;
00581 case 1679: return PCPSetToneSq("1F"); break;
00582 case 1713: return PCPSetToneSq("20"); break;
00583 case 1738: return PCPSetToneSq("21"); break;
00584 case 1773: return PCPSetToneSq("22"); break;
00585 case 1799: return PCPSetToneSq("23"); break;
00586 case 1835: return PCPSetToneSq("24"); break;
00587 case 1862: return PCPSetToneSq("25"); break;
00588 case 1899: return PCPSetToneSq("26"); break;
00589 case 1928: return PCPSetToneSq("27"); break;
00590 case 1966: return PCPSetToneSq("28"); break;
00591 case 1995: return PCPSetToneSq("29"); break;
00592 case 2035: return PCPSetToneSq("2A"); break;
00593 case 2065: return PCPSetToneSq("2B"); break;
00594 case 2107: return PCPSetToneSq("2C"); break;
00595 case 2181: return PCPSetToneSq("2D"); break;
00596 case 2257: return PCPSetToneSq("2E"); break;
00597 case 2291: return PCPSetToneSq("2F"); break;
00598 case 2336: return PCPSetToneSq("30"); break;
00599 case 2418: return PCPSetToneSq("31"); break;
00600 case 2503: return PCPSetToneSq("32"); break;
00601 case 2541: return PCPSetToneSq("33"); break;
00602 default: PCPSetToneSq("00"); break;
00603 }
00604 return false;
00605 }
00623 bool PCP :: PCPSetAutoGain(bool value)
00624 {
00625 #ifdef DEBUG_VER_
00626 fprintf(stderr, "PCP: PCPSETAUTOGAIN - %d\n", value);
00627 #endif // DEBUG_VER_
00628
00629 (value)?(PCPComm->PCTell(PCRAGCON)):(PCPComm->PCTell(PCRAGCOFF));
00630
00631 if (PCPCheckResponse()) {
00632 PCPRadio->PCPAutoGain=value;
00633 return true;
00634 }
00635
00636 return false;
00637 }
00655 bool PCP :: PCPSetNB(bool value)
00656 {
00657 #ifdef DEBUG_VER_
00658 fprintf(stderr, "PCP: PCPSETNB - %d\n", value);
00659 #endif // DEBUG_VER_
00660
00661 (value)?(PCPComm->PCTell(PCRNBON)):(PCPComm->PCTell(PCRNBOFF));
00662
00663 if (PCPCheckResponse()) {
00664 PCPRadio->PCPNoiseBlank=value;
00665 return true;
00666 }
00667
00668 return false;
00669 }
00687 bool PCP :: PCPSetRFAttenuator ( bool value )
00688 {
00689 #ifdef DEBUG_VER_
00690 fprintf(stderr, "PCP: PCPSETRFATTENUATOR - %d\n", value);
00691 #endif // DEBUG_VER_
00692
00693 (value)?(PCPComm->PCTell(PCRRFAON)):(PCPComm->PCTell(PCRRFAOFF));
00694
00695 if (PCPCheckResponse()) {
00696 PCPRadio->PCPRFAttenuator=value;
00697 return true;
00698 }
00699
00700 return false;
00701 }
00719
00720 // getter methods //
00722
00723 bool PCP :: PCPIsOn()
00724 {
00725 return PCPStatus;
00726 }
00739 const char *PCP :: PCPSigStrengthStr()
00740 {
00741 #ifdef DEBUG_VER_
00742 fprintf(stderr, "PCP: PCPSIGSTRENGTH (string) Called\n");
00743 #endif // DEBUG_VER_
00744 if(PCPComm->PCAsk(PCRQRST)) {
00745 if(PCPComm->PCHear(PCPTemp)) {
00746 return (const char*)PCPTemp;
00747 }
00748 }
00749
00750 return 0;
00751 }
00766 int PCP :: PCPSigStrength()
00767 {
00768 #ifdef DEBUG_VER_
00769 fprintf(stderr, "PCP: PCPSIGSTRENGTH (int) Called\n");
00770 #endif // DEBUG_VER_
00771
00772 int sigstr;
00773 char digit;
00774 if(PCPComm->PCAsk(PCRQRST)) {
00775 if(PCPComm->PCHear(PCPTemp)) {
00776 digit = PCPTemp[2];
00777 if((digit >= 'A') && (digit <= 'F'))
00778 sigstr = (digit - 'A' + 1) * 16;
00779 else
00780 sigstr = atoi(&digit) * 16;
00781
00782 digit = PCPTemp[3];
00783 if((digit >= 'A') && (digit <= 'F'))
00784 sigstr += digit - 'A' + 1;
00785 else
00786 sigstr += atoi(&digit);
00787
00788 return sigstr;
00789 }
00790 }
00791
00792 return 0;
00793 }
00802 bool PCP :: PCPQueryOn()
00803 {
00804 #ifdef DEBUG_VER_
00805 fprintf(stderr, "PCP: PCPQUERYON Called\n");
00806 #endif // DEBUG_VER_
00807 if(PCPComm->PCAsk("H1")) {
00808 if(PCPComm->PCHear(PCPTemp)) {
00809 if(strcmp(PCPTemp, "H101") == 0)
00810 return true;
00811 else
00812 return false;
00813 }
00814 }
00815
00816 return false;
00817 }
00832 bool PCP :: PCPQuerySquelch()
00833 {
00834 char __tempvar1[8];
00835 bzero(__tempvar1, sizeof(__tempvar1));
00836 strncpy(__tempvar1, PCRASQL, sizeof(__tempvar1)-1);
00837 strncat(__tempvar1, PCRASQLCL, sizeof(__tempvar1)-strlen(__tempvar1)-1);
00838
00839 if (PCPComm->PCAsk(PCRQSQL)) {
00840 if(PCPComm->PCHear(PCPTemp)) {
00841 if (strncmp(PCPTemp, __tempvar1, 4)==0) {
00842 return false;
00843 } else {
00844 return true;
00845 }
00846 }
00847 }
00848 return false;
00849 }
00862 const char *PCP :: PCPGetPort()
00863 // return a character string representing the current
00864 // port setting /dev/*
00865 {
00866 return PCPRadio->PCPPort;
00867 }
00882 tcflag_t PCP :: PCPGetSpeed_t()
00883 {
00884 return PCPRadio->PCPSpeed;
00885 }
00897 const char *PCP :: PCPGetSpeed()
00898 {
00899 switch(PCPRadio->PCPSpeed) {
00900 case B300: return "300"; break;
00901 case B600: return "600"; break;
00902 case B1200: return "1200"; break;
00903 case B1800: return "1800"; break;
00904 case B2400: return "2400"; break;
00905 case B4800: return "4800"; break;
00906 case B9600: return "9600"; break;
00907 case B19200: return "19200"; break;
00908 case B38400: return "38400"; break;
00909 case B57600: return "57600"; break;
00910 default: return "unknown"; break;
00911 }
00912 return "unknown";
00913 }
00927 int PCP :: PCPGetVolume()
00928 {
00929 return (PCPRadio->PCPVolume);
00930 }
00942 const char *PCP :: PCPGetVolumeStr()
00943 {
00944 sprintf(PCPTemp, "%d", PCPRadio->PCPVolume);
00945 return (PCPTemp);
00946 }
00959 int PCP :: PCPGetSquelch()
00960 {
00961 return (PCPRadio->PCPSquelch);
00962 }
00974 const char *PCP :: PCPGetSquelchStr()
00975 {
00976 sprintf(PCPTemp, "%d", PCPRadio->PCPSquelch);
00977 return (PCPTemp);
00978 }
00991 pcrfreq_t PCP :: PCPGetFreq()
00992 {
00993 return PCPRadio->PCPFreq;
00994 }
01008 const char *PCP :: PCPGetFreqStr()
01009 {
01010 sprintf(PCPTemp, "%0.10lu", PCPRadio->PCPFreq);
01011 return PCPTemp;
01012 }
01026 const pcrcmd_t *PCP :: PCPGetMode()
01027 {
01028 return (PCPRadio->PCPMode);
01029 }
01041 const char *PCP :: PCPGetModeStr()
01042 {
01043 bzero(PCPTemp, sizeof(PCPTemp));
01044
01045 if (strcmp(PCRMODWFM, PCPRadio->PCPMode)==0) {
01046 strcpy(PCPTemp, "WFM");
01047 return PCPTemp;
01048 } else if (strcmp(PCRMODNFM, PCPRadio->PCPMode)==0) {
01049 strcpy(PCPTemp, "NFM");
01050 return PCPTemp;
01051 } else if (strcmp(PCRMODCW, PCPRadio->PCPMode)==0) {
01052 strcpy(PCPTemp, "CW");
01053 return PCPTemp;
01054 } else if (strcmp(PCRMODAM, PCPRadio->PCPMode)==0) {
01055 strcpy(PCPTemp, "AM");
01056 return PCPTemp;
01057 } else if (strcmp(PCRMODUSB, PCPRadio->PCPMode)==0) {
01058 strcpy(PCPTemp, "USB");
01059 return PCPTemp;
01060 } else if (strcmp(PCRMODLSB, PCPRadio->PCPMode)==0) {
01061 strcpy(PCPTemp, "LSB");
01062 return PCPTemp;
01063 }
01064
01065 strcpy(PCPTemp, "UNKNOWN");
01066 return PCPTemp;
01067
01068 }
01081 const pcrcmd_t *PCP :: PCPGetFilter()
01082 {
01083 return (PCPRadio->PCPFilter);
01084 }
01096 const char *PCP :: PCPGetFilterStr()
01097 {
01098 bzero(PCPTemp, sizeof(PCPTemp));
01099
01100 if (strcmp(PCRFLTR230, PCPRadio->PCPFilter)==0) {
01101 strcpy(PCPTemp, "230");
01102 return PCPTemp;
01103 } else if (strcmp(PCRFLTR50, PCPRadio->PCPFilter)==0) {
01104 strcpy(PCPTemp, "50");
01105 return PCPTemp;
01106 } else if (strcmp(PCRFLTR15, PCPRadio->PCPFilter)==0) {
01107 strcpy(PCPTemp, "15");
01108 return PCPTemp;
01109 } else if (strcmp(PCRFLTR6, PCPRadio->PCPFilter)==0) {
01110 strcpy(PCPTemp, "6");
01111 return PCPTemp;
01112 } else if (strcmp(PCRFLTR3, PCPRadio->PCPFilter)==0) {
01113 strcpy(PCPTemp, "3");
01114 return PCPTemp;
01115 }
01116
01117 return PCPRadio->PCPFilter;
01118 }
01131 const char *PCP :: PCPGetToneSq()
01132 {
01133 return PCPRadio->PCPToneSq;
01134 }
01146 const char *PCP :: PCPGetToneSqStr()
01147 {
01148 bzero(PCPTemp, sizeof(PCPTemp));
01149 sprintf(PCPTemp, "%f", PCPRadio->PCPToneSqFloat);
01150 return PCPTemp;
01151 }
01164 bool PCP :: PCPGetAutoGain()
01165 {
01166 return PCPRadio->PCPAutoGain;
01167 }
01179 const char *PCP :: PCPGetAutoGainStr()
01180 {
01181 bzero(PCPTemp, sizeof(PCPTemp));
01182 (PCPGetAutoGain())?(strcpy(PCPTemp,"1")):(strcpy(PCPTemp,"0"));
01183 return PCPTemp;
01184 }
01197 bool PCP :: PCPGetNB()
01198 {
01199 return PCPRadio->PCPNoiseBlank;
01200 }
01212 const char *PCP :: PCPGetNBStr()
01213 {
01214 bzero(PCPTemp, sizeof(PCPTemp));
01215 (PCPGetNB())?(strcpy(PCPTemp,"1")):(strcpy(PCPTemp,"0"));
01216 return PCPTemp;
01217 }
01230 bool PCP :: PCPGetRFAttenuator()
01231 {
01232 return PCPRadio->PCPRFAttenuator;
01233 }
01245 const char *PCP :: PCPGetRFAttenuatorStr()
01246 {
01247 bzero(PCPTemp, sizeof(PCPTemp));
01248 (PCPGetRFAttenuator())?(strcpy(PCPTemp,"1")):(strcpy(PCPTemp,"0"));
01249 return PCPTemp;
01250 }
01263 const PRadInf PCP :: PCPGetRadioInfo()
01264 {
01265 return *PCPRadio;
01266 }
01267
01268 bool PCP :: PCPCheckResponse()
01269 {
01270 PCPComm->PCHear(PCPTemp);
01271 if (strncmp(PCPTemp, PCRAOK, 4)==0) {
01272 PCPErrRead=false;
01273 return true;
01274 } else if (strncmp(PCPTemp, PCRABAD, 4)==0) {
01275 PCPErrRead=false;
01276 return false;
01277 }
01278
01279 PCPErrRead = true;
01280 return false;
01281 }