// PULSE2 transport protocol event registry

#ifndef _PULSE2_TRANSPORT_PROTOCOL_NUMBERS_DEFINED
#define _PULSE2_TRANSPORT_PROTOCOL_NUMBERS_DEFINED

#define PULSE2_BEST_EFFORT_CONTROL_PROTOCOL (0xBA29)
#define PULSE2_BEST_EFFORT_TRANSPORT_PROTOCOL (0x3A29)

#define PULSE2_RELIABLE_CONTROL_PROTOCOL (0xBA33)
#define PULSE2_RELIABLE_TRANSPORT_COMMAND (0x3A33)
#define PULSE2_RELIABLE_TRANSPORT_RESPONSE (0x3A35)

#endif

// Available directives:
//
//  ON_PACKET(number, packet_handler)
//
//    number:
//      The link-layer protocol number (uint16_t)
//
//    packet_handler:
//      Handler function for incoming packets.
//      The handler function must have the signature
//
//          void packet_handler(void *packet, size_t length);
//
//  ON_INIT(initializer)
//
//    initializer:
//      Initializer function for the protocol. It will be called exactly once
//      sometime before any of the handler functions are called. The function
//      must have the signature
//
//          void init(void);
//      
//      This argument may be NULL if no initialization is required.
//
//  ON_LINK_STATE_CHANGE(link_layer_up_handler, link_layer_down_handler)
//
//    link_layer_up_handler:
//      Handler function for when the link layer comes up. It will be called
//      when the link layer is ready to carry traffic.
//
//    link_layer_down_handler:
//      Handler function for when the link layer goes down. It will be called
//      when the link layer is no longer available to carry traffic.
//
//    Both handler functions must have the signature
//
//        void link_state_handler(void);

ON_PACKET(PULSE2_BEST_EFFORT_CONTROL_PROTOCOL,
          pulse2_best_effort_control_on_packet)
ON_PACKET(PULSE2_BEST_EFFORT_TRANSPORT_PROTOCOL,
          pulse2_best_effort_transport_on_packet)
ON_INIT(pulse2_best_effort_init)
ON_LINK_STATE_CHANGE(pulse2_best_effort_on_link_up,
                     pulse2_best_effort_on_link_down)

ON_PACKET(PULSE2_RELIABLE_CONTROL_PROTOCOL,
          pulse2_reliable_control_on_packet)
ON_PACKET(PULSE2_RELIABLE_TRANSPORT_COMMAND,
          pulse2_reliable_transport_on_command_packet)
ON_PACKET(PULSE2_RELIABLE_TRANSPORT_RESPONSE,
          pulse2_reliable_transport_on_response_packet)
ON_INIT(pulse2_reliable_init)
ON_LINK_STATE_CHANGE(pulse2_reliable_on_link_up,
                     pulse2_reliable_on_link_down)

// vim: filetype=c
