|
Packit |
0bbbb1 |
/*
|
|
Packit |
0bbbb1 |
* iec61883-private.h - Linux IEEE 1394 streaming media library.
|
|
Packit |
0bbbb1 |
* Copyright (C) 2004 Kristian Hogsberg, Dan Dennedy, and Dan Maas.
|
|
Packit |
0bbbb1 |
*
|
|
Packit |
0bbbb1 |
* This library is free software; you can redistribute it and/or
|
|
Packit |
0bbbb1 |
* modify it under the terms of the GNU Lesser General Public
|
|
Packit |
0bbbb1 |
* License as published by the Free Software Foundation; either
|
|
Packit |
0bbbb1 |
* version 2 of the License, or (at your option) any later version.
|
|
Packit |
0bbbb1 |
*
|
|
Packit |
0bbbb1 |
* This library is distributed in the hope that it will be useful,
|
|
Packit |
0bbbb1 |
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
Packit |
0bbbb1 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
Packit |
0bbbb1 |
* Lesser General Public License for more details.
|
|
Packit |
0bbbb1 |
*
|
|
Packit |
0bbbb1 |
* You should have received a copy of the GNU Lesser General Public
|
|
Packit |
0bbbb1 |
* License along with this library; if not, write to the Free Software
|
|
Packit |
0bbbb1 |
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
Packit |
0bbbb1 |
*/
|
|
Packit |
0bbbb1 |
|
|
Packit |
0bbbb1 |
#ifndef _IEC61883_PRIVATE_H
|
|
Packit |
0bbbb1 |
#define _IEC61883_PRIVATE_H
|
|
Packit |
0bbbb1 |
|
|
Packit |
0bbbb1 |
#include <libraw1394/raw1394.h>
|
|
Packit |
0bbbb1 |
#include <endian.h>
|
|
Packit |
0bbbb1 |
#include "tsbuffer.h"
|
|
Packit |
0bbbb1 |
|
|
Packit |
0bbbb1 |
#ifdef __cplusplus
|
|
Packit |
0bbbb1 |
extern "C" {
|
|
Packit |
0bbbb1 |
#endif
|
|
Packit |
0bbbb1 |
|
|
Packit |
0bbbb1 |
#ifdef IEC61883_DEBUG
|
|
Packit |
0bbbb1 |
#define DEBUG(s, args...) fprintf(stderr, "libiec61883 debug: " s "\n", ## args)
|
|
Packit |
0bbbb1 |
#else
|
|
Packit |
0bbbb1 |
#define DEBUG(s, args...)
|
|
Packit |
0bbbb1 |
#endif
|
|
Packit |
0bbbb1 |
#ifndef QUIET
|
|
Packit |
0bbbb1 |
#define WARN(s, args...) {fprintf(stderr, "libiec61883 warning: " s "\n", ## args);}
|
|
Packit |
0bbbb1 |
#else
|
|
Packit |
0bbbb1 |
#define WARN(s, args...) {}
|
|
Packit |
0bbbb1 |
#endif
|
|
Packit |
0bbbb1 |
#define FAIL(s, args...) {fprintf(stderr, "libiec61883 error: " s "\n", ## args);return(-1);}
|
|
Packit |
0bbbb1 |
|
|
Packit |
0bbbb1 |
/*
|
|
Packit |
0bbbb1 |
* The TAG value is present in the isochronous header (first quadlet). It
|
|
Packit |
0bbbb1 |
* provides a high level label for the format of data carried by the
|
|
Packit |
0bbbb1 |
* isochronous packet.
|
|
Packit |
0bbbb1 |
*/
|
|
Packit |
0bbbb1 |
|
|
Packit |
0bbbb1 |
#define IEC61883_TAG_WITHOUT_CIP 0 /* CIP header NOT included */
|
|
Packit |
0bbbb1 |
#define IEC61883_TAG_WITH_CIP 1 /* CIP header included. */
|
|
Packit |
0bbbb1 |
#define IEC61883_TAG_RESERVED1 2 /* Reserved */
|
|
Packit |
0bbbb1 |
#define IEC61883_TAG_RESERVED2 3 /* Reserved */
|
|
Packit |
0bbbb1 |
|
|
Packit |
0bbbb1 |
/**
|
|
Packit |
0bbbb1 |
* Common Isochronous Protocol
|
|
Packit |
0bbbb1 |
**/
|
|
Packit |
0bbbb1 |
|
|
Packit |
0bbbb1 |
#define IEC61883_FMT_DV 0x00
|
|
Packit |
0bbbb1 |
#define IEC61883_FMT_AMDTP 0x10
|
|
Packit |
0bbbb1 |
#define IEC61883_FMT_MPEG2 0x20
|
|
Packit |
0bbbb1 |
|
|
Packit |
0bbbb1 |
#if __BYTE_ORDER == __BIG_ENDIAN
|
|
Packit |
0bbbb1 |
|
|
Packit |
0bbbb1 |
struct iso_packet_header {
|
|
Packit |
0bbbb1 |
unsigned int data_length : 16;
|
|
Packit |
0bbbb1 |
unsigned int tag : 2;
|
|
Packit |
0bbbb1 |
unsigned int channel : 6;
|
|
Packit |
0bbbb1 |
unsigned int tcode : 4;
|
|
Packit |
0bbbb1 |
unsigned int sy : 4;
|
|
Packit |
0bbbb1 |
};
|
|
Packit |
0bbbb1 |
|
|
Packit |
0bbbb1 |
struct iec61883_packet {
|
|
Packit |
0bbbb1 |
/* First quadlet */
|
|
Packit |
0bbbb1 |
unsigned int dbs : 8;
|
|
Packit |
0bbbb1 |
unsigned int eoh0 : 2;
|
|
Packit |
0bbbb1 |
unsigned int sid : 6;
|
|
Packit |
0bbbb1 |
|
|
Packit |
0bbbb1 |
unsigned int dbc : 8;
|
|
Packit |
0bbbb1 |
unsigned int fn : 2;
|
|
Packit |
0bbbb1 |
unsigned int qpc : 3;
|
|
Packit |
0bbbb1 |
unsigned int sph : 1;
|
|
Packit |
0bbbb1 |
unsigned int reserved : 2;
|
|
Packit |
0bbbb1 |
|
|
Packit |
0bbbb1 |
/* Second quadlet */
|
|
Packit |
0bbbb1 |
unsigned int fdf : 8;
|
|
Packit |
0bbbb1 |
unsigned int eoh1 : 2;
|
|
Packit |
0bbbb1 |
unsigned int fmt : 6;
|
|
Packit |
0bbbb1 |
|
|
Packit |
0bbbb1 |
unsigned int syt : 16;
|
|
Packit |
0bbbb1 |
|
|
Packit |
0bbbb1 |
unsigned char data[0];
|
|
Packit |
0bbbb1 |
};
|
|
Packit |
0bbbb1 |
|
|
Packit |
0bbbb1 |
#elif __BYTE_ORDER == __LITTLE_ENDIAN
|
|
Packit |
0bbbb1 |
|
|
Packit |
0bbbb1 |
struct iso_packet_header {
|
|
Packit |
0bbbb1 |
unsigned int data_length : 16;
|
|
Packit |
0bbbb1 |
unsigned int channel : 6;
|
|
Packit |
0bbbb1 |
unsigned int tag : 2;
|
|
Packit |
0bbbb1 |
unsigned int sy : 4;
|
|
Packit |
0bbbb1 |
unsigned int tcode : 4;
|
|
Packit |
0bbbb1 |
};
|
|
Packit |
0bbbb1 |
|
|
Packit |
0bbbb1 |
struct iec61883_packet {
|
|
Packit |
0bbbb1 |
/* First quadlet */
|
|
Packit |
0bbbb1 |
unsigned int sid : 6;
|
|
Packit |
0bbbb1 |
unsigned int eoh0 : 2;
|
|
Packit |
0bbbb1 |
unsigned int dbs : 8;
|
|
Packit |
0bbbb1 |
|
|
Packit |
0bbbb1 |
unsigned int reserved : 2;
|
|
Packit |
0bbbb1 |
unsigned int sph : 1;
|
|
Packit |
0bbbb1 |
unsigned int qpc : 3;
|
|
Packit |
0bbbb1 |
unsigned int fn : 2;
|
|
Packit |
0bbbb1 |
unsigned int dbc : 8;
|
|
Packit |
0bbbb1 |
|
|
Packit |
0bbbb1 |
/* Second quadlet */
|
|
Packit |
0bbbb1 |
unsigned int fmt : 6;
|
|
Packit |
0bbbb1 |
unsigned int eoh1 : 2;
|
|
Packit |
0bbbb1 |
unsigned int fdf : 8;
|
|
Packit |
0bbbb1 |
|
|
Packit |
0bbbb1 |
unsigned int syt : 16;
|
|
Packit |
0bbbb1 |
|
|
Packit |
0bbbb1 |
unsigned char data[0];
|
|
Packit |
0bbbb1 |
};
|
|
Packit |
0bbbb1 |
|
|
Packit |
0bbbb1 |
#else
|
|
Packit |
0bbbb1 |
|
|
Packit |
0bbbb1 |
#error Unknown bitfield type
|
|
Packit |
0bbbb1 |
|
|
Packit |
0bbbb1 |
#endif
|
|
Packit |
0bbbb1 |
|
|
Packit |
0bbbb1 |
struct iec61883_fraction {
|
|
Packit |
0bbbb1 |
int integer;
|
|
Packit |
0bbbb1 |
int numerator;
|
|
Packit |
0bbbb1 |
int denominator;
|
|
Packit |
0bbbb1 |
};
|
|
Packit |
0bbbb1 |
|
|
Packit |
0bbbb1 |
struct iec61883_cip {
|
|
Packit |
0bbbb1 |
struct iec61883_fraction cycle_offset;
|
|
Packit |
0bbbb1 |
struct iec61883_fraction ticks_per_syt_offset;
|
|
Packit |
0bbbb1 |
struct iec61883_fraction ready_samples;
|
|
Packit |
0bbbb1 |
struct iec61883_fraction samples_per_cycle;
|
|
Packit |
0bbbb1 |
int dbc, dbs;
|
|
Packit |
0bbbb1 |
int cycle_count;
|
|
Packit |
0bbbb1 |
int mode;
|
|
Packit |
0bbbb1 |
int syt_interval;
|
|
Packit |
0bbbb1 |
int dimension;
|
|
Packit |
0bbbb1 |
int rate;
|
|
Packit |
0bbbb1 |
int fdf;
|
|
Packit |
0bbbb1 |
int format;
|
|
Packit |
0bbbb1 |
};
|
|
Packit |
0bbbb1 |
|
|
Packit |
0bbbb1 |
void
|
|
Packit |
0bbbb1 |
iec61883_cip_init(struct iec61883_cip *cip, int format, int fdf,
|
|
Packit |
0bbbb1 |
int rate, int dbs, int syt_interval);
|
|
Packit |
0bbbb1 |
void
|
|
Packit |
0bbbb1 |
iec61883_cip_resync(struct iec61883_cip *ptz, int cycle);
|
|
Packit |
0bbbb1 |
void
|
|
Packit |
0bbbb1 |
iec61883_cip_set_transmission_mode(struct iec61883_cip *ptz, int mode);
|
|
Packit |
0bbbb1 |
|
|
Packit |
0bbbb1 |
int
|
|
Packit |
0bbbb1 |
iec61883_cip_get_max_packet_size(struct iec61883_cip *ptz);
|
|
Packit |
0bbbb1 |
|
|
Packit |
0bbbb1 |
int
|
|
Packit |
0bbbb1 |
iec61883_cip_fill_header(raw1394handle_t handle, struct iec61883_cip *cip,
|
|
Packit |
0bbbb1 |
struct iec61883_packet *packet);
|
|
Packit |
0bbbb1 |
|
|
Packit |
0bbbb1 |
|
|
Packit |
0bbbb1 |
/**
|
|
Packit |
0bbbb1 |
* Audio and Music Data Transport Protocol
|
|
Packit |
0bbbb1 |
**/
|
|
Packit |
0bbbb1 |
|
|
Packit |
0bbbb1 |
#define IEC61883_FDF_NODATA 0xFF
|
|
Packit |
0bbbb1 |
|
|
Packit |
0bbbb1 |
/* AM824 format definitions. */
|
|
Packit |
0bbbb1 |
#define IEC61883_FDF_AM824 0x00
|
|
Packit |
0bbbb1 |
#define IEC61883_FDF_AM824_CONTROLLED 0x04
|
|
Packit |
0bbbb1 |
#define IEC61883_FDF_SFC_MASK 0x03
|
|
Packit |
0bbbb1 |
|
|
Packit |
0bbbb1 |
#define IEC61883_AM824_LABEL 0x40
|
|
Packit |
0bbbb1 |
#define IEC61883_AM824_LABEL_RAW_24BITS 0x40
|
|
Packit |
0bbbb1 |
#define IEC61883_AM824_LABEL_RAW_20BITS 0x41
|
|
Packit |
0bbbb1 |
#define IEC61883_AM824_LABEL_RAW_16BITS 0x42
|
|
Packit |
0bbbb1 |
#define IEC61883_AM824_LABEL_RAW_RESERVED 0x43
|
|
Packit |
0bbbb1 |
|
|
Packit |
0bbbb1 |
#define IEC61883_AM824_VBL_24BITS 0x0
|
|
Packit |
0bbbb1 |
#define IEC61883_AM824_VBL_20BITS 0x1
|
|
Packit |
0bbbb1 |
#define IEC61883_AM824_VBL_16BITS 0x2
|
|
Packit |
0bbbb1 |
#define IEC61883_AM824_VBL_RESERVED 0x3
|
|
Packit |
0bbbb1 |
|
|
Packit |
0bbbb1 |
/* IEC-60958 format definitions. */
|
|
Packit |
0bbbb1 |
#define IEC60958_LABEL 0x0
|
|
Packit |
0bbbb1 |
#define IEC60958_PAC_B 0x3 /* Preamble Code 'B': Start of channel 1, at
|
|
Packit |
0bbbb1 |
* the start of a data block. */
|
|
Packit |
0bbbb1 |
#define IEC60958_PAC_RSV 0x2 /* Preamble Code 'RESERVED' */
|
|
Packit |
0bbbb1 |
#define IEC60958_PAC_M 0x1 /* Preamble Code 'M': Start of channel 1 that
|
|
Packit |
0bbbb1 |
* is not at the start of a data block. */
|
|
Packit |
0bbbb1 |
#define IEC60958_PAC_W 0x0 /* Preamble Code 'W': start of channel 2. */
|
|
Packit |
0bbbb1 |
#define IEC60958_DATA_VALID 0 /* When cleared means data is valid. */
|
|
Packit |
0bbbb1 |
#define IEC60958_DATA_INVALID 1 /* When set means data is not suitable for an ADC. */
|
|
Packit |
0bbbb1 |
|
|
Packit |
0bbbb1 |
#if __BYTE_ORDER == __BIG_ENDIAN
|
|
Packit |
0bbbb1 |
|
|
Packit |
0bbbb1 |
struct iec60958_data {
|
|
Packit |
0bbbb1 |
u_int32_t data : 24;
|
|
Packit |
0bbbb1 |
u_int32_t validity : 1;
|
|
Packit |
0bbbb1 |
u_int32_t user_data : 1;
|
|
Packit |
0bbbb1 |
u_int32_t ch_status : 1;
|
|
Packit |
0bbbb1 |
u_int32_t parity : 1;
|
|
Packit |
0bbbb1 |
u_int32_t pac : 2;
|
|
Packit |
0bbbb1 |
u_int32_t label : 2;
|
|
Packit |
0bbbb1 |
};
|
|
Packit |
0bbbb1 |
|
|
Packit |
0bbbb1 |
#elif __BYTE_ORDER == __LITTLE_ENDIAN
|
|
Packit |
0bbbb1 |
|
|
Packit |
0bbbb1 |
struct iec60958_data {
|
|
Packit |
0bbbb1 |
u_int32_t data : 24;
|
|
Packit |
0bbbb1 |
u_int32_t validity : 1;
|
|
Packit |
0bbbb1 |
u_int32_t user_data : 1;
|
|
Packit |
0bbbb1 |
u_int32_t ch_status : 1;
|
|
Packit |
0bbbb1 |
u_int32_t parity : 1;
|
|
Packit |
0bbbb1 |
u_int32_t pac : 2;
|
|
Packit |
0bbbb1 |
u_int32_t label : 2;
|
|
Packit |
0bbbb1 |
};
|
|
Packit |
0bbbb1 |
|
|
Packit |
0bbbb1 |
#else
|
|
Packit |
0bbbb1 |
|
|
Packit |
0bbbb1 |
#error Unknown bitfield type
|
|
Packit |
0bbbb1 |
|
|
Packit |
0bbbb1 |
#endif
|
|
Packit |
0bbbb1 |
|
|
Packit |
0bbbb1 |
struct iec61883_amdtp {
|
|
Packit |
0bbbb1 |
struct iec61883_cip cip;
|
|
Packit |
0bbbb1 |
int dimension;
|
|
Packit |
0bbbb1 |
int rate;
|
|
Packit |
0bbbb1 |
int iec958_rate_code;
|
|
Packit |
0bbbb1 |
int sample_format;
|
|
Packit |
0bbbb1 |
int iec958_frame_count;
|
|
Packit |
0bbbb1 |
iec61883_amdtp_recv_t put_data;
|
|
Packit |
0bbbb1 |
iec61883_amdtp_xmit_t get_data;
|
|
Packit |
0bbbb1 |
void *callback_data;
|
|
Packit |
0bbbb1 |
int format;
|
|
Packit |
0bbbb1 |
int syt_interval;
|
|
Packit |
0bbbb1 |
raw1394handle_t handle;
|
|
Packit |
0bbbb1 |
int channel;
|
|
Packit |
0bbbb1 |
unsigned int buffer_packets;
|
|
Packit |
0bbbb1 |
unsigned int prebuffer_packets;
|
|
Packit |
0bbbb1 |
unsigned int irq_interval;
|
|
Packit |
0bbbb1 |
int synch;
|
|
Packit |
0bbbb1 |
int speed;
|
|
Packit |
0bbbb1 |
unsigned int total_dropped;
|
|
Packit |
0bbbb1 |
};
|
|
Packit |
0bbbb1 |
|
|
Packit |
0bbbb1 |
|
|
Packit |
0bbbb1 |
/**
|
|
Packit |
0bbbb1 |
* DV Digital Video
|
|
Packit |
0bbbb1 |
**/
|
|
Packit |
0bbbb1 |
|
|
Packit |
0bbbb1 |
struct iec61883_dv {
|
|
Packit |
0bbbb1 |
struct iec61883_cip cip;
|
|
Packit |
0bbbb1 |
iec61883_dv_recv_t put_data;
|
|
Packit |
0bbbb1 |
iec61883_dv_xmit_t get_data;
|
|
Packit |
0bbbb1 |
void *callback_data;
|
|
Packit |
0bbbb1 |
raw1394handle_t handle;
|
|
Packit |
0bbbb1 |
int channel;
|
|
Packit |
0bbbb1 |
unsigned int buffer_packets;
|
|
Packit |
0bbbb1 |
unsigned int prebuffer_packets;
|
|
Packit |
0bbbb1 |
unsigned int irq_interval;
|
|
Packit |
0bbbb1 |
int synch;
|
|
Packit |
0bbbb1 |
int speed;
|
|
Packit |
0bbbb1 |
unsigned int total_dropped;
|
|
Packit |
0bbbb1 |
};
|
|
Packit |
0bbbb1 |
|
|
Packit |
0bbbb1 |
struct iec61883_dv_fb {
|
|
Packit |
0bbbb1 |
iec61883_dv_t dv;
|
|
Packit |
0bbbb1 |
unsigned char data[480*300];
|
|
Packit |
0bbbb1 |
int len;
|
|
Packit |
0bbbb1 |
iec61883_dv_fb_recv_t put_data;
|
|
Packit |
0bbbb1 |
void *callback_data;
|
|
Packit |
0bbbb1 |
int ff;
|
|
Packit |
0bbbb1 |
unsigned int total_incomplete;
|
|
Packit |
0bbbb1 |
};
|
|
Packit |
0bbbb1 |
|
|
Packit |
0bbbb1 |
|
|
Packit |
0bbbb1 |
/**
|
|
Packit |
0bbbb1 |
* MPEG-2 Transport Stream
|
|
Packit |
0bbbb1 |
**/
|
|
Packit |
0bbbb1 |
|
|
Packit |
0bbbb1 |
struct iec61883_mpeg2 {
|
|
Packit |
0bbbb1 |
struct iec61883_cip cip;
|
|
Packit |
0bbbb1 |
iec61883_mpeg2_recv_t put_data;
|
|
Packit |
0bbbb1 |
iec61883_mpeg2_xmit_t get_data;
|
|
Packit |
0bbbb1 |
void *callback_data;
|
|
Packit |
0bbbb1 |
int syt_interval;
|
|
Packit |
0bbbb1 |
raw1394handle_t handle;
|
|
Packit |
0bbbb1 |
int channel;
|
|
Packit |
0bbbb1 |
struct tsbuffer *tsbuffer;
|
|
Packit |
0bbbb1 |
unsigned int buffer_packets;
|
|
Packit |
0bbbb1 |
unsigned int prebuffer_packets;
|
|
Packit |
0bbbb1 |
unsigned int irq_interval;
|
|
Packit |
0bbbb1 |
int synch;
|
|
Packit |
0bbbb1 |
int speed;
|
|
Packit |
0bbbb1 |
unsigned int total_dropped;
|
|
Packit |
0bbbb1 |
};
|
|
Packit |
0bbbb1 |
|
|
Packit |
0bbbb1 |
|
|
Packit |
0bbbb1 |
/**
|
|
Packit |
0bbbb1 |
* Plug Control Registers
|
|
Packit |
0bbbb1 |
**/
|
|
Packit |
0bbbb1 |
|
|
Packit |
0bbbb1 |
/* maximum number of PCRs allowed within the standard
|
|
Packit |
0bbbb1 |
* MPR/PCR addresses defined in IEC-61883.
|
|
Packit |
0bbbb1 |
* This refers to the number of output or input PCRs--
|
|
Packit |
0bbbb1 |
* not the MPRs and not the combined total.
|
|
Packit |
0bbbb1 |
*/
|
|
Packit |
0bbbb1 |
#define IEC61883_PCR_MAX 31
|
|
Packit |
0bbbb1 |
|
|
Packit |
0bbbb1 |
/* standard CSR offsets for plugs */
|
|
Packit |
0bbbb1 |
#define CSR_O_MPR 0x900
|
|
Packit |
0bbbb1 |
#define CSR_O_PCR_0 0x904
|
|
Packit |
0bbbb1 |
|
|
Packit |
0bbbb1 |
#define CSR_I_MPR 0x980
|
|
Packit |
0bbbb1 |
#define CSR_I_PCR_0 0x984
|
|
Packit |
0bbbb1 |
|
|
Packit |
0bbbb1 |
#if ( __BYTE_ORDER == __BIG_ENDIAN )
|
|
Packit |
0bbbb1 |
|
|
Packit |
0bbbb1 |
struct iec61883_oMPR {
|
|
Packit |
0bbbb1 |
unsigned int data_rate:2;
|
|
Packit |
0bbbb1 |
unsigned int bcast_channel:6;
|
|
Packit |
0bbbb1 |
unsigned int non_persist_ext:8;
|
|
Packit |
0bbbb1 |
unsigned int persist_ext:8;
|
|
Packit |
0bbbb1 |
unsigned int reserved:3;
|
|
Packit |
0bbbb1 |
unsigned int n_plugs:5;
|
|
Packit |
0bbbb1 |
};
|
|
Packit |
0bbbb1 |
|
|
Packit |
0bbbb1 |
struct iec61883_iMPR {
|
|
Packit |
0bbbb1 |
unsigned int data_rate:2;
|
|
Packit |
0bbbb1 |
unsigned int reserved:6;
|
|
Packit |
0bbbb1 |
unsigned int non_persist_ext:8;
|
|
Packit |
0bbbb1 |
unsigned int persist_ext:8;
|
|
Packit |
0bbbb1 |
unsigned int reserved2:3;
|
|
Packit |
0bbbb1 |
unsigned int n_plugs:5;
|
|
Packit |
0bbbb1 |
};
|
|
Packit |
0bbbb1 |
|
|
Packit |
0bbbb1 |
struct iec61883_oPCR {
|
|
Packit |
0bbbb1 |
unsigned int online:1;
|
|
Packit |
0bbbb1 |
unsigned int bcast_connection:1;
|
|
Packit |
0bbbb1 |
unsigned int n_p2p_connections:6;
|
|
Packit |
0bbbb1 |
unsigned int reserved:2;
|
|
Packit |
0bbbb1 |
unsigned int channel:6;
|
|
Packit |
0bbbb1 |
unsigned int data_rate:2;
|
|
Packit |
0bbbb1 |
unsigned int overhead_id:4;
|
|
Packit |
0bbbb1 |
unsigned int payload:10;
|
|
Packit |
0bbbb1 |
};
|
|
Packit |
0bbbb1 |
|
|
Packit |
0bbbb1 |
struct iec61883_iPCR {
|
|
Packit |
0bbbb1 |
unsigned int online:1;
|
|
Packit |
0bbbb1 |
unsigned int bcast_connection:1;
|
|
Packit |
0bbbb1 |
unsigned int n_p2p_connections:6;
|
|
Packit |
0bbbb1 |
unsigned int reserved:2;
|
|
Packit |
0bbbb1 |
unsigned int channel:6;
|
|
Packit |
0bbbb1 |
unsigned int reserved2:16;
|
|
Packit |
0bbbb1 |
};
|
|
Packit |
0bbbb1 |
|
|
Packit |
0bbbb1 |
#else
|
|
Packit |
0bbbb1 |
|
|
Packit |
0bbbb1 |
struct iec61883_oMPR {
|
|
Packit |
0bbbb1 |
unsigned int n_plugs:5;
|
|
Packit |
0bbbb1 |
unsigned int reserved:3;
|
|
Packit |
0bbbb1 |
unsigned int persist_ext:8;
|
|
Packit |
0bbbb1 |
unsigned int non_persist_ext:8;
|
|
Packit |
0bbbb1 |
unsigned int bcast_channel:6;
|
|
Packit |
0bbbb1 |
unsigned int data_rate:2;
|
|
Packit |
0bbbb1 |
};
|
|
Packit |
0bbbb1 |
|
|
Packit |
0bbbb1 |
struct iec61883_iMPR {
|
|
Packit |
0bbbb1 |
unsigned int n_plugs:5;
|
|
Packit |
0bbbb1 |
unsigned int reserved2:3;
|
|
Packit |
0bbbb1 |
unsigned int persist_ext:8;
|
|
Packit |
0bbbb1 |
unsigned int non_persist_ext:8;
|
|
Packit |
0bbbb1 |
unsigned int reserved:6;
|
|
Packit |
0bbbb1 |
unsigned int data_rate:2;
|
|
Packit |
0bbbb1 |
};
|
|
Packit |
0bbbb1 |
|
|
Packit |
0bbbb1 |
struct iec61883_oPCR {
|
|
Packit |
0bbbb1 |
unsigned int payload:10;
|
|
Packit |
0bbbb1 |
unsigned int overhead_id:4;
|
|
Packit |
0bbbb1 |
unsigned int data_rate:2;
|
|
Packit |
0bbbb1 |
unsigned int channel:6;
|
|
Packit |
0bbbb1 |
unsigned int reserved:2;
|
|
Packit |
0bbbb1 |
unsigned int n_p2p_connections:6;
|
|
Packit |
0bbbb1 |
unsigned int bcast_connection:1;
|
|
Packit |
0bbbb1 |
unsigned int online:1;
|
|
Packit |
0bbbb1 |
};
|
|
Packit |
0bbbb1 |
|
|
Packit |
0bbbb1 |
struct iec61883_iPCR {
|
|
Packit |
0bbbb1 |
unsigned int reserved2:16;
|
|
Packit |
0bbbb1 |
unsigned int channel:6;
|
|
Packit |
0bbbb1 |
unsigned int reserved:2;
|
|
Packit |
0bbbb1 |
unsigned int n_p2p_connections:6;
|
|
Packit |
0bbbb1 |
unsigned int bcast_connection:1;
|
|
Packit |
0bbbb1 |
unsigned int online:1;
|
|
Packit |
0bbbb1 |
};
|
|
Packit |
0bbbb1 |
|
|
Packit |
0bbbb1 |
#endif
|
|
Packit |
0bbbb1 |
|
|
Packit |
0bbbb1 |
/**
|
|
Packit |
0bbbb1 |
* iec61883_plug_get - Read a node's plug register.
|
|
Packit |
0bbbb1 |
* @h: A raw1394 handle.
|
|
Packit |
0bbbb1 |
* @n: The node id of the node to read
|
|
Packit |
0bbbb1 |
* @a: The CSR offset address (relative to base) of the register to read.
|
|
Packit |
0bbbb1 |
* @value: A pointer to a quadlet where the plug register's value will be stored.
|
|
Packit |
0bbbb1 |
*
|
|
Packit |
0bbbb1 |
* This function handles bus to host endian conversion. It returns 0 for
|
|
Packit |
0bbbb1 |
* suceess or -1 for error (errno available).
|
|
Packit |
0bbbb1 |
**/
|
|
Packit |
0bbbb1 |
int
|
|
Packit |
0bbbb1 |
iec61883_plug_get(raw1394handle_t h, nodeid_t n, nodeaddr_t a, quadlet_t *value);
|
|
Packit |
0bbbb1 |
|
|
Packit |
0bbbb1 |
|
|
Packit |
0bbbb1 |
/**
|
|
Packit |
0bbbb1 |
* iec61883_plug_set - Write a node's plug register.
|
|
Packit |
0bbbb1 |
* @h: A raw1394 handle.
|
|
Packit |
0bbbb1 |
* @n: The node id of the node to read
|
|
Packit |
0bbbb1 |
* @a: The CSR offset address (relative to CSR base) of the register to write.
|
|
Packit |
0bbbb1 |
* @value: A quadlet containing the new register value.
|
|
Packit |
0bbbb1 |
*
|
|
Packit |
0bbbb1 |
* This uses a compare/swap lock operation to safely write the
|
|
Packit |
0bbbb1 |
* new register value, as required by IEC 61883-1.
|
|
Packit |
0bbbb1 |
* This function handles host to bus endian conversion. It returns 0 for success
|
|
Packit |
0bbbb1 |
* or -1 for error (errno available).
|
|
Packit |
0bbbb1 |
**/
|
|
Packit |
0bbbb1 |
int
|
|
Packit |
0bbbb1 |
iec61883_plug_set(raw1394handle_t h, nodeid_t n, nodeaddr_t a, quadlet_t value);
|
|
Packit |
0bbbb1 |
|
|
Packit |
0bbbb1 |
/**
|
|
Packit |
0bbbb1 |
* High level plug access macros
|
|
Packit |
0bbbb1 |
*/
|
|
Packit |
0bbbb1 |
|
|
Packit |
0bbbb1 |
#define iec61883_get_oMPR(h,n,v) iec61883_plug_get((h), (n), CSR_O_MPR, (quadlet_t *)(v))
|
|
Packit |
0bbbb1 |
#define iec61883_set_oMPR(h,n,v) iec61883_plug_set((h), (n), CSR_O_MPR, *((quadlet_t *)&(v)))
|
|
Packit |
0bbbb1 |
#define iec61883_get_oPCR0(h,n,v) iec61883_plug_get((h), (n), CSR_O_PCR_0, (quadlet_t *)(v))
|
|
Packit |
0bbbb1 |
#define iec61883_set_oPCR0(h,n,v) iec61883_plug_set((h), (n), CSR_O_PCR_0, *((quadlet_t *)&(v)))
|
|
Packit |
0bbbb1 |
#define iec61883_get_oPCRX(h,n,v,x) iec61883_plug_get((h), (n), CSR_O_PCR_0+(4*(x)), (quadlet_t *)(v))
|
|
Packit |
0bbbb1 |
#define iec61883_set_oPCRX(h,n,v,x) iec61883_plug_set((h), (n), CSR_O_PCR_0+(4*(x)), *((quadlet_t *)&(v)))
|
|
Packit |
0bbbb1 |
#define iec61883_get_iMPR(h,n,v) iec61883_plug_get((h), (n), CSR_I_MPR, (quadlet_t *)(v))
|
|
Packit |
0bbbb1 |
#define iec61883_set_iMPR(h,n,v) iec61883_plug_set((h), (n), CSR_I_MPR, *((quadlet_t *)&(v)))
|
|
Packit |
0bbbb1 |
#define iec61883_get_iPCR0(h,n,v) iec61883_plug_get((h), (n), CSR_I_PCR_0, (quadlet_t *)(v))
|
|
Packit |
0bbbb1 |
#define iec61883_set_iPCR0(h,n,v) iec61883_plug_set((h), (n), CSR_I_PCR_0, *((quadlet_t *)&(v)))
|
|
Packit |
0bbbb1 |
#define iec61883_get_iPCRX(h,n,v,x) iec61883_plug_get((h), (n), CSR_I_PCR_0+(4*(x)), (quadlet_t *)(v))
|
|
Packit |
0bbbb1 |
#define iec61883_set_iPCRX(h,n,v,x) iec61883_plug_set((h), (n), CSR_I_PCR_0+(4*(x)), *((quadlet_t *)&(v)))
|
|
Packit |
0bbbb1 |
|
|
Packit |
0bbbb1 |
|
|
Packit |
0bbbb1 |
#ifdef __cplusplus
|
|
Packit |
0bbbb1 |
}
|
|
Packit |
0bbbb1 |
#endif
|
|
Packit |
0bbbb1 |
|
|
Packit |
0bbbb1 |
#endif /* _IEC61883_PRIVATE_H */
|