/*! \page usage API usage

<p>Each application requires a handle to the dvbpsi library. The function
dvbpsi_new(&message_cb, DVBPSI_MSG_DEBUG) will return a handle. All
error, warning or debug messages will trigger the <em>message_cb</em> function.
Unless DVBPSI_MSG_NONE is passed to dvbpsi_new(). For each <em>
dvbpsi_XXX_attach()</em> function a unique dvbpsi handle must be used.</p>

<p>A dvbpsi handle must be passed to an <em>dvbpsi_XXX_attach()</em> function
which attaches a decoder to the (dvbpsi_t*)->p_decoder pointer. The
<em>dvbpsi_XXX_attach()</em> function where XXX is the name of the table
(ex: dvbpsi_pat_attach()). The function returns the dvbpsi handle with the
new decoder attached decoder.</p>

<p>Then the application has to send the TS packets needed by the decoder
by calling the dvbpsi_packet_push() function. If a new table is complete
then the decoder calls the callback specified by the application when it
called <em>dvbpsi_XXX_attach()</em>.</p>

<p>When the application don't need the decoder anymore it just has to
call the <em>dvbpsi_XXX_detach()</em> function (ex:
dvbpsi_pat_detach()). The dvbpsi handle must be released by calling
dvbpsi_delete(). At the time of calling the decoder must already
have been detached.</p>

<p>Look at the header files for specific table, see the list below:</p>

<ul>
  <li>Program Specific Information: psi.h</li>
  <li>Descriptors: descriptor.h</li>
  <li>Program Association Table: pat.h</li>
  <li>Program Map Table: pmt.h</li>
  <li>Conditional Access Table: cat.h</li>
  <li>EPG Information Table: eit.h</li>
  <li>Network Informtation Table: nit.h</li>
  <li>Stream Description Table: sdt.h</li>
  <li>Splice Information Section Table: sis.h</li>
  <li>TDT/TOT: tot.h</li>
  <li>ATSC tables: atsc_eit.h atsc_ett.h atsc_mgt.h atsc_stt.h atsc_vct.h</li>
</ul>

<p>See also:</p>
<ul>
<li>\ref structure</li>
<li>\ref howto-new-api</li>
</ul>
*/
