ex

Fork of mbed-os-example-mbed5-blinky by mbed-os-examples

Committer:
TMBOY
Date:
Tue Jul 18 16:34:48 2017 +0800
Revision:
45:2aa9f933c8d2
?

Who changed what in which revision?

UserRevisionLine numberNew contents of line
TMBOY 45:2aa9f933c8d2 1 /*
TMBOY 45:2aa9f933c8d2 2 * Copyright (c) 2017 Baidu, Inc. All Rights Reserved.
TMBOY 45:2aa9f933c8d2 3 *
TMBOY 45:2aa9f933c8d2 4 * Licensed under the Apache License, Version 2.0 (the "License");
TMBOY 45:2aa9f933c8d2 5 * you may not use this file except in compliance with the License.
TMBOY 45:2aa9f933c8d2 6 * You may obtain a copy of the License at
TMBOY 45:2aa9f933c8d2 7 *
TMBOY 45:2aa9f933c8d2 8 * http://www.apache.org/licenses/LICENSE-2.0
TMBOY 45:2aa9f933c8d2 9 *
TMBOY 45:2aa9f933c8d2 10 * Unless required by applicable law or agreed to in writing, software
TMBOY 45:2aa9f933c8d2 11 * distributed under the License is distributed on an "AS IS" BASIS,
TMBOY 45:2aa9f933c8d2 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
TMBOY 45:2aa9f933c8d2 13 * See the License for the specific language governing permissions and
TMBOY 45:2aa9f933c8d2 14 * limitations under the License.
TMBOY 45:2aa9f933c8d2 15 */
TMBOY 45:2aa9f933c8d2 16 package com.baidu.duer.dcs.framework;
TMBOY 45:2aa9f933c8d2 17
TMBOY 45:2aa9f933c8d2 18 import com.baidu.duer.dcs.devicemodule.alerts.AlertsDeviceModule;
TMBOY 45:2aa9f933c8d2 19 import com.baidu.duer.dcs.devicemodule.audioplayer.AudioPlayerDeviceModule;
TMBOY 45:2aa9f933c8d2 20 import com.baidu.duer.dcs.devicemodule.playbackcontroller.PlaybackControllerDeviceModule;
TMBOY 45:2aa9f933c8d2 21 import com.baidu.duer.dcs.devicemodule.screen.ScreenDeviceModule;
TMBOY 45:2aa9f933c8d2 22 import com.baidu.duer.dcs.devicemodule.speakcontroller.SpeakerControllerDeviceModule;
TMBOY 45:2aa9f933c8d2 23 import com.baidu.duer.dcs.devicemodule.system.SystemDeviceModule;
TMBOY 45:2aa9f933c8d2 24 import com.baidu.duer.dcs.devicemodule.system.message.SetEndPointPayload;
TMBOY 45:2aa9f933c8d2 25 import com.baidu.duer.dcs.devicemodule.system.message.ThrowExceptionPayload;
TMBOY 45:2aa9f933c8d2 26 import com.baidu.duer.dcs.devicemodule.voiceinput.VoiceInputDeviceModule;
TMBOY 45:2aa9f933c8d2 27 import com.baidu.duer.dcs.devicemodule.voiceoutput.VoiceOutputDeviceModule;
TMBOY 45:2aa9f933c8d2 28 import com.baidu.duer.dcs.http.HttpConfig;
TMBOY 45:2aa9f933c8d2 29 import com.baidu.duer.dcs.systeminterface.IMediaPlayer;
TMBOY 45:2aa9f933c8d2 30 import com.baidu.duer.dcs.systeminterface.IPlatformFactory;
TMBOY 45:2aa9f933c8d2 31 import com.baidu.duer.dcs.systeminterface.IPlaybackController;
TMBOY 45:2aa9f933c8d2 32 import com.baidu.duer.dcs.systeminterface.IWebView;
TMBOY 45:2aa9f933c8d2 33 import com.baidu.duer.dcs.util.LogUtil;
TMBOY 45:2aa9f933c8d2 34
TMBOY 45:2aa9f933c8d2 35 /**
TMBOY 45:2aa9f933c8d2 36 * 创建语音输入、语音输出、扬声器、音频播放器、播放控制、闹钟、屏幕显示和系统等deviceModule
TMBOY 45:2aa9f933c8d2 37 * <p>
TMBOY 45:2aa9f933c8d2 38 * Created by wuruisheng on 2017/6/15.
TMBOY 45:2aa9f933c8d2 39 */
TMBOY 45:2aa9f933c8d2 40 public class DeviceModuleFactory {
TMBOY 45:2aa9f933c8d2 41 private static final String TAG = DeviceModuleFactory.class.getSimpleName();
TMBOY 45:2aa9f933c8d2 42 private final IDeviceModuleHandler deviceModuleHandler;
TMBOY 45:2aa9f933c8d2 43 private final IMediaPlayer dialogMediaPlayer;
TMBOY 45:2aa9f933c8d2 44
TMBOY 45:2aa9f933c8d2 45 private VoiceInputDeviceModule voiceInputDeviceModule;
TMBOY 45:2aa9f933c8d2 46 private VoiceOutputDeviceModule voiceOutputDeviceModule;
TMBOY 45:2aa9f933c8d2 47 private SpeakerControllerDeviceModule speakerControllerDeviceModule;
TMBOY 45:2aa9f933c8d2 48 private AudioPlayerDeviceModule audioPlayerDeviceModule;
TMBOY 45:2aa9f933c8d2 49 private AlertsDeviceModule alertsDeviceModule;
TMBOY 45:2aa9f933c8d2 50 private SystemDeviceModule systemDeviceModule;
TMBOY 45:2aa9f933c8d2 51 private PlaybackControllerDeviceModule playbackControllerDeviceModule;
TMBOY 45:2aa9f933c8d2 52 private ScreenDeviceModule screenDeviceModule;
TMBOY 45:2aa9f933c8d2 53
TMBOY 45:2aa9f933c8d2 54 // 数字越大,优先级越高,播放优先级
TMBOY 45:2aa9f933c8d2 55 private enum MediaChannel {
TMBOY 45:2aa9f933c8d2 56 SPEAK("dialog", 3),
TMBOY 45:2aa9f933c8d2 57 ALERT("alert", 2),
TMBOY 45:2aa9f933c8d2 58 AUDIO("audio", 1);
TMBOY 45:2aa9f933c8d2 59
TMBOY 45:2aa9f933c8d2 60 private String channelName;
TMBOY 45:2aa9f933c8d2 61 private int priority;
TMBOY 45:2aa9f933c8d2 62
TMBOY 45:2aa9f933c8d2 63 MediaChannel(String channelName, int priority) {
TMBOY 45:2aa9f933c8d2 64 this.channelName = channelName;
TMBOY 45:2aa9f933c8d2 65 this.priority = priority;
TMBOY 45:2aa9f933c8d2 66 }
TMBOY 45:2aa9f933c8d2 67 }
TMBOY 45:2aa9f933c8d2 68
TMBOY 45:2aa9f933c8d2 69 public DeviceModuleFactory(final IDeviceModuleHandler deviceModuleHandler) {
TMBOY 45:2aa9f933c8d2 70 this.deviceModuleHandler = deviceModuleHandler;
TMBOY 45:2aa9f933c8d2 71 dialogMediaPlayer = deviceModuleHandler.getMultiChannelMediaPlayer()
TMBOY 45:2aa9f933c8d2 72 .addNewChannel(MediaChannel.SPEAK.channelName, MediaChannel.SPEAK.priority);
TMBOY 45:2aa9f933c8d2 73 }
TMBOY 45:2aa9f933c8d2 74
TMBOY 45:2aa9f933c8d2 75
TMBOY 45:2aa9f933c8d2 76 public void createVoiceInputDeviceModule() {
TMBOY 45:2aa9f933c8d2 77 /*
TMBOY 45:2aa9f933c8d2 78 * 传入VoiceOutput的MediaPlayer,因为根据dcs协议的规范
TMBOY 45:2aa9f933c8d2 79 * 对话通道:
TMBOY 45:2aa9f933c8d2 80 * 对应语音输入(Voice Input)和语音输出(Voice Output)端能力;
TMBOY 45:2aa9f933c8d2 81 * 用户在语音请求时,或者设备在执行Speak指令进行播报时,对话通道进入活跃状态
TMBOY 45:2aa9f933c8d2 82 */
TMBOY 45:2aa9f933c8d2 83 voiceInputDeviceModule = new VoiceInputDeviceModule(
TMBOY 45:2aa9f933c8d2 84 dialogMediaPlayer, deviceModuleHandler.getMessageSender(),
TMBOY 45:2aa9f933c8d2 85 deviceModuleHandler.getPlatformFactory().getVoiceInput(),
TMBOY 45:2aa9f933c8d2 86 deviceModuleHandler.getDialogRequestIdHandler(),
TMBOY 45:2aa9f933c8d2 87 deviceModuleHandler.getResponseDispatcher());
TMBOY 45:2aa9f933c8d2 88 deviceModuleHandler.addDeviceModule(voiceInputDeviceModule);
TMBOY 45:2aa9f933c8d2 89 }
TMBOY 45:2aa9f933c8d2 90
TMBOY 45:2aa9f933c8d2 91 public VoiceInputDeviceModule getVoiceInputDeviceModule() {
TMBOY 45:2aa9f933c8d2 92 return voiceInputDeviceModule;
TMBOY 45:2aa9f933c8d2 93 }
TMBOY 45:2aa9f933c8d2 94
TMBOY 45:2aa9f933c8d2 95 public void createVoiceOutputDeviceModule() {
TMBOY 45:2aa9f933c8d2 96 voiceOutputDeviceModule = new VoiceOutputDeviceModule(dialogMediaPlayer,
TMBOY 45:2aa9f933c8d2 97 deviceModuleHandler.getMessageSender());
TMBOY 45:2aa9f933c8d2 98 voiceOutputDeviceModule.addVoiceOutputListener(new VoiceOutputDeviceModule.IVoiceOutputListener() {
TMBOY 45:2aa9f933c8d2 99 @Override
TMBOY 45:2aa9f933c8d2 100 public void onVoiceOutputStarted() {
TMBOY 45:2aa9f933c8d2 101 LogUtil.d(TAG, "DcsResponseBodyEnqueue-onVoiceOutputStarted ok ");
TMBOY 45:2aa9f933c8d2 102 deviceModuleHandler.getResponseDispatcher().blockDependentQueue();
TMBOY 45:2aa9f933c8d2 103 }
TMBOY 45:2aa9f933c8d2 104
TMBOY 45:2aa9f933c8d2 105 @Override
TMBOY 45:2aa9f933c8d2 106 public void onVoiceOutputFinished() {
TMBOY 45:2aa9f933c8d2 107 LogUtil.d(TAG, "DcsResponseBodyEnqueue-onVoiceOutputFinished ok ");
TMBOY 45:2aa9f933c8d2 108 deviceModuleHandler.getResponseDispatcher().unBlockDependentQueue();
TMBOY 45:2aa9f933c8d2 109 }
TMBOY 45:2aa9f933c8d2 110 });
TMBOY 45:2aa9f933c8d2 111
TMBOY 45:2aa9f933c8d2 112 deviceModuleHandler.addDeviceModule(voiceOutputDeviceModule);
TMBOY 45:2aa9f933c8d2 113 }
TMBOY 45:2aa9f933c8d2 114
TMBOY 45:2aa9f933c8d2 115 public void createSpeakControllerDeviceModule() {
TMBOY 45:2aa9f933c8d2 116 BaseMultiChannelMediaPlayer.ISpeakerController speakerController =
TMBOY 45:2aa9f933c8d2 117 deviceModuleHandler.getMultiChannelMediaPlayer().getSpeakerController();
TMBOY 45:2aa9f933c8d2 118 speakerControllerDeviceModule =
TMBOY 45:2aa9f933c8d2 119 new SpeakerControllerDeviceModule(speakerController,
TMBOY 45:2aa9f933c8d2 120 deviceModuleHandler.getMessageSender());
TMBOY 45:2aa9f933c8d2 121 deviceModuleHandler.addDeviceModule(speakerControllerDeviceModule);
TMBOY 45:2aa9f933c8d2 122 }
TMBOY 45:2aa9f933c8d2 123
TMBOY 45:2aa9f933c8d2 124 public void createAudioPlayerDeviceModule() {
TMBOY 45:2aa9f933c8d2 125 IMediaPlayer mediaPlayer = deviceModuleHandler.getMultiChannelMediaPlayer()
TMBOY 45:2aa9f933c8d2 126 .addNewChannel(MediaChannel.AUDIO.channelName,
TMBOY 45:2aa9f933c8d2 127 MediaChannel.AUDIO.priority);
TMBOY 45:2aa9f933c8d2 128 audioPlayerDeviceModule = new AudioPlayerDeviceModule(mediaPlayer,
TMBOY 45:2aa9f933c8d2 129 deviceModuleHandler.getMessageSender());
TMBOY 45:2aa9f933c8d2 130 deviceModuleHandler.addDeviceModule(audioPlayerDeviceModule);
TMBOY 45:2aa9f933c8d2 131 }
TMBOY 45:2aa9f933c8d2 132
TMBOY 45:2aa9f933c8d2 133 public AudioPlayerDeviceModule getAudioPlayerDeviceModule() {
TMBOY 45:2aa9f933c8d2 134 return audioPlayerDeviceModule;
TMBOY 45:2aa9f933c8d2 135 }
TMBOY 45:2aa9f933c8d2 136
TMBOY 45:2aa9f933c8d2 137 public void createAlertsDeviceModule() {
TMBOY 45:2aa9f933c8d2 138 IMediaPlayer mediaPlayer = deviceModuleHandler.getMultiChannelMediaPlayer()
TMBOY 45:2aa9f933c8d2 139 .addNewChannel(MediaChannel.ALERT.channelName,
TMBOY 45:2aa9f933c8d2 140 MediaChannel.ALERT.priority);
TMBOY 45:2aa9f933c8d2 141 alertsDeviceModule = new AlertsDeviceModule(mediaPlayer,
TMBOY 45:2aa9f933c8d2 142 deviceModuleHandler.getPlatformFactory().createAlertsDataStore(),
TMBOY 45:2aa9f933c8d2 143 deviceModuleHandler.getMessageSender(),
TMBOY 45:2aa9f933c8d2 144 deviceModuleHandler.getPlatformFactory().getMainHandler());
TMBOY 45:2aa9f933c8d2 145
TMBOY 45:2aa9f933c8d2 146 alertsDeviceModule.addAlertListener(new AlertsDeviceModule.IAlertListener() {
TMBOY 45:2aa9f933c8d2 147 @Override
TMBOY 45:2aa9f933c8d2 148 public void onAlertStarted(String alertToken) {
TMBOY 45:2aa9f933c8d2 149 }
TMBOY 45:2aa9f933c8d2 150 });
TMBOY 45:2aa9f933c8d2 151
TMBOY 45:2aa9f933c8d2 152 deviceModuleHandler.addDeviceModule(alertsDeviceModule);
TMBOY 45:2aa9f933c8d2 153 }
TMBOY 45:2aa9f933c8d2 154
TMBOY 45:2aa9f933c8d2 155 public void createSystemDeviceModule() {
TMBOY 45:2aa9f933c8d2 156 systemDeviceModule = new SystemDeviceModule(deviceModuleHandler.getMessageSender());
TMBOY 45:2aa9f933c8d2 157 systemDeviceModule.addModuleListener(new SystemDeviceModule.IDeviceModuleListener() {
TMBOY 45:2aa9f933c8d2 158 @Override
TMBOY 45:2aa9f933c8d2 159 public void onSetEndpoint(SetEndPointPayload endPointPayload) {
TMBOY 45:2aa9f933c8d2 160 if (null != endPointPayload) {
TMBOY 45:2aa9f933c8d2 161 String endpoint = endPointPayload.getEndpoint();
TMBOY 45:2aa9f933c8d2 162 if (null != endpoint && endpoint.length() > 0) {
TMBOY 45:2aa9f933c8d2 163 HttpConfig.setEndpoint(endpoint);
TMBOY 45:2aa9f933c8d2 164 }
TMBOY 45:2aa9f933c8d2 165 }
TMBOY 45:2aa9f933c8d2 166 }
TMBOY 45:2aa9f933c8d2 167
TMBOY 45:2aa9f933c8d2 168 @Override
TMBOY 45:2aa9f933c8d2 169 public void onThrowException(ThrowExceptionPayload throwExceptionPayload) {
TMBOY 45:2aa9f933c8d2 170 LogUtil.v(TAG, throwExceptionPayload.toString());
TMBOY 45:2aa9f933c8d2 171 }
TMBOY 45:2aa9f933c8d2 172 });
TMBOY 45:2aa9f933c8d2 173 deviceModuleHandler.addDeviceModule(systemDeviceModule);
TMBOY 45:2aa9f933c8d2 174 }
TMBOY 45:2aa9f933c8d2 175
TMBOY 45:2aa9f933c8d2 176 public SystemDeviceModule getSystemDeviceModule() {
TMBOY 45:2aa9f933c8d2 177 return systemDeviceModule;
TMBOY 45:2aa9f933c8d2 178 }
TMBOY 45:2aa9f933c8d2 179
TMBOY 45:2aa9f933c8d2 180 public SystemDeviceModule.Provider getSystemProvider() {
TMBOY 45:2aa9f933c8d2 181 return systemDeviceModule.getProvider();
TMBOY 45:2aa9f933c8d2 182 }
TMBOY 45:2aa9f933c8d2 183
TMBOY 45:2aa9f933c8d2 184 public void createPlaybackControllerDeviceModule() {
TMBOY 45:2aa9f933c8d2 185 IPlaybackController playback = deviceModuleHandler.getPlatformFactory().getPlayback();
TMBOY 45:2aa9f933c8d2 186 playbackControllerDeviceModule = new PlaybackControllerDeviceModule(playback,
TMBOY 45:2aa9f933c8d2 187 deviceModuleHandler.getMessageSender(), alertsDeviceModule);
TMBOY 45:2aa9f933c8d2 188 deviceModuleHandler.addDeviceModule(playbackControllerDeviceModule);
TMBOY 45:2aa9f933c8d2 189 }
TMBOY 45:2aa9f933c8d2 190
TMBOY 45:2aa9f933c8d2 191 public void createScreenDeviceModule() {
TMBOY 45:2aa9f933c8d2 192 IWebView webView = deviceModuleHandler.getPlatformFactory().getWebView();
TMBOY 45:2aa9f933c8d2 193 screenDeviceModule = new ScreenDeviceModule(webView, deviceModuleHandler.getMessageSender());
TMBOY 45:2aa9f933c8d2 194 deviceModuleHandler.addDeviceModule(screenDeviceModule);
TMBOY 45:2aa9f933c8d2 195 }
TMBOY 45:2aa9f933c8d2 196
TMBOY 45:2aa9f933c8d2 197 public interface IDeviceModuleHandler {
TMBOY 45:2aa9f933c8d2 198 IPlatformFactory getPlatformFactory();
TMBOY 45:2aa9f933c8d2 199
TMBOY 45:2aa9f933c8d2 200 DialogRequestIdHandler getDialogRequestIdHandler();
TMBOY 45:2aa9f933c8d2 201
TMBOY 45:2aa9f933c8d2 202 IMessageSender getMessageSender();
TMBOY 45:2aa9f933c8d2 203
TMBOY 45:2aa9f933c8d2 204 BaseMultiChannelMediaPlayer getMultiChannelMediaPlayer();
TMBOY 45:2aa9f933c8d2 205
TMBOY 45:2aa9f933c8d2 206 void addDeviceModule(BaseDeviceModule deviceModule);
TMBOY 45:2aa9f933c8d2 207
TMBOY 45:2aa9f933c8d2 208 DcsResponseDispatcher getResponseDispatcher();
TMBOY 45:2aa9f933c8d2 209 }
TMBOY 45:2aa9f933c8d2 210 }