serial_connected_mcu_slave.cpp

Committer:
kachikyun
Date:
2016-07-10
Revision:
0:fb5a8d9d8aba

File content as of revision 0:fb5a8d9d8aba:

#include "serial_connected_mcu_slave.hpp"

namespace serial_connected_mcu{
    serial_connected_mcu_slave::serial_connected_mcu_slave(){
        port = new Serial(PIN_SERIAL_TX, PIN_SERIAL_RX);
        port->baud(BAUDRATE);
        array_of_read_data = new int16_t[SIZE_OF_READ_DATA];
        array_of_write_data = new int16_t[SIZE_OF_WRITE_DATA];
        is_locking = false;
        received_buffer.clear();
        
        port->attach(this, &serial_connected_mcu_slave::on_received, Serial::RxIrq);
    }
    
    serial_connected_mcu_slave::~serial_connected_mcu_slave(){
        delete (port);
    }
    
    void serial_connected_mcu_slave::set(int index_of_data, int16_t setting_data){
        while (is_locking);
        is_locking = true;
        array_of_write_data[index_of_data] = setting_data;
        is_locking = false;
    }
    
    int16_t serial_connected_mcu_slave::get(int index_of_data){
        return (array_of_read_data[index_of_data]);
    }
    
    void serial_connected_mcu_slave::on_received(){
        char received_char = port->getc();
        if (received_char == '\n'){
            //port->printf("%d,%d,%d,%d,%d,%d\n", array_of_write_data[0], array_of_write_data[1], array_of_write_data[2], array_of_write_data[3], array_of_write_data[4], array_of_write_data[5]);
            for (int i = 0;;i++){
                port->printf("%d", array_of_write_data[i]);
                if (i == (SIZE_OF_WRITE_DATA - 1)){
                    break;
                }
                port->printf(",");
            }
            port->printf("\n");
            string_to_int();
            received_buffer.clear();
            return;
        }
        received_buffer.push_back(received_char);
    }
    
    void serial_connected_mcu_slave::string_to_int(){
        std::string s;
        int i = 0;
        
        while (is_locking);
        is_locking = true;
        s.clear();
        
        for (int index = 0; index < received_buffer.size(); index++){
            char c = received_buffer[index];
            if (c == ','){
                array_of_read_data[i] = atoi(s.c_str());
                i++;
                s.clear();
            }
            else {
                s.push_back(c);
            }
        }
        array_of_read_data[i] = atoi(s.c_str());
        is_locking = false;
    }

}