HiCarLink.cpp 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598
  1. #include "HiCarLink.h"
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include <unistd.h>
  5. #include <fstream>
  6. #include <iostream>
  7. #include "ark_hicar_api.h"
  8. #include "BufferQueue.h"
  9. #define BLUETOOTHADDR "/tmp/bluetoothaddress"
  10. #define BLUETOOTHNAME "/tmp/bubluetoothname"
  11. #define BLUETOOTHPIN "/tmp/bubluetoothpin"
  12. #define WIFI_ADDR "/tmp/hostapd.conf"
  13. #ifdef USE_HICAR
  14. static void resetUsb(int index){
  15. /*
  16. char peripheral[256] = {0,}, otg[256] = {0,};
  17. sprintf(peripheral,"echo peripheral > /sys/devices/platform/soc/e0100000.usb/musb-hdrc.%d/mode", index);
  18. system(peripheral);
  19. usleep(500000);
  20. sprintf(otg,"echo otg > /sys/devices/platform/soc/e0100000.usb/musb-hdrc.%d/mode", index);
  21. system(otg);
  22. */
  23. if(index == 0){
  24. system("echo peripheral > /sys/devices/platform/soc/e0100000.usb/musb-hdrc.0/mode");
  25. usleep(500000);
  26. system("echo otg > /sys/devices/platform/soc/e0100000.usb/musb-hdrc.0/mode");
  27. }
  28. else if(index == 1){
  29. system("echo peripheral > /sys/devices/platform/soc/e0400000.usb/musb-hdrc.1/mode");
  30. usleep(500000);
  31. system("echo otg > /sys/devices/platform/soc/e0400000.usb/musb-hdrc.1/mode");
  32. }
  33. }
  34. HiCarLinkImpl::HiCarLinkImpl(HiCarLink *handle): mHandle(handle),mHiCarState(0)
  35. {
  36. ArkHicarRegisterAppRcvHicarDataCallback(HiCarSendVHiCarEventCallBack, this);
  37. HicarDongleRegisterGetVideoDataCallBack(HiCarSendVideoDataCallBack, this);
  38. HicarDongleRegisterGetAudioDataCallBack(HiCarGetAudioDataCallBack, this);
  39. HicarDongleRegisterGetAudioMicDataCallBack(HiCarGetAudioMicDataCallBack, this);
  40. ArkHicarRegisterAppRcvBtDataCallback(HiCarSendVHiCarBTCallBack, this);
  41. //ArkHicarRegisterAudioCallback(HiCarAudioFoucsCallBack, this);
  42. }
  43. HiCarLinkImpl::~HiCarLinkImpl()
  44. {
  45. }
  46. int HiCarLinkImpl::HiCarSendVideoDataCallBack(int type, void *data, int len, void *parameters)
  47. {
  48. HiCarLinkImpl *pthis = (HiCarLinkImpl *)parameters;
  49. // printf("event type:%d len:%d\n", type, len);
  50. if(type == ARK_HICAR_VIDEO_START){
  51. ArkHicarDongleVideoDataParam *param = (ArkHicarDongleVideoDataParam *)data;
  52. if(param)
  53. pthis->mHandle->video_start(param->width, param->height, param->xpos, param->ypos);
  54. }
  55. else if(type == ARK_HICAR_VIDEO_STOP){
  56. pthis->mHandle->video_stop();
  57. } else if(type == ARK_HICAR_VIDEO_STREAM) {
  58. pthis->mHandle->video_play(data,len);
  59. }
  60. return 0;
  61. }
  62. int HiCarLinkImpl::HiCarSendVHiCarEventCallBack(int type, void *data, int dataLen, void *parameters)
  63. {
  64. HiCarLinkImpl *pthis = (HiCarLinkImpl *)parameters;
  65. ArkHicarDataInfo *dataInfo = (ArkHicarDataInfo *)data;
  66. printf("event type:%d len:%d\n", type, dataLen);
  67. if(!dataInfo && type!=ARK_HICAR_INIT_DONE )
  68. return -1;
  69. if(type == ARK_HICAR_LINK_STATE_CHANGE){
  70. printf("hicarState = %d, data status = %d\r\n",pthis->mHiCarState, dataInfo->status);
  71. if(pthis->mHiCarState != dataInfo->status){
  72. printf("###### hicar status === %d\r\n", dataInfo->status);
  73. switch (dataInfo->status) {
  74. case LINK_STARTING:
  75. ark_hicar_link_state_change(pthis->mHandle->mLinkType, LINK_STARTING);
  76. printf("link_startting===========\r\n");
  77. break;
  78. case LINK_EXITING:
  79. pthis->mHandle->app_status(APP_BACKGROUND);
  80. break;
  81. case LINK_EXITED:
  82. case LINK_REMOVED:
  83. {
  84. pthis->mHandle->onSdkConnectStatus(CONNECT_STATUS_DISCONNECTED, UnKnown);
  85. pthis->mHandle->video_stop();
  86. }
  87. break;
  88. case LINK_SUCCESS:
  89. {
  90. pthis->mHandle->app_status(APP_FOREGROUND);
  91. pthis->mHandle->onSdkConnectStatus(CONNECT_STATUS_CONNECT_SUCCEED, pthis->mHandle->getPhoneType());
  92. }
  93. break;
  94. default:
  95. break;
  96. }
  97. pthis->mHiCarState = dataInfo->status;
  98. printf("hicarState = %d, dataInfo->status = %d\r\n",pthis->mHiCarState, dataInfo->status);
  99. }
  100. }
  101. else if(type == ARK_HICAR_BT_PIN_CODE){
  102. printf("%s:%s:%d\r\n",__FILE__,__func__,__LINE__);
  103. if(data && (dataLen == 6)) {
  104. printf("%s:%s:%d\r\n",__FILE__,__func__,__LINE__);
  105. string pinCode((char*)data, dataLen);
  106. pthis->mHandle->app_status(APP_PINCODE, (void*)&pinCode);
  107. printf("pincode = %s\r\n", data);
  108. }
  109. }
  110. else if(type == ARK_HICAR_INIT_DONE){
  111. printf("%s:%s:%d\r\n",__FILE__,__func__,__LINE__);
  112. pthis->mHandle->app_status(APP_CARLINK_INIT_DONE);
  113. printf("============ ark hicar init done \r\n");
  114. }
  115. return 0;
  116. }
  117. int HiCarLinkImpl::HiCarSendVHiCarBTCallBack(int type, void *data, int dataLen, void *parameters)
  118. {
  119. HiCarLinkImpl *pthis = (HiCarLinkImpl *)parameters;
  120. printf("%s:%s:%d\r\n",__FILE__,__func__,__LINE__);
  121. static string cmd = "";
  122. cmd = string((char*)data,dataLen);
  123. if(pthis)
  124. pthis->mHandle->app_status(APP_BT_CMD, (void*)&cmd);
  125. printf("%s:%s:%d\r\n",__FILE__,__func__,__LINE__);
  126. return 0;
  127. }
  128. AudioType HiCarLinkImpl::ChangeAudioType(HiCarAudioStreamType type)
  129. {
  130. AudioType ret = AUDIO_TYPE_MUSIC;
  131. if(type == HiCar_AUDIO_STREAM_MEDIA){
  132. ret = AUDIO_TYPE_MUSIC;
  133. }
  134. else if(type == HiCar_AUDIO_STREAM_Alt){
  135. ret = AUDIO_TYPE_VR;
  136. }
  137. else if(type == HiCar_AUDIO_STREAM_VR){
  138. ret = AUDIO_TYPE_TTS;
  139. }
  140. else if(type == HiCar_AUDIO_STREAM_TELEPHONY){
  141. ret = AUDIO_TYPE_CALL;
  142. }
  143. return ret;
  144. }
  145. int HiCarLinkImpl::HiCarGetAudioDataCallBack(int streamType, void *data, int dataLen, void *parameters)
  146. {
  147. HiCarLinkImpl *pthis = (HiCarLinkImpl *)parameters;
  148. if(data) {
  149. int *tmp = (int *)data;
  150. if(streamType == ARK_HICAR_AUDIO_FLAGS) {
  151. int status = tmp[0];
  152. AudioType audioType = pthis->ChangeAudioType((HiCarAudioStreamType)tmp[1]);
  153. if(audioType < 0) {
  154. printf("%s:%d: Invalid audioType:%d", __func__, __LINE__, audioType);
  155. return -1;
  156. }
  157. int rate = tmp[2];
  158. int channels = tmp[3];
  159. int bits = tmp[4];
  160. if(status == ARK_HICAR_AUDIO_OPEN) {
  161. pthis->mHandle->audio_start(audioType, rate, bits, channels);
  162. } else if(status == ARK_HICAR_AUDIO_CLOSE) {
  163. if(audioType == AUDIO_TYPE_MUSIC){
  164. pthis->mHandle->app_status(APP_MUSIC_STOPPED, nullptr);
  165. }
  166. else if(audioType == AUDIO_TYPE_TTS){
  167. pthis->mHandle->app_status(APP_NAVI_SOUND_STOPPED, nullptr);
  168. }
  169. else if(audioType == AUDIO_TYPE_VR){
  170. pthis->mHandle->app_status(APP_VR_STOPPED, nullptr);
  171. }
  172. }
  173. } else {
  174. AudioType audioType = pthis->ChangeAudioType((HiCarAudioStreamType)streamType);
  175. if(audioType < 0) {
  176. printf("%s:%d: Invalid audioType:%d", __func__, __LINE__, audioType);
  177. return -1;
  178. }
  179. pthis->mHandle->audio_play(audioType, (char *)data, dataLen);
  180. // printf("streamType:%d, datalen = %d\r\n", streamType, dataLen);
  181. }
  182. }
  183. return 0;
  184. }
  185. //#define REC_FILE
  186. int HiCarLinkImpl::HiCarGetAudioMicDataCallBack(int streamType, void *data, int dataLen, void *parameters)
  187. {
  188. HiCarLinkImpl *pthis = (HiCarLinkImpl *)parameters;
  189. if(streamType == ARK_HICAR_AUDIO_READ) {
  190. if(data && dataLen) {
  191. // printf("stremType = %d\r\n", streamType);
  192. char buf[640] = {0,};
  193. memcpy(data, buf, dataLen);
  194. int recLen = 0;
  195. unsigned char * pRecBuf = NULL;
  196. int type = 0 ;
  197. if(pthis->mHandle->mRecQueue->IsExitedThread(pthread_self())){
  198. printf("return thread=============\r\n");
  199. return -1;
  200. }
  201. if(pthis->mHandle->mRecQueue->ReadQueue(&type, &pRecBuf, &recLen) > 0){
  202. // printf("rec len = %d, dataLen = %d\r\n", recLen, dataLen);
  203. //data = (char *)pRecBuf;
  204. memcpy(data, pRecBuf, recLen);
  205. #ifdef REC_FILE
  206. static FILE *fp = NULL;
  207. if(fp == NULL)
  208. fp = fopen("/tmp/hicar_local.pcm", "wb");
  209. fwrite(pRecBuf, 1, recLen, fp);
  210. #endif
  211. }
  212. free(pRecBuf);
  213. pRecBuf = NULL;
  214. usleep(10000);
  215. //printf("%s:%s:%d\r\n",__FILE__,__func__,__LINE__);
  216. }
  217. } else if(streamType == ARK_HICAR_AUDIO_OPEN) {
  218. if(data && (dataLen == sizeof(int)*3)) {
  219. int *buf = (int *)data;
  220. int rate = buf[0];
  221. int channels = buf[1];
  222. int bits = buf[2];
  223. usleep(1000 * pthis->mHandle->mMillisecond);
  224. AudioInfo info = {rate, channels, bits};
  225. printf("rate:%d,channel:%d,bits:%d\r\n",rate, channels, bits);
  226. pthis->mHandle->record_start(info);
  227. pthis->mHandle->app_status(APP_RECOGNITION_STARTED);
  228. }
  229. } else if(streamType == ARK_HICAR_AUDIO_CLOSE) {
  230. pthis->mHandle->record_stop();
  231. pthis->mHandle->app_status(APP_RECOGNITION_STOPPED);
  232. }
  233. return 0;
  234. }
  235. int HiCarLinkImpl::HiCarAudioFoucsCallBack(int type, void *streamType, int focus, void* parameters)
  236. {
  237. int *buf = (int *)streamType;
  238. int s = buf[0];
  239. printf("========== type:%d, streamType:%d,focus:%d\r\n", type, s,focus);
  240. return 0;
  241. }
  242. #endif
  243. HiCarLink::HiCarLink()
  244. {
  245. #ifdef USE_HICAR
  246. mRecPos = 0;
  247. memset(mRecBuf, 0, sizeof(mRecBuf));
  248. mRecQueue = new BufferQueue();
  249. mHandle = new HiCarLinkImpl(this);
  250. mLinkType = 0;
  251. mMillisecond = 0;
  252. #endif
  253. }
  254. HiCarLink::~HiCarLink()
  255. {
  256. #ifdef USE_HICAR
  257. delete mHandle;
  258. delete mRecQueue;
  259. ark_hicar_release();
  260. #endif
  261. }
  262. #ifdef USE_HICAR
  263. bool HiCarLink::init(LinkMode linkMode)
  264. {
  265. printf("hicar x:%d y:%d w:%d h:%d\r\n",mLinkConfig.offset_x,mLinkConfig.offset_y, mLinkConfig.screen_width, mLinkConfig.screen_height);
  266. ark_hicar_request_video_size(mLinkConfig.screen_width, mLinkConfig.screen_height, mLinkConfig.offset_x, mLinkConfig.offset_y);
  267. ark_hicar_init(0);
  268. mLinkMode = linkMode;
  269. if(mLinkMode == Wired){
  270. mLinkType = 0x09;
  271. }
  272. else if(mLinkMode == Wireless){
  273. mLinkType = 0x09;
  274. }
  275. return true;
  276. }
  277. bool HiCarLink::start()
  278. {
  279. if(mLinkMode == Wired){
  280. resetUsb(mLinkConfig.usb_index);
  281. printf("%s:%s:%d\r\n",__FILE__,__func__,__LINE__);
  282. }
  283. ark_hicar_link_state_change(mLinkType, LINK_STARTING);
  284. onSdkConnectStatus(CONNECT_STATUS_CONNECTING, mPhoneType);
  285. printf("%s:%s:%d\r\n",__FILE__,__func__,__LINE__);
  286. return true;
  287. }
  288. bool HiCarLink::stop()
  289. {
  290. return true;
  291. }
  292. bool HiCarLink::release()
  293. {
  294. return true;
  295. }
  296. bool HiCarLink::start_mirror()
  297. {
  298. return true;
  299. }
  300. bool HiCarLink::stop_mirror()
  301. {
  302. return true;
  303. }
  304. bool HiCarLink::set_background()
  305. {
  306. printf("%s:%s:%d\r\n",__FILE__,__func__,__LINE__);
  307. int ret = ark_hicar_link_state_change( mLinkType,LINK_EXITING);
  308. printf("ret = %d\n", ret);
  309. return true;
  310. }
  311. bool HiCarLink::set_foreground()
  312. {
  313. printf("%s:%s:%d\r\n",__FILE__,__func__,__LINE__);
  314. int ret = ark_hicar_link_state_change( mLinkType,LINK_STARTING);
  315. printf("ret = %d\n", ret);
  316. return true;
  317. }
  318. bool HiCarLink::get_audio_focus()
  319. {
  320. return true;
  321. }
  322. bool HiCarLink::release_audio_focus()
  323. {
  324. return true;
  325. }
  326. void HiCarLink::set_inserted(bool inserted, PhoneType phoneType)
  327. {
  328. mPhoneType = phoneType;
  329. }
  330. void HiCarLink::send_screen_size(int width, int height)
  331. {
  332. }
  333. void HiCarLink::record_audio_callback(unsigned char *data, int len)
  334. {
  335. std::lock_guard<std::mutex> lock(mMutex);
  336. /*
  337. static FILE *fp = NULL;
  338. if(fp == NULL)
  339. fp = fopen("/tmp/hicar_old.pcm", "wb");
  340. fwrite(data, 1, len, fp);
  341. */
  342. if(len <= 0)
  343. return;
  344. len = mRecPos + len;
  345. int times = len / PLAYLOAD;
  346. int remain = len % PLAYLOAD;
  347. static int prev = 0;
  348. mRecPos = 0;
  349. while(times){
  350. memcpy(mRecBuf + prev, data + mRecPos, PLAYLOAD - prev);
  351. mRecPos = mRecPos + PLAYLOAD - prev;
  352. prev = 0;
  353. --times;
  354. if(mRecQueue){
  355. uint8_t *p = (uint8_t*)malloc(PLAYLOAD);
  356. memcpy(p, mRecBuf, PLAYLOAD);
  357. mRecQueue->WriteQueue(0, p, PLAYLOAD);
  358. }
  359. // printf("pos = %d\n",mRecPos);
  360. }
  361. memcpy(mRecBuf, data + mRecPos, remain);
  362. mRecPos = remain;
  363. prev = remain;
  364. // printf("record_audio_callback len = %d\r\n",len);
  365. }
  366. void HiCarLink::send_car_bluetooth(const string& name, const string& address, const string& pin)
  367. {
  368. printf("%s:%s:%d\r\n",__FILE__,__func__,__LINE__);
  369. if(access(BLUETOOTHADDR, F_OK) && !address.empty()){
  370. ofstream addressfile(BLUETOOTHADDR);
  371. addressfile<<address<<endl;
  372. printf("bt address %s\r\n",address.c_str());
  373. }
  374. }
  375. void HiCarLink::send_phone_bluetooth(const string& address)
  376. {
  377. printf("%s:%s:%d\r\n",__FILE__,__func__,__LINE__);
  378. }
  379. void HiCarLink::send_touch(int x, int y, TouchCode touchCode)
  380. {
  381. // printf("hicar x:%d, y:%d, press:%d\r\n",x, y, touchCode);
  382. ArkHicarTouchEventType pressed;
  383. if(touchCode == Touch_Press ){
  384. pressed = ARK_TOUCH_DOWN ;
  385. }
  386. else if(touchCode == Touch_Move){
  387. pressed = ARK_TOUCH_MOVE;
  388. }
  389. else
  390. pressed = ARK_TOUCH_UP;
  391. ArkHicarTouchDataInfo touchInfo ;
  392. touchInfo.coordinateX[0] = x;
  393. touchInfo.coordinateY[0] = y;
  394. touchInfo.numPointers =1;
  395. touchInfo.pointerId[0] = 0;
  396. touchInfo.type = pressed;
  397. ark_hicar_touch_state_change(&touchInfo, sizeof(touchInfo));
  398. }
  399. void HiCarLink::send_multi_touch(int x1, int y1, TouchCode touchCode1, int x2, int y2, TouchCode touchCode2)
  400. {
  401. printf("hicar x1:%d, y1:%d, press1:%d, x2:%d, y2:%d, press2:%d\r\n",x1, y1, touchCode1,x2, y2, touchCode2);
  402. ArkHicarTouchEventType pressed1, pressed2;
  403. if(touchCode1 == Touch_Press )
  404. pressed1 = ARK_TOUCH_DOWN ;
  405. else if(touchCode1 == Touch_Move)
  406. pressed1 = ARK_TOUCH_MOVE;
  407. else
  408. pressed1 = ARK_TOUCH_UP;
  409. if(touchCode2 == Touch_Press )
  410. pressed2 = ARK_TOUCH_DOWN ;
  411. else if(touchCode2 == Touch_Move)
  412. pressed2 = ARK_TOUCH_MOVE;
  413. else
  414. pressed2 = ARK_TOUCH_UP;
  415. ArkHicarTouchDataInfo touchInfo ;
  416. touchInfo.coordinateX[0] = x1;
  417. touchInfo.coordinateY[0] = y1;
  418. touchInfo.numPointers =2;
  419. touchInfo.pointerId[0] = 0;
  420. touchInfo.type = pressed1;
  421. touchInfo.coordinateX[1] = x2;
  422. touchInfo.coordinateY[1] = y2;
  423. touchInfo.numPointers =2;
  424. touchInfo.pointerId[1] = 1;
  425. touchInfo.type = pressed2;
  426. ark_hicar_touch_state_change(&touchInfo, sizeof(touchInfo));
  427. }
  428. bool HiCarLink::send_key(KeyCode keyCode)
  429. {
  430. if(keyCode == KEY_MUSIC_PLAY){
  431. ark_hicar_key_value_change(mLinkType,KEY_STATUS_IGNORE, MEDIA_PLAY_KEY);
  432. }
  433. else if(keyCode == KEY_MUSIC_PAUSE){
  434. ark_hicar_key_value_change(mLinkType,KEY_STATUS_IGNORE, MEDIA_PLAY_KEY);
  435. }
  436. else if(keyCode == KEY_MUSIC_PLAY_PAUSE){
  437. ark_hicar_key_value_change(mLinkType,KEY_STATUS_IGNORE, MEDIA_PLAY_PAUSE_KEY);
  438. }
  439. else if(keyCode == KEY_MUSIC_NEXT){
  440. ark_hicar_key_value_change(mLinkType,KEY_STATUS_IGNORE, MEDIA_NEXT_KEY);
  441. }
  442. else if(keyCode == KEY_MUSIC_PREVIOUS){
  443. ark_hicar_key_value_change(mLinkType,KEY_STATUS_IGNORE, MEDIA_PREVIOUS_KEY);
  444. }
  445. else if(keyCode == KEY_PICKUP_PHONE){
  446. ark_hicar_key_value_change(mLinkType,KEY_STATUS_IGNORE, PICKUP_PHONE_KEY);
  447. }
  448. else if(keyCode == KEY_HANGUP_PHONE){
  449. ark_hicar_key_value_change(mLinkType,KEY_STATUS_IGNORE, HANGUP_PHONE_KEY);
  450. }
  451. else if(keyCode == KEY_HOME){
  452. ark_hicar_key_value_change(mLinkType,KEY_STATUS_IGNORE, HOME_KEY);
  453. }
  454. else if(keyCode == KEY_PHONE){
  455. }
  456. else if(keyCode == KEY_VOICE_ASSISTANT){
  457. ark_hicar_key_value_change(mLinkType,KEY_STATUS_IGNORE, MIC_KEY);
  458. }
  459. else if(keyCode == KEY_LIGHTMODE){
  460. }
  461. else if(keyCode == KEY_NIGHTMODE){
  462. }
  463. else if(keyCode == KEY_CAR_FOREGROUND){
  464. set_foreground();
  465. }
  466. else if(keyCode == KEY_CAR_BACKGROUND){
  467. set_background();
  468. }
  469. else if(keyCode == KEY_CAR_BACK){
  470. ark_hicar_key_value_change(mLinkType,KEY_STATUS_IGNORE, BACK_KEY);
  471. }
  472. }
  473. bool HiCarLink::send_wheel(WheelCode wheel, bool foucs)
  474. {
  475. if(foucs)
  476. ark_hicar_whell_state_change(mLinkType, 0, wheel);
  477. else
  478. ark_hicar_whell_state_change(mLinkType, 1, wheel);
  479. }
  480. bool HiCarLink::open_page(AppPage appPage)
  481. {
  482. }
  483. void HiCarLink::request_status(RequestAppStatus requestAppStatus, void *reserved)
  484. {
  485. }
  486. bool HiCarLink::send_night_mode(bool night)
  487. {
  488. }
  489. bool HiCarLink::send_right_hand_driver(bool right)
  490. {
  491. }
  492. void HiCarLink::send_car_wifi(WifiInfo& info)
  493. {
  494. if(access(WIFI_ADDR, F_OK)){
  495. printf("%s:%s:%d\r\n",__FILE__,__func__,__LINE__);
  496. string ssid = "ssid=" + info.ssid;
  497. string passphrase = "wpa_passphrase=" +info.passphrase;
  498. string channel_id = "channel_id=" + info.channel_id;
  499. ofstream addressfile(WIFI_ADDR);
  500. addressfile<<ssid<<endl;
  501. addressfile<<passphrase<<endl;
  502. addressfile<<channel_id<<endl;
  503. addressfile.close();
  504. printf("%s:%s:%d\r\n",__FILE__,__func__,__LINE__);
  505. }
  506. }
  507. void HiCarLink::send_bluetooth_cmd(const string& cmd)
  508. {
  509. ArkHicarRcvBtStackAtCmd((char*)cmd.c_str());
  510. printf("==== bluetooth cmd = %s\r\n", cmd.c_str());
  511. }
  512. void HiCarLink::send_broadcast(bool enable)
  513. {
  514. printf("%s:%s:%d\r\n",__FILE__,__func__,__LINE__);
  515. ark_hicar_advertisement(enable);
  516. }
  517. void HiCarLink::send_delay_record(int millisecond){
  518. mMillisecond = millisecond;
  519. }
  520. #endif