Tuesday, December 23, 2008

User Timer in Linux/Unix


#include <sys/time.h >
#include
<signal.h >
#include <stdlib.h >
#include <stdio.h >

#define MAX_COUNT 100

/* This flag controls termination of the main loop. */
volatile sig_atomic_t counter = 0;

/* The signal handler just clears the flag and re-enables itself. */
void
catch_alarm (int sig)
{
counter++;
signal (sig, catch_alarm);
// printf("\nCatch an alarm!\n");
}


void do_stuff (void)
{
static unsigned long c = 0;
printf ("Doing stuff while waiting for alarm (myCounter = %u, Counter=%u) \r", ++c, counter);
}

void set_timer_val(struct itimerval *t, const unsigned long ival_usec, const unsigned int val_usec)
{
//period between successive timer interrupts
t->it_interval.tv_usec = ival_usec % 1000000;
t->it_interval.tv_sec = ival_usec / 1000000;
//period between now and the first timer interrupt
t->it_value.tv_usec = val_usec % 1000000;
t->it_value.tv_sec = val_usec / 1000000;
}

int main (void)
{
struct itimerval ival, oval;

/* Establish a handler for SIGALRM signals. */
signal (SIGALRM, catch_alarm);

/* Set an alarm to go off in a little while. */
// one-shot timer
set_timer_val(&ival, 1000000, 500000);
setitimer (ITIMER_REAL, &ival, &oval);

/* Check the flag once in a while to see when to quit. */
while (counter < MAX_COUNT)
do_stuff ();

printf("\n");
return EXIT_SUCCESS;
}

Sunday, December 21, 2008

Creative XtremeGamer on Linux is Ready

The XFi driver is now available from Creative website. It's the first version (I think it is the first collaboration result between CreativeLabs and ALSA community). Although it supports very limited (very basic features: 2.0 speakers, no enhanced audio processing etc.) right now. At least, my OpenSUSE can spit out sound!

Get it from here.
extract it, but don't make it yet. Modify ctdrv.h. In my case, it shows like below:


#ifndef CTDRV_H
#define CTDRV_H

#define PCI_VENDOR_CREATIVE 0x1102
#define PCI_DEVICE_CREATIVE_20K1 0x0005
#define PCI_DEVICE_CREATIVE_20K2 0x000B
#define PCI_SUBVENDOR_CREATIVE 0x1102
#define PCI_SUBSYS_CREATIVE_SB0760 0x0024
//#define PCI_SUBSYS_CREATIVE_SB0880 0x0041
#define PCI_SUBSYS_CREATIVE_SB0880 0x6003

#define PCI_SUBSYS_CREATIVE_HENDRIX 0x6000
//#define PCI_SUBSYS_CREATIVE_HENDRIX 0x6003

#define CT_XFI_DMA_MASK 0xffffffffUL /* 32 bits */

That is because when I do:

Make a sound card as default in Linux

In the case that we have more than one sound-card, but to select one of them as the default sound-card, copy the following to ~/.asoundrc. In the example below, it makes the card 1 as the default (type "aplay -l" from shell to see all the cards installed and their associated card #).


pcm.!default {
type hw
card 1
}
ctl.!default {
type hw
card 1
}