CarLinkPlayer.cpp 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626
  1. #include "CarLinkPlayer.h"
  2. #ifdef USE_DBUS
  3. void InterfaceCallbackImpl::start(int type, int mode, int state)
  4. {
  5. if(mHandle){
  6. mHandle->requestLink((LinkType)type, (LinkMode)mode, (DbusReceive)state);
  7. }
  8. }
  9. void InterfaceCallbackImpl::touch(int x, int y, int press)
  10. {
  11. if(mHandle){
  12. mHandle->requestTouch(x,y, (TouchCode)press);
  13. }
  14. }
  15. void InterfaceCallbackImpl::multi_touch(int x1, int y1, int press1, int x2, int y2, int press2)
  16. {
  17. if(mHandle){
  18. mHandle->requestMultiTouch(x1,y1, (TouchCode)press1, x2, y2, (TouchCode)press2);
  19. }
  20. }
  21. void InterfaceCallbackImpl::key(int key){
  22. if(mHandle){
  23. mHandle->requestKey((KeyCode)key);
  24. }
  25. }
  26. void InterfaceCallbackImpl::wheel(int wheel, bool foucs)
  27. {
  28. if(mHandle){
  29. mHandle->requestWheel((WheelCode)wheel, foucs);
  30. }
  31. }
  32. void InterfaceCallbackImpl::night_mode(bool night)
  33. {
  34. if(mHandle){
  35. mHandle->requestNightMode(night);
  36. }
  37. }
  38. void InterfaceCallbackImpl::right_hand_dirver(bool right)
  39. {
  40. if(mHandle){
  41. mHandle->requestRightHandDriver(right);
  42. }
  43. }
  44. void InterfaceCallbackImpl::page(int page)
  45. {
  46. if(mHandle){
  47. mHandle->requestPage((AppPage)page);
  48. }
  49. }
  50. void InterfaceCallbackImpl::phone_ip(string ipstring)
  51. {
  52. if(mHandle){
  53. mHandle->requestPhoneIPAddress(ipstring);
  54. }
  55. }
  56. void InterfaceCallbackImpl::phone_bt(string btstring){
  57. if(mHandle){
  58. mHandle->requestPhoneBTAddress(btstring);
  59. }
  60. }
  61. void InterfaceCallbackImpl::car_bluetooch(string name, string address, string pin)
  62. {
  63. if(mHandle){
  64. mHandle->requestCarBluetooth(name, address, pin);
  65. }
  66. }
  67. void InterfaceCallbackImpl::wifi(string ssid, string passphrase, string channel_id){
  68. if(mHandle){
  69. mHandle->requestWifi(ssid, passphrase, channel_id);
  70. }
  71. }
  72. void InterfaceCallbackImpl::license(string lisence){
  73. if(mHandle){
  74. mHandle->requestLicense(lisence);
  75. }
  76. }
  77. void InterfaceCallbackImpl::input_text(string text){
  78. if(mHandle){
  79. mHandle->requestInputText(text);
  80. }
  81. }
  82. void InterfaceCallbackImpl::input_selection(int start, int stop){
  83. if(mHandle){
  84. mHandle->requestInputSelection(start, stop);
  85. }
  86. }
  87. void InterfaceCallbackImpl::input_action(int actionId, int keyCode){
  88. if(mHandle){
  89. mHandle->requestInputAction(actionId, keyCode);
  90. }
  91. }
  92. void InterfaceCallbackImpl::screen_size(int width, int height){
  93. if(mHandle){
  94. mHandle->requestScreenSize(width, height);
  95. }
  96. }
  97. void InterfaceCallbackImpl::bluetooth_cmd(string cmd){
  98. if(mHandle){
  99. mHandle->requestBluetoothCmd(cmd);
  100. }
  101. }
  102. void InterfaceCallbackImpl::broadcast(bool enable){
  103. if(mHandle){
  104. mHandle->requestBroadcast(enable);
  105. }
  106. }
  107. void InterfaceCallbackImpl::delay_record(int millisecond){
  108. if(mHandle){
  109. mHandle->requestDelayRecord(millisecond);
  110. }
  111. }
  112. void InterfaceCallbackImpl::wifi_state_changed(int action, int state, string phoneIp, string carIp){
  113. if(mHandle){
  114. mHandle->requestWifiStateChanged((WifiStateAction)action, (WifiState)state, phoneIp, carIp);
  115. }
  116. }
  117. #endif
  118. CarLinkPlayer::CarLinkPlayer():mPlayer(nullptr),mIsRunningBackGround(false),
  119. mpLinkAssist(nullptr),mLinkMode(Auto),mChangeMode(false),mNightMode(0),mRightHandDriver(0),mScreenWidth(0),mScreenHeight(0),mMillisecond(0),mStartCarLink(false),mAppStatus(nullptr),mUsbState(nullptr)
  120. {
  121. #ifdef USE_DBUS
  122. mpCallbacks = new InterfaceCallbackImpl(this);
  123. #endif
  124. }
  125. CarLinkPlayer::~CarLinkPlayer()
  126. {
  127. #ifdef USE_DBUS
  128. delete mpCallbacks;
  129. #endif
  130. if(mpLinkAssist)
  131. delete mpLinkAssist;
  132. }
  133. void CarLinkPlayer::initialize()
  134. {
  135. printf("%s:%s:%d\r\n",__FILE__,__func__,__LINE__);
  136. #ifdef USE_DBUS
  137. ArkDbus::instance()->start();
  138. ArkDbus::instance()->registerCallbacks(mpCallbacks);
  139. #endif
  140. mpLinkAssist = new LinkAssist();
  141. mpLinkAssist->RegisterUsbCallback(std::bind(&CarLinkPlayer::usb_state,this, std::placeholders::_1,std::placeholders::_2));
  142. /* if(handle){
  143. mHandle = (void(*)(int,int))handle;
  144. }
  145. */
  146. printf("%s:%s:%d\r\n",__FILE__,__func__,__LINE__);
  147. }
  148. #ifdef USE_DBUS
  149. void CarLinkPlayer::requestLink(LinkType linkType, LinkMode linkMode, DbusReceive status)
  150. {
  151. printf("%s:%s:%d\r\n",__FILE__,__func__,__LINE__);
  152. mLinkMode = linkMode;
  153. if(status == DBUS_REQUEST_CONNECT){
  154. ArkDbus::instance()->SendLinkStatus(linkType, linkMode, DBUS_CONNECTTING);
  155. mLinkType = (LinkType)linkType;
  156. Start((LinkType)linkType, linkMode);
  157. }else if(status == DBUS_REQUEST_BACKGROUND){
  158. mPlayer->SetBackground();
  159. }else if(status == DBUS_REQUEST_FOREGROUND){
  160. mPlayer->SetForeground();
  161. }else if(status == DBUS_REQUEST_EXITED){
  162. mPlayer->Stop();
  163. }
  164. printf("%s:%s:%d\r\n",__FILE__,__func__,__LINE__);
  165. }
  166. void CarLinkPlayer::requestTouch(int x, int y, TouchCode pressed)
  167. {
  168. if(mPlayer){
  169. mPlayer->SendTouch(x, y, pressed);
  170. }
  171. }
  172. void CarLinkPlayer::requestMultiTouch(int x1, int y1, TouchCode pressed1, int x2, int y2, TouchCode pressed2)
  173. {
  174. if(mPlayer){
  175. mPlayer->SendMultiTouch(x1, y1, pressed1, x2, y2, pressed2);
  176. }
  177. }
  178. void CarLinkPlayer::requestKey(KeyCode key)
  179. {
  180. if(mPlayer){
  181. mPlayer->SendKey(key);
  182. }
  183. }
  184. void CarLinkPlayer::requestWheel(WheelCode wheelCode, bool bFoucs)
  185. {
  186. if(mPlayer){
  187. mPlayer->SendWheel(wheelCode, bFoucs);
  188. }
  189. }
  190. void CarLinkPlayer::requestPage(AppPage appPage)
  191. {
  192. if(mPlayer){
  193. mPlayer->OpenPage(appPage);
  194. }
  195. }
  196. void CarLinkPlayer::requestNightMode(bool night)
  197. {
  198. mNightMode = night;
  199. }
  200. void CarLinkPlayer::requestRightHandDriver(bool right)
  201. {
  202. mRightHandDriver = right;
  203. }
  204. void CarLinkPlayer::requestPhoneIPAddress(string str)
  205. {
  206. mstrIpAddress = str;
  207. printf("requestPhoneIPAddress str = %s", str.c_str());
  208. }
  209. void CarLinkPlayer::requestPhoneBTAddress(string str)
  210. {
  211. printf("%s:%s:%d\r\n",__FILE__,__func__,__LINE__);
  212. mstrBtAddress = str;
  213. }
  214. void CarLinkPlayer::requestCarBluetooth(string name, string address, string pin)
  215. {
  216. BlueToothInfo blueToothInfo = {name, address, pin};
  217. mBlueToothInfo = blueToothInfo;
  218. }
  219. void CarLinkPlayer::requestWifi(string ssid, string passphrase, string channel_id)
  220. {
  221. printf("requestWifi ssid = %s, passphrase = %s, channel_id = %s\n",ssid.c_str(), passphrase.c_str(), channel_id.c_str());
  222. mWifiInfo.ssid = ssid;
  223. mWifiInfo.passphrase = passphrase;
  224. mWifiInfo.channel_id = channel_id;
  225. }
  226. void CarLinkPlayer::requestLicense(string license)
  227. {
  228. mLicense = license;
  229. }
  230. void CarLinkPlayer::requestInputText(string text)
  231. {
  232. if(mPlayer){
  233. mPlayer->SendInputText(text);
  234. }
  235. }
  236. void CarLinkPlayer::requestInputSelection(int start, int stop)
  237. {
  238. if(mPlayer){
  239. mPlayer->SendInputSelection(start, stop);
  240. }
  241. }
  242. void CarLinkPlayer::requestInputAction(int actionId, int keyCode)
  243. {
  244. if(mPlayer){
  245. mPlayer->SendInputAction(actionId, keyCode);
  246. }
  247. }
  248. void CarLinkPlayer::requestScreenSize(int width, int height)
  249. {
  250. if(mPlayer){
  251. mPlayer->SendScreenSize(width, height);
  252. }
  253. }
  254. void CarLinkPlayer::requestBluetoothCmd(string cmd){
  255. if(mStartCarLink){
  256. mPlayer->SendBlueToothCmd(cmd);
  257. printf("%s:%s:%d\r\n",__FILE__,__func__,__LINE__);
  258. }
  259. else{
  260. printf("%s:%s:%d cmd: %s\r\n",__FILE__,__func__,__LINE__,cmd.c_str());
  261. mVecBlueToothCmd.push_back(cmd);
  262. }
  263. }
  264. void CarLinkPlayer::requestBroadcast(bool enable)
  265. {
  266. if(mPlayer){
  267. mPlayer->SendBroadcast(enable);
  268. }
  269. }
  270. void CarLinkPlayer::requestDelayRecord(int millisecond)
  271. {
  272. mMillisecond = millisecond;
  273. }
  274. void CarLinkPlayer::requestWifiStateChanged(WifiStateAction action, WifiState state, string phoneIp, string carIp)
  275. {
  276. if(mPlayer){
  277. mPlayer->SendWifiStateChanged(action, state, phoneIp, carIp);
  278. }
  279. }
  280. #endif
  281. void CarLinkPlayer::app_status(AppStatusMessage appStatusMessage, void *reserved)
  282. {
  283. if(appStatusMessage == APP_FOREGROUND){
  284. mIsRunningBackGround = false;
  285. #ifdef USE_DBUS
  286. ArkDbus::instance()->SendLinkStatus(mLinkType, mLinkMode, DBUS_FOREGROUND);
  287. #endif
  288. printf("%s:%s:%d\r\n",__FILE__,__func__,__LINE__);
  289. }
  290. else if(appStatusMessage == APP_BACKGROUND){
  291. mIsRunningBackGround = true;
  292. #ifdef USE_DBUS
  293. ArkDbus::instance()->SendLinkStatus(mLinkType, mLinkMode, DBUS_BACKGROUND);
  294. #endif
  295. printf("%s:%s:%d\r\n",__FILE__,__func__,__LINE__);
  296. }
  297. else if(appStatusMessage == APP_RESERVED){
  298. long long time = (long long )reserved;
  299. struct tm *tdate;
  300. time_t t = time;
  301. tdate=localtime(&t);
  302. char *ptime = ctime(&t);
  303. printf("app_reserved long time = %lld, string time =%s\r\n", time, ptime);
  304. }
  305. #ifdef USE_DBUS
  306. else if(appStatusMessage == APP_MUSIC_STARTED){
  307. ArkDbus::instance()->SendLinkStatus(mLinkType, mLinkMode, DBUS_MUSIC_STARTED);
  308. }
  309. else if(appStatusMessage == APP_MUSIC_STOPPED){
  310. ArkDbus::instance()->SendLinkStatus(mLinkType, mLinkMode, DBUS_MUSIC_STOPPED);
  311. }
  312. else if(appStatusMessage == APP_NAVI_STARTED){
  313. ArkDbus::instance()->SendLinkStatus(mLinkType, mLinkMode, DBUS_NAVI_STARTED);
  314. }
  315. else if(appStatusMessage == APP_NAVI_STOPPED){
  316. ArkDbus::instance()->SendLinkStatus(mLinkType, mLinkMode, DBUS_NAVI_STOPPED);
  317. }
  318. else if(appStatusMessage == APP_VR_STARTED){
  319. ArkDbus::instance()->SendLinkStatus(mLinkType, mLinkMode, DBUS_VR_STARTED);
  320. }
  321. else if(appStatusMessage == APP_VR_STOPPED){
  322. ArkDbus::instance()->SendLinkStatus(mLinkType, mLinkMode, DBUS_VR_STOPPED);
  323. }
  324. else if(appStatusMessage == APP_RECOGNITION_STARTED){
  325. ArkDbus::instance()->SendLinkStatus(mLinkType, mLinkMode, DBUS_RECOGNITION_STARTED);
  326. }
  327. else if(appStatusMessage == APP_RECOGNITION_STOPPED){
  328. ArkDbus::instance()->SendLinkStatus(mLinkType, mLinkMode, DBUS_RECOGNITION_STOPPED);
  329. }
  330. else if(appStatusMessage == APP_PHONE_STARTED){
  331. ArkDbus::instance()->SendLinkStatus(mLinkType, mLinkMode, DBUS_PHONE_STARTED);
  332. }
  333. else if(appStatusMessage == APP_PHONE_STOPPED){
  334. ArkDbus::instance()->SendLinkStatus(mLinkType, mLinkMode, DBUS_PHONE_STOPPED);
  335. }
  336. else if(appStatusMessage == APP_NAVI_SOUND_STARTED){
  337. ArkDbus::instance()->SendLinkStatus(mLinkType, mLinkMode, DBUS_NAVI_SOUND_STARTED);
  338. }
  339. else if(appStatusMessage == APP_NAVI_SOUND_STOPPED){
  340. ArkDbus::instance()->SendLinkStatus(mLinkType, mLinkMode, DBUS_NAVI_SOUND_STOPPED);
  341. }
  342. else if(appStatusMessage == APP_VOICE_CMD){
  343. int cmd = (int )reserved;
  344. printf("cmd = %d\r\n", cmd);
  345. ArkDbus::instance()->SendCarCmd(mLinkType, cmd);
  346. }
  347. else if(appStatusMessage == APP_LICENSE){
  348. License *pLicense = (License*)reserved;
  349. ArkDbus::instance()->SendLicenseStatus(mLinkType, pLicense->activate, pLicense->code, pLicense->msg);
  350. }
  351. else if(appStatusMessage == APP_INPUTINFO){
  352. InputInfo *pInputInfo = (InputInfo*)reserved;
  353. ArkDbus::instance()->SendInputStart(mLinkType, pInputInfo->inputType, pInputInfo->imeOptions, pInputInfo->rawText,
  354. pInputInfo->minLines,pInputInfo->maxLines, pInputInfo->maxLength);
  355. }
  356. else if(appStatusMessage == APP_VRTEXT){
  357. VRTextInfo *pVRTextInfo = (VRTextInfo*)reserved;
  358. ArkDbus::instance()->SendVRTextinfoChange(mLinkType,pVRTextInfo->type, pVRTextInfo->sequence, pVRTextInfo->plainText, pVRTextInfo->htmlText );
  359. }
  360. else if(appStatusMessage == APP_VERSION){
  361. char* ver = (char*)reserved;
  362. printf("ver = %s\n",ver);
  363. ArkDbus::instance()->SendCarLinkVersion(mLinkType, ver);
  364. }
  365. else if(appStatusMessage == APP_VOICE_DUCK){
  366. DuckInfo *pDuckInfo = (DuckInfo*)reserved;
  367. ArkDbus::instance()->SendLinkDuckAudio(mLinkType, pDuckInfo->inDurationSecs, pDuckInfo->volume);
  368. printf("duck appStatusMessage inDurationSecs = %lf, inVolume = %lf\r\n", pDuckInfo->inDurationSecs, pDuckInfo->volume);
  369. }
  370. else if(appStatusMessage == APP_VOICE_UNDUCK){
  371. double* inDurationSecs = (double*) reserved;
  372. ArkDbus::instance()->SendLinkUnduckAudio(mLinkType, *inDurationSecs);
  373. printf("unduck appStatusMessage inDurationSecs = %lf\r\n", *inDurationSecs);
  374. }
  375. else if(appStatusMessage == APP_PINCODE){
  376. printf("%s:%s:%d\r\n",__FILE__,__func__,__LINE__);
  377. string* pinCode = (string*) reserved;
  378. ArkDbus::instance()->SendPinCode(mLinkType, *pinCode);
  379. }
  380. else if(appStatusMessage == APP_BT_CMD){
  381. printf("%s:%s:%d\r\n",__FILE__,__func__,__LINE__);
  382. string *cmd = (string*)reserved;
  383. printf("======= send bluetooth cmd = %s", cmd->c_str());
  384. ArkDbus::instance()->SendBlueToothCmd(mLinkType, *cmd);
  385. }
  386. else if(appStatusMessage == APP_CARLINK_INIT_DONE){
  387. ArkDbus::instance()->SendCarLinkInitDone(mLinkType);
  388. printf("%s:%s:%d\r\n",__FILE__,__func__,__LINE__);
  389. }
  390. #endif
  391. if(mAppStatus){
  392. mAppStatus(appStatusMessage, reserved);
  393. }
  394. }
  395. void CarLinkPlayer::carlink_connect_state(ConnectedStatus status, PhoneType type)
  396. {
  397. switch (status)
  398. {
  399. case CONNECT_STATUS_CONNECTING:
  400. {
  401. // todo 正在连接
  402. printf("%s:%s:%d\r\n",__FILE__,__func__,__LINE__);
  403. #ifdef USE_DBUS
  404. ArkDbus::instance()->SendLinkStatus(mLinkType, mLinkMode, DBUS_CONNECTTING);
  405. #endif
  406. mChangeMode = true;
  407. break;
  408. }
  409. case CONNECT_STATUS_CONNECT_SUCCEED:
  410. {
  411. // todo 连接成功
  412. mChangeMode = false;
  413. printf("%s:%s:%d\r\n",__FILE__,__func__,__LINE__);
  414. //emit Change(false);
  415. #ifdef USE_DBUS
  416. ArkDbus::instance()->SendLinkStatus(mLinkType, mLinkMode, DBUS_CONNECTED);
  417. #endif
  418. printf("connect succeed\r\n");
  419. break;
  420. }
  421. case CONNECT_STATUS_CONNECT_FAILED:
  422. case CONNECT_STATUS_DISCONNECTED:
  423. case CONNECT_STATUS_APP_EXIT:
  424. case CONNECT_STATUS_INTERRUPTED_BY_APP:
  425. {
  426. // todo 连接断开
  427. printf("%s:%s:%d\r\n",__FILE__,__func__,__LINE__);
  428. printf("connect disconnected :%d\r\n",status);
  429. Stop();
  430. #ifdef USE_DBUS
  431. ArkDbus::instance()->SendLinkStatus(mLinkType, mLinkMode, DBUS_DISCONNECTED);
  432. #endif
  433. if(mLinkType == Carplay && mLinkMode == Wired){
  434. #ifdef USE_DBUS
  435. ArkDbus::instance()->SendPhoneType(mPhonetype, DBUS_DEVICE_DEATTACHED);
  436. #endif
  437. }
  438. mChangeMode = false;
  439. printf("%s:%s:%d\r\n",__FILE__,__func__,__LINE__);
  440. break;
  441. }
  442. default:
  443. break;
  444. }
  445. mConnectStatus = status;
  446. mPhonetype = type;
  447. }
  448. void CarLinkPlayer::usb_state(ConnectedStatus status, PhoneType type)
  449. {
  450. std::lock_guard<std::mutex> lock(mMutex);
  451. mConnectStatus = status;
  452. mPhonetype = type;
  453. mLinkMode = Wired;
  454. printf("%s:%s:%d\r\n",__FILE__,__func__,__LINE__);
  455. if(status == CONNECT_STATUS_DEVICE_ATTACHED){
  456. printf("%s:%s:%d\r\n",__FILE__,__func__,__LINE__);
  457. if(!mChangeMode){
  458. if(mUsbState){
  459. mUsbState(status, type);
  460. }
  461. printf("%s:%s:%d\r\n",__FILE__,__func__,__LINE__);
  462. #ifdef USE_DBUS
  463. ArkDbus::instance()->SendPhoneType(mPhonetype, DBUS_DEVICE_ATTACHED);
  464. #else
  465. if(type == Phone_IOS)
  466. Start(Carplay, Wired);
  467. else if(type == Phone_Android)
  468. Start(Android_Auto, Wired);
  469. #endif
  470. }
  471. printf("%s:%s:%d\r\n",__FILE__,__func__,__LINE__);
  472. }
  473. else if(status == CONNECT_STATUS_DEVICE_DEATTACHED){
  474. printf("%s:%s:%d\r\n",__FILE__,__func__,__LINE__);
  475. if(mUsbState){
  476. mUsbState(status, type);
  477. }
  478. #ifdef USE_DBUS
  479. ArkDbus::instance()->SendPhoneType(mPhonetype, DBUS_DEVICE_DEATTACHED);
  480. #endif
  481. }
  482. }
  483. void CarLinkPlayer::registerAppStatus(void(*pAppStatusCallback)(int,void*))
  484. {
  485. mAppStatus = pAppStatusCallback;
  486. }
  487. void CarLinkPlayer::registerUsbState(void(*pUsbStateCallback)(int,int))
  488. {
  489. mUsbState = pUsbStateCallback;
  490. }
  491. void CarLinkPlayer::Start(LinkType linkType, LinkMode linkMode)
  492. {
  493. printf("%s:%s:%d\r\n",__FILE__,__func__,__LINE__);
  494. mPlayer = mpLinkAssist->Initialize(linkType);
  495. printf("%s:%s:%d\r\n",__FILE__,__func__,__LINE__);
  496. mPlayer->GetIniConfig(mpLinkAssist);
  497. printf("%s:%s:%d\r\n",__FILE__,__func__,__LINE__);
  498. mPlayer->RegisterConnectCallback(std::bind(&CarLinkPlayer::carlink_connect_state,this, std::placeholders::_1,std::placeholders::_2));
  499. if(mLicense.empty())
  500. mPlayer->SendLisenceCode("TEST036514313165461313");
  501. else
  502. mPlayer->SendLisenceCode(mLicense);
  503. printf("%s:%s:%d\r\n",__FILE__,__func__,__LINE__);
  504. if(!(mScreenWidth == 0 || mScreenHeight == 0)){
  505. mPlayer->SendScreenSize(mScreenWidth, mScreenHeight);
  506. }
  507. printf("%s:%s:%d\r\n",__FILE__,__func__,__LINE__);
  508. mPlayer->SendNightMode(mNightMode);
  509. printf("%s:%s:%d right hand driver =%d\r\n",__FILE__,__func__,__LINE__,mRightHandDriver);
  510. mPlayer->SendRightHandDriver(mRightHandDriver);
  511. printf("%s:%s:%d\r\n",__FILE__,__func__,__LINE__);
  512. mPlayer->SendDelayRecord(mMillisecond);
  513. mPlayer->SendCarBluetooth(mBlueToothInfo.name, mBlueToothInfo.addr, mBlueToothInfo.pin);
  514. if(linkMode == Wireless)
  515. {
  516. printf("%s:%s:%d\r\n",__FILE__,__func__,__LINE__);
  517. if(!mstrBtAddress.empty()){
  518. printf("%s:%s:%d\r\n",__FILE__,__func__,__LINE__);
  519. mPlayer->SendPhoneBluetooth(mstrBtAddress);
  520. }
  521. if(!mstrIpAddress.empty()){
  522. printf("%s:%s:%d\r\n",__FILE__,__func__,__LINE__);
  523. mPlayer->SendIphoneMacAddress(mstrIpAddress);
  524. }
  525. if(!(mWifiInfo.ssid.empty()| mWifiInfo.passphrase.empty() | mWifiInfo.channel_id.empty())){
  526. printf("%s:%s:%d\r\n",__FILE__,__func__,__LINE__);
  527. mPlayer->SendCarWifi(mWifiInfo);
  528. }
  529. }
  530. printf("%s:%s:%d\r\n",__FILE__,__func__,__LINE__);
  531. mPlayer->RegisterAppStatusCallback(std::bind(&CarLinkPlayer::app_status,this, std::placeholders::_1,std::placeholders::_2));
  532. mPlayer->Initialize(linkMode, mPhonetype);
  533. if(linkType == HiCar && linkMode == Wireless){
  534. for(int i = 0; i< mVecBlueToothCmd.size();i++){
  535. mPlayer->SendBlueToothCmd(mVecBlueToothCmd[i]);
  536. printf("%s:%s:%d mVecBlueToothCmd[%d]: %s\r\n",__FILE__,__func__,__LINE__,i,mVecBlueToothCmd[i].c_str());
  537. }
  538. }
  539. mVecBlueToothCmd.clear();
  540. mPlayer->Start();
  541. mStartCarLink = true;
  542. printf("%s:%s:%d\r\n",__FILE__,__func__,__LINE__);
  543. }
  544. void CarLinkPlayer::Stop()
  545. {
  546. printf("%s:%s:%d\r\n",__FILE__,__func__,__LINE__);
  547. if(mpLinkAssist)
  548. mpLinkAssist->Release();
  549. printf("%s:%s:%d\r\n",__FILE__,__func__,__LINE__);
  550. }