Невозможно отправить сообщение по одному и тому же соединению из двух разных процессов в contiki
Я создал два процесса в Contiki. В первом процессе я создал UDP-соединение и отправил с него тестовое сообщение, и это сообщение было успешно получено на другом конце.
Но когда я пытаюсь отправить сообщение из другого процесса, оно не доставляется.
Я пытаюсь использовать следующий код:
Код:
#define SERVER_IP "fe80::9a07:2dff:fe3c:8d01" //"::"
#define CLIENT_PORT 61617
#define SERVER_PORT 61616
#define PING_TIMEOUT (CLOCK_SECOND / 4)
#define CLIENT_SEND_INTERVAL (CLOCK_SECOND * 2.5)
/*---------------------------------------------------------------------------*/
static uip_ipaddr_t server_addr;
static struct uip_icmp6_echo_reply_notification icmp_notification;
static uint8_t echo_received;
static struct uip_udp_conn *conn;
static struct etimer timer;
/*---------------------------------------------------------------------------*/
PROCESS(createConnection, "Creating Connection");
PROCESS(sendingMessage, "Sending Message");
AUTOSTART_PROCESSES(&createConnection);
/*---------------------------------------------------------------------------*/
void icmp_reply_handler(uip_ipaddr_t *source, uint8_t ttl,
uint8_t *data, uint16_t datalen)
{
printf("echo response received\n");
echo_received = 1;
}
static void timeout_handler(void)
{
char c[] = "TEST MESSAGE";
send_message(conn, c, strlen(c));
printf("A new message is sent\n");
}
PROCESS_THREAD(createConnection, ev, data)
{
PROCESS_BEGIN();
uiplib_ipaddrconv(SERVER_IP, &server_addr);
uip_icmp6_echo_reply_callback_add(&icmp_notification, icmp_reply_handler);
do
{
etimer_set(&timer, PING_TIMEOUT);
PROCESS_WAIT_EVENT_UNTIL(etimer_expired(&timer));
uip_icmp6_send(&server_addr, ICMP6_ECHO_REQUEST, 0, 20);
} while(!echo_received);
conn = udp_new(&server_addr, UIP_HTONS(SERVER_PORT), NULL);
udp_bind(conn, UIP_HTONS(CLIENT_PORT));
etimer_set(&timer, CLIENT_SEND_INTERVAL);
PROCESS_WAIT_EVENT_UNTIL(etimer_expired(&timer));
timeout_handler();
process_start(&sendingMessage,NULL);
PROCESS_END();
}
PROCESS_THREAD(sendingMessage, ev, data)
{
PROCESS_BEGIN();
printf("In second process\n");
etimer_set(&timer, CLIENT_SEND_INTERVAL);
PROCESS_WAIT_EVENT_UNTIL(etimer_expired(&timer));
timeout_handler();
PROCESS_END();
}
Вывод на стороне отправителя:
With DriverLib v0.47020
TI SmartRF06EB + CC26xx EM
IEEE 802.15.4: Yes, Sub-GHz: No, BLE: Yes, Prop: Yes
Net: sicslowpan
MAC: ble-l2cap
RDC: ble-adapt-par
echo response received
echo response received
A new message is sent
In second process
A new message is sent
Выход на стороне приемника:
Starting Contiki-list-1533-gb7d94ec
With DriverLib v0.47020
TI SmartRF06EB + CC26xx EM
IEEE 802.15.4: Yes, Sub-GHz: No, BLE: Yes, Prop: Yes
Net: sicslowpan
MAC: ble-l2cap
RDC: ble-null-par
rec. message: TEST MESSAGE