RX8Club.com

RX8Club.com (https://www.rx8club.com/)
-   Series I Interior, Audio, and Electronics (https://www.rx8club.com/series-i-interior-audio-electronics-24/)
-   -   My new CarPC Project - Honeycomb Here I Come (https://www.rx8club.com/series-i-interior-audio-electronics-24/my-new-carpc-project-honeycomb-here-i-come-225539/)

ShellDude 11-15-2011 09:40 PM

My new CarPC Project - Honeycomb Here I Come
 
1 Attachment(s)
Over the past couple years I've been running a Windows 7 micro itx setup. With it I've had full HU / steering integration using a Grom Car2PC adapter and some custom code I developed for media management.

I've been following the Android tablet market for some time and have finally landed on a replacement.

I'll be using a Dell Streak 7" 3G/4G as a replacement for my entire setup. The end result should be pretty impressive as I'll be replacing about 30' of cabling, the lilliput LCD, and my trunk stored mini-itx PC with nothing more than the tablet (mounted via cradle in my jdm retractable nav tray), a pdmi cable, a hidden multimedia dock (supplies power, 3.5mm audio, and usb), and the FTDI maintained Android serial drivers to control my grom car2pc adapter with some new custom code developed on my part.

Anyway, I'll keep this thread updated as I progress. I'll be tackling the project in multiple steps, initially taking a step back and loosing some integration -- namely HU control, but have no doubt I'll be back to where I am today upon conclusion -- likely 3-6 months out.


ShellDude 11-15-2011 09:41 PM

Various resources collected throughout the project:

Mazda JDM Retractable Navigation Box
http://japanparts.com/db/partslist.p...EY=091-030-004

Carnetix P2140 Intelligent Power Supply
http://www.carnetix.com/P2140/CNXP2140.htm

My own Communications & Control Library for the P2140
http://www.carnetix.com/forum/showthread.php?t=1963

Kensington K39224US PowerBolt Micro Car Charger


Dell Streak Product Page
http://www.dell.com/us/p/mobile-stre...025,901pdb6671

Dell Streak 7 Kernel Sources
http://opensource.dell.com/releases/streak7

SlipGrip RAM-HOL Streak 7 Mount
http://www.ebay.com/sch/i.html?_nkw=...ount&_osacat=0

Dell PDMI Dock
http://accessories.dell.com/sna/Popu...onfig#Overview
http://www.streaksmart.com/2010/12/s...ll-streak.html

Grom Mazda Car2PC Adapter
http://www.indashpc.org/new/adapters/car2pc-maz.html

Grom Mazda AUX Bluetooth Adapter
http://www.gromaudio.com/store/aux_a...e_adapter.html

USB A Female to USB A Female Adapter (should assist with OTG)
http://ntcdistributing.com/products/usb-connectors.htm

FTDI Android Homepage
http://www.ftdichip.com/Android.htm

FTDI Kernel & Kernel Module Build Guide
http://www.ftdichip.com/Support/Docu...to_Android.pdf

Blue Bluetooth OBD2 Adapter (this is the one I have)
http://www.dealextreme.com/p/elm327-...r-dongle-16921

libVoyager (open source Android OBD2 communications library)
https://github.com/gtosoft/libvoyager

OBD2 Wikipedia Page
http://en.wikipedia.org/wiki/OBD-II_PIDs

ShellDude 11-15-2011 09:41 PM

reserved for even more future build updates

ShellDude 11-15-2011 09:42 PM

reserved just in case I need it

ShellDude 11-26-2011 09:05 PM

4 Attachment(s)
I tore down my center console today and pulled the lilliput screen and retractable tray. After a little bit of drilling into the existing center stand I got the $44 car mount I bought off ebay installed with no issues.

I'll put it back into the car tomorrow running a temporary 3.5mm audio plug to my car2pc adapter and a 12v lead (going to hijack the existing one I wired for the Lilliput) for the pdmi plug on the Streak.

The Streak 7s dimensions (width & height) exactly match the Lilliput 7". The depth is a little less than the Lilliput.. Basically a perfect fit for the tray.

Here are some pictures of the tray mounted:


And the mount itself (stole the marketing image from ebay):


9krpmrx8 11-26-2011 09:47 PM

That is badass man. I can't wait to see the finished product.

ShellDude 11-26-2011 10:04 PM

thanks, 9k!

I'll have some more pictures up tomorrow once I've got the tray reinstalled into the console. Should provide a really good visual for the final setup.

Jedi54 11-26-2011 10:21 PM

looks awesome!
can't wait to see how this ends up as I've been giving more thought to simply using a tablet device for a carPC.

ShellDude 11-27-2011 03:06 PM

5 Attachment(s)
Got everything mounted temporarily as I await the 12V pdmi power converter. Initial impressions are OMFG this rocks!

Audio integration is complete. My one big TODO is getting the FTDI Serial enumerator kernel module built and incorporated. Once that is done I can do full on HU integration. Currently all I've got is volume control (although all I existing HU functions still work as was the case with my prior Win7 setup).

Here's a nice shot of JDM nab tray coming together prior to install into the car:

https://www.rx8club.com/attachment.p...1&d=1322427818

All the front console "guts":

https://www.rx8club.com/attachment.p...1&d=1322427818

First test:

https://www.rx8club.com/attachment.p...1&d=1322427818

All buttoned up (head on view):

https://www.rx8club.com/attachment.p...1&d=1322427887

Drivers Eye View:

https://www.rx8club.com/attachment.p...1&d=1322427818

9krpmrx8 11-27-2011 03:08 PM

That's money. I want.

ShellDude 11-27-2011 03:11 PM

4 Attachment(s)
Google Navigation:

https://www.rx8club.com/attachment.p...1&d=1322428208

Android Camera:

https://www.rx8club.com/attachment.p...1&d=1322428171

All stealth like when not in use:

https://www.rx8club.com/attachment.p...1&d=1322428171

And my final shot for the day, Parmer DashCommand for Android connecting via my cheapo Bluetooth ELM adapter:

https://www.rx8club.com/attachment.p...1&d=1322428171

flametail 11-27-2011 05:11 PM

Sub'd! I've wanted to do this when I first saw a thread on someone else thinking about it back in the summer. Where did you get the nav tray from? Also are you gonna post up your code to get the HU stuff up and running when completed?

ShellDude 11-27-2011 07:35 PM

best place to get the nav tray is from japanparts.com It is a Mazda (JDM) accessory. Any code and/or kernel modules I develop / modify will certainly be open sourced and available in binary and source forms once I get to that point.

flametail 11-27-2011 07:41 PM

Found it! For those in the future trying to find it, Mazda Retractable Navigation Box

ShellDude 11-27-2011 07:46 PM

I'll be sure to add it to the top posts once I take some time to clean up the thread.

foo77 11-30-2011 02:58 AM

looks great except those side connector, but overall clean install and nice job :)

ShellDude 11-30-2011 09:22 AM

I'll be building a pdmi male to pdmi female cable at some point in the near future to allow for a connection to a docking station. This will allow me to move the audio connection down to the dock (likely stored in my center console, behind the HU, or in the glove box) as well as get access to Honeycomb's USB device enumerations (which also requires some kernel tuning and custom code) for HU/steering control integration.

foo77 11-30-2011 07:18 PM

good to hear, waiting for the update :)

hoss -05 11-30-2011 10:40 PM

Looks good man. keep up the good work!

Tamas 11-30-2011 10:40 PM

This has got to be THE coolest car PC project.

Honestly, I contemplated building a car PC for a good while and put it away for various reasons... but if this gets done, I might become just a copycat and do the same thing.

Way to go, man. Thanks for sharing. Will look out for your future development news.

Tamas 12-01-2011 05:25 PM


Originally Posted by flametail (Post 4133377)
Found it! For those in the future trying to find it, Mazda Retractable Navigation Box

Holy smokes. :Eyecrazy:
That's friggin' EXPENSIVE! :(

HaydonGS 02-14-2012 10:04 PM

subbed, cant wait to see more on this

Ianspeed 02-15-2012 10:44 AM

Very cool. Subbed as well.

Diamond_Eyez 02-20-2012 03:39 AM

Looking into doing something like this sometime in the near future..Nicely done!!! Subscribed :)

ShellDude 02-20-2012 12:45 PM

Having failed to source, and not looking foward to "nano level" soldering, a pdmi to pdmi extension cable for integrated power, audio, and USB host mode, I have deviated a smidge plan wise.

I bought a GROM Bluetooth adapter (http://indashpc.org/new/aux_adapters/grom-aux-maz.html) and assuming all goes well I'll be discontinuing use of the car2pc adapter completely.

I'll be building some "hardening" code on Android to ensure the bluetooth link stays up... should simplify things considerably.

It's a little sad that I'm giving up on the car2pc interface. It was a treat to work with under Windows.

Matrx8 02-20-2012 11:55 PM

Dude. You have a frickin tablet in your car. *shakes shelldude* YOU HAVE A FRICKIN TABLET IN YOUR CAR!!! AND IT LOOKS GREAT TOO!!! Totally Stoked.

quicke 03-01-2012 12:40 PM

ok this is going to sound stupid but i tried to do this with my dell streak 7 and i can get S**t to work is there a soft ware you need to download or some thing i need. help me what do i need to do please help.

ShellDude 03-01-2012 06:34 PM

What exactly is it you tried to do? There are numerous aspects to this project, none of which up to this point have required custom code on the Streak -- however I will be doing some custom service work for the bluetooth stack shortly... just waiting on getting my 8 back from a turbo rebuild.

quicke 03-05-2012 12:49 PM

ok then how do you get the fuel and all of that to show up on your dell streak 7?

ShellDude 03-05-2012 10:33 PM

An ELM bluetooth adapter and any number of Android OBD2 apps. I believe I'm using Dashcommand in the screenshots.

Something like this should work fine:


ShellDude 03-25-2012 08:05 PM

Finally gutted the old PC, all wiring, and the car2pc adapter today.

the grom aux/Bluetooth adapter is installed and paired.

5v power from my carnetix p2140 is done too.

Now I've just got to put everything back together.

firebirdude 03-26-2012 08:11 AM

Time moves fast. Ice Cream Sandwich is now on your heels. :)

ShellDude 03-26-2012 10:37 AM


Originally Posted by firebirdude (Post 4221568)
Time moves fast. Ice Cream Sandwich is now on your heels. :)

