chore: housekeeping
This commit is contained in:
51
include/utils.h
Normal file
51
include/utils.h
Normal file
@@ -0,0 +1,51 @@
|
||||
#ifndef UTILS_H
|
||||
#define UTILS_H
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
/**
|
||||
* @brief Combines two bytes into a 16-bit word
|
||||
* @param hi High byte
|
||||
* @param lo Low byte
|
||||
* @return Combined 16-bit word
|
||||
*/
|
||||
static inline uint16_t to_word(uint8_t hi, uint8_t lo) {
|
||||
return (hi << 8) | lo;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Splits a 16-bit word into two bytes
|
||||
* @param val Value to split
|
||||
* @param hi Pointer to store high byte
|
||||
* @param lo Pointer to store low byte
|
||||
*/
|
||||
static inline void to_bytes(uint16_t val, uint8_t* hi, uint8_t* lo) {
|
||||
*hi = (val >> 8) & 0xFF;
|
||||
*lo = val & 0xFF;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Parses a decimal number from a string
|
||||
* @param str String to parse
|
||||
* @return Parsed decimal number
|
||||
*/
|
||||
static inline uint8_t parse_decimal(const char* str) {
|
||||
uint8_t num = 0;
|
||||
while (*str >= '0' && *str <= '9') {
|
||||
num = num * 10 + (*str - '0');
|
||||
str++;
|
||||
}
|
||||
return num;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Extracts the node number from an ID string
|
||||
* @param id ID string to extract from
|
||||
* @return Extracted node number
|
||||
*/
|
||||
static inline uint8_t parse_node_number(const char* id) {
|
||||
const char* last_dash = strrchr(id, '-');
|
||||
return last_dash ? parse_decimal(last_dash + 1) : 0;
|
||||
}
|
||||
|
||||
#endif // UTILS_H
|
||||
Reference in New Issue
Block a user