extern "C" long
VSCPOpen(const char *pUsername,
		const char *pPassword,
		const char *pHost,
		short port,
		const char *pPrefix,
		const char *pParameter,
		unsigned long flags)
{
	long h = 0;

	CRawEthernet *pdrvObj = new CRawEthernet();
	if (NULL != pdrvObj) {

		if (pdrvObj->open(pUsername,
				pPassword,
				pHost,
				port,
				pPrefix,
				pParameter)) {

			if (!(h = theApp.addDriverObject(pdrvObj))) {
				delete pdrvObj;
			}

		} else {
			delete pdrvObj;
		}

	}

	return h;
}
CDllDrvObj::~CDllDrvObj()
{
	LOCK_MUTEX( m_objMutex );
	
	for ( int i = 0; i<VSCP_LOGGER_DRIVER_MAX_OPEN; i++ ) {
		
		if ( NULL == m_drvObjArray[ i ] ) {
			
			CRawEthernet *pdrvObj =  getDriverObject( i );
			if ( NULL != pdrvObj ) { 
				pdrvObj->close();	
				delete m_drvObjArray[ i ];
				m_drvObjArray[ i ] = NULL; 
			}
		}
	}

	UNLOCK_MUTEX( m_objMutex );

#ifdef WIN32
	CloseHandle( m_objMutex );
#else	
	pthread_mutex_destroy( &m_objMutex );
#endif
}
extern "C" int
VSCPClose(long handle)
{
	int rv = 0;

	CRawEthernet *pdrvObj = theApp.getDriverObject(handle);
	if (NULL == pdrvObj) return 0;
	pdrvObj->close();
	theApp.removeDriverObject(handle);
	rv = 1;
	return CANAL_ERROR_SUCCESS;
}
extern "C" int
VSCPBlockingSend(long handle, const vscpEvent *pEvent, unsigned long timeout)
{
	int rv = 0;

	CRawEthernet *pdrvObj = theApp.getDriverObject(handle);
	if (NULL == pdrvObj) return CANAL_ERROR_MEMORY;
    
    //vscpEvent *pEventNew = new vscpEvent;
    //if ( NULL != pEventNew ) {
    //    copyVSCPEvent( pEventNew, pEvent );
    pdrvObj->addEvent2SendQueue( pEvent );
	//}
    //else {
    //    return CANAL_ERROR_MEMORY;
    //}
    
	return CANAL_ERROR_SUCCESS;
}
CVSCPDrvApp::~CVSCPDrvApp()
{
	LOCK_MUTEX(m_objMutex);

	for (int i = 0; i < VSCP_RAWETHERNET_DRIVER_MAX_OPEN; i++) {

		if (NULL == m_prawethernetArray[ i ]) {

			CRawEthernet *psockcan = getDriverObject(i);
			if (NULL != psockcan) {
				psockcan->close();
				delete m_prawethernetArray[ i ];
				m_prawethernetArray[ i ] = NULL;
			}
		}
	}

	UNLOCK_MUTEX(m_objMutex);
	pthread_mutex_destroy(&m_objMutex);
}