diff options
Diffstat (limited to 'firmware/can.h')
-rw-r--r-- | firmware/can.h | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/firmware/can.h b/firmware/can.h new file mode 100644 index 0000000..1bab0ba --- /dev/null +++ b/firmware/can.h @@ -0,0 +1,101 @@ +/* + * Copyright (c) 2007 Marco Glietsch (http://www.mikrocontroller.net/topic/98697) + * Original author: Marco Glietsch + * Modified for octopus by Michael Hartmann <ich@speicherleck.de> + * All rights reserved. + * + * Short descripton of file: + * + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided + * with the distribution. + * * Neither the name of the FH Augsburg nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES{} LOSS OF USE, + * DATA, OR PROFITS{} OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef CAN_H +#define CAN_H + +#include <inttypes.h> + +#define setbit(ADR,BIT) (ADR |= (1<<BIT)) +#define clearbit(ADR,BIT) (ADR &=~(1<<BIT)) +#define getbit(ADR, BIT) (ADR & (1<<BIT)) + +/* CAN Objekte */ +#define NO_MOBS 15 // Anzahl der Message Objects festlegen +#define NOMOB 0xff // Definition für ungültigen Objektindex + +// baudrate +enum { CAN_BAUDRATE_100K, CAN_BAUDRATE_125K, CAN_BAUDRATE_200K, + CAN_BAUDRATE_250K, CAN_BAUDRATE_500K, CAN_BAUDRATE_1000K }; + +// Betriebsmodi +enum { CAN_MODE_DISABLED, CAN_MODE_TRANSMIT_DATA, CAN_MODE_TRANSMIT_REMOTE, + CAN_MODE_RECEIVE_DATA, CAN_MODE_AUTO_REPLY }; + +// Interrupt-Modi +enum { CAN_INTERRUPTS_NONE, CAN_INTERRUPTS_TX, CAN_INTERRUPTS_RX, + CAN_INTERRUPTS_TXRX }; + +void can_parser(uint8_t *buf); + +int can_init(uint8_t baudrate, uint8_t intmode, uint8_t eid); +void can_init_usb(uint8_t baudrate, uint8_t eid); + +int can_deinit(void); +void can_deinit_usb(void); + +int can_enable_mob(uint8_t mob, uint8_t mode, uint32_t id, uint32_t idm); +void can_enable_mob_usb(uint8_t mob, uint8_t mode, uint32_t id, uint32_t idm); + +int can_disable_mob(uint8_t mob); +void can_disable_mob_usb(uint8_t mob); + +int can_send_data(uint8_t mob, uint8_t length, uint8_t * data); +void can_send_data_usb(uint8_t mob, uint8_t length, uint8_t *data); + +int can_send_remote(uint8_t mob); +void can_send_remote_usb(uint8_t mob); + +void can_receive_data_usb(int mob); + +void can_set_autoreply(uint8_t mob, uint8_t length, uint8_t *buf); +void can_set_autoreply_usb(uint8_t mob, uint8_t length, uint8_t *buf); + +// sonsitge hilfsfunktionen +int can_set_baudrate(uint8_t baudrate); +int can_set_interrupt(uint8_t mode); +void can_get_mob(uint8_t mob); +uint32_t can_get_id(void); +void can_set_id_mask(uint32_t idm); +void can_set_id(uint32_t id); +int can_set_mode(uint8_t mode); +uint8_t can_get_mode(void); +void can_set_data(uint8_t length, uint8_t * data); +void can_get_data(int8_t *msg); +void can_set_mob_interrupt(uint8_t object); +void can_clear_mob_interrupt(uint8_t mob); +uint8_t can_get_mob_interrupt(void); + +#endif /* CAN_H */ |