[PATCH 04/11] Add a helper to put the OSTC3 into servicemode

Anton Lundin glance at acc.umu.se
Mon Dec 15 14:53:25 PST 2014


On 15 December, 2014 - Jef Driesen wrote:

> On 21-11-14 21:28, Anton Lundin wrote:
> >diff --git a/src/hw_ostc3.c b/src/hw_ostc3.c
> >index 7fa38f8..4d6bf83 100644
> >--- a/src/hw_ostc3.c
> >+++ b/src/hw_ostc3.c
> >@@ -50,6 +50,7 @@
> >  #define RB_LOGBOOK_SIZE  256
> >  #define RB_LOGBOOK_COUNT 256
> >
> >+#define S_READY    0x4C
> >  #define READY      0x4D
> >  #define HEADER     0x61
> >  #define CLOCK      0x62
> >@@ -71,6 +72,7 @@ typedef struct hw_ostc3_device_t {
> >  		NONE,
> >  		OPEN,
> >  		DOWNLOAD,
> >+		SERVICE,
> >  	} state;
> >  } hw_ostc3_device_t;
> >
> >@@ -196,7 +198,7 @@ hw_ostc3_transfer (hw_ostc3_device_t *device,
> >  		}
> >
> >  		// Verify the ready byte.
> >-		if (ready[0] != READY) {
> >+		if (!(ready[0] == READY || ready[0] == S_READY)) {
> >  			ERROR (abstract->context, "Unexpected ready byte.");
> >  			return DC_STATUS_PROTOCOL;
> >  		}
> 
> I assume in service mode, S_READY is returned instead of READY? If that's
> correct, then I think it's better to accept only the correct one. Something
> like this:
> 
> unsigned char expected = (device->state == SERVICE ? S_READY : READY);
> if (ready[0] != expected) {
>     ...
> }

You guessed correctly. This was a artifact from the previous code where
the device state was unknown to the hw_ostc3_transfer() function.


Fixed.

//Anton

-- 
Anton Lundin	+46702-161604


More information about the devel mailing list