Added a device manager for devices monitoring
git-svn-id: file:///srv/svn/repos/haiku/trunk/current@8666 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -0,0 +1,119 @@
|
||||
/*
|
||||
** Copyright 2004, the OpenBeOS project. All rights reserved.
|
||||
** Distributed under the terms of the OpenBeOS License.
|
||||
**
|
||||
** Author : Jérôme Duval
|
||||
** Original authors: Marcus Overhagen, Axel Dörfler
|
||||
*/
|
||||
|
||||
|
||||
#include <Autolock.h>
|
||||
#include <Directory.h>
|
||||
#include <Entry.h>
|
||||
#include <FindDirectory.h>
|
||||
#include <Path.h>
|
||||
#include <String.h>
|
||||
|
||||
#include <image.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "DeviceManager.h"
|
||||
#include "InputServer.h"
|
||||
|
||||
|
||||
DeviceManager::DeviceManager()
|
||||
:
|
||||
fLock("device manager")
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
DeviceManager::~DeviceManager()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
DeviceManager::LoadState()
|
||||
{
|
||||
class IAHandler : public AddOnMonitorHandler {
|
||||
private:
|
||||
DeviceManager * fManager;
|
||||
public:
|
||||
IAHandler(DeviceManager * manager) {
|
||||
fManager = manager;
|
||||
}
|
||||
virtual void AddOnCreated(const add_on_entry_info * entry_info) {
|
||||
}
|
||||
virtual void AddOnEnabled(const add_on_entry_info * entry_info) {
|
||||
CALLED();
|
||||
entry_ref ref;
|
||||
make_entry_ref(entry_info->dir_nref.device, entry_info->dir_nref.node,
|
||||
entry_info->name, &ref);
|
||||
BEntry entry(&ref, false);
|
||||
//fManager->RegisterAddOn(entry);
|
||||
}
|
||||
virtual void AddOnDisabled(const add_on_entry_info * entry_info) {
|
||||
CALLED();
|
||||
entry_ref ref;
|
||||
make_entry_ref(entry_info->dir_nref.device, entry_info->dir_nref.node,
|
||||
entry_info->name, &ref);
|
||||
BEntry entry(&ref, false);
|
||||
//fManager->UnregisterAddOn(entry);
|
||||
}
|
||||
virtual void AddOnRemoved(const add_on_entry_info * entry_info) {
|
||||
}
|
||||
};
|
||||
|
||||
fHandler = new IAHandler(this);
|
||||
fAddOnMonitor = new AddOnMonitor(fHandler);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
DeviceManager::SaveState()
|
||||
{
|
||||
CALLED();
|
||||
BMessenger messenger(fAddOnMonitor);
|
||||
messenger.SendMessage(B_QUIT_REQUESTED);
|
||||
int32 exit_value;
|
||||
wait_for_thread(fAddOnMonitor->Thread(), &exit_value);
|
||||
delete fHandler;
|
||||
}
|
||||
|
||||
|
||||
status_t
|
||||
DeviceManager::StartMonitoringDevice(_BDeviceAddOn_ *addon,
|
||||
const char *device)
|
||||
{
|
||||
status_t err;
|
||||
node_ref nref;
|
||||
BDirectory directory;
|
||||
BPath path("/dev");
|
||||
if (((err = path.Append(device)) == B_OK)
|
||||
&& ((err = directory.SetTo(path.Path())) == B_OK)
|
||||
&& ((err = directory.GetNodeRef(&nref)) == B_OK)
|
||||
&& ((err = fHandler->AddDirectory(&nref)) == B_OK) ) {
|
||||
return B_OK;
|
||||
} else
|
||||
return err;
|
||||
}
|
||||
|
||||
|
||||
status_t
|
||||
DeviceManager::StopMonitoringDevice(_BDeviceAddOn_ *addon,
|
||||
const char *device)
|
||||
{
|
||||
status_t err;
|
||||
node_ref nref;
|
||||
BDirectory directory;
|
||||
BPath path("/dev");
|
||||
if (((err = path.Append(device)) == B_OK)
|
||||
&& ((err = directory.SetTo(path.Path())) == B_OK)
|
||||
&& ((err = directory.GetNodeRef(&nref)) == B_OK)
|
||||
/*&& ((err = fHandler->RemoveDirectory(&nref)) ==B_OK)*/) {
|
||||
return B_OK;
|
||||
} else
|
||||
return err;
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
/*
|
||||
** Copyright 2004, the OpenBeOS project. All rights reserved.
|
||||
** Distributed under the terms of the OpenBeOS License.
|
||||
**
|
||||
** Author : Jérôme Duval
|
||||
** Original authors: Marcus Overhagen, Axel Dörfler
|
||||
*/
|
||||
#ifndef _DEVICE_MANAGER_H
|
||||
#define _DEVICE_MANAGER_H
|
||||
|
||||
// Manager for devices monitoring
|
||||
|
||||
#include <Locker.h>
|
||||
#include <InputServerDevice.h>
|
||||
#include <InputServerFilter.h>
|
||||
#include <InputServerMethod.h>
|
||||
#include "AddOnMonitor.h"
|
||||
#include "AddOnMonitorHandler.h"
|
||||
#include "TList.h"
|
||||
|
||||
class DeviceManager {
|
||||
public:
|
||||
DeviceManager();
|
||||
~DeviceManager();
|
||||
|
||||
void LoadState();
|
||||
void SaveState();
|
||||
|
||||
status_t StartMonitoringDevice(_BDeviceAddOn_ *addon,
|
||||
const char *device);
|
||||
status_t StopMonitoringDevice(_BDeviceAddOn_ *addon,
|
||||
const char *device);
|
||||
|
||||
private:
|
||||
|
||||
private:
|
||||
|
||||
BLocker fLock;
|
||||
|
||||
AddOnMonitorHandler *fHandler;
|
||||
AddOnMonitor *fAddOnMonitor;
|
||||
};
|
||||
|
||||
#endif // _DEVICE_MANAGER_H
|
||||
@@ -73,6 +73,8 @@ BLocker InputServer::gInputFilterListLocker;
|
||||
BList InputServer::gInputMethodList;
|
||||
BLocker InputServer::gInputMethodListLocker;
|
||||
|
||||
DeviceManager InputServer::gDeviceManager;
|
||||
|
||||
/*BList InputServer::mInputServerDeviceList;
|
||||
BList InputServer::mInputServerFilterList;
|
||||
BList InputServer::mInputServerMethodList;*/
|
||||
@@ -103,6 +105,8 @@ InputServer::InputServer(void) : BApplication("application/x-vnd.OBOS-input_serv
|
||||
EventLoop(pointer);
|
||||
|
||||
// InitTestDevice();
|
||||
|
||||
gDeviceManager.LoadState();
|
||||
|
||||
fAddOnManager = new AddOnManager();
|
||||
fAddOnManager->LoadState();
|
||||
@@ -484,6 +488,7 @@ InputServer::QuitRequested(void)
|
||||
{
|
||||
CALLED();
|
||||
fAddOnManager->SaveState();
|
||||
gDeviceManager.SaveState();
|
||||
|
||||
kill_thread(ISPortThread);
|
||||
delete_port(EventLooperPort);
|
||||
|
||||
@@ -35,6 +35,7 @@
|
||||
#include <InputServerFilter.h>
|
||||
#include <InputServerMethod.h>
|
||||
#include "AddOnManager.h"
|
||||
#include "DeviceManager.h"
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
@@ -169,6 +170,8 @@ public:
|
||||
static BList gInputMethodList;
|
||||
static BLocker gInputMethodListLocker;
|
||||
|
||||
static DeviceManager gDeviceManager;
|
||||
|
||||
private:
|
||||
/*void InitTestDevice();
|
||||
|
||||
|
||||
@@ -229,10 +229,8 @@ BInputServerDevice::StartMonitoringDevice(const char *device)
|
||||
{
|
||||
CALLED();
|
||||
PRINT(("StartMonitoringDevice %s\n", device));
|
||||
|
||||
status_t status = B_OK;
|
||||
|
||||
return status;
|
||||
return InputServer::gDeviceManager.StartMonitoringDevice(fOwner, device);
|
||||
}
|
||||
|
||||
|
||||
@@ -244,9 +242,7 @@ status_t
|
||||
BInputServerDevice::StopMonitoringDevice(const char *device)
|
||||
{
|
||||
CALLED();
|
||||
status_t status = B_OK;
|
||||
|
||||
return status;
|
||||
return InputServer::gDeviceManager.StopMonitoringDevice(fOwner, device);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -17,6 +17,7 @@ Server input_server :
|
||||
InputServerMethod.cpp
|
||||
|
||||
AddOnManager.cpp
|
||||
DeviceManager.cpp
|
||||
|
||||
# storage
|
||||
AddOnMonitor.cpp
|
||||
|
||||
Reference in New Issue
Block a user