The profiles plug-in is in charge of ringing, vibrating, etc
This commit is contained in:
parent
5122bb6248
commit
cdd5518525
1
Makefile
1
Makefile
@ -57,6 +57,7 @@ dist:
|
|||||||
$(PACKAGE)-$(VERSION)/src/common.c \
|
$(PACKAGE)-$(VERSION)/src/common.c \
|
||||||
$(PACKAGE)-$(VERSION)/src/project.conf \
|
$(PACKAGE)-$(VERSION)/src/project.conf \
|
||||||
$(PACKAGE)-$(VERSION)/src/plugins/openmoko.c \
|
$(PACKAGE)-$(VERSION)/src/plugins/openmoko.c \
|
||||||
|
$(PACKAGE)-$(VERSION)/src/plugins/profiles.c \
|
||||||
$(PACKAGE)-$(VERSION)/src/plugins/Makefile \
|
$(PACKAGE)-$(VERSION)/src/plugins/Makefile \
|
||||||
$(PACKAGE)-$(VERSION)/src/plugins/project.conf \
|
$(PACKAGE)-$(VERSION)/src/plugins/project.conf \
|
||||||
$(PACKAGE)-$(VERSION)/COPYING \
|
$(PACKAGE)-$(VERSION)/COPYING \
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
TARGETS = openmoko.so
|
TARGETS = openmoko.so profiles.so
|
||||||
PREFIX = /usr/local
|
PREFIX = /usr/local
|
||||||
DESTDIR =
|
DESTDIR =
|
||||||
LIBDIR = $(PREFIX)/lib
|
LIBDIR = $(PREFIX)/lib
|
||||||
@ -25,11 +25,21 @@ openmoko_LDFLAGS = $(LDFLAGSF) $(LDFLAGS)
|
|||||||
openmoko.so: $(openmoko_OBJS)
|
openmoko.so: $(openmoko_OBJS)
|
||||||
$(LD) -o openmoko.so $(openmoko_OBJS)
|
$(LD) -o openmoko.so $(openmoko_OBJS)
|
||||||
|
|
||||||
|
profiles_OBJS = profiles.o
|
||||||
|
profiles_CFLAGS = $(CPPFLAGSF) $(CPPFLAGS) $(CFLAGSF) $(CFLAGS) `pkg-config --cflags libpulse`
|
||||||
|
profiles_LDFLAGS = $(LDFLAGSF) $(LDFLAGS) `pkg-config --libs libpulse`
|
||||||
|
|
||||||
|
profiles.so: $(profiles_OBJS)
|
||||||
|
$(LD) -o profiles.so $(profiles_OBJS) `pkg-config --libs libpulse`
|
||||||
|
|
||||||
openmoko.o: openmoko.c ../../include/Phone.h
|
openmoko.o: openmoko.c ../../include/Phone.h
|
||||||
$(CC) $(openmoko_CFLAGS) -c openmoko.c
|
$(CC) $(openmoko_CFLAGS) -c openmoko.c
|
||||||
|
|
||||||
|
profiles.o: profiles.c ../../include/Phone.h
|
||||||
|
$(CC) $(profiles_CFLAGS) -c profiles.c
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
$(RM) $(openmoko_OBJS)
|
$(RM) $(openmoko_OBJS) $(profiles_OBJS)
|
||||||
|
|
||||||
distclean: clean
|
distclean: clean
|
||||||
$(RM) $(TARGETS)
|
$(RM) $(TARGETS)
|
||||||
@ -37,8 +47,11 @@ distclean: clean
|
|||||||
install: all
|
install: all
|
||||||
$(MKDIR) $(DESTDIR)$(LIBDIR)/Phone/plugins
|
$(MKDIR) $(DESTDIR)$(LIBDIR)/Phone/plugins
|
||||||
$(INSTALL) -m 0644 openmoko.so $(DESTDIR)$(LIBDIR)/Phone/plugins/openmoko.so
|
$(INSTALL) -m 0644 openmoko.so $(DESTDIR)$(LIBDIR)/Phone/plugins/openmoko.so
|
||||||
|
$(MKDIR) $(DESTDIR)$(LIBDIR)/Phone/plugins
|
||||||
|
$(INSTALL) -m 0644 profiles.so $(DESTDIR)$(LIBDIR)/Phone/plugins/profiles.so
|
||||||
|
|
||||||
uninstall:
|
uninstall:
|
||||||
$(RM) $(DESTDIR)$(LIBDIR)/Phone/plugins/openmoko.so
|
$(RM) $(DESTDIR)$(LIBDIR)/Phone/plugins/openmoko.so
|
||||||
|
$(RM) $(DESTDIR)$(LIBDIR)/Phone/plugins/profiles.so
|
||||||
|
|
||||||
.PHONY: all clean distclean install uninstall
|
.PHONY: all clean distclean install uninstall
|
||||||
|
154
src/plugins/profiles.c
Normal file
154
src/plugins/profiles.c
Normal file
@ -0,0 +1,154 @@
|
|||||||
|
/* $Id$ */
|
||||||
|
/* Copyright (c) 2010 Pierre Pronchery <khorben@defora.org> */
|
||||||
|
/* This file is part of DeforaOS Desktop Phone */
|
||||||
|
/* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, version 3 of the License.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#include <libintl.h>
|
||||||
|
#include <pulse/pulseaudio.h>
|
||||||
|
#include <System.h>
|
||||||
|
#include "Phone.h"
|
||||||
|
#include "../../config.h"
|
||||||
|
#define _(string) gettext(string)
|
||||||
|
|
||||||
|
#ifndef PREFIX
|
||||||
|
# define PREFIX "/usr/local"
|
||||||
|
#endif
|
||||||
|
#ifndef DATADIR
|
||||||
|
# define DATADIR PREFIX "/share"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/* Profiles */
|
||||||
|
/* private */
|
||||||
|
/* types */
|
||||||
|
typedef struct _Profiles
|
||||||
|
{
|
||||||
|
int event;
|
||||||
|
/* pulseaudio */
|
||||||
|
pa_threaded_mainloop * pam;
|
||||||
|
pa_context * pac;
|
||||||
|
pa_operation * pao;
|
||||||
|
} Profiles;
|
||||||
|
|
||||||
|
/* prototypes */
|
||||||
|
static int _profiles_init(PhonePlugin * plugin);
|
||||||
|
static int _profiles_destroy(PhonePlugin * plugin);
|
||||||
|
static int _profiles_event(PhonePlugin * plugin, PhoneEvent event, ...);
|
||||||
|
|
||||||
|
|
||||||
|
/* public */
|
||||||
|
/* variables */
|
||||||
|
PhonePlugin plugin =
|
||||||
|
{
|
||||||
|
NULL,
|
||||||
|
_profiles_init,
|
||||||
|
_profiles_destroy,
|
||||||
|
_profiles_event,
|
||||||
|
NULL
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/* private */
|
||||||
|
/* functions */
|
||||||
|
/* profiles_init */
|
||||||
|
static int _profiles_init(PhonePlugin * plugin)
|
||||||
|
{
|
||||||
|
Profiles * profiles;
|
||||||
|
pa_mainloop_api * mapi = NULL;
|
||||||
|
|
||||||
|
#ifdef DEBUG
|
||||||
|
fprintf(stderr, "DEBUG: %s()\n", __func__);
|
||||||
|
#endif
|
||||||
|
if((profiles = malloc(sizeof(*profiles))) == NULL)
|
||||||
|
return error_set_code(1, "%s", strerror(errno));
|
||||||
|
plugin->priv = profiles;
|
||||||
|
profiles->event = -1;
|
||||||
|
profiles->pam = pa_threaded_mainloop_new();
|
||||||
|
profiles->pac = NULL;
|
||||||
|
profiles->pao = NULL;
|
||||||
|
if(profiles->pam == NULL)
|
||||||
|
{
|
||||||
|
_profiles_destroy(plugin);
|
||||||
|
return error_set_code(1, "%s",
|
||||||
|
_("Could not initialize PulseAudio"));
|
||||||
|
}
|
||||||
|
mapi = pa_threaded_mainloop_get_api(profiles->pam);
|
||||||
|
/* XXX update the context name */
|
||||||
|
if((profiles->pac = pa_context_new(mapi, "Openmoko Dialer")) == NULL)
|
||||||
|
{
|
||||||
|
_profiles_destroy(plugin);
|
||||||
|
return error_set_code(1, "%s",
|
||||||
|
_("Could not initialize PulseAudio"));
|
||||||
|
}
|
||||||
|
pa_context_connect(profiles->pac, NULL, 0, NULL);
|
||||||
|
pa_threaded_mainloop_start(profiles->pam);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* profiles_destroy */
|
||||||
|
static int _profiles_destroy(PhonePlugin * plugin)
|
||||||
|
{
|
||||||
|
Profiles * profiles = plugin->priv;
|
||||||
|
|
||||||
|
#ifdef DEBUG
|
||||||
|
fprintf(stderr, "DEBUG: %s()\n", __func__);
|
||||||
|
#endif
|
||||||
|
if(profiles->pao != NULL)
|
||||||
|
pa_operation_cancel(profiles->pao);
|
||||||
|
if(profiles->pac != NULL)
|
||||||
|
pa_context_unref(profiles->pac);
|
||||||
|
pa_threaded_mainloop_free(profiles->pam);
|
||||||
|
free(profiles);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* profiles_event */
|
||||||
|
static int _profiles_event(PhonePlugin * plugin, PhoneEvent event, ...)
|
||||||
|
{
|
||||||
|
Profiles * profiles = plugin->priv;
|
||||||
|
|
||||||
|
if(profiles->event == (int)event)
|
||||||
|
return 0;
|
||||||
|
if(profiles->pao != NULL)
|
||||||
|
pa_operation_cancel(profiles->pao);
|
||||||
|
profiles->pao = NULL;
|
||||||
|
switch(event)
|
||||||
|
{
|
||||||
|
case PHONE_EVENT_CALL_INCOMING:
|
||||||
|
profiles->pao = pa_context_play_sample(profiles->pac,
|
||||||
|
"ringtone", NULL, PA_VOLUME_NORM, NULL,
|
||||||
|
NULL);
|
||||||
|
break;
|
||||||
|
case PHONE_EVENT_SMS_RECEIVED:
|
||||||
|
profiles->pao = pa_context_play_sample(profiles->pac,
|
||||||
|
"message", NULL, PA_VOLUME_NORM, NULL,
|
||||||
|
NULL);
|
||||||
|
break;
|
||||||
|
case PHONE_EVENT_SMS_SENT:
|
||||||
|
break; /* anything to implement? */
|
||||||
|
case PHONE_EVENT_CALL_OUTGOING:
|
||||||
|
case PHONE_EVENT_CALL_TERMINATED:
|
||||||
|
case PHONE_EVENT_CALL_ESTABLISHED:
|
||||||
|
pa_operation_cancel(profiles->pao);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
profiles->event = event;
|
||||||
|
return 0;
|
||||||
|
}
|
@ -1,4 +1,4 @@
|
|||||||
targets=openmoko
|
targets=openmoko,profiles
|
||||||
cppflags_force=-I ../../include
|
cppflags_force=-I ../../include
|
||||||
cppflags=-I $(PREFIX)/include
|
cppflags=-I $(PREFIX)/include
|
||||||
cflags_force=-W
|
cflags_force=-W
|
||||||
@ -12,3 +12,13 @@ install=$(LIBDIR)/Phone/plugins
|
|||||||
|
|
||||||
[openmoko.c]
|
[openmoko.c]
|
||||||
depends=../../include/Phone.h
|
depends=../../include/Phone.h
|
||||||
|
|
||||||
|
[profiles]
|
||||||
|
type=plugin
|
||||||
|
sources=profiles.c
|
||||||
|
cflags=`pkg-config --cflags libpulse`
|
||||||
|
ldflags=`pkg-config --libs libpulse`
|
||||||
|
install=$(LIBDIR)/Phone/plugins
|
||||||
|
|
||||||
|
[profiles.c]
|
||||||
|
depends=../../include/Phone.h
|
||||||
|
Loading…
Reference in New Issue
Block a user