Yes just use the L9637D with a 510 ohm pull up resistor on a UART. Some guy is even selling little breakout boards with the chip and a small SMD pull up across the pins on eBay.
You will get an echo (read what you send), as its single wire. You are supposed to read this in and verify each byte received matches what was sent - collision detection. In my code though I simply run a counter of bytes sent, and then I dump that number of bytes from the serial input buffer.
I'm probably going to re-do my code under FreeRTOS, because I have so many timers running on the loops to prevent any blocking (my code does K-Line, as well as read another uart stream from a Zeitronix AFR controller, and logs to SD at the same time), but it works well even without an RTOS. I do fast init for the K-Line, where you just drop the TX low for 25ms. You disable UART, drop the tx pin low for 25ms, then bring it high again, then re-enable UART. The 25ms drop can be picked up as a stray '0' on the serial receive buffer though, so I throw away that byte too.
After fast init I then I ask the ECU for its limits in terms of timing (what I call the kwp_wait_time.. time between one request and another, or a response and another request, as well as varying the inter-byte delay etc.), and I then set the comms to use those timings. Actually no that's not true.. That's what I intend to do. I actually asked my ECU for the limits once, ages ago, and I use those as static values. I request a switch to the faster timing, and as long as its accepted, I switch to them.
The KWP packet starts with source, dest, etc, and a length byte (which can be part of the FMT byte, or can be separate). I read the length, and if the length is bigger than a constant I call 'KWP_PARTIAL_RECEIVE_SIZE' or something, then what I do is I then leave the receive function, and come back when the serial buffer has that many bytes in it. So I can get on with other stuff. This worked really well.
My code is on a PC in the garage that's switched off and had its network cable pulled back into the house. I've not looked at it for a few months now since basically cracking it. I'm trying to learn about other stuff now and build a usable workspace at home before I get back to it. Also at this stage I don't want to just give all my code away, no matter how crappy it might be (I may look to sell a completed datalogger or two), but I would gladly give you the gist of it when I can get to it.