blob: 6bdb57ac61007acf89cf37f5520b3a975e561169 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
|
#ifndef _L1_SYNC_H
#define _L1_SYNC_H
#include <osmocore/linuxlist.h>
#include <osmocore/gsm_utils.h>
#include <layer1/tdma_sched.h>
#include <l1a_l23_interface.h>
struct l1_cell_info {
uint16_t arfcn;
uint32_t bsic;
uint32_t fn_offset;
uint32_t time_alignment;
};
enum l1s_chan {
L1S_CHAN_MAIN,
L1S_CHAN_SACCH,
_NUM_L1S_CHAN
};
struct l1s_state {
struct gsm_time current_time; /* current time */
struct gsm_time next_time; /* time at next TMDMA irq */
struct l1_cell_info serving_cell;
struct tdma_scheduler tdma_sched;
uint32_t tpu_offset;
/* Transmit queues of pending packets for main DCCH and ACCH */
struct llist_head tx_queue[_NUM_L1S_CHAN];
/* bit-mask of multi-frame tasks that are currently active */
uint32_t mf_tasks;
struct {
uint8_t ra;
} rach;
};
extern struct l1s_state l1s;
enum l1_sig_num {
L1_SIG_PM, /* Power Measurement */
L1_SIG_NB, /* Normal Burst */
};
struct l1s_meas_hdr {
uint16_t snr; /* signal/noise ratio */
int16_t toa_qbit; /* time of arrival (qbits) */
int16_t pm_dbm8; /* power level in dbm/8 */
int16_t freq_err; /* Frequency error in Hz */
};
struct l1_signal {
uint16_t signum;
uint16_t arfcn;
union {
struct {
int16_t dbm8[2];
} pm;
struct {
struct l1s_meas_hdr meas[4];
uint16_t crc;
uint16_t fire;
uint16_t num_biterr;
uint8_t frame[24];
} nb;
};
};
typedef void (*l1s_cb_t)(struct l1_signal *sig);
void l1s_set_handler(l1s_cb_t handler);
int16_t l1s_snr_int(uint16_t snr);
uint16_t l1s_snr_fract(uint16_t snr);
void l1s_dsp_abort(void);
void l1s_fb_test(uint8_t base_fn, uint8_t fb_mode);
void l1s_sb_test(uint8_t base_fn);
void l1s_pm_test(uint8_t base_fn, uint16_t arfcn);
void l1s_nb_test(uint8_t base_fn);
void l1s_init(void);
/* init.c */
void layer1_init(void);
#endif /* _L1_SYNC_H */
|