mirror of
https://github.com/skyline-emu/skyline.git
synced 2024-12-23 15:31:52 +01:00
Introduce NACP class for reading control data
This contains info such as the application name and publisher.
This commit is contained in:
parent
5c103ce9a6
commit
4950dd5638
@ -95,6 +95,7 @@ add_library(skyline SHARED
|
||||
${source_DIR}/skyline/services/visrv/IManagerRootService.cpp
|
||||
${source_DIR}/skyline/services/visrv/ISystemDisplayService.cpp
|
||||
${source_DIR}/skyline/vfs/os_backing.cpp
|
||||
${source_DIR}/skyline/vfs/nacp.cpp
|
||||
)
|
||||
|
||||
target_link_libraries(skyline vulkan android fmt tinyxml2 oboe)
|
||||
|
15
app/src/main/cpp/skyline/vfs/nacp.cpp
Normal file
15
app/src/main/cpp/skyline/vfs/nacp.cpp
Normal file
@ -0,0 +1,15 @@
|
||||
// SPDX-License-Identifier: MPL-2.0
|
||||
// Copyright © 2020 Skyline Team and Contributors (https://github.com/skyline-emu/)
|
||||
|
||||
#include "nacp.h"
|
||||
|
||||
namespace skyline::vfs {
|
||||
NACP::NACP(const std::shared_ptr<vfs::Backing> &backing) {
|
||||
backing->Read(&nacpContents);
|
||||
|
||||
// TODO: Select based on language settings, complete struct, yada yada
|
||||
ApplicationTitle &languageEntry = nacpContents.titleEntries[0];
|
||||
applicationName = std::string(languageEntry.applicationName.data(), languageEntry.applicationName.size());
|
||||
applicationPublisher = std::string(languageEntry.applicationPublisher.data(), languageEntry.applicationPublisher.size());
|
||||
}
|
||||
}
|
40
app/src/main/cpp/skyline/vfs/nacp.h
Normal file
40
app/src/main/cpp/skyline/vfs/nacp.h
Normal file
@ -0,0 +1,40 @@
|
||||
// SPDX-License-Identifier: MPL-2.0
|
||||
// Copyright © 2020 Skyline Team and Contributors (https://github.com/skyline-emu/)
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <array>
|
||||
#include <common.h>
|
||||
#include "backing.h"
|
||||
|
||||
namespace skyline::vfs {
|
||||
/**
|
||||
* @brief The NACP class provides easy access to the data found in an NACP file (https://switchbrew.org/wiki/NACP_Format)
|
||||
*/
|
||||
class NACP {
|
||||
private:
|
||||
/**
|
||||
* @brief This contains the name and publisher of an application for one language
|
||||
*/
|
||||
struct ApplicationTitle {
|
||||
std::array<char, 0x200> applicationName; //!< The name of the application
|
||||
std::array<char, 0x100> applicationPublisher; //!< The publisher of the application
|
||||
};
|
||||
static_assert(sizeof(ApplicationTitle) == 0x300);
|
||||
|
||||
/**
|
||||
* @brief This struct encapsulates all the data within an NACP file
|
||||
*/
|
||||
struct NacpData {
|
||||
ApplicationTitle titleEntries[0x10]; //!< Title entries for each language
|
||||
u8 _pad_[0x4000 - (0x10 * 0x300)];
|
||||
} nacpContents{};
|
||||
static_assert(sizeof(NacpData) == 0x4000);
|
||||
|
||||
public:
|
||||
NACP(const std::shared_ptr<vfs::Backing> &backing);
|
||||
|
||||
std::string applicationName; //!< The name of the application in the currently selected language
|
||||
std::string applicationPublisher; //!< The publisher of the application in the currently selected language
|
||||
};
|
||||
}
|
Loading…
Reference in New Issue
Block a user