Tufts Hybrid Racing Control Node

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?

UserRevisionLine numberNew 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 }