blob: 83d745c4e4e08287aeafd73c0f57c7fc19912436 [file] [log] [blame]
Vasil Velichkovff88ba42019-07-20 23:33:08 +03001#!/usr/bin/env python
2# -*- coding: utf-8 -*-
3# @file
4# @author (C) 2019 by Vasil Velichkov <vvvelichkov@gmail.com>
5# @section LICENSE
6#
7# Gr-gsm is free software; you can redistribute it and/or modify
8# it under the terms of the GNU General Public License as published by
9# the Free Software Foundation; either version 3, or (at your option)
10# any later version.
11#
12# Gr-gsm is distributed in the hope that it will be useful,
13# but WITHOUT ANY WARRANTY; without even the implied warranty of
14# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15# GNU General Public License for more details.
16#
17# You should have received a copy of the GNU General Public License
18# along with gr-gsm; see the file COPYING. If not, write to
19# the Free Software Foundation, Inc., 51 Franklin Street,
20# Boston, MA 02110-1301, USA.
21#
22#
23
24import unittest
25import numpy as np
26from gnuradio import gr, gr_unittest, blocks
27import grgsm
28import pmt
29import qa_gsm_demapper_data as test_data
30
31class qa_gsm_sdcch8_demapper (gr_unittest.TestCase):
32
33 def setUp (self):
34 self.tb = gr.top_block ()
35 self.maxDiff = None
36
37 def tearDown (self):
38 self.tb = None
39
40 @unittest.expectedFailure
41 def test_downlink (self):
42 """
43 SDCCH8 demapper downlink test
44 """
45 src = grgsm.burst_source(test_data.frames, test_data.timeslots, test_data.bursts)
46 src.set_arfcn(0); # downlink
47 demapper = grgsm.gsm_sdcch8_demapper(timeslot_nr=0)
48 dst = grgsm.burst_sink()
49
50 self.tb.msg_connect(src, "out", demapper, "bursts")
51 self.tb.msg_connect(demapper, "bursts", dst, "in")
52 self.tb.run ()
53
54 b = test_data.bursts
55 self.assertEqual([
56 b[ 0], b[ 1], b[ 2], b[ 3], #SDCCH 0
57 b[ 4], b[ 5], b[ 6], b[ 7], #SDCCH 1
58 b[ 8], b[ 9], b[ 10], b[ 11], #SDCCH 2
59 b[ 12], b[ 13], b[ 14], b[ 15], #SDCCH 3
60 b[ 16], b[ 17], b[ 18], b[ 19], #SDCCH 4
61 b[ 20], b[ 21], b[ 22], b[ 23], #SDCCH 5
62 b[ 24], b[ 25], b[ 26], b[ 27], #SDCCH 6
63 b[ 28], b[ 29], b[ 30], b[ 31], #SDCCH 7
64 b[ 32], b[ 33], b[ 34], b[ 35], #SACCH 0
65 b[ 36], b[ 37], b[ 38], b[ 39], #SACCH 1
66 b[ 40], b[ 41], b[ 42], b[ 43], #SACCH 2
67 b[ 44], b[ 45], b[ 46], b[ 47], #SACCH 3 #skip 48-50
68 b[ 51], b[ 52], b[ 53], b[ 54], #SDCCH 0
69 b[ 55], b[ 56], b[ 57], b[ 58], #SDCCH 1
70 b[ 59], b[ 60], b[ 61], b[ 62], #SDCCH 2
71 b[ 63], b[ 64], b[ 65], b[ 66], #SDCCH 3
72 b[ 67], b[ 68], b[ 69], b[ 70], #SDCCH 4
73 b[ 71], b[ 72], b[ 73], b[ 74], #SDCCH 5
74 b[ 75], b[ 76], b[ 77], b[ 78], #SDCCH 6
75 b[ 79], b[ 80], b[ 81], b[ 82], #SDCCH 7
76 b[ 83], b[ 84], b[ 85], b[ 86], #SACCH 4
77 b[ 87], b[ 88], b[ 89], b[ 90], #SACCH 5
78 b[ 91], b[ 92], b[ 93], b[ 94], #SACCH 6
79 b[ 95], b[ 96], b[ 97], b[ 98], #SACCH 7 #skip 99-101
80 b[102], b[103], b[104], b[105], #SDCCH
81 ], list(dst.get_burst_data()))
82
83 self.assertEqual([
84 8, 8, 8, 8,
85 8, 8, 8, 8,
86 8, 8, 8, 8,
87 8, 8, 8, 8,
88 8, 8, 8, 8,
89 8, 8, 8, 8,
90 8, 8, 8, 8,
91 8, 8, 8, 8,
92 136, 136, 136, 136,
93 136, 136, 136, 136,
94 136, 136, 136, 136,
95 136, 136, 136, 136,
96 8, 8, 8, 8,
97 8, 8, 8, 8,
98 8, 8, 8, 8,
99 8, 8, 8, 8,
100 8, 8, 8, 8,
101 8, 8, 8, 8,
102 8, 8, 8, 8,
103 8, 8, 8, 8,
104 136, 136, 136, 136,
105 136, 136, 136, 136,
106 136, 136, 136, 136,
107 136, 136, 136, 136,
108 8, 8, 8, 8,
109 ], list(dst.get_sub_types()))
110
111 self.assertEqual([
112 0, 0, 0, 0,
113 1, 1, 1, 1,
114 2, 2, 2, 2,
115 3, 3, 3, 3,
116 4, 4, 4, 4,
117 5, 5, 5, 5,
118 6, 6, 6, 6,
119 7, 7, 7, 7,
120 0, 0, 0, 0, #SACCH 0
121 1, 1, 1, 1, #SACCH 1
122 2, 2, 2, 2, #SACCH 2
123 3, 3, 3, 3, #SACCH 3
124 0, 0, 0, 0,
125 1, 1, 1, 1,
126 2, 2, 2, 2,
127 3, 3, 3, 3,
128 4, 4, 4, 4,
129 5, 5, 5, 5,
130 6, 6, 6, 6,
131 7, 7, 7, 7,
132 4, 4, 4, 4, #SACCH 4
133 5, 5, 5, 5, #SACCH 5
134 6, 6, 6, 6, #SACCH 6
135 7, 7, 7, 7, #SACCH 7
136 0, 0, 0, 0,
137 ], list(dst.get_sub_slots()))
138
139 @unittest.expectedFailure
140 def test_uplink (self):
141 """
142 BCCH_CCCH_SDCCH4 demapper uplink test
143 """
144 src = grgsm.burst_source(test_data.frames, test_data.timeslots, test_data.bursts)
145 src.set_arfcn(0x2240); #uplink flag is 40
146 demapper = grgsm.gsm_sdcch8_demapper(timeslot_nr=0)
147 dst = grgsm.burst_sink()
148
149 self.tb.msg_connect(src, "out", demapper, "bursts")
150 self.tb.msg_connect(demapper, "bursts", dst, "in")
151 self.tb.run ()
152
153 b = test_data.bursts
154 self.assertEqual([
155 b[ 0], b[ 1], b[ 2], b[ 3], #SACCH 5
156 b[ 4], b[ 5], b[ 6], b[ 7], #SACCH 6
157 b[ 8], b[ 9], b[ 10], b[ 11], #SACCH 7 #skip 12-14
158 b[ 15], b[ 16], b[ 17], b[ 18], #SDCCH 0
159 b[ 19], b[ 20], b[ 21], b[ 22], #SDCCH 1
160 b[ 23], b[ 24], b[ 25], b[ 26], #SDCCH 2
161 b[ 27], b[ 28], b[ 29], b[ 30], #SDCCH 3
162 b[ 31], b[ 32], b[ 33], b[ 34], #SDCCH 4
163 b[ 35], b[ 36], b[ 37], b[ 38], #SDCCH 5
164 b[ 39], b[ 40], b[ 41], b[ 42], #SDCCH 6
165 b[ 43], b[ 44], b[ 45], b[ 46], #SDCCH 7
166 b[ 47], b[ 48], b[ 49], b[ 50], #SACCH 0
167 b[ 51], b[ 52], b[ 53], b[ 54], #SACCH 1
168 b[ 55], b[ 56], b[ 57], b[ 58], #SACCH 2
169 b[ 59], b[ 60], b[ 61], b[ 62], #SACCH 3 #skip 63-65
170 b[ 66], b[ 67], b[ 68], b[ 69], #SDCCH 0
171 b[ 70], b[ 71], b[ 72], b[ 73], #SDCCH 1
172 b[ 74], b[ 75], b[ 76], b[ 77], #SDCCH 2
173 b[ 78], b[ 79], b[ 80], b[ 81], #SDCCH 3
174 b[ 82], b[ 83], b[ 84], b[ 85], #SDCCH 4
175 b[ 86], b[ 87], b[ 88], b[ 89], #SDCCH 5
176 b[ 90], b[ 91], b[ 92], b[ 93], #SDCCH 6
177 b[ 94], b[ 95], b[ 96], b[ 97], #SDCCH 7
178 b[ 98], b[ 99], b[100], b[101], #SACCH 4
179 b[102], b[103], b[104], b[105], #SACCH 5
180 ], list(dst.get_burst_data()))
181
182 self.assertEqual([
183 136, 136, 136, 136,
184 136, 136, 136, 136,
185 136, 136, 136, 136,
186 8, 8, 8, 8,
187 8, 8, 8, 8,
188 8, 8, 8, 8,
189 8, 8, 8, 8,
190 8, 8, 8, 8,
191 8, 8, 8, 8,
192 8, 8, 8, 8,
193 8, 8, 8, 8,
194 136, 136, 136, 136,
195 136, 136, 136, 136,
196 136, 136, 136, 136,
197 136, 136, 136, 136,
198 8, 8, 8, 8,
199 8, 8, 8, 8,
200 8, 8, 8, 8,
201 8, 8, 8, 8,
202 8, 8, 8, 8,
203 8, 8, 8, 8,
204 8, 8, 8, 8,
205 8, 8, 8, 8,
206 136, 136, 136, 136,
207 136, 136, 136, 136,
208 ], list(dst.get_sub_types()))
209
210 self.assertEqual([
211 5, 5, 5, 5, #SACCH 5
212 6, 6, 6, 6, #SACCH 6
213 7, 7, 7, 7, #SACCH 7
214 0, 0, 0, 0,
215 1, 1, 1, 1,
216 2, 2, 2, 2,
217 3, 3, 3, 3,
218 4, 4, 4, 4,
219 5, 5, 5, 5,
220 6, 6, 6, 6,
221 7, 7, 7, 7,
222 0, 0, 0, 0, #SACCH 0
223 1, 1, 1, 1, #SACCH 1
224 2, 2, 2, 2, #SACCH 2
225 3, 3, 3, 3, #SACCH 3
226 0, 0, 0, 0,
227 1, 1, 1, 1,
228 2, 2, 2, 2,
229 3, 3, 3, 3,
230 4, 4, 4, 4,
231 5, 5, 5, 5,
232 6, 6, 6, 6,
233 7, 7, 7, 7,
234 4, 4, 4, 4, #SACCH 4
235 5, 5, 5, 5,
236 ], list(dst.get_sub_slots()))
237
238if __name__ == '__main__':
239 gr_unittest.run(qa_gsm_sdcch8_demapper, "qa_gsm_sdcch8_demapper.xml")