示例#1
0
文件: procABC.c 项目: y36ding/Barby1
void procA ()
{
	//receive the message envelope from CCI when user types in 's'
	//then deallocate the received message envelope
	ps("1");
	MsgEnv *init_msg = (MsgEnv*)receive_message();

	while (init_msg==NULL) {
		init_msg = (MsgEnv*)receive_message();
	}
	release_message_env(init_msg);
	ps("2");

	//initialize counter
	int num_count = 0;

	//loop forever
	while(1)
	{
		//request a message envelope, and set the type to COUNT_REPORT
		//set the data field of the msg env equal to the counter
		MsgEnv *toB = (MsgEnv*)request_msg_env();
		toB->msg_type = COUNT_REPORT;
		toB->data[0] = (char)num_count;
		toB->data[1] = '\0';

		//send the message envelope to B
		//increment the counter and yield the processor to other processes
		send_message(PROCB_ID, toB);
		num_count++;
		ps("test2");
		release_processor();
	}
}
示例#2
0
//Test 1 reciever (message can be accurately sent/recieved)
void proc2(void) {
    int pid = 2;
    int sender = 1;
    msgbuf *msg;
    
    msg = receive_message(&sender);
    
    //check message contents
    if (msg->mtype == DEFAULT && msg->mtext[0] == MSG_TEXT_1){
        test_status[0] = TEST_SUCCESS;//TEST 1: Message contents same as when sent
    } else {
        test_status[0] = TEST_FAILURE;//message contents incorrect
    }
    
    release_memory_block(msg);
    
    //Done testing
    set_process_priority(pid, LOWEST);

#ifdef _DEBUG_HOTKEYS
    // Force this process to be BLOCKED_ON_RECEIVE
    receive_message(NULL);
#endif // _DEBUG_HOTKEYS

    while (1) {
        release_processor();
    }
}
示例#3
0
int main () {
    int socket_desc = init();
    
    
    char *message = "GET /var/14 HTTP/1.1\r\nHost:pb-homework.appspot.com\r\n\r\n";
    send_message(socket_desc, message);
    
    
    char server_reply[2000];
    receive_message(server_reply, socket_desc);
   
    
    char *secret_ptr = strstr(server_reply, "secret=");
    char *message2=malloc(sizeof(char)*100);
    sprintf(message2, "GET /var/14?%s HTTP/1.1\r\nHost:pb-homework.appspot.com\r\n\r\n", secret_ptr);
    message=message2;
    
    send_message(socket_desc, message);
    receive_message(server_reply, socket_desc);
    
    
    int result = count_result(server_reply);
    
    char *message3=malloc(sizeof(char)*100);
    sprintf(message3, "POST /var/14 HTTP/1.1\r\nHost:pb-homework.appspot.com\r\nContent-length: 8\r\n\r\nresult=%d", result);
    message=message3;
    
    
    send_message(socket_desc, message);
    receive_message(server_reply, socket_desc);
    
    close(socket_desc);
}
示例#4
0
    /** Receive data.
      *
      * \warning You should not rely on receiving a single specific data element 
      *          with the fast_client and fast_server implementation. Expect data to get lost.
      *
      * \param [in,out] t data to be received
      * \param [in] timeout_ms Maximum wait time in milliseconds to receive data.
      *             Timeout is set to 1 second by default.
      * \returns true if data was received successfully.
      * \returns false when receive timeout occurred.
      * \throws ib_error on error
      */
    virtual bool receive(T &t, int timeout_ms = 1000)
    {
      IB_ASSERT(network_entity::_s, ib_error::EINVALIDSOCKET);

      io::ensure_cleanup_partial_messages ecpm(this->get_socket());

      const bool has_wait = (timeout_ms != 0);
      const int max_skip = _enable_skip ? _recv_skip : 0;
      int k = max_skip;
       
      bool has_data = false;
      while (k >= 0 && receive_message(t, ZMQ_DONTWAIT)) {
        --k;
      }

      // Received at least one message from queue.
      if (k != max_skip) {
          return true;
      }

      // We haven't received anything. See if waiting is ok.
      if (has_wait && io::is_data_pending(*network_entity::_s, timeout_ms)) {
        receive_message(t, 0);
        return true;
      } else {
        return false;
      }

    }
