- added HLE to connect to "srv:" service
- added a manager for keeping track of services/ports - added a memory mapped region for memory accessed by HLE - added HLE for GetThreadCommandBuffer function
This commit is contained in:
parent
4d88318903
commit
68e198476f
11 changed files with 384 additions and 166 deletions
|
@ -4,6 +4,8 @@
|
|||
|
||||
#pragma once
|
||||
|
||||
#include <vector>
|
||||
#include <map>
|
||||
#include <string>
|
||||
|
||||
#include "common/common_types.h"
|
||||
|
@ -14,10 +16,13 @@
|
|||
|
||||
namespace Service {
|
||||
|
||||
typedef s32 NativeUID;
|
||||
typedef s32 NativeUID; ///< Native handle for a service
|
||||
|
||||
class Manager;
|
||||
|
||||
/// Interface to a CTROS service
|
||||
class Interface {
|
||||
friend class Manager;
|
||||
public:
|
||||
|
||||
virtual ~Interface() {
|
||||
|
@ -43,7 +48,7 @@ public:
|
|||
* Gets the string name used by CTROS for a service
|
||||
* @return Port name of service
|
||||
*/
|
||||
virtual std::string GetPort() {
|
||||
virtual std::string GetPortName() {
|
||||
return "[UNKNOWN SERVICE PORT]";
|
||||
}
|
||||
|
||||
|
@ -57,4 +62,52 @@ private:
|
|||
u32 m_uid;
|
||||
};
|
||||
|
||||
/// Simple class to manage accessing services from ports and UID handles
|
||||
class Manager {
|
||||
|
||||
public:
|
||||
Manager();
|
||||
|
||||
~Manager();
|
||||
|
||||
/// Add a service to the manager (does not create it though)
|
||||
void AddService(Interface* service);
|
||||
|
||||
/// Removes a service from the manager (does not delete it though)
|
||||
void DeleteService(std::string port_name);
|
||||
|
||||
/// Get a Service Interface from its UID
|
||||
Interface* FetchFromUID(u32 uid);
|
||||
|
||||
/// Get a Service Interface from its port
|
||||
Interface* FetchFromPortName(std::string port_name);
|
||||
|
||||
private:
|
||||
|
||||
/// Convert an index into m_services vector into a UID
|
||||
static u32 GetUIDFromIndex(const int index) {
|
||||
return index | 0x10000000;
|
||||
}
|
||||
|
||||
/// Convert a UID into an index into m_services
|
||||
static int GetIndexFromUID(const u32 uid) {
|
||||
return uid & 0x0FFFFFFF;
|
||||
}
|
||||
|
||||
std::vector<Interface*> m_services;
|
||||
std::map<std::string, u32> m_port_map;
|
||||
|
||||
DISALLOW_COPY_AND_ASSIGN(Manager);
|
||||
};
|
||||
|
||||
/// Initialize ServiceManager
|
||||
void Init();
|
||||
|
||||
/// Shutdown ServiceManager
|
||||
void Shutdown();
|
||||
|
||||
|
||||
extern Manager* g_manager; ///< Service manager
|
||||
|
||||
|
||||
} // namespace
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue