All of lore.kernel.org
 help / color / mirror / Atom feed
From: David Wiebe <dwiebe2@domain.hid>
To: xenomai@xenomai.org
Subject: Re: [Xenomai-help] rt_dev_ioctl
Date: Wed, 22 Jun 2011 20:35:33 -0700	[thread overview]
Message-ID: <4E02B485.8040803@domain.hid> (raw)
In-Reply-To: <4E023966.1080603@domain.hid>

Hello,

The program included in this email compiles and runs on my beagleboard 
xm. The compiler gives no warnings or anything.

Once I prepend an ioctl call with rt_dev_, I get the following

david@domain.hid$ 
arm-none-linux-gnueabi-gcc -o xenomai-spi-eth-00002 $CFLAGS 
xenomai-spi-eth-00002.c $LDFLAGS -I 
/home/david/122720101858-beagleboard-working-set/kernel/linux/include/
/tmp/cc9aLEWN.o: In function `main':
xenomai-spi-eth-00002.c:(.text+0x334): undefined reference to `rt_dev_ioctl'
collect2: ld returned 1 exit status

I'm perplexed because as I understand it including rtdm/rtdm.h should 
allow the function rt_dev_ioctl to be used.

In a previous email I received, it was suggested I change the skin to 
rtdm. I set both skin to rtdm. This gave me a different set of errors 
referencing rt_task_set_periodic and the like.


Thanks for reading this,

Sincerely,

David

CFLAGS=`DESTDIR=/home/david/sdir 
/home/david/sdir/usr/xenomai/bin/xeno-config --skin native --cflags`

LDFLAGS=`DESTDIR=/home/david/sdir 
/home/david/sdir/usr/xenomai/bin/xeno-config --skin native --ldflags`


#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/ioctl.h>
#include <signal.h>
#include <sys/mman.h>

#include <getopt.h>
#include <linux/types.h>
#include <linux/spi/spidev.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>

#include <native/task.h>
#include <native/timer.h>
#include <native/pipe.h>
#include <rtdk.h>
#include <rtdm/rtipc.h>
#include <rtdm/rtdm.h>
#include <rtdm/rtcan.h>

RT_TASK blink_task;

#define TIMESLEEP 1000000 /* 1 msec(ns) */

#define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0]))
#define PORT           8080
#define HOST           "192.168.1.101"
#define DIRSIZE        8192
#define    HIGH        1
#define    LOW        0

#define HIGH_TIME    12
#define    LOW_TIME    1
#define    TIME_USEC    0

static const char *device = "/dev/spidev3.0";
static uint8_t mode;
static uint8_t bits = 8;
static uint32_t speed = 11000000;
//static uint16_t delay=1;


int fd;
FILE    *fp;
FILE    *fpx;
char    set_value[4];
int     state;
int    ret = 0;
//struct    sockaddr_in sin;
struct    sockaddr_in pin;
struct    hostent *hp;
int    sd;
char    hostname[100];
char    return_array[400];
int     i;
void blink(void *arg __attribute__((__unused__)))
{
     uint8_t tx[] = {
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
     };
     uint8_t rx[ARRAY_SIZE(tx)] = {0, };
     struct spi_ioc_transfer tr = {
         .tx_buf = (unsigned long)tx,
         .rx_buf = (unsigned long)rx,
         .len = ARRAY_SIZE(tx),
         .delay_usecs = TIME_USEC,
         .speed_hz = speed,
         .bits_per_word = bits,
     };
      rt_task_set_periodic(NULL, TM_NOW, TIMESLEEP);
     if (ret == -1)
         printf("can't set spi mode");
     while(1)
     {
         rt_task_wait_period(NULL);
     ret = ioctl(fd, SPI_IOC_MESSAGE(1), &tr);
     for(i = 0;i < 360;i++)
         {
         return_array[i] = 68;
         }
     return_array[359] = 0;

     if (ret < 1)
         printf("can't send spi message");

     if (send(sd, return_array, strlen(return_array), 0) == -1)
             {
             perror("send");
             exit(1);
             }
     }
}

void catch_signal() {}

int main(void)
{
     signal(SIGTERM, catch_signal);
     signal(SIGINT, catch_signal);

     /* Avoids memory swapping for this program */
     mlockall(MCL_CURRENT|MCL_FUTURE);

        fd = open(device, O_RDWR);
   //     fd = rt_dev_open(device, O_RDWR);
     if (fd < 0)
         printf("can't open device");

     mode |= SPI_CPHA;
/*
      * spi mode
      */
     ret = ioctl(fd, SPI_IOC_WR_MODE, &mode);
     if (ret == -1)
         printf("can't set spi mode");

     ret = ioctl(fd, SPI_IOC_RD_MODE, &mode);
     if (ret == -1)
         printf("can't get spi mode");

     /*
      * bits per word
      */
     ret = ioctl(fd, SPI_IOC_WR_BITS_PER_WORD, &bits);
     if (ret == -1)
         printf("can't set bits per word");

     ret = ioctl(fd, SPI_IOC_RD_BITS_PER_WORD, &bits);
     if (ret == -1)
         printf("can't get bits per word");

     /*
      * max speed hz
      */
     ret = ioctl(fd, SPI_IOC_WR_MAX_SPEED_HZ, &speed);
     if (ret == -1)
         printf("can't set max speed hz");

     ret = ioctl(fd, SPI_IOC_RD_MAX_SPEED_HZ, &speed);
     if (ret == -1)
         printf("can't get max speed hz");
     /************************************************/
     /*    Ethernet stuff                */
     /************************************************/
     strcpy(hostname,"192.168.0.101");//HOST);


     /* go find out about the desired host machine */
     if ((hp = gethostbyname(hostname)) == 0)
         {
         perror("gethostbyname");
         exit(1);
         }

     /* fill in the socket structure with host information */
     memset(&pin, 0, sizeof(pin));
     pin.sin_family = AF_INET;
     pin.sin_addr.s_addr = ((struct in_addr *)(hp->h_addr))->s_addr;
     pin.sin_port = htons(PORT);

     /* grab an Internet domain socket */
     if ((sd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
         {
         perror("socket");
         exit(1);
         }

     /* connect to PORT on HOST */
     if (connect(sd,(struct sockaddr *) &pin, sizeof(pin)) == -1)
         {
         perror("connect");
         exit(1);
         }

     /* Task Creation */
     rt_task_create(&blink_task, "blinkLed", 0, 99, 0);
     rt_task_start(&blink_task, &blink, NULL);
     getchar();
     rt_task_delete(&blink_task);
     close(fd);

     return 0;
}



  reply	other threads:[~2011-06-23  3:35 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-06-21 13:11 [Xenomai-help] regarding ARMv.s error suresh reddy
2011-06-21 14:02 ` Gilles Chanteperdrix
2011-06-22  7:19   ` Gilles Chanteperdrix
2011-06-22  8:43     ` [Xenomai-help] rt_dev_ioctl David Wiebe
2011-06-22  8:57       ` Philippe Gerum
2011-06-22 16:19         ` David Wiebe
2011-06-22 16:28           ` Philippe Gerum
2011-06-22 17:54             ` David Wiebe
2011-06-22 18:00               ` Gilles Chanteperdrix
2011-06-22 18:50                 ` David Wiebe
2011-06-23  3:35                   ` David Wiebe [this message]
2011-06-23  6:57                     ` Philippe Gerum

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4E02B485.8040803@domain.hid \
    --to=dwiebe2@domain.hid \
    --cc=xenomai@xenomai.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.