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;
|
BList InputServer::gInputMethodList;
|
||||||
BLocker InputServer::gInputMethodListLocker;
|
BLocker InputServer::gInputMethodListLocker;
|
||||||
|
|
||||||
|
DeviceManager InputServer::gDeviceManager;
|
||||||
|
|
||||||
/*BList InputServer::mInputServerDeviceList;
|
/*BList InputServer::mInputServerDeviceList;
|
||||||
BList InputServer::mInputServerFilterList;
|
BList InputServer::mInputServerFilterList;
|
||||||
BList InputServer::mInputServerMethodList;*/
|
BList InputServer::mInputServerMethodList;*/
|
||||||
@@ -103,6 +105,8 @@ InputServer::InputServer(void) : BApplication("application/x-vnd.OBOS-input_serv
|
|||||||
EventLoop(pointer);
|
EventLoop(pointer);
|
||||||
|
|
||||||
// InitTestDevice();
|
// InitTestDevice();
|
||||||
|
|
||||||
|
gDeviceManager.LoadState();
|
||||||
|
|
||||||
fAddOnManager = new AddOnManager();
|
fAddOnManager = new AddOnManager();
|
||||||
fAddOnManager->LoadState();
|
fAddOnManager->LoadState();
|
||||||
@@ -484,6 +488,7 @@ InputServer::QuitRequested(void)
|
|||||||
{
|
{
|
||||||
CALLED();
|
CALLED();
|
||||||
fAddOnManager->SaveState();
|
fAddOnManager->SaveState();
|
||||||
|
gDeviceManager.SaveState();
|
||||||
|
|
||||||
kill_thread(ISPortThread);
|
kill_thread(ISPortThread);
|
||||||
delete_port(EventLooperPort);
|
delete_port(EventLooperPort);
|
||||||
|
|||||||
@@ -35,6 +35,7 @@
|
|||||||
#include <InputServerFilter.h>
|
#include <InputServerFilter.h>
|
||||||
#include <InputServerMethod.h>
|
#include <InputServerMethod.h>
|
||||||
#include "AddOnManager.h"
|
#include "AddOnManager.h"
|
||||||
|
#include "DeviceManager.h"
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
@@ -169,6 +170,8 @@ public:
|
|||||||
static BList gInputMethodList;
|
static BList gInputMethodList;
|
||||||
static BLocker gInputMethodListLocker;
|
static BLocker gInputMethodListLocker;
|
||||||
|
|
||||||
|
static DeviceManager gDeviceManager;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
/*void InitTestDevice();
|
/*void InitTestDevice();
|
||||||
|
|
||||||
|
|||||||
@@ -229,10 +229,8 @@ BInputServerDevice::StartMonitoringDevice(const char *device)
|
|||||||
{
|
{
|
||||||
CALLED();
|
CALLED();
|
||||||
PRINT(("StartMonitoringDevice %s\n", device));
|
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)
|
BInputServerDevice::StopMonitoringDevice(const char *device)
|
||||||
{
|
{
|
||||||
CALLED();
|
CALLED();
|
||||||
status_t status = B_OK;
|
return InputServer::gDeviceManager.StopMonitoringDevice(fOwner, device);
|
||||||
|
|
||||||
return status;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ Server input_server :
|
|||||||
InputServerMethod.cpp
|
InputServerMethod.cpp
|
||||||
|
|
||||||
AddOnManager.cpp
|
AddOnManager.cpp
|
||||||
|
DeviceManager.cpp
|
||||||
|
|
||||||
# storage
|
# storage
|
||||||
AddOnMonitor.cpp
|
AddOnMonitor.cpp
|
||||||
|
|||||||
Reference in New Issue
Block a user