Tufts Hybrid Racing Control Node

ControlNode.cpp

Committer:
wsalis01
Date:
2012-04-15
Revision:
1:edb687d65942
Parent:
0:9b224b68e7c7

File content as of revision 1:edb687d65942:

/*
 * File: ControlNode/ControlNode.cpp
 * Author: William Jessup Salisbury
 * Company: Tufts Hybrid Racing Team
 * Copyright: CC BY-NC-SA 3.0
 * Date: 1/12/2012
 */

#include "mbed.h"
#include "CANProtocol.h"
#include "ControlNode.h"

ControlNode::ControlNode() : _can(CAN_RX, CAN_TX), _console(USBTX, USBRX), _syncID(0) {
    //Nothing to see here
}

void ControlNode::Init() {
    /* CAN initialization */
    _can.frequency(CAN_FREQUENCY);
    _can.attach(this, &ControlNode::canReceive);

    /* Ticker initialization */
    _syncTimer.attach_us(this, &ControlNode::canSync, tickerTimeout_us);

    /* Print startup message */
    _console.printf("%s\r\n", "ControlNode instantiated.");
}

ControlNode::~ControlNode() {
    _syncTimer.detach();
}

void ControlNode::canReset() {
    CANMessage msg;
    msg.id = CAN_RESET;
    msg.len = 0;
    if (_can.write(msg)) {
        _console.printf("%s\r\n", "Reset message sent.");
    } else {
        _console.printf("%s\r\n", "Reset message send failure.");
    }
}

void ControlNode::canSync() {
    CANMessage msg;
    msg.id = CAN_SYNC;
    msg.len = 1;
    msg.data[0] = (++_syncID % 0xFF);
    if (_can.write(msg)) {
        _console.printf("%s\r\n", "Sync message sent.");
    } else {
        _console.printf("%s\r\n", "Sync message send failure.");
    }
}

void ControlNode::canSend() {
    CANMessage msg;

    if (_can.write(msg)) {
        _console.printf("%s\r\n", "Message sent.");
    } else {
        _console.printf("%s\r\n", "Message send failure.");
    }
}

void ControlNode::canReceive() {
    CANMessage msg;

    if (_can.read(msg)) {

        _console.printf("%s\r\n", "Message received.");

        if (msg.data[0] != _syncID) {
            _console.printf("%s\r\n", "'_syncID' mismatch.");
            return;
        }

        switch (msg.id) {
            case CAN_BRAKE:
                break;

            case CAN_ACCEL:
                break;

            case CAN_FLWS:
                break;

            case CAN_FRWS:
                break;

            case CAN_RLWS:
                break;

            case CAN_RRWS:
                break;

            case CAN_STATUS:
                _console.printf("%s\r\n", "CAN_STATUS Message received.");
                break;

            default:
                _console.printf("%s\r\n", "Message decode failure.");
                break;
        }
    } else {
        _console.printf("%s\r\n", "Message recieve failure.");
    }
}