Tufts Hybrid Racing Control Node

Committer:
wsalis01
Date:
Thu Jan 12 20:44:16 2012 +0000
Revision:
0:9b224b68e7c7
Child:
1:edb687d65942

        

Who changed what in which revision?

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