Coordinator v2

Dependencies:   NerfUSXbee PinDetect EthernetInterface JSON MFRC522 WebSocketClient mbed-rtos mbed

main.cpp

Committer:
Ismael Balafrej
Date:
2017-04-10
Revision:
1:e1c5259b7d9a
Child:
2:019d8848cf7e

File content as of revision 1:e1c5259b7d9a:

#include <vector>
#include "ports.hpp"
#include "serverEvents.hpp"
#include "Target.hpp"
#include "RealXbeeReceiver.hpp"
#include "BtnHandler.hpp"
#include "GameCoordinator.hpp"
#include "FreeMem.h"
#include "MFRC522.h"

#define MF_RESET    D8

DigitalOut LedGreen(LED1);
MFRC522 RfChip(p5, p6, p7, p21, p22);

int main()
{
    cls();
    toPc("Coordinator starting...");
    toPc("Initial Memory: %i", FreeMem());

    //Starting the different threads
    //Websocket
    Thread Twebsocket_message_receiver(websocket_message_receiver, osPriorityLow, 2300);
    Thread Twebsocket_message_sender(websocket_message_sender, osPriorityLow, 1500);

    //Xbee
    RealXbeeReceiver xbeeReceiver;
    xbeeReceiver.start(&dispatch_event_from_target);

    //Btn interupts
    BtnHandler startBtn(p21, "start");
    BtnHandler nextBtn(p22, "navigate", "next");
    BtnHandler previousBtn(p23, "navigate", "previous");

    //Creating the targets with their 64 bits address
    //Bruno/Max Router
    gameCoordinator.targets.push_back(Target(0x0013A200, 0x4086DA0E, 0));
    gameCoordinator.targets.push_back(Target(0x0013A200, 0x4086DA0E, 1));
    //TODO: more targets

    RfChip.PCD_Init();

    while(1) {
        LedGreen = 1;

        // Look for new cards
        if ( ! RfChip.PICC_IsNewCardPresent())
        {
            toPc("No card detected");
            Thread::wait(500);
            continue;
        }
    
        // Select one of the cards
        if ( ! RfChip.PICC_ReadCardSerial())
        {
            toPc("Cant read serial");
            Thread::wait(500);
            //wait_ms(500);
            continue;
        }
        toPc("Printing card");
        LedGreen = 0;
 
        // Print Card UID
        pc.printf("Card UID: ");
        for (uint8_t i = 0; i < RfChip.uid.size; i++)
        {
        pc.printf(" %X02", RfChip.uid.uidByte[i]);
        }
        pc.printf("\n\r");


        //Memory monitoring
        // toPc("Thread Twebsocket_message_receiver max stack: %i / %i", Twebsocket_message_receiver.max_stack(), Twebsocket_message_receiver.stack_size());
        // toPc("Thread Twebsocket_message_sender max stack: %i / %i", Twebsocket_message_sender.max_stack(), Twebsocket_message_sender.stack_size());
        // toPc("Thread gameCoordinator.Tget_next_round max stack: %i / %i", gameCoordinator.Tget_next_round.max_stack(), gameCoordinator.Tget_next_round.stack_size());
        // toPc("Thread xbeeReceiver.message_handler_thread max stack: %i / %i", xbeeReceiver.message_handler_thread.max_stack(), xbeeReceiver.message_handler_thread.stack_size());
        // toPc("Thread xbeeReceiver.message_reader_thread max stack: %i / %i", xbeeReceiver.message_reader_thread.max_stack(), xbeeReceiver.message_reader_thread.stack_size());
        // toPc("Free Memory: %i", FreeMem());
        Thread::wait(1000);
    }
    //Thread::wait(osWaitForever);
}