示例#5
0
//TC 1: Delayed message sending & no preemption 
void proc1(void) {	
	MSG_BUF* envelope = NULL;
	char* msg = "SE 350";
	
	uart1_put_string("\n\r");
	uart1_put_string("G003_test: START\n\r");
	uart1_put_string("G003_test: total ");
	uart1_put_char(total + 48);
	uart1_put_string(" tests\n\r");
	
	prev_pid = 1;
	
	envelope = (MSG_BUF*)request_memory_block();

	strcpy(envelope->mtext, msg);
	delayed_send(1, envelope, 5000);
	envelope = (MSG_BUF*)receive_message(NULL);

	if (strcmp(envelope->mtext, msg) == 0) {
		prev_success = 1;
	} else {
		prev_success = 0;
	}

	release_memory_block(envelope);

	if (prev_success) {
		uart1_put_string("G003_test: test ");
		uart1_put_char(1 + 48);
		uart1_put_string(" OK\n\r");
		pass = pass + 1;
	} else {
		uart1_put_string("G003_test: test ");
		uart1_put_char(1 + 48);
		uart1_put_string(" FAIL\n\r");
	}

	//TC 2: Blocked on receive & preemption
	envelope = (MSG_BUF*)receive_message(NULL);

	prev_success = 1;  // Checks if you ever get here.

	release_memory_block(envelope);

	if (prev_success) {
		uart1_put_string("G003_test: test ");
		uart1_put_char(2 + 48);
		uart1_put_string(" OK\n\r");
		pass = pass + 1;
	} else {
		uart1_put_string("G003_test: test ");
		uart1_put_char(2 + 48);
		uart1_put_string(" FAIL\n\r");
	}

	while (1) {
		release_processor(); 
	}	
}
// display thread handler
void segment_display(void const * arg){
	uint16_t LED_pins[4] = { GPIO_Pin_12, GPIO_Pin_13, GPIO_Pin_14, GPIO_Pin_15 };
	int count = 0;
	char key = DUMMY_KEY, led = '1';
	int mode = TEMP_MODE;
	float temperature = 50.0;
	float pitch = 0.0;
		
	display_init();
	
	float data; 
	
	while(1){
		osSignalWait(DISPLAY_READY, osWaitForever);
				
		// try to get the keypad message		
		if (receive_message(&data, keypad_queue)){
			key = (char)(((int)data) + '0');
			
			// figure out which type of key was pressed (i.e. mode or led) and adjust variables accordingly. 
			if (key == TEMP_MODE_KEY || key == MEMS_MODE_KEY){
				mode = key == TEMP_MODE_KEY ? TEMP_MODE : MEMS_MODE;
			} else {
				led = key;
			}			
		}
		
		// try to get the pitch message
		if (receive_message(&data, pitch_queue)){
			pitch = data;
		}
		
		// try to get the temperature message
		if (receive_message(&data, temp_queue)){
			temperature = data;
		}
				
		GPIO_ResetBits(GPIOD, GPIO_SEGMENT_PINS);
		GPIO_ResetBits(GPIOE, GPIO_DIGIT_SELECT_PINS);
	
		// run the display effect depending on whether or not an alarm is triggerd and the type of mode.
		if (temperature < ALARM_THRESHOLD || (count % (2 * TIM3_DESIRED_RATE)) < TIM3_DESIRED_RATE) {		
			if (mode == TEMP_MODE){
				GPIO_ResetBits(GPIOD, ALL_LED_PINS);
				display_value(temperature, count, TEMP_MODE); 
			} else {
				display_value(pitch, count, MEMS_MODE);
			}
		}
		
		if (mode == MEMS_MODE){
			display_LED(pitch, count, LED_pins[(led - '1')]);
		}
		
		count++;
	}
}
int
/*main( int argc, char **argv )
{*/
test_message(){

  char *comeback, one[] = "the quick brown fox", two[]="jumps over the lazy dog";
  pthread_t receive = pthread_self();
  int size;

  /* Don't start if we can't get the message system working. */

  if (messages_init() == MSG_OK) {

    /* Send and receive from destination process 1 (without threads running, we'll receive on thread 1 in torch's pthread implementation. */

    /* Send a single message for starters. */

    if (send_message_to_thread( receive, one, strlen(one)+1) != MSG_OK) {
      printf( "first failed\n" );
    }

    if (receive_message( &receive, &comeback, &size) == MSG_OK) {
      printf ("received message 1--%s--size %d\n", comeback, size );
    } else {
      printf ("first receive failed\n");
    }

    /* Ensure that we can have some capacity in our message system. */

    if (send_message_to_thread( receive, two, strlen(two)+1) != MSG_OK) {
      printf( "second 1 failed\n" );
    }
    if (send_message_to_thread( receive, one, strlen(one)+1) != MSG_OK) {
      printf( "second 2 failed\n" );
    }

    if (receive_message( &receive, &comeback, &size) == MSG_OK) {
      printf ("received message 2--%s--size %d\n", comeback, size );
    } else {
      printf ("second 1 receive failed\n");
    }

    if (receive_message( &receive, &comeback, &size) == MSG_OK) {
      printf ("received message 3--%s--size %d\n", comeback, size );
    } else {
      printf ("second 2 receive failed\n");
    }

    /* Clean up the message system. */

    messages_end();
  }

  return 1;
}
示例#8
0
文件: BA.c 项目: kaisert/kilobot
static void state_check_seeder()
{
    receive_message();
    if(role == SEEDER) {
        //propagate seederness
        message_out(EMPTY, id, M_SEEDER);
    } else {
        enable_tx = 0;
        message_out(EMPTY, EMPTY, EMPTY);
    }
    _delay_ms(10);
    ++counter;
    if(counter >= CHECK_SEEDER_COUNT) {
        //after CHECK_SEEDER_COUNT rounds, check, whether enough seeders are visible
        RESET_COUNTER;
        if(n_of_seeders() < (MIN_SEEDERS - (role == SEEDER))) {
            //if not, provoke new bottom election
            enable_tx = 1;
            message_out(EMPTY, EMPTY, M_NOT_ENOUGH_SEEDS);
            _delay_ms(100);
            state = ELECT_SEED_BOTTOM;
            if(role != SEEDER)
                role = BOTTOM_SEEDER;
        } else {
            enable_tx = 1;
            state = AWAIT_R_R;
            RESET_COUNTER;
        }
    }
}
示例#9
0
/* Sends message to user process 2 */
void test_proc_p2_3(void) {
    int result_pid = 2;
    msg_buf_t* msg_envelope = 0;
    char* sent_msg = "OS";
    char* received_msg = "SE350";

    msg_envelope = (msg_buf_t*)request_memory_block();

    strncpy(msg_envelope->msg_data, sent_msg, 2);
    send_message(PID_P2, msg_envelope);

    msg_envelope = (msg_buf_t*)receive_message(NULL);

    if (strcmp(msg_envelope->msg_data, received_msg) == 5) {
        printf("G005_test: test 3 OK\r\n");
    } else {
        printf("G005_test: test 3 FAIL\r\n");
        test_results[result_pid] = 0;
    }

    release_memory_block(msg_envelope);
    test_ran[result_pid] = 1;
    set_process_priority(g_test_procs[result_pid].pid, 3);

    while (1) {
        release_processor();
    }
}
示例#10
0
/* Delayed Send Test */
void test_proc_p2_1(void) {
    int result_pid = 0;
    msg_buf_t* msg_envelope = NULL;
    char* msg = "Hello";

    msg_envelope = (msg_buf_t*)request_memory_block();

    strncpy(msg_envelope->msg_data, msg, 5);
    delayed_send(PID_P1, msg_envelope, CLOCK_INTERVAL);
    msg_envelope = (msg_buf_t*)receive_message(NULL);

    if (strcmp(msg_envelope->msg_data, msg) == 5) {
        printf("G005_test: test 1 OK\r\n");
    } else {
        printf("G005_test: test 1 FAIL\r\n");
        test_results[result_pid] = 0;
    }

    release_memory_block(msg_envelope);
    test_ran[result_pid] = 1;
    set_process_priority(g_test_procs[result_pid].pid, 3);

    while (1) {
        release_processor();
    }
}
示例#11
0
void process_priority_proc(void) {
    msg_buf* message;
    message = (msg_buf*)request_memory_block();
    message->mtype = KCD_REG;
    copy_string("%C", message->mtext);
    send_message(PID_KCD, message);

    while (1){
        int neg_1 = -1;
        int mtext_len;
        msg_buf* message = (msg_buf*) receive_message(&neg_1);
        if (message == NULL) {
            continue;
        }

        mtext_len = str_len(message->mtext);

        if (message->mtext[1] == 'C' && (mtext_len == 8 || mtext_len == 7)) {
            int p_id;
            int p_priority;

            if (mtext_len == 7) {
                // %C X Y
                p_id = message->mtext[3] - '0';
                p_priority = message->mtext[5] - '0';
            } else {
                // %C XX Y
                p_id = (message->mtext[3] - '0') * 10;
                p_id = message->mtext[4] - '0';
                p_priority = message->mtext[6] - '0';
            }

            if (set_process_priority(p_id, p_priority) == RTX_ERR) {
                msg_buf* err_msg = (msg_buf*)request_memory_block();
							  Node* msg_node = (Node*)request_memory_block();
                err_msg->mtype = CRT_DISPLAY;
                copy_string("Invalid Command for set process priority\n\r", err_msg->mtext);

                //sends error to CRT
                msg_node->sender_id = PID_SET_PRIO;
                msg_node->receiving_id = PID_CRT;
                msg_node->data = err_msg;
                send_message_node(msg_node);
            }

        } else {
            msg_buf* err_msg = (msg_buf*)request_memory_block();
					  Node* msg_node = (Node*)request_memory_block();
            err_msg->mtype = CRT_DISPLAY;
            copy_string("Invalid Format for set process priority\n\r", err_msg->mtext);

            //sends error to CRT
            msg_node->sender_id = PID_SET_PRIO;
            msg_node->receiving_id = PID_CRT;
            msg_node->data = err_msg;
            send_message_node(msg_node);
        }
        release_memory_block(message);
    }
}
示例#12
0
/**
 * see section 3.8.6 of TCG TNC IF-IMV Specification 1.3
 */
