Exemplo n.º 1
0
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;
}