compose

fun compose(callSign: String, longName: String): String(source)

Joins the two halves the way firmware does. A blank longName yields the bare callSign — firmware treats unset and whitespace-only alike, so composing a separator for either would not match what the node stores.