trau_sync: make sync pattern configurable

When a trau sync fsm is allocated, the user must set the sync pattern,
which can not be changed during the whole fsm lifecycle. However on
codec changes it might be necessary to change the sync pattern on the
fly.

- Add function to change the sync pattern

Change-Id: I1caff93b4c8eace8ba8cd6e32e996a9e1503232b
Related: OS#2659
diff --git a/include/osmocom/trau/trau_sync.h b/include/osmocom/trau/trau_sync.h
index 46595be..bd99586 100644
--- a/include/osmocom/trau/trau_sync.h
+++ b/include/osmocom/trau/trau_sync.h
@@ -17,3 +17,4 @@
 		     enum osmo_tray_sync_pat_id pat_id, void *user_data);
 
 void osmo_trau_sync_rx_ubits(struct osmo_fsm_inst *fi, const ubit_t *bits, size_t n_bits);
+void osmo_trau_sync_set_pat(struct osmo_fsm_inst *fi, enum osmo_tray_sync_pat_id pat_id);
diff --git a/src/trau/trau_sync.c b/src/trau/trau_sync.c
index 730cf0c..89c5558 100644
--- a/src/trau/trau_sync.c
+++ b/src/trau/trau_sync.c
@@ -499,7 +499,6 @@
 
 	tss->out_cb = frame_out_cb;
 	tss->user_data = user_data;
-	/* FIXME: this must be configurable */
 	tss->pattern = &sync_patterns[pat_id];
 
 	/* An unusued E1 timeslot normally would send an idle signal that
@@ -511,6 +510,14 @@
 	return fi;
 }
 
+void osmo_trau_sync_set_pat(struct osmo_fsm_inst *fi, enum osmo_tray_sync_pat_id pat_id)
+{
+	struct trau_rx_sync_state *tss = fi->priv;
+
+	tss->pattern = &sync_patterns[pat_id];
+	osmo_fsm_inst_state_chg(fi, FRAME_ALIGNMENT_LOST, 0, 0);
+}
+
 void osmo_trau_sync_rx_ubits(struct osmo_fsm_inst *fi, const ubit_t *bits, size_t n_bits)
 {
 	struct ubit_buf ubb;