Add function to encode classmark

The code is based on Osmocom-BB implementation.

Change-Id: I78f6968edaa3ed535673411fb2a80060a472290f
This commit is contained in:
Max 2018-02-15 15:42:32 +01:00
parent ebf149234e
commit 3c38e60cd5
3 changed files with 18 additions and 0 deletions

View File

@ -29,6 +29,7 @@ int gsm48_decode_lai(struct gsm48_loc_area_id *lai, uint16_t *mcc,
uint16_t *mnc, uint16_t *lac);
void gsm48_generate_lai(struct gsm48_loc_area_id *lai48, uint16_t mcc,
uint16_t mnc, uint16_t lac);
void gsm48_encode_classmark1(struct gsm48_classmark1 *cm, uint8_t rev_lv, bool es_ind, bool a5_1, uint8_t rf_pwr);
int gsm48_generate_mid_from_tmsi(uint8_t *buf, uint32_t tmsi);
int gsm48_generate_mid_from_imsi(uint8_t *buf, const char *imsi);
uint8_t gsm48_generate_mid(uint8_t *buf, const char *id, uint8_t mi_type);

View File

@ -508,6 +508,22 @@ void gsm48_generate_lai(struct gsm48_loc_area_id *lai48, uint16_t mcc,
lai48->lac = osmo_htons(lac);
}
/*! Encode TS 24.008 §10.5.1.5 Mobile Station Classmark 1
* \param[out] cm caller-provided memory for output
* \param[in] rev_lv Revision level
* \param[in] es_ind ES IND "Controlled Early Classmark Sending" option
* \param[in] a5_1 A5/1 algorithm supported
* \param[in] pwr_lv RF power capability
*/
void gsm48_encode_classmark1(struct gsm48_classmark1 *cm, uint8_t rev_lv, bool es_ind, bool a5_1, uint8_t rf_pwr)
{
memset(cm, 0, sizeof(*cm));
cm->rev_lev = rev_lv;
cm->es_ind = es_ind;
cm->a5_1 = !a5_1;
cm->pwr_lev = rf_pwr;
}
/*! Decode TS 04.08 Location Area Identifier
* \param[in] Location Area Identifier (encoded)
* \param[out] mcc Mobile Country Code

View File

@ -245,6 +245,7 @@ gsm48_encode_redirecting;
gsm48_encode_signal;
gsm48_encode_ssversion;
gsm48_encode_useruser;
gsm48_encode_classmark1;
gsm48_generate_lai;
gsm48_generate_mid;
gsm48_generate_mid_from_imsi;