test test test

Dependencies:   mbed

Committer:
mohamedmoawya
Date:
Mon May 25 19:06:11 2020 +0000
Revision:
0:e4c5e6ec922e
snake game tteest

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mohamedmoawya 0:e4c5e6ec922e 1 /* mbed Microcontroller Library
mohamedmoawya 0:e4c5e6ec922e 2 * Copyright (c) 2006-2013 ARM Limited
mohamedmoawya 0:e4c5e6ec922e 3 *
mohamedmoawya 0:e4c5e6ec922e 4 * Licensed under the Apache License, Version 2.0 (the "License");
mohamedmoawya 0:e4c5e6ec922e 5 * you may not use this file except in compliance with the License.
mohamedmoawya 0:e4c5e6ec922e 6 * You may obtain a copy of the License at
mohamedmoawya 0:e4c5e6ec922e 7 *
mohamedmoawya 0:e4c5e6ec922e 8 * http://www.apache.org/licenses/LICENSE-2.0
mohamedmoawya 0:e4c5e6ec922e 9 *
mohamedmoawya 0:e4c5e6ec922e 10 * Unless required by applicable law or agreed to in writing, software
mohamedmoawya 0:e4c5e6ec922e 11 * distributed under the License is distributed on an "AS IS" BASIS,
mohamedmoawya 0:e4c5e6ec922e 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
mohamedmoawya 0:e4c5e6ec922e 13 * See the License for the specific language governing permissions and
mohamedmoawya 0:e4c5e6ec922e 14 * limitations under the License.
mohamedmoawya 0:e4c5e6ec922e 15 */
mohamedmoawya 0:e4c5e6ec922e 16 #ifndef MBED_CAN_H
mohamedmoawya 0:e4c5e6ec922e 17 #define MBED_CAN_H
mohamedmoawya 0:e4c5e6ec922e 18
mohamedmoawya 0:e4c5e6ec922e 19 #include "platform/platform.h"
mohamedmoawya 0:e4c5e6ec922e 20
mohamedmoawya 0:e4c5e6ec922e 21 #if defined (DEVICE_CAN) || defined(DOXYGEN_ONLY)
mohamedmoawya 0:e4c5e6ec922e 22
mohamedmoawya 0:e4c5e6ec922e 23 #include "hal/can_api.h"
mohamedmoawya 0:e4c5e6ec922e 24 #include "platform/Callback.h"
mohamedmoawya 0:e4c5e6ec922e 25 #include "platform/PlatformMutex.h"
mohamedmoawya 0:e4c5e6ec922e 26 #include "platform/NonCopyable.h"
mohamedmoawya 0:e4c5e6ec922e 27
mohamedmoawya 0:e4c5e6ec922e 28 namespace mbed {
mohamedmoawya 0:e4c5e6ec922e 29 /** \addtogroup drivers */
mohamedmoawya 0:e4c5e6ec922e 30
mohamedmoawya 0:e4c5e6ec922e 31 /** CANMessage class
mohamedmoawya 0:e4c5e6ec922e 32 *
mohamedmoawya 0:e4c5e6ec922e 33 * @note Synchronization level: Thread safe
mohamedmoawya 0:e4c5e6ec922e 34 * @ingroup drivers
mohamedmoawya 0:e4c5e6ec922e 35 */
mohamedmoawya 0:e4c5e6ec922e 36 class CANMessage : public CAN_Message {
mohamedmoawya 0:e4c5e6ec922e 37
mohamedmoawya 0:e4c5e6ec922e 38 public:
mohamedmoawya 0:e4c5e6ec922e 39 /** Creates empty CAN message.
mohamedmoawya 0:e4c5e6ec922e 40 */
mohamedmoawya 0:e4c5e6ec922e 41 CANMessage() : CAN_Message()
mohamedmoawya 0:e4c5e6ec922e 42 {
mohamedmoawya 0:e4c5e6ec922e 43 len = 8;
mohamedmoawya 0:e4c5e6ec922e 44 type = CANData;
mohamedmoawya 0:e4c5e6ec922e 45 format = CANStandard;
mohamedmoawya 0:e4c5e6ec922e 46 id = 0;
mohamedmoawya 0:e4c5e6ec922e 47 memset(data, 0, 8);
mohamedmoawya 0:e4c5e6ec922e 48 }
mohamedmoawya 0:e4c5e6ec922e 49
mohamedmoawya 0:e4c5e6ec922e 50 /** Creates CAN message with specific content.
mohamedmoawya 0:e4c5e6ec922e 51 *
mohamedmoawya 0:e4c5e6ec922e 52 * @param _id Message ID
mohamedmoawya 0:e4c5e6ec922e 53 * @param _data Mesaage Data
mohamedmoawya 0:e4c5e6ec922e 54 * @param _len Message Data length
mohamedmoawya 0:e4c5e6ec922e 55 * @param _type Type of Data: Use enum CANType for valid parameter values
mohamedmoawya 0:e4c5e6ec922e 56 * @param _format Data Format: Use enum CANFormat for valid parameter values
mohamedmoawya 0:e4c5e6ec922e 57 */
mohamedmoawya 0:e4c5e6ec922e 58 CANMessage(unsigned _id, const char *_data, char _len = 8, CANType _type = CANData, CANFormat _format = CANStandard)
mohamedmoawya 0:e4c5e6ec922e 59 {
mohamedmoawya 0:e4c5e6ec922e 60 len = _len & 0xF;
mohamedmoawya 0:e4c5e6ec922e 61 type = _type;
mohamedmoawya 0:e4c5e6ec922e 62 format = _format;
mohamedmoawya 0:e4c5e6ec922e 63 id = _id;
mohamedmoawya 0:e4c5e6ec922e 64 memcpy(data, _data, _len);
mohamedmoawya 0:e4c5e6ec922e 65 }
mohamedmoawya 0:e4c5e6ec922e 66
mohamedmoawya 0:e4c5e6ec922e 67 /** Creates CAN remote message.
mohamedmoawya 0:e4c5e6ec922e 68 *
mohamedmoawya 0:e4c5e6ec922e 69 * @param _id Message ID
mohamedmoawya 0:e4c5e6ec922e 70 * @param _format Data Format: Use enum CANType for valid parameter values
mohamedmoawya 0:e4c5e6ec922e 71 */
mohamedmoawya 0:e4c5e6ec922e 72 CANMessage(unsigned _id, CANFormat _format = CANStandard)
mohamedmoawya 0:e4c5e6ec922e 73 {
mohamedmoawya 0:e4c5e6ec922e 74 len = 0;
mohamedmoawya 0:e4c5e6ec922e 75 type = CANRemote;
mohamedmoawya 0:e4c5e6ec922e 76 format = _format;
mohamedmoawya 0:e4c5e6ec922e 77 id = _id;
mohamedmoawya 0:e4c5e6ec922e 78 memset(data, 0, 8);
mohamedmoawya 0:e4c5e6ec922e 79 }
mohamedmoawya 0:e4c5e6ec922e 80 };
mohamedmoawya 0:e4c5e6ec922e 81
mohamedmoawya 0:e4c5e6ec922e 82 /** A can bus client, used for communicating with can devices
mohamedmoawya 0:e4c5e6ec922e 83 * @ingroup drivers
mohamedmoawya 0:e4c5e6ec922e 84 */
mohamedmoawya 0:e4c5e6ec922e 85 class CAN : private NonCopyable<CAN> {
mohamedmoawya 0:e4c5e6ec922e 86
mohamedmoawya 0:e4c5e6ec922e 87 public:
mohamedmoawya 0:e4c5e6ec922e 88 /** Creates a CAN interface connected to specific pins.
mohamedmoawya 0:e4c5e6ec922e 89 *
mohamedmoawya 0:e4c5e6ec922e 90 * @param rd read from transmitter
mohamedmoawya 0:e4c5e6ec922e 91 * @param td transmit to transmitter
mohamedmoawya 0:e4c5e6ec922e 92 *
mohamedmoawya 0:e4c5e6ec922e 93 * Example:
mohamedmoawya 0:e4c5e6ec922e 94 * @code
mohamedmoawya 0:e4c5e6ec922e 95 * #include "mbed.h"
mohamedmoawya 0:e4c5e6ec922e 96 *
mohamedmoawya 0:e4c5e6ec922e 97 *
mohamedmoawya 0:e4c5e6ec922e 98 * Ticker ticker;
mohamedmoawya 0:e4c5e6ec922e 99 * DigitalOut led1(LED1);
mohamedmoawya 0:e4c5e6ec922e 100 * DigitalOut led2(LED2);
mohamedmoawya 0:e4c5e6ec922e 101 * //The constructor takes in RX, and TX pin respectively.
mohamedmoawya 0:e4c5e6ec922e 102 * //These pins, for this example, are defined in mbed_app.json
mohamedmoawya 0:e4c5e6ec922e 103 * CAN can1(MBED_CONF_APP_CAN1_RD, MBED_CONF_APP_CAN1_TD);
mohamedmoawya 0:e4c5e6ec922e 104 * CAN can2(MBED_CONF_APP_CAN2_RD, MBED_CONF_APP_CAN2_TD);
mohamedmoawya 0:e4c5e6ec922e 105 *
mohamedmoawya 0:e4c5e6ec922e 106 * char counter = 0;
mohamedmoawya 0:e4c5e6ec922e 107 *
mohamedmoawya 0:e4c5e6ec922e 108 * void send() {
mohamedmoawya 0:e4c5e6ec922e 109 * if(can1.write(CANMessage(1337, &counter, 1))) {
mohamedmoawya 0:e4c5e6ec922e 110 * printf("Message sent: %d\n", counter);
mohamedmoawya 0:e4c5e6ec922e 111 * counter++;
mohamedmoawya 0:e4c5e6ec922e 112 * }
mohamedmoawya 0:e4c5e6ec922e 113 * led1 = !led1;
mohamedmoawya 0:e4c5e6ec922e 114 * }
mohamedmoawya 0:e4c5e6ec922e 115 *
mohamedmoawya 0:e4c5e6ec922e 116 * int main() {
mohamedmoawya 0:e4c5e6ec922e 117 * ticker.attach(&send, 1);
mohamedmoawya 0:e4c5e6ec922e 118 * CANMessage msg;
mohamedmoawya 0:e4c5e6ec922e 119 * while(1) {
mohamedmoawya 0:e4c5e6ec922e 120 * if(can2.read(msg)) {
mohamedmoawya 0:e4c5e6ec922e 121 * printf("Message received: %d\n\n", msg.data[0]);
mohamedmoawya 0:e4c5e6ec922e 122 * led2 = !led2;
mohamedmoawya 0:e4c5e6ec922e 123 * }
mohamedmoawya 0:e4c5e6ec922e 124 * wait(0.2);
mohamedmoawya 0:e4c5e6ec922e 125 * }
mohamedmoawya 0:e4c5e6ec922e 126 * }
mohamedmoawya 0:e4c5e6ec922e 127 *
mohamedmoawya 0:e4c5e6ec922e 128 * @endcode
mohamedmoawya 0:e4c5e6ec922e 129 */
mohamedmoawya 0:e4c5e6ec922e 130 CAN(PinName rd, PinName td);
mohamedmoawya 0:e4c5e6ec922e 131
mohamedmoawya 0:e4c5e6ec922e 132 /** Initialize CAN interface and set the frequency
mohamedmoawya 0:e4c5e6ec922e 133 *
mohamedmoawya 0:e4c5e6ec922e 134 * @param rd the read pin
mohamedmoawya 0:e4c5e6ec922e 135 * @param td the transmit pin
mohamedmoawya 0:e4c5e6ec922e 136 * @param hz the bus frequency in hertz
mohamedmoawya 0:e4c5e6ec922e 137 */
mohamedmoawya 0:e4c5e6ec922e 138 CAN(PinName rd, PinName td, int hz);
mohamedmoawya 0:e4c5e6ec922e 139
mohamedmoawya 0:e4c5e6ec922e 140 virtual ~CAN();
mohamedmoawya 0:e4c5e6ec922e 141
mohamedmoawya 0:e4c5e6ec922e 142 /** Set the frequency of the CAN interface
mohamedmoawya 0:e4c5e6ec922e 143 *
mohamedmoawya 0:e4c5e6ec922e 144 * @param hz The bus frequency in hertz
mohamedmoawya 0:e4c5e6ec922e 145 *
mohamedmoawya 0:e4c5e6ec922e 146 * @returns
mohamedmoawya 0:e4c5e6ec922e 147 * 1 if successful,
mohamedmoawya 0:e4c5e6ec922e 148 * 0 otherwise
mohamedmoawya 0:e4c5e6ec922e 149 */
mohamedmoawya 0:e4c5e6ec922e 150 int frequency(int hz);
mohamedmoawya 0:e4c5e6ec922e 151
mohamedmoawya 0:e4c5e6ec922e 152 /** Write a CANMessage to the bus.
mohamedmoawya 0:e4c5e6ec922e 153 *
mohamedmoawya 0:e4c5e6ec922e 154 * @param msg The CANMessage to write.
mohamedmoawya 0:e4c5e6ec922e 155 *
mohamedmoawya 0:e4c5e6ec922e 156 * @returns
mohamedmoawya 0:e4c5e6ec922e 157 * 0 if write failed,
mohamedmoawya 0:e4c5e6ec922e 158 * 1 if write was successful
mohamedmoawya 0:e4c5e6ec922e 159 */
mohamedmoawya 0:e4c5e6ec922e 160 int write(CANMessage msg);
mohamedmoawya 0:e4c5e6ec922e 161
mohamedmoawya 0:e4c5e6ec922e 162 /** Read a CANMessage from the bus.
mohamedmoawya 0:e4c5e6ec922e 163 *
mohamedmoawya 0:e4c5e6ec922e 164 * @param msg A CANMessage to read to.
mohamedmoawya 0:e4c5e6ec922e 165 * @param handle message filter handle (0 for any message)
mohamedmoawya 0:e4c5e6ec922e 166 *
mohamedmoawya 0:e4c5e6ec922e 167 * @returns
mohamedmoawya 0:e4c5e6ec922e 168 * 0 if no message arrived,
mohamedmoawya 0:e4c5e6ec922e 169 * 1 if message arrived
mohamedmoawya 0:e4c5e6ec922e 170 */
mohamedmoawya 0:e4c5e6ec922e 171 int read(CANMessage &msg, int handle = 0);
mohamedmoawya 0:e4c5e6ec922e 172
mohamedmoawya 0:e4c5e6ec922e 173 /** Reset CAN interface.
mohamedmoawya 0:e4c5e6ec922e 174 *
mohamedmoawya 0:e4c5e6ec922e 175 * To use after error overflow.
mohamedmoawya 0:e4c5e6ec922e 176 */
mohamedmoawya 0:e4c5e6ec922e 177 void reset();
mohamedmoawya 0:e4c5e6ec922e 178
mohamedmoawya 0:e4c5e6ec922e 179 /** Puts or removes the CAN interface into silent monitoring mode
mohamedmoawya 0:e4c5e6ec922e 180 *
mohamedmoawya 0:e4c5e6ec922e 181 * @param silent boolean indicating whether to go into silent mode or not
mohamedmoawya 0:e4c5e6ec922e 182 */
mohamedmoawya 0:e4c5e6ec922e 183 void monitor(bool silent);
mohamedmoawya 0:e4c5e6ec922e 184
mohamedmoawya 0:e4c5e6ec922e 185 enum Mode {
mohamedmoawya 0:e4c5e6ec922e 186 Reset = 0,
mohamedmoawya 0:e4c5e6ec922e 187 Normal,
mohamedmoawya 0:e4c5e6ec922e 188 Silent,
mohamedmoawya 0:e4c5e6ec922e 189 LocalTest,
mohamedmoawya 0:e4c5e6ec922e 190 GlobalTest,
mohamedmoawya 0:e4c5e6ec922e 191 SilentTest
mohamedmoawya 0:e4c5e6ec922e 192 };
mohamedmoawya 0:e4c5e6ec922e 193
mohamedmoawya 0:e4c5e6ec922e 194 /** Change CAN operation to the specified mode
mohamedmoawya 0:e4c5e6ec922e 195 *
mohamedmoawya 0:e4c5e6ec922e 196 * @param mode The new operation mode (CAN::Normal, CAN::Silent, CAN::LocalTest, CAN::GlobalTest, CAN::SilentTest)
mohamedmoawya 0:e4c5e6ec922e 197 *
mohamedmoawya 0:e4c5e6ec922e 198 * @returns
mohamedmoawya 0:e4c5e6ec922e 199 * 0 if mode change failed or unsupported,
mohamedmoawya 0:e4c5e6ec922e 200 * 1 if mode change was successful
mohamedmoawya 0:e4c5e6ec922e 201 */
mohamedmoawya 0:e4c5e6ec922e 202 int mode(Mode mode);
mohamedmoawya 0:e4c5e6ec922e 203
mohamedmoawya 0:e4c5e6ec922e 204 /** Filter out incoming messages
mohamedmoawya 0:e4c5e6ec922e 205 *
mohamedmoawya 0:e4c5e6ec922e 206 * @param id the id to filter on
mohamedmoawya 0:e4c5e6ec922e 207 * @param mask the mask applied to the id
mohamedmoawya 0:e4c5e6ec922e 208 * @param format format to filter on (Default CANAny)
mohamedmoawya 0:e4c5e6ec922e 209 * @param handle message filter handle (Optional)
mohamedmoawya 0:e4c5e6ec922e 210 *
mohamedmoawya 0:e4c5e6ec922e 211 * @returns
mohamedmoawya 0:e4c5e6ec922e 212 * 0 if filter change failed or unsupported,
mohamedmoawya 0:e4c5e6ec922e 213 * new filter handle if successful
mohamedmoawya 0:e4c5e6ec922e 214 */
mohamedmoawya 0:e4c5e6ec922e 215 int filter(unsigned int id, unsigned int mask, CANFormat format = CANAny, int handle = 0);
mohamedmoawya 0:e4c5e6ec922e 216
mohamedmoawya 0:e4c5e6ec922e 217 /** Detects read errors - Used to detect read overflow errors.
mohamedmoawya 0:e4c5e6ec922e 218 *
mohamedmoawya 0:e4c5e6ec922e 219 * @returns number of read errors
mohamedmoawya 0:e4c5e6ec922e 220 */
mohamedmoawya 0:e4c5e6ec922e 221 unsigned char rderror();
mohamedmoawya 0:e4c5e6ec922e 222
mohamedmoawya 0:e4c5e6ec922e 223 /** Detects write errors - Used to detect write overflow errors.
mohamedmoawya 0:e4c5e6ec922e 224 *
mohamedmoawya 0:e4c5e6ec922e 225 * @returns number of write errors
mohamedmoawya 0:e4c5e6ec922e 226 */
mohamedmoawya 0:e4c5e6ec922e 227 unsigned char tderror();
mohamedmoawya 0:e4c5e6ec922e 228
mohamedmoawya 0:e4c5e6ec922e 229 enum IrqType {
mohamedmoawya 0:e4c5e6ec922e 230 RxIrq = 0,
mohamedmoawya 0:e4c5e6ec922e 231 TxIrq,
mohamedmoawya 0:e4c5e6ec922e 232 EwIrq,
mohamedmoawya 0:e4c5e6ec922e 233 DoIrq,
mohamedmoawya 0:e4c5e6ec922e 234 WuIrq,
mohamedmoawya 0:e4c5e6ec922e 235 EpIrq,
mohamedmoawya 0:e4c5e6ec922e 236 AlIrq,
mohamedmoawya 0:e4c5e6ec922e 237 BeIrq,
mohamedmoawya 0:e4c5e6ec922e 238 IdIrq,
mohamedmoawya 0:e4c5e6ec922e 239
mohamedmoawya 0:e4c5e6ec922e 240 IrqCnt
mohamedmoawya 0:e4c5e6ec922e 241 };
mohamedmoawya 0:e4c5e6ec922e 242
mohamedmoawya 0:e4c5e6ec922e 243 /** Attach a function to call whenever a CAN frame received interrupt is
mohamedmoawya 0:e4c5e6ec922e 244 * generated.
mohamedmoawya 0:e4c5e6ec922e 245 *
mohamedmoawya 0:e4c5e6ec922e 246 * This function locks the deep sleep while a callback is attached
mohamedmoawya 0:e4c5e6ec922e 247 *
mohamedmoawya 0:e4c5e6ec922e 248 * @param func A pointer to a void function, or 0 to set as none
mohamedmoawya 0:e4c5e6ec922e 249 * @param type Which CAN interrupt to attach the member function to (CAN::RxIrq for message received, CAN::TxIrq for transmitted or aborted, CAN::EwIrq for error warning, CAN::DoIrq for data overrun, CAN::WuIrq for wake-up, CAN::EpIrq for error passive, CAN::AlIrq for arbitration lost, CAN::BeIrq for bus error)
mohamedmoawya 0:e4c5e6ec922e 250 */
mohamedmoawya 0:e4c5e6ec922e 251 void attach(Callback<void()> func, IrqType type = RxIrq);
mohamedmoawya 0:e4c5e6ec922e 252
mohamedmoawya 0:e4c5e6ec922e 253 /** Attach a member function to call whenever a CAN frame received interrupt
mohamedmoawya 0:e4c5e6ec922e 254 * is generated.
mohamedmoawya 0:e4c5e6ec922e 255 *
mohamedmoawya 0:e4c5e6ec922e 256 * @param obj pointer to the object to call the member function on
mohamedmoawya 0:e4c5e6ec922e 257 * @param method pointer to the member function to be called
mohamedmoawya 0:e4c5e6ec922e 258 * @param type Which CAN interrupt to attach the member function to (CAN::RxIrq for message received, TxIrq for transmitted or aborted, EwIrq for error warning, DoIrq for data overrun, WuIrq for wake-up, EpIrq for error passive, AlIrq for arbitration lost, BeIrq for bus error)
mohamedmoawya 0:e4c5e6ec922e 259 * @deprecated
mohamedmoawya 0:e4c5e6ec922e 260 * The attach function does not support cv-qualifiers. Replaced by
mohamedmoawya 0:e4c5e6ec922e 261 * attach(callback(obj, method), type).
mohamedmoawya 0:e4c5e6ec922e 262 */
mohamedmoawya 0:e4c5e6ec922e 263 template<typename T>
mohamedmoawya 0:e4c5e6ec922e 264 MBED_DEPRECATED_SINCE("mbed-os-5.1",
mohamedmoawya 0:e4c5e6ec922e 265 "The attach function does not support cv-qualifiers. Replaced by "
mohamedmoawya 0:e4c5e6ec922e 266 "attach(callback(obj, method), type).")
mohamedmoawya 0:e4c5e6ec922e 267 void attach(T *obj, void (T::*method)(), IrqType type = RxIrq)
mohamedmoawya 0:e4c5e6ec922e 268 {
mohamedmoawya 0:e4c5e6ec922e 269 // Underlying call thread safe
mohamedmoawya 0:e4c5e6ec922e 270 attach(callback(obj, method), type);
mohamedmoawya 0:e4c5e6ec922e 271 }
mohamedmoawya 0:e4c5e6ec922e 272
mohamedmoawya 0:e4c5e6ec922e 273 /** Attach a member function to call whenever a CAN frame received interrupt
mohamedmoawya 0:e4c5e6ec922e 274 * is generated.
mohamedmoawya 0:e4c5e6ec922e 275 *
mohamedmoawya 0:e4c5e6ec922e 276 * @param obj pointer to the object to call the member function on
mohamedmoawya 0:e4c5e6ec922e 277 * @param method pointer to the member function to be called
mohamedmoawya 0:e4c5e6ec922e 278 * @param type Which CAN interrupt to attach the member function to (CAN::RxIrq for message received, TxIrq for transmitted or aborted, EwIrq for error warning, DoIrq for data overrun, WuIrq for wake-up, EpIrq for error passive, AlIrq for arbitration lost, BeIrq for bus error)
mohamedmoawya 0:e4c5e6ec922e 279 * @deprecated
mohamedmoawya 0:e4c5e6ec922e 280 * The attach function does not support cv-qualifiers. Replaced by
mohamedmoawya 0:e4c5e6ec922e 281 * attach(callback(obj, method), type).
mohamedmoawya 0:e4c5e6ec922e 282 */
mohamedmoawya 0:e4c5e6ec922e 283 template<typename T>
mohamedmoawya 0:e4c5e6ec922e 284 MBED_DEPRECATED_SINCE("mbed-os-5.1",
mohamedmoawya 0:e4c5e6ec922e 285 "The attach function does not support cv-qualifiers. Replaced by "
mohamedmoawya 0:e4c5e6ec922e 286 "attach(callback(obj, method), type).")
mohamedmoawya 0:e4c5e6ec922e 287 void attach(T *obj, void (*method)(T *), IrqType type = RxIrq)
mohamedmoawya 0:e4c5e6ec922e 288 {
mohamedmoawya 0:e4c5e6ec922e 289 // Underlying call thread safe
mohamedmoawya 0:e4c5e6ec922e 290 attach(callback(obj, method), type);
mohamedmoawya 0:e4c5e6ec922e 291 }
mohamedmoawya 0:e4c5e6ec922e 292
mohamedmoawya 0:e4c5e6ec922e 293 static void _irq_handler(uint32_t id, CanIrqType type);
mohamedmoawya 0:e4c5e6ec922e 294
mohamedmoawya 0:e4c5e6ec922e 295 #if !defined(DOXYGEN_ONLY)
mohamedmoawya 0:e4c5e6ec922e 296 protected:
mohamedmoawya 0:e4c5e6ec922e 297 virtual void lock();
mohamedmoawya 0:e4c5e6ec922e 298 virtual void unlock();
mohamedmoawya 0:e4c5e6ec922e 299 can_t _can;
mohamedmoawya 0:e4c5e6ec922e 300 Callback<void()> _irq[IrqCnt];
mohamedmoawya 0:e4c5e6ec922e 301 PlatformMutex _mutex;
mohamedmoawya 0:e4c5e6ec922e 302 #endif
mohamedmoawya 0:e4c5e6ec922e 303 };
mohamedmoawya 0:e4c5e6ec922e 304
mohamedmoawya 0:e4c5e6ec922e 305 } // namespace mbed
mohamedmoawya 0:e4c5e6ec922e 306
mohamedmoawya 0:e4c5e6ec922e 307 #endif
mohamedmoawya 0:e4c5e6ec922e 308
mohamedmoawya 0:e4c5e6ec922e 309 #endif // MBED_CAN_H
mohamedmoawya 0:e4c5e6ec922e 310