Skip to content

[Add] main.cpp #2

@woojin-devv

Description

@woojin-devv
#include "mbed.h"
#include "string.h"
#include "L2_FSMmain.h"
#include "L3_FSMmain.h"

#include "L3_role.h"
#include "L3_Quiz.h"
#include "L3_state.h"

//serial port interface
Serial pc(USBTX, USBRX);

//GLOBAL variables (DO NOT TOUCH!) ------------------------------------------

//source/destination ID
uint16_t input_thisId=1;
uint16_t input_destId=0;

//FSM operation implementation ------------------------------------------------
int main(void){

    //initialization
    pc.printf("------------------ protocol stack starts! --------------------------\n");


        //source & destination ID setting
    pc.printf(":: ID for this node : ");
    pc.scanf("%hu", &input_thisId);

    pc.printf(":: ID for the destination : ");
    pc.scanf("%hu", &input_destId);
    pc.getc();

    if (input_thisId == input_destId) {
        pc.printf("[ERROR] Node ID and Destination ID cannot be the same.\n");
        return -1;
    }

    register_node(input_thisId);  // 유효 노드 등록, Host의 destID는 존재하지 않음

    pc.printf("endnode : %i, dest : %i\n", input_thisId, input_destId);
    pc.printf(":: Registered ID List:\n");

    for (int i = 0; i < MAX_NODE_COUNT; i++) {
        pc.printf("  valid_node_ids[%d] = %d\n", i, valid_node_ids[i]);
    }

     if (is_host_node(input_destId)) {  // Host -> Quiz에 따라 정답을 기다림
        l3_state = WAIT_ANSWER;
    } else {
        l3_state = WAIT_QUIZ; //User -> Quiz 정답을 기다림림
    }

    // 역할 분기 처리
    switch (l3_state) {
        case WAIT_ANSWER: // Host
            pc.printf(":: role: HOST\n");
            L3_quiz_showMenuToHost(pc);
            if (!L3_quiz_select(pc)) {
                return -1;
            }
            break;

        case WAIT_QUIZ: // User
            pc.printf(":: role: USER\n");
            L3_quiz_showSelectedToUser(pc);
            L3_quiz_receiveAnswerFromUser(pc);
            break;

        default:
            pc.printf("[ERROR] Invalid state for role initialization: %s\n", L3_stateToStr(l3_state));
            return -1;
    }

    // User 역할
    else {
        pc.printf(":: role: USER\n");
        L3_quiz_showSelectedToUser(pc);         // Host가 선택한 퀴즈 보여주기
        L3_quiz_receiveAnswerFromUser(pc);      // User의 답변 받고 채점
    }

    //initialize lower layer stacks
    L2_initFSM(input_thisId);
    L3_initFSM(input_destId);
    
    while(1)
    {
        L2_FSMrun();
        L3_FSMrun();
    }
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions