Version FC

Dependencies:   DmTftLibrary eeprom SX1280Lib filesystem mbed

Fork of MSNV2-Terminal_V1-5 by Francis CHATAIN

main.cpp

Committer:
patrick_duc
Date:
2018-09-02
Revision:
20:b0281e8a375a
Parent:
15:9c1c4368670f
Child:
21:8524d815c587

File content as of revision 20:b0281e8a375a:

/*
 *  MISNet   
 *
 *  Main   TERMINAL VERSION HALF DUPLEX 
 *
 *  Created on: August 17, 2018    Author: Francis CHATAIN
 *
 */
 
#include "mbed.h"
#include "sx1280-hal.h"
#include "stdio.h"
#include <string>

#include "main.h"
#include "Application.hpp"


using namespace std;
using namespace misnet;

//  INSTANCE of APPLICATION OBJECT 

Application     app                             ;       // Core of application start also 


//******************************************************************************
//     Timers
//******************************************************************************
uint16_t TimerPayload, TimerGoodhealth, TimerSynchro, TimerListening = 0L ;
volatile uint32_t listenFlag=0, syncFlag=0, goodHealthFlag=0, payloadFlag=0, irqFlag=0; 
 
LowPowerTicker  wakeUpPayload                   ;       // normal wake up 
void wakeUpPayloadCallback      (void)          ; 

LowPowerTicker  wakeUpGoodhealth                ;       // GoodHealth wake up 
void wakeUpGoodhealthCallback   (void)          ; 

LowPowerTicker  wakeUpSynchro                   ;       // Synchro wake up  (Mode B)
void wakeUpSynchroCallback      (void)          ; 

LowPowerTicker  wakeUpListening                 ;       // Listening wake up (Mode C)
void wakeUpListeningCallback    (void)          ; 

void            setup ()                        ;       // Init Terminal 
void            loop  ()                        ;       // Main Loop 
void            wakeUpIrqTacSwitch ()           ;       // IRQ Tac Switch


// ============================================================================ Main
int main( ) { setup () ; loop () ; }
// ============================================================================


// ============================================================================ Setup
void setup () {

    app.start    ();         // Start Application 
    
    // -------------------------------------------------- Scheduler  by IRQ or watch dog 
    
    app.getScheduling          (TimerPayload, TimerGoodhealth, TimerSynchro, TimerListening) ;   // What mode ? 
    
    wakeUpPayload.attach       (&wakeUpPayloadCallback,     (float)TimerPayload )   ;       // Mode A   +  All Mode   
    wakeUpGoodhealth.attach    (&wakeUpGoodhealthCallback,  (float)TimerGoodhealth) ;       // Mode A   +  All Mode 
    
    if ( TimerSynchro !=0) 
        wakeUpSynchro.attach   (&wakeUpSynchroCallback,     (float)TimerSynchro)    ;       // Mode B
        
    if ( TimerSynchro !=0) 
        wakeUpListening.attach (&wakeUpListeningCallback,(float)TimerListening)     ;       // Mode C    
       
        
     // TODO : Assicier l'IRQ du TAC switch au handler d'exception    wakeUpIrqTacSwitch
     
           
}
//==============================================================================


// ============================================================================= LOOP  
void loop () { 
    while(1) { 
        if(listenFlag){     // Listen radio
            listenFlag=0;  
            app.manageListening();
            printf ("*** MAIN ***  wakeUpListeningCallback   \r\n");
        }  
        if(syncFlag){       // Prepare response
            syncFlag=0; 
            app.manageSynchro();
            printf ("*** MAIN ***  wakeUpSynchroCallback   \r\n");
        } 
        if(goodHealthFlag){ // Prepare response
            goodHealthFlag=0; 
            app.manageGoodhealth(); 
            printf ("*** MAIN ***  wakeUpGoodhealthCallback  r\n");
        } 
        if(payloadFlag){    // read Sensors
            payloadFlag=0; 
            app.manageSensors(); 
            printf ("*** MAIN ***  wakeUpPayloadCallback   \r\n"); 
        }  
        if(irqFlag){        // handle IRQ actions
            irqFlag=0; 
            app.manageConfiguration(); 
            printf ("*** MAIN ***  wakeUpIrqTacSwitch   \r\n"); 
        } 
        // deepsleep ();    // breaks UART 
        //sleep () ; 
        wait(1);
    } 
}
// No action : all event by IRQ 
//==============================================================================




// IRQ du tac switch    TODO 
// ============================================================ IRQ TAC SWITCH
void wakeUpIrqTacSwitch (void) {
    //printf ("*** MAIN ***  wakeUpIrqTacSwitch   \r\n");  
    //app.manageConfiguration         () ;   // IRQ  
    irqFlag=1; 
}


// ============================================================ WATCH DOG PAYLOAD 
void wakeUpPayloadCallback (void) {
    //printf ("*** MAIN ***  wakeUpPayloadCallback   \r\n");  
    //app.manageSensors         () ;   // read Sensors   
    payloadFlag=1; 
}

// ============================================================ WATCH DOG GOODHEALTH
void wakeUpGoodhealthCallback (void) {
    //printf ("*** MAIN ***  wakeUpGoodhealthCallback  ==========================   \r\n");
    //app.manageGoodhealth () ;   // Prepare response  
    goodHealthFlag=1; 
}

// ============================================================ WATCH DOG SYNCHRO
void wakeUpSynchroCallback (void) {
    //printf ("*** MAIN ***  wakeUpSynchroCallback   \r\n");
    //app.manageSynchro () ;   // Prepare response  
    syncFlag=1;
}

// ============================================================ WATCH DOG LISTENING
void wakeUpListeningCallback (void) {
    //printf ("*** MAIN ***  wakeUpListeningCallback   \r\n");
    //app.manageListening () ;   // Ecoute radio  
    listenFlag=1;   
}

//*****************************************************************************