fp@1242: /***************************************************************************** fp@1242: * fp@1242: * $Id$ fp@1242: * fp@1242: ****************************************************************************/ fp@1242: fp@1249: #include fp@1249: #include fp@1249: #include fp@1249: #include fp@1249: #include fp@1249: #include fp@1249: #include fp@1247: #include fp@1247: fp@1242: #include "ecrt.h" fp@1242: fp@1249: #define PRIORITY 1 fp@1249: fp@1242: /****************************************************************************/ fp@1242: fp@1247: static unsigned int sig_alarms = 0; fp@1247: static unsigned int user_alarms = 0; fp@1247: fp@1247: /****************************************************************************/ fp@1247: fp@1247: void signal_handler(int signum) { fp@1247: switch (signum) { fp@1247: case SIGALRM: fp@1247: sig_alarms++; fp@1247: break; fp@1247: } fp@1247: } fp@1247: fp@1247: /****************************************************************************/ fp@1247: fp@1242: int main(int argc, char **argv) fp@1242: { fp@1244: ec_master_t *master; fp@1244: ec_domain_t *domain; fp@1246: ec_slave_config_t *sc; fp@1247: struct sigaction sa; fp@1247: struct itimerval tv; fp@1244: fp@1244: master = ecrt_request_master(0); fp@1242: if (!master) fp@1242: return -1; fp@1242: fp@1244: domain = ecrt_master_create_domain(master); fp@1244: if (!domain) fp@1244: return -1; fp@1244: fp@1246: sc = ecrt_master_slave_config(master, 0, 0, 0x00000002, 0x044C2C52); fp@1246: if (!sc) fp@1246: return -1; fp@1246: fp@1249: printf("Activating master...\n"); fp@1247: if (ecrt_master_activate(master)) fp@1247: return -1; fp@1247: fp@1249: #if PRIORITY fp@1249: pid_t pid = getpid(); fp@1249: if (setpriority(PRIO_PROCESS, pid, -19)) fp@1249: fprintf(stderr, "Warning: Failed to set priority: %s\n", fp@1249: strerror(errno)); fp@1249: #endif fp@1249: fp@1247: sa.sa_handler = signal_handler; fp@1247: sigemptyset(&sa.sa_mask); fp@1247: sa.sa_flags = 0; fp@1247: if (sigaction(SIGALRM, &sa, 0)) { fp@1247: fprintf(stderr, "Failed to install signal handler!\n"); fp@1247: return -1; fp@1247: } fp@1247: fp@1249: printf("Starting timer...\n"); fp@1247: tv.it_interval.tv_sec = 0; fp@1249: tv.it_interval.tv_usec = 100000; fp@1247: tv.it_value.tv_sec = 0; fp@1249: tv.it_value.tv_usec = 1000; fp@1247: if (setitimer(ITIMER_REAL, &tv, NULL)) { fp@1247: fprintf(stderr, "Failed to start timer: %s\n", strerror(errno)); fp@1247: return 1; fp@1247: } fp@1247: fp@1249: printf("Started.\n"); fp@1242: while (1) { fp@1247: sleep(1); fp@1247: fp@1249: #if 1 fp@1249: struct timeval t; fp@1249: gettimeofday(&t, NULL); fp@1249: printf("%u.%06u\n", t.tv_sec, t.tv_usec); fp@1249: #endif fp@1249: fp@1247: while (sig_alarms != user_alarms) { fp@1247: ecrt_master_receive(master); fp@1247: ecrt_master_send(master); fp@1247: fp@1247: user_alarms++; fp@1247: } fp@1242: } fp@1242: fp@1242: return 0; fp@1242: } fp@1242: fp@1242: /****************************************************************************/