Unfortunately the Dell steak will never have official ICS support and the current community development ROM for it does not support 3g.

I may even go back to gingerbread at some point.

ShellDude 04-05-2012 10:22 PM

I've started development on my Car Home activity. Wrapped up music and bluetooth remote control tonight.


Some things I plan to add:
  • Breadcrumb Location Storage to my home server
  • SMS location reply (via SMS TXT from me)
  • MMS Front/Rear Camera reply (via SMS TXT from me)
  • Remote Device Wipe

ShellDude 04-07-2012 11:15 PM

1 Attachment(s)
Still refining the base UI


Tamas 04-08-2012 01:41 AM

Very cool. Looking forward to further news about this.

Great song selection too :D:

Wish there was a way to find that mount for a sane price though...

ShellDude 04-14-2012 12:38 AM

1 Attachment(s)
I stumbled upon an Android open source OBD2 library yesterday and couldn't resist the urge to integrate it into my "RX-8 Home" app. After a little bit of trial and error I'm reading all of the basic OBD2 PIDs and have pulled in the ones I'm most interested in.


Over the next couple days I'll skin some cool gauges and integrated them in place of the current TextViews.

The library is called libvoyager and can be found here: https://github.com/gtosoft/libvoyager

I couldn't get any of the sibling sample projects to work unmodified, but after a little finesse I had my own utility class built that is working flawlessly.

