# icoe_android_hidl2.0 **Repository Path**: sdlwk/icoe_android_hidl2.0 ## Basic Information - **Project Name**: icoe_android_hidl2.0 - **Description**: ICOE 功能移植SDK基于 android hidl2.0 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 3 - **Created**: 2026-04-08 - **Last Updated**: 2026-04-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # icoe_android_hidl2.0 #### 介绍 ICOE 功能移植SDK基于 android hidl2.0 #### 软件架构 软件架构说明 #### 移值说明 基于MTK android12的移植 例子 1.关闭系统的GNSS功能 device/mediatek/vendor/xxxxxx/VendorConfig.mk device/mediateksample/xxxxxxx/ProjectConfig.mk kernel-4.19/arch/arm64/configs/xxxxxx_64_debug_defconfig kernel-4.19/arch/arm64/configs/xxxxxx_64_defconfig MTK_AGPS_APP=no MTK_GPS_SUPPORT=no MTK_LOG_SUPPORT_GPS=no 2.添加源码 vendor/mediatek/proprietary/hardware/bdicc gnss_hidl2.0 vproduct 3.增加ICOE模块编译 device/mediatek/vendor/common/device.mk PRODUCT_PACKAGES += android.hardware.gnss@2.0-service-bdicc PRODUCT_PACKAGES += bdicc-vproduct PRODUCT_COPY_FILES += vendor/mediatek/proprietary/hardware/bdicc/MSLConfig.txt:vendor/icoe/MSLConfig.txt PRODUCT_COPY_FILES += vendor/mediatek/proprietary/hardware/bdicc/MSLConfig.txt:$(TARGET_COPY_OUT_VENDOR)/etc/MSLConfig.txt 4.增加selinux权限 system/sepolicy/vendor/file_contexts b/android12/system/sepolicy/vendor/file_contexts /(vendor|system/vendor)/bin/hw/android\.hardware\.gnss@2\.0-service-bdicc u:object_r:hal_gnss_default_exec:s0 /(vendor|system/vendor)/bin/hw/android\.hardware\.sensors@2\.0-service-bdicc u:object_r:hal_gnss_default_exec:s0 /(vendor|system/vendor)/bin/hw/android\.hardware\.bdxtvchannel@1\.0-service-bdicc u:object_r:hal_gnss_default_exec:s0 system/sepolicy/vendor/hal_gnss_default.te allow hal_gnss_default self:capability2 { block_suspend }; #allow hal_gnss_default self:capability { dac_override }; allow hal_gnss_default radio_device:chr_file { getattr ioctl open read write }; allow hal_gnss_default tty_device:chr_file { ioctl open read write }; allow hal_gnss_default sysfs_wake_lock:file { open read write }; allow hal_gnss_default vndbinder_device:chr_file { ioctl open read write map }; allow hal_gnss_default vendor_data_file:dir { add_name remove_name write }; allow hal_gnss_default vendor_data_file:fifo_file {write getattr open read setattr relabelfrom }; allow hal_gnss_default vendor_data_file:sock_file { create unlink }; allow hal_gnss_default property_socket:sock_file { write }; allow hal_gnss_default init:unix_stream_socket { connectto }; 5.增加starcourse APP device/mediatek/system/common/device.mk PRODUCT_PACKAGES += starcourse PRODUCT_PACKAGES += UtilSystemProperty 6.增加starcourse 源码到相应目录 vendor/mediatek/proprietary/packages/apps #### 使用说明 1.修改TTY和电源节点,gnss_hidl2.0/android.hardware.gnss@2.0-service-bdicc.rc setprop persist.vendor.bdicc.dev_name /dev/ttyUSB1 ---> 修改为相应的串口TTY节点 setprop persist.vendor.bdicc.gnss_ctldev_devname /dev/ttyUSB0 ---> 修改电源控制节点('1':on,'0':off) 2.提供节点权限 chmod 0777 /dev/ttyUSB0 -->串口TTY节点 chmod 0777 /dev/ttyUSB1 -->电源控制节点 3.升级触发,通过local socket 发送 "upgrade" 到 server 节点 #define server "/data/vendor/bdicc/socket/server" int icoe_localsocket_connect(void) { int ret = -1; int sock ; struct sockaddr_un addr; socklen_t socket_len; memset(&addr, 0, sizeof(addr)); size_t namelen; sock = socket(AF_LOCAL, SOCK_STREAM, 0); if(sock < 0) { printf("socket create error: %s", strerror(errno)); return -1; } namelen = strlen(server); /* unix_path_max appears to be missing on linux */ if (namelen > sizeof(addr) - offsetof(struct sockaddr_un, sun_path) - 1) { printf("socket address error: %s", strerror(errno)); return -1; } strcpy(addr.sun_path, server); addr.sun_family = AF_LOCAL; socket_len = namelen + offsetof(struct sockaddr_un, sun_path) + 1; ret = connect(sock, (struct sockaddr*)&addr, socket_len); if(ret < 0) { printf("connect server failed %s \n", strerror(errno)); return ret; } return sock; } int icoe_localsocket_send(int socket,char *cmd,int len) { return send(socket, cmd, len, 0); } int main(void) { int sock ; int ret,t = 0; char cmd[] = "upgrade"; int len = 0; struct timeval testTime1, testTime2; double db_time1, db_time2; double max_wait_time = 0.0; char rcvBuf[1024]; do{ sock = icoe_localsocket_connect(); if(sock < 0 ){ printf("Error:icoe localsokcet create error %d\r\n",sock); } ret = icoe_localsocket_send(sock,cmd,strlen(cmd)); if(ret < 0 ){ printf("Error:icoe localsocket send \r\n",ret); } t++; if(t > 3){ return -1; } }while(ret < 0); max_wait_time = (double)90*1000; gettimeofday(&testTime1, NULL); db_time1 = testTime1.tv_sec * 1000 + (double)(testTime1.tv_usec) / 1000; while(max_wait_time > 1e-1) { memset(rcvBuf, 0, sizeof(rcvBuf)); if(recv(sock, rcvBuf, sizeof(rcvBuf) - 1, MSG_DONTWAIT) > 0 ) { printf("recv %s\n", rcvBuf); if(strstr(rcvBuf, "succ")) { printf(" update success\n"); close(sock); return 0; }else if (strstr(rcvBuf, "fail")) { printf("fail to update\n"); close(sock); return -1; } } gettimeofday(&testTime2, NULL); db_time2 = testTime2.tv_sec * 1000 + (double)(testTime2.tv_usec) / 1000; max_wait_time -= db_time2 - db_time1; db_time1 = db_time2; } if(max_wait_time <= 1e-1) { printf("fail to recv response from server\n"); close(sock); return -1; } return 0; }