<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
    <title>Target Communication Framework Services - Memory</title>
</head>

<body lang='EN-US'>

<h1>Target Communication Framework Services - Memory</h1>

<ul>
    <li><a href='#VersionHistory'>Version History</a>
    <li><a href='#Overview'>Overview</a>
    <li><a href='#Cmds'>Commands</a>
    <ul>
        <li><a href='#CmdGetContext'>Get Context</a>
        <li><a href='#CmdGetChildren'>Get Children</a>
        <li><a href='#CmdSetMemory'>Set Memory</a>
        <li><a href='#CmdGetMemory'>Get Memory</a>
        <li><a href='#CmdFillMemory'>Fill Memory</a>
    </ul>
    <li><a href='#Events'>Events</a>
    <li><a href='#API'>API</a>
</ul>

<h1>Memory Service</h1>

<h2><a name='VersionHistory'>Version History</a></h2>

<table border=1 cellpadding=8>
    <tr>
        <th>Version
        <th>Date
        <th>Change
    <tr>
        <td>0.1
        <td>2008-01-10
        <td>Initial contribution
    <tr>
        <td>1.0
        <td>2008-05-06
        <td>Approved
    <tr>
        <td>1.1
        <td>2009-03-16
        <td>Added context properties
</table>

<h2><a name='Overview'>Overview</a></h2>

<p>The service provides basic operations to read/write memory on a target. Command
and event parameters are encoded as zero terminated <a href='TCF Specification.html#JSON'>JSON</a> strings.</p>

<p>The service uses standard format for error reports,
see <a href='TCF Services.html#ErrorFormat'>Error Report Format</a>.</p>

<p>A single memory access can succeed for some addresses and fail for others. In such
situation result message can contain partially valid data. Array of error addresses,
in addition to error report, describes data validity on per byte basis:</p>

<pre><b><font face="Courier New" size=2 color=#333399>
<i>&lt;array of error addresses&gt;</i>
    &rArr; null
    &rArr; [ <i>&lt;error address list&gt;</i> ]

<i>&lt;error address list&gt;</i>
    &rArr; <i>&lt;error address&gt;</i>
    &rArr; <i>&lt;error address list&gt;</i> , <i>&lt;error address&gt;</i>

<i>&lt;error address&gt;</i>
    &rArr; { "addr" : <i>&lt;int: range starting address&gt;</i> , "size" : <i>&lt;int: range length in bytes&gt;</i> , "stat" : <i>&lt;int: status code&gt;</i> , "msg" : <i>&lt;object: error description&gt;</i> }
</font></b></pre>

<p>If there is no entry in error addresses array for a data byte, then status of such
byte is defined by main error report.</p>

<p>Status code is bitwise or of status flags:</p>
<dl>
    <dt><code><b>BYTE_VALID        = 0x00</b></code> <dd>no error for this byte
    <dt><code><b>BYTE_UNKNOWN      = 0x01</b></code> <dd>status is unknown
    <dt><code><b>BYTE_INVALID      = 0x02</b></code> <dd>byte value in invalid, error message describes the problem
    <dt><code><b>BYTE_CANNOT_READ  = 0x04</b></code> <dd>cannot read the byte
    <dt><code><b>BYTE_CANNOT_WRITE = 0x08</b></code> <dd>cannot write the byte
</dl>

<h2><a name='Cmds'>Commands</a></h2>

<h3><a name='CmdGetContext'>Get Context</a></h3>

<pre><b><font face="Courier New" size=2 color=#333399>
C &bull; <i>&lt;token&gt;</i> &bull; Memory &bull; getContext &bull; <i>&lt;string: context ID&gt;</i> &bull;
</font></b></pre>

<p>The command retrieves context info for given context ID. A context corresponds to an
execution thread, process, address space, etc. Exact
meaning of a context depends on the target. Target agent should define contexts hierarchy
that is:</p>

<ul type='disc'>
    <li>Sufficient to resolve possible ambiguity of a memory address;

    <li>Adequately reflects target memory management strategy;

    <li>Intuitive to a user.
</ul>

