- add '-f' option to force root node.

- fix byte order in read_write_quad()
- show hostnames in the list
- fix typo in manpage

MFC after: 1 week
This commit is contained in:
Hidetoshi Shimokawa 2008-03-05 01:30:48 +00:00
parent b455d946f5
commit 302176c71f
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=176810
2 changed files with 23 additions and 8 deletions

View file

@ -39,6 +39,7 @@
.Op Fl o Ar node
.Op Fl s Ar node
.Op Fl l Ar file
.Op Fl f Ar node
.Op Fl g Ar gap_count
.Op Fl b Ar pri_req
.Op Fl M Ar mode
@ -77,6 +78,10 @@ Write to the
register on the node.
.It Fl l Ar file
Load hex dump file of the configuration ROM and parse it.
.It Fl f Ar node
Force specified
.Ar node
to be the root node on the next bus reset.
.It Fl g Ar gap_count
Broadcast
.Ar gap_count
@ -98,7 +103,7 @@ an error complaining about "format 0x20", try to force the "mpeg" mode.
.It Fl R Ar filename
Receive 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 exits.
Some DV cameras seem not to send the stream if a bus manager exists.
If you cannot get the stream, try the following commands:
.Bd -literal -offset indent
sysctl hw.firewire.try_bmr=0

View file

@ -64,10 +64,12 @@ static void
usage(void)
{
fprintf(stderr,
"fwcontrol [-u bus_num] [-rt] [-g gap_count] [-o node] "
"fwcontrol [-u bus_num] [-rt] [-f node] [-g gap_count] "
"[-o node] "
"[-b pri_req] [-c node] [-d node] [-l file] "
"[-R file] [-S file] [-m target]\n"
"\t-u: specify bus number\n"
"\t-f: broadcast force_root by phy_config packet\n"
"\t-g: broadcast gap_count by phy_config packet\n"
"\t-o: send link-on packet to the node\n"
"\t-s: write RESET_START register on the node\n"
@ -153,20 +155,23 @@ list_dev(int fd)
struct fw_devlstreq *data;
struct fw_devinfo *devinfo;
struct eui64 eui;
char addr[EUI64_SIZ];
char addr[EUI64_SIZ], hostname[40];
int i;
data = get_dev(fd);
printf("%d devices (info_len=%d)\n", data->n, data->info_len);
printf("node EUI64 status\n");
printf("node EUI64 status hostname\n");
for (i = 0; i < data->info_len; i++) {
devinfo = &data->dev[i];
fweui2eui64(&devinfo->eui, &eui);
eui64_ntoa(&eui, addr, sizeof(addr));
printf("%4d %s %6d\n",
if (eui64_ntohost(hostname, sizeof(hostname), &eui))
hostname[0] = 0;
printf("%4d %s %6d %s\n",
(devinfo->status || i == 0) ? devinfo->dst : -1,
addr,
devinfo->status
devinfo->status,
hostname
);
}
free((void *)data);
@ -198,7 +203,7 @@ read_write_quad(int fd, struct fw_eui64 eui, u_int32_t addr_lo, int readmode, u_
qld = (u_int32_t *)&asyreq->pkt;
if (!readmode)
asyreq->pkt.mode.wreqq.data = data;
asyreq->pkt.mode.wreqq.data = htonl(data);
if (ioctl(fd, FW_ASYREQ, asyreq) < 0) {
err(1, "ioctl");
@ -676,7 +681,7 @@ main(int argc, char **argv)
list_dev(fd);
}
while ((ch = getopt(argc, argv, "M:g:m:o:s:b:prtc:d:l:u:R:S:")) != -1)
while ((ch = getopt(argc, argv, "M:f:g:m:o:s:b:prtc:d:l:u:R:S:")) != -1)
switch(ch) {
case 'b':
tmp = strtol(optarg, NULL, 0);
@ -697,6 +702,11 @@ main(int argc, char **argv)
get_crom(fd, tmp, crom_buf, len);
dump_crom(crom_buf);
break;
case 'f':
tmp = strtol(optarg, NULL, 0);
open_dev(&fd, devbase);
send_phy_config(fd, tmp, -1);
break;
case 'g':
tmp = strtol(optarg, NULL, 0);
open_dev(&fd, devbase);