TNC_Result TNC_IMC_ReceiveMessageLong(TNC_IMCID imc_id,
									  TNC_ConnectionID connection_id,
									  TNC_UInt32 msg_flags,
									  TNC_BufferReference msg,
									  TNC_UInt32 msg_len,
									  TNC_VendorID msg_vid,
									  TNC_MessageSubtype msg_subtype,
									  TNC_UInt32 src_imv_id,
									  TNC_UInt32 dst_imc_id)
{
	imc_state_t *state;
	imc_msg_t *in_msg;
	TNC_Result result;

	if (!imc_os)
	{
		DBG1(DBG_IMC, "IMC \"%s\" has not been initialized", imc_name);
		return TNC_RESULT_NOT_INITIALIZED;
	}
	if (!imc_os->get_state(imc_os, connection_id, &state))
	{
		return TNC_RESULT_FATAL;
	}
	in_msg = imc_msg_create_from_long_data(imc_os, state, connection_id,
								src_imv_id, dst_imc_id,msg_vid, msg_subtype,
								chunk_create(msg, msg_len));
	result =receive_message(in_msg);
	in_msg->destroy(in_msg);

	return result;
}
示例#13
0
ER
prcv_mbf(ID mbfid, void *msg)
{
	MBFCB	*p_mbfcb;
	uint_t	msgsz;
	bool_t	dspreq;
	ER_UINT	ercd;

	LOG_PRCV_MBF_ENTER(mbfid, msg);
	CHECK_TSKCTX_UNL();
	CHECK_MBFID(mbfid);
	p_mbfcb = get_mbfcb(mbfid);

	t_lock_cpu();
	if ((msgsz = receive_message(p_mbfcb, msg, &dspreq)) > 0U) {
		if (dspreq) {
			dispatch();
		}
		ercd = (ER_UINT) msgsz;
	}
	else {
		ercd = E_TMOUT;
	}
	t_unlock_cpu();

  error_exit:
	LOG_PRCV_MBF_LEAVE(ercd, msg);
	return(ercd);
}
示例#14
0
文件: cint.c 项目: lemlang/loglan82
/* read char */
char read_char() {
    char ch;
    MESSAGE msg;
    if (has_network_socket()) {
        int st;
        msg.msg_type = MSG_GRAPH;
        msg.param.pword[1] = GraphRes;
        msg.param.pword[0] = GRAPH_READCHAR;
        send_to_graph(&msg);
        while (TRUE) {
            st = receive_message(network_socket, &msg);
            if (st == 0) {
                if ((msg.msg_type == MSG_GRAPH) &&
                        (msg.param.pword[0] == GRAPH_READCHAR_RESPONSE)) {
                    ch = msg.param.pchar;
                    break;
                }
            }
        }
        return (ch);
    } else {
        ch = getchar();
        return (ch);
    }

}
void priority_switch_command_handler()
{
    // register the command
    MessageEnvelope * kcd_msg = (MessageEnvelope *)request_memory_block();
    kcd_msg->type = TYPE_REGISTER_CMD;
    kcd_msg->msg[0] = '%';
    kcd_msg->msg[1] = 'C';
    send_message(KCD_PID, kcd_msg);

    // loop waiting for messages from the KCD
    while (1) {
        MessageEnvelope * cmd = receive_message(NULL);

        if (cmd->msg[0] != '%' || cmd->msg[1] != 'C' || cmd->msg[2] != ' ') {
            str_copy((BYTE *)"Command was invalid\n\r", (BYTE *)cmd->msg);
            send_message(CRT_PID, cmd);
            continue;
        }

        UINT32 i;

        // find the space in the argument and put a null there so ascii_to_int
        // can parse the two numbers independently
        for (i = 3; cmd->msg[i] != NULL; i ++) {
            if (cmd->msg[i] == ' ') {
                cmd->msg[i] = NULL;
                break;
            }
        }

        SINT32 pid = ascii_to_int(&cmd->msg[3]);
        SINT32 priority = ascii_to_int(&cmd->msg[i + 1]);

        if (pid == -1) {
            str_copy((BYTE *)"PID was invalid\n\r", (BYTE *)cmd->msg);
            send_message(CRT_PID, cmd);
            continue;
        }

        if (priority == -1) {
            str_copy((BYTE *)"Priority was invalid\n\r", (BYTE *)cmd->msg);
            send_message(CRT_PID, cmd);
            continue;
        }

        //rtx_dbug_outs_int("PID: ", pid);
        //rtx_dbug_outs_int("Priority: ", priority);

        int success = set_process_priority(pid, priority);

        if (success != 0) {
            str_copy((BYTE *)"Cannot change that process to that priority\n\r", (BYTE *)cmd->msg);
            send_message(CRT_PID, cmd);
            continue;
        }

        str_copy((BYTE *)"Priority change successful\n\r", (BYTE *)cmd->msg);
        send_message(CRT_PID, cmd);
    }
}
示例#16
0
文件: BA.c 项目: kaisert/kilobot
static void state_elect_seeder_bottom()
{
    enable_tx = 1;
    if(role == SEEDER) {
        //top seeders do not participate
        RESET_COUNTER;
        state = CHECK_SEEDER;
        return;
    } else if(role == BOTTOM_SEEDER) {
        //broadcast id, if greater id is encountered, become a usual bot
        message_out(EMPTY, id, M_ELECT_SEED_BOTTOM);
        if(receive_message() == 1) {
            if(message_rx[2] == M_ELECT_SEED_BOTTOM && message_rx[1] > id) {
                role = BOT;
            }
        } else {
            _delay_ms(10);
        }
    }
    if(counter >= ELECT_SEEDER_COUNT_B) {
        //after ELECT_SEEDER_COUNT_B rounds, if role is not BOT, become seeder
        RESET_COUNTER;
        if(role == BOTTOM_SEEDER)
            role = SEEDER;
        state = CHECK_SEEDER;
    }
    _delay_ms(5);
    ++counter;
}
示例#17
0
// Event handler
static void lora_event_handler(lorawan_event_t event) {
    switch (event) {
        case CONNECTED:
            printf("Connection - Successful\n");
            break;
        case DISCONNECTED:
            ev_queue.break_dispatch();
            printf("Disconnected Successfully\n");
            break;
        case TX_DONE:
            printf("Message Sent to Network Server\n");
            break;
        case TX_TIMEOUT:
        case TX_ERROR:
        case TX_CRYPTO_ERROR:
        case TX_SCHEDULING_ERROR:
            printf("Transmission Error - EventCode = %d\n", event);
            break;
        case RX_DONE:
            printf("Received message from Network Server\n");
            receive_message();
            break;
        case RX_TIMEOUT:
        case RX_ERROR:
            printf("Error in reception - Code = %d\n", event);
            break;
        case JOIN_FAILURE:
            printf("OTAA Failed - Check Keys\n");
            break;
        default:
            MBED_ASSERT("Unknown Event");
    }
}
char* receive_and_forward(int ant_x, int ant_y, int* src_x, int* src_y, int* size,
                          int threadid, char* send_buf){
  char* msg = receive_message(threadid, src_x, src_y, size);
  //Forward Right
  if(*src_x < ant_x){
    if(ant_x < Nx - 1)
      send_message(*src_x, *src_y, ant_x + 1, ant_y, msg, *size, send_buf);
  }
  //Forward Left
  else if(*src_x > ant_x){
    if(ant_x > 0)
      send_message(*src_x, *src_y, ant_x - 1, ant_y, msg, *size, send_buf);
  }
  //Forward Up
  else if(*src_y < ant_y){
    if(ant_y < Ny - 1)
      send_message(*src_x, *src_y, ant_x, ant_y+1, msg, *size, send_buf);
  }
  //Forward Down
  else if(*src_y > ant_y){
    if(ant_y > 0)
      send_message(*src_x, *src_y, ant_x, ant_y-1, msg, *size, send_buf);
  }
  //Diagonal
  else {
    printf("[receive_and_forward] Diagonal message send not supported.\n");
    exit(-1);
  }
  return msg;
}
示例#19
0
文件: system.c 项目: xtools/xt
void xt_net_client_system_process_messages(xt_net_client_system_t *client)
{
  xt_core_message_t *message;
  unsigned long message_type;
  xt_net_client_system_handle_message_f handler;
  engine_container_t *engine_container;
  xt_net_engine_id_t engine_id;

  handler = NULL;

  if (ensure_client_is_connected(client)) {
    while ((message = receive_message(client))) {
      message_type = xt_core_message_get_type(message);
      engine_id = xt_core_message_get_engine_id(message);
      engine_container = *(client->engines_array + engine_id);
      if (message_type < engine_container->message_handlers_size) {
        handler = *(engine_container->message_handlers + message_type);
        if (handler) {
          (*handler)(client->custom_client_context, message);
        }
      }
      if (!handler) {
        printf("client has no handler for %s engine's message %lu\n",
            xt_net_engine_get_name(engine_container->engine_id,
                client->get_engine_name),
            message_type);
      }
      xt_core_message_destroy(message);
    }
  } else {
    xt_core_log_trace(client->log, "xnet", "ensure_client_is_connected");
  }
}
示例#20
0
void timer_process(void)
{
    PCB *each_pcb;
    int size, i, on;
    MSG_BUF *each_msg, *received_msg;
    while(1)
    {
        received_msg = receive_message(&size);
				on = atomic_on();
        if(received_msg->mtype == MSG_TIMER_NOTIFICATION)
        {
            for (i = 0; i < gp_pending_message_queue.size; i++)
            {
                each_msg = list_entry(linked_list_get(&gp_pending_message_queue, i), MSG_BUF, m_lnode);
                each_msg->delay--;
                if (each_msg->delay <= 0)
                {
                    each_pcb = get_pcb_by_pid(each_msg->m_recv_pid);
                    linked_list_remove(&gp_pending_message_queue, i);
                    add_to_message_queue(each_pcb, each_msg);
                    i--;
                    if (each_pcb->m_state == BLK && each_pcb->m_blk_reason == BLK_REASON_WAITING_FOR_MSG)
                    {
                        k_unblock_process(each_pcb->m_pid);
                    }
                }
            }
        }
			atomic_off(on);
    }
}
示例#21
0
/**
 * see section 3.8.4 of TCG TNC IF-IMC Specification 1.3

 */
