[PATCH v2 12/15] Firmware upgrade for OSTC3

Anton Lundin glance at acc.umu.se
Fri Dec 19 15:29:39 PST 2014


On 19 December, 2014 - Jef Driesen wrote:

> On 2014-12-17 23:11, Anton Lundin wrote:
> >+dc_status_t
> >+hw_ostc3_device_fwupdate (dc_device_t *abstract, const char *filename)
> >+{
> >+	[...]
> >+
> >+	// Make sure the device is in service mode
> >+	if (device->state == OPEN) {
> >+		rc = hw_ostc3_device_init_service(abstract);
> >+		if (rc != DC_STATUS_SUCCESS) {
> >+			free (firmware);
> >+			return rc;
> >+		}
> >+	} else if (device->state != SERVICE) {
> >+		free (firmware);
> >+		return DC_STATUS_INVALIDARGS;
> >+	}
> 
> I've been playing with the idea of merging this functionality into the
> hw_ostc3_check_state_or_init() function. This is what I came up with:
> 
> static dc_status_t
> hw_ostc3_device_init (hw_ostc3_device_t *device, hw_ostc3_state_t state)
> {
>     dc_status_t rc = DC_STATUS_SUCCESS;
> 
>     if (device->state == state) {
>         // No change.
>         rc = DC_STATUS_SUCCESS;
>     } else if (device->state == OPEN) {
>         // Change to download/or service mode.
>         if (state == DOWNLOAD) {
>             rc = hw_ostc3_device_init_download(device);
>         } else if (state == SERVICE) {
>             rc = hw_ostc3_device_init_service(device);
>         } else {
>             rc = DC_STATUS_INVALIDARGS;
>         }
>     } else if (device->state == SERVICE && state == DOWNLOAD) {
>         // Switching between service and download mode is not possible.
>         // But in service mode, all download commands are supported too,
>         // so there is no need to change the state.
>         rc = DC_STATUS_SUCCESS;
>     } else {
>         // Not supported.
>         rc = DC_STATUS_INVALIDARGS;
>     }
> 
>     return rc;
> }
> 
> What do you think? From my point of view, the main advantage is that all
> state changes are now done in a single function, where it's easy to see what
> kind of state transitions are allowed or not.
> 

Yea, i think this one looks better. Go with this one.


> >+	// Programing done!
> >+	progress.current++;
> >+	device_event_emit (abstract, DC_EVENT_PROGRESS, &progress);
> >+
> >+	// Finished!
> >+	return DC_STATUS_SUCCESS;
> >+}
> 
> There is a memory leak here. You forgot to free the firmware structure.
> 

Of course, failing on the goal line.

> 
> PS: I have already implemented most of the improvements and bugfixes I
> mentioned in this and the 3 other emails. So there is no need to spend any
> time on them. If you're fine with those changes, just tell me, and I'll just
> squash them onto your commits.
> 
> I fixed a few style issues too (e.g. whitespace, signed vs unsigned int, and
> dc_device_t vs hw_ostc3_device_t in function parameters).
> 

I still like my way of parsing the firmware files better than yours, but
if you want it that way, fine.


//Anton


-- 
Anton Lundin	+46702-161604


More information about the devel mailing list