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;
}
Example #2
0
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;
}
Example #3
0
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;

}