hrev44578 adds 1 changeset to branch 'master' old head: c95f35ce9de5f9e8ed86142b19beca3ce6cc3eea new head: 0d7b06c3183d22f50e370e2165f7e337a20e5c59 ---------------------------------------------------------------------------- 0d7b06c: Updating Firewire. * Some update from FreeBSD. [ Fredrik Modéen <fredrik@xxxxxxxxx> ] ---------------------------------------------------------------------------- Revision: hrev44578 Commit: 0d7b06c3183d22f50e370e2165f7e337a20e5c59 URL: http://cgit.haiku-os.org/haiku/commit/?id=0d7b06c Author: Fredrik Modéen <fredrik@xxxxxxxxx> Date: Tue Aug 14 23:11:46 2012 UTC ---------------------------------------------------------------------------- 4 files changed, 136 insertions(+), 88 deletions(-) src/bin/fwcontrol/fwcontrol.8 | 76 ++++++++++++++--------- src/bin/fwcontrol/fwcontrol.c | 124 ++++++++++++++++++++++--------------- src/bin/fwcontrol/fwdv.c | 10 +-- src/bin/fwcontrol/fwmpegts.c | 14 ++++- ---------------------------------------------------------------------------- diff --git a/src/bin/fwcontrol/fwcontrol.8 b/src/bin/fwcontrol/fwcontrol.8 index 6c40f05..a2767eb 100644 --- a/src/bin/fwcontrol/fwcontrol.8 +++ b/src/bin/fwcontrol/fwcontrol.8 @@ -22,9 +22,9 @@ .\" ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE .\" POSSIBILITY OF SUCH DAMAGE. .\" -.\" $FreeBSD: src/usr.sbin/fwcontrol/fwcontrol.8,v 1.18 2006/12/29 13:08:46 yar Exp $ +.\" $FreeBSD$ .\" -.Dd October 24, 2006 +.Dd September 12, 2008 .Dt FWCONTROL 8 .Os .Sh NAME @@ -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 @@ -59,6 +60,7 @@ The following options are available: .Bl -tag -width indent .It Fl u Ar bus_num Specify the FireWire bus number to be operated on. +The default is bus 0. .It Fl r Initiate bus reset. .It Fl t @@ -77,10 +79,17 @@ 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 by sending a PHY config packet. +Valid values are 0 - 63. .It Fl g Ar gap_count -Broadcast +Broadcast new .Ar gap_count -by phy_config packet. +by sending a PHY_config packet. +By default this value is 63 on all nodes. +Valid values are 0 - 63. .It Fl i Ar pri_req Set the .Dv PRIORITY_BUDGET @@ -93,13 +102,18 @@ or mode for the incoming stream. Only meaningful in case of and must precede the .Fl R -option. If not specified, the program will try to guess. If you get -an error complaining about "format 0x20", try to force the "mpeg" mode. +option. +If not specified, the program will try to guess. +In case of +.Dq format 0x20 +error, try to force the +.Dq 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. -If you cannot get the stream, try the following commands: +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: .Bd -literal -offset indent sysctl hw.firewire.try_bmr=0 fwcontrol -r @@ -111,14 +125,17 @@ It can be handled by .Nm libdv in the .Fx -Ports Collection. Resulting MPEG TS stream can be played and sent over a +Ports Collection. +Resulting MPEG TS stream can be played and sent over a network using the VideoLAN .Nm vlc -tool in the +tool in the .Fx -Ports Collection. The stream can be piped directly to +Ports Collection. +The stream can be piped directly to .Nm vlc, -see EXAMPLES. +see +.Sx EXAMPLES . .It Fl S Ar filename Send a DV file as isochronous stream. .It Fl m Ar EUI64 | hostname @@ -127,7 +144,7 @@ Hostname will be converted to EUI64 using .Xr eui64 5 . .El .Sh FILES -.Bl -tag +.Bl -tag -width "Pa /dev/fw0.0" .It Pa /dev/fw0.0 .El .Sh EXAMPLES @@ -154,41 +171,40 @@ For PAL, replace with .Dq Li bs=144000 . .Pp -.Dl "fwcontrol -R file.m2t +.Dl "fwcontrol -R file.m2t" .Pp -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. +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. .Pp -To send the stream from the camera over the network using TCP (which supprisingly works better with vlc), you can use -.Dl "fwcontrol -R - | nc 192.168.10.11 9000 +To send the stream from the camera over the network using TCP (which +surprisingly works better with vlc), you can use +.Dl "fwcontrol -R - | nc 192.168.10.11 9000" with .Nm netcat from ports and to receive the stream, use .Dl nc -l -p 9000 | vlc - .Pp -To netcast via UDP, you need to use -.Nm buffer +To netcast via UDP, you need to use +.Nm 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 -.Dl "fwcontrol -R - | nc 192.168.10.11 9000 +buffers and thus it experiences dropouts when run directly. +The sending side can use +.Dl "fwcontrol -R - | nc 192.168.10.11 9000" and to receive the stream, use .Dl nc -l -u -p 9000 | buffer -s 10k -b 1000 -m 20m -p 5 | vlc - .Pp - -.Pp For more information on how to work with .Nm vlc see its docs. .Sh SEE ALSO +.Xr mplayer 1 , +.Xr vlc 1 , .Xr firewire 4 , .Xr fwe 4 , .Xr fwip 4 , .Xr fwohci 4 , -.Xr sbp 4 , -.Xr mplayer 1 , -.Xr vlc 1 +.Xr sbp 4 .Sh HISTORY The .Nm diff --git a/src/bin/fwcontrol/fwcontrol.c b/src/bin/fwcontrol/fwcontrol.c index 6ab10bf..dda7bf6 100644 --- a/src/bin/fwcontrol/fwcontrol.c +++ b/src/bin/fwcontrol/fwcontrol.c @@ -34,7 +34,7 @@ #ifndef __HAIKU__ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/usr.sbin/fwcontrol/fwcontrol.c,v 1.23 2006/10/26 22:33:38 imp Exp $"); +__FBSDID("$FreeBSD: src/usr.sbin/fwcontrol/fwcontrol.c$"); #endif #ifdef __HAIKU__ @@ -83,7 +83,7 @@ static void usage(void) { fprintf(stderr, - "fwcontrol [-u bus_num] [-prt] [-c node] [-d node] [-o node] [-s node]\n" + "%s [-u bus_num] [-prt] [-c node] [-d node] [-o node] [-s node]\n" "\t [-l file] [-g gap_count] [-f force_root ] [-b pri_req]\n" "\t [-M mode] [-R filename] [-S filename] " #ifndef __HAIKU__ @@ -100,18 +100,17 @@ usage(void) "\t-o: send link-on packet to the node\n" "\t-s: write RESET_START register on the node\n" "\t-l: load and parse hex dump file of configuration ROM\n" - "\t-g: broadcast gap_count by phy_config packet\n" - "\t-f: broadcast force_root by phy_config packet\n" + "\t-g: set gap count\n" + "\t-f: force root node\n" "\t-b: set PRIORITY_BUDGET register on all supported nodes\n" - "\t-M: Specify either d for dv mode or m for mpeg mode\n" + "\t-M: specify dv or mpeg\n" "\t-R: Receive DV or MPEG TS stream\n" "\t-S: Send DV stream\n" #ifndef __HAIKU__ "\t-m: set fwmem target\n" #endif - ); - - exit(EX_USAGE); + , getprogname() ); + fprintf(stderr, "\n"); } static void @@ -125,9 +124,9 @@ static void get_dev(int fd, struct fw_devlstreq *data) { if (data == NULL) - err(1, "%s: data malloc", __func__); + err(EX_SOFTWARE, "%s: data malloc", __func__); if( ioctl(fd, FW_GDEVLST, data) < 0) { - err(1, "%s: ioctl", __func__); + err(EX_IOERR, "%s: ioctl", __func__); } } @@ -161,15 +160,14 @@ str2node(int fd, const char *nodestr) data = (struct fw_devlstreq *)malloc(sizeof(struct fw_devlstreq)); if (data == NULL) - err(1, "%s: data malloc", __func__); - get_dev(fd, data); + err(EX_SOFTWARE, "%s: data malloc", __func__); + get_dev(fd,data); for (i = 0; i < data->info_len; i++) { fweui2eui64(&data->dev[i].eui, &tmpeui); if (memcmp(&eui, &tmpeui, sizeof(struct eui64)) == 0) { node = data->dev[i].dst; - if (data != NULL) - free(data); + free(data); goto gotnode; } } @@ -222,7 +220,7 @@ read_write_quad(int fd, struct fw_eui64 eui, u_int32_t addr_lo, int readmode, u_ asyreq = (struct fw_asyreq *)malloc(sizeof(struct fw_asyreq_t) + 16); if (asyreq == NULL) - err(1, "%s:asyreq malloc", __func__); + err(EX_SOFTWARE, "%s:asyreq malloc", __func__); asyreq->req.len = 16; #if 0 asyreq->req.type = FWASREQNODE; @@ -245,7 +243,7 @@ read_write_quad(int fd, struct fw_eui64 eui, u_int32_t addr_lo, int readmode, u_ asyreq->pkt.mode.wreqq.data = htonl(data); if (ioctl(fd, FW_ASYREQ, asyreq) < 0) { - err(1, "ioctl"); + err(EX_IOERR, "%s: ioctl", __func__); } res = qld[3]; free(asyreq); @@ -277,7 +275,7 @@ send_phy_config(int fd, int root_node, int gap_count) asyreq = (struct fw_asyreq *)malloc(sizeof(struct fw_asyreq_t) + 12); if (asyreq == NULL) - err(1, "%s:asyreq malloc", __func__); + err(EX_SOFTWARE, "%s:asyreq malloc", __func__); asyreq->req.len = 12; asyreq->req.type = FWASREQNODE; asyreq->pkt.mode.ld[0] = 0; @@ -293,7 +291,7 @@ send_phy_config(int fd, int root_node, int gap_count) root_node, gap_count); if (ioctl(fd, FW_ASYREQ, asyreq) < 0) - err(1, "%s: ioctl", __func__); + err(EX_IOERR, "%s: ioctl", __func__); free(asyreq); } @@ -304,7 +302,7 @@ link_on(int fd, int node) asyreq = (struct fw_asyreq *)malloc(sizeof(struct fw_asyreq_t) + 12); if (asyreq == NULL) - err(1, "%s:asyreq malloc", __func__); + err(EX_SOFTWARE, "%s:asyreq malloc", __func__); asyreq->req.len = 12; asyreq->req.type = FWASREQNODE; asyreq->pkt.mode.common.tcode = FWTCODE_PHY; @@ -312,7 +310,7 @@ link_on(int fd, int node) asyreq->pkt.mode.ld[2] = ~asyreq->pkt.mode.ld[1]; if (ioctl(fd, FW_ASYREQ, asyreq) < 0) - err(1, "%s: ioctl", __func__); + err(EX_IOERR, "%s: ioctl", __func__); free(asyreq); } @@ -323,7 +321,7 @@ reset_start(int fd, int node) asyreq = (struct fw_asyreq *)malloc(sizeof(struct fw_asyreq_t) + 16); if (asyreq == NULL) - err(1, "%s:asyreq malloc", __func__); + err(EX_SOFTWARE, "%s:asyreq malloc", __func__); asyreq->req.len = 16; asyreq->req.type = FWASREQNODE; asyreq->pkt.mode.wreqq.dst = FWLOCALBUS | (node & 0x3f); @@ -336,7 +334,7 @@ reset_start(int fd, int node) asyreq->pkt.mode.wreqq.data = htonl(0x1); if (ioctl(fd, FW_ASYREQ, asyreq) < 0) - err(1, "%s: ioctl", __func__); + err(EX_IOERR, "%s: ioctl", __func__); free(asyreq); } @@ -352,7 +350,7 @@ set_pri_req(int fd, u_int32_t pri_req) data = (struct fw_devlstreq *)malloc(sizeof(struct fw_devlstreq)); if (data == NULL) - err(1, "%s: data malloc", __func__); + err(EX_SOFTWARE, "%s:data malloc", __func__); get_dev(fd, data); #define BUGET_REG 0xf0000218 for (i = 0; i < data->info_len; i++) { @@ -409,7 +407,7 @@ get_crom(int fd, int node, void *crom_buf, int len) data = (struct fw_devlstreq *)malloc(sizeof(struct fw_devlstreq)); if (data == NULL) - err(1, "%s: data malloc", __func__); + err(EX_SOFTWARE, "%s:data malloc", __func__); get_dev(fd, data); for (i = 0; i < data->info_len; i++) { @@ -426,7 +424,7 @@ get_crom(int fd, int node, void *crom_buf, int len) buf.ptr = crom_buf; bzero(crom_buf, len); if ((error = ioctl(fd, FW_GCROM, &buf)) < 0) { - err(1, "%s: ioctl", __func__); + err(EX_IOERR, "%s: ioctl", __func__); } return error; @@ -515,12 +513,13 @@ load_crom(char *filename, u_int32_t *p) int len=1024, i; if ((file = fopen(filename, "r")) == NULL) - err(1, "load_crom"); + err(1, "load_crom %s", filename); for (i = 0; i < len/(4*8); i ++) { fscanf(file, DUMP_FORMAT, p, p+1, p+2, p+3, p+4, p+5, p+6, p+7); p += 8; } + fclose(file); } static void @@ -535,9 +534,9 @@ show_topology_map(int fd) static const char *speed[] = {"S100", "S200", "S400", "S800"}; tmap = malloc(sizeof(struct fw_topology_map)); if (tmap == NULL) - err(1, "%s:tmap malloc", __func__); + err(EX_SOFTWARE, "%s:tmap malloc", __func__); if (ioctl(fd, FW_GTPMAP, tmap) < 0) { - err(1, "%s: ioctl", __func__); + err(EX_IOERR, "%s: ioctl", __func__); } printf("crc_len: %d generation:%d node_count:%d sid_count:%d\n", tmap->crc_len, tmap->generation, @@ -577,7 +576,7 @@ read_phy_registers(int fd, u_int8_t *buf, int offset, int len) for (i = 0; i < len; i++) { reg.addr = offset + i; if (ioctl(fd, FWOHCI_RDPHYREG, ®) < 0) - err(1, "%s: ioctl", __func__); + err(EX_IOERR, "%s: ioctl", __func__); buf[i] = (u_int8_t) reg.data; printf("0x%02x ", reg.data); } @@ -592,7 +591,7 @@ read_phy_page(int fd, u_int8_t *buf, int page, int port) reg.addr = 0x7; reg.data = ((page & 7) << 5) | (port & 0xf); if (ioctl(fd, FWOHCI_WRPHYREG, ®) < 0) - err(1, "%s: ioctl", __func__); + err(EX_IOERR, "%s: ioctl", __func__); read_phy_registers(fd, buf, 8, 8); } @@ -661,9 +660,10 @@ open_dev(int *fd, char *devname) if (*fd < 0) { *fd = open(devname, O_RDWR); if (*fd < 0) - return (-1); + return(-1); + } - return (0); + return(0); } #ifndef __HAIKU__ @@ -696,17 +696,17 @@ detect_recv_fn(int fd, char ich) bufreq.tx.psize = 0; if (ioctl(fd, FW_SSTBUF, &bufreq) < 0) - err(1, "%s: ioctl FW_SSTBUF", __func__); + err(EX_IOERR, "%s: ioctl FW_SSTBUF", __func__); isoreq.ch = ich & 0x3f; isoreq.tag = (ich >> 6) & 3; if (ioctl(fd, FW_SRSTREAM, &isoreq) < 0) - err(1, "%s: ioctl FW_SRSTREAM", __func__); + err(EX_IOERR, "%s: ioctl FW_SRSTREAM", __func__); buf = (char *)malloc(RECV_NUM_PACKET * RECV_PACKET_SZ); if (buf == NULL) - err(1, "%s:buf malloc", __func__); + err(EX_SOFTWARE, "%s:buf malloc", __func__); /* * fwdev.c seems to return EIO on error and * the return value of the last uiomove @@ -718,7 +718,7 @@ detect_recv_fn(int fd, char ich) */ len = read(fd, buf, RECV_NUM_PACKET * RECV_PACKET_SZ); if (len < 0) - err(1, "%s: error reading from device\n", __func__); + err(EX_IOERR, "%s: error reading from device", __func__); ptr = (u_int32_t *) buf; ciph = (struct ciphdr *)(ptr + 1); @@ -794,6 +794,8 @@ main(int argc, char **argv) if (open_dev(&fd, devbase) < 0) { if (current_board == 0) { usage(); + err(EX_IOERR, "%s: Error opening firewire controller #%d %s", + __func__, current_board, devbase); } return(EIO); } @@ -810,11 +812,12 @@ main(int argc, char **argv) #else while ((ch = getopt(argc, argv, "M:f:g:m:o:s:b:prtc:d:l:u:R:S:")) != -1) { #endif + switch(ch) { case 'b': priority_budget = strtol(optarg, NULL, 0); if (priority_budget < 0 || priority_budget > INT32_MAX) - errx(EX_USAGE, "%s: invalid number: %s", __func__, optarg); + errx(EX_USAGE, "%s: priority_budget out of range: %s", __func__, optarg); command_set = true; open_needed = true; display_board_only = false; @@ -824,7 +827,7 @@ main(int argc, char **argv) if (crom_string == NULL) err(EX_SOFTWARE, "%s:crom_string malloc", __func__); if ( (strtol(crom_string, NULL, 0) < 0) || strtol(crom_string, NULL, 0) > MAX_BOARDS) - err(EX_USAGE, "%s:Invalid value for node", __func__); + errx(EX_USAGE, "%s:Invalid value for node", __func__); strcpy(crom_string, optarg); display_crom = 1; open_needed = true; @@ -845,7 +848,7 @@ main(int argc, char **argv) #define MAX_PHY_CONFIG 0x3f set_root_node = strtol(optarg, NULL, 0); if ( (set_root_node < 0) || (set_root_node > MAX_PHY_CONFIG) ) - err(EX_USAGE, "%s:set_root_node out of range", __func__); + errx(EX_USAGE, "%s:set_root_node out of range", __func__); open_needed = true; command_set = true; display_board_only = false; @@ -853,7 +856,7 @@ main(int argc, char **argv) case 'g': set_gap_count = strtol(optarg, NULL, 0); if ( (set_gap_count < 0) || (set_gap_count > MAX_PHY_CONFIG) ) - err(EX_USAGE, "%s:set_gap_count out of range", __func__); + errx(EX_USAGE, "%s:set_gap_count out of range", __func__); open_needed = true; command_set = true; display_board_only = false; @@ -872,13 +875,13 @@ main(int argc, char **argv) display_board_only = false; if (eui64_hostton(optarg, &target) != 0 && eui64_aton(optarg, &target) != 0) - err(EX_USAGE, "%s: invalid target: %s", __func__, optarg); + errx(EX_USAGE, "%s: invalid target: %s", __func__, optarg); break; #endif case 'o': send_link_on = str2node(fd, optarg); - if ( (send_link_on < 0) || (send_link_on > INT32_MAX) ) - err(EX_USAGE, "%s: node out of range: %s\n",__func__, optarg); + if ( (send_link_on < 0) || (send_link_on > MAX_PHY_CONFIG) ) + errx(EX_USAGE, "%s: node out of range: %s\n",__func__, optarg); open_needed = true; command_set = true; display_board_only = false; @@ -897,8 +900,8 @@ main(int argc, char **argv) break; case 's': send_reset_start = str2node(fd, optarg); - if ( (send_reset_start < 0) || (send_reset_start > INT32_MAX) ) - err(EX_USAGE, "%s: node out of range: %s\n", __func__, optarg); + if ( (send_reset_start < 0) || (send_reset_start > MAX_PHY_CONFIG) ) + errx(EX_USAGE, "%s: node out of range: %s\n", __func__, optarg); open_needed = true; command_set = true; display_board_only = false; @@ -948,13 +951,27 @@ main(int argc, char **argv) command_set = true; display_board_only = false; break; + case '?': default: usage(); + warnc(EINVAL, "%s: Unknown command line arguments", __func__); return 0; } } /* end while */ /* + * Catch the error case when the user + * executes the command with non ''-'' + * delimited arguments. + * Generate the usage() display and exit. + */ + if (!command_set && !display_board_only) { + usage(); + warnc(EINVAL, "%s: Unknown command line arguments", __func__); + return 0; + } + + /* * If -u <bus_number> is passed, execute * command for that card only. * @@ -965,7 +982,7 @@ main(int argc, char **argv) if(open_needed){ snprintf(devbase, sizeof(devbase), "%s%d", device_string, current_board); if (open_dev(&fd, devbase) < 0) { - errx(EX_IOERR, "%s: Error opening board #%d\n", __func__, current_board); + err(EX_IOERR, "%s: Error opening firewire controller #%d %s", __func__, current_board, devbase); } } /* @@ -986,7 +1003,7 @@ main(int argc, char **argv) */ if (send_bus_reset) { if(ioctl(fd, FW_IBUSRST, &tmp) < 0) - err(EX_IOERR, "%s: ioctl", __func__); + err(EX_IOERR, "%s: Ioctl of bus reset failed for %s", __func__, devbase); } /* * Print out the CROM for this node "-c" @@ -1036,8 +1053,15 @@ main(int argc, char **argv) if (set_fwmem_target) { eui.hi = ntohl(*(u_int32_t*)&(target.octet[0])); eui.lo = ntohl(*(u_int32_t*)&(target.octet[4])); +#if defined(__FreeBSD__) sysctl_set_int("hw.firewire.fwmem.eui64_hi", eui.hi); sysctl_set_int("hw.firewire.fwmem.eui64_lo", eui.lo); +#elif defined(__NetBSD__) + sysctl_set_int("hw.fwmem.eui64_hi", eui.hi); + sysctl_set_int("hw.fwmem.eui64_lo", eui.lo); +#else +#warning "You need to add support for your OS" +#endif } #endif /* @@ -1059,7 +1083,7 @@ main(int argc, char **argv) show_topology_map(fd); /* - * Recieve data file from node "-R" + * Receive data file from node "-R" */ #define TAG (1<<6) #define CHANNEL 63 @@ -1067,10 +1091,11 @@ main(int argc, char **argv) if (recvfn == NULL) { /* guess... */ recvfn = detect_recv_fn(fd, TAG | CHANNEL); close(fd); + fd = -1; } snprintf(devbase, sizeof(devbase), "%s%d", device_string, current_board); if (open_dev(&fd, devbase) < 0) - errx(EX_IOERR, "%s: Error opening board #%d in recv_data\n", __func__, current_board); + err(EX_IOERR, "%s: Error opening firewire controller #%d %s in recv_data\n", __func__, current_board, devbase); (*recvfn)(fd, recv_data, TAG | CHANNEL, -1); free(recv_data); } @@ -1089,4 +1114,3 @@ main(int argc, char **argv) } return 0; } - diff --git a/src/bin/fwcontrol/fwdv.c b/src/bin/fwcontrol/fwdv.c index ed8d63f..e403f66 100644 --- a/src/bin/fwcontrol/fwdv.c +++ b/src/bin/fwcontrol/fwdv.c @@ -31,7 +31,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $FreeBSD: src/usr.sbin/fwcontrol/fwdv.c,v 1.7 2007/06/17 10:20:55 simokawa Exp $ + * $FreeBSD: src/usr.sbin/fwcontrol/fwdv.c$ */ #include <sys/param.h> #ifndef __HAIKU__ @@ -119,7 +119,7 @@ dvrecv(int d, const char *filename, char ich, int count) } else { fd = open(filename, O_CREAT | O_WRONLY | O_TRUNC, 0660); if (fd == -1) - err(EX_NOINPUT, filename); + err(EX_NOINPUT, "%s", filename); } buf = malloc(RBUFSIZE); pad = malloc(DSIZE*MAXBLOCKS); @@ -224,7 +224,7 @@ again: if (npad < 0) npad += nb; fprintf(stderr, "\n%d blocks padded\n", - npad); + npad); npad *= DSIZE; wbuf[vec].iov_base = pad; wbuf[vec++].iov_len = npad; @@ -255,7 +255,7 @@ next: if (vec > 0) writev(fd, wbuf, vec); } - if(fd != STDOUT_FILENO) + if (fd != STDOUT_FILENO) close(fd); fprintf(stderr, "\n"); } @@ -279,7 +279,7 @@ dvsend(int d, const char *filename, char ich, int count) fd = open(filename, O_RDONLY); if (fd == -1) - err(EX_NOINPUT, filename); + err(EX_NOINPUT, "%s", filename); pbuf = malloc(DSIZE * TNBUF); bzero(wbuf, sizeof(wbuf)); diff --git a/src/bin/fwcontrol/fwmpegts.c b/src/bin/fwcontrol/fwmpegts.c index ba1bedd..82afc18 100644 --- a/src/bin/fwcontrol/fwmpegts.c +++ b/src/bin/fwcontrol/fwmpegts.c @@ -31,7 +31,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $FreeBSD: src/usr.sbin/fwcontrol/fwmpegts.c,v 1.1 2006/10/26 22:33:38 imp Exp $ + * $FreeBSD: src/usr.sbin/fwcontrol/fwmpegts.c$ */ #include <sys/param.h> #ifndef __HAIKU__ @@ -59,11 +59,19 @@ #include "iec68113.h" #else #include <sysexits.h> +#endif +#if defined(__FreeBSD__) #include <dev/firewire/firewire.h> #include <dev/firewire/iec68113.h> +#elif defined(__NetBSD__) +#include <dev/ieee1394/firewire.h> +#include <dev/ieee1394/iec68113.h> +#else +//#warning "You need to add support for your OS" #endif + #include "fwmethods.h" #define DEBUG 0 @@ -95,7 +103,7 @@ MPEG-2 Transport Stream (MPEG TS) packet format according to IEC 61883: N.b. that CRCs are removed by firewire layer! -The following fiels are fixed for IEEE-1394: +The following fields are fixed for IEEE-1394: tag = 01b tcode = 1010b The length is payload length, i.e. includes CIP header and data size. @@ -168,7 +176,7 @@ mpegtsrecv(int d, const char *filename, char ich, int count) else { fd = open(filename, O_CREAT | O_WRONLY | O_TRUNC, 0660); if (fd == -1) - err(EX_NOINPUT, filename); + err(EX_NOINPUT, "%s", filename); } buf = malloc(RBUFSIZE);