<p>For traditional OS, like UNIX, memory access context can be one of:</p>

<ul type='disc'>
    <li>Kernel address space;

    <li>A process.
</ul>

<p>Reply:</p>

<pre><b><font face="Courier New" size=2 color=#333399>
R &bull; <i>&lt;token&gt;</i> &bull; <i>&lt;error report&gt;</i> &bull; <i>&lt;context data&gt;</i> &bull;

<i>&lt;context data&gt;</i>
    &rArr; null
    &rArr; <i>&lt;object&gt;</i>
</font></b></pre>

<p>Context data object should, at least, contain member
<b><font face="Courier New" size=2 color=#333399>"ID" : <i>&lt;string&gt;.</i></font></b>
Context data is expected to be cached by clients.
Service sends contextChanged event to notify changes in context data.</p>

<p>Predefined memory context properties are:</p>
<ul>
    <li><code><b><font face="Courier New" size=2 color=#333399>"ID" : <i>&lt;string&gt;</i></font></b></code>
    - ID of the context, same as getContext command argument.

    <li><code><b><font face="Courier New" size=2 color=#333399>"ParentID" : <i>&lt;string&gt;</i></font></b></code>
    - ID of a parent context.

    <li><code><b><font face="Courier New" size=2 color=#333399>"ProcessID" : <i>&lt;string&gt;</i></font></b></code>
    - process ID.

    <li><code><b><font face="Courier New" size=2 color=#333399>"BigEndian" : <i>&lt;boolean&gt;</i></font></b></code>
    - true if memory is big-endian.

    <li><code><b><font face="Courier New" size=2 color=#333399>"AddressSize" : <i>&lt;int&gt;</i></font></b></code>
    - size of memory address in bytes.

    <li><code><b><font face="Courier New" size=2 color=#333399>"Name" : <i>&lt;string&gt;</i></font></b></code>
    - name of the context, can be used for UI purposes.

    <li><code><b><font face="Courier New" size=2 color=#333399>"StartBound" : <i>&lt;int&gt;</i></font></b></code>
    - lowest address (inclusive) which is valid for the context.

    <li><code><b><font face="Courier New" size=2 color=#333399>"EndBound" : <i>&lt;int&gt;</i></font></b></code>
    - highest address (inclusive) which is valid for the context.

    <li><code><b><font face="Courier New" size=2 color=#333399>"AccessTypes" : <i>&lt;array of strings&gt;</i></font></b></code>
    - Defines the access types allowed for this context.
        <p>Target system can support multiple different memory access types, like instruction and data access.
    Different access types can use different logic for address translation and memory mapping, so they can
    end up accessing different data bits, even if address is the same.
    Each distinct access type should be represented by separate memory context.
    A memory context can represent multiple access types if they are equivalent - all access same memory bits.
    Same data bits can be exposed through multiple memory contexts.</p>

    <p>Predefined access types are:</p>
    <ul>
        <li><code><b><font face="Courier New" size=2 color=#333399>"instruction"</font></b></code>
        - Context represent instructions fetch access.

        <li><code><b><font face="Courier New" size=2 color=#333399>"data"</font></b></code>
        - Context represents data access.

        <li><code><b><font face="Courier New" size=2 color=#333399>"io"</font></b></code>
        - Context represents IO peripherals.

        <li><code><b><font face="Courier New" size=2 color=#333399>"user"</font></b></code>
        - Context represents a user (e.g. application running in Linux) view to memory.

        <li><code><b><font face="Courier New" size=2 color=#333399>"supervisor"</font></b></code>
        - Context represents a supervisor (e.g. Linux kernel) view to memory.

        <li><code><b><font face="Courier New" size=2 color=#333399>"hypervisor"</font></b></code>
        - Context represents a hypervisor view to memory.

        <li><code><b><font face="Courier New" size=2 color=#333399>"virtual"</font></b></code>
        - Context uses virtual addresses.

        <li><code><b><font face="Courier New" size=2 color=#333399>"physical"</font></b></code>
        - Context uses physical addresses.

        <li><code><b><font face="Courier New" size=2 color=#333399>"cache"</font></b></code>
        - Context is a cache.

        <li><code><b><font face="Courier New" size=2 color=#333399>"tlb"</font></b></code>
        - Context is a TLB memory.
    </ul>