Here's the code:

Code:

package com.shellware.CarHome;

import android.bluetooth.BluetoothAdapter;
import android.content.Context;

import com.gtosoft.libvoyager.android.ActivityHelper;
import com.gtosoft.libvoyager.db.DashDB;
import com.gtosoft.libvoyager.session.HybridSession;
import com.gtosoft.libvoyager.session.OBD2Session;
import com.gtosoft.libvoyager.util.EasyTime;
import com.gtosoft.libvoyager.util.EventCallback;
import com.gtosoft.libvoyager.util.GeneralStats;
import com.gtosoft.libvoyager.util.OOBMessageTypes;

public class OBDHelper {

        private Context ctx;
       
        // General Stats about the internals of the app.
        private GeneralStats mgStats = new GeneralStats();

        // Dash DB. Has OBD PID lookup tables and much more. see assets/schema.sql.
        private DashDB ddb = null;
       
        // Hybridsession is a class that lets us communicate using OBD or passive or
        // direct network commands. It manages various "session" classes to do this.
        private HybridSession hs;

        // ActivityHelper helps us perform Bluetooth discovery so we don't have to
        // write a ton of code.
        private ActivityHelper aHelper = null;
       
        private double voltage = 0d;
        private double iat = 0d;
        private double equiv = 0d;
        private double fuel = 0d;
        private double coolant = 0d;
        private double maf;
       
