Exemple #1
0
static void onNewRawGyroData(msgPump_MsgID_t id, const void *buffer)
{
	if ((MSG_ID_GYRO_RAW_DATA == id) &&
		(NULL != buffer))
	{
		/* do post processing */
		const l3gd20_gyroDataRaw_t *data = (const l3gd20_gyroDataRaw_t*) buffer;
		imuData_t processed;

		processed.timestampUS = getSystemTimeUS();
		processed.v[0] = ((float)(*data)[0]) * L3GD20_SCALE;
		processed.v[1] = ((float)(*data)[1]) * L3GD20_SCALE;
		processed.v[2] = ((float)(*data)[2]) * L3GD20_SCALE;

		msgPump_postMessage(MSG_ID_GYRO_SCALED_DATA, &processed);
	}
}
Exemple #2
0
static void sineSurf_renderingFunction(cubeFrameBuf *buf)
{
	static systemTime_t lastUpdateTime = 0U;
	systemTime_t curtime = getSystemTimeUS();

		if (0 == lastUpdateTime)
		{
			lastUpdateTime = curtime;
		}

		if (lastUpdateTime + SINE_SURF_UPDATE_INTERVAL_US < curtime)
		{
			lastUpdateTime = getCurrentTime();

			g_phase += 2.f * M_PI / (SINE_SURF_ROUND_TIME_US / SINE_SURF_UPDATE_INTERVAL_US);

			sineSurf_draw(buf);
		}
}
Exemple #3
0
static void explosion_renderingFunction(cubeFrameBuf *buf)
{
    static systemTime_t lastTickTime = 0U;
    static bool isExploded = false;

    if (0U == lastTickTime)
    {
        lastTickTime = getSystemTimeUS();
    }
    systemTime_t curTime = getSystemTimeUS();

    if (lastTickTime + EXPLOSION_UPDATE_INTERVAL_US < curTime)
    {
        lastTickTime = getSystemTimeUS();
        if (false == isExploded)
        {
            memset(buf, 0, sizeof(*buf));
            (*buf)[z][y][x] = 1;
            ++z;
            if (z >= trigger_height)
            {
                (*buf)[z][y][x] = EXPLOSION_LAST_INTERVAL;
                isExploded = true;
                x = 0U;
            }
        } else
        {
            uint8_t i, j, k;
            bool needNoReset = false;
            for (i = 0U; i < CUBE_CONFIG_NUMBER_OF_LAYERS; ++i)
            {
                for (j = 0U; j < CUBE_CONFIG_NUMBER_OF_COLS; ++j)
                {
                    for (k = 0U; k < CUBE_CONFIG_NUMBER_OF_ROWS; ++k)
                    {
                        /* spawn if there is a neighbor alive */
                        if ((0 == (*buf)[i][j][k]) &&
                                (((i > 0) && (EXPLOSION_LAST_INTERVAL == (*buf)[i - 1][j][k])) ||
                                 ((i < 7) && (EXPLOSION_LAST_INTERVAL == (*buf)[i + 1][j][k])) ||
                                 ((j > 0) && (EXPLOSION_LAST_INTERVAL == (*buf)[i][j - 1][k])) ||
                                 ((j < 7) && (EXPLOSION_LAST_INTERVAL == (*buf)[i][j + 1][k])) ||
                                 ((k > 0) && (EXPLOSION_LAST_INTERVAL == (*buf)[i][j][k - 1])) ||
                                 ((k < 7) && (EXPLOSION_LAST_INTERVAL == (*buf)[i][j][k + 1]))))
                        {
                            (*buf)[i][j][k] = EXPLOSION_LAST_INTERVAL + 1;
                        } else
                        {
                            /* and die */
                            if (0 < (*buf)[i][j][k])
                            {
                                --(*buf)[i][j][k];
                                if (0 == (*buf)[i][j][k])
                                {
                                    (*buf)[i][j][k] = -1;
                                }
                            }
                        }

                        if (0 < (*buf)[i][j][k])
                        {
                            needNoReset |= true;
                        }
                    }
                }
            }
            if (false == needNoReset) /* we need a reset */
            {
                isExploded = false;
                x = getRandomNumber() % CUBE_CONFIG_NUMBER_OF_COLS;
                y = getRandomNumber() % CUBE_CONFIG_NUMBER_OF_ROWS;

                trigger_height = getRandomNumber() % CUBE_CONFIG_NUMBER_OF_LAYERS;

                x = CLIP_VAL(x, EXPLOSION_LAST_INTERVAL, CUBE_CONFIG_NUMBER_OF_COLS - EXPLOSION_LAST_INTERVAL);
                y = CLIP_VAL(y, EXPLOSION_LAST_INTERVAL, CUBE_CONFIG_NUMBER_OF_ROWS - EXPLOSION_LAST_INTERVAL);
                trigger_height = CLIP_VAL(trigger_height, EXPLOSION_LAST_INTERVAL, CUBE_CONFIG_NUMBER_OF_LAYERS - EXPLOSION_LAST_INTERVAL);

                z = 0;
            }
        }
    }
}
Exemple #4
0
static void rain_renderingFunction(cubeFrameBuf *buf)
{
	uint32_t randomNr = getRandomNumber();
	uint8_t x, y;
	uint8_t choice = randomNr % MAX_NUM_DROPLETS;
	static systemTime_t lastUpdateTime = 0U;
	static systemTime_t lastSpawnTime = 0U;
	systemTime_t curTime = getSystemTimeUS();

	memset(buf, 0, sizeof(*buf));

	if (0 == lastUpdateTime)
	{
		lastUpdateTime = getSystemTimeUS();
		lastSpawnTime = lastUpdateTime;
	}

	if (lastUpdateTime + DROPLET_FALL_INTERVALL_US < curTime)
	{
		lastUpdateTime = curTime;
		/* let the rain fall! */
		for (x = 0U; x < MAX_NUM_DROPLETS; ++x)
		{
			if (0xff != g_dropletPositions[x])
			{
				g_dropletPositions[x] -= 1;
			}
		}
	}

	if (lastSpawnTime + DROPLET_SPAWN_INTERVAL_US < curTime)
	{
		lastSpawnTime = curTime;

		if (0xff == g_dropletPositions[choice]) /* this one can be spawned */
		{
			g_dropletPositions[choice] = CUBE_CONFIG_NUMBER_OF_LAYERS - 1;
		}
	}


	for (x = 0U; x < CUBE_CONFIG_NUMBER_OF_COLS; ++x)
	{
		for (y = 0U; y < CUBE_CONFIG_NUMBER_OF_ROWS; ++y)
		{
			const uint8_t dropletNr = x * CUBE_CONFIG_NUMBER_OF_ROWS + y;
			if (0xff != g_dropletPositions[dropletNr])
			{
				uint8_t j;

				for (j = 0U; j < DROPLET_HEIGHT; ++j)
				{
					if (g_dropletPositions[dropletNr] + j < CUBE_CONFIG_NUMBER_OF_LAYERS)
					{
						(*buf)[g_dropletPositions[dropletNr] + j][x][y] = 1;
					}
				}
			}
		}
	}
}