|
|
 
USA Flag
PLX Logo
|
|
|

Spring Race Special
+1 (408) 745-7591
OBDII to Android / PC / Linux / Symbian / N9
OBDII to iPhone / iPad / iPod Touch / PC
Sensor Module Interface
Green Driving Learning Tool
Standalone MPG Scan Tool
2 1/16" (52mm) Basic Touch Screen
2 1/16" (52mm) Color Gauge
Wideband AFR Gauge Combo
Wideband with Fuel Select
Wideband UEGO Controller
30PSI, 3 Bar Manifold Pressure
K-Type T.C. EGT Controller
Oil Pressure Sender
Water and Oil Temperature Sensor Controller
K-Type T.C. AIT Controller
USB Data Logging Interface
For DM-6, DM-100
For DM-6, DM-100
For DM-200
4 Button Replacement
Power, USB, 2.1mm Cable
Required for Gen1 Sensor Modules
Bosch Wideband LSU 4.2
SM-AFR to O2 Sensor Cable
M18 x 1.5mm Pitch
M18 x 1.5mm Pitch
Swivel Mount with Adhesive
K-Type 1/8 NPT" Sensor
K-Type 1/8 NPT" Sensor
VDO Sensor, Wires Connectors
VDO Sensor, Wires Connectors
Power, 2.1mm Wires and Terminals
2 1/16" (52mm) Color Gauge
60mm (2 3/8") Color Gauge
Single USB Output
Dual USB Output
Portable music speaker
Wideband AFR and OBD II Gauge Combo
Guitar Amplifier/Portable Speaker
OBDII to Android / PC / Linux / Symbian / N9
Wideband AFR Gauge Combo with Health Monitoring
710 Lumen Digital Focus
Paul Lowchareonkul Xtreme Devices
Kiwi Bluetooth
Kiwi Bluetooth
Kiwi Bluetooth
$5999
Overview:
Kiwi Bluetooth is a plug and play automotive tool that connects through the onboard diagnostic port (OBDII / CAN) in cars made in 1996 to current. Kiwi Bluetooth installs in seconds to interface with your car's computer and sync with your Android mobile device through a wireless Bluetooth connection. The Kiwi Bluetooth allows you to efficiently monitor your car's MPG, analyze the log, diagnose trouble codes and monitor real-time engine performance. Vehicles that are 1996 and later are all equipped with an OBD2 port making it compatible with 1996 and later vehicles. It incorporates an elm327 compatible interface and it works with ISO9141, VPW, PWM, and CAN protocols.
Features:
Depending on the application,
the following features may be available:
  • Check Engine Diagnostics
  • Real-time gauges
  • Fuel Efficiency and MPG
  • Engine Sensors
  • Customizable Dashboard
  • Real-time Dyno
  • Data Logging
  • GPS Track Mapping
  • Skid Pad
  • Video recording and data overlay
Customer Reviews
5 out of 5 stars (1 reviews)
Awesome Unit
I've had a Kiwi Bluetooth for a couple years now. Works great. Never had any issues. Excited for the Kiwi 2 Bluetooth so that i can see my wideband as well on my Motorola Droid Bionic.
Beeralzabud on July 19th, 2013
  • Apps
  • Video
  • Technical Specifications
  • Included Items
  • OBDII Sensors
  • Awards
  • Software Development
Kiwi Bluetooth is compatible with:
All apps are third party and purchased through the Google Play Store.
  • Dash Command App Icon
    Dash Command
  • Torque App Icon
    Torque
  • Enerfy App Icon
    Enerfy
  • OBD Autodoctor App Icon
    OBD Autodoctor
  • OBD Droidscan Pro App Icon
    OBD Droidscan Pro
  • DragFX App Icon
    DragFX
  • alOBD ScanGenPro App Icon
    alOBD ScanGenPro
  • ScanXL Icon
    ScanXL for PC
Dash Command Icon
© 2010 Palmer Performance Engineering, Inc.
DashCommand for Android Phones
*Compatible with PLX Logger 3.0
WANT GAUGES? This is the app for that. DashCommand is the ultimate OBD-II supplementary vehicle instrumentation application available for the iPhone and iPod touch. The built in dashboards can display a total of 27 gauges pulling data directly from your ride's engine control module. Also use DashCommand as scan tool to read and clear the trouble codes that caused the "check engine light" to turn on, a trip computer, or a race day companion.

--- SEMA Show 2009 1st runner-up for best mobile electronics product.
--- Winner of 9 Global Media Awards at SEMA Show 2009

Additional Features:
  • Professional skidpad showing lateral and accel/braking Gs with min/max indicators
  • Race track visually maps out your location, acceleration and braking as you drive laps around the track allows you to visually analyze different race track laps to see how acceleration and braking changed from lap to lap thus helping you to improve your lap times on your next outing.
  • Inclinometer shows rolling angle and vehicle pitch for off-roading.
  • Full support for OBD-II diagnostics, find out why your check-engine light is on and clear diagnostic trouble codes (DTCs)
  • Data logging, record and playback log files showing OBD-II data and skidpad/race track data simultaneously
Dash Command Menu
Dash Command Engine Screenshot
Dash Command Fuel Economy Screenshot
Dash Command Performance Screenshot
Dash Command Trip Stats Screenshot


Torque Icon
Torque
See what your car is doing! Torque is a vehicle / car performance / diagnostics tool that connects to your OBD2 engine management / ECU. Torque can use the GPS to provide logs with engine logging so you can see what you were doing at any point in time. Torque can also show and reset a DTC / fault code like a scantool.

Torque also has:
  • Dyno / Dynomometer and Horsepower/HP
  • 0-60 timings - see how fast your car is (or truck :))
  • Massive fault code database for allowing lookup of fault codes from many different manufacturers
  • Send logging information to web or email CSV/KML for analysis via excel / openoffice
  • Heads up display / HUD
  • GPS Speedo/Tracking - see what you were doing and your engine, at a point in time
  • Turbo boost feature for vehicles that support MAP sensors
  • Alarms (for example if your coolant temperature goes over 120C!)
Works on any vehicle that supports the OBD2 standard (most vehicles built after 2000 (diesels after 2004) but can work for vehicles as far back as 1996) - if in doubt check with your manufacturer first or look for 'OBD2' written on a big white label in your engine bay. Torque has been reported to work on vehicles made by GM/Vauxhall/Opel, Ford, Chrysler, Mercedes, Volkswagen, Audi, Jaguar, Citroen, Peugoet, Skoda, Kia, Mazda, Lexus, Daewoo, Renault, Mitsubishi, Nissan, Honda, Hyundai, BMW, Toyota, Seat, Dodge and many more vehicle makes. More features added every release - forums at http://torque-bhp.com/
Torque Menu
Torque Metrics
Torque Engine Check
Torque Dials
Torque Gauges
Torque Icon
Enerfy
Enerfy® is the platform for all vehicle types, where driver can participate and compete in energy smart driving. The driver is only one of many external circumstances that contribute to the total fuel consumption. With Enerfy® you know how energy smart you drive, regardless of traffic, road conditions, weather, total fuel consumption or other external factors. Enerfy® is the perfect platform for the driver that enjoy competing, understanding the true fuel consumption, save fuel and contribute to lower carbon emissions.