        public OBDHelper(Context ctx) {
           
                this.ctx = ctx;
               
                aHelper = new ActivityHelper(ctx);
                // Register with libvoyager to receive "we found an ELM device nearby"
                // message so when we perform a discovery, this method gets called.
                aHelper.registerChosenDeviceCallback(chosenCallback);
                // in the onResume method we will make the call to ActivityHelper to
                // actually kick off the bluetooth discovery.
               
                doBestAvailable();
        }
       
        private boolean doBestAvailable() {
                // kick off Bluetooth discovery. At this point the phone looks for
                // nearby bluetooth devices.
                // For each device, ActivityHelper checks its name to see if it's an OBD
                // device.
                // If the device seems to be an ELM OBD device, it calls the
                // "chosenCallback" event with details about the device (its MAC).
                if (hs == null || hs.getEBT().isConnected() != true) {
                        connectToBestAvailable();
                } else {
                        return false;
                }

                return true;
        }

        /**
        * Either connects to last known device, or performs a discovery to find
        * nearby OBD devices.
        */
        private void connectToBestAvailable() {
                String lastmac = aHelper.getLastUsedMAC();

                // Connect to last known device if possible. Otherwise do the usual
                // bluetooth scan.
                if (lastmac.length() == 17) {
                        // if we setupSession ourself, we are skipping the activityhelper
                        // conveniences of discovery/etc.
                        setupSession(lastmac);
                } else {
                        // let the activityhelper find the device and fire off the
                        // "chosenCallback" when it finds one.
                        aHelper.startDiscovering();
                }
        }

        /**
        * libVoyager can do the BT discovery and device choosing for you. When it
        * finds/chooses a device it runs the device chosen callback. This method
        * defines what to do when a new device is found.
        */
        private EventCallback chosenCallback = new EventCallback() {
                @Override
                public void onELMDeviceChosen(String MAC) {
                        setupSession(MAC);
                }
        };

        /**
        * This method gets called by the broadcast receiver, for bluetooth devices
        * which are "OBD" devices. This takes care of any necessary actions to open
        * a connection to the specified device. Run synchronized in case the
        * discovery process throws us multiple devices. We only want the first
        * valid one.
        *
        * @param deviceMACAddress
        * @return - true on success, false otherwise.
        */
        private synchronized boolean setupSession(String deviceMACAddress) {
                // If there's an existing hybrid session, shut it down.
                if (hs != null) {
                        hs.shutdown();
                }

                // instantiate dashDB if necessary.
                if (ddb == null) {
                        ddb = new DashDB(ctx);
                }

                aHelper.setLastUsedMAC(deviceMACAddress);

                // instantiate hybridsession, which is just a class that controls
                // subclasses such as Monitorsession and OBDSession, that communicate
                // with the network in different ways.
                hs = new HybridSession(BluetoothAdapter.getDefaultAdapter(),
                                deviceMACAddress, ddb, mLocalecbOOBMessageHandler);
                // after hybridsession is successful at opening the bluetooth
                // connection, we will get an OOB notification that the IO state changed
                // to "1".

                // Sets the session type to OBD2. nothing fancy.
                // hs.setActiveSession(HybridSession.SESSION_TYPE_OBD2);

                // register a method to be called when new data arrives.
                hs.registerDPArrivedCallback(mLocalDPNArrivedHandler);

                return true;
        }

