Tufts Hybrid Racing Control Node
ControlNode.cpp@1:edb687d65942, 2012-04-15 (annotated)
- Committer:
- wsalis01
- Date:
- Sun Apr 15 00:13:28 2012 +0000
- Revision:
- 1:edb687d65942
- Parent:
- 0:9b224b68e7c7
Initial Commit
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
wsalis01 | 1:edb687d65942 | 1 | /* |
wsalis01 | 1:edb687d65942 | 2 | * File: ControlNode/ControlNode.cpp |
wsalis01 | 1:edb687d65942 | 3 | * Author: William Jessup Salisbury |
wsalis01 | 1:edb687d65942 | 4 | * Company: Tufts Hybrid Racing Team |
wsalis01 | 1:edb687d65942 | 5 | * Copyright: CC BY-NC-SA 3.0 |
wsalis01 | 1:edb687d65942 | 6 | * Date: 1/12/2012 |
wsalis01 | 1:edb687d65942 | 7 | */ |
wsalis01 | 1:edb687d65942 | 8 | |
wsalis01 | 1:edb687d65942 | 9 | #include "mbed.h" |
wsalis01 | 1:edb687d65942 | 10 | #include "CANProtocol.h" |
wsalis01 | 1:edb687d65942 | 11 | #include "ControlNode.h" |
wsalis01 | 1:edb687d65942 | 12 | |
wsalis01 | 1:edb687d65942 | 13 | ControlNode::ControlNode() : _can(CAN_RX, CAN_TX), _console(USBTX, USBRX), _syncID(0) { |
wsalis01 | 1:edb687d65942 | 14 | //Nothing to see here |
wsalis01 | 1:edb687d65942 | 15 | } |
wsalis01 | 1:edb687d65942 | 16 | |
wsalis01 | 1:edb687d65942 | 17 | void ControlNode::Init() { |
wsalis01 | 1:edb687d65942 | 18 | /* CAN initialization */ |
wsalis01 | 1:edb687d65942 | 19 | _can.frequency(CAN_FREQUENCY); |
wsalis01 | 1:edb687d65942 | 20 | _can.attach(this, &ControlNode::canReceive); |
wsalis01 | 1:edb687d65942 | 21 | |
wsalis01 | 1:edb687d65942 | 22 | /* Ticker initialization */ |
wsalis01 | 1:edb687d65942 | 23 | _syncTimer.attach_us(this, &ControlNode::canSync, tickerTimeout_us); |
wsalis01 | 1:edb687d65942 | 24 | |
wsalis01 | 1:edb687d65942 | 25 | /* Print startup message */ |
wsalis01 | 1:edb687d65942 | 26 | _console.printf("%s\r\n", "ControlNode instantiated."); |
wsalis01 | 1:edb687d65942 | 27 | } |
wsalis01 | 1:edb687d65942 | 28 | |
wsalis01 | 1:edb687d65942 | 29 | ControlNode::~ControlNode() { |
wsalis01 | 1:edb687d65942 | 30 | _syncTimer.detach(); |
wsalis01 | 1:edb687d65942 | 31 | } |
wsalis01 | 1:edb687d65942 | 32 | |
wsalis01 | 1:edb687d65942 | 33 | void ControlNode::canReset() { |
wsalis01 | 1:edb687d65942 | 34 | CANMessage msg; |
wsalis01 | 1:edb687d65942 | 35 | msg.id = CAN_RESET; |
wsalis01 | 1:edb687d65942 | 36 | msg.len = 0; |
wsalis01 | 1:edb687d65942 | 37 | if (_can.write(msg)) { |
wsalis01 | 1:edb687d65942 | 38 | _console.printf("%s\r\n", "Reset message sent."); |
wsalis01 | 1:edb687d65942 | 39 | } else { |
wsalis01 | 1:edb687d65942 | 40 | _console.printf("%s\r\n", "Reset message send failure."); |
wsalis01 | 1:edb687d65942 | 41 | } |
wsalis01 | 1:edb687d65942 | 42 | } |
wsalis01 | 1:edb687d65942 | 43 | |
wsalis01 | 1:edb687d65942 | 44 | void ControlNode::canSync() { |
wsalis01 | 1:edb687d65942 | 45 | CANMessage msg; |
wsalis01 | 1:edb687d65942 | 46 | msg.id = CAN_SYNC; |
wsalis01 | 1:edb687d65942 | 47 | msg.len = 1; |
wsalis01 | 1:edb687d65942 | 48 | msg.data[0] = (++_syncID % 0xFF); |
wsalis01 | 1:edb687d65942 | 49 | if (_can.write(msg)) { |
wsalis01 | 1:edb687d65942 | 50 | _console.printf("%s\r\n", "Sync message sent."); |
wsalis01 | 1:edb687d65942 | 51 | } else { |
wsalis01 | 1:edb687d65942 | 52 | _console.printf("%s\r\n", "Sync message send failure."); |
wsalis01 | 1:edb687d65942 | 53 | } |
wsalis01 | 1:edb687d65942 | 54 | } |
wsalis01 | 1:edb687d65942 | 55 | |
wsalis01 | 1:edb687d65942 | 56 | void ControlNode::canSend() { |
wsalis01 | 1:edb687d65942 | 57 | CANMessage msg; |
wsalis01 | 1:edb687d65942 | 58 | |
wsalis01 | 1:edb687d65942 | 59 | if (_can.write(msg)) { |
wsalis01 | 1:edb687d65942 | 60 | _console.printf("%s\r\n", "Message sent."); |
wsalis01 | 1:edb687d65942 | 61 | } else { |
wsalis01 | 1:edb687d65942 | 62 | _console.printf("%s\r\n", "Message send failure."); |
wsalis01 | 1:edb687d65942 | 63 | } |
wsalis01 | 1:edb687d65942 | 64 | } |
wsalis01 | 1:edb687d65942 | 65 | |
wsalis01 | 1:edb687d65942 | 66 | void ControlNode::canReceive() { |
wsalis01 | 1:edb687d65942 | 67 | CANMessage msg; |
wsalis01 | 1:edb687d65942 | 68 | |
wsalis01 | 1:edb687d65942 | 69 | if (_can.read(msg)) { |
wsalis01 | 1:edb687d65942 | 70 | |
wsalis01 | 1:edb687d65942 | 71 | _console.printf("%s\r\n", "Message received."); |
wsalis01 | 1:edb687d65942 | 72 | |
wsalis01 | 1:edb687d65942 | 73 | if (msg.data[0] != _syncID) { |
wsalis01 | 1:edb687d65942 | 74 | _console.printf("%s\r\n", "'_syncID' mismatch."); |
wsalis01 | 1:edb687d65942 | 75 | return; |
wsalis01 | 1:edb687d65942 | 76 | } |
wsalis01 | 1:edb687d65942 | 77 | |
wsalis01 | 1:edb687d65942 | 78 | switch (msg.id) { |
wsalis01 | 1:edb687d65942 | 79 | case CAN_BRAKE: |
wsalis01 | 1:edb687d65942 | 80 | break; |
wsalis01 | 1:edb687d65942 | 81 | |
wsalis01 | 1:edb687d65942 | 82 | case CAN_ACCEL: |
wsalis01 | 1:edb687d65942 | 83 | break; |
wsalis01 | 1:edb687d65942 | 84 | |
wsalis01 | 1:edb687d65942 | 85 | case CAN_FLWS: |
wsalis01 | 1:edb687d65942 | 86 | break; |
wsalis01 | 1:edb687d65942 | 87 | |
wsalis01 | 1:edb687d65942 | 88 | case CAN_FRWS: |
wsalis01 | 1:edb687d65942 | 89 | break; |
wsalis01 | 1:edb687d65942 | 90 | |
wsalis01 | 1:edb687d65942 | 91 | case CAN_RLWS: |
wsalis01 | 1:edb687d65942 | 92 | break; |
wsalis01 | 1:edb687d65942 | 93 | |
wsalis01 | 1:edb687d65942 | 94 | case CAN_RRWS: |
wsalis01 | 1:edb687d65942 | 95 | break; |
wsalis01 | 1:edb687d65942 | 96 | |
wsalis01 | 1:edb687d65942 | 97 | case CAN_STATUS: |
wsalis01 | 1:edb687d65942 | 98 | _console.printf("%s\r\n", "CAN_STATUS Message received."); |
wsalis01 | 1:edb687d65942 | 99 | break; |
wsalis01 | 1:edb687d65942 | 100 | |
wsalis01 | 1:edb687d65942 | 101 | default: |
wsalis01 | 1:edb687d65942 | 102 | _console.printf("%s\r\n", "Message decode failure."); |
wsalis01 | 1:edb687d65942 | 103 | break; |
wsalis01 | 1:edb687d65942 | 104 | } |
wsalis01 | 1:edb687d65942 | 105 | } else { |
wsalis01 | 1:edb687d65942 | 106 | _console.printf("%s\r\n", "Message recieve failure."); |
wsalis01 | 1:edb687d65942 | 107 | } |
wsalis01 | 1:edb687d65942 | 108 | } |