#pragma once

#include <stdint.h>

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

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[13];

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[9];

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[14];

/* 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[8];

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[17];

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