</ul>

<h3><a name='CmdGetChildren'>Get Children</a></h3>

<pre><b><font face="Courier New" size=2 color=#333399>
C &bull; <i>&lt;token&gt;</i> &bull; Memory &bull; getChildren &bull; <i>&lt;string: parent context ID&gt;</i> &bull;
</font></b></pre>

<p>The command requests a list of contexts available for memory access commands.</p>

<p>Parent context ID can be null &ndash; to retrieve top level of the hierarchy, can be one
of context IDs retrieved by previous getChildren commands, or it can be obtained from another service.
Contexts hierarchy can be simple plain list or it can form a tree. It is up to target agent developers to
choose layout that is most descriptive for a given target.</p>

<p>Reply:</p>

<pre><b><font face="Courier New" size=2 color=#333399>
R &bull; <i>&lt;token&gt;</i> &bull; <i>&lt;error report&gt;</i> &bull; <i>&lt;array of context IDs&gt;</i> &bull;<i></i>

<i>&lt;array of context IDs&gt;</i>
    &rArr; null
    &rArr; [ ]
    &rArr; [ <i>&lt;context ID list&gt;</i> ]

<i>&lt;context ID list&gt;</i>
    &rArr; <i>&lt;string: context ID&gt;</i>
    &rArr; <i>&lt;context ID list&gt;</i> , <i>&lt;string: context ID&gt;</i>

</font></b></pre>

<h3><a name='CmdSetMemory'>Set Memory</a></h3>

<pre><b><font face="Courier New" size=2 color=#333399>
C &bull; &lt;token&gt; &bull; Memory &bull; set &bull;
    <i>&lt;string: context ID&gt;</i> &bull; <i>&lt;int: address&gt;</i> &bull; <i>&lt;int: word size&gt;</i> &bull;
    <i>&lt;int: byte count&gt;</i> &bull; <i>&lt;int: mode&gt;</i> &bull; <i>&lt;string: BASE64 encoded byte array&gt;</i> &bull;
</font></b></pre>

<p>Writes data bytes at given address in memory, "word size" bytes at a time. Address
should be aligned by "word size". Context ID must be one returned by getContexts.
Mode is logical OR of any combination of:</p>

<ul type='disc'>
    <li>0x1 &ndash; continue on error (like bus error or page fault)

    <li>0x2 &ndash; verify data after writing by reading back and compare
</ul>

<p>Result message:</p>

<pre><b><font face="Courier New" size=2 color=#333399>
R &bull; <i>&lt;token&gt;</i> &bull; <i>&lt;error report&gt;</i> &bull; <i>&lt;array of error addresses&gt;</i> &bull;
</font></b></pre>

<p>Error report provides integer error code and a short, human readable explanation
of error. Error addresses, when present, let client know which bytes of data failed
to be written into memory.</p>

<h3><a name='CmdGetMemory'>Get Memory</a></h3>

<pre><b><font face="Courier New" size=2 color=#333399>
C &bull; &lt;token&gt; &bull; Memory &bull; get &bull;
    <i>&lt;string: context ID&gt;</i> &bull; <i>&lt;int: address&gt;</i> &bull; <i>&lt;int: word size&gt;</i> &bull;
    <i>&lt;int: byte count&gt;</i> &bull; <i>&lt;int: mode&gt;</i> &bull;
</font></b></pre>

<p>Reads data bytes at given address in memory, "word size" bytes at a time. Address
should be aligned by "word size". Context ID must be one returned by getContexts.
Mode is logical OR of any combination of:</p>

<ul type='disc'>
    <li>0x1 &ndash; continue on error (like bus error or page fault)

    <li>0x2 &ndash; verify data after reading by re-reading and compare
</ul>

<p>Result message:</p>

<pre><b><font face="Courier New" size=2 color=#333399>
R &bull; <i>&lt;token&gt;</i> &bull; <i>&lt;string: BASE64 encoded byte array&gt;</i> &bull; <i>&lt;error report&gt;</i> &bull; <i>&lt;array of error addresses&gt;</i> &bull;
</font></b></pre>

