diff --git a/libs/freetdm/src/include/zap_types.h b/libs/freetdm/src/include/zap_types.h index e8fe8bd78f..3f6d477243 100644 --- a/libs/freetdm/src/include/zap_types.h +++ b/libs/freetdm/src/include/zap_types.h @@ -296,6 +296,7 @@ typedef enum { ZAP_COMMAND_FLUSH_RX_BUFFERS, ZAP_COMMAND_FLUSH_BUFFERS, ZAP_COMMAND_SET_PRE_BUFFER_SIZE, + ZAP_COMMAND_SET_LINK_STATUS, ZAP_COMMAND_COUNT } zap_command_t; @@ -415,6 +416,12 @@ struct zap_state_map { }; typedef struct zap_state_map zap_state_map_t; +typedef enum zap_hw_link_status { + ZAP_HW_LINK_UNINITIALIZED = 0, + ZAP_HW_LINK_DISCONNECTED, + ZAP_HW_LINK_CONNECTED +} zap_hw_link_status_t; + typedef struct zap_channel zap_channel_t; typedef struct zap_event zap_event_t; typedef struct zap_sigmsg zap_sigmsg_t; diff --git a/libs/freetdm/src/ozmod/ozmod_wanpipe/ozmod_wanpipe.c b/libs/freetdm/src/ozmod/ozmod_wanpipe/ozmod_wanpipe.c index 3d681985fb..88a8aaf574 100644 --- a/libs/freetdm/src/ozmod/ozmod_wanpipe/ozmod_wanpipe.c +++ b/libs/freetdm/src/ozmod/ozmod_wanpipe/ozmod_wanpipe.c @@ -584,17 +584,36 @@ static ZIO_COMMAND_FUNCTION(wanpipe_command) case ZAP_COMMAND_GET_CAS_BITS: { #ifdef LIBSANGOMA_VERSION - unsigned char rbsbits; - err = sangoma_tdm_read_rbs(zchan->sockfd, &tdm_api, zchan->physical_chan_id, &rbsbits); - if (!err) { - ZAP_COMMAND_OBJ_INT = wanpipe_swap_bits(rbsbits); - } + unsigned char rbsbits; + err = sangoma_tdm_read_rbs(zchan->sockfd, &tdm_api, zchan->physical_chan_id, &rbsbits); + if (!err) { + ZAP_COMMAND_OBJ_INT = wanpipe_swap_bits(rbsbits); + } #else - // does sangoma_tdm_read_rbs is available here? + // does sangoma_tdm_read_rbs is available here? ZAP_COMMAND_OBJ_INT = zchan->rx_cas_bits; #endif } break; + case ZAP_COMMAND_SET_LINK_STATUS: + { + zap_hw_link_status_t status = ZAP_COMMAND_OBJ_INT; + char sangoma_status; + switch (status) { + case ZAP_HW_LINK_UNINITIALIZED: + sangoma_status = FE_UNITIALIZED; + break; + case ZAP_HW_LINK_DISCONNECTED: + sangoma_status = FE_DISCONNECTED; + break; + case ZAP_HW_LINK_CONNECTED: + sangoma_status = FE_CONNECTED; + break; + default: + return ZAP_FAIL; + } + err = sangoma_tdm_set_fe_status(zchan->sockfd, &tdm_api, status); + } default: break; };