static TNC_Result tnc_imc_receivemessage(TNC_IMCID imc_id,
										 TNC_ConnectionID connection_id,
										 TNC_BufferReference msg,
										 TNC_UInt32 msg_len,
										 TNC_MessageType msg_type)
{
	imc_state_t *state;
	imc_msg_t *in_msg;
	TNC_Result result;

	if (!imc_android)
	{
		DBG1(DBG_IMC, "IMC \"%s\" has not been initialized", imc_name);
		return TNC_RESULT_NOT_INITIALIZED;
	}
	if (!imc_android->get_state(imc_android, connection_id, &state))
	{
		return TNC_RESULT_FATAL;
	}
	in_msg = imc_msg_create_from_data(imc_android, state, connection_id,
									  msg_type, chunk_create(msg, msg_len));
	result = receive_message((imc_android_state_t*)state, in_msg);
	in_msg->destroy(in_msg);

	return result;
}
示例#22
0
文件: BA.c 项目: kaisert/kilobot
static void state_recruit_reference()
{
    receive_message();
    //for non-seeders, there is nothing to do, except listening
    if(role == SEEDER) {
        if(rec_counter < (RECRUIT_TIMEOUT)) {
            enable_tx = 1;
            if(recruit_reference() == 1) {
                //when recruitment terminated -> state transition
                state = SAVE_DATA;
                message_out(EMPTY, EMPTY, EMPTY);
                enable_tx = 0;
            }
        } else if(rec_counter >= RECRUIT_TIMEOUT && rec_counter <= (RECRUIT_TIMEOUT + RECRUIT_CONT)) {
            enable_tx = 0;
        } else if(rec_counter >= (RECRUIT_TIMEOUT + RECRUIT_CONT + (id % RECRUIT_TIMEOUT))) {
            rec_counter = 0;
            enable_tx = 1;
        }
        ++rec_counter;
    }
    if(rh_reset_c++ >= RH_RESET_MAX) {
        rh_reset();
        rh_reset_c = 0;
    }
}
示例#23
0
文件: cint.c 项目: lemlang/loglan82
/* read string */
    void read_str(char *s) {
        char ss[255];
        size_t limit = 80;
        MESSAGE msg;
        int st;
        if (has_network_socket()) {
            msg.msg_type = MSG_GRAPH;
            msg.param.pword[1] = GraphRes;
            msg.param.pword[0] = GRAPH_READSTR;
            send_to_graph(&msg);
            while (TRUE) {
                st = receive_message(network_socket, &msg);
                if (st == 0) {
                    if ((msg.msg_type == MSG_GRAPH) &&
                            (msg.param.pword[0] == GRAPH_READSTR_RESPONSE)) {
                        strcpy(ss, msg.param.pstr);
                        break;
                    }
                }
            }
            strcpy(s, ss);
        } else {
            char *empty_str_pointer =NULL;
            _getline(empty_str_pointer, &limit , stdin);
            strcpy(s,empty_str_pointer);
        }

    }