<p>Error report provides integer error code and a short, human readable explanation
of error. Error addresses, when present, let client know which bytes of data failed
to be retrieved from memory.</p>

<h3><a name='CmdFillMemory'>Fill Memory</a></h3>

<pre><b><font face="Courier New" size=2 color=#333399>
C &bull; &lt;token&gt; &bull; Memory &bull; fill &bull;
    <i>&lt;string: context ID&gt;</i> &bull; <i>&lt;int: address&gt;</i> &bull; <i>&lt;int: word size&gt;</i> &bull;
    &lt;int: byte count&gt; &bull; <i>&lt;int: mode&gt;</i> &bull; <i>&lt;array: array of pattern bytes&gt;</i> &bull;
</font></b></pre>

<p>Writes pattern bytes at given address in memory, "word size" bytes at a time. Address
should be aligned by "word size". If "byte count" is bigger then pattern size, then
pattern is repeated necessary number of times. Context ID must be one returned by
getContexts. Mode is logical OR of any combination of:</p>

<ul type='disc'>
    <li>0x1 &ndash; continue on error (like bus error or page fault)

    <li>0x2 &ndash; verify data after writing by reading back and compare
</ul>

<p>Result message:</p>

<pre><b><font face="Courier New" size=2 color=#333399>
R &bull; <i>&lt;token&gt;</i> &bull; <i>&lt;error report&gt;</i> &bull; <i>&lt;array of error addresses&gt;</i> &bull;
</font></b></pre>

<p>Error report provides integer error code and a short, human readable explanation
of error. Error addresses, when present, let client know which bytes of data failed
to be written into memory.</p>

<h2><a name='Events'>Events</a></h2>

<p>Memory service broadcasts notification events when memory contexts are added, removed
or changed, and when memory content is altered by "set" or "fill" commands.</p>

<pre><b><font face="Courier New" size=2 color=#333399>
E &bull; Memory &bull; contextAdded &bull; <i>&lt;array of context data&gt;</i> &bull;
E &bull; Memory &bull; contextChanged &bull; <i>&lt;array of context data&gt;</i> &bull;
E &bull; Memory &bull; contextRemoved &bull; <i>&lt;array of context IDs&gt;</i> &bull;
E &bull; Memory &bull; memoryChanged &bull; <i>&lt;string: context ID&gt;</i> &bull; <i>&lt;array of address ranges&gt;</i> &bull;

<i>&lt;array of context data&gt;</i> <font face="Times New Roman" size=3>- see Get Contexts command.</font>

<i>&lt;array of context IDs&gt;</i>
    &rArr; [ <i>&lt;context ID list&gt;</i> ]

<i>&lt;context ID list&gt;</i>
    &rArr; <i>&lt;string: context ID&gt;</i>
    &rArr; <i>&lt;context ID list&gt;</i> , <i>&lt;string: context ID&gt;</i>

<i>&lt;array of address ranges&gt;</i>
    &rArr; null
    &rArr; [ <i>&lt;address ranges list&gt;</i> ]

<i>&lt;address ranges list&gt;</i>
    &rArr; <i>&lt;address range&gt;</i>
    &rArr; <i>&lt;address ranges list&gt;</i> , <i>&lt;address range&gt;</i>

<i>&lt;address range&gt;</i>
    &rArr; { "addr" : <i>&lt;int: range starting address&gt;</i> , "size" : <i>&lt;int: range length in bytes&gt;</i> }
</font></b></pre>

<h2><a name='API'>API</a></h2>

<pre>
<font color=#3F5FBF>/**
 * IMemory service provides basic operations to read/write memory on a target.
 */</font>
