---
name: "fwcontrol"
section: "8"
platform: "freebsd"
package: "base"
version: "16.0-CURRENT-20261027-61c70dc16a79"
release: "FreeBSD 16.0-CURRENT (2026-10-27)"
platforms: ["freebsd"]
url: "https://new.carta.tech/fwcontrol"
---

# fwcontrol(8)

FireWire control utility

## NAME

**fwcontrol** – FireWire control utility

## 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*\]

## DESCRIPTION

The **fwcontrol** utility is designed to provide a way for users to access and control the FreeBSD FireWire subsystem. Without options, **fwcontrol** will output a list of devices that are/were connected to the bus.

The following options are available:

- **-u** *bus\_num*

  Specify the FireWire bus number to be operated on. The default is bus 0.

- **-r**

  Initiate bus reset.

- **-t**

  Show the topology map.

- **-p**

  Dump PHY registers.

- **-c** *node*

  Show the configuration ROM on the node.

- **-d** *node*

  Hex dump of the configuration ROM.

- **-o** *node*

  Send a link-on PHY packet to the node.

- **-s** *node*

  Write to the RESET\_START register on the node.

- **-l** *file*

  Load hex dump file of the configuration ROM and parse it.

- **-f** *node*

  Force specified *node* to be the root node on the next bus reset by sending a PHY config packet. Valid values are 0 - 63.

- **-g** *gap\_count*

  Broadcast new *gap\_count* by sending a PHY\_config packet. By default this value is 63 on all nodes. Valid values are 0 - 63.

- **-i** *pri\_req*

  Set the PRIORITY\_BUDGET register on all supported nodes.

- **-M** *mode*

  Explicitly specify either *dv* or *mpeg* mode for the incoming stream. Only meaningful in case of and must precede the **-R** option. If not specified, the program will try to guess. In case of “format 0x20” error, try to force the “mpeg” mode.

- **-R** *filename*

  Receive DV or MPEG TS stream and dump it to a file. Use ^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. 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.

- **-m** *EUI64* \| *hostname*

  Set default fwmem target. Hostname will be converted to EUI64 using [eui64(5)](/eui64/5.md).

## FILES

- */dev/fw0.0*

  ## EXAMPLES

Each DV frame has a fixed size and it is easy to edit the frame order.

```
fwcontrol -R original.dv
```

Receive a DV stream with 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 DV recorder.

For PAL, replace “bs=120000” with “bs=144000”.

```
fwcontrol -R file.m2t
```

Receive an MPEG TS stream from a camera producing MPEG transport stream. This has been tested with SONY HDR-FX1E camera that produces HD MPEG-2 stream at 25 Mbps bandwidth.

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)](/mplayer/1.md), [vlc(1)](/vlc/1.md), [firewire(4)](/firewire/4.md), [fwe(4)](/fwe/4.md), [fwip(4)](/fwip/4.md), [fwohci(4)](/fwohci/4.md), [sbp(4)](/sbp/4.md)

## HISTORY

The **fwcontrol** utility first appeared in FreeBSD 5.0.

## AUTHORS

Hidetoshi Shimokawa ⟨*simokawa@FreeBSD.org*⟩ Petr Holub ⟨*hopet@ics.muni.cz*⟩ (MPEG TS mode)

## 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 (fn field in CIP header equals 3).
