X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=src%2Fgsm%2Fgsm_utils.c;h=5da713c259a23974ae2d1347ffc66822797c2311;hb=2a68c7c8cd2eca65c58c0898d0e1716e9d4c3ecd;hp=54a13ad8fa0f4cfdffe1271a4722335517d8b9e7;hpb=fba495e5f6084800c076e0ecae990ed9e6483530;p=osmocom-bb.git diff --git a/src/gsm/gsm_utils.c b/src/gsm/gsm_utils.c index 54a13ad..5da713c 100644 --- a/src/gsm/gsm_utils.c +++ b/src/gsm/gsm_utils.c @@ -23,8 +23,8 @@ */ //#include -#include -#include +#include +#include #include #include @@ -33,7 +33,7 @@ #include #include -#include "../config.h" +#include "../../config.h" /* ETSI GSM 03.38 6.2.1 and 6.2.1.1 default alphabet * Greek symbols at hex positions 0x10 and 0x12-0x1a @@ -171,6 +171,47 @@ int gsm_7bit_encode(uint8_t *result, const char *data) return z; } +/* convert power class to dBm according to GSM TS 05.05 */ +unsigned int ms_class_gmsk_dbm(enum gsm_band band, int class) +{ + switch (band) { + case GSM_BAND_450: + case GSM_BAND_480: + case GSM_BAND_750: + case GSM_BAND_900: + case GSM_BAND_810: + case GSM_BAND_850: + if (class == 1) + return 43; /* 20W */ + if (class == 2) + return 39; /* 8W */ + if (class == 3) + return 37; /* 5W */ + if (class == 4) + return 33; /* 2W */ + if (class == 5) + return 29; /* 0.8W */ + break; + case GSM_BAND_1800: + if (class == 1) + return 30; /* 1W */ + if (class == 2) + return 24; /* 0.25W */ + if (class == 3) + return 36; /* 4W */ + break; + case GSM_BAND_1900: + if (class == 1) + return 30; /* 1W */ + if (class == 2) + return 24; /* 0.25W */ + if (class == 3) + return 33; /* 2W */ + break; + } + return -EINVAL; +} + /* determine power control level for given dBm value, as indicated * by the tables in chapter 4.1.1 of GSM TS 05.05 */ int ms_pwr_ctl_lvl(enum gsm_band band, unsigned int dbm)