Features:
  • Compete and meet anyone, regardless where and what vehicle the competition drives
  • Compare how energy smart you drive, regardless where and what vehicle the competition drives
  • Personalized feedback as to drive energy smarter
  • Head to Head, challenge a friend in energy smart driving
  • Detailed statistics on your driving activities
  • Friends, chat and share information
  • Messages, let the community know your best tips on cars and driving
Enerfy
Enerfy
Enerfy
Enerfy
OBDAutoDocotor Icon
OBDAutoDoctor - Car OBD Tool
Screenshot


OBDAutoDoctor is the premier Android OBD app for auto enthusiasts. With this easy-to-use OBD-II diagnostic application, you can communicate with your car's On Board Diagnostic (OBD) system and turn your mobile or tablet into a highly capable automotive scanner tool. Whether you want to read and monitor vehicle data in real-time or reset "check engine" light, this is the only OBDII software you need.
  • Read monitor statuses to make sure your car is ready for Smog Check
  • Read DTCs, Freeze Frame and clear the MIL
  • Send OBD diagnostic information using e-mail
  • View OBD-II parameter and sensor data in real-time
  • Numerical and graphical presentation of the OBD data
  • Fuel economy for gas and diesel engines
  • Read Vehicle Identification Number, Calibration Identifications and Calibration Verification Numbers of ECU
  • Support for both imperial and metric units
  • DTC database with over 14000 trouble codes including manufacturer specific codes
  • And much more


Check the app website for more information and differences between the Lite and the Pro versions. The free Lite version can be upgraded to the Pro using Google Play In-App Billing. It's a convenient way to upgrade the app to have all the features unleashed.

OBD Auto Doctor will get new features and a lot of updates in the future. Upgrade to the Pro version now and get all the future updates for free automatically. Under no circumstances will the developer of this application be held responsible for incidents resulting from the use and/or interpretation of the data in the application.
obdautodoctor
obdautodoctor
obdautodoctor
obdautodoctor
obdautodoctor
obdautodoctor
obdautodoctor
obdautodoctor
OBD Droidscan Pro Icon
OBD Droidscan Pro
by MockOne Performance
This all-in-one Vehicle Diagnostic and Performance Scanner lets you view real-time data and Check Engine Light trouble codes from almost any OBD-II (1996+) vehicle. You can view vehicle data and record vehicle data for future viewing. Re-load saved scans and even export saved scans to Excel spreadsheet. With one simple command you can read the vehicle trouble codes (Check Engine Light) and save them for future viewing or use the email feature to send them to someone. It will also let you clear your trouble codes and turn off your check engine light with one simple command. *Super quick refresh rate allows for optimal real-time scanning. This app will allow you to read the following from your car's on board computer:
  • Speed
  • RPM
  • Mass Airflow
  • Manifold Absoule Pressure
  • Boost (PSI)
  • Ignition Timing Advance
  • Throttle Position
  • MPG
  • Engine Temperature
  • Intake Air Temperature
  • Fuel System Status
  • Long Term Fuel Trims
  • Short Term Fuel Trims
  • Barometric Pressure
  • Ambient Air Temperature
  • Engine Load
  • Fuel Pressure
  • Fuel Level (%)
  • Engine Run Time
  • Equiv Ratio
  • Oxygen Sensors (O2 Sensors)
*Or simply enter your own CUSTOM PID's. This is great if you have a list of your vehicle's specific PID's. You can enter your own PID's and specify the math you would like to perform and the desired units you would like the pid to display.
Record live OBD-II Data in real time and save it for future viewing.
Export your saved scans to Excel
  • Scan live fuel economy in imperical or metric.
  • Set fuel economy calculations to use MAF or MAP mode.
  • Read PSI/Boost (For turbo/supercharged cars)
  • Customize the layout of obd parameters on the screen.
  • Show readings in imperical or metric.
  • Advanced ELM327 Adapter Reset/Information Readout.
  • Show current trouble codes.
  • Save current trouble codes.
  • Email current trouble codes.
  • Turn off (Reset) Check Engine Light.
This app also gives you tips and suggestions to help you through processes.
*Developed by professional OBD-II tuners with 15 years field experience in OBD-II Automotive vehicle flashing and diagnostic scanning. This app is great for tuners wishing to view/record all the important parameters in a nicely laid out easy to read screen.
*Works on all vehicles that have an OBD-II interface (Most vehicles made on or after 1996)

*Tablets* - This app is optimized and will work on all screen sizes, including tablets!
*Support* - Feel free to contact us at any time with questions, issues, suggestions, etc: info@obdandroid.com.
* Bluetooth Connection* - Note, any experience of not being able to connect to your vehicle may mean another bluetooth enabled app is holding the connection to your Kiwi Bluetooth. Make sure any other bluetooth apps are not connected to the Kiwi Bluetooth.
*Pandora* - If you have Pandora on your phone and are unable to connect to your Kiwi Bluetooth, try disabling Pandora and reconnect.
*Features* - If you don't see something in the app that you would like to see, shoot us an email request. We are currently working on the next version and want to know what you want that we are not yet giving you!

obddroidscan
obddroidscan
obddroidscan
obddroidscan
obddroidscan
obddroidscan
obddroidscan
obddroidscan
DragFX App Icon
DragFX


Want your car to sound like an expensive muscle car? Now you can! DragFX requires a Bluetooth OBD adapter. The adapter allows DragFX to connect to your vehicle's OBD (On-board Diagnostic) interface, to allow the sound produced by DragFX to accurately match your engine's actual RPM in real time.

Without the OBD adapter, a slider allows manual control of the RPM to preview the available engine sounds.

alOBD ScanGenPro Icon
alOBD ScanGenPro
by Alexandre Beloussov
This application is designed to provide basic automotive diagnostic and vehicle data collection. The intended audience of this product is car geeks that are familiar with the operation of an engine control computer, vehicle sensors and generic OBD parameter set. This application may also be suitable for a professional shop for a quick diagnosis of the vehicle's emissions system.

Diagnostic features include:
  • Collect, view & export up to 4 OBD2 PIDs
  • Read & clear present/pending DTC
  • Detect supported PIDs
  • Take & export OBD PIDs snapshot of your car
  • Speak out PID value
  • Vary rate of data
  • Create, show & export custom data stream






ScanXL" Professional
ScanXL" is our professional line of diagnostic scan tools. Built on top of our advanced scan tool technology, ScanXL" delivers the full range of generic diagnostics for any OBD-II compliant vehicle sold worldwide, along with providing manufacturer-enhanced diagnostics for many vehicle types. It gives you access not only to the powertrain systems, but also ABS, airbag, and other proprietary systems that would otherwise require expensive dealer tools to work with. It allows viewing, charting, logging and playback of diagnostic data in real time via the vehicle's OBD-II diagnostic data port. It also allows viewing of vehicle Diagnostic Trouble Codes (DTC's), Freeze Frame data, and other vehicle information.