        private int mLastIOState = 1234;

        private void ioStateChanged(int newState) {

                // Avoid non-events where iostateChanged is fired but no state change
                // actually occurred.
                if (newState == mLastIOState) {
                        return;
                } else {
                        mLastIOState = newState;
                }

                // Did bluetooth just establish connection? If so then kick off a
                // session detection to see what we're connected to.
                if (newState == 1) {
                        // Bluetooth just connected, so kick off a thread that does network
                        // detection and prepares the hybridsession class for use.
                        detectSessionInBackground();
                } else {
                        // Bluetooth just disconnected. ELMBT will try to reconnect a preset
                        // number of times, at a preset interval.
                        // TODO: Kill the auto detect routine in case it started and is still in progress.
                }
        }

        public void shutdown() {
                // give hs a chance to properly close the network/bluetooth link.
                if (hs != null)
                        hs.shutdown();
        };

        /**
        * Kicks off an asynchronous thread which does network/hardware detection
        * via the hybridSession class.
        */
        private void detectSessionInBackground() {
                new Thread() {
                        public void run() {
                                mgStats.incrementStat("netDetectAttempts"); // sets it to
                                                                                                                        // initial value, 1.
                                // loop until either 1. we detect the network, or 2. bluetooth
                                // disconnects.
                                // Typically this detection process takes 5-15 seconds depending
                                // on type of network. Cacheing optimizations haven't been built
                                // in yet but would be quite easy down the road.
                                while (hs.runSessionDetection() != true
                                                && hs.getEBT().isConnected() == true) {
                                        mgStats.incrementStat("netDetectAttempts");
                                        if (!EasyTime.safeSleep(1000))
                                                break;
                                }
                        }
                }.start();
        }

        /**
        * Define what action the hybridsession should take as it decodes data from
        * the OBD network.
        */
        private EventCallback mLocalDPNArrivedHandler = new EventCallback() {
                @Override
                public void onDPArrived(String DPN, final String sDecodedData, int iDecodedData) {

                        if (DPN.equals("VOLTS")) voltage = getPrimaryDPNValue(sDecodedData);
                        if (DPN.equals("TEMP_INTAKE")) iat = getPrimaryDPNValue(sDecodedData);
                        if (DPN.equals("TEMP_COOLANT")) coolant = getPrimaryDPNValue(sDecodedData);
                        if (DPN.equals("MAF_FLOW_RATE")) maf = getPrimaryDPNValue(sDecodedData);
                        if (DPN.equals("FUEL_LEVEL")) fuel = getPrimaryDPNValue(sDecodedData);
                        if (DPN.equals("COMMAND_EQUIVALENCE_RATIO")) equiv = getPrimaryDPNValue(sDecodedData);
                }
        };

