Exemple #1
0
static inline qboolean ready_to_send_hacked( void ) {
    if( !cl_fuzzhack->integer ) {
        return qtrue; // packet drop hack disabled
    }

    if( cl.cmdNumber - cl.lastTransmitCmdNumberReal > 2 ) {
        return qtrue; // can't drop more than 2 cmds
    }

    return ready_to_send();
}
Exemple #2
0
static void mpc5xx_serial_putc(const char c)
{
	volatile immap_t *immr = (immap_t *)CONFIG_SYS_IMMR;

	/* Test for completition */
	if(ready_to_send()) {
#if defined(CONFIG_5xx_CONS_SCI1)
		immr->im_qsmcm.qsmcm_sc1dr = (short)c;
#else
		immr->im_qsmcm.qsmcm_sc2dr = (short)c;
#endif
		if(c == '\n') {
			if(ready_to_send());
#if defined(CONFIG_5xx_CONS_SCI1)
			immr->im_qsmcm.qsmcm_sc1dr = (short)'\r';
#else
			immr->im_qsmcm.qsmcm_sc2dr = (short)'\r';
#endif
		}
	}
}
Exemple #3
0
int playback_from_flash(void)
{
	int ret = 0;
	int i;
	int pos_buff = 0;
	uint32_t pos_flash = 0;
	uint32_t part_len = DATA_BUFF_LEN / 2;
	uint32_t part_bytes = part_len * SAI_DATA_BYTES;
	uint32_t total_size = get_audio_part_len();

	if (!aos_mutex_is_valid(&sai_mutex)) {
		KIDS_A10_PRT("aos_mutex_is_valid return false.\n");
		return -1;
	}
	ret = aos_mutex_lock(&sai_mutex, SAI_WAIT_TIMEOUT);
	if (ret != 0) {
		KIDS_A10_PRT("SAI is very busy now.\n");
		return -1;
	}

	if (!aos_sem_is_valid(&audio_sem)) {
		KIDS_A10_PRT("aos_sem_is_valid return false.\n");
		ret = -1;
		goto PB_EXIT;
	}
	ret = reinit_sai_and_dma(SAI_dir_tx_m2p);
	if (ret != 0) {
		ret = -1;
		goto PB_EXIT;
	}

	printf("Playback time is %f seconds!\n", get_run_time());

#ifdef FLASH_MONO_DATA
	ret = hal_flash_read(PART_FOR_AUDIO, &pos_flash, &data_buff[pos_buff], part_bytes);
	if (ret != 0) {
		ret = -1;
		goto PB_EXIT;
	}

	ready_to_send(data_buff, part_len);

	ret = HAL_SAI_Transmit_DMA(&hsai_BlockA1, (uint8_t *)data_buff, DATA_BUFF_LEN);
	if (ret != 0) {
		KIDS_A10_PRT("HAL_SAI_Transmit_DMA return failed.\n");
		ret = -1;
		goto PB_EXIT;
	}

	while (1) {
		/* Wait a callback event */
		while (UpdatePointer == -1) {
			aos_sem_wait(&audio_sem, DMA_WAIT_TIMEOUT);
			if (ret != 0)
				KIDS_A10_PRT("DMA timeout.\n");
		}

		pos_buff = UpdatePointer;
		UpdatePointer = -1;

		/* Upate the first or the second part of the buffer */
		ret = hal_flash_read(PART_FOR_AUDIO, &pos_flash, &data_buff[pos_buff], part_bytes / 2);
		if (ret != 0) {
			ret = -1;
			break;
		}

		ready_to_send(&data_buff[pos_buff], part_len / 2);

		/* check the end of the file */
		if ((pos_flash + part_bytes / 2) > total_size) {
			ret = HAL_SAI_DMAStop(&hsai_BlockA1);
			if (ret != 0) {
				KIDS_A10_PRT("HAL_SAI_DMAStop return failed.\n");
				ret = -1;
			}
			break;
		}

		if (UpdatePointer != -1) {
			/* Buffer update time is too long compare to the data transfer time */
			KIDS_A10_PRT("UpdatePointer error.\n");
			ret = -1;
			break;
		}
	}
#else
	ret = hal_flash_read(PART_FOR_AUDIO, &pos_flash, &data_buff[pos_buff], DATA_BUFF_LEN * SAI_DATA_BYTES);
	if (ret != 0) {
		ret = -1;
		goto PB_EXIT;
	}

	ret = HAL_SAI_Transmit_DMA(&hsai_BlockA1, (uint8_t *)data_buff, DATA_BUFF_LEN);
	if (ret != 0) {
		KIDS_A10_PRT("HAL_SAI_Transmit_DMA return failed.\n");
		ret = -1;
		goto PB_EXIT;
	}

	while (1) {
		/* Wait a callback event */
		while (UpdatePointer == -1) {
			aos_sem_wait(&audio_sem, DMA_WAIT_TIMEOUT);
			if (ret != 0)
				KIDS_A10_PRT("DMA timeout.\n");
		}

		pos_buff = UpdatePointer;
		UpdatePointer = -1;

		/* Upate the first or the second part of the buffer */
		ret = hal_flash_read(PART_FOR_AUDIO, &pos_flash, &data_buff[pos_buff], part_bytes);
		if (ret != 0) {
			ret = -1;
			break;
		}

		/* check the end of the file */
		if ((pos_flash + part_bytes) > total_size) {
			ret = HAL_SAI_DMAStop(&hsai_BlockA1);
			if (ret != 0) {
				KIDS_A10_PRT("HAL_SAI_DMAStop return failed.\n");
				ret = -1;
			}
			break;
		}

		if (UpdatePointer != -1) {
			/* Buffer update time is too long compare to the data transfer time */
			KIDS_A10_PRT("UpdatePointer error.\n");
			ret = -1;
			break;
		}
	}
#endif

PB_EXIT:
	ret = aos_mutex_unlock(&sai_mutex);
	if (ret != 0) {
		KIDS_A10_PRT("SAI release failed.\n");
	}

	return ret;
}
Exemple #4
0
/*
=================
CL_SendBatchedCmd
=================
*/
static void CL_SendBatchedCmd( void ) {
    int i, j, seq, bits;
    int numCmds, numDups;
    int totalCmds, totalMsec;
    size_t cursize;
    usercmd_t *cmd, *oldcmd;
    client_history_t *history, *oldest;
    byte *patch;

    // see if we are ready to send this packet
    if( !ready_to_send() ) {
        return;
    }

    // archive this packet
    seq = cls.netchan->outgoing_sequence;
    history = &cl.history[seq & CMD_MASK];
    history->cmdNumber = cl.cmdNumber;
    history->sent = cls.realtime;    // for ping calculation
    history->rcvd = 0;

    cl.lastTransmitTime = cls.realtime;
    cl.lastTransmitCmdNumber = cl.cmdNumber;
    cl.lastTransmitCmdNumberReal = cl.cmdNumber;

    // begin a client move command
    patch = SZ_GetSpace( &msg_write, 1 );

    // let the server know what the last frame we
    // got was, so the next message can be delta compressed
    if( cl_nodelta->integer || !cl.frame.valid /*|| cls.demowaiting*/ ) {
        *patch = clc_move_nodelta; // no compression
    } else {
        *patch = clc_move_batched;
        MSG_WriteLong( cl.frame.number );
    }

    Cvar_ClampInteger( cl_packetdup, 0, MAX_PACKET_FRAMES - 1 );
    numDups = cl_packetdup->integer;

    *patch |= numDups << SVCMD_BITS;

    // send lightlevel
    MSG_WriteByte( cl.lightlevel );

    // send this and the previous cmds in the message, so
    // if the last packet was dropped, it can be recovered
    oldcmd = NULL;
    totalCmds = 0;
    totalMsec = 0;
    for( i = seq - numDups; i <= seq; i++ ) {
        oldest = &cl.history[( i - 1 ) & CMD_MASK];
        history = &cl.history[i & CMD_MASK];

        numCmds = history->cmdNumber - oldest->cmdNumber;
        if( numCmds >= MAX_PACKET_USERCMDS ) {
            Com_WPrintf( "%s: MAX_PACKET_USERCMDS exceeded\n", __func__ );
            SZ_Clear( &msg_write );
            break;
        }
        totalCmds += numCmds;
        MSG_WriteBits( numCmds, 5 );
        for( j = oldest->cmdNumber + 1; j <= history->cmdNumber; j++ ) {
            cmd = &cl.cmds[j & CMD_MASK];
            totalMsec += cmd->msec;
            bits = MSG_WriteDeltaUsercmd_Enhanced( oldcmd, cmd, cls.protocolVersion );
#ifdef _DEBUG
            if( cl_showpackets->integer == 3 ) {
                MSG_ShowDeltaUsercmdBits_Enhanced( bits );
            }
#endif
            oldcmd = cmd;
        }
    }

    P_FRAMES++;

    //
    // deliver the message
    //
    cursize = cls.netchan->Transmit( cls.netchan, msg_write.cursize, msg_write.data, 1 );
#ifdef _DEBUG
    if( cl_showpackets->integer == 1 ) {
        Com_Printf( "%"PRIz"(%i) ", cursize, totalCmds );
    } else if( cl_showpackets->integer == 2 ) {
        Com_Printf( "%"PRIz"(%i) ", cursize, totalMsec );
    } else if( cl_showpackets->integer == 3 ) {
        Com_Printf( " | " );
    }
#endif

    SZ_Clear( &msg_write );
}