示例#1
0
文件: aecp.c 项目: AVB-YJ/avdecc-cmd
int aecp_aem_check( const struct jdksavdecc_frame *frame,
                    struct jdksavdecc_aecpdu_aem *aem,
                    const struct jdksavdecc_eui64 controller_entity_id,
                    const struct jdksavdecc_eui64 target_entity_id,
                    uint16_t sequence_id )
{
    int r = -1;
    ssize_t pos = jdksavdecc_aecpdu_aem_read( aem, frame->payload, 0, frame->length );
    if ( pos > 0 )
    {
        struct jdksavdecc_aecpdu_common_control_header *h = &aem->aecpdu_header.header;
        if ( h->version == 0 && h->subtype == JDKSAVDECC_SUBTYPE_AECP && h->cd == 1 )
        {
            if ( h->message_type == JDKSAVDECC_AECP_MESSAGE_TYPE_AEM_RESPONSE )
            {
                if ( h->control_data_length >= JDKSAVDECC_AECPDU_AEM_LEN - JDKSAVDECC_COMMON_CONTROL_HEADER_LEN )
                {
                    if ( jdksavdecc_eui64_compare( &aem->aecpdu_header.controller_entity_id, &controller_entity_id ) == 0 )
                    {
                        if ( jdksavdecc_eui64_compare( &aem->aecpdu_header.header.target_entity_id, &target_entity_id ) == 0 )
                        {
                            if ( aem->aecpdu_header.sequence_id == sequence_id )
                            {
                                r = 0;
                            }
                        }
                    }
                }
            }
        }
    }

    return r;
}
示例#2
0
文件: aecp.cpp 项目: AVnu/avdecc-lib
    aecp::aecp(uint8_t *frame, size_t pos, size_t frame_len)
    {
        aecp_frame = (uint8_t *)malloc(frame_len * sizeof(uint8_t));
        memcpy(aecp_frame, frame, frame_len);
        aecpdu_aem_read_returned = jdksavdecc_aecpdu_aem_read(&aecpdu, aecp_frame, pos, frame_len);

        if(aecpdu_aem_read_returned < 0)
        {
            log_imp_ref->post_log_msg(LOGGING_LEVEL_ERROR, "aecpdu_aem_read error");
            assert(aecpdu_aem_read_returned >= 0);
        }
    }
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;
    }
}