Esempio n. 1
0
/*! \brief The avmd session data initialization function
 * @author Eric des Courtis
 * @param avmd_session A reference to a avmd session
 * @param fs_session A reference to a FreeSWITCH session
 */
static void init_avmd_session_data(avmd_session_t *avmd_session,  switch_core_session_t *fs_session)
{
	/*! This is a worst case sample rate estimate */
    avmd_session->rate = 48000;
    INIT_CIRC_BUFFER(&avmd_session->b, BEEP_LEN(avmd_session->rate), FRAME_LEN(avmd_session->rate), fs_session);

    avmd_session->session = fs_session;
    avmd_session->pos = 0;
    avmd_session->state.last_beep = 0;
    avmd_session->state.beep_state = BEEP_NOTDETECTED;

    INIT_SMA_BUFFER(
        &avmd_session->sma_b,
        BEEP_LEN(avmd_session->rate) / SINE_LEN(avmd_session->rate),
        fs_session
    );
}
Esempio n. 2
0
int8_t frame_get_stream(struct frames_buffer *f_buf, void *dest_buf, uint16_t len, uint8_t *data_len)
{
	struct frame *frame_rec = &f_buf->frame_record[f_buf->tail];
	uint8_t fr_type;
	int8_t ret, f_ret = FRAME_OK;

	if (f_buf->cnt == 0 && f_buf->tail == f_buf->head) {
		return FRAME_BUF_EMPTY; // Buffer is EMPTY
	}

	if (len < FRAME_LEN(frame_rec))
		return -FRAME_ERR_NOMEM;
	
	ret = frame_decode(frame_rec, dest_buf,
		data_len, &fr_type);

	if (ret) {
		f_ret = ret;
	} else {
		if (fr_type == FRAME_START) {
			if (f_buf->start_found == 1) {
				f_buf->start_found = 0;
				return -FRAME_BRK_STREAM;
			} else {
				f_buf->start_found = 1;
			}
		} else if (fr_type == FRAME_END) {
			f_buf->start_found = 0;
			f_ret = FRAME_OK_END;
		} else if (fr_type == FRAME_SIMPLE) {
			if (f_buf->start_found == 1) {
				f_buf->start_found = 0;
				return -FRAME_BRK_STREAM;
			}
			f_ret = FRAME_OK_SIMPLE;
		}
	}

	FRAME_BUF_PTR_INC(f_buf->tail);
	f_buf->cnt--;

	return f_ret;
}
Esempio n. 3
0
int8_t frame_decode(struct frame *fr, void *data, uint8_t *data_len,
	uint8_t *type)
{
	uint8_t data_crc = 0xff, i;

	*data_len = FRAME_LEN(fr);
	*type = FRAME_TYPE(fr);

	data_crc = frame_crc_calc(data_crc, fr->header);
	for (i = 0; i < *data_len; i++) {
		data_crc = frame_crc_calc(data_crc, fr->payload[i]);
	}

	if (data_crc == fr->checksum) {
		memcpy(data, fr->payload, *data_len);
	} else {
		return -FRAME_ERR_CRC;
	}

	return FRAME_OK;
}