Version FC

Dependencies:   DmTftLibrary eeprom SX1280Lib filesystem mbed

Fork of MSNV2-Terminal_V1-5 by Francis CHATAIN

Controller.cpp

Committer:
patrick_duc
Date:
2018-09-04
Revision:
21:8524d815c587
Child:
23:d7df2e2d28de

File content as of revision 21:8524d815c587:

/*
 * MISNet   
 *
 *  Controller.cpp 
 *
 *  Created on: August 17, 2018
 *      Author: Francis CHATAIN
 *
 */

#include "Context.h"

#ifndef TEST_ENVIRONMENT
#include "Tftlcd.h"
#include "Lora.h"
#endif


#include "main.h"
#include "Controller.hpp"

#include "DataBase.hpp"
#include "MessageFactory.hpp"
#include "ExtMemory.hpp"


using namespace misnet;


static DataBase dataBase    ;                   // Database creation 
static MessageFactory messageFactory    ;       // Messages Maker   (Sensors, Config, Synchro ...)
static ExtMemory extMemory  ;                   // Memoire externe

#ifndef TEST_ENVIRONMENT
Tftlcd     tftlcd      ;   // eventuellement a déplacer   (uniquement valable sur les conf nucléo)
#endif



Controller::Controller()  {   // constructeur 
    // Basic  instance
    //this.dataBase    =  DataBase;
    //this.messageFactory     =  Message   ;      // Messages Maker   (Sensors, Config, Synchro ...)
}

Controller::~Controller() { }   // delete xxx;


#ifndef TEST_ENVIRONMENT
void Controller::start (){     // @brief Start the Controller
    initInterfaces      ()  ;   // Primary interface uart, i2c, spi ...
    extMemory.read      (&dataBase)  ;   // Read memory to know the list of sensor availables, fill DataBase
    initSensors         ()  ;   // Depend of the list of sensors  launch each
    initActuators       ()  ;   // Depend of the list of actuator launch each
    
    // Read Radio parameter in Database for Lora interface   (example)
    uint32_t                        freq    ; 
    RadioLoRaBandwidths_t           bw      ;
    RadioLoRaSpreadingFactors_t     sf      ;  
    int8_t                          pwr     ; 
    uint8_t                         bsz     ;
    int16_t                         terminal_heartbeat_period;
    int16_t                         payload_heartbeat_period;
    dataBase.getRadioParameter  ( freq, bw, sf, pwr, bsz, terminal_heartbeat_period, payload_heartbeat_period) ; 
     
    initLora        ( freq, bw, sf, pwr ) ;    // Initialise the radio module 
    
    printf( "*** APP ***  start   %ld %d %d %d %d %d \r\n",freq, bw, sf, pwr, bsz, time) ; 

    tftlcd.Update   ( freq, bw, sf, pwr, bsz,  payload_heartbeat_period ) ;     // Show information 
    
    printf( "*** APP_ ***  Start Controller (Send message GoodHealth)\r\n");
    messageFactory.buildGoodhealth () ; 
    //sendMessageLora () ; 
}

void Controller::initInterfaces    ()  {
    // Depend of the configuration read on DataBase (memory origin)
    
    debugSerial = new RawSerial (USBTX,USBRX, 230400);        // Debug Link 
    tftlcd.Init () ;  
    // I2C, SPI, UART .... 
}


void Controller::initSensors(){
    printf( "*** APPP ***  initSensors \r\n");  
    // depend of the list identified   (example)
    //bme280 = new BME280(i2c_rt);
    // depend of the list identified 
    //bme280->init(config->getBME280_MODE()); 
//    iks01a2.read () ; 
}

void Controller::initActuators(){
    // depend of the list identified   (example)
    //bme280 = new BME280(i2c_rt);
    // depend of the list identified 
    //bme280->init(config->getBME280_MODE());
}

void Controller::manageSensors     () {
    readSensors                     () ; 
    messageFactory.buildSensors           () ; 
    sendMessage                     () ; 
}

void Controller::manageGoodhealth  () {
    readSensors                     () ; 
    messageFactory.buildGoodhealth        () ; 
    //sendMessage                   () ; 
}

void Controller::manageSynchro     () {
    messageFactory.buildSynchro           () ; 
    //sendMessage                   () ; 
}

void Controller::manageConfiguration   () {
    messageFactory.buildConfiguration         () ; 
    //sendMessage                       () ; 
}

void Controller::manageListening () {
}


void Controller::getScheduling (uint16_t &TimerPayload,  uint16_t &TimerGoodhealth, uint16_t &TimerSynchro, uint16_t &TimerListening ) {

    TimerPayload        = 3L     ;   // TODO  Dépend de la lecture de la memoire  (ici simulé)
    TimerGoodhealth     = 60L    ; 
    TimerSynchro        = 0L     ;  
    TimerListening      = 0L     ;                  
}

void Controller::sendMessage       () {
    printf( "*** APP_ ***  sendMessage \r\n");
    sendMessageLora () ; 
}


void Controller::readSensors       () {
    printf( "*** APP_ ***  readSensors \r\n");
    printf("*** APP *** loop on all channels\r\n");
    short nbSensors = dataBase.getNbService(Service::SENSOR);
    printf("*** APP *** there are %d sensors in this payload\r\n", nbSensors);
    // depend of the list identified 
    // Each sensor sends an event in the db
    //iks01a2.read () ; 
}

void Controller::writeActuators    () {
    // depend of the list identified 
    // Each sensor send can put a event in the queu
}

#endif