int STDCALL clock_domain_descriptor_imp::send_get_clock_source_cmd(void * notification_id) { struct jdksavdecc_frame cmd_frame; struct jdksavdecc_aem_command_get_clock_source aem_cmd_get_clk_src; ssize_t aem_cmd_get_clk_src_returned; memset(&aem_cmd_get_clk_src, 0, sizeof(aem_cmd_get_clk_src)); /***************************************** AECP Common Data ******************************************/ aem_cmd_get_clk_src.aem_header.aecpdu_header.controller_entity_id = base_end_station_imp_ref->get_adp()->get_controller_entity_id(); // Fill aem_cmd_get_clk_src.sequence_id in AEM Controller State Machine aem_cmd_get_clk_src.aem_header.command_type = JDKSAVDECC_AEM_COMMAND_GET_CLOCK_SOURCE; /****************** AECP Message Specific Data ***************/ aem_cmd_get_clk_src.descriptor_type = descriptor_type(); aem_cmd_get_clk_src.descriptor_index = descriptor_index(); /***************************** Fill frame payload with AECP data and send the frame ***********************/ aecp_controller_state_machine_ref->ether_frame_init(base_end_station_imp_ref->mac(), &cmd_frame, ETHER_HDR_SIZE + JDKSAVDECC_AEM_COMMAND_GET_CLOCK_SOURCE_COMMAND_LEN); aem_cmd_get_clk_src_returned = jdksavdecc_aem_command_get_clock_source_write(&aem_cmd_get_clk_src, cmd_frame.payload, ETHER_HDR_SIZE, sizeof(cmd_frame.payload)); if (aem_cmd_get_clk_src_returned < 0) { log_imp_ref->post_log_msg(LOGGING_LEVEL_ERROR, "aem_cmd_get_clk_src_write error\n"); assert(aem_cmd_get_clk_src_returned >= 0); return -1; } aecp_controller_state_machine_ref->common_hdr_init(JDKSAVDECC_AECP_MESSAGE_TYPE_AEM_COMMAND, &cmd_frame, base_end_station_imp_ref->entity_id(), JDKSAVDECC_AEM_COMMAND_GET_CLOCK_SOURCE_COMMAND_LEN - JDKSAVDECC_COMMON_CONTROL_HEADER_LEN); system_queue_tx(notification_id, CMD_WITH_NOTIFICATION, cmd_frame.payload, cmd_frame.length); return 0; }
int STDCALL clock_domain_descriptor_imp::send_get_clock_source_cmd(void *notification_id, uint16_t desc_index) { struct jdksavdecc_frame *ether_frame; struct jdksavdecc_aem_command_get_clock_source aem_cmd_get_clk_src; int aem_cmd_get_clk_src_returned; ether_frame = (struct jdksavdecc_frame *)malloc(sizeof(struct jdksavdecc_frame)); /***************************************** AECP Common Data ********************************************/ aem_cmd_get_clk_src.controller_entity_id = base_end_station_imp_ref->get_adp()->get_controller_guid(); // Fill aem_cmd_get_clk_src.sequence_id in AEM Controller State Machine aem_cmd_get_clk_src.command_type = JDKSAVDECC_AEM_COMMAND_GET_CLOCK_SOURCE; /************************** AECP Message Specific Data ************************/ aem_cmd_get_clk_src.descriptor_type = JDKSAVDECC_DESCRIPTOR_CLOCK_DOMAIN; aem_cmd_get_clk_src.descriptor_index = desc_index; /******************************** Fill frame payload with AECP data and send the frame ***************************/ aecp::ether_frame_init(base_end_station_imp_ref, ether_frame); aem_cmd_get_clk_src_returned = jdksavdecc_aem_command_get_clock_source_write(&aem_cmd_get_clk_src, ether_frame->payload, aecp::CMD_POS, sizeof(ether_frame->payload)); if(aem_cmd_get_clk_src_returned < 0) { avdecc_lib::log_ref->logging(avdecc_lib::LOGGING_LEVEL_ERROR, "aem_cmd_get_clk_src_write error\n"); assert(aem_cmd_get_clk_src_returned >= 0); return -1; } aecp::common_hdr_init(ether_frame, base_end_station_imp_ref->get_end_station_guid()); system_queue_tx(notification_id, avdecc_lib::CMD_WITH_NOTIFICATION, ether_frame->payload, ether_frame->length); free(ether_frame); return 0; }