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:
Jérôme Duval
2004-08-26 16:11:24 +00:00
parent daef2e88ec
commit 6e6fa57fb5
6 changed files with 174 additions and 6 deletions
+119
View File
@@ -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;
}
+44
View File
@@ -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
+5
View File
@@ -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);
+3
View File
@@ -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();
+2 -6
View File
@@ -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);
}
/**
+1
View File
@@ -17,6 +17,7 @@ Server input_server :
InputServerMethod.cpp
AddOnManager.cpp
DeviceManager.cpp
# storage
AddOnMonitor.cpp