int PhidgetManager::OnAttach(CPhidgetHandle handle)
{
	Lock();

	if (FindPhidgetByHandle(handle))
	{
		Unlock();
		return EPHIDGET_OK; //We've already attached it
	}

	PhidgetsCommon* item;
	if (NULL == handle) //Manager tab
	{
		item = new PhidgetsManager();
	}
	else
	{
		int status;
		int serial;
		CPhidget_DeviceClass device_class;
		if (EPHIDGET_OK != (status=CPhidget_getDeviceClass(handle, &device_class)) ||
		    EPHIDGET_OK != CPhidget_getSerialNumber(handle, &serial))
		{
			Unlock();
			return status;
		}

		switch(device_class)
		{
			case PHIDCLASS_ADVANCEDSERVO: item = new PhidgetsAdvancedServo(serial); break;
			case PHIDCLASS_INTERFACEKIT: item = new PhidgetsInterfaceKit(serial); break;
			case PHIDCLASS_RFID: item = new PhidgetsRFID(serial); break;
			default: {
				         Unlock();
				         return EPHIDGET_UNSUPPORTED;
				       }
		}
	}
		
	if (!item)
	{
		Unlock();
		return EPHIDGET_NOMEMORY;
	}

	if (!item->Init())
	{
		delete item;
		Unlock();
		return EPHIDGET_UNEXPECTED;
	}
	AddPhidgetToList(item);

	Unlock();
	return EPHIDGET_OK;
}
JNIEXPORT jint JNICALL
Java_com_phidgets_Phidget_getDeviceClass(JNIEnv *env, jobject obj)
{
	CPhidgetHandle h = (CPhidgetHandle)(uintptr_t)(*env)->GetLongField(env,
	    obj, handle_fid);
	int error;
	CPhidget_DeviceClass cls;
	
	if ((error = CPhidget_getDeviceClass(h, &cls)))
		PH_THROW(error);

	return (int)cls;
}
int AttachHandler(CPhidgetHandle phid, void *userPtr)
{
	int serialNo;
	const char *name;
	CPhidget_DeviceID id;
	CPhidget_DeviceClass cls;

	CPhidget_getDeviceName (phid, &name);
	CPhidget_getSerialNumber(phid, &serialNo);
	CPhidget_getDeviceClass(phid, &cls);
	CPhidget_getDeviceID(phid, &id);

	printf("%s %10d attached! (%d, %d) \n", name, serialNo, cls, id);

	display_devices((CPhidgetManagerHandle)userPtr);
	return 0;
}