BA / SerialCom

Fork of OmniWheels by Gustav Atmel

Committer:
gustavatmel
Date:
Tue May 01 15:47:08 2018 +0000
Revision:
1:9c5af431a1f1
sdf

Who changed what in which revision?

UserRevisionLine numberNew contents of line
gustavatmel 1:9c5af431a1f1 1 /*
gustavatmel 1:9c5af431a1f1 2 * SerialServer.cpp
gustavatmel 1:9c5af431a1f1 3 * Copyright (c) 2017, ZHAW
gustavatmel 1:9c5af431a1f1 4 * All rights reserved.
gustavatmel 1:9c5af431a1f1 5 *
gustavatmel 1:9c5af431a1f1 6 * Created on: 05.06.2017
gustavatmel 1:9c5af431a1f1 7 * Author: Marcel Honegger
gustavatmel 1:9c5af431a1f1 8 */
gustavatmel 1:9c5af431a1f1 9
gustavatmel 1:9c5af431a1f1 10 #include <vector>
gustavatmel 1:9c5af431a1f1 11 #include <mbed.h>
gustavatmel 1:9c5af431a1f1 12 #include "SerialServerSend.h"
gustavatmel 1:9c5af431a1f1 13
gustavatmel 1:9c5af431a1f1 14
gustavatmel 1:9c5af431a1f1 15 using namespace std;
gustavatmel 1:9c5af431a1f1 16
gustavatmel 1:9c5af431a1f1 17 const float SerialServerSend::PERIOD = 0.001f; // the period of the timer interrupt, given in [s]
gustavatmel 1:9c5af431a1f1 18 /**
gustavatmel 1:9c5af431a1f1 19 * Create a serial server object.
gustavatmel 1:9c5af431a1f1 20
gustavatmel 1:9c5af431a1f1 21
gustavatmel 1:9c5af431a1f1 22
gustavatmel 1:9c5af431a1f1 23 SerialServer::SerialServer(RawSerial& serial, StateMachine& stateMachine) : serial(serial), stateMachine(stateMachine), thread(osPriorityRealtime, STACK_SIZE) {
gustavatmel 1:9c5af431a1f1 24 */
gustavatmel 1:9c5af431a1f1 25 SerialServerSend::SerialServerSend(RawSerial& serial) : serial(serial), thread(osPriorityRealtime, STACK_SIZE) {
gustavatmel 1:9c5af431a1f1 26 // initialize local values
gustavatmel 1:9c5af431a1f1 27
gustavatmel 1:9c5af431a1f1 28 input.clear();
gustavatmel 1:9c5af431a1f1 29 output.clear();
gustavatmel 1:9c5af431a1f1 30
gustavatmel 1:9c5af431a1f1 31 // start thread and ticker timer interrupt service routine
gustavatmel 1:9c5af431a1f1 32
gustavatmel 1:9c5af431a1f1 33 thread.start(callback(this, &SerialServerSend::run));
gustavatmel 1:9c5af431a1f1 34 ticker.attach(callback(this, &SerialServerSend::sendSignal), PERIOD);
gustavatmel 1:9c5af431a1f1 35 }
gustavatmel 1:9c5af431a1f1 36
gustavatmel 1:9c5af431a1f1 37 /**
gustavatmel 1:9c5af431a1f1 38 * Delete the serial server object and release all allocated resources.
gustavatmel 1:9c5af431a1f1 39 */
gustavatmel 1:9c5af431a1f1 40 SerialServerSend::~SerialServerSend() {
gustavatmel 1:9c5af431a1f1 41
gustavatmel 1:9c5af431a1f1 42 ticker.detach();
gustavatmel 1:9c5af431a1f1 43 }
gustavatmel 1:9c5af431a1f1 44
gustavatmel 1:9c5af431a1f1 45 /**
gustavatmel 1:9c5af431a1f1 46 * This method is called by the ticker timer interrupt service routine.
gustavatmel 1:9c5af431a1f1 47 * It sends a signal to the thread to make it run again.
gustavatmel 1:9c5af431a1f1 48 */
gustavatmel 1:9c5af431a1f1 49 void SerialServerSend::sendSignal() {
gustavatmel 1:9c5af431a1f1 50
gustavatmel 1:9c5af431a1f1 51 thread.signal_set(signal);
gustavatmel 1:9c5af431a1f1 52 }
gustavatmel 1:9c5af431a1f1 53
gustavatmel 1:9c5af431a1f1 54 /**
gustavatmel 1:9c5af431a1f1 55 * This <code>run()</code> method contains an infinite loop with the run logic.
gustavatmel 1:9c5af431a1f1 56 */
gustavatmel 1:9c5af431a1f1 57 void SerialServerSend::run() {
gustavatmel 1:9c5af431a1f1 58
gustavatmel 1:9c5af431a1f1 59 Serial pc(PA_2, PA_3); // tx, rx
gustavatmel 1:9c5af431a1f1 60 pc.baud(9600);
gustavatmel 1:9c5af431a1f1 61
gustavatmel 1:9c5af431a1f1 62 while (true) {
gustavatmel 1:9c5af431a1f1 63
gustavatmel 1:9c5af431a1f1 64 // wait for the periodic signal
gustavatmel 1:9c5af431a1f1 65
gustavatmel 1:9c5af431a1f1 66 thread.signal_wait(signal);
gustavatmel 1:9c5af431a1f1 67
gustavatmel 1:9c5af431a1f1 68 if (output.size() == 0){
gustavatmel 1:9c5af431a1f1 69 output += "Hello nicolas\n";
gustavatmel 1:9c5af431a1f1 70 }
gustavatmel 1:9c5af431a1f1 71
gustavatmel 1:9c5af431a1f1 72 // transmit output
gustavatmel 1:9c5af431a1f1 73 while (serial.writeable() && (output.size() > 0)) {
gustavatmel 1:9c5af431a1f1 74 //pc.printf("Send To P: %s\r\n",output[0]);
gustavatmel 1:9c5af431a1f1 75
gustavatmel 1:9c5af431a1f1 76 serial.putc(output[0]);
gustavatmel 1:9c5af431a1f1 77 output.erase(0, 1);
gustavatmel 1:9c5af431a1f1 78 }
gustavatmel 1:9c5af431a1f1 79 }
gustavatmel 1:9c5af431a1f1 80
gustavatmel 1:9c5af431a1f1 81 }