ScanXL" supports 1996* and newer vehicles whether it be US, Asian, or European.

Supported OBD-II protocols: SAE-J1850 (PWM and VPW), ISO-9141, ISO-14230 (KWP2000), and ISO-15765 (CAN).

Visit our user forum for discussion and information about ScanXL", product features, and new releases.
*1996 is the year the OBD-II system was standardized for passenger vehicles sold in the United States. In Europe, this was standardized in 2001 for gasoline vehicles and 2004 for diesel passenger cars. Please verify that your vehicle is OBD compliant before purchasing.
J2534 Overview
Legislation has mandated that vehicle manufacturers meet J2534 standards for all emissions related systems on all new vehicles starting with model year 2004. This standard enables independent service repair operators to program or reprogram (reflash) emissions related ECUs on a wide variety of vehicle manufacturers with a single hardware interface. Our ScanXL" Professional diagnostic software supports all J2534 compliant pass-thru OBD-II interfaces. If you plan to buy or already use a J2534 interface in your service or repair facility to update vehicle software calibrations, our ScanXL" product will be the perfect addition to your tool set. With no additional hardware costs, ScanXL" Professional will give you access to dealer-level diagnostic capabilities for thousands less!
Manufacturer Enhanced Diagnostics
If you are the owner of an independent service or repair facility then you know that good tools can mean the difference between being able to find and fix the problem, or having to send the customer elsewhere. With generic only OBD-II scan tools you often cannot service some vehicle systems like ABS, airbag, or other proprietary systems. Using our ScanXL" diagnostic scan tool, you now have access to dealer-level diagnostic capabilities for not only the powertrain systems, but also ABS, airbag, and other proprietary systems that would otherwise require expensive dealer tools to work with*.

We currently support the following vehicle types:
Ford, Lincoln, Mercury(1996-2009)
GM(1996-2009)
Mazda(1996-2009)
Chrysler, Dodge, Plymouth, Jeep, EagleComing Soon!
Toyota, Lexus, ScionComing Soon!
*Requires purchase of an enhanced diagnostics add-on package.
ScanXL" Features
Vehicle Manager
  • Using the ScanXL" Vehicle Manager you can keep track of multiple vehicles and owners simultaneously.
  • All vehicle specific information is stored in the Vehicle Manager.
  • Automatically keeps track of VIN (if available) and date and time of last diagnostic session.
  • When adding new vehicles, supports easy vehicle lookup through the built-in vehicle database.
Virtual Dashboards
  • With our patent-pending DashXL" technology you get high quality dashboards on any screen size.
  • Highly configurable realistic looking gauges.
  • Gauges can be moved, resized, and laid out to resemble your own dashboard.
  • Virtual dashboard layouts can be loaded and saved from pre-existing templates or your own custom creations.
  • Gauges can be configured to report the minimum, maximum, and average values of the parameter being monitored.
  • Highly configurable graphs allow simultaneous graphing of up to 8 parameters per graph.
  • Tables can be placed on virtual dashboards and customized to report any parameters you want.
  • Maps can be placed on virtual dashboards and customized to display a full 3D view of any desired parameters.
  • You can set up an unlimited number of gauges, graphs, tables, and maps on your virtual dashboard.
Drag Strip and Dyno
  • The drag strip displays a countdown and timing light and measures your launch and reaction time. At the end of your run, you get a timeslip with the stats from the run.
  • Measures reaction time, 60' time, 330' time, 0-60 MPH, 1/8 mile ET, 1/8 mile speed, 1000' time, 1/4 mile ET, 1/4 mile speed.
  • If you use aftermarket performance parts, the new digital dyno feature will let you test horsepower and torque to measure their impact on your vehicle's performance-- just try out the dyno and see if those parts were worth the money!
  • Supports both English and Metric units of measurement.
Data Logging
  • Currently supports over 220 generic OBD-II parameters, including O2 sensors.
  • You can record and playback log files in real time (1ms logging accuracy).
  • You can save and load your log files for offline analysis.
  • Playback speed can be adjusted to play faster or slower than real time.
  • There are no restrictions on how much data you can log, it is only limited by how fast your OBD-II interface cable can send the data and by how much memory you have in your computer.
  • English and Metric (SI) unit measurement systems supported.
  • Customizable log file data export to .CSV file for easy viewing in other programs like Excel.
  • Export with real-time stamps for easy correlation with external data logs.
  • PIDs can be assigned priorities to speed up the data capture rate.
  • Full support for data log file bookmarks - if you notice the engine misfiring or some other problem, using the log file bookmarks you can just reach over and press F6 to add a bookmark into the logged data that is being recorded. Then you can come back at any time and see exactly where the bookmark is and view the surrounding frames of data to analyze the problem.
Trouble Codes
  • Read stored and pending Diagnostic Trouble Codes.
  • Clear the Check Engine or Service Engine Soon indicator light.
  • Read and clear stored Freeze Frame data.
  • Supports thousands of vehicle trouble code definitions.
Test Results
  • Read the status of Continuously and Non-Continuously Monitored Tests.
Miscellaneous
  • Full support for printing and print preview.
  • All of the different views, including the virtual dashboards, support printing/print preview.
  • For those who possess a knowledge of the OBD-II protocol, ScanXL" provides an OBD-II Terminal where you can send custom commands to the vehicle.
  • For the power users out there, ScanXL" has built-in Javascripting support to do custom calculations on OBD-II parameters and data.
  • Configurable alerts system - the alerts system allows you to configure the software to monitor any parameter(s) you like. When the specified conditions are met, the software will automatically play a sound (to warn you if you are driving) or insert a bookmark for you into the logged data that is being recorded.
  1. Link Indicator LED
  2. Power Indicator LED
  3. 6' Cable
  4. OBD II Plug
Physical Dimensions: 1.25 x 2.72 x 0.60 (inches)
Power Consumption: 1.24 Watts (Typical)
OBDII/CAN Protocols: ISO-9141,VPW,PWM,KWP 2000,11Bit,29Bit CAN
Compatible Vehicles: 1996 and later vehicles
Operating Temperature: 0 - 80 Degress Celsius
Operating Voltage: 10 - 18V
Wireless Standard: Bluetooth versions 2.1/2.0/1.2/1.1
Range: ~50ft line of sight
Enclosure: Automotive grade
Compatible Apps: Torque, DashCommand, alOBD Scan Gen Pro, OBDriod, VoyagerDash, PLX Logger
  • Kiwi Bluetooth Main Unit
  • User Manual
  • * All applications are downloaded through the Android market.
    Some apps may need to be purchased separately from the Kiwi Bluetooth.
