保时捷帕拉梅拉(971)开通全屏Carplay

2023/06/13 12:52
阅读数 1K
AI总结

本文已获好兄弟(作者)授权。

        时隔了五年的失踪人口回归,这五年作者也在打磨自身,沉浸在网络安全行业,一直想写下这篇文章,却又不知如何起笔,明知道这篇文章可能触碰到了国内这些改装店的利益,但是无论是早些年的wooyun还是现在的52pojie,互联网的精髓在于share,我承认这是一个知识付费的时代,但是利用开源项目赚取大量的车主改装费,实在是令人作呕,况且这个固件的作者明确声明禁止商用。

作者的声明

        好了,废话就不多说了,下面开始Porsche 971 帕拉梅拉的全屏carplay开通教程新款保时捷帕拉梅拉的carplay设计的比较恶心,他只会在中控屏幕中显示一半的位置,看起来特别不协调。

        那么我们怎么样才能让他变成全屏显示呢,首先,我们要确定我们的车机固件版本

在系统设置-软件更新-版本信息中查看


        就比如笔者这辆,软件版本 MHI2_CN_POG24_P0822 ,其中MHI2 代表的是 MIB2 High车机 CN代表中国 POG24代表宽屏触控车机(同理POG11就代表早期PCM4.0及以前的车机版本) P0822就是软件版本号

        我们用MIB helper去查询我们的版本信息

http://mib-helper.com/index.php mib-helper.com/index.php

        这是国外大神制作的MIB查询工具,可以帮我们根据版本号寻找对应的补丁

MIB-Helper


如作者这辆,最新的版本补丁为MHI2_CN_POG24_K1018,其他版本的也可以据此查询,找到对应的版本补丁。我们去这个网站下载最新的补丁。用户名:guest    密码:guest

MIB Solution :: Login mibsolution.one/#/1/18



        这个文件几乎包含了全部MIB车机的补丁

        下一步,我们就要祭出我们的大杀器了

GitHub - Mr-MIBonk/M.I.B._More-Incredible-Bash: M.I.B. - More Incredible Bash - The Army knife for Harman MIB 2.x aka MHI2(Q) units github.com/Mr-MIBonk/M.I.B._More-Incredible-Bash

        在GitHub上下载这个开源的MIB利用工具


        在这里选择发行版,下载

        这是下载之后解压的全部内容,下载之后我们需要准备一张SD卡,并且格式化为fat32格式,把上面的文件全部解压到SD卡中。

        接着我们把刚刚下载的全部的补丁文件放到SD卡的patches目录中


        这时候电脑端的准备工作就全部OK了,下面我们把SD卡插入到车内(帕拉梅拉是插在副驾驶手套箱内的SD卡槽)后启动车辆,在车机开启了之后,在主菜单同时按下中间的小圆纽和media三秒,进入红色工程模式。

        这时候屏幕的左边会跳出软件更新,我们选择从SD卡升级,然后一直下一步,这时候屏幕会重启几次,不要管他,最后完成他会自动返回主菜单(如果提示插入诊断设备备份的话,点击不备份就可以)。


耐心等待就好

        更新结束后进入到主菜单,这时候只是加载完了工具,并没有烧录补丁,所以这时候的carplay还是半屏的,我们要进入到绿色工程模式,进行全屏carplay的刷入

绿色工程模式这么进入

        这时候,车辆的车机应该就变成了这样

显示的内容可能不太一样,笔者这里是ifconfig画面

        刚开始会有两个选项,我们选择MIB,进入mib后进入这个菜单

    multimedia_system/porsche/pog24,我们选择 Enable widescreen CarPlay,然后车机会自动重启,重启之后我们的宽屏幕carplay就刷好了

        至此,全屏carplay的刷写过程就全部结束了,至于无良商家所说的所谓正版全屏Carplay,正版激活码之类的,纯属无稽之谈,口说无凭,笔者用了一点时间root掉了自己的这台帕拉梅拉的车机系统,这就是一个非标准的Linux系统。

    笔者跟踪了一下开启宽屏carplay的代码

    继续追踪g24wide这个java文件

package de.audi.app.terminalmode.pgen2;

import de.audi.app.terminalmode.AbstractTerminalModeConfiguration;
import de.audi.atip.base.IFrameworkAccess;

public class PGen2TMConfiguration extends AbstractTerminalModeConfiguration {
private final int screenOffsetX = Integer.parseInt(System.getProperty("terminalmode.screenoffsetx", isRightHandDrive() ? "506" : "134"));

private final int screenOffsetY = Integer.parseInt(System.getProperty("terminalmode.screenoffsety", "55"));

private final int touchpadX = Integer.parseInt(System.getProperty("terminalmode.touchpadx", "1440"));

private final int touchpadY = Integer.parseInt(System.getProperty("terminalmode.touchpady", "540"));

public PGen2TMConfiguration(IFrameworkAccess paramIFrameworkAccess) {
super(paramIFrameworkAccess);
}

public boolean hasKnob() {
return true;
}

public boolean hasTouchscreenHigh() {
return true;
}

public String getScreenName() {
return "Porsche";
}

public boolean isAutoConnect() {
return false;
}

public boolean getStoreUserAcceptState() {
return false;
}

public boolean shouldShowDisclaimerAtLeastOnce() {
return true;
}
public boolean isKnobDirectionInverted() {
return true;
}

public boolean usesOldMediaConnector() {
return true;
}

public int getScreenOffsetX() {
return isRightHandDrive() ? 0 : 114;
}

public int getScreenOffsetY() {
return 55;
}
public int getScreenResolutionX() {
return 1440;
}

public int getScreenResolutionY() {
return 540;
}

public int getWindowResolutionX() {
return 1326;
}

public int getWindowResolutionY() {
return 480;
}

public int getTMWindowResolutionInXAxis() {
return 1326;
}
public int getPhysicalDisplayHeight() {
return 110;
}

public int getPhysicalDisplayWidth() {
return 295;
}

public int getTouchPadResolutionX() {
return this.touchpadX;
}

public int getTouchPadResolutionY() {
return this.touchpadY;
}

public boolean isTouchScreenInputWidget() {
return true;
}

public boolean hasBothPhoneMFLKeys() {
return true;
}

public boolean supportsDeletionOfConnectedDevices() {
return true;
}

public int get
DSICarPlayScreenResolution() {
return 3;
}

public int getCarPlayPhysicalDisplayHeight() {
return 110;
}

public int getCarPlayPhysicalDisplayWidth() {
return 295;
}

public boolean hasTwoVirtualButtonModels() {
return false;
}

public boolean useDSIAndroidAuto2() {
return true;
}
}

    根据Apple给出的MFI开发文档,车机的分辨率确实有所变化


        但这并不代表就是盗版,因为代码中并未对IAP2的认证协议进行欺骗或者修改,修改的只是车机的部分的显示代码,所谓激活码,也不过就是telnet的登陆密码,跟apple的MFI八竿子打不着,不存在盗版正版一说。

        root掉车机系统后,你可以在车机上做任何事情,因为他就是一台Linux,具体做什么大家就自行发挥想象力把,有兴趣想root的,也可以持续关注,我有时间就写

搬运著名出处和作者

        最近在研究piwis3,如果各位有兴趣的话,下次为大家公开971/9Y0等sport chrono和弹射的开通方法,算法,让改装店不赚你冤枉钱。


本文分享自微信公众号 - 黑白天实验室(li0981jing)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
0 评论
0 收藏
1
分享
AI总结
返回顶部
顶部