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