FWCONTROL(8)
π fwcontrol(8) β the FireWire control utility, bestie edition π
okay so real talk, this is fwcontrol from section 8 of the manual (System Manager's Manual), and it's literally your all-access pass to the FreeBSD FireWire subsystem. β¨
πΈ NAME πΈ
fwcontrol β FireWire control utility. that's it, that's the vibe. π¦
β¨ SYNOPSIS β¨
fwcontrol [-u bus_num] [-prt] [-c node] [-d node] [-o node] [-s node]
[-l file] [-f node] [-g gap_count] [-b pri_req] [-M mode]
[-R filename] [-S filename] [-m EUI64 | hostname]
π«Ά quick heads-up bestie: the synopsis up there says-b pri_reqand the description down below says-i pri_req. I am NOT picking sides, I'm just transcribing exactly what the page says. iykyk. π
π DESCRIPTION π
so fwcontrol exists to give you, a normal human user, a way to actually access and control the FreeBSD FireWire subsystem. iconic behavior honestly.
run it with no options at all and it will output a list of devices that are/were connected to the bus. like a little guest list for your FireWire party. π
The following options are available:
-u bus_numβ pick which FireWire bus you wanna operate on. the default is bus0. choose your fighter. π-rβ initiate bus reset. just. reset the whole bus. go off. π₯-tβ show the topology map. see how everybody's wired up. π-pβ dump PHY registers. raw register soup, mmm. π-c nodeβ show the configuration ROM on the node. β¨-d nodeβ hex dump of the configuration ROM. same ROM, but spicy hexadecimal edition. π-o nodeβ send a link-on PHY packet to the node. poke it awake. π«Ά-s nodeβ write to theRESET_STARTregister on the node. π-l fileβ load a hex dump file of the configuration ROM and parse it. very demure, very parse-y. π-f nodeβ force the specified node to be the root node on the next bus reset by sending a PHY config packet. valid values are0-63. main character energy, assigned by force. π-g gap_countβ broadcast a newgap_countby sending aPHY_configpacket. by default this value is63on all nodes. valid values are0-63. π¦-i pri_reqβ set thePRIORITY_BUDGETregister on all supported nodes. π-M modeβ explicitly specify eitherdvormpegmode for the incoming stream. only meaningful in case of and must precede the-Roption (yes, order matters, don't do it in the wrong order π). if not specified, the program will try to guess. in case ofβformat 0x20βerror, try to force theβmpegβmode. β-R filenameβ receive a DV or MPEG TS stream and dump it to a file. use Ctrl+C to stop the receiving. some DV cameras seem not to send the stream if a bus manager exists. if it is impossible to get the stream, try the following commands:
sysctl hw.firewire.try_bmr=0
fwcontrol -r
the resulting file contains raw DV data excluding isochronous header and CIP header. it can be handled by libdv in the FreeBSD Ports Collection. the resulting MPEG TS stream can be played and sent over a network using the VideoLAN vlc tool in the FreeBSD Ports Collection. the stream can be piped directly to vlc, see βEXAMPLESβ. π₯
-S filenameβ send a DV file as isochronous stream. yeet. π-m EUI64 | hostnameβ set the defaultfwmemtarget. hostname will be converted to EUI64 usingeui64(5). π§
π FILES π
/dev/fw0.0
that's the one file. she's alone and she's thriving. π
π EXAMPLES π
each DV frame has a fixed size and it is easy to edit the frame order. slay, determinism. β¨
fwcontrol -R original.dv
receive a DV stream with a DV camera attached. πΉ
dd if=original.dv of=first.dv bs=120000 count=30
get first 30 frames (NTSC). π
dd if=original.dv of=second.dv bs=120000 skip=30 count=30
get second 30 frames (NTSC). ππ
cat second.dv first.dv | fwcontrol -S /dev/stdin
swap first and second 30 frames and send them to a DV recorder. the way that pipe just WORKS. π
for PAL, replace βbs=120000β with βbs=144000β. noted, bestie. π
fwcontrol -R file.m2t
receive an MPEG TS stream from a camera producing MPEG transport stream. this has been tested with the SONY HDR-FX1E camera that produces HD MPEG-2 stream at 25 Mbps bandwidth. ngl that's kind of iconic. π₯
to send the stream from the camera over the network using TCP (which surprisingly works better with vlc), you can use
fwcontrol -R - | nc 192.168.10.11 9000
with netcat from ports, and to receive the stream, use
nc -l -p 9000 | vlc -
to netcast via UDP, you need to use buffer program from ports, since vlc is not fast enough to read UDP packets from buffers and thus it experiences dropouts when run directly. π the sending side can use
fwcontrol -R - | nc 192.168.10.11 9000
and to receive the stream, use
nc -l -u -p 9000 | buffer -s 10k -b 1000 -m 20m -p 5 | vlc -
for more information on how to work with vlc see its docs. π«Ά
π¦ SEE ALSO π¦
mplayer(1), vlc(1), firewire(4), fwe(4), fwip(4), fwohci(4), sbp(4)
go read those too, they're in their flop era of being unread, give them a moment. π
β HISTORY β
the fwcontrol utility first appeared in FreeBSD 5.0. a true OG. π
π AUTHORS π
- Hidetoshi Shimokawa
<simokawa@FreeBSD.org> - Petr Holub
<hopet@ics.muni.cz>(MPEG TS mode)
thank you for your service, legends. π«‘
π BUGS π
this utility is still under development and provided for debugging purposes. π¨ especially MPEG TS reception support is very rudimental and supports only high-bandwidth MPEG-2 streams (the fn field in the CIP header equals 3). so like... don't build your whole production pipeline on it, bestie. π
lowkey the funniest thing about this page is that the synopsis and the description disagree on one letter. not me noticing. not me saying anything. okay I said something. π
and that's the whole page!! π this beauty came to you from Debian, dated September 12, 2008, and it's filed under FWCONTROL(8) β mwah, love that for us. πβ¨π
π¦ where this page comes from
- freebsd 14.5: base 14.5
- freebsd 15.1: base 15.1
- Copyright (c) 2002 Hidetoshi Shimokawa
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms