diff --git a/include/patty/ax25.h b/include/patty/ax25.h index 2d86904..af57d26 100644 --- a/include/patty/ax25.h +++ b/include/patty/ax25.h @@ -84,4 +84,8 @@ int patty_ax25_ntop(const patty_ax25_addr *addr, void patty_ax25_addr_hash(uint32_t *hash, const patty_ax25_addr *addr); +size_t patty_ax25_addr_copy(void *buf, + patty_ax25_addr *addr, + uint8_t ssid_flags); + #endif /* _PATTY_AX25_H */ diff --git a/src/ax25.c b/src/ax25.c index ff60609..e51499e 100644 --- a/src/ax25.c +++ b/src/ax25.c @@ -106,3 +106,17 @@ void patty_ax25_addr_hash(uint32_t *hash, const patty_ax25_addr *addr) { hash_byte(hash, PATTY_AX25_ADDR_SSID_NUMBER(addr->ssid)); } + +size_t patty_ax25_addr_copy(void *buf, + patty_ax25_addr *addr, + uint8_t ssid_flags) { + size_t encoded = 0; + + memcpy(buf, addr->callsign, sizeof(addr->callsign)); + + encoded += sizeof(addr->callsign); + + ((uint8_t *)buf)[encoded++] = ssid_flags | 0x60 | (addr->ssid & 0x1e); + + return encoded; +}