Add ringer support to L1CTL interface and layer1

This commit is contained in:
Andreas Eversberg 2013-12-23 11:09:35 +01:00
parent 447ac935c5
commit 3138c02142
5 changed files with 42 additions and 0 deletions

View File

@ -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__ */

View File

@ -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

View File

@ -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)
{

View File

@ -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);

View File

@ -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: