智能客服
你问我答,随时在线为你解决问题
为了简化用户首次连接HiCar的步骤,车机可以在检测到连接手机蓝牙后,直接启动厂商HMI应用。
当支持HiCar的手机与支持HiCar的车机,建立蓝牙连接时,车机侧HiCar SDK和手机侧HiCar App会通过蓝牙RFcomm通道进行数据交互,在确认双方都支持HiCar后手机侧将直接推荐用户使用HiCar,用户在手机侧同意使用HiCar后,车机侧需要直接进入到连接界面(连接码或者扫码连接界面),从而简化用户的首次连接流程。
用户体验路径如下:

为实现该功能,厂商需根据本章节内容完成功能开发。

文件 | 接口 | 说明 |
|---|---|---|
hicar.c | HiCarStartBluetoothRecommend(const char* modelId, int32_t allowConnectionType) | SDK初始化之后,调用此接口传入车机的modelID和支持的连接类型。 |
hicar.c | ShowStartPage() | 接收到显示连接界面的回调,HMI应用需实现此回调接口,跳转到HiCar连接界面。 |
结构体 | 结构体内函数 | 说明 |
|---|---|---|
BtRecommendAdpterOps | registerBtSocketCallback(BtSocketDataCallback *callback) | 从SDK中获得数据接收处理函数,用于处理从蓝牙socket中获取的数据。 |
initBtSocket(RfcommServerInfo serverInfo) | 根据SDK给出的RfcommServerInfo创建蓝牙socket,并处理从socket中接收的数据。 | |
sendData(char *data) | SDK会调用此函数,将数据回复给手机。 | |
unregisterBtSocketCallback() | 反注册函数,释放从SDK中拿到的数据处理函数。 | |
deInitBtSocket() | 反初始化函数,销毁蓝牙socket。 |
Rfcomm建立成功后,手机会弹窗询问用户是否同意使用。用户点击确认之后才会给HMI发送显示连接起始界面的回调(ShowStartPage),不需要HMI提前自行拉起HiCar连接界面。
- // 实现结构体内的所有接口,且结构体对象名称必须为g_btRecommendAdapter
- const BtRecommendAdpterOps g_btRecommendAdapter = {
- .InitBtSocket = InitSocket,
- .DeInitBtSocket = DeInitSocket,
- .RegisterBtSocketCallback = RegisterSocketCallback,
- .SendData = ReplyData,
- .UnregisterBtSocketCallback = UnregisterSocketCallback
- };
-
- //RegisterSocketCallback实现建议: 定义全局变量,如g_recvCallback,将callback赋值给g_recvCallback
- int32_t RegisterSocketCallback(BtSocketDataCallback *callback) {
- printf("registerCallback\n");
- if (callback == NULL) {
- printf("callback is null\n");
- return -1;
- }
- g_recvCallback = callback;
- return 0;
- }
-
- //InitSocket实现建议:开始建立蓝牙连接,并监听蓝牙socket发送过来的数据,收到数据时调用,调用g_recvCallback(data),将数据回调给sdk处理
- 注:此处为python语句,只展示逻辑
- server_sock = BluetoothSocket(RFCOMM)
- server_sock.bind(("", 0))
- server_sock.listen(1)
- port = server_sock.getsockname()[1]
- advertise_service(server_sock, "HiCarRecommend",
- service_id="fa87c0d0-afac-11de-8a39-0800200c9a66",
- service_classes=["fa87c0d0-afac-11de-8a39-0800200c9a66", SERIAL_PORT_CLASS],
- profiles=[SERIAL_PORT_PROFILE])
- print("listening")
- client_sock, client_info = server_sock.accept()
- print("bluetooth socket connected")
-
- //ReplyData实现建议:在此函数中使用InitSocket函数创建的蓝牙连接 发送数据
- int32_t ReplyData(const char *data)
- {
- if (data == NULL) {
- printf("ReplyData input is invalid.\n");
- return RESULT_ERROR; // return a NONZERO value
- }
- // 使用InitSocket函数创建的蓝牙连接 发送数据
- // send(socket_created_in_InitSocket_func, data, ...);
- // printf("ReplyData ok, ...\n", ...);
- return RESULT_OK; // return 0
- }
-
- //UnregisterSocketCallback实现建议:在此函数中注销已注册的函数
- int32_t UnregisterSocketCallback() {
- printf("unregisterCallback");
- g_callback = NULL;
- return 0;
- }
-
- //DeInitSocket实现建议:在此函数中完成断开socket连接的逻辑
- int32_t DeInitSocket() {
- //断开连接
- return 0;
- }