//! 2.2.6.1 Write Value to Register
//!
//! @param dnRegNumber
//! @param drvValue
//!
USBDM_GDI_API
DiReturnT DiRegisterWrite ( DiUInt32T        dnRegNumber,
                            DiRegisterValueT drvValue ) {
    LOGGING;
    U32c            regValue(drvValue);
    DSC_Registers_t regNum = mapReg(dnRegNumber);
    USBDM_ErrorCode rc = BDM_RC_OK;

    Logging::print("DiRegisterWrite(0x%lX,%s) => %lX\n", (unsigned long)dnRegNumber, DSC_GetRegisterName(regNum), (unsigned long)regValue);

    CHECK_ERROR_STATE();

    if ((regNum == DSC_RegPC) && !pcWritten) {
        pcWritten    = true;
        pcResetValue = regValue;
    }
    if (regNum == DSC_UnknownReg) {
//      rc = BDM_RC_OK;
        rc = BDM_RC_ILLEGAL_PARAMS;
    }
    else {
        rc = DSC_WriteRegister(regNum, (uint32_t)regValue);
    }
    if (rc != BDM_RC_OK) {
        Logging::print("DiRegisterWrite(0x%X,%s) Failed, reason= %s\n",
                       dnRegNumber, DSC_GetRegisterName(regNum), USBDM_GetErrorString(rc));
        return setErrorState(DI_ERR_NONFATAL, rc);
    }
    return setErrorState(DI_OK);
}
//! 2.2.6.2 Read Value from Register
//!
//! @param dnRegNumber
//! @param drvValue
//!
USBDM_GDI_API
DiReturnT DiRegisterRead ( DiUInt32T         dnRegNumber,
                           pDiRegisterValueT drvValue ) {
    unsigned long dataValue = 0xDEADBEEF;
    DSC_Registers_t regNum = mapReg(dnRegNumber);
    USBDM_ErrorCode rc = BDM_RC_OK;

//   Logging::print("DiRegisterRead(reg# 0x%X(%d))\n", regNum, regNum);
//   Logging::print("DiRegisterRead(%s)\n", DSC_GetRegisterName(regNum));

    CHECK_ERROR_STATE();

    if (regNum == DSC_UnknownReg) {
        dataValue = dnRegNumber;
//      rc = BDM_RC_OK;
        rc = BDM_RC_ILLEGAL_PARAMS;
    }
    else {
        rc = DSC_ReadRegister(regNum, &dataValue);
    }
    if (rc != BDM_RC_OK) {
        Logging::print("DiRegisterRead(0x%X,%s) Failed, reason= %s\n",
                       dnRegNumber, DSC_GetRegisterName(regNum), USBDM_GetErrorString(rc));
        return setErrorState(DI_ERR_NONFATAL, rc);
    }
    *drvValue = (U32c)dataValue;
    Logging::print("DiRegisterRead(0x%X,%s) => %lX\n", dnRegNumber, DSC_GetRegisterName(regNum), dataValue);
    return setErrorState(DI_OK);
}
コード例 #3
0
//! 2.2.6.2 Read Value from Register
//!
//! @param dnRegNumber
//! @param drvValue
//!
USBDM_GDI_DECLSPEC
DiReturnT DiRegisterRead ( DiUInt32T         dnRegNumber,
                           pDiRegisterValueT drvValue ) {
   LOGGING;
   unsigned long     dataValue = 0xDEADBEEF;
   DSC_Registers_t regNum = mapReg(dnRegNumber);
   USBDM_ErrorCode   rc        = BDM_RC_OK;
   log.print("0x%X(%d)\n", dnRegNumber, dnRegNumber);
//   log.print("DiRegisterRead(%s)\n", DSC_GetRegisterName(regNum));

   CHECK_ERROR_STATE();

   if (regNum == DSC_UnknownReg) {
      dataValue = dnRegNumber;
//      rc = BDM_RC_OK;
      rc = BDM_RC_ILLEGAL_PARAMS;
   }
   else {
      rc = bdmInterface->readReg(regNum, &dataValue);
   }
   if (rc != BDM_RC_OK) {
      log.print("DiRegisterRead(0x%X,%s) Failed, reason= %s\n",
            dnRegNumber, getDSCRegName(regNum), USBDM_GetErrorString(rc));
      return setErrorState(DI_ERR_NONFATAL, rc);
   }
   *drvValue = (U32c)dataValue;
   log.print("(0x%X,%s) => %8lX\n", dnRegNumber, getDSCRegName(regNum), dataValue);
   return setErrorState(DI_OK);
}