I would be interested in unlocking the gps typing while driving, and anyway to get ANdroid auto on there
/*
* Decompiled with CFR 0_114.
*/
package kona.opennav;
import com.harman.logger.SystemLogger;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import kona.opennav.OpenNavActivationListener;
import kona.opennav.OpenNavException;
import kona.opennav.OpenNaviPackageDescription;
import net.sf.microlog.core.Logger;
public class OpenNavActivation {
public static final int ACTIVATION_CODE_STATUS_SUCCESS = 0;
public static final int ACTIVATION_CODE_STATUS_FAILURE = -1;
private static final String OPENNAVACTIVATION_CLASS_PATH = "com.harman.service.opennav.OpenNavActivationImpl";
private static OpenNavActivation openNavActivation;
private Class openNavActivationImplClass = null;
private Object openNavActivationImplObject = null;
private OpenNavActivation() throws OpenNavException {
try {
this.openNavActivationImplClass = Class.forName("com.harman.service.opennav.OpenNavActivationImpl");
}
catch (ClassNotFoundException e) {
e.printStackTrace();
}
if (this.openNavActivationImplClass == null) {
throw new RuntimeException("OpenNavActivation service is not supported.");
}
try {
Method getInstanceMethod = this.openNavActivationImplClass.getDeclaredMethod("getInstance", new Class[0]);
if (getInstanceMethod != null) {
try {
this.openNavActivationImplObject = getInstanceMethod.invoke(null, new Class[0]);
}
catch (IllegalArgumentException e) {
SystemLogger.LOGGER.error("OpenNavActivation: contructor ", e);
this.openNavActivationImplObject = null;
}
catch (IllegalAccessException e) {
SystemLogger.LOGGER.error("OpenNavActivation: contructor ", e);
this.openNavActivationImplObject = null;
}
catch (InvocationTargetException e) {
SystemLogger.LOGGER.error("OpenNavActivation: contructor ", e);
e.printStackTrace();
this.openNavActivationImplObject = null;
}
}
}
catch (SecurityException e) {
SystemLogger.LOGGER.error("OpenNavActivation: contructor ", e);
this.openNavActivationImplObject = null;
}
catch (NoSuchMethodException e) {
SystemLogger.LOGGER.error("OpenNavActivation: contructor ", e);
this.openNavActivationImplObject = null;
}
if (this.openNavActivationImplObject == null) {
throw new OpenNavException("Navigation Service is not available.");
}
}
public static OpenNavActivation getInstance() throws OpenNavException {
if (openNavActivation == null) {
openNavActivation = new OpenNavActivation();
}
return openNavActivation;
}
public void registerOpenNavActivationListener(OpenNavActivationListener activationListener) throws OpenNavException {
try {
Class[] arrclass = new Class[1];
Class class_ = OpenNavActivationListener.class;
arrclass[0] = class_;
Method getActivationPkgListMethod = this.openNavActivationImplClass.getMethod("getNaviPackageListForActivation", arrclass);
try {
getActivationPkgListMethod.invoke(this.openNavActivationImplObject, activationListener);
}
catch (IllegalArgumentException e) {
SystemLogger.LOGGER.error("OpenNavActivation: registerOpenNavActivationListener ", e);
}
catch (IllegalAccessException e) {
SystemLogger.LOGGER.error("OpenNavActivation: registerOpenNavActivationListener ", e);
}
catch (InvocationTargetException e) {
SystemLogger.LOGGER.error("OpenNavActivation: registerOpenNavActivationListener ", e);
throw new OpenNavException("Navigation Service is not available.");
}
}
catch (SecurityException e) {
SystemLogger.LOGGER.error("OpenNavActivation: registerOpenNavActivationListener ", e);
}
catch (NoSuchMethodException e) {
SystemLogger.LOGGER.error("OpenNavActivation: registerOpenNavActivationListener ", e);
}
}
public int setActivationCode(OpenNaviPackageDescription packageDiscription) throws OpenNavException {
int code;
if (packageDiscription == null || packageDiscription.getActivationCode() == null) {
throw new NullPointerException("OpennaviPackageDescription and activationCode should not be null");
}
code = -1;
try {
Class[] arrclass = new Class[1];
Class class_ = OpenNaviPackageDescription.class;
arrclass[0] = class_;
Method method = this.openNavActivationImplClass.getMethod("applyActivationCode", arrclass);
try {
Object objectCode = method.invoke(this.openNavActivationImplObject, packageDiscription);
code = (Integer)objectCode;
}
catch (IllegalArgumentException e) {
SystemLogger.LOGGER.error("OpenNavActivation: setActivationCode ", e);
}
catch (IllegalAccessException e) {
SystemLogger.LOGGER.error("OpenNavActivation: setActivationCode ", e);
}
catch (InvocationTargetException e) {
SystemLogger.LOGGER.error("OpenNavActivation: setActivationCode ", e);
throw new OpenNavException("Navigation Service is not available.");
}
}
catch (SecurityException e) {
SystemLogger.LOGGER.error("OpenNavActivation: setActivationCode ", e);
}
catch (NoSuchMethodException e) {
SystemLogger.LOGGER.error("OpenNavActivation: setActivationCode ", e);
}
return code;
}
public boolean isNavActivated() throws OpenNavException {
boolean isNavActive;
isNavActive = false;
try {
Method isNavActiveMethod = this.openNavActivationImplClass.getDeclaredMethod("isNavActivated", new Class[0]);
try {
Boolean returnVal = (Boolean)isNavActiveMethod.invoke(this.openNavActivationImplObject, new Class[0]);
isNavActive = returnVal;
}
catch (IllegalArgumentException e) {
SystemLogger.LOGGER.error("OpenNavActivation: isNavActivated ", e);
}
catch (IllegalAccessException e) {
SystemLogger.LOGGER.error("OpenNavActivation: isNavActivated ", e);
}
catch (InvocationTargetException e) {
SystemLogger.LOGGER.error("OpenNavActivation: isNavActivated ", e);
throw new OpenNavException("Navigation Service is not available.");
}
}
catch (SecurityException e) {
SystemLogger.LOGGER.error("OpenNavActivation: isNavActivated ", e);
}
catch (NoSuchMethodException e) {
SystemLogger.LOGGER.error("OpenNavActivation: isNavActivated ", e);
}
return isNavActive;
}
}
Have you seen this?
This is exactly what I am looking for. But they want a crazy $560 US for it. #SmokingCrack
https://youtu.be/67cdq2uiNu0
this actually looks pretty cool. anyone actually done this to see if it works?
I'd assume that they didn't actually install android on the uconnect, but are connecting it to a separate android box. I wouldn't think it would be too hard to connect the resistive touchscreen to an adapter for android. After that all you would need is a lockpick to accept a new video input.
So I am one of the people to spend a boatload of money on a system running Android 4.4.4. I realize it's a bunch of money but it's not something I was going to be able to make on my own and I wanted to make my uconnect more feature rich and this had better options to me than the JAX or Lockpick options did. It's basically and Android box with inputs and outputs and has a circuit board you hook up inside the uconnect head unit that allows the Android system to access the touchscreen and monitor. There are some limitations I am finding but overall I am pleased. Not having a multi-touch touchscreen has some minor limits but you can still do most everything. I am going to make a post in this forum to see if anyone can help me figure out the other 2 issues I am dealing with but if anyone wants further info about this setup feel free to ask.
So I am one of the people to spend a boatload of money on a system running Android 4.4.4. I realize it's a bunch of money but it's not something I was going to be able to make on my own and I wanted to make my uconnect more feature rich and this had better options to me than the JAX or Lockpick options did. It's basically and Android box with inputs and outputs and has a circuit board you hook up inside the uconnect head unit that allows the Android system to access the touchscreen and monitor. There are some limitations I am finding but overall I am pleased. Not having a multi-touch touchscreen has some minor limits but you can still do most everything. I am going to make a post in this forum to see if anyone can help me figure out the other 2 issues I am dealing with but if anyone wants further info about this setup feel free to ask.
Yea the one from Carperformance.se.The setup I linked to? The one question I had after watching their video is whether it has voice input?
i just bought the carperformance system. hope to get it today and install ...
That depends on what you consider invasive. You ha e to open up the back of the radio to connect the additional circuit board, but it is just a matter of detaching and reattaching some data cables, no soldering or anything crazy.I just read the PDF installation directions, please let me know how invasive the installation ends up being. $550 dollars is super steep but im very interested. Thanks!
I just read the PDF installation directions, please let me know how invasive the installation ends up being. $550 dollars is super steep but im very interested. Thanks!
Yea the one from Carperformance.se.
Yes it does have voice input, it comes with a mic. I use it for OK Google commands. The one crappy thing is I am unable to make OK Google detection happen from any screen, the option is just not available even though I have the most updated versions running, but that is more of Google not letting that option be used for this. I would love to find a workaround though. For now I just push the button on the home screen and say what I want.
And disregard my complaint in my other post I started about using a different launcher, it seems as though it's something related to my particular device. I spoke with another guy that has it and he's been running the Nova launcher for a while now and has never had it factory reset.
So the launcher thing might be a slight issue, I had to get an older version of the box sent out to me because for some reason the new one would crash after installing a different launcher, yours might be the same. I made them aware of it so they are talking with their manufacturer to fix it. I would test it before loading everything up because the crash wipes everything.https://www.youtube.com/watch?v=-hSZxRKMVcM&feature=youtu.be
was pretty easy
works very good.
---------- Post added at 12:19 AM ---------- Previous post was at 12:13 AM ----------
did the nova launcher work well with it?
i installed mine yesterday. never tried nova launcher..
Just completed this on my MY14, thanks for the detailed writeup. For the case of MY14 I enabled the cargo cam but it caused my reverse camera not to automatically enable when in reverse, I also didn't have the option to switch between cameras using the display.And now for something completely (slightly) different.
FRONT CAMERA (cargo cam) Install:
Why: Because I can, also the car washes in the UK are much narrower than in the USA so hopefully will mean I do not have to get out of the car to check my wheel placement when using a car wash in the UK.
A: You will need this https://www.zautomotive.com/product/z_vid/ (female rca video cable with correct terminal pins) Note: postage to the UK is 82 dollars (they do not ask or tell you this before hand). Or save money and make your own cable - correct terminal pins link is below.
B: You will need a camera kit. My Uconnect is 480i only. https://www.amazon.co.uk/dp/B0BZTX3XV7 (It is my understanding that using 720p will not work on my Uconnect, So be carefully with camera settings)
C: I used a micro 2 fuse tap to provide power to the camera from the engine fuse box. https://www.amazon.co.uk/dp/B09VYQGPZZ
D: You will need plastic trim removal tools (These are a must, bigger sturdy ones are best)
1. Remove the Uconnect bezel. Open lower door (not part of bezel). pull bottom of bezel (not door) until clips release. 1/4 to 1/2 inch gap only. Work your way around with trim removal tool. Do top last. All clips must be released. Disconnect wire harness and set aside bezel. Use brute force at your own risk, safer to use the trim tool to release all clips.
2. Undo the four 7mm bolts to realease the Uconnect radio. Do not drop the bolts. Store bolts in cup holder.
3. Put microfibre cloth on lower door to prevent scratches. Pull out radio, so you can see cables. Take photo (not really necessary, as cables are colour coded).
4. Release cables, push flat tab down and pull cable connector out (can use screw driver to push tab down)
5. Release the 52 pin harness (pull the locking handle up first (push in then pull up) [see big yellow arrow in photos] ), Photo of released 52 pin connector is with locking handle removed for easier access to pin holes, The locking handle can go on either way round, Set the Uconnect aside on a towel.
6. Use a thin but wide flathead screw driver to loosen the red locking plate from the 52 pin connector. Start at center of short sides and work all way round. Do not need to completely remove it from connector. (1/2 inch should do)
7. Install the female RCA video cable. Black into pin 25 first then Yellow into pin 24. The pins must go in the correct way. The flat side (uncrimped side) goes in along the center ridge (see picture with big red arrows). Push in untill you hear a click. I used a pin removal tool to push down on the pin from the top. These pins are very small (less than 1.5mm). This is the most important part to get right, so do not rush this step. I used needle nose pliers to hold the wire to correctly guide the pin into the right hole. Push the red locking plate back into place.
8. Use electrical tape to tape the RCA video cable to the main wire bundle. (prevents it from being pulled)
9. Connect the camera male connector to the female RCA connector, Use eletrical tape to tape the camera cable to the main wrie bundle.
10. Feed the camera cable to the passenger side and pull cable through into footwell.
11. Reinstall Uconnect. When reinstalling 52 pin connector make sure locking handle is up for easy install.
12. Use alfaOBD to select "VehConfig 1-CHMSL Camera" present. (This step can be done before)
13. Lucky 13 - Before routing cable to engine bay, test that your CargoCam setup actually works. Connect camera and temp power source. Also check everything else works (did you forget to reattach a cable to the Uconnect).
14. If all is good. Route camera cable to engine bay via passenger side grommet, then cross over to driver/fusebox side in engine bay. On my 2015 JGC Summit all grommets are already fully used. Remove footwell side plastic trim then remove soft trim below glove box, you should now have access to firewall grommet.
15. Install front camera and route wire as close to fusebox as it will go. The front grill holes are large so I used M8 x 30mm stainless steel washers, https://www.amazon.co.uk/dp/B0BJZ2W6CH
16. Route and connect initial cable to front camera cable near fusebox.
17. Drill hole in back of fusebox, install rubber grommet (this is for the camera power wire)
18. Install micro 2 fuse tap with 5amp fuse (I used fuse F40 -Daytime running lights), connect positive wire to fuse tap.
19. Connect negative wire (My car had a bolt near the fusebox)
20. Test and Adjust your camera position. (still need to adjust camera on mine)
21. Reinstall the Uconnect bezel, remember to reconnect the wire harness first.
All done.
The CargoCam screen has 2 icons on the left top of the screen, these select CargoCam (front camera) or standard reverse camera.
Also when you engage reverse gear the standard reverse camera comes on, but also has 2 icons so you can select CargoCam while reversing.
CargoCam will stay on until you reach a speed of 10 mph.
You can also add a camera on pins 21/22. On alfaOBD select "ECUConfig 3-DTV front camera" or "ECUConfig 3-DTV side camera". In addition to the CargoCam icon you will also see an additional normal camera icon. However, I do not know how the DTV camera behaves (i.e. does it stay on while driving?)
It is relatively easy to identify the required pin holes since pin holes 21 thru 26 are empty (no wires in them)
SAVE MONEY make your own cable, this is the correct terminal pin:
UK: https://www.digikey.co.uk/en/products/detail/te-connectivity-amp-connectors/638551-3/10478563
USA: https://www.digikey.com/en/products/detail/te-connectivity-amp-connectors/638551-3/10478563
( Multiple countries - Select USA link on this page then Press on flag to select your country - then Select USA link on this page again )
Rca Male/Female Audio Cable Av Single-head Video Stereo Connect Extension Wire | eBay
1PCS Cable RCA female or male for choose.www.ebay.co.uk
local service = require("service")
local methods = {}
local myservice
local myICSKeys = "com.harman.service.ICS"
local layerManager = "com.harman.service.LayerManager"
local currentStatus = 0
local function emit(signal, params)
service.emit(myservice, signal, params)
end
local function invoke(busname, method, params, timeout)
return service.invoke(busname, method, params, timeout)
end
local function subscribe(name, signal, handler)
assert(type(handler) == "function")
return assert(service.subscribe(name, signal, handler))
end
local function onCameraChangeRequest(signal, data)
if data.key == "back" and data.pressed == true then
dbg.print("Camera Change requested")
if currentStatus == 0 then
currentStatus += 1
service.invoke(layerManager,"viewCameraInput")
elseif currentStatus == 1 then
currentStatus += 1
service.invoke(layerManager,"viewVES1Input")
else
currentStatus = 0
service.invoke(layerManager,"stopViewInput")
end
end
end
local function init()
myservice = assert(service.register("com.harman.service.CargoCam", methods))
subscribe(myICSKeys, "key", onCameraChangeRequest)
end
init()
Sounds exiting Leighm0 ! Any chance you could draft a step by step ' how to' for someone like me, who is a little tech savvy but not smart enough to figure our how to do this himself?
#!/usr/bin/lua
local os = os
-- copy patched main.swf, nav.sh, navRestart.sh, NaviServer2
os.execute("cp -f /fs/usb0/main.swf /fs/mmc0/app/share/hmi")
os.execute("cp -f /fs/usb0/nav.sh /fs/mmc0/app/bin")
os.execute("cp -f /fs/usb0/NaviServer2 /fs/mmc0/app/bin")
os.execute("cp -f /fs/usb0/navRestart.sh /fs/mmc0/app/bin")
-- remove old maps, copy new map files from usb0 content folder
os.execute("rm -rf /fs/mmc0/nav/NNG/content/building/Australia*")
os.execute("rm -rf /fs/mmc0/nav/NNG/content/map/Australia*")
os.execute("rm -rf /fs/mmc0/nav/NNG/content/phoneme/Australia.ph*")
os.execute("rm -rf /fs/mmc0/nav/NNG/content/poi/Australia*")
os.execute("rm -rf /fs/mmc0/nav/NNG/content/speedcam/Australia*")
os.execute("cp -rf /fs/usb0/content /fs/mmc0/nav/NNG")
-- copy map license files
os.execute("cp -f /fs/usb0/*.lyc /fs/mmc0/nav/NNG/license")
-- !!!!! remove old XLETS and copy patched xlets to mmc1 ( OPTIONAL : Remove the following 5 LINES if you dont have modified XLETS to copy over ) !!!!!
os.execute("mount -uw /fs/mmc1/")
os.execute("rm -rf /fs/mmc1/kona/preload/xlets/*")
os.execute("rm -rf /fs/mmc1/xletsdir/xlets/*")
os.execute("cp -rf /fs/usb0/xlets/* /fs/mmc1/kona/preload/xlets")
os.execute("cp -rf /fs/usb0/xlets/* /fs/mmc1/xletsdir/xlets")
-- change permissions for new files copied
os.execute("chmod 555 /fs/mmc0/app/share/hmi/main.swf")
os.execute("chmod 755 /fs/mmc0/app/bin/nav.sh")
os.execute("chmod 755 /fs/mmc0/app/bin/NaviServer2")
os.execute("chmod 755 /fs/mmc0/app/bin/navRestart.sh")
os.execute("chmod 555 /fs/mmc0/nav/NNG/content/building/Australia*")
os.execute("chmod 555 /fs/mmc0/nav/NNG/content/map/Australia*")
os.execute("chmod 555 /fs/mmc0/nav/NNG/content/phoneme/Australia*")
os.execute("chmod 555 /fs/mmc0/nav/NNG/content/poi/Australia*")
os.execute("chmod 555 /fs/mmc0/nav/NNG/content/speedcam/Australia*")
os.execute("chmod 555 /fs/mmc0/nav/NNG/license/*.lyc")
os.execute("chmod 555 -R /fs/mmc1/kona/preload/xlets")
os.execute("chmod 555 -R /fs/mmc1/xletsdir/xlets")
-- remount mmc0/1 as read-only mode
os.execute("mount -ur /fs/mmc1/")
os.execute("mount -ur /fs/mmc0/")
-- stop mmc mount and end script
os.execute(mountpath.."/usr/share/scripts/mmc.sh stop")
Just adding a DisableDRM file does not actually enable the Wifi App, you need to enable it first - this is just to bypass DRM checks... which are only valid on older firmware now days.. you will need to hack SWF files to ignore DRM checks now days.
---------- Post added at 02:07 PM ---------- Previous post was at 02:06 PM ----------
YES many Thanks Leighm0, the Wifi button is activ!
But... which swf needs to be changed to disable the DRM?
Edit:
now i have the wifi button , but no gps signal!
my oiginal /dev/fram/productid "VP4_EU_MY14_REVA_N_D_N" to change "VP4_EU_MY14_REVA_E_D_N" After Change, no GPS Signal.
itś not an easy job
Here are my hacks, i cant remember which one got the Ecell GPS disabled (to use the normal GPS.. possibly the last one lol). These need to be executed when car is running, which i do from booter.lua which i get called from a modified media.sh on bootup. I believe i also use flexgps_ndr.sh to allow GPS.. cant recall what i modified in the file, dont have the original on hand to compare.
Code:os.execute("touch /fs/etfs/DISABLE_SPEED_LOCKOUT") os.execute("touch /fs/etfs/NAV_SECRETS") os.execute("touch /fs/etfs/enableEngMenu") os.execute("touch /fs/etfs/enableDlrMenu") os.execute("touch /fs/etfs/enableDealerMenu") os.execute("touch /fs/etfs/disableDRM") os.execute("touch /fs/etfs/disable_DRM") os.execute("touch /fs/etfs/disable_SpeedLockout") os.execute("touch /fs/etfs/useWLAN4QXDM") os.execute("touch /tmp/networkingpossible") os.execute("touch /tmp/ECELL_GPS_DISABLED")
Here is a link to all the files ive modified and uploaded to my head unit, they are for v16.13.13 MY14 car, suggest you either use them on the exact same firmware version, or decompile and compare to your firmwares SWF files and modify on your specific firmware.
https://mega.nz/#!9gkQhTiR!6anymlEx7ik2zl-Df_Rg3_ls70PgxQOy2JjpDodcBJk
I've also included all my hacked .sh and .lua files i run on the unit, and a "script.lua" which i use on the firmware update hack to push files to and from the unit, i have commented out all the commands - i usually just uncomment the ones i need to run off the usb upgrade, then go put it in my car and run it..
Enjoy.
---------- Post added at 07:04 AM ---------- Previous post was at 07:03 AM ----------
Hi Leighm0, absolutely interested to check some of these links of yours, if it would be possible to try out ready-made NaviServer2 binary for testing. Have you managed to try this combination (custom binary + fresh iGo maps) on 16.x software version as well?
attached file above should help you out. Yes I run 2017 iGO maps with valid license on my car.. just need to get the license and map files..