Nico Bollen / LIN

Dependents:   MBED_LIN_RGB_Master_Example

Committer:
bollenn
Date:
Sun May 11 13:14:16 2014 +0000
Revision:
2:6d4c7f841a5d
Parent:
1:58b5d1e8fae3
Child:
3:3656b0de0e43
Adding LIN output handling in ticker handle

Who changed what in which revision?

UserRevisionLine numberNew contents of line
bollenn 1:58b5d1e8fae3 1 /*
bollenn 1:58b5d1e8fae3 2 * A master device LIN communication library for mbed
bollenn 0:c91a9ebab739 3 *
bollenn 0:c91a9ebab739 4 * Copyright (C) 2014 TASS Belgium NV
bollenn 0:c91a9ebab739 5 *
bollenn 0:c91a9ebab739 6 * Released under GPL v2
bollenn 0:c91a9ebab739 7 *
bollenn 0:c91a9ebab739 8 * Other licensing models might apply at the sole discretion of the copyright holders.
bollenn 0:c91a9ebab739 9 *
bollenn 0:c91a9ebab739 10 * Permission is hereby granted, free of charge, to any person obtaining a copy of this software
bollenn 0:c91a9ebab739 11 * and associated documentation files (the "Software"), to deal in the Software without restriction,
bollenn 0:c91a9ebab739 12 * including without limitation the rights to use, copy, modify, merge, publish, distribute,
bollenn 0:c91a9ebab739 13 * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
bollenn 0:c91a9ebab739 14 * furnished to do so, subject to the following conditions:
bollenn 0:c91a9ebab739 15 *
bollenn 0:c91a9ebab739 16 * The above copyright notice and this permission notice shall be included in all copies or
bollenn 0:c91a9ebab739 17 * substantial portions of the Software.
bollenn 0:c91a9ebab739 18 *
bollenn 0:c91a9ebab739 19 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
bollenn 0:c91a9ebab739 20 * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
bollenn 0:c91a9ebab739 21 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
bollenn 0:c91a9ebab739 22 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
bollenn 0:c91a9ebab739 23 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
bollenn 0:c91a9ebab739 24 */
bollenn 0:c91a9ebab739 25
bollenn 0:c91a9ebab739 26 #include "mbed.h"
bollenn 0:c91a9ebab739 27
bollenn 1:58b5d1e8fae3 28 #ifndef MBED_LIN_MASTER_H
bollenn 1:58b5d1e8fae3 29 #define MBED_LIN_MASTER_H
bollenn 1:58b5d1e8fae3 30
bollenn 1:58b5d1e8fae3 31 #include "mbed.h"
bollenn 1:58b5d1e8fae3 32
bollenn 1:58b5d1e8fae3 33 /** A master device LIN communication library for mbed
bollenn 1:58b5d1e8fae3 34 *
bollenn 1:58b5d1e8fae3 35 * @code
bollenn 1:58b5d1e8fae3 36 * #include "mbed.h"
bollenn 1:58b5d1e8fae3 37 * #include "LinMaster.h"
bollenn 1:58b5d1e8fae3 38 *
bollenn 1:58b5d1e8fae3 39 * LinMaster lin(p30);
bollenn 1:58b5d1e8fae3 40 *
bollenn 1:58b5d1e8fae3 41 * int main() {
bollenn 1:58b5d1e8fae3 42 * (void)lin.init();
bollenn 1:58b5d1e8fae3 43 * (void)lin.sendframe(M2S, 0x3C, (uint8_t*)u8Data, 8);
bollenn 1:58b5d1e8fae3 44 * }
bollenn 1:58b5d1e8fae3 45 * @endcode
bollenn 1:58b5d1e8fae3 46 */
bollenn 0:c91a9ebab739 47 class LinMaster
bollenn 0:c91a9ebab739 48 {
bollenn 0:c91a9ebab739 49 public:
bollenn 0:c91a9ebab739 50 /** LIN master constructor
bollenn 0:c91a9ebab739 51 *
bollenn 0:c91a9ebab739 52 * @param Pin The pinname to be used for LIN communication
bollenn 0:c91a9ebab739 53 */
bollenn 0:c91a9ebab739 54 LinMaster(PinName Pin);
bollenn 0:c91a9ebab739 55
bollenn 0:c91a9ebab739 56 /** LIN master destructor */
bollenn 0:c91a9ebab739 57 ~LinMaster();
bollenn 0:c91a9ebab739 58
bollenn 0:c91a9ebab739 59 /** Initialise the LIN module
bollenn 0:c91a9ebab739 60 * - configure IO
bollenn 0:c91a9ebab739 61 * - configure Timer
bollenn 0:c91a9ebab739 62 *
bollenn 0:c91a9ebab739 63 * @return
bollenn 0:c91a9ebab739 64 * true on succes,
bollenn 0:c91a9ebab739 65 * false on fail
bollenn 0:c91a9ebab739 66 */
bollenn 0:c91a9ebab739 67 bool Init(void);
bollenn 0:c91a9ebab739 68
bollenn 0:c91a9ebab739 69 /** Set the LIN baudrate
bollenn 0:c91a9ebab739 70 *
bollenn 0:c91a9ebab739 71 * @param uBaud baudrate value in kbps (1..20000)
bollenn 0:c91a9ebab739 72 * @return
bollenn 0:c91a9ebab739 73 * true on succes,
bollenn 0:c91a9ebab739 74 * false on fail
bollenn 0:c91a9ebab739 75 */
bollenn 0:c91a9ebab739 76 bool Baudrate(uint16_t uBaud);
bollenn 0:c91a9ebab739 77
bollenn 0:c91a9ebab739 78 /** Get the LIN baudrate
bollenn 0:c91a9ebab739 79 *
bollenn 0:c91a9ebab739 80 * @return
bollenn 0:c91a9ebab739 81 * The current configured LIN baudrate
bollenn 0:c91a9ebab739 82 */
bollenn 0:c91a9ebab739 83 uint16_t Baudrate(void);
bollenn 0:c91a9ebab739 84
bollenn 2:6d4c7f841a5d 85 /** Bus status */
bollenn 2:6d4c7f841a5d 86 enum DriverStatus {
bollenn 2:6d4c7f841a5d 87 INIT, /**< initializing */
bollenn 2:6d4c7f841a5d 88 IDLE, /**< idle */
bollenn 2:6d4c7f841a5d 89 WAKEUP, /**< busy sending a wake up pulse */
bollenn 2:6d4c7f841a5d 90 TRANSMIT, /**< busy sending a frame */
bollenn 2:6d4c7f841a5d 91 RECEIVE /**< busy receiving data */
bollenn 2:6d4c7f841a5d 92 };
bollenn 2:6d4c7f841a5d 93
bollenn 2:6d4c7f841a5d 94 /** Get the current LIN driver status
bollenn 2:6d4c7f841a5d 95 *
bollenn 2:6d4c7f841a5d 96 * @return
bollenn 2:6d4c7f841a5d 97 * The current LIN driver status
bollenn 2:6d4c7f841a5d 98 */
bollenn 2:6d4c7f841a5d 99 DriverStatus GetDriverStatus(void) {return ( DriverStat );};
bollenn 2:6d4c7f841a5d 100
bollenn 2:6d4c7f841a5d 101 /** Frame status */
bollenn 2:6d4c7f841a5d 102 enum FrameStatus {
bollenn 2:6d4c7f841a5d 103 READY, /**< the frame is ready */
bollenn 2:6d4c7f841a5d 104 BREAK, /**< break is being sent */
bollenn 2:6d4c7f841a5d 105 DELIMITER, /**< delimiter is being sent */
bollenn 2:6d4c7f841a5d 106 SYNC, /**< sync field is being sent */
bollenn 2:6d4c7f841a5d 107 ID, /**< Frame ID byte is being sent */
bollenn 2:6d4c7f841a5d 108 DATA /**< Data bytes are being sent */
bollenn 2:6d4c7f841a5d 109 };
bollenn 2:6d4c7f841a5d 110
bollenn 2:6d4c7f841a5d 111 /** Get the current frame status
bollenn 2:6d4c7f841a5d 112 *
bollenn 2:6d4c7f841a5d 113 * @return
bollenn 2:6d4c7f841a5d 114 * The current frame status
bollenn 2:6d4c7f841a5d 115 */
bollenn 2:6d4c7f841a5d 116 FrameStatus GetFrameStatus(void) {return ( FrameStat );};
bollenn 2:6d4c7f841a5d 117
bollenn 1:58b5d1e8fae3 118 /** Send frame direction */
bollenn 1:58b5d1e8fae3 119 enum FrameDir {
bollenn 1:58b5d1e8fae3 120 M2S, /**< Master to Slave */
bollenn 1:58b5d1e8fae3 121 S2M /**< Slave to Master */
bollenn 1:58b5d1e8fae3 122 };
bollenn 0:c91a9ebab739 123
bollenn 1:58b5d1e8fae3 124 /** Send a frame on the LIN bus
bollenn 1:58b5d1e8fae3 125 *
bollenn 1:58b5d1e8fae3 126 * @param Dir direction of the frame
bollenn 1:58b5d1e8fae3 127 * @param u8ID LIN Frame ID
bollenn 1:58b5d1e8fae3 128 * @param ptrData pointer to the data to be transmitted/received
bollenn 1:58b5d1e8fae3 129 * @param u8Len lenght of the data to be transmitted/received
bollenn 1:58b5d1e8fae3 130 * @return
bollenn 1:58b5d1e8fae3 131 * true on succes,
bollenn 1:58b5d1e8fae3 132 * false on fail
bollenn 1:58b5d1e8fae3 133 */
bollenn 1:58b5d1e8fae3 134 bool SendFrame(FrameDir Dir, uint8_t u8ID, uint8_t* ptrData, uint8_t u8Len);
bollenn 2:6d4c7f841a5d 135
bollenn 2:6d4c7f841a5d 136 void TickEventHndl(void);
bollenn 2:6d4c7f841a5d 137
bollenn 0:c91a9ebab739 138 private:
bollenn 2:6d4c7f841a5d 139 DriverStatus DriverStat;
bollenn 2:6d4c7f841a5d 140 FrameStatus FrameStat;
bollenn 0:c91a9ebab739 141 uint16_t u16BitPeriod;
bollenn 0:c91a9ebab739 142 uint8_t u8BreakLen;
bollenn 0:c91a9ebab739 143 uint8_t u8DelimLen;
bollenn 2:6d4c7f841a5d 144 uint8_t u8TickCnt;
bollenn 2:6d4c7f841a5d 145 uint8_t u8NextBusLvl;
bollenn 2:6d4c7f841a5d 146 uint8_t u8FrameID;
bollenn 2:6d4c7f841a5d 147 FrameDir Direction;
bollenn 2:6d4c7f841a5d 148 uint8_t u8FrameData[8];
bollenn 2:6d4c7f841a5d 149 uint8_t u8FrameLen;
bollenn 2:6d4c7f841a5d 150 uint8_t u8Byte;
bollenn 2:6d4c7f841a5d 151 uint8_t u8ByteOnLin;
bollenn 0:c91a9ebab739 152 PinName MyPin;
bollenn 2:6d4c7f841a5d 153 Ticker MyTicker;
bollenn 0:c91a9ebab739 154 };
bollenn 1:58b5d1e8fae3 155
bollenn 1:58b5d1e8fae3 156 #endif /* MBED_LIN_MASTER_H */