void jdksavdecc_frame_print(struct jdksavdecc_printer *self, struct jdksavdecc_frame const *p, int dump_payload) { jdksavdecc_printer_print_label(self, "time (seconds)"); jdksavdecc_printer_print_uint64(self, p->time / 1000000); jdksavdecc_printer_printc(self, '.'); jdksavdecc_printer_print_uint64(self, p->time % 1000000); jdksavdecc_printer_print_eol(self); jdksavdecc_printer_print_label(self, "dest_address"); jdksavdecc_printer_print_eui48(self, p->dest_address); jdksavdecc_printer_print_eol(self); jdksavdecc_printer_print_label(self, "src_address"); jdksavdecc_printer_print_eui48(self, p->src_address); jdksavdecc_printer_print_eol(self); jdksavdecc_printer_print_label(self, "ethertype"); jdksavdecc_printer_print_uint16(self, p->ethertype); jdksavdecc_printer_print_eol(self); jdksavdecc_printer_print_label(self, "tpid"); jdksavdecc_printer_print_uint16(self, p->tpid); jdksavdecc_printer_print_eol(self); jdksavdecc_printer_print_label(self, "pcp"); jdksavdecc_printer_print_uint16(self, p->pcp); jdksavdecc_printer_print_eol(self); jdksavdecc_printer_print_label(self, "dei"); jdksavdecc_printer_print_uint16(self, p->dei); jdksavdecc_printer_print_eol(self); jdksavdecc_printer_print_label(self, "vid"); jdksavdecc_printer_print_uint16(self, p->vid); jdksavdecc_printer_print_eol(self); jdksavdecc_printer_print_label(self, "length"); jdksavdecc_printer_print_uint16(self, p->length); jdksavdecc_printer_print_eol(self); if (dump_payload) { jdksavdecc_printer_print_label(self, "payload"); jdksavdecc_printer_print_block(self, p->payload, p->length, 0, p->length); } }
void jdksavdecc_pdu_print( struct jdksavdecc_printer *self, const uint8_t *p, size_t len, int dump_payload ) { if ( len > 12 ) { int cd = jdksavdecc_common_control_header_get_cd( p, 0 ); uint8_t version = (uint8_t)jdksavdecc_common_control_header_get_version( p, 0 ); jdksavdecc_printer_print_label( self, "version" ); jdksavdecc_printer_print_uint8( self, version ); jdksavdecc_printer_print_eol( self ); jdksavdecc_printer_print_label( self, "cd and subtype" ); jdksavdecc_printer_print_uint16_name( self, jdksavdecc_pdu_print_cd_subtype, p[0] ); jdksavdecc_printer_print_eol( self ); if ( version == 0 ) { jdksavdecc_printer_print_label( self, "sv" ); if ( jdksavdecc_common_control_header_get_sv( p, 0 ) ) { jdksavdecc_printer_print( self, "valid" ); } else { jdksavdecc_printer_print( self, "not valid" ); } jdksavdecc_printer_print_eol( self ); if ( cd == 0 ) // version 0 stream data { jdksavdecc_printer_print_label( self, "mr" ); jdksavdecc_printer_print_uint8( self, (uint8_t)jdksavdecc_common_stream_header_get_mr( p, 0 ) ); jdksavdecc_printer_print_eol( self ); jdksavdecc_printer_print_label( self, "gv" ); jdksavdecc_printer_print_uint8( self, (uint8_t)jdksavdecc_common_stream_header_get_gv( p, 0 ) ); jdksavdecc_printer_print_eol( self ); jdksavdecc_printer_print_label( self, "tv" ); jdksavdecc_printer_print_uint8( self, (uint8_t)jdksavdecc_common_stream_header_get_tv( p, 0 ) ); jdksavdecc_printer_print_eol( self ); jdksavdecc_printer_print_label( self, "sequence_num" ); jdksavdecc_printer_print_uint8( self, (uint8_t)jdksavdecc_common_stream_header_get_sequence_num( p, 0 ) ); jdksavdecc_printer_print_eol( self ); jdksavdecc_printer_print_label( self, "tu" ); jdksavdecc_printer_print_uint8( self, (uint8_t)jdksavdecc_common_stream_header_get_tu( p, 0 ) ); jdksavdecc_printer_print_eol( self ); jdksavdecc_printer_print_label( self, "stream_id" ); jdksavdecc_printer_print_streamid( self, jdksavdecc_common_stream_header_get_stream_id( p, 0 ) ); jdksavdecc_printer_print_eol( self ); jdksavdecc_printer_print_label( self, "avtp_timestamp" ); jdksavdecc_printer_print_uint32( self, jdksavdecc_common_stream_header_get_avtp_timestamp( p, 0 ) ); jdksavdecc_printer_print_eol( self ); jdksavdecc_printer_print_label( self, "gateway_info" ); jdksavdecc_printer_print_uint32( self, jdksavdecc_common_stream_header_get_gateway_info( p, 0 ) ); jdksavdecc_printer_print_eol( self ); jdksavdecc_printer_print_label( self, "stream_data_length" ); jdksavdecc_printer_print_uint16( self, jdksavdecc_common_stream_header_get_stream_data_length( p, 0 ) ); jdksavdecc_printer_print_eol( self ); jdksavdecc_printer_print_label( self, "protocol_specific_header" ); jdksavdecc_printer_print_uint16( self, jdksavdecc_common_stream_header_get_protocol_specific_header( p, 0 ) ); jdksavdecc_printer_print_eol( self ); if ( dump_payload && len > JDKSAVDECC_COMMON_STREAM_HEADER_LEN ) { jdksavdecc_printer_print_label( self, "stream_data_payload" ); jdksavdecc_printer_print_block( self, p, len, JDKSAVDECC_COMMON_STREAM_HEADER_LEN, len ); } } else // version 0 control data { jdksavdecc_printer_print_label( self, "control_data" ); jdksavdecc_printer_print_uint8( self, (uint8_t)jdksavdecc_common_control_header_get_control_data( p, 0 ) ); jdksavdecc_printer_print_eol( self ); jdksavdecc_printer_print_label( self, "status" ); jdksavdecc_printer_print_uint8( self, (uint8_t)jdksavdecc_common_control_header_get_status( p, 0 ) ); jdksavdecc_printer_print_eol( self ); jdksavdecc_printer_print_label( self, "control_data_length" ); jdksavdecc_printer_print_uint16( self, (uint16_t)jdksavdecc_common_control_header_get_control_data_length( p, 0 ) ); jdksavdecc_printer_print_eol( self ); jdksavdecc_printer_print_label( self, "stream_id" ); jdksavdecc_printer_print_streamid( self, jdksavdecc_common_control_header_get_stream_id( p, 0 ) ); jdksavdecc_printer_print_eol( self ); } if ( dump_payload && len > JDKSAVDECC_COMMON_CONTROL_HEADER_LEN ) { jdksavdecc_printer_print_label( self, "payload" ); jdksavdecc_printer_print_block( self, p, len, JDKSAVDECC_COMMON_CONTROL_HEADER_LEN, len ); } } } }
void jdksavdecc_aecp_print(struct jdksavdecc_printer *self, struct jdksavdecc_aecpdu_common const *msg, void const *p, ssize_t pos, size_t len) { jdksavdecc_aecp_common_print(self,msg); switch( msg->header.message_type ) { // Todo: put more detail into printing of non-aem messages case JDKSAVDECC_AECP_MESSAGE_TYPE_AEM_COMMAND: { struct jdksavdecc_aecpdu_aem aem; if( jdksavdecc_aecpdu_aem_read(&aem,p,pos,len) > 0 ) { jdksavdecc_aem_command_print(self,&aem,p,pos,len); } break; } case JDKSAVDECC_AECP_MESSAGE_TYPE_AEM_RESPONSE: { struct jdksavdecc_aecpdu_aem aem; if( jdksavdecc_aecpdu_aem_read(&aem,p,pos,len) > 0 ) { jdksavdecc_aem_response_print(self,&aem,p,pos,len); } break; } case JDKSAVDECC_AECP_MESSAGE_TYPE_ADDRESS_ACCESS_COMMAND: case JDKSAVDECC_AECP_MESSAGE_TYPE_ADDRESS_ACCESS_RESPONSE: jdksavdecc_aecp_common_print(self,msg); jdksavdecc_printer_print_label(self,"tlv_count"); jdksavdecc_printer_print_uint16(self,jdksavdecc_aecp_aa_get_tlv_count(p,pos)); jdksavdecc_printer_print_eol(self); jdksavdecc_printer_print_label(self,"payload"); jdksavdecc_printer_print_block(self,p,len,pos+JDKSAVDECC_AECPDU_AA_LEN,pos+msg->header.control_data_length-(JDKSAVDECC_AECPDU_AA_LEN -JDKSAVDECC_COMMON_CONTROL_HEADER_LEN) ); jdksavdecc_printer_print_eol(self); break; case JDKSAVDECC_AECP_MESSAGE_TYPE_AVC_COMMAND: case JDKSAVDECC_AECP_MESSAGE_TYPE_AVC_RESPONSE: jdksavdecc_aecp_common_print(self,msg); jdksavdecc_printer_print_label(self,"payload"); jdksavdecc_printer_print_block(self,p,len,pos+JDKSAVDECC_AECPDU_COMMON_LEN,pos+msg->header.control_data_length-(JDKSAVDECC_AECPDU_COMMON_LEN -JDKSAVDECC_COMMON_CONTROL_HEADER_LEN) ); jdksavdecc_printer_print_eol(self); break; case JDKSAVDECC_AECP_MESSAGE_TYPE_HDCP_APM_COMMAND: case JDKSAVDECC_AECP_MESSAGE_TYPE_HDCP_APM_RESPONSE: jdksavdecc_aecp_common_print(self,msg); jdksavdecc_printer_print_label(self,"payload"); jdksavdecc_printer_print_block(self,p,len,pos+JDKSAVDECC_AECPDU_COMMON_LEN,pos+msg->header.control_data_length-(JDKSAVDECC_AECPDU_COMMON_LEN -JDKSAVDECC_COMMON_CONTROL_HEADER_LEN) ); jdksavdecc_printer_print_eol(self); break; case JDKSAVDECC_AECP_MESSAGE_TYPE_VENDOR_UNIQUE_COMMAND: case JDKSAVDECC_AECP_MESSAGE_TYPE_VENDOR_UNIQUE_RESPONSE: jdksavdecc_aecp_common_print(self,msg); jdksavdecc_printer_print_label(self,"payload"); jdksavdecc_printer_print_block(self,p,len,pos+JDKSAVDECC_AECPDU_COMMON_LEN,pos+msg->header.control_data_length-(JDKSAVDECC_AECPDU_COMMON_LEN -JDKSAVDECC_COMMON_CONTROL_HEADER_LEN) ); jdksavdecc_printer_print_eol(self); break; case JDKSAVDECC_AECP_MESSAGE_TYPE_EXTENDED_COMMAND: case JDKSAVDECC_AECP_MESSAGE_TYPE_EXTENDED_RESPONSE: jdksavdecc_aecp_common_print(self,msg); jdksavdecc_printer_print_label(self,"payload"); jdksavdecc_printer_print_block(self,p,len,pos+JDKSAVDECC_AECPDU_COMMON_LEN,pos+msg->header.control_data_length-(JDKSAVDECC_AECPDU_COMMON_LEN -JDKSAVDECC_COMMON_CONTROL_HEADER_LEN) ); jdksavdecc_printer_print_eol(self); break; default: jdksavdecc_aecp_common_print(self,msg); jdksavdecc_printer_print_label(self,"payload"); jdksavdecc_printer_print_block(self,p,len,pos+JDKSAVDECC_AECPDU_COMMON_LEN,pos+msg->header.control_data_length-(JDKSAVDECC_AECPDU_COMMON_LEN -JDKSAVDECC_COMMON_CONTROL_HEADER_LEN) ); jdksavdecc_printer_print_eol(self); break; } }