示例#24
0
void A(void) {
	int num;
	int sender_pid;
	while (1) {
		msg* p = (msg*)request_memory_block();
		uart1_put_string("Waiting for KCD\r\n");
		p = (msg*)(receive_message(&sender_pid));
		if (p->mtext[0] == '%' && p->mtext[1] == 'Z') {
			uart1_put_string("Received %Z from KCD\r\n");
			release_memory_block(p);
			break;
	  } else {
			release_memory_block(p);
		}
	}
	num = 0;
	while (1) {
		char b[8];
		msg* p = (msg*)request_memory_block();
		itoa(num, b);
		p->mtype = 3;
		p->mtext = b;
		send_message(6,p);
		uart1_put_string(b);
		uart1_put_string("Sent Message from A to B\r\n");
		num++;
		release_processor();
	}
	// note that Process A does not de-allocate
	// any received envelopes in the second loop
}
示例#25
0
int main()
{
	LOG("Starting INIT system.");
	
	// Wait for VFS to crop up
	pid_t pid = 0;
	while((pid = get_service_pid("vfs")) == 0) sleep(50);
	
	//FILE* config = fopen(");

	// Setup some necessary environment variables
	putenv(strdup("PWD=/drives/roramdisk"));

	sleep(150);
	execute_config("/drives/roramdisk/init.cfg");
	
	
	message_t msg;
	while(1)
	{
		while(receive_message(&msg, MESSAGE_ANY) != MESSAGE_RECEIVED) sleep(10);
		
		switch(msg.signal)
		{
		
		default:
			debug_printf("[ INIT ] Unknown signal 0x%x!", msg.signal);
		}
	}

	for(;;);
}
示例#26
0
void kcd_proc(void) 
{
	ENVELOPE* msg;
	int i;
	while(1)
	{
		msg = (ENVELOPE*) receive_message(NULL);
		if (msg != NULL)
		{
			if (msg->message_type == MSG_COMMAND_REGISTRATION)
			{
				for (i = 0; i < KC_MAX_COMMANDS; i++)
				{
					if (g_kc_reg[i].pid == -1)
					{
						g_kc_reg[i].pid = msg->sender_pid;
						strcpy(g_kc_reg[i].command, msg->message);
						break;
					}
				}
			}
			else if (msg->message_type == MSG_CONSOLE_INPUT)
			{
				int i = 0;
				int j;
				char command[KC_MAX_CHAR];
				char* message_curr = msg->message;
				while ((i < KC_MAX_CHAR)&&(message_curr[i] != ' ')&&(message_curr[i] != '\0'))
				{
					command[i] = message_curr[i];
					i++;
				}
				command[i] = '\0';
				
				// find end of message 
				while (message_curr[i] != '\0')
				{
					i++;
				}
				
				for (j = 0; j < KC_MAX_COMMANDS; j++)
				{
					if ((strcmp(command,g_kc_reg[j].command) == 0)&&(g_kc_reg[j].pid != -1))
					{
						ENVELOPE* kcd_msg = (ENVELOPE*) request_memory_block();
						kcd_msg->sender_pid = KCD_PID;
						kcd_msg->destination_pid = g_kc_reg[j].pid;
						kcd_msg->nextMsg = NULL;
						kcd_msg->message_type = MSG_KCD_DISPATCH;
						kcd_msg->delay = 0;
						set_message(kcd_msg, message_curr, i*sizeof(char));	
						send_message(g_kc_reg[j].pid, kcd_msg);
						break;
					}
				}
			}
		}
		release_memory_block(msg);
	}
}
示例#27
0
/**
 * see section 3.8.4 of TCG TNC IF-IMV Specification 1.3
 */
