/**
* Generated by Dragonfly SDK
*
*/
package audioeventtester.servicetracker;
import org.osgi.framework.BundleContext;
import org.osgi.service.log.LogService;
import com.buglabs.application.AbstractServiceTracker;
import com.buglabs.bug.module.audio.pub.IAudioEventProvider;
import com.buglabs.bug.module.audio.pub.IAudioModuleControl;
import com.buglabs.device.ButtonEvent;
import com.buglabs.device.IButtonEventListener;
import com.buglabs.util.LogServiceUtil;
/**
* Service tracker for the BugApp Bundle;
*
*/
public class AudioEventTesterServiceTracker extends AbstractServiceTracker implements IButtonEventListener {
private IAudioEventProvider aep;
private LogService log;
private IAudioModuleControl amc;
public AudioEventTesterServiceTracker(BundleContext context) {
super(context);
this.context = context;
}
/**
* Determines if the application can start.
*/
public boolean canStart() {
return super.canStart();
}
/**
* If canStart returns true
* this method is called to start the application.
* Place your fun logic here.
*/
public void doStart() {
System.out.println("AudioJackAndButtonTestServiceTracker: start");
log = LogServiceUtil.getLogService(context);
aep = (IAudioEventProvider)getService(IAudioEventProvider.class);
amc = (IAudioModuleControl)getService(IAudioModuleControl.class);
aep.addListener(this);
}
/**
* Called when a service that this application depends is unregistered.
*/
public void doStop() {
System.out.println("AudioJackAndButtonTestServiceTracker: stop");
aep.removeListener(this);
}
/**
* Allows the user to set the service dependencies by
* adding them to services list returned by getServices().
* i.e.nl getServices().add(MyService.class.getName());
*/
public void initServices() {
getServices().add("com.buglabs.bug.module.audio.pub.IAudioEventProvider");
getServices().add("com.buglabs.bug.module.audio.pub.IAudioModuleControl");
}
/*
* Method to handle events from IAudioEventProvider service. It just sets the Audio module's
* Green LED to ON while the event is "occuring" (i.e. jack is inserted, or button is pressed)
* then sets it to OFF when the event is over.
*
* NOTE: In fact, there is no way to distinguish between the "over" part of the events,
* as there is with the beginning of events. For example, if you put a jack into HP, then
* plug and remove a jack into LO, there is no way for me to distinguish which jack has been
* removed.
*
* (non-Javadoc)
* @see com.buglabs.device.IButtonEventListener#buttonEvent(com.buglabs.device.ButtonEvent)
*/
public void buttonEvent(ButtonEvent event) {
/* System.out.println("Action:" +event.getAction());
System.out.println("Button:" +event.getButton());
System.out.println("Raw:" +event.getRawValue());*/
try {
if (event.getAction() == IAudioEventProvider.LINEIN_INSERTED_ACTION) {
amc.setLEDGreen(true);
log.log(LogService.LOG_INFO, "Received event: linein inserted");
} else if (event.getAction() == IAudioEventProvider.MIC_INSERTED_ACTION) {
amc.setLEDGreen(true);
log.log(LogService.LOG_INFO, "Received event: mic inserted");
} else if (event.getAction() == IAudioEventProvider.HEADPHONE_INSERTED_ACTION) {
amc.setLEDGreen(true);
log.log(LogService.LOG_INFO, "Received event: headphone inserted");
} else if (event.getAction() == IAudioEventProvider.LINEOUT_INSERTED_ACTION) {
amc.setLEDGreen(true);
log.log(LogService.LOG_INFO, "Received event: lineout inserted");
} else if (event.getAction() == IAudioEventProvider.BUTTON_AUDIO_VOLUP_PRESSED_ACTION) {
amc.setLEDGreen(true);
log.log(LogService.LOG_INFO, "Received event: Button up pressed");
} else if (event.getAction() == IAudioEventProvider.BUTTON_AUDIO_VOLDOWN_PRESSED_ACTION) {
amc.setLEDGreen(true);
log.log(LogService.LOG_INFO, "Received event: Button down pressed");
} else if (event.getButton() == ButtonEvent.BUTTON_AUDIO && event.getRawValue() == 40 &&
(event.getAction() == IAudioEventProvider.BUTTON_RELEASED_ACTION || event.getAction() == IAudioEventProvider.JACK_REMOVED_ACTION)){
amc.setLEDGreen(false);
log.log(LogService.LOG_INFO, "Received event: release");
}
} catch (Exception e) {}
}
}