Small function to make formatting into memory of uint easier
This commit is contained in:
@@ -334,6 +334,28 @@ bool set_struct_field(const uint8_t *const data)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Format an unsigned number up to 32-bit into memory into an ASCII string.
|
||||||
|
*
|
||||||
|
* @param[in] value Value to write in memory
|
||||||
|
* @param[in] max_chars Maximum number of characters that could be written
|
||||||
|
*
|
||||||
|
* @return how many characters have been written in memory
|
||||||
|
*/
|
||||||
|
uint8_t format_uint_into_mem(uint32_t value, uint8_t max_chars)
|
||||||
|
{
|
||||||
|
char *ptr;
|
||||||
|
uint8_t written_chars;
|
||||||
|
|
||||||
|
if ((ptr = mem_alloc(sizeof(char) * max_chars)) == NULL)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
written_chars = sprintf(ptr, "%u", value);
|
||||||
|
mem_dealloc(max_chars - written_chars); // in case it ended up being less
|
||||||
|
return written_chars;
|
||||||
|
}
|
||||||
|
|
||||||
void get_struct_type_string(const uint8_t *const ptr,
|
void get_struct_type_string(const uint8_t *const ptr,
|
||||||
const uint8_t *const struct_name,
|
const uint8_t *const struct_name,
|
||||||
uint8_t struct_name_length)
|
uint8_t struct_name_length)
|
||||||
@@ -351,7 +373,6 @@ void get_struct_type_string(const uint8_t *const ptr,
|
|||||||
uint8_t lvls_count;
|
uint8_t lvls_count;
|
||||||
const uint8_t *lvl_ptr;
|
const uint8_t *lvl_ptr;
|
||||||
uint8_t array_size;
|
uint8_t array_size;
|
||||||
uint8_t formatted_length;
|
|
||||||
|
|
||||||
// set length
|
// set length
|
||||||
typestr_length = mem_alloc(sizeof(uint16_t));
|
typestr_length = mem_alloc(sizeof(uint16_t));
|
||||||
@@ -394,9 +415,7 @@ void get_struct_type_string(const uint8_t *const ptr,
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
// max value = 256, 3 characters max
|
// max value = 256, 3 characters max
|
||||||
formatted_length = sprintf(mem_alloc(sizeof(char) * 3), "%u", field_size);
|
*typestr_length += format_uint_into_mem(field_size, 3);
|
||||||
mem_dealloc(3 - formatted_length); // in case it used less
|
|
||||||
*typestr_length += formatted_length;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (struct_field_is_array(field_ptr))
|
if (struct_field_is_array(field_ptr))
|
||||||
@@ -412,9 +431,7 @@ void get_struct_type_string(const uint8_t *const ptr,
|
|||||||
break;
|
break;
|
||||||
case ARRAY_FIXED_SIZE:
|
case ARRAY_FIXED_SIZE:
|
||||||
// max value = 255, 3 characters max
|
// max value = 255, 3 characters max
|
||||||
formatted_length = sprintf(mem_alloc(sizeof(char) * 3), "%u", array_size);
|
*typestr_length += format_uint_into_mem(array_size, 3);
|
||||||
mem_dealloc(3 - formatted_length);
|
|
||||||
*typestr_length += formatted_length;
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
// should not be in here :^)
|
// should not be in here :^)
|
||||||
|
|||||||
Reference in New Issue
Block a user