Handshake Flow Control

So far, having looked at lots of source code (including that for avrdude), I not been able to find an answer to the following question...

Is there any kind of handshake flow control implemented over the USB to PC/Mac interface? Or, to ensure a reliable com link, should I implement my own protocol layer, using (for example) an ETX/STX system?

The USB serial converter chip does handle the RS-232 control signals (RTS/CTS) but the Arduino board does not have those hardware signals available for use, just the DTR signal is brought out and that is used to reset the AVR chip so not useful for flow control

A character based handshake protocol (Xon & Xoff characters) would work if you are not sending binary data but rather just ASCII characters, however your PC/Mac application software as well as your Arduino sketch would have to be written/configured to utilize that method.

Lefty

Thank you Lefty for answering my question. I'll probably go for a STX/ETX data packet (converting binary data to HEX) with an ACK/NAK handshake.

I think it should be possible to emulate CTS#/RTS# using general purpose IO pins. I have done this when interfacing MicroVGA - http://www.microvga.com/. For MicroVGA it was absolutely necessary to handle at least MCU->MicroVGA transmission, otherwise a lot of characters got lost and it completely broke the user interface.