version_2.0
Dependents: cc3000_ping_demo_try_2
Fork of mbed by
Diff: CAN.h
- Revision:
- 11:1c1ebd0324fa
- Child:
- 12:f63353af7be8
diff -r fcb9359f0959 -r 1c1ebd0324fa CAN.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/CAN.h Fri Aug 28 12:10:11 2009 +0000 @@ -0,0 +1,207 @@ +/* mbed Microcontroller Library - can + * Copyright (c) 2009 ARM Limited. All rights reserved. + * rmeyer + */ + +#ifndef MBED_CAN_H +#define MBED_CAN_H + +#include "Base.h" +#include "platform.h" +#include "PinNames.h" +#include "PeripheralNames.h" + +#include "can_helper.h" + +#include <string.h> + +namespace mbed { + +/* Class: CANMessage + * + */ +class CANMessage : public CAN_Message { + +public: + + /* Constructor: CANMessage + * Creates empty CAN message. + */ + CANMessage() { + len = 8; + type = CANData; + format = CANStandard; + id = 0; + memset(data, 0, 8); + } + + /* Constructor: CANMessage + * Creates CAN message with specific content. + */ + CANMessage(int _id, const char *_data, char _len = 8, CANType _type = CANData, CANFormat _format = CANStandard) { + len = _len & 0xF; + type = _type; + format = _format; + id = _id; + memcpy(data, _data, _len); + } + + /* Constructor: CANMessage + * Creates CAN remote message. + */ + CANMessage(int _id, CANFormat _format = CANStandard) { + len = 0; + type = CANRemote; + format = _format; + id = _id; + memset(data, 0, 8); + } +#if 0 // Inhereted from CAN_Message, for documentation only + + /* Variable: id + * The message id. + * + * If format is CANStandard it must be an 11 bit long id + * If format is CANExtended it must be an 29 bit long id + */ + unsigned int id; + + /* Variable: data + * Space for 8 byte payload. + * + * If type is CANData data can store up to 8 byte data. + */ + unsigned char data[8]; + + /* Variable: len + * Length of data in bytes. + * + * If type is CANData data can store up to 8 byte data. + */ + unsigned char len; + + /* Variable: format + * Defines if the message has standard or extended format. + * + * Defines the type of message id: + * Default is CANStandard which implies 11 bit id. + * CANExtended means 29 bit message id. + */ + CANFormat format; + + /* Variable: type + * Defines the type of a message. + * + * The message type can rather be CANData for a message with data (default). + * Or CANRemote for a request of a specific CAN message. + */ + CANType type; // 0 - DATA FRAME, 1 - REMOTE FRAME +#endif +}; + +/* Class: CAN + * A can bus client, used for communicating with can devices + */ +class CAN : public Base { + +public: + + /* Constructor: CAN + * Creates an CAN interface connected to specific pins. + * + * Example: + * > #include "mbed.h" + * > #include "CAN.h" + * > + * > Ticker ticker; + * > DigitalOut led1(LED1); + * > DigitalOut led2(LED2); + * > CAN can1(p9, p10); + * > CAN can2(p30, p29); + * > + * > char counter = 0; + * > + * > void send() { + * > if(can1.write(CANMessage(1337, &counter, 1))) { + * > printf("Message sent: %d\n", counter); + * > counter++; + * > } + * > led1 = !led1; + * > } + * > + * > int main() { + * > ticker.attach(&send, 1); + * > CANMessage msg; + * > while(1) { + * > if(can2.read(msg)) { + * > printf("Message received: %d\n\n", msg.data[0]); + * > led2 = !led2; + * > } + * > wait(0.2); + * > } + * > } + * + * Variables: + * rd - read from transmitter + * td - transmit to transmitter + */ + CAN(PinName rd, PinName td); + virtual ~CAN(); + + /* Function: frequency + * Set the frequency of the CAN interface + * + * Variables: + * hz - The bus frequency in hertz + */ + void frequency(int hz); + + /* Function: write + * Write a CANMessage to the bus. + * + * Variables: + * msg - The CANMessage to write. + * + * Returns: + * 0 - If write failed. + * 1 - If write was successful. + */ + int write(CANMessage msg); + + /* Function: read + * Read a CANMessage from the bus. + * + * Variables: + * msg - A CANMessage to read to. + * + * Returns: + * 0 - If no message arrived. + * 1 - If message arrived. + */ + int read(CANMessage &msg); + + /* Function: reset + * Reset CAN interface. + * + * To use after error overflow. + */ + void reset(); + + /* Function: rderror + * Returns number of read errors to detect read overflow errors. + */ + unsigned char rderror(); + + /* Function: tderror + * Returns number of write errors to detect write overflow errors. + */ + unsigned char tderror(); + +private: + + CANName _id; +}; + +} // namespace mbed + +#endif // MBED_CAN_H