rborisov

rborisov pushed to main at A2G/wiki

  • 8f9e9a3fed pubobs: sync 2026-06-15T10:30:43Z by rborisoff@gmail.com

10 hours ago

rborisov pushed to main at A2G/wiki

  • f2998198db pubobs: sync 2026-06-15T10:27:59Z by rborisoff@gmail.com

11 hours ago

rborisov pushed to main at A2G/wiki

11 hours ago

rborisov created new branch main at A2G/wiki

11 hours ago

rborisov created repository A2G/wiki

11 hours ago

rborisov pushed to main at A2G/demo-a2g

  • 4b8e2df682 channel_proxy: revert to pass-through; document why raw IQ effects break rfsimulator Applying Doppler (phase rotation ~4.5 kHz at SCS 30 kHz = 15% of SCS) to raw rfsimulator samples causes immediate RLF: OFDM demodulation fails, UE sees "max RETX reached" on DRB1. The rfsimulator is a clean digital loopback with no AFC tracking — there is no PHY path for the UE to compensate a baseband frequency offset applied externally. Buffering samples for delay while keeping original timestamps also fails: samples arrive labelled with timestamp T but contain data from T-delay, which breaks channel estimation (DMRS mismatch). Correct A2G simulation requires OAI PHY patches (Week 3): - Shift samplesBlockHeader_t.timestamp in DL frames to model propagation delay (forces gNB TA command loop to see extended RTT, demonstrating Extended TA need). - Insert Doppler inside the rfsimulator channel model path where the UE AFC loop can track and the pre-compensation patch can cancel it. forward_loop() and the framing code are correct and remain in place; only apply_effects is reverted to false until the PHY patches are ready.

11 hours ago

rborisov pushed to main at A2G/demo-a2g

  • 19d3806761 docs: add OAI Gogs mirror reference; fix SETUP.md markdown linting - Document OAI source mirror (lab.rclmx.ru/gogs/A2G/openairinterface5g) in SETUP.md Week 3 section and CLAUDE.md dev environment section. - Fix all MD060 table separator rows (|---|---| → | --- | --- |). - Add blank line + language tag to wire format code block (MD031/MD040). - Replace **bold** with plain text in service map (MD049). - Remove stale sync_to_dev.sh mention from SETUP.md header.
  • 2bfcf191d5 Wire format verified; channel_proxy now frame-aware with DL effects enabled - Verified samplesBlockHeader_t (32 B: size, nbAnt, timestamp, option_value, option_flag, beam_map) against radio/COMMON/common_lib.h and radio/rfsimulator/simulator.cpp (develop branch, 2026-06-15). - iq_utils.hpp: added samplesBlockHeader_t struct + recv_exact/send_all helpers; removed stale VERIFY comment. - main.cpp: forward_loop now reads header first, then exactly size*nbAnt*4 bytes of I/Q payload — no more arbitrary recv buffer boundaries corrupting framing. Downlink (gNB→UE) effects enabled; uplink stays pass-through. - SETUP.md: replaced TODO checklist item with verified wire format reference.
  • View comparison for these 2 commits »

11 hours ago

rborisov created repository A2G/openairinterface5g

12 hours ago

