void run_main_loop(SOCKET *socket_server)
{
    broadcast_message_t previous_message = { 0 };
    char buffer[BUFFER_LENGTH] = { 0 };

    while (1)
    {
        broadcast_message_t message = { 0 };
        if (fill_message(socket_server, &message, &buffer) < 0) {
            break;
        }
        if (parse_msg_json(buffer, strlen(buffer), &message) != 0) {
            fprintf(stderr, "Fail parse json\n");
        }
        else {
            if (!are_same_messages(&previous_message, &message))
            {
                /*
                print_message(&previous_message);
                print_message(&message);
                */
                interpret_message(&message);
            }
        }
        previous_message = message;
    }
}
Ejemplo n.º 2
0
int main(void){
    char message[MAX_MESSAGE_LENGTH];	//Buffer for UART messages
    int uart_recv;
    char uart_err;
    char uart_char;
    ioinit();
    sleep_enable();
    set_sleep_mode(SLEEP_MODE_IDLE);
    sei();
    message_index = 0;
    while(1){
        uart_recv = uart_getc();
        uart_err = (uart_recv & 0xff00) >> 8;
        uart_char = uart_recv & 0x00ff;
        if(!(uart_err) && message_index < MAX_MESSAGE_LENGTH && uart_char != '\r')
        {
            message[message_index++] = uart_char;
        }
        if(uart_char == '\n')
        {
            message[message_index-1]='\0';
            message_index = 0;
            interpret_message(message);
        } 
        sleep_cpu(); // we wake up when we receive a character, right?
    }
    return 0;
}
Ejemplo n.º 3
0
void interpret_command(UART_HandleTypeDef *UartHandle){

  //if return is sent, create a new line:
  uint8_t result[RESULTLENGTH] = {0};
  
  //printf("%s\n\r",(UartHandle->pRxBuffPtr));
  
  //check the incoming character:
  if((*UartHandle->pRxBuffPtr) == 13 || (*UartHandle->pRxBuffPtr) == 0x0A){
    //newline: return:
    //strcat((char *) result, "\n\r");
   
    //interpret message
    interpret_message(command,incoming_length,result);
    
    //add > - to result
    //strcat((char*)result,"\n> ");
    
    //reset command 
    reset_message(command, &incoming_length, COMMANDLENGTH);

  //}else if((*UartHandle->pRxBuffPtr) == 127){
    //backspace:
    /*
    if(incoming_length > 0){
      result[0] = (*UartHandle->pRxBuffPtr);
      result[1] = '\0';
      command[--incoming_length] = '\0';
    }
    */
    
    //send if there is something to send via UART
    if(strlen((const char*)result) > 0){
      txFunction(UartHandle,result, strlen((const char*)result));
    }
    
  }else if(strlen((char*)command) >= COMMANDLENGTH-1){
    reset_message(command,&incoming_length,COMMANDLENGTH-1);
    strcat((char*)result, "message too long...\n\r");
    show_help(result);
    //add > - to result
    strcat((char*)result,"\n> ");
  }else{
    //legal char:
    result[0] = (*UartHandle->pRxBuffPtr);
    result[1] = '\0';
    command[incoming_length++] = (*UartHandle->pRxBuffPtr);
  }

  //enable RX again:
  irqfunc(&huart3);

}
Ejemplo n.º 4
0
int main(void)
{
    uint8_t msglen = 0;
    uint8_t msg[BUS_MAXRECVMSGLEN];
    uint16_t sender = 0;
    uint16_t module_id = 0;

    io_initialize();
    clk_initialize();
    scomm_initialize_uart1(&g_serial_phy);

    //register_set_u16(MOD_eReg_ModuleID, 0x0003);
    register_get(MOD_eReg_ModuleID, 0, &module_id);
    bus_configure(&g_bus, module_id);
    bus_initialize(&g_bus, 0);// initialize bus on UART 0

    sei();
    LED_STATUS_OFF;
    LED_ERROR_OFF;
    clk_timer_start(&g_LED_timer, CLOCK_MS_2_TICKS(1000));

    while (1) {
        // check for message and read it
        if (bus_get_message(&g_bus)) {
            bgw_forward_bus_msg(&g_bus, &g_serial_phy);
            if (bus_read_message(&g_bus, &sender, &msglen, msg)) {
                interpret_message(sender, msglen, msg);
            }
        }
        bgw_forward_serial_msg(&g_bus, &g_serial_phy);

        if (clk_timer_is_elapsed(&g_LED_timer)) {
        	// cyclic reset of error LED
            LED_ERROR_OFF;
            LED_STATUS_TOGGLE;
            clk_timer_start(&g_LED_timer, CLOCK_MS_2_TICKS(1000));
        }
    }
    return 0;
}
Ejemplo n.º 5
0
static void interpret_one(gpointer d, gpointer ud)
{
    Atom*    a = (Atom*) d;
    GSList** stack = (GSList**) ud;

    /* g_debug("a->level=%i; e->last_level=%i", a->level, e->last_level); */
    if ( a->level < g_slist_length(*stack) ) {
        fold_to(stack, a->level);
    } else if ( a->level > g_slist_length(*stack) ) {
        /* implicit multipart */
        implicit_level_increase(stack);
    }

    switch (a->type) {
        case at_Header:
            interpret_header(stack, a->args);
            break;
        case at_Text:
            interpret_text(stack, a->args);
            break;
        case at_Message:
            interpret_message(stack, a->args);
            break;
        case at_Att:
            interpret_att(stack, a->args);
            break;

        case at_Multi:
            interpret_mlt(stack, a->args);
            break;

        case at_Empty:
        case at_Invalid:
        default:
            ;
    }
}
Ejemplo n.º 6
0
int main (void)
{
    uint8_t msglen = 0;
    uint8_t msg[BUS_MAXRECVMSGLEN];
    uint16_t module_id = BUS_UNKNOWNADR, sender = 0, val;
    uint16_t new_temp;

    DDRC |= ((1<<PC3) | (1<<PC4));
    PORTC &= ~((1<<PC3) | (1<<PC4));

    clk_initialize();

    //register_set_u16(MOD_eReg_ModuleID, 0x000E);

    // configure a bus node with address X
    register_get(MOD_eReg_ModuleID, 0, &module_id);
    bus_configure(&g_bus, module_id);
    bus_initialize(&g_bus, 0);// initialize bus on UART 0

    spi_master_init_blk();
    zagw_initialize();

    sei();

    register_get(APP_eReg_DesiredTempDay1, 0, &g_target_temp);

    gdisp_initialize();
    gdisp_goto_col_line(0,0);
    gdisp_put_text("aktuell");

    gdisp_goto_col_line(61,0);
    gdisp_put_text("Soll");

    draw_temperatures();
    draw_window_closed();

    gdisp_choose_font(gdisp_font1_x8);
    gdisp_goto_col_line(0,3);
    gdisp_put_text("Addr: ");
    draw_hex16_value(g_bus.sCfg.uOwnNodeAddress);

    clk_timer_start(&g_app_timer, 100);
    while (1) {
        if (bus_get_message(&g_bus)) {
            if (bus_read_message(&g_bus, &sender, &msglen, msg)) {
                interpret_message(&g_bus, msg, msglen, sender);
            }
        }
        if (clk_timer_is_elapsed(&g_app_timer)) {
            clk_timer_start(&g_app_timer,10);
            gdisp_choose_font(gdisp_font1_x8);
            gdisp_goto_col_line(0,3);
            gdisp_put_text("Temp: ");
            if (zagw_receive()) {
                val = zagw_get_bits();
                draw_hex16_value(val);
                new_temp = zagw_get_temperature();
                if (new_temp != g_current_temp) {
                    send_temperature(new_temp);
                }
                g_current_temp = new_temp;
                draw_temperatures();
            } else {
                gdisp_put_text("PERR");
            }
        }
    }
    return 0;
}