Depending on your vehicle and the application that you choose to use, sensor support will vary. However in most vehicles the following sensors are reported through the onboard diagnostic port.
  • RPM
  • Vehicle Speed
  • Throttle Position
  • Engine Load
  • Absolute Engine Load
  • Engine Timing
  • Air Intake Temperature
  • Coolant Temperature
  • Ambient Air Temperature
  • Intake Pressure (MAP)
  • Air Flow (MAF)
  • Fuel Pressure
  • Fuel Pressure Relative
  • Fuel Level
  • Barometric Pressure
  • Catalytic Converter Temperature
  • ECU Voltage
  • OBD Type
  • Short Term Fuel Trim (Bank 1)
  • Long Term Fuel Trim (Bank 1)
  • Short Term Fuel Trim (Bank 2)
  • Long Term Fuel Trim (Bank 2)
  • Oxygen Sensor Voltage1 (Bank 1)
  • Oxygen Sensor Voltage1 (Bank 2)
  • Oxygen Sensor Voltage2 (Bank 1)
  • Oxygen Sensor Voltage2 (Bank 2)
The Kiwi Car to Smartphone line of products has received these awards:
SEMA Best New Mobile Electronics Entertainment Product, Best New Interior Accessory Product 2008
Popular Mechanics Editor's Choice Award 2009
SEMA Global Media Choice Award
SEMA Best New Mobile Electronics Entertainment Award 2010
Numerous Global Media Choice Awards 2010-2011
Popular Mechanics Editors Choice Award
Kiwi Software Development Kit Documentation
Terms of Use
YOU EXPLICITLY UNDERSTAND AND AGREE THAT USE OF THE API AND CONTENT IS AT YOUR SOLE RISK AND THAT PROVIDED CONTENT IS PROVIDED "AS IS." PLX DEVICES INC. SHALL NOT BE LIABLE FOR DIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES RESULTING FROM ANY LEGAL THEORY INCLUDING, BUT NOT LIMITED TO, LOST PROFITS, DOWNTIME, GOODWILL, DAMAGE, INJURY TO PERSONS, OR REPLACEMENT OF EQUIPMENT AND PROPERTY DUE TO IMPROPER INSTALLATION, INTEGRATION AND/OR MISUSE OF ANY PLX DEVICES INC.'S PRODUCT(S) AND DOCUMENTATION.
Overview
The PLX Kiwi Wifi is an OBD-II to IEEE 802.11 wireless Ethernet adapter.
The PLX Kiwi Bluetooth is an OBD-II to Bluetooth adapter.

The Kiwi iMFD Adapter is an addon adapter for the Kiwi 2 Wifi that offers iMFD serial data support in addition to available OBD-II information.
Products
Kiwi 2 Wifi Kiwi Bluetooth iMFD Adapter
Kiwi 2 Wifi Kiwi 2 Bluetooth iMFD Adapter
Block Diagram
The Kiwi 2 Wifi and Kiwi Bluetooth are equivalent in functionality. Both the Kiwi 2 Wifi and Kiwi Bluetooth have a built-in OBD interface. For additional PLX iMFD sensor support, the iMFD adapter can be connected to the Kiwi 2 Wifi and programmatically accessed via an internal mode selector switch.
Kiwi 2 Wifi/Kiwi Bluetooth
Kiwi 2 Wifi/Kiwi Bluetooth Block Diagram
Kiwi 2 Wifi with iMFD Adapter
Kiwi + iMFD Block Diagram
Connecting to Kiwi
To communicate with the Kiwi Wifi, connect to the following IP address and port:

SSID: PLXDevices
IP: 192.168.0.10:35000

For the Kiwi Bluetooth, pair to the device with the following pairing code:

Device Name: PLXDevices-XXXX
Pairing Code: 1234
Setting Sensor Mode (iMFD Adapter)
With the iMFD Adapter connected, there are two modes of operation: OBD mode and iMFD mode. In OBD mode you have access and control of the OBD interface. In iMFD mode, you have access to the PLX iMFD serial stream. These modes can be switched by sending a '+' or '-' ASCII character.
OBD Mode
Send the ASCII character '+' (Decimal value = 43, Hex value = 2B) to set the mode to OBD. Kiwi Wifi/Bluetooth OBD Mode
iMFD Mode
Send the ASCII character '-' (Decimal value = 45, Hex value = 2D) to set the mode to iMFD. Kiwi Wifi + iMFD iMFD Mode
Communicating with Kiwi
Communicating with the Kiwi Wifi is made by writing and reading ASCII values to and from the TCP stack.

Communicating with the Kiwi Bluetooth is made by reading and writing ASCII values via a serial stream.
Request Formats
OBD Mode
To signify that the Kiwi Wifi or Kiwi Bluetooth is ready to process commands, the device will output a greater-than sign (>).
The Kiwi Wifi and Kiwi Bluetooth supports ten diagnostic modes as defined in the SAE J1979 standard:
Test modeDescription
01Show current data
02Show freeze frame data
03Show diagnostic trouble codes
04Clear trouble codes and stored values
05Test results, oxygen sensors
06Test results, non-continuously monitored
07Show 'pending' trouble codes
08Special control mode
09Request vehicle information
0ARequest permanent trouble codes
Requesting information can be done by sending a command in this format (ASCII characters):
MM PP\r
where MM is the test mode, PP is the PID, and \r is a carriage return (hex: 0x0d). All whitespace characters are ignored by the Kiwi. *Test modes 03 and 04 do not require a PID value.
For example, requesting current RPM is done as follows:
01 0C\r
The PID response from the Kiwi Wifi or Kiwi Bluetooth is in this format:
NN PP AA [BB] [...]
where the NN represents the test mode + 40 (e.g. 01 + 40 = 41). PP is the requested PID, and all following characters are data bytes.

The number of returned bytes is dependent on the particular PID requested. For details on PIDs supported by most vehicles and the number of returned bytes, please see "Requesting Data".

Here is an example response from the Kiwi Wifi after requesting the current RPM:
41 0C FF FF
The data bytes "FF FF" are ASCII representations of hexadecimal characters for the data. In this case, the "FF FF" would be interpreted as the hexadecimal value of 0xFFFF (65536 in decimal base). An example function for converting this value to meaningful data is outlined in Section 11.

Other responses are possible as well. A table of responses can be seen below:
ResponseDescription
?Command not understood
BUFFER FULLInternal buffer full
BUS ERRORInvalid singal detected on bus
CAN ERRORUnable to initialize, send or receive CAN data
DATA ERRORIncorrect or invalid response from vehicle
NO DATANo data response for request
OKCommand successful
SEARCHING...Connecting to vehicle
UNABLE TO CONNECTNo valid OBD protocol found
iMFD Mode
Switching the Kiwi to iMFD mode will automatically read the serial data from any attached sensor modules. The data packet format for the iMFD serial stream is formatted as below:
Start Bit
/*Start first sensor*/
Sensor Address MSB (Bits 6-11)
Sensor Address LSB (Bits 0-5)
Sensor Instance
Sensor Data MSB (Bits 6-11)
Sensor Data LSB (Bits 0-5)
/*End first sensor*/
//Additional sensors/instances are included before the stop bit
Stop Bit
Please note that the two most significant bits of each packet is reserved for the start bit and the stop bit.

