Beispiel #1
0
OsStatus EmailNotifier::initStrings(TiXmlElement* emailElement)
{
   TiXmlElement* element = emailElement->FirstChildElement("email-intro");
   textContentShallow(mEmailStrIntro, element);
   assembleMsg(mEmailStrIntro, SipXecsService::Name(), mEmailStrIntro);

   element = emailElement->FirstChildElement("email-subject");
   textContentShallow(mEmailStrSubject, element);

   element = emailElement->FirstChildElement("email-alarm");
   textContentShallow(mEmailStrAlarm, element);

   element = emailElement->FirstChildElement("email-time");
   textContentShallow(mEmailStrTime, element);

   element = emailElement->FirstChildElement("email-host");
   textContentShallow(mEmailStrHost, element);

   element = emailElement->FirstChildElement("email-severity");
   textContentShallow(mEmailStrSeverity, element);

   element = emailElement->FirstChildElement("email-description");
   textContentShallow(mEmailStrDescription, element);

   element = emailElement->FirstChildElement("email-resolution");
   textContentShallow(mEmailStrResolution, element);

   element = emailElement->FirstChildElement("email-from");
   textContentShallow(mEmailStrFrom, element);
   assembleMsg(mEmailStrFrom, SipXecsService::Name(), mEmailStrFrom);

   return OS_SUCCESS;
}
Beispiel #2
0
OsStatus SmsNotifier::handleAlarm(const OsTime alarmTime,
      const UtlString& callingHost,
      const cAlarmData* alarmData,
      const UtlString& alarmMsg)
{
   OsStatus retval = OS_FAILED;

   //execute the mail command for each user
   UtlString groupKey(alarmData->getGroupName());
   if (!groupKey.isNull())
   {
      UtlContainable* pContact = mContacts.findValue(&groupKey);
      if (pContact)
      {
         // Process the comma separated list of contacts
         UtlString* contactList = dynamic_cast<UtlString*> (pContact);
         if (!contactList->isNull())
         {
            MailMessage message(mSmsStrFrom, mReplyTo, mSmtpServer);
            UtlTokenizer tokenList(*contactList);

            UtlString entry;
            while (tokenList.next(entry, ","))
            {
               message.To(entry, entry);
            }

            UtlString body;
            UtlString tempStr;

            UtlString sevStr = Os::Logger::instance().priorityName(alarmData->getSeverity());
            body.append(alarmMsg);

            Os::Logger::instance().log(FAC_ALARM, PRI_DEBUG, "AlarmServer: sms body is %s", body.data());

            message.Body(body);

            UtlSList subjectParams;
            UtlString codeStr(alarmData->getCode());
            UtlString titleStr(sevStr);
            subjectParams.append(&codeStr);
            subjectParams.append(&titleStr);
            assembleMsg(mSmsStrSubject, subjectParams, tempStr);
            message.Subject(tempStr);

            // delegate send to separate task so as not to block
            EmailSendTask::getInstance()->sendMessage(message);
         }
      }
   }

   return retval;
}
Beispiel #3
0
OsStatus SmsNotifier::initStrings(TiXmlElement* smsElement)
{
   Os::Logger::instance().log(FAC_ALARM, PRI_DEBUG, "SmsNotifier initStrings");

   TiXmlElement* element = smsElement->FirstChildElement("email-intro");

   element = smsElement->FirstChildElement("email-subject");
   textContentShallow(mSmsStrSubject, element);

   element = smsElement->FirstChildElement("email-host");
   textContentShallow(mSmsStrHost, element);

   element = smsElement->FirstChildElement("email-from");
   textContentShallow(mSmsStrFrom, element);
   assembleMsg(mSmsStrFrom, SipXecsService::Name(), mSmsStrFrom);

   return OS_SUCCESS;
}
Beispiel #4
0
bool cAlarmServer::handleAlarm(UtlString& callingHost, UtlString& alarmId, UtlSList& alarmParams)
{
   cAlarmData* alarmData;
   OsTime now, alarmTime;
   OsDateTime::getCurTime(alarmTime);
   OsDateTime::getCurTimeSinceBoot(now);

   alarmData = lookupAlarm(alarmId);
   if (alarmData)
   {
      alarmData->setTime(now);
      alarmData->incrCount();

      if (alarmData->applyThresholds())
      {
         // alarm has been filtered out due to thresholds
         OsSysLog::add(FAC_ALARM, PRI_INFO,
                       "Alarm '%s' not logged due to thresholds",
                       alarmId.data());
         return true;
      }

      //:TODO: keep counts at each severity level
      mAlarmCount++;

      UtlString alarmMsg;
      assembleMsg(alarmData->getDescription(), alarmParams, alarmMsg);

      for (int i=0; i<cAlarmData::eActionMax; i++)
      {
         if (gbActions[i] && alarmData->getAction((cAlarmData::eAlarmActions)i) && mpNotifiers[i])
         {
            mpNotifiers[i]->handleAlarm(alarmTime, callingHost, alarmData, alarmMsg);
         }
      }
      return true;
   }
   else
   {
      OsSysLog::add(FAC_ALARM, PRI_ERR, "Lookup of alarm '%s' failed",
                    alarmId.data());
      return false;
   }
}
Beispiel #5
0
OsStatus EmailNotifier::handleAlarm(const OsTime alarmTime,
      const UtlString& callingHost,
      const cAlarmData* alarmData,
      const UtlString& alarmMsg)
{
   OsStatus retval = OS_FAILED;

   //execute the mail command for each user
   UtlString groupKey(alarmData->getGroupName());
   if (!groupKey.isNull())
   {
      UtlContainable* pContact = mContacts.findValue(&groupKey);
      if (pContact)
      {
         // Process the comma separated list of contacts
         UtlString* contactList = dynamic_cast<UtlString*> (pContact);
         if (!contactList->isNull())
         {
            MailMessage message(mEmailStrFrom, mReplyTo, mSmtpServer);
            UtlTokenizer tokenList(*contactList);

            UtlString entry;
            while (tokenList.next(entry, ","))
            {
               message.To(entry, entry);
            }

            UtlString body;
            UtlString tempStr;

            body = mEmailStrIntro;
            body.append("\n");

            assembleMsg(mEmailStrAlarm, alarmData->getCode(), tempStr);
            body.append(tempStr);
            body.append("\n");

            assembleMsg(mEmailStrHost, callingHost, tempStr);
            body.append(tempStr);
            body.append("\n");

            OsDateTime logTime(alarmTime);
            UtlString strTime;
            logTime.getIsoTimeStringZus(strTime);
            assembleMsg(mEmailStrTime, strTime, tempStr);
            body.append(tempStr);
            body.append("\n");

            UtlString sevStr = OsSysLog::priorityName(alarmData->getSeverity());
            assembleMsg(mEmailStrSeverity, sevStr, tempStr);
            body.append(tempStr);
            body.append("\n");
            assembleMsg(mEmailStrDescription, alarmMsg, tempStr);
            body.append(tempStr);
            body.append("\n");
            assembleMsg(mEmailStrResolution, alarmData->getResolution(), tempStr);
            body.append(tempStr);
            OsSysLog::add(FAC_ALARM, PRI_DEBUG, "AlarmServer: email body is %s", body.data());

            message.Body(body);

            UtlSList subjectParams;
            UtlString codeStr(alarmData->getCode());
            UtlString titleStr(alarmData->getShortTitle());
            subjectParams.append(&codeStr);
            subjectParams.append(&titleStr);
            assembleMsg(mEmailStrSubject, subjectParams, tempStr);
            message.Subject(tempStr);

            // delegate send to separate task so as not to block
            EmailSendTask::getInstance()->sendMessage(message);
         }
      }
   }

   return retval;
}
Beispiel #6
0
void logData (unsigned char hilOn, unsigned char* data4SPI){
	unsigned char rawSentence[35];
	
	// sample period variable
	static unsigned char samplePeriod = 1;
	static unsigned char tmpBuf [37];
	
	// temp var to store the assembled message
	unsigned char i;
	unsigned char len2SPI=0;
	unsigned char bufLen = 0;
	unsigned char aknSentence[6];

	memset(tmpBuf, 0, sizeof(tmpBuf));
		
	switch (samplePeriod){
		case 1: //GPS
			rawSentence[0] =  gpsControlData.year	;			
			rawSentence[1] =  gpsControlData.month	;		
			rawSentence[2] =  gpsControlData.day	;			
			rawSentence[3] =  gpsControlData.hour	;			
			rawSentence[4] =  gpsControlData.min	;			
			rawSentence[5] =  gpsControlData.sec	;			
			rawSentence[6] = gpsControlData.lat.chData[0];	
			rawSentence[7] = gpsControlData.lat.chData[1];	
			rawSentence[8] = gpsControlData.lat.chData[2];				
			rawSentence[9] = gpsControlData.lat.chData[3];			
			rawSentence[10] = gpsControlData.lon.chData[0];	
			rawSentence[11] = gpsControlData.lon.chData[1];	
			rawSentence[12] = gpsControlData.lon.chData[2];	
			rawSentence[13] = gpsControlData.lon.chData[3];	
			rawSentence[14] = gpsControlData.height.chData[0];		
			rawSentence[15] = gpsControlData.height.chData[1];	
			rawSentence[16] = gpsControlData.height.chData[2];		
			rawSentence[17] = gpsControlData.height.chData[3];	
			rawSentence[18] = gpsControlData.cog.chData[0];	
			rawSentence[19] = gpsControlData.cog.chData[1];	
			rawSentence[20] = gpsControlData.sog.chData[0];	
			rawSentence[21] = gpsControlData.sog.chData[1];	
			rawSentence[22] = gpsControlData.hdop.chData[0];	
			rawSentence[23] = gpsControlData.hdop.chData[1];	
			rawSentence[24] = gpsControlData.fix			;	
			rawSentence[25] = gpsControlData.sats			;	
			rawSentence[26] = gpsControlData.newValue		;	
		
			// assemble the GPS data for protocol sending
			assembleMsg(&rawSentence[0], GPSMSG_LEN, GPSMSG_ID, tmpBuf);

			// add it to the circular buffer and SPI queue
			for( i = 0; i < GPSMSG_LEN+7; i += 1 ){
				writeBack(logBuffer,tmpBuf[i]);
				data4SPI[i+1] = tmpBuf[i];
			}					

			// set the total data out for SPI
			len2SPI = GPSMSG_LEN+7; 

		break;
		case 2: // LOAD 
			rawSentence[0] = statusControlData.load		 	;
			rawSentence[1] = statusControlData.vdetect	 	;
			rawSentence[2] = statusControlData.bVolt.chData[0] ;
			rawSentence[3] = statusControlData.bVolt.chData[1] ;

			// assemble the CPU load data for protocol sending	
			assembleMsg(&rawSentence[0], LOADMSG_LEN, LOADMSG_ID, tmpBuf);
			// add it to the circular buffer and SPI queue
			for( i = 0; i < LOADMSG_LEN+7; i += 1 ){
				writeBack(logBuffer,tmpBuf[i]);
				data4SPI[i+1] = tmpBuf[i];
			}

			// set the total data out for SPI
			len2SPI = LOADMSG_LEN+7; 	
			
		break;
		case 3:	// RAW or XYZ depending if we are logging raw @ 100		
			#ifdef LOGRAW100 	// If we need to log raw at 100 Hz
				rawSentence[0] = xyzControlData.Xcoord.chData[0];
				rawSentence[1] = xyzControlData.Xcoord.chData[1];
				rawSentence[2] = xyzControlData.Xcoord.chData[2];
				rawSentence[3] = xyzControlData.Xcoord.chData[3];
				rawSentence[4] = xyzControlData.Ycoord.chData[0];	
				rawSentence[5] = xyzControlData.Ycoord.chData[1];	
				rawSentence[6] = xyzControlData.Ycoord.chData[2];	
				rawSentence[7] = xyzControlData.Ycoord.chData[3];	
				rawSentence[8] = xyzControlData.Zcoord.chData[0];
				rawSentence[9] = xyzControlData.Zcoord.chData[1];
				rawSentence[10]= xyzControlData.Zcoord.chData[2];
				rawSentence[11]= xyzControlData.Zcoord.chData[3];
				rawSentence[12]= xyzControlData.VX.chData[0]	;	
				rawSentence[13]= xyzControlData.VX.chData[1]	;	
				rawSentence[14]= xyzControlData.VX.chData[2]	;	
				rawSentence[15]= xyzControlData.VX.chData[3]	;	
				rawSentence[16]= xyzControlData.VY.chData[0]	;	
				rawSentence[17]= xyzControlData.VY.chData[1]	;	
				rawSentence[18]= xyzControlData.VY.chData[2]	;	
				rawSentence[19]= xyzControlData.VY.chData[3]	;	
				rawSentence[20]= xyzControlData.VZ.chData[0]	;	
				rawSentence[21]= xyzControlData.VZ.chData[1]	;	
				rawSentence[22]= xyzControlData.VZ.chData[2]	;	
				rawSentence[23]= xyzControlData.VZ.chData[3]	;	
			
				// assemble the XYZ data for protocol sending
				assembleMsg(&rawSentence[0], XYZMSG_LEN, XYZMSG_ID, tmpBuf);
				// add it to the circular buffer and SPI queue
				for( i = 0; i < XYZMSG_LEN+7; i += 1 ){
					writeBack(logBuffer,tmpBuf[i]);
					data4SPI[i+1+len2SPI] = tmpBuf[i];
				}
			
		    	// set the total data out for SPI
				len2SPI = XYZMSG_LEN+7;
			
			#else
				rawSentence[0] 	=	rawControlData.gyroX.chData[0];	
				rawSentence[1]  =	rawControlData.gyroX.chData[1];	
				rawSentence[2] 	=	rawControlData.gyroY.chData[0];		 	
				rawSentence[3]  =	rawControlData.gyroY.chData[1];	
				rawSentence[4] 	=	rawControlData.gyroZ.chData[0];	 
				rawSentence[5] 	=	rawControlData.gyroZ.chData[1];	 
				rawSentence[6] =	rawControlData.accelX.chData[0];	 
				rawSentence[7] =	rawControlData.accelX.chData[1];	   
				rawSentence[8] =	rawControlData.accelY.chData[0];	  
				rawSentence[9] =	rawControlData.accelY.chData[1];	  
				rawSentence[10] =	rawControlData.accelZ.chData[0];	  
				rawSentence[11] =	rawControlData.accelZ.chData[1];	  
				rawSentence[12] =	rawControlData.magX.chData[0];	  
				rawSentence[13] =	rawControlData.magX.chData[1];	  
				rawSentence[14] =	rawControlData.magY.chData[0];	  
				rawSentence[15] =	rawControlData.magY.chData[1];	  
				rawSentence[16] =	rawControlData.magZ.chData[0];	  
				rawSentence[17] =	rawControlData.magZ.chData[1];	
				// included in SLUGS MKII
				rawSentence[18] =	rawControlData.baro.chData[0];	  
				rawSentence[19] =	rawControlData.baro.chData[1];	
				rawSentence[20] =	rawControlData.pito.chData[0];	  
				rawSentence[21] =	rawControlData.pito.chData[1];	
				rawSentence[22] =	rawControlData.powr.chData[0];	  
				rawSentence[23] =	rawControlData.powr.chData[1];
				rawSentence[24] =	rawControlData.ther.chData[0];	  
				rawSentence[25] =	rawControlData.ther.chData[1];
				
		    	// assemble the Raw Sensor data for protocol sending	
				assembleMsg(&rawSentence[0], RAWMSG_LEN, RAWMSG_ID, tmpBuf);

				// add it to the circular buffer and SPI queue
				for( i = 0; i < RAWMSG_LEN+7; i += 1 ){
					writeBack(logBuffer,tmpBuf[i]);
					data4SPI[i+1] = tmpBuf[i];
				}		

				// set the total data out for SPI			
				len2SPI = RAWMSG_LEN+7; 			
			#endif
				
		break;
		case 4:	// Dynamic and Reboot (if required)		
			rawSentence[0] = dynTempControlData.dynamic.chData[0];
			rawSentence[1] = dynTempControlData.dynamic.chData[1];
			rawSentence[2] = dynTempControlData.dynamic.chData[2];
			rawSentence[3] = dynTempControlData.dynamic.chData[3];
			rawSentence[4] = dynTempControlData.stat.chData[0]	;	
			rawSentence[5] = dynTempControlData.stat.chData[1]	;	
			rawSentence[6] = dynTempControlData.stat.chData[2]	;	
			rawSentence[7] = dynTempControlData.stat.chData[3]	;	
			rawSentence[8] = dynTempControlData.temp.chData[0]	;
			rawSentence[9] = dynTempControlData.temp.chData[1]	;


			// assemble the Raw Sensor data for protocol sending	
			assembleMsg(&rawSentence[0], DYNMSG_LEN, DYNMSG_ID, tmpBuf);

			// add it to the circular buffer and SPI queue
			for( i = 0; i < DYNMSG_LEN+7; i += 1 ){
				writeBack(logBuffer,tmpBuf[i]);
				data4SPI[i+1] = tmpBuf[i];
			}		
			// set the total data out for SPI			
			len2SPI = DYNMSG_LEN+7; 			
			
			// it there has been a reboot
			if(aknControlData.sensorReboot >0){
				// clear tmpBuf
				memset(tmpBuf, 0, sizeof(tmpBuf));
				
				// configure the akn sentence
				memset(aknSentence,0, 6);
				aknSentence[3] = aknControlData.sensorReboot;
				
				// assemble the message
				assembleMsg(&aknSentence[0], AKNMSG_LEN, AKNMSG_ID, tmpBuf);
				
				// add it to the SPI QUEUE
				for( i = 0; i < AKNMSG_LEN+7; i += 1 ){

					data4SPI[i+1+len2SPI] = tmpBuf[i];
				}		
				
				// clear the flag
				aknControlData.sensorReboot = 0;
				// set the total data out for SPI			
				len2SPI += AKNMSG_LEN+7; 	
			}
		break;

		case 5:	// Bias		

			rawSentence[0] = biasControlData.axb.chData[0] ;
			rawSentence[1] = biasControlData.axb.chData[1] ;
			rawSentence[2] = biasControlData.axb.chData[2] ;
			rawSentence[3] = biasControlData.axb.chData[3] ;
			rawSentence[4] = biasControlData.ayb.chData[0] ;	
			rawSentence[5] = biasControlData.ayb.chData[1] ;	
			rawSentence[6] = biasControlData.ayb.chData[2] ;	
			rawSentence[7] = biasControlData.ayb.chData[3] ;	
			rawSentence[8] = biasControlData.azb.chData[0] ;
			rawSentence[9] = biasControlData.azb.chData[1] ;
			rawSentence[10]= biasControlData.azb.chData[2];
			rawSentence[11]= biasControlData.azb.chData[3];
			rawSentence[12]= biasControlData.gxb.chData[0];	
			rawSentence[13]= biasControlData.gxb.chData[1];	
			rawSentence[14]= biasControlData.gxb.chData[2];	
			rawSentence[15]= biasControlData.gxb.chData[3];	
			rawSentence[16]= biasControlData.gyb.chData[0];	
			rawSentence[17]= biasControlData.gyb.chData[1];	
			rawSentence[18]= biasControlData.gyb.chData[2];	
			rawSentence[19]= biasControlData.gyb.chData[3];	
			rawSentence[20]= biasControlData.gzb.chData[0];	
			rawSentence[21]= biasControlData.gzb.chData[1];	
			rawSentence[22]= biasControlData.gzb.chData[2];	
			rawSentence[23]= biasControlData.gzb.chData[3];	
		
			// assemble the Raw Sensor data for protocol sending	
			assembleMsg(&rawSentence[0], BIAMSG_LEN, BIAMSG_ID, tmpBuf);

			// add it to the circular buffer and SPI queue
			for( i = 0; i < BIAMSG_LEN+7; i += 1 ){
				writeBack(logBuffer,tmpBuf[i]);
				data4SPI[i+1] = tmpBuf[i];
			}		
			// set the total data out for SPI			
			len2SPI = BIAMSG_LEN+7; 			
			
		break;
		case 6: // Diagnostic
			rawSentence[0]	=	diagControlData.fl1.chData[0];	
			rawSentence[1]	=	diagControlData.fl1.chData[1];	
			rawSentence[2]	=	diagControlData.fl1.chData[2];	
			rawSentence[3]	=	diagControlData.fl1.chData[3];	
			rawSentence[4]	=	diagControlData.fl2.chData[0];	
			rawSentence[5]	=	diagControlData.fl2.chData[1];	
			rawSentence[6]	=	diagControlData.fl2.chData[2];	
			rawSentence[7]	=	diagControlData.fl2.chData[3];	
			rawSentence[8]	=	diagControlData.fl3.chData[0];	
			rawSentence[9]	=	diagControlData.fl3.chData[1];	
			rawSentence[10]=	diagControlData.fl3.chData[2];	
			rawSentence[11]=	diagControlData.fl3.chData[3];	
			rawSentence[12]=	diagControlData.sh1.chData[0];	
			rawSentence[13]=	diagControlData.sh1.chData[1];	
			rawSentence[14]=	diagControlData.sh2.chData[0];	
			rawSentence[15]=	diagControlData.sh2.chData[1];	
			rawSentence[16]=	diagControlData.sh3.chData[0];	
			rawSentence[17]=	diagControlData.sh3.chData[1];
		
		    // assemble the Diagnostic data for protocol sending	
			assembleMsg(&rawSentence[0], DIAMSG_LEN, DIAMSG_ID, tmpBuf);
			
			// add it to the circular buffer and SPI queue
			for( i = 0; i < DIAMSG_LEN+7; i += 1 ){
				writeBack(logBuffer,tmpBuf[i]);
				data4SPI[i+1] = tmpBuf[i];
			}

			// set the total data out for SPI
			len2SPI = (DIAMSG_LEN+7); 			
		break;
		
		case 7: // Pilot Console Data
			rawSentence[0] = pilControlData.dt.chData[0]	;
			rawSentence[1] = pilControlData.dt.chData[1]	;
			rawSentence[2] = pilControlData.dla.chData[0];
			rawSentence[3] = pilControlData.dla.chData[1];
			rawSentence[4] = pilControlData.dra.chData[0];
			rawSentence[5] = pilControlData.dra.chData[1];
			rawSentence[6] = pilControlData.dr.chData[0]	;
			rawSentence[7] = pilControlData.dr.chData[1]	;
			rawSentence[8] = pilControlData.de.chData[0]	;
			rawSentence[9] = pilControlData.de.chData[1]	;
		
		    // assemble the Pilot Console data for protocol sending	
			assembleMsg(&rawSentence[0], PILMSG_LEN, PILMSG_ID, tmpBuf);
			
			// add it to the circular buffer and SPI queue
			for( i = 0; i < PILMSG_LEN+7; i += 1 ){
				writeBack(logBuffer,tmpBuf[i]);
				data4SPI[i+1] = tmpBuf[i];
			}

			// set the total data out for SPI
			len2SPI = (PILMSG_LEN+7); 			
		break;
		
		case 8: // Sensor Data in meaningful units
			rawSentence[0] = senControlData.Ax.chData[0];
			rawSentence[1] = senControlData.Ax.chData[1];
			rawSentence[2] = senControlData.Ax.chData[2];
			rawSentence[3] = senControlData.Ax.chData[3];
			rawSentence[4] = senControlData.Ay.chData[0];
			rawSentence[5] = senControlData.Ay.chData[1];
			rawSentence[6] = senControlData.Ay.chData[2];
			rawSentence[7] = senControlData.Ay.chData[3];
			rawSentence[8] = senControlData.Az.chData[0];
			rawSentence[9] = senControlData.Az.chData[1];
			rawSentence[10]= senControlData.Az.chData[2];
			rawSentence[11]= senControlData.Az.chData[3];
			rawSentence[12]= senControlData.Mx.chData[0];
			rawSentence[13]= senControlData.Mx.chData[1];
			rawSentence[14]= senControlData.Mx.chData[2];
			rawSentence[15]= senControlData.Mx.chData[3];
			rawSentence[16]= senControlData.My.chData[0];
			rawSentence[17]= senControlData.My.chData[1];
			rawSentence[18]= senControlData.My.chData[2];
			rawSentence[19]= senControlData.My.chData[3];
			rawSentence[20]= senControlData.Mz.chData[0];
			rawSentence[21]= senControlData.Mz.chData[1];
			rawSentence[22]= senControlData.Mz.chData[2];
			rawSentence[23]= senControlData.Mz.chData[3];
			
		    // assemble the Pilot Console data for protocol sending	
			assembleMsg(&rawSentence[0], SENMSG_LEN, SENMSG_ID, tmpBuf);
			
			// add it to the circular buffer and SPI queue
			for( i = 0; i < SENMSG_LEN+7; i += 1 ){
				writeBack(logBuffer,tmpBuf[i]);
				data4SPI[i+1] = tmpBuf[i];
			}

			// set the total data out for SPI
			len2SPI = (SENMSG_LEN+7); 			
		break;
		default:
			data4SPI[0] = 0;
		break;
	}
	
	memset(tmpBuf, 0,  sizeof(tmpBuf));
	
	// Attitude data. Gets included every sample time
	// ==============================================
	rawSentence[0] = attitudeControlData.roll.chData[0]		;
	rawSentence[1] = attitudeControlData.roll.chData[1]		;
	rawSentence[2] = attitudeControlData.roll.chData[2]		;
	rawSentence[3] = attitudeControlData.roll.chData[3]		;
	rawSentence[4] = attitudeControlData.pitch.chData[0]	;	
	rawSentence[5] = attitudeControlData.pitch.chData[1]	;	
	rawSentence[6] = attitudeControlData.pitch.chData[2]	;	
	rawSentence[7] = attitudeControlData.pitch.chData[3]	;	
	rawSentence[8] = attitudeControlData.yaw.chData[0]		;
	rawSentence[9] = attitudeControlData.yaw.chData[1]		;
	rawSentence[10] =attitudeControlData.yaw.chData[2]		;
	rawSentence[11] =attitudeControlData.yaw.chData[3]		;
	rawSentence[12] =attitudeControlData.p.chData[0]		;	
	rawSentence[13] =attitudeControlData.p.chData[1]		;	
	rawSentence[14] =attitudeControlData.p.chData[2]		;	
	rawSentence[15] =attitudeControlData.p.chData[3]		;	
	rawSentence[16] =attitudeControlData.q.chData[0]		;	
	rawSentence[17] =attitudeControlData.q.chData[1]		;	
	rawSentence[18] =attitudeControlData.q.chData[2]		;	
	rawSentence[19] =attitudeControlData.q.chData[3]		;	
	rawSentence[20] =attitudeControlData.r.chData[0]		;	
	rawSentence[21] =attitudeControlData.r.chData[1]		;	
	rawSentence[22] =attitudeControlData.r.chData[2]		;	
	rawSentence[23] =attitudeControlData.r.chData[3]		;	
	rawSentence[24] =attitudeControlData.timeStamp.chData[0];	
	rawSentence[25] =attitudeControlData.timeStamp.chData[1];					 	
	
	// assemble the Attitude data for protocol sending
	assembleMsg(&rawSentence[0], ATTMSG_LEN, ATTMSG_ID, tmpBuf);
	
	// add it to the circular buffer and SPI queue
	for( i = 0; i < ATTMSG_LEN+7; i += 1 ){
		writeBack(logBuffer,tmpBuf[i]);
		data4SPI[i+1+len2SPI] = tmpBuf[i];
	}					
	
	// increment the data counter for SPI
	len2SPI += ATTMSG_LEN+7; 
	
	memset(tmpBuf, 0, sizeof(tmpBuf));
	
	// XYZ data. Gets included every sample time
	// ==============================================
	
	#ifdef LOGRAW100
		rawSentence[0] 	=	rawControlData.gyroX.chData[0];	
		rawSentence[1]  =	rawControlData.gyroX.chData[1];	
		rawSentence[2] 	=	rawControlData.gyroY.chData[0];		 	
		rawSentence[3]  =	rawControlData.gyroY.chData[1];	
		rawSentence[4] 	=	rawControlData.gyroZ.chData[0];	 
		rawSentence[5] 	=	rawControlData.gyroZ.chData[1];	 
		rawSentence[6] =	rawControlData.accelX.chData[0];	 
		rawSentence[7] =	rawControlData.accelX.chData[1];	   
		rawSentence[8] =	rawControlData.accelY.chData[0];	  
		rawSentence[9] =	rawControlData.accelY.chData[1];	  
		rawSentence[10] =	rawControlData.accelZ.chData[0];	  
		rawSentence[11] =	rawControlData.accelZ.chData[1];	  
		rawSentence[12] =	rawControlData.magX.chData[0];	  
		rawSentence[13] =	rawControlData.magX.chData[1];	  
		rawSentence[14] =	rawControlData.magY.chData[0];	  
		rawSentence[15] =	rawControlData.magY.chData[1];	  
		rawSentence[16] =	rawControlData.magZ.chData[0];	  
		rawSentence[17] =	rawControlData.magZ.chData[1];	
		// included in SLUGS MKII
		rawSentence[18] =	rawControlData.baro.chData[0];	  
		rawSentence[19] =	rawControlData.baro.chData[1];	
		rawSentence[20] =	rawControlData.pito.chData[0];	  
		rawSentence[21] =	rawControlData.pito.chData[1];	
		rawSentence[22] =	rawControlData.powr.chData[0];	  
		rawSentence[23] =	rawControlData.powr.chData[1];
		rawSentence[24] =	rawControlData.ther.chData[0];	  
		rawSentence[25] =	rawControlData.ther.chData[1];		

		// assemble the Raw Sensor data for protocol sending	
		assembleMsg(&rawSentence[0], RAWMSG_LEN, RAWMSG_ID, tmpBuf);

		// add it to the circular buffer and SPI queue
		for( i = 0; i < RAWMSG_LEN+7; i += 1 ){
			writeBack(logBuffer,tmpBuf[i]);
			data4SPI[i+1+len2SPI] = tmpBuf[i];
		}		

		// set the total data out for SPI			
		data4SPI[0] = len2SPI + RAWMSG_LEN+7; 	
	#else
		rawSentence[0] = xyzControlData.Xcoord.chData[0];
		rawSentence[1] = xyzControlData.Xcoord.chData[1];
		rawSentence[2] = xyzControlData.Xcoord.chData[2];
		rawSentence[3] = xyzControlData.Xcoord.chData[3];
		rawSentence[4] = xyzControlData.Ycoord.chData[0];	
		rawSentence[5] = xyzControlData.Ycoord.chData[1];	
		rawSentence[6] = xyzControlData.Ycoord.chData[2];	
		rawSentence[7] = xyzControlData.Ycoord.chData[3];	
		rawSentence[8] = xyzControlData.Zcoord.chData[0];
		rawSentence[9] = xyzControlData.Zcoord.chData[1];
		rawSentence[10]= xyzControlData.Zcoord.chData[2];
		rawSentence[11]= xyzControlData.Zcoord.chData[3];
		rawSentence[12]= xyzControlData.VX.chData[0]	;	
		rawSentence[13]= xyzControlData.VX.chData[1]	;	
		rawSentence[14]= xyzControlData.VX.chData[2]	;	
		rawSentence[15]= xyzControlData.VX.chData[3]	;	
		rawSentence[16]= xyzControlData.VY.chData[0]	;	
		rawSentence[17]= xyzControlData.VY.chData[1]	;	
		rawSentence[18]= xyzControlData.VY.chData[2]	;	
		rawSentence[19]= xyzControlData.VY.chData[3]	;	
		rawSentence[20]= xyzControlData.VZ.chData[0]	;	
		rawSentence[21]= xyzControlData.VZ.chData[1]	;	
		rawSentence[22]= xyzControlData.VZ.chData[2]	;	
		rawSentence[23]= xyzControlData.VZ.chData[3]	;	
	
		// assemble the XYZ data for protocol sending
		assembleMsg(&rawSentence[0], XYZMSG_LEN, XYZMSG_ID, tmpBuf);
		// add it to the circular buffer and SPI queue
		for( i = 0; i < XYZMSG_LEN+7; i += 1 ){
			writeBack(logBuffer,tmpBuf[i]);
			data4SPI[i+1+len2SPI] = tmpBuf[i];
		}
	
    	// set the total data out for SPI
		data4SPI[0] = len2SPI + XYZMSG_LEN+7; 
	
	#endif
		
	// increment/overflow the samplePeriod counter
	// configured for 10 Hz in non vital messages
	samplePeriod = (samplePeriod >= 8)? 1: samplePeriod + 1;
	
	// get the Length of the logBuffer
	bufLen = getLength(logBuffer);
	
	// if HIL is ON do not transmit diagnostic data in the diagnostic port
	// let the circular buffer overwrite itself
	hilOn =1;
	if (hilOn!= 1){		
		// if the interrupt catched up with the circularBuffer
		//  then turn on the DMA
		if(!(DMA0CONbits.CHEN) && bufLen> 0){
			// Configure the bytes to send
			DMA0CNT =  bufLen<= (MAXSEND-1)? bufLen-1: MAXSEND-1;		
			// copy the buffer to the DMA channel outgoing buffer	
			copyBufferToDMA((unsigned char) DMA0CNT+1);
			// Enable the DMA
			DMA0CONbits.CHEN = 1;
			// Init the transmission
			DMA0REQbits.FORCE = 1;
		}
	}

}
Beispiel #7
0
OsStatus EmailNotifier::handleAlarm(const OsTime alarmTime, 
      const UtlString& callingHost, 
      const cAlarmData* alarmData, 
      const UtlString& alarmMsg)
{
   OsStatus retval = OS_FAILED;

   UtlString body;
   UtlString tempStr;

   body = mEmailStrIntro;
   body.append("\n");
   
   assembleMsg(mEmailStrAlarm, alarmData->getCode(), tempStr);
   body.append(tempStr);
   body.append("\n");
   
   assembleMsg(mEmailStrHost, callingHost, tempStr);
   body.append(tempStr);
   body.append("\n");
   
   OsDateTime logTime(alarmTime);
   UtlString strTime;
   logTime.getIsoTimeStringZus(strTime);
   assembleMsg(mEmailStrTime, strTime, tempStr);
   body.append(tempStr);
   body.append("\n");
   
   UtlString sevStr = OsSysLog::priorityName(alarmData->getSeverity());
   assembleMsg(mEmailStrSeverity, sevStr, tempStr);
   body.append(tempStr);
   body.append("\n");
   assembleMsg(mEmailStrDescription, alarmMsg, tempStr);
   body.append(tempStr);
   body.append("\n");
   assembleMsg(mEmailStrResolution, alarmData->getResolution(), tempStr);
   body.append(tempStr);
   OsSysLog::add(FAC_ALARM, PRI_DEBUG, "AlarmServer: email body is %s", body.data());

   MailMessage message( mEmailStrFrom, mReplyTo, mSmtpServer );
   message.Body(body);
   
   UtlSList subjectParams;
   UtlString codeStr(alarmData->getCode());
   UtlString titleStr(alarmData->getShortTitle());
   subjectParams.append(&codeStr);
   subjectParams.append(&titleStr);
   assembleMsg(mEmailStrSubject, subjectParams, tempStr);
   message.Subject(tempStr);

   //execute the mail command for each user
   UtlSListIterator iterator(mContacts);
   UtlString* pObject;
   while ( (pObject = dynamic_cast<UtlString*>(iterator())))
   {
      message.To(*pObject, *pObject);
   }

   // delegate send to separate task so as not to block
   EmailSendTask::getInstance()->sendMessage(message);

   return retval;
}