/***********************************************************************
 *
 * Copyrigth: Karl Hammar, Aspö Data, LGPL
 *
 */

#ifndef __CSMACD_H__
#define __CSMACD_H__

#include <stdint.h>
#include <unistd.h>

enum csma_transmit_state {
  csma_start,
  csma_idle,
  csma_transmit,
  csma_jam,
  csma_defer_no_wait,
  csma_delay_no_wait,
  csma_backoff_delay,
  csma_backoff,
  csma_defer_wit,
  csma_delay_wait,
  csma_backoff_defer
};

enum csmacd_address_size {
  sz48bit,
  sz16bit
};

struct csmacd_config {
  enum csmacd_address_size addrsz;

  double   interframe_gap; /* seconds */

  uint16_t min_frame_sz;   /* bytes */
  uint16_t max_frame_sz;   /* bytes */
  uint16_t slot_time;      /* byte times */
  uint8_t  preamble_sz;    /* bytes */
  uint8_t  attempt_limit;
};

int csmacd_encode(uint8_t *buf, size_t sz, uint64_t dst, uint64_t src, uint8_t data, size_t datasz);

#endif
