mirror of
https://github.com/Atmosphere-NX/Atmosphere.git
synced 2024-11-22 20:06:40 +00:00
Stratosphere: Skeleton ldr:dmnt
This commit is contained in:
parent
21fa9ff17c
commit
c4db563261
5 changed files with 65 additions and 4 deletions
7
stratosphere/loader/source/iserviceobject.hpp
Normal file
7
stratosphere/loader/source/iserviceobject.hpp
Normal file
|
@ -0,0 +1,7 @@
|
|||
#pragma once
|
||||
#include <switch.h>
|
||||
|
||||
class IServiceObject {
|
||||
public:
|
||||
virtual void dispatch(IpcParsedCommand *r, u32 *cmd_buf, u32 cmd_id, u32 *in_rawdata, u32 in_rawdata_size, u32 *out_rawdata, u32 *out_raw_data_count);
|
||||
};
|
21
stratosphere/loader/source/ldr_debug_monitor.cpp
Normal file
21
stratosphere/loader/source/ldr_debug_monitor.cpp
Normal file
|
@ -0,0 +1,21 @@
|
|||
#include <switch.h>
|
||||
#include "ldr_debug_monitor.hpp"
|
||||
#include "ldr_launch_queue.hpp"
|
||||
|
||||
void DebugMonitorService::dispatch(IpcParsedCommand *r, u32 *cmd_buf, u32 cmd_id, u32 *in_rawdata, u32 in_rawdata_size, u32 *out_rawdata, u32 *out_raw_data_count) {
|
||||
/* TODO */
|
||||
}
|
||||
|
||||
Result DebugMonitorService::add_title_to_launch_queue(u64 tid, const char *args, size_t args_size) {
|
||||
return LaunchQueue::add(tid, args, args_size);
|
||||
}
|
||||
|
||||
Result DebugMonitorService::clear_launch_queue() {
|
||||
LaunchQueue::clear();
|
||||
return 0;
|
||||
}
|
||||
|
||||
Result DebugMonitorService::get_nso_info(u64 pid, void *out, size_t out_size, u32 *out_num_nsos) {
|
||||
/* TODO, once I've defined struct NsoInfo elsewhere (in ldr_RegisteredProcesses.hpp) */
|
||||
return 0;
|
||||
}
|
15
stratosphere/loader/source/ldr_debug_monitor.hpp
Normal file
15
stratosphere/loader/source/ldr_debug_monitor.hpp
Normal file
|
@ -0,0 +1,15 @@
|
|||
#pragma once
|
||||
#include <switch.h>
|
||||
|
||||
#include "iserviceobject.hpp"
|
||||
|
||||
class DebugMonitorService : IServiceObject {
|
||||
public:
|
||||
void dispatch(IpcParsedCommand *r, u32 *cmd_buf, u32 cmd_id, u32 *in_rawdata, u32 in_rawdata_size, u32 *out_rawdata, u32 *out_raw_data_count);
|
||||
|
||||
private:
|
||||
/* Actual commands. */
|
||||
Result add_title_to_launch_queue(u64 tid, const char *args, size_t args_size);
|
||||
Result clear_launch_queue();
|
||||
Result get_nso_info(u64 pid, void *out, size_t out_size, u32 *out_num_nsos);
|
||||
};
|
|
@ -1,11 +1,28 @@
|
|||
#include <switch.h>
|
||||
#include <algorithm>
|
||||
|
||||
#include "ldr_launch_queue.hpp"
|
||||
|
||||
#include <switch.h>
|
||||
|
||||
namespace LaunchQueue {
|
||||
static LaunchItem g_launch_queue[LAUNCH_QUEUE_SIZE];
|
||||
|
||||
Result add(LaunchItem *item) {
|
||||
Result add(u64 tid, const char *args, u64 arg_size) {
|
||||
if(arg_size > LAUNCH_QUEUE_ARG_SIZE_MAX) {
|
||||
return 0x209;
|
||||
}
|
||||
|
||||
int idx = get_free_index(tid);
|
||||
if(idx == LAUNCH_QUEUE_FULL)
|
||||
return 0x409;
|
||||
|
||||
g_launch_queue[idx].tid = tid;
|
||||
g_launch_queue[idx].arg_size = arg_size;
|
||||
std::copy(args, args + arg_size, g_launch_queue[idx].args);
|
||||
return 0x0;
|
||||
}
|
||||
|
||||
Result add_item(const LaunchItem *item) {
|
||||
if(item->arg_size > LAUNCH_QUEUE_ARG_SIZE_MAX) {
|
||||
return 0x209;
|
||||
}
|
||||
|
|
|
@ -12,8 +12,9 @@ namespace LaunchQueue {
|
|||
u64 arg_size;
|
||||
char args[LAUNCH_QUEUE_ARG_SIZE_MAX];
|
||||
};
|
||||
|
||||
Result add(LaunchItem *item);
|
||||
|
||||
Result add(u64 tid, const char *args, u64 arg_size);
|
||||
Result add_item(const LaunchItem *item);
|
||||
int get_index(u64 tid);
|
||||
int get_free_index(u64 tid);
|
||||
bool contains(u64 tid);
|
||||
|
|
Loading…
Reference in a new issue