summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDario Lombardo <lomato@libero.it>2013-01-02 14:11:32 +0100
committerSylvain Munaut <tnt@246tNt.com>2013-01-02 20:27:47 +0100
commit1776eaabe93bc220fab016b5082348587499b846 (patch)
treec3c55135d3f220041d524ac69472a326a53778b8
parentdccf41703a487789355b1d4e229543d5bd6c6d77 (diff)
host/l23: Added custom frequecy range to cell_log.
Written-by: Dario Lombardo <lomato@libero.it> Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
-rw-r--r--src/host/layer23/src/misc/app_cell_log.c57
-rw-r--r--src/host/layer23/src/misc/cell_log.c7
2 files changed, 59 insertions, 5 deletions
diff --git a/src/host/layer23/src/misc/app_cell_log.c b/src/host/layer23/src/misc/app_cell_log.c
index 27290be7..6669a955 100644
--- a/src/host/layer23/src/misc/app_cell_log.c
+++ b/src/host/layer23/src/misc/app_cell_log.c
@@ -40,6 +40,9 @@
extern struct log_target *stderr_target;
extern void *l23_ctx;
+extern uint16_t basic_band_range[][2];
+extern uint16_t (*band_range)[][2];
+
char *logname = "/var/log/osmocom.log";
int RACH_MAX = 2;
@@ -99,13 +102,56 @@ static int l23_getopt_options(struct option **options)
{"gpsd-port", 1, 0, 'p'},
#endif
{"gps", 1, 0, 'g'},
- {"baud", 1, 0, 'b'}
+ {"baud", 1, 0, 'b'},
+ {"arfcns", 1, 0, 'A'}
};
*options = opts;
return ARRAY_SIZE(opts);
}
+static char* print_band_range(uint16_t range[][2], char* buf)
+{
+ int i = 0;
+ int idx = 0;
+ while(range[i][0] != 0 || range[i][1] != 0) {
+ sprintf(buf + idx, "%u-%u,", range[i][0], range[i][1]);
+ i++;
+ idx = strlen(buf);
+ }
+ buf[idx-1] = '\0';
+ return buf;
+}
+
+static void parse_band_range(char* s)
+{
+ unsigned i = 0;
+ char* idx = strtok(s, ",");
+ unsigned single_range_size = sizeof(uint16_t) * 2;
+ unsigned start;
+ unsigned end;
+
+ band_range = (uint16_t(*)[][2])calloc(single_range_size, i + 1);
+ while (idx != NULL) {
+ start = 0;
+ end = 0;
+ sscanf(idx, "%u-%u", &start, &end);
+ if (end == 0)
+ end = start;
+ if (end < start) {
+ fprintf(stderr, "Starting frequency must me lower than ending.\n\n");
+ exit(1);
+ }
+ (*band_range)[i][0] = start;
+ (*band_range)[i][1] = end;
+ idx = strtok(NULL, ",");
+ i++;
+ band_range = realloc(band_range, (i+1) * single_range_size);
+ }
+ (*band_range)[i][0] = 0;
+ (*band_range)[i][1] = 0;
+}
+
static int l23_cfg_print_help()
{
printf("\nApplication specific\n");
@@ -116,12 +162,15 @@ static int l23_cfg_print_help()
printf(" -p --port PORT 2947. gpsd port\n");
printf(" -f --gps DEVICE /dev/ttyACM0. GPS serial device.\n");
printf(" -b --baud BAUDRAT The baud rate of the GPS device\n");
+ printf(" -A --arfcns ARFCNS The list of arfcns to be monitored\n");
return 0;
}
static int l23_cfg_handle(int c, const char *optarg)
{
+ char buf[1000];
+
switch (c) {
case 'l':
logname = talloc_strdup(l23_ctx, optarg);
@@ -172,6 +221,10 @@ static int l23_cfg_handle(int c, const char *optarg)
g.gps_type = GPS_TYPE_SERIAL;
LOGP(DGPS, LOGL_INFO, "Setting GPS baudrate to %u\n", g.baud);
break;
+ case 'A':
+ parse_band_range((char*)optarg);
+ printf("New frequencies range: %s\n", print_band_range(*band_range, buf));
+ break;
}
return 0;
@@ -182,7 +235,7 @@ cmd_line_error:
static struct l23_app_info info = {
.copyright = "Copyright (C) 2010 Andreas Eversberg\n",
- .getopt_string = "g:p:l:r:nf:b:",
+ .getopt_string = "g:p:l:r:nf:b:A:",
.cfg_supported = l23_cfg_supported,
.cfg_getopt_opt = l23_getopt_options,
.cfg_handle_opt = l23_cfg_handle,
diff --git a/src/host/layer23/src/misc/cell_log.c b/src/host/layer23/src/misc/cell_log.c
index a6059b40..7340dcb9 100644
--- a/src/host/layer23/src/misc/cell_log.c
+++ b/src/host/layer23/src/misc/cell_log.c
@@ -58,7 +58,8 @@ enum {
};
/* ranges of bands */
-static uint16_t band_range[][2] = {{0, 124}, {512, 885}, {955, 1023}, {0, 0}};
+static uint16_t basic_band_range[][2] = {{0, 124}, {512, 885}, {955, 1023}, {0, 0}};
+uint16_t (*band_range)[][2] = &basic_band_range;
#define INFO_FLG_PM 1
#define INFO_FLG_SYNC 2
@@ -351,8 +352,8 @@ static void start_pm(void)
uint16_t from, to;
state = SCAN_STATE_PM;
- from = band_range[pm_index][0];
- to = band_range[pm_index][1];
+ from = (*band_range)[pm_index][0];
+ to = (*band_range)[pm_index][1];
if (from == 0 && to == 0) {
LOGP(DSUM, LOGL_INFO, "Measurement done\n");