<font color=#7F0055>public interface</font> Memory <font color=#7F0055>extends</font> Service {

    <font color=#7F0055>static final</font> String NAME = "Memory";

    <font color=#3F5FBF>/**
     * Context property names.
     */</font>
    <font color=#7F0055>static final</font> String
        PROP_ID = "ID",                         <font color=#3F5FBF>/** String, ID of the context, same as getContext command argument */</font>
        PROP_PARENT_ID = "ParentID",            <font color=#3F5FBF>/** String, ID of a parent context */</font>
        PROP_PROCESS_ID = "ProcessID",          <font color=#3F5FBF>/** String, process ID, see Processes service */</font>
        PROP_BIG_ENDIAN = "BigEndian",          <font color=#3F5FBF>/** Boolean, true if memory is big-endian */</font>
        PROP_ADDRESS_SIZE = "AddressSize",      <font color=#3F5FBF>/** Number, size of memory address in bytes */</font>
        PROP_NAME = "Name",                     <font color=#3F5FBF>/** String, name of the context, can be used for UI purposes */</font>
        PROP_START_BOUND = "StartBound",        <font color=#3F5FBF>/** Number, lowest address (inclusive) which is valid for the context */</font>
        PROP_END_BOUND = "EndBound",            <font color=#3F5FBF>/** Number, highest address (inclusive) which is valid for the context */</font>
        PROP_ACCESS_TYPES = "AccessTypes";      <font color=#3F5FBF>/** Array of String, the access types allowed for this context */</font>

    <font color=#3F5FBF>/**
     * Values of "AccessTypes".
     * Target system can support multiple different memory access types, like instruction and data access.
     * Different access types can use different logic for address translation and memory mapping, so they can
     * end up accessing different data bits, even if address is the same.
     * Each distinct access type should be represented by separate memory context.
     * A memory context can represent multiple access types if they are equivalent - all access same memory bits.
     * Same data bits can be exposed through multiple memory contexts.
     */</font>
    <font color=#7F0055>static final</font> String
        ACCESS_INSTRUCTION = "instruction",     <font color=#3F5FBF>/** Context represent instructions fetch access */</font>
        ACCESS_DATA = "data",                   <font color=#3F5FBF>/** Context represents data access */</font>
        ACCESS_IO = "io",                       <font color=#3F5FBF>/** Context represents IO peripherals */</font>
        ACCESS_USER = "user",                   <font color=#3F5FBF>/** Context represents a user (e.g. application running in Linux) view to memory */</font>
        ACCESS_SUPERVISOR = "supervisor",       <font color=#3F5FBF>/** Context represents a supervisor (e.g. Linux kernel) view to memory */</font>
        ACCESS_HYPERVISOR = "hypervisor",       <font color=#3F5FBF>/** Context represents a hypervisor view to memory */</font>
        ACCESS_VIRTUAL = "virtual",             <font color=#3F5FBF>/** Context uses virtual addresses */</font>
        ACCESS_PHYSICAL = "physical",           <font color=#3F5FBF>/** Context uses physical addresses */</font>
        ACCESS_CACHE = "cache",                 <font color=#3F5FBF>/** Context is a cache */</font>
        ACCESS_TLB = "tlb";                     <font color=#3F5FBF>/** Context is a TLB memory */</font>

    <font color=#3F5FBF>/**
     * Retrieve context info for given context ID.
     *
     * <font color=#7F9FBF>@param</font> id &ndash; context ID.
     * <font color=#7F9FBF>@param</font> done - callback interface called when operation is completed.
     */</font>
    IToken getContext(String id, DoneGetContext done);

    <font color=#3F5FBF>/**
     * Client callback interface for getContext().
     */</font>
    <font color=#7F0055>interface</font> DoneGetContext {
        <font color=#3F5FBF>/**
         * Called when contexts data retrieval is done.
         * <font color=#7F9FBF>@param</font> error &ndash; error description if operation failed, null if succeeded.
         * <font color=#7F9FBF>@param</font> context &ndash; context data.
         */</font>
        <font color=#7F0055>void</font> doneGetContext(IToken token, Exception error, MemoryContext context);
    }

    <font color=#3F5FBF>/**
     * Retrieve contexts available for memory commands.
     * A context corresponds to an execution thread, process, address space, etc.
     * A context can belong to a parent context. Contexts hierarchy can be simple
     * plain list or it can form a tree. It is up to target agent developers to choose
     * layout that is most descriptive for a given target. Context IDs are valid across
     * all services. In other words, all services access same hierarchy of contexts,
     * with same IDs, however, each service accesses its own subset of context's
     * attributes and functionality, which is relevant to that service.
     *
     * <font color=#7F9FBF>@param</font> parent_context_id &ndash; parent context ID. Can be null &ndash;
     * to retrieve top level of the hierarchy, or one of context IDs retrieved
     * by previous getContexts commands.
     * <font color=#7F9FBF>@param</font> done - callback interface called when operation is completed.
     */</font>
    IToken getChildren(String parent_context_id, DoneGetChildren done);

    <font color=#3F5FBF>/**
     * Client callback interface for getChildren().
     */</font>
    <font color=#7F0055>interface</font> DoneGetChildren {
        <font color=#3F5FBF>/**
         * Called when contexts data retrieval is done.
         * <font color=#7F9FBF>@param</font> error &ndash; error description if operation failed, null if succeeded.
         * <font color=#7F9FBF>@param</font> contexts &ndash; array of available context IDs.
         */</font>
        <font color=#7F0055>void</font> doneGetChildren(IToken token, Exception error, String[] context_ids);
    }

    <font color=#3F5FBF>/**
     * Memory access mode:
     * Carry on when some of the memory cannot be accessed and
     * return MemoryError at the end if any of the bytes
     * were not processed correctly.
     */</font>
    <font color=#7F0055>final static int</font> MODE_CONTINUEONERROR = 0x1;

    <font color=#3F5FBF>/**
     * Memory access mode:
     * Verify result of memory operations (by reading and comparing).
     */</font>
    <font color=#7F0055>final static int</font> MODE_VERIFY = 0x2;

    <font color=#7F0055>interface</font> MemoryContext {

        <font color=#3F5FBF>/**
         * Get context ID.
         * <font color=#7F9FBF>@return</font> context ID.
         */</font>
        String getID();

        <font color=#3F5FBF>/**
         * Get parent context ID.
         * <font color=#7F9FBF>@return</font> parent ID.
         */</font>
        String getParentID();

        <font color=#3F5FBF>/**
         * Get process ID, if applicable.
         * <font color=#7F9FBF>@return</font> process ID.
         */</font>
        String getProcessID();

        <font color=#3F5FBF>/**
         * Get memory endianess.
         * <font color=#7F9FBF>@return</font> true if memory id big-endian.
         */</font>
        boolean isBigEndian();

        <font color=#3F5FBF>/**
         * Get memory address size.
         * <font color=#7F9FBF>@return</font> number of bytes used to store memory address value.
         */</font>
        <font color=#7F0055>int</font> getAddressSize();

        <font color=#3F5FBF>/**
         * Get memory context name.
         * The name can be used for UI purposes.
         * <font color=#7F9FBF>@return</font> context name.
         */</font>
        String getName();

        <font color=#3F5FBF>/**
         * Get lowest address (inclusive) which is valid for the context.
         * <font color=#7F9FBF>@return</font> lowest address.
         */</font>
        Number getStartBound();

        <font color=#3F5FBF>/**
         * Get highest address (inclusive) which is valid for the context.
         * <font color=#7F9FBF>@return</font> highest address.
         */</font>
        Number getEndBound();

        <font color=#3F5FBF>/**
         * Get the access types allowed for this context.
         * <font color=#7F9FBF>@return</font> collection of access type names.
         */</font>
        Collection&lt;String> getAccessTypes();

        <font color=#3F5FBF>/**
         * Get context properties.
         * <font color=#7F9FBF>@return</font> all available context properties.
         */</font>
        Map&lt;String,Object> getProperties();

        <font color=#3F5FBF>/**
         * Set target memory.
         * If 'word_size' is 0 it means client does not care about word size.
         */</font>
        <font color=#7F0055>void</font> set(long addr, <font color=#7F0055>int</font> word_size, byte[] buf,
                         <font color=#7F0055>int</font> offs, <font color=#7F0055>int</font> size, <font color=#7F0055>int</font> mode, DoneMemory done);

        <font color=#3F5FBF>/**
         * Read target memory.
         */</font>
        <font color=#7F0055>void</font> get(long addr, <font color=#7F0055>int</font> word_size, byte[] buf,
                         <font color=#7F0055>int</font> offs, <font color=#7F0055>int</font> size, <font color=#7F0055>int</font> mode, DoneMemory done);

        <font color=#3F5FBF>/**
         * Fill target memory with given pattern.
         * 'size' is number of bytes to fill.
         */</font>
        <font color=#7F0055>void</font> fill(long addr, <font color=#7F0055>int</font> word_size, byte[] value,
                          <font color=#7F0055>int</font> size, <font color=#7F0055>int</font> mode, DoneMemory done);
    }

    <font color=#3F5FBF>/**
     * Client callback interface for set(), get() and fill().
     */</font>
    <font color=#7F0055>interface</font> DoneMemory {
        <font color=#7F0055>void</font> doneMemory(MemoryError error);
    }

    <font color=#7F0055>class</font> MemoryError <font color=#7F0055>extends</font> Exception {
    }

    <font color=#3F5FBF>/**
     * ErrorOffset interface can be implemented by MemoryError object,
     * which is returned by get, set and fill commands.
     *
     * get/set/fill () returns this exception when reading failed
     * for some but not all bytes, and MODE_CONTINUEONERROR
     * has been set in mode. (For example, when only part of the request
     * translates to valid memory addresses.)
     * Exception.getMessage can be used for generalized message of the
     * possible reasons of partial memory operation.
     */</font>
    <font color=#7F0055>interface</font> ErrorOffset {

        // Error may have per byte information
        <font color=#7F0055>final static int</font>
            BYTE_VALID        = 0x00,
            BYTE_UNKNOWN      = 0x01, // e.g. out of range
            BYTE_INVALID      = 0x02,
            BYTE_CANNOT_READ  = 0x04,
            BYTE_CANNOT_WRITE = 0x08;

        <font color=#7F0055>int</font> getStatus(<font color=#7F0055>int</font> offset);

        <font color=#3F5FBF>/**
         * Returns the detail message string about the
         * byte associated with specified location.
         * <font color=#7F9FBF>@return</font>  the detail error message string.
         */</font>
        String getMessage(<font color=#7F0055>int</font> offset);

    }

    <font color=#3F5FBF>/**
     * Add memory service event listener.
     * <font color=#7F9FBF>@param</font> listener - event listener implementation.
     */</font>
    <font color=#7F0055>void</font> addListener(MemoryListener listener);

    <font color=#3F5FBF>/**
     * Remove memory service event listener.
     * <font color=#7F9FBF>@param</font> listener - event listener implementation.
     */</font>
    <font color=#7F0055>void</font> removeListener(MemoryListener listener);

    <font color=#3F5FBF>/**
     * Memory event listener is notified when memory context hierarchy
     * changes, and when memory is modified by memory service commands.
     */</font>
    <font color=#7F0055>interface</font> MemoryListener {

        <font color=#3F5FBF>/**
         * Called when a new memory access context(s) is created.
         */</font>
        <font color=#7F0055>void</font> contextAdded(Context[] contexts);

        <font color=#3F5FBF>/**
         * Called when a new memory access context(s) properties changed.
         */</font>
        <font color=#7F0055>void</font> contextChanged(Context[] contexts);

        <font color=#3F5FBF>/**
         * Called when memory access context(s) is removed.
         */</font>
        <font color=#7F0055>void</font> contextRemoved(String[] context_ids);

        <font color=#3F5FBF>/**
         * Called when target memory content was changed and clients
         * need to update themselves. Clients, at least, should invalidate
         * corresponding cached memory data.
         * Not every change is notified - it is not possible,
         * only those, which are not caused by normal execution of the debuggee.
         * &lsquo;addr&rsquo; and &lsquo;size&rsquo; can be null if unknown.
         */</font>
        <font color=#7F0055>void</font> memoryChanged(String context_id,
               long[] addr, long[] size);
    }
}
</pre>

</body>
</html>
