linux-can.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Kurt Van Dijck <kurt.van.dijck@eia.be>
To: Wolfgang <wutz@unterderbruecke.de>
Cc: linux-can@vger.kernel.org
Subject: Re: API calls
Date: Tue, 20 Dec 2011 12:00:59 +0100	[thread overview]
Message-ID: <20111220110059.GA311@e-circ.dyndns.org> (raw)
In-Reply-To: <loom.20111220T112550-205@post.gmane.org>

On Tue, Dec 20, 2011 at 10:35:05AM +0000, Wolfgang wrote:
> Hi Kurt,
> 
> I am sorry, but I am not too much in socket programming yet, and I can't find 
> much information about socketCAN. I am using the j1939.txt.
man socket
man bind
man sendto
man recv
....

Socket programming (not CAN specific) wasn't very easy for me neither the first time.

Since you seem to have gottten pretty far with a first test program,
I've corrected some mistakes/bad practices.

> 
> I am trying to create a socket and send something, the addr 0x80 I have defined
> before. What have I done wrong or how is it made right?
> 
> #include <sys/ioctl.h>
> #include <net/if.h>
> #include <string.h>
#include <linux/can.h>
> #include <linux/can/j1939.h>
> #include <unistd.h>
> #include <sys/socket.h>
> #include <stdio.h>
/* for if_nametoindex() */
#include <net/if.h>
> 
> 
> 
> int main ()
> {
>     int s;
>     s = socket(PF_CAN, SOCK_DGRAM, CAN_J1939);
> 	    
>     struct sockaddr_can addr;
> 
>     memset(&addr, 0, sizeof(addr));
>     addr.can_ifindex = ifindex("can0");
     addr.can_ifindex = if_nametoindex("can0");
>     addr.can_addr.j1939.name = TEST;
@name is used for dynamic addressing.
If you're using static addressing, assign J1939_NO_NAME (== 0, so leaving is fine too).
      addr.can_addr.j1939.name = J1939_NO_NAME;

>     addr.can_addr.j1939.addr = 0x80;
>     addr.can_addr.j1939.pgn = 0x12300;
> 
>     bind(s, (void *)&addr, sizeof(addr));
better is:
	int ret;

	if (bind(...) < 0)
		perror("bind failed");
	
	if (send(s, data, sizeof(data), 0) < 0)
		perror("send failed");

If sizeof(data) <= 8, then this
will broadcast a message with _can_id_ 0x1923ff80:
* (/*priority*/6 << 26) | (/*pgn*/0x12300 << 8) | (/*source*/0x80).
* PGN 0x123 is of type PDU1 => destination address in PDU-specific
* no destination given => broadcast (0xff).

>     
>     sendto(s, data, sizeof(data), 0, (void *)&addr, sizeof(addr));
likewise, this would send the message to ..., yourself again.
can_id will be 0x19238080

I hope this clears up a bit.
J1939 isn't very transparent on the composition of it's CAN identifiers.
The can-j1939 stack deals with all issues, safeguarding you from protocol violations
on the bus, but the stack may return error codes when you try something illegal.
You should check them (i.e. doing "if (send(...) < 0) perror(...);")

Kind regards,
Kurt

  reply	other threads:[~2011-12-20 11:01 UTC|newest]

Thread overview: 88+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-12-06 10:44 using j1939 wutz
2011-12-06 12:14 ` Kurt Van Dijck
2011-12-06 12:28   ` Kurt Van Dijck
2011-12-06 12:37   ` Wolfgang
2011-12-06 13:18     ` Kurt Van Dijck
2011-12-07  8:55       ` Wolfgang
2011-12-07 14:33         ` using j1939: j1939.h Kurt Van Dijck
2011-12-07 14:50           ` Kurt Van Dijck
2011-12-08 12:23             ` Wolfgang
2011-12-08 12:30               ` using j1939: userspace binaries Kurt Van Dijck
2011-12-08 12:48                 ` Wolfgang
2011-12-08 13:32                   ` Kurt Van Dijck
2011-12-08 14:27                     ` Wolfgang
2011-12-08 15:17                       ` using j1939: AF_CAN missing Kurt Van Dijck
2011-12-08 15:34                         ` Oliver Hartkopp
2011-12-08 15:19                       ` iproute2-j1939 Kurt Van Dijck
2011-12-08 15:56                         ` iproute2-j1939 Wolfgang
2011-12-08 16:44                         ` iproute2-j1939 Wolfgang
2011-12-09  6:55                           ` iproute2-j1939 Oliver Hartkopp
2011-12-09  7:28                             ` iproute2-j1939 Wolfgang
2011-12-09  7:58                               ` iproute2-j1939 Oliver Hartkopp
2011-12-09  8:07                           ` iproute2-j1939 Kurt Van Dijck
2011-12-09  8:12                             ` iproute2-j1939 Oliver Hartkopp
2011-12-09  9:02                             ` iproute2-j1939 Wolfgang
2011-12-09  9:48                               ` iproute2-j1939 Kurt Van Dijck
2011-12-09 10:56                                 ` iproute2-j1939 Wolfgang
2011-12-09 11:03                                   ` iproute2-j1939 Kurt Van Dijck
2011-12-09 11:12                                     ` iproute2-j1939 Wolfgang
2011-12-09 11:47                                       ` iproute2-j1939 Kurt Van Dijck
2011-12-09 12:14                                         ` iproute2-j1939 Wolfgang
2011-12-06 13:24     ` using j1939 Oliver Hartkopp
2011-12-09 13:47       ` Kurt Van Dijck
2011-12-09 13:58         ` Wolfgang
     [not found]           ` <20111209143224.GB309@e-circ.dyndns.org>
     [not found]             ` <20111209144911.144460@gmx.net>
2011-12-09 15:01               ` Kurt Van Dijck
2011-12-09 17:23                 ` Wolfgang Wagner
2011-12-12  8:12                   ` Kurt Van Dijck
2011-12-12 11:27                     ` Wolfgang
2011-12-12 12:40                       ` Kurt Van Dijck
2011-12-12 15:10                         ` Wolfgang
2011-12-13  9:53                           ` backporting can & can-j1939 Kurt Van Dijck
2011-12-13 15:20                             ` Wolfgang
2011-12-13 15:51                               ` Kurt Van Dijck
2011-12-13 18:49                                 ` Wolfgang
2011-12-14 13:29                                 ` Wolfgang
2011-12-14 15:43                                   ` Kurt Van Dijck
2011-12-14 18:19                                     ` Wolfgang
2011-12-14 20:42                                       ` Using " Kurt Van Dijck
2011-12-15  8:35                                         ` Wolfgang
2011-12-15  9:20                                           ` Cross-compiling iproute2-j1939 Kurt Van Dijck
2011-12-15 11:24                                             ` Wolfgang
2011-12-15 12:04                                               ` replacing iproute2 & can-utils with j1939 variants Kurt Van Dijck
2011-12-15 13:43                                                 ` Wolfgang
2011-12-15 14:00                                                   ` using can-j1939 Kurt Van Dijck
2011-12-15 14:49                                                     ` Wolfgang
2011-12-15 15:06                                                       ` Kurt Van Dijck
2011-12-15 15:16                                                         ` Wolfgang
2011-12-15 15:50                                                           ` Kurt Van Dijck
2011-12-15 16:17                                                             ` Wolfgang
2011-12-16  8:37                                                       ` Kurt Van Dijck
2011-12-16  9:00                                                         ` Wolfgang
2011-12-16  9:33                                                           ` Kurt Van Dijck
2011-12-16 14:29                                                             ` Wolfgang
2011-12-17 19:20                                                               ` Kurt Van Dijck
2011-12-20 10:35                                                                 ` API calls Wolfgang
2011-12-20 11:00                                                                   ` Kurt Van Dijck [this message]
2011-12-20 14:49                                                                     ` Wolfgang
2011-12-20 15:05                                                                       ` Kurt Van Dijck
2011-12-20 15:43                                                                         ` Wolfgang
2011-12-20 16:32                                                                           ` Kurt Van Dijck
2011-12-21 10:46                                                                             ` Wolfgang
2011-12-21 13:43                                                                               ` using can-j1939 Kurt Van Dijck
2011-12-21 15:11                                                                                 ` Wolfgang
2011-12-21 15:53                                                                                   ` Kurt Van Dijck
2011-12-22 13:06                                                                                     ` Wolfgang
2011-12-23 11:04                                                                                       ` Kurt Van Dijck
2011-12-28 10:49                                                                                         ` Wolfgang
2012-01-04  9:47                                                                                           ` Kurt Van Dijck
2012-01-04 16:28                                                                                             ` recv list Wolfgang
2012-01-04 20:41                                                                                               ` Kurt Van Dijck
2012-01-05 10:55                                                                                                 ` Wolfgang
2012-01-05 12:09                                                                                                   ` Kurt Van Dijck
2012-01-05 21:24                                                                                                     ` Wolfgang
2012-01-06 12:25                                                                                                       ` Kurt Van Dijck
2012-01-06 18:25                                                                                                         ` Wolfgang
2012-01-09  9:33                                                                                                           ` Kurt Van Dijck
2012-01-09 10:02                                                                                                             ` Changing addr with bind() Kurt Van Dijck
2012-01-09 10:23                                                                                                               ` Kurt Van Dijck
2012-01-09 10:46                                                                                                         ` recv list Wolfgang

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=20111220110059.GA311@e-circ.dyndns.org \
    --to=kurt.van.dijck@eia.be \
    --cc=linux-can@vger.kernel.org \
    --cc=wutz@unterderbruecke.de \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).