123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944 |
- package kr.co.icontrols.callengine.pstn;
- import android.content.ComponentName;
- import android.content.Context;
- import android.content.Intent;
- import android.content.ServiceConnection;
- import android.media.AudioManager;
- import android.media.ToneGenerator;
- import android.os.Handler;
- import android.os.IBinder;
- import android.os.Looper;
- import android.os.Message;
- import android.os.Messenger;
- import android.util.Log;
- import com.artncore.wallpadapi.IGW300API;
- import com.util.LogUtil;
- import kr.co.icontrols.callengine.engine.CallManager.CALLEVENTTYPE;
- import kr.co.icontrols.callengine.engine.CallManager.CALLPATH;
- import kr.co.icontrols.callengine.engine.CallManager.CALLSTATUS;
- import kr.co.icontrols.callengine.pstn.ATCmds.PSTNHANDLERMSG;
- import kr.co.icontrols.wallpadcall.MainActivity;
- import kr.co.icontrols.wallpadcall.declare.DataClasses.RemoteIDInfo;
- import kr.co.icontrols.wallpadcall.declare.DataClasses.PSTNInfo;
- import kr.co.icontrols.wallpadcall.declare.Declare.IGW300CMD;
- import kr.co.icontrols.wallpadcall.declare.Global;
- import kr.co.icontrols.wallpadcall.declare.Global.BOARD_TYPE;
- import kr.co.icontrols.wallpadcall.declare.Global.ConfigValues;
- import kr.co.icontrols.wallpadcall.screen.TalkPSTN;
- import kr.co.icontrols.wallpadsupport.Version;
- public class PSTNController {
- String TAG = "PSTNController";
- boolean bLOG = true;
- private void LOG(String log) {
- if (bLOG) Log.v(TAG, log);
- }
- boolean bLOG_DEBUG = true;
- private void LOG_DEBUG(String log) {
- if (bLOG_DEBUG) Log.d(TAG, log);
- }
- boolean bLOG_INFO = true;
- private void LOG_INFO(String log) {
- if (bLOG_INFO) Log.i(TAG, log);
- }
- boolean bLOG_WARN = true;
- private void LOG_WARN(String log) {
- if (bLOG_WARN) Log.w(TAG, log);
- }
- Context mContext;
- Messenger mRemoteMsn;
- Messenger mLocalMsn = new Messenger(new PSTNControllerHandler());
- PSTNInfo mPSTNInfo;
- public PSTNController(Context context) {
- try {
- LOG("[PSTNController]");
- mContext = context;
- if (ConfigValues.DEVICE_BOARDTYPE == BOARD_TYPE.V40_IGW300) {
- Global.bEnablePSTN = true;
- startGWDTMFSender();
- }
- else if (ConfigValues.DEVICE_BOARDTYPE == BOARD_TYPE.V40 || ConfigValues.DEVICE_BOARDTYPE == BOARD_TYPE.V40_IGW300_NOUGAT || ConfigValues.DEVICE_BOARDTYPE == BOARD_TYPE.V40_NOUGAT) {
- Global.bEnablePSTN = true;
- mToneGenerator = new ToneGenerator(AudioManager.STREAM_DTMF, ToneGenerator.MAX_VOLUME);
- startGWDTMFSender();
- }
- else {
- mContext.startService(new Intent(mContext, PSTNSerialManager.class));
- bindPSTNSerialManagerService();
- }
- mPSTNInfo = new PSTNInfo();
- } catch (RuntimeException re) {
- LogUtil.errorLogInfo("", TAG, re);
- } catch (Exception e) {
- Log.e(TAG, "[Exception] PSTNController()");
- //e.printStackTrace();
- LogUtil.errorLogInfo("", TAG, e);
- }
- }
- public void releasePSTNController() {
- try {
- // if (ConfigValues.eWallPadType == Global.WALLPADTYPE.MAIN) {
- // if (ConfigValues.bPSTNEnable) {
- // sendReject();
- // sendHookOffDelay();
- // }
- // }
- // else {
- // if (ConfigValues.eSubWallPadPSTNType == Global.SUBWALLPAD_PSTNTYPE.DIRECT) {
- // sendReject();
- // sendHookOffDelay();
- // }
- // }
- if (mPSTNPathCheckHandler != null) {
- mPSTNPathCheckHandler.removeMessages(0);
- mPSTNPathCheckHandler.removeMessages(1);
- mPSTNPathCheckHandler.removeMessages(2);
- mPSTNPathCheckHandler.removeMessages(3);
- }
- if (ConfigValues.DEVICE_BOARDTYPE == BOARD_TYPE.V40_IGW300) {
- stopGWDTMFSender();
- }
- else if (ConfigValues.DEVICE_BOARDTYPE == BOARD_TYPE.V40 || ConfigValues.DEVICE_BOARDTYPE == BOARD_TYPE.V40_IGW300_NOUGAT || ConfigValues.DEVICE_BOARDTYPE == BOARD_TYPE.V40_NOUGAT) {
- if (mToneGenerator != null) {
- mToneGenerator.stopTone();
- mToneGenerator.release();
- mToneGenerator = null;
- }
- stopGWDTMFSender();
- }
- else {
- unbindPSTNSerialManagerService();
- }
- stopPSTNRingCntThread();
- } catch (RuntimeException re) {
- LogUtil.errorLogInfo("", TAG, re);
- } catch (Exception e) {
- Log.e(TAG, "[Exception] releasePSTNController()");
- //e.printStackTrace();
- LogUtil.errorLogInfo("", TAG, e);
- }
- }
- private void bindPSTNSerialManagerService() {
- try {
- mContext.bindService(new Intent(mContext, PSTNSerialManager.class), mServiceConnection, Context.BIND_AUTO_CREATE);
- } catch (RuntimeException re) {
- LogUtil.errorLogInfo("", TAG, re);
- } catch (Exception e) {
- Log.e(TAG, "[Exception] bindPSTNSerialManagerService()");
- //e.printStackTrace();
- LogUtil.errorLogInfo("", TAG, e);
- }
- }
- private void unbindPSTNSerialManagerService() {
- try {
- ctrlRemoteServiceRegister(false);
- mContext.unbindService(mServiceConnection);
- } catch (RuntimeException re) {
- LogUtil.errorLogInfo("", TAG, re);
- } catch (Exception e) {
- Log.e(TAG, "[Exception] unbindPSTNSerialManagerService()");
- //e.printStackTrace();
- LogUtil.errorLogInfo("", TAG, e);
- }
- }
- ServiceConnection mServiceConnection = new ServiceConnection() {
- @Override
- public void onServiceConnected(ComponentName name, IBinder service) {
- try {
- LOG_INFO("[mServiceConnection.onServiceConnected] name [" + name + "], service [" + service + "]");
- mRemoteMsn = new Messenger(service);
- ctrlRemoteServiceRegister(true);
- } catch (RuntimeException re) {
- LogUtil.errorLogInfo("", TAG, re);
- } catch (Exception e) {
- Log.e(TAG, "[Exception] mServiceConnection.onServiceConnected(ComponentName name, IBinder service)");
- //e.printStackTrace();
- LogUtil.errorLogInfo("", TAG, e);
- }
- }
- @Override
- public void onServiceDisconnected(ComponentName name) {
- try {
- LOG_INFO("[mServiceConnection.onServiceDisconnected] name [" + name + "]");
- mRemoteMsn = null;
- } catch (RuntimeException re) {
- LogUtil.errorLogInfo("", TAG, re);
- } catch (Exception e) {
- Log.e(TAG, "[Exception] mServiceConnection.onServiceDisconnected(ComponentName name)");
- //e.printStackTrace();
- LogUtil.errorLogInfo("", TAG, e);
- }
- }
- };
- private void ctrlRemoteServiceRegister(boolean bRegister) {
- try {
- LOG_INFO("[ctrlRemoteServiceRegister] bRegister [" + bRegister + "]");
- if (mRemoteMsn != null) {
- Message msg;
- if (bRegister) {
- msg = Message.obtain(null, PSTNHANDLERMSG.REGISTER, 0, 0, TAG);
- } else {
- msg = Message.obtain(null, PSTNHANDLERMSG.UNREGISTER, 0, 0, TAG);
- }
- msg.replyTo = mLocalMsn;
- mRemoteMsn.send(msg);
- } else {
- LOG_WARN("[ctrlRemoteServiceRegister] mRemoteMsn is null!! bRegister [" + bRegister + "]");
- }
- } catch (RuntimeException re) {
- LogUtil.errorLogInfo("", TAG, re);
- } catch (Exception e) {
- Log.e(TAG, "[Exception] ctrlRemoteServiceRegister(boolean bRegister)");
- //e.printStackTrace();
- LogUtil.errorLogInfo("", TAG, e);
- }
- }
- public void sendMsgToLocalService(int nMsg, String strMessage) {
- try {
- if (mLocalMsn != null) {
- Message msg = Message.obtain(null, nMsg, 0, 0, strMessage);
- mLocalMsn.send(msg);
- } else {
- LOG_WARN("[sendMsgToLocalService] mLocalMsn is null!! nMsg [" + nMsg + "], strMessage [" + strMessage + "]");
- }
- } catch (RuntimeException re) {
- LogUtil.errorLogInfo("", TAG, re);
- } catch (Exception e) {
- Log.e(TAG, "[Exception] sendMsgToLocalService(int nMsg, String strMessage)");
- //e.printStackTrace();
- LogUtil.errorLogInfo("", TAG, e);
- }
- }
- public void sendMsgToRemoteService(int nMsg, String strMessage) {
- try {
- if (mRemoteMsn != null) {
- Message msg = Message.obtain(null, nMsg, 0, 0, strMessage);
- mRemoteMsn.send(msg);
- } else {
- LOG_WARN("[sendMsgToRemoteService] mRemoteMsn is null!! nMsg [" + nMsg + "], strMessage [" + strMessage + "]");
- }
- } catch (RuntimeException re) {
- LogUtil.errorLogInfo("", TAG, re);
- } catch (Exception e) {
- Log.e(TAG, "[Exception] sendMsgToRemoteService(int nMsg, String strMessage)");
- //e.printStackTrace();
- LogUtil.errorLogInfo("", TAG, e);
- }
- }
- class PSTNControllerHandler extends Handler {
- @Override
- public void handleMessage(Message msg) {
- LOG("[PSTNControllerHandler] what [" + msg.what + "], arg1 [" + msg.arg1 + "], arg2 [" + msg.arg2 + "], obj [" + msg.obj + "]");
- switch (msg.what) {
- case PSTNHANDLERMSG.RECEIVE_RING:
- LOG_INFO("[PSTNControllerHandler] PSTNHANDLERMSG.RECEIVE_RING");
- // if (ConfigValues.DEVICE_BOARDTYPE == BOARD_TYPE.V40_IGW300 || ConfigValues.DEVICE_BOARDTYPE == BOARD_TYPE.V40_IGW300_NOUGAT) {
- // MainActivity.mCallController.onPSTNEvent(CALLEVENTTYPE.RECEIVE_CALL, null, null);
- // Log.d(TAG, "[PSTNControllerHandler] bARSEnable [" + ConfigValues.bARSEnable + "], bUnoccupiedMode [" + ConfigValues.bUnoccupiedMode + "]");
- // if (ConfigValues.bPSTNEnable && ConfigValues.bARSEnable && ConfigValues.bUnoccupiedMode) {
- // ((MainActivity) mContext).sendHandlerMsgDelayed(MainActivity.HANDLERMSG.SEND_PSTN_ARS_MODE, 0, 0, 3000);
- // }
- // }
- // else receivePSTNRing();
- receivePSTNRing();
- break;
- case PSTNHANDLERMSG.RECEIVE_RING_END:
- LOG_INFO("[PSTNControllerHandler] PSTNHANDLERMSG.RECEIVE_RING_END");
- if (MainActivity.mCallController != null && MainActivity.mCallController.mCallInfo != null && MainActivity.mCallController.mCallInfo.getPSTN() == CALLSTATUS.CALLED) {
- MainActivity.mCallController.onPSTNEvent(CALLEVENTTYPE.TERMINATE_CALL, null, null);
- }
- break;
- case PSTNHANDLERMSG.RECEIVE_DDU:
- LOG_INFO("[PSTNControllerHandler] PSTNHANDLERMSG.RECEIVE_DDU");
- break;
- case PSTNHANDLERMSG.RECEIVE_CID_DATE:
- LOG_INFO("[PSTNControllerHandler] PSTNHANDLERMSG.RECEIVE_CID_DATE");
- mPSTNInfo.initVariables();
- mPSTNInfo.setPSTN_DATE(msg.obj.toString());
- break;
- case PSTNHANDLERMSG.RECEIVE_CID_TIME:
- LOG_INFO("[PSTNControllerHandler] PSTNHANDLERMSG.RECEIVE_CID_TIME");
- mPSTNInfo.setPSTN_TIME(msg.obj.toString());
- break;
- case PSTNHANDLERMSG.RECEIVE_CID_NMBR:
- LOG_INFO("[PSTNControllerHandler] PSTNHANDLERMSG.RECEIVE_CID_NMBR");
- mPSTNInfo.setPSTN_CID(msg.obj.toString());
- MainActivity.mCallController.onPSTNEvent(CALLEVENTTYPE.CALLERID, mPSTNInfo, null);
- break;
- case PSTNHANDLERMSG.RECEIVE_DTMF:
- LOG_INFO("[PSTNControllerHandler] PSTNHANDLERMSG.RECEIVE_DTMF");
- MainActivity.mCallController.onPSTNEvent(CALLEVENTTYPE.PSTN_DTMF, null, msg.obj.toString());
- break;
- default:
- break;
- }
- }
- }
- public void sendHookOn() {
- try {
- if (ConfigValues.DEVICE_BOARDTYPE == BOARD_TYPE.V40_IGW300 || ConfigValues.DEVICE_BOARDTYPE == BOARD_TYPE.V40_IGW300_NOUGAT) {
- ((MainActivity) mContext).sendPSTNRingEndBR();
- ((MainActivity) mContext).sendHandlerMsgDelayed(IGW300CMD.AUDIO_PSTN_WALLPAD, 0, 0, 1000); // 패스변경 후 릴레이 제어 delay (seulki)
- } else if (ConfigValues.DEVICE_BOARDTYPE == BOARD_TYPE.V40 || ConfigValues.DEVICE_BOARDTYPE == BOARD_TYPE.V40_NOUGAT) {
- MainActivity.mIOInterface.ctrlPSTNHookOn(true);
- MainActivity.mIOInterface.ctrlSetTalkPathPSTN();
- } else {
- sendMsgToRemoteService(PSTNHANDLERMSG.SEND_HOOK_ON, null);
- stopPSTNRingCntThread();
- }
- } catch (RuntimeException re) {
- LogUtil.errorLogInfo("", TAG, re);
- } catch (Exception e) {
- Log.e(TAG, "[Exception] sendHookOn()");
- //e.printStackTrace();
- LogUtil.errorLogInfo("", TAG, e);
- }
- }
- public void sendHookOff() {
- try {
- LOG("[sendHookOff]");
- if (ConfigValues.DEVICE_BOARDTYPE == BOARD_TYPE.V40_IGW300 || ConfigValues.DEVICE_BOARDTYPE == BOARD_TYPE.V40_IGW300_NOUGAT) {
- ((MainActivity) mContext).sendPSTNRingEndBR();
- ((MainActivity) mContext).sendHandlerMsg(IGW300CMD.AUDIO_OFF, 2, 0);
- } else if (ConfigValues.DEVICE_BOARDTYPE == BOARD_TYPE.V40 || ConfigValues.DEVICE_BOARDTYPE == BOARD_TYPE.V40_NOUGAT) {
- MainActivity.mIOInterface.ctrlPSTNHookOn(false);
- } else {
- sendMsgToRemoteService(PSTNHANDLERMSG.SEND_HOOK_OFF, null);
- }
- } catch (RuntimeException re) {
- LogUtil.errorLogInfo("", TAG, re);
- } catch (Exception e) {
- Log.e(TAG, "[Exception] sendHookOff()");
- //e.printStackTrace();
- LogUtil.errorLogInfo("", TAG, e);
- }
- }
- public void sendHookOffDelay() {
- try {
- sendMsgToRemoteService(PSTNHANDLERMSG.SEND_HOOK_OFF_DELAY, null);
- } catch (RuntimeException re) {
- LogUtil.errorLogInfo("", TAG, re);
- } catch (Exception e) {
- Log.e(TAG, "[Exception] sendHookOffDelay()");
- //e.printStackTrace();
- LogUtil.errorLogInfo("", TAG, e);
- }
- }
- public void sendGetPSTNPath() {
- try {
- sendMsgToRemoteService(PSTNHANDLERMSG.SEND_GET_PSTN_PATH, null);
- } catch (RuntimeException re) {
- LogUtil.errorLogInfo("", TAG, re);
- } catch (Exception e) {
- Log.e(TAG, "[Exception] sendGetPSTNPath()");
- //e.printStackTrace();
- LogUtil.errorLogInfo("", TAG, e);
- }
- }
- public void sendReject() {
- try {
- LOG("[sendReject]");
- if (ConfigValues.DEVICE_BOARDTYPE == BOARD_TYPE.V40_IGW300 || ConfigValues.DEVICE_BOARDTYPE == BOARD_TYPE.V40_IGW300_NOUGAT) {
- // ((MainActivity) mContext).sendHandlerMsg(IGW300CMD.AUDIO_PSTN_REJECT, 0, 0); // 핸들러로 동작시니키, 메시지가 전달되는 지연이 발생한다.
- if (ConfigValues.DEVICE_MODELTYPE == Version.MODEL_TYPE.IHN_D101 || ConfigValues.DEVICE_MODELTYPE == Version.MODEL_TYPE.IHN_D101_I || ConfigValues.DEVICE_MODELTYPE == Version.MODEL_TYPE.IHN_D101_I_LX2
- || ConfigValues.DEVICE_MODELTYPE == Version.MODEL_TYPE.IHN_D101K || ConfigValues.DEVICE_MODELTYPE == Version.MODEL_TYPE.IHN_D101K_I
- || ConfigValues.DEVICE_MODELTYPE == Version.MODEL_TYPE.IHN_D101_I_OCF) {
- ((MainActivity) mContext).sendPSTNRingEndBR();
- }
- if (MainActivity.mIOInterface != null) MainActivity.mIOInterface.IGW300_CallPathCtrl(IGW300API.TEL_PATH.WPAD_TEL);
- else Log.d(TAG, "[sendReject] mIOInterface is null!! -> IGW300_CallPathCtrl(IGW300API.TEL_PATH.WPAD_TEL)");
- Thread.sleep(500); // 수신 후 종료
- if (MainActivity.mIOInterface != null) MainActivity.mIOInterface.IGW300_CallPathCtrl(IGW300API.TEL_PATH.OFF);
- else Log.d(TAG, "[MainHandler] mIOInterface is null!! -> IGW300_CallPathCtrl(IGW300API.TEL_PATH.OFF)");
- }
- else if (ConfigValues.DEVICE_BOARDTYPE == BOARD_TYPE.V40 || ConfigValues.DEVICE_BOARDTYPE == BOARD_TYPE.V40_NOUGAT) {
- MainActivity.mIOInterface.ctrlPSTNHookOn(true);
- Thread.sleep(500); // 수신 후 종료
- MainActivity.mIOInterface.ctrlPSTNHookOn(false);
- }
- else {
- // 모뎀을 사용하는 경우
- sendMsgToRemoteService(PSTNHANDLERMSG.SEND_REJECT, null);
- stopPSTNRingCntThread();
- }
- } catch (RuntimeException re) {
- LogUtil.errorLogInfo("", TAG, re);
- } catch (Exception e) {
- Log.e(TAG, "[Exception] sendReject()");
- //e.printStackTrace();
- LogUtil.errorLogInfo("", TAG, e);
- }
- }
- public void sendDial(String strDialNo) {
- try {
- sendMsgToRemoteService(PSTNHANDLERMSG.SEND_DIAL, strDialNo);
- } catch (RuntimeException re) {
- LogUtil.errorLogInfo("", TAG, re);
- } catch (Exception e) {
- Log.e(TAG, "[Exception] sendDial(String strDialNo)");
- //e.printStackTrace();
- LogUtil.errorLogInfo("", TAG, e);
- }
- }
- public void sendDTMF(String strDTMF) {
- try {
- if (ConfigValues.DEVICE_BOARDTYPE == BOARD_TYPE.V40_IGW300 || ConfigValues.DEVICE_BOARDTYPE == BOARD_TYPE.V40
- || ConfigValues.DEVICE_BOARDTYPE == BOARD_TYPE.V40_IGW300_NOUGAT || ConfigValues.DEVICE_BOARDTYPE == BOARD_TYPE.V40_NOUGAT) {
- bAutoSend = false;
- addGWDTMFBuffer(strDTMF);
- }
- else {
- sendMsgToRemoteService(PSTNHANDLERMSG.SEND_DTMF, strDTMF);
- }
- } catch (RuntimeException re) {
- LogUtil.errorLogInfo("", TAG, re);
- } catch (Exception e) {
- Log.e(TAG, "[Exception] sendDTMF(String strDTMF)");
- //e.printStackTrace();
- LogUtil.errorLogInfo("", TAG, e);
- }
- }
- String strDTMFNo = "";
- public void sendHookOnNDialNo(String strDialNo) {
- try {
- Log.d(TAG, "[sendHookOnNDialNo] strDialNo [" + strDialNo + "], DEVICE_BOARDTYPE [" + ConfigValues.DEVICE_BOARDTYPE + "]");
- if (ConfigValues.DEVICE_BOARDTYPE == BOARD_TYPE.V40_IGW300) {
- // 월패드 키패드를 통해 전화 걸 때
- MainActivity.mIOInterface.setDTMFOutDelayTime(200); // DTMF Delay Time
- MainActivity.mIOInterface.setDTMFOutOnOff(true); // DTMF OUT Enable
- MainActivity.mIOInterface.setDTMFInOnOff(true); // DTMF IN Enable
- ((MainActivity) mContext).sendHandlerMsgDelayed(IGW300CMD.AUDIO_PSTN_WALLPAD, 0, 0, 1000); // 패스변경 후 릴레이 제어 delay (seulki)
- sendHandlerMsgDelayed(GWPSTNHANDLERMSG.SEND_DTMF, 0, 0, strDialNo, 2500); // send dial (delay 조정 seulki)
- }
- else if (ConfigValues.DEVICE_BOARDTYPE == BOARD_TYPE.V40_IGW300_NOUGAT) {
- // ((MainActivity) mContext).sendHandlerMsgDelayed(IGW300CMD.AUDIO_PSTN_WALLPAD, 0, 0, 1000); // 패스변경 후 릴레이 제어 delay (seulki)
- // MainActivity.mCallController.setTalkPath(CALLPATH.DTMF); // DTMF 톤을 PhoneOut 라인을 통해 외부로 전달하기 위한 오디오모드 셋팅
- // strDTMFNo = strDialNo;
- // mPSTNPathCheckHandler.sendEmptyMessage(0); // DTMF 패스 변경 후 DTMF 송신
- // 기존
- ((MainActivity) mContext).sendHandlerMsgDelayed(IGW300CMD.AUDIO_PSTN_WALLPAD, 0, 0, 1000); // 패스변경 후 릴레이 제어 delay (seulki)
- strDTMFNo = strDialNo;
- sendHandlerMsgDelayed(GWPSTNHANDLERMSG.SEND_DTMF, 0, 0, strDTMFNo, 3000); // DTMF 송신
- }
- else if (ConfigValues.DEVICE_BOARDTYPE == BOARD_TYPE.V40) {
- MainActivity.mIOInterface.ctrlPSTNHookOn(true);
- MainActivity.mIOInterface.ctrlSetTalkPathPSTN();
- MainActivity.mCallController.setTalkPath(CALLPATH.DTMF); // DTMF 톤을 PhoneOut 라인을 통해 외부로 전달하기 위한 오디오모드 셋팅
- strDTMFNo = strDialNo;
- mPSTNPathCheckHandler.sendEmptyMessage(0); // DTMF 패스 변경 후 DTMF 송신
- }
- else if (ConfigValues.DEVICE_BOARDTYPE == BOARD_TYPE.V40_NOUGAT) {
- MainActivity.mIOInterface.ctrlPSTNHookOn(true);
- MainActivity.mIOInterface.ctrlSetTalkPathPSTN();
- MainActivity.mCallController.setTalkPath(CALLPATH.DTMF); // DTMF 톤을 PhoneOut 라인을 통해 외부로 전달하기 위한 오디오모드 셋팅
- strDTMFNo = strDialNo;
- mPSTNPathCheckHandler.sendEmptyMessage(0); // DTMF 패스 변경 후 DTMF 송신
- }
- else {
- sendMsgToRemoteService(PSTNHANDLERMSG.SEND_HOOKON_DIAL, strDialNo);
- }
- } catch (RuntimeException re) {
- LogUtil.errorLogInfo("", TAG, re);
- } catch (Exception e) {
- Log.e(TAG, "[Exception] sendHookOnDialNo()");
- //e.printStackTrace();
- LogUtil.errorLogInfo("", TAG, e);
- }
- }
- public void cancelSendDTMF() {
- try {
- sendHandlerMsgDelayed(GWPSTNHANDLERMSG.CANCEL_SEND_DTMF, 0, 0, null, 0); // DTMF 송신
- } catch (RuntimeException re) {
- LogUtil.errorLogInfo("", TAG, re);
- } catch (Exception e) {
- Log.e(TAG, "[Exception] cancelSendDTMF()");
- //e.printStackTrace();
- LogUtil.errorLogInfo("", TAG, e);
- }
- }
- public void receivePSTNRing() {
- try {
- Log.e(TAG, "[receivePSTNRing] nRingCnt [" + nRingCnt + "]");
- if (0 < nRingCnt) {
- nRingCnt = nRINGINGCNT;
- mPSTNInfo.printValue();
- Log.d(TAG, "[receivePSTNRing] bARSEnable: " + ConfigValues.bARSEnable + ", bUnoccupiedMode: " + ConfigValues.bUnoccupiedMode);
- if (ConfigValues.bPSTNEnable && ConfigValues.bARSEnable && ConfigValues.bUnoccupiedMode)
- MainActivity.mCallController.onPSTNEvent(CALLEVENTTYPE.PSTN_RING, null, null);
- }
- else {
- startPSTNRingCntThread();
- }
- } catch (RuntimeException re) {
- LogUtil.errorLogInfo("", TAG, re);
- } catch (Exception e) {
- Log.e(TAG, "[Exception] receivePSTNRing()");
- //e.printStackTrace();
- LogUtil.errorLogInfo("", TAG, e);
- }
- }
- private void startPSTNRingCntThread() {
- try {
- Log.e(TAG, "[startPSTNRingCntThread]");
- if (mPSTNRingCntThread != null) {
- stopPSTNRingCntThread();
- }
- MainActivity.mCallController.onPSTNEvent(CALLEVENTTYPE.RECEIVE_CALL, null, null);
- nRingCnt = nRINGINGCNT;
- bRingCntEnable = true;
- Log.e(TAG, "[startPSTNRingCntThread] ========= PSTNRingCntThread START =========");
- mPSTNRingCntThread = new PSTNRingCntThread();
- mPSTNRingCntThread.start();
- } catch (RuntimeException re) {
- LogUtil.errorLogInfo("", TAG, re);
- } catch (Exception e) {
- Log.e(TAG, "[Exception] startPSTNRingCntThread()");
- //e.printStackTrace();
- LogUtil.errorLogInfo("", TAG, e);
- }
- }
- public void stopPSTNRingCntThread() {
- try {
- nRingCnt = -99;
- bRingCntEnable = false;
- mPSTNRingCntThread = null;
- Log.d(TAG, "[stopPSTNRingCntThread] ========= PSTNRingCntThread END!!! =========");
- } catch (RuntimeException re) {
- LogUtil.errorLogInfo("", TAG, re);
- } catch (Exception e) {
- Log.e(TAG, "[Exception] stopPSTNRingCntThread()");
- //e.printStackTrace();
- LogUtil.errorLogInfo("", TAG, e);
- }
- }
- public boolean isPSTNReceiving() {
- try {
- return bRingCntEnable;
- } catch (RuntimeException re) {
- LogUtil.errorLogInfo("", TAG, re);
- return false;
- } catch (Exception e) {
- Log.e(TAG, "[Exception] isPSTNReceiving()");
- //e.printStackTrace();
- LogUtil.errorLogInfo("", TAG, e);
- return false;
- }
- }
- public void clearPSTNCall() {
- try {
- stopPSTNRingCntThread();
- } catch (RuntimeException re) {
- LogUtil.errorLogInfo("", TAG, re);
- } catch (Exception e) {
- Log.e(TAG, "[Exception] clearPSTNCall()");
- //e.printStackTrace();
- LogUtil.errorLogInfo("", TAG, e);
- }
- }
- public void initPSTNModem() {
- try {
- sendMsgToRemoteService(PSTNHANDLERMSG.INIT_PSTNMODEM, null);
- } catch (RuntimeException re) {
- LogUtil.errorLogInfo("", TAG, re);
- } catch (Exception e) {
- Log.e(TAG, "[Exception] initPSTNModem()");
- //e.printStackTrace();
- LogUtil.errorLogInfo("", TAG, e);
- }
- }
- boolean bRingCntEnable = false;
- int nRINGINGCNT = 10; // PSTN 링의 최대 간격
- int nRingCnt = 0; // PSTN 링 타임아웃
- PSTNRingCntThread mPSTNRingCntThread;
- class PSTNRingCntThread extends Thread {
- @Override
- public void run() {
- try {
- while (0 < nRingCnt && bRingCntEnable) {
- Log.e(TAG, "[PSTNRingCntThread.run()] nRingCnt [" + nRingCnt + "], bRingCntEnable [" + bRingCntEnable + "]");
- Thread.sleep(1000);
- nRingCnt--;
- }
- Log.e(TAG, "[PSTNRingCntThread.run()] nRingCnt [" + nRingCnt + "], bRingCntEnable [" + bRingCntEnable + "]");
- sendMsgToLocalService(PSTNHANDLERMSG.RECEIVE_RING_END, null);
- stopPSTNRingCntThread();
- } catch (RuntimeException re) {
- LogUtil.errorLogInfo("", TAG, re);
- } catch (Exception e) {
- Log.e(TAG, "[Exception] PSTNRingCntThread().run() : " + e);
- //e.printStackTrace();
- LogUtil.errorLogInfo("", TAG, e);
- }
- }
- }
- ToneGenerator mToneGenerator;
- public void sendDTMFNo(boolean bAutoSend, String strNo) {
- try {
- LOG("[sendDTMFNo] bAutoSend [" + bAutoSend + "], strNo [" + strNo + "]");
- if (ConfigValues.DEVICE_BOARDTYPE == BOARD_TYPE.V40 || ConfigValues.DEVICE_BOARDTYPE == BOARD_TYPE.V40_NOUGAT) {
- if (strNo.equals("")) {
- // DTMF 전송 이후 패스 변경
- sendHandlerMsgDelayed(GWPSTNHANDLERMSG.SETTALKPATH_PSTN, 0, 0, null, 1000);
- return;
- }
- }
- int nNo = -1;
- if (strNo.equals("0")) nNo = 0;
- else if (strNo.equals("1")) nNo = 1;
- else if (strNo.equals("2")) nNo = 2;
- else if (strNo.equals("3")) nNo = 3;
- else if (strNo.equals("4")) nNo = 4;
- else if (strNo.equals("5")) nNo = 5;
- else if (strNo.equals("6")) nNo = 6;
- else if (strNo.equals("7")) nNo = 7;
- else if (strNo.equals("8")) nNo = 8;
- else if (strNo.equals("9")) nNo = 9;
- else if (strNo.equals("*")) {
- if (ConfigValues.DEVICE_BOARDTYPE == BOARD_TYPE.V40_IGW300) nNo = 14;
- else nNo = 10;
- } else if (strNo.equals("#")) {
- if (ConfigValues.DEVICE_BOARDTYPE == BOARD_TYPE.V40_IGW300) nNo = 15;
- else nNo = 11;
- }
- int nDelayTime = 0;
- if (bAutoSend) nDelayTime = 1000;
- if (nNo >= 0) {
- if (ConfigValues.DEVICE_BOARDTYPE == BOARD_TYPE.V40_IGW300) sendHandlerMsgDelayed(GWPSTNHANDLERMSG.SEND_DTMFNO_V40_IGW300, 0, 0, String.valueOf(nNo), nDelayTime);
- else sendHandlerMsgDelayed(GWPSTNHANDLERMSG.START_TONE, nDelayTime, 0, String.valueOf(nNo), nDelayTime); // DTMF 송신 (ToneGenerator - 각 번호별 Interval: 1s)
- }
- } catch (RuntimeException re) {
- LogUtil.errorLogInfo("", TAG, re);
- } catch (Exception e) {
- Log.e(TAG, "[Exception] sendDTMFNo(String strNo)");
- //e.printStackTrace();
- LogUtil.errorLogInfo("", TAG, e);
- }
- }
- private void startGWDTMFSender() {
- try {
- LOG("[startGWDTMFSender]");
- runDTMFSender(true);
- mGWDTMFSenderThread = new GWDTMFSenderThread();
- mGWDTMFSenderThread.start();
- } catch (RuntimeException re) {
- LogUtil.errorLogInfo("", TAG, re);
- } catch (Exception e) {
- Log.e(TAG, "[Exception] startGWDTMFSender()");
- //e.printStackTrace();
- LogUtil.errorLogInfo("", TAG, e);
- }
- }
- private void stopGWDTMFSender() {
- try {
- LOG("[stopGWDTMFSender]");
- if (bSenderRun) runDTMFSender(false);
- if (mGWDTMFSenderThread != null) {
- mGWDTMFSenderThread = null;
- }
- } catch (RuntimeException re) {
- LogUtil.errorLogInfo("", TAG, re);
- } catch (Exception e) {
- Log.e(TAG, "[Exception] stopGWDTMFSender()");
- //e.printStackTrace();
- LogUtil.errorLogInfo("", TAG, e);
- }
- }
- public void runDTMFSender(boolean bRun) {
- try {
- LOG("[runDTMFSender] bRun [" + bRun + "]");
- if (!bRun && mGWDTMFSendDataBuilder != null) {
- mGWDTMFSendDataBuilder.delete(0, mGWDTMFSendDataBuilder.length());
- LOG("[runDTMFSender] mGWDTMFSendDataBuilder [" + mGWDTMFSendDataBuilder.toString() + "]");
- }
- bSenderRun = bRun;
- } catch (RuntimeException re) {
- LogUtil.errorLogInfo("", TAG, re);
- } catch (Exception e) {
- Log.e(TAG, "[Exception] runDTMFSender(boolean bRun)");
- //e.printStackTrace();
- LogUtil.errorLogInfo("", TAG, e);
- }
- }
- public void addGWDTMFBuffer(String strDTMF) {
- try {
- LOG("[addGWDTMFBuffer] strDTMF [" + strDTMF + "]");
- mGWDTMFSendDataBuilder.append(strDTMF);
- } catch (RuntimeException re) {
- LogUtil.errorLogInfo("", TAG, re);
- } catch (Exception e) {
- Log.e(TAG, "[Exception] addGWDTMFBuffer(String strDTMF)");
- //e.printStackTrace();
- LogUtil.errorLogInfo("", TAG, e);
- }
- }
- public void cancelGWDTMFBuffer() {
- try {
- LOG("[cancelGWDTMFBuffer] Before mGWDTMFSendDataBuilder [" + mGWDTMFSendDataBuilder.toString() + "]");
- mGWDTMFSendDataBuilder.delete(0, mGWDTMFSendDataBuilder.length());
- LOG("[cancelGWDTMFBuffer] After mGWDTMFSendDataBuilder [" + mGWDTMFSendDataBuilder.toString() + "]");
- } catch (RuntimeException re) {
- LogUtil.errorLogInfo("", TAG, re);
- } catch (Exception e) {
- Log.e(TAG, "[Exception] addGWDTMFBuffer(String strDTMF)");
- //e.printStackTrace();
- LogUtil.errorLogInfo("", TAG, e);
- }
- }
- static StringBuilder mGWDTMFSendDataBuilder = new StringBuilder();
- boolean bSenderRun = false;
- boolean bAutoSend = true;
- private GWDTMFSenderThread mGWDTMFSenderThread;
- private class GWDTMFSenderThread extends Thread {
- String strSendingDTMF = "";
- public GWDTMFSenderThread() {
- LOG_INFO("[GWDTMFSenderThread()] ===== START =====");
- }
- public void run() {
- try {
- LOG_INFO("[GWDTMFSenderThread().run()] bSenderRun [" + bSenderRun + "], bAutoSend [" + bAutoSend + "]");
- while (bSenderRun) {
- // LOG_INFO("[GWDTMFSenderThread().run()] bSenderRun [" + bSenderRun + "]");
- if (0 < mGWDTMFSendDataBuilder.length()) {
- LOG_INFO("[GWDTMFSenderThread().run()] mGWDTMFSendDataBuilder.toString() [" + mGWDTMFSendDataBuilder.toString() + "]");
- strSendingDTMF = String.valueOf(mGWDTMFSendDataBuilder.charAt(0));
- sendDTMFNo(bAutoSend, strSendingDTMF);
- // 각각의 DTMF 신호사이에 딜레이를 준다.
- if (ConfigValues.DEVICE_BOARDTYPE == BOARD_TYPE.V40_IGW300) {
- if (bAutoSend) Thread.sleep(70);
- }
- else if (ConfigValues.DEVICE_BOARDTYPE == BOARD_TYPE.V40 || ConfigValues.DEVICE_BOARDTYPE == BOARD_TYPE.V40_IGW300_NOUGAT || ConfigValues.DEVICE_BOARDTYPE == BOARD_TYPE.V40_NOUGAT) {
- if (bAutoSend) {
- Thread.sleep(400);
- // LOG("[GWDTMFSenderThread().run()] Thread.sleep() bAutoCall [" + RemoteIDInfo.bAutoCall + "]");
- // if (RemoteIDInfo.bAutoCall) {
- // if (ConfigValues.DEVICE_MODELTYPE == Version.MODEL_TYPE.IHN_1020B_I) Thread.sleep(400); // AS와 같은 AutoCall일 경우 300ms로 term을 설정하면 전화발신이 잘못됨
- // }
- // else Thread.sleep(300);
- }
- }
- if (mGWDTMFSendDataBuilder.length() > 0) mGWDTMFSendDataBuilder.deleteCharAt(0);
- if (mGWDTMFSendDataBuilder.length() == 0) {
- RemoteIDInfo.bAutoCall = false;
- // LOG("[GWDTMFSenderThread().run()] bAutoCall [" + RemoteIDInfo.bAutoCall + "]");
- if (bAutoSend) {
- Log.d(TAG, "[mGWDTMFSendDataBuilder.run()] DTMF send Over!!");
- if (ConfigValues.DEVICE_BOARDTYPE == BOARD_TYPE.V40 || ConfigValues.DEVICE_BOARDTYPE == BOARD_TYPE.V40_NOUGAT) {
- sendDTMFNo(bAutoSend, ""); // DTMF 전송 끝을 알리기 위하여 빈스트링 전송 -> "" 전송시 패스 변경
- }
- }
- }
- }
- }
- } catch (RuntimeException re) {
- LogUtil.errorLogInfo("", TAG, re);
- } catch (Exception e) {
- Log.e(TAG, "[Exception] GWDTMFSenderThread.run()");
- //e.printStackTrace();
- LogUtil.errorLogInfo("", TAG, e);
- }
- }
- }
- public final class GWPSTNHANDLERMSG {
- public final static int SEND_DTMF = 100;
- public final static int CANCEL_SEND_DTMF = 110;
- public final static int SEND_DTMFNO_V40_IGW300 = 150;
- public final static int START_TONE = 200;
- public final static int SETTALKPATH_PSTN = 300;
- public final static int SETVOLUME_PSTN = 400;
- public final static int RELEASE_PSTN_END_BLOCK = 500;
- }
- public Handler GWPSTNHandler = new Handler(Looper.getMainLooper()) {
- public void handleMessage(Message msg) {
- LOG("[GWPSTNHandler] what [" + msg.what + "], arg1 [" + msg.arg1 + "], arg2 [" + msg.arg2 + "], obj [" + msg.obj + "]");
- switch (msg.what) {
- case GWPSTNHANDLERMSG.SEND_DTMF:
- addGWDTMFBuffer(msg.obj.toString());
- break;
- case GWPSTNHANDLERMSG.CANCEL_SEND_DTMF:
- cancelGWDTMFBuffer();
- break;
- case GWPSTNHANDLERMSG.SEND_DTMFNO_V40_IGW300:
- MainActivity.mIOInterface.sendDTMF(Integer.parseInt(msg.obj.toString()));
- break;
- case GWPSTNHANDLERMSG.START_TONE:
- LOG("[GWPSTNHandler] START_TONE nNo [" + msg.obj.toString() + "], nDelayTime [" + msg.arg1 + "]");
- int nDuration = 100;
- if (msg.arg1 > 0) nDuration = 200;
- if (mToneGenerator!= null) mToneGenerator.startTone(Integer.parseInt(msg.obj.toString()), nDuration);
- break;
- case GWPSTNHANDLERMSG.SETTALKPATH_PSTN:
- LOG("[GWPSTNHandler] SETTALKPATH_PSTN");
- if (MainActivity.mCallController.getTalkPath() != CALLPATH.PSTN) {
- MainActivity.mCallController.setTalkPath(CALLPATH.PSTN);
- mPSTNPathCheckHandler.sendEmptyMessage(2);
- }
- break;
- case GWPSTNHANDLERMSG.SETVOLUME_PSTN:
- LOG("[GWPSTNHandler] SETVOLUME_PSTN [" + msg.obj.toString() + "]");
- Global.setV40WallPadVolume_PSTN(Integer.parseInt(msg.obj.toString()));
- break;
- case GWPSTNHANDLERMSG.RELEASE_PSTN_END_BLOCK:
- TalkPSTN.bBLOCK_PSTNEND = false;
- TalkPSTN.BTN_END.setButtonEventOffDisable();
- ((MainActivity) mContext).TopHomeBtn.setButtonEventOffDisable();
- break;
- default:
- LOG("MainHandler : " + msg.what);
- break;
- }
- }
- };
- public void sendHandlerMsg(int what, int arg1, int arg2) {
- try {
- LOG("[sendHandlerMsg] what [" + what + "], arg1 [" + arg1 + "], arg2 [" + arg2 + "]");
- Message HandleMsg = GWPSTNHandler.obtainMessage();
- HandleMsg.what = what;
- HandleMsg.arg1 = arg1;
- HandleMsg.arg2 = arg2;
- GWPSTNHandler.sendMessage(HandleMsg);
- } catch (RuntimeException re) {
- LogUtil.errorLogInfo("", TAG, re);
- } catch (Exception e) {
- Log.e(TAG, "[Exception] sendHandlerMsg(msg)");
- //e.printStackTrace();
- LogUtil.errorLogInfo("", TAG, e);
- }
- }
- public void sendHandlerMsgDelayed(int what, int arg1, int arg2, String obj, long delay) {
- try {
- LOG("[sendHandlerMsgDelayed] what [" + what + "], arg1 [" + arg1 + "], arg2 [" + arg2 + "], obj [" + obj + "], delay [" + delay + "]");
- Message HandleMsg = GWPSTNHandler.obtainMessage();
- HandleMsg.what = what;
- HandleMsg.arg1 = arg1;
- HandleMsg.arg2 = arg2;
- HandleMsg.obj = obj;
- GWPSTNHandler.sendMessageDelayed(HandleMsg, delay);
- } catch (RuntimeException re) {
- LogUtil.errorLogInfo("", TAG, re);
- } catch (Exception e) {
- Log.e(TAG, "[Exception] sendHandlerMsgDelayed(int what, int arg1, int arg2, String obj, long delay)");
- //e.printStackTrace();
- LogUtil.errorLogInfo("", TAG, e);
- }
- }
- int nCheckCnt1 = 0, nCheckCnt2 = 0;
- public Handler mPSTNPathCheckHandler = new Handler() {
- @Override
- public void handleMessage(Message msg) {
- // Log.d(TAG, "[mPSTNPathCheckHandler.handleMessage]");
- if (ConfigValues.DEVICE_BOARDTYPE == BOARD_TYPE.V40 || ConfigValues.DEVICE_BOARDTYPE == BOARD_TYPE.V40_NOUGAT) {
- if (msg.what == 0) {
- nCheckCnt1++;
- if (nCheckCnt1 > 200) {
- mPSTNPathCheckHandler.removeMessages(0);
- mPSTNPathCheckHandler.removeMessages(1);
- } else {
- if (MainActivity.mCallController.getTalkPath() == CALLPATH.DTMF) mPSTNPathCheckHandler.sendEmptyMessageDelayed(1, 50);
- else mPSTNPathCheckHandler.sendEmptyMessageDelayed(0, 50);
- }
- } else if (msg.what == 1) {
- LOG("[mPSTNPathCheckHandler.handleMessage] Handler finish! =========== V40 DTMF =========== PSTH [DTMF] [" + strDTMFNo + "]");
- sendHandlerMsgDelayed(GWPSTNHANDLERMSG.SEND_DTMF, 0, 0, strDTMFNo, 1500); // 뚜~하고 1.5s 이후 DTMF 송신
- } else if (msg.what == 2) {
- nCheckCnt2++;
- if (nCheckCnt2 > 200) {
- mPSTNPathCheckHandler.removeMessages(2);
- mPSTNPathCheckHandler.removeMessages(3);
- } else {
- if (MainActivity.mCallController.getTalkPath() == CALLPATH.PSTN)
- mPSTNPathCheckHandler.sendEmptyMessageDelayed(3, 50);
- else mPSTNPathCheckHandler.sendEmptyMessageDelayed(2, 50);
- }
- } else if (msg.what == 3) {
- LOG("[mPSTNPathCheckHandler.handleMessage] Handler finish! =========== V40 DTMF =========== PSTH [PSTN] RELEASE_PSTN_END_BLOCK");
- sendHandlerMsgDelayed(GWPSTNHANDLERMSG.RELEASE_PSTN_END_BLOCK, 0, 0, null, 200);
- }
- }
- }
- };
- }
|