246 lines
7.9 KiB
C
246 lines
7.9 KiB
C
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
/*
|
|
* Copyright (C) 2011 Red Hat, Inc.
|
|
*
|
|
* This program is free software: you can redistribute it and/or
|
|
* modify it under the terms of version 2 of the GNU General Public
|
|
* License as published by the Free Software Foundation
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#ifndef LIBQCDM_LOG_ITEMS_H
|
|
#define LIBQCDM_LOG_ITEMS_H
|
|
|
|
#include <stdint.h>
|
|
|
|
enum {
|
|
/* CDMA and EVDO items */
|
|
DM_LOG_ITEM_CDMA_ACCESS_CHANNEL_MSG = 0x1004,
|
|
DM_LOG_ITEM_CDMA_REV_CHANNEL_TRAFFIC_MSG = 0x1005,
|
|
DM_LOG_ITEM_CDMA_SYNC_CHANNEL_MSG = 0x1006,
|
|
DM_LOG_ITEM_CDMA_PAGING_CHANNEL_MSG = 0x1007,
|
|
DM_LOG_ITEM_CDMA_FWD_CHANNEL_TRAFFIC_MSG = 0x1008,
|
|
DM_LOG_ITEM_CDMA_FWD_LINK_VOCODER_PACKET = 0x1009,
|
|
DM_LOG_ITEM_CDMA_REV_LINK_VOCODER_PACKET = 0x100A,
|
|
DM_LOG_ITEM_CDMA_MARKOV_STATS = 0x100E,
|
|
DM_LOG_ITEM_CDMA_REVERSE_POWER_CONTROL = 0x102C,
|
|
DM_LOG_ITEM_CDMA_SERVICE_CONFIG = 0x102E,
|
|
DM_LOG_ITEM_EVDO_HANDOFF_STATE = 0x105E,
|
|
DM_LOG_ITEM_EVDO_ACTIVE_PILOT_SET = 0x105F,
|
|
DM_LOG_ITEM_EVDO_REV_LINK_PACKET_SUMMARY = 0x1060,
|
|
DM_LOG_ITEM_EVDO_REV_TRAFFIC_RATE_COUNT = 0x1062,
|
|
DM_LOG_ITEM_EVDO_REV_POWER_CONTROL = 0x1063,
|
|
DM_LOG_ITEM_EVDO_ARQ_EFFECTIVE_RECEIVE_RATE = 0x1066,
|
|
DM_LOG_ITEM_EVDO_AIR_LINK_SUMMARY = 0x1068,
|
|
DM_LOG_ITEM_EVDO_POWER = 0x1069,
|
|
DM_LOG_ITEM_EVDO_FWD_LINK_PACKET_SNAPSHOT = 0x106A,
|
|
DM_LOG_ITEM_EVDO_ACCESS_ATTEMPT = 0x106C,
|
|
DM_LOG_ITEM_EVDO_REV_ACTIVITY_BITS_BUFFER = 0x106D,
|
|
DM_LOG_ITEM_EVDO_PILOT_SETS = 0x107A,
|
|
DM_LOG_ITEM_EVDO_STATE_INFO = 0x107E,
|
|
DM_LOG_ITEM_EVDO_SECTOR_INFO = 0x1080,
|
|
DM_LOG_ITEM_EVDO_PILOT_SETS_V2 = 0x108B,
|
|
|
|
/* WCDMA items */
|
|
DM_LOG_ITEM_WCDMA_TA_FINGER_INFO = 0x4003,
|
|
DM_LOG_ITEM_WCDMA_AGC_INFO = 0x4105,
|
|
DM_LOG_ITEM_WCDMA_RRC_STATE = 0x4125,
|
|
DM_LOG_ITEM_WCDMA_CELL_ID = 0x4127,
|
|
|
|
/* GSM items */
|
|
DM_LOG_ITEM_GSM_BURST_METRICS = 0x506c,
|
|
DM_LOG_ITEM_GSM_BCCH_MESSAGE = 0x5134,
|
|
};
|
|
|
|
|
|
/* DM_LOG_ITEM_CDMA_PAGING_CHANNEL_MSG */
|
|
struct DMLogItemPagingChannelMsg {
|
|
uint8_t msg_len; /* size of entire struct including this field */
|
|
uint8_t msg_type; /* MSG_TYPE as in 3GPP2 C.S0004 Table 3.1.2.3.1.1.2 */
|
|
uint8_t data[0]; /* Packed message as in 3GPP2 C.S0005 3.7.2.3.2.x */
|
|
} __attribute ((packed));
|
|
typedef struct DMLogItemPagingChannelMsg DMLogItemPagingChannelMsg;
|
|
|
|
|
|
/* DM_LOG_ITEM_CDMA_REVERSE_POWER_CONTROL */
|
|
struct DMLogItemRPCItem {
|
|
uint8_t channel_set_mask;
|
|
uint16_t frame_count;
|
|
uint8_t len_per_frame;
|
|
uint16_t dec_history;
|
|
uint8_t rx_agc_vals;
|
|
uint8_t tx_power_vals;
|
|
uint8_t tx_gain_adjust;
|
|
} __attribute__ ((packed));
|
|
typedef struct DMLogItemRPCItem DMLogItemRPCItem;
|
|
|
|
struct DMLogItemCdmaReversePowerControl {
|
|
uint8_t frame_offset;
|
|
uint8_t band_class;
|
|
uint16_t rev_chan_rc;
|
|
uint8_t pilot_gating_rate;
|
|
uint8_t step_size;
|
|
uint8_t num_records;
|
|
DMLogItemRPCItem records[];
|
|
} __attribute__ ((packed));
|
|
typedef struct DMLogItemCdmaReversePowerControl DMLogItemCdmaReversePowerControl;
|
|
|
|
/* DM_LOG_ITEM_EVDO_PILOT_SETS_V2 */
|
|
struct DMLogItemEvdoPilotSetsV2Pilot {
|
|
uint16_t pilot_pn;
|
|
/* HDR pilot energy doesn't appear to be in the same units as 1x pilot
|
|
* energy (eg, -0.5 dBm increments). Instead it appears roughly correlated
|
|
* to RSSI dBm by using this formula empirically derived from simultaneous
|
|
* AT!RSSI and HDR Pilot Sets V2 results from a Sierra modem:
|
|
*
|
|
* RSSI dBm = -110 + (MAX(pilot_energy - 50, 0) / 14)
|
|
*/
|
|
uint16_t pilot_energy;
|
|
union {
|
|
struct {
|
|
uint16_t mac_index;
|
|
uint8_t unknown1;
|
|
uint8_t unknown2;
|
|
uint16_t window_center;
|
|
} Active;
|
|
struct {
|
|
uint16_t channel_number;
|
|
uint8_t unknown1;
|
|
uint8_t unknown2;
|
|
uint16_t window_center;
|
|
} Candidate;
|
|
struct {
|
|
uint16_t channel_number;
|
|
uint16_t window_center;
|
|
uint8_t unknown1; // Offset?
|
|
uint8_t unknown2; // Age?
|
|
} Remaining;
|
|
};
|
|
} __attribute__ ((packed));
|
|
typedef struct DMLogItemEvdoPilotSetsV2Pilot DMLogItemEvdoPilotSetsV2Pilot;
|
|
|
|
/* DM_LOG_ITEM_EVDO_PILOT_SETS_V2 */
|
|
struct DMLogItemEvdoPilotSetsV2 {
|
|
uint8_t pn_offset;
|
|
uint8_t active_count;
|
|
uint8_t active_window;
|
|
uint16_t active_channel;
|
|
uint8_t unknown1;
|
|
uint8_t candidate_count;
|
|
uint8_t candidate_window;
|
|
uint8_t remaining_count;
|
|
uint8_t remaining_window;
|
|
uint8_t unknown2;
|
|
|
|
DMLogItemEvdoPilotSetsV2Pilot sets[];
|
|
} __attribute__ ((packed));
|
|
typedef struct DMLogItemEvdoPilotSetsV2 DMLogItemEvdoPilotSetsV2;
|
|
|
|
/* DM_LOG_ITEM_WCDMA_TA_FINGER_INFO */
|
|
struct DMLogItemWcdmaTaFingerInfo {
|
|
int32_t tx_pos;
|
|
int16_t coherent_interval_len;
|
|
uint8_t non_coherent_interval_len;
|
|
uint8_t num_paths;
|
|
uint32_t path_enr;
|
|
int32_t pn_pos_path;
|
|
int16_t pri_cpich_psc;
|
|
uint8_t unknown1;
|
|
uint8_t sec_cpich_ssc;
|
|
uint8_t finger_channel_code_index;
|
|
uint8_t finger_index;
|
|
} __attribute__ ((packed));
|
|
typedef struct DMLogItemWcdmaTaFingerInfo DMLogItemWcdmaTaFingerInfo;
|
|
|
|
|
|
/* DM_LOG_ITEM_WCDMA_AGC_INFO */
|
|
struct DMLogItemWcdmaAgcInfo {
|
|
uint8_t num_samples;
|
|
uint16_t rx_agc;
|
|
uint16_t tx_agc;
|
|
uint16_t rx_agc_adj_pdm;
|
|
uint16_t tx_agc_adj_pdm;
|
|
uint16_t max_tx;
|
|
/* Bit 4 means tx_agc is valid */
|
|
uint8_t agc_info;
|
|
} __attribute__ ((packed));
|
|
typedef struct DMLogItemWcdmaAgcInfo DMLogItemWcdmaAgcInfo;
|
|
|
|
|
|
/* DM_LOG_ITEM_WCDMA_RRC_STATE */
|
|
enum {
|
|
DM_LOG_ITEM_WCDMA_RRC_STATE_DISCONNECTED = 0,
|
|
DM_LOG_ITEM_WCDMA_RRC_STATE_CONNECTING = 1,
|
|
DM_LOG_ITEM_WCDMA_RRC_STATE_CELL_FACH = 2,
|
|
DM_LOG_ITEM_WCDMA_RRC_STATE_CELL_DCH = 3,
|
|
DM_LOG_ITEM_WCDMA_RRC_STATE_CELL_PCH = 4,
|
|
DM_LOG_ITEM_WCDMA_RRC_STATE_URA_PCH = 5,
|
|
};
|
|
|
|
struct DMLogItemWcdmaRrcState {
|
|
uint8_t rrc_state;
|
|
} __attribute__ ((packed));
|
|
typedef struct DMLogItemWcdmaRrcState DMLogItemWcdmaRrcState;
|
|
|
|
|
|
/* DM_LOG_ITEM_WCDMA_CELL_ID */
|
|
struct DMLogItemWcdmaCellId {
|
|
uint8_t unknown1[8];
|
|
uint32_t cellid;
|
|
uint8_t unknown2[4];
|
|
} __attribute__ ((packed));
|
|
typedef struct DMLogItemWcdmaCellId DMLogItemWcdmaCellId;
|
|
|
|
|
|
/* DM_LOG_ITEM_GSM_BURST_METRICS */
|
|
struct DMLogItemGsmBurstMetric {
|
|
uint32_t fn;
|
|
uint16_t arfcn;
|
|
uint32_t rssi;
|
|
uint16_t power;
|
|
uint16_t dc_offset_i;
|
|
uint16_t dc_offset_q;
|
|
uint16_t freq_offset;
|
|
uint16_t timing_offset;
|
|
uint16_t snr;
|
|
uint8_t gain_state;
|
|
} __attribute__ ((packed));
|
|
typedef struct DMLogItemGsmBurstMetric DMLogItemGsmBurstMetric;
|
|
|
|
struct DMLogItemGsmBurstMetrics {
|
|
uint8_t channel;
|
|
DMLogItemGsmBurstMetric metrics[4];
|
|
} __attribute__ ((packed));
|
|
typedef struct DMLogItemGsmBurstMetrics DMLogItemGsmBurstMetrics;
|
|
|
|
|
|
/* DM_LOG_ITEM_GSM_BCCH_MESSAGE */
|
|
enum {
|
|
DM_LOG_ITEM_GSM_BCCH_BAND_UNKNOWN = 0,
|
|
DM_LOG_ITEM_GSM_BCCH_BAND_GSM_900 = 8,
|
|
DM_LOG_ITEM_GSM_BCCH_BAND_DCS_1800 = 9,
|
|
DM_LOG_ITEM_GSM_BCCH_BAND_PCS_1900 = 10,
|
|
DM_LOG_ITEM_GSM_BCCH_BAND_GSM_850 = 11,
|
|
DM_LOG_ITEM_GSM_BCCH_BAND_GSM_450 = 12,
|
|
};
|
|
|
|
struct DMLogItemGsmBcchMessage {
|
|
/* Band is top 4 bits; lower 12 is ARFCN */
|
|
uint16_t bcch_arfcn;
|
|
uint16_t bsic;
|
|
uint16_t cell_id;
|
|
uint8_t lai[5];
|
|
uint8_t cell_selection_prio;
|
|
uint8_t ncc_permitted;
|
|
} __attribute__ ((packed));
|
|
typedef struct DMLogItemGsmBcchMessage DMLogItemGsmBcchMessage;
|
|
|
|
#endif /* LIBQCDM_LOG_ITEMS_H */
|