rborisov pushed to main at A2G/demo-a2g

  • bd664ede43 docs: update README and SETUP.md to reflect working stack - README: remove CLAUDE.md reference (it's gitignored), update "What works" to show full stack + 43.7 Mbps iperf3 baseline, add open5gs/ to project layout, revise next-steps to only list remaining work (steps 1-3 of old list are done) - oai_setup/SETUP.md: rewrite quick-start for the actual working procedure (open5gs first, then radio stack, then iperf3 sidecar recreation); add service map, Open5GS config notes, subscriber table, and accurate verification checklist
  • 0245ffe61d open5gs: fix UPF GTP-U binding for inter-container data path Default upf.yaml binds GTP-U to 127.0.0.7 (loopback). The gNB at 192.168.70.10 cannot reach loopback, so GTP-U uplink packets were dropped and iperf3 timed out with "connection timeout". Bind GTP-U to 192.168.70.200 (container eth0) instead. SMF passes this address as the UPF F-TEID to the gNB, so GTP-U uplink flows correctly: UE oaitun_ue1 → gNB 192.168.70.10:2152 → UPF 192.168.70.200:2152 → ogstun Result: iperf3 -u -b 50M -t 20 shows 43.7 Mbps received, 0% loss.
  • f38861bafb open5gs: fix 5G registration (NRF PLMN, NSSAI, FQDN routing) Three root causes that blocked UE registration: 1. NRF serving PLMN was 999/70 (package default) instead of 001/01. When SCP queried NRF for AUSF discovery with PLMN 001/01, NRF tried to reach the home NRF via 3GPP FQDN (nrf.5gc.mnc001.mcc001.3gppnetwork.org), got a DNS timeout → 504 → SCP "No SEPP" → AMF HTTP 400 → reject [95]. Fix: custom nrf.yaml with serving plmn_id mcc:001 mnc:01. 2. AMF plmn_support lacked SD for the slice; OAI UE sends nssai_sd=0xffffff and Open5GS 2.7.6 doesn't treat 0xFFFFFF as wildcard. Fix: added sd: "0xffffff" to AMF plmn_support in amf.yaml. 3. Belt-and-suspenders: /etc/hosts entries for all 3GPP FQDNs mapped to loopback, so any remaining FQDN lookups resolve locally. Result: Registration Accept + PDU Session Established (UE IPv4 10.45.0.2).
  • View comparison for these 3 commits »

12 hours ago

rborisov pushed to main at A2G/demo-a2g

  • 75f2973382 Initial commit: A2G gNB demo stack Radio stack (OAI gNB + nrUE rfsimulator SA mode) achieves stable RRC_CONNECTED through a C++ TCP channel proxy (channel_emulator/cpp). Open5GS 5G core (AMF/SMF/UPF, all-in-one Docker image) added to enable user-plane PDU sessions and iperf3 throughput measurement. Components: - data/: synthetic 300-km ADS-B climb-out track with TA/Doppler timeline - track_replay/: Python track replay engine + WebSocket dashboard server - channel_emulator/cpp/: C++17 channel proxy applying Doppler shift and propagation delay (currently in pass-through mode pending wire-format verification against OAI rfsimulator source) - dashboard/index.html: Leaflet map + Plotly TA/Doppler/state plots - oai_setup/: gnb.conf, nr-ue.conf (band 78 / 106 PRB / 30 kHz SCS), Open5GS Dockerfile + entrypoint (Ubuntu 22.04 + Open5GS PPA 2.7.6 + MongoDB 6.0, subscriber provisioned on first boot) - docker-compose.yml: full stack with dependency ordering and iperf3 profile

13 hours ago

rborisov created new branch main at A2G/demo-a2g

13 hours ago

rborisov created repository A2G/demo-a2g

13 hours ago

rborisov pushed to main at rborisov/moodradio

  • 96af368643 Initial commit: MoodRadio iOS NAS music player. SwiftUI app for streaming and playing music from NAS via WebDAV, with library browsing, playback (FLAC/CUE/APE, transcode cache), album artwork discovery and color extraction, Now Playing UI, metadata enrichment via LibraryScanner, and unit/UI tests. Co-authored-by: Cursor <cursoragent@cursor.com>

1 week ago

rborisov created new branch main at rborisov/moodradio

1 week ago

rborisov created repository rborisov/moodradio

1 week ago

rborisov merged pull request MView/BodyCam#10

cleanup

1 week ago

rborisov closed pull request MView/BodyCam#10

cleanup

1 week ago

rborisov created pull request MView/BodyCam#10

cleanup

1 week ago

rborisov pushed to cleanup at MView/BodyCam

  • 95cf1d6a68 minor cleanup
  • 0348f8a194 Merge branch 'fix/gps-kpi-publishing' of MView/BodyCam into develop
  • ca77b781dc default server changed to vod-poc
  • dda2a6ce82 fix: suppress false ERROR log for AT+QGPS=1 and retry /dev/camera on ENOENT AT+QGPS=1 returns +CME ERROR: 504 when the GPS engine is already running (warm restart). AtCommandInterface logged this as LOG(ERROR) even though the init state machine correctly proceeds to the next state regardless. Add errorIsExpected flag to AtCommandInterfaceForModemDevs; when set, downgrade the log to WARNING so warm-restart noise is eliminated. /dev/camera (errno=2, ENOENT) on startup is a udev race: the kernel creates the V4L2 device node a few seconds after the service starts. SelectVideoDevice now retries up to 5 times at 1s intervals on ENOENT before giving up, eliminating the one-shot crash seen on May 21 13:59.
  • 57561737b6 fix(stashbox): dedup by largest size instead of newest upload time When duplicate filenames exist on the server, the previous --dups new policy selected by uploadedAt (newest). For glog files (append-only) this usually gives the most complete copy, but it's not guaranteed if a smaller file was re-uploaded after a larger one due to a race or retry. Sort by sizeInBytes first, uploadedAt as tiebreaker, so the most complete (largest) copy is always selected.

1 week ago

rborisov created new branch cleanup at MView/BodyCam

1 week ago