int main (int argc, char *argv[]) { int retVal=0; int relaysChanged=0; int firstTime=1; int lastRelayWriteSec=0; // Config file thingies int status=0; char* eString; char *globalConfFile="anitaSoft.config"; // Log stuff char *progName=basename(argv[0]); int millisecs=0; struct timespec milliWait; milliWait.tv_sec=0; int lastCal=0; time_t rawTime; // Setup log setlogmask(LOG_UPTO(LOG_INFO)); openlog (progName, LOG_PID, ANITA_LOG_FACILITY) ; // Set signal handlers signal(SIGUSR1, sigUsr1Handler); signal(SIGUSR2, sigUsr2Handler); signal(SIGTERM, handleBadSigs); signal(SIGINT, handleBadSigs); signal(SIGSEGV, handleBadSigs); //Dont' wait for children signal(SIGCLD, SIG_IGN); //Sort out PID File retVal=sortOutPidFile(progName); if(retVal!=0) { return retVal; } // Load Config kvpReset () ; status = configLoad (globalConfFile,"global") ; // Get Calibd output dirs if (status == CONFIG_E_OK) { hkDiskBitMask=kvpGetInt("hkDiskBitMask",1); disableUsb=kvpGetInt("disableUsb",1); if(disableUsb) hkDiskBitMask&=~USB_DISK_MASK; // disableNeobrick=kvpGetInt("disableNeobrick",1); // if(disableNeobrick) // hkDiskBitMask&=~NEOBRICK_DISK_MASK; disableHelium2=kvpGetInt("disableHelium2",1); if(disableHelium2) hkDiskBitMask&=~HELIUM2_DISK_MASK; disableHelium1=kvpGetInt("disableHelium1",1); if(disableHelium1) hkDiskBitMask&=~HELIUM1_DISK_MASK; } else { eString=configErrorString (status) ; syslog(LOG_ERR,"Error reading %s: %s\n",globalConfFile,eString); } makeDirectories(CALIBD_STATUS_LINK_DIR); makeDirectories(HK_TELEM_DIR); makeDirectories(HK_TELEM_LINK_DIR); prepWriterStructs(); //Need to set digital carrier num retVal=readConfigFile(); //Setup acromag acromagSetup(); ip470Setup(); //Set code values autoZeroStruct.code=IP320_AVZ; rawDataStruct.code=IP320_RAW; calDataStruct.code=IP320_CAL; do { if(printToScreen) printf("Initializing Calibd\n"); retVal=readConfigFile(); relaysChanged=1; currentState=PROG_STATE_RUN; //RJN for Hkd ip320Setup(); millisecs=0; lastRelayWriteSec=0; while(currentState==PROG_STATE_RUN) { time(&rawTime); //Set Relays to correct state if(relaysChanged || firstTime) retVal=setRelays(); if(relaysChanged || (rawTime-lastRelayWriteSec)>=relayWritePeriod) { if(printToScreen) { printf("Amplite1 (%d) Amplite2 (%d) BZAmpa1 (%d) BZAmpa2 (%d) NTUAmpa (%d)\tSB (%d) SSD_5V (%d) SSD_12V (%d) SSD_Shutdown (%d)\n",stateAmplite1,stateAmplite2,stateBZAmpa1,stateBZAmpa2,stateNTUAmpa,stateSB,stateNTUSSD5V,stateNTUSSD12V,stateNTUSSDShutdown); } writeStatus(); relaysChanged=0; lastRelayWriteSec=rawTime; } if(firstTime) firstTime=0; if((millisecs % readoutPeriod)==0) { time(&rawTime); // printf("Mag Ret: %d\n",retVal); if((rawTime-lastCal)>calibrationPeriod) { ip320Calibrate(); outputData(IP320_CAL); outputData(IP320_AVZ); lastCal=rawTime; } ip320Read(0); outputData(IP320_RAW); millisecs=1; } //Just for safety we'll reset the sleep time milliWait.tv_nsec=1000000; nanosleep(&milliWait,NULL); millisecs++; } //End of run loop } while(currentState==PROG_STATE_INIT); closeHkFilesAndTidy(&hkRawWriter); closeHkFilesAndTidy(&hkCalWriter); closeHkFilesAndTidy(&calibWriter); unlink(CALIBD_PID_FILE); syslog(LOG_INFO,"Calibd Terminating"); return 0; }
int main (int argc, char *argv[]) { char ip470carrier[FILENAME_MAX]; sprintf(ip470carrier,"%s",carrierDefault); int retVal,port,channel,value,ip470BoardLocation=0; int gpsOnPort,gpsOffPort,ndOnPort,ndOffPort,rfcmOnPort,rfcmOffPort; /* Config file thingies */ int status=0; char* eString ; /* Log stuff */ char *progName=basename(argv[0]); /* Getopt needs to run first: it'll resort the argv array */ char option; while ((option = getopt(argc, argv, "tn:")) != -1) { switch (option) { case 't': toggle = 1; printf("Toggle mode.\n"); break; case 'n': nbits = atoi(optarg); if (nbits < 2) nbits = 1; printf("%d-bit mode.\n", nbits); break; default: return usage(progName); } } /* All non-options are now offset by optind */ if(argc-optind==3) { port = atoi(argv[optind]); channel = atoi(argv[optind+1]); value = atoi(argv[optind+2]); } else return usage(progName); if (channel + nbits > 8) return usage(progName); /* Setup log */ setlogmask(LOG_UPTO(LOG_INFO)); openlog (progName, LOG_PID, ANITA_LOG_FACILITY) ; /* Load Config */ kvpReset () ; status = configLoad ("Hkd.config","relaycontrol") ; eString = configErrorString (status) ; /* Get Port Numbers */ if (status == CONFIG_E_OK) { char *temp; temp = kvpGetString("ip470carrier"); if (temp != NULL) sprintf(ip470carrier,"%s",temp); ip470BoardLocation=kvpGetInt("ip470BoardLocation",-1); gpsOnPort=kvpGetInt("gpsOnLogic",-1); gpsOffPort=kvpGetInt("gpsOffLogic",-1); ndOnPort=kvpGetInt("ndOnLogic",-1); ndOffPort=kvpGetInt("ndOffLogic",-1); rfcmOnPort=kvpGetInt("rfcmOnLogic",-1); rfcmOffPort=kvpGetInt("rfcmOffLogic",-1); } else { printf("Error trying to read %s:\t%s\n","Hkd.config",eString); } printf("ip470carrier: %s\n", ip470carrier); retVal=0; acromagSetup(ip470BoardLocation, ip470carrier); ip470Setup(); retVal=ip470Write(port,channel,value); if(retVal<0) { printf("Error setting: port %d, chan %d, value %d\n%d\n",port,channel,value,retVal); return 0; } printf("Set: port %d, chan %d, value %d\n%d\n",port,channel,value,retVal); return 0; }