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>OpenMessageBox</title> 8 </head> 9 <body> 10<h1><CODE>nn::cec::CTR::MessageBox::OpenMessageBox</CODE> Member Function</h1> 11<h2>Syntax</h2> 12 <div class="section"> 13 <pre class="definition"> 14<a href="../../../../nn/Result/Overview.html"><CODE>nn::Result</CODE></a> OpenMessageBox( 15 const <a href="../../../../nn/cec/CTR/TitleId.html">TitleId</a> cecTitleId, 16 const u32 privateId 17); 18</pre> 19 </div> 20<h2>Arguments</h2> 21 <div class="section"> 22 <table class="arguments"> 23 <thead> 24 <tr> 25 <td width="15" /> 26<th>Name</th> 27<td>Description</td> 28 </tr> 29 </thead> 30 <tr> 31<td>in</td> 32<th>cecTitleId</th> 33<td>StreetPass ID</td> 34 </tr> 35 <tr> 36<td>in</td> 37<th>privateId</th> 38<td>Specify the same value that was specified when the box was created using <a href="../../../../nn/cec/CTR/MessageBox/CreateMessageBox.html"><CODE>CreateMessageBox</CODE></a>. You will not be able to access the box if you specify any other value.</td> 39 </tr> </table> 40 </div> 41<h2>Return Values</h2> 42<div class="section"><a href="../../../../nn/Result/Overview.html"><CODE>nn::Result</CODE></a><br /> <br /> 43 <table class="arguments"> 44 <thead> 45 <tr> 46<th>Value</th> 47<td>Description</td> 48 </tr> 49 </thead> 50 <tr> 51<th><CODE>ResultSuccess</CODE></th> 52<td>Process succeeded.</td> 53 </tr> 54 <tr> 55<th><CODE>ResultNoData</CODE></th> 56<td>Box does not exist.</td> 57 </tr> 58 <tr> 59<th><CODE>ResultNotAuthorized</CODE></th> 60<td>Unable to access because the private IDs are different.</td> 61 </tr> 62 <tr> 63<th><CODE>ResultStateBusy</CODE></th> 64<td>Unable to access because the daemon is busy (BUSY state). This may succeed if you wait some time before accessing again.</td> 65 </tr> 66 <tr> 67<th>A value other than the above.</th> 68<td>Operation failed.</td> 69 </tr> 70 </table> </div> 71<h2>Description</h2> 72 <div class="section"> 73<p>Opens a <CODE><a href="../../../../nn/cec/CTR/MessageBox/Overview.html">MessageBox</a></CODE>. You must use this function to open a box before you can access the messages within it.</p><p>When this function is called, the CEC daemon operating in the background stops. Be aware that background communication might be interrupted.→ <CODE><a href="../../../../nn/cec/CTR/CecControl/StopScanning.html">CecControl::StopScanning</a></CODE><br />Call the <CODE>CloseMessageBox</CODE> function when you have finished accessing the box.<br />After you call this function, the CEC daemon will not start running until you call the <CODE>CloseMessageBox</CODE> function. Open message boxes only to set a send message or get a received message; do not leave them open at any other time. One safe implementation is to treat the <CODE>Open</CODE>-to-<CODE>Close</CODE> interval as a single unit of processing and mutually exclude Sleep Mode during that time.</p><!-- write here --><h3>Error Handling</h3> 74The following simplified C++ code provides guidelines for error handling.<br /> It shows the process flow of opening a box. If no box exists, this code sample creates one with <CODE>CreateMessageBox</CODE>. 75 <code><pre> 76 nn::Result result = OpenMessageBox(); 77 if(result.IsFailure()) 78 { 79 if(result == nn::cec::ResultNoData()) 80 { 81 // If no MessageBox exists 82 // Prompt the user when creating a MessageBox 83 // Create MessageBox 84 result = CreateMessageBox(); 85 if(result.IsFailure()) 86 { 87 if(result == nn::cec::ResultBoxAlreadyExists()) 88 { 89 // If a box seems to exist, but it won't open -> a box exists whose lower 8 bits of its ID are different 90 // If the <CODE>CecTitleId</CODE> is specified correctly, this state will never occur. 91 // This state occurs when the <SPAN class="argument">variation</SPAN> value was set unintentionally in <CODE>MakeCecTitleId</CODE>. 92 // If you need to delete and recreate it -> <CODE>DeleteMessageBox(titleId);</CODE> 93 } 94 else if(result == nn::cec::ResultBoxNumFull()) 95 { 96 // Number of boxes has reached maximum 97 // Prompt the user to delete the box of some other application 98 } 99 else if(result == nn::cec::ResultStateBusy()) 100 { 101 // Daemon is running 102 // This state will never normally occur, but it might be possible to succeed by retrying 103 } 104 else if(result == nn::cec::ResultInvalidArgument() 105 || result == nn::cec::ResultTooLarge() 106 || result == nn::cec::ResultInvalidData() ) 107 { 108 // Mistake in an argument, box icon, or similar 109 } 110 return result; // Failure 111 } 112 // If <CODE>CreateMessageBox</CODE> succeeds, the box is opened. 113 } 114 else if(result == nn::cec::ResultNotAuthorized()) 115 { 116 // Private ID does not match 117 return result; // Failure 118 // If you need to delete and recreate it -> <CODE>DeleteMessageBox(titleId);</CODE> 119 } 120 else if(result.GetDescription() == Result::DESCRIPTION_BUSY) 121 { 122 // Daemon is running 123 // This state will never normally occur, but it might be possible to succeed by retrying 124 return result; // Failure 125 } 126 else 127 { 128 // Err 129 return result; // Failure 130 } 131 } 132 return result; // Success 133 </pre></code></div> 134<h2>Revision History</h2> 135 <div class="section"> 136 <dl class="history"> 137 <dt>2011/01/19</dt> 138<dd>Added description of error handling.<br /> 139 </dd> 140 <dt>2010/06/14</dt> 141<dd>Initial version.<br /> 142 </dd> 143 </dl> 144 </div> 145 <hr><p>CONFIDENTIAL</p></body> 146</html> 147