        // Defines the logic to take place when an out of band message is generated
        // by the hybrid session layer.
        private EventCallback mLocalecbOOBMessageHandler = new EventCallback() {
                @Override
                public void onOOBDataArrived(String dataName, String dataValue) {

                        // state change?
                        if (dataName.equals(OOBMessageTypes.IO_STATE_CHANGE)) {
                                int newState = 0;
                                try {
                                        newState = Integer.valueOf(dataValue);
                                        ioStateChanged(newState);
                                } catch (Exception e) {
                                        e.printStackTrace();
                                }
                        }// end of "if this was a io state change".

                        // Bluetooth unable to connect to peer?
                        if (dataName.equals(OOBMessageTypes.BLUETOOTH_FAILED_CONNECT)) {

                                if (dataValue.equals("0")) {
                                        aHelper.startDiscovering();
                                }
                        }

                        // session state change?
                        if (dataName.equals(OOBMessageTypes.SESSION_STATE_CHANGE)) {
                                int newState = 0;

                                // convert from string to integer.
                                try {
                                        newState = Integer.valueOf(dataValue);
                                } catch (NumberFormatException e) {
                                        return;
                                }

                                // just connected? OBD mode?
                                if (hs != null && hs.getRoutineScan() != null) {
                                        if (newState >= OBD2Session.STATE_OBDCONNECTED) {
                                                // Add some datapoints to the "routine scan" which is an
                                                // automatic loop that continuously scans those PIDs.
                                                hs.setRoutineScanDelay(2000);

                                                hs.getRoutineScan().addDPN("VOLTS");
                                                hs.getRoutineScan().addDPN("TEMP_INTAKE");
                                                hs.getRoutineScan().addDPN("TEMP_COOLANT");
                                                hs.getRoutineScan().addDPN("MAF_FLOW_RATE");
                                                hs.getRoutineScan().addDPN("FUEL_LEVEL");
                                                hs.getRoutineScan().addDPN("COMMAND_EQUIVALENCE_RATIO");
                                               
                                        } else {
                                                hs.getRoutineScan().removeAllDPNs();
                                        }
                                }
                        }// end of session state change handler.

                        // Did we just perform detection stuff?
                        if (dataName.equals(OOBMessageTypes.AUTODETECT_SUMMARY)) {
                                if (hs.isDetectionValid() != true)
                                        return;
                               
                                SetupSessionBasedOnCapabilities();
                        }// end of "if this is a autodetect summary"
                }// end of OOB event arrived handler function definition.
        };// end of event handler definition.


        /**
        * Call this method upon connecting. We'll see what the capabilities are and set up the appropriate session. 
        */
        private void SetupSessionBasedOnCapabilities() {
               
                if (hs.isDetectionValid() != true) {
                        return;
                }
       
                // switch to OBD2 communications mode
                hs.setActiveSession(HybridSession.SESSION_TYPE_OBD2);
               
                // sanity check
                if (hs.getRoutineScan() == null) return;
       
                // add one or more datapoints to the routine scan class so that it actively scans that PID to generate DPN arrived events.
                hs.getRoutineScan().addDPN("VOLTS");
                hs.getRoutineScan().addDPN("TEMP_INTAKE");
                hs.getRoutineScan().addDPN("TEMP_COOLANT");
                hs.getRoutineScan().addDPN("MAF_FLOW_RATE");
                hs.getRoutineScan().addDPN("FUEL_LEVEL");
                hs.getRoutineScan().addDPN("COMMAND_EQUIVALENCE_RATIO");
        }

        /**
        * removes commas and takes just the first value, if present.
        *
        * @param decodedData
        * @return
        */
        private Double getPrimaryDPNValue(String decodedData) {
                Double Y = 0d;

                // do our best to extract the data value.
                if (decodedData.contains(",")) {
                        try {
                                Y = Double.valueOf(decodedData.split(",")[0]);
                        } catch (NumberFormatException e) {
                        }
                } else {
                        try {
                                Y = Double.valueOf(decodedData);
                        } catch (NumberFormatException e) {
                        }
                }

                return Y;
        }

        public HybridSession getHs() {
                return hs;
        }

        public double getVoltage() {
                return voltage;
        }

        public double getIat() {
                return (9/5) * iat + 32;
        }

        public double getAfr() {
                return equiv * 14.7;
        }

        public double getFuel() {
                return fuel;
        }

        public double getCoolant() {
                return (9/5) * coolant + 32;
        }

        public double getMaf() {
                return maf;
        }
}

And you simply initialize it with something like this:

Code:

    @Override
    public void onResume() {
        super.onResume();
       
        // our obd helper class (lotsa stuff happens here)
        if (obd == null) obd = new OBDHelper(this);
                       
        handler.post(oneSecondHandler);
    }

