diff options
author | Andreas Eversberg <jolly@eversberg.eu> | 2013-12-23 11:09:35 +0100 |
---|---|---|
committer | Andreas Eversberg <jolly@eversberg.eu> | 2014-02-26 12:17:12 +0100 |
commit | 3138c0214285f73c1a9e5af05f5d783d68feaec9 (patch) | |
tree | 8b3e4341dee4e38b050c7bc12cba25274e7d0b09 | |
parent | 447ac935c571bb410b1f7b8467619abac92c7201 (diff) |
Add ringer support to L1CTL interface and layer1
-rw-r--r-- | include/l1ctl_proto.h | 5 | ||||
-rw-r--r-- | src/host/layer23/include/osmocom/bb/common/l1ctl.h | 3 | ||||
-rw-r--r-- | src/host/layer23/src/common/l1ctl.c | 17 | ||||
-rw-r--r-- | src/target/firmware/apps/layer1/main.c | 2 | ||||
-rw-r--r-- | src/target/firmware/layer1/l23_api.c | 15 |
5 files changed, 42 insertions, 0 deletions
diff --git a/include/l1ctl_proto.h b/include/l1ctl_proto.h index 1434ac48..058140d2 100644 --- a/include/l1ctl_proto.h +++ b/include/l1ctl_proto.h @@ -56,6 +56,7 @@ enum { L1CTL_TRAFFIC_REQ, L1CTL_TRAFFIC_CONF, L1CTL_TRAFFIC_IND, + L1CTL_RINGER_REQ, }; enum ccch_mode { @@ -309,4 +310,8 @@ struct l1ctl_traffic_req { uint8_t data[TRAFFIC_DATA_LEN]; } __attribute__((packed)); +struct l1ctl_ringer_req { + uint8_t volume; +} __attribute__((packed)); + #endif /* __L1CTL_PROTO_H__ */ diff --git a/src/host/layer23/include/osmocom/bb/common/l1ctl.h b/src/host/layer23/include/osmocom/bb/common/l1ctl.h index e95f47b7..3cf014e4 100644 --- a/src/host/layer23/include/osmocom/bb/common/l1ctl.h +++ b/src/host/layer23/include/osmocom/bb/common/l1ctl.h @@ -74,4 +74,7 @@ int l1ctl_ph_prim_cb(struct osmo_prim_hdr *oph, void *ctx); /* Transmit L1CTL_NEIGH_PM_REQ */ int l1ctl_tx_neigh_pm_req(struct osmocom_ms *ms, int num, uint16_t *arfcn); +/* Transmit L1CTL_RINGER_REQ */ +int l1ctl_tx_ringer_req(struct osmocom_ms *ms, uint8_t volume); + #endif diff --git a/src/host/layer23/src/common/l1ctl.c b/src/host/layer23/src/common/l1ctl.c index d136336f..ba037d09 100644 --- a/src/host/layer23/src/common/l1ctl.c +++ b/src/host/layer23/src/common/l1ctl.c @@ -934,6 +934,23 @@ static int rx_l1_neigh_pm_ind(struct osmocom_ms *ms, struct msgb *msg) return 0; } +/* Transmit L1CTL_RINGER_REQ */ +int l1ctl_tx_ringer_req(struct osmocom_ms *ms, uint8_t volume) +{ + struct msgb *msg; + struct l1ctl_ringer_req *ring_req; + + msg = osmo_l1_alloc(L1CTL_RINGER_REQ); + if (!msg) + return -1; + + LOGP(DL1C, LOGL_INFO, "Tx RINGER Req (volume %u)\n", volume); + ring_req = (struct l1ctl_ringer_req *) msgb_put(msg, sizeof(*ring_req)); + ring_req->volume = volume; + + return osmo_send_l1(ms, msg); +} + /* Receive incoming data from L1 using L1CTL format */ int l1ctl_recv(struct osmocom_ms *ms, struct msgb *msg) { diff --git a/src/target/firmware/apps/layer1/main.c b/src/target/firmware/apps/layer1/main.c index 59ffe972..f122de6b 100644 --- a/src/target/firmware/apps/layer1/main.c +++ b/src/target/firmware/apps/layer1/main.c @@ -102,6 +102,8 @@ int main(void) /* initialize SIM */ calypso_sim_init(); + buzzer_mode_pwt(1); + puts("Power up simcard:\n"); memset(atr,0,sizeof(atr)); atrLength = calypso_sim_powerup(atr); diff --git a/src/target/firmware/layer1/l23_api.c b/src/target/firmware/layer1/l23_api.c index 4b989755..0d7ca450 100644 --- a/src/target/firmware/layer1/l23_api.c +++ b/src/target/firmware/layer1/l23_api.c @@ -46,6 +46,7 @@ #include <rf/trf6151.h> #include <calypso/sim.h> #include <calypso/dsp.h> +#include <calypso/buzzer.h> #include <l1ctl_proto.h> @@ -616,6 +617,17 @@ static void l1ctl_sim_req(struct msgb *msg) sim_apdu(len, data); } +static void l1ctl_ringer_req(struct msgb *msg) +{ + struct l1ctl_hdr *l1h = (struct l1ctl_hdr *) msg->data; + struct l1ctl_ringer_req *ring_req = + (struct l1ctl_ringer_req *) l1h->data; + + printf("Ringtone Request: %u\n", ring_req->volume); + buzzer_volume(ring_req->volume); + buzzer_note(NOTE(NOTE_C, OCTAVE_4)); +} + static struct llist_head l23_rx_queue = LLIST_HEAD_INIT(l23_rx_queue); /* callback from SERCOMM when L2 sends a message to L1 */ @@ -707,6 +719,9 @@ void l1a_l23_handler(void) case L1CTL_SIM_REQ: l1ctl_sim_req(msg); break; + case L1CTL_RINGER_REQ: + l1ctl_ringer_req(msg); + break; } exit_msgbfree: |