1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
| // Classe CAN pour MODULE VMOD-ICAN3OS1.9 sur BAB40
// Constantes symboliques a utiliser pour la vitesse
#define BTR_1MB 0x2300 /* 1 MBaud */
#define BTR_800KB 0x2500 /* 800 KBaud */
#define BTR_500KB 0x1c00 /* 500 KBaud */
#define BTR_250KB 0x1c01 /* 250 KBaud */
#define BTR_125KB 0x1c03 /* 125 KBaud */
#define BTR_100KB 0x34c7 /* 100 KBaud */
#define BTR_62_5KB 0xbac7 /* 62.5 KBaud */
#define BTR_50KB 0x34cf /* 50 KBaud */
#define BTR_20KB 0x7fcf /* 20 KBaud */
#define BTR_10KB 0x7fdf /* 10 KBaud */
class Can
{
protected:
int fd; // descripteur CAN
public:
// constructeur
// initialise le module VMOD-ICAN3OS1.9 sur BAB40
// connecte une resistance de 120 ohms sur le bus
// initialise la vitesse a celle passee en argument
// prepare le module pour l'envoi et la reception
// de trames CAN 20.A ou CAN 20.B de type data ou remote
Can(int vitesse);
// destructeur
// deconnecte le module VMOD-ICAN3OS1.9 du bus CAN
// ferme le peripherique et libere les zones allouees
~Can();
// Methodes Out_data (2.0A et 2.0B
// Envoi d'une trame de donnees (data frame) sans echo ni confirmation
// id est l'identifiant de la trame
// P_donnees pointe les donnees a envoyer
// len est le nombre de donnees maxi (len de 0 a 8)
// renvoie 0 pour OK -1 pour erreur
int Out_data_0A(int id, unsigned char* P_donnees, int len);
int Out_data_0B(int id, unsigned char* P_donnees, int len);
// Methodes Out_remote (2.0A et 2.0B
// Envoi d'une trame de requete (remote frame)
// id est l'identifiant de la trame
// len est le nombre de donnees attendues (0 a 8)
// renvoie 0 pour OK -1 pour erreur
int Out_remote_0A(int id,int len);
int Out_remote_0B(int id,int len);
// Methode In
//attend toute trame
//renvoie 0 pour OK -1 pour erreur
//si OK, retourne :
// le type dans type (0 pour 2.0A, 1 pour 2.0B)
// l'identifiant dans id
// la nature de la trame dans rem (0 pour data, 1 pour remote)
// le nombre de donnees dans len
// les donnees a partir de l'adresse pointee par P_data
int In(int *type,int*id,int*rem ,unsigned char*P_data,int*len);
}; |
Partager