#pragma once

#include <stdint.h>

enum gprs_mac_mode {
	NULL_MODE,
	IDLE_MODE,
	TRANSFER_MODE,
};
extern struct value_string gprs_mac_mode_vals[];

enum gprs_mac_null_substates {
	NULL_INACTIVE,
	NULL_GPRS_51_ACTIVE,
	NULL_SUSPENDED,
	NULL_SUSPEND_RESEL,
	NULL_UPLINK_TBF_ESTAB,
	NULL_UPLINK_SB_ESTAB,
	NULL_DOWNLINK_SB_ESTAB,
	NULL_UPLINK_TBF_ACCESS,
	NULL_DL_TBF_EST,
	NULL_DTM_CONNECT_PENDING,
	NULL_DTM_GTTP_UL_CON,
	NULL_RESET,
};
extern struct value_string gprs_mac_null_substate_vals[];

enum gprs_mac_idle_substates {
	IDLE_PASSIVE,
	IDLE_UL_PACKET_ACCESS,
	IDLE_UL_ACCESS_QUEUED,
	IDLE_UL_ACCESS_REJECT,
	IDLE_UL_1PHASE_ASS,
	IDLE_UL_2PHASE_ASS,
	IDLE_UL_1PHASE_CONT_RES,
	IDLE_DL_ASS,
};
extern struct value_string gprs_mac_idle_substate_vals[];

enum gprs_mac_transfer_substates {
	TRANSFER_INACTIVE,
	TRANSFER_DL,
	TRANSFER_DL_REASSIGN,
	TRANSFER_DL_WITH_DYNAMIC_ALLOC,
	TRANSFER_DL_REASSIGN_DYNAMIC_ALLOC,
	TRANSFER_UL_DYNAMIC,
	TRANSFER_UL_DYNAMIC_REALLOC,
	TRANSFER_UL_DYNAMIC_DL_ASSIGN,
	TRANSFER_UL_DYNAMIC_REALLOC_DL_ASSIGN,
	TRANSFER_CONCURRENT_DYNAMIC_TRANSFER,
	TRANSFER_CONCURRENT_DYNAMIC_DL_REASSIGN,
	TRANSFER_CONCURRENT_DYNAMIC_REALLOC,
	TRANSFER_CONCURRENT_DL_REASSIGN_DYNAMIC_REALLOC,
};
extern struct value_string gprs_mac_transfer_substate_vals[];

/* LOG_GPRS_MAC_STATE_C */
struct gprs_mac_state_change {
	uint8_t mac_mode;
	uint8_t mac_null_fsm_state;
	uint8_t mac_idle_fsm_state;
	uint8_t mac_transfer_fsm_state;
} __attribute__((packed));

/* LOG_GPRS_MAC_SIGNALLING_MESSAGE_C */
struct gprs_mac_signalling_msg {
	uint8_t chan_type;
	uint8_t msg_type;
	uint8_t msg_len;
	uint8_t msg[0];
} __attribute__((packed));

/* LOG_GPRS_MAC_DL_TBF_ESTABLISH_C */
struct gprs_mac_dl_tbf_est {
	uint8_t dl_tfi;
	uint8_t rlc_mode;
	uint8_t dl_ts_bmap;
	uint8_t is_egprs_tbf;
	uint16_t egprs_win_size;
	uint8_t egprs_link_qual_mode;
	uint8_t bep_period2;
} __attribute__((packed));

/* LOG_GPRS_MAC_UL_TBF_ESTABLISH_C */
struct gprs_mac_ul_tbf_est {
	uint8_t tbf_req_cause;
	uint8_t acc_granted;
	uint8_t radio_prio;
	uint8_t peak_tput;
	uint8_t ul_tfi;
	uint8_t rlc_mode;
	uint8_t ul_ts_bmap;

	uint8_t is_egprs_tbf;
	uint16_t egprs_win_size;
	uint8_t resegment;
	uint8_t bep_period2;
} __attribute__ ((packed));

/* LOG_EGPRS_MAC_DL_ACKNACK_C */
struct gprs_mac_dl_acknack {
	uint8_t is_egprs;
	uint8_t dl_acknack[0];
} __attribute__ ((packed));

/* LOG_EGPRS_MAC_UL_ACKNACK_C */
struct gprs_mac_ul_acknack {
	uint8_t ul_acknack[0];
} __attribute__ ((packed));

/* identical for LOG_GPRS_MAC_UL_TBF_RELEASE_C and
 * LOG_GPRS_MAC_DL_TBF_RELEASE_C */
struct gprs_mac_tbf_release {
	uint8_t tfi;
	uint8_t fail_cause;
} __attribute__ ((packed));


/* EVENT_GPRS_MAC_MSG_RECEIVED / EVENT_GPRS_MAC_MSG_SENT */
enum gprs_mac_chan_type {
	PRACH_11BIT_CHANNEL	= 0x01,
	PRACH_8BIT_CHANNEL	= 0x02,
	PACCH_RRBP_CHANNEL	= 0x03,
	UL_PACCH_CHANNEL	= 0x04,
	PCCCH_CHANNEL		= 0x81,
	PBCCH_CHANNEL		= 0x82,
	DL_PACCH_CHANNEL	= 0x83,
};
extern struct value_string gprs_mac_chan_type_vals[];

enum gprs_mac_msg_type {
	PACKET_CELL_CHANGE_FAILURE		= 0x00,
	PACKET_CONTROL_ACKNOWLEDGE		= 0x01,
	PACKET_DOWNLINK_ACK_NACK		= 0x02,
	PACKET_UPLK_DUMMY_CNTRL_BLK		= 0x03,
	PACKET_MEASUREMENT_REPORT		= 0x04,
	PACKET_RESOURCE_REQUEST			= 0x05,
	PACKET_MOBILE_TBF_STATUS		= 0x06,
	PACKET_PSI_STATUS			= 0x07,
	EGPRS_PACKET_DOWNLINK_ACK_NACK		= 0x08,
	PACKET_PAUSE				= 0x09,
	PACKET_ENHANCED_MEASUREMENT_REPORT	= 0x0a,
	ADDITIONAL_MS_RAC			= 0x0b,
	PACKET_CELL_CHANGE_NOTIFICATION		= 0x0c,
	PACKET_SI_STATUS			= 0x0d,
	PACKET_CS_REQUEST			= 0x0e,
	PACKET_CHANNEL_REQUEST			= 0x20,
};
extern struct value_string gprs_mac_msg_type_vals[];

struct evt_gprs_mac_msg {
	uint8_t msg_type;
	uint8_t prot_disc;
	uint8_t chan_type;
} __attribute__ ((packed));
