edge: Add header type property to GprsCodingScheme

The header type depends on the coding scheme, for GPRS there is a
single data header type per direction, for EGPRS there are 3 per
direction. In addition, control block header types are used with CS-1
only, so there is one of the per direction altogether for GRPS and
EGPRS.

This commit adds the header type enum and two methods headerTypeData
and headerTypeControl.

Sponsored-by: On-Waves ehf
This commit is contained in:
Jacob Erlbeck 2015-12-14 10:21:26 +01:00
parent 3b802e3c4a
commit 6c3dc61db5
3 changed files with 42 additions and 14 deletions

View File

@ -27,23 +27,24 @@ static struct {
unsigned ext_bits;
} uplink, downlink;
const char *name;
GprsCodingScheme::HeaderType data_hdr;
} mcs_info[GprsCodingScheme::NUM_SCHEMES] = {
{{0, 0}, {0, 0}, "UNKNOWN"},
{{23, 0}, {23, 0}, "CS-1"},
{{33, 7}, {33, 7}, "CS-2"},
{{39, 3}, {39, 3}, "CS-3"},
{{53, 7}, {53, 7}, "CS-4"},
{{0, 0}, {0, 0}, "UNKNOWN", GprsCodingScheme::HEADER_INVALID},
{{23, 0}, {23, 0}, "CS-1", GprsCodingScheme::HEADER_GPRS_DATA},
{{33, 7}, {33, 7}, "CS-2", GprsCodingScheme::HEADER_GPRS_DATA},
{{39, 3}, {39, 3}, "CS-3", GprsCodingScheme::HEADER_GPRS_DATA},
{{53, 7}, {53, 7}, "CS-4", GprsCodingScheme::HEADER_GPRS_DATA},
{{26, 1}, {26, 1}, "MCS-1"},
{{32, 1}, {32, 1}, "MCS-2"},
{{41, 1}, {41, 1}, "MCS-3"},
{{48, 1}, {48, 1}, "MCS-4"},
{{26, 1}, {26, 1}, "MCS-1", GprsCodingScheme::HEADER_EGPRS_DATA_TYPE_3},
{{32, 1}, {32, 1}, "MCS-2", GprsCodingScheme::HEADER_EGPRS_DATA_TYPE_3},
{{41, 1}, {41, 1}, "MCS-3", GprsCodingScheme::HEADER_EGPRS_DATA_TYPE_3},
{{48, 1}, {48, 1}, "MCS-4", GprsCodingScheme::HEADER_EGPRS_DATA_TYPE_3},
{{60, 7}, {59, 6}, "MCS-5"},
{{78, 7}, {77, 6}, "MCS-6"},
{{118, 2}, {117, 4}, "MCS-7"},
{{142, 2}, {141, 4}, "MCS-8"},
{{154, 2}, {153, 4}, "MCS-9"},
{{60, 7}, {59, 6}, "MCS-5", GprsCodingScheme::HEADER_EGPRS_DATA_TYPE_2},
{{78, 7}, {77, 6}, "MCS-6", GprsCodingScheme::HEADER_EGPRS_DATA_TYPE_2},
{{118, 2}, {117, 4}, "MCS-7", GprsCodingScheme::HEADER_EGPRS_DATA_TYPE_1},
{{142, 2}, {141, 4}, "MCS-8", GprsCodingScheme::HEADER_EGPRS_DATA_TYPE_1},
{{154, 2}, {153, 4}, "MCS-9", GprsCodingScheme::HEADER_EGPRS_DATA_TYPE_1},
};
@ -102,3 +103,8 @@ const char *GprsCodingScheme::name() const
{
return mcs_info[m_scheme].name;
}
GprsCodingScheme::HeaderType GprsCodingScheme::headerTypeData() const
{
return mcs_info[m_scheme].data_hdr;
}

View File

@ -40,6 +40,15 @@ public:
EGPRS,
};
enum HeaderType {
HEADER_INVALID,
HEADER_GPRS_CONTROL,
HEADER_GPRS_DATA,
HEADER_EGPRS_DATA_TYPE_1,
HEADER_EGPRS_DATA_TYPE_2,
HEADER_EGPRS_DATA_TYPE_3,
};
GprsCodingScheme(Scheme s = UNKNOWN);
operator bool() const {return m_scheme != UNKNOWN;}
@ -62,6 +71,8 @@ public:
unsigned int spareBitsUL() const;
unsigned int spareBitsDL() const;
const char *name() const;
HeaderType headerTypeData() const;
HeaderType headerTypeControl() const;
static GprsCodingScheme getBySizeUL(unsigned size);
@ -108,6 +119,11 @@ inline void GprsCodingScheme::dec(Mode mode)
m_scheme = new_cs;
}
inline GprsCodingScheme::HeaderType GprsCodingScheme::headerTypeControl() const
{
return HEADER_GPRS_CONTROL;
}
inline GprsCodingScheme::GprsCodingScheme(Scheme s)
: m_scheme(s)
{

View File

@ -129,6 +129,12 @@ static void test_coding_scheme()
last_size_UL = current_cs.maxBytesUL();
last_size_DL = current_cs.maxBytesDL();
/* Check header types */
OSMO_ASSERT(current_cs.headerTypeData() ==
GprsCodingScheme::HEADER_GPRS_DATA);
OSMO_ASSERT(current_cs.headerTypeControl() ==
GprsCodingScheme::HEADER_GPRS_CONTROL);
check_coding_scheme(current_cs, GprsCodingScheme::GPRS);
}
OSMO_ASSERT(i == 4);