/*******************************************************************************
* Copyright (c) 2006, 2009 Wind River Systems and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Wind River Systems - initial API and implementation
*******************************************************************************/
package org.eclipse.cdt.dsf.debug.service;
import org.eclipse.cdt.dsf.concurrent.DataRequestMonitor;
import org.eclipse.cdt.dsf.concurrent.RequestMonitor;
import org.eclipse.cdt.dsf.datamodel.IDMContext;
import org.eclipse.cdt.dsf.datamodel.IDMData;
import org.eclipse.cdt.dsf.datamodel.IDMEvent;
/**
* Service for accessing register data.
*
* @since 1.0
*/
public interface IRegisters extends IFormattedValues {
/**
* Event indicating groups have changed. The type of context returned by this
* event is generic, because different implementations of the the register service
* could configure register groups using different contexts. Some implementations
* could configure different register groups for each execution context, other
* services may have a global list of groups.
*/
public interface IGroupsChangedDMEvent extends IDMEvent<IDMContext> {}
/** Register group context */
public interface IRegisterGroupDMContext extends IFormattedDataDMContext {
}
/** Event indicating values for the group have changed. */
public interface IGroupChangedDMEvent extends IDMEvent<IRegisterGroupDMContext> {}
/** Event indicating registers in a group have changed. */
public interface IRegistersChangedDMEvent extends IDMEvent<IRegisterGroupDMContext> {}
/**
* Register groups only have a name and description. Sub groups and registers are
* retrieved through the service interface.
*/
public interface IRegisterGroupDMData extends IDMData {
public String getName();
public String getDescription();
}
/** Register context */
public interface IRegisterDMContext extends IFormattedDataDMContext {
}
/** Event indicating register value changed. */
public interface IRegisterChangedDMEvent extends IDMEvent<IRegisterDMContext> {}
/** Register information */
public interface IRegisterDMData extends IDMData {
String getName();
String getDescription();
boolean isReadable();
boolean isReadOnce();
boolean isWriteable();
boolean isWriteOnce();
boolean hasSideEffects();
boolean isVolatile();
boolean isFloat();
}
/** Bit field context */
public interface IBitFieldDMContext extends IFormattedDataDMContext {
}
/** Event indicating register value changed. */
public interface IBitFieldChangedDMEvent extends IDMEvent<IBitFieldDMContext> {}
/**
* Bitfield data, big groups and mnemonics are retrieved at the same
* time as rest of bit field data
*/
public interface IBitFieldDMData extends IDMData {
String getName();
String getDescription();
boolean isReadable();
boolean isReadOnce();
boolean isWriteable();
boolean isWriteOnce();
boolean hasSideEffects();
boolean isZeroBasedNumbering();
boolean isZeroBitLeftMost();
IBitGroup[] getBitGroup();
IMnemonic[] getMnemonics();
IMnemonic getCurrentMnemonicValue();
}
/** Bit group definition */
public interface IBitGroup {
int startBit();
int bitCount();
}
/** Bit field mnemonic */
public interface IMnemonic {
String getShortName();
String getLongName();
}
/**
* Retrieves the list of register groups.
* @param ctx Context for the returned data.
* @param rm Request completion monitor.
*/
void getRegisterGroups(IDMContext ctx, DataRequestMonitor<IRegisterGroupDMContext[]> rm);
/**
* Retrieves the list of registers for the given context. The given context could include
* a register group and an execution context or just an execution context, in which case all
* registers for all groups should be returned.
* @param ctx Context for the returned data.
* @param rm Request completion monitor.
*/
void getRegisters(IDMContext ctx, DataRequestMonitor<IRegisterDMContext[]> rm);
/**
* Retrieves bit fields for given register
* @param ctx Context for the returned data.
* @param rm Request completion monitor.
*/
void getBitFields(IDMContext ctx, DataRequestMonitor<IBitFieldDMContext[]> rm);
/**
* Retrieves a Register Group context. The given context could include a register
* group and an execution context or just an execution context.
* @param ctx Context for the returned data.
* @param name Name of group being requested
* @param rm Request completion monitor.
*/
void findRegisterGroup(IDMContext ctx, String name, DataRequestMonitor<IRegisterGroupDMContext> rm);
/**
* Retrieves a Register context. The given context could include a register group and an execution
* context or just an execution context.
* @param ctx Context for the returned data.
* @param name Name of register being requested
* @param rm Request completion monitor.
*/
void findRegister(IDMContext ctx, String name, DataRequestMonitor<IRegisterDMContext> rm);
/**
* Retrieves bit field context. The given context could include a register and an execution
* context or just an execution context.
* @param ctx Context for the returned data.
* @param name Name of bit field being requested
* @param rm Request completion monitor.
*/
void findBitField(IDMContext ctx, String name, DataRequestMonitor<IBitFieldDMContext> rm);
/**
* Retrieves register group data for given context.
* @param dmc Context to retrieve data for.
* @param rm Request completion monitor.
*/
void getRegisterGroupData(IRegisterGroupDMContext dmc, DataRequestMonitor<IRegisterGroupDMData> rm);
/**
* Retrieves register data for given context.
* @param dmc Context to retrieve data for.
* @param rm Request completion monitor.
*/
void getRegisterData(IRegisterDMContext dmc , DataRequestMonitor<IRegisterDMData> rm);
/**
* Retrieves bit field data for given context.
* @param dmc Context to retrieve data for.
* @param rm Request completion monitor.
*/
void getBitFieldData(IBitFieldDMContext dmc , DataRequestMonitor<IBitFieldDMData> rm);
/**
* Writes a register value for a given register to the target
* @param regCtx Context containing the register.
* @param regValue Value of the register to be written.
* @param formatId Format of the value to be written.
* @param rm Request completion monitor.
*/
void writeRegister(IRegisterDMContext regCtx, String regValue, String formatId, RequestMonitor rm);
/**
* Writes a bit field value for a given bit field to the target
* @param bitFieldCtx Context containing the bit field.
* @param bitFieldValue Value of the bit field to be written.
* @param formatId Format of the value to be written.
* @param rm Request completion monitor.
*/
void writeBitField(IBitFieldDMContext bitFieldCtx, String bitFieldValue, String formatId, RequestMonitor rm);
/**
* Writes a bit field value for a given bit field to the target
* @param bitFieldCtx Context containing the bit field.
* @param mnemonic Mnemonic which represents the value to be written.
* @param rm Request completion monitor.
*/
void writeBitField(IBitFieldDMContext bitFieldCtx, IMnemonic mnemonic, RequestMonitor rm);
}