And then access like any other plain old java object when needed (I'm currently polling it (lazily) every second in a handler:

Code:

        ((TextView) findViewById(R.id.textView1)).setText("OBD Voltage: " + String.valueOf(obd.getVoltage()) + "v");
        ((TextView) findViewById(R.id.textView2)).setText("OBD IAT: " + String.valueOf(obd.getIat()) + "\u00b0");
        ((TextView) findViewById(R.id.textView3)).setText("OBD Coolant: " + String.valueOf(obd.getCoolant()) + "\u00b0");
        ((TextView) findViewById(R.id.textView4)).setText("OBD AFR: " + String.valueOf(obd.getAfr()));
        ((TextView) findViewById(R.id.textView5)).setText("OBD MAF: " + String.valueOf(obd.getMaf()) + "g/s");

While considered open source, libvoyager has a non-commercial use license attached to it. So if you plan to use it in a commercial project it's probably best to first contact the author to see what his terms are for commercial redistribution.

It is a FULL OBD/CAN implementation library. I can read and clear CELs, add Mazda specific PIDs, you name it.

ShellDude 04-14-2012 02:02 AM

3 Attachment(s)
From the start of this project I'd been wanting to do some things that utilized Location Services and the cameras.

Using an SMS receiver RX-8 Home intercepts inbound SMS text messages and looks for specific keywords from a phone # white list.

When it receives a "Where are you?" text message it responds with a URL to Google Maps including its current GPS coordinates.


The app also waits for a "What do you see?" text message and responds with two MMS messages containing snapshots from the front and back cameras.


Tamas 04-14-2012 12:54 PM

Great stuff :rock:

Now... does anyone have this mount for sale? :D:

HiFlite999 04-14-2012 01:44 PM


Originally Posted by Tamas (Post 4239259)
Great stuff :rock:

Now... does anyone have this mount for sale? :D:

Post #14, this thread.

Tamas 04-15-2012 12:14 PM


Originally Posted by HiFlite999 (Post 4239285)
Post #14, this thread.

$420 for that is a bit too rich to my blood :D:

ShellDude 04-15-2012 04:07 PM

You could always get the metra kit and the parrot asteroid.

Tamas 04-16-2012 01:36 AM

Eh... I like your tablet solution but not that parrot thingy.

dozer 04-16-2012 02:13 AM

dude. LIKE A BOSS.

ShellDude 04-17-2012 06:52 PM

1 Attachment(s)
Skinned some gauges and wired up their needles. Still not 100% with the AFR gauge. I'm looking for a better template.


Queef Latifah 04-17-2012 07:46 PM

Looks awesome, I've been running the appradio set up for a while...wish pioneer would release some an app like Carhome hah

9krpmrx8 04-17-2012 08:16 PM

Awesome as usual Shell. Any real downside to this project yet?

ShellDude 04-19-2012 02:05 PM

Downside... hmm...

There's a bug with the Grom AUX / Bluetooth adapter that once you cycle past track 99 A2DP integration fails until you either cycle the bluetooth connection or press Prior Track enough times to get back in the 50-99 track range. I coded a work-around that recycles the bluetooth connection automatically every "net" 40 forward track presses as it cycles from one track to the next and have reached out to Grom to see if they can patch their firmware.

Reaching the Honeycomb lower action bar can be a pain at times since the tablet is recessed a bit into the JDM mount. It's not undo-able, just a little tricky while driving. I've built a work-around for this that I haven't shown in the thread yet that uses a Gallery type marquee and double tap steering wheel controls for basic Android navigation.

These are really trivial issues given what I'm getting back from all of this. And I fully anticipate resolution of both as I invest a little more time into the interface overall.

I'm currently in the process of tracking down some of the more advanced (and secretive) Mazda PIDs for things like TPMS, FOBs, etc. I know the CANBUS got a huge overall with the SIIs and there might be things I could do on an SII (such as controlling CD text, etc) that are not available to me on the S1... similar to what you see paimon.soror doing in his RxDuino: Development Chat thread.

CrazyJek 04-19-2012 05:15 PM

Im a big Android fan and was thinking of a car PC myself for some time now... but this is just simply awesome. Subbed.

ShellDude 04-19-2012 10:51 PM

3 Attachment(s)
More gauges.... more cleanup up of the UI required... It's not flowing well enough for me yet.


I also finished up DTC detection and DTC Reset tonight (didn't have any stored codes ... otherwise they would've been listed)...


Here's what my "steering control double tap" scrollable menu looks like (pulled it off the emulator -- all other shots are from my Streak.



All times are GMT -5. The time now is 05:39 PM.


© 2024 MH Sub I, LLC dba Internet Brands