nn::cec::CTR::MessageBox::WriteMessage Member Function

Syntax

nn::Result WriteMessage(
     const Message & cecMessage,
     const CecBoxType boxType,
     MessageId & messageIdOut
);

Arguments

Name Description
in cecMessage An object of the Message class.
in boxType Inbox/outbox specification.
out messageIdOut Returns the MessageId that is assigned during the write.

Return Values

nn::Result

Value Description
ResultSuccess Process succeeded.
ResultNotAuthorized The box has not been opened.
ResultMessTooLarge The message is too large.
ResultBoxSizeFull The box's capacity has been exceeded.
ResultBoxMessNumFull The maximum number of boxes has been exceeded.
ResultNoData No message body or icon has been set for the message.
ResultInvalidCombination The send count and propagation count have both been set equal to a value of 2 or greater.
ResultNotAgreeEula The EULA has not been agreed to, or no icon file (ICN file) is configured in the ROM.
ResultParentalControlCec Not allowed by Parental Controls.
ResultStateBusy Unable to access because the daemon is busy (BUSY state). This may succeed if you wait some time before accessing again.
A value other than the above. Operation failed.

Description

Writes a message to the system save region.

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 storage capacity or maximum number of messages. 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. After writing, the written data is committed when the CloseMessageBox or CommitMessageBox function is called.
When this function writes a message it checks the agreed EULA version. If no icon file (ICN file) is configured in the ROM, this function returns ResultNotAgreeEula in that situation also.
You must initialize the FS library before calling this function because the check uses FS library features.

Error Handling

The following simplified C++ code provides guidelines for error handling.
    nn::Result result = WriteMessage();
    if(result.IsFailure())
    {
        if(result == nn::cec::ResultNotAgreeEula())
        {
            // The user has not agreed to the EULA.
        }
        else if(result == nn::cec::ResultParentalControlCec())
        {
            // Not permitted by Parental Controls.
        }
        else if(result == nn::cec::ResultNotAuthorized())
        {
            // Box is not open
            //  --> OpenMessageBox
        }
        else if(result == nn::cec::ResultBoxSizeFull() || result == nn::cec::ResultBoxMessNumFull())
        {
            // Outbox capacity overflow
            // You must delete some outbox messages → DeleteMessage/DeleteAllMessages
        }
        else if(result == nn::cec::ResultMessTooLarge() || result == nn::cec::ResultNoData() 
             || result == nn::cec::ResultInvalidCombination() )
        {
            // Invalid message
        }
        else if(result == nn::cec::ResultStateBusy())
        {
            // Daemon is BUSY. This state will never normally occur, but it might be possible to succeed by retrying.
        }
        else
        {
            // Error
        }
        return result;	// Failure
    }
    return result;  // Success
    

Revision History

2011/01/19
Added description of error handling.
2010/08/16
Initial version.

CONFIDENTIAL