int i;
memset(sup, 0, sizeof(*sup));
+ sup->ms = ms;
/* rf power capability */
sup->pwr_lev_900 = 3; /* CLASS 4: Handheld 2W */
sup->a5_6 = 0;
sup->a5_7 = 0;
/* radio support */
- sup->p_gsm = 1; /* P-GSM only */
- sup->e_gsm = 0; /* E-GSM */
- sup->r_gsm = 0; /* R-GSM */
+ sup->p_gsm = 1; /* P-GSM */
+ sup->e_gsm = 1; /* E-GSM */
+ sup->r_gsm = 1; /* R-GSM */
sup->r_capa = 0;
sup->low_capa = 4; /* p,e,r power class */
- sup->dcs_1800 = 0;
+ sup->dcs_1800 = 1;
/* set supported frequencies */
- if (sup->e_gsm || sup->r_gsm)
- sup->freq_map[0] |= 1;
- if (sup->p_gsm || sup->e_gsm || sup->r_gsm)
+ if (sup->p_gsm)
for(i = 1; i <= 124; i++)
sup->freq_map[i >> 3] |= (1 << (i & 7));
if (sup->dcs_1800)
for(i = 512; i <= 885; i++)
sup->freq_map[i >> 3] |= (1 << (i & 7));
- if (sup->e_gsm)
+ if (sup->e_gsm) {
for(i = 975; i <= 1023; i++)
sup->freq_map[i >> 3] |= (1 << (i & 7));
-// for(i = 978; i <= 978; i++)
-// sup->freq_map[i >> 3] |= (1 << (i & 7));
+ sup->freq_map[0] |= 1;
+ }
if (sup->r_gsm)
- for(i = 955; i <= 1023; i++)
+ for(i = 955; i <= 974; i++)
sup->freq_map[i >> 3] |= (1 << (i & 7));
sup->dcs_capa = 1; /* dcs power class */
/* multi slot support */
//sup->sms_val = ;
//sup->sm_val = ;
- /* IMEI */
- sprintf(sup->imei, "000000000000000");
- sprintf(sup->imeisv, "0000000000000000");
-
/* radio */
- sup->min_rxlev_db = -60; // TODO
+ sup->min_rxlev_db = -100; // TODO
sup->sync_to = 6; /* how long to wait sync (0.9 s) */
sup->scan_to = 4; /* how long to wait for all sysinfos (>=4 s) */
}
/* (3.2.1) maximum channels to scan within each band */
struct gsm_support_scan_max gsm_sup_smax[] = {
-#if 0
- { 259, 293, 15, 0 },
- { 360, 340, 15, 0 },
+ { 259, 293, 15, 0 }, /* GSM 450 */
+ { 306, 340, 15, 0 }, /* GSM 480 */
{ 438, 511, 25, 0 },
- { 128, 251, 30, 0 },
- { 955, 124, 30, 0 },
- { 512, 885, 40, 0 },
-#else
-// { 955, 125, 1, 0 }, /* we support only one ARFCN */
-#endif
+ { 128, 251, 30, 0 },
+ { 955, 124, 30, 0 }, /* P,E,R GSM */
+ { 512, 885, 40, 0 }, /* DCS 1800 */
{ 0, 0, 0, 0 }
};
+/* dump support */
+void gsm_support_dump(struct gsm_support *sup,
+ void (*print)(void *, const char *, ...), void *priv)
+{
+ print(priv, "Supported features of MS '%s':\n", sup->ms->name);
+ if (sup->r_gsm)
+ print(priv, " R-GSM (Channels 955-974)\n");
+ if (sup->e_gsm)
+ print(priv, " E-GSM (Channels 975-1023,0)\n");
+ if (sup->p_gsm)
+ print(priv, " P-GSM (Channels 1-124)\n");
+ if (sup->dcs_1800)
+ print(priv, " DCS1800 (Channels 512-885)\n");
+ print(priv, " Phase %d mobile station\n", sup->rev_lev + 1);
+ print(priv, " CECS : %s\n", (sup->es_ind) ? "yes" : "no");
+ print(priv, " VGCS : %s\n", (sup->vgcs) ? "yes" : "no");
+ print(priv, " VBS : %s\n", (sup->vbs) ? "yes" : "no");
+ print(priv, " SMS : %s\n", (sup->sms_ptp) ? "yes" : "no");
+ print(priv, " SS_IND : %s\n", (sup->ss_ind) ? "yes" : "no");
+ print(priv, " PS_CAP : %s\n", (sup->ps_cap) ? "yes" : "no");
+ print(priv, " CMSP : %s\n", (sup->cmsp) ? "yes" : "no");
+ print(priv, " SoLSA : %s\n", (sup->solsa) ? "yes" : "no");
+ print(priv, " LCSVA : %s\n", (sup->lcsva) ? "yes" : "no");
+ print(priv, " LOC_SERV : %s\n", (sup->loc_serv) ? "yes" : "no");
+ print(priv, " A5/1 : %s\n", (sup->a5_1) ? "yes" : "no");
+ print(priv, " A5/2 : %s\n", (sup->a5_2) ? "yes" : "no");
+ print(priv, " A5/3 : %s\n", (sup->a5_3) ? "yes" : "no");
+ print(priv, " A5/4 : %s\n", (sup->a5_4) ? "yes" : "no");
+ print(priv, " A5/5 : %s\n", (sup->a5_5) ? "yes" : "no");
+ print(priv, " A5/6 : %s\n", (sup->a5_6) ? "yes" : "no");
+ print(priv, " A5/7 : %s\n", (sup->a5_7) ? "yes" : "no");
+ print(priv, " A5/1 : %s\n", (sup->a5_1) ? "yes" : "no");
+ print(priv, " Min RXLEV: %d\n", sup->min_rxlev_db);
+}