• Stefan Knoblich's avatar
    ftmod_misdn: More reworking of b-channel audio tx handling. · a856d81a
    Stefan Knoblich 提交于
    Use the amount of audio data received in misdn_read() to determine how many
    bytes we need to send to the b-channel (= how much free space is left
    in the b-channel tx queue). (This is how libosmo-abis and LCR handle it too.)
    
    A pipe is used as a poll()-able audio tx buffer (filled in misdn_write()):
    FTDM_WRITE wait requests are currently poll()-ed on the input side of the pipe,
    whereas FTDM_READ and _EVENT requests are poll()-ed on the b-channel socket itself.
    
    For every N-bytes of audio data read from the b-channel in misdn_read(),
    we try to get as much out of the tx pipe, convert it into the ISDN_P_B_RAW
    format and send it to the b-channel socket.
    
    If there's less than N-bytes left in the pipe, we fill the remaining buffer
    with silence to avoid buffer underflows.
    
    B-Channel handling overview:
    
      - misdn_wait(FTDM_WRITE) on audio pipe
    
      - misdn_write() put audio data into pipe
    
      - misdn_wait(FTDM_READ) for next incoming mISDN
        message on b-channel socket
    
      - misdn_read() handle mISDN event, for PH_DATA_IND:
    
          - Write data into channel buffer and convert
            to a/u-law using misdn_convert_audio_bits()
    
          - Try to fetch N-bytes from audio pipe
    
          - If not enough bytes in pipe: fill remaining space with silence
    
          - Convert audio to raw format
    
          - Send to b-channel (PH_DATA_REQ)
    
    Known problems / bugs / further investigation:
    
       1. Bridge aborted by "Write Buffer 0 bytes Failed!" error from switch_core_io.c.
          This is "fixed" by _not_ setting the b-channel sockfd to non-blocking mode.
    
       2. Audio glitches (maybe caused by FTDM_WRITE misdn_wait() handling or blocking I/O on sockfd?)
    
       3. misdn_read() EBUSY error messages from sending data to b-channel sockfd after enabling channel.
    Signed-off-by: 's avatarStefan Knoblich <stkn@openisdn.net>
    a856d81a
名称
最后提交
最后更新
..
ftmod 正在载入提交数据...
include 正在载入提交数据...
isdn 正在载入提交数据...
ss7 正在载入提交数据...
detect_dtmf.c 正在载入提交数据...
detect_tones.c 正在载入提交数据...
fsk.c 正在载入提交数据...
ftdm_buffer.c 正在载入提交数据...
ftdm_call_utils.c 正在载入提交数据...
ftdm_callerid.c 正在载入提交数据...
ftdm_config.c 正在载入提交数据...
ftdm_cpu_monitor.c 正在载入提交数据...
ftdm_dso.c 正在载入提交数据...
ftdm_io.c 正在载入提交数据...
ftdm_queue.c 正在载入提交数据...
ftdm_sched.c 正在载入提交数据...
ftdm_state.c 正在载入提交数据...
ftdm_threadmutex.c 正在载入提交数据...
ftdm_variables.c 正在载入提交数据...
g711.c 正在载入提交数据...
hashtable.c 正在载入提交数据...
hashtable_itr.c 正在载入提交数据...
libteletone_detect.c 正在载入提交数据...
libteletone_generate.c 正在载入提交数据...
priserver.c 正在载入提交数据...
sangoma_pri.c 正在载入提交数据...
sangoma_pri.h 正在载入提交数据...
testanalog.c 正在载入提交数据...
testapp.c 正在载入提交数据...
testcid.c 正在载入提交数据...
testisdn.c 正在载入提交数据...
testpri.c 正在载入提交数据...
testr2.c 正在载入提交数据...
testtones.c 正在载入提交数据...
uart.c 正在载入提交数据...