/** * @file nacp.h * @brief Control.nacp structure / related code for nacp. * @copyright libnx Authors */ #pragma once #include "thirdparty/libnx/types.h" /// Language entry. These strings are UTF-8. typedef struct { char name[0x200]; char author[0x100]; } NacpLanguageEntry; /// ApplicationNeighborDetectionGroupConfiguration typedef struct { u64 group_id; ///< GroupId u8 key[0x10]; } NacpApplicationNeighborDetectionGroupConfiguration; /// NeighborDetectionClientConfiguration typedef struct { NacpApplicationNeighborDetectionGroupConfiguration send_group_configuration; ///< SendGroupConfiguration NacpApplicationNeighborDetectionGroupConfiguration receivable_group_configurations[0x10]; ///< ReceivableGroupConfigurations } NacpNeighborDetectionClientConfiguration; /// ApplicationJitConfiguration typedef struct { u64 flags; ///< Flags u64 memory_size; ///< MemorySize } NacpApplicationJitConfiguration; /// ns ApplicationControlProperty typedef struct { NacpLanguageEntry lang[16]; ///< \ref NacpLanguageEntry u8 isbn[0x25]; ///< Isbn u8 startup_user_account; ///< StartupUserAccount u8 user_account_switch_lock; ///< UserAccountSwitchLock u8 add_on_content_registration_type; ///< AddOnContentRegistrationType u32 attribute_flag; ///< AttributeFlag u32 supported_language_flag; ///< SupportedLanguageFlag u32 parental_control_flag; ///< ParentalControlFlag u8 screenshot; ///< Screenshot u8 video_capture; ///< VideoCapture u8 data_loss_confirmation; ///< DataLossConfirmation u8 play_log_policy; ///< PlayLogPolicy u64 presence_group_id; ///< PresenceGroupId s8 rating_age[0x20]; ///< RatingAge char display_version[0x10]; ///< DisplayVersion u64 add_on_content_base_id; ///< AddOnContentBaseId u64 save_data_owner_id; ///< SaveDataOwnerId u64 user_account_save_data_size; ///< UserAccountSaveDataSize u64 user_account_save_data_journal_size; ///< UserAccountSaveDataJournalSize u64 device_save_data_size; ///< DeviceSaveDataSize u64 device_save_data_journal_size; ///< DeviceSaveDataJournalSize u64 bcat_delivery_cache_storage_size; ///< BcatDeliveryCacheStorageSize u64 application_error_code_category; ///< ApplicationErrorCodeCategory u64 local_communication_id[0x8]; ///< LocalCommunicationId u8 logo_type; ///< LogoType u8 logo_handling; ///< LogoHandling u8 runtime_add_on_content_install; ///< RuntimeAddOnContentInstall u8 runtime_parameter_delivery; ///< RuntimeParameterDelivery u8 reserved_x30f4[0x2]; ///< Reserved u8 crash_report; ///< CrashReport u8 hdcp; ///< Hdcp u64 pseudo_device_id_seed; ///< SeedForPseudoDeviceId char bcat_passphrase[0x41]; ///< BcatPassphrase u8 startup_user_account_option; ///< StartupUserAccountOption u8 reserved_for_user_account_save_data_operation[0x6]; ///< ReservedForUserAccountSaveDataOperation u64 user_account_save_data_size_max; ///< UserAccountSaveDataSizeMax u64 user_account_save_data_journal_size_max; ///< UserAccountSaveDataJournalSizeMax u64 device_save_data_size_max; ///< DeviceSaveDataSizeMax u64 device_save_data_journal_size_max; ///< DeviceSaveDataJournalSizeMax u64 temporary_storage_size; ///< TemporaryStorageSize u64 cache_storage_size; ///< CacheStorageSize u64 cache_storage_journal_size; ///< CacheStorageJournalSize u64 cache_storage_data_and_journal_size_max; ///< CacheStorageDataAndJournalSizeMax u16 cache_storage_index_max; ///< CacheStorageIndexMax u8 reserved_x318a[0x6]; ///< Reserved u64 play_log_queryable_application_id[0x10]; ///< PlayLogQueryableApplicationId u8 play_log_query_capability; ///< PlayLogQueryCapability u8 repair_flag; ///< RepairFlag u8 program_index; ///< ProgramIndex u8 required_network_service_license_on_launch; ///< RequiredNetworkServiceLicenseOnLaunchFlag u32 reserved_x3214; ///< Reserved NacpNeighborDetectionClientConfiguration neighbor_detection_client_configuration; ///< NeighborDetectionClientConfiguration NacpApplicationJitConfiguration jit_configuration; ///< JitConfiguration u8 reserved_x33c0[0xc40]; ///< Reserved } NacpStruct; /// Get the NacpLanguageEntry from the input nacp corresponding to the current system language (this may fallback to other languages when needed). Output langentry is NULL if none found / content of entry is empty. /// If you're using ns you may want to use \ref nsGetApplicationDesiredLanguage instead. Result nacpGetLanguageEntry(NacpStruct* nacp, NacpLanguageEntry** langentry);