Device firmware update

void set_dfu_alt_info(char * interface, char * devstr)

set dfu_alt_info environment variable

Parameters

char * interface
dfu interface, e.g. “mmc” or “nand”
char * devstr
device number as string

Description

If CONFIG_SET_DFU_ALT_INFO=y, this board specific function is called to set environment variable dfu_alt_info.

int dfu_alt_init(int num, struct dfu_entity ** dfu)

initialize buffer for dfu entities

Parameters

int num
number of entities
struct dfu_entity ** dfu
on return allocated buffer

Return

0 on success

int dfu_alt_add(struct dfu_entity * dfu, char * interface, char * devstr, char * s)

add alternate to dfu entity buffer

Parameters

struct dfu_entity * dfu
dfu entity
char * interface
dfu interface, e.g. “mmc” or “nand”
char * devstr
device number as string
char * s
string description of alternate

Return

0 on success

int dfu_config_entities(char * s, char * interface, char * devstr)

initialize dfu entitities from envirionment

Parameters

char * s
string with alternates
char * interface
interface, e.g. “mmc” or “nand”
char * devstr
device number as string

Description

Initialize the list of dfu entities from environment variable dfu_alt_info. The list must be freed by calling dfu_free_entities(). This function bypasses set_dfu_alt_info(). So typically you should use dfu_init_env_entities() instead.

See function dfu_free_entities() See function dfu_init_env_entities()

Return

0 on success, a negative error code otherwise

void dfu_free_entities(void)

free the list of dfu entities

Parameters

void
no arguments

Description

Free the internal list of dfu entities.

See function dfu_init_env_entities()

void dfu_show_entities(void)

print DFU alt settings list

Parameters

void
no arguments
int dfu_get_alt_number(void)

get number of alternates

Parameters

void
no arguments

Return

number of alternates in the dfu entities list

const char * dfu_get_dev_type(enum dfu_device_type type)

get string representation for dfu device type

Parameters

enum dfu_device_type type
device type

Return

string representation for device type

const char * dfu_get_layout(enum dfu_layout layout)

get string describing layout

Parameters

enum dfu_layout layout
layout Result: string representation for the layout

Description

Internally layouts are represented by enum dfu_device_type values. This function translates an enum value to a human readable string, e.g. DFU_FS_FAT is translated to “FAT”.

struct dfu_entity * dfu_get_entity(int alt)

get dfu entity for an alternate id

Parameters

int alt
alternate id

Return

dfu entity

int dfu_get_alt(char * name)

get alternate id for filename

Parameters

char * name
filename

Description

Environment variable dfu_alt_info defines the write destinations (alternates) for different filenames. This function get the index of the alternate for a filename. If an absolute filename is provided (starting with ‘/’), the directory path is ignored.

Return

id of the alternate or negative error number (-ENODEV)

int dfu_init_env_entities(char * interface, char * devstr)

initialize dfu entitities from envirionment

Parameters

char * interface
interface, e.g. “mmc” or “nand”
char * devstr
device number as string

Description

Initialize the list of dfu entities from environment variable dfu_alt_info. The list must be freed by calling dfu_free_entities(). interface and devstr are used to select the relevant set of alternates from environment variable dfu_alt_info.

If environment variable dfu_alt_info specifies the interface and the device, use NULL for interface and devstr.

See function dfu_free_entities()

Return

0 on success, a negative error code otherwise

int dfu_read(struct dfu_entity * de, void * buf, int size, int blk_seq_num)

read from dfu entity

Parameters

struct dfu_entity * de
dfu entity
void * buf
buffer
int size
size of buffer
int blk_seq_num
block sequence number

Description

The block sequence number blk_seq_num is a 16 bit counter that must be incremented with each call for the same dfu entity de.

Return

0 for success, -1 for error

int dfu_write(struct dfu_entity * de, void * buf, int size, int blk_seq_num)

write to dfu entity

Parameters

struct dfu_entity * de
dfu entity
void * buf
buffer
int size
size of buffer
int blk_seq_num
block sequence number

Description

Write the contents of a buffer buf to the dfu entity de. After writing the last block call dfu_flush(). If a file is already loaded completely into memory it is preferable to use dfu_write_from_mem_addr() which takes care of blockwise transfer and flushing.

The block sequence number blk_seq_num is a 16 bit counter that must be incremented with each call for the same dfu entity de.

See function dfu_flush() See function dfu_write_from_mem_addr()

Return

0 for success, -1 for error

int dfu_flush(struct dfu_entity * de, void * buf, int size, int blk_seq_num)

flush to dfu entity

Parameters

struct dfu_entity * de
dfu entity
void * buf
ignored
int size
ignored
int blk_seq_num
block sequence number of last write - ignored

Description

This function has to be called after writing the last block to the dfu entity de.

The block sequence number blk_seq_num is a 16 bit counter that must be incremented with each call for the same dfu entity de.

See function dfu_write()

Return

0 for success, -1 for error

void dfu_initiated_callback(struct dfu_entity * dfu)

weak callback called on DFU transaction start

Parameters

struct dfu_entity * dfu
pointer to the dfu_entity, which should be initialized

Description

It is a callback function called by DFU stack when a DFU transaction is initiated. This function allows to manage some board specific behavior on DFU targets.

void dfu_flush_callback(struct dfu_entity * dfu)

weak callback called at the end of the DFU write

Parameters

struct dfu_entity * dfu
pointer to the dfu_entity, which should be flushed

Description

It is a callback function called by DFU stack after DFU manifestation. This function allows to manage some board specific behavior on DFU targets

struct dfu_entity * dfu_get_defer_flush(void)

get current value of dfu_defer_flush pointer

Parameters

void
no arguments

Return

value of the dfu_defer_flush pointer

void dfu_set_defer_flush(struct dfu_entity * dfu)

set the dfu_defer_flush pointer

Parameters

struct dfu_entity * dfu
pointer to the dfu_entity, which should be written
int dfu_write_from_mem_addr(struct dfu_entity * dfu, void * buf, int size)

write data from memory to DFU managed medium

Parameters

struct dfu_entity * dfu
dfu entity to which we want to store data
void * buf
fixed memory address from where data starts
int size
number of bytes to write

Description

This function adds support for writing data starting from fixed memory address (like $loadaddr) to dfu managed medium (e.g. NAND, MMC, file system)

Return

0 on success, other value on failure

int dfu_tftp_write(char * dfu_entity_name, unsigned int addr, unsigned int len, char * interface, char * devstring)

write TFTP data to DFU medium

Parameters

char * dfu_entity_name
name of DFU entity to write
unsigned int addr
address of data buffer to write
unsigned int len
number of bytes
char * interface
destination DFU medium (e.g. “mmc”)
char * devstring
instance number of destination DFU medium (e.g. “1”)

Description

This function is storing data received via TFTP on DFU supported medium.

Return

0 on success, otherwise error code