Hi all, >> Might this imply that we're talking about the initial bearer and that >> when MM tries to connect, because it will attempt to close any existing >> connection, the modem is telling MM "no"? >> >> We already know we need to be better about auto-detecting that the >> initial bearer is active and should probably create a Bearer object to >> represent it when we can figure it out. Then perhaps a connection >> request for the same APN would just be NOP and return that already >> created bearer? (perhaps Aleksander already implemented that, I recall >> some discussion about it late last year) >> > > More or less; for MBIM devices I implemented the support to show the > initial LTE bearer information, and allow configuring it. > But I didn't do anything yet for AT-based modems.
Is there any interaction with the modem other than the AT commands that are being logged at debug level? When I rerun all commands from the debug log with virtually identical timing, I can connect while the ModemManager fails. I ensured that the modem state is identical in both cases (+PBREADY received, PDP attached as seen by the changed APN name in the PDP list). I even verified that all replies by the modem are identical (except for the replies to AT+CCLK? Which is expected). Since I run all AT commands just like the ModemManager and I succeed while MM doesn’t, I believe that there must be some other interaction. Perhaps via the CDC-ECM devices? I also made sure that ModemManager only talks to the first CDC-ACM which is identical to what I did in my script. Here’s how I extracted the AT commands from the debug log (journal): journalctl -u ModemManager -o cat | grep -E '(-->)|(<--)' I then generated a script that replicates the AT commands via the following Python script: import re func = """ function cmd { # params: cmd, expected reply, time t=$(date +%s) echo "##################################################" echo "Sending command: $1" local reply reply=$(echo "$1" | /tmp/atinout - /dev/ttyACM0 -) if [ "$(echo "$reply" | tr -d '[:space:]')" != "$(echo "$2" | tr -d '[:space:]')" ]; then echo "Unexpected reply:" echo "$reply" echo "Expected:" echo "$2" fi sleep $(awk "BEGIN{ delta = systime() - $t wait = $3 - delta print (wait > 0) ? wait : 0 }") } """ regex_cmd = r'\[([\d.]+)\] \(ttyACM0\): --> \'(AT.*)<CR>\'' regex_reply = r'\[([\d.]+)\] \(ttyACM0\): <-- \'(.+)\'' cmds = [] with open('/Users/sven/ModemManager/cinterion.raw.txt', 'r') as f: for line in f.readlines(): match = re.match(regex_cmd, line) if match: cmds.append({ "t": float(match[1]), "cmd": match[2].replace('"', '\\"'), "reply": ""}) match = re.match(regex_reply, line) if match: reply = match[2].replace('<CR>', '').replace('<LF>', '\n').strip() reply = reply.replace('"', '\\"') cmds[len(cmds)-1]["reply"] += reply print("""#!/usr/bin/env bash set -euo pipefail """, func) for i, cmd in enumerate(cmds): t = 0 if i < len(cmds)-1: t = cmds[i+1]["t"]-cmd["t"] print(f'cmd "{cmd["cmd"]}" "{cmd["reply"]}" "{t}”') Any suggestions what to test next are welcome :-) Sven _______________________________________________ ModemManager-devel mailing list ModemManager-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/modemmanager-devel