#ifndef UTILS_H #define UTILS_H #include /** * @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