Commit 6e703847 authored by Benoit Rat's avatar Benoit Rat

all: end of big restructuration (part 3/3).

* Correct bug with Mask on type
* Correct old TRACE_P_VVDEBUG
* Rename cvtWBNodetoPrmList into setParams() function
* Setback the sync() method using block for EWBPeriph
parent 9b31ef9c
......@@ -181,11 +181,21 @@ asynStatus EWBAsynPortDrvr::createParam(const char* name, EWBParam* pPrm,int *pI
{
pIndex=(pIndex)?pIndex:&tmp;
if(pPrm->getType() == EWBParam::EWBF_STRING)
{
type=asynParamOctet;
else if(pPrm->getType() && EWBParam::EWBF_TM_FIXED_POINT)
type=asynParamFloat64;
}
else if(pPrm->getType() & EWBParam::EWBF_TM_TYPE_FIELD)
{
if(pPrm->getType() & EWBParam::EWBF_TM_FIXED_POINT)
type=asynParamFloat64;
else
type=asynParamInt32;
}
else
type=asynParamInt32;
{
TRACE_P_WARNING("Unknown type 0x%x for Param %s (pv:%s)",pPrm->getType(), pPrm->getCName(), name);
return asynError;
}
//if(list==1) list=0;
......@@ -197,7 +207,7 @@ asynStatus EWBAsynPortDrvr::createParam(const char* name, EWBParam* pPrm,int *pI
if(pPrm->getType() == EWBParam::EWBF_STRING) {
//setStringParam(*pIndex,((EWBParamStr*)pPrm)->getCValue());
}
else if(pPrm->getType() && EWBParam::EWBF_TM_FIXED_POINT)
else if(pPrm->getType() & EWBParam::EWBF_TM_FIXED_POINT)
setDoubleParam(*pIndex,((EWBField*)pPrm)->getFloat());
else
setIntegerParam(*pIndex,((EWBField*)pPrm)->getU32());
......@@ -311,12 +321,12 @@ asynStatus EWBAsynPortDrvr::readInt32(asynUser* pasynUser, epicsInt32* value)
//Convert the WBField to a float
pFld->convert(&u32val,true);
*value=(epicsInt32)u32val;
}
TRACE_P_VVDEBUG("@0x%08X %s.%s : 0x%08x (val=%d)",
aWF.pPrm->getReg()->getOffset(true),
aWF.pPrm->getReg()->getCName(),aWF.pPrm->getCName(),
aWF.pPrm->getReg()->getData(),*value);
TRACE_P_VVDEBUG("@0x%08X %s.%s : 0x%08x (val=%d)",
pFld->getReg()->getOffset(true),
pFld->getReg()->getCName(),pFld->getCName(),
pFld->getReg()->getData(),*value);
}
//And set value to the parameters list
status = (asynStatus) setIntegerParam(function,*value);
......@@ -388,12 +398,12 @@ asynStatus EWBAsynPortDrvr::readFloat64(asynUser* pasynUser,
//Convert the WBField to a float
pFld->convert(&f32val,true);
*value=(epicsFloat64)f32val;
}
TRACE_P_VVDEBUG("@0x%08X %s.%s : 0x%08x (val=%f)",
aWF.pPrm->getReg()->getOffset(true),
aWF.pPrm->getReg()->getCName(),aWF.pPrm->getCName(),
aWF.pPrm->getReg()->getData(),f32val);
TRACE_P_VVDEBUG("@0x%08X %s.%s : 0x%08x (val=%f)",
pFld->getReg()->getOffset(true),
pFld->getReg()->getCName(),pFld->getCName(),
pFld->getReg()->getData(),f32val);
}
//And set value to the parameters list
status = (asynStatus) setDoubleParam(function,*value);
......@@ -456,12 +466,14 @@ asynStatus EWBAsynPortDrvr::writeInt32(asynUser* pasynUser, epicsInt32 value)
uint32_t u32val=value;
if((pFld=aWF.pPrm->castField())!=NULL)
{
pFld->convert(&u32val,false);
TRACE_P_VVDEBUG("@0x%08X %s.%s : %08x",
aWF.pPrm->getReg()->getOffset(true),
aWF.pPrm->getReg()->getCName(),aWF.pPrm->getCName(),
aWF.pPrm->getReg()->getData());
TRACE_P_VVDEBUG("@0x%08X %s.%s : %08x",
pFld->getReg()->getOffset(true),
pFld->getReg()->getCName(),pFld->getCName(),
pFld->getReg()->getData());
}
//Finally sync WBField using the connector to memory
if(syncNow & EWBSync::EWB_AM_W)
......@@ -471,10 +483,13 @@ asynStatus EWBAsynPortDrvr::writeInt32(asynUser* pasynUser, epicsInt32 value)
}
else aWF.pPrm->setToSync();
TRACE_P_VVDEBUG("===>>>>>>>>>>>>>>@0x%08X %s.%s : %08x",
aWF.pPrm->getReg()->getOffset(true),
aWF.pPrm->getReg()->getCName(),aWF.pPrm->getCName(),
aWF.pPrm->getReg()->getData());
if(pFld)
{
TRACE_P_VVDEBUG("===>>>>>>>>>>>>>>@0x%08X %s.%s : %08x",
pFld->getReg()->getOffset(true),
pFld->getReg()->getCName(),pFld->getCName(),
pFld->getReg()->getData());
}
}
else if(function==P_BlkSyncIdx)
{
......@@ -662,36 +677,41 @@ asynStatus EWBAsynPortDrvr::readOctet(asynUser *pasynUser, char *value, size_t m
//bool EWBAsynPortDrvr::cvtWBNodetoPrmList(WBNode *node)
//{
// WBReg *reg=NULL;
// uint32_t u32val;
// float f32val;
// bool ret=true;
//
// TRACE_CHECK_PTR(node,false);
//
// for(size_t i=0;i<fldPrms.size();i++)
// {
// if(fldPrms[i].pFld==NULL) continue;
//
// while((reg=node->getNextReg(reg))!=NULL)
// {
// if(reg!=fldPrms[i].pFld->getReg()) continue;
//
// if(fldPrms[i].pFld->getType()==WBField::WBF_32U)
// {
// ret &= fldPrms[i].pFld->convert(&u32val,true);
// ret &= setIntegerParam(i,u32val);
// }
// else
// {
// ret &= fldPrms[i].pFld->convert(&f32val,true);
// ret &= setDoubleParam(i,f32val);
// }
// }
// }
// return ret;
//}
bool EWBAsynPortDrvr::setParams(EWBPeriph *pPrh)
{
EWBReg *reg=NULL;
EWBField *pFld=NULL;
uint32_t u32val;
float f32val;
bool ret=true;
TRACE_CHECK_PTR(pPrh,false);
for(size_t i=0;i<fldPrms.size();i++)
{
if(fldPrms[i].pPrm==NULL) continue;
pFld=fldPrms[i].pPrm->castField();
if(pFld==NULL) continue;
while((reg=pPrh->getNextReg(reg))!=NULL)
{
if(reg!=pFld->getReg()) continue;
if(pFld->getType() & EWBParam::EWBF_TM_FIXED_POINT)
{
ret &= pFld->convert(&f32val,true);
ret &= setDoubleParam(i,f32val);
}
else
{
ret &= pFld->convert(&u32val,true);
ret &= setIntegerParam(i,u32val);
}
}
}
return ret;
}
......@@ -87,7 +87,8 @@ protected:
asynStatus createParam(EWBField *fld, int *index=NULL,int syncmode=AWB_SYNC_DEVICE);
asynStatus createParam(const char *name, EWBParam *pPrm, int *index=NULL, int syncmode=AWB_SYNC_DEVICE);
asynStatus createParam(const char *name, asynParamType type,int *index=NULL,int syncmode=AWB_SYNC_PRMLIST);
//bool cvtWBNodetoPrmList(WBNode *node);
bool setParams(EWBPeriph *pPrh);
int getParamIndex(const char *name);
EWBBus *pRoot; //!< pointer on the WB root tree structure.
......
......@@ -14,7 +14,7 @@
#include <EWBBus.h>
#define TRACE_P_VDEBUG(...) TRACE_P_DEBUG( __VA_ARGS__)
#define TRACE_P_VDEBUG(...) //TRACE_P_DEBUG( __VA_ARGS__)
#define TRACE_P_VVDEBUG(...) //TRACE_P_DEBUG( __VA_ARGS__)
#define BUFF_MAX_SIZEB 4096 //Size in bytes
......
......@@ -7,4 +7,4 @@
#include "EWBParam.h"
//For the moment the object will be empty.
This diff is collapsed.
......@@ -20,7 +20,14 @@ class EWBReg;
#define EWB_NODE_MEMBCK_OWNADDR 0xFFFFFFFF //!< Used by WBNode::sync()
#define WB2_PRH_ARGS(pname,offset) \
#define WB2_PRH_ARGS(pname) \
WB2_##pname##_PERIPH_PREFIX, \
WB2_##pname##_PERIPH_OFFSET, \
WB2_##pname##_PERIPH_VENID, \
WB2_##pname##_PERIPH_DEVID, \
WB2_##pname##_PERIPH_DESC
#define WB2_PRH_ARGS_OFFSET(pname,offset) \
WB2_##pname##_PERIPH_PREFIX, \
offset, \
WB2_##pname##_PERIPH_VENID, \
......@@ -44,8 +51,8 @@ public:
EWBReg* getLastReg() const { return (registers.size()>0)?registers.rbegin()->second:NULL; } //!< Get the highest WBReg in the node.
bool sync(EWBSync::AMode amode=EWB_AM_RW);
// bool sync(EWBSync::AMode amode, uint32_t dma_dev_offset=WB_NODE_MEMBCK_OWNADDR);
// bool sync(uint32_t* pData32, uint32_t length, EWBSync::AMode amode, uint32_t doffset=0);
bool sync(EWBSync::AMode amode, uint32_t dma_dev_offset=EWB_NODE_MEMBCK_OWNADDR);
bool sync(uint32_t* pData32, uint32_t length, EWBSync::AMode amode, uint32_t doffset=0);
bool isValid(int level=-1) const { return (level!=0)?(bus && bus->isValid(level-1)):bus!=NULL; } //!< Return true when all pointers are defined
bool isID(uint64_t venID, uint32_t devID) const { return (venID==this->venID && devID==this->devID); }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment