extern "C" int CanalSetBaudrate( long handle, unsigned long baudrate ) { VscpRemoteTcpIf *pvscpif = theApp.getDriverObject( handle ); if ( NULL == pvscpif ) return CANAL_ERROR_MEMORY; return ( pvscpif->doCmdSetBaudrate( baudrate ) ? CANAL_ERROR_SUCCESS : CANAL_ERROR_SUB_DRIVER ); }
void _fini() { // If empty - nothing to do if (g_ifMap.empty()) return; // Remove orphan objects LOCK_MUTEX(g_mapMutex); for (std::map<long, VscpRemoteTcpIf *>::iterator it = g_ifMap.begin(); it != g_ifMap.end(); ++it) { // std::cout << it->first << " => " << it->second << '\n'; VscpRemoteTcpIf *pvscpif = it->second; if (NULL != pvscpif) { pvscpif->doCmdClose(); delete pvscpif; pvscpif = NULL; } } g_ifMap.clear(); // Remove all items UNLOCK_MUTEX(g_mapMutex); pthread_mutex_destroy(&g_mapMutex); }
extern "C" int CanalGetStatistics( long handle, PCANALSTATISTICS pCanalStatistics ) { VscpRemoteTcpIf *pvscpif = theApp.getDriverObject( handle ); if ( NULL == pvscpif ) return CANAL_ERROR_MEMORY; return ( pvscpif->doCmdStatistics( pCanalStatistics ) ? CANAL_ERROR_SUCCESS : CANAL_ERROR_SUB_DRIVER ); }
extern "C" int CanalSend( long handle, PCANALMSG pCanalMsg ) { VscpRemoteTcpIf *pvscpif = theApp.getDriverObject( handle ); if ( NULL == pvscpif ) return CANAL_ERROR_MEMORY; return ( pvscpif->doCmdSendLevel1( pCanalMsg )? CANAL_ERROR_SUCCESS : CANAL_ERROR_SUB_DRIVER ); }
extern "C" int CanalSetMask(long handle, unsigned long mask) { VscpRemoteTcpIf *pvscpif = getDriverObject(handle); if (NULL == pvscpif) return CANAL_ERROR_MEMORY; return (pvscpif->doCmdMask(mask) ? CANAL_ERROR_SUCCESS : CANAL_ERROR_SUB_DRIVER); }
extern "C" int CanalDataAvailable( long handle ) { int rv = 0; VscpRemoteTcpIf *pvscpif = theApp.getDriverObject( handle ); if ( NULL == pvscpif ) return CANAL_ERROR_MEMORY; return ( pvscpif->doCmdDataAvailable() ? CANAL_ERROR_SUCCESS : CANAL_ERROR_SUB_DRIVER ); }
extern "C" unsigned long CanalGetLevel( long handle ) { unsigned long level; VscpRemoteTcpIf *pvscpif = theApp.getDriverObject( handle ); if ( NULL == pvscpif ) return CANAL_ERROR_MEMORY; level = pvscpif->doCmdGetLevel(); return level; }
extern "C" long CanalOpen(const char *pDevice, unsigned long flags) { long h = CANAL_ERROR_SUB_DRIVER; unsigned long filter = 0, mask = 0; bool bFilter = false, bMask = false; std::string str; std::string strDevice(pDevice); std::deque<std::string> tokens; vscp_split(tokens, strDevice, ";"); // Get possible filter if (!tokens.empty()) { str = tokens.front(); tokens.pop_front(); if (0 != str.size()) { filter = vscp_readStringValue(str); } } // Get possible mask if (!tokens.empty()) { str = tokens.front(); tokens.pop_front(); if (0 != str.size()) { mask = vscp_readStringValue(str); } } VscpRemoteTcpIf *pvscpif = new VscpRemoteTcpIf(); if (NULL != pvscpif) { if (pvscpif->doCmdOpen(strDevice, flags)) { if (!(h = addDriverObject(pvscpif))) { delete pvscpif; } else { if (bFilter) { pvscpif->doCmdFilter(filter); } if (bMask) { pvscpif->doCmdMask(mask); } } } else { delete pvscpif; } } return h; }
extern "C" int CanalClose( long handle ) { int rv = 0; VscpRemoteTcpIf *pvscpif = theApp.getDriverObject( handle ); if ( NULL == pvscpif ) return CANAL_ERROR_MEMORY; pvscpif->doCmdClose(); theApp.removeDriverObject( handle ); rv = CANAL_ERROR_SUCCESS; return rv; }
extern "C" int CanalGetStatus(long handle, PCANALSTATUS pCanalStatus) { int rv = 0; VscpRemoteTcpIf *pvscpif = getDriverObject(handle); if (NULL == pvscpif) return CANAL_ERROR_MEMORY; return (pvscpif->doCmdStatus(pCanalStatus) ? CANAL_ERROR_SUCCESS : CANAL_ERROR_SUB_DRIVER); }
extern "C" int CanalReceive(long handle, PCANALMSG pCanalMsg) { int rv = 0; VscpRemoteTcpIf *pvscpif = getDriverObject(handle); if (NULL == pvscpif) return CANAL_ERROR_MEMORY; return (pvscpif->doCmdReceiveLevel1(pCanalMsg) ? CANAL_ERROR_SUCCESS : CANAL_ERROR_SUB_DRIVER); }
extern "C" long CanalOpen( const char *pDevice, unsigned long flags ) { long h = CANAL_ERROR_SUB_DRIVER; unsigned long filter=0, mask=0; bool bFilter=false, bMask=false; wxString str; wxString strDevice( pDevice, wxConvUTF8); wxStringTokenizer tkz(strDevice, _(";") ); // Get possible filter str = tkz.GetNextToken(); if ( 0 != str.Length() ) { if ( str.ToULong( &filter ) ) { bFilter = true; } } // Get possible mask if ( 0 != str.Length() ) { if ( str.ToULong( &mask ) ) { bMask = true; } } VscpRemoteTcpIf *pvscpif = new VscpRemoteTcpIf(); if ( NULL != pvscpif ) { if ( pvscpif->doCmdOpen( strDevice, flags ) ){ if ( !( h = theApp.addDriverObject( pvscpif ) ) ) { delete pvscpif; } else { if ( bFilter ) { pvscpif->doCmdFilter( filter ); } if ( bMask ) { pvscpif->doCmdMask( mask ); } } } else { delete pvscpif; } } return h; }
void dlgVscpInterfaceSettings::OnButtonTestInterfaceClick( wxCommandEvent& event ) { VscpRemoteTcpIf tcpif; wxString wxstr; m_btnTestConnection->Enable( false ); // If server username is given and no password is entered we ask for it. if ( m_RemoteServerPassword->GetValue().IsEmpty() && !m_RemoteServerUsername->GetValue().IsEmpty() ) { wxstr = ::wxGetTextFromUser( _("Please enter password"), _("Connection Test") ); } else { wxstr = m_RemoteServerPassword->GetValue(); } wxBusyCursor busy; long rv = tcpif.doCmdOpen( m_RemoteServerURL->GetValue(), m_RemoteServerUsername->GetValue(), wxstr ); if ( VSCP_ERROR_SUCCESS == rv ) { tcpif.doCmdClose(); wxMessageBox(_("Successful connect to server."), _("Connection Test"), wxICON_INFORMATION ); /*rv = tcpif.doCmdNOOP(); if ( CANAL_ERROR_SUCCESS == rv ) { wxMessageBox(_("Successful connect to server."), _("Connection Test"), wxICON_INFORMATION ); } else { wxMessageBox(_("Failed do command on server (connected OK)."), _("Connection Test"), wxICON_STOP ); }*/ } else { wxMessageBox(_("Failed to connect to server."), _("Connection Test"), wxICON_STOP ); tcpif.doCmdClose(); } m_btnTestConnection->Enable( true ); event.Skip(); }
CVSCPL1App::~CVSCPL1App() { LOCK_MUTEX( m_objMutex ); for ( int i = 0; i<VSCP_LEVEL1_INTERFACE_MAX_OPEN; i++ ) { if ( NULL == m_pvscpifArray[ i ] ) { VscpRemoteTcpIf *pvscpif = getDriverObject( i ); if ( NULL != pvscpif ) { pvscpif->doCmdClose(); delete m_pvscpifArray[ i ]; m_pvscpifArray[ i ] = NULL; } } } UNLOCK_MUTEX( m_objMutex ); pthread_mutex_destroy( &m_objMutex ); }
void dlgVscpInterfaceSettings::OnButtonGetInterfacesClick( wxCommandEvent& event ) { VscpRemoteTcpIf tcpif; wxString wxstr; m_btnGetInterfaces->Enable( false ); // If server username is given and no password is entered we ask for it. if ( m_RemoteServerPassword->GetValue().IsEmpty() && !m_RemoteServerUsername->GetValue().IsEmpty() ) { wxstr = ::wxGetTextFromUser( _("Please enter password"), _("Password is needed") ); } else { wxstr = m_RemoteServerPassword->GetValue(); } wxBusyCursor busy; long rv = tcpif.doCmdOpen( m_RemoteServerURL->GetValue(), m_RemoteServerUsername->GetValue(), wxstr ); if ( VSCP_ERROR_SUCCESS == rv ) { // Get the interface list wxArrayString array; tcpif.doCmdInterfaceList( array ); // Close the channel tcpif.doCmdClose(); if ( array.Count() ) { dlgSelectDaemonInterface dlg( this ); for ( unsigned int i=0; i<array.Count(); i++ ) { wxStringTokenizer tkz( array[i], _(",") ); wxString strOrdinal = tkz.GetNextToken(); wxString strType = tkz.GetNextToken(); wxString strGUID = tkz.GetNextToken(); wxString strDescription = tkz.GetNextToken(); wxString strLine = strGUID; strLine += _(" "); strLine += _(" Type = "); strLine += strType; strLine += _(" - "); strLine += strDescription; dlg.m_ctrlListInterfaces->Append( strLine ); } if ( wxID_OK == dlg.ShowModal() ) { int selidx; if ( wxNOT_FOUND != ( selidx = dlg.m_ctrlListInterfaces->GetSelection() ) ) { wxStringTokenizer tkz( array[selidx], _(",") ); wxString strOrdinal = tkz.GetNextToken(); wxString strType = tkz.GetNextToken(); wxString strGUID = tkz.GetNextToken(); // Name of interface wxString strifName = tkz.GetNextToken(); int pos; if ( wxNOT_FOUND != ( pos = strifName.Find(_(" ") ) ) ) { strifName = strifName.Left( pos ); strifName.Trim(); } m_RemoteInterfaceName->ChangeValue( strifName ); } } } else { wxMessageBox(_("No interfaces found!")); } } else { wxMessageBox(_("Failed to connect to server."), _("Get daemon interfaces"), wxICON_STOP ); } m_btnGetInterfaces->Enable( true ); event.Skip( false ); }