Try to Fix read errors.

This commit is contained in:
2026-01-04 00:40:53 +01:00
parent 193579e798
commit c36e9053c4
4 changed files with 75 additions and 22 deletions

View File

@@ -185,17 +185,74 @@ void BCDriverTinyCan::resetDriver()
TransmitResult BCDriverTinyCan::readRawByte( uint32_t deviceID, uint8_t registerID ) const TransmitResult BCDriverTinyCan::readRawByte( uint32_t deviceID, uint8_t registerID ) const
{ {
qDebug() << " --- CAN Read Byte: Device: "<< deviceID << " register: " << registerID << " TRY! ";
struct TCanMsg msg;
int err, retry = 20;
int timeout = 80;
unsigned char receipient = (unsigned char) deviceID;
unsigned char reg = (unsigned char) registerID;
msg.MsgFlags = 0L;
msg.Id = receipient;
msg.MsgLen = 2;
msg.MsgData[0] = 0x00;
msg.MsgData[1] = reg;
CanTransmit(0, &msg, 1);
while(timeout-- && CanTransmitGetCount(0))
bc::delay_millis( cTIMEOUT_MS );
if (timeout == -1)
qDebug() << "error: could not send value to node ";
retry:
timeout = 80;
while(timeout-- && !CanReceiveGetCount(0))
bc::delay_millis( cTIMEOUT_MS );
if (timeout == -1)
{
qDebug() << "error: no response from node";
return 0;
}
if ((err = CanReceive(0, &msg, 1)) > 0)
{
if (--retry && (msg.Id != BIB || msg.MsgLen != 4 || msg.MsgData[1] != reg))
goto retry;
if (!retry)
{
qDebug() << "XXX error: no response from node";
return 0;
}
qDebug() << " --- CAN Read Byte: Device: "<< deviceID << " register: " << registerID << " BYTE: " << (uint32_t) msg.MsgData[3];
return (unsigned int) msg.MsgData[3];
}
else
{
qDebug() << "Error:" <<err;
}
return 0;
/*
//TransmitResult //TransmitResult
qDebug() << " --- BCDriverTinyCan::readRawByte DriverState: " << getDriverState(); qDebug() << " --- BCDriverTinyCan::readRawByte DriverState: " << getDriverState();
if( _driverState <DriverState::Opened ) if( _driverState <DriverState::Opened )
return std::unexpected(QString("readRawValue error: driver not loaded." ) ); return std::unexpected(QString("readRawValue error: driver not loaded." ) );
unsigned char receipient = (unsigned char ) deviceID;
::TCanMsg msg; ::TCanMsg msg;
// msg verpacken // msg verpacken
msg.MsgFlags = 0L; msg.MsgFlags = 0L;
msg.Id = deviceID; msg.Id = receipient;//deviceID;
msg.MsgLen = 2; msg.MsgLen = 2;
msg.MsgData[0] = 0x00; msg.MsgData[0] = 0x00;
msg.MsgData[1] = registerID; msg.MsgData[1] = registerID;
@@ -244,13 +301,14 @@ retry:
if( !timeOuts ) if( !timeOuts )
return std::unexpected(QString("CAN response errror: timeout" )); return std::unexpected(QString("CAN response errror: timeout" ));
qDebug() << " --- CAN Read Byte: " << (uint32_t) msg.MsgData[3] << " Device:: "<< deviceID << " register: " << registerID;
return (uint32_t) msg.MsgData[3]; return (uint32_t) msg.MsgData[3];
*/
} }
// void BCDriverTinyCan::setValue( unsigned char receipient, unsigned char reg, unsigned char value ) // void BCDriverTinyCan::setValue( unsigned char receipient, unsigned char reg, unsigned char value )
TransmitResult BCDriverTinyCan::writeRawByte( uint32_t deviceID, uint8_t registerID ,uint8_t value ) const TransmitResult BCDriverTinyCan::writeRawByte( uint32_t deviceID, uint8_t registerID, uint8_t value ) const
{ {
if( _driverState <DriverState::Opened ) if( _driverState <DriverState::Opened )
@@ -261,6 +319,7 @@ TransmitResult BCDriverTinyCan::writeRawByte( uint32_t deviceID, uint8_t registe
::TCanMsg msg; ::TCanMsg msg;
int timeout_count = cTIMEOUT_COUNT; int timeout_count = cTIMEOUT_COUNT;
msg.MsgFlags = 0L; msg.MsgFlags = 0L;
msg.Id = deviceID; msg.Id = deviceID;
msg.MsgLen = 4; msg.MsgLen = 4;

View File

@@ -204,7 +204,7 @@ void BCTransmitter::processValue()
TransmitResult BCTransmitter::readByteValue( uint32_t deviceID, uint8_t registerID ) TransmitResult BCTransmitter::readByteValue( uint32_t deviceID, uint8_t registerID )
{ {
qDebug() << " --- YES: Read ByteValue: " << registerID; //qDebug() << " --- YES: Read ByteValue: " << registerID;
// Wir lesen nur ein Byte und gut. // Wir lesen nur ein Byte und gut.
return _canDriver->readRawByte( deviceID, registerID ); return _canDriver->readRawByte( deviceID, registerID );
} }
@@ -212,7 +212,7 @@ TransmitResult BCTransmitter::readByteValue( uint32_t deviceID, uint8_t register
TransmitResult BCTransmitter::readWordValue( uint32_t deviceID, uint8_t registerID ) TransmitResult BCTransmitter::readWordValue( uint32_t deviceID, uint8_t registerID )
{ {
qDebug() << " --- YES: Read WordValue: " << registerID; //qDebug() << " --- YES: Read WordValue: " << registerID;
uint32_t result{}; uint32_t result{};
// hi byte Leseversuch. // hi byte Leseversuch.

View File

@@ -88,9 +88,9 @@ void BCValueModel::onValueUpdated( int row, BCValue::State state, const QString&
BCValue& value = *(_valueList[row].get()); BCValue& value = *(_valueList[row].get());
QModelIndex idx = index(row,1); QModelIndex idx = index(row,1);
qDebug(); //qDebug();
qDebug() << " --- OLD:"; //qDebug() << " --- OLD:"<< newVisisbleValue;
value.dumpValue(); //value.dumpValue();
value.state = state; value.state = state;
@@ -99,8 +99,8 @@ void BCValueModel::onValueUpdated( int row, BCValue::State state, const QString&
value.visibleValue = newVisisbleValue; value.visibleValue = newVisisbleValue;
} }
qDebug() << " NEW: " << newVisisbleValue << ""; //qDebug() << " --- NEW: " << newVisisbleValue;
value.dumpValue(); //value.dumpValue();
// wir schicken auf jeden fall einen update request // wir schicken auf jeden fall einen update request
emit dataChanged(idx, idx, {Qt::DisplayRole, Qt::EditRole}); emit dataChanged(idx, idx, {Qt::DisplayRole, Qt::EditRole});

View File

@@ -1,24 +1,18 @@
<?xml version='1.0' encoding='UTF-8'?> <?xml version='1.0' encoding='UTF-8'?>
<!--
QString ID;
QString Label;
QString UnitLabel;
QString Factor;
QString Min;
QString Max;
QString IsWord;
QString ValueType;
-->
<Bike name='franken-wheeler'> <Bike name='franken-wheeler'>
<Device Type="Console"> <Device Type="Console">
<Value ID='Cons_Rev_Hw' Label='Hardware Version' /> <Value ID='Cons_Rev_Hw' Label='Hardware Version' />
<Value ID='Cons_Rev_Sw' Label='Software Version' /> <Value ID='Cons_Rev_Sw' Label='Software Version' />
<Value ID='Cons_Sn_Product_Hi' Label='Product Number' IsWord='1'/> </Device>
<!--
<Value ID='Cons_Sn_Product_Hi' Label='Product Number' IsWord='1'/>
<Value ID='Cons_Sn_Oem_Hi' Label='OEM Number' IsWord='1' /> <Value ID='Cons_Sn_Oem_Hi' Label='OEM Number' IsWord='1' />
<Value ID='Cons_Assist_Initlevel' Label='Assistance Init Level' Min='0' Max='4'/> <Value ID='Cons_Assist_Initlevel' Label='Assistance Init Level' Min='0' Max='4'/>
<Value ID='Cons_Assist_Level_1' Label='Assistance Level 1' Factor='1.5625' UnitLabel='%' Min='0' Max='400' /> <Value ID='Cons_Assist_Level_1' Label='Assistance Level 1' Factor='1.5625' UnitLabel='%' Min='0' Max='400' />
<Value ID='Cons_Assist_Level_2' Label='Assistance Level 2' Factor='1.5625' UnitLabel='%' Min='0' Max='400' /> <Value ID='Cons_Assist_Level_2' Label='Assistance Level 2' Factor='1.5625' UnitLabel='%' Min='0' Max='400' />
<Value ID='Cons_Assist_Level_3' Label='Assistance Level 3' Factor='1.5625' UnitLabel='%' Min='0' Max='400' /> <Value ID='Cons_Assist_Level_3' Label='Assistance Level 3' Factor='1.5625' UnitLabel='%' Min='0' Max='400' />
@@ -52,7 +46,7 @@ QString ValueType;
<Value ID='Battery_Rev_Hw' Label='Hardware Version' /> <Value ID='Battery_Rev_Hw' Label='Hardware Version' />
<Value ID='Battery_Rev_Sw' Label='Software Version' /> <Value ID='Battery_Rev_Sw' Label='Software Version' />
</Device> </Device>
-->
</Bike> </Bike>
<!-- <!--