add and tweak inter-BSC HO API

Add:
gsm0808_create_handover_detect()
gsm0808_create_handover_complete()
gsm0808_create_handover_failure()

To existing structs gsm0808_old_bss_to_new_bss_info and
gsm0808_handover_required, add a final 'more_items' flag that makes future
extensions API and ABI compatible.

Fix the msgb string for Handover Request Ack.

Extend some API doc comments.

Related: OS#2283 (inter-BSC Handover, BSC side, MT)
Change-Id: I03ee7ce840ecfa0b6a33358e7385528aabd4873f
diff --git a/include/osmocom/gsm/gsm0808.h b/include/osmocom/gsm/gsm0808.h
index d704aa9..5ae0af8 100644
--- a/include/osmocom/gsm/gsm0808.h
+++ b/include/osmocom/gsm/gsm0808.h
@@ -103,6 +103,7 @@
 	} current_channel_type_2;
 
 	/* more items are defined in the spec and may be added later */
+	bool more_items; /*< always set this to false */
 };
 
 /*! 3GPP TS 48.008 §3.2.1.9 HANDOVER REQUIRED */
@@ -120,6 +121,7 @@
 	struct gsm0808_old_bss_to_new_bss_info old_bss_to_new_bss_info;
 
 	/* more items are defined in the spec and may be added later */
+	bool more_items; /*< always set this to false */
 };
 struct msgb *gsm0808_create_handover_required(const struct gsm0808_handover_required *params);
 
@@ -127,6 +129,44 @@
 						 uint8_t chosen_channel, uint8_t chosen_encr_alg,
 						 uint8_t chosen_speech_version);
 
+struct msgb *gsm0808_create_handover_detect();
+
+struct gsm0808_handover_complete {
+	bool rr_cause_present;
+	uint8_t rr_cause;
+
+	bool speech_codec_chosen_present;
+	struct gsm0808_speech_codec speech_codec_chosen;
+
+	struct gsm0808_speech_codec_list codec_list_bss_supported; /*< omit when .len == 0 */
+
+	bool chosen_encr_alg_present;
+	uint8_t chosen_encr_alg;
+	
+	bool chosen_channel_present;
+	uint8_t chosen_channel;
+
+	bool lcls_bss_status_present;
+	enum gsm0808_lcls_status lcls_bss_status;
+
+	/* more items are defined in the spec and may be added later */
+	bool more_items; /*< always set this to false */
+};
+struct msgb *gsm0808_create_handover_complete(const struct gsm0808_handover_complete *params);
+
+struct gsm0808_handover_failure {
+	uint16_t cause;
+
+	bool rr_cause_present;
+	uint8_t rr_cause;
+
+	struct gsm0808_speech_codec_list codec_list_bss_supported; /*< omit when .len == 0 */
+
+	/* more items are defined in the spec and may be added later */
+	bool more_items; /*< always set this to false */
+};
+struct msgb *gsm0808_create_handover_failure(const struct gsm0808_handover_failure *params);
+
 struct msgb *gsm0808_create_dtap(struct msgb *msg, uint8_t link_id);
 void gsm0808_prepend_dtap_header(struct msgb *msg, uint8_t link_id);