#include #include #include #include #include int patty_ax25_pton(const char *callsign, uint8_t ssid, patty_ax25_addr *addr) { int i, end = 0; for (i=0; icallsign[i] = ((end? ' ': callsign[i]) & 0x7f) << 1; } addr->ssid = (ssid & 0x0f) << 1; return 0; error_invalid_callsign: return -1; } int patty_ax25_ntop(const patty_ax25_addr *addr, char *dest, uint8_t *ssid, size_t len) { int i, o, space = 0; if (addr == NULL || dest == NULL || ssid == NULL) { errno = EINVAL; goto error_invalid_args; } for (i=0, o=0; icallsign[i])) { errno = EINVAL; goto error_invalid_args; } c = (addr->callsign[i] & 0xfe) >> 1; if (!PATTY_AX25_ADDRESS_CHAR_VALID(c)) { errno = EINVAL; goto error_invalid_args; } else if (c == ' ' && !space) { space = 1; } else if (c != ' ' && space) { errno = EINVAL; goto error_invalid_args; } dest[o++] = space? '\0': c; } dest[o] = '\0'; *ssid = (addr->ssid & 0x1e) >> 1; return 0; error_invalid_args: return -1; }