diff --git a/src/cw/cw_format_scan_hex_bytes.c b/src/cw/cw_format_scan_hex_bytes.c new file mode 100644 index 00000000..1573cd68 --- /dev/null +++ b/src/cw/cw_format_scan_hex_bytes.c @@ -0,0 +1,53 @@ +#include +#include "format.h" + + +/** + * Read hex bytes from a string to an uint8_t array + * @param dst destination array + * @param s string to read + * @param len length of string + * @return 0 if all was ok \n 1 if an error has occured. + */ + +int cw_format_scan_hex_bytes(uint8_t *dst,const char *s, int len) +{ + int rc ; + int err=0; + int val; + int c; + int i; + + if ( len & 1){ + rc = sscanf(s,"%01X",&c); + if (rc!=1){ + c=0; + err=1; + } + *dst++=c; + s++; + len--; + } + + + for (i=0; i. + +*/ + +#include + +#include "format.h" +#include "cw.h" +#include "cw_types.h" + +static mavldata_t *get(mavldata_t * data, const uint8_t * src, int len) +{ + + uint8_t * s; + s = bstr16_create(src,len); + if (!s) + return NULL; + + data->kv.priv = &cw_type_version; + data->kv.val.ptr=s; + return data; +} + +static int put(mavldata_t *data, uint8_t * dst) +{ + return cw_put_bstr16(dst, data->kv.val.ptr); +} + +static int to_str(const mavldata_t *data, char *dst, int max_len) +{ + char *d; + d=dst; + if (format_is_utf8(bstr16_data(data->kv.val.ptr), bstr16_len(data->kv.val.ptr))) { + d += sprintf(d, "%.*s", bstr16_len(data->kv.val.ptr), + bstr16_data(data->kv.val.ptr)); + } else { + d += sprintf(d, ".x"); + d += format_hex(d, bstr16_data(data->kv.val.ptr), bstr16_len(data->kv.val.ptr)); + } + + return d-dst; +} + +static mavldata_t *from_str(mavldata_t * data, const char *src) +{ + return NULL; +} + + +const struct cw_Type cw_type_version = { + "VersionStr", /* name */ + NULL, /* del */ + put, /* put */ + get, /* get */ + to_str, /* to_str */ + from_str /* from_str */ +}; +