diff options
author | Vadim Yanitskiy <vyanitskiy@sysmocom.de> | 2022-02-03 02:17:06 +0600 |
---|---|---|
committer | Vadim Yanitskiy <vyanitskiy@sysmocom.de> | 2022-02-03 02:17:06 +0600 |
commit | 638fdc932f54ee1663d44e12c94c97b07373b2ad (patch) | |
tree | 8ba478ba63c4bfd976fe699149dab8e03fd2bce3 /src/host/osmocon/osmocon.c | |
parent | 547a39930020ac398619ddb8181f4f8961249f55 (diff) |
[HACK] Increase speed of l1ctl to 408250bps after boot
This is required to deal with the increased traffic of a passive listener
Note that it break the 'auto-restart' of osmocon when active because
the bootloader will send the prompt at 115200 baud and we won't see it ...
Change-Id: I59e1f88e057c5a4e3605c55fb14436645339447b
Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
Diffstat (limited to 'src/host/osmocon/osmocon.c')
-rw-r--r-- | src/host/osmocon/osmocon.c | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/src/host/osmocon/osmocon.c b/src/host/osmocon/osmocon.c index 547f49fe..c9dbfce1 100644 --- a/src/host/osmocon/osmocon.c +++ b/src/host/osmocon/osmocon.c @@ -232,6 +232,34 @@ static const uint8_t mtk_init_cmd[] = { 0xa0, 0x0a, 0x50, 0x05 }; static const uint8_t mtk_init_resp[] = { 0x5f, 0xf5, 0xaf, 0xfa }; static const uint8_t mtk_command[] = { 0xa1, 0xa2, 0xa4, 0xa8 }; + +int serial_up_to_eleven(void) +{ + int rv; + + /* Attempt custom baudrate */ + rv = osmo_serial_set_custom_baudrate(dnload.serial_fd.fd, 406250); + if (rv == 0) + return 0; + +#ifdef I_HAVE_A_CP210x /* and I know what I'm doing, I swear ! */ + /* Try closest standard baudrate (CP210x reprogrammed adapters) */ + rv = osmo_serial_set_baudrate(dnload.serial_fd.fd, B460800); + if (rv == 0) + return 0; +#endif + + /* Everything failed */ + fprintf(stderr, "!!!\n"); + fprintf(stderr, "!!! ERROR !!!\n"); + fprintf(stderr, "!!!\n"); + fprintf(stderr, "!!! Unable to set custom baudrate, please use appropriate cable\n"); + fprintf(stderr, "!!! ( see wiki http://bb.osmocom.org/trac/wiki/Sniffing )\n"); + fprintf(stderr, "!!!\n"); + + exit(-1); +} + static void beacon_timer_cb(void *p) { int rc; @@ -848,6 +876,7 @@ static int handle_read(void) dnload.write_ptr = dnload.data; dnload.expect_hdlc = 1; + /* check for romloader chainloading mode used as a workaround * for the magic on the C139/C140 and J100i */ if (dnload.do_chainload) { @@ -861,6 +890,8 @@ static int handle_read(void) tick_timer.data = &tick_timer; osmo_timer_schedule(&tick_timer, 0, dnload.beacon_interval); } + else + serial_up_to_eleven(); } else if (!memcmp(buffer, phone_nack, sizeof(phone_nack))) { printf("Received DOWNLOAD NACK from phone, something went" " wrong :(\n"); @@ -996,6 +1027,7 @@ static int handle_read_romload(void) if (!memcmp(buffer, romload_branch_ack, sizeof(romload_branch_ack))) { printf("Received branch ack, your code is running now!\n"); + serial_up_to_eleven(); osmo_fd_update_when(&dnload.serial_fd, 0, OSMO_FD_READ); dnload.romload_state = FINISHED; dnload.write_ptr = dnload.data; |