/**
  \example pingpong.cpp 

  Here's a complete sketch showing how to respond to the arrival of a
  packet.  When this sketch sees a "ping" packet, it responds with
  "pong".  

  Compared to \ref OldioSketches, note two differences here:
  -# In #setup(), there are no \c begin calls on faces specifying baud rates, and
  -# There is no sketch code to do any serial reading at all.

  The first difference arises because in the packet system, you are
  not allowed to specify an explicit baud rate.  Instead, SFB's (and
  other SFB-aware programs, such as \c sfbdl) automatically perform \e
  baud \e rate \e negotiation (BRN) to determine a mutually agreeable
  baud rate.

  And the second difference arises because the core software
  automatically collects input bytes as they arrive and assembles them
  into packets.  Once a packet is complete, some appropriate packet
  handler function -- if any -- is called to respond to the packet.
      
  A sketch registers interest in certain packets by establishing a \e
  reflex (or several of them), associating a 'packet type' with a
  'packet handler'.  The \e type of a packet is just the value of its
  first byte -- so the type of a packet containing the four bytes
  "ping" is 'p'.  In this example, the setup() function establishes a
  reflex between type 'p' and the packet handler function
  'doPingPong'.
  
  Note that this particular sketch \e responds to, but never actually
  \e prints, a \c ping packet.  So if a bunch of IXMs were plugged
  together all running this sketch, they would all just sit there
  mute, waiting for somebody or something else to \c ping them.

 */
