Creality Wi-Fi bridge is just a router with powerbank. Custom camera streamer software, based on OrbbecSDK Hardware based on Mediatek mt7981 device like Cudy TR3000 (Wi-Fi 6, USB 3.0). # openwrt-root_07082025.tar.gz contains patched cameraServer app for Creality Wi-Fi bridge. # NOTE: It won't run over USB 2.0! Need USB3.0+ camera connection! # Install qemu-user-static for run this app under linux on x86_64 machine. # Unpack and user chroot.sh for chroot into this openwrt root. # Configure br-lan (vm bridge) on main system, or use 192.168.1.10 as machine ip address. # Connect camera and run /root/cameraServer/run.sh # Tested on Intel N100 notebook. Works perfect! # Seems like its can run under any device with USB3.0 port and any network (wired or wireless). # Hmm... You can use Raspberry/Orange/Banana/and-other-PI based boards with USB 3.x port! ### Tech notes ### # CR-Scan Otter, VID: 2bc5, PID: 06da # WiFi bridge GPIO: 441 - LED: Battery level #1 ??? 442 - LED: Battery level #2 ??? 443 - LED: Battery level #3 ??? 457 - ? 458 - USB port power 459 - ? 460 - Charging port (Powerbank?) # cw2017 at 0x63@i2c-0 - Can return: Voltage, Capacity, Temperature, RSOC, charger_mode # Bridge discovery protocol / cameraServer app: - App listen on ports: tcp 0 0 0.0.0.0:8556 0.0.0.0:* LISTEN 5071/cameraServer tcp 0 0 0.0.0.0:8557 0.0.0.0:* LISTEN 5071/cameraServer tcp 0 0 0.0.0.0:8888 0.0.0.0:* LISTEN 5071/cameraServer tcp 0 0 0.0.0.0:8900 0.0.0.0:* LISTEN 5071/cameraServer tcp 0 0 0.0.0.0:8090 0.0.0.0:* LISTEN 5071/cameraServer udp 0 0 0.0.0.0:3956 0.0.0.0:* 5071/cameraServer # Stream URLs (RTSP/1.0): rtsp://192.168.1.10:8888/color/1280_800_20_mjpg/track1 rtsp://192.168.1.10:8556/ir_l/1280_800_15_y8/track1 rtsp://192.168.1.10:8557/ir_r/1280_800_15_y8/track1 # Network discovery protocol (OrbBecSDK/OB_NetDiscover): - UDP Request to port `3956` (Broadcast to 255.255.255.255): 42 11 00 02 00 00 00 01 struct gvcp_cmd_header { uint8_t cMsgKeyCode; // 0x42 uint8_t cFlag; // 0x11 allow broadcast ack;ack required uint16_t wCmd; // discovery_cmd=2;FORCEIP_CMD = 4;READREG_CMD=0x80 uint16_t wLen; // payload length uint16_t wReqID; // request id = 1;READREG id=12345 }; - UDP Response (ack): 00 00 00 03 00 F8 00 01 00 01 00 02 00 00 00 01 .....o.......... # (int)DescriptionVersion, (int)DeviceMode, (byte[8])MAC_Address 00 00 00 00 00 00 00 00 80 00 00 07 00 00 00 05 ........?....... # (int)SupIP, (int)CurIP, (byte[8])CrealytyData (Battery info maybe?) 00 00 00 00 00 00 00 00 00 00 00 00 C0 A8 01 0A ............A?.. # (byte[12] + int) IP Address (192.168.1.10) 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF 00 ............yyy. # (byte[12] + int) NetMask (255.255.255.0) 00 00 00 00 00 00 00 00 00 00 00 00 C0 A8 01 FE ............A?.? # (byte[12] + int) Gateway (192.168.1.254) 4F 72 62 62 65 63 00 00 00 00 00 00 00 00 00 00 Orbbec.......... # (char[32]) Factory name 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 57 69 66 69 20 48 61 6E 64 6C 65 00 00 00 00 00 Wifi Handle..... # (char[28]) Model name 00 00 00 00 00 00 00 00 00 00 00 00 00 00 06 A1 ...............? # (int) PID (Creality otter USB ID: 2bc5:06da) 56 30 2E 30 2E 31 00 00 00 00 00 00 00 00 00 00 V0.0.1.......... # (char[32]) Device version 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 4F 72 62 62 65 63 00 00 00 00 00 00 00 00 00 00 Orbbec.......... # (char[48]) Factory info 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 31 32 33 34 35 36 37 38 39 30 41 00 00 00 00 00 1234567890A..... # (char[16]) Device serial number 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ # (char[16]) User name (auth?) struct gvcp_ack_payload { uint32_t dwSpecVer; uint32_t dwDevMode; uint8_t Mac[8]; // last 6 byte uint32_t dwSupIpSet; uint32_t dwCurIpSet; uint8 unused1[8]; // !! Creality path !! uint8_t CurIP[16]; // last 4 byte uint8_t SubMask[16]; // last 4 byte uint8_t Gateway[16]; // last 4 byte char szFacName[32]; // first char szModelName[28]; // first uint32_t dwPID; char szDevVer[32]; char szFacInfo[48]; char szSerial[16]; char szUserName[16]; };