Commit 17cf3d21 authored by claes's avatar claes

IO SPI update

parent 693f42fb
...@@ -213,8 +213,14 @@ static pwr_tStatus IoCardRead( io_tCtx ctx, ...@@ -213,8 +213,14 @@ static pwr_tStatus IoCardRead( io_tCtx ctx,
io_sLocalSPI_Slave *local = (io_sLocalSPI_Slave *)cp->Local; io_sLocalSPI_Slave *local = (io_sLocalSPI_Slave *)cp->Local;
pwr_sClass_SPI_Slave *op = (pwr_sClass_SPI_Slave *)cp->op; pwr_sClass_SPI_Slave *op = (pwr_sClass_SPI_Slave *)cp->op;
int sts; int sts;
int i;
sts = read( local->fd, local->input_area, local->input_area_size); // sts = read( local->fd, local->input_area, local->input_area_size);
for ( i = 0; i < local->input_area_size; i++) {
sts = read( local->fd, &local->input_area[i], 1);
if ( sts != 1)
break;
}
if ( sts < 0) { if ( sts < 0) {
op->ErrorCount++; op->ErrorCount++;
if ( !local->readerror_logged) { if ( !local->readerror_logged) {
...@@ -223,7 +229,8 @@ static pwr_tStatus IoCardRead( io_tCtx ctx, ...@@ -223,7 +229,8 @@ static pwr_tStatus IoCardRead( io_tCtx ctx,
} }
op->Status = IOM__SPI_READERROR; op->Status = IOM__SPI_READERROR;
} }
else if ( sts < local->input_area_size) { //else if ( sts != local->input_area_size) {
else if ( sts == 0) {
op->ErrorCount++; op->ErrorCount++;
if ( !local->readerror_logged) { if ( !local->readerror_logged) {
errh_Error( "SPI read buffer smaller than expected: %d, '%s'", sts, cp->Name); errh_Error( "SPI read buffer smaller than expected: %d, '%s'", sts, cp->Name);
...@@ -238,11 +245,13 @@ static pwr_tStatus IoCardRead( io_tCtx ctx, ...@@ -238,11 +245,13 @@ static pwr_tStatus IoCardRead( io_tCtx ctx,
local->byte_ordering, pwr_eFloatRepEnum_FloatIEEE); local->byte_ordering, pwr_eFloatRepEnum_FloatIEEE);
} }
if ( op->ErrorCount == op->ErrorSoftLimit && !local->softlimit_logged) { if ( op->ErrorSoftLimit &&
op->ErrorCount == op->ErrorSoftLimit && !local->softlimit_logged) {
errh_Warning( "IO Card ErrorSoftLimit reached, '%s'", cp->Name); errh_Warning( "IO Card ErrorSoftLimit reached, '%s'", cp->Name);
local->softlimit_logged = 1; local->softlimit_logged = 1;
} }
if ( op->ErrorCount >= op->ErrorHardLimit) { if ( op->ErrorHardLimit &&
op->ErrorCount >= op->ErrorHardLimit) {
errh_Error( "IO Card ErrorHardLimit reached '%s', IO stopped", cp->Name); errh_Error( "IO Card ErrorHardLimit reached '%s', IO stopped", cp->Name);
ctx->Node->EmergBreakTrue = 1; ctx->Node->EmergBreakTrue = 1;
return IO__ERRDEVICE; return IO__ERRDEVICE;
...@@ -259,11 +268,17 @@ static pwr_tStatus IoCardWrite( io_tCtx ctx, ...@@ -259,11 +268,17 @@ static pwr_tStatus IoCardWrite( io_tCtx ctx,
io_sLocalSPI_Slave *local = (io_sLocalSPI_Slave *)cp->Local; io_sLocalSPI_Slave *local = (io_sLocalSPI_Slave *)cp->Local;
pwr_sClass_SPI_Slave *op = (pwr_sClass_SPI_Slave *)cp->op; pwr_sClass_SPI_Slave *op = (pwr_sClass_SPI_Slave *)cp->op;
int sts; int sts;
int i;
io_bus_card_write( ctx, cp, local->output_area, io_bus_card_write( ctx, cp, local->output_area,
local->byte_ordering, pwr_eFloatRepEnum_FloatIEEE); local->byte_ordering, pwr_eFloatRepEnum_FloatIEEE);
sts = write( local->fd, local->output_area, local->output_area_size); // sts = write( local->fd, local->output_area, local->output_area_size);
for ( i = 0; i < local->output_area_size; i++) {
sts = write( local->fd, &local->output_area[i], 1);
if ( sts != 1)
break;
}
if ( sts < 0) { if ( sts < 0) {
op->ErrorCount++; op->ErrorCount++;
if ( !local->writeerror_logged) { if ( !local->writeerror_logged) {
...@@ -272,7 +287,8 @@ static pwr_tStatus IoCardWrite( io_tCtx ctx, ...@@ -272,7 +287,8 @@ static pwr_tStatus IoCardWrite( io_tCtx ctx,
} }
op->Status = IOM__SPI_WRITEERROR; op->Status = IOM__SPI_WRITEERROR;
} }
else if ( sts != local->output_area_size) { // else if ( sts != local->output_area_size) {
else if ( sts == 0) {
op->ErrorCount++; op->ErrorCount++;
if ( !local->writeerror_logged) { if ( !local->writeerror_logged) {
errh_Error( "SPI write buffer unexpected size %d, '%s'", sts, cp->Name); errh_Error( "SPI write buffer unexpected size %d, '%s'", sts, cp->Name);
...@@ -285,11 +301,12 @@ static pwr_tStatus IoCardWrite( io_tCtx ctx, ...@@ -285,11 +301,12 @@ static pwr_tStatus IoCardWrite( io_tCtx ctx,
op->Status = IOM__SPI_NORMAL; op->Status = IOM__SPI_NORMAL;
} }
if ( op->ErrorCount == op->ErrorSoftLimit && !local->softlimit_logged) { if ( op->ErrorSoftLimit &&
op->ErrorCount == op->ErrorSoftLimit && !local->softlimit_logged) {
errh_Warning( "IO Card ErrorSoftLimit reached, '%s'", cp->Name); errh_Warning( "IO Card ErrorSoftLimit reached, '%s'", cp->Name);
local->softlimit_logged = 1; local->softlimit_logged = 1;
} }
if ( op->ErrorCount >= op->ErrorHardLimit) { if ( op->ErrorHardLimit && op->ErrorCount >= op->ErrorHardLimit) {
errh_Error( "IO Card ErrorHardLimit reached '%s', IO stopped", cp->Name); errh_Error( "IO Card ErrorHardLimit reached '%s', IO stopped", cp->Name);
ctx->Node->EmergBreakTrue = 1; ctx->Node->EmergBreakTrue = 1;
return IO__ERRDEVICE; return IO__ERRDEVICE;
......
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