extern "C" bool WINAPI EXPORT vscp_writeGuidToString( const vscpEvent *pEvent, char * pStr ) { bool rv; wxString strGUID; rv = writeGuidToString( pEvent, strGUID ); strcpy( pStr, strGUID.ToAscii() ); return rv; }
bool CVariableStorage::save( wxString& path ) { CVSCPVariable *pVariable; wxString str; #ifdef BUILD_VSCPD_SERVICE wxStandardPaths stdPath; // Set the default variable configuration path m_configPath = stdPath.GetConfigDir(); m_configPath += _("/vscp/variable.xml"); #endif wxFFileOutputStream *pFileStream = new wxFFileOutputStream( path ); if ( NULL == pFileStream ) return false; pFileStream->Write("<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n\n", strlen("<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n\n") ); // VSCP variables pFileStream->Write("<persistent>\n\n", strlen("<persistent>\n\n") ); listVscpVariable::iterator it; for( it = m_listVariable.begin(); it != m_listVariable.end(); ++it ) { if ( NULL == ( pVariable = *it ) ) continue; wxString name = pVariable->getName(); if ( ( NULL != pVariable ) && pVariable->isPersistent() ) { switch ( pVariable->getType() ) { case VSCP_DAEMON_VARIABLE_CODE_VSCP_EVENT: str.Printf( _(" <variable type=\"event\">\n"), pVariable->getType() ); pFileStream->Write( str.mb_str(), strlen(str.mb_str()) ); // Write name pFileStream->Write( " <name>", strlen(" <name>") ); str = pVariable->getName(); pFileStream->Write( str.mb_str(), strlen(str.mb_str()) ); pFileStream->Write( "</name>\n", strlen("</name>\n") ); // Write note pFileStream->Write( " <note>", strlen(" <note>") ); str = pVariable->getNote(); pFileStream->Write( str.mb_str(), strlen(str.mb_str()) ); pFileStream->Write( "</note>\n", strlen("</note>\n") ); // Write value pFileStream->Write( " <value>", strlen(" <value>") ); //pFileStream->Write( pVariable->m_strValue, pVariable->m_strValue.Length() ); pVariable->writeVariableToString( str ); pFileStream->Write( str.mb_str(), strlen(str.mb_str()) ); pFileStream->Write( "</value>\n", strlen("</value>\n") ); pFileStream->Write( " </variable>\n\n", strlen(" </variable>\n\n") ); break; case VSCP_DAEMON_VARIABLE_CODE_STRING: str.Printf( _(" <variable type=\"string\">\n"), pVariable->getType() ); pFileStream->Write( str.mb_str(), strlen(str.mb_str()) ); // Write name pFileStream->Write( " <name>", strlen(" <name>") ); str = pVariable->getName(); pFileStream->Write( str.mb_str(), strlen(str.mb_str()) ); pFileStream->Write( "</name>\n", strlen("</name>\n") ); // Write note pFileStream->Write( " <note>", strlen(" <note>") ); str = pVariable->getNote(); pFileStream->Write( str.mb_str(), strlen(str.mb_str()) ); pFileStream->Write( "</note>\n", strlen("</note>\n") ); // Write value pFileStream->Write( " <value>", strlen(" <value>") ); pFileStream->Write( pVariable->m_strValue.mb_str(), strlen( pVariable->m_strValue.mb_str() ) ); pFileStream->Write( "</value>\n", strlen("</value>\n") ); pFileStream->Write( " </variable>\n\n", strlen(" </variable>\n\n") ); break; case VSCP_DAEMON_VARIABLE_CODE_BOOLEAN: str.Printf( _(" <variable type=\"bool\">\n") ); pFileStream->Write( str.mb_str(), strlen(str.mb_str()) ); // Write name pFileStream->Write( " <name>", strlen(" <name>") ); str = pVariable->getName(); pFileStream->Write( str.mb_str(), strlen(str.mb_str()) ); pFileStream->Write( "</name>\n", strlen("</name>\n") ); // Write note pFileStream->Write( " <note>", strlen(" <note>") ); str = pVariable->getNote(); pFileStream->Write( str.mb_str(), strlen(str.mb_str()) ); pFileStream->Write( "</note>\n", strlen("</note>\n") ); // Write value pFileStream->Write( " <value>", strlen(" <value>") ); if ( pVariable->m_boolValue ) { pFileStream->Write( "true", strlen("true") ); } else { pFileStream->Write( "false", strlen("false") ); } pFileStream->Write( "</value>\n", strlen("</value>\n") ); pFileStream->Write( " </variable>\n\n", strlen(" </variable>\n\n") ); break; case VSCP_DAEMON_VARIABLE_CODE_INTEGER: str.Printf( _(" <variable type=\"integer\">\n") ); pFileStream->Write( str.mb_str(), strlen(str.mb_str()) ); // Write name pFileStream->Write( " <name>", strlen(" <name>") ); str = pVariable->getName(); pFileStream->Write( str.mb_str(), strlen(str.mb_str()) ); pFileStream->Write( "</name>\n", strlen("</name>\n") ); // Write note pFileStream->Write( " <note>", strlen(" <note>") ); str = pVariable->getNote(); pFileStream->Write( str.mb_str(), strlen(str.mb_str()) ); pFileStream->Write( "</note>\n", strlen("</note>\n") ); // Write value pFileStream->Write( " <value>", strlen(" <value>") ); str.Printf( _("%d"), pVariable->m_longValue ); pFileStream->Write( str.mb_str(), strlen(str.mb_str()) ); pFileStream->Write( "</value>\n", strlen("</value>\n") ); pFileStream->Write( " </variable>\n\n", strlen(" </variable>\n\n") ); break; case VSCP_DAEMON_VARIABLE_CODE_LONG: str.Printf( _(" <variable type=\"long\">\n") ); pFileStream->Write( str.mb_str(), strlen(str.mb_str()) ); // Write name pFileStream->Write( " <name>", strlen(" <name>") ); str = pVariable->getName(); pFileStream->Write( str.mb_str(), strlen(str.mb_str()) ); pFileStream->Write( "</name>\n", strlen("</name>\n") ); // Write note pFileStream->Write( " <note>", strlen(" <note>") ); str = pVariable->getNote(); pFileStream->Write( str.mb_str(), strlen(str.mb_str()) ); pFileStream->Write( "</note>\n", strlen("</note>\n") ); // Write value pFileStream->Write( " <value>", strlen(" <value>") ); str.Printf( _("%d"), pVariable->m_longValue ); pFileStream->Write( str.mb_str(), strlen(str.mb_str()) ); pFileStream->Write( "</value>\n", strlen("</value>\n") ); pFileStream->Write( " </variable>\n\n", strlen(" </variable>\n\n") ); break; case VSCP_DAEMON_VARIABLE_CODE_DOUBLE: str.Printf( _(" <variable type=\"double\">\n") ); pFileStream->Write( str.mb_str(), strlen(str.mb_str()) ); // Write name pFileStream->Write( " <name>", strlen(" <name>") ); str = pVariable->getName(); pFileStream->Write( str.mb_str(), strlen(str.mb_str()) ); pFileStream->Write( "</name>\n", strlen("</name>\n") ); // Write note pFileStream->Write( " <note>", strlen(" <note>") ); str = pVariable->getNote(); pFileStream->Write( str.mb_str(), strlen(str.mb_str()) ); pFileStream->Write( "</note>\n", strlen("</note>\n") ); // Write value pFileStream->Write( " <value>", strlen(" <value>") ); str.Printf( _("%f"), pVariable->m_floatValue ); pFileStream->Write( str.mb_str(), strlen(str.mb_str()) ); pFileStream->Write( "</value>\n", strlen("</value>\n") ); pFileStream->Write( " </variable>\n\n", strlen(" </variable>\n\n") ); break; case VSCP_DAEMON_VARIABLE_CODE_VSCP_MEASUREMENT: str.Printf( _(" <variable type=\"measurement\">\n") ); pFileStream->Write( str.mb_str(), strlen(str.mb_str()) ); // Write name pFileStream->Write( " <name>", strlen(" <name>") ); str = pVariable->getName(); pFileStream->Write( str.mb_str(), strlen(str.mb_str()) ); pFileStream->Write( "</name>\n", strlen("</name>\n") ); // Write note pFileStream->Write( " <note>", strlen(" <note>") ); str = pVariable->getNote(); pFileStream->Write( str.mb_str(), strlen(str.mb_str()) ); pFileStream->Write( "</note>\n", strlen("</note>\n") ); // Write value pFileStream->Write( " <value>", strlen(" <value>") ); //writeVscpDataWithSizeToString( pVariable->m_normIntSize, // pVariable->m_normInteger, // str, // true ); //pFileStream->Write( str.mb_str(), strlen(str.mb_str()) ); pVariable->writeVariableToString( str ); pFileStream->Write( str.mb_str(), strlen(str.mb_str()) ); pFileStream->Write( "</value>\n", strlen("</value>\n") ); pFileStream->Write( " </variable>\n\n", strlen(" </variable>\n\n") ); break; case VSCP_DAEMON_VARIABLE_CODE_VSCP_EVENT_DATA: str.Printf( _(" <variable type=\"data\">\n") ); pFileStream->Write( str.mb_str(), strlen(str.mb_str()) ); // Write name pFileStream->Write( " <name>", strlen(" <name>") ); str = pVariable->getName(); pFileStream->Write( str.mb_str(), strlen(str.mb_str()) ); pFileStream->Write( "</name>\n", strlen("</name>\n") ); // Write note pFileStream->Write( " <note>", strlen(" <note>") ); str = pVariable->getNote(); pFileStream->Write( str.mb_str(), strlen(str.mb_str()) ); pFileStream->Write( "</note>\n", strlen("</note>\n") ); // Write value pFileStream->Write( " <value>", strlen(" <value>") ); pVariable->writeVariableToString( str ); pFileStream->Write( str.mb_str(), strlen(str.mb_str()) ); pFileStream->Write( "</value>\n", strlen("</value>\n") ); pFileStream->Write( " </variable>\n\n", strlen(" </variable>\n\n") ); break; case VSCP_DAEMON_VARIABLE_CODE_VSCP_EVENT_CLASS: str.Printf( _(" <variable type=\"class\">\n") ); pFileStream->Write( str.mb_str(), strlen(str.mb_str()) ); // Write name pFileStream->Write( " <name>", strlen(" <name>") ); str = pVariable->getName(); pFileStream->Write( str.mb_str(), strlen(str.mb_str()) ); pFileStream->Write( "</name>\n", strlen("</name>\n") ); // Write note pFileStream->Write( " <note>", strlen(" <note>") ); str = pVariable->getNote(); pFileStream->Write( str.mb_str(), strlen(str.mb_str()) ); pFileStream->Write( "</note>\n", strlen("</note>\n") ); // Write value pFileStream->Write( " <value>", strlen(" <value>") ); str.Printf( _("%d"), pVariable->m_event.vscp_class ); pFileStream->Write( str.mb_str(), strlen(str.mb_str()) ); pFileStream->Write( "</value>\n", strlen("</value>\n") ); pFileStream->Write( " </variable>\n\n", strlen(" </variable>\n\n") ); break; case VSCP_DAEMON_VARIABLE_CODE_VSCP_EVENT_TYPE: str.Printf( _(" <variable type=\"type\">\n") ); pFileStream->Write( str.mb_str(), strlen(str.mb_str()) ); // Write name pFileStream->Write( " <name>", strlen(" <name>") ); str = pVariable->getName(); pFileStream->Write( str.mb_str(), strlen(str.mb_str()) ); pFileStream->Write( "</name>\n", strlen("</name>\n") ); // Write note pFileStream->Write( " <note>", strlen(" <note>") ); str = pVariable->getNote(); pFileStream->Write( str.mb_str(), strlen(str.mb_str()) ); pFileStream->Write( "</note>\n", strlen("</note>\n") ); // Write value pFileStream->Write( " <value>", strlen(" <value>") ); str.Printf( _("%d"), pVariable->m_event.vscp_type ); pFileStream->Write( str.mb_str(), strlen(str.mb_str()) ); pFileStream->Write( "</value>\n", strlen("</value>\n") ); pFileStream->Write( " </variable>\n\n", strlen(" </variable>\n\n") ); break; case VSCP_DAEMON_VARIABLE_CODE_VSCP_EVENT_TIMESTAMP: str.Printf( _(" <variable type=\"timestamp\">\n") ); pFileStream->Write( str.mb_str(), strlen(str.mb_str()) ); // Write name pFileStream->Write( " <name>", strlen(" <name>") ); str = pVariable->getName(); pFileStream->Write( str.mb_str(), strlen(str.mb_str()) ); pFileStream->Write( "</name>\n", strlen("</name>\n") ); // Write note pFileStream->Write( " <note>", strlen(" <note>") ); str = pVariable->getNote(); pFileStream->Write( str.mb_str(), strlen(str.mb_str()) ); pFileStream->Write( "</note>\n", strlen("</note>\n") ); // Write value pFileStream->Write( " <value>", strlen(" <value>") ); //str.Printf( _("%d"), pVariable->m_event.timestamp ); //pFileStream->Write( str.mb_str(), strlen(str.mb_str()) ); pVariable->writeVariableToString( str ); pFileStream->Write( str.mb_str(), strlen(str.mb_str()) ); pFileStream->Write( "</value>\n", strlen("</value>\n") ); pFileStream->Write( " </variable>\n\n", strlen(" </variable>\n\n") ); break; case VSCP_DAEMON_VARIABLE_CODE_VSCP_EVENT_GUID: str.Printf( _(" <variable type=\"guid\">\n") ); pFileStream->Write( str.mb_str(), strlen(str.mb_str()) ); // Write name pFileStream->Write( " <name>", strlen(" <name>") ); str = pVariable->getName(); pFileStream->Write( str.mb_str(), strlen(str.mb_str()) ); pFileStream->Write( "</name>\n", strlen("</name>\n") ); // Write note pFileStream->Write( " <note>", strlen(" <note>") ); str = pVariable->getNote(); pFileStream->Write( str.mb_str(), strlen(str.mb_str()) ); pFileStream->Write( "</note>\n", strlen("</note>\n") ); // Write value pFileStream->Write( " <value>", strlen(" <value>") ); pVariable->writeVariableToString( str ); pFileStream->Write( str.mb_str(), strlen(str.mb_str()) ); pFileStream->Write( "</value>\n", strlen("</value>\n") ); pFileStream->Write( " </variable>\n\n", strlen(" </variable>\n\n") ); break; case VSCP_DAEMON_VARIABLE_CODE_DATETIME: str.Printf( _(" <variable type=\"datetime\">\n") ); pFileStream->Write( str.mb_str(), strlen(str.mb_str()) ); writeGuidToString( &pVariable->m_event, str ); // Write name pFileStream->Write( " <name>", strlen(" <name>") ); str = pVariable->getName(); pFileStream->Write( str.mb_str(), strlen(str.mb_str()) ); pFileStream->Write( "</name>\n", strlen("</name>\n") ); // Write note pFileStream->Write( " <note>", strlen(" <note>") ); str = pVariable->getNote(); pFileStream->Write( str.mb_str(), strlen(str.mb_str()) ); pFileStream->Write( "</note>\n", strlen("</note>\n") ); // Write value pFileStream->Write( " <value>", strlen(" <value>") ); //pFileStream->Write( str.mb_str(), strlen(str.mb_str()) ); //str = pVariable->m_timestamp.FormatISODate(); //str += _(" "); //str = pVariable->m_timestamp.FormatISOTime(); pVariable->writeVariableToString( str ); pFileStream->Write( str.mb_str(), strlen(str.mb_str()) ); pFileStream->Write( "</value>\n", strlen("</value>\n") ); pFileStream->Write( " </variable>\n\n", strlen(" </variable>\n\n") ); break; } } } // DM matrix information end pFileStream->Write("</persistent>\n",strlen("</persistent>\n")); // Close the file pFileStream->Close(); return true; }
bool CVSCPVariable::writeVariableToString( wxString& strVariable ) { wxString str = wxT(""); switch ( m_type ) { case VSCP_DAEMON_VARIABLE_CODE_STRING: strVariable = m_strValue; break; case VSCP_DAEMON_VARIABLE_CODE_BOOLEAN: if ( m_boolValue ) { strVariable.Printf(_("true")); } else { strVariable.Printf(_("false")); } break; case VSCP_DAEMON_VARIABLE_CODE_INTEGER: strVariable.Printf(_("%d"), m_longValue ); break; case VSCP_DAEMON_VARIABLE_CODE_LONG: strVariable.Printf(_("%ld"), m_longValue ); break; case VSCP_DAEMON_VARIABLE_CODE_DOUBLE: strVariable.Printf(_("%f"), m_floatValue ); break; case VSCP_DAEMON_VARIABLE_CODE_VSCP_MEASUREMENT: writeVscpDataWithSizeToString( m_normIntSize, m_normInteger, strVariable ); break; case VSCP_DAEMON_VARIABLE_CODE_VSCP_EVENT: writeVscpEventToString( &m_event, strVariable ); break; case VSCP_DAEMON_VARIABLE_CODE_VSCP_EVENT_GUID: writeGuidToString( &m_event, strVariable ); break; case VSCP_DAEMON_VARIABLE_CODE_VSCP_EVENT_DATA: writeVscpDataToString( &m_event, strVariable ); break; case VSCP_DAEMON_VARIABLE_CODE_VSCP_EVENT_CLASS: strVariable.Printf(_("%d"), m_event.vscp_class ); break; case VSCP_DAEMON_VARIABLE_CODE_VSCP_EVENT_TYPE: strVariable.Printf(_("%d"), m_event.vscp_type ); break; case VSCP_DAEMON_VARIABLE_CODE_VSCP_EVENT_TIMESTAMP: strVariable.Printf(_("%d"), m_event.timestamp ); break; case VSCP_DAEMON_VARIABLE_CODE_DATETIME: strVariable = m_timestamp.FormatISODate(); strVariable += wxT(" "); strVariable += m_timestamp.FormatISOTime(); break; case VSCP_DAEMON_VARIABLE_CODE_UNASSIGNED: // Fall through default: strVariable.Printf(_("UNKNOWN")); break; } return true; }