1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2<html xml:lang="en-US" lang="en-US" xmlns="http://www.w3.org/1999/xhtml">
3  <head>
4    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
5    <meta http-equiv="Content-Style-Type" content="text/css" />
6    <link rel="stylesheet" href="../../../../css/manpage.css" type="text/css" />
7<title>WriteMessage</title>
8  </head>
9  <body>
10<h1><CODE><a href="../../../../nn/Overview.html">nn</a>::<a href="../../../../nn/cec/Overview.html">cec</a>::<a href="../../../../nn/cec/CTR/Overview.html">CTR</a>::<a href="../../../../nn/cec/CTR/MessageBox/Overview.html">MessageBox</a>::WriteMessage</CODE> Member Function</h1>
11<h2>Syntax</h2>
12    <div class="section">
13      <pre class="definition">
14<a href="../../../../nn/Result/Overview.html">nn::Result</a> WriteMessage(
15     const <a href="../../../../nn/cec/CTR/Message/Overview.html">Message</a> & cecMessage,
16     const <a href="../../../../nn/cec/CTR/CecBoxType.html">CecBoxType</a> boxType,
17     <a href="../../../../nn/cec/CTR/MessageId/Overview.html">MessageId</a> & messageIdOut
18);
19</pre>
20    </div>
21<h2>Parameters</h2>
22    <div class="section">
23      <table class="arguments">
24        <thead>
25          <tr>
26            <td width="15" />
27<th>Name</th>
28<td>Description</td>
29          </tr>
30        </thead>
31        <tr>
32<td>in</td>
33<th>cecMessage</th>
34<td>An object of the <a href="../../../../nn/cec/CTR/Message/Overview.html"><CODE>Message</CODE></a> class.</td>
35        </tr>
36        <tr>
37<td>in</td>
38<th>boxType</th>
39<td>Inbox and outbox specification.</td>
40        </tr>
41        <tr>
42<td>out</td>
43<th>messageIdOut</th>
44<td>Returns the <a href="../../../../nn/cec/CTR/MessageId/Overview.html"><CODE>MessageId</CODE></a> that is assigned during the write operation.</td>
45        </tr> </table>
46    </div>
47<h2>Return Values</h2>
48<div class="section"><a href="../../../../nn/Result/Overview.html"><CODE>nn::Result</CODE></a><br /> <br />
49      <table class="arguments">
50        <thead>
51          <tr>
52<th>Value</th>
53<td>Description</td>
54          </tr>
55        </thead>
56        <tr>
57<th>Result::IsSuccess</th>
58<td>Succeeded.</td>
59        </tr>
60        <tr>
61<th>ResultNotAuthorized</th>
62<td>The box has not been opened.</td>
63        </tr>
64        <tr>
65<th>ResultMessTooLarge</th>
66<td>The message is too large.</td>
67        </tr>
68        <tr>
69<th>ResultBoxSizeFull</th>
70<td>The box's capacity has been exceeded.</td>
71        </tr>
72        <tr>
73<th>ResultBoxMessNumFull</th>
74<td>The maximum number of boxes has been exceeded.</td>
75        </tr>
76        <tr>
77<th>ResultNoData</th>
78<td>No message body or icon has been set for the message.</td>
79        </tr>
80        <tr>
81<th>ResultInvalidCombination</th>
82<td>The send count and propagation count have both been set equal to a value of <CODE>2</CODE> or greater.</td>
83        </tr>
84        <tr>
85<th><CODE>ResultNotAgreeEula</CODE></th>
86<td>The EULA has not been agreed to, or no icon file (<CODE>.icn</CODE>) is configured in the ROM.</td>
87        </tr>
88        <tr>
89<th>ResultParentalControlCec</th>
90<td>Not allowed by Parental Controls.</td>
91        </tr>
92        <tr>
93<th>ResultStateBusy</th>
94<td>Unable to access because the daemon is busy (<CODE>BUSY</CODE> state). It may succeed if you wait some time before accessing again.</td>
95        </tr>
96        <tr>
97<th>Any other value</th>
98<td>Process failed.</td>
99        </tr>
100      </table> </div>
101<h2>Description</h2>
102    <div class="section">
103<p>Writes a <a href="../../../../nn/cec/CTR/Message/Overview.html">message</a> to the system save region.</p><p>The message cannot be written if it is larger than 100 KB (including data such as the header and icon), or if it would exceed the box's maximum save capacity or maximum number of messages. You can use the <CODE><a href="../../../../nn/cec/CTR/Message/GetMessageSize.html">Message::GetMessageSize</a></CODE> function to get the message size. Because NAND memory (the save region) uses a block size of 4 KB, for some message sizes it may be impossible to write up to the maximum storage capacity. If the message size is 5 KB, a NAND memory region of 8 KB is used for storing the message. After usage exceeds 1,024 KB, messages cannot be written to memory. The number of  5 KB messages that can be stored (in the inbox and outbox combined) is 1024/8 = 128 messages.<br />Written data is committed when the <CODE><a href="../../../../nn/cec/CTR/MessageBox/CloseMessageBox.html">CloseMessageBox</a></CODE> or <CODE><a href="../../../../nn/cec/CTR/MessageBox/CommitMessageBox.html">CommitMessageBox</a></CODE> function is called after a write has been made. <br /> The EULA version to which the user has agreed is checked when a message is written. If an icon file (<CODE>.icn</CODE>) is not set in the ROM, <CODE><a href="../../../../nn/cec/ResultNotAgreeEula/Overview.html">ResultNotAgreeEula</a></CODE> is returned. You must initialize the FS library before calling this function because the check uses <a href="../../../../nn/fs/Overview.html">FS</a> library features.</p><!-- write here --><h3>Error Handling</h3>
104The following simplified C++ code provides guidelines for error handling. <br /><code><pre>
105    nn::Result result = WriteMessage();
106    if(result.IsFailure())
107    {
108        if(result == nn::cec::ResultNotAgreeEula())
109        {
110            // The user has not agreed to the EULA.
111        }
112        else if(result == nn::cec::ResultParentalControlCec())
113        {
114            // Not permitted by Parental Controls.
115        }
116        else if(result == nn::cec::ResultNotAuthorized())
117        {
118            // Box is not open
119            //  --> OpenMessageBox
120        }
121        else if(result == nn::cec::ResultBoxSizeFull() || result == nn::cec::ResultBoxMessNumFull())
122        {
123            // Outbox capacity exceeded
124            // You must delete some outbox messages → <CODE>DeleteMessage</CODE>/<CODE>DeleteAllMessages</CODE>
125        }
126        else if(result == nn::cec::ResultMessTooLarge() || result == nn::cec::ResultNoData()
127             || result == nn::cec::ResultInvalidCombination() )
128        {
129            // Invalid message
130        }
131        else if(result == nn::cec::ResultStateBusy() )
132        {
133            // Daemon is BUSY. This state never occurs normally. It might be possible to succeed by retrying.
134        }
135        else
136        {
137            // Error
138        }
139        return result;	// Failure
140    }
141    return result;  // Success
142
143    </pre></code></div>
144<h2>Revision History</h2>
145    <div class="section">
146      <dl class="history">
147        <dt>2011/01/19</dt>
148<dd>Added a description of error handling.<br />
149        </dd>
150        <dt>2010/08/16</dt>
151<dd>Initial version.<br />
152        </dd>
153      </dl>
154    </div>
155  <hr><p>CONFIDENTIAL</p></body>
156</html>
157