Difference between revisions of "BOSSU:GetNsDataIdList"

From 3dbrew
Jump to navigation Jump to search
 
(5 intermediate revisions by the same user not shown)
Line 3: Line 3:
 
{{#vardefine:ipc_offset|0}}
 
{{#vardefine:ipc_offset|0}}
 
{{IPC/RequestEntry|Header code [0x00100102]}}
 
{{IPC/RequestEntry|Header code [0x00100102]}}
{{IPC/RequestEntry|Unknown, usually 0xffffffff.}}
+
{{IPC/RequestEntry|u32 filter}}
 
{{IPC/RequestEntry|Buffer size in words(max entries).}}
 
{{IPC/RequestEntry|Buffer size in words(max entries).}}
{{IPC/RequestEntry|u16, unknown.}}
+
{{IPC/RequestEntry|u16, starting word-index in the internal NsDataId list.}}
{{IPC/RequestEntry|u32, unknown.}}
+
{{IPC/RequestEntry|u32, start_NsDataId.}}
 
{{IPC/MapPointerW|Destination pointer}}
 
{{IPC/MapPointerW|Destination pointer}}
 
{{IPC/RequestEnd}}
 
{{IPC/RequestEnd}}
Line 16: Line 16:
 
{{IPC/RequestEntry|Result code}}
 
{{IPC/RequestEntry|Result code}}
 
{{IPC/RequestEntry|u16 Actual number of output entries.}}
 
{{IPC/RequestEntry|u16 Actual number of output entries.}}
{{IPC/RequestEntry|u16 Unknown}}
+
{{IPC/RequestEntry|u16 Last word-index copied to output in the internal NsDataId list.}}
 
{{IPC/RequestEnd}}
 
{{IPC/RequestEnd}}
 +
 +
=Filter=
 +
Content filtering is enabled when this word isn't 0xffffffff. This is only used for the following: <code>if(filterword_u16high!=contentdatatype_u16high || (filterword_u16low & contentdatatype_u16low) == 0)continue;</code> Hence, filterword_u16high must match contentdatatype_u16high, and the bitmask specified by filterword_u16low must be non-zero in contentdatatype_u16low. The contentdatatype is extracted from the extdata filename, which originates from the [[SpotPass|BOSS-container]]. The NsDataId for the content entry is only written to the output when processing isn't skipped due to filtering.
 +
 +
=Start NsDataId=
 +
This field is only used when starting_wordindex is non-zero or when this field is non-zero.
 +
 +
The NsDataId at the specified start-wordindex must match this field, otherwise error 0xD840F846 is returned. It will then skip normal content entry processing for this matching entry(cur_wordindex is field is increased by 0x1 before starting the content entry processing loop).
  
 
=Description=
 
=Description=

Latest revision as of 22:33, 28 December 2016

Request[edit]

Index Word Description
0 Header code [0x00100102]
1 u32 filter
2 Buffer size in words(max entries).
3 u16, starting word-index in the internal NsDataId list.
4 u32, start_NsDataId.
5 Descriptor for mapping a write-only buffer in the target process
6 Destination pointer

Response[edit]

Index Word Description
0 Header code
1 Result code
2 u16 Actual number of output entries.
3 u16 Last word-index copied to output in the internal NsDataId list.

Filter[edit]

Content filtering is enabled when this word isn't 0xffffffff. This is only used for the following: if(filterword_u16high!=contentdatatype_u16high || (filterword_u16low & contentdatatype_u16low) == 0)continue; Hence, filterword_u16high must match contentdatatype_u16high, and the bitmask specified by filterword_u16low must be non-zero in contentdatatype_u16low. The contentdatatype is extracted from the extdata filename, which originates from the BOSS-container. The NsDataId for the content entry is only written to the output when processing isn't skipped due to filtering.

Start NsDataId[edit]

This field is only used when starting_wordindex is non-zero or when this field is non-zero.

The NsDataId at the specified start-wordindex must match this field, otherwise error 0xD840F846 is returned. It will then skip normal content entry processing for this matching entry(cur_wordindex is field is increased by 0x1 before starting the content entry processing loop).

Description[edit]

This writes an array of u32 entries(NsDataId) to the output buffer, for the current programID.

This eventually calls a function with the following type parameters: 0, 1, 1. This function doesn't use the second type parameter. Afterwards another function is called using the programID.