TNC_Result TNC_IMV_ReceiveMessage(TNC_IMVID imv_id,
								  TNC_ConnectionID connection_id,
								  TNC_BufferReference msg,
								  TNC_UInt32 msg_len,
								  TNC_MessageType msg_type)
{
	imv_state_t *state;
	imv_msg_t *in_msg;
	TNC_Result result;

	if (!imv_os)
	{
		DBG1(DBG_IMV, "IMV \"%s\" has not been initialized", imv_name);
		return TNC_RESULT_NOT_INITIALIZED;
	}
	if (!imv_os->get_state(imv_os, connection_id, &state))
	{
		return TNC_RESULT_FATAL;
	}
	in_msg = imv_msg_create_from_data(imv_os, state, connection_id, msg_type,
									  chunk_create(msg, msg_len));
	result = receive_message(state, in_msg);
	in_msg->destroy(in_msg);

	return result;
}
示例#28
0
void start_a()
{
    while (1)
    {
        append_result();
        MsgEnv *env;
        switch(append_i)
        {
            case 1:
                env = receive_message();
                release_msg_env(env);
                break;
            case 10:
                trace(ALWAYS,"10");
                release_processor();
                break;
            default:
                trace_uint(ALWAYS,"append_i ", append_i);
                utest_assert(0, "b process append_i not recongized");
                break;
        }
        trace(ALWAYS,"end of loop");
        release_processor();
    }
}
示例#29
0
void set_priority_proc(void) {
	
	/*sends message to kcd to register the command types*/
	ENVELOPE *msg = (ENVELOPE *)request_memory_block();
	msg->message_type = MSG_COMMAND_REGISTRATION;
	msg->sender_pid = SET_PRIORITY_PID;
	msg->destination_pid = KCD_PID;
	set_message(msg, "%C" + '\0', 4*sizeof(char));
	send_message(KCD_PID, msg);
	while(1){
		int priority, pid;
		ENVELOPE * rec_msg = (ENVELOPE*) receive_message(NULL);
		char * char_message = (char *) rec_msg->message;
		if ((char_message[3] >= '1')&&(char_message[3] <= '6')&&(char_message[4] == ' ')&&(char_message[5] >= '0')&&(char_message[5] <= '3') && (char_message[6] == '\0')){
			pid = char_message[3] - '0';
			priority = char_message[5] - '0';
			//printf("message %s", char_message);
			//printf("pid %d priority %d", pid, priority);
			set_process_priority(pid, priority);	
		}
		else {				
			ENVELOPE * error_msg = (ENVELOPE*) request_memory_block();
			error_msg->sender_pid = SET_PRIORITY_PID;
			error_msg->destination_pid = CRT_PID;
			error_msg->message_type = MSG_CRT_DISPLAY;

			error_msg->message = error_msg + HEADER_OFFSET;
			sprintf(error_msg->message, "You have entered an invalid input\n\r"); 

			send_message(CRT_PID, error_msg);
		}
		release_memory_block(rec_msg);
	}
	
}
示例#30
0
void check_init_server_response_and_parse(){
  //Check the server join awk message, parse it, and print it to the user.
  char* message;
  struct msg m;
  m.mtype = 1;
  memset(&m.mtext, 0, 1000);
  printf("waiting for a response from server...\n\n");
  receive_message(CLIENT_MSQID, &m, MAX_STRING, M_TYPE, MSG_NOERROR);
  message = strtok(m.mtext, "&");

  char* sep_newline = "/n";
  char* temp_string = NULL;
  int i = 0, j = 0;

  char** game_info = NULL;
  game_info = (char**)malloc(sizeof(char*)*MAX_STRING);
 
  temp_string = strtok(message, sep_newline);
  while(temp_string != NULL){
    game_info[i] = temp_string;
    temp_string = strtok(NULL, sep_newline);
    i++;
  }

  parse_grid_size(game_info[1]);

  int k = 0;
  for (k; k< i-2; k++){
    parse_acorn_locations(game_info[k+2]);
  }
  printf("\n");
  printf("Enter right, left, up, down to move your squirrel\n");
  free(game_info);
}