diff --git a/software/main.c b/software/main.c index ef4b131ccc5653d6a4642caa23ab8dad41440680..d65b40391922b901adbb67a67924e7ccfdce91a4 100644 --- a/software/main.c +++ b/software/main.c @@ -43,11 +43,10 @@ #error NODE_ID undefined #endif -char dump_thread_stack[256]; +/// 512 required for samr21-xpro, 256 sufficuent for INGA and telosb +char dump_thread_stack[512]; +char send_thread_stack[512]; static msg_t dump_thread_msg_queue[RCV_QUEUE_SIZE]; -static kernel_pid_t dump_thread_pid; -char send_thread_stack[256]; -static gnrc_netif_t *ieee802154_netif = NULL; typedef struct { char magic_string[8]; @@ -141,12 +140,9 @@ void *dump_thread(void *arg) return NULL; } -static netopt_enable_t enable = true; -static netopt_enable_t disable = false; - void *send_thread(void *arg) { - (void) arg; + gnrc_netif_t *ieee802154_netif = arg; /* struct iovec vector[2]; @@ -171,22 +167,35 @@ void *send_thread(void *arg) gnrc_pktsnip_t *pkt, *hdr; gnrc_netif_hdr_t *nethdr; + netopt_enable_t enable = true; + netopt_enable_t disable = false; int ret; ret = gnrc_netapi_set(ieee802154_netif->pid, NETOPT_PROMISCUOUSMODE, 0, &enable, sizeof(netopt_enable_t)); + if(ret < 0) { + puts("Unable to set promiscous mode"); + } ret = gnrc_netapi_set(ieee802154_netif->pid, NETOPT_AUTOACK, 0, &disable, sizeof(netopt_enable_t)); + if(ret < 0) { + puts("Unable to disable auto ack"); + } ret = gnrc_netapi_set(ieee802154_netif->pid, NETOPT_CSMA, 0, &disable, sizeof(netopt_enable_t)); + if(ret < 0) { + puts("Unable to disable CSMA"); + } uint8_t retrans = 0; ret = gnrc_netapi_set(ieee802154_netif->pid, NETOPT_RETRANS, 0, &retrans, sizeof(retrans)); + if(ret < 0) { + puts("Unable to set retrans = 0"); + } int8_t retries = 7; ret = gnrc_netapi_set(ieee802154_netif->pid, NETOPT_CSMA_RETRIES, 0, &retries, sizeof(retries)); - - (void)ret; + if(ret < 0) { + puts("Unable to set CSMA retries = 0"); + } uint8_t flags = 0 | GNRC_NETIF_HDR_FLAGS_BROADCAST; - //uint8_t data[25]; - //uint8_t size; uint8_t payload_length = sprintf((char*)eval_message.payload, "Hello from %2d", NODE_ID); while(1) { @@ -194,8 +203,6 @@ void *send_thread(void *arg) printf("send... "); eval_message.seq_nr++; - - /* put packet together */ pkt = gnrc_pktbuf_add(NULL, &eval_message, sizeof(eval_message) - MAX_PAYLOAD_LENGTH + payload_length, GNRC_NETTYPE_UNDEF); if (pkt == NULL) { puts("ERROR: packet buffer full"); @@ -211,9 +218,9 @@ void *send_thread(void *arg) LL_PREPEND(pkt, hdr); nethdr = (gnrc_netif_hdr_t *)hdr->data; nethdr->flags = flags; - /* and send it */ - if (gnrc_netapi_send(ieee802154_netif->pid, pkt) < 1) { - puts("ERROR: unable to send"); + ret = gnrc_netapi_send(ieee802154_netif->pid, pkt); + if (ret < 1) { + printf("ERROR: unable to send: %d\n", ret); gnrc_pktbuf_release(pkt); } else { puts("OK"); @@ -225,18 +232,19 @@ void *send_thread(void *arg) int main(void) { /// +1 -> INGA working, but TelosB/Sky not - dump_thread_pid = thread_create(dump_thread_stack, sizeof(dump_thread_stack), THREAD_PRIORITY_MAIN + 2, 0, dump_thread, NULL, "dump_thread"); + thread_create(dump_thread_stack, sizeof(dump_thread_stack), THREAD_PRIORITY_MAIN + 2, 0, dump_thread, NULL, "dump_thread"); gnrc_netif_t *netif = NULL; if((netif = gnrc_netif_iter(netif))) { - puts("Found gnrc netif"); - ieee802154_netif = netif; + gnrc_netif_t *ieee802154_netif = netif; + printf("Found gnrc netif: %d %d", netif->pid, ieee802154_netif->pid); /// +2 -> INGA working, but TelosB/Sky not - thread_create(send_thread_stack, sizeof(send_thread_stack), THREAD_PRIORITY_MAIN + 1, THREAD_CREATE_STACKTEST, send_thread, NULL, "send_thread"); - } else { + thread_create(send_thread_stack, sizeof(send_thread_stack), THREAD_PRIORITY_MAIN + 1, 0, send_thread, ieee802154_netif, "send_thread"); + } + else { puts("Unable to find netif"); } - + (void) puts("Welcome to RIOT!"); printf("This is node %d\n", NODE_ID); char line_buf[SHELL_DEFAULT_BUFSIZE];