Subversion Repositories HomeAutomation

Rev

Rev 1595 | Rev 1598 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | SVN | RSS feed

#include <iostream>
#include <fstream>
#include <vector>
#include <string>

#include <stdio.h>

#include <boost/bind.hpp>
#include <boost/program_options.hpp>

#include "net/Manager.h"
#include "net/types.h"

#include "timer/Manager.h"
#include "timer/types.h"

#include "config/Manager.h"

#include "logging/Logger.h"

#include "can/Network.h"
#include "can/Monitor.h"
#include "can/Protocol.h"

using namespace atom;
 
logging::Logger LOG("Main");

net::Manager::Pointer NM = net::Manager::Instance();

net::ServerId server_id = 0;
timer::TimerId timer_id;

void Main_SlotOnNewState(net::ClientId client_id, net::ServerId server_id, net::ClientState client_state)
{
    std::cout << "client:" << client_id << " - New state: " << client_state << std::endl;
}

void Main_SlotOnNewData(net::ClientId client_id, net::ServerId server_id, type::Byteset data)
{
    char* t = new char[2048];
    
    memset(t, 0, sizeof(t));
    
    //LOG.Info("size:" + boost::lexical_cast<std::string>(data.GetSize()*3+2));
    
    for (unsigned int n = 0; n < data.GetSize(); n++)
    {
        unsigned char c = data[n];
    
        //LOG.Info(boost::lexical_cast<std::string>(n) + ":" + boost::lexical_cast<std::string>((unsigned int)c));
        
        //std::cout << std::dec << n << ":(dec)" << std::dec << (unsigned int)c << std::endl;
        std::cout << std::dec << n << ":(hex)" << std::hex << (unsigned int)c << std::endl;
        
        sprintf(t + n*2, "%02X", c);
    }
    
    
    std::cout << std::dec << "client:" << client_id << " - New data: " << t << std::endl;
    
    delete [] t;
}

void Main_SlotOnTimeout(timer::TimerId timer_id)
{
 /*   std::cout << "timer:" << timer_id << " - expired" << std::endl;
    
    std::string out_string = "Timeout!";
    
    type::Byteset out_data;
    
    strncpy(out_data.GetRaw(), out_string.data(), out_data.size());
    
   // NM->SendToAll(server_id, out_data);*/
}

int main(int argc, char **argv)
{
    std::vector<broker::Subscriber::Pointer> subscribers;
 
    config::Manager::Pointer CM = config::Manager::Instance();
    
    if (!CM->Set(argc, argv))
    {
        NM->Delete();
        return 0;
    }
    
    if (CM->Exist("ProtocolFile"))
    {
        LOG.Info("ProtocolFile: " + CM->GetAsString("ProtocolFile"));
        
        can::Protocol::Instance()->Load(CM->GetAsString("ProtocolFile"));
    }
    
    if (CM->Exist("MonitorPort"))
    {
        LOG.Info("MonitorPort: " + boost::lexical_cast<std::string>(CM->GetAsInt("MonitorPort")));
        
        subscribers.push_back(can::Monitor::Pointer(new can::Monitor(CM->GetAsInt("MonitorPort"))));  
    }
    
    if (CM->Exist("CanNet"))
    {
        type::StringList cannets = CM->GetAsStringVector("CanNet");
        
        for (int n = 0; n < cannets.size(); n++)
        {
            LOG.Info("CanNet[" + boost::lexical_cast<std::string>(n) + "]=" + cannets[n]);
            
            subscribers.push_back(can::Network::Pointer(new can::Network(cannets[n])));            
        }
        
    }
    
    
   
   /* timer::Manager::Pointer TM = timer::Manager::Instance();
    
    
    TM->Set(10000, true);
    
    TM->ConnectSlots(boost::bind(&Main_SlotOnTimeout, _1));
    */
    
   // std::cout << "connect slots2" << std::endl;
   // NM->ConnectSlots(boost::bind(&Main_SlotOnNewState, _1, _2, _3), boost::bind(&Main_SlotOnNewData, _1, _2, _3));
    
    
    try
    {
       // server_id = NM->StartServer(net::PROTOCOL_SERIAL, 2000);
    
       // timer_id = TM->Set(10000, true);
       
        
        //net::ClientId client_id_udp = NM->Connect(net::PROTOCOL_UDP, "192.168.1.250", 1100);
        //net::ClientId client_id_udp = NM->Connect(net::PROTOCOL_SERIAL, "/dev/ttyUSB0", 57600);
        
        //std::cout << "connected" << std::endl;
        
        /*char c[2] = { 251, 0 };
        
        std::cout << "before send " << std::endl;
        
        NM->SendTo(client_id_udp, c);*/
    }
    catch (std::exception e)
    {
        std::cerr << e.what() << std::endl;
    }
    
    std::cout << "sleep" << std::endl;
    
    sleep(100000000);
    
    return 0;
}