Start Bit = 0x80(hex) = 1000 0000 (binary)
Stop Bit = 0x40(hex) = 0100 0000 (binary)

The 6 least significant bits are reserved for Address, Instance, and Data. This means that the two most significant bits MUST BE ZERO for these bytes. To interpret the Sensor Address and Data Value a bitwise conversion must be done.

An example conversion for address bits and data bits is as follows:
addr = (addrmsb << 6) | addrlsb; //Use this for true address value
data = (datamsb << 6) | datalsb; //Use this for true data value
For multiple sensor modules, the Instance byte is automatically incremented by 1 for each sensor module of the same address in the chain. Here is an example of two SM-AFR sensor modules:
0x80 //Start bit
0x00 //First SM-AFR Address MSB
0x00 //First SM-AFR Address LSB
0x00 //First SM-AFR Instance 1
0x00 //First SM-AFR Data MSB
0x04 //First SM-AFR Data LSB
0x00 //Second SM-AFR Address MSB
0x00 //Second SM-AFR Address LSB
0x01 //Second SM-AFR Instance 2 //value incremented
0x00 //Second SM-AFR Data MSB
0x05 //Second SM-AFR Data LSB
0x40 //Stop bit
When iMFD mode is active, the Kiwi automatically incorporates a flow control to improve performance when writing applications for the iPhone or iPod touch. When the '-' character is sent, the hardware waits for the start bit to arrive and only passes one complete frame. It then waits indefinitely. A '+' followed by a carriage return is necessary to get back to OBD Mode.
Start bit ... Stop bit (waits indefinitely) (send a '+' then carriage return then '-' to obtain the next frame)
*It is recommended that you send a carriage return (\r) character to obtain the '>' character in order for the "OBD mode" to be ready for its next command.

The flow control guarantees that the first iMFD byte that is transmitted back is a start bit and the last byte is a stop bit. One complete iMFD frame will be available each time the iMFD mode is activated.

For a list of iMFD sensors, please see PLX iMFD Sensor Table.
Custom PIDs
Manufacturer-specific PIDs and custom PIDs are supported by the Kiwi Wifi and Kiwi Bluetooth.

Please note that manufacturer-specific information typically requires a licensing fee for code and/or algorithm access. PLX Devices cannot and will not provide any manufacturer-specific information.
Suggested Initialization Sequence
//C-pseudo code to reset device and read data
WriteTCP("atz\r"); //Resets device
WriteTCP("ate0\r"); //Turns echo off
Data = RequestPIDData(0x11, 1); //Request data from vehicle

