Go to the documentation of this file.
9 #ifndef __SCHCFRAGMENTER_H__
10 #define __SCHCFRAGMENTER_H__
22 #define SCHC_FRAG_INPUT 2
27 #define SCHC_ACK_INPUT 1
33 #define SCHC_SUCCESS 0
44 #define SCHC_FAILURE -1
49 #define SCHC_NO_FRAGMENTATION -2
133 uint32_t time_ms,
void *arg);
155 uint8_t (*send)(uint8_t* data, uint16_t length, uint32_t device_id),
157 void (*remove_timer_entry)(uint32_t device_id));
void schc_reset(schc_fragmentation_t *conn)
reset a connection
Definition: fragmenter.c:818
Definition: fragmenter.h:53
Definition: fragmenter.h:53
Definition: fragmenter.h:53
#define BITMAP_SIZE_BYTES
Definition: schc_config.h:60
Definition: fragmenter.h:76
uint8_t frag_cnt
Definition: fragmenter.h:68
uint8_t dtag
Definition: fragmenter.h:118
uint8_t mic[MIC_SIZE_BYTES]
Definition: fragmenter.h:108
uint16_t len
Definition: fragmenter.h:66
uint8_t rule_id[RULE_SIZE_BYTES]
Definition: fragmenter.h:102
uint8_t attempts
Definition: fragmenter.h:124
struct schc_rule_t * schc_rule
Definition: fragmenter.h:149
Definition: fragmenter.h:60
uint8_t window[1]
Definition: fragmenter.h:82
void(* end_tx)()
Definition: fragmenter.h:137
schc_fragmentation_t * schc_fragment_input(uint8_t *data, uint16_t len, uint32_t device_id)
This function should be called whenever a fragment is received an open connection is picked for the d...
Definition: fragmenter.c:2276
uint8_t window
Definition: fragmenter.h:114
Definition: fragmenter.h:57
struct schc_mbuf_t * next
Definition: fragmenter.h:72
Definition: fragmenter.h:57
void(* remove_timer_entry)(uint32_t device_id)
Definition: fragmenter.h:139
uint16_t mtu
Definition: fragmenter.h:104
struct schc_mbuf_t schc_mbuf_t
#define MIC_SIZE_BYTES
Definition: schc_config.h:57
uint8_t window_cnt
Definition: fragmenter.h:116
rx_state
Definition: fragmenter.h:56
uint8_t bitmap[BITMAP_SIZE_BYTES]
Definition: fragmenter.h:80
uint32_t dc
Definition: fragmenter.h:106
int8_t schc_reassemble(schc_fragmentation_t *rx_conn)
the receiver state machine
Definition: fragmenter.c:1454
schc_fragmentation_t * schc_get_connection(uint32_t device_id)
find a connection based on a device id or open a new connection if there was no connection for this d...
Definition: fragmenter.c:1322
schc_fragmentation_ack_t ack
Definition: fragmenter.h:145
uint8_t bitmap[BITMAP_SIZE_BYTES]
Definition: fragmenter.h:122
Definition: fragmenter.h:92
void(* post_timer_task)(void(*timer_task)(void *conn), uint32_t device_id, uint32_t time_ms, void *arg)
Definition: fragmenter.h:132
uint8_t timer_flag
Definition: fragmenter.h:141
int8_t schc_fragment(schc_fragmentation_t *tx_conn)
the sender state machine
Definition: fragmenter.c:1967
Definition: fragmenter.h:53
tx_state TX_STATE
Definition: fragmenter.h:126
Definition: fragmenter.h:57
rx_state RX_STATE
Definition: fragmenter.h:128
Definition: fragmenter.h:53
Definition: fragmenter.h:57
uint32_t slot
Definition: fragmenter.h:62
uint16_t packet_len
Definition: fragmenter.h:96
uint8_t dtag[1]
Definition: fragmenter.h:84
uint8_t * tail_ptr
Definition: fragmenter.h:100
Definition: fragmenter.h:53
tx_state
Definition: fragmenter.h:52
int8_t schc_fragmenter_init(schc_fragmentation_t *tx_conn, uint8_t(*send)(uint8_t *data, uint16_t length, uint32_t device_id), void(*end_rx)(schc_fragmentation_t *conn), void(*remove_timer_entry)(uint32_t device_id))
Initializes the SCHC fragmenter.
Definition: fragmenter.c:1799
schc_fragmentation_t * schc_input(uint8_t *data, uint16_t len, schc_fragmentation_t *rx_conn, uint32_t device_id)
This function should be called whenever a packet is received.
Definition: fragmenter.c:2194
struct schc_fragmentation_ack_t schc_fragmentation_ack_t
uint8_t rule_id[RULE_SIZE_BYTES]
Definition: fragmenter.h:78
schc_bitarray_t * bit_arr
Definition: fragmenter.h:98
uint8_t mic
Definition: fragmenter.h:86
uint8_t frag_cnt
Definition: fragmenter.h:120
void schc_ack_input(uint8_t *data, uint16_t len, schc_fragmentation_t *tx_conn, uint32_t device_id)
This function should be called whenever an ack is received.
Definition: fragmenter.c:2215
struct schc_fragmentation_t schc_fragmentation_t
void mbuf_copy(schc_mbuf_t *head, uint8_t *ptr)
copy the byte alligned contents of the mbuf chain to the passed pointer
Definition: fragmenter.c:323
uint8_t RULE_SIZE
Definition: fragmenter.h:151
uint8_t fcn
Definition: fragmenter.h:112
uint8_t input
Definition: fragmenter.h:143
Definition: fragmenter.h:57
uint8_t * ptr
Definition: fragmenter.h:64
uint32_t device_id
Definition: fragmenter.h:94
schc_mbuf_t * head
Definition: fragmenter.h:147
uint16_t get_mbuf_len(schc_mbuf_t *head)
returns the total length of the mbuf
Definition: fragmenter.c:282
uint8_t fcn
Definition: fragmenter.h:88
#define RULE_SIZE_BYTES
Definition: schc.h:15
void(* end_rx)(struct schc_fragmentation_t *conn)
Definition: fragmenter.h:135
uint8_t offset
Definition: fragmenter.h:70
Definition: fragmenter.h:57
uint8_t(* send)(uint8_t *data, uint16_t length, uint32_t device_id)
Definition: fragmenter.h:130