MR CS2MS2
 Alle Datenstrukturen Dateien Funktionen Variablen Makrodefinitionen Seiten
mr_cs2ms2.h
gehe zur Dokumentation dieser Datei
1 #ifndef MR_CS2MS2_H
2 #define MR_CS2MS2_H
3 
12 #include <unistd.h>
13 #include <sys/socket.h>
14 #include <arpa/inet.h>
15 #include <linux/can.h>
16 #include <boolean.h>
17 #include <bitmask.h>
18 
22 #define MR_CS2_NUM_CAN_BYTES 8
23 
24 typedef struct {
25  unsigned long Id;
26  unsigned char Dlc; /* = number of data bytes */
27  unsigned char Data[MR_CS2_NUM_CAN_BYTES];
28  BOOL IsCs2;
29  unsigned Hash; /* in network order */
30  unsigned Response;
31  unsigned Command;
32  unsigned Prio;
34 
36 #define MrCs2IsCs2(CanData) (CanData)->IsCs2
37 #define MrCs2GetCommand(CanData) (CanData)->Command
38 #define MrCs2GetSystemSubcmd(CanData) (CanData)->Data[4]
39 #define MrCs2SetCommand(CanData,Cmd) (CanData)->Command=Cmd
40 #define MrCs2SetSystemSubcmd(CanData,SubCmd) (CanData)->Data[4]=SubCmd
41 #define MrCs2GetId(CanData) (CanData)->Id
42 #define MrCs2SetId(CanData,id) (CanData)->Id=id
43 #define MrCs2GetDlc(CanData) (CanData)->Dlc
44 #define MrCs2SetDlc(CanData,dlc) (CanData)->Dlc=dlc
45 #define MrCs2GetIsCs2(CanData) (CanData)->IsCs2
46 #define MrCs2SetIsCs2(CanData,is_cs2) (CanData)->IsCs2=is_cs2
47 #define MrCs2GetHash(CanData) (CanData)->Hash
48 #define MrCs2SetHash(CanData,hash) (CanData)->Hash=hash
49 #define MrCs2GetResponse(CanData) (CanData)->Response
50 #define MrCs2SetResponse(CanData,response) (CanData)->Response=response
51 #define MrCs2GetPrio(CanData) (CanData)->Prio
52 #define MrCs2SetPrio(CanData,prio) (CanData)->Prio=prio
53 #define MrCs2GetData(CanData) (CanData)->Data
54 
55 /* Anmeldung */
56 #define MS1_CAN_ID_NODE_SHIFT 0
57 #define MS1_CAN_ID_DIRECTION_SHIFT 7
58 #define MS1_CAN_ID_MID_SHIFT 8
59 #define MS1_CAN_ID_STUFE_SHIFT 15
60 #define MS1_CAN_ID_UID_SHIFT 18
61 #define MS1_CAN_ID_PRIO_SHIFT 26
62 
63 #define MS1_CAN_ID_NODE_MASK BIT_MASK( 0, 6)
64 #define MS1_CAN_ID_DIRECTION_MASK BIT_MASK( 7, 7)
65 #define MS1_CAN_ID_MID_MASK BIT_MASK( 8,14)
66 #define MS1_CAN_ID_STUFE_MASK BIT_MASK(15,17)
67 #define MS1_CAN_ID_UID_MASK BIT_MASK(18,25)
68 #define MS1_CAN_ID_PRIO_MASK BIT_MASK(26,28)
69 
70 /* Aufruest/Betriebsphase */
71 #define MS1_CAN_ID_CMD_SHIFT 7
72 #define MS1_CAN_ID_OBJECT_SHIFT 10
73 #define MS1_CAN_ID_HANDLE1_SHIFT 10
74 #define MS1_CAN_ID_HANDLE2_SHIFT 18
75 
76 #define MS1_CAN_ID_CMD_MASK BIT_MASK( 7, 9)
77 #define MS1_CAN_ID_OBJECT_MASK BIT_MASK(10,25)
78 #define MS1_CAN_ID_HANDLE1_MASK BIT_MASK(10,25)
79 #define MS1_CAN_ID_HANDLE2_MASK BIT_MASK(10,25)
80 
82 #define MR_CS2_UDP_LOCAL_PORT 15731
83 #define MR_CS2_UDP_REMOTE_PORT 15730
84 #define MR_CS2_UDP_LENGTH 13
85 
87 #define MR_ETH_CS2_RCV_ERROR -1
88 #define MR_ETH_CS2_RCV_CLOSED 0
89 #define MR_ETH_CS2_RCV_OK 1
90 
91 #define MrEthCs2Close(socket) close(socket)
92 
93 void MrEthCs2Encode(char *UdpFrame, MrCs2CanDataType *CanMsg);
94 void MrEthCs2Decode(MrCs2CanDataType *CanMsg, char *UdpFrame);
95 int MrEthCs2StartServer(void);
96 int MrEthCs2StartBcServer(void);
97 int MrEthCs2StartAppServer(void);
98 int MrEthCs2Accept(int ServSock);
99 void MrEthCs2MkBcAddr(struct sockaddr_in *baddr, char *IpAddr);
100 int MrEthCs2Recv(int Socket, struct sockaddr_in *ClntAddr, char *Data);
101 void MrEthCs2SendTo(int Socket, struct sockaddr_in *baddr, char *Data);
102 void MrEthCs2Send(int Socket, char *Data);
103 int MrEthCs2ConnectClient(void);
104 int MrEthCs2ConnectTcpClient(struct sockaddr_in *UdpSrvAddr);
105 
106 void MrCs2Decode(MrCs2CanDataType *CanMsg, struct can_frame *CanFrame);
107 void MrCs2Encode(MrCs2CanDataType *CanMsg, struct can_frame *CanFrame);
108 
109 void MrCs2DumpCanMsg(MrCs2CanDataType *CanMsg, char *Info);
110 void MrCs2Trace(MrCs2CanDataType *CanMsg);
111 
112 #endif