if(PIDReadStatus == 2 | PIDReadStatus == 3) { //Check connection status
   OBDConnected = 0;
} else { //Connected
   OBDConnected = 1;
}
Requesting Data
SensorPID Value (Hex)Returned bytes
*Absolute Throttle Position111
*Engine RPM0C2
*Vehicle Speed0D1
*Calculated Load Value041
*Timing Advance (Cyl#1)0E1
*Intake Manifold Pressure0B1
*Air Flow Rate (MAF Sensor)102
*Fuel System Status032
*Short Term Fuel Trim (Bank 1)062
*Long Term Fuel Trim (Bank 1)072
*Short Term Fuel Trim (Bank 2)082
*Long Term Fuel Trim (Bank 2)092
*Intake Air Temperature0F1
*Coolant Temperature051
Fuel Pressure (gauge)0A1
*O2 Sensor 1, Bank 1142
*O2 Sensor 2, Bank 1152
O2 Sensor 3, Bank 1162
O2 Sensor 4, Bank 1172
O2 Sensor 1, Bank 2182
O2 Sensor 2, Bank 2192
O2 Sensor 3, Bank 21A2
O2 Sensor 4, Bank 21B2
Time Since Engine Start1F2
Fuel Level Input2F1
Barometric Pressure (Absolute)331
Catalytic Converter Temp B1S13C2
Catalytic Converter Temp B2S13D2
Catalytic Converter Temp B1S23E2
Catalytic Converter Temp B2S23F2
ECU Voltage422
Absolute Engine Load432
Ambient Air Temperature461
*Denotes sensor is available in most vehicles. Additional sensors are available depending on vehicle specific models.

//Bluetooth communication will require write(byte[]) and read(byte[]) instead of WriteTCP() and ReadTCP()
int RequestPIDData(int PID,int bytes) //Pseudo C Code Example
{
  int lsb,msb;
  char c;
  int b0,b1,b2,b3,b4,b5,b6,b7;
  int Data;
 
  lsb = (PID & 0x0f);
  msb = ((PID & 0xf0)>>4);

  WriteTCP('0');
  WriteTCP('1');

  if(msb == 0)
   WriteTCP('0');
  else if(msb == 1)
   WriteTCP('1');
  else if(msb == 2)
   WriteTCP('2');
  else if(msb == 3)
   WriteTCP('3');
  else if(msb == 4)
   WriteTCP('4');
  else if(msb == 5)
   WriteTCP('5');
  else if(msb == 6)
   WriteTCP('6');
  else if(msb == 7)
   WriteTCP('7');
  else if(msb == 8)
   WriteTCP('8');
  else if(msb == 9)
   WriteTCP('9');
  else if(msb == 10)
   WriteTCP('A');
  else if(msb == 11)
   WriteTCP('B');
  else if(msb == 12)
   WriteTCP('C');
  else if(msb == 13)
   WriteTCP('D');
  else if(msb == 14)
   WriteTCP('E');
  else if(msb == 15)
   WriteTCP('F');

  if(lsb == 0)
   WriteTCP('0');
  else if(lsb == 1)
   WriteTCP('1');
  else if(lsb == 2)
   WriteTCP('2');
  else if(lsb == 3)
   WriteTCP('3');
  else if(lsb == 4)
   WriteTCP('4');
  else if(lsb == 5)
   WriteTCP('5');
  else if(lsb == 6)
   WriteTCP('6');
  else if(lsb == 7)
   WriteTCP('7');
  else if(lsb == 8)
   WriteTCP('8');
  else if(lsb == 9)
   WriteTCP('9');
  else if(lsb == 10)
   WriteTCP('A');
  else if(lsb == 11)
   WriteTCP('B');
  else if(lsb == 12)
   WriteTCP('C');
  else if(lsb == 13)
   WriteTCP('D');
  else if(lsb == 14)
   WriteTCP('E');
  else if(lsb == 15)
   WriteTCP('F');
 
  WriteTCP(0x0d);

  while(!DataRdyTCP());
  c = ReadTCP();

  if(c == 'N')
  {
   PIDReadStatus = 1; //No Data

   //Wait for OK>
   while(c != 0x3E)
   {
   while(!DataRdyTCP());
   c = ReadTCP();
   }
   return 0;
  }
  else if(c == 'S')
  {
   PIDReadStatus = 2; //Searching

   //Wait for OK>
   while(c != 0x3E)
   {
   while(!DataRdyTCP());
   c = ReadTCP();
   }
   return 0;
  }
  else if(c != '4')
  {
   PIDReadStatus = 3; //Anything else

   //Wait for OK>
   while(c != 0x3E)
   {
   while(!DataRdyTCP());
   c = ReadTCP();
   }
   return 0;
  }

  while(!DataRdyTCP());
  c = ReadTCP();
  if(c != '1')
  {
   PIDReadStatus = 3; //Second character not 1

   //Wait for OK>
   while(c != 0x3E)
   {
   while(!DataRdyTCP());
   c = ReadTCP();
   }
   return 0;
  }

  while(!DataRdyTCP());
  c = ReadTCP(); //space
  while(!DataRdyTCP());
  c = ReadTCP(); //msb
  while(!DataRdyTCP());
  c = ReadTCP(); //lsb
  while(!DataRdyTCP());
  c = ReadTCP(); //space

  if(bytes == 1) //data
  {
   while(!DataRdyTCP());
   b0 = ReadTCP();
   while(!DataRdyTCP());
   b1 = ReadTCP();
   b0 = CharToInt(b0);
   b1 = CharToInt(b1);

   Data = (b0<<4) + b1;

   PIDReadStatus = 0;

   //Wait for OK>
   while(c != 0x3E)
   {
   while(!DataRdyTCP());
   c = ReadTCP();
   }
   return Data;
  }
  else if(bytes == 2) //data
  {
   while(!DataRdyTCP());
   b0 = ReadTCP();
   while(!DataRdyTCP());
   b1 = ReadTCP();
   while(!DataRdyTCP());
   c = ReadTCP();
   while(!DataRdyTCP());
   b2 = ReadTCP();
   while(!DataRdyTCP());
   b3 = ReadTCP();

   b0 = CharToInt(b0);
   b1 = CharToInt(b1);
   b2 = CharToInt(b2);
   b3 = CharToInt(b3);

   Data = (b0<<12) + (b1<<8) + (b2<<4) + b3;

   PIDReadStatus = 0;

   //Wait for OK>
   while(c != 0x3E)
   {
   while(!DataRdyTCP());
   c = ReadTCP();
   }
   return Data;
  }
  else if(bytes == 4) //data
  {
   while(!DataRdyTCP());
   b0 = ReadTCP();
   while(!DataRdyTCP());
   b1 = ReadTCP();
   while(!DataRdyTCP());
   c = ReadTCP();
   while(!DataRdyTCP());
   b2 = ReadTCP();
   while(!DataRdyTCP());
   b3 = ReadTCP();
   while(!DataRdyTCP());
   c = ReadTCP();
   while(!DataRdyTCP());
   b4 = ReadTCP();
   while(!DataRdyTCP());
   b5 = ReadTCP();
   while(!DataRdyTCP());
   c = ReadTCP();
   while(!DataRdyTCP());
   b6 = ReadTCP();
   while(!DataRdyTCP());
   b7 = ReadTCP();

   b0 = CharToInt(b0);
   b1 = CharToInt(b1);
   b2 = CharToInt(b2);
   b3 = CharToInt(b3);
   b4 = CharToInt(b4);
   b5 = CharToInt(b5);
   b6 = CharToInt(b6);
   b7 = CharToInt(b7);

   Data = (b0<<28) + (b1<<24) + (b2<<20) + (b3<<16) + (b4<<12) + (b5<<8) + (b6<<4) + b7;

   PIDReadStatus = 0;

   //Wait for OK>
   while(c != 0x3E)
   {
   while(!DataRdyTCP());
   c = ReadTCP();
   }
   return Data;
  }
}

int CharToInt(int c)
{
  int i;

  if(c == 48) //'0'
   i = 0;
  else if(c == 49) //'1'
   i = 1;
  else if(c== 50) //'2'
   i = 2;
  else if(c== 51) //'3'
   i = 3;
  else if(c== 52) //'4'
   i = 4;
  else if(c== 53) //'5'
   i = 5;
  else if(c== 54) //'6'
   i = 6;
  else if(c== 55) //'7'
   i = 7;
  else if(c== 56) //'8'
   i = 8;
  else if(c== 57) //'9'
   i = 9;
  else if(c== 65) //'A'
   i = 10;
  else if(c== 66) //'B'
   i = 11;
  else if(c== 67) //'C'
   i = 12;
  else if(c== 68) //'D'
   i = 13;
  else if(c== 69) //'E'
   i = 14;
  else if(c== 70) //'F'
   i = 15;

  return i;
}
Interpreting Returned Data
This function is used to convert the returned raw PID data into meaningful values.

//Pseudo C Code Example
int PIDConversion(int PID, int Data, int Units)
//Units parameter: 0 = Standard Units, 1 = Metric Units
{
 double tempMPH;

 if(PID == 0x11)  //Throttle
  return Data*100/255;
 else if(PID == 0x0c)  //RPM
  return Data/4;
 else if(PID == 0x0d)  //Speed
 {
  if(Units == 0)  // MPH
{
   tempMPH = Data/1.609;
   return(Round(tempMPH));
  }
  else
   return Data; //KM/H
 }
 else if(PID == 0x04)  //Engine Load
  return Data*100/255;
 else if(PID == 0x0E)  //Timing Advance
 {
  if(Data < 128)
   return (128 - Data)/2;
  else
   return (Data - 128)/2;
 }
 else if(PID == 0x0B)  //Intake Manifold Pressure
 {
  if(Units == 0)
   return Data/0.3386; //inHG
  else
   return Data; //Kpa
 }
 else if(PID == 0x10)  //Air Flow Rate
 {
  if(Units == 0)
   return Round(Data*0.013227736); //LBS/min
  else
   return Round(Data*0.01);  //g/s
 }
 else if(PID == 0x03)  //Fuel System Status
  return (Data>>8) & 0xFF;
 else if((PID == 0x06)|(PID == 0x07)|(PID == 0x08)|(PID == 0x09)) //Fuel TRIM
 {
  if(Data < 128)
   return (128 - Data)*100/128;
  else
   return (Data - 128)*100/128;
 }
 else if((PID == 0x0F)|(PID == 0x05)) //AIT and Coolant
 {
  if(Units == 0)  //Fahrenheit
  {
   if(Data < 40)
    return 32;
   else
    return (Data-40)*9/5 + 32;
  }
  else    //Celsius
  {
   if(Data < 40)
    return 0;
   else
    return Data - 40;
  }
 }
 else if(PID == 0x0A) //Fuel Pressure
 {
  if(Units == 0) //PSI
   return Data*3*0.145;
  else   //KPA
   return Data*3;
 }
 else if(PID == 0x1C) //OBD TYPE
  return Data;
 else if((PID == 0x14)|(PID == 0x15)|(PID == 0x18)|(PID == 0x19)) //O2 Voltage
  return (Data >> 8)*0.5;
 else if(PID == 0x2F) //Fuel Level Input
  return Data*100/255;
 else if(PID == 0x33) //Barometric Pressure
 {
  if(Units == 0)
   return Data/0.3386; //inHG
  else
   return Data;  //Kpa
 }
 else if((PID == 0x3C)|(PID == 0x3D)|(PID == 0x3E)|(PID == 0x3F)) //CAT Temperature
 {
  Data = Data*0.1;

  if(Units == 0) //Fahrenheit
  {
   if(Data < 40)
    return 32;
   else
    return (Data-40)*9/5 + 32;
  }
  else   //Celsius
  {
   if(Data < 40)
    return 0;
   else
    return Data - 40;
  }
 }
 else if(PID == 0x42) //ECU Voltage
  return Data*0.01;
 else if(PID == 0x43) //ASB Engine Load
  return Data*100/255;
 else if(PID == 0x46) //Ambient Air Temperature
 {
  if(Units == 0) //Fahrenheit
  {
   if(Data < 40)
    return 32;
   else
    return (Data-40)*9/5 + 32;
  }
  else   //Celsius
  {
   if(Data < 40)
    return 0;
   else
    return Data - 40;
  }
 }
 else if(PID == 0x22) //FRP Rel
 {
  if(Units == 0)
   return Data*0.79*0.145; //PSI
  else
   return Data*0.79;  //Kpa
 }
}
Reset Trouble Code
//Pseudo C Code Example
void ResetTroubleCode()
{
 char c;

 //Clear Input Buffer Here

 //Reset Code
 WriteTCP('0');
 WriteTCP('4');
 WriteTCP(0x0d);

 //Wait for carriage return as precaution to system freeze.
 while(!DataRdyTCP());
 c = ReadTCP();
 //Wait for OK>
 while(c != 0x3E)
 {
  while(!DataRdyTCP());
  c = ReadTCP();
 }
}
Read Number of Trouble Codes
//Pseudo C Code Example
void RequestNumberTrouble()
{
 char c;

 //Clear Input Buffer Here

 WriteTCP('0');
 WriteTCP('1');
 WriteTCP('0');
 WriteTCP('1');
 WriteTCP(0x0d);

 while(!DataRdyTCP());
 c = ReadTCP();//4
 while(!DataRdyTCP());
 c = ReadTCP();//1
 while(!DataRdyTCP());
 c = ReadTCP();//space
 while(!DataRdyTCP());
 c = ReadTCP();//0
 while(!DataRdyTCP());
 c = ReadTCP();//1
 while(!DataRdyTCP());
 c = ReadTCP();//space
 while(!DataRdyTCP());
 c = ReadTCP();//0
 while(!DataRdyTCP());
 c = ReadTCP();//number of error codes
 
 errornumber = c;

 //The return string is long so wait for carriage return or else system will freeze.
 while(!DataRdyTCP());
 c = ReadTCP();
 //Wait for OK>
 while(c != 0x3E)
 {
  while(!DataRdyTCP());
  c = ReadTCP();
 }
}
Request Trouble Code
//Pseudo C Code Example
void RequestTroubleCodes(int count) // Reads back 3 codes only.
{
 int b0,b1,b2,b3; //Error 1
 int b4,b5,b6,b7; //Error 2
 int b8,b9,b10,b11; //Error 3
 int c;
 int x;

 if(count == 0)
  return;
 
 //Clear Input Buffer Here
  
 WriteTCP('0');
 WriteTCP('3');
 WriteTCP(0x0d);
 
 //Non-CAN protocols
 if(ConnectProtocol == 0)
 {
  while(!DataRdyTCP());
  c = ReadTCP();  //4
  while(!DataRdyTCP());
  c = ReadTCP();  //3
  while(!DataRdyTCP());
  c = ReadTCP();  //space
  while(!DataRdyTCP());
  b0 = ReadTCP(); //Error1
  while(!DataRdyTCP());
  b1 = ReadTCP(); //Error1
  while(!DataRdyTCP());
  c = ReadTCP();  //space
  while(!DataRdyTCP());
  b2 = ReadTCP(); //Error1
  while(!DataRdyTCP());
  b3 = ReadTCP(); //Error1
  while(!DataRdyTCP());
  c = ReadTCP();  //space
  while(!DataRdyTCP());
  b4 = ReadTCP(); //Error2
  
  while(!DataRdyTCP());
  b5 = ReadTCP(); //Error2
  while(!DataRdyTCP());
  c = ReadTCP();  //space
  while(!DataRdyTCP());
  b6 = ReadTCP(); //Error2
  while(!DataRdyTCP());
  b7 = ReadTCP(); //Error2
  while(!DataRdyTCP());
  c = ReadTCP();  //space
  while(!DataRdyTCP());
  b8 = ReadTCP(); //Error3
  while(!DataRdyTCP());
  b9 = ReadTCP(); //Error3
  while(!DataRdyTCP());
  c = ReadTCP();  //space
  while(!DataRdyTCP());
  b10 = ReadTCP(); //Error3
  while(!DataRdyTCP());
  b11 = ReadTCP(); //Error3
 }
 else //CAN
 {
  if(count <= 2)
  {
   while(!DataRdyTCP());
   c = ReadTCP();  //4
   while(!DataRdyTCP());
   c = ReadTCP();  //3
   while(!DataRdyTCP());
   c = ReadTCP();  //space
   while(!DataRdyTCP());
   c = ReadTCP();  //Number Trouble
   while(!DataRdyTCP());
   c = ReadTCP();  //Number Trouble
   while(!DataRdyTCP());
   c = ReadTCP();  //space
   while(!DataRdyTCP());
   b0 = ReadTCP(); //Error1
   while(!DataRdyTCP());
   b1 = ReadTCP(); //Error1
   while(!DataRdyTCP());
   c = ReadTCP();  //space
   while(!DataRdyTCP());
   b2 = ReadTCP(); //Error1
   while(!DataRdyTCP());
   b3 = ReadTCP(); //Error1
   while(!DataRdyTCP());
   c = ReadTCP();  //space
   while(!DataRdyTCP());
   b4 = ReadTCP(); //Error2
   while(!DataRdyTCP());
   b5 = ReadTCP(); //Error2
   while(!DataRdyTCP());
   c = ReadTCP();  //space
   while(!DataRdyTCP());
   b6 = ReadTCP(); //Error2
   while(!DataRdyTCP());
   b7 = ReadTCP(); //Error2
  }
  else //3 or more trouble codes
  {
   while(!DataRdyTCP());
   c = ReadTCP();
   //Wait for ':'
   while(c != ':')
   {
    while(!DataRdyTCP());
    c = ReadTCP();
   }

   while(!DataRdyTCP());
   c = ReadTCP();  //space
   while(!DataRdyTCP());
   c = ReadTCP();  //4
   while(!DataRdyTCP());
   c = ReadTCP();  //3
   while(!DataRdyTCP());
   c = ReadTCP();  //space
   while(!DataRdyTCP());
   c = ReadTCP();  //Number Trouble
   while(!DataRdyTCP());
   c = ReadTCP();  //Number Trouble
   while(!DataRdyTCP());
   c = ReadTCP();  //space
   while(!DataRdyTCP());
   b0 = ReadTCP(); //Error1
   while(!DataRdyTCP());
   b1 = ReadTCP(); //Error1
   while(!DataRdyTCP());
   c = ReadTCP();  //space
   while(!DataRdyTCP());
   b2 = ReadTCP(); //Error1
   while(!DataRdyTCP());
   b3 = ReadTCP(); //Error1
   while(!DataRdyTCP());
   c = ReadTCP();  //space
   while(!DataRdyTCP());
   b4 = ReadTCP(); //Error2
   while(!DataRdyTCP());
   b5 = ReadTCP(); //Error2
   while(!DataRdyTCP());
   c = ReadTCP();  //space
   while(!DataRdyTCP());
   b6 = ReadTCP(); //Error2
   while(!DataRdyTCP());
   b7 = ReadTCP(); //Error2
   while(!DataRdyTCP());
   c = ReadTCP();
   while(c != ':') //Wait for ':'
   {
    while(!DataRdyTCP());
    c = ReadTCP();
   }

   while(!DataRdyTCP());
   c = ReadTCP();  //space
   while(!DataRdyTCP());
   b8 = ReadTCP(); //Error3
   while(!DataRdyTCP());
   b9 = ReadTCP(); //Error3
   while(!DataRdyTCP());
   c = ReadTCP();  //space
   while(!DataRdyTCP());
   b10 = ReadTCP(); //Error3
   while(!DataRdyTCP());
   b11 = ReadTCP(); //Error3
  }
 }

 errb0 = b0;
 errb1 = b1;
 errb2 = b2;
 errb3 = b3;
 errb4 = b4;
 errb5 = b5;
 errb6 = b6;
 errb7 = b7;
 errb8 = b8;
 errb9 = b9;
 errb10 = b10;
 errb11 = b11;

 //For 4+ error codes - multiple lines are returned
 while(!DataRdyTCP());
 c = ReadTCP();
 //Wait for OK>
 while(c != 0x3E)
 {
  while(!DataRdyTCP());
  c = ReadTCP();
 }
}

void ErrorCodePrefix(int b0)
{
 if(b0 == 0)
 {
  hc = '0';
  thc = 'P';
 }
 else if(b0 == 1)
 {
  hc = '1';
  thc = 'P';
 }
 else if(b0 == 2)
 {
  hc = '2';
  thc = 'P';
 }
 else if(b0 == 3)
 {
  hc = '3';
  thc = 'P';
 }
 else if(b0 == 4)
 {
  hc = '0';
  thc = 'C';
 }
 else if(b0 == 5)
 {
  hc = '1';
  thc = 'C';
 }
 else if(b0 == 6)
 {
  hc = '2';
  thc = 'C';
 }
 else if(b0 == 7)
 {
  hc = '3';
  thc = 'C';
 }
 else if(b0 == 8)
 {
  hc = '0';
  thc = 'b';
 }
 else if(b0 == 9)
 {
  hc = '1';
  thc = 'b';
 }
 else if(b0 == 10)
 {
  hc = '2';
  thc = 'b';
 }
 else if(b0 == 11)
 {
  hc = '3';
  thc = 'b';
 }
 else if(b0 == 12)
 {
  hc = '0';
  thc = 'U';
 }
 else if(b0 == 13)
 {
  hc = '1';
  thc = 'U';
 }
 else if(b0 == 14)
 {
  hc = '2';
  thc = 'U';
 }
 else if(b0 == 15)
 {
  hc = '3';
  thc = 'U';
 }
}

int GetProtocol() //returns 1 for CAN, 0 for other
{
 char c;
 char s[15];
 int x;

 //Clear Input Buffer Here
 
 WriteTCP('a');
 WriteTCP('t');
 WriteTCP('d');
 WriteTCP('p');
 WriteTCP(0x0d);

 getsTCP (s, 15); //Get a string of 15 characters

 //The return string is long so wait for carriage return or else system will freeze.
 while(!DataRdyTCP());
 c = ReadTCP();
 //Wait for OK>
 while(c != 0x3E)
 {
  while(!DataRdyTCP());
  c = ReadTCP();
 }

 for(x=0;x<11;x++)
 {
  if((s[x] == '1') & (s[x+1] == '5') & (s[x+2] == '7'))
   return 1;
 }
 return 0;
}
PLX iMFD Sensor Table
Sensor Address Units Min Max
Wideband O2 0 0 - Lambda 0.68 1.36
1 - Gasoline (14.7) 10 20
2 - Diesel (14.6) 9.93 19.86
3 - Methanol (6.4) 4.35 8.7
4 - Ethanol (9.0) 6.12 12.24
5 - LPG (15.5) 10.54 21.08
6 - CNG (17.2) 11.7 23.39
7 - E85 (9.76) 6.64 13.27
Exhaust Gas Temp 1 0 - Celsius 0 1023
1 - Fahrenheit 32 1873
Fluid Temp 2 0 - Celsius Water 0 150
1 - Fahrenheit Water 32 302
2 - Celsius Oil 0 150
3 - Fahrenheit Oil 32 302
Vacuum 3 0 - Vac in/Hg 29.93 0
1 - Vac mm/Hg 760 0
Boost 4 2 - Boost 0-30 PSI 0 30
3 - Boost 0-2 kg/cm2 0 2.07
4 - Boost 0-15 PSI 0 15
5 - Boost 0-1 kg/cm2 0 1.12
Air Intake Temp 5 0 - Celsius 0 150
1 - Fahrenheit 32 302
RPM 6 0 - 8k 0 8000
1 - 12k 0 12000
2 - 20k 0 20000
Speed 7 0 - MPH 0 160
1 - km/H 0 258
Throttle Position 8 0 - Percent 0 100
Engine Load 9 0 - Percent 0 100
Sensor Address Units Min Max
Fluid Pressure 10 0 - PSI Fuel 0 120
1 - kg/cm2 Fuel 0 8.44
2 - Bar Fuel 0 8.27
3 - PSI Oil 0 120
4 - kg/cm2 Oil 0 8.44
5 - Bar Oil 0 8.27
Timing 11 0 - Degree -64 64
Manifold Absolute 12 0 - kPa 0 255
Pressure (MAP) 1 - inHg 0 75.3
Mass Air Flow (MAF) 13 0 - g/s 0 655.35
1 - lb/min 0 86.69
Short Term Fuel Trim 14 0 - Percent -100 100
Long Term Fuel Trim 15 0 - Percent -100 100
Narrowband O2 16 0 - Percent 0 100
1 - Volts 0 1.275
Fuel Level 17 0 - Percent 0 100
Volt Meter 18 0 - Volts 0 20
Knock 19 0 - Volts 0 5
Duty Cycle 20 0 - Positive 0 100
1 - Negative 0 100
Fuel Efficiency 21 0 - MPG 0 100
1 - KM/L 0.43 42.51
2 - L=100KM
Analog Voltage 22 0 - Volts 0 5
Speed (Hertz) 23 0 - Hz 0 10,230