diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 000000000..85605b183 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,14 @@ +# Set the default behavior, in case people don't have core.autocrlf set. +* text=auto whitespace=trailing-space + +# Explicitly declare text files you want to always be normalized and converted +# to native line endings on checkout. +*.c text +*.h text +*.java text + +# Denote all files that are truly binary and should not be modified. +*.png binary +*.jpg binary +*.ihex binary +*.s37 binary diff --git a/.gitignore b/.gitignore index 4899b754e..f04052a5e 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,7 @@ *.png *.log *.elf +*.zip *.d *.ihex *.pyc @@ -24,6 +25,7 @@ *.c64 *.cc2538dk *.remote +*.jn516x *.srf06-cc26xx *.ev-aducrf101mkxz *.report diff --git a/.travis.yml b/.travis.yml index 98f98edff..7a9affd3c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -36,6 +36,7 @@ before_script: tar xjf arm-2008q3*.tar.bz2 -C /tmp/ && sudo cp -f -r /tmp/arm-2008q3/* /usr/ && rm -rf /tmp/arm-2008q3 arm-2008q3*.tar.bz2 && + sudo apt-get -qq install libconfig-dev uuid-dev libqrencode-dev && arm-none-eabi-gcc --version ; fi @@ -73,6 +74,22 @@ before_script: cc65 --version ; fi + ## Install NXP toolchain + - if [ ${BUILD_ARCH:-0} = jn516x ] ; then + $WGET http://simonduq.github.io/resources/ba-elf-gcc-4.7.4-part1.tar.bz2 && + $WGET http://simonduq.github.io/resources/ba-elf-gcc-4.7.4-part2.tar.bz2 && + $WGET http://simonduq.github.io/resources/jn516x-sdk-4163.tar.bz2 && + mkdir /tmp/jn516x-sdk /tmp/ba-elf-gcc && + tar xjf jn516x-sdk-*.tar.bz2 -C /tmp/jn516x-sdk && + tar xjf ba-elf-gcc-*part1.tar.bz2 -C /tmp/ba-elf-gcc && + tar xjf ba-elf-gcc-*part2.tar.bz2 -C /tmp/ba-elf-gcc && + sudo cp -f -r /tmp/jn516x-sdk /usr/ && + sudo cp -f -r /tmp/ba-elf-gcc /usr/ && + export PATH=/usr/ba-elf-gcc/bin:$PATH && + rm -rf /tmp/ba-elf-gcc* /tmp/jn516x-sdk* && + ba-elf-gcc --version ; + fi + ## Compile cooja.jar only when it's going to be needed - if [ ${BUILD_CATEGORY:-sim} = sim ] ; then java -version && @@ -120,5 +137,6 @@ env: - BUILD_TYPE='compile-arm-apcs-ports' BUILD_CATEGORY='compile' BUILD_ARCH='arm-apcs' - BUILD_TYPE='compile-6502-ports' BUILD_CATEGORY='compile' BUILD_ARCH='6502' - BUILD_TYPE='compile-arm-ports' BUILD_CATEGORY='compile' BUILD_ARCH='arm-aapcs' + - BUILD_TYPE='compile-nxp-ports' BUILD_CATEGORY='compile' BUILD_ARCH='jn516x' - BUILD_TYPE='slip-radio' MAKE_TARGETS='cooja' - BUILD_TYPE='llsec' MAKE_TARGETS='cooja' diff --git a/apps/cmdd/cmdd.c b/apps/cmdd/cmdd.c index 6dfebe42f..74bfdb0e8 100644 --- a/apps/cmdd/cmdd.c +++ b/apps/cmdd/cmdd.c @@ -24,7 +24,7 @@ static char send_udp = 0; static const char *prompt = "contiki> "; /*---------------------------------------------------------------------------*/ -static char * CC_FASTCALL +static char * n(uint16_t num, char *ptr) { uint16_t d; diff --git a/apps/er-coap/er-coap-observe.c b/apps/er-coap/er-coap-observe.c index 4e3d2baa1..35ab2ff74 100644 --- a/apps/er-coap/er-coap-observe.c +++ b/apps/er-coap/er-coap-observe.c @@ -58,9 +58,9 @@ LIST(observers_list); /*---------------------------------------------------------------------------*/ /*- Internal API ------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/ -coap_observer_t * -coap_add_observer(uip_ipaddr_t *addr, uint16_t port, const uint8_t *token, - size_t token_len, const char *uri) +static coap_observer_t * +add_observer(uip_ipaddr_t *addr, uint16_t port, const uint8_t *token, + size_t token_len, const char *uri, int uri_len) { /* Remove existing observe relationship, if any. */ coap_remove_observer_by_uri(addr, port, uri); @@ -68,7 +68,12 @@ coap_add_observer(uip_ipaddr_t *addr, uint16_t port, const uint8_t *token, coap_observer_t *o = memb_alloc(&observers_memb); if(o) { - o->url = uri; + int max = sizeof(o->url) - 1; + if(max > uri_len) { + max = uri_len; + } + memcpy(o->url, uri, max); + o->url[max] = 0; uip_ipaddr_copy(&o->addr, addr); o->port = port; o->token_len = token_len; @@ -177,18 +182,47 @@ coap_remove_observer_by_mid(uip_ipaddr_t *addr, uint16_t port, uint16_t mid) /*---------------------------------------------------------------------------*/ void coap_notify_observers(resource_t *resource) +{ + coap_notify_observers_sub(resource, NULL); +} +void +coap_notify_observers_sub(resource_t *resource, const char *subpath) { /* build notification */ coap_packet_t notification[1]; /* this way the packet can be treated as pointer as usual */ - coap_init_message(notification, COAP_TYPE_NON, CONTENT_2_05, 0); + coap_packet_t request[1]; /* this way the packet can be treated as pointer as usual */ coap_observer_t *obs = NULL; + int url_len, obs_url_len; + char url[COAP_OBSERVER_URL_LEN]; - PRINTF("Observe: Notification from %s\n", resource->url); + url_len = strlen(resource->url); + strncpy(url, resource->url, COAP_OBSERVER_URL_LEN - 1); + if(url_len < COAP_OBSERVER_URL_LEN - 1 && subpath != NULL) { + strncpy(&url[url_len], subpath, COAP_OBSERVER_URL_LEN - url_len - 1); + } + /* Ensure url is null terminated because strncpy does not guarantee this */ + url[COAP_OBSERVER_URL_LEN - 1] = '\0'; + /* url now contains the notify URL that needs to match the observer */ + PRINTF("Observe: Notification from %s\n", url); + + coap_init_message(notification, COAP_TYPE_NON, CONTENT_2_05, 0); + /* create a "fake" request for the URI */ + coap_init_message(request, COAP_TYPE_CON, COAP_GET, 0); + coap_set_header_uri_path(request, url); /* iterate over observers */ + url_len = strlen(url); for(obs = (coap_observer_t *)list_head(observers_list); obs; obs = obs->next) { - if(obs->url == resource->url) { /* using RESOURCE url pointer as handle */ + obs_url_len = strlen(obs->url); + + /* Do a match based on the parent/sub-resource match so that it is + possible to do parent-node observe */ + if((obs_url_len == url_len + || (obs_url_len > url_len + && (resource->flags & HAS_SUB_RESOURCES) + && obs->url[url_len] == '/')) + && strncmp(url, obs->url, url_len) == 0) { coap_transaction_t *transaction = NULL; /*TODO implement special transaction for CON, sharing the same buffer to allow for more observers */ @@ -209,7 +243,7 @@ coap_notify_observers(resource_t *resource) /* prepare response */ notification->mid = transaction->mid; - resource->get_handler(NULL, notification, + resource->get_handler(request, notification, transaction->packet + COAP_MAX_HEADER_SIZE, REST_MAX_CHUNK_SIZE, NULL); @@ -234,14 +268,12 @@ coap_observe_handler(resource_t *resource, void *request, void *response) coap_packet_t *const coap_res = (coap_packet_t *)response; coap_observer_t * obs; - static char content[16]; - if(coap_req->code == COAP_GET && coap_res->code < 128) { /* GET request and response without error code */ if(IS_OPTION(coap_req, COAP_OPTION_OBSERVE)) { if(coap_req->observe == 0) { - obs = coap_add_observer(&UIP_IP_BUF->srcipaddr, UIP_UDP_BUF->srcport, - coap_req->token, coap_req->token_len, - resource->url); + obs = add_observer(&UIP_IP_BUF->srcipaddr, UIP_UDP_BUF->srcport, + coap_req->token, coap_req->token_len, + coap_req->uri_path, coap_req->uri_path_len); if(obs) { coap_set_header_observe(coap_res, (obs->obs_counter)++); /* @@ -249,13 +281,14 @@ coap_observe_handler(resource_t *resource, void *request, void *response) * A subscription should return the same representation as a normal GET. * Uncomment if you want an information about the avaiable observers. */ - /* - * coap_set_payload(coap_res, - * content, - * snprintf(content, sizeof(content), "Added %u/%u", - * list_length(observers_list), - * COAP_MAX_OBSERVERS)); - */ +#if 0 + static char content[16]; + coap_set_payload(coap_res, + content, + snprintf(content, sizeof(content), "Added %u/%u", + list_length(observers_list), + COAP_MAX_OBSERVERS)); +#endif } else { coap_res->code = SERVICE_UNAVAILABLE_5_03; coap_set_payload(coap_res, "TooManyObservers", 16); diff --git a/apps/er-coap/er-coap-observe.h b/apps/er-coap/er-coap-observe.h index 6d0498bb6..4e9644bf0 100644 --- a/apps/er-coap/er-coap-observe.h +++ b/apps/er-coap/er-coap-observe.h @@ -43,6 +43,8 @@ #include "er-coap-transactions.h" #include "stimer.h" +#define COAP_OBSERVER_URL_LEN 20 + typedef struct coap_observable { uint32_t observe_clock; struct stimer orphan_timer; @@ -54,7 +56,7 @@ typedef struct coap_observable { typedef struct coap_observer { struct coap_observer *next; /* for LIST */ - const char *url; + char url[COAP_OBSERVER_URL_LEN]; uip_ipaddr_t addr; uint16_t port; uint8_t token_len; @@ -68,11 +70,6 @@ typedef struct coap_observer { } coap_observer_t; list_t coap_get_observers(void); - -coap_observer_t *coap_add_observer(uip_ipaddr_t *addr, uint16_t port, - const uint8_t *token, size_t token_len, - const char *url); - void coap_remove_observer(coap_observer_t *o); int coap_remove_observer_by_client(uip_ipaddr_t *addr, uint16_t port); int coap_remove_observer_by_token(uip_ipaddr_t *addr, uint16_t port, @@ -83,6 +80,7 @@ int coap_remove_observer_by_mid(uip_ipaddr_t *addr, uint16_t port, uint16_t mid); void coap_notify_observers(resource_t *resource); +void coap_notify_observers_sub(resource_t *resource, const char *subpath); void coap_observe_handler(resource_t *resource, void *request, void *response); diff --git a/apps/er-coap/er-coap-res-well-known-core.c b/apps/er-coap/er-coap-res-well-known-core.c index e684017cd..ea3b4bbe9 100644 --- a/apps/er-coap/er-coap-res-well-known-core.c +++ b/apps/er-coap/er-coap-res-well-known-core.c @@ -124,7 +124,7 @@ well_known_core_get_handler(void *request, void *response, uint8_t *buffer, continue; } end = attrib + strlen(attrib); - } else { + } else if(resource->attributes != NULL) { attrib = strstr(resource->attributes, filter); if(attrib == NULL || (attrib[strlen(filter)] != '=' @@ -159,8 +159,8 @@ well_known_core_get_handler(void *request, void *response, uint8_t *buffer, } #endif - PRINTF("res: /%s (%p)\npos: s%d, o%ld, b%d\n", resource->url, resource, - strpos, *offset, bufpos); + PRINTF("res: /%s (%p)\npos: s%zu, o%ld, b%zu\n", resource->url, resource, + strpos, (long)*offset, bufpos); if(strpos > 0) { ADD_CHAR_IF_POSSIBLE(','); @@ -170,7 +170,7 @@ well_known_core_get_handler(void *request, void *response, uint8_t *buffer, ADD_STRING_IF_POSSIBLE(resource->url, >=); ADD_CHAR_IF_POSSIBLE('>'); - if(resource->attributes[0]) { + if(resource->attributes != NULL && resource->attributes[0]) { ADD_CHAR_IF_POSSIBLE(';'); ADD_STRING_IF_POSSIBLE(resource->attributes, >); } @@ -183,7 +183,7 @@ well_known_core_get_handler(void *request, void *response, uint8_t *buffer, } if(bufpos > 0) { - PRINTF("BUF %d: %.*s\n", bufpos, bufpos, (char *)buffer); + PRINTF("BUF %zu: %.*s\n", bufpos, (int)bufpos, (char *)buffer); coap_set_payload(response, buffer, bufpos); coap_set_header_content_format(response, APPLICATION_LINK_FORMAT); diff --git a/apps/er-coap/er-coap-transactions.c b/apps/er-coap/er-coap-transactions.c index 7f6537932..3987b4814 100644 --- a/apps/er-coap/er-coap-transactions.c +++ b/apps/er-coap/er-coap-transactions.c @@ -113,15 +113,9 @@ coap_send_transaction(coap_transaction_t *t) (float)t->retrans_timer.timer.interval / CLOCK_SECOND); } - /*FIXME - * Hack: Setting timer for responsible process. - * Maybe there is a better way, but avoid posting everything to the process. - */ - struct process *process_actual = PROCESS_CURRENT(); - - process_current = transaction_handler_process; + PROCESS_CONTEXT_BEGIN(transaction_handler_process); etimer_restart(&t->retrans_timer); /* interval updated above */ - process_current = process_actual; + PROCESS_CONTEXT_END(transaction_handler_process); t = NULL; } else { diff --git a/apps/er-coap/er-coap.c b/apps/er-coap/er-coap.c index 34c671623..597d24a11 100644 --- a/apps/er-coap/er-coap.c +++ b/apps/er-coap/er-coap.c @@ -113,19 +113,21 @@ coap_set_option_header(unsigned int delta, size_t length, uint8_t *buffer) buffer[0] = coap_option_nibble(delta) << 4 | coap_option_nibble(length); - /* avoids code duplication without function overhead */ - unsigned int *x = δ + if(delta > 268) { + buffer[++written] = ((delta - 269) >> 8) & 0xff; + buffer[++written] = (delta - 269) & 0xff; + } else if(delta > 12) { + buffer[++written] = (delta - 13); + } - do { - if(*x > 268) { - buffer[++written] = (*x - 269) >> 8; - buffer[++written] = (*x - 269); - } else if(*x > 12) { - buffer[++written] = (*x - 13); - } - } while(x != &length && (x = &length)); + if(length > 268) { + buffer[++written] = ((length - 269) >> 8) & 0xff; + buffer[++written] = (length - 269) & 0xff; + } else if(length > 12) { + buffer[++written] = (length - 13); + } - PRINTF("WRITTEN %u B opt header\n", 1 + written); + PRINTF("WRITTEN %zu B opt header\n", 1 + written); return ++written; } @@ -148,7 +150,7 @@ coap_serialize_int_option(unsigned int number, unsigned int current_number, if(0xFFFFFFFF & value) { ++i; } - PRINTF("OPTION %u (delta %u, len %u)\n", number, number - current_number, + PRINTF("OPTION %u (delta %u, len %zu)\n", number, number - current_number, i); i = coap_set_option_header(number - current_number, i, buffer); @@ -175,8 +177,8 @@ coap_serialize_array_option(unsigned int number, unsigned int current_number, { size_t i = 0; - PRINTF("ARRAY type %u, len %u, full [%.*s]\n", number, length, length, - array); + PRINTF("ARRAY type %u, len %zu, full [%.*s]\n", number, length, + (int)length, array); if(split_char != '\0') { int j; @@ -185,7 +187,7 @@ coap_serialize_array_option(unsigned int number, unsigned int current_number, size_t temp_length; for(j = 0; j <= length + 1; ++j) { - PRINTF("STEP %u/%u (%c)\n", j, length, array[j]); + PRINTF("STEP %u/%zu (%c)\n", j, length, array[j]); if(array[j] == split_char || j == length) { part_end = array + j; temp_length = part_end - part_start; @@ -195,8 +197,8 @@ coap_serialize_array_option(unsigned int number, unsigned int current_number, memcpy(&buffer[i], part_start, temp_length); i += temp_length; - PRINTF("OPTION type %u, delta %u, len %u, part [%.*s]\n", number, - number - current_number, i, temp_length, part_start); + PRINTF("OPTION type %u, delta %u, len %zu, part [%.*s]\n", number, + number - current_number, i, (int)temp_length, part_start); ++j; /* skip the splitter */ current_number = number; @@ -208,7 +210,7 @@ coap_serialize_array_option(unsigned int number, unsigned int current_number, memcpy(&buffer[i], array, length); i += length; - PRINTF("OPTION type %u, delta %u, len %u\n", number, + PRINTF("OPTION type %u, delta %u, len %zu\n", number, number - current_number, length); } @@ -332,7 +334,7 @@ coap_serialize_message(void *packet, uint8_t *buffer) /* empty packet, dont need to do more stuff */ if(!coap_pkt->code) { - PRINTF("-Done serializing empty message at %p-\n", option); + PRINTF("-Done serializing empty message at %p-\n", coap_pkt->buffer); return 4; } @@ -368,6 +370,7 @@ coap_serialize_message(void *packet, uint8_t *buffer) "Location-Path"); COAP_SERIALIZE_STRING_OPTION(COAP_OPTION_URI_PATH, uri_path, '/', "Uri-Path"); + PRINTF("Serialize content format: %d\n", coap_pkt->content_format); COAP_SERIALIZE_INT_OPTION(COAP_OPTION_CONTENT_FORMAT, content_format, "Content-Format"); COAP_SERIALIZE_INT_OPTION(COAP_OPTION_MAX_AGE, max_age, "Max-Age"); @@ -403,8 +406,9 @@ coap_serialize_message(void *packet, uint8_t *buffer) } PRINTF("-Done %u B (header len %u, payload len %u)-\n", - coap_pkt->payload_len + option - buffer, option - buffer, - coap_pkt->payload_len); + (unsigned int)(coap_pkt->payload_len + option - buffer), + (unsigned int)(option - buffer), + (unsigned int)coap_pkt->payload_len); PRINTF("Dump [0x%02X %02X %02X %02X %02X %02X %02X %02X]\n", coap_pkt->buffer[0], @@ -451,10 +455,8 @@ coap_parse_message(void *packet, uint8_t *data, uint16_t data_len) >> COAP_HEADER_VERSION_POSITION; coap_pkt->type = (COAP_HEADER_TYPE_MASK & coap_pkt->buffer[0]) >> COAP_HEADER_TYPE_POSITION; - coap_pkt->token_len = - MIN(COAP_TOKEN_LEN, - (COAP_HEADER_TOKEN_LEN_MASK & coap_pkt-> - buffer[0]) >> COAP_HEADER_TOKEN_LEN_POSITION); + coap_pkt->token_len = (COAP_HEADER_TOKEN_LEN_MASK & coap_pkt->buffer[0]) + >> COAP_HEADER_TOKEN_LEN_POSITION; coap_pkt->code = coap_pkt->buffer[1]; coap_pkt->mid = coap_pkt->buffer[2] << 8 | coap_pkt->buffer[3]; @@ -463,6 +465,11 @@ coap_parse_message(void *packet, uint8_t *data, uint16_t data_len) return BAD_REQUEST_4_00; } + if(coap_pkt->token_len > COAP_TOKEN_LEN) { + coap_error_message = "Token Length must not be more than 8"; + return BAD_REQUEST_4_00; + } + uint8_t *current_option = data + COAP_HEADER_LEN; memcpy(coap_pkt->token, current_option, coap_pkt->token_len); @@ -500,25 +507,31 @@ coap_parse_message(void *packet, uint8_t *data, uint16_t data_len) option_length = current_option[0] & 0x0F; ++current_option; - /* avoids code duplication without function overhead */ - unsigned int *x = &option_delta; + if(option_delta == 13) { + option_delta += current_option[0]; + ++current_option; + } else if(option_delta == 14) { + option_delta += 255; + option_delta += current_option[0] << 8; + ++current_option; + option_delta += current_option[0]; + ++current_option; + } - do { - if(*x == 13) { - *x += current_option[0]; - ++current_option; - } else if(*x == 14) { - *x += 255; - *x += current_option[0] << 8; - ++current_option; - *x += current_option[0]; - ++current_option; - } - } while(x != &option_length && (x = &option_length)); + if(option_length == 13) { + option_length += current_option[0]; + ++current_option; + } else if(option_length == 14) { + option_length += 255; + option_length += current_option[0] << 8; + ++current_option; + option_length += current_option[0]; + ++current_option; + } option_number += option_delta; - PRINTF("OPTION %u (delta %u, len %u): ", option_number, option_delta, + PRINTF("OPTION %u (delta %u, len %zu): ", option_number, option_delta, option_length); SET_OPTION(coap_pkt, option_number); @@ -532,7 +545,7 @@ coap_parse_message(void *packet, uint8_t *data, uint16_t data_len) case COAP_OPTION_MAX_AGE: coap_pkt->max_age = coap_parse_int_option(current_option, option_length); - PRINTF("Max-Age [%lu]\n", coap_pkt->max_age); + PRINTF("Max-Age [%lu]\n", (unsigned long)coap_pkt->max_age); break; case COAP_OPTION_ETAG: coap_pkt->etag_len = MIN(COAP_ETAG_LEN, option_length); @@ -569,7 +582,7 @@ coap_parse_message(void *packet, uint8_t *data, uint16_t data_len) coap_pkt->proxy_uri = (char *)current_option; coap_pkt->proxy_uri_len = option_length; #endif - PRINTF("Proxy-Uri NOT IMPLEMENTED [%.*s]\n", coap_pkt->proxy_uri_len, + PRINTF("Proxy-Uri NOT IMPLEMENTED [%.*s]\n", (int)coap_pkt->proxy_uri_len, coap_pkt->proxy_uri); coap_error_message = "This is a constrained server (Contiki)"; return PROXYING_NOT_SUPPORTED_5_05; @@ -580,7 +593,7 @@ coap_parse_message(void *packet, uint8_t *data, uint16_t data_len) coap_pkt->proxy_scheme_len = option_length; #endif PRINTF("Proxy-Scheme NOT IMPLEMENTED [%.*s]\n", - coap_pkt->proxy_scheme_len, coap_pkt->proxy_scheme); + (int)coap_pkt->proxy_scheme_len, coap_pkt->proxy_scheme); coap_error_message = "This is a constrained server (Contiki)"; return PROXYING_NOT_SUPPORTED_5_05; break; @@ -588,7 +601,8 @@ coap_parse_message(void *packet, uint8_t *data, uint16_t data_len) case COAP_OPTION_URI_HOST: coap_pkt->uri_host = (char *)current_option; coap_pkt->uri_host_len = option_length; - PRINTF("Uri-Host [%.*s]\n", coap_pkt->uri_host_len, coap_pkt->uri_host); + PRINTF("Uri-Host [%.*s]\n", (int)coap_pkt->uri_host_len, + coap_pkt->uri_host); break; case COAP_OPTION_URI_PORT: coap_pkt->uri_port = coap_parse_int_option(current_option, @@ -600,14 +614,14 @@ coap_parse_message(void *packet, uint8_t *data, uint16_t data_len) coap_merge_multi_option((char **)&(coap_pkt->uri_path), &(coap_pkt->uri_path_len), current_option, option_length, '/'); - PRINTF("Uri-Path [%.*s]\n", coap_pkt->uri_path_len, coap_pkt->uri_path); + PRINTF("Uri-Path [%.*s]\n", (int)coap_pkt->uri_path_len, coap_pkt->uri_path); break; case COAP_OPTION_URI_QUERY: /* coap_merge_multi_option() operates in-place on the IPBUF, but final packet field should be const string -> cast to string */ coap_merge_multi_option((char **)&(coap_pkt->uri_query), &(coap_pkt->uri_query_len), current_option, option_length, '&'); - PRINTF("Uri-Query [%.*s]\n", coap_pkt->uri_query_len, + PRINTF("Uri-Query [%.*s]\n", (int)coap_pkt->uri_query_len, coap_pkt->uri_query); break; @@ -616,7 +630,7 @@ coap_parse_message(void *packet, uint8_t *data, uint16_t data_len) coap_merge_multi_option((char **)&(coap_pkt->location_path), &(coap_pkt->location_path_len), current_option, option_length, '/'); - PRINTF("Location-Path [%.*s]\n", coap_pkt->location_path_len, + PRINTF("Location-Path [%.*s]\n", (int)coap_pkt->location_path_len, coap_pkt->location_path); break; case COAP_OPTION_LOCATION_QUERY: @@ -624,14 +638,14 @@ coap_parse_message(void *packet, uint8_t *data, uint16_t data_len) coap_merge_multi_option((char **)&(coap_pkt->location_query), &(coap_pkt->location_query_len), current_option, option_length, '&'); - PRINTF("Location-Query [%.*s]\n", coap_pkt->location_query_len, + PRINTF("Location-Query [%.*s]\n", (int)coap_pkt->location_query_len, coap_pkt->location_query); break; case COAP_OPTION_OBSERVE: coap_pkt->observe = coap_parse_int_option(current_option, option_length); - PRINTF("Observe [%lu]\n", coap_pkt->observe); + PRINTF("Observe [%lu]\n", (unsigned long)coap_pkt->observe); break; case COAP_OPTION_BLOCK2: coap_pkt->block2_num = coap_parse_int_option(current_option, @@ -641,7 +655,8 @@ coap_parse_message(void *packet, uint8_t *data, uint16_t data_len) coap_pkt->block2_offset = (coap_pkt->block2_num & ~0x0000000F) << (coap_pkt->block2_num & 0x07); coap_pkt->block2_num >>= 4; - PRINTF("Block2 [%lu%s (%u B/blk)]\n", coap_pkt->block2_num, + PRINTF("Block2 [%lu%s (%u B/blk)]\n", + (unsigned long)coap_pkt->block2_num, coap_pkt->block2_more ? "+" : "", coap_pkt->block2_size); break; case COAP_OPTION_BLOCK1: @@ -652,16 +667,17 @@ coap_parse_message(void *packet, uint8_t *data, uint16_t data_len) coap_pkt->block1_offset = (coap_pkt->block1_num & ~0x0000000F) << (coap_pkt->block1_num & 0x07); coap_pkt->block1_num >>= 4; - PRINTF("Block1 [%lu%s (%u B/blk)]\n", coap_pkt->block1_num, + PRINTF("Block1 [%lu%s (%u B/blk)]\n", + (unsigned long)coap_pkt->block1_num, coap_pkt->block1_more ? "+" : "", coap_pkt->block1_size); break; case COAP_OPTION_SIZE2: coap_pkt->size2 = coap_parse_int_option(current_option, option_length); - PRINTF("Size2 [%lu]\n", coap_pkt->size2); + PRINTF("Size2 [%lu]\n", (unsigned long)coap_pkt->size2); break; case COAP_OPTION_SIZE1: coap_pkt->size1 = coap_parse_int_option(current_option, option_length); - PRINTF("Size1 [%lu]\n", coap_pkt->size1); + PRINTF("Size1 [%lu]\n", (unsigned long)coap_pkt->size1); break; default: PRINTF("unknown (%u)\n", option_number); @@ -744,7 +760,7 @@ coap_set_header_content_format(void *packet, unsigned int format) { coap_packet_t *const coap_pkt = (coap_packet_t *)packet; - coap_pkt->content_format = (coap_content_format_t)format; + coap_pkt->content_format = format; SET_OPTION(coap_pkt, COAP_OPTION_CONTENT_FORMAT); return 1; } @@ -765,7 +781,7 @@ coap_set_header_accept(void *packet, unsigned int accept) { coap_packet_t *const coap_pkt = (coap_packet_t *)packet; - coap_pkt->accept = (coap_content_format_t)accept; + coap_pkt->accept = accept; SET_OPTION(coap_pkt, COAP_OPTION_ACCEPT); return 1; } diff --git a/apps/er-coap/er-coap.h b/apps/er-coap/er-coap.h index 69ea8b363..ccac6d76e 100644 --- a/apps/er-coap/er-coap.h +++ b/apps/er-coap/er-coap.h @@ -93,7 +93,7 @@ typedef struct { uint8_t options[COAP_OPTION_SIZE1 / OPTION_MAP_SIZE + 1]; /* bitmap to check if option is set */ - coap_content_format_t content_format; /* parse options once and store; allows setting options in random order */ + uint16_t content_format; /* parse options once and store; allows setting options in random order */ uint32_t max_age; uint8_t etag_len; uint8_t etag[COAP_ETAG_LEN]; @@ -111,7 +111,7 @@ typedef struct { size_t uri_path_len; const char *uri_path; int32_t observe; - coap_content_format_t accept; + uint16_t accept; uint8_t if_match_len; uint8_t if_match[COAP_ETAG_LEN]; uint32_t block2_num; @@ -135,13 +135,13 @@ typedef struct { /* option format serialization */ #define COAP_SERIALIZE_INT_OPTION(number, field, text) \ if(IS_OPTION(coap_pkt, number)) { \ - PRINTF(text " [%u]\n", coap_pkt->field); \ + PRINTF(text " [%u]\n", (unsigned int)coap_pkt->field); \ option += coap_serialize_int_option(number, current_number, option, coap_pkt->field); \ current_number = number; \ } #define COAP_SERIALIZE_BYTE_OPTION(number, field, text) \ if(IS_OPTION(coap_pkt, number)) { \ - PRINTF(text " %u [0x%02X%02X%02X%02X%02X%02X%02X%02X]\n", coap_pkt->field##_len, \ + PRINTF(text " %u [0x%02X%02X%02X%02X%02X%02X%02X%02X]\n", (unsigned int)coap_pkt->field##_len, \ coap_pkt->field[0], \ coap_pkt->field[1], \ coap_pkt->field[2], \ @@ -156,18 +156,18 @@ typedef struct { } #define COAP_SERIALIZE_STRING_OPTION(number, field, splitter, text) \ if(IS_OPTION(coap_pkt, number)) { \ - PRINTF(text " [%.*s]\n", coap_pkt->field##_len, coap_pkt->field); \ + PRINTF(text " [%.*s]\n", (int)coap_pkt->field##_len, coap_pkt->field); \ option += coap_serialize_array_option(number, current_number, option, (uint8_t *)coap_pkt->field, coap_pkt->field##_len, splitter); \ current_number = number; \ } #define COAP_SERIALIZE_BLOCK_OPTION(number, field, text) \ if(IS_OPTION(coap_pkt, number)) \ { \ - PRINTF(text " [%lu%s (%u B/blk)]\n", coap_pkt->field##_num, coap_pkt->field##_more ? "+" : "", coap_pkt->field##_size); \ + PRINTF(text " [%lu%s (%u B/blk)]\n", (unsigned long)coap_pkt->field##_num, coap_pkt->field##_more ? "+" : "", coap_pkt->field##_size); \ uint32_t block = coap_pkt->field##_num << 4; \ if(coap_pkt->field##_more) { block |= 0x8; } \ block |= 0xF & coap_log_2(coap_pkt->field##_size / 16); \ - PRINTF(text " encoded: 0x%lX\n", block); \ + PRINTF(text " encoded: 0x%lX\n", (unsigned long)block); \ option += coap_serialize_int_option(number, current_number, option, block); \ current_number = number; \ } diff --git a/apps/powertrace/powertrace.c b/apps/powertrace/powertrace.c index 139d96af8..6d8f2936f 100644 --- a/apps/powertrace/powertrace.c +++ b/apps/powertrace/powertrace.c @@ -48,15 +48,15 @@ struct powertrace_sniff_stats { struct powertrace_sniff_stats *next; - uint32_t num_input, num_output; - uint32_t input_txtime, input_rxtime; - uint32_t output_txtime, output_rxtime; + unsigned long num_input, num_output; + unsigned long input_txtime, input_rxtime; + unsigned long output_txtime, output_rxtime; #if NETSTACK_CONF_WITH_IPV6 uint16_t proto; /* includes proto + possibly flags */ #endif uint16_t channel; - uint32_t last_input_txtime, last_input_rxtime; - uint32_t last_output_txtime, last_output_rxtime; + unsigned long last_input_txtime, last_input_rxtime; + unsigned long last_output_txtime, last_output_rxtime; }; #define INPUT 1 @@ -72,17 +72,17 @@ PROCESS(powertrace_process, "Periodic power output"); void powertrace_print(char *str) { - static uint32_t last_cpu, last_lpm, last_transmit, last_listen; - static uint32_t last_idle_transmit, last_idle_listen; + static unsigned long last_cpu, last_lpm, last_transmit, last_listen; + static unsigned long last_idle_transmit, last_idle_listen; - uint32_t cpu, lpm, transmit, listen; - uint32_t all_cpu, all_lpm, all_transmit, all_listen; - uint32_t idle_transmit, idle_listen; - uint32_t all_idle_transmit, all_idle_listen; + unsigned long cpu, lpm, transmit, listen; + unsigned long all_cpu, all_lpm, all_transmit, all_listen; + unsigned long idle_transmit, idle_listen; + unsigned long all_idle_transmit, all_idle_listen; - static uint32_t seqno; + static unsigned long seqno; - uint32_t time, all_time, radio, all_radio; + unsigned long time, all_time, radio, all_radio; struct powertrace_sniff_stats *s; @@ -287,13 +287,8 @@ output_sniffer(int mac_status) static void sniffprint(char *prefix, int seqno) { - const linkaddr_t *sender, *receiver, *esender, *ereceiver; - - sender = packetbuf_addr(PACKETBUF_ADDR_SENDER); - receiver = packetbuf_addr(PACKETBUF_ADDR_RECEIVER); + const linkaddr_t *esender; esender = packetbuf_addr(PACKETBUF_ADDR_ESENDER); - ereceiver = packetbuf_addr(PACKETBUF_ADDR_ERECEIVER); - printf("%lu %s %d %u %d %d %d.%d %u %u\n", clock_time(), diff --git a/apps/rest-engine/rest-engine.c b/apps/rest-engine/rest-engine.c index 7eb686d4d..67ac232a2 100644 --- a/apps/rest-engine/rest-engine.c +++ b/apps/rest-engine/rest-engine.c @@ -70,6 +70,15 @@ LIST(restful_periodic_services); void rest_init_engine(void) { + /* avoid initializing twice */ + static uint8_t initialized = 0; + + if(initialized) { + PRINTF("REST engine process already running - double initialization?\n"); + return; + } + initialized = 1; + list_init(restful_services); REST.set_service_callback(rest_invoke_restful_service); @@ -124,15 +133,19 @@ rest_invoke_restful_service(void *request, void *response, uint8_t *buffer, resource_t *resource = NULL; const char *url = NULL; + int url_len, res_url_len; + url_len = REST.get_url(request, &url); for(resource = (resource_t *)list_head(restful_services); resource; resource = resource->next) { /* if the web service handles that kind of requests and urls matches */ - if((REST.get_url(request, &url) == strlen(resource->url) - || (REST.get_url(request, &url) > strlen(resource->url) - && (resource->flags & HAS_SUB_RESOURCES))) - && strncmp(resource->url, url, strlen(resource->url)) == 0) { + res_url_len = strlen(resource->url); + if((url_len == res_url_len + || (url_len > res_url_len + && (resource->flags & HAS_SUB_RESOURCES) + && url[res_url_len] == '/')) + && strncmp(resource->url, url, res_url_len) == 0) { found = 1; rest_resource_flags_t method = REST.get_method_type(request); diff --git a/apps/servreg-hack/servreg-hack.c b/apps/servreg-hack/servreg-hack.c index f93bf20c3..d7ccf7dac 100644 --- a/apps/servreg-hack/servreg-hack.c +++ b/apps/servreg-hack/servreg-hack.c @@ -332,14 +332,10 @@ static void parse_incoming_packet(const uint8_t *buf, int len) { int numregs; - int flags; int i; int bufptr; numregs = buf[MSG_NUMREGS_OFFSET]; - flags = buf[MSG_FLAGS_OFFSET]; - - /* printf("parse_incoming_packet Numregs %d flags %d\n", numregs, flags);*/ bufptr = MSG_ADDRS_OFFSET; for(i = 0; i < numregs; ++i) { diff --git a/apps/shell/shell-crc.c b/apps/shell/shell-crc.c index 315ca18e2..b3234577a 100644 --- a/apps/shell/shell-crc.c +++ b/apps/shell/shell-crc.c @@ -50,6 +50,7 @@ #define HAVE_ALLOCA 0 #else #define HAVE_ALLOCA 1 +#include #endif #define DEBUG 0 diff --git a/apps/shell/shell-memdebug.c b/apps/shell/shell-memdebug.c index 9c6be22a9..e25e5afae 100644 --- a/apps/shell/shell-memdebug.c +++ b/apps/shell/shell-memdebug.c @@ -71,7 +71,7 @@ PROCESS_THREAD(shell_poke_process, ev, data) PROCESS_EXIT(); } - address = (uint8_t *)(int)shell_strtolong(args, &next); + address = (uint8_t *)(uintptr_t)shell_strtolong(args, &next); if(next == args) { shell_output_str(&poke_command, "usage 1", ""); PROCESS_EXIT(); @@ -106,7 +106,7 @@ PROCESS_THREAD(shell_peek_process, ev, data) PROCESS_EXIT(); } - address = (uint8_t *)(int)shell_strtolong(args, &next); + address = (uint8_t *)(uintptr_t)shell_strtolong(args, &next); if(next == args) { shell_output_str(&peek_command, "usage 1", ""); PROCESS_EXIT(); diff --git a/apps/shell/shell-netperf.c b/apps/shell/shell-netperf.c index b4e35ed1a..5776945fc 100644 --- a/apps/shell/shell-netperf.c +++ b/apps/shell/shell-netperf.c @@ -128,8 +128,8 @@ memcpy_misaligned(void *dest, const void *source, int len) int i; uint8_t *destptr; const uint8_t *sourceptr; - if(((int)dest & 1) == 1 || - ((int)source & 1) == 1) { + if(((uintptr_t)dest & 1) == 1 || + ((uintptr_t)source & 1) == 1) { destptr = dest; sourceptr = source; for(i = 0; i < len; ++i) { diff --git a/apps/shell/shell-rime-netcmd.c b/apps/shell/shell-rime-netcmd.c index cadcd993a..87927065d 100644 --- a/apps/shell/shell-rime-netcmd.c +++ b/apps/shell/shell-rime-netcmd.c @@ -129,7 +129,7 @@ PROCESS_THREAD(shell_netcmd_process, ev, data) /* Terminate the string with a NUL character. */ msg->netcmd[len] = 0; - msg->crc = crc16_data(msg->netcmd, len, 0); + msg->crc = crc16_data((unsigned char *)msg->netcmd, len, 0); printf("netcmd sending '%s'\n", msg->netcmd); trickle_send(&trickle); } @@ -157,7 +157,7 @@ recv_trickle(struct trickle_conn *c) msg->netcmd[len] = 0; memcpy(&crc, &msg->crc, sizeof(crc)); - if(crc == crc16_data(msg->netcmd, len, 0)) { + if(crc == crc16_data((unsigned char *)msg->netcmd, len, 0)) { /* Start the server process with the incoming command. */ process_start(&shell_netcmd_server_process, (void *)msg->netcmd); } diff --git a/apps/shell/shell-rime-sendcmd.c b/apps/shell/shell-rime-sendcmd.c index b3179c54b..5bbbc4aea 100644 --- a/apps/shell/shell-rime-sendcmd.c +++ b/apps/shell/shell-rime-sendcmd.c @@ -133,7 +133,7 @@ PROCESS_THREAD(shell_sendcmd_process, ev, data) /* Terminate the string with a NUL character. */ msg->sendcmd[len] = 0; - msg->crc = crc16_data(msg->sendcmd, len, 0); + msg->crc = crc16_data((unsigned char *)msg->sendcmd, len, 0); /* printf("sendcmd sending '%s'\n", msg->sendcmd);*/ unicast_send(&uc, &addr); @@ -160,7 +160,7 @@ recv_uc(struct unicast_conn *c, const linkaddr_t *from) msg->sendcmd[len] = 0; memcpy(&crc, &msg->crc, sizeof(crc)); - if(crc == crc16_data(msg->sendcmd, len, 0)) { + if(crc == crc16_data((unsigned char *)msg->sendcmd, len, 0)) { /* Start the server process with the incoming command. */ process_start(&shell_sendcmd_server_process, (void *)msg->sendcmd); } diff --git a/apps/shell/shell-rime.c b/apps/shell/shell-rime.c index 16061c58d..3e6184ff7 100644 --- a/apps/shell/shell-rime.c +++ b/apps/shell/shell-rime.c @@ -301,7 +301,7 @@ recv_collect(const linkaddr_t *originator, uint8_t seqno, uint8_t hops) /* Copy the collect message header. */ memcpy(&collect_msg, packetbuf_dataptr(), sizeof(collect_msg)); - dataptr = ((struct collect_msg *)packetbuf_dataptr())->data; + dataptr = (char *)((struct collect_msg *)packetbuf_dataptr())->data; #if TIMESYNCH_CONF_ENABLED latency = timesynch_time() - collect_msg.timestamp; @@ -321,7 +321,7 @@ recv_collect(const linkaddr_t *originator, uint8_t seqno, uint8_t hops) if(packetbuf_datalen() >= COLLECT_MSG_HDRSIZE) { len = packetbuf_datalen() - COLLECT_MSG_HDRSIZE; - if(collect_msg.crc == crc16_data(dataptr, len, 0)) { + if(collect_msg.crc == crc16_data((unsigned char *)dataptr, len, 0)) { msg.len = 5 + (packetbuf_datalen() - COLLECT_MSG_HDRSIZE) / 2; linkaddr_copy((linkaddr_t *)&msg.originator, originator); msg.seqno = seqno; diff --git a/apps/shell/shell-time.c b/apps/shell/shell-time.c index fb2b7e7f1..6947df7ee 100644 --- a/apps/shell/shell-time.c +++ b/apps/shell/shell-time.c @@ -158,7 +158,6 @@ PROCESS_THREAD(shell_repeat_server_process, ev, data) static char *command; static struct process *started_process; char command_copy[MAX_COMMANDLENGTH]; - int ret; if(ev == shell_event_input) { goto exit; @@ -172,7 +171,7 @@ PROCESS_THREAD(shell_repeat_server_process, ev, data) data == &shell_repeat_process); { strncpy(command_copy, command, MAX_COMMANDLENGTH); - ret = shell_start_command(command_copy, (int)strlen(command_copy), + shell_start_command(command_copy, (int)strlen(command_copy), &repeat_command, &started_process); if(started_process != NULL && @@ -202,11 +201,10 @@ repeat_print_usage(void) /*---------------------------------------------------------------------------*/ PROCESS_THREAD(shell_repeat_process, ev, data) { - static int reps, period, period_left; + static int reps, period; static char command[MAX_COMMANDLENGTH]; static struct etimer etimer; static int i; - static clock_time_t start_time; const char *args, *next; if(ev == shell_event_input) { @@ -258,7 +256,6 @@ PROCESS_THREAD(shell_repeat_process, ev, data) /* printf("repeats %d period %d command '%s'\n", reps, period, command);*/ - start_time = clock_time(); etimer_set(&etimer, CLOCK_SECOND * period); for(i = 0; reps == 0 || i < reps; ++i) { @@ -291,7 +288,6 @@ PROCESS_THREAD(shell_randwait_process, ev, data) static struct etimer etimer; static struct process *started_process; const char *args, *next; - int ret; /* if(ev == shell_event_input) { struct shell_input *input; @@ -339,7 +335,7 @@ PROCESS_THREAD(shell_randwait_process, ev, data) /* printf("Starting '%s' child %p (%s)\n", command, randwait_command.child, */ /* randwait_command.child == NULL? "null": randwait_command.child->command); */ - ret = shell_start_command(command, (int)strlen(command), + shell_start_command(command, (int)strlen(command), randwait_command.child, &started_process); if(started_process != NULL && diff --git a/apps/shell/shell-vars.c b/apps/shell/shell-vars.c index 42948f5aa..b28834f4a 100644 --- a/apps/shell/shell-vars.c +++ b/apps/shell/shell-vars.c @@ -51,7 +51,7 @@ #define SHELL_VARS_RAM_END SHELL_VARS_CONF_RAM_END #else /* SHELL_VARS_CONF_RAM_BEGIN */ #define SHELL_VARS_RAM_BEGIN 0 -#define SHELL_VARS_RAM_END (unsigned int)-1 +#define SHELL_VARS_RAM_END (uintptr_t)-1 #endif /* SHELL_VARS_CONF_RAM_BEGIN */ /*---------------------------------------------------------------------------*/ @@ -77,8 +77,8 @@ PROCESS_THREAD(shell_vars_process, ev, data) for(i = 0; i < symbols_nelts; ++i) { if(symbols[i].name != NULL && - (unsigned int)symbols[i].value >= SHELL_VARS_RAM_BEGIN && - (unsigned int)symbols[i].value <= SHELL_VARS_RAM_END) { + (uintptr_t)symbols[i].value >= SHELL_VARS_RAM_BEGIN && + (uintptr_t)symbols[i].value <= SHELL_VARS_RAM_END) { shell_output_str(&vars_command, (char *)symbols[i].name, ""); } } diff --git a/apps/webbrowser/htmlparser.c b/apps/webbrowser/htmlparser.c index 5e606d08e..b0d8cfdc3 100644 --- a/apps/webbrowser/htmlparser.c +++ b/apps/webbrowser/htmlparser.c @@ -222,7 +222,7 @@ static const char *tags[] = { }; /*-----------------------------------------------------------------------------------*/ -static unsigned char CC_FASTCALL +static unsigned char iswhitespace(char c) { return (c == ISO_space || @@ -255,7 +255,7 @@ htmlparser_init(void) #endif /* WWW_CONF_FORMS */ } /*-----------------------------------------------------------------------------------*/ -static char CC_FASTCALL +static char lowercase(char c) { /* XXX: This is a *brute force* approach to lower-case @@ -276,7 +276,7 @@ endtagfound(void) s.tagattrparam[s.tagattrparamptr] = 0; } /*-----------------------------------------------------------------------------------*/ -static void CC_FASTCALL +static void switch_majorstate(unsigned char newstate) { if(s.majorstate != newstate) { @@ -286,7 +286,7 @@ switch_majorstate(unsigned char newstate) } } /*-----------------------------------------------------------------------------------*/ -static void CC_FASTCALL +static void add_char(unsigned char c) { if(s.wordlen < WWW_CONF_WEBPAGE_WIDTH - 1 && c < 0x80) { @@ -320,7 +320,7 @@ newline(void) htmlparser_newline(); } /*-----------------------------------------------------------------------------------*/ -static unsigned char CC_FASTCALL +static unsigned char find_tag(char *tag) { static unsigned char first, last, i, tabi; @@ -521,7 +521,7 @@ parse_tag(void) } } /*-----------------------------------------------------------------------------------*/ -static uint16_t CC_FASTCALL +static uint16_t parse_word(char *data, uint8_t dlen) { static uint8_t i; diff --git a/apps/webbrowser/webclient.c b/apps/webbrowser/webclient.c index 5d2ce0254..b4487ca26 100644 --- a/apps/webbrowser/webclient.c +++ b/apps/webbrowser/webclient.c @@ -200,7 +200,7 @@ window_copy(int curptr, const char *data, unsigned char datalen) len = windowend - windowstart; } - strncpy(windowptr + windowstart, data, len); + strncpy((char *)(windowptr + windowstart), data, len); windowstart += len; return curptr + datalen; @@ -217,7 +217,7 @@ senddata(void) windowstart = s.getrequestptr; curptr = 0; windowend = windowstart + uip_mss(); - windowptr = (char *)uip_appdata - windowstart; + windowptr = (unsigned char *)uip_appdata - windowstart; curptr = window_copy(curptr, http_get, sizeof(http_get) - 1); curptr = window_copy(curptr, s.file, (unsigned char)strlen(s.file)); @@ -479,6 +479,11 @@ webclient_appcall(void *state) if(uip_closed()) { tcp_markconn(uip_conn, NULL); + /* Client requested close takes precedence over server initiated close. */ + if(s.state == WEBCLIENT_STATE_CLOSE) { + webclient_closed(); + return; + } switch(s.httpflag) { case HTTPFLAG_HTTPS: /* Send some info to the user. */ diff --git a/apps/webbrowser/www.c b/apps/webbrowser/www.c index 70af0332b..f72dfcbfe 100644 --- a/apps/webbrowser/www.c +++ b/apps/webbrowser/www.c @@ -34,12 +34,14 @@ #include #include +#include #include "ctk/ctk.h" #include "ctk/ctk-textentry-cmdline.h" #include "contiki-net.h" #include "lib/petsciiconv.h" #include "sys/arg.h" +#include "sys/log.h" #if WWW_CONF_WITH_WGET #include "program-handler.h" #endif /* WWW_CONF_WITH_WGET */ @@ -50,13 +52,8 @@ #include "www.h" -#if 1 -#define PRINTF(x) -#else -#include -#define PRINTF(x) printf x -#endif - +/* Explicitly declare itoa as it is non-standard and not necessarily in stdlib.h */ +char *itoa(int value, char *str, int base); /* The array that holds the current URL. */ static char url[WWW_CONF_MAX_URLLEN + 1]; @@ -196,7 +193,7 @@ PROCESS(www_process, "Web browser"); AUTOSTART_PROCESSES(&www_process); -static void CC_FASTCALL formsubmit(struct inputattrib *trigger); +static void formsubmit(struct inputattrib *trigger); /*-----------------------------------------------------------------------------------*/ /* make_window() @@ -232,7 +229,7 @@ redraw_window(void) ctk_window_redraw(&mainwindow); } /*-----------------------------------------------------------------------------------*/ -static char * CC_FASTCALL +static char * add_pageattrib(unsigned size) { char *ptr; @@ -246,7 +243,7 @@ add_pageattrib(unsigned size) } /*-----------------------------------------------------------------------------------*/ #if WWW_CONF_FORMS -static void CC_FASTCALL +static void add_forminput(struct inputattrib *inputptr) { inputptr->nextptr = NULL; @@ -285,13 +282,24 @@ start_loading(void) clear_page(); } /*-----------------------------------------------------------------------------------*/ -static void CC_FASTCALL +static void show_statustext(char *text) { ctk_label_set_text(&statustext, text); CTK_WIDGET_REDRAW(&statustext); } /*-----------------------------------------------------------------------------------*/ +static void +end_page(char *status, void *focus) +{ + show_statustext(status); + petsciiconv_topetscii(webpageptr - x, x); + CTK_WIDGET_FOCUS(&mainwindow, focus); + redraw_window(); + log_message("Page attribs free: ", itoa(pageattribs + sizeof(pageattribs) - pageattribptr, + pageattribs + sizeof(pageattribs) - 5, 10)); +} +/*-----------------------------------------------------------------------------------*/ /* open_url(): * * Called when the URL present in the global "url" variable should be @@ -389,7 +397,7 @@ open_url(void) * Will format a link from the current web pages so that it suits the * open_url() function. */ -static void CC_FASTCALL +static void set_link(char *link) { register char *urlptr; @@ -609,7 +617,7 @@ PROCESS_THREAD(www_process, ev, data) * "url" variable and the visible "editurl" (which is shown in the URL * text entry widget in the browser window). */ -static void CC_FASTCALL +static void set_url(char *host, uint16_t port, char *file) { char *urlptr; @@ -660,10 +668,7 @@ webclient_timedout(void) void webclient_closed(void) { - show_statustext("Stopped"); - petsciiconv_topetscii(webpageptr - x, x); - CTK_WIDGET_FOCUS(&mainwindow, &downbutton); - redraw_window(); + end_page("Stopped", &downbutton); } /*-----------------------------------------------------------------------------------*/ /* webclient_connected(): @@ -710,6 +715,7 @@ webclient_datahandler(char *data, uint16_t len) " Would you like to download instead?"); CTK_WIDGET_ADD(&mainwindow, &wgetnobutton); CTK_WIDGET_ADD(&mainwindow, &wgetyesbutton); + CTK_WIDGET_FOCUS(&mainwindow, &wgetyesbutton); redraw_window(); #endif /* CTK_CONF_WINDOWS */ #endif /* WWW_CONF_WITH_WGET || WWW_CONF_WGET_EXEC */ @@ -721,14 +727,11 @@ webclient_datahandler(char *data, uint16_t len) if(data == NULL) { loading = 0; - show_statustext("Done"); - petsciiconv_topetscii(webpageptr - x, x); - CTK_WIDGET_FOCUS(&mainwindow, &urlentry); - redraw_window(); + end_page("Done", &urlentry); } } /*-----------------------------------------------------------------------------------*/ -static void CC_FASTCALL +static void add_pagewidget(char *text, unsigned char size, char *attrib, unsigned char type, unsigned char border) { @@ -842,7 +845,9 @@ add_pagewidget(char *text, unsigned char size, char *attrib, unsigned char type, void htmlparser_newline(void) { +#ifdef WITH_PETSCII char *wptr; +#endif /* WITH_PETSCII */ if(++newlines > 2) { return; @@ -862,8 +867,10 @@ htmlparser_newline(void) ++y; x = 0; +#ifdef WITH_PETSCII wptr = webpageptr - WWW_CONF_WEBPAGE_WIDTH; petsciiconv_topetscii(wptr, WWW_CONF_WEBPAGE_WIDTH); +#endif /* WITH_PETSCII */ if(y == WWW_CONF_WEBPAGE_HEIGHT) { loading = 0; @@ -935,7 +942,7 @@ htmlparser_inputfield(unsigned char type, unsigned char size, char *text, char * } } /*-----------------------------------------------------------------------------------*/ -static void CC_FASTCALL +static void add_query(char delimiter, char *string) { static char *query; @@ -963,7 +970,7 @@ add_query(char delimiter, char *string) query += length; } /*-----------------------------------------------------------------------------------*/ -static void CC_FASTCALL +static void formsubmit(struct inputattrib *trigger) { struct inputattrib *input; diff --git a/apps/webserver-nano/httpd-fs/makefsdata.ignore/ttt/index.shtml b/apps/webserver-nano/httpd-fs/makefsdata.ignore/ttt/index.shtml index 3a23b43ed..f2891b8f1 100644 --- a/apps/webserver-nano/httpd-fs/makefsdata.ignore/ttt/index.shtml +++ b/apps/webserver-nano/httpd-fs/makefsdata.ignore/ttt/index.shtml @@ -1,3 +1,3 @@ -
-%! tictac +
+%! tictac
\ No newline at end of file diff --git a/apps/webserver-nano/httpd-fs/makefsdata.ignore/ttt/ttt.shtml b/apps/webserver-nano/httpd-fs/makefsdata.ignore/ttt/ttt.shtml index 3a23b43ed..f2891b8f1 100644 --- a/apps/webserver-nano/httpd-fs/makefsdata.ignore/ttt/ttt.shtml +++ b/apps/webserver-nano/httpd-fs/makefsdata.ignore/ttt/ttt.shtml @@ -1,3 +1,3 @@ -
-%! tictac +
+%! tictac
\ No newline at end of file diff --git a/apps/webserver/urlconv.c b/apps/webserver/urlconv.c index 3d5e583df..d4f32f484 100644 --- a/apps/webserver/urlconv.c +++ b/apps/webserver/urlconv.c @@ -80,7 +80,7 @@ urlconv_tofilename(char *dest, char *source, unsigned char maxlen) *dest = ISO_slash; strncpy(dest + 1, wwwroot, wwwrootlen); len = 0; - from = source; to = dest + wwwrootlen; + from = (unsigned char *)source; to = (unsigned char *)dest + wwwrootlen; maxlen -= 2 + wwwrootlen; do { c = *(from++); @@ -139,7 +139,7 @@ urlconv_tofilename(char *dest, char *source, unsigned char maxlen) } } while(c); if(*to == ISO_slash && (len + sizeof(http_index_htm) - 3) < maxlen) { - strcpy(to, http_index_htm); // add index.htm + strcpy((char *)to, http_index_htm); // add index.htm } else { ++to; *to = 0; diff --git a/core/contiki-default-conf.h b/core/contiki-default-conf.h index df7fe9e6d..0083f7e10 100644 --- a/core/contiki-default-conf.h +++ b/core/contiki-default-conf.h @@ -192,10 +192,24 @@ #define NBR_TABLE_CONF_MAX_NEIGHBORS 8 #endif /* NBR_TABLE_CONF_MAX_NEIGHBORS */ +/* UIP_CONF_ND6_SEND_RA enables standard IPv6 Router Advertisement. + * We enable it by default when IPv6 is used without RPL. */ +#ifndef UIP_CONF_ND6_SEND_RA +#define UIP_CONF_ND6_SEND_RA (NETSTACK_CONF_WITH_IPV6 && !UIP_CONF_IPV6_RPL) +#endif /* UIP_CONF_ND6_SEND_RA */ + /* UIP_CONF_ND6_SEND_NA enables standard IPv6 Neighbor Discovery Protocol. - This is unneeded when RPL is used. Disable to save ROM and a little RAM. */ + We enable it by default when IPv6 is used without RPL. + With RPL, the neighbor cache (link-local IPv6 <-> MAC address mapping) + is fed whenever receiving DIO and DAO messages. This is always sufficient + for RPL routing, i.e. to send to the preferred parent or any child. + Link-local unicast to other neighbors may, however, not be possible if + we never receive any DIO from them. This may happen if the link from the + neighbor to us is weak, if DIO transmissions are suppressed (Trickle + timer) or if the neighbor chooses not to transmit DIOs because it is + a leaf node or for any reason. */ #ifndef UIP_CONF_ND6_SEND_NA -#define UIP_CONF_ND6_SEND_NA 1 +#define UIP_CONF_ND6_SEND_NA (NETSTACK_CONF_WITH_IPV6 && !UIP_CONF_IPV6_RPL) #endif /* UIP_CONF_ND6_SEND_NA */ /*---------------------------------------------------------------------------*/ diff --git a/core/ctk/ctk-filedialog.c b/core/ctk/ctk-filedialog.c index 0bafcc4a8..ca4bf523e 100644 --- a/core/ctk/ctk-filedialog.c +++ b/core/ctk/ctk-filedialog.c @@ -155,14 +155,14 @@ ctk_filedialog_eventhandler(struct ctk_filedialog_state *s, } return 1; } else if(ev == ctk_signal_keypress) { - if((ctk_arch_key_t)data == CH_CURS_UP) { + if((char)(size_t)data == CH_CURS_UP) { clearptr(); if(fileptr > 0) { --fileptr; } showptr(); return 1; - } else if((ctk_arch_key_t)data == CH_CURS_DOWN) { + } else if((char)(size_t)data == CH_CURS_DOWN) { clearptr(); if(fileptr < FILES_HEIGHT - 1) { ++fileptr; diff --git a/core/ctk/ctk.c b/core/ctk/ctk.c index 5da963b19..699cf0198 100644 --- a/core/ctk/ctk.c +++ b/core/ctk/ctk.c @@ -185,7 +185,7 @@ unsigned short ctk_screensaver_timeout = (5*60); static struct timer timer; #endif /* CTK_CONF_SCREENSAVER */ -static void CC_FASTCALL +static void textentry_input(ctk_arch_key_t c, CC_REGISTER_ARG struct ctk_textentry *t); @@ -555,7 +555,7 @@ ctk_menu_remove(struct ctk_menu *menu) * \param clipy2 The lower bound of the clip interval */ /*---------------------------------------------------------------------------*/ -static void CC_FASTCALL +static void do_redraw_all(unsigned char clipy1, unsigned char clipy2) { #if CTK_CONF_WINDOWS @@ -818,7 +818,7 @@ ctk_menuitem_add(CC_REGISTER_ARG struct ctk_menu *menu, char *name) * \param w The widget that should be redrawn. */ /*---------------------------------------------------------------------------*/ -static void CC_FASTCALL +static void add_redrawwidget(struct ctk_widget *w) { static unsigned char i; @@ -852,7 +852,9 @@ add_redrawwidget(struct ctk_widget *w) static void widget_redraw(struct ctk_widget *widget) { +#if CTK_CONF_WINDOWS struct ctk_window *window; +#endif /* CTK_CONF_WINDOWS */ if(mode != CTK_MODE_NORMAL || widget == NULL) { return; @@ -870,8 +872,8 @@ widget_redraw(struct ctk_widget *widget) if(menus.open == NULL) #endif /* CTK_CONF_MENUS */ { - window = widget->window; #if CTK_CONF_WINDOWS + window = widget->window; if(window == dialog) { ctk_draw_widget(widget, CTK_FOCUS_DIALOG, 0, height); } else if(dialog == NULL && @@ -921,7 +923,7 @@ ctk_widget_redraw(struct ctk_widget *widget) * \param widget The widget to be added. */ /*---------------------------------------------------------------------------*/ -void CC_FASTCALL +void ctk_widget_add(CC_REGISTER_ARG struct ctk_window *window, CC_REGISTER_ARG struct ctk_widget *widget) { @@ -973,7 +975,7 @@ ctk_desktop_height(struct ctk_desktop *d) * \param focus The widget to be focused. */ /*---------------------------------------------------------------------------*/ -static void CC_FASTCALL +static void select_widget(struct ctk_widget *focus) { struct ctk_window *window; @@ -1001,7 +1003,7 @@ select_widget(struct ctk_widget *focus) #define DOWN 1 #define LEFT 2 #define RIGHT 3 -static void CC_FASTCALL +static void switch_focus_widget(unsigned char direction) { #if CTK_CONF_WINDOWS @@ -1126,7 +1128,7 @@ switch_menu_item(unsigned char updown) } #endif /* CTK_CONF_MENUS */ /*---------------------------------------------------------------------------*/ -static unsigned char CC_FASTCALL +static unsigned char activate(CC_REGISTER_ARG struct ctk_widget *w) { if(w->type == CTK_WIDGET_BUTTON) { @@ -1183,7 +1185,7 @@ ctk_textentry_input_null(ctk_arch_key_t c, struct ctk_textentry *t) } #endif /* SDCC */ /*---------------------------------------------------------------------------*/ -static void CC_FASTCALL +static void textentry_input(ctk_arch_key_t c, CC_REGISTER_ARG struct ctk_textentry *t) { register char *cptr, *cptr2; diff --git a/core/ctk/ctk.h b/core/ctk/ctk.h index 0cbef830d..4aea9458e 100644 --- a/core/ctk/ctk.h +++ b/core/ctk/ctk.h @@ -743,8 +743,8 @@ void ctk_icon_add(struct ctk_widget *icon, struct process *p); */ #define CTK_WIDGET_ADD(win, widg) \ ctk_widget_add(win, (struct ctk_widget *)widg) -CCIF void CC_FASTCALL ctk_widget_add(struct ctk_window *window, - struct ctk_widget *widget); +CCIF void ctk_widget_add(struct ctk_window *window, + struct ctk_widget *widget); /** * Set focus to a widget. diff --git a/core/lib/ccm-star.c b/core/lib/ccm-star.c index e093c8703..4cc8723a1 100644 --- a/core/lib/ccm-star.c +++ b/core/lib/ccm-star.c @@ -48,14 +48,11 @@ /*---------------------------------------------------------------------------*/ static void -set_nonce(uint8_t *iv, +set_iv(uint8_t *iv, uint8_t flags, const uint8_t *nonce, uint8_t counter) { - /* 1 byte|| 8 bytes || 4 bytes || 1 byte || 2 bytes */ - /* flags || extended_source_address || frame_counter || sec_lvl || counter */ - iv[0] = flags; memcpy(iv + 1, nonce, CCM_STAR_NONCE_LENGTH); iv[14] = 0; @@ -73,7 +70,7 @@ ctr_step(const uint8_t *nonce, uint8_t a[AES_128_BLOCK_SIZE]; uint8_t i; - set_nonce(a, CCM_STAR_ENCRYPTION_FLAGS, nonce, counter); + set_iv(a, CCM_STAR_ENCRYPTION_FLAGS, nonce, counter); AES_128.encrypt(a); for(i = 0; (pos + i < m_len) && (i < AES_128_BLOCK_SIZE); i++) { @@ -82,9 +79,9 @@ ctr_step(const uint8_t *nonce, } /*---------------------------------------------------------------------------*/ static void -mic(const uint8_t *m, uint8_t m_len, - const uint8_t *nonce, - const uint8_t *a, uint8_t a_len, +mic(const uint8_t *nonce, + const uint8_t *m, uint8_t m_len, + const uint8_t *a, uint8_t a_len, uint8_t *result, uint8_t mic_len) { @@ -92,10 +89,10 @@ mic(const uint8_t *m, uint8_t m_len, uint8_t pos; uint8_t i; - set_nonce(x, CCM_STAR_AUTH_FLAGS(a_len, mic_len), nonce, m_len); + set_iv(x, CCM_STAR_AUTH_FLAGS(a_len, mic_len), nonce, m_len); AES_128.encrypt(x); - if(a_len > 0) { + if(a_len) { x[1] = x[1] ^ a_len; for(i = 2; (i - 2 < a_len) && (i < AES_128_BLOCK_SIZE); i++) { x[i] ^= a[i - 2]; @@ -113,8 +110,7 @@ mic(const uint8_t *m, uint8_t m_len, } } - if(m_len > 0) { - m = a + a_len; + if(m_len) { pos = 0; while(pos < m_len) { for(i = 0; (pos + i < m_len) && (i < AES_128_BLOCK_SIZE); i++) { @@ -131,7 +127,7 @@ mic(const uint8_t *m, uint8_t m_len, } /*---------------------------------------------------------------------------*/ static void -ctr(uint8_t *m, uint8_t m_len, const uint8_t* nonce) +ctr(const uint8_t *nonce, uint8_t *m, uint8_t m_len) { uint8_t pos; uint8_t counter; @@ -144,13 +140,38 @@ ctr(uint8_t *m, uint8_t m_len, const uint8_t* nonce) } } /*---------------------------------------------------------------------------*/ -static void set_key(const uint8_t *key) { - AES_128.set_key((uint8_t*)key); +static void +set_key(const uint8_t *key) +{ + AES_128.set_key(key); +} +/*---------------------------------------------------------------------------*/ +static void +aead(const uint8_t* nonce, + uint8_t* m, uint8_t m_len, + const uint8_t* a, uint8_t a_len, + uint8_t *result, uint8_t mic_len, + int forward) +{ + if(!forward) { + /* decrypt */ + ctr(nonce, m, m_len); + } + + mic(nonce, + m, m_len, + a, a_len, + result, + mic_len); + + if(forward) { + /* encrypt */ + ctr(nonce, m, m_len); + } } /*---------------------------------------------------------------------------*/ const struct ccm_star_driver ccm_star_driver = { - mic, - ctr, - set_key + set_key, + aead }; /*---------------------------------------------------------------------------*/ diff --git a/core/lib/ccm-star.h b/core/lib/ccm-star.h index f0394e4ae..06296fb44 100644 --- a/core/lib/ccm-star.h +++ b/core/lib/ccm-star.h @@ -55,34 +55,26 @@ */ struct ccm_star_driver { - /** - * \brief Generates a MIC over the data supplied. - * \param data The data buffer to read. - * \param data_length The data buffer length. - * \param nonce The nonce to use. CCM_STAR_NONCE_LENGTH bytes long. - * \param result The generated MIC will be put here - * \param mic_len The size of the MIC to be generated. <= 16. - */ - void (* mic)(const uint8_t* data, uint8_t data_length, - const uint8_t* nonce, - const uint8_t* add, uint8_t add_len, - uint8_t *result, - uint8_t mic_len); - /** - * \brief XORs the frame in the packetbuf with the key stream. - * \param data The data buffer to read. - * \param data_length The data buffer length. - * \param nonce The nonce to use. CCM_STAR_NONCE_LENGTH bytes long. - */ - void (* ctr)( uint8_t* data, uint8_t data_length, - const uint8_t* nonce); - - /** - * \brief Sets the key in use. Default implementation calls AES_128.set_key() - * \param key The key to use. + * \brief Sets the key in use. Default implementation calls AES_128.set_key(). + * \param key The key to use. */ void (* set_key)(const uint8_t* key); + + /** + * \brief Combines authentication and encryption. + * \param nonce The nonce to use. CCM_STAR_NONCE_LENGTH bytes long. + * \param m message to encrypt or decrypt + * \param a Additional authenticated data + * \param result The generated MIC will be put here + * \param mic_len The size of the MIC to be generated. <= 16. + * \param forward != 0 if used in forward direction. + */ + void (* aead)(const uint8_t* nonce, + uint8_t* m, uint8_t m_len, + const uint8_t* a, uint8_t a_len, + uint8_t *result, uint8_t mic_len, + int forward); }; extern const struct ccm_star_driver CCM_STAR; diff --git a/core/lib/ringbuf.c b/core/lib/ringbuf.c index a10127c17..89bcad514 100644 --- a/core/lib/ringbuf.c +++ b/core/lib/ringbuf.c @@ -38,6 +38,7 @@ */ #include "lib/ringbuf.h" +#include /*---------------------------------------------------------------------------*/ void ringbuf_init(struct ringbuf *r, uint8_t *dataptr, uint8_t size) @@ -63,8 +64,15 @@ ringbuf_put(struct ringbuf *r, uint8_t c) if(((r->put_ptr - r->get_ptr) & r->mask) == r->mask) { return 0; } - r->data[r->put_ptr] = c; - r->put_ptr = (r->put_ptr + 1) & r->mask; + /* + * CC_ACCESS_NOW is used because the compiler is allowed to reorder + * the access to non-volatile variables. + * In this case a reader might read from the moved index/ptr before + * its value (c) is written. Reordering makes little sense, but + * better safe than sorry. + */ + CC_ACCESS_NOW(uint8_t, r->data[r->put_ptr]) = c; + CC_ACCESS_NOW(uint8_t, r->put_ptr) = (r->put_ptr + 1) & r->mask; return 1; } /*---------------------------------------------------------------------------*/ @@ -84,8 +92,17 @@ ringbuf_get(struct ringbuf *r) most platforms, but C does not guarantee this. */ if(((r->put_ptr - r->get_ptr) & r->mask) > 0) { - c = r->data[r->get_ptr]; - r->get_ptr = (r->get_ptr + 1) & r->mask; + /* + * CC_ACCESS_NOW is used because the compiler is allowed to reorder + * the access to non-volatile variables. + * In this case the memory might be freed and overwritten by + * increasing get_ptr before the value was copied to c. + * Opposed to the put-operation this would even make sense, + * because the register used for mask can be reused to save c + * (on some architectures). + */ + c = CC_ACCESS_NOW(uint8_t, r->data[r->get_ptr]); + CC_ACCESS_NOW(uint8_t, r->get_ptr) = (r->get_ptr + 1) & r->mask; return c; } else { return -1; diff --git a/core/net/ip/ip64-addr.h b/core/net/ip/ip64-addr.h index 4cf80a9b9..3027d846a 100644 --- a/core/net/ip/ip64-addr.h +++ b/core/net/ip/ip64-addr.h @@ -34,6 +34,20 @@ #include "net/ip/uip.h" + +/** + * \brief Is IPv4-mapped Address + * + * See https://tools.ietf.org/html/rfc6890#page-14 + */ +#define ip64_addr_is_ipv4_mapped_addr(a) \ + ((((a)->u16[0]) == 0) && \ + (((a)->u16[1]) == 0) && \ + (((a)->u16[2]) == 0) && \ + (((a)->u16[3]) == 0) && \ + (((a)->u16[4]) == 0) && \ + (((a)->u16[5]) == 0xFFFF)) + void ip64_addr_copy4(uip_ip4addr_t *dest, const uip_ip4addr_t *src); void ip64_addr_copy6(uip_ip6addr_t *dest, const uip_ip6addr_t *src); diff --git a/core/net/ip/resolv.c b/core/net/ip/resolv.c index edf2a4815..0dd06104b 100644 --- a/core/net/ip/resolv.c +++ b/core/net/ip/resolv.c @@ -501,7 +501,7 @@ mdns_write_announce_records(unsigned char *queryptr, uint8_t *count) for(i = 0; i < UIP_DS6_ADDR_NB; ++i) { if(uip_ds6_if.addr_list[i].isused #if !RESOLV_CONF_MDNS_INCLUDE_GLOBAL_V6_ADDRS - && uip_is_addr_link_local(&uip_ds6_if.addr_list[i].ipaddr) + && uip_is_addr_linklocal(&uip_ds6_if.addr_list[i].ipaddr) #endif ) { if(!*count) { diff --git a/core/net/ip/tcpip.c b/core/net/ip/tcpip.c index 0505b3d47..00607ba14 100644 --- a/core/net/ip/tcpip.c +++ b/core/net/ip/tcpip.c @@ -155,6 +155,7 @@ unsigned char tcpip_is_forwarding; /* Forwarding right now? */ PROCESS(tcpip_process, "TCP/IP stack"); /*---------------------------------------------------------------------------*/ +#if UIP_TCP || UIP_CONF_IP_FORWARD static void start_periodic_tcp_timer(void) { @@ -162,6 +163,7 @@ start_periodic_tcp_timer(void) etimer_restart(&periodic); } } +#endif /* UIP_TCP || UIP_CONF_IP_FORWARD */ /*---------------------------------------------------------------------------*/ static void check_for_tcp_syn(void) @@ -183,30 +185,17 @@ check_for_tcp_syn(void) static void packet_input(void) { -#if UIP_CONF_IP_FORWARD if(uip_len > 0) { + +#if UIP_CONF_IP_FORWARD tcpip_is_forwarding = 1; - if(uip_fw_forward() == UIP_FW_LOCAL) { + if(uip_fw_forward() != UIP_FW_LOCAL) { tcpip_is_forwarding = 0; - check_for_tcp_syn(); - uip_input(); - if(uip_len > 0) { -#if UIP_CONF_TCP_SPLIT - uip_split_output(); -#else /* UIP_CONF_TCP_SPLIT */ -#if NETSTACK_CONF_WITH_IPV6 - tcpip_ipv6_output(); -#else - PRINTF("tcpip packet_input forward output len %d\n", uip_len); - tcpip_output(); -#endif -#endif /* UIP_CONF_TCP_SPLIT */ - } + return; } tcpip_is_forwarding = 0; - } -#else /* UIP_CONF_IP_FORWARD */ - if(uip_len > 0) { +#endif /* UIP_CONF_IP_FORWARD */ + check_for_tcp_syn(); uip_input(); if(uip_len > 0) { @@ -215,14 +204,13 @@ packet_input(void) #else /* UIP_CONF_TCP_SPLIT */ #if NETSTACK_CONF_WITH_IPV6 tcpip_ipv6_output(); -#else +#else /* NETSTACK_CONF_WITH_IPV6 */ PRINTF("tcpip packet_input output len %d\n", uip_len); tcpip_output(); -#endif +#endif /* NETSTACK_CONF_WITH_IPV6 */ #endif /* UIP_CONF_TCP_SPLIT */ } } -#endif /* UIP_CONF_IP_FORWARD */ } /*---------------------------------------------------------------------------*/ #if UIP_TCP @@ -584,7 +572,16 @@ tcpip_ipv6_output(void) /* This should be copied from the ext header... */ UIP_IP_BUF->proto = proto; } - UIP_FALLBACK_INTERFACE.output(); + /* Inform the other end that the destination is not reachable. If it's + * not informed routes might get lost unexpectedly until there's a need + * to send a new packet to the peer */ + if(UIP_FALLBACK_INTERFACE.output() < 0) { + PRINTF("FALLBACK: output error. Reporting DST UNREACH\n"); + uip_icmp6_error_output(ICMP6_DST_UNREACH, ICMP6_DST_UNREACH_ADDR, 0); + uip_flags = 0; + tcpip_ipv6_output(); + return; + } #else PRINTF("tcpip_ipv6_output: Destination off-link but no route\n"); #endif /* !UIP_FALLBACK_INTERFACE */ @@ -672,7 +669,11 @@ tcpip_ipv6_output(void) stimer_set(&nbr->sendns, uip_ds6_if.retrans_timer / 1000); nbr->nscount = 1; + /* Send the first NS try from here (multicast destination IP address). */ } +#else /* UIP_ND6_SEND_NA */ + uip_len = 0; + return; #endif /* UIP_ND6_SEND_NA */ } else { #if UIP_ND6_SEND_NA @@ -719,7 +720,6 @@ tcpip_ipv6_output(void) uip_clear_buf(); return; } - return; } /* Multicast IP destination address. */ tcpip_output(NULL); diff --git a/core/net/ip/uip-debug.c b/core/net/ip/uip-debug.c index 93e7edfe7..ab3ba0765 100644 --- a/core/net/ip/uip-debug.c +++ b/core/net/ip/uip-debug.c @@ -38,6 +38,7 @@ */ #include "net/ip/uip-debug.h" +#include "net/ip/ip64-addr.h" /*---------------------------------------------------------------------------*/ void @@ -53,20 +54,38 @@ uip_debug_ipaddr_print(const uip_ipaddr_t *addr) return; } #if NETSTACK_CONF_WITH_IPV6 - for(i = 0, f = 0; i < sizeof(uip_ipaddr_t); i += 2) { - a = (addr->u8[i] << 8) + addr->u8[i + 1]; - if(a == 0 && f >= 0) { - if(f++ == 0) { - PRINTA("::"); + if(ip64_addr_is_ipv4_mapped_addr(addr)) { + /* + * Printing IPv4-mapped addresses is done according to RFC 3513 [1] + * + * "An alternative form that is sometimes more + * convenient when dealing with a mixed environment + * of IPv4 and IPv6 nodes is x:x:x:x:x:x:d.d.d.d, + * where the 'x's are the hexadecimal values of the + * six high-order 16-bit pieces of the address, and + * the 'd's are the decimal values of the four + * low-order 8-bit pieces of the address (standard + * IPv4 representation)." + * + * [1] https://tools.ietf.org/html/rfc3513#page-5 + */ + PRINTA("::FFFF:%u.%u.%u.%u", addr->u8[12], addr->u8[13], addr->u8[14], addr->u8[15]); + } else { + for(i = 0, f = 0; i < sizeof(uip_ipaddr_t); i += 2) { + a = (addr->u8[i] << 8) + addr->u8[i + 1]; + if(a == 0 && f >= 0) { + if(f++ == 0) { + PRINTA("::"); + } + } else { + if(f > 0) { + f = -1; + } else if(i > 0) { + PRINTA(":"); + } + PRINTA("%x", a); } - } else { - if(f > 0) { - f = -1; - } else if(i > 0) { - PRINTA(":"); - } - PRINTA("%x", a); - } + } } #else /* NETSTACK_CONF_WITH_IPV6 */ PRINTA("%u.%u.%u.%u", addr->u8[0], addr->u8[1], addr->u8[2], addr->u8[3]); diff --git a/core/net/ip/uip-udp-packet.c b/core/net/ip/uip-udp-packet.c index 5cbf63763..923661709 100644 --- a/core/net/ip/uip-udp-packet.c +++ b/core/net/ip/uip-udp-packet.c @@ -54,9 +54,9 @@ uip_udp_packet_send(struct uip_udp_conn *c, const void *data, int len) if(data != NULL) { uip_udp_conn = c; uip_slen = len; - memcpy(&uip_buf[UIP_LLH_LEN + UIP_IPUDPH_LEN], data, - len > UIP_BUFSIZE - UIP_LLH_LEN - UIP_IPUDPH_LEN? - UIP_BUFSIZE - UIP_LLH_LEN - UIP_IPUDPH_LEN: len); + memmove(&uip_buf[UIP_LLH_LEN + UIP_IPUDPH_LEN], data, + len > UIP_BUFSIZE - UIP_LLH_LEN - UIP_IPUDPH_LEN? + UIP_BUFSIZE - UIP_LLH_LEN - UIP_IPUDPH_LEN: len); uip_process(UIP_UDP_SEND_CONN); #if UIP_CONF_IPV6_MULTICAST diff --git a/core/net/ip/uip.h b/core/net/ip/uip.h index a85929554..12861cdd9 100644 --- a/core/net/ip/uip.h +++ b/core/net/ip/uip.h @@ -1429,7 +1429,13 @@ extern struct uip_udp_conn uip_udp_conns[UIP_UDP_CONNS]; struct uip_fallback_interface { void (*init)(void); - void (*output)(void); + /** + * \retval >=0 + * in case of success + * \retval <0 + * in case of failure + */ + int (*output)(void); }; #if UIP_CONF_ICMP6 @@ -2016,8 +2022,9 @@ CCIF extern uip_lladdr_t uip_lladdr; (((a)->u8[15]) == 0x02)) /** - * \brief Checks whether the address a is link local. - * a is of type uip_ipaddr_t + * \brief is addr (a) a link local unicast address, see RFC3513 + * i.e. is (a) on prefix FE80::/10 + * a is of type uip_ipaddr_t* */ #define uip_is_addr_linklocal(a) \ ((a)->u8[0] == 0xfe && \ @@ -2070,15 +2077,6 @@ CCIF extern uip_lladdr_t uip_lladdr; (((b)->u8[13]) = ((a)->u8[13])); \ (((b)->u16[7]) = ((a)->u16[7])) -/** - * \brief is addr (a) a link local unicast address, see RFC3513 - * i.e. is (a) on prefix FE80::/10 - * a is of type uip_ipaddr_t* - */ -#define uip_is_addr_link_local(a) \ - ((((a)->u8[0]) == 0xFE) && \ - (((a)->u8[1]) == 0x80)) - /** * \brief was addr (a) forged based on the mac address m * a type is uip_ipaddr_t diff --git a/core/net/ip64/ip64-conf-example.h b/core/net/ip64/ip64-conf-example.h index 66102d5c8..5c08e7438 100644 --- a/core/net/ip64/ip64-conf-example.h +++ b/core/net/ip64/ip64-conf-example.h @@ -35,9 +35,14 @@ #include "ip64-tap-driver.h" #include "ip64-eth-interface.h" -#define IP64_CONF_UIP_FALLBACK_INTERFACE ip64_eth_interface -#define IP64_CONF_INPUT ip64_eth_interface_input +#define IP64_CONF_UIP_FALLBACK_INTERFACE ip64_eth_interface +#define IP64_CONF_INPUT ip64_eth_interface_input -#define IP64_CONF_ETH_DRIVER ip64_tap_driver +#define IP64_CONF_ETH_DRIVER ip64_tap_driver +/* + * In contrast to the mandatory parameters above, IP64_CONF_DHCP is an + * optional configuration parameter. The default value is set in ip64.h + */ +/* #define IP64_CONF_DHCP 1 */ #endif /* IP64_CONF_H */ diff --git a/core/net/ip64/ip64-eth-interface.c b/core/net/ip64/ip64-eth-interface.c index 42f6234cc..026467137 100644 --- a/core/net/ip64/ip64-eth-interface.c +++ b/core/net/ip64/ip64-eth-interface.c @@ -84,7 +84,7 @@ init(void) printf("ip64-eth-interface: init\n"); } /*---------------------------------------------------------------------------*/ -static void +static int output(void) { int len, ret; @@ -114,7 +114,7 @@ output(void) printf("Create request\n"); len = ip64_arp_create_arp_request(ip64_packet_buffer, &ip64_packet_buffer[sizeof(struct ip64_eth_hdr)]); - IP64_ETH_DRIVER.output(ip64_packet_buffer, len); + return IP64_ETH_DRIVER.output(ip64_packet_buffer, len); } } } diff --git a/core/net/ip64/ip64-slip-interface.c b/core/net/ip64/ip64-slip-interface.c index 8d46d78a8..f62309cab 100644 --- a/core/net/ip64/ip64-slip-interface.c +++ b/core/net/ip64/ip64-slip-interface.c @@ -115,7 +115,7 @@ init(void) slip_set_input_callback(input_callback); } /*---------------------------------------------------------------------------*/ -static void +static int output(void) { int len; @@ -138,8 +138,10 @@ output(void) memcpy(&uip_buf[UIP_LLH_LEN], ip64_packet_buffer, len); uip_len = len; slip_send(); + return len; } } + return 0; } /*---------------------------------------------------------------------------*/ const struct uip_fallback_interface ip64_slip_interface = { diff --git a/core/net/ip64/ip64.c b/core/net/ip64/ip64.c index e00e1e443..8483d9388 100644 --- a/core/net/ip64/ip64.c +++ b/core/net/ip64/ip64.c @@ -188,7 +188,7 @@ ip64_init(void) PRINTF("ip64_init\n"); IP64_ETH_DRIVER.init(); -#if IP64_CONF_DHCP +#if IP64_DHCP ip64_ipv4_dhcp_init(); #endif /* IP64_CONF_DHCP */ @@ -894,14 +894,14 @@ ip64_hostaddr_is_configured(void) static void interface_init(void) { - IP64_CONF_UIP_FALLBACK_INTERFACE.init(); + IP64_UIP_FALLBACK_INTERFACE.init(); } /*---------------------------------------------------------------------------*/ static void interface_output(void) { PRINTF("ip64: interface_output len %d\n", uip_len); - IP64_CONF_UIP_FALLBACK_INTERFACE.output(); + IP64_UIP_FALLBACK_INTERFACE.output(); } /*---------------------------------------------------------------------------*/ const struct uip_fallback_interface ip64_uip_fallback_interface = { diff --git a/core/net/ip64/ip64.h b/core/net/ip64/ip64.h index 50d37d691..0837dc988 100644 --- a/core/net/ip64/ip64.h +++ b/core/net/ip64/ip64.h @@ -36,12 +36,12 @@ void ip64_init(void); int ip64_6to4(const uint8_t *ipv6packet, const uint16_t ipv6len, - uint8_t *resultpacket); + uint8_t *resultpacket); int ip64_4to6(const uint8_t *ipv4packet, const uint16_t ipv4len, - uint8_t *resultpacket); + uint8_t *resultpacket); void ip64_set_ipv4_address(const uip_ip4addr_t *ipv4addr, - const uip_ip4addr_t *netmask); + const uip_ip4addr_t *netmask); void ip64_set_ipv6_address(const uip_ip6addr_t *ipv6addr); const uip_ip4addr_t *ip64_get_hostaddr(void); @@ -71,7 +71,18 @@ extern uint16_t ip64_packet_buffer_maxlen; #define IP64_INPUT IP64_CONF_INPUT #endif /* IP64_CONF_INPUT */ +#ifndef IP64_CONF_UIP_FALLBACK_INTERFACE +#error IP64_CONF_UIP_FALLBACK_INTERFACE must be #defined in ip64-conf.h +#else /* IP64_CONF_UIP_FALLBACK_INTERFACE */ +#define IP64_UIP_FALLBACK_INTERFACE IP64_CONF_UIP_FALLBACK_INTERFACE +#endif /* IP64_CONF_UIP_FALLBACK_INTERFACE */ +#ifdef IP64_CONF_DHCP +#define IP64_DHCP IP64_CONF_DHCP +#else /* IP64_CONF_DHCP */ +/* Enable DHCP per default */ +#define IP64_DHCP 1 +#endif /* IP64_CONF_DHCP */ #endif /* IP64_H */ diff --git a/core/net/ipv4/uip.c b/core/net/ipv4/uip.c index 48366a114..331cb7562 100644 --- a/core/net/ipv4/uip.c +++ b/core/net/ipv4/uip.c @@ -436,6 +436,11 @@ uip_connect(const uip_ipaddr_t *ripaddr, uint16_t rport) conn->snd_nxt[2] = iss[2]; conn->snd_nxt[3] = iss[3]; + conn->rcv_nxt[0] = 0; + conn->rcv_nxt[1] = 0; + conn->rcv_nxt[2] = 0; + conn->rcv_nxt[3] = 0; + conn->initialmss = conn->mss = UIP_TCP_MSS; conn->len = 1; /* TCP length of the SYN is one. */ @@ -1367,10 +1372,10 @@ uip_process(uint8_t flag) uip_connr->len = 1; /* rcv_nxt should be the seqno from the incoming packet + 1. */ - uip_connr->rcv_nxt[3] = BUF->seqno[3]; - uip_connr->rcv_nxt[2] = BUF->seqno[2]; - uip_connr->rcv_nxt[1] = BUF->seqno[1]; uip_connr->rcv_nxt[0] = BUF->seqno[0]; + uip_connr->rcv_nxt[1] = BUF->seqno[1]; + uip_connr->rcv_nxt[2] = BUF->seqno[2]; + uip_connr->rcv_nxt[3] = BUF->seqno[3]; uip_add_rcv_nxt(1); /* Parse the TCP MSS option, if present. */ diff --git a/core/net/ipv6/multicast/roll-tm.c b/core/net/ipv6/multicast/roll-tm.c index bed0b6b0f..a569063f9 100644 --- a/core/net/ipv6/multicast/roll-tm.c +++ b/core/net/ipv6/multicast/roll-tm.c @@ -1100,7 +1100,7 @@ icmp_input() uint16_t val; #if UIP_CONF_IPV6_CHECKS - if(!uip_is_addr_link_local(&UIP_IP_BUF->srcipaddr)) { + if(!uip_is_addr_linklocal(&UIP_IP_BUF->srcipaddr)) { PRINTF("ROLL TM: ICMPv6 In, bad source "); PRINT6ADDR(&UIP_IP_BUF->srcipaddr); PRINTF(" to "); diff --git a/core/net/ipv6/sicslowpan.c b/core/net/ipv6/sicslowpan.c index 62b9014c5..34648ab2b 100644 --- a/core/net/ipv6/sicslowpan.c +++ b/core/net/ipv6/sicslowpan.c @@ -635,7 +635,7 @@ compress_hdr_hc06(linkaddr_t *link_destaddr) iphc1 |= compress_addr_64(SICSLOWPAN_IPHC_SAM_BIT, &UIP_IP_BUF->srcipaddr, &uip_lladdr); /* No context found for this address */ - } else if(uip_is_addr_link_local(&UIP_IP_BUF->srcipaddr) && + } else if(uip_is_addr_linklocal(&UIP_IP_BUF->srcipaddr) && UIP_IP_BUF->destipaddr.u16[1] == 0 && UIP_IP_BUF->destipaddr.u16[2] == 0 && UIP_IP_BUF->destipaddr.u16[3] == 0) { @@ -686,7 +686,7 @@ compress_hdr_hc06(linkaddr_t *link_destaddr) iphc1 |= compress_addr_64(SICSLOWPAN_IPHC_DAM_BIT, &UIP_IP_BUF->destipaddr, (uip_lladdr_t *)link_destaddr); /* No context found for this address */ - } else if(uip_is_addr_link_local(&UIP_IP_BUF->destipaddr) && + } else if(uip_is_addr_linklocal(&UIP_IP_BUF->destipaddr) && UIP_IP_BUF->destipaddr.u16[1] == 0 && UIP_IP_BUF->destipaddr.u16[2] == 0 && UIP_IP_BUF->destipaddr.u16[3] == 0) { @@ -1087,9 +1087,9 @@ compress_hdr_hc1(linkaddr_t *link_destaddr) if(UIP_IP_BUF->vtc != 0x60 || UIP_IP_BUF->tcflow != 0 || UIP_IP_BUF->flow != 0 || - !uip_is_addr_link_local(&UIP_IP_BUF->srcipaddr) || + !uip_is_addr_linklocal(&UIP_IP_BUF->srcipaddr) || !uip_is_addr_mac_addr_based(&UIP_IP_BUF->srcipaddr, &uip_lladdr) || - !uip_is_addr_link_local(&UIP_IP_BUF->destipaddr) || + !uip_is_addr_linklocal(&UIP_IP_BUF->destipaddr) || !uip_is_addr_mac_addr_based(&UIP_IP_BUF->destipaddr, (uip_lladdr_t *)link_destaddr) || (UIP_IP_BUF->proto != UIP_PROTO_ICMP6 && @@ -1443,7 +1443,7 @@ output(const uip_lladdr_t *localdest) #else /* USE_FRAMER_HDRLEN */ framer_hdrlen = 21; #endif /* USE_FRAMER_HDRLEN */ - max_payload = MAC_MAX_PAYLOAD - framer_hdrlen - NETSTACK_LLSEC.get_overhead(); + max_payload = MAC_MAX_PAYLOAD - framer_hdrlen; if((int)uip_len - (int)uncomp_hdr_len > max_payload - (int)packetbuf_hdr_len) { #if SICSLOWPAN_CONF_FRAG @@ -1455,7 +1455,7 @@ output(const uip_lladdr_t *localdest) * IPv6/HC1/HC06/HC_UDP dispatchs/headers. * The following fragments contain only the fragn dispatch. */ - int estimated_fragments = ((int)uip_len) / ((int)MAC_MAX_PAYLOAD - SICSLOWPAN_FRAGN_HDR_LEN) + 1; + int estimated_fragments = ((int)uip_len) / (max_payload - SICSLOWPAN_FRAGN_HDR_LEN) + 1; int freebuf = queuebuf_numfree() - 1; PRINTFO("uip_len: %d, fragments: %d, free bufs: %d\n", uip_len, estimated_fragments, freebuf); if(freebuf < estimated_fragments) { diff --git a/core/net/ipv6/uip-ds6.c b/core/net/ipv6/uip-ds6.c index ff2ccd1db..148c8aa24 100644 --- a/core/net/ipv6/uip-ds6.c +++ b/core/net/ipv6/uip-ds6.c @@ -83,7 +83,9 @@ static uip_ipaddr_t loc_fipaddr; /* Pointers used in this file */ static uip_ds6_addr_t *locaddr; static uip_ds6_maddr_t *locmaddr; +#if UIP_DS6_AADDR_NB static uip_ds6_aaddr_t *locaaddr; +#endif /* UIP_DS6_AADDR_NB */ static uip_ds6_prefix_t *locprefix; /*---------------------------------------------------------------------------*/ @@ -389,7 +391,7 @@ uip_ds6_get_link_local(int8_t state) for(locaddr = uip_ds6_if.addr_list; locaddr < uip_ds6_if.addr_list + UIP_DS6_ADDR_NB; locaddr++) { if(locaddr->isused && (state == -1 || locaddr->state == state) - && (uip_is_addr_link_local(&locaddr->ipaddr))) { + && (uip_is_addr_linklocal(&locaddr->ipaddr))) { return locaddr; } } @@ -408,7 +410,7 @@ uip_ds6_get_global(int8_t state) for(locaddr = uip_ds6_if.addr_list; locaddr < uip_ds6_if.addr_list + UIP_DS6_ADDR_NB; locaddr++) { if(locaddr->isused && (state == -1 || locaddr->state == state) - && !(uip_is_addr_link_local(&locaddr->ipaddr))) { + && !(uip_is_addr_linklocal(&locaddr->ipaddr))) { return locaddr; } } @@ -458,6 +460,7 @@ uip_ds6_maddr_lookup(const uip_ipaddr_t *ipaddr) uip_ds6_aaddr_t * uip_ds6_aaddr_add(uip_ipaddr_t *ipaddr) { +#if UIP_DS6_AADDR_NB if(uip_ds6_list_loop ((uip_ds6_element_t *)uip_ds6_if.aaddr_list, UIP_DS6_AADDR_NB, sizeof(uip_ds6_aaddr_t), ipaddr, 128, @@ -466,6 +469,7 @@ uip_ds6_aaddr_add(uip_ipaddr_t *ipaddr) uip_ipaddr_copy(&locaaddr->ipaddr, ipaddr); return locaaddr; } +#endif /* UIP_DS6_AADDR_NB */ return NULL; } @@ -483,11 +487,13 @@ uip_ds6_aaddr_rm(uip_ds6_aaddr_t *aaddr) uip_ds6_aaddr_t * uip_ds6_aaddr_lookup(uip_ipaddr_t *ipaddr) { +#if UIP_DS6_AADDR_NB if(uip_ds6_list_loop((uip_ds6_element_t *)uip_ds6_if.aaddr_list, UIP_DS6_AADDR_NB, sizeof(uip_ds6_aaddr_t), ipaddr, 128, (uip_ds6_element_t **)&locaaddr) == FOUND) { return locaaddr; } +#endif /* UIP_DS6_AADDR_NB */ return NULL; } @@ -499,13 +505,13 @@ uip_ds6_select_src(uip_ipaddr_t *src, uip_ipaddr_t *dst) uint8_t n = 0; uip_ds6_addr_t *matchaddr = NULL; - if(!uip_is_addr_link_local(dst) && !uip_is_addr_mcast(dst)) { + if(!uip_is_addr_linklocal(dst) && !uip_is_addr_mcast(dst)) { /* find longest match */ for(locaddr = uip_ds6_if.addr_list; locaddr < uip_ds6_if.addr_list + UIP_DS6_ADDR_NB; locaddr++) { /* Only preferred global (not link-local) addresses */ if(locaddr->isused && locaddr->state == ADDR_PREFERRED && - !uip_is_addr_link_local(&locaddr->ipaddr)) { + !uip_is_addr_linklocal(&locaddr->ipaddr)) { n = get_match_length(dst, &locaddr->ipaddr); if(n >= best) { best = n; @@ -608,7 +614,7 @@ uip_ds6_dad(uip_ds6_addr_t *addr) int uip_ds6_dad_failed(uip_ds6_addr_t *addr) { - if(uip_is_addr_link_local(&addr->ipaddr)) { + if(uip_is_addr_linklocal(&addr->ipaddr)) { PRINTF("Contiki shutdown, DAD for link local address failed\n"); return 0; } diff --git a/core/net/ipv6/uip-ds6.h b/core/net/ipv6/uip-ds6.h index 9c470a1db..b111d0f5b 100644 --- a/core/net/ipv6/uip-ds6.h +++ b/core/net/ipv6/uip-ds6.h @@ -216,9 +216,15 @@ typedef struct uip_ds6_netif { uint32_t reachable_time; /* in msec */ uint32_t retrans_timer; /* in msec */ uint8_t maxdadns; +#if UIP_DS6_ADDR_NB uip_ds6_addr_t addr_list[UIP_DS6_ADDR_NB]; +#endif /* UIP_DS6_ADDR_NB */ +#if UIP_DS6_AADDR_NB uip_ds6_aaddr_t aaddr_list[UIP_DS6_AADDR_NB]; +#endif /* UIP_DS6_AADDR_NB */ +#if UIP_DS6_MADDR_NB uip_ds6_maddr_t maddr_list[UIP_DS6_MADDR_NB]; +#endif /* UIP_DS6_MADDR_NB */ } uip_ds6_netif_t; /** \brief Generic type for a DS6, to use a common loop though all DS */ diff --git a/core/net/ipv6/uip-nd6.c b/core/net/ipv6/uip-nd6.c index a86de7021..1b966027a 100644 --- a/core/net/ipv6/uip-nd6.c +++ b/core/net/ipv6/uip-nd6.c @@ -132,6 +132,16 @@ static uip_ipaddr_t ipaddr; static uip_ds6_prefix_t *prefix; /** Pointer to a prefix list entry */ #endif +#if UIP_ND6_SEND_NA || UIP_ND6_SEND_RA || !UIP_CONF_ROUTER +/*------------------------------------------------------------------*/ +/* Copy link-layer address from LLAO option to a word-aligned uip_lladdr_t */ +static void +extract_lladdr_aligned(uip_lladdr_t *dest) { + if(dest != NULL && nd6_opt_llao != NULL) { + memcpy(dest, &nd6_opt_llao[UIP_ND6_OPT_DATA_OFFSET], UIP_LLADDR_LEN); + } +} +#endif /* UIP_ND6_SEND_NA || UIP_ND6_SEND_RA || !UIP_CONF_ROUTER */ /*------------------------------------------------------------------*/ /* create a llao */ static void @@ -191,15 +201,14 @@ ns_input(void) #endif /*UIP_CONF_IPV6_CHECKS */ nbr = uip_ds6_nbr_lookup(&UIP_IP_BUF->srcipaddr); if(nbr == NULL) { - uip_ds6_nbr_add(&UIP_IP_BUF->srcipaddr, - (uip_lladdr_t *)&nd6_opt_llao[UIP_ND6_OPT_DATA_OFFSET], - 0, NBR_STALE); + uip_lladdr_t lladdr_aligned; + extract_lladdr_aligned(&lladdr_aligned); + uip_ds6_nbr_add(&UIP_IP_BUF->srcipaddr, &lladdr_aligned, 0, NBR_STALE); } else { uip_lladdr_t *lladdr = (uip_lladdr_t *)uip_ds6_nbr_get_ll(nbr); if(memcmp(&nd6_opt_llao[UIP_ND6_OPT_DATA_OFFSET], - lladdr, UIP_LLADDR_LEN) != 0) { - memcpy(lladdr, &nd6_opt_llao[UIP_ND6_OPT_DATA_OFFSET], - UIP_LLADDR_LEN); + lladdr, UIP_LLADDR_LEN) != 0) { + memcpy(lladdr, &nd6_opt_llao[UIP_ND6_OPT_DATA_OFFSET], UIP_LLADDR_LEN); nbr->state = NBR_STALE; } else { if(nbr->state == NBR_INCOMPLETE) { @@ -621,18 +630,18 @@ rs_input(void) goto discard; } else { #endif /*UIP_CONF_IPV6_CHECKS */ + uip_lladdr_t lladdr_aligned; + extract_lladdr_aligned(&lladdr_aligned); if((nbr = uip_ds6_nbr_lookup(&UIP_IP_BUF->srcipaddr)) == NULL) { /* we need to add the neighbor */ - uip_ds6_nbr_add(&UIP_IP_BUF->srcipaddr, - (uip_lladdr_t *)&nd6_opt_llao[UIP_ND6_OPT_DATA_OFFSET], 0, NBR_STALE); + uip_ds6_nbr_add(&UIP_IP_BUF->srcipaddr, &lladdr_aligned, 0, NBR_STALE); } else { /* If LL address changed, set neighbor state to stale */ if(memcmp(&nd6_opt_llao[UIP_ND6_OPT_DATA_OFFSET], uip_ds6_nbr_get_ll(nbr), UIP_LLADDR_LEN) != 0) { uip_ds6_nbr_t nbr_data = *nbr; uip_ds6_nbr_rm(nbr); - nbr = uip_ds6_nbr_add(&UIP_IP_BUF->srcipaddr, - (uip_lladdr_t *)&nd6_opt_llao[UIP_ND6_OPT_DATA_OFFSET], 0, NBR_STALE); + nbr = uip_ds6_nbr_add(&UIP_IP_BUF->srcipaddr, &lladdr_aligned, 0, NBR_STALE); nbr->reachable = nbr_data.reachable; nbr->sendns = nbr_data.sendns; nbr->nscount = nbr_data.nscount; @@ -823,7 +832,7 @@ ra_input(void) #if UIP_CONF_IPV6_CHECKS if((UIP_IP_BUF->ttl != UIP_ND6_HOP_LIMIT) || - (!uip_is_addr_link_local(&UIP_IP_BUF->srcipaddr)) || + (!uip_is_addr_linklocal(&UIP_IP_BUF->srcipaddr)) || (UIP_ICMP_BUF->icode != 0)) { PRINTF("RA received is bad"); goto discard; @@ -859,9 +868,9 @@ ra_input(void) nd6_opt_llao = (uint8_t *) UIP_ND6_OPT_HDR_BUF; nbr = uip_ds6_nbr_lookup(&UIP_IP_BUF->srcipaddr); if(nbr == NULL) { - nbr = uip_ds6_nbr_add(&UIP_IP_BUF->srcipaddr, - (uip_lladdr_t *)&nd6_opt_llao[UIP_ND6_OPT_DATA_OFFSET], - 1, NBR_STALE); + uip_lladdr_t lladdr_aligned; + extract_lladdr_aligned(&lladdr_aligned); + nbr = uip_ds6_nbr_add(&UIP_IP_BUF->srcipaddr, &lladdr_aligned, 1, NBR_STALE); } else { uip_lladdr_t *lladdr = (uip_lladdr_t *)uip_ds6_nbr_get_ll(nbr); if(nbr->state == NBR_INCOMPLETE) { @@ -886,7 +895,7 @@ ra_input(void) nd6_opt_prefix_info = (uip_nd6_opt_prefix_info *) UIP_ND6_OPT_HDR_BUF; if((uip_ntohl(nd6_opt_prefix_info->validlt) >= uip_ntohl(nd6_opt_prefix_info->preferredlt)) - && (!uip_is_addr_link_local(&nd6_opt_prefix_info->prefix))) { + && (!uip_is_addr_linklocal(&nd6_opt_prefix_info->prefix))) { /* on-link flag related processing */ if(nd6_opt_prefix_info->flagsreserved1 & UIP_ND6_RA_FLAG_ONLINK) { prefix = diff --git a/core/net/ipv6/uip6.c b/core/net/ipv6/uip6.c index 416edf813..63858017c 100644 --- a/core/net/ipv6/uip6.c +++ b/core/net/ipv6/uip6.c @@ -288,7 +288,10 @@ struct uip_icmp6_conn uip_icmp6_conns; /*---------------------------------------------------------------------------*/ /* Functions */ /*---------------------------------------------------------------------------*/ -#if (!UIP_ARCH_ADD32 && UIP_TCP) +#if UIP_TCP +#if UIP_ARCH_ADD32 +void uip_add32(uint8_t *op32, uint16_t op16); +#else /* UIP_ARCH_ADD32 */ void uip_add32(uint8_t *op32, uint16_t op16) { @@ -315,8 +318,8 @@ uip_add32(uint8_t *op32, uint16_t op16) } } } - -#endif /* UIP_ARCH_ADD32 && UIP_TCP */ +#endif /* UIP_ARCH_ADD32 */ +#endif /* UIP_TCP */ #if ! UIP_ARCH_CHKSUM /*---------------------------------------------------------------------------*/ @@ -1203,8 +1206,8 @@ uip_process(uint8_t flag) if(!uip_ds6_is_my_addr(&UIP_IP_BUF->destipaddr) && !uip_ds6_is_my_maddr(&UIP_IP_BUF->destipaddr)) { if(!uip_is_addr_mcast(&UIP_IP_BUF->destipaddr) && - !uip_is_addr_link_local(&UIP_IP_BUF->destipaddr) && - !uip_is_addr_link_local(&UIP_IP_BUF->srcipaddr) && + !uip_is_addr_linklocal(&UIP_IP_BUF->destipaddr) && + !uip_is_addr_linklocal(&UIP_IP_BUF->srcipaddr) && !uip_is_addr_unspecified(&UIP_IP_BUF->srcipaddr) && !uip_is_addr_loopback(&UIP_IP_BUF->destipaddr)) { @@ -1238,7 +1241,7 @@ uip_process(uint8_t flag) UIP_STAT(++uip_stat.ip.forwarded); goto send; } else { - if((uip_is_addr_link_local(&UIP_IP_BUF->srcipaddr)) && + if((uip_is_addr_linklocal(&UIP_IP_BUF->srcipaddr)) && (!uip_is_addr_unspecified(&UIP_IP_BUF->srcipaddr)) && (!uip_is_addr_loopback(&UIP_IP_BUF->destipaddr)) && (!uip_is_addr_mcast(&UIP_IP_BUF->destipaddr)) && @@ -1745,10 +1748,10 @@ uip_process(uint8_t flag) uip_connr->len = 1; /* rcv_nxt should be the seqno from the incoming packet + 1. */ - uip_connr->rcv_nxt[3] = UIP_TCP_BUF->seqno[3]; - uip_connr->rcv_nxt[2] = UIP_TCP_BUF->seqno[2]; - uip_connr->rcv_nxt[1] = UIP_TCP_BUF->seqno[1]; uip_connr->rcv_nxt[0] = UIP_TCP_BUF->seqno[0]; + uip_connr->rcv_nxt[1] = UIP_TCP_BUF->seqno[1]; + uip_connr->rcv_nxt[2] = UIP_TCP_BUF->seqno[2]; + uip_connr->rcv_nxt[3] = UIP_TCP_BUF->seqno[3]; uip_add_rcv_nxt(1); /* Parse the TCP MSS option, if present. */ diff --git a/core/net/llsec/anti-replay.c b/core/net/llsec/anti-replay.c index c56d90e0b..7c392bff7 100644 --- a/core/net/llsec/anti-replay.c +++ b/core/net/llsec/anti-replay.c @@ -55,7 +55,8 @@ anti_replay_set_counter(void) { frame802154_frame_counter_t reordered_counter; - reordered_counter.u32 = LLSEC802154_HTONL(++counter); + ++counter; + reordered_counter.u32 = LLSEC802154_HTONL(counter); packetbuf_set_attr(PACKETBUF_ATTR_FRAME_COUNTER_BYTES_0_1, reordered_counter.u16[0]); packetbuf_set_attr(PACKETBUF_ATTR_FRAME_COUNTER_BYTES_2_3, reordered_counter.u16[1]); diff --git a/core/net/llsec/ccm-star-packetbuf.c b/core/net/llsec/ccm-star-packetbuf.c index 08087398e..61e681b1c 100644 --- a/core/net/llsec/ccm-star-packetbuf.c +++ b/core/net/llsec/ccm-star-packetbuf.c @@ -1,52 +1,78 @@ +/* + * Copyright (c) 2013, Hasso-Plattner-Institut. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the Contiki operating system. + * + */ + /** * \file * CCM* convenience functions for LLSEC use * \author * Justin King-Lacroix + * Konrad Krentz */ -#include "lib/ccm-star.h" +#include "llsec/ccm-star-packetbuf.h" +#include "net/linkaddr.h" #include "net/packetbuf.h" #include /*---------------------------------------------------------------------------*/ -void ccm_star_mic_packetbuf(const uint8_t *extended_source_address, - uint8_t *result, - uint8_t mic_len) +static const uint8_t * +get_extended_address(const linkaddr_t *addr) +#if LINKADDR_SIZE == 2 { - uint8_t *dataptr = packetbuf_dataptr(); - uint8_t data_len = packetbuf_datalen(); - uint8_t *headerptr = packetbuf_hdrptr(); - uint8_t header_len = packetbuf_hdrlen(); - uint8_t nonce[CCM_STAR_NONCE_LENGTH]; + /* workaround for short addresses: derive EUI64 as in RFC 6282 */ + static linkaddr_extended_t template = { { 0x00 , 0x00 , 0x00 , + 0xFF , 0xFE , 0x00 , 0x00 , 0x00 } }; - memcpy(nonce, extended_source_address, 8); + template.u16[3] = LLSEC802154_HTONS(addr->u16); + + return template.u8; +} +#else /* LINKADDR_SIZE == 2 */ +{ + return addr->u8; +} +#endif /* LINKADDR_SIZE == 2 */ +/*---------------------------------------------------------------------------*/ +void +ccm_star_packetbuf_set_nonce(uint8_t *nonce, int forward) +{ + const linkaddr_t *source_addr; + + source_addr = forward ? &linkaddr_node_addr : packetbuf_addr(PACKETBUF_ADDR_SENDER); + memcpy(nonce, get_extended_address(source_addr), 8); nonce[8] = packetbuf_attr(PACKETBUF_ATTR_FRAME_COUNTER_BYTES_2_3) >> 8; nonce[9] = packetbuf_attr(PACKETBUF_ATTR_FRAME_COUNTER_BYTES_2_3) & 0xff; nonce[10] = packetbuf_attr(PACKETBUF_ATTR_FRAME_COUNTER_BYTES_0_1) >> 8; nonce[11] = packetbuf_attr(PACKETBUF_ATTR_FRAME_COUNTER_BYTES_0_1) & 0xff; nonce[12] = packetbuf_attr(PACKETBUF_ATTR_SECURITY_LEVEL); - - if(packetbuf_attr(PACKETBUF_ATTR_SECURITY_LEVEL) & (1 << 2)) { - CCM_STAR.mic(dataptr, data_len, nonce, headerptr, header_len, result, mic_len); - } else { - CCM_STAR.mic(dataptr, 0, nonce, headerptr, packetbuf_totlen(), result, mic_len); - } -} -/*---------------------------------------------------------------------------*/ -void ccm_star_ctr_packetbuf(const uint8_t *extended_source_address) -{ - uint8_t *dataptr = packetbuf_dataptr(); - uint8_t data_len = packetbuf_datalen(); - uint8_t nonce[CCM_STAR_NONCE_LENGTH]; - - memcpy(nonce, extended_source_address, 8); - nonce[8] = packetbuf_attr(PACKETBUF_ATTR_FRAME_COUNTER_BYTES_2_3) >> 8; - nonce[9] = packetbuf_attr(PACKETBUF_ATTR_FRAME_COUNTER_BYTES_2_3) & 0xff; - nonce[10] = packetbuf_attr(PACKETBUF_ATTR_FRAME_COUNTER_BYTES_0_1) >> 8; - nonce[11] = packetbuf_attr(PACKETBUF_ATTR_FRAME_COUNTER_BYTES_0_1) & 0xff; - nonce[12] = packetbuf_attr(PACKETBUF_ATTR_SECURITY_LEVEL); - - CCM_STAR.ctr(dataptr, data_len, nonce); } /*---------------------------------------------------------------------------*/ diff --git a/core/net/llsec/ccm-star-packetbuf.h b/core/net/llsec/ccm-star-packetbuf.h index 3b6c43472..dcbe6c4db 100644 --- a/core/net/llsec/ccm-star-packetbuf.h +++ b/core/net/llsec/ccm-star-packetbuf.h @@ -1,24 +1,48 @@ +/* + * Copyright (c) 2013, Hasso-Plattner-Institut. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the Contiki operating system. + * + */ + /** * \file * CCM* convenience functions for MAC security * \author * Justin King-Lacroix + * Konrad Krentz */ #ifndef CCM_STAR_PACKETBUF_H_ #define CCM_STAR_PACKETBUF_H_ -/** - * \brief Calls CCM_STAR.mic with parameters appropriate for LLSEC. - */ -void ccm_star_mic_packetbuf(const uint8_t *extended_source_address, - uint8_t *result, - uint8_t mic_len); +#include "lib/ccm-star.h" -/** - * \brief Calls CCM_STAR.ctr with parameters appropriate for LLSEC. - */ -void ccm_star_ctr_packetbuf(const uint8_t *extended_source_address); +void ccm_star_packetbuf_set_nonce(uint8_t *nonce, int forward); #endif /* CCM_STAR_PACKETBUF_H_ */ - diff --git a/core/net/llsec/llsec.h b/core/net/llsec/llsec.h index 7b3c8a1b2..b0d983cc3 100644 --- a/core/net/llsec/llsec.h +++ b/core/net/llsec/llsec.h @@ -48,10 +48,6 @@ * for incoming packets. Likewise, all NETSTACK_NETWORK protocols * invoke NETSTACK_LLSEC.send(...) for outgoing packets. * - * The bootstrap function of llsec_drivers can be used to defer the start - * of upper layers so as to bootstrap pairwise keys. Only contiki-sky-main.c - * supports this at the moment. - * * @{ */ @@ -60,35 +56,23 @@ #include "net/mac/mac.h" -typedef void (* llsec_on_bootstrapped_t)(void); - /** * The structure of a link layer security driver. */ struct llsec_driver { char *name; - /** Bootstraps link layer security and thereafter starts upper layers. */ - void (* bootstrap)(llsec_on_bootstrapped_t on_bootstrapped); + /** Inits link layer security. */ + void (* init)(void); /** Secures outgoing frames before passing them to NETSTACK_MAC. */ void (* send)(mac_callback_t sent_callback, void *ptr); - /** - * Once the NETSTACK_FRAMER wrote the headers, the LLSEC driver - * can generate a MIC over the entire frame. - * \return Returns != 0 <-> success - */ - int (* on_frame_created)(void); - /** * Decrypts incoming frames; * filters out injected or replayed frames. */ void (* input)(void); - - /** Returns the security-related overhead per frame in bytes */ - uint8_t (* get_overhead)(void); }; #endif /* LLSEC_H_ */ diff --git a/core/net/llsec/noncoresec/noncoresec.c b/core/net/llsec/noncoresec/noncoresec.c index e62ad2725..e18a7d734 100644 --- a/core/net/llsec/noncoresec/noncoresec.c +++ b/core/net/llsec/noncoresec/noncoresec.c @@ -47,6 +47,7 @@ #include "net/llsec/llsec802154.h" #include "net/llsec/ccm-star-packetbuf.h" #include "net/mac/frame802154.h" +#include "net/mac/framer-802154.h" #include "net/netstack.h" #include "net/packetbuf.h" #include "net/nbr-table.h" @@ -80,81 +81,109 @@ static uint8_t key[16] = NONCORESEC_KEY; NBR_TABLE(struct anti_replay_info, anti_replay_table); /*---------------------------------------------------------------------------*/ -static const uint8_t * -get_extended_address(const linkaddr_t *addr) -#if LINKADDR_SIZE == 2 +static int +aead(uint8_t hdrlen, int forward) { - /* workaround for short addresses: derive EUI64 as in RFC 6282 */ - static linkaddr_extended_t template = { { 0x00 , 0x00 , 0x00 , - 0xFF , 0xFE , 0x00 , 0x00 , 0x00 } }; + uint8_t totlen; + uint8_t nonce[CCM_STAR_NONCE_LENGTH]; + uint8_t *m; + uint8_t m_len; + uint8_t *a; + uint8_t a_len; + uint8_t *result; + uint8_t generated_mic[LLSEC802154_MIC_LENGTH]; + uint8_t *mic; - template.u16[3] = LLSEC802154_HTONS(addr->u16); + ccm_star_packetbuf_set_nonce(nonce, forward); + totlen = packetbuf_totlen(); + a = packetbuf_hdrptr(); +#if WITH_ENCRYPTION + a_len = hdrlen; + m = a + a_len; + m_len = totlen - hdrlen; +#else /* WITH_ENCRYPTION */ + a_len = totlen; + m = NULL; + m_len = 0; +#endif /* WITH_ENCRYPTION */ - return template.u8; + mic = a + totlen; + result = forward ? mic : generated_mic; + + CCM_STAR.aead(nonce, + m, m_len, + a, a_len, + result, LLSEC802154_MIC_LENGTH, + forward); + + if(forward) { + packetbuf_set_datalen(packetbuf_datalen() + LLSEC802154_MIC_LENGTH); + return 1; + } else { + return (memcmp(generated_mic, mic, LLSEC802154_MIC_LENGTH) == 0); + } } -#else /* LINKADDR_SIZE == 2 */ +/*---------------------------------------------------------------------------*/ +static void +add_security_header(void) { - return addr->u8; + if(!packetbuf_attr(PACKETBUF_ATTR_SECURITY_LEVEL)) { + packetbuf_set_attr(PACKETBUF_ATTR_FRAME_TYPE, FRAME802154_DATAFRAME); + packetbuf_set_attr(PACKETBUF_ATTR_SECURITY_LEVEL, LLSEC802154_SECURITY_LEVEL); + anti_replay_set_counter(); + } } -#endif /* LINKADDR_SIZE == 2 */ /*---------------------------------------------------------------------------*/ static void send(mac_callback_t sent, void *ptr) { - packetbuf_set_attr(PACKETBUF_ATTR_FRAME_TYPE, FRAME802154_DATAFRAME); - packetbuf_set_attr(PACKETBUF_ATTR_SECURITY_LEVEL, LLSEC802154_SECURITY_LEVEL); - anti_replay_set_counter(); NETSTACK_MAC.send(sent, ptr); } /*---------------------------------------------------------------------------*/ static int -on_frame_created(void) +create(void) { - uint8_t *dataptr = packetbuf_dataptr(); - uint8_t data_len = packetbuf_datalen(); - - ccm_star_mic_packetbuf(get_extended_address(&linkaddr_node_addr), dataptr + data_len, LLSEC802154_MIC_LENGTH); -#if WITH_ENCRYPTION - ccm_star_ctr_packetbuf(get_extended_address(&linkaddr_node_addr)); -#endif /* WITH_ENCRYPTION */ - packetbuf_set_datalen(data_len + LLSEC802154_MIC_LENGTH); + int result; - return 1; + add_security_header(); + result = framer_802154.create(); + if(result == FRAMER_FAILED) { + return result; + } + + aead(result, 1); + + return result; } /*---------------------------------------------------------------------------*/ -static void -input(void) +static int +parse(void) { - uint8_t generated_mic[LLSEC802154_MIC_LENGTH]; - uint8_t *received_mic; + int result; const linkaddr_t *sender; struct anti_replay_info* info; - uint8_t *dataptr = packetbuf_dataptr(); - uint8_t data_len = packetbuf_datalen(); + + result = framer_802154.parse(); + if(result == FRAMER_FAILED) { + return result; + } if(packetbuf_attr(PACKETBUF_ATTR_SECURITY_LEVEL) != LLSEC802154_SECURITY_LEVEL) { PRINTF("noncoresec: received frame with wrong security level\n"); - return; + return FRAMER_FAILED; } sender = packetbuf_addr(PACKETBUF_ADDR_SENDER); if(linkaddr_cmp(sender, &linkaddr_node_addr)) { PRINTF("noncoresec: frame from ourselves\n"); - return; + return FRAMER_FAILED; } - data_len -= LLSEC802154_MIC_LENGTH; - packetbuf_set_datalen(data_len); + packetbuf_set_datalen(packetbuf_datalen() - LLSEC802154_MIC_LENGTH); -#if WITH_ENCRYPTION - ccm_star_ctr_packetbuf(get_extended_address(sender)); -#endif /* WITH_ENCRYPTION */ - ccm_star_mic_packetbuf(get_extended_address(sender), generated_mic, LLSEC802154_MIC_LENGTH); - - received_mic = dataptr + data_len; - if(memcmp(generated_mic, received_mic, LLSEC802154_MIC_LENGTH) != 0) { - PRINTF("noncoresec: received nonauthentic frame %"PRIu32"\n", + if(!aead(result, 0)) { + PRINTF("noncoresec: received unauthentic frame %"PRIu32"\n", anti_replay_get_counter()); - return; + return FRAMER_FAILED; } info = nbr_table_get_from_lladdr(anti_replay_table, sender); @@ -162,7 +191,7 @@ input(void) info = nbr_table_add_lladdr(anti_replay_table, sender); if(!info) { PRINTF("noncoresec: could not get nbr_table_item\n"); - return; + return FRAMER_FAILED; } /* @@ -179,7 +208,7 @@ input(void) if(!nbr_table_lock(anti_replay_table, info)) { nbr_table_remove(anti_replay_table, info); PRINTF("noncoresec: could not lock\n"); - return; + return FRAMER_FAILED; } anti_replay_init_info(info); @@ -187,34 +216,44 @@ input(void) if(anti_replay_was_replayed(info)) { PRINTF("noncoresec: received replayed frame %"PRIu32"\n", anti_replay_get_counter()); - return; + return FRAMER_FAILED; } } - NETSTACK_NETWORK.input(); -} -/*---------------------------------------------------------------------------*/ -static uint8_t -get_overhead(void) -{ - return SECURITY_HEADER_LENGTH + LLSEC802154_MIC_LENGTH; + return result; } /*---------------------------------------------------------------------------*/ static void -bootstrap(llsec_on_bootstrapped_t on_bootstrapped) +input(void) +{ + NETSTACK_NETWORK.input(); +} +/*---------------------------------------------------------------------------*/ +static int +length(void) +{ + add_security_header(); + return framer_802154.length() + LLSEC802154_MIC_LENGTH; +} +/*---------------------------------------------------------------------------*/ +static void +init(void) { CCM_STAR.set_key(key); nbr_table_register(anti_replay_table, NULL); - on_bootstrapped(); } /*---------------------------------------------------------------------------*/ const struct llsec_driver noncoresec_driver = { "noncoresec", - bootstrap, + init, send, - on_frame_created, - input, - get_overhead + input +}; +/*---------------------------------------------------------------------------*/ +const struct framer noncoresec_framer = { + length, + create, + parse }; /*---------------------------------------------------------------------------*/ diff --git a/core/net/llsec/noncoresec/noncoresec.h b/core/net/llsec/noncoresec/noncoresec.h index 1e2172590..c5fe3d43f 100644 --- a/core/net/llsec/noncoresec/noncoresec.h +++ b/core/net/llsec/noncoresec/noncoresec.h @@ -56,6 +56,7 @@ #include "net/llsec/llsec.h" extern const struct llsec_driver noncoresec_driver; +extern const struct framer noncoresec_framer; #endif /* NONCORESEC_H_ */ diff --git a/core/net/llsec/nullsec.c b/core/net/llsec/nullsec.c index f419cd7f7..e4bd4ca2d 100644 --- a/core/net/llsec/nullsec.c +++ b/core/net/llsec/nullsec.c @@ -49,9 +49,9 @@ /*---------------------------------------------------------------------------*/ static void -bootstrap(llsec_on_bootstrapped_t on_bootstrapped) +init(void) { - on_bootstrapped(); + } /*---------------------------------------------------------------------------*/ static void @@ -61,31 +61,17 @@ send(mac_callback_t sent, void *ptr) NETSTACK_MAC.send(sent, ptr); } /*---------------------------------------------------------------------------*/ -static int -on_frame_created(void) -{ - return 1; -} -/*---------------------------------------------------------------------------*/ static void input(void) { NETSTACK_NETWORK.input(); } /*---------------------------------------------------------------------------*/ -static uint8_t -get_overhead(void) -{ - return 0; -} -/*---------------------------------------------------------------------------*/ const struct llsec_driver nullsec_driver = { "nullsec", - bootstrap, + init, send, - on_frame_created, - input, - get_overhead + input }; /*---------------------------------------------------------------------------*/ diff --git a/core/net/mac/contikimac/contikimac-framer.c b/core/net/mac/contikimac/contikimac-framer.c index 0a47866f9..b25aa2e45 100644 --- a/core/net/mac/contikimac/contikimac-framer.c +++ b/core/net/mac/contikimac/contikimac-framer.c @@ -73,6 +73,8 @@ extern const struct framer DECORATED_FRAMER; #define PRINTF(...) #endif +static void pad(void); + /* 2-byte header for recovering padded packets. Wireshark will not understand such packets at present. */ struct hdr { @@ -99,7 +101,8 @@ create(void) } chdr = packetbuf_hdrptr(); chdr->id = CONTIKIMAC_ID; - chdr->len = 0; + chdr->len = packetbuf_datalen(); + pad(); hdr_len = DECORATED_FRAMER.create(); if(hdr_len < 0) { @@ -107,6 +110,8 @@ create(void) return FRAMER_FAILED; } + packetbuf_compact(); + return hdr_len + sizeof(struct hdr); } /*---------------------------------------------------------------------------*/ @@ -117,7 +122,7 @@ pad(void) uint8_t *ptr; uint8_t zeroes_count; - transmit_len = packetbuf_totlen(); + transmit_len = packetbuf_totlen() + hdr_length(); if(transmit_len < SHORTEST_PACKET_SIZE) { /* Padding required */ zeroes_count = SHORTEST_PACKET_SIZE - transmit_len; @@ -128,30 +133,6 @@ pad(void) } /*---------------------------------------------------------------------------*/ static int -create_and_secure(void) -{ - struct hdr *chdr; - int hdr_len; - - hdr_len = create(); - if(hdr_len < 0) { - return FRAMER_FAILED; - } - - packetbuf_compact(); - if(!NETSTACK_LLSEC.on_frame_created()) { - PRINTF("contikimac-framer: securing failed\n"); - return FRAMER_FAILED; - } - - chdr = (struct hdr *)(((uint8_t *) packetbuf_dataptr()) - sizeof(struct hdr)); - chdr->len = packetbuf_datalen(); - pad(); - - return hdr_len; -} -/*---------------------------------------------------------------------------*/ -static int parse(void) { int hdr_len; @@ -174,7 +155,6 @@ parse(void) } packetbuf_set_datalen(chdr->len); - chdr->len = 0; return hdr_len + sizeof(struct hdr); } @@ -182,7 +162,6 @@ parse(void) const struct framer contikimac_framer = { hdr_length, create, - create_and_secure, parse }; /*---------------------------------------------------------------------------*/ diff --git a/core/net/mac/contikimac/contikimac.c b/core/net/mac/contikimac/contikimac.c index 3d1f6a277..549d690bc 100644 --- a/core/net/mac/contikimac/contikimac.c +++ b/core/net/mac/contikimac/contikimac.c @@ -507,14 +507,16 @@ send_packet(mac_callback_t mac_callback, void *mac_callback_ptr, #endif int strobes; uint8_t got_strobe_ack = 0; - int len; uint8_t is_broadcast = 0; uint8_t is_known_receiver = 0; uint8_t collisions; int transmit_len; int ret; uint8_t contikimac_was_on; +#if !RDC_CONF_HARDWARE_ACK + int len; uint8_t seqno; +#endif /* Exit if RDC and radio were explicitly turned off */ if(!contikimac_is_on && !contikimac_keep_radio_on) { @@ -558,7 +560,7 @@ send_packet(mac_callback_t mac_callback, void *mac_callback_ptr, if(!packetbuf_attr(PACKETBUF_ATTR_IS_CREATED_AND_SECURED)) { packetbuf_set_attr(PACKETBUF_ATTR_MAC_ACK, 1); - if(NETSTACK_FRAMER.create_and_secure() < 0) { + if(NETSTACK_FRAMER.create() < 0) { PRINTF("contikimac: framer failed\n"); return MAC_TX_ERR_FATAL; } @@ -655,11 +657,11 @@ send_packet(mac_callback_t mac_callback, void *mac_callback_ptr, or rx cycle */ on(); } + seqno = packetbuf_attr(PACKETBUF_ATTR_MAC_SEQNO); #endif watchdog_periodic(); t0 = RTIMER_NOW(); - seqno = packetbuf_attr(PACKETBUF_ATTR_MAC_SEQNO); for(strobes = 0, collisions = 0; got_strobe_ack == 0 && collisions == 0 && RTIMER_CLOCK_LT(RTIMER_NOW(), t0 + STROBE_TIME); strobes++) { @@ -672,7 +674,9 @@ send_packet(mac_callback_t mac_callback, void *mac_callback_ptr, break; } +#if !RDC_CONF_HARDWARE_ACK len = 0; +#endif { rtimer_clock_t wt; @@ -801,6 +805,7 @@ qsend_list(mac_callback_t sent, void *ptr, struct rdc_buf_list *buf_list) struct rdc_buf_list *next; int ret; int is_receiver_awake; + int pending; if(buf_list == NULL) { return; @@ -825,7 +830,7 @@ qsend_list(mac_callback_t sent, void *ptr, struct rdc_buf_list *buf_list) packetbuf_set_attr(PACKETBUF_ATTR_PENDING, 1); } packetbuf_set_attr(PACKETBUF_ATTR_MAC_ACK, 1); - if(NETSTACK_FRAMER.create_and_secure() < 0) { + if(NETSTACK_FRAMER.create() < 0) { PRINTF("contikimac: framer failed\n"); mac_call_sent_callback(sent, ptr, MAC_TX_ERR_FATAL, 1); return; @@ -845,7 +850,9 @@ qsend_list(mac_callback_t sent, void *ptr, struct rdc_buf_list *buf_list) /* Prepare the packetbuf */ queuebuf_to_packetbuf(curr->buf); - + + pending = packetbuf_attr(PACKETBUF_ATTR_PENDING); + /* Send the current packet */ ret = send_packet(sent, ptr, curr, is_receiver_awake); if(ret != MAC_TX_DEFERRED) { @@ -862,7 +869,7 @@ qsend_list(mac_callback_t sent, void *ptr, struct rdc_buf_list *buf_list) /* The transmission failed, we stop the burst */ next = NULL; } - } while((next != NULL) && packetbuf_attr(PACKETBUF_ATTR_PENDING)); + } while((next != NULL) && pending); } /*---------------------------------------------------------------------------*/ /* Timer callback triggered when receiving a burst, after having @@ -911,8 +918,6 @@ input_packet(void) broadcast address. */ /* If FRAME_PENDING is set, we are receiving a packets in a burst */ - /* TODO To prevent denial-of-sleep attacks, the transceiver should - be disabled upon receipt of an unauthentic frame. */ we_are_receiving_burst = packetbuf_attr(PACKETBUF_ATTR_PENDING); if(we_are_receiving_burst) { on(); diff --git a/core/net/mac/csma.c b/core/net/mac/csma.c index ab6fec726..4de46be19 100644 --- a/core/net/mac/csma.c +++ b/core/net/mac/csma.c @@ -171,8 +171,10 @@ transmit_packet_list(void *ptr) } /*---------------------------------------------------------------------------*/ static void -free_packet(struct neighbor_queue *n, struct rdc_buf_list *p) +free_packet(struct neighbor_queue *n, struct rdc_buf_list *p, int status) { + clock_time_t tx_delay; + if(p != NULL) { /* Remove packet from list and deallocate */ list_remove(n->queued_packet_list, p); @@ -188,8 +190,8 @@ free_packet(struct neighbor_queue *n, struct rdc_buf_list *p) n->collisions = 0; n->deferrals = 0; /* Set a timer for next transmissions */ - ctimer_set(&n->transmit_timer, default_timebase(), - transmit_packet_list, n); + tx_delay = (status == MAC_TX_OK) ? 0 : default_timebase(); + ctimer_set(&n->transmit_timer, tx_delay, transmit_packet_list, n); } else { /* This was the last packet in the queue, we free the neighbor */ ctimer_stop(&n->transmit_timer); @@ -293,7 +295,7 @@ packet_sent(void *ptr, int status, int num_transmissions) } else { PRINTF("csma: drop with status %d after %d transmissions, %d collisions\n", status, n->transmissions, n->collisions); - free_packet(n, q); + free_packet(n, q, status); mac_call_sent_callback(sent, cptr, status, num_tx); } } else { @@ -302,7 +304,7 @@ packet_sent(void *ptr, int status, int num_transmissions) } else { PRINTF("csma: rexmit failed %d: %d\n", n->transmissions, status); } - free_packet(n, q); + free_packet(n, q, status); mac_call_sent_callback(sent, cptr, status, num_tx); } } else { diff --git a/core/net/mac/framer-802154.c b/core/net/mac/framer-802154.c index 987d142ba..ce96f6239 100644 --- a/core/net/mac/framer-802154.c +++ b/core/net/mac/framer-802154.c @@ -273,7 +273,6 @@ parse(void) const struct framer framer_802154 = { hdr_length, create, - framer_canonical_create_and_secure, parse }; /*---------------------------------------------------------------------------*/ diff --git a/core/net/mac/framer-nullmac.c b/core/net/mac/framer-nullmac.c index 6d53e3f8d..cc79051f1 100644 --- a/core/net/mac/framer-nullmac.c +++ b/core/net/mac/framer-nullmac.c @@ -99,6 +99,5 @@ parse(void) const struct framer framer_nullmac = { hdr_length, create, - framer_canonical_create_and_secure, parse }; diff --git a/core/net/mac/framer.h b/core/net/mac/framer.h index ce99aad1f..5ed419292 100644 --- a/core/net/mac/framer.h +++ b/core/net/mac/framer.h @@ -47,13 +47,8 @@ struct framer { int (* length)(void); int (* create)(void); - - /** Creates the frame and calls LLSEC.on_frame_created() */ - int (* create_and_secure)(void); int (* parse)(void); }; -int framer_canonical_create_and_secure(void); - #endif /* FRAMER_H_ */ diff --git a/core/net/mac/nullrdc.c b/core/net/mac/nullrdc.c index 111211a2b..5cec23a3d 100644 --- a/core/net/mac/nullrdc.c +++ b/core/net/mac/nullrdc.c @@ -48,6 +48,7 @@ #if CONTIKI_TARGET_COOJA #include "lib/simEnvChange.h" +#include "sys/cooja_mt.h" #endif /* CONTIKI_TARGET_COOJA */ #define DEBUG 0 @@ -120,7 +121,7 @@ send_one_packet(mac_callback_t sent, void *ptr) packetbuf_set_attr(PACKETBUF_ATTR_MAC_ACK, 1); #endif /* NULLRDC_802154_AUTOACK || NULLRDC_802154_AUTOACK_HW */ - if(NETSTACK_FRAMER.create_and_secure() < 0) { + if(NETSTACK_FRAMER.create() < 0) { /* Failed to allocate space for headers */ PRINTF("nullrdc: send failed, too large header\n"); ret = MAC_TX_ERR_FATAL; @@ -302,8 +303,7 @@ packet_input(void) } #endif /* RDC_WITH_DUPLICATE_DETECTION */ #endif /* NULLRDC_802154_AUTOACK */ - -/* TODO We may want to acknowledge only authentic frames */ + #if NULLRDC_SEND_802154_ACK { frame802154_t info154; diff --git a/core/net/mac/phase.c b/core/net/mac/phase.c index ff20ae978..47b7e7cf3 100644 --- a/core/net/mac/phase.c +++ b/core/net/mac/phase.c @@ -219,6 +219,11 @@ phase_wait(const linkaddr_t *neighbor, rtimer_clock_t cycle_time, if(buf_list == NULL) { packetbuf_set_attr(PACKETBUF_ATTR_IS_CREATED_AND_SECURED, 1); p->q = queuebuf_new_from_packetbuf(); + if(p->q == NULL) { + /* memory allocation failed */ + memb_free(&queued_packets_memb, p); + return PHASE_UNKNOWN; + } } p->mac_callback = mac_callback; p->mac_callback_ptr = mac_callback_ptr; diff --git a/core/net/packetbuf.c b/core/net/packetbuf.c index 217f40bc2..c7e2a9898 100644 --- a/core/net/packetbuf.c +++ b/core/net/packetbuf.c @@ -141,6 +141,7 @@ packetbuf_copyto(void *to) int i; char buffer[1000]; char *bufferptr = buffer; + int bufferlen = 0; bufferptr[0] = 0; for(i = hdrptr; i < PACKETBUF_HDR_SIZE; ++i) { @@ -149,8 +150,8 @@ packetbuf_copyto(void *to) PRINTF("packetbuf_write: header: %s\n", buffer); bufferptr = buffer; bufferptr[0] = 0; - for(i = bufptr; i < buflen + bufptr; ++i) { - bufferptr += sprintf(bufferptr, "0x%02x, ", packetbufptr[i]); + for(i = bufptr; ((i < buflen + bufptr) && (bufferlen < (sizeof(buffer) - 10))); ++i) { + bufferlen += sprintf(bufferptr + bufferlen, "0x%02x, ", packetbufptr[i]); } PRINTF("packetbuf_write: data: %s\n", buffer); } diff --git a/core/net/rime/route.c b/core/net/rime/route.c index 2a51d12c6..dee9ab837 100644 --- a/core/net/rime/route.c +++ b/core/net/rime/route.c @@ -121,7 +121,7 @@ int route_add(const linkaddr_t *dest, const linkaddr_t *nexthop, uint8_t cost, uint8_t seqno) { - struct route_entry *e; + struct route_entry *e, *oldest = NULL; /* Avoid inserting duplicate entries. */ e = route_lookup(dest); @@ -131,8 +131,14 @@ route_add(const linkaddr_t *dest, const linkaddr_t *nexthop, /* Allocate a new entry or reuse the oldest entry with highest cost. */ e = memb_alloc(&route_mem); if(e == NULL) { - /* Remove oldest entry. XXX */ - e = list_chop(route_table); + /* Remove oldest entry. */ + for(e = list_head(route_table); e != NULL; e = list_item_next(e)) { + if(oldest == NULL || e->time >= oldest->time) { + oldest = e; + } + } + e = oldest; + list_remove(route_table, e); PRINTF("route_add: removing entry to %d.%d with nexthop %d.%d and cost %d\n", e->dest.u8[0], e->dest.u8[1], e->nexthop.u8[0], e->nexthop.u8[1], diff --git a/core/net/rime/stunicast.c b/core/net/rime/stunicast.c index 75b406e9a..d7e1e8231 100644 --- a/core/net/rime/stunicast.c +++ b/core/net/rime/stunicast.c @@ -112,10 +112,10 @@ send(void *ptr) PRINTF("%d.%d: stunicast: resend to %d.%d\n", linkaddr_node_addr.u8[0],linkaddr_node_addr.u8[1], c->receiver.u8[0], c->receiver.u8[1]); - if(c->buf) { - queuebuf_to_packetbuf(c->buf); - unicast_send(&c->c, &c->receiver); - stunicast_set_timer(c, CLOCK_SECOND); + if(c->buf) { + queuebuf_to_packetbuf(c->buf); + unicast_send(&c->c, &c->receiver); + ctimer_restart(&c->t); } /* if(c->u->sent != NULL) { c->u->sent(c); diff --git a/core/net/rpl/rpl-conf.h b/core/net/rpl/rpl-conf.h index 69199f9ac..f4b2a14fe 100644 --- a/core/net/rpl/rpl-conf.h +++ b/core/net/rpl/rpl-conf.h @@ -121,6 +121,18 @@ #define RPL_DEFAULT_ROUTE_INFINITE_LIFETIME 0 #endif /* RPL_CONF_DEFAULT_ROUTE_INFINITE_LIFETIME */ +/* + * Maximum lifetime of a DAG + * When a DODAG is not updated since RPL_CONF_DAG_LIFETIME times the DODAG + * maximum DIO interval the DODAG is removed from the list of DODAGS of the + * related instance, except if it is the currently joined DODAG. + */ +#ifdef RPL_CONF_DAG_LIFETIME +#define RPL_DAG_LIFETIME RPL_CONF_DAG_LIFETIME +#else +#define RPL_DAG_LIFETIME 3 +#endif /* RPL_CONF_DAG_LIFETIME */ + /* * */ diff --git a/core/net/rpl/rpl-dag-root.c b/core/net/rpl/rpl-dag-root.c index 44519bcd4..efbdb4035 100644 --- a/core/net/rpl/rpl-dag-root.c +++ b/core/net/rpl/rpl-dag-root.c @@ -71,7 +71,7 @@ get_global_address(void) state = uip_ds6_if.addr_list[i].state; if(uip_ds6_if.addr_list[i].isused && state == ADDR_PREFERRED && - !uip_is_addr_link_local(&uip_ds6_if.addr_list[i].ipaddr)) { + !uip_is_addr_linklocal(&uip_ds6_if.addr_list[i].ipaddr)) { ipaddr = &uip_ds6_if.addr_list[i].ipaddr; } } @@ -190,7 +190,7 @@ rpl_dag_root_init_dag_immediately(void) state = uip_ds6_if.addr_list[i].state; if(uip_ds6_if.addr_list[i].isused && state == ADDR_PREFERRED && - !uip_is_addr_link_local(&uip_ds6_if.addr_list[i].ipaddr)) { + !uip_is_addr_linklocal(&uip_ds6_if.addr_list[i].ipaddr)) { ipaddr = &uip_ds6_if.addr_list[i].ipaddr; } } diff --git a/core/net/rpl/rpl-dag.c b/core/net/rpl/rpl-dag.c index 89be40184..9b6c92e3f 100644 --- a/core/net/rpl/rpl-dag.c +++ b/core/net/rpl/rpl-dag.c @@ -938,6 +938,15 @@ rpl_join_instance(uip_ipaddr_t *from, rpl_dio_t *dio) rpl_parent_t *p; rpl_of_t *of; + /* Determine the objective function by using the + objective code point of the DIO. */ + of = rpl_find_of(dio->ocp); + if(of == NULL) { + PRINTF("RPL: DIO for DAG instance %u does not specify a supported OF: %u\n", + dio->instance_id, dio->ocp); + return; + } + dag = rpl_alloc_dag(dio->instance_id, &dio->dag_id); if(dag == NULL) { PRINTF("RPL: Failed to allocate a DAG object!\n"); @@ -958,17 +967,6 @@ rpl_join_instance(uip_ipaddr_t *from, rpl_dio_t *dio) p->dtsn = dio->dtsn; PRINTF("succeeded\n"); - /* Determine the objective function by using the - objective code point of the DIO. */ - of = rpl_find_of(dio->ocp); - if(of == NULL) { - PRINTF("RPL: DIO for DAG instance %u does not specify a supported OF\n", - dio->instance_id); - rpl_remove_parent(p); - instance->used = 0; - return; - } - /* Autoconfigure an address if this node does not already have an address with this prefix. */ if(dio->prefix_info.flags & UIP_ND6_RA_FLAG_AUTONOMOUS) { @@ -1062,6 +1060,7 @@ rpl_add_dag(uip_ipaddr_t *from, rpl_dio_t *dio) rpl_move_parent(previous_dag, dag, p); } } + p->rank = dio->rank; /* Determine the objective function by using the objective code point of the DIO. */ @@ -1336,6 +1335,12 @@ rpl_process_dio(uip_ipaddr_t *from, rpl_dio_t *dio) return; } + /* The DIO comes from a valid DAG, we can refresh its lifetime */ + dag->lifetime = (1UL << (instance->dio_intmin + instance->dio_intdoubl)) / 1000; + PRINTF("Set dag "); + PRINT6ADDR(&dag->dag_id); + PRINTF(" lifetime to %ld\n", dag->lifetime); + /* * At this point, we know that this DIO pertains to a DAG that * we are already part of. We consider the sender of the DIO to be @@ -1370,10 +1375,9 @@ rpl_process_dio(uip_ipaddr_t *from, rpl_dio_t *dio) if(dag->joined) { instance->dio_counter++; } - } else { - p->rank=dio->rank; } } + p->rank = dio->rank; /* Parent info has been updated, trigger rank recalculation */ p->flags |= RPL_PARENT_FLAG_UPDATED; diff --git a/core/net/rpl/rpl-icmp6.c b/core/net/rpl/rpl-icmp6.c index c4db3c8fa..80e93ffcf 100644 --- a/core/net/rpl/rpl-icmp6.c +++ b/core/net/rpl/rpl-icmp6.c @@ -109,7 +109,7 @@ get_global_addr(uip_ipaddr_t *addr) state = uip_ds6_if.addr_list[i].state; if(uip_ds6_if.addr_list[i].isused && (state == ADDR_TENTATIVE || state == ADDR_PREFERRED)) { - if(!uip_is_addr_link_local(&uip_ds6_if.addr_list[i].ipaddr)) { + if(!uip_is_addr_linklocal(&uip_ds6_if.addr_list[i].ipaddr)) { memcpy(addr, &uip_ds6_if.addr_list[i].ipaddr, sizeof(uip_ipaddr_t)); return 1; } @@ -916,15 +916,11 @@ dao_ack_input(void) { #if DEBUG unsigned char *buffer; - uint8_t buffer_length; - uint8_t instance_id; uint8_t sequence; uint8_t status; buffer = UIP_ICMP_PAYLOAD; - buffer_length = uip_len - uip_l3_icmp_hdr_len; - instance_id = buffer[0]; sequence = buffer[2]; status = buffer[3]; diff --git a/core/net/rpl/rpl-private.h b/core/net/rpl/rpl-private.h index a1adc0d6f..6f4764b27 100644 --- a/core/net/rpl/rpl-private.h +++ b/core/net/rpl/rpl-private.h @@ -284,6 +284,7 @@ rpl_dag_t *rpl_alloc_dag(uint8_t, uip_ipaddr_t *); rpl_instance_t *rpl_alloc_instance(uint8_t); void rpl_free_dag(rpl_dag_t *); void rpl_free_instance(rpl_instance_t *); +void rpl_purge_dags(void); /* DAG parent management function. */ rpl_parent_t *rpl_add_parent(rpl_dag_t *, rpl_dio_t *dio, uip_ipaddr_t *); diff --git a/core/net/rpl/rpl-timers.c b/core/net/rpl/rpl-timers.c index 27fff0ddf..c0d6c2850 100644 --- a/core/net/rpl/rpl-timers.c +++ b/core/net/rpl/rpl-timers.c @@ -66,6 +66,7 @@ static uint8_t dio_send_ok; static void handle_periodic_timer(void *ptr) { + rpl_purge_dags(); rpl_purge_routes(); rpl_recalculate_ranks(); diff --git a/core/net/rpl/rpl.c b/core/net/rpl/rpl.c index e4724408e..82b11721a 100644 --- a/core/net/rpl/rpl.c +++ b/core/net/rpl/rpl.c @@ -300,6 +300,34 @@ rpl_ipv6_neighbor_callback(uip_ds6_nbr_t *nbr) } /*---------------------------------------------------------------------------*/ void +rpl_purge_dags(void) +{ + rpl_instance_t *instance; + rpl_instance_t *end; + int i; + + for(instance = &instance_table[0], end = instance + RPL_MAX_INSTANCES; + instance < end; ++instance) { + if(instance->used) { + for(i = 0; i < RPL_MAX_DAG_PER_INSTANCE; i++) { + if(instance->dag_table[i].used) { + if(instance->dag_table[i].lifetime == 0) { + if(!instance->dag_table[i].joined) { + PRINTF("Removing dag "); + PRINT6ADDR(&instance->dag_table[i].dag_id); + PRINTF("\n"); + rpl_free_dag(&instance->dag_table[i]); + } + } else { + instance->dag_table[i].lifetime--; + } + } + } + } + } +} +/*---------------------------------------------------------------------------*/ +void rpl_init(void) { uip_ipaddr_t rplmaddr; diff --git a/core/net/rpl/rpl.h b/core/net/rpl/rpl.h index 70c877aeb..3b3c99f9f 100644 --- a/core/net/rpl/rpl.h +++ b/core/net/rpl/rpl.h @@ -142,6 +142,7 @@ struct rpl_dag { rpl_rank_t rank; struct rpl_instance *instance; rpl_prefix_t prefix_info; + uint32_t lifetime; }; typedef struct rpl_dag rpl_dag_t; typedef struct rpl_instance rpl_instance_t; diff --git a/core/sys/cc.h b/core/sys/cc.h index 06b8889ec..c77bc41d7 100644 --- a/core/sys/cc.h +++ b/core/sys/cc.h @@ -67,24 +67,14 @@ #define CC_FUNCTION_POINTER_ARGS 0 #endif /* CC_CONF_FUNCTION_POINTER_ARGS */ -/** - * Configure if the C compiler supports fastcall function - * declarations. - */ -#ifdef CC_CONF_FASTCALL -#define CC_FASTCALL CC_CONF_FASTCALL -#else /* CC_CONF_FASTCALL */ -#define CC_FASTCALL -#endif /* CC_CONF_FASTCALL */ - /** * Configure if the C compiler have problems with const function pointers */ #ifdef CC_CONF_CONST_FUNCTION_BUG #define CC_CONST_FUNCTION -#else /* CC_CONF_FASTCALL */ +#else /* CC_CONF_CONST_FUNCTION_BUG */ #define CC_CONST_FUNCTION const -#endif /* CC_CONF_FASTCALL */ +#endif /* CC_CONF_CONST_FUNCTION_BUG */ /** * Configure work-around for unsigned char bugs with sdcc. @@ -123,6 +113,17 @@ #define CC_NO_VA_ARGS CC_CONF_VA_ARGS #endif +/** \def CC_ACCESS_NOW(x) + * This macro ensures that the access to a non-volatile variable can + * not be reordered or optimized by the compiler. + * See also https://lwn.net/Articles/508991/ - In Linux the macro is + * called ACCESS_ONCE + * The type must be passed, because the typeof-operator is a gcc + * extension + */ + +#define CC_ACCESS_NOW(type, variable) (*(volatile type *)&(variable)) + #ifndef NULL #define NULL 0 #endif /* NULL */ diff --git a/core/sys/energest.h b/core/sys/energest.h index 6d43aaa11..a8f445b65 100644 --- a/core/sys/energest.h +++ b/core/sys/energest.h @@ -105,6 +105,21 @@ extern energest_t energest_leveldevice_current_leveltime[ENERGEST_CONF_LEVELDEVI energest_current_time[type]); \ energest_current_mode[type] = 0; \ } while(0) + +#define ENERGEST_SWITCH(type_off, type_on) do { \ + rtimer_clock_t energest_local_variable_now = RTIMER_NOW(); \ + if(energest_current_mode[type_off] != 0) { \ + if (energest_local_variable_now < energest_current_time[type_off]) { \ + energest_total_time[type_off].current += RTIMER_ARCH_SECOND; \ + } \ + energest_total_time[type_off].current += (rtimer_clock_t)(energest_local_variable_now - \ + energest_current_time[type_off]); \ + energest_current_mode[type_off] = 0; \ + } \ + energest_current_time[type_on] = energest_local_variable_now; \ + energest_current_mode[type_on] = 1; \ + } while(0) + #else #define ENERGEST_OFF(type) if(energest_current_mode[type] != 0) do { \ energest_total_time[type].current += (rtimer_clock_t)(RTIMER_NOW() - \ @@ -117,13 +132,24 @@ extern energest_t energest_leveldevice_current_leveltime[ENERGEST_CONF_LEVELDEVI energest_current_time[type]); \ energest_current_mode[type] = 0; \ } while(0) -#endif +#define ENERGEST_SWITCH(type_off, type_on) do { \ + rtimer_clock_t energest_local_variable_now = RTIMER_NOW(); \ + if(energest_current_mode[type_off] != 0) { \ + energest_total_time[type_off].current += (rtimer_clock_t)(energest_local_variable_now - \ + energest_current_time[type_off]); \ + energest_current_mode[type_off] = 0; \ + } \ + energest_current_time[type_on] = energest_local_variable_now; \ + energest_current_mode[type_on] = 1; \ + } while(0) +#endif #else /* ENERGEST_CONF_ON */ #define ENERGEST_ON(type) do { } while(0) #define ENERGEST_OFF(type) do { } while(0) #define ENERGEST_OFF_LEVEL(type,level) do { } while(0) +#define ENERGEST_SWITCH(type_off, type_on) do { } while(0) #endif /* ENERGEST_CONF_ON */ #endif /* ENERGEST_H_ */ diff --git a/core/sys/pt-sem.h b/core/sys/pt-sem.h index 75d66452a..27effa57a 100644 --- a/core/sys/pt-sem.h +++ b/core/sys/pt-sem.h @@ -162,9 +162,11 @@ PT_THREAD(driver_thread(struct pt *pt)) #include "sys/pt.h" struct pt_sem { - unsigned int count; + unsigned int head, tail; }; +#define PT_SEM_COUNT(s) ((s)->head - (s)->tail) + /** * Initialize a semaphore * @@ -179,7 +181,11 @@ struct pt_sem { * \param c (unsigned int) The initial count of the semaphore. * \hideinitializer */ -#define PT_SEM_INIT(s, c) (s)->count = c +#define PT_SEM_INIT(s, c) \ + do { \ + (s)->tail = 0; \ + (s)->head = (c); \ + } while(0) /** * Wait for a semaphore @@ -199,8 +205,8 @@ struct pt_sem { */ #define PT_SEM_WAIT(pt, s) \ do { \ - PT_WAIT_UNTIL(pt, (s)->count > 0); \ - --(s)->count; \ + PT_WAIT_UNTIL(pt, PT_SEM_COUNT(s) > 0); \ + ++(s)->tail; \ } while(0) /** @@ -218,7 +224,7 @@ struct pt_sem { * * \hideinitializer */ -#define PT_SEM_SIGNAL(pt, s) ++(s)->count +#define PT_SEM_SIGNAL(pt, s) (++(s)->head) #endif /* PT_SEM_H_ */ diff --git a/cpu/6502/6502def.h b/cpu/6502/6502def.h index 164af5e67..2da81b02e 100644 --- a/cpu/6502/6502def.h +++ b/cpu/6502/6502def.h @@ -51,7 +51,6 @@ typedef uint32_t u32_t; typedef int32_t s32_t; #define CC_CONF_REGISTER_ARGS 1 -#define CC_CONF_FASTCALL __fastcall__ #define ARCH_DOESNT_NEED_ALIGNED_STRUCTS 1 diff --git a/cpu/6502/README.md b/cpu/6502/README.md index 3ab367a52..601aee288 100644 --- a/cpu/6502/README.md +++ b/cpu/6502/README.md @@ -66,9 +66,13 @@ high-level configuration macros may be set: - Default: 0 - Purpose: Enable UDP support and initialize resolver process on startup. +- WITH_80COL + - Default: 0 + - Purpose: Enable 80 column screen. + - WITH_GUI - Default: 0 - - Purpose: Initialize the the CTK process on startup. + - Purpose: Initialize the CTK process on startup. - WITH_MOUSE - Default: 0 diff --git a/cpu/6502/lib/config.c b/cpu/6502/lib/config.c index 545c47116..7a013bd0b 100644 --- a/cpu/6502/lib/config.c +++ b/cpu/6502/lib/config.c @@ -43,7 +43,7 @@ /*-----------------------------------------------------------------------------------*/ #if LOG_CONF_ENABLED -static char * CC_FASTCALL +static char * ipaddrtoa(uip_ipaddr_t *ipaddr, char *buffer) { char *ptr = buffer; @@ -59,7 +59,7 @@ ipaddrtoa(uip_ipaddr_t *ipaddr, char *buffer) } #endif /* LOG_CONF_ENABLED */ /*-----------------------------------------------------------------------------------*/ -struct ethernet_config * CC_FASTCALL +struct ethernet_config * config_read(char *filename) { static struct { diff --git a/cpu/6502/lib/config.h b/cpu/6502/lib/config.h index 8f7f971be..11bc03463 100644 --- a/cpu/6502/lib/config.h +++ b/cpu/6502/lib/config.h @@ -35,6 +35,6 @@ #ifndef CONFIG_H_ #define CONFIG_H_ -struct ethernet_config * CC_FASTCALL config_read(char *filename); +struct ethernet_config * config_read(char *filename); #endif /* CONFIG_H_ */ diff --git a/cpu/6502/net/ethernet.c b/cpu/6502/net/ethernet.c index 58c15e4d5..2817b5d3c 100644 --- a/cpu/6502/net/ethernet.c +++ b/cpu/6502/net/ethernet.c @@ -58,7 +58,7 @@ struct { } *module; /*---------------------------------------------------------------------------*/ -void CC_FASTCALL +void ethernet_init(struct ethernet_config *config) { static const char signature[4] = {0x65, 0x74, 0x68, 0x01}; diff --git a/cpu/6502/net/ethernet.h b/cpu/6502/net/ethernet.h index d99f06451..ce06f6e7a 100644 --- a/cpu/6502/net/ethernet.h +++ b/cpu/6502/net/ethernet.h @@ -35,7 +35,7 @@ #ifndef ETHERNET_H_ #define ETHERNET_H_ -void CC_FASTCALL ethernet_init(struct ethernet_config *config); +void ethernet_init(struct ethernet_config *config); uint16_t ethernet_poll(void); void ethernet_send(void); void ethernet_exit(void); diff --git a/cpu/avr/Makefile.avr b/cpu/avr/Makefile.avr index 7ca45bf05..73c662582 100644 --- a/cpu/avr/Makefile.avr +++ b/cpu/avr/Makefile.avr @@ -139,10 +139,10 @@ ifndef NOAVRSIZE avr-size -C --mcu=$(MCU) $@ endif -%.hex: %.out +%.hex: %.$(TARGET) $(OBJCOPY) $^ -j .text -j .data -O ihex $@ -%.ihex: %.out +%.ihex: %.$(TARGET) $(OBJCOPY) $^ -O ihex $@ # Add a namelist to the kernel @@ -160,7 +160,7 @@ endif #%.hex: %.elf # $(OBJCOPY) -R .eeprom -R .fuse -R .signature $^ -O ihex $@ -%.eep: %.out +%.eep: %.$(TARGET) -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \ --change-section-lma .eeprom=0 -O ihex $^ $@ diff --git a/cpu/avr/bootloader.c b/cpu/avr/bootloader.c index 20a174ed0..844dc20a1 100644 --- a/cpu/avr/bootloader.c +++ b/cpu/avr/bootloader.c @@ -12,7 +12,6 @@ /* MCUSR is a deprecated name but older avr-libc versions may define it */ #if !defined (MCUCSR) # if defined (MCUSR) -# warning *** MCUCSR not defined, using MCUSR instead *** # define MCUCSR MCUSR # endif #endif diff --git a/cpu/avr/radio/rf230bb/halbb.c b/cpu/avr/radio/rf230bb/halbb.c index 5cd920a39..14ff57256 100644 --- a/cpu/avr/radio/rf230bb/halbb.c +++ b/cpu/avr/radio/rf230bb/halbb.c @@ -751,7 +751,8 @@ HAL_RF230_ISR() #endif #endif - } else if (interrupt_source & HAL_TRX_END_MASK){ + } + if (interrupt_source & HAL_TRX_END_MASK){ INTERRUPTDEBUG(11); state = hal_subregister_read(SR_TRX_STATUS); @@ -778,16 +779,20 @@ HAL_RF230_ISR() } - } else if (interrupt_source & HAL_TRX_UR_MASK){ + } + if (interrupt_source & HAL_TRX_UR_MASK){ INTERRUPTDEBUG(13); ; - } else if (interrupt_source & HAL_PLL_UNLOCK_MASK){ + } + if (interrupt_source & HAL_PLL_UNLOCK_MASK){ INTERRUPTDEBUG(14); ; - } else if (interrupt_source & HAL_PLL_LOCK_MASK){ + } + if (interrupt_source & HAL_PLL_LOCK_MASK){ INTERRUPTDEBUG(15); ; - } else if (interrupt_source & HAL_BAT_LOW_MASK){ + } + if (interrupt_source & HAL_BAT_LOW_MASK){ /* Disable BAT_LOW interrupt to prevent endless interrupts. The interrupt */ /* will continously be asserted while the supply voltage is less than the */ /* user-defined voltage threshold. */ @@ -796,9 +801,6 @@ HAL_RF230_ISR() hal_register_write(RG_IRQ_MASK, trx_isr_mask); INTERRUPTDEBUG(16); ; - } else { - INTERRUPTDEBUG(99); - ; } } #endif /* defined(__AVR_ATmega128RFA1__) */ diff --git a/cpu/avr/radio/rf230bb/rf230bb.c b/cpu/avr/radio/rf230bb/rf230bb.c index aee2f6d29..d00a24d72 100644 --- a/cpu/avr/radio/rf230bb/rf230bb.c +++ b/cpu/avr/radio/rf230bb/rf230bb.c @@ -237,6 +237,8 @@ typedef enum{ PROCESS(rf230_process, "RF230 driver"); /*---------------------------------------------------------------------------*/ +int rf230_interrupt(void); + static int rf230_on(void); static int rf230_off(void); @@ -552,7 +554,19 @@ rf230_is_ready_to_send() { static void flushrx(void) { + /* Clear the length field to allow buffering of the next packet */ rxframe[rxframe_head].length=0; + rxframe_head++; + if (rxframe_head >= RF230_CONF_RX_BUFFERS) { + rxframe_head=0; + } + /* If another packet has been buffered, schedule another receive poll */ + if (rxframe[rxframe_head].length) { + rf230_interrupt(); + } + else { + rf230_pending = 0; + } } /*---------------------------------------------------------------------------*/ static void @@ -1434,6 +1448,7 @@ rf230_read(void *buf, unsigned short bufsize) #if RADIOALWAYSON && DEBUGFLOWSIZE if (RF230_receive_on==0) {if (debugflow[debugflowsize-1]!='z') DEBUGFLOW('z');} //cxmac calls with radio off? #endif + flushrx(); return 0; } @@ -1476,19 +1491,8 @@ rf230_read(void *buf, unsigned short bufsize) memcpy(buf,framep,len-AUX_LEN+CHECKSUM_LEN); rf230_last_correlation = rxframe[rxframe_head].lqi; - /* Clear the length field to allow buffering of the next packet */ - rxframe[rxframe_head].length=0; - rxframe_head++; - if (rxframe_head >= RF230_CONF_RX_BUFFERS) { - rxframe_head=0; - } - /* If another packet has been buffered, schedule another receive poll */ - if (rxframe[rxframe_head].length) { - rf230_interrupt(); - } - else { - rf230_pending = 0; - } + /* Prepare to receive another packet */ + flushrx(); /* Point to the checksum */ framep+=len-AUX_LEN; diff --git a/cpu/avr/watchdog.c b/cpu/avr/watchdog.c index e7aaee9bd..b37691e39 100644 --- a/cpu/avr/watchdog.c +++ b/cpu/avr/watchdog.c @@ -67,7 +67,6 @@ /* MCUSR is a deprecated name but older avr-libc versions may define it */ #if !defined (MCUCSR) # if defined (MCUSR) -# warning *** MCUCSR not defined, using MCUSR instead *** # define MCUCSR MCUSR # endif #endif diff --git a/cpu/cc2430/8051def.h b/cpu/cc2430/8051def.h index 6d89a1fb2..f0acda7b9 100644 --- a/cpu/cc2430/8051def.h +++ b/cpu/cc2430/8051def.h @@ -38,7 +38,6 @@ #endif #define CC_CONF_FUNCTION_POINTER_ARGS 1 -#define CC_CONF_FASTCALL #define CC_CONF_VA_ARGS 1 #define CC_CONF_UNSIGNED_CHAR_BUGS 0 #define CC_CONF_REGISTER_ARGS 0 diff --git a/cpu/cc2538/Makefile.cc2538 b/cpu/cc2538/Makefile.cc2538 index 29795111c..0d4d3c73f 100644 --- a/cpu/cc2538/Makefile.cc2538 +++ b/cpu/cc2538/Makefile.cc2538 @@ -22,6 +22,10 @@ LDFLAGS += -Wl,-Map=$(@:.elf=-$(TARGET).map),--cref,--no-warn-mismatch OBJCOPY_FLAGS += -O binary --gap-fill 0xff OBJDUMP_FLAGS += --disassemble --source --disassembler-options=force-thumb +ifdef WERROR +CFLAGS += -Werror +endif + ### Are we building with code size optimisations? ifeq ($(SMALL),1) CFLAGS += -Os @@ -51,6 +55,8 @@ CONTIKI_CPU_SOURCEFILES += clock.c rtimer-arch.c uart.c watchdog.c CONTIKI_CPU_SOURCEFILES += nvic.c cpu.c sys-ctrl.c gpio.c ioc.c spi.c adc.c CONTIKI_CPU_SOURCEFILES += crypto.c aes.c ccm.c sha256.c CONTIKI_CPU_SOURCEFILES += cc2538-rf.c udma.c lpm.c +CONTIKI_CPU_SOURCEFILES += pka.c bignum-driver.c ecc-driver.c ecc-algorithm.c +CONTIKI_CPU_SOURCEFILES += ecc-curve.c CONTIKI_CPU_SOURCEFILES += dbg.c ieee-addr.c CONTIKI_CPU_SOURCEFILES += slip-arch.c slip.c CONTIKI_CPU_SOURCEFILES += i2c.c cc2538-temp-sensor.c vdd3-sensor.c diff --git a/cpu/cc2538/dev/bignum-driver.c b/cpu/cc2538/dev/bignum-driver.c new file mode 100644 index 000000000..60ced2960 --- /dev/null +++ b/cpu/cc2538/dev/bignum-driver.c @@ -0,0 +1,1064 @@ +/* + * Original file: + * Copyright (C) 2013 Texas Instruments Incorporated - http://www.ti.com/ + * All rights reserved. + * + * Port to Contiki: + * Authors: Andreas Dröscher + * Hu Luo + * Hossein Shafagh + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + */ +/** + * \addtogroup cc2538-bignum + * @{ + * + * \file + * Implementation of the cc2538 BigNum driver + * + * bignum_subtract_start bignum_subtract_get_result (subtraction) + * bignum_add_start bignum_add_get_result (addition) + * bignum_mod_start bignum_mod_get_result (modulo) + * bignum_exp_mod_start bignum_exp_mod_get_result (modular exponentiation operation) + * bignum_inv_mod_start bignum_inv_mod_get_result (inverse modulo operation) + * bignum_mul_start bignum_mul_get_result (multiplication) + * bignum_divide_start bignum_divide_get_result (division) + * bignum_cmp_start bignum_cmp_get_result (comparison) + */ +#include "bignum-driver.h" + +#include "stdio.h" + +#include "reg.h" +#include "nvic.h" + +#define ASSERT(IF) if(!(IF)) { return PKA_STATUS_INVALID_PARAM; } + +/*---------------------------------------------------------------------------*/ +uint8_t +bignum_mod_start(const uint32_t *number, + const uint8_t number_size, + const uint32_t *modulus, + const uint8_t modulus_size, + uint32_t *result_vector, + struct process *process) +{ + + uint8_t extraBuf; + uint32_t offset; + int i; + + /* Check the arguments. */ + ASSERT(NULL != number); + ASSERT(NULL != modulus); + ASSERT(NULL != result_vector); + + /* make sure no operation is in progress. */ + if((REG(PKA_FUNCTION) & PKA_FUNCTION_RUN) != 0) { + return PKA_STATUS_OPERATION_INPRG; + } + + /* calculate the extra buffer requirement. */ + extraBuf = 2 + modulus_size % 2; + + offset = 0; + + /* Update the A ptr with the offset address of the PKA RAM location + * where the number will be stored. */ + REG(PKA_APTR) = offset >> 2; + + /* Load the number in PKA RAM */ + for(i = 0; i < number_size; i++) { + REG(PKA_RAM_BASE + offset + 4 * i) = number[i]; + } + + /* determine the offset for the next data input. */ + offset += 4 * (i + number_size % 2); + + /* Update the B ptr with the offset address of the PKA RAM location + * where the divisor will be stored. */ + REG(PKA_BPTR) = offset >> 2; + + /* Load the divisor in PKA RAM. */ + for(i = 0; i < modulus_size; i++) { + REG(PKA_RAM_BASE + offset + 4 * i) = modulus[i]; + } + + /* determine the offset for the next data. */ + offset += 4 * (i + extraBuf); + + /* Copy the result vector address location. */ + *result_vector = PKA_RAM_BASE + offset; + + /* Load C ptr with the result location in PKA RAM */ + REG(PKA_CPTR) = offset >> 2; + + /* Load A length registers with Big number length in 32 bit words. */ + REG(PKA_ALENGTH) = number_size; + + /* Load B length registers Divisor length in 32-bit words. */ + REG(PKA_BLENGTH) = modulus_size; + + /* Start the PKCP modulo operation by setting the PKA Function register. */ + REG(PKA_FUNCTION) = (PKA_FUNCTION_RUN | PKA_FUNCTION_MODULO); + + /* Enable Interrupt */ + if(process != NULL) { + pka_register_process_notification(process); + nvic_interrupt_unpend(NVIC_INT_PKA); + nvic_interrupt_enable(NVIC_INT_PKA); + } + + return PKA_STATUS_SUCCESS; +} +/*---------------------------------------------------------------------------*/ +uint8_t +bignum_mod_get_result(uint32_t *buffer, + const uint8_t buffer_size, + const uint32_t result_vector) +{ + + uint32_t regMSWVal; + uint32_t len; + int i; + + /* Check the arguments. */ + ASSERT(NULL != buffer); + ASSERT(result_vector > PKA_RAM_BASE); + ASSERT(result_vector < (PKA_RAM_BASE + PKA_RAM_SIZE)); + + /* verify that the operation is complete. */ + if((REG(PKA_FUNCTION) & PKA_FUNCTION_RUN) != 0) { + return PKA_STATUS_OPERATION_INPRG; + } + + /* Disable Interrupt */ + nvic_interrupt_disable(NVIC_INT_PKA); + pka_register_process_notification(NULL); + + /* Get the MSW register value. */ + regMSWVal = REG(PKA_DIVMSW); + + /* Check to make sure that the result vector is not all zeroes. */ + if(regMSWVal & PKA_DIVMSW_RESULT_IS_ZERO) { + return PKA_STATUS_RESULT_0; + } + + /* Get the length of the result. */ + len = ((regMSWVal & PKA_DIVMSW_MSW_ADDRESS_M) + 1) + - ((result_vector - PKA_RAM_BASE) >> 2); + + /* If the size of the buffer provided is less than the result length than + * return error. */ + if(buffer_size < len) { + return PKA_STATUS_BUF_UNDERFLOW; + } + /* copy the result from vector C into the pResult. */ + for(i = 0; i < len; i++) { + buffer[i] = REG(result_vector + 4 * i); + } + + return PKA_STATUS_SUCCESS; +} +/*---------------------------------------------------------------------------*/ +uint8_t +bignum_cmp_start(const uint32_t *number1, + const uint32_t *number2, + const uint8_t size, + struct process *process) +{ + + uint32_t offset; + int i; + + /* Check the arguments. */ + ASSERT(NULL != number1); + ASSERT(NULL != number2); + + offset = 0; + + /* Make sure no operation is in progress. */ + if((REG(PKA_FUNCTION) & PKA_FUNCTION_RUN) != 0) { + return PKA_STATUS_OPERATION_INPRG; + } + + /* Update the A ptr with the offset address of the PKA RAM location + * where the first big number will be stored. */ + REG(PKA_APTR) = offset >> 2; + + /* Load the first big number in PKA RAM. */ + for(i = 0; i < size; i++) { + REG(PKA_RAM_BASE + offset + 4 * i) = number1[i]; + } + + /* Determine the offset in PKA RAM for the next pointer. */ + offset += 4 * (i + size % 2); + + /* Update the B ptr with the offset address of the PKA RAM location + * where the second big number will be stored. */ + REG(PKA_BPTR) = offset >> 2; + + /* Load the second big number in PKA RAM. */ + for(i = 0; i < size; i++) { + REG(PKA_RAM_BASE + offset + 4 * i) = number2[i]; + } + + /* Load length registers in 32 bit word size. */ + REG(PKA_ALENGTH) = size; + + /* Set the PKA Function register for the compare operation + * and start the operation. */ + REG(PKA_FUNCTION) = (PKA_FUNCTION_RUN | PKA_FUNCTION_COMPARE); + + /* Enable Interrupt */ + if(process != NULL) { + pka_register_process_notification(process); + nvic_interrupt_unpend(NVIC_INT_PKA); + nvic_interrupt_enable(NVIC_INT_PKA); + } + + return PKA_STATUS_SUCCESS; +} +/*---------------------------------------------------------------------------*/ +uint8_t +bignum_cmp_get_result(void) +{ + uint8_t status; + + /* verify that the operation is complete. */ + if((REG(PKA_FUNCTION) & PKA_FUNCTION_RUN) != 0) { + status = PKA_STATUS_OPERATION_INPRG; + return status; + } + + /* Disable Interrupt */ + nvic_interrupt_disable(NVIC_INT_PKA); + pka_register_process_notification(NULL); + + /* Check the compare register. */ + switch(REG(PKA_COMPARE)) { + case PKA_COMPARE_A_EQUALS_B: + status = PKA_STATUS_SUCCESS; + break; + + case PKA_COMPARE_A_GREATER_THAN_B: + status = PKA_STATUS_A_GR_B; + break; + + case PKA_COMPARE_A_LESS_THAN_B: + status = PKA_STATUS_A_LT_B; + break; + + default: + status = PKA_STATUS_FAILURE; + break; + } + + return status; +} +/*---------------------------------------------------------------------------*/ +uint8_t +bignum_inv_mod_start(const uint32_t *number, + const uint8_t number_size, + const uint32_t *modulus, + const uint8_t modulus_size, + uint32_t *result_vector, + struct process *process) +{ + + uint32_t offset; + int i; + + /* Check the arguments. */ + ASSERT(NULL != number); + ASSERT(NULL != modulus); + ASSERT(NULL != result_vector); + + offset = 0; + + /* Make sure no operation is in progress. */ + if((REG(PKA_FUNCTION) & PKA_FUNCTION_RUN) != 0) { + return PKA_STATUS_OPERATION_INPRG; + } + + /* Update the A ptr with the offset address of the PKA RAM location + * where the number will be stored. */ + REG(PKA_APTR) = offset >> 2; + + /* Load the \e number number in PKA RAM. */ + for(i = 0; i < number_size; i++) { + REG(PKA_RAM_BASE + offset + 4 * i) = number[i]; + } + + /* Determine the offset for next data. */ + offset += 4 * (i + number_size % 2); + + /* Update the B ptr with the offset address of the PKA RAM location + * where the modulus will be stored. */ + REG(PKA_BPTR) = offset >> 2; + + /* Load the \e modulus divisor in PKA RAM. */ + for(i = 0; i < modulus_size; i++) { + REG(PKA_RAM_BASE + offset + 4 * i) = modulus[i]; + } + + /* Determine the offset for result data. */ + offset += 4 * (i + modulus_size % 2); + + /* Copy the result vector address location. */ + *result_vector = PKA_RAM_BASE + offset; + + /* Load D ptr with the result location in PKA RAM. */ + REG(PKA_DPTR) = offset >> 2; + + /* Load the respective length registers. */ + REG(PKA_ALENGTH) = number_size; + REG(PKA_BLENGTH) = modulus_size; + + /* set the PKA function to InvMod operation and the start the operation. */ + REG(PKA_FUNCTION) = 0x0000F000; + + /* Enable Interrupt */ + if(process != NULL) { + pka_register_process_notification(process); + nvic_interrupt_unpend(NVIC_INT_PKA); + nvic_interrupt_enable(NVIC_INT_PKA); + } + + return PKA_STATUS_SUCCESS; +} +/*---------------------------------------------------------------------------*/ +uint8_t +bignum_inv_mod_get_result(uint32_t *buffer, + const uint8_t buffer_size, + const uint32_t result_vector) +{ + + uint32_t regMSWVal; + uint32_t len; + int i; + + /* Check the arguments. */ + ASSERT(NULL != buffer); + ASSERT(result_vector > PKA_RAM_BASE); + ASSERT(result_vector < (PKA_RAM_BASE + PKA_RAM_SIZE)); + + /* Verify that the operation is complete. */ + if((REG(PKA_FUNCTION) & PKA_FUNCTION_RUN) != 0) { + return PKA_STATUS_OPERATION_INPRG; + } + + /* Disable Interrupt */ + nvic_interrupt_disable(NVIC_INT_PKA); + pka_register_process_notification(NULL); + + /* Get the MSW register value. */ + regMSWVal = REG(PKA_MSW); + + /* Check to make sure that the result vector is not all zeroes. */ + if(regMSWVal & PKA_MSW_RESULT_IS_ZERO) { + return PKA_STATUS_RESULT_0; + } + + /* Get the length of the result */ + len = ((regMSWVal & PKA_MSW_MSW_ADDRESS_M) + 1) + - ((result_vector - PKA_RAM_BASE) >> 2); + + /* Check if the provided buffer length is adequate to store the result + * data. */ + if(buffer_size < len) { + return PKA_STATUS_BUF_UNDERFLOW; + } + + /* Copy the result from vector C into the \e buffer. */ + for(i = 0; i < len; i++) { + buffer[i] = REG(result_vector + 4 * i); + } + + return PKA_STATUS_SUCCESS; +} +/*---------------------------------------------------------------------------*/ +uint8_t +bignum_mul_start(const uint32_t *multiplicand, + const uint8_t multiplicand_size, + const uint32_t *multiplier, + const uint8_t multiplier_size, + uint32_t *result_vector, + struct process *process) +{ + + uint32_t offset; + int i; + + /* Check for the arguments. */ + ASSERT(NULL != multiplicand); + ASSERT(NULL != multiplier); + ASSERT(NULL != result_vector); + + offset = 0; + + /* Make sure no operation is in progress. */ + if((REG(PKA_FUNCTION) & PKA_FUNCTION_RUN) != 0) { + return PKA_STATUS_OPERATION_INPRG; + } + + /* Update the A ptr with the offset address of the PKA RAM location + * where the multiplicand will be stored. */ + REG(PKA_APTR) = offset >> 2; + + /* Load the multiplicand in PKA RAM. */ + for(i = 0; i < multiplicand_size; i++) { + REG(PKA_RAM_BASE + offset + 4 * i) = *multiplicand; + multiplicand++; + } + + /* Determine the offset for the next data. */ + offset += 4 * (i + (multiplicand_size % 2)); + + /* Update the B ptr with the offset address of the PKA RAM location + * where the multiplier will be stored. */ + REG(PKA_BPTR) = offset >> 2; + + /* Load the multiplier in PKA RAM. */ + for(i = 0; i < multiplier_size; i++) { + REG(PKA_RAM_BASE + offset + 4 * i) = *multiplier; + multiplier++; + } + + /* Determine the offset for the next data. */ + offset += 4 * (i + (multiplier_size % 2)); + + /* Copy the result vector address location. */ + *result_vector = PKA_RAM_BASE + offset; + + /* Load C ptr with the result location in PKA RAM. */ + REG(PKA_CPTR) = offset >> 2; + + /* Load the respective length registers. */ + REG(PKA_ALENGTH) = multiplicand_size; + REG(PKA_BLENGTH) = multiplier_size; + + /* Set the PKA function to the multiplication and start it. */ + REG(PKA_FUNCTION) = (PKA_FUNCTION_RUN | PKA_FUNCTION_MULTIPLY); + + /* Enable Interrupt */ + if(process != NULL) { + pka_register_process_notification(process); + nvic_interrupt_unpend(NVIC_INT_PKA); + nvic_interrupt_enable(NVIC_INT_PKA); + } + + return PKA_STATUS_SUCCESS; +} +/*---------------------------------------------------------------------------*/ +uint8_t +bignum_mul_get_result(uint32_t *buffer, + uint32_t *buffer_size, + const uint32_t result_vector) +{ + + uint32_t regMSWVal; + uint32_t len; + int i; + + /* Check for arguments. */ + ASSERT(NULL != buffer); + ASSERT(NULL != buffer_size); + ASSERT(result_vector > PKA_RAM_BASE); + ASSERT(result_vector < (PKA_RAM_BASE + PKA_RAM_SIZE)); + + /* Verify that the operation is complete. */ + if((REG(PKA_FUNCTION) & PKA_FUNCTION_RUN) != 0) { + return PKA_STATUS_OPERATION_INPRG; + } + + /* Disable Interrupt */ + nvic_interrupt_disable(NVIC_INT_PKA); + pka_register_process_notification(NULL); + + /* Get the MSW register value. */ + regMSWVal = REG(PKA_MSW); + + /* Check to make sure that the result vector is not all zeroes. */ + if(regMSWVal & PKA_MSW_RESULT_IS_ZERO) { + return PKA_STATUS_RESULT_0; + } + + /* Get the length of the result. */ + len = ((regMSWVal & PKA_MSW_MSW_ADDRESS_M) + 1) + - ((result_vector - PKA_RAM_BASE) >> 2); + + /* Make sure that the length of the supplied result buffer is adequate + * to store the resultant. */ + if(*buffer_size < len) { + return PKA_STATUS_BUF_UNDERFLOW; + } + + /* Copy the resultant length. */ + *buffer_size = len; + + /* Copy the result from vector C into the pResult. */ + for(i = 0; i < *buffer_size; i++) { + buffer[i] = REG(result_vector + 4 * i); + } + + return PKA_STATUS_SUCCESS; +} +/*---------------------------------------------------------------------------*/ +uint8_t +bignum_add_start(const uint32_t *number1, + const uint8_t number1_size, + const uint32_t *number2, + const uint8_t number2_size, + uint32_t *result_vector, + struct process *process) +{ + + uint32_t offset; + int i; + + /* Check for arguments. */ + ASSERT(NULL != number1); + ASSERT(NULL != number2); + ASSERT(NULL != result_vector); + + offset = 0; + + /* Make sure no operation is in progress. */ + if((REG(PKA_FUNCTION) & PKA_FUNCTION_RUN) != 0) { + return PKA_STATUS_OPERATION_INPRG; + } + + /* Update the A ptr with the offset address of the PKA RAM location + * where the big number 1 will be stored. */ + REG(PKA_APTR) = offset >> 2; + + /* Load the big number 1 in PKA RAM. */ + for(i = 0; i < number1_size; i++) { + REG(PKA_RAM_BASE + offset + 4 * i) = number1[i]; + } + + /* Determine the offset in PKA RAM for the next data. */ + offset += 4 * (i + (number1_size % 2)); + + /* Update the B ptr with the offset address of the PKA RAM location + * where the big number 2 will be stored. */ + REG(PKA_BPTR) = offset >> 2; + + /* Load the big number 2 in PKA RAM. */ + for(i = 0; i < number2_size; i++) { + REG(PKA_RAM_BASE + offset + 4 * i) = number2[i]; + } + + /* Determine the offset in PKA RAM for the next data. */ + offset += 4 * (i + (number2_size % 2)); + + /* Copy the result vector address location. */ + *result_vector = PKA_RAM_BASE + offset; + + /* Load C ptr with the result location in PKA RAM. */ + REG(PKA_CPTR) = offset >> 2; + + /* Load respective length registers. */ + REG(PKA_ALENGTH) = number1_size; + REG(PKA_BLENGTH) = number2_size; + + /* Set the function for the add operation and start the operation. */ + REG(PKA_FUNCTION) = (PKA_FUNCTION_RUN | PKA_FUNCTION_ADD); + + /* Enable Interrupt */ + if(process != NULL) { + pka_register_process_notification(process); + nvic_interrupt_unpend(NVIC_INT_PKA); + nvic_interrupt_enable(NVIC_INT_PKA); + } + + return PKA_STATUS_SUCCESS; +} +/*---------------------------------------------------------------------------*/ +uint8_t +bignum_add_get_result(uint32_t *buffer, + uint32_t *buffer_size, + const uint32_t result_vector) +{ + + uint32_t regMSWVal; + uint32_t len; + int i; + + /* Check for the arguments. */ + ASSERT(NULL != buffer); + ASSERT(NULL != buffer_size); + ASSERT(result_vector > PKA_RAM_BASE); + ASSERT(result_vector < (PKA_RAM_BASE + PKA_RAM_SIZE)); + + /* Verify that the operation is complete. */ + if((REG(PKA_FUNCTION) & PKA_FUNCTION_RUN) != 0) { + return PKA_STATUS_OPERATION_INPRG; + } + + /* Disable Interrupt */ + nvic_interrupt_disable(NVIC_INT_PKA); + pka_register_process_notification(NULL); + + /* Get the MSW register value. */ + regMSWVal = REG(PKA_MSW); + + /* Check to make sure that the result vector is not all zeroes. */ + if(regMSWVal & PKA_MSW_RESULT_IS_ZERO) { + return PKA_STATUS_RESULT_0; + } + + /* Get the length of the result. */ + len = ((regMSWVal & PKA_MSW_MSW_ADDRESS_M) + 1) + - ((result_vector - PKA_RAM_BASE) >> 2); + + /* Make sure that the supplied result buffer is adequate to store the + * resultant data. */ + if(*buffer_size < len) { + return PKA_STATUS_BUF_UNDERFLOW; + } + + /* Copy the length. */ + *buffer_size = len; + + /* Copy the result from vector C into the provided buffer. */ + for(i = 0; i < *buffer_size; i++) { + buffer[i] = REG(result_vector + 4 * i); + } + + return PKA_STATUS_SUCCESS; +} +/*---------------------------------------------------------------------------*/ +/* below functions are added by hu luo */ +uint8_t +bignum_subtract_start(const uint32_t *number1, + const uint8_t number1_size, + const uint32_t *number2, + const uint8_t number2_size, + uint32_t *result_vector, + struct process *process) +{ + + uint32_t offset; + int i; + + /* Check for arguments. */ + ASSERT(NULL != number1); + ASSERT(NULL != number2); + ASSERT(NULL != result_vector); + + offset = 0; + + /* Make sure no operation is in progress. */ + if((REG(PKA_FUNCTION) & PKA_FUNCTION_RUN) != 0) { + return PKA_STATUS_OPERATION_INPRG; + } + + /* Update the A ptr with the offset address of the PKA RAM location + * where the big number 1 will be stored. */ + REG(PKA_APTR) = offset >> 2; + + /* Load the big number 1 in PKA RAM. */ + for(i = 0; i < number1_size; i++) { + REG(PKA_RAM_BASE + offset + 4 * i) = number1[i]; + } + + /* Determine the offset in PKA RAM for the next data. */ + offset += 4 * (i + (number1_size % 2)); + + /* Update the B ptr with the offset address of the PKA RAM location + * where the big number 2 will be stored. */ + REG(PKA_BPTR) = offset >> 2; + + /* Load the big number 2 in PKA RAM. */ + for(i = 0; i < number2_size; i++) { + REG(PKA_RAM_BASE + offset + 4 * i) = number2[i]; + } + + /* Determine the offset in PKA RAM for the next data. */ + offset += 4 * (i + (number2_size % 2)); + + /* Copy the result vector address location. */ + *result_vector = PKA_RAM_BASE + offset; + + /* Load C ptr with the result location in PKA RAM. */ + REG(PKA_CPTR) = offset >> 2; + + /* Load respective length registers. */ + REG(PKA_ALENGTH) = number1_size; + REG(PKA_BLENGTH) = number2_size; + + /* Set the function for the add operation and start the operation. */ + REG(PKA_FUNCTION) = (PKA_FUNCTION_RUN | PKA_FUNCTION_SUBTRACT); + + /* Enable Interrupt */ + if(process != NULL) { + pka_register_process_notification(process); + nvic_interrupt_unpend(NVIC_INT_PKA); + nvic_interrupt_enable(NVIC_INT_PKA); + } + + return PKA_STATUS_SUCCESS; +} +/*---------------------------------------------------------------------------*/ +uint8_t +bignum_subtract_get_result(uint32_t *buffer, + uint32_t *buffer_size, + const uint32_t result_vector) +{ + + uint32_t regMSWVal; + uint32_t len; + int i; + + /* Check for the arguments. */ + ASSERT(NULL != buffer); + ASSERT(NULL != buffer_size); + ASSERT(result_vector > PKA_RAM_BASE); + ASSERT(result_vector < (PKA_RAM_BASE + PKA_RAM_SIZE)); + + /* Verify that the operation is complete. */ + if((REG(PKA_FUNCTION) & PKA_FUNCTION_RUN) != 0) { + return PKA_STATUS_OPERATION_INPRG; + } + + /* Disable Interrupt */ + nvic_interrupt_disable(NVIC_INT_PKA); + pka_register_process_notification(NULL); + + /* Get the MSW register value. */ + regMSWVal = REG(PKA_MSW); + + /* Check to make sure that the result vector is not all zeroes. */ + if(regMSWVal & PKA_MSW_RESULT_IS_ZERO) { + return PKA_STATUS_RESULT_0; + } + + /* Get the length of the result. */ + len = ((regMSWVal & PKA_MSW_MSW_ADDRESS_M) + 1) + - ((result_vector - PKA_RAM_BASE) >> 2); + + /* Make sure that the supplied result buffer is adequate to store the + * resultant data. */ + if(*buffer_size < len) { + return PKA_STATUS_BUF_UNDERFLOW; + } + + /* Copy the length. */ + *buffer_size = len; + + /* Copy the result from vector C into the provided buffer. */ + for(i = 0; i < *buffer_size; i++) { + buffer[i] = REG(result_vector + 4 * i); + } + + return PKA_STATUS_SUCCESS; +} +/*---------------------------------------------------------------------------*/ +uint8_t +bignum_exp_mod_start(const uint32_t *number, + const uint8_t number_size, + const uint32_t *modulus, + const uint8_t modulus_size, + const uint32_t *base, + const uint8_t base_size, + uint32_t *result_vector, + struct process *process) +{ + uint32_t offset; + int i; + + /* Check for the arguments. */ + ASSERT(NULL != number); + ASSERT(NULL != modulus); + ASSERT(NULL != base); + ASSERT(NULL != result_vector); + ASSERT(modulus != base); + + offset = 0; + + /* Make sure no PKA operation is in progress. */ + if((REG(PKA_FUNCTION) & PKA_FUNCTION_RUN) != 0) { + return PKA_STATUS_OPERATION_INPRG; + } + + /* Update the A ptr with the offset address of the PKA RAM location + * where the exponent will be stored. */ + REG(PKA_APTR) = offset >> 2; + + /* Load the Exponent in PKA RAM. */ + for(i = 0; i < number_size; i++) { + REG(PKA_RAM_BASE + offset + 4 * i) = number[i]; + } + + /* Determine the offset for the next data(BPTR). */ + offset += 4 * (i + number_size % 2); + /* Update the B ptr with the offset address of the PKA RAM location + * where the divisor will be stored. */ + REG(PKA_BPTR) = offset >> 2; + + /* Load the Modulus in PKA RAM. */ + for(i = 0; i < modulus_size; i++) { + REG(PKA_RAM_BASE + offset + 4 * i) = modulus[i]; + } + + /* Determine the offset for the next data(CPTR). */ + offset += 4 * (i + modulus_size % 2 + 2); + /* Update the C ptr with the offset address of the PKA RAM location + * where the Base will be stored. */ + REG(PKA_CPTR) = offset >> 2; + + /* Write Base to the Vector C in PKA RAM */ + + for(i = 0; i < base_size; i++) { + REG(PKA_RAM_BASE + offset + 4 * i) = base[i]; + } + + /* Determine the offset for the next data. + * INFO D and B can share the same memory area! + * offset += 4 * (i + extraBuf + 2); */ + + /* Copy the result vector address location. */ + *result_vector = PKA_RAM_BASE + offset; + + /* Load D ptr with the result location in PKA RAM */ + REG(PKA_DPTR) = offset >> 2; + + /* Load A length registers with Big number length in 32 bit words. */ + REG(PKA_ALENGTH) = number_size; + + /* Load B length registers Divisor length in 32-bit words. */ + REG(PKA_BLENGTH) = modulus_size; + /* REG(PKA_SHIFT) = 0x00000001; + * Required for (EXPMod-variable): 0x0000A000 + * Start the PKCP modulo exponentiation operation(EXPMod-ACT2) + * by setting the PKA Function register. */ + REG(PKA_FUNCTION) = 0x0000C000; + + /* Enable Interrupt */ + if(process != NULL) { + pka_register_process_notification(process); + nvic_interrupt_unpend(NVIC_INT_PKA); + nvic_interrupt_enable(NVIC_INT_PKA); + } + + return PKA_STATUS_SUCCESS; +} +/*---------------------------------------------------------------------------*/ +uint8_t +bignum_exp_mod_get_result(uint32_t *buffer, + const uint8_t buffer_size, + const uint32_t result_vector) +{ + + uint32_t regMSWVal; + uint32_t len; + int i; + + /* Check the arguments. */ + ASSERT(NULL != buffer); + ASSERT(result_vector > PKA_RAM_BASE); + ASSERT(result_vector < (PKA_RAM_BASE + PKA_RAM_SIZE)); + + /* verify that the operation is complete. */ + if((REG(PKA_FUNCTION) & PKA_FUNCTION_RUN) != 0) { + return PKA_STATUS_OPERATION_INPRG; + } + + /* Disable Interrupt */ + nvic_interrupt_disable(NVIC_INT_PKA); + pka_register_process_notification(NULL); + + /* Get the MSW register value. */ + regMSWVal = REG(PKA_MSW); + + /* Check to make sure that the result vector is not all zeroes. */ + if(regMSWVal & PKA_MSW_RESULT_IS_ZERO) { + return PKA_STATUS_RESULT_0; + } + + /* Get the length of the result */ + len = ((regMSWVal & PKA_MSW_MSW_ADDRESS_M) + 1) + - ((result_vector - PKA_RAM_BASE) >> 2); + /* If the size of the buffer provided is less than the result length than + * return error. */ + if(buffer_size < len) { + return PKA_STATUS_BUF_UNDERFLOW; + } + + /* copy the result from vector C into the pResult. */ + for(i = 0; i < len; i++) { + buffer[i] = REG(result_vector + 4 * i); + } + + return PKA_STATUS_SUCCESS; +} +/*---------------------------------------------------------------------------*/ +uint8_t +bignum_divide_start(const uint32_t *dividend, + const uint8_t dividend_size, + const uint32_t *divisor, + const uint8_t divisor_size, + uint32_t *result_vector, + struct process *process) +{ + + uint32_t offset; + uint32_t spacing; + int i; + + /* We use largest len for spacing */ + if(dividend_size > divisor_size) { + spacing = dividend_size; + } else { + spacing = divisor_size; + } + spacing += 2 + spacing % 2; + + /* Check for the arguments. */ + ASSERT(NULL != dividend); + ASSERT(NULL != divisor); + ASSERT(NULL != result_vector); + + /* Make sure no operation is in progress. */ + if((REG(PKA_FUNCTION) & PKA_FUNCTION_RUN) != 0) { + return PKA_STATUS_OPERATION_INPRG; + } + + /* Update the A ptr with the offset address of the PKA RAM location + * where the multiplicand will be stored. */ + offset = 0; + REG(PKA_APTR) = offset >> 2; + + /* Load the multiplicand in PKA RAM. */ + for(i = 0; i < dividend_size; i++) { + REG(PKA_RAM_BASE + offset + 4 * i) = *dividend; + dividend++; + } + + /* Determine the offset for the next data. */ + offset += 4 * spacing; + + /* Update the B ptr with the offset address of the PKA RAM location + * where the multiplier will be stored. */ + REG(PKA_BPTR) = offset >> 2; + + /* Load the multiplier in PKA RAM. */ + for(i = 0; i < divisor_size; i++) { + REG(PKA_RAM_BASE + offset + 4 * i) = *divisor; + divisor++; + } + + /* Determine the offset for the reminder. */ + offset += 4 * spacing; + + /* Load C ptr with the result location in PKA RAM. */ + REG(PKA_CPTR) = offset >> 2; + + /* Determine the offset for the quotient. */ + offset += 4 * spacing; + + /* Copy the quotient vector address location. */ + *result_vector = PKA_RAM_BASE + offset; + + /* Load D ptr with the result location in PKA RAM. */ + REG(PKA_DPTR) = offset >> 2; + + /* Load the respective length registers. */ + REG(PKA_ALENGTH) = dividend_size; + REG(PKA_BLENGTH) = divisor_size; + + /* Set the PKA function to the multiplication and start it. */ + REG(PKA_FUNCTION) = (PKA_FUNCTION_RUN | PKA_FUNCTION_DIVIDE); + + /* Enable Interrupt */ + if(process != NULL) { + pka_register_process_notification(process); + nvic_interrupt_unpend(NVIC_INT_PKA); + nvic_interrupt_enable(NVIC_INT_PKA); + } + + return PKA_STATUS_SUCCESS; +} +/*---------------------------------------------------------------------------*/ +uint8_t +bignum_divide_get_result(uint32_t *buffer, + uint32_t *buffer_size, + const uint32_t result_vector) +{ + + uint32_t regMSWVal; + uint32_t len; + int i; + + /* Check for arguments. */ + ASSERT(NULL != buffer); + ASSERT(NULL != buffer_size); + ASSERT(result_vector > PKA_RAM_BASE); + ASSERT(result_vector < (PKA_RAM_BASE + PKA_RAM_SIZE)); + + /* Verify that the operation is complete. */ + if((REG(PKA_FUNCTION) & PKA_FUNCTION_RUN) != 0) { + return PKA_STATUS_OPERATION_INPRG; + } + + /* Disable Interrupt */ + nvic_interrupt_disable(NVIC_INT_PKA); + pka_register_process_notification(NULL); + + /* Get the MSW register value. */ + regMSWVal = REG(PKA_MSW); + + /* Check to make sure that the result vector is not all zeroes. */ + if(regMSWVal & PKA_MSW_RESULT_IS_ZERO) { + return PKA_STATUS_RESULT_0; + } + + /* Get the length of the result. */ + len = ((regMSWVal & PKA_MSW_MSW_ADDRESS_M) + 1) + - ((result_vector - PKA_RAM_BASE) >> 2); + + /* Make sure that the length of the supplied result buffer is adequate + * to store the resultant. */ + if(*buffer_size < len) { + return PKA_STATUS_BUF_UNDERFLOW; + } + + /* Copy the resultant length. */ + *buffer_size = len; + + /* Copy the result from vector C into the pResult. */ + for(i = 0; i < *buffer_size; i++) { + buffer[i] = REG(result_vector + 4 * i); + } + + return PKA_STATUS_SUCCESS; +} +/** @} */ + diff --git a/cpu/cc2538/dev/bignum-driver.h b/cpu/cc2538/dev/bignum-driver.h new file mode 100644 index 000000000..7cc646a84 --- /dev/null +++ b/cpu/cc2538/dev/bignum-driver.h @@ -0,0 +1,462 @@ +/* + * Original file: + * Copyright (C) 2013 Texas Instruments Incorporated - http://www.ti.com/ + * All rights reserved. + * + * Port to Contiki: + * Authors: Andreas Dröscher + * Hu Luo + * Hossein Shafagh + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + */ +/** + * \addtogroup cc2538-pka + * @{ + * + * \defgroup cc2538-bignum cc2538 BigNum math function driver + * + * Driver for the cc2538 BigNum math functions of the PKC engine + * @{ + * + * \file + * Header file for the cc2538 BigNum driver + * + * bignum_subtract_start bignum_subtract_get_result (subtraction) + * bignum_add_start bignum_add_get_result (addition) + * bignum_mod_start bignum_mod_get_result (modulo) + * bignum_exp_mod_start bignum_exp_mod_get_result (modular exponentiation operation) + * bignum_inv_mod_start bignum_inv_mod_get_result (inverse modulo operation) + * bignum_mul_start bignum_mul_get_result (multiplication) + * bignum_divide_start bignum_divide_get_result (division) + * bignum_cmp_start bignum_cmp_get_result (comparison) + */ +#ifndef BIGNUM_DRIVER_H_ +#define BIGNUM_DRIVER_H_ + +#include "contiki.h" +#include "pka.h" + +#include + +/** @} */ +/*---------------------------------------------------------------------------*/ +/** \brief Starts the big number modulus operation. + * + * \param number Pointer to the big number on which modulo operation + * needs to be carried out. + * \param number_size Size of the big number \sa number in 32-bit word. + * \param modulus Pointer to the divisor. + * \param modulus_size Size of the divisor \sa modulus. + * \param result_vector Pointer to the result vector location + * which will be set by this function. + * \param process Process to be polled upon completion of the + * operation, or \c NULL + * + * This function starts the modulo operation on the big num \sa number + * using the divisor \sa modulus. The PKA RAM location where the result + * will be available is stored in \sa result_vector. + * + * \retval PKA_STATUS_SUCCESS if successful in starting the operation. + * \retval PKA_STATUS_OPERATION_INPRG if the PKA hw module is busy doing + * some other operation. + */ +uint8_t bignum_mod_start(const uint32_t *number, + const uint8_t number_size, + const uint32_t *modulus, + const uint8_t modulus_size, + uint32_t *result_vector, + struct process *process); + +/** \brief Gets the result of the big number modulus operation. + * + * \param buffer Pointer to buffer where the result needs to + * be stored. + * \param buffer_size Size of the provided buffer in 32 bit size word. + * \param result_vector Address of the result location which + * was provided by the start function \sa PKABigNumModStart(). + * + * This function gets the result of the big number modulus operation which was + * previously started using the function \sa PKABigNumModStart(). + * + * \retval PKA_STATUS_SUCCESS if successful. + * \retval PKA_STATUS_OPERATION_INPRG if the PKA hw module is busy doing + * the operation. + * \retval PKA_STATUS_RESULT_0 if the result is all zeroes. + * \retval PKA_STATUS_BUF_UNDERFLOW if the \e size is less than the length + * of the result. + */ +uint8_t bignum_mod_get_result(uint32_t *buffer, + const uint8_t buffer_size, + const uint32_t result_vector); + +/** \brief Starts the comparison of two big numbers. + * + * \param number1 Pointer to the first big number. + * \param number2 Pointer to the second big number. + * \param size Size of the big number in 32 bit size word. + * \param process Process to be polled upon completion of the + * operation, or \c NULL + * + * This function starts the comparison of two big numbers pointed by + * \e number1 and \e number2. + * Note this function expects the size of the two big numbers equal. + * + * \retval PKA_STATUS_SUCCESS if successful in starting the operation. + * \retval PKA_STATUS_OPERATION_INPRG if the PKA hw module is busy doing + * some other operation. + */ +uint8_t bignum_cmp_start(const uint32_t *number1, + const uint32_t *number2, + uint8_t size, + struct process *process); + +/** \brief Gets the result of the comparison operation of two big numbers. + * + * This function provides the results of the comparison of two big numbers + * which was started using the \sa PKABigNumCmpStart(). + * + * \retval PKA_STATUS_OPERATION_INPRG if the operation is in progress. + * \retval PKA_STATUS_SUCCESS if the two big numbers are equal. + * \retval PKA_STATUS_A_GR_B if the first number is greater than the second. + * \retval PKA_STATUS_A_LT_B if the first number is less than the second. + */ +uint8_t bignum_cmp_get_result(void); + +/** \brief Starts the big number inverse modulo operation. + * + * \param number Pointer to the buffer containing the big number + * (dividend). + * \param number_size Size of the \e number in 32 bit word. + * \param modulus Pointer to the buffer containing the modulus. + * \param modulus_size Size of the modulus in 32 bit word. + * \param result_vector Pointer to the result vector location + * which will be set by this function. + * \param process Process to be polled upon completion of the + * operation, or \c NULL + * + * This function starts the the inverse modulo operation on \e number + * using the divisor \e modulus. + * + * \retval PKA_STATUS_SUCCESS if successful in starting the operation. + * \retval PKA_STATUS_OPERATION_INPRG if the PKA hw module is busy doing + * some other operation. + */ +uint8_t bignum_inv_mod_start(const uint32_t *number, + const uint8_t number_size, + const uint32_t *modulus, + const uint8_t modulus_size, + uint32_t *result_vector, + struct process *process); + +/** \brief Gets the result of the big number inverse modulo operation. + * + * \param buffer Pointer to buffer where the result needs to be + * stored. + * \param buffer_size Size of the provided buffer in 32 bit size + * word. + * \param result_vector Address of the result location which + * was provided by the start function \sa PKABigNumInvModStart(). + * + * This function gets the result of the big number inverse modulo operation + * previously started using the function \sa PKABigNumInvModStart(). + * + * \retval PKA_STATUS_SUCCESS if the operation is successful. + * \retval PKA_STATUS_OPERATION_INPRG if the PKA hw module is busy performing + * the operation. + * \retval PKA_STATUS_RESULT_0 if the result is all zeroes. + * \retval PKA_STATUS_BUF_UNDERFLOW if the length of the provided buffer is less + * then the result. + */ +uint8_t bignum_inv_mod_get_result(uint32_t *buffer, + const uint8_t buffer_size, + const uint32_t result_vector); + +/** \brief Starts the big number multiplication. + * + * \param multiplicand Pointer to the buffer containing the big + * number multiplicand. + * \param multiplicand_size Size of the multiplicand in 32-bit word. + * \param multiplier Pointer to the buffer containing the big + * number multiplier. + * \param multiplier_size Size of the multiplier in 32-bit word. + * \param result_vector Pointer to the result vector location + * which will be set by this function. + * \param process Process to be polled upon completion of the + * operation, or \c NULL + * + * This function starts the multiplication of the two big numbers. + * + * \retval PKA_STATUS_SUCCESS if successful in starting the operation. + * \retval PKA_STATUS_OPERATION_INPRG if the PKA hw module is busy doing + * some other operation. + */ +uint8_t bignum_mul_start(const uint32_t *multiplicand, + const uint8_t multiplicand_size, + const uint32_t *multiplier, + const uint8_t multiplier_size, + uint32_t *result_vector, + struct process *process); + +/** \brief Gets the results of the big number multiplication. + * + * \param buffer Pointer to buffer where the result needs to be stored. + * \param buffer_size Address of the variable containing the length of the + * buffer. After the operation, the actual length of the resultant is + * stored at this address. + * \param result_vector Address of the result location which + * was provided by the start function \sa PKABigNumMultiplyStart(). + * + * This function gets the result of the multiplication of two big numbers + * operation previously started using the function \sa + * PKABigNumMultiplyStart(). + * + * \retval PKA_STATUS_SUCCESS if the operation is successful. + * \retval PKA_STATUS_OPERATION_INPRG if the PKA hw module is busy performing + * the operation. + * \retval PKA_STATUS_RESULT_0 if the result is all zeroes. + * \retval PKA_STATUS_FAILURE if the operation is not successful. + * \retval PKA_STATUS_BUF_UNDERFLOW if the length of the provided buffer is less + * then the length of the result. + */ +uint8_t bignum_mul_get_result(uint32_t *buffer, + uint32_t *buffer_size, + const uint32_t result_vector); + +/** \brief Starts the addition of two big number. + * + * \param number1 Pointer to the buffer containing the first big mumber. + * \param number1_size Size of the first big number in 32-bit word. + * \param number2 Pointer to the buffer containing the second big number. + * \param number2_size Size of the second big number in 32-bit word. + * \param result_vector Pointer to the result vector location + * which will be set by this function. + * \param process Process to be polled upon completion of the + * operation, or \c NULL + * + * This function starts the addition of the two big numbers. + * + * \retval PKA_STATUS_SUCCESS if successful in starting the operation. + * \retval PKA_STATUS_OPERATION_INPRG if the PKA hw module is busy doing + * some other operation. + */ +uint8_t bignum_add_start(const uint32_t *number1, + const uint8_t number1_size, + const uint32_t *number2, + const uint8_t number2_size, + uint32_t *result_vector, + struct process *process); + +/** \brief Gets the result of the addition operation on two big number. + * + * \param buffer Pointer to buffer where the result + * needs to be stored. + * \param buffer_size Address of the variable containing the length of + * the buffer. After the operation the actual length of the + * resultant is stored at this address. + * \param result_vector Address of the result location which + * was provided by the start function \sa PKABigNumAddStart(). + * + * This function gets the result of the addition operation on two big numbers, + * previously started using the function \sa PKABigNumAddStart(). + * + * \retval PKA_STATUS_SUCCESS if the operation is successful. + * \retval PKA_STATUS_OPERATION_INPRG if the PKA hw module is busy performing + * the operation. + * \retval PKA_STATUS_RESULT_0 if the result is all zeroes. + * \retval PKA_STATUS_FAILURE if the operation is not successful. + * \retval PKA_STATUS_BUF_UNDERFLOW if the length of the provided buffer is less + * then the length of the result. + */ +uint8_t bignum_add_get_result(uint32_t *buffer, + uint32_t *buffer_size, + const uint32_t result_vector); + +/** \brief Starts the substract of two big number. + * + * \param number1 Pointer to the buffer containing the first big mumber. + * \param number1_size Size of the first big number in 32-bit word. + * \param number2 Pointer to the buffer containing the second big number. + * \param number2_size Size of the second big number in 32-bit word. + * \param result_vector Pointer to the result vector location + * which will be set by this function. + * \param process Process to be polled upon completion of the + * operation, or \c NULL + * + * This function starts the substraction of the two big numbers. + * + * \retval PKA_STATUS_SUCCESS if successful in starting the operation. + * \retval PKA_STATUS_OPERATION_INPRG if the PKA hw module is busy doing + * some other operation. + */ +uint8_t bignum_subtract_start(const uint32_t *number1, + const uint8_t number1_size, + const uint32_t *number2, + const uint8_t number2_size, + uint32_t *result_vector, + struct process *process); + +/** \brief Gets the result of big number subtract. + * + * \param buffer Pointer to store the result of subtraction. + * \param buffer_size Address of the variable containing the length of the + * buffer. After the operation, the actual length of the resultant is + * stored at this address. + * \param result_vector Address of the result location which + * was provided by the start function PKABigNumSubtractStart(). + * + * This function gets the result of PKABigNumSubtractStart(). + * + * \retval PKA_STATUS_SUCCESS if the operation is successful. + * \retval PKA_STATUS_OPERATION_INPRG if the PKA hw module is busy performing + * the operation. + * \retval PKA_STATUS_RESULT_0 if the result is all zeroes. + * \retval PKA_STATUS_FAILURE if the operation is not successful. + */ +uint8_t bignum_subtract_get_result(uint32_t *buffer, + uint32_t *buffer_size, + const uint32_t result_vector); + +/** \brief Starts the big number moduluar Exponentiation operation. + * + * \param number Pointer to the Exponent on which moduluar Exponentiation operation + * needs to be carried out. + * \param number_size Size of the the Exponent number number in 32-bit word. + * \param modulus Pointer to the divisor. + * \param modulus_size Size of the divisor modulus. + * \param base Pointer to the Base. + * \param base_size Size of the divisor base. + * \param result_vector Pointer to the result vector location + * which will be set by this function. + * \param process Process to be polled upon completion of the + * operation, or \c NULL + * + * This function starts the moduluar Exponentiation operation on the base num base + * using the Exponent number and the Modulus num modulus. The PKA RAM location where the result + * will be available is stored in \sa result_vector. + * IMPORTANT = Modulus and Based should have buffers of the same length! + * + * \retval PKA_STATUS_SUCCESS if successful in starting the operation. + * \retval PKA_STATUS_OPERATION_INPRG if the PKA hw module is busy doing + * some other operation. + */ +uint8_t bignum_exp_mod_start(const uint32_t *number, + const uint8_t number_size, + const uint32_t *modulus, + const uint8_t modulus_size, + const uint32_t *base, + const uint8_t base_size, + uint32_t *result_vector, + struct process *process); + +/** \brief Gets the result of the big number modulus operation result. + * + * \param buffer Pointer to buffer where the result needs to + * be stored. + * \param buffer_size Size of the provided buffer in 32 bit size word. + * \param result_vector Address of the result location which + * was provided by the start function \sa PKABigNumExpModStart(). + * + * This function gets the result of the big number modulus operation which was + * previously started using the function \sa PKABigNumExpModStart(). + * + * \retval PKA_STATUS_SUCCESS if successful. + * \retval PKA_STATUS_OPERATION_INPRG if the PKA hw module is busy doing + * the operation. + * \retval PKA_STATUS_RESULT_0 if the result is all zeroes. + * \retval PKA_STATUS_BUF_UNDERFLOW if the \e size is less than the length + * of the result. + * + * \note + * - 0 < number_size <= Max_Len + * - 1 < modulus_size <=Max_Len + * - modulus must be odd and modulus > 232 + * - base < modulus + */ +uint8_t bignum_exp_mod_get_result(uint32_t *buffer, + const uint8_t buffer_size, + const uint32_t result_vector); + +/** \brief Starts the big number Divide. + * + * \param dividend Pointer to the buffer containing the big + * number dividend. + * \param dividend_size Size of the dividend in 32-bit word. + * \param divisor Pointer to the buffer containing the big + * number divisor. + * \param divisor_size Size of the divisor in 32-bit word. + * \param result_vector Pointer to the result vector location + * which will be set by this function. + * \param process Process to be polled upon completion of the + * operation, or \c NULL + * + * This function starts the divide of the two big numbers. + * + * \retval PKA_STATUS_SUCCESS if successful in starting the operation. + * \retval PKA_STATUS_OPERATION_INPRG if the PKA hw module is busy doing + * some other operation. + */ +uint8_t bignum_divide_start(const uint32_t *dividend, + const uint8_t dividend_size, + const uint32_t *divisor, + const uint8_t divisor_size, + uint32_t *result_vector, + struct process *process); + +/** \brief Gets the results of the big number Divide. + * + * \param buffer Pointer to buffer where the result needs to be stored. + * \param buffer_size Address of the variable containing the length of the + * buffer. After the operation, the actual length of the resultant is + * stored at this address. + * \param result_vector Address of the result location which + * was provided by the start function \sa PKABigNumMultiplyStart(). + * + * This function gets the result of the Divide of two big numbers + * operation previously started using the function \sa + * PKABigNumDivideStart(). + * + * \retval PKA_STATUS_SUCCESS if the operation is successful. + * \retval PKA_STATUS_OPERATION_INPRG if the PKA hw module is busy performing + * the operation. + * \retval PKA_STATUS_RESULT_0 if the result is all zeroes. + * \retval PKA_STATUS_FAILURE if the operation is not successful. + * \retval PKA_STATUS_BUF_UNDERFLOW if the length of the provided buffer is less + * then the length of the result. + */ +uint8_t bignum_divide_get_result(uint32_t *buffer, + uint32_t *buffer_size, + const uint32_t result_vector); + +/** @} */ + +#endif /* BIGNUM_DRIVER_H_ */ + +/** + * @} + * @} + */ diff --git a/cpu/cc2538/dev/ecc-algorithm.c b/cpu/cc2538/dev/ecc-algorithm.c new file mode 100644 index 000000000..103e35bcb --- /dev/null +++ b/cpu/cc2538/dev/ecc-algorithm.c @@ -0,0 +1,200 @@ +/* + * Copyright (c) 2014, Institute for Pervasive Computing, ETH Zurich. + * All rights reserved. + * + * Author: Andreas Dröscher + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ +/** + * \addtogroup c2538-ecc-algo + * @{ + * + * \file + * Implementation of the cc2538 ECC Algorithms + */ +#include +#include + +#include +#include + +#include "ecc-algorithm.h" +#include "ecc-driver.h" +#include "pka.h" + +#define CHECK_RESULT(...) \ + state->result = __VA_ARGS__; \ + if(state->result) { \ + printf("Line: %u Error: %u\n", __LINE__, (unsigned int)state->result); \ + PT_EXIT(&state->pt); \ + } + +PT_THREAD(ecc_compare(ecc_compare_state_t *state)) { + PT_BEGIN(&state->pt); + + CHECK_RESULT(bignum_cmp_start(state->a, state->b, state->size, state->process)); + PT_WAIT_UNTIL(&state->pt, pka_check_status()); + state->result = bignum_cmp_get_result(); + + PT_END(&state->pt); +} + +PT_THREAD(ecc_multiply(ecc_multiply_state_t *state)) { + PT_BEGIN(&state->pt); + + CHECK_RESULT(ecc_mul_start(state->secret, &state->point_in, state->curve_info, &state->rv, state->process)); + PT_WAIT_UNTIL(&state->pt, pka_check_status()); + CHECK_RESULT(ecc_mul_get_result(&state->point_out, state->rv)); + + PT_END(&state->pt); +} + +PT_THREAD(ecc_dsa_sign(ecc_dsa_sign_state_t *state)) { + /* Executed Every Time */ + uint8_t size = state->curve_info->size; + const uint32_t *ord = state->curve_info->n; + + ec_point_t point; + memcpy(point.x, state->curve_info->x, sizeof(point.x)); + memcpy(point.y, state->curve_info->y, sizeof(point.y)); + + PT_BEGIN(&state->pt); + + /* Invert k_e mod n */ + CHECK_RESULT(bignum_inv_mod_start(state->k_e, size, ord, size, &state->rv, state->process)); + PT_WAIT_UNTIL(&state->pt, pka_check_status()); + CHECK_RESULT(bignum_inv_mod_get_result(state->k_e_inv, size, state->rv)); + + /* Calculate Point R = K_e * GeneratorPoint */ + CHECK_RESULT(ecc_mul_start(state->k_e, &point, state->curve_info, &state->rv, state->process)); + PT_WAIT_UNTIL(&state->pt, pka_check_status()); + CHECK_RESULT(ecc_mul_get_result(&state->point_r, state->rv)); + + /* Calculate signature using big math functions + * d*r (r is the x coordinate of PointR) */ + CHECK_RESULT(bignum_mul_start(state->secret, size, state->point_r.x, size, &state->rv, state->process)); + PT_WAIT_UNTIL(&state->pt, pka_check_status()); + state->len = 24; + CHECK_RESULT(bignum_mul_get_result(state->signature_s, &state->len, state->rv)); + + /* d*r mod n */ + CHECK_RESULT(bignum_mod_start(state->signature_s, state->len, ord, size, &state->rv, state->process)); + PT_WAIT_UNTIL(&state->pt, pka_check_status()); + CHECK_RESULT(bignum_mod_get_result(state->signature_s, size, state->rv)); + + /* hash + d*r */ + CHECK_RESULT(bignum_add_start(state->hash, size, state->signature_s, size, &state->rv, state->process)); + PT_WAIT_UNTIL(&state->pt, pka_check_status()); + state->len = 24; + CHECK_RESULT(bignum_add_get_result(state->signature_s, &state->len, state->rv)); + + /* hash + d*r mod n */ + CHECK_RESULT(bignum_mod_start(state->signature_s, state->len, ord, size, &state->rv, state->process)); + PT_WAIT_UNTIL(&state->pt, pka_check_status()); + CHECK_RESULT(bignum_mod_get_result(state->signature_s, size, state->rv)); + + /* k_e_inv * (hash + d*r) */ + CHECK_RESULT(bignum_mul_start(state->k_e_inv, size, state->signature_s, size, &state->rv, state->process)); + PT_WAIT_UNTIL(&state->pt, pka_check_status()); + state->len = 24; + CHECK_RESULT(bignum_mul_get_result(state->signature_s, &state->len, state->rv)); + + /* k_e_inv * (hash + d*r) mod n */ + CHECK_RESULT(bignum_mod_start(state->signature_s, state->len, ord, size, &state->rv, state->process)); + PT_WAIT_UNTIL(&state->pt, pka_check_status()); + CHECK_RESULT(bignum_mod_get_result(state->signature_s, size, state->rv)); + + PT_END(&state->pt); +} + +PT_THREAD(ecc_dsa_verify(ecc_dsa_verify_state_t *state)) { + /* Executed Every Time */ + uint8_t size = state->curve_info->size; + const uint32_t *ord = state->curve_info->n; + + ec_point_t point; + memcpy(point.x, state->curve_info->x, sizeof(point.x)); + memcpy(point.y, state->curve_info->y, sizeof(point.y)); + + PT_BEGIN(&state->pt); + + /* Invert s mod n */ + CHECK_RESULT(bignum_inv_mod_start(state->signature_s, size, ord, size, &state->rv, state->process)); + PT_WAIT_UNTIL(&state->pt, pka_check_status()); + CHECK_RESULT(bignum_inv_mod_get_result(state->s_inv, size, state->rv)); + + /* Calculate u1 = s_inv * hash */ + CHECK_RESULT(bignum_mul_start(state->s_inv, size, state->hash, size, &state->rv, state->process)); + PT_WAIT_UNTIL(&state->pt, pka_check_status()); + state->len = 24; + CHECK_RESULT(bignum_mul_get_result(state->u1, &state->len, state->rv)); + + /* Calculate u1 = s_inv * hash mod n */ + CHECK_RESULT(bignum_mod_start(state->u1, state->len, ord, size, &state->rv, state->process)); + PT_WAIT_UNTIL(&state->pt, pka_check_status()); + CHECK_RESULT(bignum_mod_get_result(state->u1, size, state->rv)); + + /* Calculate u2 = s_inv * r */ + CHECK_RESULT(bignum_mul_start(state->s_inv, size, state->signature_r, size, &state->rv, state->process)); + PT_WAIT_UNTIL(&state->pt, pka_check_status()); + state->len = 24; + CHECK_RESULT(bignum_mul_get_result(state->u2, &state->len, state->rv)); + + /* Calculate u2 = s_inv * r mod n */ + CHECK_RESULT(bignum_mod_start(state->u2, state->len, ord, size, &state->rv, state->process)); + PT_WAIT_UNTIL(&state->pt, pka_check_status()); + CHECK_RESULT(bignum_mod_get_result(state->u2, size, state->rv)); + + /* Calculate p1 = u1 * A */ + CHECK_RESULT(ecc_mul_start(state->u1, &point, state->curve_info, &state->rv, state->process)); + PT_WAIT_UNTIL(&state->pt, pka_check_status()); + CHECK_RESULT(ecc_mul_get_result(&state->p1, state->rv)); + + /* Calculate p2 = u1 * B */ + CHECK_RESULT(ecc_mul_start(state->u2, &state->public, state->curve_info, &state->rv, state->process)); + PT_WAIT_UNTIL(&state->pt, pka_check_status()); + CHECK_RESULT(ecc_mul_get_result(&state->p2, state->rv)); + + /* Calculate P = p1 + p2 */ + CHECK_RESULT(ecc_add_start(&state->p1, &state->p2, state->curve_info, &state->rv, state->process)); + PT_WAIT_UNTIL(&state->pt, pka_check_status()); + CHECK_RESULT(ecc_add_get_result(&state->p1, state->rv)); + + /* Verify Result */ + CHECK_RESULT(bignum_cmp_start(state->signature_r, state->p1.x, size, state->process)); + PT_WAIT_UNTIL(&state->pt, pka_check_status()); + state->result = bignum_cmp_get_result(); + if((state->result == PKA_STATUS_A_GR_B) || (state->result == PKA_STATUS_A_LT_B)) { + state->result = PKA_STATUS_SIGNATURE_INVALID; + } + + PT_END(&state->pt); +} + +/** + * @} + * @} + */ diff --git a/cpu/cc2538/dev/ecc-algorithm.h b/cpu/cc2538/dev/ecc-algorithm.h new file mode 100644 index 000000000..31f07ec2e --- /dev/null +++ b/cpu/cc2538/dev/ecc-algorithm.h @@ -0,0 +1,178 @@ +/* + * Copyright (c) 2014, Institute for Pervasive Computing, ETH Zurich. + * All rights reserved. + * + * Author: Andreas Dröscher + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ +/** + * \addtogroup cc2538-ecc + * @{ + * + * \defgroup cc2538-ecc-algo cc2538 ECC Algorithms + * + * This is a implementation of ECDH, ECDSA sign and ECDSA verify. It + * uses ecc-driver to communicate with the PKA. It uses continuations + * to free the main CPU / thread while the PKA is calculating. + * + * \note + * Only one request can be processed at a time. + * Maximal supported key length is 384bit (12 words). + * @{ + * + * \file + * Header file for the cc2538 ECC Algorithms + */ +#ifndef ECC_ALGORITHM_H_ +#define ECC_ALGORITHM_H_ + +#include "bignum-driver.h" +#include "ecc-driver.h" + +typedef struct { + /* Containers for the State */ + struct pt pt; + struct process *process; + + /* Input Variables */ + uint32_t a[12]; /**< Left Number */ + uint32_t b[12]; /**< Right Number */ + uint8_t size; /**< Length of a and b */ + + /* Output Variables */ + uint8_t result; /**< Result Code */ +} ecc_compare_state_t; + +/** + * \brief Do a compare of two big numbers + * + * This function can be used for ECDH as well as + * Calculating a Public Key for ECDSA + */ +PT_THREAD(ecc_compare(ecc_compare_state_t *state)); + +typedef struct { + /* Containers for the State */ + struct pt pt; + struct process *process; + + /* Input Variables */ + ecc_curve_info_t *curve_info; /**< Curve defining the CyclicGroup */ + ec_point_t point_in; /**< Generator Point */ + uint32_t secret[12]; /**< Secret */ + + /* Variables Holding intermediate data (initialized/used internally) */ + uint32_t rv; /**< Address of Next Result in PKA SRAM */ + + /* Output Variables */ + uint8_t result; /**< Result Code */ + ec_point_t point_out; /**< Generated Point */ +} ecc_multiply_state_t; + +/** + * \brief Do a Multiplication on a EC + * + * This function can be used for ECDH as well as + * Calculating a Public Key for ECDSA + */ +PT_THREAD(ecc_multiply(ecc_multiply_state_t *state)); + +typedef struct { + /* Containers for the State */ + struct pt pt; + struct process *process; + + /* Input Variables */ + ecc_curve_info_t *curve_info; /**< Curve defining the CyclicGroup */ + uint32_t secret[12]; /**< Secret Key */ + uint32_t k_e[12]; /**< Ephemeral Key */ + uint32_t hash[12]; /**< Hash to be signed */ + + /* Variables Holding intermediate data (initialized/used internally) */ + uint32_t rv; /**< Address of Next Result in PKA SRAM */ + uint32_t k_e_inv[12]; /**< Inverted ephemeral Key */ + uint32_t len; /**< Length of intermediate Result */ + + /* Output Variables */ + uint8_t result; /**< Result Code */ + ec_point_t point_r; /**< Signature R (x coordinate) */ + uint32_t signature_s[24]; /**< Signature S */ +} ecc_dsa_sign_state_t; + +/** + * \brief Sign a Hash + * + * This function has to be called several times until the + * pt state is EXIT + * If the result code is 0 (SUCCESS) the signature can be + * read from point_r and signature_s + */ +PT_THREAD(ecc_dsa_sign(ecc_dsa_sign_state_t *state)); + +typedef struct { + /* Containers for the State */ + struct pt pt; + struct process *process; + + /* Input Variables */ + ecc_curve_info_t *curve_info; /**< Curve defining the CyclicGroup */ + uint32_t signature_r[12]; /**< Signature R */ + uint32_t signature_s[12]; /**< Signature S */ + uint32_t hash[12]; /**< Hash to be signed */ + ec_point_t public; /**< Signature R (x coordinate) */ + + /* Variables Holding intermediate data (initialized/used internally) */ + uint32_t rv; /**< Address of Next Result in PKA SRAM */ + uint32_t s_inv[12]; /**< Inverted ephemeral Key */ + uint32_t u1[24]; /**< Intermediate result */ + uint32_t u2[24]; /**< Intermediate result */ + ec_point_t p1; /**< Intermediate result */ + ec_point_t p2; /**< Intermediate result */ + uint32_t len; /**< Length of intermediate Result */ + + /* Output Variables */ + uint8_t result; /**< Result Code */ +} ecc_dsa_verify_state_t; + +/** + * \brief Verify Signature + * + * This function has to be called several times until the + * pt state is EXIT + * If the result code is 0 (SUCCESS) the verification + * was success full. + * \note some error codes signal internal errors + * and others signal falls signatures. + */ +PT_THREAD(ecc_dsa_verify(ecc_dsa_verify_state_t *state)); + +#endif /* ECC_ALGORITHM_H_ */ + +/** + * @} + * @} + */ + diff --git a/cpu/cc2538/dev/ecc-curve.c b/cpu/cc2538/dev/ecc-curve.c new file mode 100644 index 000000000..bc3e9e8c6 --- /dev/null +++ b/cpu/cc2538/dev/ecc-curve.c @@ -0,0 +1,91 @@ +/* + * Copyright (c) 2014, Institute for Pervasive Computing, ETH Zurich. + * All rights reserved. + * + * Author: Andreas Dröscher + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ +/** + * \addtogroup c2538-ecc-curves + * @{ + */ +#include +#include + +/* [NIST P-256, X9.62 prime256v1] */ +static const uint32_t nist_p_256_p[8] = { 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, + 0x00000000, 0x00000000, 0x00000001, 0xFFFFFFFF }; +static const uint32_t nist_p_256_n[8] = { 0xFC632551, 0xF3B9CAC2, 0xA7179E84, 0xBCE6FAAD, + 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0xFFFFFFFF }; +static const uint32_t nist_p_256_a[8] = { 0xFFFFFFFC, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, + 0x00000000, 0x00000000, 0x00000001, 0xFFFFFFFF }; +static const uint32_t nist_p_256_b[8] = { 0x27D2604B, 0x3BCE3C3E, 0xCC53B0F6, 0x651D06B0, + 0x769886BC, 0xB3EBBD55, 0xAA3A93E7, 0x5AC635D8 }; +static const uint32_t nist_p_256_x[8] = { 0xD898C296, 0xF4A13945, 0x2DEB33A0, 0x77037D81, + 0x63A440F2, 0xF8BCE6E5, 0xE12C4247, 0x6B17D1F2 }; +static const uint32_t nist_p_256_y[8] = { 0x37BF51F5, 0xCBB64068, 0x6B315ECE, 0x2BCE3357, + 0x7C0F9E16, 0x8EE7EB4A, 0xFE1A7F9B, 0x4FE342E2 }; + +ecc_curve_info_t nist_p_256 = { + .name = "NIST P-256", + .size = 8, + .prime = nist_p_256_p, + .n = nist_p_256_n, + .a = nist_p_256_a, + .b = nist_p_256_b, + .x = nist_p_256_x, + .y = nist_p_256_y +}; + +/* [NIST P-192, X9.62 prime192v1] */ +static const uint32_t nist_p_192_p[6] = { 0xffffffff, 0xffffffff, 0xfffffffe, 0xffffffff, + 0xffffffff, 0xffffffff }; +static const uint32_t nist_p_192_a[6] = { 0xfffffffc, 0xffffffff, 0xfffffffe, 0xffffffff, + 0xffffffff, 0xffffffff }; +static const uint32_t nist_p_192_b[6] = { 0xc146b9b1, 0xfeb8deec, 0x72243049, 0x0fa7e9ab, + 0xe59c80e7, 0x64210519 }; +static const uint32_t nist_p_192_x[6] = { 0x82ff1012, 0xf4ff0afd, 0x43a18800, 0x7cbf20eb, + 0xb03090f6, 0x188da80e }; +static const uint32_t nist_p_192_y[6] = { 0x1e794811, 0x73f977a1, 0x6b24cdd5, 0x631011ed, + 0xffc8da78, 0x07192b95 }; +static const uint32_t nist_p_192_n[6] = { 0xb4d22831, 0x146bc9b1, 0x99def836, 0xffffffff, + 0xffffffff, 0xffffffff }; + +ecc_curve_info_t nist_p_192 = { + .name = "NIST P-192", + .size = 6, + .prime = nist_p_192_p, + .n = nist_p_192_n, + .a = nist_p_192_a, + .b = nist_p_192_b, + .x = nist_p_192_x, + .y = nist_p_192_y +}; + +/** + * @} + * @} + */ diff --git a/cpu/cc2538/dev/ecc-curve.h b/cpu/cc2538/dev/ecc-curve.h new file mode 100644 index 000000000..66c050a08 --- /dev/null +++ b/cpu/cc2538/dev/ecc-curve.h @@ -0,0 +1,65 @@ +/* + * Original file: + * Copyright (C) 2013 Texas Instruments Incorporated - http://www.ti.com/ + * All rights reserved. + * + * Port to Contiki: + * Copyright (c) 2014 Andreas Dröscher + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + */ +/** + * \addtogroup cc2538-ecc + * @{ + * + * \defgroup cc2538-ecc-curves cc2538 NIST curves + * + * NIST curves for various key sizes + * @{ + * + * \file + * NIST curves for various key sizes + */ +#ifndef ECC_CURVE_H_ +#define ECC_CURVE_H_ + +/* + * NIST P-256, X9.62 prime256v1 + */ +ecc_curve_info_t nist_p_256; + +/* + * NIST P-192, X9.62 prime192v1 + */ +ecc_curve_info_t nist_p_192; + +#endif /* CURVE_INFO_H_ */ + +/** + * @} + * @} + */ diff --git a/cpu/cc2538/dev/ecc-driver.c b/cpu/cc2538/dev/ecc-driver.c new file mode 100644 index 000000000..89a345e14 --- /dev/null +++ b/cpu/cc2538/dev/ecc-driver.c @@ -0,0 +1,559 @@ +/* + * Original file: + * Copyright (C) 2013 Texas Instruments Incorporated - http://www.ti.com/ + * All rights reserved. + * + * Port to Contiki: + * Copyright (c) 2014 Andreas Dröscher + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + */ +/** + * \addtogroup cc2538-ecc + * @{ + * + * \file + * Implementation of the cc2538 ECC driver + */ +#include "ecc-driver.h" +#include "reg.h" +#include "dev/nvic.h" + +#define ASSERT(IF) if(!(IF)) { return PKA_STATUS_INVALID_PARAM; } + +/*---------------------------------------------------------------------------*/ +uint8_t +ecc_mul_start(uint32_t *scalar, ec_point_t *ec_point, + ecc_curve_info_t *curve, uint32_t *result_vector, + struct process *process) +{ + + uint8_t extraBuf; + uint32_t offset; + int i; + + /* Check for the arguments. */ + ASSERT(NULL != scalar); + ASSERT(NULL != ec_point); + ASSERT(NULL != ec_point->x); + ASSERT(NULL != ec_point->y); + ASSERT(NULL != curve); + ASSERT(curve->size <= PKA_MAX_CURVE_SIZE); + ASSERT(NULL != result_vector); + + offset = 0; + + /* Make sure no PKA operation is in progress. */ + if((REG(PKA_FUNCTION) & PKA_FUNCTION_RUN) != 0) { + return PKA_STATUS_OPERATION_INPRG; + } + + /* Calculate the extra buffer requirement. */ + extraBuf = 2 + curve->size % 2; + + /* Update the A ptr with the offset address of the PKA RAM location + * where the scalar will be stored. */ + REG(PKA_APTR) = offset >> 2; + + /* Load the scalar in PKA RAM. */ + for(i = 0; i < curve->size; i++) { + REG(PKA_RAM_BASE + offset + 4 * i) = *scalar++; + } + + /* Determine the offset for the next data. */ + offset += 4 * (i + (curve->size % 2)); + + /* Update the B ptr with the offset address of the PKA RAM location + * where the curve parameters will be stored. */ + REG(PKA_BPTR) = offset >> 2; + + /* Write curve parameter 'p' as 1st part of vector B immediately + * following vector A at PKA RAM */ + for(i = 0; i < curve->size; i++) { + REG(PKA_RAM_BASE + offset + 4 * i) = (uint32_t)curve->prime[i]; + } + + /* Determine the offset for the next data. */ + offset += 4 * (i + extraBuf); + + /* Copy curve parameter 'a' in PKA RAM. */ + for(i = 0; i < curve->size; i++) { + REG(PKA_RAM_BASE + offset + 4 * i) = (uint32_t)curve->a[i]; + } + + /* Determine the offset for the next data. */ + offset += 4 * (i + extraBuf); + + /* Copy curve parameter 'b' in PKA RAM. */ + for(i = 0; i < curve->size; i++) { + REG(PKA_RAM_BASE + offset + 4 * i) = (uint32_t)curve->b[i]; + } + + /* Determine the offset for the next data. */ + offset += 4 * (i + extraBuf); + + /* Update the C ptr with the offset address of the PKA RAM location + * where the x, y will be stored. */ + REG(PKA_CPTR) = offset >> 2; + + /* Write elliptic curve point.x co-ordinate value. */ + for(i = 0; i < curve->size; i++) { + REG(PKA_RAM_BASE + offset + 4 * i) = ec_point->x[i]; + } + + /* Determine the offset for the next data. */ + offset += 4 * (i + extraBuf); + + /* Write elliptic curve point.y co-ordinate value. */ + for(i = 0; i < curve->size; i++) { + REG(PKA_RAM_BASE + offset + 4 * i) = ec_point->y[i]; + } + + /* Determine the offset for the next data. */ + offset += 4 * (i + extraBuf); + + /* Update the result location. */ + *result_vector = PKA_RAM_BASE + offset; + + /* Load D ptr with the result location in PKA RAM. */ + REG(PKA_DPTR) = offset >> 2; + + /* Load length registers. */ + REG(PKA_ALENGTH) = curve->size; + REG(PKA_BLENGTH) = curve->size; + + /* set the PKA function to ECC-MULT and start the operation. */ + REG(PKA_FUNCTION) = 0x0000D000; + + /* Enable Interrupt */ + if(process != NULL) { + pka_register_process_notification(process); + nvic_interrupt_unpend(NVIC_INT_PKA); + nvic_interrupt_enable(NVIC_INT_PKA); + } + + return PKA_STATUS_SUCCESS; +} +/*---------------------------------------------------------------------------*/ +uint8_t +ecc_mul_get_result(ec_point_t *ec_point, + uint32_t result_vector) +{ + int i; + uint32_t addr; + uint32_t regMSWVal; + uint32_t len; + + /* Check for the arguments. */ + ASSERT(NULL != ec_point); + ASSERT(NULL != ec_point->x); + ASSERT(NULL != ec_point->y); + ASSERT(result_vector > PKA_RAM_BASE); + ASSERT(result_vector < (PKA_RAM_BASE + PKA_RAM_SIZE)); + + /* Verify that the operation is completed. */ + if((REG(PKA_FUNCTION) & PKA_FUNCTION_RUN) != 0) { + return PKA_STATUS_OPERATION_INPRG; + } + + /* Disable Interrupt */ + nvic_interrupt_disable(NVIC_INT_PKA); + pka_register_process_notification(NULL); + + if(REG(PKA_SHIFT) == 0x00000000) { + /* Get the MSW register value. */ + regMSWVal = REG(PKA_MSW); + + /* Check to make sure that the result vector is not all zeroes. */ + if(regMSWVal & PKA_MSW_RESULT_IS_ZERO) { + return PKA_STATUS_RESULT_0; + } + + /* Get the length of the result */ + len = ((regMSWVal & PKA_MSW_MSW_ADDRESS_M) + 1) + - ((result_vector - PKA_RAM_BASE) >> 2); + + addr = result_vector; + + /* copy the x co-ordinate value of the result from vector D into + * the \e ec_point. */ + for(i = 0; i < len; i++) { + ec_point->x[i] = REG(addr + 4 * i); + } + + addr += 4 * (i + 2 + len % 2); + + /* copy the y co-ordinate value of the result from vector D into + * the \e ec_point. */ + for(i = 0; i < len; i++) { + ec_point->y[i] = REG(addr + 4 * i); + } + + return PKA_STATUS_SUCCESS; + } else { + return PKA_STATUS_FAILURE; + } +} +/*---------------------------------------------------------------------------*/ +uint8_t +ecc_mul_gen_pt_start(uint32_t *scalar, ecc_curve_info_t *curve, + uint32_t *result_vector, struct process *process) +{ + uint8_t extraBuf; + uint32_t offset; + int i; + + /* check for the arguments. */ + ASSERT(NULL != scalar); + ASSERT(NULL != curve); + ASSERT(curve->size <= PKA_MAX_CURVE_SIZE); + ASSERT(NULL != result_vector); + + offset = 0; + + /* Make sure no operation is in progress. */ + if((REG(PKA_FUNCTION) & PKA_FUNCTION_RUN) != 0) { + return PKA_STATUS_OPERATION_INPRG; + } + + /* Calculate the extra buffer requirement. */ + extraBuf = 2 + curve->size % 2; + + /* Update the A ptr with the offset address of the PKA RAM location + * where the scalar will be stored. */ + REG(PKA_APTR) = offset >> 2; + + /* Load the scalar in PKA RAM. */ + for(i = 0; i < curve->size; i++) { + REG(PKA_RAM_BASE + offset + 4 * i) = *scalar++; + } + + /* Determine the offset in PKA RAM for the next data. */ + offset += 4 * (i + (curve->size % 2)); + + /* Update the B ptr with the offset address of the PKA RAM location + * where the curve parameters will be stored. */ + REG(PKA_BPTR) = offset >> 2; + + /* Write curve parameter 'p' as 1st part of vector B. */ + for(i = 0; i < curve->size; i++) { + REG(PKA_RAM_BASE + offset + 4 * i) = (uint32_t)curve->prime[i]; + } + + /* Determine the offset in PKA RAM for the next data. */ + offset += 4 * (i + extraBuf); + + /* Write curve parameter 'a' in PKA RAM. */ + for(i = 0; i < curve->size; i++) { + REG(PKA_RAM_BASE + offset + 4 * i) = (uint32_t)curve->a[i]; + } + + /* Determine the offset in PKA RAM for the next data. */ + offset += 4 * (i + extraBuf); + + /* write curve parameter 'b' in PKA RAM. */ + for(i = 0; i < curve->size; i++) { + REG(PKA_RAM_BASE + offset + 4 * i) = (uint32_t)curve->b[i]; + } + + /* Determine the offset in PKA RAM for the next data. */ + offset += 4 * (i + extraBuf); + + /* Update the C ptr with the offset address of the PKA RAM location + * where the x, y will be stored. */ + REG(PKA_CPTR) = offset >> 2; + + /* Write x co-ordinate value of the Generator point in PKA RAM. */ + for(i = 0; i < curve->size; i++) { + REG(PKA_RAM_BASE + offset + 4 * i) = (uint32_t)curve->x[i]; + } + + /* Determine the offset in PKA RAM for the next data. */ + offset += 4 * (i + extraBuf); + + /* Write y co-ordinate value of the Generator point in PKA RAM. */ + for(i = 0; i < curve->size; i++) { + REG(PKA_RAM_BASE + offset + 4 * i) = (uint32_t)curve->y[i]; + } + + /* Determine the offset in PKA RAM for the next data. */ + offset += 4 * (i + extraBuf); + + /* Update the result location. */ + *result_vector = PKA_RAM_BASE + offset; + + /* Load D ptr with the result location in PKA RAM. */ + REG(PKA_DPTR) = offset >> 2; + + /* Load length registers. */ + REG(PKA_ALENGTH) = curve->size; + REG(PKA_BLENGTH) = curve->size; + + /* Set the PKA function to ECC-MULT and start the operation. */ + REG(PKA_FUNCTION) = 0x0000D000; + + /* Enable Interrupt */ + if(process != NULL) { + pka_register_process_notification(process); + nvic_interrupt_unpend(NVIC_INT_PKA); + nvic_interrupt_enable(NVIC_INT_PKA); + } + + return PKA_STATUS_SUCCESS; +} +/*---------------------------------------------------------------------------*/ +uint8_t +ecc_mul_gen_pt_get_result(ec_point_t *ec_point, + uint32_t result_vector) +{ + + int i; + uint32_t regMSWVal; + uint32_t addr; + uint32_t len; + + /* Check for the arguments. */ + ASSERT(NULL != ec_point); + ASSERT(NULL != ec_point->x); + ASSERT(NULL != ec_point->y); + ASSERT(result_vector > PKA_RAM_BASE); + ASSERT(result_vector < (PKA_RAM_BASE + PKA_RAM_SIZE)); + + /* Verify that the operation is completed. */ + if((REG(PKA_FUNCTION) & PKA_FUNCTION_RUN) != 0) { + return PKA_STATUS_OPERATION_INPRG; + } + + /* Disable Interrupt */ + nvic_interrupt_disable(NVIC_INT_PKA); + pka_register_process_notification(NULL); + + if(REG(PKA_SHIFT) == 0x00000000) { + /* Get the MSW register value. */ + regMSWVal = REG(PKA_MSW); + + /* Check to make sure that the result vector is not all zeroes. */ + if(regMSWVal & PKA_MSW_RESULT_IS_ZERO) { + return PKA_STATUS_RESULT_0; + } + + /* Get the length of the result. */ + len = ((regMSWVal & PKA_MSW_MSW_ADDRESS_M) + 1) + - ((result_vector - PKA_RAM_BASE) >> 2); + + addr = result_vector; + + /* Copy the x co-ordinate value of the result from vector D into the + * EC point. */ + for(i = 0; i < len; i++) { + ec_point->x[i] = REG(addr + 4 * i); + } + + addr += 4 * (i + 2 + len % 2); + + /* Copy the y co-ordinate value of the result from vector D into the + * EC point. */ + for(i = 0; i < len; i++) { + ec_point->y[i] = REG(addr + 4 * i); + } + + return PKA_STATUS_SUCCESS; + } else { + return PKA_STATUS_FAILURE; + } +} +/*---------------------------------------------------------------------------*/ +uint8_t +ecc_add_start(ec_point_t *ec_point1, ec_point_t *ec_point2, + ecc_curve_info_t *curve, uint32_t *result_vector, + struct process *process) +{ + + uint8_t extraBuf; + uint32_t offset; + int i; + + /* Check for the arguments. */ + ASSERT(NULL != ec_point1); + ASSERT(NULL != ec_point1->x); + ASSERT(NULL != ec_point1->y); + ASSERT(NULL != ec_point2); + ASSERT(NULL != ec_point2->x); + ASSERT(NULL != ec_point2->y); + ASSERT(NULL != curve); + ASSERT(NULL != result_vector); + + offset = 0; + + /* Make sure no operation is in progress. */ + if((REG(PKA_FUNCTION) & PKA_FUNCTION_RUN) != 0) { + return PKA_STATUS_OPERATION_INPRG; + } + + /* Calculate the extra buffer requirement. */ + extraBuf = 2 + curve->size % 2; + + /* Update the A ptr with the offset address of the PKA RAM location + * where the first ecPt will be stored. */ + REG(PKA_APTR) = offset >> 2; + + /* Load the x co-ordinate value of the first EC point in PKA RAM. */ + for(i = 0; i < curve->size; i++) { + REG(PKA_RAM_BASE + offset + 4 * i) = ec_point1->x[i]; + } + + /* Determine the offset in PKA RAM for the next data. */ + offset += 4 * (i + extraBuf); + + /* Load the y co-ordinate value of the first EC point in PKA RAM. */ + for(i = 0; i < curve->size; i++) { + REG(PKA_RAM_BASE + offset + 4 * i) = ec_point1->y[i]; + } + + /* Determine the offset in PKA RAM for the next data. */ + offset += 4 * (i + extraBuf); + + /* Update the B ptr with the offset address of the PKA RAM location + * where the curve parameters will be stored. */ + REG(PKA_BPTR) = offset >> 2; + + /* Write curve parameter 'p' as 1st part of vector B */ + for(i = 0; i < curve->size; i++) { + REG(PKA_RAM_BASE + offset + 4 * i) = (uint32_t)curve->prime[i]; + } + + /* Determine the offset in PKA RAM for the next data. */ + offset += 4 * (i + extraBuf); + + /* Write curve parameter 'a'. */ + for(i = 0; i < curve->size; i++) { + REG(PKA_RAM_BASE + offset + 4 * i) = (uint32_t)curve->a[i]; + } + + /* Determine the offset in PKA RAM for the next data. */ + offset += 4 * (i + extraBuf); + + /* Update the C ptr with the offset address of the PKA RAM location + * where the ecPt2 will be stored. */ + REG(PKA_CPTR) = offset >> 2; + + /* Load the x co-ordinate value of the second EC point in PKA RAM. */ + for(i = 0; i < curve->size; i++) { + REG(PKA_RAM_BASE + offset + 4 * i) = ec_point2->x[i]; + } + + /* Determine the offset in PKA RAM for the next data. */ + offset += 4 * (i + extraBuf); + + /* Load the y co-ordinate value of the second EC point in PKA RAM. */ + for(i = 0; i < curve->size; i++) { + REG(PKA_RAM_BASE + offset + 4 * i) = ec_point2->y[i]; + } + + /* Determine the offset in PKA RAM for the next data. */ + offset += 4 * (i + extraBuf); + + /* Copy the result vector location. */ + *result_vector = PKA_RAM_BASE + offset; + + /* Load D ptr with the result location in PKA RAM. */ + REG(PKA_DPTR) = offset >> 2; + + /* Load length registers. */ + REG(PKA_BLENGTH) = curve->size; + + /* Set the PKA Function to ECC-ADD and start the operation. */ + REG(PKA_FUNCTION) = 0x0000B000; + + /* Enable Interrupt */ + if(process != NULL) { + pka_register_process_notification(process); + nvic_interrupt_unpend(NVIC_INT_PKA); + nvic_interrupt_enable(NVIC_INT_PKA); + } + + return PKA_STATUS_SUCCESS; +} +/*---------------------------------------------------------------------------*/ +uint8_t +ecc_add_get_result(ec_point_t *ec_point, uint32_t result_vector) +{ + uint32_t regMSWVal; + uint32_t addr; + int i; + uint32_t len; + + /* Check for the arguments. */ + ASSERT(NULL != ec_point); + ASSERT(NULL != ec_point->x); + ASSERT(NULL != ec_point->y); + ASSERT(result_vector > PKA_RAM_BASE); + ASSERT(result_vector < (PKA_RAM_BASE + PKA_RAM_SIZE)); + + if((REG(PKA_FUNCTION) & PKA_FUNCTION_RUN) != 0) { + return PKA_STATUS_OPERATION_INPRG; + } + + /* Disable Interrupt */ + nvic_interrupt_disable(NVIC_INT_PKA); + pka_register_process_notification(NULL); + + if(REG(PKA_SHIFT) == 0x00000000) { + /* Get the MSW register value. */ + regMSWVal = REG(PKA_MSW); + + /* Check to make sure that the result vector is not all zeroes. */ + if(regMSWVal & PKA_MSW_RESULT_IS_ZERO) { + return PKA_STATUS_RESULT_0; + } + + /* Get the length of the result. */ + len = ((regMSWVal & PKA_MSW_MSW_ADDRESS_M) + 1) + - ((result_vector - PKA_RAM_BASE) >> 2); + + addr = result_vector; + + /* Copy the x co-ordinate value of result from vector D into the + * the output EC Point. */ + for(i = 0; i < len; i++) { + ec_point->x[i] = REG(addr + 4 * i); + } + + addr += 4 * (i + 2 + len % 2); + + /* Copy the y co-ordinate value of result from vector D into the + * the output EC Point. */ + for(i = 0; i < len; i++) { + ec_point->y[i] = REG(addr + 4 * i); + } + + return PKA_STATUS_SUCCESS; + } else { + return PKA_STATUS_FAILURE; + } +} +/** @} */ diff --git a/cpu/cc2538/dev/ecc-driver.h b/cpu/cc2538/dev/ecc-driver.h new file mode 100644 index 000000000..8afcc8332 --- /dev/null +++ b/cpu/cc2538/dev/ecc-driver.h @@ -0,0 +1,227 @@ +/* + * Original file: + * Copyright (C) 2013 Texas Instruments Incorporated - http://www.ti.com/ + * All rights reserved. + * + * Port to Contiki: + * Copyright (c) 2014 Andreas Dröscher + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + */ +/** + * \addtogroup cc2538-pka + * @{ + * + * \defgroup cc2538-ecc cc2538 ECC driver + * + * Driver for the cc2538 ECC mode of the PKC engine + * @{ + * + * \file + * Header file for the cc2538 ECC driver + */ +#ifndef ECC_DRIVER_H_ +#define ECC_DRIVER_H_ + +#include "contiki.h" +#include "pka.h" + +#include +/*---------------------------------------------------------------------------*/ +/** \name ECC structures + * @{ + */ +typedef struct { + const char *name; /**< Name of the curve. */ + const uint8_t size; /**< Size of the curve in 32-bit word. */ + const uint32_t *prime; /**< The prime that defines the field of the curve. */ + const uint32_t *n; /**< Order of the curve. */ + const uint32_t *a; /**< Co-efficient a of the equation. */ + const uint32_t *b; /**< co-efficient b of the equation. */ + const uint32_t *x; /**< x co-ordinate value of the generator point. */ + const uint32_t *y; /**< y co-ordinate value of the generator point. */ +} ecc_curve_info_t; + +typedef struct { + uint32_t x[12]; /**< Pointer to value of the x co-ordinate. */ + uint32_t y[12]; /**< Pointer to value of the y co-ordinate. */ +} ec_point_t; + +/** @} */ +/*---------------------------------------------------------------------------*/ +/** \name ECC functions + * \note Not all sequencer functions are implemented in this driver + * look at the CC2538 manual for a complete list. + * @{ + */ + +/** \brief Starts ECC Multiplication. + * + * \param scalar Pointer to the buffer containing the scalar + * value to be multiplied. + * \param ec_point Pointer to the structure containing the + * elliptic curve point to be multiplied. The point should be + * on the given curve. + * \param curve Pointer to the structure containing the curve + * info. + * \param result_vector Pointer to the result vector location + * which will be set by this function. + * \param process Process to be polled upon completion of the + * operation, or \c NULL + * + * This function starts the Elliptical curve cryptography (ECC) point + * multiplication operation on the EC point and the scalar value. + * + * \retval PKA_STATUS_SUCCESS if successful in starting the operation. + * \retval PKA_STATUS_OPERATION_INPRG if the PKA hw module is busy doing + * some other operation. + */ +uint8_t ecc_mul_start(uint32_t *scalar, + ec_point_t *ec_point, + ecc_curve_info_t *curve, + uint32_t *result_vector, + struct process *process); + +/** \brief Gets the result of ECC Multiplication + * + * \param ec_point Pointer to the structure where the resultant EC + * point will be stored. The callee is responsible to allocate the + * space for the ec point structure and the x and y co-ordinate as well. + * \param result_vector Address of the result location which + * was provided by the start function \sa PKAECCMultiplyStart(). + * + * This function gets the result of ecc point multiplication operation on the + * ec point and the scalar value, previously started using the function + * \sa PKAECCMultiplyStart(). + * + * \retval PKA_STATUS_SUCCESS if the operation is successful. + * \retval PKA_STATUS_OPERATION_INPRG if the PKA hw module is busy performing + * the operation. + * \retval PKA_STATUS_RESULT_0 if the result is all zeroes. + * \retval PKA_STATUS_FAILURE if the operation is not successful. + */ +uint8_t ecc_mul_get_result(ec_point_t *ec_point, + uint32_t result_vector); + +/** \brief Starts the ECC Multiplication with Generator point. + * + * \param scalar Pointer to the buffer containing the + * scalar value. + * \param curve Pointer to the structure containing the curve + * info. + * \param result_vector Pointer to the result vector location + * which will be set by this function. + * \param process Process to be polled upon completion of the + * operation, or \c NULL + * + * This function starts the ecc point multiplication operation of the + * scalar value with the well known generator point of the given curve. + * + * \retval PKA_STATUS_SUCCESS if successful in starting the operation. + * \retval PKA_STATUS_OPERATION_INPRG if the PKA hw module is busy doing + * some other operation. + */ +uint8_t ecc_mul_gen_pt_start(uint32_t *scalar, + ecc_curve_info_t *curve, + uint32_t *result_vector, + struct process *process); + +/** \brief Gets the result of ECC Multiplication with Generator point. + * + * \param ec_point Pointer to the structure where the resultant EC + * point will be stored. The callee is responsible to allocate the + * space for the ec point structure and the x and y co-ordinate as well. + * \param result_vector Address of the result location which + * was provided by the start function \sa PKAECCMultGenPtStart(). + * + * This function gets the result of ecc point multiplication operation on the + * scalar point and the known generator point on the curve, previously started + * using the function \sa PKAECCMultGenPtStart(). + * + * \retval PKA_STATUS_SUCCESS if the operation is successful. + * \retval PKA_STATUS_OPERATION_INPRG if the PKA hw module is busy performing + * the operation. + * \retval PKA_STATUS_RESULT_0 if the result is all zeroes. + * \retval PKA_STATUS_FAILURE if the operation is not successful. + */ +uint8_t ecc_mul_gen_pt_get_result(ec_point_t *ec_point, + uint32_t result_vector); + +/** \brief Starts the ECC Addition. + * + * \param ec_point1 Pointer to the structure containing the first + * ecc point. + * \param ec_point2 Pointer to the structure containing the + * second ecc point. + * \param curve Pointer to the structure containing the curve + * info. + * \param result_vector Pointer to the result vector location + * which will be set by this function. + * \param process Process to be polled upon completion of the + * operation, or \c NULL + * + * This function starts the ecc point addition operation on the + * two given ec points and generates the resultant ecc point. + * + * \retval PKA_STATUS_SUCCESS if successful in starting the operation. + * \retval PKA_STATUS_OPERATION_INPRG if the PKA hw module is busy doing + * some other operation. + */ +uint8_t ecc_add_start(ec_point_t *ec_point1, ec_point_t *ec_point2, + ecc_curve_info_t *curve, + uint32_t *result_vector, + struct process *process); + +/** \brief Gets the result of the ECC Addition + * + * \param ptOutEcPt Pointer to the structure where the resultant + * point will be stored. The callee is responsible to allocate memory, + * for the ec point structure including the memory for x and y + * co-ordinate values. + * \param ui32ResultLoc Address of the result location which + * was provided by the function \sa PKAECCAddStart(). + * + * This function gets the result of ecc point addition operation on the + * on the two given ec points, previously started using the function \sa + * PKAECCAddStart(). + * + * \retval PKA_STATUS_SUCCESS if the operation is successful. + * \retval PKA_STATUS_OPERATION_INPRG if the PKA hw module is busy performing + * the operation. + * \retval PKA_STATUS_RESULT_0 if the result is all zeroes. + * \retval PKA_STATUS_FAILURE if the operation is not successful. + */ +uint8_t ecc_add_get_result(ec_point_t *ptOutEcPt, uint32_t ui32ResultLoc); + +/** @} */ + +#endif /* ECC_DRIVER_H_ */ + +/** + * @} + * @} + */ diff --git a/cpu/cc2538/dev/pka.c b/cpu/cc2538/dev/pka.c new file mode 100644 index 000000000..b325a454e --- /dev/null +++ b/cpu/cc2538/dev/pka.c @@ -0,0 +1,128 @@ +/* + * Original file: + * Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com/ + * All rights reserved. + * + * Port to Contiki: + * Copyright (c) 2014 Andreas Dröscher + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + */ +/** + * \addtogroup cc2538-pka + * @{ + * + * \file + * Implementation of the cc2538 PKA engine driver + */ +#include "contiki.h" +#include "sys/energest.h" +#include "dev/pka.h" +#include "dev/sys-ctrl.h" +#include "dev/nvic.h" +#include "lpm.h" +#include "reg.h" + +#include +#include + +static volatile struct process *notification_process = NULL; +/*---------------------------------------------------------------------------*/ +/** \brief The PKA engine ISR + * + * This is the interrupt service routine for the PKA engine. + * + * This ISR is called at worst from PM0, so lpm_exit() does not need + * to be called. + */ +void +pka_isr(void) +{ + ENERGEST_ON(ENERGEST_TYPE_IRQ); + + nvic_interrupt_unpend(NVIC_INT_PKA); + nvic_interrupt_disable(NVIC_INT_PKA); + + if(notification_process != NULL) { + process_poll((struct process *)notification_process); + notification_process = NULL; + } + + ENERGEST_OFF(ENERGEST_TYPE_IRQ); +} +/*---------------------------------------------------------------------------*/ +static bool +permit_pm1(void) +{ + return (REG(PKA_FUNCTION) & PKA_FUNCTION_RUN) == 0; +} +/*---------------------------------------------------------------------------*/ +void +pka_init(void) +{ + volatile int i; + + lpm_register_peripheral(permit_pm1); + + pka_enable(); + + /* Reset the PKA engine */ + REG(SYS_CTRL_SRSEC) |= SYS_CTRL_SRSEC_PKA; + for(i = 0; i < 16; i++) { + REG(SYS_CTRL_SRSEC) &= ~SYS_CTRL_SRSEC_PKA; + } +} +/*---------------------------------------------------------------------------*/ +void +pka_enable(void) +{ + /* Enable the clock for the PKA engine */ + REG(SYS_CTRL_RCGCSEC) |= SYS_CTRL_RCGCSEC_PKA; + REG(SYS_CTRL_SCGCSEC) |= SYS_CTRL_SCGCSEC_PKA; + REG(SYS_CTRL_DCGCSEC) |= SYS_CTRL_DCGCSEC_PKA; +} +/*---------------------------------------------------------------------------*/ +void +pka_disable(void) +{ + /* Gate the clock for the PKA engine */ + REG(SYS_CTRL_RCGCSEC) &= ~SYS_CTRL_RCGCSEC_PKA; + REG(SYS_CTRL_SCGCSEC) &= ~SYS_CTRL_SCGCSEC_PKA; + REG(SYS_CTRL_DCGCSEC) &= ~SYS_CTRL_DCGCSEC_PKA; +} +/*---------------------------------------------------------------------------*/ +uint8_t +pka_check_status(void) +{ + return (REG(PKA_FUNCTION) & PKA_FUNCTION_RUN) == 0; +} +void +pka_register_process_notification(struct process *p) +{ + notification_process = p; +} +/** @} */ diff --git a/cpu/cc2538/dev/pka.h b/cpu/cc2538/dev/pka.h new file mode 100644 index 000000000..7a63a3d02 --- /dev/null +++ b/cpu/cc2538/dev/pka.h @@ -0,0 +1,871 @@ +/* + * Original file: + * Copyright (C) 2013 Texas Instruments Incorporated - http://www.ti.com/ + * All rights reserved. + * + * Port to Contiki: + * Copyright (c) 2014 Andreas Dröscher + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + */ +/** + * \addtogroup cc2538 + * @{ + * + * \defgroup cc2538-pka cc2538 PKA engine + * + * Driver for the cc2538 PKA engine + * @{ + * + * \file + * Header file for the cc2538 PKA engine driver + */ +#ifndef PKA_H_ +#define PKA_H_ + +#include "contiki.h" +#include + +/*---------------------------------------------------------------------------*/ +/** \name PKA memory + * @{ + */ +#define PKA_RAM_BASE 0x44006000 /**< PKA Memory Address */ +#define PKA_RAM_SIZE 0x800 /**< PKA Memory Size */ +#define PKA_MAX_CURVE_SIZE 12 /**< Define for the maximum curve + size supported by the PKA module + in 32 bit word. */ +#define PKA_MAX_LEN 12 /**< Define for the maximum length of + the big number supported by the + PKA module in 32 bit word. */ +/** @} */ +/*---------------------------------------------------------------------------*/ +/** \name PKA register offsets + * @{ + */ +#define PKA_APTR 0x44004000 /**< PKA vector A address During + execution of basic PKCP + operations, this register is + double buffered and can be + written with a new value for the + next operation; when not + written, the value remains + intact. During the execution of + sequencer-controlled complex + operations, this register may + not be written and its value is + undefined at the conclusion of + the operation. The driver + software cannot rely on the + written value to remain intact. */ +#define PKA_BPTR 0x44004004 /**< PKA vector B address During + execution of basic PKCP + operations, this register is + double buffered and can be + written with a new value for the + next operation; when not + written, the value remains + intact. During the execution of + sequencer-controlled complex + operations, this register may + not be written and its value is + undefined at the conclusion of + the operation. The driver + software cannot rely on the + written value to remain intact. */ +#define PKA_CPTR 0x44004008 /**< PKA vector C address During + execution of basic PKCP + operations, this register is + double buffered and can be + written with a new value for the + next operation; when not + written, the value remains + intact. During the execution of + sequencer-controlled complex + operations, this register may + not be written and its value is + undefined at the conclusion of + the operation. The driver + software cannot rely on the + written value to remain intact. */ +#define PKA_DPTR 0x4400400C /**< PKA vector D address During + execution of basic PKCP + operations, this register is + double buffered and can be + written with a new value for the + next operation; when not + written, the value remains + intact. During the execution of + sequencer-controlled complex + operations, this register may + not be written and its value is + undefined at the conclusion of + the operation. The driver + software cannot rely on the + written value to remain intact. */ +#define PKA_ALENGTH 0x44004010 /**< PKA vector A length During + execution of basic PKCP + operations, this register is + double buffered and can be + written with a new value for the + next operation; when not + written, the value remains + intact. During the execution of + sequencer-controlled complex + operations, this register may + not be written and its value is + undefined at the conclusion of + the operation. The driver + software cannot rely on the + written value to remain intact. */ +#define PKA_BLENGTH 0x44004014 /**< PKA vector B length During + execution of basic PKCP + operations, this register is + double buffered and can be + written with a new value for the + next operation; when not + written, the value remains + intact. During the execution of + sequencer-controlled complex + operations, this register may + not be written and its value is + undefined at the conclusion of + the operation. The driver + software cannot rely on the + written value to remain intact. */ +#define PKA_SHIFT 0x44004018 /**< PKA bit shift value For basic + PKCP operations, modifying the + contents of this register is + made impossible while the + operation is being performed. + For the ExpMod-variable and + ExpMod-CRT operations, this + register is used to indicate the + number of odd powers to use + (directly as a value in the + range 1-16). For the ModInv and + ECC operations, this register is + used to hold a completion code. */ +#define PKA_FUNCTION 0x4400401C /**< PKA function This register + contains the control bits to + start basic PKCP as well as + complex sequencer operations. + The run bit can be used to poll + for the completion of the + operation. Modifying bits [11:0] + is made impossible during the + execution of a basic PKCP + operation. During the execution + of sequencer-controlled complex + operations, this register is + modified; the run and stall + result bits are set to zero at + the conclusion, but other bits + are undefined. Attention: + Continuously reading this + register to poll the run bit is + not allowed when executing + complex sequencer operations + (the sequencer cannot access the + PKCP when this is done). Leave + at least one sysclk cycle + between poll operations. */ +#define PKA_COMPARE 0x44004020 /**< PKA compare result This + register provides the result of + a basic PKCP compare operation. + It is updated when the run bit + in the PKA_FUNCTION register is + reset at the end of that + operation. Status after a + complex sequencer operation is + unknown */ +#define PKA_MSW 0x44004024 /**< PKA most-significant-word of + result vector This register + indicates the (word) address in + the PKA RAM where the most + significant nonzero 32-bit word + of the result is stored. Should + be ignored for modulo + operations. For basic PKCP + operations, this register is + updated when the run bit in the + PKA_FUNCTION register is reset + at the end of the operation. For + the complex-sequencer controlled + operations, updating of the + final value matching the actual + result is done near the end of + the operation; note that the + result is only meaningful if no + errors were detected and that + for ECC operations, the PKA_MSW + register will provide + information for the x-coordinate + of the result point only. */ +#define PKA_DIVMSW 0x44004028 /**< PKA most-significant-word of + divide remainder This register + indicates the (32-bit word) + address in the PKA RAM where the + most significant nonzero 32-bit + word of the remainder result for + the basic divide and modulo + operations is stored. Bits [4:0] + are loaded with the bit number + of the most-significant nonzero + bit in the most-significant + nonzero word when MS one control + bit is set. For divide, modulo, + and MS one reporting, this + register is updated when the RUN + bit in the PKA_FUNCTION register + is reset at the end of the + operation. For the complex + sequencer controlled operations, + updating of bits [4:0] of this + register with the + most-significant bit location of + the actual result is done near + the end of the operation. The + result is meaningful only if no + errors were detected and that + for ECC operations; the + PKA_DIVMSW register provides + information for the x-coordinate + of the result point only. */ +#define PKA_SEQ_CTRL 0x440040C8 /**< PKA sequencer control and + status register The sequencer is + interfaced with the outside + world through a single control + and status register. With the + exception of bit [31], the + actual use of bits in the + separate sub-fields of this + register is determined by the + sequencer firmware. This + register need only be accessed + when the sequencer program is + stored in RAM. The reset value + of the RESTE bit depends upon + the option chosen for sequencer + program storage. */ +#define PKA_OPTIONS 0x440040F4 /**< PKA hardware options register + This register provides the host + with a means to determine the + hardware configuration + implemented in this PKA engine, + focused on options that have an + effect on software interacting + with the module. Note: (32 x + (1st LNME nr. of PEs + 1st LNME + FIFO RAM depth - 10)) equals the + maximum modulus vector length + (in bits) that can be handled by + the modular exponentiation and + ECC operations executed on a PKA + engine that includes an LNME. */ +#define PKA_SW_REV 0x440040F8 /**< PKA firmware revision and + capabilities register This + register allows the host access + to the internal firmware + revision number of the PKA + Engine for software driver + matching and diagnostic + purposes. This register also + contains a field that encodes + the capabilities of the embedded + firmware. The PKA_SW_REV + register is written by the + firmware within a few clock + cycles after starting up that + firmware. The hardware reset + value is zero, indicating that + the information has not been + written yet. */ +#define PKA_REVISION 0x440040FC /**< PKA hardware revision register + This register allows the host + access to the hardware revision + number of the PKA engine for + software driver matching and + diagnostic purposes. It is + always located at the highest + address in the access space of + the module and contains an + encoding of the EIP number (with + its complement as signature) for + recognition of the hardware + module. */ +/** @} */ +/*---------------------------------------------------------------------------*/ +/** \name PKA_APTR register registers bit fields + * @{ + */ +#define PKA_APTR_APTR_M 0x000007FF /**< This register specifies the + location of vector A within the + PKA RAM. Vectors are identified + through the location of their + least-significant 32-bit word. + Note that bit [0] must be zero + to ensure that the vector starts + at an 8-byte boundary. */ +#define PKA_APTR_APTR_S 0 +/** @} */ +/*---------------------------------------------------------------------------*/ +/** \name PKA_BPTR register registers bit fields + * @{ + */ +#define PKA_BPTR_BPTR_M 0x000007FF /**< This register specifies the + location of vector B within the + PKA RAM. Vectors are identified + through the location of their + least-significant 32-bit word. + Note that bit [0] must be zero + to ensure that the vector starts + at an 8-byte boundary. */ +#define PKA_BPTR_BPTR_S 0 +/** @} */ +/*---------------------------------------------------------------------------*/ +/** \name PKA_CPTR register registers bit fields + * @{ + */ +#define PKA_CPTR_CPTR_M 0x000007FF /**< This register specifies the + location of vector C within the + PKA RAM. Vectors are identified + through the location of their + least-significant 32-bit word. + Note that bit [0] must be zero + to ensure that the vector starts + at an 8-byte boundary. */ +#define PKA_CPTR_CPTR_S 0 +/** @} */ +/*---------------------------------------------------------------------------*/ +/** \name PKA_DPTR register registers bit fields + * @{ + */ +#define PKA_DPTR_DPTR_M 0x000007FF /**< This register specifies the + location of vector D within the + PKA RAM. Vectors are identified + through the location of their + least-significant 32-bit word. + Note that bit [0] must be zero + to ensure that the vector starts + at an 8-byte boundary. */ +#define PKA_DPTR_DPTR_S 0 +/** @} */ +/*---------------------------------------------------------------------------*/ +/** \name PKA_ALENGTH register registers bit fields + * @{ + */ +#define PKA_ALENGTH_ALENGTH_M 0x000001FF /**< This register specifies the + length (in 32-bit words) of + Vector A. */ +#define PKA_ALENGTH_ALENGTH_S 0 +/** @} */ +/*---------------------------------------------------------------------------*/ +/** \name PKA_BLENGTH register registers bit fields + * @{ + */ +#define PKA_BLENGTH_BLENGTH_M 0x000001FF /**< This register specifies the + length (in 32-bit words) of + Vector B. */ +#define PKA_BLENGTH_BLENGTH_S 0 +/** @} */ +/*---------------------------------------------------------------------------*/ +/** \name PKA_SHIFT register registers bit fields + * @{ + */ +#define PKA_SHIFT_NUM_BITS_TO_SHIFT_M \ + 0x0000001F /**< This register specifies the + number of bits to shift the + input vector (in the range 0-31) + during a Rshift or Lshift + operation. */ + +#define PKA_SHIFT_NUM_BITS_TO_SHIFT_S 0 +/** @} */ +/*---------------------------------------------------------------------------*/ +/** \name PKA_FUNCTION register registers bit fields + * @{ + */ +#define PKA_FUNCTION_STALL_RESULT \ + 0x01000000 /**< When written with a 1b, + updating of the PKA_COMPARE, + PKA_MSW and PKA_DIVMSW + registers, as well as resetting + the run bit is stalled beyond + the point that a running + operation is actually finished. + Use this to allow software + enough time to read results from + a previous operation when the + newly started operation is known + to take only a short amount of + time. If a result is waiting, + the result registers is updated + and the run bit is reset in the + clock cycle following writing + the stall result bit back to 0b. + The Stall result function may + only be used for basic PKCP + operations. */ + +#define PKA_FUNCTION_STALL_RESULT_M \ + 0x01000000 +#define PKA_FUNCTION_STALL_RESULT_S 24 +#define PKA_FUNCTION_RUN 0x00008000 /**< The host sets this bit to + instruct the PKA module to begin + processing the basic PKCP or + complex sequencer operation. + This bit is reset low + automatically when the operation + is complete. The complement of + this bit is output as + interrupts[1]. After a reset, + the run bit is always set to 1b. + Depending on the option, program + ROM or program RAM, the + following applies: Program ROM - + The first sequencer instruction + sets the bit to 0b. This is done + immediately after the hardware + reset is released. Program RAM - + The sequencer must set the bit + to 0b. As a valid firmware may + not have been loaded, the + sequencer is held in software + reset after the hardware reset + is released (the reset bit in + PKA_SEQ_CRTL is set to 1b). + After the FW image is loaded and + the Reset bit is cleared, the + sequencer starts to execute the + FW. The first instruction clears + the run bit. In both cases a few + clock cycles are needed before + the first instruction is + executed and the run bit state + has been propagated. */ +#define PKA_FUNCTION_RUN_M 0x00008000 +#define PKA_FUNCTION_RUN_S 15 +#define PKA_FUNCTION_SEQUENCER_OPERATIONS_M \ + 0x00007000 /**< These bits select the complex + sequencer operation to perform: + 000b: None 001b: ExpMod-CRT + 010b: ExpMod-ACT4 (compatible + with EIP2315) 011b: ECC-ADD (if + available in firmware, otherwise + reserved) 100b: ExpMod-ACT2 + (compatible with EIP2316) 101b: + ECC-MUL (if available in + firmware, otherwise reserved) + 110b: ExpMod-variable 111b: + ModInv (if available in + firmware, otherwise reserved) + The encoding of these operations + is determined by sequencer + firmware. */ + +#define PKA_FUNCTION_SEQUENCER_OPERATIONS_S 12 +#define PKA_FUNCTION_COPY 0x00000800 /**< Perform copy operation */ +#define PKA_FUNCTION_COPY_M 0x00000800 +#define PKA_FUNCTION_COPY_S 11 +#define PKA_FUNCTION_COMPARE 0x00000400 /**< Perform compare operation */ +#define PKA_FUNCTION_COMPARE_M 0x00000400 +#define PKA_FUNCTION_COMPARE_S 10 +#define PKA_FUNCTION_MODULO 0x00000200 /**< Perform modulo operation */ +#define PKA_FUNCTION_MODULO_M 0x00000200 +#define PKA_FUNCTION_MODULO_S 9 +#define PKA_FUNCTION_DIVIDE 0x00000100 /**< Perform divide operation */ +#define PKA_FUNCTION_DIVIDE_M 0x00000100 +#define PKA_FUNCTION_DIVIDE_S 8 +#define PKA_FUNCTION_LSHIFT 0x00000080 /**< Perform left shift operation */ +#define PKA_FUNCTION_LSHIFT_M 0x00000080 +#define PKA_FUNCTION_LSHIFT_S 7 +#define PKA_FUNCTION_RSHIFT 0x00000040 /**< Perform right shift operation */ +#define PKA_FUNCTION_RSHIFT_M 0x00000040 +#define PKA_FUNCTION_RSHIFT_S 6 +#define PKA_FUNCTION_SUBTRACT 0x00000020 /**< Perform subtract operation */ +#define PKA_FUNCTION_SUBTRACT_M 0x00000020 +#define PKA_FUNCTION_SUBTRACT_S 5 +#define PKA_FUNCTION_ADD 0x00000010 /**< Perform add operation */ +#define PKA_FUNCTION_ADD_M 0x00000010 +#define PKA_FUNCTION_ADD_S 4 +#define PKA_FUNCTION_MS_ONE 0x00000008 /**< Loads the location of the Most + Significant one bit within the + result word indicated in the + PKA_MSW register into bits [4:0] + of the PKA_DIVMSW register - can + only be used with basic PKCP + operations, except for Divide, + Modulo and Compare. */ +#define PKA_FUNCTION_MS_ONE_M 0x00000008 +#define PKA_FUNCTION_MS_ONE_S 3 +#define PKA_FUNCTION_ADDSUB 0x00000002 /**< Perform combined add/subtract + operation */ +#define PKA_FUNCTION_ADDSUB_M 0x00000002 +#define PKA_FUNCTION_ADDSUB_S 1 +#define PKA_FUNCTION_MULTIPLY 0x00000001 /**< Perform multiply operation */ +#define PKA_FUNCTION_MULTIPLY_M 0x00000001 +#define PKA_FUNCTION_MULTIPLY_S 0 +/** @} */ +/*---------------------------------------------------------------------------*/ +/** \name PKA_COMPARE register registers bit fields + * @{ + */ +#define PKA_COMPARE_A_GREATER_THAN_B \ + 0x00000004 /**< Vector_A is greater than + Vector_B */ + +#define PKA_COMPARE_A_GREATER_THAN_B_M \ + 0x00000004 +#define PKA_COMPARE_A_GREATER_THAN_B_S 2 +#define PKA_COMPARE_A_LESS_THAN_B \ + 0x00000002 /**< Vector_A is less than Vector_B */ + +#define PKA_COMPARE_A_LESS_THAN_B_M \ + 0x00000002 +#define PKA_COMPARE_A_LESS_THAN_B_S 1 +#define PKA_COMPARE_A_EQUALS_B 0x00000001 /**< Vector_A is equal to Vector_B */ +#define PKA_COMPARE_A_EQUALS_B_M \ + 0x00000001 +#define PKA_COMPARE_A_EQUALS_B_S 0 +/** @} */ +/*---------------------------------------------------------------------------*/ +/** \name PKA_MSW register registers bit fields + * @{ + */ +#define PKA_MSW_RESULT_IS_ZERO 0x00008000 /**< The result vector is all + zeroes, ignore the address + returned in bits [10:0] */ +#define PKA_MSW_RESULT_IS_ZERO_M \ + 0x00008000 +#define PKA_MSW_RESULT_IS_ZERO_S 15 +#define PKA_MSW_MSW_ADDRESS_M 0x000007FF /**< Address of the most-significant + nonzero 32-bit word of the + result vector in PKA RAM */ +#define PKA_MSW_MSW_ADDRESS_S 0 +/** @} */ +/*---------------------------------------------------------------------------*/ +/** \name PKA_DIVMSW register registers bit fields + * @{ + */ +#define PKA_DIVMSW_RESULT_IS_ZERO \ + 0x00008000 /**< The result vector is all + zeroes, ignore the address + returned in bits [10:0] */ + +#define PKA_DIVMSW_RESULT_IS_ZERO_M \ + 0x00008000 +#define PKA_DIVMSW_RESULT_IS_ZERO_S 15 +#define PKA_DIVMSW_MSW_ADDRESS_M \ + 0x000007FF /**< Address of the most significant + nonzero 32-bit word of the + remainder result vector in PKA + RAM */ + +#define PKA_DIVMSW_MSW_ADDRESS_S 0 +/** @} */ +/*---------------------------------------------------------------------------*/ +/** \name PKA_SEQ_CTRL register registers bit fields + * @{ + */ +#define PKA_SEQ_CTRL_RESET 0x80000000 /**< Option program ROM: Reset value + = 0. Read/Write, reset value 0b + (ZERO). Writing 1b resets the + sequencer, write to 0b to + restart operations again. As the + reset value is 0b, the sequencer + will automatically start + operations executing from + program ROM. This bit should + always be written with zero and + ignored when reading this + register. Option Program RAM: + Reset value =1. Read/Write, + reset value 1b (ONE). When 1b, + the sequencer is held in a reset + state and the PKA_PROGRAM area + is accessible for loading the + sequencer program (while the + PKA_DATA_RAM is inaccessible), + write to 0b to (re)start + sequencer operations and disable + PKA_PROGRAM area accessibility + (also enables the PKA_DATA_RAM + accesses). Resetting the + sequencer (in order to load + other firmware) should only be + done when the PKA Engine is not + performing any operations (i.e. + the run bit in the PKA_FUNCTION + register should be zero). */ +#define PKA_SEQ_CTRL_RESET_M 0x80000000 +#define PKA_SEQ_CTRL_RESET_S 31 +#define PKA_SEQ_CTRL_SEQUENCER_STATUS_M \ + 0x0000FF00 /**< These read-only bits can be + used by the sequencer to + communicate status to the + outside world. Bit [8] is also + used as sequencer interrupt, + with the complement of this bit + ORed into the run bit in + PKA_FUNCTION. This field should + always be written with zeroes + and ignored when reading this + register. */ + +#define PKA_SEQ_CTRL_SEQUENCER_STATUS_S 8 +#define PKA_SEQ_CTRL_SW_CONTROL_STATUS_M \ + 0x000000FF /**< These bits can be used by + software to trigger sequencer + operations. External logic can + set these bits by writing 1b, + cannot reset them by writing 0b. + The sequencer can reset these + bits by writing 0b, cannot set + them by writing 1b. Setting the + run bit in PKA_FUNCTION together + with a nonzero sequencer + operations field automatically + sets bit [0] here. This field + should always be written with + zeroes and ignored when reading + this register. */ + +#define PKA_SEQ_CTRL_SW_CONTROL_STATUS_S 0 +/** @} */ +/*---------------------------------------------------------------------------*/ +/** \name PKA_OPTIONS register registers bit fields + * @{ + */ +#define PKA_OPTIONS_FIRST_LNME_FIFO_DEPTH_M \ + 0xFF000000 /**< Number of words in the first + LNME's FIFO RAM Should be + ignored if LNME configuration is + 0. The contents of this field + indicate the actual depth as + selected by the LNME FIFO RAM + size strap input, fifo_size_sel. + Note: Reset value is undefined */ + +#define PKA_OPTIONS_FIRST_LNME_FIFO_DEPTH_S 24 +#define PKA_OPTIONS_FIRST_LNME_NR_OF_PES_M \ + 0x003F0000 /**< Number of processing elements + in the pipeline of the first + LNME Should be ignored if LNME + configuration is 0. Note: Reset + value is undefined. */ + +#define PKA_OPTIONS_FIRST_LNME_NR_OF_PES_S 16 +#define PKA_OPTIONS_MMM3A 0x00001000 /**< Reserved for a future + functional extension to the LNME + Always 0b */ +#define PKA_OPTIONS_MMM3A_M 0x00001000 +#define PKA_OPTIONS_MMM3A_S 12 +#define PKA_OPTIONS_INT_MASKING 0x00000800 /**< Value 0b indicates that the + main interrupt output (bit [1] + of the interrupts output bus) is + the direct complement of the run + bit in the PKA_CONTROL register, + value 1b indicates that + interrupt masking logic is + present for this output. Note: + Reset value is undefined */ +#define PKA_OPTIONS_INT_MASKING_M \ + 0x00000800 +#define PKA_OPTIONS_INT_MASKING_S 11 +#define PKA_OPTIONS_PROTECTION_OPTION_M \ + 0x00000700 /**< Value 0 indicates no additional + protection against side channel + attacks, value 1 indicates the + SCAP option, value 3 indicates + the PROT option; other values + are reserved. Note: Reset value + is undefined */ + +#define PKA_OPTIONS_PROTECTION_OPTION_S 8 +#define PKA_OPTIONS_PROGRAM_RAM 0x00000080 /**< Value 1b indicates sequencer + program storage in RAM, value 0b + in ROM. Note: Reset value is + undefined */ +#define PKA_OPTIONS_PROGRAM_RAM_M \ + 0x00000080 +#define PKA_OPTIONS_PROGRAM_RAM_S 7 +#define PKA_OPTIONS_SEQUENCER_CONFIGURATION_M \ + 0x00000060 /**< Value 1 indicates a standard + sequencer; other values are + reserved. */ + +#define PKA_OPTIONS_SEQUENCER_CONFIGURATION_S 5 +#define PKA_OPTIONS_LNME_CONFIGURATION_M \ + 0x0000001C /**< Value 0 indicates NO LNME, + value 1 indicates one standard + LNME (with alpha = 32, beta = + 8); other values reserved. Note: + Reset value is undefined */ + +#define PKA_OPTIONS_LNME_CONFIGURATION_S 2 +#define PKA_OPTIONS_PKCP_CONFIGURATION_M \ + 0x00000003 /**< Value 1 indicates a PKCP with a + 16x16 multiplier, value 2 + indicates a PKCP with a 32x32 + multiplier, other values + reserved. Note: Reset value is + undefined. */ + +#define PKA_OPTIONS_PKCP_CONFIGURATION_S 0 +/** @} */ +/*---------------------------------------------------------------------------*/ +/** \name PKA_SW_REV register registers bit fields + * @{ + */ +#define PKA_SW_REV_FW_CAPABILITIES_M \ + 0xF0000000 /**< 4-bit binary encoding for the + functionality implemented in the + firmware. Value 0 indicates + basic ModExp with/without CRT. + Value 1 adds Modular Inversion, + value 2 adds Modular Inversion + and ECC operations. Values 3-15 + are reserved. */ + +#define PKA_SW_REV_FW_CAPABILITIES_S 28 +#define PKA_SW_REV_MAJOR_FW_REVISION_M \ + 0x0F000000 /**< 4-bit binary encoding of the + major firmware revision number */ + +#define PKA_SW_REV_MAJOR_FW_REVISION_S 24 +#define PKA_SW_REV_MINOR_FW_REVISION_M \ + 0x00F00000 /**< 4-bit binary encoding of the + minor firmware revision number */ + +#define PKA_SW_REV_MINOR_FW_REVISION_S 20 +#define PKA_SW_REV_FW_PATCH_LEVEL_M \ + 0x000F0000 /**< 4-bit binary encoding of the + firmware patch level, initial + release will carry value zero + Patches are used to remove bugs + without changing the + functionality or interface of a + module. */ + +#define PKA_SW_REV_FW_PATCH_LEVEL_S 16 +/** @} */ +/*---------------------------------------------------------------------------*/ +/** \name PKA_REVISION register registers bit fields + * @{ + */ +#define PKA_REVISION_MAJOR_HW_REVISION_M \ + 0x0F000000 /**< 4-bit binary encoding of the + major hardware revision number */ + +#define PKA_REVISION_MAJOR_HW_REVISION_S 24 +#define PKA_REVISION_MINOR_HW_REVISION_M \ + 0x00F00000 /**< 4-bit binary encoding of the + minor hardware revision number */ + +#define PKA_REVISION_MINOR_HW_REVISION_S 20 +#define PKA_REVISION_HW_PATCH_LEVEL_M \ + 0x000F0000 /**< 4-bit binary encoding of the + hardware patch level, initial + release will carry value zero + Patches are used to remove bugs + without changing the + functionality or interface of a + module. */ + +#define PKA_REVISION_HW_PATCH_LEVEL_S 16 +#define PKA_REVISION_COMPLEMENT_OF_BASIC_EIP_NUMBER_M \ + 0x0000FF00 /**< Bit-by-bit logic complement of + bits [7:0], EIP-28 gives 0xE3 */ + +#define PKA_REVISION_COMPLEMENT_OF_BASIC_EIP_NUMBER_S 8 +#define PKA_REVISION_BASIC_EIP_NUMBER_M \ + 0x000000FF /**< 8-bit binary encoding of the + EIP number, EIP-28 gives 0x1C */ + +#define PKA_REVISION_BASIC_EIP_NUMBER_S 0 + +/** @} */ +/*---------------------------------------------------------------------------*/ +/** \name PKA driver return codes + * @{ + */ +#define PKA_STATUS_SUCCESS 0 /**< Success */ +#define PKA_STATUS_FAILURE 1 /**< Failure */ +#define PKA_STATUS_INVALID_PARAM 2 /**< Invalid parameter */ +#define PKA_STATUS_BUF_UNDERFLOW 3 /**< Buffer underflow */ +#define PKA_STATUS_RESULT_0 4 /**< Result is all zeros */ +#define PKA_STATUS_A_GR_B 5 /**< Big number compare return status if + the first big num is greater than + the second. */ +#define PKA_STATUS_A_LT_B 6 /**< Big number compare return status if + the first big num is less than the + second. */ +#define PKA_STATUS_OPERATION_INPRG 7 /**< PKA operation is in progress. */ +#define PKA_STATUS_OPERATION_NOT_INPRG 8 /**< No PKA operation is in progress. */ +#define PKA_STATUS_SIGNATURE_INVALID 9 /**< Signature is invalid. */ + +/** @} */ +/*---------------------------------------------------------------------------*/ +/** \name PKA functions + * @{ + */ + +/** \brief Enables and resets the PKA engine + */ +void pka_init(void); + +/** \brief Enables the PKA engine + */ +void pka_enable(void); + +/** \brief Disables the PKA engine + * \note Call this function to save power when the engine is unused. + */ +void pka_disable(void); + +/** \brief Checks the status of the PKA engine operation + * \retval false Result not yet available, and no error occurred + * \retval true Result available, or error occurred + */ +uint8_t pka_check_status(void); + +/** \brief Registers a process to be notified of the completion of a PKA + * operation + * \param p Process to be polled upon IRQ + * \note This function is only supposed to be called by the PKA drivers. + */ +void pka_register_process_notification(struct process *p); + +/** @} */ + +#endif /* PKA_H_ */ + +/** + * @} + * @} + */ diff --git a/cpu/cc2538/lpm.c b/cpu/cc2538/lpm.c index 91d67acc9..3aacf5149 100644 --- a/cpu/cc2538/lpm.c +++ b/cpu/cc2538/lpm.c @@ -101,7 +101,7 @@ static uint8_t max_pm; #ifdef LPM_CONF_PERIPH_PERMIT_PM1_FUNCS_MAX #define LPM_PERIPH_PERMIT_PM1_FUNCS_MAX LPM_CONF_PERIPH_PERMIT_PM1_FUNCS_MAX #else -#define LPM_PERIPH_PERMIT_PM1_FUNCS_MAX 3 +#define LPM_PERIPH_PERMIT_PM1_FUNCS_MAX 4 #endif static lpm_periph_permit_pm1_func_t @@ -128,8 +128,7 @@ periph_permit_pm1(void) static void enter_pm0(void) { - ENERGEST_OFF(ENERGEST_TYPE_CPU); - ENERGEST_ON(ENERGEST_TYPE_LPM); + ENERGEST_SWITCH(ENERGEST_TYPE_CPU, ENERGEST_TYPE_LPM); /* We are only interested in IRQ energest while idle or in LPM */ ENERGEST_IRQ_RESTORE(irq_energest); @@ -147,8 +146,7 @@ enter_pm0(void) /* Remember IRQ energest for next pass */ ENERGEST_IRQ_SAVE(irq_energest); - ENERGEST_ON(ENERGEST_TYPE_CPU); - ENERGEST_OFF(ENERGEST_TYPE_LPM); + ENERGEST_SWITCH(ENERGEST_TYPE_LPM, ENERGEST_TYPE_CPU); } /*---------------------------------------------------------------------------*/ static void @@ -238,8 +236,7 @@ lpm_exit() /* Remember IRQ energest for next pass */ ENERGEST_IRQ_SAVE(irq_energest); - ENERGEST_ON(ENERGEST_TYPE_CPU); - ENERGEST_OFF(ENERGEST_TYPE_LPM); + ENERGEST_SWITCH(ENERGEST_TYPE_LPM, ENERGEST_TYPE_CPU); } /*---------------------------------------------------------------------------*/ void @@ -312,8 +309,7 @@ lpm_enter() /* We are only interested in IRQ energest while idle or in LPM */ ENERGEST_IRQ_RESTORE(irq_energest); - ENERGEST_OFF(ENERGEST_TYPE_CPU); - ENERGEST_ON(ENERGEST_TYPE_LPM); + ENERGEST_SWITCH(ENERGEST_TYPE_CPU, ENERGEST_TYPE_LPM); /* Remember the current time so we can keep stats when we wake up */ if(LPM_CONF_STATS) { @@ -339,8 +335,7 @@ lpm_enter() /* Remember IRQ energest for next pass */ ENERGEST_IRQ_SAVE(irq_energest); - ENERGEST_ON(ENERGEST_TYPE_CPU); - ENERGEST_OFF(ENERGEST_TYPE_LPM); + ENERGEST_SWITCH(ENERGEST_TYPE_LPM, ENERGEST_TYPE_CPU); } else { /* All clear. Assert WFI and drop to PM1/2. This is now un-interruptible */ assert_wfi(); diff --git a/cpu/cc2538/startup-gcc.c b/cpu/cc2538/startup-gcc.c index 2aa82894e..0c0da7104 100644 --- a/cpu/cc2538/startup-gcc.c +++ b/cpu/cc2538/startup-gcc.c @@ -68,6 +68,7 @@ void usb_isr(void) WEAK_ALIAS(default_handler); void uart0_isr(void) WEAK_ALIAS(default_handler); void uart1_isr(void) WEAK_ALIAS(default_handler); void crypto_isr(void); +void pka_isr(void); /* Boot Loader Backdoor selection */ #if FLASH_CCA_CONF_BOOTLDR_BACKDOOR @@ -271,7 +272,7 @@ void(*const vectors[])(void) = cc2538_rf_rx_tx_isr, /* 157 RFCORE RX/TX */ cc2538_rf_err_isr, /* 158 RFCORE Error */ crypto_isr, /* 159 AES */ - default_handler, /* 160 PKA */ + pka_isr, /* 160 PKA */ rtimer_isr, /* 161 SM Timer */ default_handler, /* 162 MACTimer */ }; diff --git a/cpu/cc253x/8051def.h b/cpu/cc253x/8051def.h index eb794e754..e16cf3c2e 100644 --- a/cpu/cc253x/8051def.h +++ b/cpu/cc253x/8051def.h @@ -38,7 +38,6 @@ #endif #define CC_CONF_FUNCTION_POINTER_ARGS 1 -#define CC_CONF_FASTCALL #define CC_CONF_VA_ARGS 1 #define CC_CONF_UNSIGNED_CHAR_BUGS 0 #define CC_CONF_REGISTER_ARGS 0 diff --git a/cpu/cc26xx-cc13xx/Makefile.cc26xx-cc13xx b/cpu/cc26xx-cc13xx/Makefile.cc26xx-cc13xx index 781f79b3f..f6ac275da 100644 --- a/cpu/cc26xx-cc13xx/Makefile.cc26xx-cc13xx +++ b/cpu/cc26xx-cc13xx/Makefile.cc26xx-cc13xx @@ -41,6 +41,10 @@ LDFLAGS += -Wl,-Map=$(@:.elf=-$(TARGET).map),--cref,--no-warn-mismatch OBJCOPY_FLAGS += -O binary --gap-fill 0xff OBJDUMP_FLAGS += --disassemble --source --disassembler-options=force-thumb +ifdef WERROR +CFLAGS += -Werror +endif + ### Are we building with code size optimisations? ifeq ($(SMALL),1) CFLAGS += -Os diff --git a/cpu/cc26xx-cc13xx/clock.c b/cpu/cc26xx-cc13xx/clock.c index fd8165d0d..4f6df056f 100644 --- a/cpu/cc26xx-cc13xx/clock.c +++ b/cpu/cc26xx-cc13xx/clock.c @@ -120,31 +120,35 @@ clock_init(void) ((TIMER_CFG_B_ONE_SHOT >> 8) & 0xFF) | GPT_TBMR_TBPWMIE; } /*---------------------------------------------------------------------------*/ +static void +update_clock_variable(void) +{ + uint32_t aon_rtc_secs_now; + uint32_t aon_rtc_secs_now2; + uint16_t aon_rtc_ticks_now; + + do { + aon_rtc_secs_now = HWREG(AON_RTC_BASE + AON_RTC_O_SEC); + aon_rtc_ticks_now = HWREG(AON_RTC_BASE + AON_RTC_O_SUBSEC) >> 16; + aon_rtc_secs_now2 = HWREG(AON_RTC_BASE + AON_RTC_O_SEC); + } while(aon_rtc_secs_now != aon_rtc_secs_now2); + + /* Convert AON RTC ticks to clock tick counter */ + count = (aon_rtc_secs_now * CLOCK_SECOND) + (aon_rtc_ticks_now >> 9); +} +/*---------------------------------------------------------------------------*/ CCIF clock_time_t clock_time(void) { + update_clock_variable(); + return (clock_time_t)(count & 0xFFFFFFFF); } /*---------------------------------------------------------------------------*/ void clock_update(void) { - bool interrupts_disabled; - uint32_t aon_rtc_secs_now; - uint16_t aon_rtc_ticks_now; - - interrupts_disabled = ti_lib_int_master_disable(); - - aon_rtc_secs_now = HWREG(AON_RTC_BASE + AON_RTC_O_SEC); - aon_rtc_ticks_now = HWREG(AON_RTC_BASE + AON_RTC_O_SUBSEC) >> 16; - - /* Convert AON RTC ticks to clock tick counter */ - count = (aon_rtc_secs_now * CLOCK_SECOND) + (aon_rtc_ticks_now >> 9); - - /* Re-enable interrupts */ - if(!interrupts_disabled) { - ti_lib_int_master_enable(); - } + update_clock_variable(); if(etimer_pending()) { etimer_request_poll(); diff --git a/cpu/cc26xx-cc13xx/dev/contiki-watchdog.c b/cpu/cc26xx-cc13xx/dev/contiki-watchdog.c index 471c6f3cb..f8eb4f666 100644 --- a/cpu/cc26xx-cc13xx/dev/contiki-watchdog.c +++ b/cpu/cc26xx-cc13xx/dev/contiki-watchdog.c @@ -42,8 +42,61 @@ * \file * Implementation of the CC13xx/CC26xx watchdog driver. */ -#include "watchdog.h" +#include "contiki.h" +#include "dev/watchdog.h" #include "ti-lib.h" + +#include +#include +/*---------------------------------------------------------------------------*/ +#ifdef CONTIKI_WATCHDOG_CONF_TIMER_TOP +#define CONTIKI_WATCHDOG_TIMER_TOP CONTIKI_WATCHDOG_CONF_TIMER_TOP +#else +#define CONTIKI_WATCHDOG_TIMER_TOP 0xFFFFF +#endif + +#ifdef CONTIKI_WATCHDOG_CONF_LOCK_CONFIG +#define CONTIKI_WATCHDOG_LOCK_CONFIG CONTIKI_WATCHDOG_CONF_LOCK_CONFIG +#else +#define CONTIKI_WATCHDOG_LOCK_CONFIG 1 +#endif + +#define LOCK_INTERRUPTS_DISABLED 0x01 +#define LOCK_REGISTERS_UNLOCKED 0x02 +/*---------------------------------------------------------------------------*/ +static uint32_t +unlock_config(void) +{ + uint32_t ret = 0; + bool int_status; + + if(CONTIKI_WATCHDOG_LOCK_CONFIG) { + int_status = ti_lib_int_master_disable(); + + if(ti_lib_watchdog_lock_state()) { + ret |= LOCK_REGISTERS_UNLOCKED; + ti_lib_watchdog_unlock(); + } + + ret |= (int_status) ? (0) : (LOCK_INTERRUPTS_DISABLED); + } + + return ret; +} +/*---------------------------------------------------------------------------*/ +static void +lock_config(uint32_t status) +{ + if(CONTIKI_WATCHDOG_LOCK_CONFIG) { + + if(status & LOCK_REGISTERS_UNLOCKED) { + ti_lib_watchdog_lock(); + } + if(status & LOCK_INTERRUPTS_DISABLED) { + ti_lib_int_master_enable(); + } + } +} /*---------------------------------------------------------------------------*/ /** * \brief Initialises the CC26xx WDT @@ -54,7 +107,8 @@ void watchdog_init(void) { - ti_lib_watchdog_reload_set(0xFFFFF); + ti_lib_watchdog_reload_set(CONTIKI_WATCHDOG_TIMER_TOP); + lock_config(LOCK_REGISTERS_UNLOCKED); } /*---------------------------------------------------------------------------*/ /** @@ -63,7 +117,12 @@ watchdog_init(void) void watchdog_start(void) { + uint32_t lock_status = unlock_config(); + + watchdog_periodic(); ti_lib_watchdog_reset_enable(); + + lock_config(lock_status); } /*---------------------------------------------------------------------------*/ /** @@ -72,9 +131,23 @@ watchdog_start(void) void watchdog_periodic(void) { + ti_lib_watchdog_reload_set(CONTIKI_WATCHDOG_TIMER_TOP); ti_lib_watchdog_int_clear(); } /*---------------------------------------------------------------------------*/ +/** + * \brief Stops the WDT such that it won't timeout and cause MCU reset + */ +void +watchdog_stop(void) +{ + uint32_t lock_status = unlock_config(); + + ti_lib_watchdog_reset_disable(); + + lock_config(lock_status); +} +/*---------------------------------------------------------------------------*/ /** * \brief Manually trigger a WDT reboot */ diff --git a/cpu/cc26xx-cc13xx/dev/soc-rtc.c b/cpu/cc26xx-cc13xx/dev/soc-rtc.c index 16a967b9d..fb5394947 100644 --- a/cpu/cc26xx-cc13xx/dev/soc-rtc.c +++ b/cpu/cc26xx-cc13xx/dev/soc-rtc.c @@ -50,6 +50,8 @@ /*---------------------------------------------------------------------------*/ /* Prototype of a function in clock.c. Called every time the handler fires */ void clock_update(void); + +static rtimer_clock_t last_isr_time; /*---------------------------------------------------------------------------*/ #define COMPARE_INCREMENT (RTIMER_SECOND / CLOCK_SECOND) #define MULTIPLE_512_MASK 0xFFFFFE00 @@ -130,6 +132,12 @@ soc_rtc_schedule_one_shot(uint32_t channel, uint32_t ticks) ti_lib_aon_rtc_channel_enable(channel); } /*---------------------------------------------------------------------------*/ +rtimer_clock_t +soc_rtc_last_isr_time(void) +{ + return last_isr_time; +} +/*---------------------------------------------------------------------------*/ /* The AON RTC interrupt handler */ void soc_rtc_isr(void) @@ -138,6 +146,8 @@ soc_rtc_isr(void) ENERGEST_ON(ENERGEST_TYPE_IRQ); + last_isr_time = RTIMER_NOW(); + now = ti_lib_aon_rtc_current_compare_value_get(); /* Adjust the s/w tick counter irrespective of which event trigger this */ diff --git a/cpu/cc26xx-cc13xx/dev/soc-rtc.h b/cpu/cc26xx-cc13xx/dev/soc-rtc.h index ff6a266ff..cedf318c5 100644 --- a/cpu/cc26xx-cc13xx/dev/soc-rtc.h +++ b/cpu/cc26xx-cc13xx/dev/soc-rtc.h @@ -92,6 +92,8 @@ rtimer_clock_t soc_rtc_get_next_trigger(void); * instead use Contiki's timer-related libraries */ void soc_rtc_schedule_one_shot(uint32_t channel, uint32_t t); + +rtimer_clock_t soc_rtc_last_isr_time(void); /*---------------------------------------------------------------------------*/ #endif /* SOC_RTC_H_ */ /*---------------------------------------------------------------------------*/ diff --git a/cpu/cc26xx-cc13xx/lib/cc13xxware b/cpu/cc26xx-cc13xx/lib/cc13xxware index 63ed52888..6bdb6da3f 160000 --- a/cpu/cc26xx-cc13xx/lib/cc13xxware +++ b/cpu/cc26xx-cc13xx/lib/cc13xxware @@ -1 +1 @@ -Subproject commit 63ed52888467ea7d403b0c743852162395232c9e +Subproject commit 6bdb6da3fa9682303799e5c3b1f755398e87fc99 diff --git a/cpu/cc26xx-cc13xx/lib/cc26xxware b/cpu/cc26xx-cc13xx/lib/cc26xxware index 0e82b18bf..0270b50ac 160000 --- a/cpu/cc26xx-cc13xx/lib/cc26xxware +++ b/cpu/cc26xx-cc13xx/lib/cc26xxware @@ -1 +1 @@ -Subproject commit 0e82b18bf2c69fb0a40af4d2496db2a3dc721cec +Subproject commit 0270b50ac750f8f3348a98f900a470e7a65ffce8 diff --git a/cpu/cc26xx-cc13xx/lpm.c b/cpu/cc26xx-cc13xx/lpm.c index 2f7b964f8..c9e874824 100644 --- a/cpu/cc26xx-cc13xx/lpm.c +++ b/cpu/cc26xx-cc13xx/lpm.c @@ -84,7 +84,7 @@ void lpm_shutdown(uint32_t wakeup_pin, uint32_t io_pull, uint32_t wake_on) { lpm_registered_module_t *module; - int i, j; + int i; uint32_t io_cfg = (IOC_STD_INPUT & ~IOC_IOPULL_M) | io_pull | wake_on; @@ -109,18 +109,6 @@ lpm_shutdown(uint32_t wakeup_pin, uint32_t io_pull, uint32_t wake_on) watchdog_periodic(); - /* fade away....... */ - j = 1000; - - for(i = j; i > 0; --i) { - leds_on(LEDS_ALL); - clock_delay_usec(i); - leds_off(LEDS_ALL); - clock_delay_usec(j - i); - } - - leds_off(LEDS_ALL); - /* Notify all modules that we're shutting down */ for(module = list_head(modules_list); module != NULL; module = module->next) { @@ -130,8 +118,10 @@ lpm_shutdown(uint32_t wakeup_pin, uint32_t io_pull, uint32_t wake_on) } /* Configure the wakeup trigger */ - ti_lib_gpio_dir_mode_set((1 << wakeup_pin), GPIO_DIR_MODE_IN); - ti_lib_ioc_port_configure_set(wakeup_pin, IOC_PORT_GPIO, io_cfg); + if(wakeup_pin != IOID_UNUSED) { + ti_lib_gpio_dir_mode_set((1 << wakeup_pin), GPIO_DIR_MODE_IN); + ti_lib_ioc_port_configure_set(wakeup_pin, IOC_PORT_GPIO, io_cfg); + } /* Freeze I/O latches in AON */ ti_lib_aon_ioc_freeze_enable(); @@ -202,8 +192,7 @@ wake_up(void) /* Remember IRQ energest for next pass */ ENERGEST_IRQ_SAVE(irq_energest); - ENERGEST_ON(ENERGEST_TYPE_CPU); - ENERGEST_OFF(ENERGEST_TYPE_LPM); + ENERGEST_SWITCH(ENERGEST_TYPE_LPM, ENERGEST_TYPE_CPU); /* Sync so that we get the latest values before adjusting recharge settings */ ti_lib_sys_ctrl_aon_sync(); @@ -292,7 +281,7 @@ lpm_drop() if(next_event) { next_event = next_event - clock_time(); - soc_rtc_schedule_one_shot(AON_RTC_CH1, RTIMER_NOW() + + soc_rtc_schedule_one_shot(AON_RTC_CH1, soc_rtc_last_isr_time() + (next_event * (RTIMER_SECOND / CLOCK_SECOND))); } @@ -396,8 +385,7 @@ lpm_drop() /* We are only interested in IRQ energest while idle or in LPM */ ENERGEST_IRQ_RESTORE(irq_energest); - ENERGEST_OFF(ENERGEST_TYPE_CPU); - ENERGEST_ON(ENERGEST_TYPE_LPM); + ENERGEST_SWITCH(ENERGEST_TYPE_CPU, ENERGEST_TYPE_LPM); /* Sync the AON interface to ensure all writes have gone through. */ ti_lib_sys_ctrl_aon_sync(); @@ -429,8 +417,7 @@ lpm_drop() void lpm_sleep(void) { - ENERGEST_OFF(ENERGEST_TYPE_CPU); - ENERGEST_ON(ENERGEST_TYPE_LPM); + ENERGEST_SWITCH(ENERGEST_TYPE_CPU, ENERGEST_TYPE_LPM); /* We are only interested in IRQ energest while idle or in LPM */ ENERGEST_IRQ_RESTORE(irq_energest); @@ -443,8 +430,7 @@ lpm_sleep(void) /* Remember IRQ energest for next pass */ ENERGEST_IRQ_SAVE(irq_energest); - ENERGEST_ON(ENERGEST_TYPE_CPU); - ENERGEST_OFF(ENERGEST_TYPE_LPM); + ENERGEST_SWITCH(ENERGEST_TYPE_LPM, ENERGEST_TYPE_CPU); } /*---------------------------------------------------------------------------*/ void diff --git a/cpu/cc26xx-cc13xx/rf-core/ieee-mode.c b/cpu/cc26xx-cc13xx/rf-core/ieee-mode.c index b997043ab..2a31bbfd1 100644 --- a/cpu/cc26xx-cc13xx/rf-core/ieee-mode.c +++ b/cpu/cc26xx-cc13xx/rf-core/ieee-mode.c @@ -805,7 +805,7 @@ transmit(unsigned short transmit_len) cmd.pPayload = &tx_buf[TX_BUF_HDR_LEN]; /* Enable the LAST_FG_COMMAND_DONE interrupt, which will wake us up */ - rf_core_cmd_done_en(); + rf_core_cmd_done_en(true); ret = rf_core_send_cmd((uint32_t)&cmd, &cmd_status); @@ -853,6 +853,11 @@ transmit(unsigned short transmit_len) */ rf_core_cmd_done_dis(); + + if(was_off) { + off(); + } + return ret; } /*---------------------------------------------------------------------------*/ @@ -1101,8 +1106,12 @@ off(void) while(transmitting()); + /* stopping the rx explicitly results in lower sleep-mode power usage */ + rx_off(); rf_core_power_down(); + ENERGEST_OFF(ENERGEST_TYPE_LISTEN); + /* Switch HF clock source to the RCOSC to preserve power */ oscillators_switch_to_hf_rc(); @@ -1212,6 +1221,12 @@ set_value(radio_param_t param, radio_value_t value) return RADIO_RESULT_INVALID_VALUE; } + if(cmd->channel == (uint8_t)value) { + /* We already have that very same channel configured. + * Nothing to do here. */ + return RADIO_RESULT_OK; + } + cmd->channel = (uint8_t)value; break; case RADIO_PARAM_PAN_ID: diff --git a/cpu/cc26xx-cc13xx/rf-core/prop-mode.c b/cpu/cc26xx-cc13xx/rf-core/prop-mode.c index c4aa341d0..0a7c4692f 100644 --- a/cpu/cc26xx-cc13xx/rf-core/prop-mode.c +++ b/cpu/cc26xx-cc13xx/rf-core/prop-mode.c @@ -687,7 +687,7 @@ transmit(unsigned short transmit_len) rx_off_prop(); /* Enable the LAST_COMMAND_DONE interrupt to wake us up */ - rf_core_cmd_done_en(); + rf_core_cmd_done_en(false); ret = rf_core_send_cmd((uint32_t)cmd_tx_adv, &cmd_status); @@ -968,6 +968,7 @@ off(void) return RF_CORE_CMD_OK; } + rx_off_prop(); rf_core_power_down(); /* Switch HF clock source to the RCOSC to preserve power */ diff --git a/cpu/cc26xx-cc13xx/rf-core/rf-core.c b/cpu/cc26xx-cc13xx/rf-core/rf-core.c index 7528a6f77..b511ba6dd 100644 --- a/cpu/cc26xx-cc13xx/rf-core/rf-core.c +++ b/cpu/cc26xx-cc13xx/rf-core/rf-core.c @@ -201,6 +201,28 @@ rf_core_wait_cmd_done(void *cmd) == RF_CORE_RADIO_OP_STATUS_DONE_OK; } /*---------------------------------------------------------------------------*/ +static int +fs_powerdown(void) +{ + rfc_CMD_FS_POWERDOWN_t cmd; + uint32_t cmd_status; + + rf_core_init_radio_op((rfc_radioOp_t *)&cmd, sizeof(cmd), CMD_FS_POWERDOWN); + + if(rf_core_send_cmd((uint32_t)&cmd, &cmd_status) != RF_CORE_CMD_OK) { + PRINTF("fs_powerdown: CMDSTA=0x%08lx\n", cmd_status); + return RF_CORE_CMD_ERROR; + } + + if(rf_core_wait_cmd_done(&cmd) != RF_CORE_CMD_OK) { + PRINTF("fs_powerdown: CMDSTA=0x%08lx, status=0x%04x\n", + cmd_status, cmd.status); + return RF_CORE_CMD_ERROR; + } + + return RF_CORE_CMD_OK; +} +/*---------------------------------------------------------------------------*/ int rf_core_power_up() { @@ -256,6 +278,9 @@ rf_core_power_down() if(rf_core_is_accessible()) { HWREG(RFC_DBELL_NONBUF_BASE + RFC_DBELL_O_RFCPEIFG) = 0x0; HWREG(RFC_DBELL_NONBUF_BASE + RFC_DBELL_O_RFCPEIEN) = 0x0; + + /* need to send FS_POWERDOWN or analog components will use power */ + fs_powerdown(); } /* Shut down the RFCORE clock domain in the MCU VD */ @@ -378,11 +403,12 @@ rf_core_setup_interrupts() } /*---------------------------------------------------------------------------*/ void -rf_core_cmd_done_en() +rf_core_cmd_done_en(bool fg) { + uint32_t irq = fg ? IRQ_LAST_FG_COMMAND_DONE : IRQ_LAST_COMMAND_DONE; + HWREG(RFC_DBELL_NONBUF_BASE + RFC_DBELL_O_RFCPEIFG) = ENABLED_IRQS; - HWREG(RFC_DBELL_NONBUF_BASE + RFC_DBELL_O_RFCPEIEN) = ENABLED_IRQS + - IRQ_LAST_COMMAND_DONE; + HWREG(RFC_DBELL_NONBUF_BASE + RFC_DBELL_O_RFCPEIEN) = ENABLED_IRQS | irq; } /*---------------------------------------------------------------------------*/ void diff --git a/cpu/cc26xx-cc13xx/rf-core/rf-core.h b/cpu/cc26xx-cc13xx/rf-core/rf-core.h index bc389257c..7cf0b10e8 100644 --- a/cpu/cc26xx-cc13xx/rf-core/rf-core.h +++ b/cpu/cc26xx-cc13xx/rf-core/rf-core.h @@ -331,17 +331,19 @@ uint8_t rf_core_boot(void); void rf_core_setup_interrupts(void); /** - * \brief Enable the LAST_CMD_DONE interrupt. + * \brief Enable interrupt on command done. + * \param fg set true to enable irq on foreground command done and false for + * background commands or if not in ieee mode. * * This is used within TX routines in order to be able to sleep the CM3 and * wake up after TX has finished * * \sa rf_core_cmd_done_dis() */ -void rf_core_cmd_done_en(void); +void rf_core_cmd_done_en(bool fg); /** - * \brief Disable the LAST_CMD_DONE interrupt. + * \brief Disable the LAST_CMD_DONE and LAST_FG_CMD_DONE interrupts. * * This is used within TX routines after TX has completed * diff --git a/cpu/mc1322x/clock.c b/cpu/mc1322x/clock.c index ac70dfcf5..0eb6dada0 100644 --- a/cpu/mc1322x/clock.c +++ b/cpu/mc1322x/clock.c @@ -90,6 +90,12 @@ clock_seconds(void) return seconds; } +void +clock_set_seconds(unsigned long sec) +{ + seconds = sec; +} + void clock_wait(clock_time_t t) { diff --git a/cpu/mc1322x/lib/include/crm.h b/cpu/mc1322x/lib/include/crm.h index 27c0adc53..36ee3099a 100644 --- a/cpu/mc1322x/lib/include/crm.h +++ b/cpu/mc1322x/lib/include/crm.h @@ -325,6 +325,17 @@ static const int XTAL32_EN = 0; #define pack_XTAL_CNTL(ctune4pf, ctune, ftune, ibias) \ (*CRM_XTAL_CNTL = ((ctune4pf << 25) | (ctune << 21) | ( ftune << 16) | (ibias << 8) | 0x52)) +#define soft_reset() \ + __asm__ __volatile__ ( \ + "ldr r0, [%[sw]] \n\t" \ + "str r0, [%[sw]] \n\t" \ + : /* out */ \ + : /* in */ \ + [sw] "l" (CRM_SW_RST) \ + : /* clobber list */ \ + "r0", "memory" \ + ); + #endif /* REG_NO_COMPAT */ #endif diff --git a/cpu/mc1322x/lib/include/nvm.h b/cpu/mc1322x/lib/include/nvm.h index 65ba23d11..6bd8dfe0a 100644 --- a/cpu/mc1322x/lib/include/nvm.h +++ b/cpu/mc1322x/lib/include/nvm.h @@ -78,5 +78,6 @@ extern nvmErr_t (*nvm_write)(nvmInterface_t nvmInterface, nvmType_t nvmType ,voi /* SST flash has 32 sectors 4096 bytes each */ /* bit 0 is the first sector, bit 31 is the last */ extern nvmErr_t (*nvm_erase)(nvmInterface_t nvmInterface, nvmType_t nvmType ,uint32_t sectorBitfield); +extern nvmErr_t (*nvm_verify)(nvmInterface_t nvmInterface, nvmType_t nvmType, void *pSrc, uint32_t address, uint32_t numBytes); extern void(*nvm_setsvar)(uint32_t zero_for_awesome); #endif //NVM_H diff --git a/cpu/mc1322x/lib/nvm.c b/cpu/mc1322x/lib/nvm.c index 83dd8ecc7..569977c63 100644 --- a/cpu/mc1322x/lib/nvm.c +++ b/cpu/mc1322x/lib/nvm.c @@ -51,6 +51,10 @@ nvmErr_t (*nvm_erase) (nvmInterface_t nvmInterface, nvmType_t nvmType ,uint32_t sectorBitfield) = (void*) 0x00006e05; +nvmErr_t (*nvm_verify) +(nvmInterface_t nvmInterface, nvmType_t nvmType, void *pSrc, uint32_t address, uint32_t numBytes) += (void*) 0x00006f85; + void(*nvm_setsvar) (uint32_t zero_for_awesome) = (void *)0x00007085; diff --git a/cpu/msp430/Makefile.msp430 b/cpu/msp430/Makefile.msp430 index 81c71f51a..6d5370575 100644 --- a/cpu/msp430/Makefile.msp430 +++ b/cpu/msp430/Makefile.msp430 @@ -35,10 +35,17 @@ endif CONTIKI_CPU_DIRS = $(CONTIKI_CPU_FAM_DIR) . dev MSP430 = msp430.c flash.c clock.c leds.c leds-arch.c \ - watchdog.c lpm.c mtarch.c rtimer-arch.c + watchdog.c lpm.c rtimer-arch.c UIPDRIVERS = me.c me_tabs.c slip.c crc16.c ELFLOADER = elfloader.c elfloader-msp430.c symtab.c +ifndef CPU_HAS_MSP430X +# include mtarch.c only in the non-large memory model case, because +# the current implementation assumes 16-bit addresses (function pointers +# stored as "unsigned short"). +MSP430 += mtarch.c +endif + ifeq ($(TARGET_MEMORY_MODEL),large) ELFLOADER = elfloader-msp430x.c symtab.c endif diff --git a/cpu/msp430/cc2420-arch-sfd.c b/cpu/msp430/cc2420-arch-sfd.c index f7535b276..6cd7d2606 100644 --- a/cpu/msp430/cc2420-arch-sfd.c +++ b/cpu/msp430/cc2420-arch-sfd.c @@ -45,6 +45,8 @@ ISR(TIMERB1, cc2420_timerb1_interrupt) ENERGEST_ON(ENERGEST_TYPE_IRQ); /* always read TBIV to clear IFG */ tbiv = TBIV; + /* read and discard tbiv to avoid "variable set but not used" warning */ + (void)tbiv; if(CC2420_SFD_IS_1) { cc2420_sfd_counter++; cc2420_sfd_start_time = TBCCR1; diff --git a/cpu/msp430/cc2520-arch-sfd.c b/cpu/msp430/cc2520-arch-sfd.c index bafa11b1c..5e7bee813 100644 --- a/cpu/msp430/cc2520-arch-sfd.c +++ b/cpu/msp430/cc2520-arch-sfd.c @@ -44,6 +44,8 @@ ISR(TIMERB1, cc2520_timerb1_interrupt) ENERGEST_ON(ENERGEST_TYPE_IRQ); /* always read TBIV to clear IFG */ tbiv = TBIV; + /* read and discard tbiv to avoid "variable set but not used" warning */ + (void)tbiv; if(CC2520_SFD_IS_1) { cc2520_sfd_counter++; cc2520_sfd_start_time = TBCCR1; diff --git a/cpu/msp430/f2xxx/msp430.c b/cpu/msp430/f2xxx/msp430.c index 8c21986c4..c6552e058 100644 --- a/cpu/msp430/f2xxx/msp430.c +++ b/cpu/msp430/f2xxx/msp430.c @@ -32,8 +32,12 @@ #include "contiki.h" #include "dev/watchdog.h" +/* dco_required set to 1 will cause the CPU not to go into + * sleep modes where the DCO clock stopped */ +int msp430_dco_required; + #if defined(__MSP430__) && defined(__GNUC__) -#define asmv(arg) __asm__ __volatile__(arg) +#define asmv(arg) __asm__ __volatile__ (arg) #endif /*---------------------------------------------------------------------------*/ @@ -42,8 +46,8 @@ void * w_memcpy(void *out, const void *in, size_t n) { uint8_t *src, *dest; - src = (uint8_t *) in; - dest = (uint8_t *) out; + src = (uint8_t *)in; + dest = (uint8_t *)out; while(n-- > 0) { *dest++ = *src++; } @@ -56,7 +60,7 @@ void * w_memset(void *out, int value, size_t n) { uint8_t *dest; - dest = (uint8_t *) out; + dest = (uint8_t *)out; while(n-- > 0) { *dest++ = value & 0xff; } @@ -152,10 +156,30 @@ init_ports(void) /*---------------------------------------------------------------------------*/ /* msp430-ld may align _end incorrectly. Workaround in cpu_init. */ #if defined(__MSP430__) && defined(__GNUC__) -extern int _end; /* Not in sys/unistd.h */ +extern int _end; /* Not in sys/unistd.h */ static char *cur_break = (char *)&_end; #endif +/*---------------------------------------------------------------------------*/ +/* add/remove_lpm_req - for requiring a specific LPM mode. currently Contiki */ +/* jumps to LPM3 to save power, but DMA will not work if DCO is not clocked */ +/* so some modules might need to enter their LPM requirements */ +/* NOTE: currently only works with LPM1 (e.g. DCO) requirements. */ +/*---------------------------------------------------------------------------*/ +void +msp430_add_lpm_req(int req) +{ + if(req <= MSP430_REQUIRE_LPM1) { + msp430_dco_required++; + } +} +void +msp430_remove_lpm_req(int req) +{ + if(req <= MSP430_REQUIRE_LPM1) { + msp430_dco_required--; + } +} void msp430_cpu_init(void) { @@ -164,7 +188,7 @@ msp430_cpu_init(void) init_ports(); /* set DCO to a reasonable default value (8MHz) */ msp430_init_dco(); - /* calibrate the DCO step-by-step */ + /* calibrate the DCO step-by-step */ msp430_sync_dco(); eint(); #if defined(__MSP430__) && defined(__GNUC__) @@ -172,6 +196,7 @@ msp430_cpu_init(void) cur_break++; } #endif + msp430_dco_required = 0; } /*---------------------------------------------------------------------------*/ @@ -191,7 +216,7 @@ splhigh_(void) asmv("mov r2, %0" : "=r" (sr)); asmv("bic %0, r2" : : "i" (GIE)); #endif - return sr & GIE; /* Ignore other sr bits. */ + return sr & GIE; /* Ignore other sr bits. */ } /*---------------------------------------------------------------------------*/ /* @@ -209,7 +234,8 @@ splhigh_(void) /* } */ /*---------------------------------------------------------------------------*/ #ifdef __IAR_SYSTEMS_ICC__ -int __low_level_init(void) +int +__low_level_init(void) { /* turn off watchdog so that C-init will run */ WDTCTL = WDTPW + WDTHOLD; @@ -224,7 +250,8 @@ int __low_level_init(void) #endif /*---------------------------------------------------------------------------*/ void -msp430_sync_dco(void) { +msp430_sync_dco(void) +{ uint16_t oldcapture; int16_t diff; /* DELTA_2 assumes an ACLK of 32768 Hz */ @@ -260,7 +287,7 @@ msp430_sync_dco(void) { if(DCOCTL == 0x00) { /* Did DCO roll over? */ BCSCTL1++; } - /* -> Select next higher RSEL */ + /* -> Select next higher RSEL */ } } diff --git a/cpu/msp430/f2xxx/uart0.c b/cpu/msp430/f2xxx/uart0.c index 249362c0f..79c75f877 100644 --- a/cpu/msp430/f2xxx/uart0.c +++ b/cpu/msp430/f2xxx/uart0.c @@ -51,6 +51,11 @@ static volatile uint8_t transmitting; #define TX_WITH_INTERRUPT 1 #endif /* UART0_CONF_TX_WITH_INTERRUPT */ +#ifdef UART0_CONF_RX_WITH_DMA +#define RX_WITH_DMA UART0_CONF_RX_WITH_DMA +#else /* UART0_CONF_RX_WITH_DMA */ +#define RX_WITH_DMA 1 +#endif /* UART0_CONF_RX_WITH_DMA */ #if TX_WITH_INTERRUPT #define TXBUFSIZE 64 @@ -59,6 +64,30 @@ static struct ringbuf txbuf; static uint8_t txbuf_data[TXBUFSIZE]; #endif /* TX_WITH_INTERRUPT */ +#if RX_WITH_DMA +#define RXBUFSIZE 128 + +static uint8_t rxbuf[RXBUFSIZE]; +static uint16_t last_size; +static struct ctimer rxdma_timer; + +static void +handle_rxdma_timer(void *ptr) +{ + uint16_t size; + size = DMA0SZ; /* Note: loop requires that size is less or eq to RXBUFSIZE */ + while(last_size != size) { + uart0_input_handler((unsigned char)rxbuf[RXBUFSIZE - last_size]); + last_size--; + if(last_size == 0) { + last_size = RXBUFSIZE; + } + } + + ctimer_reset(&rxdma_timer); +} +#endif /* RX_WITH_DMA */ + /*---------------------------------------------------------------------------*/ uint8_t uart0_active(void) @@ -69,6 +98,9 @@ uart0_active(void) void uart0_set_input(int (*input)(unsigned char c)) { +#if RX_WITH_DMA /* This needs to be called after ctimer process is started */ + ctimer_set(&rxdma_timer, CLOCK_SECOND / 64, handle_rxdma_timer, NULL); +#endif uart0_input_handler = input; } /*---------------------------------------------------------------------------*/ @@ -100,7 +132,7 @@ uart0_writeb(unsigned char c) #endif /* TX_WITH_INTERRUPT */ } /*---------------------------------------------------------------------------*/ -#if ! NETSTACK_CONF_WITH_IPV4 /* If NETSTACK_CONF_WITH_IPV4 is defined, putchar() is defined by the SLIP driver */ +#if !NETSTACK_CONF_WITH_IPV4 /* If NETSTACK_CONF_WITH_IPV4 is defined, putchar() is defined by the SLIP driver */ #endif /* ! NETSTACK_CONF_WITH_IPV4 */ /*---------------------------------------------------------------------------*/ /** @@ -135,8 +167,24 @@ uart0_init(unsigned long ubr) ringbuf_init(&txbuf, txbuf_data, sizeof(txbuf_data)); IE2 |= UCA0TXIE; /* Enable UCA0 TX interrupt */ #endif /* TX_WITH_INTERRUPT */ + +#if RX_WITH_DMA + IE2 &= ~UCA0RXIE; /* disable USART0 RX interrupt */ + /* UART0_RX trigger */ + DMACTL0 = DMA0TSEL_3; + + /* source address = UCA0RXBUF */ + DMA0SA = (unsigned int)&UCA0RXBUF; + DMA0DA = (unsigned int)&rxbuf; + DMA0SZ = RXBUFSIZE; + last_size = RXBUFSIZE; + DMA0CTL = DMADT_4 + DMASBDB + DMADSTINCR_3 + DMAEN + DMAREQ; + + msp430_add_lpm_req(MSP430_REQUIRE_LPM1); +#endif /* RX_WITH_DMA */ } /*---------------------------------------------------------------------------*/ +#if !RX_WITH_DMA ISR(USCIAB0RX, uart0_rx_interrupt) { uint8_t c; @@ -148,18 +196,19 @@ ISR(USCIAB0RX, uart0_rx_interrupt) c = UCA0RXBUF; if(uart0_input_handler != NULL) { if(uart0_input_handler(c)) { - LPM4_EXIT; + LPM4_EXIT; } } } ENERGEST_OFF(ENERGEST_TYPE_IRQ); } +#endif /* !RX_WITH_DMA */ /*---------------------------------------------------------------------------*/ #if TX_WITH_INTERRUPT ISR(USCIAB0TX, uart0_tx_interrupt) { ENERGEST_ON(ENERGEST_TYPE_IRQ); - if((IFG2 & UCA0TXIFG)){ + if((IFG2 & UCA0TXIFG)) { if(ringbuf_elements(&txbuf) == 0) { transmitting = 0; diff --git a/cpu/native/Makefile.native b/cpu/native/Makefile.native index bf4e8ea47..2adb48070 100644 --- a/cpu/native/Makefile.native +++ b/cpu/native/Makefile.native @@ -14,10 +14,10 @@ NM ?= nm OBJCOPY ?= objcopy STRIP ?= strip ifdef WERROR -CFLAGSWERROR=-Werror -pedantic -std=c99 -Werror +CFLAGSWERROR=-Werror endif CFLAGSNO = -Wall -g -I/usr/local/include $(CFLAGSWERROR) -CFLAGS += $(CFLAGSNO) -O +CFLAGS += $(CFLAGSNO) ifeq ($(HOST_OS),Darwin) AROPTS = -r @@ -25,7 +25,7 @@ LDFLAGS += -Wl,-flat_namespace CFLAGS += -DHAVE_SNPRINTF=1 -U__ASSERT_USE_STDERR else ifeq ($(HOST_OS),Linux) -LDFLAGS = -Wl,-Map=contiki-$(TARGET).map,-export-dynamic +LDFLAGS += -Wl,-Map=contiki-$(TARGET).map,-export-dynamic endif endif diff --git a/cpu/native/net/linuxradio-drv.c b/cpu/native/net/linuxradio-drv.c new file mode 100644 index 000000000..a2be32940 --- /dev/null +++ b/cpu/native/net/linuxradio-drv.c @@ -0,0 +1,210 @@ +/* + * Copyright (c) 2013, Google + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * Author: Vladimir Pouzanov + * + */ + +#include "contiki.h" +#include "contiki-conf.h" + +#if defined(linux) && NETSTACK_CONF_WITH_IPV6 + +#include "linuxradio-drv.h" + +#include "net/packetbuf.h" +#include "net/netstack.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define DEBUG 0 +#if DEBUG +#include +#define PRINTF(...) printf(__VA_ARGS__) +#else +#define PRINTF(...) +#endif + +static int sockfd = -1; +static char *sockbuf; +static int buflen; + +#define MAX_PACKET_SIZE 256 + +static int +init(void) +{ + sockbuf = malloc(MAX_PACKET_SIZE); + if(sockbuf == 0) { + return 1; + } + return 0; +} +static int +prepare(const void *payload, unsigned short payload_len) +{ + if(payload_len > MAX_PACKET_SIZE) { + return 0; + } + memcpy(sockbuf, payload, payload_len); + buflen = payload_len; + + return 0; +} +static int +transmit(unsigned short transmit_len) +{ + int sent = 0; + sent = send(sockfd, sockbuf, buflen, 0); + if(sent < 0) { + perror("linuxradio send()"); + return RADIO_TX_ERR; + } + buflen = 0; + return RADIO_TX_OK; +} +static int +my_send(const void *payload, unsigned short payload_len) +{ + int ret = -1; + + if(prepare(payload, payload_len)) { + return ret; + } + + ret = transmit(payload_len); + + return ret; +} +static int +my_read(void *buf, unsigned short buf_len) +{ + return 0; +} +static int +channel_clear(void) +{ + return 1; +} +static int +receiving_packet(void) +{ + return 0; +} +static int +pending_packet(void) +{ + return 0; +} +static int +set_fd(fd_set *rset, fd_set *wset) +{ + FD_SET(sockfd, rset); + return 1; +} +static void +handle_fd(fd_set *rset, fd_set *wset) +{ + if(FD_ISSET(sockfd, rset)) { + int bytes = read(sockfd, sockbuf, MAX_PACKET_SIZE); + buflen = bytes; + memcpy(packetbuf_dataptr(), sockbuf, bytes); + packetbuf_set_datalen(bytes); + NETSTACK_RDC.input(); + } +} + +static const struct select_callback linuxradio_sock_callback = { set_fd, handle_fd }; + +static int +on(void) +{ + struct ifreq ifr; + int err; + struct sockaddr_ll sll; + + sockfd = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_IEEE802154)); + if(sockfd < 0) { + perror("linuxradio socket()"); + return 0; + } else { + strncpy((char *)ifr.ifr_name, NETSTACK_CONF_LINUXRADIO_DEV, IFNAMSIZ); + err = ioctl(sockfd, SIOCGIFINDEX, &ifr); + if(err == -1) { + perror("linuxradio ioctl()"); + return 0; + } + sll.sll_family = AF_PACKET; + sll.sll_ifindex = ifr.ifr_ifindex; + sll.sll_protocol = htons(ETH_P_IEEE802154); + + if(bind(sockfd, (struct sockaddr *)&sll, sizeof(sll)) < 0) { + perror("linuxradio bind()"); + return 0; + } + + select_set_callback(sockfd, &linuxradio_sock_callback); + return 1; + } +} +static int +off(void) +{ + close(sockfd); + sockfd = -1; + return 1; +} +const struct radio_driver linuxradio_driver = +{ + init, + prepare, + transmit, + my_send, + my_read, + channel_clear, + receiving_packet, + pending_packet, + on, + off, +}; + +#endif diff --git a/cpu/native/net/linuxradio-drv.h b/cpu/native/net/linuxradio-drv.h new file mode 100644 index 000000000..fddf38d01 --- /dev/null +++ b/cpu/native/net/linuxradio-drv.h @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2013, Google + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * Author: Vladimir Pouzanov + * + */ + +#ifndef __LINUXRADIO_DRV_H__ +#define __LINUXRADIO_DRV_H__ + +#include "dev/radio.h" + +extern const struct radio_driver linuxradio_driver; + +#endif diff --git a/cpu/native/net/tapdev.c b/cpu/native/net/tapdev.c index e58b3c475..b60cd1946 100644 --- a/cpu/native/net/tapdev.c +++ b/cpu/native/net/tapdev.c @@ -93,8 +93,11 @@ static void remove_route(void) { char buf[1024]; + int ret; + snprintf(buf, sizeof(buf), "route delete -net 172.18.0.0"); - system(buf); + ret = system(buf); + fprintf(stderr, "ret %d\n", ret); fprintf(stderr, "%s\n", buf); } @@ -103,7 +106,8 @@ void tapdev_init(void) { char buf[1024]; - + int ret; + fd = open(DEVTAP, O_RDWR); if(fd == -1) { perror("tapdev: tapdev_init: open"); @@ -123,7 +127,8 @@ tapdev_init(void) #endif /* Linux */ snprintf(buf, sizeof(buf), "ifconfig tap0 inet 172.18.0.1/16"); - system(buf); + ret = system(buf); + fprintf(stderr, "ret %d\n", ret); fprintf(stderr, "%s\n", buf); #ifdef linux /* route add for linux */ @@ -132,8 +137,9 @@ tapdev_init(void) /* route add for freebsd */ snprintf(buf, sizeof(buf), "route add -net 172.18.0.0/16 -iface tap0"); #endif /* linux */ - - system(buf); + + ret = system(buf); + fprintf(stderr, "ret %d\n", ret); fprintf(stderr, "%s\n", buf); atexit(remove_route); diff --git a/cpu/native/net/tapdev6.c b/cpu/native/net/tapdev6.c index 8ff74e09c..d69ac290e 100644 --- a/cpu/native/net/tapdev6.c +++ b/cpu/native/net/tapdev6.c @@ -331,7 +331,10 @@ tapdev_init(void) */ /* freebsd */ snprintf(buf, sizeof(buf), "ifconfig tap0 up"); - system(buf); + if(system(buf) == -1) { + perror("tapdev: system: ifconfig"); + return; + } printf("%s\n", buf); /* */ diff --git a/cpu/native/net/wpcap.c b/cpu/native/net/wpcap.c index 073a615ee..f32ba980f 100644 --- a/cpu/native/net/wpcap.c +++ b/cpu/native/net/wpcap.c @@ -192,7 +192,7 @@ uint8_t wfall_send(const uip_lladdr_t *lladdr); static uip_ipaddr_t last_sender; #endif -static void +static int output(void) { #if FALLBACK_HAS_ETHERNET_HEADERS&&0 @@ -203,8 +203,8 @@ output(void) } uip_ipaddr_copy(&last_sender, &UIP_IP_BUF->srcipaddr); #endif - PRINTF("FUT: %u\n", uip_len); - wfall_send(0); + PRINTF("FUT: %u\n", uip_len); + return wfall_send(0); } const struct uip_fallback_interface rpl_interface = { diff --git a/cpu/rl78/Makefile.rl78 b/cpu/rl78/Makefile.rl78 index a20382b7f..d5b68af68 100755 --- a/cpu/rl78/Makefile.rl78 +++ b/cpu/rl78/Makefile.rl78 @@ -127,7 +127,7 @@ else STRIP = $(CROSS_COMPILE)strip ifdef WERROR - CFLAGSWERROR ?= -Werror -pedantic -std=c99 -Werror + CFLAGSWERROR ?= -Werror endif CFLAGSNO ?= -Wall -g $(CFLAGSWERROR) diff --git a/cpu/stm32w108/Makefile.stm32w108 b/cpu/stm32w108/Makefile.stm32w108 index dce0b1383..a51e0dbad 100644 --- a/cpu/stm32w108/Makefile.stm32w108 +++ b/cpu/stm32w108/Makefile.stm32w108 @@ -102,12 +102,10 @@ ifeq ($(STM32W_CPUREV), CC) LD-EXT=-stm32w108CC RAM_SIZE = 2*8192 FLASH_SIZE = 2*128*1024 - ${warning "using stm32w108CC specific ld file"} else ifeq ($(STM32W_CPUREV), xB) LD-EXT=-stm32w108xB RAM_SIZE = 8192 FLASH_SIZE = 128*1024 - ${warning "using stm32w108xB specific ld file"} else ${error "Bad STM32W_CPUREV value or no STM32W_CPUREV value specified. Cpu revision should be specified. Please read cpu/stm32w108/README.txt for more details."} endif diff --git a/cpu/stm32w108/dev/stm32w-radio.c b/cpu/stm32w108/dev/stm32w-radio.c index 4488b3a93..30bfa0ff2 100644 --- a/cpu/stm32w108/dev/stm32w-radio.c +++ b/cpu/stm32w108/dev/stm32w-radio.c @@ -72,6 +72,7 @@ #if RDC_CONF_DEBUG_LED #define LED_RDC RDC_CONF_DEBUG_LED +#undef LED_ACTIVITY #define LED_ACTIVITY 1 #else #define LED_RDC 0 @@ -117,6 +118,7 @@ #endif /* LED_ACTIVITY */ #if RDC_CONF_HARDWARE_CSMA +#undef MAC_RETRIES #define MAC_RETRIES 0 #endif /* RDC_CONF_HARDWARE_CSMA */ @@ -169,6 +171,7 @@ const RadioTransmitConfig radioTransmitConfig = { TRUE /* appendCrc; */ }; +#undef MAC_RETRIES #define MAC_RETRIES 0 /* diff --git a/dev/cc1200/cc1200-conf.h b/dev/cc1200/cc1200-conf.h index 83d8d625c..3641e87e3 100644 --- a/dev/cc1200/cc1200-conf.h +++ b/dev/cc1200/cc1200-conf.h @@ -73,6 +73,17 @@ #define CC1200_MAX_PAYLOAD_LEN 127 #endif /*---------------------------------------------------------------------------*/ +/* + * The RX watchdog is used to check whether the radio is in RX mode at regular + * intervals (once per second). Can be used to improve reliability especially + * if NullRDC is used. Turned of by default. + */ +#ifdef CC1200_CONF_USE_RX_WATCHDOG +#define CC1200_USE_RX_WATCHDOG CC1200_CONF_USE_RX_WATCHDOG +#else +#define CC1200_USE_RX_WATCHDOG 0 +#endif +/*---------------------------------------------------------------------------*/ /* * Use 802.15.4g frame format? Supports frame lenghts up to 2047 bytes! */ diff --git a/dev/cc1200/cc1200.c b/dev/cc1200/cc1200.c index bee144dd4..0ba4eccef 100644 --- a/dev/cc1200/cc1200.c +++ b/dev/cc1200/cc1200.c @@ -57,8 +57,7 @@ * - 3: Print errors + warnings + information (what's going on...) */ #define DEBUG_LEVEL 2 -/* If set to 1, we use a timer to poll RX mode inside the cc1200 process */ -#define USE_RX_WATCHDOG 1 + /* * RF test mode. Blocks inside "configure()". * - Set this parameter to 1 in order to produce an modulated carrier (PN9) @@ -66,14 +65,16 @@ * - Set this parameter to 3 in order to switch to rx synchronous mode * The channel is set according to CC1200_DEFAULT_CHANNEL */ -#define RF_TESTMODE 0 -#if RF_TESTMODE +#ifndef CC1200_RF_TESTMODE +#define CC1200_RF_TESTMODE 0 +#endif +#if CC1200_RF_TESTMODE #undef CC1200_RF_CFG -#if RF_TESTMODE == 1 +#if CC1200_RF_TESTMODE == 1 #define CC1200_RF_CFG cc1200_802154g_863_870_fsk_50kbps -#elif RF_TESTMODE == 2 +#elif CC1200_RF_TESTMODE == 2 #define CC1200_RF_CFG cc1200_802154g_863_870_fsk_50kbps -#elif RF_TESTMODE == 3 +#elif CC1200_RF_TESTMODE == 3 #define CC1200_RF_CFG cc1200_802154g_863_870_fsk_50kbps #endif #endif @@ -1442,7 +1443,7 @@ configure(void) { uint8_t reg; -#if RF_TESTMODE +#if CC1200_RF_TESTMODE uint32_t freq; #endif @@ -1471,7 +1472,7 @@ configure(void) * RF test modes needed during hardware development **************************************************************************/ -#if (RF_TESTMODE == 1) || (RF_TESTMODE == 2) +#if (CC1200_RF_TESTMODE == 1) || (CC1200_RF_TESTMODE == 2) strobe(CC1200_SFTX); single_write(CC1200_TXFIRST, 0); @@ -1487,7 +1488,7 @@ configure(void) printf("RF: Freq1 0x%02x\n", ((uint8_t *)&freq)[1]); printf("RF: Freq2 0x%02x\n", ((uint8_t *)&freq)[2]); -#if (RF_TESTMODE == 1) +#if (CC1200_RF_TESTMODE == 1) single_write(CC1200_SYNC_CFG1, 0xE8); single_write(CC1200_PREAMBLE_CFG1, 0x00); single_write(CC1200_MDMCFG1, 0x46); @@ -1498,7 +1499,7 @@ configure(void) single_write(CC1200_FS_DVC0, 0x17); #endif -#if (RF_TESTMODE == 2) +#if (CC1200_RF_TESTMODE == 2) single_write(CC1200_SYNC_CFG1, 0xE8); single_write(CC1200_PREAMBLE_CFG1, 0x00); single_write(CC1200_MDMCFG1, 0x06); @@ -1513,7 +1514,7 @@ configure(void) strobe(CC1200_STX); while(1) { -#if (RF_TESTMODE == 1) +#if (CC1200_RF_TESTMODE == 1) watchdog_periodic(); BUSYWAIT_UNTIL(0, RTIMER_SECOND / 10); leds_off(LEDS_YELLOW); @@ -1534,7 +1535,7 @@ configure(void) #endif } -#elif (RF_TESTMODE == 3) +#elif (CC1200_RF_TESTMODE == 3) /* CS on GPIO3 */ single_write(CC1200_IOCFG3, CC1200_IOCFG_CARRIER_SENSE); @@ -1568,7 +1569,7 @@ configure(void) } -#endif /* #if RF_TESTMODE == ... */ +#endif /* #if CC1200_RF_TESTMODE == ... */ /*************************************************************************** * Set the stuff we need for this driver to work. Don't touch! diff --git a/dev/cc2420/cc2420.c b/dev/cc2420/cc2420.c index d455e02df..66a551250 100644 --- a/dev/cc2420/cc2420.c +++ b/dev/cc2420/cc2420.c @@ -497,7 +497,7 @@ init_security(void) } /*---------------------------------------------------------------------------*/ static void -set_key(uint8_t *key) +set_key(const uint8_t *key) { GET_LOCK(); @@ -655,17 +655,17 @@ cc2420_transmit(unsigned short payload_len) #endif /* WITH_SEND_CCA */ for(i = LOOP_20_SYMBOLS; i > 0; i--) { if(CC2420_SFD_IS_1) { +#if PACKETBUF_WITH_PACKET_TYPE { rtimer_clock_t sfd_timestamp; sfd_timestamp = cc2420_sfd_start_time; -#if PACKETBUF_WITH_PACKET_TYPE if(packetbuf_attr(PACKETBUF_ATTR_PACKET_TYPE) == PACKETBUF_ATTR_PACKET_TYPE_TIMESTAMP) { /* Write timestamp to last two bytes of packet in TXFIFO. */ write_ram((uint8_t *) &sfd_timestamp, CC2420RAM_TXFIFO + payload_len - 1, 2, WRITE_RAM_IN_ORDER); } -#endif } +#endif /* PACKETBUF_WITH_PACKET_TYPE */ if(!(get_status() & BV(CC2420_TX_ACTIVE))) { /* SFD went high but we are not transmitting. This means that diff --git a/dev/cc2520/cc2520.c b/dev/cc2520/cc2520.c index b6c0e43fa..e0dad1b6a 100644 --- a/dev/cc2520/cc2520.c +++ b/dev/cc2520/cc2520.c @@ -217,6 +217,8 @@ flushrx(void) uint8_t dummy; CC2520_READ_FIFO_BYTE(dummy); + /* read and discard dummy to avoid "variable set but not used" warning */ + (void)dummy; CC2520_STROBE(CC2520_INS_SFLUSHRX); CC2520_STROBE(CC2520_INS_SFLUSHRX); } @@ -435,17 +437,17 @@ cc2520_transmit(unsigned short payload_len) #endif /* WITH_SEND_CCA */ for(i = LOOP_20_SYMBOLS; i > 0; i--) { if(CC2520_SFD_IS_1) { +#if PACKETBUF_WITH_PACKET_TYPE { rtimer_clock_t sfd_timestamp; sfd_timestamp = cc2520_sfd_start_time; -#if PACKETBUF_WITH_PACKET_TYPE if(packetbuf_attr(PACKETBUF_ATTR_PACKET_TYPE) == PACKETBUF_ATTR_PACKET_TYPE_TIMESTAMP) { /* Write timestamp to last two bytes of packet in TXFIFO. */ CC2520_WRITE_RAM(&sfd_timestamp, CC2520RAM_TXFIFO + payload_len - 1, 2); } -#endif } +#endif /* PACKETBUF_WITH_PACKET_TYPE */ if(!(status() & BV(CC2520_TX_ACTIVE))) { /* SFD went high but we are not transmitting. This means that diff --git a/dev/cc2520/cc2520.h b/dev/cc2520/cc2520.h index 18a43649a..3c8e654ef 100644 --- a/dev/cc2520/cc2520.h +++ b/dev/cc2520/cc2520.h @@ -118,6 +118,7 @@ void cc2520_set_cca_threshold(int value); CC2520_SPI_ENABLE(); \ SPI_WRITE((CC2520_INS_MEMRD | ((adr>>8)&0xFF))); \ SPI_WRITE((adr & 0xFF)); \ + (void)SPI_RXBUF; \ SPI_READ(data); \ CC2520_SPI_DISABLE(); \ } while(0) diff --git a/dev/sht11/sht11.c b/dev/sht11/sht11.c index f6780d0a0..670d10d91 100644 --- a/dev/sht11/sht11.c +++ b/dev/sht11/sht11.c @@ -215,7 +215,6 @@ sht11_init(void) This assumes the SDA/SCL pins passed in the -arch.h file are actually the same used for I2C operation, else comment out the following */ - #warning SHT11: DISABLING I2C BUS SHT11_PxSEL &= ~(BV(SHT11_ARCH_SDA) | BV(SHT11_ARCH_SCL)); #if defined(__MSP430_HAS_MSP430X_CPU__) || defined(__MSP430_HAS_MSP430XV2_CPU__) SHT11_PxREN &= ~(BV(SHT11_ARCH_SDA) | BV(SHT11_ARCH_SCL)); diff --git a/examples/antelope/netdb/netdb.csc b/examples/antelope/netdb/netdb.csc index 1bd5868d2..ba1c7e673 100755 --- a/examples/antelope/netdb/netdb.csc +++ b/examples/antelope/netdb/netdb.csc @@ -1,271 +1,271 @@ - - - [CONTIKI_DIR]/tools/cooja/apps/mrm - [CONTIKI_DIR]/tools/cooja/apps/mspsim - [CONTIKI_DIR]/tools/cooja/apps/avrora - [CONTIKI_DIR]/tools/cooja/apps/serial_socket - [CONTIKI_DIR]/tools/cooja/apps/collect-view - - NetDB - 0 - 123456 - 1000000 - - org.contikios.cooja.radiomediums.UDGM - 30.0 - 30.0 - 1.0 - 1.0 - - - 40000 - - - org.contikios.cooja.mspmote.SkyMoteType - sky1 - NetDB Server - [CONTIKI_DIR]/examples/antelope/netdb/netdb-server.c - make netdb-server.sky TARGET=sky - [CONTIKI_DIR]/examples/antelope/netdb/netdb-server.sky - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.interfaces.IPAddress - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - org.contikios.cooja.mspmote.interfaces.MspClock - org.contikios.cooja.mspmote.interfaces.MspMoteID - org.contikios.cooja.mspmote.interfaces.SkyButton - org.contikios.cooja.mspmote.interfaces.SkyFlash - org.contikios.cooja.mspmote.interfaces.SkyCoffeeFilesystem - org.contikios.cooja.mspmote.interfaces.Msp802154Radio - org.contikios.cooja.mspmote.interfaces.MspSerial - org.contikios.cooja.mspmote.interfaces.SkyLED - org.contikios.cooja.mspmote.interfaces.MspDebugOutput - org.contikios.cooja.mspmote.interfaces.SkyTemperature - - - org.contikios.cooja.mspmote.SkyMoteType - sky2 - NetDB Client - [CONTIKI_DIR]/examples/antelope/netdb/netdb-client.c - make netdb-client.sky TARGET=sky - [CONTIKI_DIR]/examples/antelope/netdb/netdb-client.sky - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.interfaces.IPAddress - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - org.contikios.cooja.mspmote.interfaces.MspClock - org.contikios.cooja.mspmote.interfaces.MspMoteID - org.contikios.cooja.mspmote.interfaces.SkyButton - org.contikios.cooja.mspmote.interfaces.SkyFlash - org.contikios.cooja.mspmote.interfaces.SkyCoffeeFilesystem - org.contikios.cooja.mspmote.interfaces.Msp802154Radio - org.contikios.cooja.mspmote.interfaces.MspSerial - org.contikios.cooja.mspmote.interfaces.SkyLED - org.contikios.cooja.mspmote.interfaces.MspDebugOutput - org.contikios.cooja.mspmote.interfaces.SkyTemperature - - - - - org.contikios.cooja.interfaces.Position - 23.57340748739308 - 46.80222047486912 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 1 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 40.39130096157144 - 70.54634688655467 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 2 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 66.04131381969006 - 36.41113701058369 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 3 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 63.00130046120498 - 80.89331313174746 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 4 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 40.2894982777653 - 95.14334789567525 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 5 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - -13.168104050312492 - 40.250683112542255 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 6 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 80.95025965975177 - 44.99507552455861 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 7 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 6.857316697020866 - 33.24863334754029 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 8 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 35.975659895989395 - 27.42171932830696 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 9 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 13.672853648109518 - 68.2461872644317 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 10 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 44.62423029692567 - 48.53691502749644 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 51 - - sky2 - - - - org.contikios.cooja.plugins.SimControl - 259 - 3 - 205 - 0 - 0 - - - org.contikios.cooja.plugins.Visualizer - - org.contikios.cooja.plugins.skins.IDVisualizerSkin - org.contikios.cooja.plugins.skins.MoteTypeVisualizerSkin - org.contikios.cooja.plugins.skins.UDGMVisualizerSkin - 4.472125038273293 0.0 0.0 4.472125038273293 79.43486237544504 -89.06315297501011 - - 475 - 0 - 429 - 644 - 9 - - - org.contikios.cooja.plugins.LogListener - - ID:4$ - - 1024 - 2 - 150 - 0 - 389 - - - org.contikios.cooja.plugins.MoteInterfaceViewer - 10 - - Serial port - 0,0 - - 588 - 1 - 399 - 505 - 520 - - - + + + [CONTIKI_DIR]/tools/cooja/apps/mrm + [CONTIKI_DIR]/tools/cooja/apps/mspsim + [CONTIKI_DIR]/tools/cooja/apps/avrora + [CONTIKI_DIR]/tools/cooja/apps/serial_socket + [CONTIKI_DIR]/tools/cooja/apps/collect-view + + NetDB + 0 + 123456 + 1000000 + + org.contikios.cooja.radiomediums.UDGM + 30.0 + 30.0 + 1.0 + 1.0 + + + 40000 + + + org.contikios.cooja.mspmote.SkyMoteType + sky1 + NetDB Server + [CONTIKI_DIR]/examples/antelope/netdb/netdb-server.c + make netdb-server.sky TARGET=sky + [CONTIKI_DIR]/examples/antelope/netdb/netdb-server.sky + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.interfaces.IPAddress + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + org.contikios.cooja.mspmote.interfaces.MspClock + org.contikios.cooja.mspmote.interfaces.MspMoteID + org.contikios.cooja.mspmote.interfaces.SkyButton + org.contikios.cooja.mspmote.interfaces.SkyFlash + org.contikios.cooja.mspmote.interfaces.SkyCoffeeFilesystem + org.contikios.cooja.mspmote.interfaces.Msp802154Radio + org.contikios.cooja.mspmote.interfaces.MspSerial + org.contikios.cooja.mspmote.interfaces.SkyLED + org.contikios.cooja.mspmote.interfaces.MspDebugOutput + org.contikios.cooja.mspmote.interfaces.SkyTemperature + + + org.contikios.cooja.mspmote.SkyMoteType + sky2 + NetDB Client + [CONTIKI_DIR]/examples/antelope/netdb/netdb-client.c + make netdb-client.sky TARGET=sky + [CONTIKI_DIR]/examples/antelope/netdb/netdb-client.sky + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.interfaces.IPAddress + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + org.contikios.cooja.mspmote.interfaces.MspClock + org.contikios.cooja.mspmote.interfaces.MspMoteID + org.contikios.cooja.mspmote.interfaces.SkyButton + org.contikios.cooja.mspmote.interfaces.SkyFlash + org.contikios.cooja.mspmote.interfaces.SkyCoffeeFilesystem + org.contikios.cooja.mspmote.interfaces.Msp802154Radio + org.contikios.cooja.mspmote.interfaces.MspSerial + org.contikios.cooja.mspmote.interfaces.SkyLED + org.contikios.cooja.mspmote.interfaces.MspDebugOutput + org.contikios.cooja.mspmote.interfaces.SkyTemperature + + + + + org.contikios.cooja.interfaces.Position + 23.57340748739308 + 46.80222047486912 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 1 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 40.39130096157144 + 70.54634688655467 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 2 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 66.04131381969006 + 36.41113701058369 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 3 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 63.00130046120498 + 80.89331313174746 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 4 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 40.2894982777653 + 95.14334789567525 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 5 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + -13.168104050312492 + 40.250683112542255 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 6 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 80.95025965975177 + 44.99507552455861 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 7 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 6.857316697020866 + 33.24863334754029 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 8 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 35.975659895989395 + 27.42171932830696 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 9 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 13.672853648109518 + 68.2461872644317 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 10 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 44.62423029692567 + 48.53691502749644 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 51 + + sky2 + + + + org.contikios.cooja.plugins.SimControl + 259 + 3 + 205 + 0 + 0 + + + org.contikios.cooja.plugins.Visualizer + + org.contikios.cooja.plugins.skins.IDVisualizerSkin + org.contikios.cooja.plugins.skins.MoteTypeVisualizerSkin + org.contikios.cooja.plugins.skins.UDGMVisualizerSkin + 4.472125038273293 0.0 0.0 4.472125038273293 79.43486237544504 -89.06315297501011 + + 475 + 0 + 429 + 644 + 9 + + + org.contikios.cooja.plugins.LogListener + + ID:4$ + + 1024 + 2 + 150 + 0 + 389 + + + org.contikios.cooja.plugins.MoteInterfaceViewer + 10 + + Serial port + 0,0 + + 588 + 1 + 399 + 505 + 520 + + + diff --git a/examples/cc2530dk/border-router/slip-bridge.c b/examples/cc2530dk/border-router/slip-bridge.c index 30bd4a429..ff79e2b98 100644 --- a/examples/cc2530dk/border-router/slip-bridge.c +++ b/examples/cc2530dk/border-router/slip-bridge.c @@ -83,7 +83,7 @@ init(void) slip_set_input_callback(slip_input_callback); } /*---------------------------------------------------------------------------*/ -static void +static int output(void) { if(uip_ipaddr_cmp(&last_sender, &UIP_IP_BUF->srcipaddr)) { @@ -94,6 +94,7 @@ output(void) PRINTF("SUT: %u\n", uip_len); slip_send(); } + return 0; } /*---------------------------------------------------------------------------*/ struct uip_fallback_interface slip_interface = { diff --git a/examples/cc2530dk/udp-ipv6/project-conf.h b/examples/cc2530dk/udp-ipv6/project-conf.h index fb37ebfc3..adb4fc0f0 100644 --- a/examples/cc2530dk/udp-ipv6/project-conf.h +++ b/examples/cc2530dk/udp-ipv6/project-conf.h @@ -45,5 +45,6 @@ #define BUTTON_SENSOR_CONF_ON 1 #define UIP_CONF_ICMP6 1 #define RIMESTATS_CONF_ENABLED 1 +#define UIP_CONF_ND6_SEND_NA 1 #endif /* PROJECT_CONF_H_ */ diff --git a/examples/cc2538dk/pka/Makefile b/examples/cc2538dk/pka/Makefile new file mode 100644 index 000000000..5d1279f4c --- /dev/null +++ b/examples/cc2538dk/pka/Makefile @@ -0,0 +1,6 @@ +CONTIKI_PROJECT = ecc-ecdh ecc-sign ecc-verify + +all: $(CONTIKI_PROJECT) + +CONTIKI = ../../.. +include $(CONTIKI)/Makefile.include diff --git a/examples/cc2538dk/pka/ecc-ecdh.c b/examples/cc2538dk/pka/ecc-ecdh.c new file mode 100644 index 000000000..ec809fc29 --- /dev/null +++ b/examples/cc2538dk/pka/ecc-ecdh.c @@ -0,0 +1,188 @@ +/* + * Copyright (c) 2014, Institute for Pervasive Computing, ETH Zurich. + * All rights reserved. + * + * Author: Andreas Dröscher + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ +/** + * \addtogroup cc2538-examples + * @{ + * + * \defgroup cc2538-ecdh-test cc2538dk ECDH Test Project + * + * ECDH example for CC2538 on SmartRF06EB. + * + * This example shows how ECDH should be used. The example also verifies + * the ECDH functionality. + * + * @{ + * + * \file + * Example demonstrating ECDH on the cc2538dk platform + */ +#include "contiki.h" +#include "ecc-algorithm.h" +#include "ecc-curve.h" +#include "random.h" +#include "rtimer.h" +#include "pt.h" + +#include +#include + +static void +ecc_set_random(uint32_t *secret) +{ + int i; + for(i = 0; i < 8; ++i) { + secret[i] = (uint32_t)random_rand() | (uint32_t)random_rand() << 16; + } +} + +PROCESS(ecdh_test, "ecdh test"); +AUTOSTART_PROCESSES(&ecdh_test); + +PROCESS_THREAD(ecdh_test, ev, data) { + PROCESS_BEGIN(); + + /* + * Variable for Time Measurement + */ + static rtimer_clock_t time; + + /* + * Activate Engine + */ + puts("-----------------------------------------\n" + "Initializing pka..."); + pka_init(); + + /* + * Generate secrets make sure they are valid (smaller as order) + */ + static ecc_compare_state_t state = { + .process = &ecdh_test, + .size = 8, + }; + memcpy(state.b, nist_p_256.n, sizeof(uint32_t) * 8); + static uint32_t secret_a[8]; + do { + ecc_set_random(secret_a); + memcpy(state.a, secret_a, sizeof(uint32_t) * 8); + PT_SPAWN(&(ecdh_test.pt), &(state.pt), ecc_compare(&state)); + } while(state.result != PKA_STATUS_A_LT_B); + + static uint32_t secret_b[8]; + ecc_set_random(secret_b); + do { + ecc_set_random(secret_b); + memcpy(state.a, secret_b, sizeof(uint32_t) * 8); + PT_SPAWN(&(ecdh_test.pt), &(state.pt), ecc_compare(&state)); + } while(state.result != PKA_STATUS_A_LT_B); + + /* + * Prepare Points + */ + static ecc_multiply_state_t side_a = { + .process = &ecdh_test, + .curve_info = &nist_p_256, + }; + memcpy(side_a.point_in.x, nist_p_256.x, sizeof(uint32_t) * 8); + memcpy(side_a.point_in.y, nist_p_256.y, sizeof(uint32_t) * 8); + memcpy(side_a.secret, secret_a, sizeof(secret_a)); + + static ecc_multiply_state_t side_b = { + .process = &ecdh_test, + .curve_info = &nist_p_256, + }; + memcpy(side_b.point_in.x, nist_p_256.x, sizeof(uint32_t) * 8); + memcpy(side_b.point_in.y, nist_p_256.y, sizeof(uint32_t) * 8); + memcpy(side_b.secret, secret_b, sizeof(secret_b)); + + /* + * Round 1 + */ + time = RTIMER_NOW(); + PT_SPAWN(&(ecdh_test.pt), &(side_a.pt), ecc_multiply(&side_a)); + time = RTIMER_NOW() - time; + printf("Round 1, Side a: %i, %lu ms\n", (unsigned)side_a.result, + (uint32_t)((uint64_t)time * 1000 / RTIMER_SECOND)); + + time = RTIMER_NOW(); + PT_SPAWN(&(ecdh_test.pt), &(side_b.pt), ecc_multiply(&side_b)); + time = RTIMER_NOW() - time; + printf("Round 1, Side b: %i, %lu ms\n", (unsigned)side_b.result, + (uint32_t)((uint64_t)time * 1000 / RTIMER_SECOND)); + + /* + * Key Exchange + */ + memcpy(side_a.point_in.x, side_b.point_out.x, sizeof(uint32_t) * 8); + memcpy(side_a.point_in.y, side_b.point_out.y, sizeof(uint32_t) * 8); + memcpy(side_b.point_in.x, side_a.point_out.x, sizeof(uint32_t) * 8); + memcpy(side_b.point_in.y, side_a.point_out.y, sizeof(uint32_t) * 8); + + /* + * Round 2 + */ + time = RTIMER_NOW(); + PT_SPAWN(&(ecdh_test.pt), &(side_a.pt), ecc_multiply(&side_a)); + time = RTIMER_NOW() - time; + printf("Round 2, Side a: %i, %lu ms\n", (unsigned)side_a.result, + (uint32_t)((uint64_t)time * 1000 / RTIMER_SECOND)); + time = RTIMER_NOW(); + PT_SPAWN(&(ecdh_test.pt), &(side_b.pt), ecc_multiply(&side_b)); + time = RTIMER_NOW() - time; + printf("Round 2, Side b: %i, %lu ms\n", (unsigned)side_b.result, + (uint32_t)((uint64_t)time * 1000 / RTIMER_SECOND)); + + /* + * Check Result + */ + memcpy(state.a, side_a.point_out.x, sizeof(uint32_t) * 8); + memcpy(state.b, side_b.point_out.x, sizeof(uint32_t) * 8); + + PT_SPAWN(&(ecdh_test.pt), &(state.pt), ecc_compare(&state)); + if(state.result) { + puts("shared secrets do not match"); + } else { + puts("shared secrets MATCH"); + } + + puts("-----------------------------------------\n" + "Disabling pka..."); + pka_disable(); + + puts("Done!"); + + PROCESS_END(); +} +/*---------------------------------------------------------------------------*/ +/** + * @} + * @} + */ diff --git a/examples/cc2538dk/pka/ecc-sign.c b/examples/cc2538dk/pka/ecc-sign.c new file mode 100644 index 000000000..5114073eb --- /dev/null +++ b/examples/cc2538dk/pka/ecc-sign.c @@ -0,0 +1,139 @@ +/* + * Copyright (c) 2014, Institute for Pervasive Computing, ETH Zurich. + * All rights reserved. + * + * Author: Andreas Dröscher + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ +/** + * \addtogroup cc2538-examples + * @{ + * + * \defgroup cc2538-ecdsa-sign-test cc2538dk ECDSA-Sign Test Project + * + * ECDSA-Sign example for CC2538 on SmartRF06EB. + * + * This example shows how ECDSA-Sign should be used. The example also verifies + * the ECDSA-Sign functionality. + * + * @{ + * + * \file + * Example demonstrating ECDSA-Sign on the cc2538dk platform + */ +#include "contiki.h" +#include "ecc-algorithm.h" +#include "ecc-curve.h" +#include "rtimer.h" +#include "pt.h" + +#include +#include + +PROCESS(ecdsa_sign_test, "ecdsa sign test"); +AUTOSTART_PROCESSES(&ecdsa_sign_test); + +PROCESS_THREAD(ecdsa_sign_test, ev, data) { + PROCESS_BEGIN(); + + /* + * Variable for Time Measurement + */ + static rtimer_clock_t time; + + /* + * Activate Engine + */ + puts("-----------------------------------------\n" + "Initializing pka..."); + pka_init(); + + /* + * Setup Variables + */ + static ecc_compare_state_t comp_state = { + .process = &ecdsa_sign_test, + .size = 8, + }; + static ecc_dsa_sign_state_t state = { + .process = &ecdsa_sign_test, + .curve_info = &nist_p_256, + .secret = { 0x94A949FA, 0x401455A1, 0xAD7294CA, 0x896A33BB, + 0x7A80E714, 0x4321435B, 0x51247A14, 0x41C1CB6B }, + .k_e = { 0x1D1E1F20, 0x191A1B1C, 0x15161718, 0x11121314, + 0x0D0E0F10, 0x090A0B0C, 0x05060708, 0x01020304 }, + .hash = { 0x65637572, 0x20612073, 0x68206F66, 0x20686173, + 0x69732061, 0x68697320, 0x6F2C2054, 0x48616C6C }, + }; + + /* + * Sign + */ + time = RTIMER_NOW(); + PT_SPAWN(&(ecdsa_sign_test.pt), &(state.pt), ecc_dsa_sign(&state)); + time = RTIMER_NOW() - time; + printf("ecc_dsa_sign(), %lu ms\n", + (uint32_t)((uint64_t)time * 1000 / RTIMER_SECOND)); + + /* + * Check Result + */ + static uint32_t ecdsaTestresultR1[] = { 0xC3B4035F, 0x515AD0A6, 0xBF375DCA, 0x0CC1E997, + 0x7F54FDCD, 0x04D3FECA, 0xB9E396B9, 0x515C3D6E }; + static uint32_t ecdsaTestresultS1[] = { 0x5366B1AB, 0x0F1DBF46, 0xB0C8D3C4, 0xDB755B6F, + 0xB9BF9243, 0xE644A8BE, 0x55159A59, 0x6F9E52A6 }; + + memcpy(comp_state.a, state.point_r.x, sizeof(uint32_t) * 8); + memcpy(comp_state.b, ecdsaTestresultR1, sizeof(uint32_t) * 8); + PT_SPAWN(&(ecdsa_sign_test.pt), &(comp_state.pt), ecc_compare(&comp_state)); + if(comp_state.result) { + puts("r1 of signature does not match"); + } else { + puts("r1 of signature OK"); + } + + memcpy(comp_state.a, state.signature_s, sizeof(uint32_t) * 8); + memcpy(comp_state.b, ecdsaTestresultS1, sizeof(uint32_t) * 8); + PT_SPAWN(&(ecdsa_sign_test.pt), &(comp_state.pt), ecc_compare(&comp_state)); + if(comp_state.result) { + puts("s1 of signature does not match"); + } else { + puts("s1 of signature OK"); + } + + puts("-----------------------------------------\n" + "Disabling pka..."); + pka_disable(); + + puts("Done!"); + + PROCESS_END(); +} +/*---------------------------------------------------------------------------*/ +/** + * @} + * @} + */ diff --git a/examples/cc2538dk/pka/ecc-verify.c b/examples/cc2538dk/pka/ecc-verify.c new file mode 100644 index 000000000..a970d2a02 --- /dev/null +++ b/examples/cc2538dk/pka/ecc-verify.c @@ -0,0 +1,122 @@ +/* + * Copyright (c) 2014, Institute for Pervasive Computing, ETH Zurich. + * All rights reserved. + * + * Author: Andreas Dröscher + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ +/** + * \addtogroup cc2538-examples + * @{ + * + * \defgroup cc2538-ecdsa-verify-test cc2538dk ECDSA-Verify Test Project + * + * ECDSA-Verify example for CC2538 on SmartRF06EB. + * + * This example shows how ECDSA-Verify should be used. The example also verifies + * the ECDSA-Verify functionality. + * + * @{ + * + * \file + * Example demonstrating ECDSA-Verify on the cc2538dk platform + */ +#include "contiki.h" +#include "ecc-algorithm.h" +#include "ecc-curve.h" +#include "rtimer.h" +#include "pt.h" + +#include +#include + +PROCESS(ecdsa_verify_test, "ecdsa verify test"); +AUTOSTART_PROCESSES(&ecdsa_verify_test); + +PROCESS_THREAD(ecdsa_verify_test, ev, data) { + PROCESS_BEGIN(); + + /* + * Variable for Time Measurement + */ + static rtimer_clock_t time; + + /* + * Activate Engine + */ + puts("-----------------------------------------\n" + "Initializing pka..."); + pka_init(); + + /* + * Setup Variables + */ + static ecc_dsa_verify_state_t state = { + .process = &ecdsa_verify_test, + .curve_info = &nist_p_256, + .signature_r = { 0xC3B4035F, 0x515AD0A6, 0xBF375DCA, 0x0CC1E997, + 0x7F54FDCD, 0x04D3FECA, 0xB9E396B9, 0x515C3D6E }, + .signature_s = { 0x5366B1AB, 0x0F1DBF46, 0xB0C8D3C4, 0xDB755B6F, + 0xB9BF9243, 0xE644A8BE, 0x55159A59, 0x6F9E52A6 }, + .hash = { 0x65637572, 0x20612073, 0x68206F66, 0x20686173, + 0x69732061, 0x68697320, 0x6F2C2054, 0x48616C6C }, + }; + static uint32_t public_x[8] = { 0x5fa58f52, 0xe47cfbf2, 0x300c28c5, 0x6375ba10, + 0x62684e91, 0xda0a9a8f, 0xf9f2ed29, 0x36dfe2c6 }; + static uint32_t public_y[8] = { 0xc772f829, 0x4fabc36f, 0x09daed0b, 0xe93f9872, + 0x35a7cfab, 0x5a3c7869, 0xde1ab878, 0x71a0d4fc }; + + memcpy(state.public.x, public_x, sizeof(public_x)); + memcpy(state.public.y, public_y, sizeof(public_y)); + + /* + * Verify + */ + time = RTIMER_NOW(); + PT_SPAWN(&(ecdsa_verify_test.pt), &(state.pt), ecc_dsa_verify(&state)); + time = RTIMER_NOW() - time; + printf("ecc_dsa_verify(), %lu ms\n", + (uint32_t)((uint64_t)time * 1000 / RTIMER_SECOND)); + + if(state.result) { + puts("signature verification failed"); + } else { + puts("signature verification OK"); + } + + puts("-----------------------------------------\n" + "Disabling pka..."); + pka_disable(); + + puts("Done!"); + + PROCESS_END(); +} +/*---------------------------------------------------------------------------*/ +/** + * @} + * @} + */ diff --git a/examples/cc2538dk/sniffer/project-conf.h b/examples/cc2538dk/sniffer/project-conf.h index fd70cd9c9..7e1ac0cd6 100644 --- a/examples/cc2538dk/sniffer/project-conf.h +++ b/examples/cc2538dk/sniffer/project-conf.h @@ -40,6 +40,7 @@ #define CC2538_RF_CONF_SNIFFER 1 #define CC2538_RF_CONF_AUTOACK 0 +#undef NETSTACK_CONF_RDC #define NETSTACK_CONF_RDC stub_rdc_driver #define UART0_CONF_BAUD_RATE 460800 diff --git a/examples/cc2538dk/udp-ipv6-echo-server/Makefile b/examples/cc2538dk/udp-ipv6-echo-server/Makefile index 32b3ca79f..4988d0b52 100644 --- a/examples/cc2538dk/udp-ipv6-echo-server/Makefile +++ b/examples/cc2538dk/udp-ipv6-echo-server/Makefile @@ -4,4 +4,5 @@ all: $(CONTIKI_PROJECT) CONTIKI = ../../.. CONTIKI_WITH_IPV6 = 1 +CFLAGS += -DUIP_CONF_ND6_SEND_NA=1 include $(CONTIKI)/Makefile.include diff --git a/examples/collect/example-collect-view.csc b/examples/collect/example-collect-view.csc index 53c917e28..6eac3e9d5 100644 --- a/examples/collect/example-collect-view.csc +++ b/examples/collect/example-collect-view.csc @@ -1,439 +1,439 @@ - - - [CONTIKI_DIR]/tools/cooja/apps/mrm - [CONTIKI_DIR]/tools/cooja/apps/mspsim - [CONTIKI_DIR]/tools/cooja/apps/avrora - [CONTIKI_DIR]/tools/cooja/apps/serial_socket - [CONTIKI_DIR]/tools/cooja/apps/collect-view - - CollectView - Demo - 0 - 123456 - 1000000 - - org.contikios.cooja.radiomediums.UDGM - 50.0 - 100.0 - 1.0 - 1.0 - - - 40000 - - - org.contikios.cooja.mspmote.SkyMoteType - sky1 - Collect View Shell #sky1 - [CONTIKI_DIR]/examples/collect/collect-view-shell.c - make collect-view-shell.sky TARGET=sky - [CONTIKI_DIR]/examples/collect/collect-view-shell.sky - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.interfaces.IPAddress - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - org.contikios.cooja.mspmote.interfaces.MspClock - org.contikios.cooja.mspmote.interfaces.MspMoteID - org.contikios.cooja.mspmote.interfaces.SkyButton - org.contikios.cooja.mspmote.interfaces.SkyFlash - org.contikios.cooja.mspmote.interfaces.SkyCoffeeFilesystem - org.contikios.cooja.mspmote.interfaces.Msp802154Radio - org.contikios.cooja.mspmote.interfaces.MspSerial - org.contikios.cooja.mspmote.interfaces.SkyLED - org.contikios.cooja.mspmote.interfaces.MspDebugOutput - org.contikios.cooja.mspmote.interfaces.SkyTemperature - - - - - org.contikios.cooja.interfaces.Position - 47.447589188296796 - 6.493794191652634 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 1 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 31.354300798086324 - 27.956947207632854 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 2 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 74.3829989341562 - 30.580648313490777 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 3 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 112.16429485851025 - 44.22389406395196 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 4 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 68.61085650126878 - 84.62889109416392 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 5 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 56.15423831110357 - 64.07252546725537 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 6 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 87.73274591684346 - 60.66871896134617 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 7 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - -2.2290733568950474 - 33.204349419348695 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 8 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 38.7006638944885 - 92.49999441173767 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 9 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 15.612094162938806 - 63.639282247300564 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 10 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 141.5408533420652 - 115.36621659194348 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 11 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 147.32188967700637 - 142.49261785589826 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 12 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 120.89539128042348 - 87.32905614555476 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 13 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 103.7684513197649 - 131.3307707784349 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 14 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - -11.674397337983558 - 68.36194423784482 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 15 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - -43.897004478740314 - 75.78835245273079 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 16 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 95.12464106933497 - 96.12882451031668 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 17 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 31.354300798086324 - 121.88544679734638 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 18 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 121.97426882380275 - 155.38877583384397 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 19 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - -32.139265963675335 - 109.81642171039995 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 20 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - -47.35673237765127 - 142.87505564420977 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 21 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - -32.66400618484692 - 168.06258626044578 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 22 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 21.38423659582623 - 155.99356117349936 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 23 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 88.0262446846174 - 154.9440807311562 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 24 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 146.27240923466323 - 176.9831700203627 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 25 - - sky1 - - - - org.contikios.cooja.plugins.SimControl - 259 - 1 - 205 - 0 - 0 - - - org.contikios.cooja.plugins.Visualizer - - org.contikios.cooja.plugins.skins.IDVisualizerSkin - org.contikios.cooja.plugins.skins.UDGMVisualizerSkin - 2.5200269517125586 0.0 0.0 2.5200269517125586 163.78987943671984 3.0766125491598224 - - 577 - 0 - 523 - 526 - 0 - - - org.contikios.cooja.plugins.LogListener - - - - 1103 - 3 - 300 - 0 - 522 - - - org.contikios.cooja.plugins.collectview.CollectView - 0 - 270 - 2 - 81 - 258 - 1 - - - + + + [CONTIKI_DIR]/tools/cooja/apps/mrm + [CONTIKI_DIR]/tools/cooja/apps/mspsim + [CONTIKI_DIR]/tools/cooja/apps/avrora + [CONTIKI_DIR]/tools/cooja/apps/serial_socket + [CONTIKI_DIR]/tools/cooja/apps/collect-view + + CollectView - Demo + 0 + 123456 + 1000000 + + org.contikios.cooja.radiomediums.UDGM + 50.0 + 100.0 + 1.0 + 1.0 + + + 40000 + + + org.contikios.cooja.mspmote.SkyMoteType + sky1 + Collect View Shell #sky1 + [CONTIKI_DIR]/examples/collect/collect-view-shell.c + make collect-view-shell.sky TARGET=sky + [CONTIKI_DIR]/examples/collect/collect-view-shell.sky + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.interfaces.IPAddress + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + org.contikios.cooja.mspmote.interfaces.MspClock + org.contikios.cooja.mspmote.interfaces.MspMoteID + org.contikios.cooja.mspmote.interfaces.SkyButton + org.contikios.cooja.mspmote.interfaces.SkyFlash + org.contikios.cooja.mspmote.interfaces.SkyCoffeeFilesystem + org.contikios.cooja.mspmote.interfaces.Msp802154Radio + org.contikios.cooja.mspmote.interfaces.MspSerial + org.contikios.cooja.mspmote.interfaces.SkyLED + org.contikios.cooja.mspmote.interfaces.MspDebugOutput + org.contikios.cooja.mspmote.interfaces.SkyTemperature + + + + + org.contikios.cooja.interfaces.Position + 47.447589188296796 + 6.493794191652634 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 1 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 31.354300798086324 + 27.956947207632854 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 2 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 74.3829989341562 + 30.580648313490777 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 3 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 112.16429485851025 + 44.22389406395196 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 4 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 68.61085650126878 + 84.62889109416392 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 5 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 56.15423831110357 + 64.07252546725537 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 6 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 87.73274591684346 + 60.66871896134617 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 7 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + -2.2290733568950474 + 33.204349419348695 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 8 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 38.7006638944885 + 92.49999441173767 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 9 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 15.612094162938806 + 63.639282247300564 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 10 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 141.5408533420652 + 115.36621659194348 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 11 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 147.32188967700637 + 142.49261785589826 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 12 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 120.89539128042348 + 87.32905614555476 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 13 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 103.7684513197649 + 131.3307707784349 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 14 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + -11.674397337983558 + 68.36194423784482 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 15 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + -43.897004478740314 + 75.78835245273079 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 16 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 95.12464106933497 + 96.12882451031668 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 17 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 31.354300798086324 + 121.88544679734638 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 18 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 121.97426882380275 + 155.38877583384397 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 19 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + -32.139265963675335 + 109.81642171039995 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 20 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + -47.35673237765127 + 142.87505564420977 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 21 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + -32.66400618484692 + 168.06258626044578 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 22 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 21.38423659582623 + 155.99356117349936 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 23 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 88.0262446846174 + 154.9440807311562 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 24 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 146.27240923466323 + 176.9831700203627 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 25 + + sky1 + + + + org.contikios.cooja.plugins.SimControl + 259 + 1 + 205 + 0 + 0 + + + org.contikios.cooja.plugins.Visualizer + + org.contikios.cooja.plugins.skins.IDVisualizerSkin + org.contikios.cooja.plugins.skins.UDGMVisualizerSkin + 2.5200269517125586 0.0 0.0 2.5200269517125586 163.78987943671984 3.0766125491598224 + + 577 + 0 + 523 + 526 + 0 + + + org.contikios.cooja.plugins.LogListener + + + + 1103 + 3 + 300 + 0 + 522 + + + org.contikios.cooja.plugins.collectview.CollectView + 0 + 270 + 2 + 81 + 258 + 1 + + + diff --git a/examples/econotag-ecc-test/Makefile b/examples/econotag-ecc-test/Makefile new file mode 100644 index 000000000..bfc3cf2c8 --- /dev/null +++ b/examples/econotag-ecc-test/Makefile @@ -0,0 +1,8 @@ +CONTIKI = ../.. +TARGET = econotag + +all: econotag-ecc-test + +APPS += ecc + +include $(CONTIKI)/Makefile.include diff --git a/examples/econotag-ecc-test/econotag-ecc-test.c b/examples/econotag-ecc-test/econotag-ecc-test.c new file mode 100644 index 000000000..e1675a390 --- /dev/null +++ b/examples/econotag-ecc-test/econotag-ecc-test.c @@ -0,0 +1,2182 @@ +/* + * Copyright (c) 2014, Lars Schmertmann . + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * + * This file is part of the Contiki operating system. + * + */ + +/** + * \file + * ECC algorithm test + * + * This file contains tests for ECC calculations + * + * \author + * Lars Schmertmann + */ + +#include "ecc.h" +#include "contiki.h" + +#include +#include +#include + +/*---------------------------------------------------------------------------*/ + +/* Test vectors from https://github.com/iSECPartners/nano-ecc */ +uint32_t ecc_data[][7][8] = { { + { 0x01dcc6de, 0x6c8f8d3e, 0xe2612dd2, 0xdd3c4440, 0x3fee4131, 0xf02322c5, 0x4059c2ab, 0x751f7f74 }, + { 0x9a623445, 0xb27e2e17, 0xba50e608, 0x21b65597, 0x09d67258, 0xff5df02a, 0x03ca8c17, 0x698388c3 }, + { 0x26518fc8, 0x3235d8c5, 0x18ecb8fe, 0xebdb3791, 0xc0633d8b, 0x6c0dbf13, 0xe971273b, 0x5d56f932 }, + { 0x19a2428a, 0x1bdf8fdd, 0x418342e4, 0x67ff1a26, 0x309b7a46, 0x3a86104e, 0x0a6aea35, 0xe6f12ea2 }, + { 0x3ddbac31, 0xb2275232, 0x8b2abe7a, 0xd0d0bd74, 0x80d4f48a, 0x7a263898, 0x2d901339, 0xc53afd8d }, + { 0x24c5bd75, 0x2fe8b15b, 0x1a7983d9, 0x314984ea, 0xc453199e, 0x9c6a1083, 0x04441728, 0x77e815e3 }, + { 0x623cc072, 0xa3e5f3a2, 0x96a3b696, 0x83ca161d, 0x549145d3, 0x227369fb, 0xccf3a85c, 0xb97a69bc } + }, { + { 0x0d2cf2f4, 0x0d21f5f2, 0xfac9aca1, 0x840ab553, 0xec0dcf69, 0x4be4cecb, 0x128a0c0a, 0xa7f8b38f }, + { 0xf59800f2, 0x60a3a8d2, 0x819f2edb, 0xf2776dd0, 0x9f61d8d9, 0x8d7eb569, 0x4c4ec6ce, 0x07c4cdfa }, + { 0x8743783b, 0xd9eb95a6, 0xd27f08a8, 0xc9022285, 0x79b842b6, 0x03eb2d8b, 0x79f4baa4, 0x29036424 }, + { 0x5afd98e4, 0x0124388b, 0x15c3334f, 0xca6831e1, 0x14f32098, 0xf34ee3a6, 0x6dd6bc20, 0xde338482 }, + { 0x65db89d0, 0x7a975020, 0x1374d49b, 0xea8761b0, 0x99287467, 0xcdb741c5, 0x07640ee0, 0xbd00bef4 }, + { 0x700808f1, 0xf583f9f2, 0xd5ab6476, 0xb9470da3, 0x95447300, 0x1112ebbe, 0xaed5373f, 0x96060cb5 }, + { 0xbfaf6509, 0xaa24f83a, 0x5d18f3f5, 0x6b51122c, 0xdac95e1f, 0xb7e1f089, 0xf08bbed0, 0x3f1b874e } + }, { + { 0x33b5f336, 0x59e0d59b, 0x95601007, 0x3ec65a9b, 0x1854b42d, 0x74bdac00, 0xe6074168, 0xf5226a9b }, + { 0x494fabf0, 0xd1b5a4d4, 0xc0fabd37, 0x3d58ae63, 0x40356339, 0xcdd8a1d2, 0x2b96bd7f, 0xf309c0ad }, + { 0xac2aed2b, 0x2b8f5476, 0x0a65c8a2, 0x721de0e4, 0x77064eb6, 0x607e8f27, 0x4cb86d6f, 0x3aa4ec20 }, + { 0xce83cb4b, 0xbc8af90d, 0x91322d14, 0x58191442, 0x2a6387a6, 0x13fcaec4, 0xab0a4f92, 0xff990a1e }, + { 0x71669ba0, 0x939cceac, 0xce8d1d9a, 0xbbb4c801, 0x9904ace3, 0x04b7b8ef, 0x6657c7ff, 0xb6abb68b }, + { 0x3e5aa24f, 0x5ca3c331, 0x5139f40d, 0xe20ed654, 0xbe462e8e, 0x2707caf0, 0x24477db8, 0xd1bef9b1 }, + { 0x14d05b05, 0xd63c1f53, 0x47e3adcc, 0x70f5b519, 0xdbfcfc98, 0x02173932, 0xa0b0b921, 0x8a214dbd } + }, { + { 0xd262ce98, 0x2c116c77, 0xfa6a5ee7, 0x79152505, 0xb91f74a6, 0xd0db6ac0, 0x1ab4d986, 0xf53947fc }, + { 0xeadb841a, 0xda614f41, 0x0b7da371, 0x646d15ae, 0x159f7cc8, 0x4a2a43f2, 0x7ac27c91, 0xcee899f2 }, + { 0x78f156d2, 0x693bd20d, 0xfbc1e011, 0xf09e8a7c, 0x4e0d5823, 0x359a4595, 0x794303b4, 0xf8bef042 }, + { 0x9af1f222, 0x3d684941, 0xd6e56d92, 0x7b68ba32, 0xc0948cb2, 0x568a9354, 0x7aea45fb, 0xa1294a0b }, + { 0x5089a211, 0x826e1094, 0x974d4237, 0x90b08a0e, 0x62b66725, 0x99bb9dd2, 0x26569adc, 0x64ca5b7f }, + { 0x737f3039, 0xf0dbfaaa, 0x246f5559, 0x46326009, 0x26913709, 0x0048b096, 0xa95b088e, 0xefaf0be3 }, + { 0x4a1e8607, 0xef0181d3, 0x77cc4301, 0x1b708962, 0x61522020, 0x6db10e6c, 0x9e216660, 0xa2967953 } + }, { + { 0x6aefadbd, 0x6a96bab7, 0xc235e509, 0xb063b919, 0xc66f222b, 0x67f98a65, 0x0ea41576, 0xf8526e6b }, + { 0x77e50fde, 0x66f58ff3, 0x95d72a86, 0xe7f8ee13, 0xb43437f4, 0xf719f833, 0x4af4915d, 0xcb5c6d2d }, + { 0x8fbeef09, 0x24af00e4, 0x303b1db8, 0xbbf1dae7, 0xa1dab5cf, 0x7b22a089, 0x6cc93dee, 0x0cba7aa2 }, + { 0x26af27b4, 0x2684c828, 0x729ad7b0, 0x8ef161eb, 0xc12ac74d, 0x928ac3b4, 0xac9499da, 0xfe1c57c0 }, + { 0x15bc7280, 0xbe29a6d6, 0xe57bf1bd, 0xe68893d0, 0xc1312fcb, 0x3efae48b, 0x0c691973, 0x694fdc1d }, + { 0x05e64712, 0xa9669dea, 0xfa71f8b7, 0xb6de4567, 0xa2cc36e3, 0x889f5e34, 0xcc94f1fe, 0x2646763e }, + { 0xce756758, 0x0d9b6b53, 0x66a4d864, 0x8c4a3aa9, 0x99d5b022, 0x91a4dd18, 0x400612d0, 0x9f8b72d8 } + }, { + { 0xed3a3660, 0x5080a6e8, 0x6b95ca21, 0xa23d9aa2, 0xb3949551, 0xb9f2d46b, 0x26535847, 0xb8c62b06 }, + { 0x05405ae9, 0xb61b8454, 0x9aa94bf2, 0x7a2e5ac1, 0xea772505, 0x614a5a28, 0xf563a10a, 0xd4d45bd7 }, + { 0x6a80cf8c, 0xe725b198, 0xc371ee43, 0x4a8047e2, 0xc6f58553, 0xffa3c341, 0x2f4a9713, 0x0c6b7d0b }, + { 0x96283c3e, 0x9355c40b, 0x4f02e8b5, 0x6a62c4dc, 0x9e4da9aa, 0xbad8207d, 0x5e67afaf, 0x26fc0530 }, + { 0x25cefc44, 0xa29b4451, 0x404e8418, 0x5aab901d, 0xf6d0a1a5, 0x8a8438b1, 0x4b4964a2, 0x1704792c }, + { 0x02af9562, 0x948d3fe4, 0x4ca218e4, 0x3fb57e0d, 0x57f6e2d7, 0x7c3db023, 0x8cbe424e, 0xc9dd9b16 }, + { 0xc656a582, 0x157d2ef5, 0xe292e1f1, 0x1a368124, 0xe05b3093, 0xeab74f3b, 0x2196cb68, 0x57c6f1a5 } + }, { + { 0xb19e4c50, 0xee52bcd7, 0x4834dbb6, 0x03e721b5, 0x32108a97, 0xc575e528, 0x5ccbfe1d, 0x099c5d8e }, + { 0xb119ab54, 0xcfe14a69, 0x456bc938, 0xdafd4059, 0xb904aca1, 0x1a861997, 0x6374580d, 0x71354259 }, + { 0xa0a9a344, 0x6dde4baa, 0x57d7644d, 0xad71af57, 0x9154c72d, 0xa5426581, 0x6d501f29, 0x3dcc0c53 }, + { 0xd5d55773, 0xa48d40e7, 0x4c299836, 0xa3c3aa27, 0xb7060b27, 0x4c0b55f7, 0x190ffb64, 0x0a3e5fae }, + { 0xf7197092, 0xb06b1445, 0xdec8c324, 0x84a10310, 0xf8ffe96b, 0x16bfc375, 0xe3857b4b, 0x2dcf6157 }, + { 0x3ed661df, 0x69128ce4, 0x4863697b, 0xf846460d, 0xa6087ea7, 0x51e4db88, 0xe4dd1b45, 0x3dc4bdef }, + { 0x29fb38a0, 0xb69a329f, 0x7fed93cc, 0xd1ec8509, 0xf3907fd8, 0xf8ab1ff0, 0x19950850, 0xaa9a03c1 } + }, { + { 0x361859ce, 0x867cba28, 0xa39a5255, 0xf70d11f8, 0xb9fc2131, 0x7cd59204, 0xbe14e485, 0x7d0f4b93 }, + { 0x41bcb98a, 0x1f281f64, 0x61c98305, 0xf066bd0f, 0xd6ada91a, 0x8cfb9f1d, 0x328c8d89, 0x753932c8 }, + { 0xe474b0ae, 0x4a7e981b, 0x7cf03f2b, 0xec09086e, 0x805a8546, 0x5b0ddacf, 0xe8f06c37, 0xbf7452ce }, + { 0xc0a55fe4, 0x0c8d529f, 0x19d763f7, 0x7454ff5e, 0xb4964f9f, 0x8ced59fa, 0x06e12800, 0xabb82b0b }, + { 0x0069d9cc, 0x8b2d3165, 0x54088fec, 0x9ea2b828, 0xacfad6ec, 0x330d6ce2, 0x2efc0264, 0x33737dae }, + { 0x7c7c1d79, 0xbb3640d2, 0xea6a1ae9, 0x3f925a78, 0xd71afcb0, 0x58d88d2a, 0x17ae8765, 0x38c058a9 }, + { 0xd7829d16, 0x3f9504c0, 0x1b1fec7e, 0xc8322d3a, 0x405fd919, 0x3225b4af, 0xc94b8eb9, 0x0fcffc22 } + }, { + { 0x8655a5f6, 0x4aa2ad7a, 0x545dea85, 0x33e98fd2, 0x353b4c5b, 0x17a3c2aa, 0xd04879e0, 0x3c129174 }, + { 0xb42400f9, 0xfd85dd35, 0xec4df9ad, 0x57802e1e, 0xeb1af871, 0x037c50c8, 0xef3c2339, 0x1ae01102 }, + { 0x64d7235c, 0x41f8e7c3, 0xf608d9a5, 0xe5d05986, 0x07a2e704, 0x73a4b0f5, 0x9aeae4b9, 0xc924967b }, + { 0xd3d01754, 0x1ca13de8, 0x6fb9c8f2, 0x66ced741, 0xd20c7f74, 0x2ab0a7b5, 0x4484930d, 0xe8eeaf3a }, + { 0x05a267c6, 0x29394c78, 0x212dc594, 0xe2f65cfb, 0x911e9f22, 0x066d4ca0, 0xc691a4e0, 0xbe6a4ec2 }, + { 0x7093c8c0, 0x46c84938, 0xf948d5a9, 0xaff0ada0, 0xd941397d, 0xf5e08f06, 0xd6c02942, 0x34cf551c }, + { 0x8862a919, 0xb9e5cec5, 0x2e1b13f6, 0xaa2a6a08, 0x9d795333, 0x13f0b2ea, 0x1542db97, 0xdd4df512 } + }, { + { 0xc81f9a77, 0xfc19cdc2, 0x2546465a, 0x128ec4b7, 0x413334d2, 0xebe931ab, 0x99d8658d, 0x2b7c0a40 }, + { 0xcd7479af, 0x46380c5d, 0x761c619c, 0x60fd22d6, 0x594e72c8, 0x9ebb5a68, 0x860f40df, 0xc385724e }, + { 0xec92c524, 0xaa5beb2c, 0xfd54d0e6, 0x90fb0745, 0xb693dea8, 0xfab2f691, 0x7d031158, 0x2292be51 }, + { 0x302085b6, 0x59f3a3d6, 0x0e2d8a11, 0xb58b4afd, 0x3f0a3eb2, 0xdbbd2dad, 0x34f12533, 0x1443a29f }, + { 0xbacaa933, 0x9e9d317b, 0x571f930e, 0x4925d01e, 0x4e7804ae, 0x0a26a382, 0xe6b26cb6, 0x15d77189 }, + { 0xa98fba79, 0xb8b92d81, 0x699c2149, 0x32f18c0a, 0xb7563138, 0xb749e717, 0x19b29021, 0x13ab89f9 }, + { 0x2d5e713e, 0x8e989661, 0x4c2c3ec1, 0x4337676c, 0xb03b6c5d, 0x5ac054e3, 0xc3e56a9d, 0x970b9d95 } + }, { + { 0x1abd6f4b, 0xb3a17958, 0x82284674, 0x7a0b7df9, 0x37c5a4d8, 0xf1e1fc30, 0x4ab90c08, 0xc17c937d }, + { 0xd6dcea60, 0xc2c4845d, 0xdd9d9b99, 0x0f4a1c13, 0x5a1c1e7a, 0x1bc5f66a, 0x3d7a5006, 0x6c506acd }, + { 0xdd31b410, 0xf791a74c, 0x709e9c04, 0x125812db, 0x202083bb, 0xf9f703c3, 0x83a3c36a, 0x93c33b97 }, + { 0x0769506e, 0xa2f38940, 0x79535a97, 0xe635be24, 0x7d355188, 0x1082cff4, 0xa92a5187, 0x1b1b2773 }, + { 0x1c03bc37, 0xce06e83d, 0xf420fc7f, 0x0d259634, 0xeb02658d, 0x08621d54, 0x6d959a64, 0x7ff42395 }, + { 0x5eb329e9, 0xb6b53979, 0xbd5a1d15, 0xf9a26522, 0xf006b31f, 0xd796af76, 0x4eaa60a1, 0xe94f9ad9 }, + { 0xefd27c6b, 0x3f4bee0e, 0x398eff6e, 0x35a01d32, 0x079eb392, 0xb32900cd, 0x2153cb34, 0x969a7076 } + }, { + { 0x75f895fb, 0x14d958f0, 0xe630bc01, 0x5d5d2240, 0x151194d9, 0xadef3378, 0xbb8cac52, 0x4bf9af4c }, + { 0xa87b27a1, 0x66443fad, 0x6e8eb69d, 0xdcf3c748, 0x81024d3d, 0x045793ff, 0x55e91a99, 0xa5fb10f6 }, + { 0x8016a291, 0xc992ae17, 0x10c19198, 0xb2148762, 0xb81df852, 0x08004fe2, 0xd5accd8a, 0x6b2ffe51 }, + { 0xdb89df5c, 0x7c88902c, 0xaed170c1, 0xa57d6ade, 0x034ff768, 0xeb4d868b, 0xed4434f8, 0xb3317c76 }, + { 0x00dd9f1c, 0xc464871a, 0x51b3483d, 0x9091cdd6, 0x3a4ad976, 0x6e9957d9, 0x1982a72f, 0x539d53f4 }, + { 0xacf47c87, 0x6b75d11e, 0x8f5c2887, 0xc7b097f8, 0x861ca1de, 0x2e6fa5b9, 0x6073fa84, 0xa78c4fa2 }, + { 0x32b1393c, 0x3221d47e, 0xd23a49cd, 0x0f11554b, 0x9ceebe9b, 0xab0b03b7, 0x4b6e7441, 0x26c7cda9 } + }, { + { 0x94c472bf, 0x79da14f4, 0xcc7848ce, 0xd0a3f41d, 0x06692f58, 0x4c2db546, 0xd9dbf932, 0xc1873d4d }, + { 0xf1906c69, 0x7df54ee0, 0x8229c4d6, 0x8ad15c28, 0x49adb482, 0xd673baf4, 0xd1db16a7, 0xa8e5e3ea }, + { 0xde6cc806, 0x22aa1c57, 0xb1353c4a, 0x76b84f31, 0x1a54c746, 0x323fd3fa, 0x2ea2b234, 0xe8817ff5 }, + { 0x91c7de40, 0x0271b83f, 0xdb959719, 0xd42ad457, 0x685e5648, 0x9003a4b0, 0xd0a74933, 0x19cb6b56 }, + { 0xe4ec2b1d, 0x8c213e97, 0x0f84c083, 0xd987fb55, 0xb4cd0072, 0xc8e3ede3, 0x298da8c9, 0xed46c25f }, + { 0x52cdd5e3, 0xf9eb66b2, 0x715e0f8b, 0xeeab3d77, 0x5fe40b70, 0x9543e0b6, 0xc4e98491, 0x82a6190f }, + { 0xa274e4bc, 0xbe247bc6, 0x34ec15d0, 0x0550ab13, 0x0ae696fd, 0xfa7d477f, 0xf4c953bb, 0xb0b9d3e2 } + }, { + { 0x450db8f1, 0x5f43bce3, 0x4d82e2cb, 0xfd76bae4, 0xd1712a7a, 0xf745fd41, 0x38a3776a, 0xbdd475bf }, + { 0x93097997, 0xbce94d70, 0x307cd38e, 0x8d2f50a4, 0xf43d073a, 0x838ebc02, 0x74bcf139, 0x75eccfc4 }, + { 0x29bf5a6e, 0x51ff4baf, 0xb786841f, 0x50a26fb0, 0xb73b2eee, 0x15c99855, 0xef2ec068, 0x69c52545 }, + { 0x7783df8e, 0xbd77d58e, 0x53789b31, 0xdb34aded, 0x073bd783, 0x01f53d6f, 0x9ee77ea0, 0x1e5db59b }, + { 0xfc4ffb2a, 0x33485ace, 0x448f0cdb, 0x67baf446, 0x8d897cf5, 0x0558b4ea, 0xc03c0449, 0x90185cdd }, + { 0x4b55aef5, 0x391325fa, 0x0eb13f3b, 0x6d1936f9, 0xd79ab56a, 0xe4677bb1, 0xcf233bee, 0x7cae3f82 }, + { 0x60bca032, 0xef59cbdf, 0xca93d74b, 0xdcaaf290, 0x89499e43, 0xb0000c61, 0xfda7c34c, 0xa8a303a5 } + }, { + { 0xf563f0b8, 0xea7610d1, 0x8d35a2da, 0xb75964a1, 0xe68fe2f6, 0x11eec908, 0x35c5ba6d, 0xd6a264d9 }, + { 0x0561f684, 0xc0304119, 0xb8fa5656, 0x0eb431c4, 0x5b30409b, 0x6c9ef75e, 0xf77afccb, 0xf1fb796e }, + { 0xdd7e958a, 0xd3d873e3, 0x0854439c, 0xae1e4223, 0x7167987a, 0xcd1d8467, 0x523be4eb, 0x796a28e7 }, + { 0x21ad1d15, 0xe52ece62, 0xe19ab217, 0xdbb11c18, 0x3ffb82cf, 0x33a51615, 0xb427bdf2, 0x593e3959 }, + { 0x3b665341, 0x390035fe, 0xffcd92d2, 0x5d565393, 0xecf2c92a, 0xb65c0cb1, 0xf7968ae8, 0x04f2d373 }, + { 0x1191b1aa, 0x56df60fe, 0x4a28623d, 0xdc443bcb, 0x2bf1f915, 0x17906493, 0x0d66b04f, 0x7b97fcb0 }, + { 0xb74a031a, 0xf312938a, 0xa083ad85, 0x2b1902b4, 0xf763fba8, 0x32ceddd3, 0x79b4526f, 0x04a3ad56 } + }, { + { 0xefff17a2, 0x2f2fce3d, 0xd3700c90, 0x7ee9eb35, 0x5ef6198c, 0xbdc9bb0a, 0x26a22d3c, 0x300b2fb8 }, + { 0x81a4d10d, 0xa5e708c5, 0x2dce5f47, 0xaa2012a0, 0xa9ae2095, 0x1eeb4b4d, 0x457aa9d9, 0xeb1ee001 }, + { 0x342eecc2, 0xb5c66a57, 0x0c4ee139, 0x8793343d, 0xa4d8642b, 0x833284c5, 0xabe83fbb, 0x11f08d72 }, + { 0x4fc2206b, 0x41c7b511, 0xf05cc17b, 0x528ffd59, 0x062c9124, 0xbf03c9d4, 0xd978af38, 0x8d0d85ea }, + { 0x87b8ba22, 0xd91e6a06, 0x6169070d, 0xc50f39fe, 0xd270229f, 0x1d72f559, 0x7d0a1762, 0x463ab03f }, + { 0xa4393a4f, 0x9987b543, 0x6f1b03ab, 0x71096fda, 0x9f6dd1d2, 0xf6abc382, 0x35815067, 0x5c365f18 }, + { 0xacdfbfbd, 0x09c57c49, 0xb1afd6ce, 0x2b5821fa, 0xe5997374, 0x35bd8649, 0x22d95b9b, 0x25f30fad } + }, { + { 0xa90802ef, 0xfbcf614d, 0x762de0e6, 0x48c13c66, 0xfa232910, 0x79599693, 0x2c2e26e7, 0xdfefa34e }, + { 0xc0dd8a96, 0x4f1aa0d6, 0x6b8b515a, 0xf27d261d, 0xbc6ee470, 0x5f85a545, 0xfea1cff4, 0xa8b192a1 }, + { 0xd30b6441, 0xb58b28bd, 0x3fac92c9, 0x52fdc9ee, 0xe5297d14, 0xcbd886a1, 0x7252175e, 0x9a165e66 }, + { 0x3dacc04f, 0x98d69b1e, 0x60881c32, 0x501798eb, 0x7184054c, 0x0eec61ae, 0x15585572, 0x7ce7bcc3 }, + { 0x26e4c3bf, 0xc3db64e9, 0x04c85398, 0xb05a43ef, 0x287760dc, 0x5f9c4fd9, 0xa9546cf3, 0xeb64d6d9 }, + { 0x9f56a099, 0xf4464509, 0x666f89fd, 0x3cf27dbc, 0xf78f4ebd, 0x15a92221, 0x1c5f18b4, 0x4ef8d6ed }, + { 0xb9032db3, 0x14df48da, 0x90822fcc, 0x34a687d3, 0xd0c9cbce, 0x49f5523f, 0x57d75028, 0x4d2b7b81 } + }, { + { 0x7a7db3d6, 0x4ce01deb, 0x8d46d28e, 0x0598389c, 0x02496d36, 0x6a946efe, 0x48d76b64, 0x0b398fdb }, + { 0x96dac371, 0xf0e94574, 0xabaeb1f3, 0x464f352e, 0xa538a1b2, 0xaf0839e8, 0x264e3def, 0x70ccb6c0 }, + { 0x8b633b83, 0x9f1fa614, 0xf229f235, 0x18968cfd, 0x1d2be847, 0x47ac9867, 0xc4f32121, 0xa08f2485 }, + { 0x9b553f9b, 0x6939d623, 0xbb578ffb, 0x3de56d02, 0x8d0288c2, 0x4295788d, 0xb53e60ea, 0xbfe08468 }, + { 0x15e12986, 0xbd19316b, 0xfd84a08e, 0x6fde5356, 0xec8dabcc, 0x78c17332, 0x46dbfd97, 0x21e6adf3 }, + { 0xdaf2f1be, 0x6d3d5236, 0x5e95911b, 0xe0571ed2, 0x402aa279, 0x04bc377f, 0xed587a14, 0x9c2db51f }, + { 0xb4a6e3b8, 0x71d06437, 0xbe20faa6, 0x1276fb1c, 0x28103b47, 0x31f900d8, 0x8494dc65, 0x994daf04 } + }, { + { 0x292eb381, 0xb7ccadef, 0x33e7512b, 0x0dfdeb69, 0xc7ee08b9, 0x39a4fbc7, 0xd764a890, 0x7ab00e4e }, + { 0xf7586ade, 0xa3b4d9dc, 0xf789c47e, 0x48beadb2, 0x8a45db69, 0x2e9b595d, 0xfff2a7fa, 0x06ffc027 }, + { 0x19009f8b, 0x88199f63, 0xc306713d, 0x54eae017, 0x7868c7c1, 0xb21b75d4, 0x2236bda7, 0x5277b103 }, + { 0x9d7f35d5, 0x10da1900, 0x79c91037, 0x9f2775fb, 0x2e45ba78, 0x92bc5da3, 0x48b1946e, 0x2b45cb34 }, + { 0x1f6d90ed, 0xaa688d80, 0xfd190719, 0xc1dcd836, 0xb7de1894, 0x5cd7e515, 0x87bb48cf, 0x94bf41c7 }, + { 0x35f36e1b, 0x0da6b6b8, 0xd381a23c, 0x60659705, 0x6c319695, 0x27279409, 0x69130c41, 0xe1fa08ff }, + { 0x8844af91, 0xf2d47dfa, 0xde6ea7b0, 0x2f156a2b, 0x86f8ec0b, 0x38f9d722, 0x7cff87e4, 0x9ab38e0e } + }, { + { 0xb01fd34c, 0x3885168b, 0xa35130d9, 0x8e01a5ca, 0xe6d2d65f, 0xc724f8a0, 0x2e0ef604, 0xfed3c171 }, + { 0x151c057c, 0x9fa733ef, 0x825ba0da, 0x6e283e59, 0x77c4880a, 0xfd107591, 0x3fb3b4e7, 0x274fed9e }, + { 0x3a32979a, 0x29a9b49f, 0xec8e3c5c, 0x3e0ef290, 0x4e3716e2, 0xbfc82d3e, 0x6c250829, 0x3abab9a7 }, + { 0x012addb9, 0x47841e2b, 0x61f0a516, 0x6ba10a6e, 0xfecba910, 0x90a3ef22, 0xfdcf969f, 0x2128f99b }, + { 0x9b81a4e9, 0x57c34d33, 0x026d2762, 0xafd4a1fa, 0x61ea2467, 0x29a81c62, 0x85350d61, 0xe2e0f0c5 }, + { 0x0bf92a10, 0x23e4f7e1, 0x975e75db, 0xb97b6285, 0x7728a26d, 0xa6525408, 0x063a2419, 0x397410be }, + { 0x4ea96c8b, 0xfa56724d, 0xff16421c, 0x7ed6477a, 0xd1e48c81, 0xdb4a93a2, 0x5c4951c3, 0xc0b4a685 } + }, { + { 0x397e460f, 0x89a93121, 0x72092100, 0xbfe312f7, 0xf1a58537, 0xa4d5dcfe, 0x37af5042, 0xf35b1b01 }, + { 0x2ff60f87, 0xfe9a309f, 0xc472ccd3, 0x8d7eeb71, 0xb3739e44, 0x1ca9869d, 0x42da241b, 0x6c858419 }, + { 0xb9d40ae5, 0x5d4e2313, 0xa9c468b0, 0x3d3ddbeb, 0x09906625, 0x50d61c42, 0x2c46d732, 0x3446aa5a }, + { 0x564aa504, 0x96b85cc6, 0x7ef4907c, 0xcd581ab9, 0x65c3841d, 0x865a4915, 0xf7ee2a16, 0x22235ea8 }, + { 0x6cd307e2, 0xb1b22b38, 0x95032608, 0x31598c90, 0xd537604d, 0x97c7e413, 0x73b456e4, 0x6a2df38c }, + { 0x58d9d79f, 0x5aa00b5b, 0x060dd287, 0xc29d346a, 0x8ca763d7, 0xf9f60c66, 0xba6b25a3, 0xa012e14f }, + { 0xe5b626d8, 0x01e19b5e, 0xcbe01ee7, 0x025d6cef, 0x03b6541e, 0x8df0d079, 0x4d4b5178, 0xe7c9c2d1 } + }, { + { 0x09b93266, 0xe2769374, 0x213ce748, 0xbdfa1677, 0x0833c4c0, 0x41241dd0, 0x5bd71904, 0xbe1be728 }, + { 0x280dfedf, 0x6c83f463, 0xba81c79f, 0x78451dfb, 0x3cd12106, 0x044baeb6, 0x77de78f8, 0x036d574c }, + { 0xbd4314fa, 0xd2fb4774, 0xa0b9198c, 0x075e9aae, 0xf99cb714, 0x06bad8ce, 0x17ac87dd, 0x6bf39045 }, + { 0x05af7421, 0x59dc4c4e, 0x66815303, 0x09410376, 0x1d71e342, 0x1a353ad2, 0x7a3196ac, 0x187fe364 }, + { 0xe600765d, 0x070cc12f, 0xd81e74d8, 0x826ee687, 0x6db09ba2, 0x6b88cec1, 0xecca0bf8, 0x0036f362 }, + { 0x5ed8ab47, 0x2fd14208, 0x5aa133bf, 0x7aa529c9, 0xbe424f8b, 0x37c853a8, 0x8afbf260, 0x1bde2671 }, + { 0x5cd6392c, 0x3cdc089a, 0x71d39600, 0x4bcc77d8, 0x0f8df2a0, 0x7566744e, 0x494c12fc, 0x387dee4a } + }, { + { 0x4f51085f, 0xf2b90e78, 0x6f68ce61, 0x1c4787f2, 0x4fbf6b17, 0x004a475a, 0xedfdd2b8, 0x3ef4e7d0 }, + { 0x003f3477, 0x6e0b73e7, 0xf67c90c9, 0x6566374a, 0x0c97fd0d, 0x8be541c5, 0xc2f93b18, 0xf55abff5 }, + { 0x4f03151d, 0x83d50b54, 0x8feae836, 0xe1a91a33, 0xeafb00d6, 0xdfea4420, 0xf9db7e56, 0xbf34289f }, + { 0x6dfb6bdd, 0xd7cc8039, 0x7b0d4aa7, 0xf2f2a14f, 0xab9dd117, 0xff4c8602, 0x9cce7b21, 0x40b2e4a9 }, + { 0x72fa24e4, 0xe2616778, 0x5c058a57, 0x00ba3342, 0x2347e305, 0x8c67fdf0, 0xb967b82a, 0x9fe9b032 }, + { 0x6f4635cc, 0x638b3c73, 0x2e4df741, 0xf7898209, 0xfb573977, 0x59145c96, 0x1af9c653, 0x7b9e3a69 }, + { 0xae9393f7, 0x21f731be, 0x21d894a3, 0x5499a86b, 0xbf841bcf, 0xe947043c, 0x2d75eb05, 0xa72f2458 } + }, { + { 0x8849feed, 0x0516788b, 0xc3ba6cab, 0x73b37f89, 0xe1c59baf, 0xb9065f21, 0x42db6705, 0x83d1eef0 }, + { 0xd6e2fbd7, 0xfa08de4d, 0x3295a08a, 0x948df703, 0xab891657, 0x0940ef31, 0x56d8465d, 0x440d4979 }, + { 0x6ba6d91c, 0x5d5a992d, 0x4089007d, 0xc20f2ad3, 0x548b65f4, 0xdbcff879, 0xe76c77b7, 0x1ad4bd47 }, + { 0xe6dbd3a4, 0x0ddc5764, 0x50227b93, 0xfc70d526, 0xa782abeb, 0xb1eacd16, 0xa6d1d6c7, 0x3eb2fc3e }, + { 0xca7f5ec6, 0x027a6535, 0xf2c08c93, 0x5ab506be, 0x1034a638, 0x91f473e6, 0xc1843ed8, 0x1900ee1f }, + { 0x7a60c3a9, 0x50a3c756, 0xfc5ad1c7, 0xfb5297ce, 0xf06994f8, 0x8736d618, 0x15973fad, 0x87288eed }, + { 0x9eb55603, 0x574a3dc8, 0x66b34637, 0xe38ada16, 0x208710ad, 0x821c2d3a, 0x4d0d95e4, 0x492d3e98 } + }, { + { 0x5c6da280, 0x7b503d23, 0x7a7ff562, 0x13eca08b, 0x9b2ec963, 0x20b5c43e, 0xb9875398, 0xd1588b1d }, + { 0x3898e3db, 0x5d0c38a5, 0xab945ab3, 0x3017f692, 0xa71d187f, 0x62a32ce9, 0xbd51abff, 0x44106aaa }, + { 0x332bbd9a, 0xbc614c8e, 0x50796b90, 0x75ad5cc0, 0xa416a2e1, 0xff24e815, 0x8b0dc6ec, 0xe49b3860 }, + { 0x2c8930f3, 0x73ff7c6d, 0xd0de16d7, 0x7a8d3740, 0xfdb757d4, 0x1f438bbc, 0x27415f95, 0x256f557b }, + { 0x8f7179e9, 0x4ac99a49, 0xcabae259, 0x8b195d21, 0xb444b039, 0xe6dc2b14, 0x3dff8dbe, 0x435c99ad }, + { 0xbde84be4, 0xa5e876ea, 0x79ffb62e, 0xb4b59c38, 0x88474d8d, 0xaaeb867e, 0x6f541557, 0xf0edbe11 }, + { 0xa9b295f7, 0xe65bbcee, 0x6a129fac, 0x2f007beb, 0xcd3dcf72, 0xf5dcc782, 0x38d93d56, 0xecd192f2 } + }, { + { 0xf9e3f55f, 0x9fbcfb77, 0x711a6f90, 0xeb9dfffe, 0x8c0b2e1f, 0x0fdc1b0a, 0xc7ff8085, 0xb8f994c9 }, + { 0xfbd63e55, 0xa26d2623, 0x65c74567, 0x3fda2143, 0x4f91bd40, 0xd183574f, 0x48d6f79c, 0x895b0dc6 }, + { 0x68b4c229, 0x1a1ccfbf, 0xb901211c, 0xb2411c8c, 0xf352f648, 0x875e1f1b, 0x15fc10cd, 0xfb8c6b28 }, + { 0x15f45949, 0x502f1ab6, 0x0c528ede, 0xd4ff8187, 0x6485d018, 0xc367d6ff, 0xe766718b, 0xd5aeb78e }, + { 0x1ab4be9a, 0xe85536f8, 0x4031015d, 0xd579d758, 0xceaa2e0d, 0xace63c6b, 0x9018cae2, 0x2a5fd965 }, + { 0xfc5471e7, 0xe66d169b, 0x98fe8a88, 0xdc3c54cd, 0xe481ae77, 0xbf3ea393, 0x110b856b, 0x825aec5c }, + { 0x714d79f9, 0x3f8328fa, 0x530498cb, 0xf76d4af6, 0x2c983912, 0x89c1f5ce, 0xd8d09111, 0xeb685633 } + }, { + { 0x2d8f63c0, 0xbe538b20, 0x48f219be, 0x62f010cd, 0xe2aa9574, 0x1bb947a3, 0xeca72434, 0x3a3e6c51 }, + { 0xd81b0439, 0x103a616d, 0x044bdfd9, 0x87261d91, 0xcfaef2b0, 0x1a9e9305, 0xd168a778, 0x042fd256 }, + { 0x6565adcb, 0x82794aed, 0x7e4288d1, 0x72106045, 0xbdea5832, 0x09d2a9d3, 0x2f19d1c7, 0xbb94dac2 }, + { 0x4b1affe2, 0xc4127dbc, 0x7d4c045e, 0x0fcddbb7, 0x4da68575, 0x8cba23ed, 0x6015087f, 0x11682c09 }, + { 0x6533bc5b, 0xd2980fad, 0xbadc2f6a, 0x9e008030, 0x47e95fb8, 0x40c381f2, 0xd44c6c4d, 0x70331467 }, + { 0xc33ea1dd, 0xc834cd9c, 0x0fe19999, 0xa813b867, 0x993eddc6, 0x9ba575ba, 0x004aa894, 0xdba239ba }, + { 0x252aa22c, 0x44c17e93, 0x44290993, 0xd9a1173c, 0xe1ad9624, 0xd807429a, 0x532cd975, 0x12e0b42e } + }, { + { 0xfdb70d4d, 0x249e6468, 0xb794eb31, 0xb4cda501, 0x05d2df03, 0x26ab2206, 0x43194da6, 0xa4892a63 }, + { 0x42db2d46, 0x53017669, 0xc77e5314, 0xa9683da9, 0xfb498122, 0xddac9a38, 0xa2d4aab4, 0x4e0122b2 }, + { 0x13967236, 0x68646a6d, 0x513d4c57, 0x1aea2842, 0x093e446c, 0x298d4327, 0x0d900798, 0x9ad6c44b }, + { 0xe91847cd, 0x3df8d5da, 0x46769a8f, 0x3ad7f4d4, 0x2dc96116, 0x547f08e8, 0x840cf77a, 0xb6f0ce2e }, + { 0xfb4ea959, 0xa67079f4, 0x21e663d1, 0x10dafde7, 0xdc0ea2d6, 0x373974ca, 0x1c1cc126, 0x6dcdc5f2 }, + { 0x6808c423, 0x6f4342bd, 0x9276497d, 0x0c7fc6ce, 0x9a9e5ae3, 0x86634270, 0xdf81f26a, 0x47d913a2 }, + { 0x64337517, 0xa3a009e5, 0x98b72802, 0x4d0035e4, 0x1715ab1c, 0xae2e2a92, 0x113b2c57, 0x9a85326c } + }, { + { 0xd301c714, 0x9b6306bc, 0xa0719561, 0x98c1c165, 0x73787133, 0xecadf261, 0x64f89540, 0x5c5fa46b }, + { 0xf565ee58, 0x05263bbd, 0x88df1939, 0xf4347f95, 0xbfcfa374, 0x583ecd77, 0x7c1bfc76, 0xe6d28c42 }, + { 0xadb4b3c0, 0x146b1371, 0x58a96e94, 0x9b000315, 0xc41f4de7, 0xea787c29, 0x30c1134d, 0x6d65f20c }, + { 0xc026d6ec, 0xe96ebb42, 0x24aba2c1, 0x650a4043, 0x9ecf024e, 0xbbaf6c1e, 0x9be6b48f, 0x89e859fe }, + { 0x51de4cbd, 0x204fc586, 0x54d88ac3, 0x2da8027e, 0x47aee04e, 0x4ed28825, 0x5d773f1d, 0xc44f931b }, + { 0xced4dd07, 0xf60b6c8e, 0x80dbcd9a, 0xa8a6a7c0, 0x2320d406, 0x99043ee5, 0xe7fb777b, 0x66e1f534 }, + { 0x6ec8e251, 0x09d9982d, 0x33699ebc, 0x631c7077, 0xd2a8af8d, 0xed7b6d3b, 0xf13e160f, 0x7c03e997 } + }, { + { 0x33c4d79e, 0x898f1b11, 0x44482aac, 0x8dacba1e, 0x41e4c65d, 0x373ce7b9, 0xcc21ed0a, 0x1425aacb }, + { 0xd42df634, 0x2c0d59c2, 0x00d29c49, 0x02711b1e, 0x033e4a85, 0x5269c575, 0x383e490f, 0xaeac042d }, + { 0x033f1689, 0xc8181373, 0x957bd9cc, 0x45b8a400, 0xb9f5ccf4, 0x3f34af98, 0xad3b249a, 0x8e096a78 }, + { 0x62144bde, 0xee9c9ee3, 0x55e7d9f4, 0x2183bea5, 0x12787270, 0x3a070f24, 0x54854d06, 0x1f230a8c }, + { 0x98c2a493, 0xade86d34, 0xc4926805, 0xd2f4047d, 0x6aac8a8b, 0x845802bd, 0x279b27ec, 0xe5b61e60 }, + { 0x24f3ca82, 0xa2d5aada, 0x9ec9c6d7, 0xdabf2c25, 0x1e210f57, 0x92ad1840, 0xdec763c3, 0x078a670d }, + { 0x7533c951, 0x4b3509f2, 0xae7b17a2, 0x7fb46453, 0x095c06cd, 0xfe0f182f, 0x3bbee6bf, 0x18a14cfe } + }, { + { 0x0e2781a1, 0xe97035be, 0x7732ac33, 0x6e02ec7a, 0x9ba7d4ab, 0x2418f146, 0xfdb027b0, 0x3f16c517 }, + { 0x076864ce, 0x94754806, 0x04edbc89, 0xf79f8406, 0xbb43b69e, 0xae037547, 0xf2bd3d49, 0xa721d01c }, + { 0xc9ff1983, 0xf2c3d29f, 0xf18dd754, 0x8f547f44, 0xcfdd1ae5, 0xe2de86e7, 0xb5a20324, 0xa4929edd }, + { 0x3a5908ce, 0x228ff251, 0xa72b0116, 0x7faf015b, 0x5e47a8e5, 0x1c1769aa, 0x2f9c2b9f, 0xfdbbba49 }, + { 0xfa194cce, 0x5e55687a, 0xa888e170, 0x5b900365, 0xab7308e9, 0x1195c7bc, 0xe7e1fd36, 0xc563c595 }, + { 0xa44757e6, 0xe4824c46, 0x8f0575aa, 0xe897ef25, 0xe36d0d97, 0x87bc45ee, 0xd12fa819, 0xfb9b89e2 }, + { 0x48b3e1fc, 0xae563712, 0x0dc01dfc, 0xa055c68f, 0x52606591, 0x9546e1ef, 0x178700a8, 0x9c87b5bb } + }, { + { 0xde4ff097, 0xb76497ad, 0x41691d4d, 0xbd4ac0df, 0xd4db2a81, 0xcc3048e1, 0x2cffe546, 0x6120d83f }, + { 0xb03b5a0e, 0x374ab1f3, 0x1b4e0c82, 0x9b0eb479, 0x6e6558e0, 0xe8b9cf4b, 0x0c436779, 0x64b4cae1 }, + { 0x2aa9eec0, 0x0419fb6a, 0xec8fc744, 0xd3b8c697, 0x24f24eee, 0xbf05ce66, 0xf6bcf4e4, 0xeafe8e61 }, + { 0x9a9dd013, 0xbfe8d389, 0x32fa363a, 0xda38d629, 0x07b584d7, 0x2a843374, 0x1b08df96, 0x415c4739 }, + { 0xd1164fd5, 0x669ab97d, 0xd1886cc9, 0xe23ba6f7, 0xd897d70a, 0x212dac1b, 0x43580802, 0xbb4b44df }, + { 0xdde96bb2, 0xa665cc57, 0xc422df91, 0x28627b38, 0xe32b9043, 0xac856b0e, 0x44d1cc14, 0xd75f6e24 }, + { 0xe5bd8a60, 0x305e17b4, 0x1f9ef0a2, 0x6ee010ed, 0xacab6d31, 0xa7bdc581, 0xa0344638, 0x792c1ab6 } + /*}, { Not enough memory for more test values + { 0x28a402a1, 0x369bdeb7, 0x4d9929e5, 0x3cfdc35b, 0x99c68de9, 0x9b6b006e, 0x3f242273, 0xcf37d576 }, + { 0x6872dd61, 0xe87e9923, 0x8e8655ab, 0x67715999, 0xa60933ca, 0x641e96e4, 0x44600c84, 0xea3a4950 }, + { 0xadd02acc, 0x35f0de97, 0xecddc84f, 0x0a9dc8c6, 0xd5b537b4, 0xf7c27994, 0x75d0b679, 0xde9b4aef }, + { 0x9d6f7170, 0x2ecd6906, 0xd37b167a, 0x225544a3, 0xea804fad, 0x8e21f9f9, 0x600cc5d9, 0x9acec1db }, + { 0x30736fdb, 0x484f20b0, 0x8f237526, 0x8e2bac97, 0xe655a922, 0xba6033b2, 0x5c12ce66, 0xfd986542 }, + { 0x3fb7d59c, 0x6a2d0274, 0xb32bb0f8, 0x66420444, 0xe02c099c, 0xcb82f762, 0xf2b0ffff, 0x39925401 }, + { 0xb4904e77, 0x6aee6579, 0x6afa1fcb, 0x16c64c1f, 0xe727f962, 0xe0eac572, 0x0889748a, 0x67f2b130 } + }, { + { 0x5a4cc087, 0xc8f6a8b0, 0x1993e8f6, 0xac9cb15f, 0x445a34d1, 0xcb11c435, 0x5eba923d, 0x2032b0f8 }, + { 0xbc3487ad, 0x248e8b06, 0x34c09be8, 0x5f02e184, 0x1e170443, 0x6dd2ec7b, 0x7692ce10, 0x16c6bf1a }, + { 0x12938c14, 0x41ddff40, 0xc2d9bb7a, 0x29039e61, 0xa5ed3581, 0xc67f062e, 0x58d10b6d, 0x6c72d42f }, + { 0xe2d58c4d, 0xeb378fc2, 0x6ba88b23, 0xa07c418f, 0x13d143d3, 0xed55b235, 0x5f84d338, 0x52e2c3db }, + { 0x69e1205f, 0x4f96c4f7, 0xf79a860c, 0xef1542ec, 0xf23440e0, 0x4c66e965, 0xd60efbbb, 0x6e8f8b92 }, + { 0x824a38a3, 0xe1eafa00, 0x154e26d6, 0x78d00313, 0x20b89e9f, 0xaa788ca9, 0x19e318de, 0x6fcbb039 }, + { 0x9c23b1b2, 0x853180ef, 0x8d2961a4, 0x4f0c4086, 0xb22be3db, 0x1e900ef0, 0x9d76df53, 0x5d4c468c } + }, { + { 0x20b627c2, 0x9be7dc8e, 0x64c974d9, 0x5d4f49d3, 0xbbb2c618, 0x8ebc012d, 0x11de15e3, 0x500c8265 }, + { 0xfb78e338, 0x58caf269, 0xb2664ca1, 0xa16ff7b9, 0xd5c2a2ea, 0x59d06298, 0xcaea674b, 0x0059ff48 }, + { 0x14bd4018, 0x24070094, 0x169f4ee8, 0x8255fe21, 0x47881c1e, 0xe205f0d3, 0xe4ad2e99, 0xb51d8e3d }, + { 0xf3dbb59c, 0x0cb4edc1, 0x275400f7, 0x98d8295e, 0xd214a339, 0x99fd8ebc, 0x8acb2217, 0xf6a68389 }, + { 0x33d7751d, 0x8fb40299, 0x2b6f32f6, 0x2b2b3692, 0xa83a6091, 0x57052ba3, 0x667f9ec4, 0xb3d2f097 }, + { 0xe37fd38e, 0x13c2b82d, 0x9d913405, 0x5d2c7a55, 0x6390a8f4, 0x9fdc5f4c, 0x853e3b1b, 0x8034410a }, + { 0xfd9edeff, 0xc62d6110, 0x31567b91, 0xc7d0527b, 0x48d0742b, 0x57b3147c, 0x8f9291e5, 0x7d82cfbf } + }, { + { 0x7c63bde3, 0xaac4548c, 0x9954854e, 0xd67f0b4c, 0x04add2ab, 0xd88a2671, 0x7f2171df, 0x0d0f23c8 }, + { 0x5cf6c809, 0xd23f9751, 0xf79294c6, 0xf6019524, 0x7aa39681, 0xb8e3d988, 0x3c8c962f, 0x5d173fd4 }, + { 0x47f3efe5, 0x6d09cd2e, 0x330a8acb, 0xcfe181d2, 0xa48d9fc6, 0x4e988ccb, 0x821f042b, 0x6b5d6c84 }, + { 0x64c52567, 0x10ef805e, 0x173e3c5e, 0x3aacf828, 0x38510c01, 0x48a7ec10, 0xa3506ab6, 0x36220329 }, + { 0x5377bb61, 0x68c1f7ee, 0xe7a81b3c, 0xb43c58f9, 0xd72cb6f9, 0xd81dea3d, 0x7ae1468b, 0x55ac4f26 }, + { 0x5f731a47, 0xe3e19cfb, 0xf45410ed, 0xfba8ccc0, 0xf0c63a7b, 0x9ce539ae, 0x37e562b8, 0x180c6b70 }, + { 0x91a3cd39, 0x5ed053af, 0x09dc142b, 0x74f4a3c1, 0xa2180c04, 0x481bfb15, 0x37bfabed, 0x062e5fe9 } + }, { + { 0x28164987, 0x3c79131e, 0xd586a38a, 0x0dcbd921, 0x11f5a23a, 0x10a64e80, 0xb232f8a4, 0x9a82c6e5 }, + { 0x7b31e67d, 0x1e818e13, 0x097cd563, 0xbe4b6ea4, 0x1d7a3f57, 0x15f686de, 0x9bce46c9, 0x760756da }, + { 0x3960cfd4, 0x75bb04c5, 0x407c84d4, 0x9c625b7e, 0x7191b584, 0xb67878c1, 0x0e1fe6f6, 0x0eb1fa47 }, + { 0x271fd0fd, 0x404080f2, 0x97009534, 0x046c3515, 0x65ab41f9, 0xeb7d7922, 0x2d6499e9, 0x9c899500 }, + { 0x419f9d54, 0x0502c3c4, 0x8149723e, 0xd7b2d502, 0x20236144, 0xaa3b83a9, 0x769631be, 0x15f1e2e0 }, + { 0x601c6fea, 0x5119d153, 0x7d992c1d, 0x94836009, 0x3e7879f0, 0x9086a342, 0x803b925a, 0x4fd645ff }, + { 0xa49bc82f, 0xe14d1519, 0x1d12d5dd, 0xab10a0bf, 0x54f5e7a3, 0x90933da3, 0x21d62740, 0x1d33d0f6 } + }, { + { 0xa36e4642, 0x48c6f79d, 0x955654f3, 0x93b8d1ea, 0x6ba29e14, 0x551ad31f, 0xa99cd6a5, 0x8ccff1ad }, + { 0xcec5d3bd, 0x788fa022, 0xa65d7f7c, 0xd3f37c9e, 0xcce12026, 0x3cd4770d, 0x6ddfea77, 0x6ad3c080 }, + { 0xe81c88a4, 0xbc7bad3b, 0x3068f251, 0x18ada085, 0xa33faaf1, 0x0b797e20, 0x7a97a834, 0x8e782d5e }, + { 0xf51dde3a, 0x6db8ee9b, 0x7aa32969, 0xf2d6eec7, 0x993273e8, 0x11db4e21, 0x7a7088ae, 0x4da2d705 }, + { 0xfc7f198b, 0x86661fe5, 0x29824ae5, 0x0bb639b1, 0xc610a7c8, 0x62a3340e, 0xf591a187, 0xe265a886 }, + { 0x5f303123, 0x47f52dec, 0x34cdd38f, 0x4c7f811a, 0xc9afc901, 0xd222f90a, 0x9e172313, 0xee1b0572 }, + { 0x4a2bcd87, 0x18e236cb, 0xe5e581cd, 0xe29a6a43, 0x6a7213b8, 0xc675d970, 0x536317bd, 0x96b8b310 } + }, { + { 0xad80bed2, 0xc2f4598d, 0x4e0e6b1a, 0x9bc787bd, 0x63150672, 0x2c364163, 0xb601596a, 0xad670a5a }, + { 0x5c818829, 0xa1a6f437, 0x8d07faf3, 0xbe095484, 0x5fcd6a0e, 0xe8153a60, 0x7ab38539, 0x2ec01d0c }, + { 0xf10716f7, 0x44fd8ad0, 0xf5eb5bd9, 0x6bf45e03, 0xb71db435, 0xf3bed1f2, 0xab5c78fb, 0xe739dff4 }, + { 0xe0442ca5, 0x6096f428, 0xae68050b, 0x5040c22c, 0x38145576, 0x879ef275, 0x16ee9eb4, 0xf3c87da4 }, + { 0xf8fcd22d, 0xa7b97f06, 0xc24747b0, 0xe551e501, 0x5d5ed8b0, 0xf34f091e, 0xcafe3402, 0xb13219e3 }, + { 0x6310481d, 0x48a0e061, 0xc634d04a, 0x194efd1d, 0x4bd0f859, 0xae14caf3, 0xaccc7f18, 0x6f07f30d }, + { 0xffce35a4, 0x10d857a7, 0x1e9e7485, 0x97b41d7b, 0x69d5f637, 0x82789997, 0xa51b2cf6, 0x02014738 } + }, { + { 0xdec05e64, 0xa4305211, 0x7308530c, 0xd0382cb5, 0xa921a607, 0xc7562dc3, 0xb1411342, 0xdd40222a }, + { 0x972caa85, 0xf01a419e, 0xfd78e685, 0x03ba1374, 0x8f9bfc0f, 0x261a4f34, 0xb49fd99d, 0x24859598 }, + { 0xf016dab1, 0x4c50d39e, 0xfb46c5b7, 0x249fea28, 0xb05e1503, 0x0e350a32, 0x2dcf1792, 0x61a75e0a }, + { 0x7fd4d35a, 0xab08244b, 0xbbcd7d53, 0xd42b211d, 0x2334426b, 0x9a8be30f, 0xe15e1b27, 0x6700bb18 }, + { 0x81e463e1, 0x637b4877, 0xb6047da1, 0xb05fd377, 0x96a012ff, 0xbb5379f1, 0xac42f5c8, 0x5dba484c }, + { 0x0714b7ef, 0xba6f8b10, 0xf245d72b, 0x1ec0e0a2, 0xa30de08d, 0x606bc646, 0x7eb95591, 0x6cf9c5e8 }, + { 0xf15d21fe, 0xee367937, 0x37ca63eb, 0x38cb30dd, 0xb5edebde, 0xb6355078, 0xbb62f2ee, 0xdd48e81d } + }, { + { 0x321bf4dc, 0x678db650, 0xd85439e4, 0x7b6aea4f, 0xc5625ee3, 0xab2b9fca, 0xb9e6140d, 0xfbe4313b }, + { 0x077bcae6, 0x63858c36, 0x2baa791d, 0xc55acb58, 0x843aa75c, 0x20b25d1d, 0x86778175, 0xe4454679 }, + { 0xddfb82f4, 0xcf34b84e, 0xbc573a41, 0x8684bb95, 0x9165bee9, 0x01e96a7b, 0xdd8a5c36, 0x9bc63a4b }, + { 0x175f0270, 0x85daa416, 0x8ee7aea3, 0xfa9b3ce0, 0x9b300d7a, 0xda4ef944, 0xfc1e20b8, 0xb33f81df }, + { 0x2346a3ca, 0x842c59ec, 0xdae0db05, 0xefe15ef0, 0x2cb166d5, 0xb7d24593, 0x7e2e55aa, 0x8aba26dc }, + { 0x6c7c1a83, 0x1e49e02d, 0x7a3f46c2, 0x86e7d519, 0x255db209, 0xb47bec27, 0x69be2738, 0x982cb66d }, + { 0x9798ef0d, 0x216cf79a, 0xc8c8e509, 0xc73f1221, 0x684b472f, 0x8f58a334, 0x3d97a615, 0x4d6508bd } + }, { + { 0xa6333ddd, 0x0fe1133e, 0x690a745d, 0x62d04786, 0x50809359, 0xa30d43f2, 0x37a3078c, 0x31ad4ced }, + { 0x54dc6b53, 0xaa5dd46d, 0xef5f2911, 0x0818c5ca, 0x36c062aa, 0x044f58d4, 0x95dde443, 0x8004fc36 }, + { 0xd02db1b3, 0x1aac3560, 0x0a8deed4, 0x80e1145a, 0xbe53d775, 0xc6fe4194, 0x324c5b8d, 0x280dd8f8 }, + { 0x8e1dba30, 0x1d3218a2, 0xc63f7a0d, 0xc5be3354, 0x216a2233, 0x46508c32, 0x4762d05c, 0xf447d7dc }, + { 0x287d15ec, 0x5718b4d8, 0x890dea30, 0x918a4efd, 0x0b7d66b0, 0x26d2760c, 0xb003f19b, 0xa20a16af }, + { 0x0a67c579, 0xf114428b, 0x30826097, 0xa82d8115, 0x42e433da, 0x79952e07, 0xf761af54, 0x2509ce73 }, + { 0xe06a143c, 0x7671a5c7, 0x57ad02b0, 0x1e7922b3, 0xa79d9cf2, 0x23c7d736, 0x27a71a9f, 0xf20a7a98 } + }, { + { 0x85ab3b20, 0xcda3876c, 0xe3eb55a6, 0xa78bd139, 0x3eda09c0, 0x3f3cec06, 0x1ecee3b7, 0xa6ea50d1 }, + { 0x1fea79d6, 0x6a8467c1, 0x3607cbbe, 0x9667f95a, 0xef3c2d31, 0x81f98f91, 0x7ce8153d, 0x4c72445f }, + { 0x921d1a7b, 0xc675bde6, 0x60c66243, 0x7eaa7a71, 0x6c23d2ea, 0x1d734a2f, 0xd453c205, 0xb981e1c1 }, + { 0xea8ad813, 0x9cf1aafe, 0x1c0e04a7, 0x3d925777, 0x621348ba, 0x2df1c440, 0xee62c9aa, 0x3d927ddf }, + { 0x34b4ed37, 0x5bb5d025, 0x8c3af0c9, 0x38085638, 0xa5e93103, 0xd89a0a69, 0xc26f52e9, 0xa146e16e }, + { 0xec07d11b, 0xf96005cb, 0x9b88036c, 0x9bf2d66b, 0xba9d4dd1, 0x5cf3afda, 0x36a2c753, 0xa2b39387 }, + { 0xc9681d87, 0xf2606e31, 0x1cad2ccb, 0x4c46cc46, 0xbc055d18, 0x76477020, 0xf36b1469, 0x222bd6a8 } + }, { + { 0xf01f1457, 0xf38b5224, 0x938e42d0, 0x5f4b2a89, 0x97f7b8e2, 0x6af0624a, 0xdc87e23b, 0x78351bcc }, + { 0x42d5a5c9, 0x63244e3b, 0x27cabb02, 0x68dcecd9, 0xb6b45aae, 0xb9e29eff, 0x783d06b0, 0x5f00cd05 }, + { 0x8822ba95, 0xb1c77282, 0xa7528cbf, 0x5b642abe, 0x11a09888, 0xe3bf0072, 0x6f195fc5, 0x1c5a644a }, + { 0xdad7cadb, 0x236ab60e, 0xb12b2346, 0x5ef033c9, 0xed8442c2, 0x0caa95cf, 0x1de955f2, 0x746e58f8 }, + { 0x5b80c6a6, 0xdf45e092, 0x000098e8, 0x567a2745, 0x637947a9, 0xaa28306c, 0x17414875, 0x7a116532 }, + { 0xa82a0347, 0x26da21cd, 0xe887b642, 0x03a2d7cc, 0x7b89910b, 0xb41a2258, 0x749c621f, 0x8f9580a5 }, + { 0x0dbbd2d7, 0xd4d781b2, 0xe3e8cd9a, 0xf38d6295, 0xf19f54cf, 0x43f2a094, 0x07baf4df, 0x20ba116f } + }, { + { 0x58e6a0ac, 0x5dc19add, 0x888009e9, 0x1dd6e61a, 0x56712abd, 0xdff594cc, 0xf87aeb88, 0x53a8fa9f }, + { 0x289deff2, 0x9ccaf9f0, 0xee65aa45, 0x45d0d0ca, 0x2c200e70, 0x76b2e8a5, 0x00a36a1c, 0x85e09bd0 }, + { 0xb144adcf, 0xb57dc77d, 0x997bbd40, 0x29fa695a, 0xa9bd6eb5, 0x197994fb, 0x545a1fb1, 0x6acbdf57 }, + { 0x0b14bff6, 0xe3fde283, 0x421a86b3, 0x84a2ed64, 0x4903f0cd, 0x4882a5b0, 0x99dc11a5, 0x7cd4ba5d }, + { 0x5384a828, 0x7f092d00, 0xcbf8bb8f, 0x875822bc, 0x78bb00d4, 0x3684b2f3, 0x639cc3bd, 0x8c66e4ba }, + { 0x6c1cdd98, 0x1822b0c9, 0x325de314, 0xc9943d1b, 0x7f44eb80, 0x51f99a28, 0x799bad7b, 0x2c775463 }, + { 0x9b9db476, 0x38529ecc, 0xe2b08177, 0xe87f3a4b, 0x434f17d6, 0xd60a939d, 0x987d398c, 0xf09c407c } + }, { + { 0x85a57b94, 0x96e34ac3, 0x7c1fcb0e, 0xcec52171, 0x6851d813, 0x24406843, 0xe4e27111, 0x68e8ed5c }, + { 0xe9d17c83, 0xb192f6fd, 0x222db69c, 0x1e76270f, 0xc0481209, 0x302b015d, 0x09c03864, 0xef48b70e }, + { 0x2e9c8690, 0xdbbd87ca, 0xb0bf73f3, 0xe68b1bd3, 0xf91e354c, 0xd21a5bda, 0x6d40f59d, 0x2f709c0e }, + { 0xa9e83d82, 0xcccc43c1, 0xbb82d5a7, 0x5e0d485e, 0x351b6e06, 0xa1b01407, 0x1d0db76f, 0x73b99761 }, + { 0x4aac3b84, 0x29a2d54f, 0x4da423f6, 0x9d89d842, 0x3e999040, 0x2e7c2611, 0xfe378ca4, 0x442800a5 }, + { 0x260d5c19, 0x76eb2a52, 0x4a5b47ff, 0xf7e6fabb, 0xd2d7860f, 0xe6abe0ea, 0xafcdd3d6, 0x681ea9a9 }, + { 0x68720507, 0x2a37b22c, 0xff8984a3, 0xf7e0d12e, 0x4df3f317, 0x7040e3cb, 0xfacd634d, 0x796c96a2 } + }, { + { 0x5352f0a5, 0x55ad43e3, 0x06bf6b14, 0x99b934a9, 0x3a6cbadf, 0x1cc14e10, 0x59350db9, 0x146f6718 }, + { 0x9da0de05, 0x1d33e78b, 0x8e1d427a, 0x30c4bd07, 0xf26567cc, 0xbf5547f5, 0x9dcc1f2c, 0x920485a1 }, + { 0xd38119ca, 0xe9db0638, 0x6ddd7130, 0x5e3f5363, 0xf7d34a3a, 0x63f0143c, 0x3a76f6ea, 0xfac3efc0 }, + { 0x877d6bbf, 0xf15c6e46, 0x412c55cb, 0xd24f3b80, 0x6f6d20a2, 0x55428f45, 0xeb4ff919, 0x38049698 }, + { 0x482afc56, 0x67146e20, 0xdf564d52, 0xee6b3feb, 0x944c2574, 0x40708097, 0x0219eafd, 0x4fdcd685 }, + { 0x2b8fea18, 0xb6299087, 0x9558121f, 0x8bdf9ac2, 0x2b5f47d8, 0x5facf5c2, 0x67fa9cd1, 0x0eb09dd7 }, + { 0x61cd8815, 0x09b4cb25, 0x404633df, 0xc5d34a09, 0xf1ead406, 0x9b7808dd, 0x6e442c61, 0xf87fe2c0 } + }, { + { 0x9ba10f2d, 0xddba6810, 0xc6e336c0, 0xcc0e40fb, 0x4a3bf613, 0xeabe6581, 0xadfac597, 0x0ef51d0d }, + { 0x136a13b1, 0x7cf08dab, 0x35cc34b4, 0x882e8b95, 0x12866965, 0x91042194, 0xcff4fb1f, 0xd9e7137c }, + { 0xf2103c58, 0x91dde4d5, 0x20c6244b, 0x2b2c026e, 0xd668b18a, 0x68e4f0cf, 0xe9937ae0, 0x54bd314c }, + { 0x10095a94, 0xee6ac09f, 0xd4869250, 0x59df6838, 0xef6b63aa, 0xca0e62f9, 0xffc6516f, 0x3e001f77 }, + { 0x6d5ae56e, 0x9ce44f0a, 0x7f224c8b, 0xdc153a44, 0xf2000c2d, 0x4ebe91d6, 0x4053387f, 0x3296f38e }, + { 0x55e286e4, 0xa2320b46, 0x4c196112, 0x43f1de21, 0x6c7429be, 0x007408ba, 0x5773d9dd, 0x91e9cc9e }, + { 0x3b06341c, 0xead96907, 0x30eedea2, 0xd69c6d23, 0x302f6f92, 0x052a5e79, 0x183fc11e, 0xb24a1d78 } + }, { + { 0xda957c47, 0x5dcbbff8, 0xc7994c1d, 0xef6aa305, 0xcc8adc07, 0x2055ef7b, 0xcfab4417, 0xab2a094c }, + { 0x86d1cd26, 0x834de2b5, 0xa7e5c491, 0x611e130b, 0xe8b6197b, 0x73c03065, 0x53b2b4a3, 0x2cfff0d2 }, + { 0x8a0f2ef0, 0x1d8a0aab, 0xc09c0529, 0xf16f58d6, 0x8255bb71, 0xcba02e81, 0x50da60d3, 0x4020039a }, + { 0x2918bfbf, 0xb4974ba9, 0x0b671f29, 0xaf45f2ce, 0xf95e9145, 0xcaf7bc2e, 0x6315709e, 0x7d433a11 }, + { 0xb607f4dc, 0x2d28a67f, 0xe054622d, 0xfd7ad1e8, 0x6fff4cc5, 0xb817dfe3, 0x7f610798, 0xc2a04709 }, + { 0xd6709af6, 0xafc3d127, 0x13c73760, 0x87ba5160, 0xfb2f15ed, 0x16845096, 0x082587a9, 0xd8163ac4 }, + { 0x7760ac0d, 0xff325b36, 0x06187a59, 0xe30aed0c, 0x6ad23dc7, 0xed972adf, 0xb43917a6, 0x75e08234 } + }, { + { 0x47425229, 0xb152561c, 0x424c8f3e, 0xbebff689, 0x5aa3745e, 0xc887858a, 0x0a80522d, 0xb07417a2 }, + { 0x964a13ec, 0x7a38907b, 0x982b2e8a, 0x556372c2, 0xa6535de2, 0x9183958d, 0x41393d50, 0x3ae0ff85 }, + { 0xb7751cba, 0xe3158d80, 0xce83731b, 0x08fea730, 0xec4329a7, 0xc56417c1, 0x7814056f, 0x24a5b025 }, + { 0x92ccdf79, 0x57948abd, 0x6da546bb, 0x97387365, 0x6372286f, 0xab4ec166, 0xf41327d8, 0x99145807 }, + { 0x90477a42, 0x2fb03ec6, 0xae58212e, 0x7f2fbfec, 0x4551b819, 0x2a31a33d, 0xd4a2b6d2, 0x885f3a45 }, + { 0xe691d16b, 0xff1d8f20, 0xb5c52fe2, 0xd7d8d5aa, 0x0a4e63e8, 0x5055221d, 0xc1667dc8, 0x7507670e }, + { 0xc8c64690, 0xf96e7838, 0x7e2c9296, 0xab5d22df, 0x3e46e338, 0xfaf7e6d0, 0x9d002e41, 0xfcd23f54 } + }, { + { 0xf35d4936, 0x665f0735, 0x1bcd71c3, 0x5a6e41bf, 0x12b48199, 0xed9b7113, 0x261ea2a7, 0xf4b6742e }, + { 0x0f8e6f12, 0x9304c346, 0x5a93e4c1, 0x07e2093b, 0xbcf80811, 0x3fec2744, 0xd2676f19, 0x04eab869 }, + { 0x7c00eb7a, 0xdd7dec8b, 0x985bf83f, 0xc0de6b34, 0x30ff77c1, 0x998ac2ae, 0x8df4d5f7, 0xd1d47538 }, + { 0x274b0adf, 0xb5cd2f9f, 0xaa995e75, 0x70c443d3, 0xd0fe6e3c, 0x5db8f6c8, 0xa36e9826, 0x29d198c4 }, + { 0x36594cd4, 0x63117bef, 0x9bc7ab17, 0x99a59efa, 0xb4563e58, 0x1d83ae87, 0x62adcb06, 0x685d0aaa }, + { 0xe4f93710, 0x95348ee4, 0x5027940c, 0x96b83cbf, 0x801fa811, 0x46032811, 0x7249910e, 0x0878692c }, + { 0x14bf9817, 0xd127a27c, 0xf2975482, 0xeda61089, 0x3f017d6b, 0x415fe209, 0x44e4b5d4, 0x108dd3ba } + }, { + { 0x9ca4a419, 0xbd205087, 0x67e09af4, 0x413207b2, 0xb12fa7ab, 0x993be0b7, 0xf311f156, 0x56c54bd5 }, + { 0x5e86639d, 0xa3e6476a, 0x3fcc442e, 0x0dcf9138, 0x57b35b7f, 0x11185891, 0x8f835e60, 0x79b6bcb1 }, + { 0x26262fdc, 0xb1a499db, 0xa2bfe1e3, 0x552e6f66, 0x7939bd03, 0xc3eb7083, 0x66ea8877, 0x22151649 }, + { 0xc7f00291, 0x9801f66e, 0xa90c690c, 0x2f8e37c8, 0xe12b4fb6, 0xc94fe0c1, 0x3b1eb773, 0x41323147 }, + { 0x9afc5c6c, 0xb82cea10, 0xbd95f5bf, 0x4616565c, 0xc306b422, 0xbc312687, 0x10df3428, 0x91f6fda4 }, + { 0xdf566054, 0xd69362d4, 0x74bc3bad, 0x0c48ac9a, 0x6ebd7fb6, 0xd57b706d, 0x38520c15, 0xbf2dd2a7 }, + { 0x430fc0a0, 0xbf37d40b, 0x0af82928, 0x33df1e63, 0xec5fc8f5, 0x9ed64256, 0xee78a46a, 0xf6ffe8fb } + }, { + { 0x2aeb1de6, 0x443aceb9, 0x97a4ba87, 0x7fdb5be8, 0xfda17dba, 0x43bfdc7b, 0xc7435808, 0xf56491a9 }, + { 0x81961723, 0xd9b859a9, 0x94a90e21, 0xe1941143, 0xf4c3f277, 0x83e8cb49, 0xeb919a5d, 0xc7344af0 }, + { 0xb9183a6f, 0x91c76f0b, 0x2bab1eff, 0x7bbb4384, 0x1ee2e225, 0xe5324e3f, 0x49e0f743, 0x699dcfca }, + { 0xa72d9c94, 0xb82fe67b, 0x5260f168, 0xd7d549cb, 0xf5f4297d, 0x19c5e734, 0x13cb084b, 0xd92902ca }, + { 0x0abc9207, 0xb9aa8e11, 0x98267f2e, 0x047679cf, 0xc1629efb, 0x112546e4, 0xa6962729, 0x204d1b1d }, + { 0xdfccb5b1, 0xb0d3511e, 0x97f071c5, 0xff3ffc4e, 0x78aac259, 0xa62c0afd, 0x7e85609d, 0xc8f54f39 }, + { 0xa1118851, 0x0efdd2d0, 0x05e6797d, 0x3516c425, 0xe10e036b, 0x8c0bbce9, 0x6cc72e90, 0x72fcd49c } + }, { + { 0x471c0c97, 0xd2e41f86, 0xea6d86ad, 0x68f2fb9a, 0x76bcd3d0, 0x0990222e, 0xaf654d4c, 0x592f2c03 }, + { 0x7bd3a2d4, 0x79376fe0, 0x6cfd5f8c, 0x35f9db39, 0x3c49abb5, 0x822f0d7d, 0xb4b39340, 0x6ac0faaa }, + { 0x1e9744ab, 0x054e047c, 0xb6a7b851, 0x2ee0cd9d, 0x78d17a51, 0x4cd4430f, 0x237fd847, 0x849fcbe5 }, + { 0xb0c891ca, 0x6c8d5bfb, 0x3b0a93ed, 0xc7af0a71, 0xff2465f3, 0xef2a126c, 0x5ee2020c, 0x3b173750 }, + { 0x0dbac1e9, 0x450b4dac, 0xe08aeed9, 0x38991ff5, 0x6a552d43, 0x54b62def, 0x7c02b4e6, 0x29f22f0f }, + { 0x015b4120, 0x3bc1586a, 0x5691b289, 0x67477921, 0xd653ee32, 0x772b4273, 0xec197c81, 0x3e129524 }, + { 0xc5c00da5, 0x0df9326c, 0x433929c3, 0x6f5890a2, 0x7290f5a8, 0xd81844a2, 0xf27efcfd, 0x126566c6 } + }, { + { 0x2cbcb9ea, 0x8b5f07ea, 0xbe48fbe5, 0x0f7db757, 0xb222db10, 0xdba776d4, 0x18a96d40, 0x971f3692 }, + { 0xed073116, 0x7357cabf, 0x067b5d3e, 0xfe3cb788, 0x58aa92ae, 0x5b798361, 0x32097de0, 0xd06717c5 }, + { 0x92ee08ed, 0x18760464, 0x754f8f42, 0xda1dd7ff, 0x19342cb1, 0x5eb6b2a5, 0x81b07d3c, 0xaea3de22 }, + { 0x3571beb9, 0x2276e664, 0xacc949bd, 0xce5ca268, 0xc56df87b, 0x82bf433f, 0x669be89b, 0x4fa11773 }, + { 0x1873eacd, 0xb73a9a5b, 0x592c8e91, 0x2654636e, 0xbc6d1a47, 0x7afdcb9d, 0xea020c0e, 0x1efec521 }, + { 0xcef4c7bd, 0x67df729d, 0x0addb2f3, 0xa3c0ec1a, 0xc97dbc57, 0x40b6eb21, 0x47507cf5, 0x1018a2bf }, + { 0x9a4e2559, 0x7bbdf790, 0xe67e693c, 0xd9dece5d, 0xcbf89212, 0x05182c20, 0x44d35392, 0x0831858d } + }, { + { 0x92bf7ad8, 0xac7d3871, 0x79f9506f, 0x5a520b2d, 0x6d684da3, 0x751eaf8c, 0x1f3e81b0, 0x6049f480 }, + { 0x1c05bc11, 0xc9773c3b, 0x5985a938, 0x8ff45a03, 0x6818d96f, 0xf9ca15b7, 0x1a2cac49, 0x6f48e280 }, + { 0x738b797a, 0x573546d5, 0x9ea830f5, 0x3d4a8258, 0x08c9d14e, 0x588b5783, 0xf0aa4a89, 0x206efda7 }, + { 0x9055cb57, 0xdeca9dc8, 0xb851d1c3, 0x973a947f, 0x2b95673d, 0x8ef5fc5a, 0x65a6210e, 0x46fceb43 }, + { 0x03c863a4, 0x49050543, 0x9f6b31b9, 0xa18686e8, 0xe892f2da, 0x4fe3a2e5, 0x2d42a25a, 0xb05e7117 }, + { 0x49bfd4dc, 0xb9e76ab8, 0x2ccaf142, 0xf6e658ed, 0xd8da5bc3, 0x43c590cc, 0x23ee8dc6, 0x847deefa }, + { 0xaf873d1d, 0xeec773e6, 0x367aa3ff, 0x631c11b8, 0x1f0c4164, 0xb1ea88ef, 0x22667a9c, 0x4f3058af } + }, { + { 0x962f57ea, 0x81e5fc32, 0x0081c8c4, 0xadc7fee7, 0xba552a5f, 0x0474668e, 0x15a30945, 0xe96d0d57 }, + { 0x42ba07b4, 0x01b6ba42, 0xe9ce2618, 0x8974c5ae, 0x703f4b0b, 0xfae91532, 0xc0d2f5d4, 0x5b2597ef }, + { 0xadce03e1, 0xfaf36703, 0x382ab5c1, 0xf1840c65, 0x28f76134, 0xc6a72567, 0xbad3e27a, 0x35b24ed7 }, + { 0x5ff63ee3, 0xdbf4abd6, 0x340396a7, 0x8da6e184, 0x84f18556, 0x83d2ef1f, 0xd6318694, 0x01e66e20 }, + { 0x657c0e18, 0xe8e96d61, 0xfb5ae696, 0x31e9dcfa, 0xb3551eea, 0x4ed0254d, 0xd5a176e5, 0x21f6af2f }, + { 0x55d573ce, 0x10605518, 0xde2ec80e, 0x98aba416, 0x37642d6e, 0x71cd5677, 0x71d8a8c8, 0x9e026d46 }, + { 0xe78e54d1, 0xd5f17dee, 0xe021ef02, 0x1b40b24a, 0x2f11ba75, 0x335fa32b, 0x2e8fd8f4, 0x237f8ba0 } + }, { + { 0xed0d1650, 0xea2bae2a, 0x634c7bea, 0x6a3f1453, 0x7a9b247e, 0xf9bdd947, 0x0fcba804, 0x9b0d0cd6 }, + { 0x9b71b442, 0xb740ef03, 0xcaa45dd8, 0x333b16d5, 0x6940cee0, 0x0a2efb3e, 0xa1ebb1a7, 0x465f93cd }, + { 0x0253e6b5, 0xca44e155, 0xf89d1f3f, 0x1bf46b6d, 0x8266ad12, 0xa45e0b16, 0xb9488761, 0x8ba01181 }, + { 0xdc95381d, 0xd26cc252, 0x0a2b707f, 0xc0e0cb57, 0x9ee4eeae, 0x0a9df423, 0x400b1fee, 0x650a95e9 }, + { 0x61cb3f98, 0x08ee7eed, 0x71cd9edf, 0x5d924366, 0xed6915c5, 0xf6ed6c49, 0xd18c26b8, 0xae28feec }, + { 0xdd899b79, 0x9eee5680, 0xc1183ea5, 0x9646b52a, 0x8c11f519, 0x3decaa47, 0x6071c964, 0xc27ded8f }, + { 0xe4a5b241, 0x851bca37, 0xc6aa5428, 0x79831ce3, 0xd22215cd, 0x38d58f7a, 0x08df4817, 0x85fe05b3 } + }, { + { 0x11f97d16, 0xb9d32fd7, 0xf4c7861e, 0x39b3be77, 0x3d9195dc, 0xcdca9c19, 0x6949650f, 0x3f39d9fc }, + { 0xaffd5f80, 0x9ea527f9, 0x059e0467, 0xe8e176f1, 0xccccff47, 0xcb3045f7, 0x45dd9987, 0x92b3eef5 }, + { 0x56d610d4, 0x25a5e55b, 0x7dd274f1, 0x5206ac55, 0xa896fa4b, 0xeb1ce606, 0x6b62ca4f, 0x50e0f6c9 }, + { 0x22d55988, 0xaf4dac6a, 0x39fbf645, 0x68edce96, 0xd85ad56c, 0xcae1ba73, 0x01860e94, 0x678203f3 }, + { 0x4dea4902, 0x3f8c687d, 0x93c3baec, 0x387b7671, 0xd5cb1818, 0xaa45d1e6, 0x5a652f0f, 0x851a2d41 }, + { 0xce2e1a8d, 0x40213d61, 0xe1cb5c2e, 0xee2dfdb7, 0x1b4aa378, 0xc0daf98b, 0x797c4053, 0xbef4a202 }, + { 0xfcc877be, 0x02e4b377, 0xf2cf8150, 0xe72206d5, 0x9717a04e, 0xbc7369f3, 0x37d99625, 0xbbb3af4d } + }, { + { 0x7b817df7, 0x8540e578, 0x37a88677, 0x9ac5c9a9, 0x9a2cea74, 0x1077a7d5, 0xf74d5738, 0xcd49e631 }, + { 0xc887a1d4, 0xebcfc759, 0x840c3b94, 0x9d7c5067, 0xbc8d4139, 0x165dbe1d, 0xb20727aa, 0x048b6d62 }, + { 0x48291e94, 0x8af5b98e, 0x6b7a9afd, 0x45e28fd8, 0xed98dbea, 0x67aa3b1d, 0xea306382, 0x9cef4397 }, + { 0xe2577d82, 0x3e4a6a53, 0x122fb3cf, 0x34cdd88f, 0x07fac0c8, 0x688702bc, 0x6715187c, 0x870471ed }, + { 0x8f5993ac, 0x22d7aad0, 0x58de6d25, 0x76fc4098, 0x18d9d372, 0x945b97e8, 0x3e3140a9, 0x5034761e }, + { 0xd8a83ad4, 0x3f81fe2c, 0x6e2ee5c0, 0x6f18c51b, 0xdec7eb75, 0x433a442d, 0x2e97537c, 0x5c97338e }, + { 0xa3401399, 0x4099382d, 0xa315b75c, 0xa1af232a, 0xc06804b4, 0xa5a1ecf5, 0xb7502e4c, 0x4af05d96 } + }, { + { 0xa4292161, 0x64de8a51, 0x8b32577a, 0xb69defe7, 0xb3f258fb, 0x3b507f07, 0x3d34d323, 0xb72be5a9 }, + { 0x7d2b9c9c, 0x07b0618a, 0x92b9a7b4, 0xb8073cca, 0x622df393, 0x04ca0a0d, 0x5cb29f45, 0x65a800c4 }, + { 0xafd63ad4, 0xf3b45556, 0x3e5f9f0c, 0x596d7f10, 0x1e445890, 0xdc732db8, 0xa1457516, 0x2c11685c }, + { 0x106d1adb, 0xbfd505ac, 0xd17d09c8, 0xcff3de70, 0x5ed21587, 0x26601bc7, 0x266c8357, 0x38e427c2 }, + { 0xab583ac8, 0x18e6a293, 0x2a4b1251, 0x683932d2, 0x1d191544, 0x25ee6dbe, 0x686c3985, 0xdf85767a }, + { 0x07d9277b, 0xf431323e, 0x23e27bed, 0xd57330bd, 0xd3a5a46a, 0xc40134a0, 0xb51a1916, 0x920d225f }, + { 0xff6a045f, 0x0219c728, 0xd19c51ca, 0x90d6f91e, 0x008df777, 0xdcbb0ca5, 0x351b7ccd, 0xa17de1be } + }, { + { 0x61c98b18, 0x4ff26086, 0x9f69f5de, 0xf9ad9780, 0xb3c863df, 0x16b6b073, 0xa1261d6a, 0x61ea337c }, + { 0xfa3d55c1, 0x6deb841e, 0xd18b3890, 0x6eb95aef, 0x46758d3f, 0x95c054b0, 0x169c1ea1, 0x8c9f7b67 }, + { 0xca4c006e, 0xb8f74551, 0x232cde8b, 0x45e3386c, 0xa53e5941, 0xf1a18ad1, 0x3d65cbd3, 0x71aa1845 }, + { 0x7a5a38c1, 0xc71ea8f4, 0x2eb7c43d, 0x8231f36f, 0x30d09ec6, 0x108d8080, 0xc1168829, 0x7fe7c39b }, + { 0xff16554e, 0x3ab8ca07, 0xbbe6872f, 0x569c05ae, 0x7d82e670, 0x73a3e51d, 0xb46e72e4, 0x5f4bde67 }, + { 0x6ddaa6b7, 0xddf2adba, 0x55094566, 0x12f25856, 0xbc6068b8, 0x0706c7d2, 0x18190f2c, 0x46248f58 }, + { 0x1c720640, 0x821f0744, 0xf950970f, 0x2b9d5a7d, 0xce4f69ae, 0x99594043, 0xc095e4c7, 0xfabaf4e9 } + }, { + { 0x2ca85619, 0x35b831f3, 0x359db80d, 0x1d390bc3, 0x787df3c4, 0x0083aa53, 0x4ea26f41, 0xdeafe94c }, + { 0x34d01dc5, 0x0818d2c1, 0xd62430a2, 0x17369f1f, 0x433db5dd, 0x017c1bc3, 0x4acd2660, 0x9aa96604 }, + { 0x8692005a, 0x639dc9c2, 0x6183c4c2, 0xc44f9407, 0xeacb0c33, 0x5008b57f, 0xa399ae39, 0xc4a9d096 }, + { 0xce140b42, 0xcb62b5f8, 0xc49ab307, 0x09f39be2, 0xea8b2591, 0xd9dffaf0, 0x66a9fa58, 0xac6758fc }, + { 0xddc748c5, 0xd5a8a65d, 0x0ffb9a2f, 0x4181a5b6, 0x78754b79, 0xcef03b2f, 0x65868ec7, 0x9f5b6485 }, + { 0x090377f1, 0xefe4e64d, 0x8f758f90, 0xc62973bd, 0xaa48dc9f, 0x072c9b20, 0xc13b0d8e, 0x89f4518e }, + { 0xc6406788, 0x020f2cf5, 0xa59b4d0e, 0x938a2230, 0x49f79f50, 0x90f2e0c8, 0xcfb38e27, 0x53887c8e } + }, { + { 0x0e8fedc6, 0x6f70a211, 0xde1fa17e, 0x600ab256, 0xf3f84ddd, 0xc2ec2357, 0x3f079f76, 0x3ea773ec }, + { 0xc4d854bf, 0xf2dbe1aa, 0x6a339ef7, 0xbc001595, 0xe2187ebc, 0xb6c3d803, 0xaa303fb5, 0xfc6aee1c }, + { 0x7cc4a485, 0x32966e96, 0x1c24d146, 0xb8c2fbfe, 0x1df0e50f, 0x5f25ae39, 0x17947bb1, 0xe769787e }, + { 0xa0a47d6f, 0x5ba5e912, 0x351f2987, 0xdf007baa, 0x179bdfd8, 0xe2d10433, 0xc46bf7f2, 0x8f1661cd }, + { 0x1081d07f, 0xec89c7ce, 0xff7bd73c, 0x443ca90e, 0x62ca731f, 0x8cdade11, 0x3c2f428a, 0xc8f6a3b5 }, + { 0x29e1b992, 0x36cb06cf, 0x09a6d481, 0x1a5f36ee, 0xa9be4195, 0xbc9d79ef, 0xfb5d9cc5, 0xd5f1a502 }, + { 0x4efb9d6e, 0x6cd3c3d1, 0xd7a571ad, 0x094fa1cd, 0x215f0d89, 0x7ee33093, 0x211569ce, 0xe0978f7f } + }, { + { 0xf2e250a6, 0x644dc9c8, 0x03024346, 0xb4bc6847, 0xcc69fe0e, 0x02e802b0, 0x596a3d96, 0xca7ea4f8 }, + { 0x78431789, 0x2ac18055, 0x8f33a60f, 0x7e4d6ee7, 0x5f4381de, 0xcac16f1a, 0x4b181312, 0xdd2f7c1a }, + { 0xc17902fe, 0x8bb54080, 0xb2d8be3c, 0x5d756d91, 0xf5a477f9, 0xc395f213, 0x7c041dfb, 0x46f78589 }, + { 0xf1b0a53b, 0xe10e5ff8, 0x73062e01, 0x25f6dc31, 0x54d816cb, 0x5e6f7a4c, 0xa5de14bd, 0xb8b75786 }, + { 0xdac58db9, 0x7b14d7d0, 0xd9484ccb, 0x6714640d, 0xb600f2e6, 0xcc79c746, 0x1b6cad87, 0x7dcf33d8 }, + { 0x017b8d5e, 0x70eae2d3, 0x38f82a36, 0xb5a8077b, 0x5e010181, 0x3e128a3b, 0x75064a21, 0xd94d14b8 }, + { 0x7a0b5ab0, 0xee95230f, 0xe43198ef, 0x1812e8c0, 0xa4e9aff4, 0xaddbbfb5, 0x6974ffd0, 0xdf0b3e39 } + }, { + { 0x73eb8444, 0xd1b0cbd7, 0x84e02b0f, 0xbb790db4, 0x551b5168, 0xefe3bab0, 0x560e32eb, 0x7d5331f5 }, + { 0x5ec864ed, 0x405e7816, 0x00623c17, 0x7372c617, 0x57ff0c2c, 0xaa8e0e25, 0x8ba27e38, 0x15a7b3ed }, + { 0x6b5f8a03, 0x1f8147db, 0x0c9fc9ed, 0x0142bb78, 0xa8ec0704, 0x09524387, 0xdd504764, 0x25df06c0 }, + { 0xf3454093, 0x1af74eed, 0xc710995d, 0x8d6db26b, 0x097fc18c, 0x0130721a, 0x7b01c796, 0x2024686e }, + { 0x2f5058e1, 0x9c610371, 0x82bd715b, 0x364bc316, 0x7aa700b3, 0xf83145be, 0x279dace7, 0x82e8d269 }, + { 0xf968b736, 0x16095a7a, 0x57135ac0, 0x8baf2414, 0x584014ec, 0x76700cd8, 0x1d2d52f9, 0xcbfb7a46 }, + { 0x4f476f6c, 0x7aa51699, 0x70bd6f1a, 0x2c9a4124, 0x69af47de, 0xbb6b03f8, 0xe1f829cf, 0x7ce1137c } + }, { + { 0x529cb309, 0xc8aea28e, 0xd098438a, 0x2ae46f3b, 0x9412c6e4, 0x070c8c6b, 0x86e3d599, 0x6f637d52 }, + { 0x83bc496a, 0x5fee475a, 0x3c57d57c, 0x3d73802b, 0x43487150, 0x54628ac1, 0x2b7caab8, 0xc076d88c }, + { 0x8ac9ecaa, 0xe302536d, 0x01dcab9b, 0xd402ed11, 0xd2cda0e5, 0x38d52eb3, 0x7bc46a8d, 0x20f2b18d }, + { 0x3177ead6, 0x2c3e38b1, 0xc1fedd11, 0x1d61cf39, 0xa270a03d, 0x97927029, 0x01949d10, 0xca432255 }, + { 0xa752f732, 0x4e8a93d2, 0xa550cb22, 0xb76bbf17, 0x038cef04, 0xcf7425ed, 0x6ae3268f, 0x3c6cf564 }, + { 0xe3b0ec46, 0x70d0fe76, 0x59e8d363, 0xeab1cd4b, 0x9b30c6bf, 0x848d7004, 0x45beb655, 0x2b92f24b }, + { 0xd56d857a, 0x68b415c6, 0x88aa3c8f, 0xe7974251, 0xb186344c, 0x6b4e3a32, 0x154a94fa, 0xff9956e9 } + }, { + { 0x4757c9b1, 0x525ad554, 0xca91d9ce, 0x18c6c4ef, 0x90284f11, 0xe863f01b, 0x9a6e1466, 0x933653d8 }, + { 0x82eeecd5, 0x0338835b, 0xa5e276ac, 0x07fee98f, 0xa4e36ae8, 0x9d4e0917, 0xb5515e01, 0x9cb0f560 }, + { 0xfd75e016, 0xfc2509dc, 0x43884277, 0x173b4524, 0x666341b9, 0x14986d6c, 0x9da3cf7e, 0x3ff34c72 }, + { 0x1df8ed20, 0x197d99c7, 0x80d6f0a0, 0x29e40b59, 0x0bb39c17, 0x5733d550, 0xb68f6e8b, 0x4e407471 }, + { 0x74cf47dc, 0x123386ec, 0x8832fd00, 0xa6da4f17, 0x6be7b728, 0xb8ccc057, 0xa00880d7, 0x47ae5fc6 }, + { 0x773f18a1, 0x739953a2, 0xcff6d9a8, 0x58da9a84, 0x68d99953, 0xcef069a6, 0x26a8617c, 0x762c6ae0 }, + { 0x6a1057ba, 0xa6faae33, 0xe1c7df27, 0x8d1592e7, 0xb080e22b, 0x867c0f0a, 0x50d5f05f, 0x5345865f } + }, { + { 0x979b7cbb, 0x52d0bbf0, 0x174a5d8e, 0xe95c9c90, 0x23e8dea1, 0xa1a797db, 0x34f765a4, 0xbde08c6e }, + { 0xac591286, 0x981475ad, 0x9b6c3e57, 0xca87b92e, 0xd8a63a98, 0x9ca3f9ab, 0x5701c152, 0x17caa9d0 }, + { 0x9260eb87, 0xba139238, 0xc41ff15f, 0xb6a963fe, 0xa12432e7, 0x0cd72d7b, 0x545d1f7a, 0xf06027f7 }, + { 0xd08ad069, 0xb724815f, 0xd40637a9, 0x93b37f1d, 0xf68d49fe, 0x6d27ebea, 0x3d293972, 0x988cd20e }, + { 0x9a48bf01, 0x6f004e75, 0xaf950a9f, 0x763ce18b, 0x30e5459a, 0xded520fb, 0x60854a98, 0xf92136e0 }, + { 0xabd4a523, 0x21cd10fd, 0x4984edaf, 0x7b52b56a, 0x9e878a51, 0x92cc4dfa, 0xaed4a5e0, 0x01b56dcc }, + { 0x20adbaea, 0x867dba2a, 0xff3f992f, 0xec7b3339, 0x3129e416, 0x1e956b88, 0xc8fab6b0, 0xfbff47ae } + }, { + { 0x3a65aa61, 0xd2c7a476, 0xc4e5be20, 0xbcaaf45c, 0x5c64c66a, 0x608f56f6, 0x34cdd4bc, 0xcb8226c6 }, + { 0x3626a049, 0x26bab677, 0xcfc23c44, 0xd0fa390c, 0x27ecf606, 0x65a43120, 0x57db6f38, 0x8d9b2bda }, + { 0x8b7bb63c, 0x9bb0515a, 0xc9ac3e76, 0x2b0f69f2, 0xd51117ad, 0xb239c124, 0xc62a5122, 0x2841f4fb }, + { 0x44cc9ec0, 0xd14489ef, 0xc67359c8, 0xb711a35f, 0x1d35fdb4, 0xfda767fc, 0xa568fa7f, 0xde40be22 }, + { 0x121c113a, 0x5de996ca, 0x74125b5f, 0x2f14fbf5, 0x748a2f09, 0x4168c096, 0x0a174256, 0xbed59fcb }, + { 0xd92c10a4, 0xb7ba89b8, 0x15266226, 0x9df26909, 0x5a7db5fd, 0xf9283633, 0x4b3b1a2b, 0x761c86d2 }, + { 0xfc576cf6, 0xf4bc912a, 0x48efe0f9, 0x79700f51, 0x2a67c504, 0xb317b87c, 0x8a78a015, 0x5b19bd6a } + }, { + { 0x9ce6fd52, 0xae988a65, 0xd239a70a, 0xd004bee0, 0x4ea5ffe9, 0xad1ecc35, 0xa2185261, 0xb4d0fde1 }, + { 0x89dab155, 0x4d4133d0, 0x4f5c5737, 0xb383d021, 0x52b3bbc4, 0x6a98fe0d, 0x2e9fd34d, 0x89405235 }, + { 0x795dae31, 0xb7bd5e23, 0xcbe89d94, 0xa3a740d7, 0xd4016020, 0xb3d74d8c, 0x0af08d29, 0xf6c5b76d }, + { 0x64113dfb, 0xad4ce42a, 0x504c363f, 0x811530d1, 0x739d6cfb, 0x10433b5e, 0x6786fd93, 0xb2af4a85 }, + { 0x58516d01, 0xba449a0c, 0xaf379ec5, 0xc0d26a3e, 0x08a58d86, 0xb11a0670, 0xe6c2cc1e, 0x022a6c16 }, + { 0x903fe291, 0xef96473d, 0xeed4251e, 0xb47da874, 0xc0164aca, 0x0df05201, 0xe8ccc6d6, 0x3dbdd5ba }, + { 0x7daf34e8, 0xa81a914c, 0x87ccc1ae, 0x7d69446d, 0x7b26ca90, 0xbfc7fdf9, 0x9b79c4e8, 0xcd690626 } + }, { + { 0xbca2ce97, 0x9b768b00, 0x9e16c4a2, 0xbe369915, 0x33623ac2, 0x87d332dc, 0xf4cbf437, 0xc696b087 }, + { 0xb8b56e67, 0x60e96d84, 0xd737e72b, 0x617b72f8, 0xde1bbd44, 0x215077f0, 0x660d9b1e, 0xe1d46f38 }, + { 0x13ecfb64, 0x89381f89, 0xef8bf735, 0x3c1974b3, 0x59cbf321, 0x1274909c, 0x4d30a822, 0x5a284c16 }, + { 0x773c79fe, 0x345c0f6a, 0x1d7025ad, 0x09b49300, 0x9a4c9d84, 0x7998e71d, 0xfc4fcaa4, 0x14ab640e }, + { 0xa6582ab7, 0x924ce8b9, 0x15d99e33, 0xf1670d4b, 0xde7a8209, 0x3c63c030, 0x9597ec1e, 0x9381e27c }, + { 0xe0485717, 0x102c7659, 0xc5056bf6, 0x70f64f6a, 0xa57c9793, 0x59aa7c61, 0x7eb3322e, 0xab2c367e }, + { 0x39147b0d, 0x047d17af, 0xbb554ea8, 0x18259d17, 0x413a232b, 0xda2d6aa3, 0xbb280068, 0xf431d932 } + }, { + { 0xa5e23d43, 0x5433f6ec, 0xa243e230, 0x202a9049, 0xeca5c2b7, 0x5f3a244f, 0x54f555b7, 0x5abf558e }, + { 0x726d36d7, 0xbaa745ff, 0xc0995cbc, 0xe155fd2f, 0x908477b0, 0x3bfdafc3, 0x627e2400, 0x9b54d5ae }, + { 0x54943314, 0x6cd13b0c, 0xf7017cb0, 0xf354f7f6, 0x913a712f, 0x32396464, 0x7f5c8b77, 0xda9aa1a6 }, + { 0x57b1488e, 0xfd85c443, 0x6c760ad5, 0xec30418d, 0xdb2df81f, 0x4fe380b9, 0xfef3c46e, 0x546ed177 }, + { 0xec5bf376, 0x3c6ead59, 0x06df80e6, 0x9b4b63b2, 0xea891560, 0x96d61ec4, 0xec69c54d, 0x2a7094e3 }, + { 0xa5034915, 0xfddde2e7, 0xc2a96fe0, 0x7e514b5e, 0xcc097a6e, 0x8f87beb4, 0x2d2098da, 0x492e1023 }, + { 0x1f64f72e, 0x29a4940f, 0x28bb3d9b, 0x176986dd, 0xccf75334, 0xdb8baaec, 0xc2eac5cc, 0xdc1a63c1 } + }, { + { 0x8f2794ef, 0x67575956, 0x1df0226b, 0x1ac6f8d8, 0x9b783a25, 0x9afe2930, 0x3b57d6ba, 0x426e6e12 }, + { 0x9b586e94, 0x1fc66975, 0x3d745205, 0xac997cdf, 0x2b694840, 0xd61b8df9, 0xfe0d78f5, 0x138d90b5 }, + { 0x90c898ff, 0x5e593efc, 0x436815fb, 0x32a7b5dc, 0xdb5b7d3d, 0x86f4e320, 0x4e0a555c, 0xe8c07c34 }, + { 0x8238df97, 0x980ca2c9, 0x0c856467, 0xaf327325, 0x485f8c16, 0xdc401567, 0xf863daf6, 0xd760430f }, + { 0x6279f57f, 0xbdf707af, 0x166d212c, 0xb92b9bb4, 0x8c74bd79, 0x22154973, 0xc470ce5c, 0xad8317d1 }, + { 0x7740154c, 0x194543f0, 0x59f7335a, 0x98410013, 0x52012f57, 0x1716897b, 0xf74d6dc4, 0x920c3d1a }, + { 0xd141f302, 0xbc892c49, 0x05d1784d, 0x45eb8135, 0xa3e3f86a, 0x5a48f596, 0xcf7fa50d, 0xfd9d90e8 } + }, { + { 0x83a24eeb, 0x8a47b928, 0x3ba8e0a0, 0x9fdba245, 0xd8599e21, 0x907c9c19, 0x396bc65c, 0x1d1e0efe }, + { 0x37555f5d, 0x52d01015, 0xc65384f4, 0xa57da19f, 0xd5306533, 0xd7b40e56, 0x72ad0f47, 0x7c463cec }, + { 0x6f4e44e9, 0x310385e9, 0x17bd47d1, 0x3e06f1e2, 0xa3c53f42, 0xe8c5ffce, 0xc0915716, 0xe703ea48 }, + { 0xc8e9d3e8, 0x1792eb84, 0xf8738a9d, 0x5083d677, 0xa87b30ee, 0x65206897, 0x96c4ba90, 0xf7367023 }, + { 0x062845ea, 0x182a3f5f, 0x4700f73a, 0x1aee7fb8, 0x4186ab9b, 0x942b1004, 0xfe7e50e5, 0x49009e1f }, + { 0xfc0edb54, 0xb83b9629, 0x065a4e14, 0x8404f2e0, 0xfe17335c, 0xe3be3e9e, 0x99b97830, 0xa65573bb }, + { 0x01c71188, 0xeb92c6e8, 0x92080971, 0xa067cbc8, 0x11515ae3, 0xf27a2a4b, 0x0e596ec5, 0x74f3a154 } + }, { + { 0x023dc0d3, 0x6c525ee7, 0x2366e438, 0x6288d6e8, 0xb6db7004, 0x86c55b06, 0x87be2921, 0xa020e924 }, + { 0x1b75b092, 0x801cce95, 0x6239b657, 0xfbe5ca56, 0xd2170dd4, 0x1044cc30, 0xae853426, 0x15cd4efe }, + { 0xdac66376, 0xda15eda2, 0x0006896f, 0x676dcd6f, 0xc5da044e, 0xa06ba4f9, 0xc386d189, 0x9bf6cb3d }, + { 0x74baef5c, 0x00483f33, 0xa0af1221, 0x023ad520, 0x926f98ce, 0x86ccc136, 0x97594487, 0xe16d04a0 }, + { 0xc5e45462, 0xafa2ed28, 0x62dc0741, 0xf6674ab3, 0x284d77ba, 0x63df1d80, 0x0cf56abe, 0x09c095b0 }, + { 0x1365da70, 0x47e9a1bb, 0x75416e08, 0x6cdba8c8, 0x57d96832, 0xd8dc4e82, 0xc8cba9b3, 0x9807f9f0 }, + { 0x57b922c9, 0x5ba15559, 0x8ca5ead3, 0x048d1837, 0x661f403d, 0xc3838fff, 0xa6b13fdf, 0x30a36976 } + }, { + { 0x6f343137, 0xc71f6cb6, 0x199ef59c, 0xa712741d, 0x9524f6d7, 0x8d1555e6, 0x8c9f53ff, 0x276d1f2f }, + { 0xa7f1e394, 0x5e521804, 0x563610c7, 0x7c024762, 0x41a42037, 0xaacc31a9, 0xd4649e65, 0x956ae82f }, + { 0xde2b0553, 0xd301a8b2, 0x8910a586, 0x07b70f75, 0x9ea074d8, 0x2ac99ebf, 0x3500a973, 0x70061496 }, + { 0xbdf31fe7, 0x1dfc3c82, 0x38ff32b8, 0xa7b9cc7b, 0xa04abd8e, 0xf3adb0ff, 0x9e1dd522, 0xd892d61d }, + { 0xd212402e, 0xeca19b28, 0xdc57b6fe, 0xf38a9c79, 0xb5e8cda0, 0xf6345667, 0x597a1b97, 0xc1c3a56e }, + { 0x824385d8, 0x22b0212a, 0x9899bc5a, 0x6ed1c299, 0x918d2a02, 0x9a289373, 0x13aaaf90, 0x0968ff32 }, + { 0x5a9f7e49, 0x08d06a6b, 0xffd8665d, 0xb0d5eb0e, 0xd1163dcb, 0x78c81372, 0x8f015345, 0x8e24ff90 } + }, { + { 0xd825b02a, 0xa1c1a9a6, 0x2785f074, 0x6ee72c66, 0xf7a49f4c, 0x022916fb, 0x354c0c2d, 0xc1924d55 }, + { 0x82e9ff41, 0x113e9821, 0x4cf83df8, 0x6d611dce, 0x8fd78367, 0x553e22dc, 0x5ba302b4, 0xe8f78af5 }, + { 0xefb42468, 0x3e234cbb, 0x981eecfc, 0x71bdfa61, 0xb36943d7, 0x01f43387, 0x60ff5cdc, 0x352bc3b6 }, + { 0x66274b0b, 0x92030f39, 0x2386916e, 0x4670eff3, 0xe8fc5588, 0x5bcad593, 0xa20ecf35, 0x08a876de }, + { 0xb55b797a, 0xad4fcf1a, 0x4b0e291a, 0xb96c1313, 0x9c835c7c, 0x844765d9, 0x941e5f83, 0x0e183698 }, + { 0x4afdf51e, 0xae43348f, 0xaaa25912, 0xfa6d9e00, 0x6672c7da, 0x4964c1b6, 0xf2204e3c, 0x6c658967 }, + { 0xd4cdf1cd, 0xe3bea464, 0xd8796a72, 0x2e8d783d, 0x220e00ba, 0x43fea0bd, 0x2b779464, 0x525705f0 } + }, { + { 0xaf5b8804, 0xb9a2d2fa, 0xba9e2f01, 0x4a17e91d, 0xf1f74dbd, 0xfc44f3ee, 0x9c3c3657, 0x8501c1df }, + { 0xb27ec27f, 0x542c2b7f, 0xe187c5f6, 0xed95129b, 0x9b003bfc, 0x83fcb74d, 0x1a31262f, 0x11d2ba32 }, + { 0x55eec6b2, 0x44db580d, 0x28d35e79, 0x51ffd002, 0xd22b8b40, 0x736f34fb, 0x625996ee, 0xc00a1771 }, + { 0x28e1ecaf, 0x6e85a928, 0x9a8af450, 0x66215ac7, 0x5611494c, 0xd4d3d6b9, 0x0c50091d, 0x1569724c }, + { 0x0c6ceb1e, 0xff59b251, 0x64826d6f, 0x673b32c3, 0x4f570efa, 0x91793dab, 0x924d6d11, 0xbb83d65b }, + { 0xa92cb756, 0x14277b65, 0xb50f3296, 0x205a1431, 0x0d9d90ce, 0x11cfaeb9, 0x94b3273a, 0x1cc9bae7 }, + { 0xdec67f79, 0x2f8a8c5a, 0x9d1a5120, 0xf4c99b33, 0x396ac1ba, 0x766f0d02, 0x4ec810a0, 0xfe08aca1 } + }, { + { 0x0131b134, 0x15796ccb, 0xfc2e0ea2, 0x56f02b8c, 0x83ac831f, 0xa1ddef8e, 0xe7005095, 0x337b4e53 }, + { 0x45543891, 0xaa518b81, 0x1536899a, 0xe34f23cc, 0x108fe8ac, 0x11e67a04, 0xb324c31c, 0xceba6fc5 }, + { 0x48231dcd, 0xcb30908b, 0xb87d5cfc, 0x3393a816, 0xb95bc198, 0x43a21173, 0x79b091dd, 0xc0f861d1 }, + { 0x4046e619, 0xd009e0fe, 0x71348ebc, 0x91852d76, 0xae24c807, 0xb5114a2a, 0xea3ec5a4, 0xf3526498 }, + { 0x7a56bf44, 0x9ae8d236, 0x23853b91, 0x35bf10b7, 0x8144d3fd, 0xcf5f5539, 0x6bf4df17, 0x7fb436ff }, + { 0x6e05ac83, 0x6f758fb8, 0x19a7a888, 0x31074e59, 0x85716904, 0x1806aabc, 0x0a537aed, 0x44e55275 }, + { 0x05145291, 0xf0ceb958, 0x0206e3e6, 0x5fbf32d2, 0x1af252aa, 0x098a0fbd, 0x6e6f8300, 0x4a2a29e6 } + }, { + { 0x612be6a8, 0xe9aea7ea, 0xef3ff8fd, 0xa990e3d9, 0xf8415655, 0x4eab193c, 0x578ad9a0, 0x459dd7b9 }, + { 0x9cdc742b, 0x219812ec, 0x0052acf9, 0x725dae4a, 0xf1071874, 0xe15d87dc, 0x26a5366d, 0x047861b1 }, + { 0x33944b57, 0x4972efdd, 0xd826fce6, 0x0819711c, 0xe16670f8, 0xf380fe07, 0x355f7a03, 0x9107bb25 }, + { 0xa43b8097, 0x6c74f35a, 0x2e863685, 0xbad4f784, 0x9da535e8, 0xb92adf2b, 0xb869a73a, 0xb087d580 }, + { 0x7517802e, 0xafb74a90, 0x599c6696, 0xb38d060a, 0xf373d7e6, 0x966167dd, 0xcf3253fa, 0x6f99c5fd }, + { 0x1e46b7d7, 0x7eff0e55, 0xed683a89, 0xc71c9917, 0x48b3830f, 0xf0c79c1a, 0x7a8fa8b1, 0x218955ee }, + { 0x48aae412, 0x691b9818, 0x874fcb5c, 0x995a04fa, 0xb76abb4a, 0x5c309126, 0x69a6ccb6, 0x368a1ced } + }, { + { 0x408cb62c, 0x3b70922a, 0x7f264aac, 0x5c0df94d, 0x17969dd9, 0x0d88f627, 0x7e248f32, 0x95a4a489 }, + { 0x10e7ac8b, 0xaaa31b4f, 0xf2ff5fbc, 0x5b6ac8aa, 0x24e3080f, 0x28e9d8c4, 0xb148a773, 0xfa090c9d }, + { 0x4408a0c1, 0x7b759542, 0xee0535f8, 0x03692e42, 0xe04077b9, 0x3aa9f80c, 0x216f3ffd, 0xf8667e9a }, + { 0x6091af81, 0x26b4bade, 0x50b5a448, 0xbd257d5e, 0x96b6b6fb, 0x4d06387a, 0x859dc5db, 0x2550dd24 }, + { 0xb4083f98, 0xb1712124, 0x4ffa6bbe, 0xac4fe1fa, 0xe4ea2c22, 0x3b21ea99, 0xaa4b378f, 0xef780957 }, + { 0xfea65c32, 0x2630886b, 0x516a93c3, 0xa87b2079, 0x531884c9, 0xaa72533d, 0xa003b3f4, 0x7bb17437 }, + { 0x34032994, 0x4cef72a0, 0xc5158925, 0x638a0d1d, 0x8c037715, 0xc6be1b0b, 0x0ead0c61, 0xc9459550 } + }, { + { 0xffdf8f7e, 0xf5a20dab, 0x70cb0082, 0x4ffca11b, 0x58416505, 0xfc559602, 0x29e66eae, 0xf8ae5a5e }, + { 0x41ee1d29, 0xaaa43231, 0x2776fdee, 0x0c2dff3d, 0x612b8623, 0xebf527d7, 0x3cf0fca2, 0x47c6123b }, + { 0x06a75db6, 0x8261c1be, 0x7c591d8e, 0x47fac27c, 0x6c36484d, 0x90527c8f, 0x58c65a30, 0xa5e11279 }, + { 0xfc782a50, 0x60b8899b, 0xf9dbf259, 0x0bcc0a40, 0xa229bda1, 0x168a8855, 0xb5d87956, 0x61d6bb9d }, + { 0x7378236c, 0x865619ab, 0x8ca6923f, 0xebe429b6, 0x24ba5add, 0x39e49415, 0x124814b9, 0x7c8fd18c }, + { 0x3517965f, 0xf54f73dd, 0xcfdefd0a, 0x0c98c3a1, 0x8d36dc2a, 0xcdd00d1d, 0x3937c88d, 0x64529779 }, + { 0x464d8478, 0xbc935aa2, 0x26bd0fcc, 0xf30d7b12, 0xa31a5d33, 0x708eecbc, 0x0acb787e, 0xfc79571b } + }, { + { 0x11550d4e, 0xa4d0ccaf, 0xb896078d, 0xf01f8639, 0xfea676c7, 0x7352e8f3, 0x11ace0b3, 0xc7f937e0 }, + { 0xf264b4d3, 0x4214ae8c, 0x550cf3fa, 0x2b3c82e5, 0xe24f889a, 0xc795d879, 0x5dac9a62, 0xc7044d9b }, + { 0xd2108d16, 0x3c0ffeb2, 0x2042ef98, 0x0d9c0fa6, 0x2ab92f4a, 0xb8884755, 0x4cda4dca, 0x8fb003a1 }, + { 0x6f6a7527, 0x6e321481, 0x3f346e27, 0xa70a9d2d, 0x8ee9a6f8, 0x2790b3b7, 0xb424d205, 0x91e63115 }, + { 0x959639bf, 0xf23f1feb, 0xc1994d08, 0x30976c9d, 0x80861d2d, 0xe3ac17a6, 0x75b71833, 0x65e96015 }, + { 0xbbaef34b, 0x3244b505, 0xab6b79a1, 0x809ccbe5, 0x4e2e445c, 0x7eb74fce, 0x3aa41027, 0xab1a1c5c }, + { 0x2fea4ca5, 0x406aa1bf, 0xdaaf707e, 0xc34462ac, 0x4ccb6551, 0x961fcdf8, 0x973acb5c, 0x7c6692b1 } + }, { + { 0xddbefaca, 0xc7a81f45, 0x8bcc1241, 0xb55c925a, 0x20b696c8, 0xd7913c17, 0x78f2e0a3, 0x6c261c77 }, + { 0x3cc8f994, 0x2661bd75, 0xb10a1e3b, 0x8ba28cad, 0x48657169, 0xbbeb9d3e, 0x602a84a6, 0x4c96aa25 }, + { 0x692964ce, 0x216afb2b, 0xd18a5a66, 0xcf150236, 0x64c21fca, 0x0d5eecc1, 0x9e978005, 0xd33fd368 }, + { 0xeafb4b37, 0xe21a3766, 0xf11ab1ad, 0xc6064ae0, 0x94e270e0, 0x184088aa, 0x10d4497d, 0xde991adb }, + { 0xe0685dd4, 0x6d0de3e2, 0x7935ae7c, 0x73b9ff49, 0x81f42fcf, 0xc76a9928, 0x906fd865, 0x655dcb96 }, + { 0x59e43594, 0x70854bd2, 0x6aea3da6, 0xc20978d7, 0x2d6633a0, 0xa64f39d9, 0x6ff5782f, 0x4061fa9b }, + { 0x7306b6a1, 0xdc469610, 0xd4a5ab68, 0xa44ce836, 0xffe8b99e, 0xe18dbd67, 0x4deefdf6, 0x1dbf2916 } + }, { + { 0xbcd7b9f7, 0xaecb0569, 0x65e859ab, 0xbb1deaad, 0xef21dbd1, 0x6d0bd332, 0x915707d1, 0xe70e63e5 }, + { 0x961ffcd9, 0x1c391c9b, 0x81905c90, 0x0936283d, 0xe9dc5aa6, 0xfb3b7def, 0x56454ad4, 0x5c8bb15e }, + { 0xc03e6457, 0x16f9c3d2, 0xec96ed35, 0x60faf8f3, 0xf4514e87, 0xda3f4673, 0xd5be8d5d, 0xbb12df1b }, + { 0x12f736e8, 0x2187a39e, 0xa63feafe, 0x66bfdb1d, 0x3c468d50, 0xeae0d268, 0xacc10ee9, 0xf2718cd3 }, + { 0x659b476a, 0x10a498db, 0xa084c566, 0x15ec323b, 0x8e6de570, 0x660dc72f, 0x01814c7e, 0x93c79470 }, + { 0x087812d6, 0xd0dc9e9a, 0x0381bb07, 0x971946b2, 0x88c203a6, 0xa91dfc9a, 0x5a83a3d2, 0x96b736c6 }, + { 0xd0393e6b, 0x92e03ba4, 0xa9b367b6, 0xfb67d737, 0x00e4d2e3, 0xec1d8a37, 0x80fd078d, 0x94ebbabd } + }, { + { 0x7e29e692, 0x8b41a6d4, 0xde0b857f, 0x352e05e7, 0xd74b3544, 0x89a110e7, 0xf3a27efe, 0xf24598f5 }, + { 0xc79d4566, 0x7c582951, 0x8dd6043f, 0xd561a6b9, 0xd99ddf41, 0xd1e971db, 0xc0d536d4, 0x8ea54c01 }, + { 0x39b19219, 0xaee37d55, 0x4fcf989e, 0x23baba4f, 0x49a91d6d, 0x1a35612e, 0x3e7607dd, 0x0ba6e33e }, + { 0x5a33d17b, 0xdded811c, 0x9dd4bdc5, 0x6774c7f8, 0xbd3f291b, 0xa0009061, 0x11e43fcf, 0xdd17292d }, + { 0x8acb55a3, 0x1d66e5c4, 0xbf641c0f, 0x18c07e1b, 0x76c41aa1, 0x80aefccd, 0xff8a45fb, 0xec91341d }, + { 0xe0d8ca1e, 0xe1b5c0b6, 0x42cbb935, 0x93cabccc, 0x1db92c60, 0x251e3f97, 0x18707d3c, 0x15169cdc }, + { 0xebe45526, 0x757adc21, 0xa048e0e0, 0x00be0c92, 0x07b67816, 0x2412eb5f, 0xb7227c6a, 0xaf986aa4 } + }, { + { 0x3567e5e7, 0xedba1c4c, 0xc1ee61b3, 0xf6168ff0, 0x548ac0c6, 0x5df95013, 0x70486381, 0x0f747265 }, + { 0xde2b9737, 0xbb011054, 0xf3ee8541, 0x2b3fd083, 0xfc3a47f7, 0xd634eb57, 0x66ab37f5, 0x234f914e }, + { 0x10090602, 0xf5070df0, 0xdca526b5, 0x3dc0c2a0, 0xe76c9a3e, 0x7216cef1, 0xc8e9c887, 0xf500c617 }, + { 0xd3084a95, 0xb4f44838, 0x16ccdd29, 0x9e0b70be, 0x721e544a, 0xed3e26df, 0xc3439ab4, 0x1320c54b }, + { 0xc1075933, 0xf0b15ef9, 0x4872b3c1, 0x47b9d658, 0xc162ca79, 0x5a42a927, 0xa37688e7, 0x0b6b44c7 }, + { 0x9d604460, 0x45808dad, 0x5f880d48, 0x5c1ecb45, 0x4b097d4b, 0xc95aaba1, 0xbe7af65f, 0xfa3eda1f }, + { 0xc58306b1, 0x6753afb9, 0xb4937fce, 0x8f82b06e, 0xdf8ff4d4, 0x124c3399, 0x8fac1caa, 0x6e9ab004 } + }, { + { 0x8e3a58b3, 0x9745bf71, 0x2a0ea73c, 0xad04b1bc, 0xd8338c7d, 0x0cb4b5c5, 0x8cc70a60, 0xaec8922c }, + { 0xab22f041, 0x8747644e, 0x08e1e2d9, 0x201ad2b6, 0xfccc9550, 0xb4f599b6, 0x39400a06, 0x10ec0d9d }, + { 0x93ffda08, 0xa3c65492, 0xdb32ed20, 0x5e5044da, 0xc853b537, 0x4d0962c3, 0x3e818e62, 0x6d9ef9a4 }, + { 0xdf34b2d6, 0xb52a6261, 0x2c02d7c9, 0xc80dfe97, 0xbe920358, 0xb3b54fe0, 0x928dd474, 0x9ac6c076 }, + { 0x4f79e512, 0x11776041, 0xbd99a47d, 0xdceac08d, 0xec0accf1, 0x823ef812, 0x6ead6214, 0x9e9e456d }, + { 0xf93d4427, 0x35c065c7, 0xb0568cc4, 0x89438bd0, 0x483d9e29, 0xed66d3b2, 0x4cd1f22e, 0x5ce685de }, + { 0x70afbe9b, 0xdcee3d63, 0xef23056d, 0xab95553c, 0x7241a4d7, 0xd750aa8e, 0x2db4e162, 0x32c7020e } + }, { + { 0xb6b1b931, 0x1dbeeb55, 0x57a55d88, 0x683f65b7, 0x6b74e649, 0x9b0d0ce5, 0x857acdce, 0x09dce13f }, + { 0x8471d8eb, 0x21e20325, 0x8343904b, 0x6bb37b48, 0x574673bb, 0x5bbd2cbc, 0xb8d3f709, 0x9e1ee313 }, + { 0x0e9dc340, 0x78d53ca0, 0x35e7af7a, 0xc9ee9192, 0xced09087, 0xf514ba34, 0x0bd092c0, 0x0ab8a37d }, + { 0x474466b0, 0x3f129bff, 0xc9ded430, 0x0bd038d9, 0xaeebf28f, 0x38eedcd6, 0xa283275a, 0x1b0eb1f1 }, + { 0x9e29c456, 0x09a38f37, 0x2479b134, 0x33c7b328, 0xfe878206, 0x51343036, 0xd5072add, 0xc772a79d }, + { 0xb4af6277, 0xf237e01b, 0x570a70c3, 0x96f28e25, 0xfb7a6283, 0xf2636f78, 0x42d809b9, 0x635e94a6 }, + { 0x193c6c51, 0xe4b6373c, 0xcd568c2a, 0x6daef406, 0x788b6b4c, 0x24eb8436, 0xd37b5e3a, 0xf9af2d97 } + }, { + { 0xf0e7a919, 0x682262bc, 0x8250498f, 0x328f0e3c, 0xcf0adbaa, 0x5898dd65, 0x3e9417f7, 0xf29f140e }, + { 0xa6ef5bd9, 0x8349746c, 0x4cbf85f5, 0xa7e87dc6, 0x902aea74, 0x443891df, 0xee3c434c, 0xec095e47 }, + { 0x51cc666c, 0x7c75d10d, 0xd243b46f, 0xd8de941c, 0x61ca586a, 0x00aaa203, 0xf3ec602b, 0xa9067d07 }, + { 0x1aaec03a, 0x8db8a17e, 0x40535325, 0xaca2ef8b, 0xdbbb2199, 0x4032f003, 0x94dfc342, 0xe02f2b75 }, + { 0x8c4e3f5a, 0xa3e555f5, 0xdad1c8d1, 0xa8d51378, 0x86d4e833, 0x7dd44060, 0x1b340aad, 0x3173876b }, + { 0xe183dc08, 0xa6a7af82, 0xc24ff5ba, 0x74ccea39, 0x33907bde, 0x5027c815, 0xf1ea964a, 0x6e580a0e }, + { 0x3ebfa215, 0x5154cccc, 0x3859eaf5, 0xb616c4d1, 0x2536af1c, 0x5c801c9a, 0x7125da28, 0xaba781e4 } + }, { + { 0xb0aa611b, 0xf329813e, 0x09974675, 0xefb0648c, 0x86ad19fe, 0x18bb7a31, 0xabae10e5, 0x157db901 }, + { 0x945c8d18, 0x866b5833, 0xcec48495, 0x0637bc92, 0x3d144da6, 0xd20aa2fb, 0xcd739471, 0xc679534d }, + { 0x6914a513, 0x1e3be68e, 0x801023c4, 0xa18a0432, 0xbcb8ef1d, 0x287b8c4c, 0xb5c557b4, 0x227aafd0 }, + { 0x8134290a, 0xb43672bb, 0x3219e038, 0x3b3586be, 0xd4192484, 0x057863d5, 0x5af03283, 0xfa43a7ab }, + { 0xdd1d983d, 0x00a9ee12, 0xb87294ae, 0x788f17f7, 0x5d09a7e0, 0x203f7024, 0x9eb9516e, 0x0ad3e70e }, + { 0x61c95583, 0x0157aeeb, 0x8a560ae2, 0xbcc0e328, 0xd6b15e89, 0xf1fb72ba, 0x3d7a86bd, 0xefe07ff5 }, + { 0xae8b1ad2, 0xe8b0e341, 0x75c128e7, 0x4b855983, 0x2823f704, 0x7308179c, 0x924b47b2, 0x5bc4534d } + }, { + { 0x51ef7276, 0x1b386f50, 0x640057b8, 0xfad54d72, 0x97ffbb98, 0x152cc738, 0x758e39ac, 0xa7009aef }, + { 0xf8bf8307, 0x0e37dc8c, 0xaec3f156, 0x0995c10b, 0xaea1f4c6, 0xa3669a12, 0xeff47fdd, 0x28c58bf5 }, + { 0x2d27cb3d, 0x2e315c21, 0x16fb415f, 0xc194f707, 0xb5ad8069, 0xa54beef4, 0x4cb7fc78, 0x21546e26 }, + { 0x0cab6d99, 0xdd54447e, 0x10e0f16a, 0x2bf19811, 0x05fe702f, 0x595c5bf1, 0xaa99303c, 0x63b1a01e }, + { 0xe2eab432, 0xed5f4d99, 0x2368bbc1, 0x076a4211, 0xe77a3fcb, 0xc10f8e8d, 0x22acaca9, 0xd98d2316 }, + { 0xb30f302c, 0x553f357d, 0xe50a2533, 0x611bd13d, 0x08c4f88b, 0xfa7a9454, 0x26f24bbe, 0xcf1a9c58 }, + { 0xd9d6e2f3, 0x65329309, 0x24ab8dca, 0x5666ec08, 0x5b4c9c7a, 0xdc02919a, 0x47984f20, 0x5d10c10c } + }, { + { 0x4172dfcb, 0x48c4ee08, 0xe9ed6a57, 0x28f46959, 0xc1aa0ca5, 0x589b1201, 0x60e69889, 0xfb8be6d4 }, + { 0x0ffcbd23, 0x5302612d, 0xf5c6667b, 0xddf2ff98, 0x5cfa10f4, 0x705ff345, 0xc5d3be38, 0xc594850e }, + { 0x4e02c9ea, 0x7d78f9fc, 0x62431ae9, 0x409b735e, 0xab4ea6cf, 0x044946e3, 0x51496c16, 0x6b7f7546 }, + { 0x0cc243c7, 0x77231247, 0xc5f880dd, 0x536a556d, 0x6abe6f11, 0x3b0d7ee8, 0xb1e27e25, 0xa82ecefb }, + { 0xc4de7eef, 0x42608a74, 0x961a25bf, 0xb92b4d87, 0x5df7f8fa, 0x895c6218, 0x7b7227e9, 0xe6cca312 }, + { 0x1c8998ca, 0xea030927, 0x2997ffb8, 0x479279b1, 0x9d1c52d7, 0x06558fdb, 0x1325c1b9, 0xb4cef32c }, + { 0x885f479b, 0xc3cf6268, 0x1a77920d, 0xbd734982, 0xfa230527, 0xdf1c5465, 0x5ea6fa44, 0x3d963df2 } + }, { + { 0x15124d6f, 0x5bee8048, 0x5e7eeda3, 0x75385c1e, 0x4645a6b1, 0xd173672b, 0x8dd8f848, 0x947388ea }, + { 0x28ff84bd, 0x5d22f09e, 0x3240ffc2, 0x07097e29, 0xcb467d4d, 0x3a59c380, 0x4f2b4ead, 0x06c8331e }, + { 0x2c20ca5e, 0xa382ed3f, 0x63ed7858, 0xe637b728, 0x3e4269fa, 0xe0525ff4, 0x2ef2fc4d, 0xaa7c5b01 }, + { 0x72214e0c, 0xdaeb4dc4, 0xa3716f9f, 0x8478f832, 0xbd92995a, 0x8dcc007e, 0x89a24795, 0xdeee784f }, + { 0x501f8504, 0x790f4562, 0x7f646f8b, 0x3d38fefc, 0x90ab3450, 0x1884861f, 0xba10e16a, 0xf2c30349 }, + { 0xcec4f4b4, 0x6b923857, 0x12b72f4c, 0x2c3a4615, 0xc8886df8, 0xbfa753e7, 0x12166500, 0xcb0e06b8 }, + { 0x75a0cd60, 0x509452c2, 0x5009d6e0, 0xd08342a5, 0x57b6a30d, 0xf5d729fd, 0x037eb8f2, 0x7f8b37b5 } + }, { + { 0x603c8c13, 0x138a1e54, 0x645bb6d1, 0x8edfd612, 0x6555876f, 0xbe3ded27, 0x9463b0f7, 0xc5b43a0c }, + { 0x12fa6f80, 0xf77f6d18, 0xa5c05bcb, 0x49c1838a, 0x64183c24, 0xfbe20136, 0x62684de6, 0xa73208d4 }, + { 0x2dc70f79, 0x497fa780, 0xd9c1c81e, 0x7001f268, 0x75e76073, 0xa6ca0f6d, 0xb31cc76c, 0x152f9314 }, + { 0xaf35c9cf, 0x2fa27244, 0x52515468, 0x5b81ee48, 0x8ee84d9f, 0x7874f56c, 0x399f8e67, 0x0832a2db }, + { 0x1d4d84c8, 0xdd7051fc, 0xd1acabcd, 0xac8627ba, 0xe7728ae5, 0x87d3f1ac, 0x1930599a, 0x8b40e1f6 }, + { 0x8a3e0607, 0xdc86f37d, 0xd23d06f2, 0xab6ddcf0, 0x5e59320b, 0x56f7f0e6, 0x4826df9b, 0x1147f821 }, + { 0x9a2a5095, 0x37f84839, 0x8cb8c19c, 0xc723fca5, 0xb887fbd6, 0x648752be, 0x77c89802, 0x3bdf2bd4 } + }, { + { 0xe95fe2eb, 0xa5d641ef, 0xe1d5a4cb, 0xfcb6daa2, 0x93979a0d, 0xb4bb6da9, 0x127a76e8, 0x8df8945b }, + { 0xc1ea6447, 0xcf97c564, 0xb0f80528, 0x880e15d5, 0x37af7e10, 0x1e681462, 0xfbdf3db6, 0x587956f9 }, + { 0xef96a767, 0xde2d5fb3, 0xf1234cf0, 0x83ac6d2f, 0x14accc8c, 0xfe417ada, 0xe23c40e5, 0x7c167928 }, + { 0x4c207eb1, 0x1a2dfe96, 0xb68bfd29, 0x291f61bc, 0x6de72c84, 0x11f7da6a, 0x01e1eb6d, 0xc5e3816d }, + { 0x46073f01, 0xfa43db13, 0x83f36681, 0xedd9b5f0, 0x2ea57fb9, 0x517d52e1, 0x6a2daf24, 0x839a9057 }, + { 0x0152191d, 0x4740c750, 0x6ca4c9ca, 0x0204e7ce, 0x82231e7c, 0xdf4f5a1c, 0x6ba616c6, 0x7dfa2702 }, + { 0x846580db, 0xd8d0ed19, 0x56b83e33, 0x11e3a461, 0xbab0919c, 0x9b6c6b68, 0xd8a9b891, 0x9c306d9b } + }, { + { 0x739ba36e, 0x7a618ef1, 0x71076864, 0x7ffcb45e, 0xd5691757, 0xf069a107, 0x4be359e8, 0x3eaf0c62 }, + { 0x4c0597b9, 0xdd7424fa, 0x23087c7e, 0x2227a301, 0x7ddd34c6, 0x8e4d0d68, 0x4ebc55d3, 0xd9b5e6ae }, + { 0xcfb176fe, 0xd0454851, 0x403b9da3, 0xa80736d7, 0xd253d30e, 0x6bbb21a0, 0x81e58b09, 0xce51d245 }, + { 0x2f3d0bbb, 0xdb5540db, 0x7d589168, 0x84323951, 0xf180b0f1, 0xff44bfc4, 0x8fcaa903, 0x252f8705 }, + { 0xd628ea85, 0x701207a8, 0xf31d41fa, 0xa8f09523, 0x8a299618, 0x88e1f3c7, 0xc5427df9, 0x5aa1d861 }, + { 0x30e1fc2b, 0x40f302be, 0xa63b3b01, 0x2be3ac29, 0x056645e7, 0x7acc9bbd, 0xd230ce9a, 0x7d252c2f }, + { 0xd600bd13, 0x086c07c9, 0x029cec65, 0x8d599f6c, 0x4d25e448, 0x4e9bade3, 0x0c33da84, 0xbe9e056a } + }, { + { 0xec2c110e, 0xbe7c5905, 0x3d6b6ad4, 0xbf5ef109, 0x940723c6, 0xd0bc7636, 0xe45a396a, 0x6b3d8de2 }, + { 0xb7797ba6, 0x2a61063e, 0x6b5b2af8, 0x9705e437, 0xae799118, 0x80b9e5ac, 0xa524ea11, 0xd25993d7 }, + { 0x952418a0, 0xe52ea7fb, 0x5b851a60, 0x6a3d38f5, 0x7d76b217, 0x87d90655, 0x9351da3d, 0x8fea872b }, + { 0xa284f90b, 0xfed726ec, 0xcafc31d0, 0x8752f8fc, 0x8aecc6f9, 0xd71c0300, 0xdb700ebb, 0x2d234e4e }, + { 0x1255759c, 0x437e2721, 0x384eff34, 0xb49f1b47, 0x24b7d68c, 0x5677b98b, 0xc515b120, 0xd6d9fd20 }, + { 0xae16e75b, 0x8673ec67, 0xa1200f9b, 0xea6c1b43, 0xeea2218b, 0x3cd180c3, 0x761e1363, 0x1ba1263c }, + { 0x1fbac7da, 0x75d3c884, 0xcb97f364, 0x35e26bfc, 0xc958ac3c, 0x8209fbc8, 0x53ae71e1, 0x370d7647 } + }, { + { 0x44e5978a, 0x3c1c94db, 0x5812bb5f, 0x2792ab44, 0x0d072532, 0x3b6d3cbe, 0xab461bd3, 0x9cf81039 }, + { 0xb1b260c7, 0x9fd1ff0f, 0xce0a9c02, 0xd4e51cb3, 0xbb1283d8, 0x57376e34, 0x8c71591d, 0x055e92aa }, + { 0xe6bd5fd5, 0xfcc32cb1, 0xd7981038, 0xd98280fb, 0xece72c01, 0xde205008, 0x3995ad35, 0xbac90603 }, + { 0xfc5a9baa, 0xb00eee66, 0xab77bb87, 0xf777e3b6, 0xa3cb2f72, 0x05fb033a, 0x55d2cc9c, 0xf4bdae1f }, + { 0xd86e998d, 0x84e2624a, 0x8d1ef040, 0x19723c11, 0xec28489e, 0x2eaff7d2, 0xe3590133, 0x8a88d5a9 }, + { 0x832d5f4d, 0xd9489ab0, 0xa6c2601e, 0x6142906f, 0x10fad62b, 0xf6e2ed88, 0x77e39a72, 0xabd76faa }, + { 0x889c76e3, 0x0536b496, 0xbbb356e8, 0xe4db3548, 0x5c3fd0fa, 0x5b737f0c, 0x40931679, 0x6309963f } + }, { + { 0x40ee3a4a, 0x65909d90, 0x5925ec41, 0xe417e4c2, 0x6aa21fc9, 0x225a98f8, 0x53731c19, 0x2a85fbb4 }, + { 0x675dbced, 0x74d40ed6, 0xf6bb4283, 0x6ca6edf2, 0xab30d2f2, 0x11337c7b, 0x555c0f69, 0x670be54d }, + { 0x34d48b9f, 0x0a2af5ec, 0x71dfde84, 0x9a90919a, 0xaad1d2d1, 0x9a2d9fef, 0xb5ecf242, 0x7d065fab }, + { 0xa204eb7d, 0xb8d431d9, 0x782f3120, 0xdc5c6fcc, 0x81952fe9, 0x94e0e2a8, 0xe16b4870, 0x4590fe0b }, + { 0xcee0f906, 0x2d2e89e2, 0x5e52b5f9, 0x6bbdde65, 0xb7aff920, 0xdf304d13, 0x9657d288, 0x3829da86 }, + { 0xa2112a51, 0xcdbe59af, 0xa319b39c, 0x60b0f0f8, 0xf52da966, 0x5f1426b2, 0xd99020d5, 0x76f4ddf0 }, + { 0x85d5a9a3, 0x173e2a26, 0x6877031c, 0xf03affcb, 0x7a906fcb, 0xa24c9477, 0xd2b80f61, 0x5638c07d } + }, { + { 0x0e8f35a3, 0x4b06e823, 0xd47ed3b7, 0xf5509c22, 0x334cf6ec, 0x47d90946, 0x8ed63e06, 0x38f2c469 }, + { 0x1ee1ff9f, 0x469ee972, 0xe0ad7063, 0x50189047, 0x854ba00a, 0x857c9cbc, 0xbb161a5f, 0xb59ef60a }, + { 0x2cd66ff6, 0xb26af70b, 0xd50b921d, 0x2e817dec, 0xf121337a, 0xe2505355, 0x428634c7, 0x6ae831e1 }, + { 0x2619396d, 0xc2a33b43, 0xb7a69b41, 0x33911e3e, 0xea449720, 0xbf8e9980, 0xf05cc544, 0x3aa5efec }, + { 0x102bfe77, 0x62d7b4df, 0x8404e57b, 0x1e3545b3, 0x2f8ee644, 0xf2f4207c, 0x099c8785, 0xa228d753 }, + { 0xf6616f86, 0x69fc2f9c, 0x9a1782d7, 0xdb2f5406, 0x487d8aa1, 0x6ddae044, 0x6c90fed9, 0x1d380818 }, + { 0x56e70139, 0x2e6b471d, 0x76cb34b2, 0x7e9f9e9a, 0x811e573e, 0xaaf6ae4b, 0x82ca972c, 0xf5bea0cf } + }, { + { 0xa5dd88d7, 0x8dee56e6, 0xbb58ec74, 0x089b7971, 0x7fd5e416, 0x21542b2e, 0xdc673df2, 0x4029f024 }, + { 0x3be7e0f7, 0x960c1440, 0xeb62e51b, 0xac4afc53, 0x240d6a0d, 0xd0657374, 0xb6689044, 0x5c9aae75 }, + { 0x8326ca3f, 0xe625d457, 0xf15b1126, 0xcfa38cf8, 0xc2406d10, 0x5a921204, 0x776a8a3b, 0x878e5e34 }, + { 0x6a12d797, 0x9e0dfa96, 0xfe5b2bc2, 0xed8fe49e, 0x020cab8d, 0x5c17c09c, 0x7aaf3675, 0xcb32efd2 }, + { 0xe8a325c5, 0xdea7c0b6, 0xe6dd55ef, 0xa8b99be5, 0x129cfc09, 0x6b763ca0, 0xa830552b, 0x569b464d }, + { 0xc96c9651, 0x1f19b94c, 0x660758ab, 0x9508816e, 0xa19d2eed, 0xf1ae2c78, 0x8bc5fed5, 0x00fd09d7 }, + { 0x22701aef, 0x57666716, 0x08421b2d, 0xcdcd5760, 0x543206f3, 0x6097f88e, 0x693b42f9, 0xdfc5085e } + }, { + { 0xc2664a19, 0x620331d3, 0x48889f76, 0xa44e061a, 0x282678ed, 0x36f0288b, 0x3763e871, 0x3e596769 }, + { 0x2498cad7, 0x50a838ca, 0xe791ab2d, 0x0754f6f2, 0x5cdca55d, 0xc9bafd41, 0x24afdc8d, 0x23665d35 }, + { 0x26894e5e, 0xbe4c1593, 0xb6d29b4a, 0x5fa3f8ca, 0x8d2aac65, 0xd2bc3e96, 0x00fe77fb, 0xcb198ce9 }, + { 0x7331d5e0, 0x768df63e, 0x82f1722e, 0x1b985f9c, 0xefa77f96, 0x1bb90013, 0x9e08f1ee, 0x7fca2a70 }, + { 0xed96ed08, 0xaa96fe7a, 0x5f879c42, 0x0c196850, 0xca6bddce, 0x86962640, 0xb008b923, 0x0c685470 }, + { 0xc8ec4adf, 0x6dfd64de, 0x24d3255f, 0xc3e21106, 0x25c129f9, 0xa50cc5ac, 0x4436f72d, 0xf4e12400 }, + { 0xbbbf713e, 0xfcb809b9, 0xb1c8191d, 0x412abbae, 0x2bd280f7, 0x72ac974e, 0x7ed0cf44, 0x07877eb5 } + }, { + { 0x65aafe11, 0x1fa428b7, 0x22341c0b, 0xa2b636fa, 0x0660cd16, 0x26385884, 0x18560714, 0x8a078be6 }, + { 0xf37b1f40, 0x518efb3f, 0x3cea578c, 0x0996b9fd, 0x534ed631, 0xd1d649fb, 0x2ce5334f, 0x1bfb56e4 }, + { 0x31ed147c, 0xf0045d66, 0x79601217, 0x0c961d24, 0x890b6028, 0x316d5b08, 0x0a4dd963, 0x74293c6c }, + { 0x084cb1eb, 0x9346da73, 0x213d7cdc, 0x033beadc, 0x48427ebe, 0xf45f1a1e, 0x22a46790, 0x284de933 }, + { 0x241ca2c6, 0xb8da323c, 0xaa49b8c1, 0x30fccc6a, 0x69d79b4e, 0x30bc1c59, 0x0c503411, 0xd1942fdd }, + { 0x06695ca3, 0xb25c2fab, 0x6b3ca61f, 0xf047e54e, 0x51dec03b, 0xdfd29b84, 0x4e975532, 0x08361d04 }, + { 0xcba0a713, 0xf0232fc3, 0x4b2eeee9, 0x66ee4b7e, 0xb78b0036, 0xa32b7db3, 0xe2f30b39, 0xd4dec14c } + }, { + { 0xd36a7ab2, 0x67f4ed43, 0xc817db01, 0x2f28e486, 0x5c05b744, 0x3d1f43f1, 0x3d9e7bbb, 0x8f180f0e }, + { 0x3c2b5219, 0xb5c4f016, 0x3ecfadd1, 0xd5199480, 0x2ea1b120, 0xfe00a929, 0x725cb579, 0x10776088 }, + { 0x73ca411a, 0x2d52dc92, 0x1f8468ac, 0x49f9e29c, 0x4ae29ea6, 0x88242e06, 0xe735e8b3, 0x214bf098 }, + { 0x6dea30de, 0x81bfb45c, 0x0066cd3c, 0x2ef9f054, 0x661e01c0, 0x42f761ad, 0x57336603, 0x992d508b }, + { 0x28fe1b7a, 0x7ef83cdc, 0xf6cd53ec, 0x5f433d1d, 0xa6f298b2, 0x82c6fd51, 0xae40ca01, 0xa3289f64 }, + { 0x1ed7f9e2, 0xb34f93fa, 0x35c9d484, 0x02210a89, 0x8ffb4860, 0x1f3bad52, 0x4a04e4e4, 0x7f240d8b }, + { 0xb167e24b, 0x2b7b93fe, 0x90187e34, 0xa7fff549, 0x04632894, 0xafcabcfa, 0x560ad9ab, 0xdaf1e573 } + }, { + { 0xd2d02250, 0x1cfdb459, 0xa7be1444, 0x4517d059, 0x2a4924d3, 0xf987d56a, 0x3f0396a3, 0xe8a2a6a6 }, + { 0xac4c610b, 0xd10dc62d, 0x7171da3d, 0x266f2b5f, 0xaf934d11, 0xc07ee64d, 0xcd1f0757, 0x141f4bf0 }, + { 0x7ecb87a7, 0xdb0d272f, 0x818ace78, 0x59398fa7, 0x25c3d879, 0xd3df1c98, 0x63549da0, 0x74ec65f7 }, + { 0xaac37051, 0x948a92fb, 0x896fbb6c, 0x0444eccc, 0x369ff36d, 0xc5b38cab, 0xe5dbda92, 0x9afff36c }, + { 0x464aa944, 0x373ce36c, 0xb4ff97f0, 0x238f6df3, 0x84aa4167, 0x2aeb497f, 0x4117d17c, 0x60e545ce }, + { 0x6f440a4d, 0xf770a96c, 0xeb9230c5, 0xed4ed9b5, 0xcfb56dfa, 0x81d07cef, 0xb696436d, 0x7f99e9c2 }, + { 0xf45c6592, 0x274ad3be, 0x3a91c2df, 0x6dc9d9c5, 0xd3411a03, 0x027282e1, 0x7675402f, 0xe1987a93 } + }, { + { 0x6d8fa21f, 0x170d86f4, 0x74a8d1e5, 0x6097209e, 0x3aaaad94, 0x594fc661, 0x6174d88d, 0x9f14f1a1 }, + { 0xc3c4af2f, 0xd8d7dd7b, 0x3c80cbde, 0x1c5aeba1, 0xe4edbeb8, 0x57ecf240, 0xb503fa1c, 0xda69c2f6 }, + { 0xf962d73b, 0xa5f276ff, 0x1d88db47, 0x3f7801a3, 0xca4861a0, 0xd116075e, 0x457c2d1b, 0xb6e249c5 }, + { 0x8b44add4, 0x9f3d7bd7, 0xdd635ed9, 0xc1101393, 0x31e8b807, 0x4642036b, 0xff891aba, 0xd792b1f0 }, + { 0xdebe280a, 0x77f5be94, 0xfc19b696, 0xdd0ffe97, 0xe7ce196d, 0x958acc04, 0xb47125dc, 0x2c9069cc }, + { 0x9a642368, 0x07ab659b, 0xeb99ec37, 0xddfb12fd, 0x54413d00, 0x0dbc2637, 0xcf98c7ba, 0xf2f07e46 }, + { 0x9d83d826, 0xda1be20c, 0xe2c21d53, 0x23569607, 0x8dfadb0d, 0x07eaed28, 0x6587c111, 0xac48baf1 } + }, { + { 0x81ae76d9, 0xfb3bfc8b, 0x88e191ba, 0xccf551af, 0x71ac053c, 0x0860809c, 0x9908dadf, 0x320797e6 }, + { 0x4a97c663, 0xd6e091cb, 0xb480faea, 0x1bacb1d0, 0x8e3046e0, 0xee6090b2, 0x085033a1, 0xc805d682 }, + { 0xfe98733e, 0xc4ff804a, 0x360a2923, 0x941ca38a, 0x3e4e6d8a, 0x3d70b663, 0x62c31590, 0xb317e43b }, + { 0x02274140, 0x6f02a50a, 0xeb3cd539, 0x07a9b5c9, 0xf80801c9, 0x4c2f5e39, 0x6c8a7eb2, 0xaa52caa9 }, + { 0x6ff7956e, 0x584d5993, 0x5cd3d0c4, 0x6c1bec6f, 0xdf3ad54a, 0x0634085d, 0xe6edad76, 0x0632db1d }, + { 0xc0daedce, 0x6fb5fc04, 0x76cd6752, 0xbd0ebd60, 0xaa171a2a, 0x87271e80, 0xb32cf4ff, 0xcfd5f1ea }, + { 0xf4eae25b, 0x1066c3e2, 0xc66efd8a, 0x5771607b, 0x4a1103e1, 0xc72b19d6, 0x85f6005d, 0x16270c65 } + }, { + { 0xadfd2c36, 0xd5d9a3e6, 0x1c5ded49, 0x794b0b23, 0x2b3dd153, 0x85212727, 0x7e8378ce, 0x62a6c24a }, + { 0x177a0f49, 0x990dfb5d, 0x2a7cbb31, 0x81dd7508, 0x0a2076ee, 0x5b23bfb5, 0x92f9cfd5, 0x09a5afc5 }, + { 0x1f7bc827, 0x079b2d8e, 0x5bdc1ac7, 0x673ec43e, 0x657f62d1, 0xf9468988, 0x02c231f0, 0x248a73fb }, + { 0xe32bbbf5, 0x9643176f, 0xaa007d1c, 0x1b31fe7b, 0xe6d7493c, 0x6f0544be, 0xc2a166eb, 0x96553372 }, + { 0x4cd86349, 0xf93cba6f, 0x80330f59, 0xdbd48996, 0xa04d3d1f, 0x814c4343, 0x6b4e6bd8, 0x130b061f }, + { 0x488259de, 0xca5f861d, 0xb1f3befa, 0x2fb3ecd1, 0xb75c2a80, 0x13e0054c, 0x68f7b652, 0x46705c85 }, + { 0xb56c48d8, 0x919f2305, 0x0597d41e, 0x283c8849, 0x97acf524, 0x600d53eb, 0xb58af268, 0xb6055293 } + }, { + { 0x93b58020, 0xc92b9cca, 0x68fc5c38, 0x65cfa237, 0x4f772567, 0x0bee599b, 0x67bc9a37, 0xcb552a96 }, + { 0xc792e9d9, 0x88e62b19, 0x4f905a50, 0x9a2f679a, 0xce1a0f3f, 0x1612b9e3, 0xf468578f, 0x49366e99 }, + { 0x42d446d0, 0xbc66a584, 0xc13f0b96, 0x9a459cb3, 0xd370cafe, 0x74cb1ed7, 0x33ff0f32, 0xdcd2b0ea }, + { 0xb0a3e5ce, 0x04b267c7, 0xfcb3b440, 0x17ac5acb, 0x1447fcd8, 0x49c52474, 0xd697d5ce, 0x7772aaa0 }, + { 0x50f93339, 0x11a673da, 0xe65ac850, 0x06e92d28, 0x29e97ce8, 0x2232b5f2, 0x94f7facc, 0xdf282447 }, + { 0x092291d4, 0x6a117ef7, 0x7a34fe0d, 0xf83e4c59, 0xd3330de6, 0x832f0923, 0xfaf4f12b, 0xf6faa6d4 }, + { 0xe81ae317, 0xc3b9d4c1, 0x9e64153f, 0x5c1d9fdd, 0x7d6e1738, 0x58feec0a, 0x0fa3da99, 0x3d715281 } + }, { + { 0xecdff5a7, 0x6676ea5b, 0x2c726a48, 0x407d9721, 0xa1599ebb, 0xb0db1f6f, 0xbcf2a1f6, 0x7d2660c9 }, + { 0x3c9ddc23, 0xb272fda3, 0xfa08d13c, 0x33bcb2c8, 0xcc9780b7, 0xe59248dc, 0xa53ef623, 0xcdb54aea }, + { 0x0a891eee, 0xedb5537a, 0x73fef228, 0x2f8afdf8, 0x21937ce5, 0x2bfa6881, 0x19e4cab7, 0x51111ed4 }, + { 0x8463613c, 0x1e08ff5b, 0x3619d2c5, 0x6c5bc71a, 0xa5617229, 0x7a84f5a0, 0xd70ec7a2, 0x096c3012 }, + { 0xa543ff79, 0x5d9dc2d6, 0xccbd15d2, 0x4ca14491, 0xf6712929, 0xa48759e0, 0x1a8d2f9b, 0xf75b299d }, + { 0xf741280d, 0x27b522e6, 0x8b9120d6, 0xde442033, 0x4a45f300, 0x1ab5c184, 0xb3529b73, 0x78ae6f43 }, + { 0xb7e6405d, 0x96e14656, 0xf6f5af96, 0x2484964b, 0x4cc985c1, 0x30c5c4f7, 0x9348dcb2, 0x451fd6b7 } + }, { + { 0x847b441f, 0x64e2d0af, 0xe296fad7, 0xf04c1410, 0xfbb26f59, 0x4c9b5399, 0x4b4549ab, 0xda5bc6eb }, + { 0xe0f825d1, 0x823baf0b, 0x5a5daa63, 0x70afe524, 0x8a3d5f5c, 0x6a579433, 0x19ec18c6, 0xcc022f88 }, + { 0x69549970, 0xc6a94cd6, 0x39c448c0, 0xccd1e4fa, 0xd3e51cbc, 0x2daa4ded, 0x641f113c, 0xefcb15ea }, + { 0xc769f45a, 0xe8b9f6b7, 0x6c171cf7, 0xe51aa6bb, 0xf6e8a7cf, 0x550d9ec8, 0x70b6fc14, 0x93d25399 }, + { 0x1b38ee7f, 0xc2ca1522, 0x2f02f4b4, 0x64e5e77e, 0xaf807936, 0xfd52a2b4, 0x0b945830, 0xf32ddabf }, + { 0xdcfb6efd, 0x9e827b96, 0xee3fdcff, 0x9927330b, 0x1ca19690, 0x05751282, 0xe894714f, 0xb753e4a4 }, + { 0xe4aa50a3, 0x0f2932d5, 0xf2ee250c, 0x7909c7e5, 0xf520966a, 0x8e6d6fd6, 0x362ff7aa, 0x4f1ffedf } + }, { + { 0xba4aa7fe, 0x23acf2fe, 0x750c8802, 0x479c8ae9, 0xefb8b28f, 0xb225382e, 0x4a822fc2, 0x9d19ba9e }, + { 0x25f06167, 0x4e836183, 0x16f9c419, 0x9c6a3ce2, 0x65d799ee, 0x2dcff663, 0x7435d69c, 0x62722923 }, + { 0xdb0d51b9, 0x4386ddbb, 0x13928624, 0x00b1c86a, 0xfbed33ef, 0xc89cb5f9, 0xf69a263b, 0x436e3d90 }, + { 0x2e9e445d, 0x6fddb749, 0xfe91e5f5, 0x2e0f2b83, 0xa1dc12de, 0x9ad1eab8, 0xfc46cca9, 0x9f1a0808 }, + { 0xa7b20d80, 0xcd7e5fb7, 0xa105a519, 0x329a760d, 0xb43e6e56, 0x890d9bdc, 0x0f62a234, 0x69ff9f73 }, + { 0xd2c9bf82, 0x11c2c774, 0x85e8c80e, 0x3dc16926, 0x0cf8524e, 0x3eba8078, 0x76e9f4ad, 0xc6c1e37d }, + { 0x650bba35, 0xb54cddf1, 0x7a6f3d6a, 0xc497117f, 0xd1668578, 0x67ae4fed, 0x3602d187, 0xd01f5242 } + }, { + { 0x1f57f29d, 0x029905f8, 0x0510bd9c, 0xce7df4c2, 0xb1a011cc, 0xb9e62d2e, 0xf104bb52, 0x9efc1af5 }, + { 0x931d0402, 0xe2ae2229, 0x95f50a92, 0x6dc64703, 0xb69f1789, 0xb480484b, 0x86d45dcf, 0xa232393e }, + { 0xe721772b, 0x6fef8146, 0xc5f37a01, 0x9771768a, 0x00755258, 0x081831ae, 0xdcf6cc8b, 0xf863dc4b }, + { 0xa3598f7d, 0x43c603ca, 0x9e9e35f5, 0xc0b63782, 0x407121dc, 0xa34cdee0, 0x8e53452c, 0x55701ddc }, + { 0x7a4ac01e, 0xcad82682, 0x44fbc5e6, 0x892e51ea, 0xf6d7dc96, 0xd822163f, 0xb29d330f, 0xd19358d7 }, + { 0x8e697e6b, 0x923d1214, 0x33b221de, 0x6e8af382, 0xb972588f, 0x0501ad9e, 0xeab37b31, 0xf03b3f88 }, + { 0x12c94189, 0x2ab9caa6, 0xcdf48f4d, 0xb95c7e34, 0xf87491db, 0x91363766, 0x96f22251, 0x84317056 } + }, { + { 0x7cbba542, 0x72173553, 0x0c0a7a35, 0xc6f4eb31, 0x82bb8315, 0x6f0b5c5d, 0xa04d85dd, 0x3af4cac8 }, + { 0x3cd5253d, 0xc62d4aa6, 0xd70751d7, 0x429b3bc6, 0x48fdc01f, 0xdf33a9a5, 0xbff66b75, 0xa7834e5f }, + { 0xff19bdb6, 0x0659727b, 0x94ed27e1, 0x6761817a, 0xa8dd8727, 0xd11d0798, 0x1e8b20e2, 0x502497bd }, + { 0x5ae9a48f, 0x29d1b18f, 0x1ebef3de, 0x51a8970b, 0xf1593ab9, 0x105438e4, 0xb8adac0b, 0xd6c4fee5 }, + { 0xc928984f, 0x46d28d26, 0xf341ada7, 0xb90279c7, 0x30fcb818, 0x92732b54, 0xbc4af11d, 0xb886260c }, + { 0x5223cd70, 0x6c8e9c6d, 0x0f074d15, 0x75b02f03, 0xf01e807b, 0xb90dc474, 0x2a4222fd, 0xf7e22b4e }, + { 0x13f4a74a, 0x81d4be59, 0x2841a6b6, 0x58db0cd2, 0xb51bda0a, 0x99fe44a1, 0x525627bc, 0x41383547 } + }, { + { 0x8b01f37e, 0x206300f8, 0xcac9203b, 0xca044f48, 0x9f55b65c, 0x8687785e, 0xcaa26e97, 0xd70e84f7 }, + { 0x4896d8e5, 0x08aed1be, 0xf44e6b99, 0xf3d85e8d, 0x1542f062, 0xfb686b8a, 0x66c5e1ac, 0x81de583e }, + { 0xcf9bb018, 0xa03a9704, 0x283f8f67, 0x44ae7b5a, 0x39cb8ae9, 0xba5de384, 0x513f7a33, 0x4d93b2bf }, + { 0xca9e5603, 0xeda4a5cc, 0xcb1400b7, 0xdf20ab93, 0x42afbb75, 0x59b5082d, 0xdcf8fdab, 0x626e4301 }, + { 0x4757c591, 0x20281a53, 0x5745e75f, 0x934ab502, 0x45702ab6, 0xea024398, 0xaa157702, 0x5b95d5b8 }, + { 0xfb4667d5, 0x688f1212, 0x8c13309e, 0xebe42bb8, 0x597635ee, 0x82dab4e4, 0x28452d5b, 0x8de3ec58 }, + { 0x37b5319d, 0xab7a3ae0, 0x285a102c, 0x4d4d6609, 0x00ceacb7, 0x859ef2ea, 0x7a9baf1e, 0xa7d1e1ec } + }, { + { 0x4262d31f, 0xc6bfde90, 0xe4879507, 0xad2c75c5, 0x330ef914, 0xdc0091cc, 0x8144ffd2, 0x593f522e }, + { 0xfeb34417, 0xe940b63a, 0x54b1ed6a, 0x7ca15220, 0x26d78116, 0x4304fd1c, 0xf8a028a8, 0x93fc1330 }, + { 0x1b9255ad, 0x50ce1933, 0x23801901, 0xb265abe8, 0x04f25868, 0x4b6825cd, 0x257a49a9, 0x2508d0a0 }, + { 0x0d554186, 0x4c3ea649, 0x26db83a6, 0x88950115, 0x6479edc4, 0xcc4090f8, 0x50c50406, 0xbbd7a030 }, + { 0xdbdc389c, 0x5eb8199f, 0xcf74a9a2, 0xcf3d8afe, 0x422dec42, 0x4bc45fc3, 0xcb777bfa, 0x70267343 }, + { 0x634e0b8f, 0xfe8050bc, 0x6d104e04, 0x6fb0865a, 0xce0fd7ff, 0x99b58711, 0xd297351d, 0x55a4b0be }, + { 0xcbc61aaa, 0xfccf89c0, 0x1dffca73, 0x7501e2a0, 0x9060e461, 0x212e84b5, 0x2961348b, 0x6075ff35 } + }, { + { 0x1971479e, 0xf1030877, 0x5e164bc5, 0x7b62d972, 0x7c79fc3b, 0xf7f0f07e, 0x8eff6729, 0x4922bb00 }, + { 0xf329ae40, 0xb38599d1, 0x3e9b0544, 0xd54e5643, 0x4091b5c5, 0x6a6dd0d1, 0x83d67840, 0xf82fb50c }, + { 0x1557f7cb, 0x6658ca2f, 0x35eacc2c, 0x47f3a958, 0xa498919d, 0x111cf62a, 0xc8035aae, 0xb7cad54a }, + { 0x4f02a442, 0xa40631dd, 0xefcba983, 0xdd7c3993, 0xee1226bb, 0x6294df26, 0x9529ae54, 0x7a634024 }, + { 0x5d9171eb, 0x05e32a3b, 0x68a836bd, 0x55b4b02b, 0x4c748bbe, 0x00f15133, 0x95266a50, 0xdf18fc19 }, + { 0xe066eda6, 0x9e04b489, 0x57b29169, 0x8ee40a42, 0x701813f3, 0x892d824b, 0xc6ece8ef, 0x6a46a762 }, + { 0x21e51d9b, 0x7fdce794, 0x053ed79f, 0x3884dfa5, 0x3dbb2f0b, 0x21897155, 0x54c823a2, 0xfda148e9 } + }, { + { 0x66f558b2, 0x2d6a44f1, 0x49017c74, 0x58e64303, 0xfbb8ccf8, 0x2755a4b7, 0x38483726, 0x7efb7c5d }, + { 0x6b9782d2, 0xf249694c, 0x7809f73a, 0x039be4f2, 0xa84b112d, 0x7ce459be, 0x20ceb8f6, 0x024162eb }, + { 0x67ea0190, 0x2fe4203b, 0x45ab91f8, 0xa0356d3c, 0x25c94692, 0xa9fac370, 0x593459da, 0xf41dde5e }, + { 0x457d0f83, 0xdc722eda, 0xfc2d6748, 0x17b1fa53, 0xb504bf7b, 0xb2ec3539, 0xcda65159, 0xac11254d }, + { 0x4f7b4295, 0x8682638d, 0xccd438f0, 0x864298f3, 0xccbf0c14, 0x1f0efcf2, 0x9cef2954, 0x6997b446 }, + { 0x736a3b6e, 0xd74b6514, 0xf891a59a, 0xc9c1c3df, 0xe6d5953f, 0xdbfd4970, 0x3cb2c56b, 0x4f29b2bf }, + { 0xf5449706, 0x0b298e81, 0xad160a61, 0x48e4a2a6, 0xb38e2277, 0xda0b2997, 0xcccda1fd, 0x663628fa } + }, { + { 0x88461e31, 0xcf3888a1, 0x099f1db2, 0x6811d294, 0x000b1c12, 0x18717a0c, 0xf4c08ad1, 0xd43dd554 }, + { 0x4566b0fb, 0x8de6f13d, 0xf378de4d, 0xc9ad32e2, 0x410608b7, 0x426a0852, 0x1ba93f7f, 0x1e3c19ec }, + { 0x86dada84, 0xd21501e4, 0xc085a31a, 0xae40a4e8, 0xb3aceee2, 0x4867f51c, 0xa54200d2, 0x07d31bfc }, + { 0x983dabeb, 0x7ac24dd1, 0x55aca5f3, 0x5cd65a17, 0x48cd118e, 0xb2f87539, 0x82161971, 0x39692cd8 }, + { 0x1d8b1be8, 0xefb57822, 0xf0df6722, 0x73d364b5, 0xa94828c2, 0x796774c7, 0x93fd74fc, 0xb357a489 }, + { 0x95505349, 0xc7a46174, 0x6fa24c02, 0x16efb6fe, 0x740008aa, 0xb6d9917b, 0x9da5de0c, 0x853c7241 }, + { 0x7f437191, 0xe15dc8a6, 0x5cd38fd9, 0xe92b2720, 0x5e9e5325, 0x951a7f9b, 0x0baf1cea, 0xa22710e1 } + }, { + { 0x7c260aa8, 0xd4c5a15e, 0xfd8cda34, 0x8c160df4, 0x17b599b8, 0x230d03d5, 0x1efea373, 0x91735454 }, + { 0xc1b07120, 0x37d0e5c0, 0x7b4efd27, 0x484b4d39, 0x2cf880a3, 0x508fb7dd, 0xaff7f179, 0x8c7b602d }, + { 0xfaf6f189, 0x908e9151, 0x8b9e20df, 0xd3bf4837, 0xb6491aa9, 0x7cf456a6, 0xecbcb69f, 0xfad87a22 }, + { 0x8d76fcad, 0x4485d0cd, 0x61f1e566, 0x4e3393d6, 0xa77e206b, 0x6a6aa22e, 0xefd341e6, 0x4156e065 }, + { 0x769cb145, 0x784032b3, 0x8c7d62e2, 0xa4812bbd, 0x34fcfb15, 0x5ae0fcc2, 0x71c975fc, 0x4d494fc9 }, + { 0x422a6172, 0xebb52112, 0xa30e16ba, 0xc33ed85f, 0x4ace3d27, 0x3c40b4a1, 0x4438d53e, 0x0f0f9d86 }, + { 0xaca70e84, 0x01e02a49, 0x639cb433, 0x7e065289, 0xd9c1557f, 0x52fc1006, 0x124252aa, 0x7fa52809 } + }, { + { 0xc2b2f5aa, 0x474ffe2e, 0xeef7d3a3, 0x5398e0d0, 0x77332d60, 0x3d421034, 0x6f2c7505, 0x7577f7f4 }, + { 0x24c40f8d, 0x0aa30a28, 0x5c7b4d5f, 0x7328f598, 0x3389c312, 0x286a2ab4, 0xdebc62f3, 0xd07734be }, + { 0xb725f710, 0xfbbc5bb4, 0x7e22dce9, 0x03140fbb, 0x81e57058, 0xab4a0910, 0xd4424761, 0xbd860106 }, + { 0x7beae8e5, 0x19d325d3, 0x58f7ad0e, 0x7bc8d35e, 0x3d52d5ec, 0xb676a92c, 0x659043b7, 0xdba74980 }, + { 0xc027c5fa, 0xc7a41e0b, 0x75ee6876, 0xf42a649f, 0x210e2949, 0x752e2748, 0x70cda457, 0xda935595 }, + { 0xfe0a1aeb, 0xe91527d4, 0x745ac60b, 0x8ab847c1, 0xa0cb829f, 0x6807edb3, 0x75786719, 0x5c0a7958 }, + { 0x49994b67, 0x3aadfd2f, 0xb93d4a77, 0xa47521f4, 0x003eaf27, 0x5b9259ea, 0xf45befdc, 0x331d4aaf } + }, { + { 0xecf05a78, 0x5b0dccea, 0xbe596791, 0xed74ae92, 0x777bfc4c, 0x561c0875, 0x07bbfa03, 0x579b232e }, + { 0x6c42cfac, 0x24f610e0, 0xdcf35c44, 0x1b9577c1, 0xe2bbd5ea, 0xd5f823b5, 0x9aa4298d, 0x6b66d59e }, + { 0x5d954b63, 0x53148e48, 0x74fa648a, 0x0e0d480b, 0x2fc671d9, 0x2fd95107, 0xe70ab4fb, 0x7976b80d }, + { 0x8ef41049, 0x018013ac, 0x7550be64, 0x34b310c8, 0xee330770, 0x82344b45, 0x6d46e81c, 0x5ddc8719 }, + { 0xf255471a, 0x2833052b, 0x72f5a69a, 0xf5ff80d9, 0xacffa4eb, 0x60b8e894, 0x5265bb17, 0xf6db3173 }, + { 0x29bc7929, 0xbfc100b5, 0xf24ede85, 0x7ae1d4a5, 0x447c4bc9, 0xccc2aa08, 0xd5745d7c, 0x053457a2 }, + { 0xfa514633, 0xfb59f89d, 0x90ca6394, 0x3fedf89d, 0xc2cffe6d, 0xd2b55ee1, 0xa5df8867, 0xbb7c2efc } + }, { + { 0x1dd251ac, 0xf30df07d, 0xd8136997, 0xbb300cbb, 0x9bb0f617, 0x097b4ad6, 0xaba0ef4e, 0x59465f3e }, + { 0xc67a54d8, 0x2d751c35, 0xf8e886e4, 0x60ed22d6, 0xdced76ae, 0x4317daee, 0x27c2efa5, 0xb5eec930 }, + { 0x2ab454a1, 0xac5b9d89, 0xec2dac35, 0xb7c2d85b, 0x6c74c4ac, 0x3d28f854, 0x0901addc, 0x7d29d165 }, + { 0x19099d92, 0xc8d38c91, 0xc43dbf7d, 0xe1af968b, 0x7ed8cf43, 0x4054cb18, 0x0a9668a3, 0x1cc65a8d }, + { 0x5836c214, 0xdb773225, 0x5fde14a6, 0xdc947ecc, 0x6b3e8419, 0x5708a87e, 0x347206dc, 0x32160dcd }, + { 0x1ce13b9e, 0xb816fb8c, 0x198329b9, 0x9d3caeff, 0xbd3b5abd, 0xe4d3eeb9, 0xb77864a6, 0xaf3bf0a9 }, + { 0xf485d47f, 0x51b08c2c, 0xb42daa90, 0xb41a9590, 0xb6362e88, 0x42bd5caa, 0xeb7391f1, 0x688ad9b4 } + }, { + { 0x8b55b285, 0x42aa6486, 0xd9268c13, 0x0a03572b, 0x4d504508, 0x5494ff44, 0x220e34dd, 0x63981d88 }, + { 0x9b8ee0b9, 0xaa0cee25, 0x284f22a6, 0xacfc09d0, 0xcf8ac884, 0x9f034053, 0x02c06625, 0x1093543b }, + { 0x6cb3b436, 0x40a03d9a, 0x070dda52, 0xbea1abf9, 0x96852da5, 0xb53ca963, 0xe87a92f9, 0x58cca1dd }, + { 0x91870369, 0x42e0fdb1, 0x038c4b19, 0x055e8e19, 0x6dc8bd5e, 0x1b6cabbc, 0xa5e2bb46, 0xcb466075 }, + { 0x60eb94ed, 0x51464ace, 0x142290e2, 0xf4a44743, 0x2c708010, 0xc5250cc2, 0x6b769c44, 0xaf7e0bc6 }, + { 0x427ce9a3, 0x643b6665, 0xf5825e83, 0x71c078e5, 0x80c12986, 0x468c2c31, 0x66fc2010, 0x8d883193 }, + { 0xeec6896d, 0x5bc850a7, 0x0043b164, 0xb68fa17a, 0x42a90bf0, 0x66f032ef, 0xd2a793da, 0x8365050f } + }, { + { 0x4bcf37fe, 0xdfbdfcfd, 0x2656f67e, 0x99743980, 0x5c56a240, 0xad4a9dab, 0x8265a41d, 0xa8898339 }, + { 0xa7605856, 0x24112f36, 0x66231ab2, 0x1174e49f, 0xa28fd7e8, 0xb2c571be, 0x78e2c98f, 0x64e2a488 }, + { 0x55cdcfbc, 0x335f2de2, 0xc1f667a3, 0xcae99a95, 0x13bc9290, 0x2b5cad96, 0x6b64e4ff, 0xed8785f6 }, + { 0x3e337610, 0xf3167171, 0x204cba94, 0x148aa7c9, 0x22dd312c, 0x413db12a, 0x64e10df1, 0x8cc14934 }, + { 0x3996e4b5, 0x82fa4d52, 0x1e2948b4, 0xa41861d6, 0x04f0a3cc, 0x19e28afb, 0x7854e850, 0x6da4d3ca }, + { 0x3ebc0883, 0x5b7a6a1f, 0xbc847133, 0xdacac476, 0xe7b5ee09, 0xcc407e9b, 0xc9f984b4, 0x4413fb47 }, + { 0x25af56f3, 0x9ee31133, 0x3a5d6608, 0xc1633547, 0xa1340283, 0xa51a0e30, 0x6abb1afa, 0x57509d93 } + }, { + { 0x02af6488, 0xc6f1f442, 0x6c639ff4, 0x08c7cd76, 0x76c9ab1d, 0x18d2048a, 0x676010db, 0x902497a7 }, + { 0xfc8ae3de, 0xab96eb36, 0xb9a8f7f0, 0x271c4873, 0xce390db7, 0x01690929, 0xe5ceb856, 0xd3bd1b2f }, + { 0x761a431f, 0xb09b8568, 0xceff9c70, 0x03addb33, 0x5ef69616, 0xa9c10c4f, 0x7885f524, 0x062db25f }, + { 0xaccf6587, 0xbcc93419, 0x4f35cdcb, 0xdb908d87, 0x0bbdffa6, 0x597084bd, 0xadd758ed, 0xa2f123fb }, + { 0x7c0739dc, 0x3ec7f3e3, 0x1713fbd4, 0xb36b947b, 0xc710c44e, 0x91353fb2, 0x0ad4c33c, 0x6567ee87 }, + { 0x258e7cb7, 0xd87421ec, 0x5d2b094a, 0xd761d2f7, 0xf46c39fe, 0x7571ae0e, 0x36ab8436, 0x98bc9c83 }, + { 0x025c1dbd, 0x76b4d07c, 0xc54e9cc8, 0xcdf720e6, 0x0020d4bd, 0x83c0bdb8, 0x20f92ff2, 0x271b6102 } + }, { + { 0xe6514ab2, 0x13b3fd1a, 0x8c679366, 0x1c128246, 0x7af4b686, 0xf4b704a4, 0x9cd82805, 0x12d4d6b7 }, + { 0xeeb985ae, 0x864faad7, 0x6963fda2, 0x89ae62c8, 0xdaa9b739, 0xb1749fe4, 0x8316ca7e, 0x0993a340 }, + { 0x8c5bf7b5, 0x1ee4e43f, 0x31d8fdfa, 0x2f99bbba, 0x210e181f, 0x3960ac90, 0x5d957a72, 0xba1652ee }, + { 0x79f6eb31, 0x30e4a088, 0xa0f2cb92, 0x591f7c8b, 0x50684126, 0x944e9c6e, 0xd189c11d, 0xcc30853d }, + { 0x1dcb040f, 0xd26ba641, 0x84fe1aa5, 0xa003b00e, 0x262cd9bc, 0xd0094575, 0x8555ee7c, 0x8287eac9 }, + { 0x63afa921, 0x328e2fc8, 0xbffcdcc8, 0xd42ce069, 0x4da61fcd, 0x971689b8, 0xd2629581, 0xe42b7b9f }, + { 0x83200806, 0x2c3cb0eb, 0x3184b87e, 0xad40c129, 0xefd20ec3, 0x6a77e260, 0x9d2b8de5, 0x361606b2 } + }, { + { 0xce3b9040, 0x462efa2b, 0xdca78d45, 0x83214df5, 0x98943be1, 0x674e1042, 0x2cbc7fe0, 0x0e972c36 }, + { 0xfa580698, 0xbb9417ec, 0xa5e6d40b, 0x17a77d66, 0xd3ae0c56, 0x6668f565, 0x3a1a3ccc, 0x16b81eeb }, + { 0x14a5c135, 0x33d9759d, 0xabff04e7, 0x58105133, 0x70e2396b, 0x893802ce, 0x284f4dba, 0x9486e2ff }, + { 0x9caca6a2, 0x7d23e8d9, 0xdf6c431e, 0x20853c78, 0xe6ff2b00, 0x9fc61c8e, 0xff9b2556, 0x995a4727 }, + { 0x66f7d234, 0x41fc08a2, 0x1d58a09d, 0xa0c6403a, 0xe7165329, 0x5ad4d532, 0x13898a2c, 0xc34da70d }, + { 0x30ac7de9, 0xdbf84ec0, 0x387e7290, 0xda58f0f8, 0x8c384fd8, 0x657605e6, 0x9168aa87, 0x80cda5a2 }, + { 0xd5e18650, 0x75dcea96, 0x2ea0bfa4, 0x643ae8a1, 0xde6f2b15, 0x2afe461f, 0xe3303295, 0x9377dd5f } + }, { + { 0xc322777e, 0x544fd7a0, 0x5e3bd3dc, 0x04838268, 0x29c9ecaf, 0xc04d9c43, 0xa14ac3b3, 0x9e9569fb }, + { 0xaa42e5a4, 0xbb8de644, 0xe2fbad26, 0xb4f18e48, 0x41a01be5, 0xcc95bfb6, 0x6e290d98, 0x54ef8bb9 }, + { 0x557d2b0f, 0xc03e88e6, 0x31a790c3, 0x3e5b6c76, 0x384f0b3e, 0x5ecb5bfb, 0x3d1eebfa, 0x5a577c70 }, + { 0xefa29a64, 0xaeb96331, 0xb2506e50, 0x0265949b, 0x3661408d, 0xee4c9b95, 0x566514f6, 0x992efa98 }, + { 0xb857ab5f, 0x7344d3c3, 0x19c63a4c, 0xe300cddb, 0xd035ef79, 0x3896caf6, 0xe158c43e, 0x8dbc225d }, + { 0x068826a8, 0xd11ee115, 0xaa0ab267, 0x048465b3, 0x83182d94, 0xc85a7925, 0xbc9d9148, 0x210b0520 }, + { 0x3e3a9c6b, 0x58154277, 0x69480d33, 0x8b127ac6, 0x9695e140, 0xbd936635, 0x25598547, 0xe30bd43f } + }, { + { 0x7cad6446, 0x95a8b12a, 0x7e99a163, 0x4e37e1af, 0xaedd8c8f, 0x48e82405, 0x02760ae2, 0x052e92ad }, + { 0xd42bd45b, 0x852604cf, 0xc82662e7, 0x8a7beec6, 0x3f9c480b, 0xceb76563, 0x55618792, 0x1d15b81b }, + { 0xc1e2c23a, 0xbbc03599, 0xb40bf076, 0xa7d81174, 0x55ecc4a5, 0x8f835e17, 0x97cc9058, 0x1f4ecbe2 }, + { 0x36e56936, 0xfc602ae6, 0xe4a1f50b, 0xca0d76f6, 0xb9231453, 0x88142240, 0x91fb92dd, 0xfaa0f736 }, + { 0xb11e5cf7, 0x4bbf80a4, 0x83fbdd5a, 0x629f9d4f, 0x70d3c5d3, 0xa4eff842, 0xb125d786, 0x451c95c6 }, + { 0xa0f9942d, 0xe7d77dd5, 0xa6ce3b5e, 0xad6fcb24, 0x1539fa38, 0x2e5d0014, 0x5647ff4a, 0x423a9cb4 }, + { 0x24328e01, 0x70060c5f, 0x9b5a2980, 0xd50c0456, 0x438b644e, 0xa6218f3e, 0xa8d29a0f, 0x55422c30 } + }, { + { 0xeb474cf0, 0xafbf75b9, 0xc178f2dd, 0x013eba8d, 0xae6078ae, 0x2f7148ac, 0x04d72dd3, 0x3b32798d }, + { 0x1c9f7c13, 0x2e631041, 0x2e4eee2c, 0x9aeeda94, 0x4377bcf4, 0x61803184, 0xe391eba9, 0x96f42e58 }, + { 0x0eebe52d, 0xc91b4fc4, 0x5529752a, 0x2911a0a8, 0x6883a4e1, 0x51d04140, 0x9d01d854, 0xf444746b }, + { 0x8ac7d066, 0xa5a93de8, 0xe336fdc2, 0x2b761cce, 0x2cb54674, 0xab52a8e5, 0xb7dc527d, 0xe28ebf7d }, + { 0x3ca84f2d, 0xdc63706d, 0x26604804, 0x0e2c42f1, 0x80c296c8, 0xc4a2dfbe, 0xeccef3f8, 0xdab00a20 }, + { 0x8891ba41, 0x3e0e1b3c, 0xa09a5bb9, 0xd9b10dc7, 0x12b39656, 0x681e834e, 0xb9464ce3, 0x7192d163 }, + { 0x555ccac0, 0x1b00b0a1, 0x747895e5, 0x5a4d1735, 0x685e8c2c, 0xd71cabd1, 0xc3f9edcc, 0x8f605d24 } + }, { + { 0x5d113432, 0x14505ae6, 0x7e65171d, 0xe5be1eb8, 0x09be54bd, 0x351bcff1, 0xee556201, 0x4320d056 }, + { 0xc7b6fe77, 0x7142a781, 0xd495ce94, 0x5ccd5b51, 0x097a7639, 0xd1b25366, 0x0b825916, 0x1f260e3a }, + { 0x6720ef61, 0x0d59a364, 0x06701add, 0xa51e08d6, 0x4db86dfe, 0x851fec4d, 0x137632c7, 0xcb292d71 }, + { 0x6608db77, 0x05c12056, 0x9b6b9b8e, 0x663d1ca1, 0xea7ebbc4, 0x564ddea8, 0x846212b1, 0x00b2e9a2 }, + { 0x57bba25b, 0xac6c79dc, 0x219f6138, 0x0507e8ae, 0xdaf7cf28, 0x315ab3d5, 0x32b289fa, 0xf2454aeb }, + { 0x345627e9, 0x277f5979, 0x7a570d80, 0x17d5be7b, 0xc1440ddc, 0x658d2d8f, 0xe6b2b033, 0xd3602918 }, + { 0x17266765, 0x63ddc898, 0x0b05da78, 0xe152732f, 0xbc07c329, 0x87308d49, 0x3533e92c, 0x13eef96b } + }, { + { 0xa6c74d3d, 0x5d63a5aa, 0x51ae38db, 0x3d664af6, 0xcca792ec, 0xe791594e, 0x5be4e8e4, 0x99f0af24 }, + { 0x66b45eff, 0x7d379b93, 0x35d9b9a7, 0x16f91660, 0x4c956d91, 0x28713dd3, 0xb0eb8f4d, 0x2b032bfe }, + { 0xc62649d0, 0x00df64e5, 0xa2da756e, 0x860f7c30, 0x9981d44a, 0x01eafed5, 0x51c2e658, 0x32b5df2c }, + { 0x56b139b3, 0x646f9505, 0xc046145a, 0xa89967b8, 0xfae495e5, 0x270d71ef, 0x477609f8, 0xc0130ada }, + { 0x82b8424b, 0x859a29d6, 0xfb1eab86, 0x682ce815, 0x4b094923, 0x2dfe7331, 0xd8e76c85, 0xcde77a35 }, + { 0x9e54ae94, 0x094dea2f, 0x6c4c1390, 0x99533a59, 0x10bff3d9, 0x45519ab8, 0x4e2b992b, 0xd6176a5c }, + { 0x95af2c5c, 0x49f92253, 0x967d73bc, 0x0f61c08b, 0x7e9cec0b, 0xa7b307b4, 0xfb7b21a3, 0xbe14ff9a } + }, { + { 0x8723d3ae, 0x0685750c, 0x019ac1cc, 0xd8de6a78, 0x5245a0fa, 0xbffc9e9c, 0x54167623, 0x807b1fef }, + { 0x81d8ad6b, 0x1bc10c9f, 0x33dda32b, 0x9812cf0f, 0x118e61e8, 0xab7e63f9, 0x1ae26ae1, 0x2af400e7 }, + { 0x3ba2ba53, 0x1d5846e7, 0x6e0065a0, 0x65bc2ef2, 0x50c29f8b, 0xca56af02, 0x94db5052, 0x7faf0110 }, + { 0x9340b038, 0xdaf2d479, 0x5cf279d7, 0x5300ad9e, 0x9a8df77c, 0x8fd4d109, 0xab00e821, 0xd13741ec }, + { 0xbf78239c, 0x7a6294b1, 0xd0905760, 0xd081bc37, 0x9a80f393, 0x4409d5f5, 0xa335c219, 0x7534be30 }, + { 0x97bac5b6, 0x714065e0, 0xe34b0574, 0xb0113634, 0xb0e83f51, 0x68290903, 0x111c481f, 0x570c6a9a }, + { 0xedf21139, 0x210b3de6, 0x6328dd9d, 0xb9ed6795, 0xf1949875, 0x0896ccba, 0x49526c34, 0xced20c3c } + }, { + { 0x50d016f3, 0x35841280, 0x0d682f63, 0xda54752a, 0x7416aaf8, 0x8ffc7525, 0x05d9e6a0, 0x5fe2c49b }, + { 0x5b84a3ed, 0x57737bb5, 0x58d8cf79, 0xe7ae800f, 0x5dc807da, 0x8b0864dc, 0x85c4aabb, 0x737e8715 }, + { 0x6e369e4b, 0x7d12c140, 0x11cef4c4, 0x026e1284, 0xd1297fea, 0x143dd929, 0x8ae3107f, 0xdfd92b43 }, + { 0xb68776fa, 0x5c43271a, 0x5bfb7545, 0x20115576, 0xec463b15, 0x5716ac16, 0x0a742f44, 0xdc10394c }, + { 0x93ebe0b4, 0x31cab089, 0xf703d6de, 0x8ddb986c, 0x029d5034, 0xf5919be6, 0x344acce1, 0xa7178be9 }, + { 0x02393f14, 0xcd4bd587, 0xe49523e6, 0x45b76377, 0x3189378b, 0x129a5480, 0x596844a4, 0x13bd0af1 }, + { 0xc1fbf5e3, 0x20b83b42, 0x94c122b4, 0xea35bbef, 0xa84afaca, 0xc7cede92, 0x2aa55379, 0x4e715526 } + }, { + { 0x191d8c25, 0xedf49bef, 0xccb166d9, 0xd31bb302, 0xd1394fc0, 0xbc7ac47f, 0x4ff9b145, 0xb2286167 }, + { 0x3cc6005d, 0x5af08c2d, 0xf0d13ff7, 0x086b72bb, 0xc23601a7, 0x34382607, 0x7a191b49, 0xb5e8eca3 }, + { 0x1256e971, 0x3ca1f021, 0x2a9fba8a, 0x2efffe72, 0xf8893912, 0x88287c58, 0x3047063e, 0x0ce6dbfe }, + { 0x0f596308, 0xdce19d18, 0x0b3aed5f, 0xe1b34628, 0x3c5e3471, 0xc610c449, 0x013b0569, 0x13d206c6 }, + { 0x7b5b0c08, 0xafa73f2c, 0x1afe34cb, 0x8e4352ef, 0xf0c9a492, 0xb1dd9c52, 0x8a3dbe85, 0x511b2068 }, + { 0xd0f7eeb5, 0x3cb65baf, 0x1ec371a6, 0x2652143b, 0x029c4b2c, 0xf4395f73, 0x070a8617, 0x1a41bd3a }, + { 0xe38ce7ed, 0x0999053d, 0x539b38c4, 0xe4a4ddb8, 0xfc3a29fe, 0x79ab63ab, 0xcd7bef5a, 0x39d51032 } + }, { + { 0x99ffd9e0, 0x6a7b6286, 0xd372442d, 0x2609ce72, 0x31b21b14, 0x1982853b, 0x0253796f, 0x4195e147 }, + { 0x94cf706f, 0x4219043d, 0x4948bae6, 0x4975184d, 0x51e72be6, 0xd00e181d, 0x5532c4bd, 0xe3e3d1bf }, + { 0x3a9511a4, 0xbce6a9d0, 0x322e27d5, 0xebed073a, 0x475bc71d, 0x77886f89, 0x57e25cfd, 0x0b8783f7 }, + { 0x86101a79, 0x88593c55, 0xc4d0aaf7, 0x66d0eb32, 0x559782e8, 0x3c738012, 0x779a44ce, 0x464b4901 }, + { 0x02334709, 0xdcd39abb, 0xbd4ba210, 0x1259e2ab, 0xcd81b73b, 0x41f02297, 0x5455c8a1, 0xf93e9f8b }, + { 0x9b00ec09, 0xcd936d0a, 0x6a99eff8, 0xa61b4818, 0x0f3fdab9, 0x924a0e43, 0xb6578638, 0x8f7e2f6f }, + { 0x863b5269, 0xd6873003, 0xd55ba719, 0x478fbd50, 0x06ad456e, 0x753ac81f, 0x2523b4dc, 0xa6c0aaa3 } + }, { + { 0x4c66c5e5, 0x24d70030, 0x1c778675, 0x01e610dc, 0x3318b68a, 0xb1a85bbb, 0xbd8dcced, 0x8386e37b }, + { 0x9a60c9ec, 0xab294812, 0xb9321b39, 0x10c50f2b, 0x583ce8dd, 0x5357d7c9, 0x60982c4b, 0x159157c4 }, + { 0x565dd84b, 0x9711aa2f, 0x7f6aed97, 0x6902c3eb, 0x73e93be7, 0x906585b1, 0xd908564a, 0x13f487d9 }, + { 0x23b1ed6d, 0xa7c43c99, 0xebbfa924, 0xb39c41be, 0x7a6352ba, 0x95747a3e, 0x2b5860f1, 0x7532934a }, + { 0x5eae3d04, 0xd2635222, 0xd1fe4098, 0xc6e2916e, 0xc86209a3, 0x51614200, 0x257b2adb, 0x951c5adc }, + { 0xcdceaa75, 0x7fb1fdd7, 0x891322a6, 0xca72927c, 0x8c2fccfa, 0xd80edf3a, 0x5cefd1e2, 0xbdd2eed8 }, + { 0x7e05a769, 0x81a4e29f, 0x89ef922a, 0x67a9d483, 0x1cab721c, 0x6f5c205f, 0xd102f502, 0x62fcb92d } + }, { + { 0x0e898ea2, 0x276be8c6, 0x20cbd93a, 0x91925795, 0xcc0e1426, 0x52ba9f4a, 0xe229d987, 0x04a4c65d }, + { 0x2985be68, 0x156e43f4, 0xf7e79720, 0x28a8cc8b, 0x1b90a8bc, 0x7acfe7c1, 0x7f2c38f7, 0xb6acd5c6 }, + { 0x11c48ff4, 0x6aaa0281, 0x61d4ecfb, 0x56e5946c, 0x09e507dc, 0x8e28097f, 0xb6e01d0b, 0xec5d2e6e }, + { 0xa9092e2a, 0x8030b6ee, 0xa62c0fdc, 0xe6fd7208, 0x3dae3e4e, 0x8b132548, 0xeef7b14d, 0xbb3e0df3 }, + { 0x366ae70b, 0x8af54a4b, 0x38695196, 0x490f3290, 0x69a4e783, 0xc25128be, 0x776ae4c7, 0xf3432d51 }, + { 0xf46709e8, 0x54b6f97e, 0xebe5ad72, 0x87f1ff2e, 0x2887b42d, 0xef0920c9, 0x9b2c4aa6, 0xaff35ba3 }, + { 0x980fd7f9, 0x4ec40a2f, 0xc67267ef, 0x084fea1b, 0xdc1f9357, 0xc82e5a6c, 0x6a1314d1, 0x2cf10f74 } + }, { + { 0x99e26c1a, 0x21d728e5, 0xa3bf7072, 0x1f867719, 0x9fc2a99a, 0xb3646233, 0xae028ed4, 0x58749d76 }, + { 0x84e31247, 0x3db47c77, 0x71b4ac32, 0x5e017ab1, 0x0cb3a997, 0xe9f22d8f, 0x61b71801, 0x80c3a383 }, + { 0x4fc8b9ac, 0x2c302d55, 0xc43ebde7, 0xafb2c409, 0x3e770688, 0x1ea75355, 0x42fb4ab4, 0x4b3ee41d }, + { 0x75f59943, 0x265beb42, 0x8552f918, 0x33b4cd5c, 0xbbc7e514, 0x4403f804, 0x592622c3, 0xa6c2788c }, + { 0x93954d46, 0x98102530, 0x65ee2172, 0x7c669b58, 0x48acf56c, 0xf12d22d8, 0x613faf21, 0x17cf04cf }, + { 0xa19fc70f, 0x1573fcc0, 0x0ecd8919, 0xafd79ffa, 0xb4b2bb85, 0x396c25e5, 0xd66fe1dd, 0xb2f73398 }, + { 0x175eeff6, 0x49ad4452, 0x393fbedd, 0xa09a5ec5, 0x4e71b848, 0x213bb3fa, 0x5865f497, 0xe0cc2250 } + }, { + { 0xb8c94934, 0x670b1bef, 0x09b597bf, 0xe95bc31e, 0x8f008206, 0xacfdc6b9, 0x697e0984, 0xc8f165d1 }, + { 0x9d1dee97, 0xc2639598, 0x30852fd5, 0x6fa62d83, 0x26fea39f, 0xb79aefaf, 0xf4ed4686, 0xf51bbba0 }, + { 0xbe4a0e85, 0x26aa35ec, 0x4ccb842a, 0x4daffff4, 0x0d0d6c5a, 0xde22570e, 0xda5b8f9a, 0xfb267bf6 }, + { 0x04684f26, 0xc2bc45b7, 0x78a5abe7, 0xd06d768e, 0x6609fb81, 0x10e0ae3d, 0xa939e5f0, 0x5a6caa84 }, + { 0x60e1f53e, 0xe0498ee1, 0x5a7bd7fe, 0x0e9d8a8b, 0xaea7dbe6, 0x78962259, 0xb56982ac, 0xb48924a9 }, + { 0x61f4f72f, 0x877a9b23, 0x80b8fdd2, 0x25076f3a, 0x3cfc165d, 0xb1a27de7, 0x7901f5fa, 0xaca74205 }, + { 0xbacf2caa, 0x2ffd287a, 0x5334c494, 0x6fc2dd9b, 0x8385ff11, 0x8ef2cd26, 0x3c700c5a, 0x883f96e1 } + }, { + { 0x01051c4e, 0xe171a853, 0x1a86285a, 0x54f10ef4, 0x1da6c980, 0x52622da3, 0x543efe3c, 0x5db30908 }, + { 0xd416105c, 0xae023365, 0x6991f58c, 0x6ca8442d, 0xdeebb86f, 0xfe4209c8, 0xdedbc33b, 0xfac9d4c5 }, + { 0x8befef55, 0x7e737cd6, 0x4d15fe13, 0xbd26464e, 0x80a01d45, 0xfd68913d, 0xd8cd8cb6, 0xc4e3c0a7 }, + { 0x96b72ffe, 0x2f8a3b29, 0x6293afcf, 0xaba930cb, 0x73d7bb5b, 0x07785741, 0x0d2b7174, 0x4a90d234 }, + { 0x05399790, 0x4a1f41fd, 0x9a2aedbe, 0xad926eb9, 0x534d3b8c, 0x8fccb936, 0x3ec3f1b2, 0x7bfffd7c }, + { 0x1d78b2c3, 0x88487362, 0x90ef131b, 0xb3e194c7, 0xd644719c, 0x63d94bf2, 0x57a07ca7, 0x3b7393c9 }, + { 0x3b1e3b26, 0xeed89619, 0x1d59f4b1, 0x8f21179b, 0xd2f5636b, 0x3760b2a7, 0xb8cba8a9, 0xe4781ce5 } + }, { + { 0xcdf29b38, 0xcd3ad590, 0xb60b0c91, 0x717c05c8, 0x67187a81, 0xf5e64622, 0x5fe4db15, 0x7caf92c3 }, + { 0x128e22f7, 0x33401a74, 0xbb73f3f7, 0xca39e2a2, 0x6bdbba61, 0x479c43e5, 0x45e71e88, 0x4a7fe7b9 }, + { 0x2bd5149e, 0x6b60080c, 0xa186e4d2, 0x32b3b160, 0x396411f3, 0x498814c7, 0x32af3f37, 0x914e1778 }, + { 0x52021b68, 0xf3f6d466, 0x05127da6, 0x4652a49d, 0xc04af790, 0x5f744134, 0x5469473c, 0x83443869 }, + { 0x3c789666, 0x55706cd2, 0xfb801295, 0x64be40b3, 0x9234d81c, 0x6a10f4d3, 0xe093b370, 0x3119207c }, + { 0x6512ad28, 0xf1762e3d, 0x89252d67, 0x319a33a5, 0x7047d72d, 0xc0cf8110, 0xe1f6a910, 0x5f181a3f }, + { 0xe0df2b52, 0xeccfde41, 0x71b6f228, 0x29a61ba6, 0xc18c6c45, 0xf6c491b0, 0xae634299, 0x60617efc } + }, { + { 0x932a9292, 0xeff3d35b, 0x0b3ffe45, 0x500946d9, 0xba2b8141, 0xf3aef5fb, 0x7fb73803, 0x5dcbed2f }, + { 0x92f928f8, 0xc45cb998, 0x3de973d3, 0x22258ee9, 0x01d0608b, 0x4abfd656, 0x4d05fbd5, 0xd0b317c2 }, + { 0x78a3e9c6, 0x1217d5fe, 0x37e07393, 0xfb4a2b36, 0x20fd014a, 0x9f430875, 0x7b7c72da, 0xe7826c88 }, + { 0x9e05b5fc, 0xc501e9e3, 0xfa5247cc, 0xff84de04, 0x19481bd8, 0xfd63637a, 0xf3aa923b, 0x18ddfc58 }, + { 0x6ff205cf, 0xd79bec07, 0xa0605213, 0x3fb90ac6, 0x38681ef7, 0xcecb097a, 0x992aaef8, 0x3f20406b }, + { 0x675ab4f9, 0x0384623e, 0x120f1482, 0x648bc836, 0xc275984d, 0x80248b73, 0x6343b511, 0x4f498daa }, + { 0xcba41f00, 0x41f24ff8, 0xe0d541d4, 0x2ad5b9db, 0x29fd8686, 0xf9247faa, 0x02dc9f0c, 0xa105f2af } + }, { + { 0x81314e68, 0x2e1bdcf1, 0xf262a0e0, 0xec3cc01a, 0x8b3b992d, 0x85186126, 0xa01b4c80, 0xf68996e9 }, + { 0x6c059760, 0x7cef4355, 0x94b55ae5, 0x46ebb21a, 0xc9652a93, 0xd00edbb9, 0x138854b4, 0x870e9c03 }, + { 0x2c878846, 0x5068ee62, 0x57504c0b, 0xd9992813, 0xad65db9d, 0x7c0540f1, 0xa51cca28, 0xe3f6585f }, + { 0xaae62fec, 0xf80c3b51, 0x1b8612b1, 0x4e1b799b, 0x122e7614, 0x9817a555, 0x076716bc, 0x26989d58 }, + { 0x082f3b0d, 0x2586ecaa, 0x3a68da4c, 0x2ec3a18e, 0x8322210d, 0x5db56d50, 0x21376298, 0x4f059417 }, + { 0xb9591105, 0xe37840ed, 0x65c2316b, 0x54328158, 0x9cb5600f, 0x25ca8e8e, 0xa3a5e15f, 0x490db5ac }, + { 0x0e25fe77, 0x1beb7f0b, 0x9700b7f6, 0x581f5695, 0x5f52081a, 0xf6c0c4b3, 0x4f23c5d2, 0x716b92a8 } + }, { + { 0x0b783206, 0x97197b11, 0x4466fc8d, 0x51e8e947, 0x529a9831, 0xbce64097, 0x84f78505, 0xdec144e7 }, + { 0xebadc492, 0x5c26fd40, 0x55a0109c, 0x22dd0942, 0x62869e2d, 0xdd67b5b3, 0x8dbad1b3, 0x74764f31 }, + { 0x63a0093d, 0x7361b487, 0xc4f3ec81, 0x73d62b5e, 0xf6443a90, 0xca47e3ff, 0x7fbf1f12, 0xe0d6064e }, + { 0x64b54365, 0xc74d838e, 0xd1a72c2b, 0x0cd37608, 0xba5a2b7e, 0x24af5dac, 0x7934ed42, 0x41f1d7f7 }, + { 0xa50c28eb, 0x7c8fccd8, 0x991d713d, 0x56143506, 0x83019cbf, 0x3e5e8c40, 0x268e8649, 0x42b96750 }, + { 0x115f1a44, 0xda6af568, 0x5818c25f, 0x7cb2cd39, 0xc41f0b4d, 0xb1d5c52b, 0x9d334364, 0x4b5c5bf8 }, + { 0x2887d927, 0x4cb784ae, 0x3f6be83a, 0xdc299f50, 0xa76bf296, 0x059ca3dc, 0x3387ce95, 0x24032c4a } + }, { + { 0x646c61ba, 0xc00dcebd, 0xffe8d48e, 0x1d5ef5fa, 0xdd03068d, 0x945c4a55, 0xc21478e5, 0x6516f79a }, + { 0x51081670, 0xc9480411, 0x45a2ac72, 0xfbe68ae9, 0x4dd25a6e, 0xb6901f20, 0x3fe634d3, 0x1109ba3a }, + { 0xaa1a199e, 0x4ce5679d, 0xc61856b5, 0xaad329ce, 0x888fed04, 0x54a92ce4, 0xec166331, 0x3cdcee30 }, + { 0x9b37df4b, 0xc643bb79, 0xf74d8080, 0x383f1d8d, 0x97ad1010, 0x6beccfca, 0x80835164, 0x57f51a36 }, + { 0x5ee2f501, 0x17c2f152, 0x985fb43a, 0xdf1a3cd0, 0xe332791c, 0xdff602d3, 0x579b3d44, 0x0f92d59e }, + { 0xa6dde8a6, 0x17dc2f83, 0x264d9a36, 0xe850c137, 0x8998dbe7, 0xc815c3a7, 0x5464c2b6, 0x41b6fddf }, + { 0xf1aa98e6, 0xa0b61792, 0x66788403, 0x75ce08b9, 0x705eba7e, 0x1cc8f43f, 0x8eead44a, 0x1effb035 } + }, { + { 0x63c1a59c, 0x3bb92ed9, 0xd993927e, 0x9115e792, 0xb999dbd2, 0x8f704232, 0x1809f9c6, 0x58568b74 }, + { 0x843124b6, 0x3c5ac0ef, 0x72e5d4ce, 0x846f817a, 0x6406ae45, 0xb2fe706d, 0xfb578605, 0xd86d22f5 }, + { 0x18938e86, 0xb285e7b3, 0x3ac87243, 0xbf1034e3, 0x2935a723, 0x442238df, 0xf189475f, 0xf485ec70 }, + { 0x794c2f0b, 0xd9aa1f95, 0x6e5cd411, 0xe1a66971, 0x42c32329, 0x4c25c3cb, 0x7786e163, 0x157466bf }, + { 0x97c86d73, 0xbf0a1063, 0x78b33005, 0x533de701, 0x34465c03, 0x39a03557, 0xddaa24eb, 0x3f68ca61 }, + { 0x0942210a, 0x8d29e6db, 0x0838c1c3, 0xe56b9e13, 0x781aec92, 0x49b12a6a, 0x33822b38, 0xcc81a41b }, + { 0xef40d172, 0x258f6a46, 0x7ab0a0ab, 0xd11b65e4, 0xa96ab13d, 0x6071d3f9, 0x6367b09b, 0xaf81b190 } + }, { + { 0x1b12c93a, 0xb2dd19c3, 0xc0baacf6, 0x9ac0736f, 0xa783871e, 0xab4c0c38, 0x512aef74, 0xd99a41ce }, + { 0x532aa8f2, 0x84ca4f04, 0x9f0d7c8d, 0xc529d10b, 0xa1a50d2c, 0x3dfc8bab, 0x156082d3, 0x031047a0 }, + { 0xf4f340e0, 0x8b2c1235, 0x758ad17d, 0x371b86f7, 0xcdd54fb6, 0x66df8eec, 0xd9790d57, 0xe484bc36 }, + { 0x00ff11ea, 0xa18fc2fb, 0xd897f75d, 0x81e0aaf1, 0x14326937, 0x7ea19d16, 0xd7980e5a, 0x8fc84e35 }, + { 0x14085ef0, 0xbed40a19, 0xa51cfb5c, 0x60f36e68, 0xdf33b423, 0xa612b2c7, 0x92c9a789, 0x061ba596 }, + { 0xb825a48b, 0x1c8d8307, 0x8adab13c, 0x8ffefbb8, 0x4fd180ae, 0xd7fc5b87, 0xddd5e548, 0x6af66526 }, + { 0xa8e14ddd, 0x78386471, 0xb9e89d93, 0x55e2f08a, 0xc2940906, 0xf1f8c9c5, 0x5352536d, 0xdf4d29c4 } + }, { + { 0x1a65e954, 0xa7c05781, 0xa622c36e, 0x39d1ae36, 0x3555bdac, 0xde1e7007, 0x499ab88a, 0x26e6758c }, + { 0x2423409c, 0x59f027d6, 0x53c01054, 0x99470ade, 0xf0445032, 0x42440709, 0x5762f300, 0xaf3f6e9a }, + { 0xfafe7169, 0x3821c260, 0xefe2db29, 0xad298c75, 0xa234e203, 0xaad5d774, 0xded608d3, 0xfc0a9d07 }, + { 0x6a8dc5ef, 0x0b50ff0b, 0xaa1e37df, 0xac63532f, 0x60cc05e3, 0x4a17918a, 0x3e498676, 0xdb55dbbf }, + { 0x3d2e8493, 0x858c6360, 0x1291fa48, 0x9da94500, 0x0575d135, 0x17b22353, 0x8755aeb8, 0x3a36fa91 }, + { 0x235ffbc9, 0x37884622, 0xc0b1a257, 0x2f4e75bc, 0x48b33b2c, 0x4e94a5fb, 0x57e26314, 0xca8db664 }, + { 0x76223077, 0xaae3cbc6, 0xb53e20bc, 0xf021fca7, 0xf4f70531, 0xdd3e20a1, 0x018908ee, 0x6ac4e5ec } + }, { + { 0x4bab2a03, 0xa4c894ad, 0x0718b9f6, 0x76505aa9, 0xa704a1ab, 0xe31d6d72, 0xe0b7d7e8, 0x82335d70 }, + { 0x9248c598, 0x05d14ef5, 0xb22196b6, 0x104dacfa, 0x5eb00a04, 0x65e5780f, 0x553d2bcf, 0x9a6faf4e }, + { 0xe7a84b80, 0x21ac8ab2, 0x0a97b8a2, 0xaa6c8ab8, 0x85d6ca44, 0x4912fc2f, 0x8ce532e7, 0xfd1ec6f5 }, + { 0xe0a3214d, 0x8b83e16d, 0xda1c1077, 0x6ecfd613, 0x6c44d10f, 0xa0ed0247, 0xbe6524e7, 0x9906e540 }, + { 0x6b901287, 0xff9fc5c9, 0xa169de09, 0x5aa704b5, 0x0c9a1708, 0x853969ef, 0x02a6a2c5, 0xfd22434b }, + { 0x011df8ab, 0x933987be, 0x4d8e33cb, 0x8a75575e, 0xa0df5ed3, 0x4afedf40, 0x72d973b4, 0xf0d715e5 }, + { 0xc649a341, 0x8c8ec585, 0x09e36ffc, 0xcae85482, 0x604b9358, 0x503619cb, 0x1838af3d, 0x9d311908 } + }, { + { 0xf992ef53, 0x3cc38b82, 0x484ac38b, 0x9cc29b5b, 0xad102612, 0x7167bdd8, 0x65013993, 0xcd0b9518 }, + { 0xc068a679, 0xdbd71611, 0x84c06e92, 0x9a66ae57, 0xb777ed35, 0x86279007, 0xd7297091, 0x70281626 }, + { 0x568a2bb1, 0xc2fc8f0a, 0xbeeb279f, 0x40e630bf, 0xd56a039b, 0x2a9e70a0, 0xc887842a, 0x22ad73ae }, + { 0x9f78ad15, 0x7320e353, 0xb005eebb, 0x7421e0da, 0xc04ddf75, 0x6f86e369, 0x6c43d7f5, 0xe8fe1ced }, + { 0x7745d97e, 0x0f4a15dd, 0xbc58b766, 0xa4ece092, 0x145a85f5, 0x617ef632, 0x5c29cc7f, 0x88f2ebe9 }, + { 0xa90241df, 0x69968208, 0xca3d5230, 0x260eacca, 0xa30ed8b1, 0x5065816a, 0x23a7b3bc, 0x08ffa2cb }, + { 0x1343e3b3, 0xf7ec9a56, 0xf6b95938, 0x9d75ab58, 0x4b919a32, 0xd0990f77, 0xeb3d0c3c, 0x03393c17 } + }, { + { 0x10404354, 0x24f4c527, 0x3bb936db, 0xe43c0af9, 0xcfdfae66, 0xd0c59040, 0x87c94698, 0xb1dfe449 }, + { 0x862620a3, 0x5a6bd6f3, 0x6715861e, 0x1794e287, 0x6f547703, 0xca52a892, 0x66b712ae, 0x92cedadf }, + { 0x5f632648, 0x07ed8aaa, 0xebc99ea7, 0x67e35f3e, 0x45df92b2, 0xf810d6db, 0x6594292b, 0x719dc0df }, + { 0x02517129, 0xc066cf91, 0xfee400ed, 0xe5a33177, 0x2451fc04, 0x8716cc17, 0x0e85aea9, 0x830b89a4 }, + { 0xc21ba7c2, 0x5cef1caf, 0xee257ad9, 0x4f17bc91, 0xd401c758, 0xae51df62, 0xa9dc2ebc, 0xb3b40e36 }, + { 0x9719e474, 0xe8d19d46, 0x00a43966, 0xb200e08c, 0xfb39eb35, 0x059d9c51, 0x8330589c, 0xdd55cfc1 }, + { 0x3816a521, 0x2b5440f8, 0x58a9d434, 0x38a1a222, 0x4299eeae, 0x4656a036, 0x178a14b7, 0xd8f66ba6 } + }, { + { 0x8e53e611, 0x0f80a4ec, 0x75cfc563, 0x7700369f, 0xeecfd38e, 0x4a84d294, 0x5fadff27, 0xedf0779d }, + { 0xd96a8adc, 0x824055e9, 0x73bde8d0, 0x28d6d0ce, 0xed5e9eac, 0x5a9d9c29, 0x3abbd71a, 0xf12ca86d }, + { 0x9a2903fb, 0x6fe15fef, 0xec292d65, 0x5ae89ee4, 0x07fb2b6a, 0x5e351b88, 0x5f3e661b, 0x3ea971b1 }, + { 0x4fb07aeb, 0xb3b1a129, 0x2e472f43, 0x4b931c8a, 0xe068fde9, 0x62c838e0, 0xb39f7053, 0xe38fb1fa }, + { 0xe8cfca5d, 0x5ee9bd31, 0x7bfcbd2c, 0x072b9b2a, 0x066bc2b3, 0xc90fcd92, 0xd7591916, 0x70bc9042 }, + { 0x7334d25e, 0x061f383c, 0x2ca2313d, 0x7c17e1ba, 0x95d4650f, 0xc323f32a, 0xf356fcba, 0xd7487659 }, + { 0x3de5961a, 0x1a9c3578, 0x5ab5e3a6, 0x332485f5, 0x81a763fe, 0xa1732747, 0xe00167bd, 0x9827e68d } + }, { + { 0xaefa11d9, 0xb23ae1b4, 0x6c5daa24, 0x466f709f, 0xdc2135de, 0x529c6d42, 0xd855a0d3, 0x01264bd5 }, + { 0xc61834ee, 0x61bc622d, 0x1e80ccdc, 0xa99991bf, 0x8ad8d302, 0xcb03b0bc, 0x51c27a3c, 0x61b7310a }, + { 0xf5aeb48b, 0xfce399cc, 0xbc6a2065, 0x9cdbe1d2, 0x4a5fb6f8, 0x6a0c024d, 0x666405ad, 0xe9c533c8 }, + { 0xf25d6ba5, 0x5a1e5f60, 0x9a760f26, 0x9a9ccfe7, 0xcbf1a84e, 0x11156e2a, 0x1ec8bad5, 0xa1abd1cd }, + { 0x429af8ce, 0x2b48afbd, 0x37c15970, 0x206a828e, 0xc1329c16, 0xab26ea1f, 0x079d8f0a, 0x040b51a4 }, + { 0xb1ce4771, 0xf0cad81c, 0xa50f6d62, 0x4e99cf63, 0x3d8949a0, 0x0d4fcb9b, 0x95f934f5, 0xa415e3e1 }, + { 0x2bdd8d6e, 0x566864c5, 0x73b6ec02, 0xb4272efb, 0x49a004e8, 0xd1149d77, 0x4cebcc5a, 0x456af3c1 } + }, { + { 0x081a5e5c, 0xbf7b8d4c, 0x8a34b5a9, 0xcdab3950, 0x7c623160, 0xc109ba89, 0x7bdb53aa, 0x9d5746c3 }, + { 0xa7176883, 0x41412b90, 0x474c53f8, 0x38c66dde, 0xcb6d77d1, 0x6f0a0c72, 0xb176acf4, 0x84750024 }, + { 0xe7d61ac6, 0xd53fce6d, 0x9d9d8914, 0x7276e969, 0x4a22f072, 0x0d3c37dd, 0xafbe355a, 0x85a80a9b }, + { 0xea5b16bd, 0x74126074, 0xad6a0091, 0xda26ae8d, 0x98119213, 0x4ed94ccb, 0xf91293e7, 0x83f0444e }, + { 0xd977cdc4, 0xbb396ccf, 0x156a3abc, 0x5049c8cb, 0x97e3fc76, 0x22ca279b, 0x6e6c56eb, 0x4a40aafe }, + { 0xcbbad741, 0x653712ab, 0xedee190c, 0xd65124f7, 0x35cfcf9e, 0xb8e45ecd, 0x247c0f70, 0x92d9f67a }, + { 0xf1078520, 0x62a505c4, 0x386d72e7, 0x4379a48a, 0x5c861e43, 0x82f93962, 0x0612ab98, 0x8e762b88 } + }, { + { 0x2b76d2f9, 0x219985b5, 0x48931209, 0x61e9b92c, 0x61b7df20, 0x3a5a19c7, 0xfb1cae89, 0x86e6fe6f }, + { 0x17a9e8bb, 0x24a69d1e, 0xb5fffedf, 0x645c05ee, 0xe465a371, 0x1cf0922f, 0x8e388d71, 0x6f7fb175 }, + { 0x539bb5ba, 0xa74025bc, 0x73a17687, 0x7e4034e7, 0x36a340a3, 0x3fc47343, 0x38c42333, 0x28e0a705 }, + { 0x60047445, 0x9b413b57, 0x22ad7abe, 0xd001a44f, 0x38564b8b, 0x3e430299, 0xa338d922, 0x3fdc8bae }, + { 0x10d5667c, 0x4b20b75a, 0x05c9d00d, 0x2436660e, 0x6d7bf446, 0xa8e4ab1e, 0x6ebc7ad2, 0xa80f7b71 }, + { 0xf82ad2d3, 0xdc4e138c, 0xb95a5c58, 0x135a2af7, 0x90e78650, 0xa05971b3, 0xfa7654e6, 0xeb040cb5 }, + { 0x7e55a09c, 0xa598b530, 0x66e2e492, 0x007cfbdd, 0x2a7340a3, 0x49eded4a, 0x8a2c5120, 0x745aec01 } + }, { + { 0x4ccdf6a1, 0x21cf2074, 0x70ee181c, 0x37614987, 0xdce26256, 0x388e8a20, 0x82e33a58, 0x1f8871a0 }, + { 0x9ac567f4, 0x2cab290a, 0x7a2940dd, 0x9d2921cf, 0xa7212702, 0xdba2aba3, 0x7b042b48, 0x2ea6c00e }, + { 0xb6602eca, 0xf1ccffc9, 0xa427b9e3, 0xce865444, 0xe955470c, 0x5c35353d, 0x886cd178, 0xb1154347 }, + { 0xbd7ee6c7, 0x986f0ceb, 0x515006d4, 0x928a9ef0, 0x3e19b199, 0x9e2b9d82, 0x2ba5734d, 0x78d35037 }, + { 0x8dfc34f4, 0x736270df, 0xae0c15e3, 0x039845bb, 0xdc0cdd6d, 0x8d629822, 0x115f4087, 0x0e40c8d1 }, + { 0x02d5be7f, 0x3b52feb2, 0xfdeb0f90, 0xf335fe9b, 0xc4ee02d1, 0xe1b0a73b, 0x973b1c29, 0x28608143 }, + { 0xd64024fe, 0x07bfee3d, 0x958b2586, 0x20c30d61, 0xfff7a1be, 0x1424dbb0, 0x41d63aea, 0xa7d2d7a5 } + }, { + { 0xc98697f2, 0x27a9da0e, 0xbe1c3c3a, 0x6015249f, 0x43310088, 0x25551fd1, 0x9ed53bc8, 0x01a59dbd }, + { 0x43b36f5f, 0x14d0c574, 0xb004b813, 0x0b342110, 0x8d8821bf, 0x2d460e2d, 0xdb423121, 0xe38d515a }, + { 0x0c48988e, 0xc75214a1, 0xe2d41374, 0x914e23e3, 0xffa76150, 0xf4d0d7a0, 0xf91f0d58, 0x5dbe80f6 }, + { 0xa1717fdb, 0x83473287, 0x5d83adb2, 0xce07c3f5, 0xd7b4bfd8, 0x802e2d18, 0xbd8d8aeb, 0x2a615f35 }, + { 0x281f4fc6, 0x3234cada, 0x034c9096, 0xad333584, 0x9e3d1089, 0x8d67adc8, 0xc73bb490, 0xb96d864c }, + { 0x81dfe927, 0xda7658b5, 0xe2b7deba, 0x28e959d4, 0xf976f0a4, 0x87efc7ad, 0xc8427d0d, 0x90ffa985 }, + { 0xce2e2e31, 0xdea7ac97, 0xe7d99d04, 0xb7b80fa3, 0x40c3196a, 0xa23ec559, 0xeec1dd8b, 0x50e94257 } + }, { + { 0x16823e73, 0x25e516fc, 0x9dd99658, 0xc3b2403c, 0xe96ada4c, 0x9445eea9, 0x0574f922, 0x8b0e0b50 }, + { 0x170a5242, 0xd545ee9e, 0x335d861c, 0x8a625319, 0xd06d63c0, 0xc1c65bea, 0xb289999c, 0x97fb323e }, + { 0xbdbf594b, 0x4563538b, 0xf6f5cb1f, 0xc3e7a6a1, 0x1de4a672, 0xca09428d, 0x5ad346d9, 0x5295de9c }, + { 0x7142b211, 0x6bf87d2a, 0xe77b09ce, 0x555dbb4d, 0x06b5dc50, 0x173c489a, 0x1b505203, 0x4fe9fd5e }, + { 0xd1eca554, 0xdbf55b7f, 0x4c58cf78, 0x57fd262d, 0x911d6812, 0x2dfe41cf, 0x09568fda, 0xb43f0161 }, + { 0x79e9f3ba, 0x7dc0c6f0, 0xca803919, 0xf2466fef, 0x71940a16, 0xc7d5d56c, 0xf379bba3, 0x8bbeb5e8 }, + { 0x6d78f71f, 0x57474240, 0xed1d6588, 0x0272b8fa, 0x42e317d1, 0xa6fe3539, 0x034ea5de, 0x91253223 } + }, { + { 0x6ce8fe52, 0x4ee4b0ba, 0x269731c9, 0xb1a91780, 0xc17611d4, 0x69ccbe77, 0xac119be5, 0x9761c6cc }, + { 0x800ebc6c, 0xd6d229c3, 0x66224169, 0x43ce27ee, 0x4e06d545, 0xd69a4e2e, 0xbe60d266, 0x2fbc0760 }, + { 0x04c13deb, 0xddcc671e, 0x940baff6, 0xed011b83, 0x1c65639e, 0xbf75ebb5, 0xdc29f3a9, 0x948a6594 }, + { 0xb6723312, 0xec575e5e, 0xc920d4da, 0xea1221c4, 0xa1c8f1ae, 0x6574c37f, 0x521325a4, 0xe5630b6f }, + { 0x9be8b91a, 0x34e5bae6, 0x94b150e1, 0x0a37a2fe, 0x93bc6749, 0xdc446168, 0xbd31bfdf, 0xea785db9 }, + { 0x433d561c, 0x1d8f451c, 0xd6821c12, 0x4cceace7, 0xd9f909d7, 0x05e270ae, 0xd959db7d, 0x26018b37 }, + { 0x78fbfb74, 0x864c7746, 0x7e96fc07, 0x3d73ae5e, 0x37117671, 0xab04044a, 0x7b2f215d, 0x5d34c951 } + }, { + { 0xd6e67082, 0xed83d10d, 0xf9b603c4, 0x330f14a0, 0xa2348071, 0x3d51d623, 0xbf803f9c, 0xf5c3a860 }, + { 0xdbf2e1fb, 0x3b9073d2, 0xa397706e, 0xaf6e444e, 0xd8be2c7a, 0x50917c13, 0xa6c15612, 0x1d2d723e }, + { 0xaedff564, 0x41062f20, 0xddbf7f08, 0x8ebe5ab0, 0xd2624d9b, 0x558c4f3f, 0x4fc8fdda, 0x030d8626 }, + { 0xe9f80171, 0xd04fc302, 0xc1a18b1f, 0x5175f1b0, 0x6b31de78, 0x489a4108, 0xc0f2a21b, 0x1da22bc9 }, + { 0x69c0783f, 0x468e72e1, 0x539684b0, 0x6eb35caf, 0xb2c8491d, 0x3461d505, 0x4008c3b8, 0x950079cc }, + { 0xf430e5f9, 0xc4af2bc3, 0x27a623de, 0x30b9f603, 0x9583a5d3, 0x0fe2d753, 0xb7192a77, 0x7672f83c }, + { 0xea036fc5, 0x8f910668, 0xfbb488e2, 0x4df1da0a, 0xcc8f5f0c, 0xe9cf02d8, 0x4ea68b8b, 0x92930726 } + }, { + { 0x4aafdde7, 0xad1e6f18, 0x6fc2b1f4, 0xc3c3bfbf, 0x28158ddf, 0xcab597d3, 0x0ee80ca7, 0xad689ef2 }, + { 0x31cef4a5, 0x2a0ac024, 0xba8befc7, 0x323bd99f, 0x0d4adee2, 0x741edb95, 0xc38ebf1e, 0x2e4bf40a }, + { 0x54731b39, 0x9c520b83, 0xd236cfc2, 0x8d28fed1, 0x595920b7, 0x9e64833a, 0xf9033166, 0xb791aa52 }, + { 0xb973e426, 0x031a763a, 0xc8a491a7, 0xf971a850, 0x29a57431, 0x9f98ab85, 0xe810c441, 0x1aaa9b17 }, + { 0xe07a56bd, 0x5b3a650e, 0x8524c1bf, 0x581b9853, 0x620e2528, 0xcbd9f18c, 0x464e0c76, 0xe8a8757b }, + { 0x4ba36244, 0x8dc29cab, 0x82dd5d98, 0x2e00d727, 0x1b403304, 0xcfb9ef02, 0xb23c2e18, 0x53272334 }, + { 0x85b8badc, 0xd3f3460a, 0x1f2d54d8, 0x6be53442, 0x4d3a4c57, 0xc6178f09, 0xdaac120d, 0xa21d32b5 } + }, { + { 0x5e7eec3c, 0x6882c2c4, 0xf71e281e, 0xee5a05db, 0x49160328, 0xa581f536, 0x999bcfc1, 0xa32183f4 }, + { 0x4d495226, 0x1d7fba98, 0xd63e0443, 0x1d3bbc2b, 0x63efb7b6, 0xb8fb692c, 0xf439fdd7, 0xb57cb60b }, + { 0xacbf8e52, 0x9b63af75, 0x555229a2, 0x01bff2cd, 0xf58b87f3, 0xb3665332, 0xc46db843, 0x522862e9 }, + { 0xeb3dd86e, 0x85cb0d88, 0x252ac387, 0x2c647271, 0x64f64274, 0x8aa0d8fe, 0x24c5c742, 0x6ba50abc }, + { 0xc049057d, 0xf1c1679b, 0x75366f81, 0x61691771, 0xef711e26, 0xb656c670, 0xd81e2e48, 0xf0e4b55b }, + { 0x8762038d, 0xc80e0c4f, 0xf30b867e, 0x19fadbdb, 0x9a6eb859, 0xc9901d8f, 0xa8c35c86, 0x7ab2b2d9 }, + { 0x3338cff5, 0x71256102, 0x5bbc92b0, 0xec61ecb6, 0xf8d91011, 0x085ae7d4, 0x8fd0eb3a, 0xe8afda76 } + }, { + { 0xc79d0663, 0x2dd58140, 0x0aa57d16, 0xf29eb584, 0xebffc367, 0xb5aaf495, 0x5f301fbd, 0x51ad05f3 }, + { 0x5d9e5289, 0x1f286da7, 0x1a8c5a78, 0x1981633d, 0xf535283c, 0x558fd1c4, 0x10042322, 0x694cf23d }, + { 0xb1b46bc1, 0xa366e94a, 0x432e1e2d, 0x29bd0258, 0x4c4a1386, 0xee6519ea, 0x8c1e7b8b, 0xe581d895 }, + { 0xf10c0f6e, 0x8b6ae220, 0x013190cc, 0x00648767, 0x3b7eaecf, 0xbd665c98, 0xcd8bb5e5, 0xcdca837c }, + { 0x855b26dd, 0xa4b21f40, 0x55f19d81, 0x683941bd, 0xe9d853f7, 0x5a251186, 0x8e63352d, 0xd93882fc }, + { 0x50196950, 0x3cc10d94, 0xdf247d3f, 0x7d6cd59d, 0xe2bdcfb9, 0x502f37e3, 0xf78c2b7a, 0xa29b4210 }, + { 0x82240993, 0x12a37c93, 0x9dce0ce4, 0xe532a6f4, 0xfcd872f2, 0x1e744eaa, 0xb68ded30, 0xa6e98a08 } + }, { + { 0x214bb8bd, 0x59052c09, 0xe306850e, 0x61426107, 0xcae574dd, 0x6f0d63ef, 0x36b7f4e6, 0xc4b1972e }, + { 0x44a5854e, 0x37506e54, 0xe43b0c19, 0xd89f4371, 0xad9b0797, 0xdae323b6, 0xfb38db63, 0x343a5bbc }, + { 0x4c3a1778, 0x38f81b63, 0x41e50711, 0x3273fbdb, 0x6cf133ab, 0x5fdbafc5, 0x7e62f53d, 0x8337b5d3 }, + { 0x577cc2c0, 0xf1740a61, 0x195f8d70, 0xc1be9818, 0xf6f046a7, 0xb22ff8be, 0x70434280, 0x9e969483 }, + { 0x7f54aff4, 0x29b2c1db, 0xb7932d31, 0x0e26725c, 0xa4ce3e46, 0xb8d03f15, 0xc1961766, 0xcbecbdfb }, + { 0x7b1da3e3, 0xd7091ce2, 0xd960bd1a, 0x24e3ee4b, 0xbccb3083, 0x9947ae94, 0x995b66c3, 0xfecdca8b }, + { 0x9efdb08e, 0xe6dd1bb1, 0x8afc22ba, 0x689c98ca, 0x5aa1d1e6, 0x9280486b, 0x1a06ff70, 0x35f3bd61 } + }, { + { 0x94a57dda, 0x34e514cb, 0xdba2cc3a, 0x5f80b789, 0x567d9dd8, 0x8e42abfe, 0xda4ed86d, 0xc3d85a78 }, + { 0x643a54ab, 0x64f1459d, 0xbe4f3752, 0x78e0c1fa, 0xd308c46d, 0x79e906cc, 0x9ee16ad9, 0x077f4792 }, + { 0xb17b2cb4, 0x7b1893a0, 0xd513db0f, 0xd05a576f, 0xc0cb40f5, 0x4d7f6b17, 0x89869ade, 0x3ef3f6ae }, + { 0xa8f1033f, 0xb5fd68fd, 0x8b1a8db3, 0xb191a33e, 0x353afd73, 0xeab792ce, 0x2ccac580, 0x3901d267 }, + { 0xe945d74a, 0x5a35669a, 0xa3e4a8ce, 0x7c09320a, 0x9d6a6e73, 0x839886a0, 0x0e87039a, 0xd4afcfe7 }, + { 0x35cd99c9, 0xd0e5ea21, 0x7aaf6e80, 0x28a91f14, 0x0441f916, 0x3bcd7836, 0x5f8c06b8, 0xf6d2804b }, + { 0xab421ed4, 0xf564b8c9, 0x03a9e168, 0x98c0e130, 0x9cd0b92d, 0x3c212ef7, 0xcd6eab71, 0x295b1bd6 } + }, { + { 0xe3e9bef3, 0xd7078eb9, 0xfa2d0da2, 0xfaebbc87, 0x4d66df4f, 0xd1655e36, 0xa6b5f78a, 0x3f7c7c98 }, + { 0x1e7cddbc, 0x17a3975a, 0xde48e2b9, 0xab04c4a3, 0xbf5bc034, 0xf7a44143, 0x5ae8fa9c, 0x3cb216d4 }, + { 0xa019805f, 0xa77c68ee, 0xf27890d8, 0xd67c0c27, 0x06cd297b, 0x525f68e9, 0xd994da58, 0x8672b823 }, + { 0x25936f1d, 0x764ff4c3, 0x89a06966, 0x2a1f98bf, 0x075af8ea, 0xa404022e, 0x959f5c8d, 0xa3959fd1 }, + { 0x9000b509, 0xe18ff73a, 0x7baefdee, 0xec7a734e, 0xb432ea34, 0x8ef1f3d5, 0x2e367966, 0xfcc949cd }, + { 0x414a9e4e, 0xddffb7d9, 0xa4b135c0, 0x08df6e92, 0x7f7978fc, 0x94231a01, 0x38020d36, 0xfd92eba4 }, + { 0x759e8e7a, 0xbd0732bd, 0xbddea280, 0x58540b21, 0x7dc30c3e, 0x3d973558, 0xaf1b393f, 0x51aef09f } + }, { + { 0xd42396dd, 0xe4fc4aba, 0x65bc2ccd, 0xbf3304ca, 0x102ba45d, 0xcece783d, 0xe822c515, 0x20ac124a }, + { 0xe3a2ed92, 0x540fbdcd, 0x3f9dbd6d, 0x9433f437, 0x397752e1, 0x405d2a30, 0x39fdda96, 0xef8289f9 }, + { 0xca813a68, 0xa7ddb8c6, 0x547fb559, 0x34e56453, 0xa126ff41, 0x17de4c37, 0xf5dbee4b, 0xaf01f51a }, + { 0x7076cd0c, 0x5f821a2a, 0x04d3eea6, 0xb2337628, 0x5007b53b, 0x99aba859, 0xfe51ab35, 0x84947d16 }, + { 0x49c1c968, 0x4c48f0f3, 0xed1bfa43, 0xfb7d0f41, 0xf0ae229c, 0x89da4d80, 0x6dd79b29, 0x5e00c5ed }, + { 0xb0082f0a, 0xfa0f5285, 0x7283e3b2, 0xb0525247, 0xa6891967, 0xca18af05, 0xd39acddb, 0x8b6dcece }, + { 0x75bd1834, 0x2370c61a, 0x97219a21, 0x1e1d5e8c, 0xd2c13a0b, 0x5118e51a, 0xf0c505cc, 0x375a4fe0 } + }, { + { 0x3d5b5b5b, 0x0589f6d5, 0xa3c37341, 0xd670ef28, 0x9b9fdb69, 0x645e417e, 0x34b4aae4, 0xf765eab9 }, + { 0x4624f839, 0x15dad0fc, 0x9111f388, 0x55c88aaa, 0x442ffbd8, 0xbe495f3d, 0x44ae469c, 0x30de013b }, + { 0xaac2eb7c, 0xe5794d57, 0xa0ca448b, 0x6a1210e0, 0x7c679e81, 0xf7ffbea7, 0xde3946f2, 0xa9eca4ee }, + { 0xc9f4e052, 0xf416895a, 0x0cb616bc, 0x12e5cfc1, 0x92ed36ab, 0x7c81330e, 0x4f0efa6c, 0xe2c49453 }, + { 0x6c459920, 0x62714bf8, 0xb8a261e3, 0x053756e7, 0xa42cc894, 0x9eb30492, 0x56800cac, 0xb907900a }, + { 0x5f24390c, 0xd7e25199, 0x092cd43f, 0xfe2e825c, 0x9fff7769, 0x09b2696b, 0xd9a104d4, 0xc27fc111 }, + { 0x8adb1b35, 0x12a267f9, 0x4523b897, 0x66eaaa9d, 0xb9676202, 0x46367165, 0x866f6ddc, 0x8a8578df } + }, { + { 0xd973534a, 0x9229bdd9, 0xf870bc7c, 0xaa8aee13, 0xa10181a1, 0x10f5d3e1, 0xb70bcaba, 0x8af542e4 }, + { 0xdc2609ae, 0x5efaa091, 0x36bde5f7, 0x6f6562fe, 0x847fac9b, 0xd4e11101, 0xcdd8ba8b, 0xe0314e9e }, + { 0xcb64a375, 0x8b1d9dc1, 0x63e83023, 0xae29b9b0, 0xdc501c4a, 0x526ebc1f, 0xb4cb680a, 0xe55b8753 }, + { 0xd06b0247, 0x84203428, 0xcf2f04c3, 0x30e549ea, 0x07526bef, 0x4e70b090, 0xf8eff8e7, 0x247c5e1d }, + { 0xe3ac7058, 0xcc88d2d2, 0x1b34d2e2, 0xb6f23bd8, 0x6087dcfe, 0x329cc986, 0xd03984a0, 0xd10a2c00 }, + { 0xb3c8a556, 0x332e4152, 0xe06e0545, 0x3bb6b291, 0x2eeb5851, 0xaa1f5c5c, 0x869490cc, 0xa895bb2a }, + { 0x1d7fcbfd, 0xb9c86437, 0x641aceaf, 0x30e395db, 0x43cd9993, 0xed4a0f7f, 0x05a4ade1, 0x8a174e00 } + }, { + { 0x06f6c8f5, 0xaa7b65e7, 0x824883d1, 0x0426a4de, 0x17eb4593, 0x582897a3, 0x0d97066d, 0x4d6a6207 }, + { 0x7b6c49c5, 0x8a8cf0c1, 0x7cfe2755, 0xf3107513, 0xf6f4810b, 0x3e4e07bc, 0x1d8f6691, 0xebabbe33 }, + { 0xcfefe6f2, 0x85c9c6fa, 0x8627fefe, 0x51f8f2b6, 0xae0b9e9d, 0xe9ec84ae, 0xa5eee553, 0x8c89d70b }, + { 0xf46e9a45, 0x79319572, 0x6deab445, 0xfd1d2456, 0x7bb0ee16, 0xdb4bb4f4, 0x90f34afd, 0x5504ecf4 }, + { 0xcdffaea5, 0xdce1d9ca, 0x7c1a656a, 0xeab322a7, 0x38cc7850, 0xcdf0ae68, 0x91eba6bb, 0xc3422707 }, + { 0xb707b5c7, 0x51aa0c8a, 0x0d3915d5, 0xd5d3a321, 0x17eca512, 0x711135b9, 0x02a41edf, 0x0730519b }, + { 0xb6a57c9d, 0x00832995, 0x2cfb27e7, 0xfe9ada6a, 0x7b53f507, 0x934fad67, 0x040ea387, 0x32b1d122 } + }, { + { 0x869f3699, 0xb7a0f364, 0x2a224e69, 0x219fa3df, 0xbb5b43db, 0x85a3ee48, 0x0f3b20d3, 0x530b39b1 }, + { 0xce48e6b2, 0x5eb8caef, 0x906856ed, 0x10015a5b, 0xde1a90ae, 0xc5e20921, 0x535a150f, 0xd598d4df }, + { 0xb8f11262, 0x58784fb1, 0x65de8c60, 0x181f3950, 0x5eff1757, 0x2307d418, 0xf435b9a7, 0x3b480d73 }, + { 0x887329c1, 0x0fe1c5fc, 0xe5343697, 0x3b8f7c71, 0x9d796838, 0xb60ac1fe, 0x3efb57ad, 0x1a3cafc9 }, + { 0x33e228b4, 0xc45a4a97, 0x5c0d163f, 0x4723ff85, 0x901ee6e8, 0xa556fcd5, 0x653dacbe, 0xcb039bba }, + { 0x1c1a4895, 0xddbd9d3b, 0x6305c0f5, 0xfcdb872e, 0x1c8cf92c, 0xc905dcdb, 0xd12f12b3, 0x8a08cf36 }, + { 0x36366045, 0x1b00aa3d, 0x275996ef, 0x185a2d1e, 0xf1a5d3aa, 0x097b2a88, 0x316a8a21, 0x3e88ecd2 } + }, { + { 0x04dfd426, 0xd8457dcb, 0x611c6c3f, 0xab0594cf, 0xb56df625, 0x46d51ff2, 0x76322d50, 0x00661fde }, + { 0x0117c123, 0x4a1234e4, 0xdaceaaef, 0xda0de23b, 0x4c68554c, 0x89708fd9, 0xb515bb8a, 0x303e5c75 }, + { 0x74349f95, 0x0ddaf2c2, 0x2ab299e0, 0x4fcb2065, 0x6f93ade4, 0x61258430, 0xd2a529ab, 0x66831f66 }, + { 0xf0823bc7, 0xc4b97ff5, 0xd4654764, 0x488ddf0b, 0x00bb1d8b, 0x40e80366, 0x33f7997b, 0xf0022f6f }, + { 0xcad79cd9, 0xf77b16db, 0xadd94936, 0xf8a210e9, 0xde1f34ae, 0xa9b09c22, 0xf934bbdc, 0x76891837 }, + { 0x9b543cd4, 0x46aeee91, 0xda445bd1, 0xedcf72fb, 0x86b1e7e2, 0x214a30fd, 0x5f67a563, 0xe77fd81c }, + { 0x56ac0d36, 0x84f516fc, 0x548bc83e, 0x62e00da0, 0x9736c949, 0x4a62c624, 0x254f3bcb, 0xa63e272b } + }, { + { 0x4ce55c56, 0x52e60ad7, 0xeb3194ce, 0x50384fed, 0xaa0b71be, 0x5aec83a4, 0xb2e5bb6d, 0x5f4b87b5 }, + { 0xfb6bf270, 0x989eefb7, 0xbe447eb2, 0xee56d6b2, 0x0fb602cb, 0x74dc6a16, 0x6708393e, 0x299cfcce }, + { 0x5983adae, 0x7170c129, 0x5ffd2fe4, 0xc7c51be4, 0xab4db93d, 0x9b13f8a1, 0x0576e1d5, 0x0133b97f }, + { 0xd330c619, 0x97cefae3, 0x08a51e25, 0xff52936b, 0x2bb317e6, 0x8e410395, 0xa2abe512, 0xe560f31e }, + { 0x91e0085c, 0x707fb7a8, 0xe5e921b9, 0x75f44359, 0x3a7d4dcf, 0x1d8c9b2c, 0x4f0beacb, 0x7f47a8af }, + { 0x3c39c379, 0x3844ef9b, 0x980fcd5b, 0x1f827adc, 0x3606cc65, 0x027406aa, 0xbb92a12a, 0x4d820976 }, + { 0x61c9b499, 0x0af292b3, 0x4dc48844, 0xd75639ec, 0x6b47ba27, 0xe9b8232f, 0xec2bfc5d, 0xd48772c3 } + }, { + { 0xaa3a7768, 0xa9923913, 0xc9a4253f, 0xf9d54a62, 0xb461a77d, 0xca4cffa1, 0xcc7d6220, 0x7bbe40c3 }, + { 0xcb7b1279, 0x4e37b168, 0x0e2fc824, 0xe0bba404, 0x045bfb7e, 0x9c058a66, 0x7b76ad22, 0x4f4fa3ce }, + { 0xc1e03d01, 0xd6dc7650, 0x3d4d4b28, 0x255b5d53, 0x3cbf2f49, 0x8dfeac4f, 0x86b7cb23, 0xb6d9cef3 }, + { 0x402b43ed, 0x39c30e4f, 0x09c662c9, 0x04e9881b, 0xf70d86c2, 0x9b1a752a, 0xb8a59b39, 0x29885a2d }, + { 0x035473c5, 0x2ed39e06, 0x86c4bffd, 0xdd4ffb36, 0xfd87b924, 0xc420e0d8, 0xed1e4957, 0x7c8100a5 }, + { 0xacc88481, 0x143f7290, 0x2448e118, 0x923bd5cc, 0x0c41c4f2, 0xdf9301d1, 0xce90119c, 0xcbdc928c }, + { 0x4780f6d0, 0xc6c88d50, 0xb28ed989, 0x675eb0a9, 0x8006b4d8, 0xd4c94d1a, 0xc708fbfa, 0x558611e9 } + }, { + { 0xcafcb6c5, 0x742d27cf, 0x326d8490, 0x0c932a56, 0xc6fa5228, 0xf9a43400, 0x9c15e051, 0xfaf1d7db }, + { 0xacf2dcbc, 0x85abeee9, 0x0ec49808, 0xfe7dc863, 0x1e263e23, 0x04d681c6, 0x98a9b7b3, 0x2ad596c5 }, + { 0x0caa2751, 0x846dcb5c, 0x04b85d6b, 0xe8b0bf65, 0xe45cbd45, 0xe65f8e88, 0x62162b5f, 0xf7b03b5b }, + { 0x7e02448e, 0xc18cbf2e, 0xa8f00089, 0x1297fd3c, 0x224dec7e, 0x985bc5d0, 0x014f4cc1, 0x02344936 }, + { 0x7470bf5a, 0x5d4f9515, 0x8877fc67, 0x6af5878a, 0x06004ece, 0xf846c5be, 0xa27d7ba8, 0xcc1b1636 }, + { 0x8a6f7afd, 0x9e55b768, 0x1abbef11, 0xe2dc66cc, 0xb4fb3c41, 0xbccdc9f8, 0xa94bab38, 0xfe515287 }, + { 0x54eccc0f, 0x7d33ca23, 0x616aab17, 0xad32de5b, 0x24823796, 0x5348c258, 0x5143c9d6, 0x55941476 } + }, { + { 0xff926d03, 0xdfe6bd0b, 0x7133d012, 0x1730d8d4, 0x4e2a9b71, 0xf42bd662, 0x2babb7fa, 0x75b93b24 }, + { 0x25c6bb3a, 0xfd0de901, 0x06bfe425, 0x5476eceb, 0x9a8e9974, 0xab6eb44a, 0x01d3d3c7, 0x6ab3381c }, + { 0x897fd029, 0x92aa33fc, 0x636c8893, 0x45bfa236, 0x9e494c98, 0xaad0920d, 0xce1e1ad0, 0x0ec52f2d }, + { 0x05da4481, 0xef53168b, 0x589201bd, 0x27c04b7c, 0xfae00f06, 0x226672f8, 0xd2a24848, 0xdb48b2a5 }, + { 0xaf1e6e52, 0xc0d66eb6, 0x716f6f84, 0x2f993a9f, 0xe08a9bf1, 0x0ba346bb, 0x07796a53, 0xa90c0e4b }, + { 0x30eca339, 0x1f6171b3, 0x513e7e27, 0xab1a77bb, 0xde3c1c49, 0x2696bd6f, 0x91631039, 0x3b8a1b4a }, + { 0xb8384d6c, 0x856458a6, 0x8ca3805a, 0xae1937b4, 0x7a23ec5b, 0x24237653, 0xf7dd0b6f, 0x1e6b5437 } + }, { + { 0xdd201ef5, 0xc7bbae08, 0x04aa9b04, 0xda770b53, 0x1dc59e72, 0xd1055c4e, 0x0db15e0e, 0x8e5ea443 }, + { 0x629137a5, 0xbc9f5510, 0xc526680d, 0xd1be741f, 0x578e2a7c, 0x6297930a, 0xa9ef7a5a, 0x81607f43 }, + { 0x4f322772, 0xb6c64f9c, 0x5d99f6c8, 0xf2b683e6, 0x50f7add0, 0xa31cc440, 0x46688ddf, 0x87e0b044 }, + { 0x19ba3b0f, 0x9c252df5, 0x2b3c7363, 0x22f61964, 0x7ec403a5, 0xf60b0224, 0x6b32ccf0, 0xca66258e }, + { 0xb1c7df24, 0x82ba09e4, 0xefd34517, 0xa137d1c1, 0xbf986d1b, 0x632567ac, 0x10af96e8, 0xd3619154 }, + { 0xac8e70e8, 0xf51bb0b8, 0x9cb7a9b5, 0x4e154450, 0xd1cdf7a1, 0xd3cc4aeb, 0xa3be7bdb, 0xbc602064 }, + { 0xa727791f, 0x4c937102, 0xac298cd8, 0x1ca7a882, 0xf4ad2dbd, 0xa1226327, 0x37d216ab, 0x1963ff50 } + }, { + { 0x883173da, 0x23e6fde8, 0x5cb323a4, 0x7f64be00, 0x904d3e49, 0x50bf674e, 0x6a5d7369, 0x271c1ac8 }, + { 0x6d12d716, 0x1e4aa290, 0x83148617, 0x4a57d1b2, 0xd2d2eb56, 0xfa59047b, 0xcc42aa9c, 0xe75139be }, + { 0x4ce3057f, 0xa14696c9, 0x3df0a01f, 0x0a4347ce, 0x0e761790, 0x56107292, 0x4237b7c4, 0x8bc97af6 }, + { 0x1e8fe687, 0x0827af6c, 0xce989c8c, 0x5625e561, 0xd3fd9e62, 0x24c80381, 0xd393ffc8, 0x26156972 }, + { 0x9cec5f14, 0xb1d5591e, 0x740ef0ee, 0xcb0582c0, 0x84db94ac, 0xc9d0550d, 0x23974ba9, 0xfd225a78 }, + { 0xfc02f9db, 0xc65d470f, 0x4af43a3f, 0x048f5be8, 0x8844b325, 0xc224c1ff, 0x29a88a71, 0xae3bbe8d }, + { 0x14577832, 0x9b6e8d7a, 0x424c193c, 0x6c8ec12f, 0x648e40a5, 0xb3072ba8, 0x952a1e03, 0x01a41c9c } + }, { + { 0x4f9e89c9, 0x059bd6bc, 0xe1724241, 0xb8390db8, 0x6264bd07, 0x7286e102, 0xafe24351, 0xec4d8f15 }, + { 0x1efb82dc, 0xb2d37a8a, 0xae9d98db, 0x22b12e63, 0x2f2f20f1, 0x0671e722, 0x602efc49, 0x285e1eb6 }, + { 0x36ae4c87, 0xa69d53e9, 0xc7e9a3d1, 0x9392a787, 0xeda31c1e, 0xebdced8a, 0x1bb574ed, 0xfc0ffba5 }, + { 0xadaf5b7e, 0x3cbec253, 0x08d4e073, 0xa6ca7185, 0x817749c2, 0x08e552e1, 0x89478771, 0x09fac11a }, + { 0x4d1b95e6, 0x19ab29b6, 0x0df3377e, 0x49df1272, 0xf574298a, 0x5cdeb60f, 0x8b97defc, 0x7da8ffa9 }, + { 0xe22919aa, 0x2b102fea, 0xd6de0fa7, 0xd82fd943, 0xad3fb73e, 0xf314097e, 0x3ffbcb8d, 0x2a2b479c }, + { 0x5c11cdd8, 0x367b92f4, 0x6b4ee87e, 0x81f554b2, 0x046b41d1, 0x4985a82a, 0xc004855f, 0xad1de15a } + }, { + { 0xe7169f5c, 0xbd1ba144, 0xc149b708, 0x7f54185e, 0xbc204785, 0xef6fbccc, 0x68fd45b8, 0xe8932dfd }, + { 0x698b48ce, 0xd2108117, 0x0e82895e, 0x2e1e0f83, 0xbe2640fe, 0x24264ae9, 0x480d9483, 0x058f8811 }, + { 0x0745c2c0, 0xa5de3147, 0xbe466299, 0xd749825a, 0x0d3cb5de, 0xf85ed138, 0x64c07737, 0x95ce0552 }, + { 0x1ff9c508, 0x3afd6c4e, 0xb7158c82, 0xb388f9f0, 0x2a7ff5c4, 0x99a6689a, 0xb4af8235, 0xb1054152 }, + { 0x2b457c79, 0xec319ebd, 0x3b0dfef1, 0x27bbe811, 0xc9088a0f, 0x0156537c, 0x3d0c8922, 0x31004ac8 }, + { 0x182fe7e2, 0x4aa600b3, 0x9380201d, 0xc7c52130, 0x96539850, 0x79e9742a, 0x2046af9e, 0x5bf607c1 }, + { 0xd96c4bb2, 0xcffd6dec, 0xab6b7d91, 0x4180ad19, 0x608ffe33, 0xdf7806d1, 0x7591cf11, 0xb77318d8 } + }, { + { 0xbd0c6ae1, 0xb0c0d491, 0xe6879544, 0x84d9d47e, 0x0a3c547a, 0x31c255ee, 0x5d8cf93a, 0x51e796eb }, + { 0x7ed47493, 0x47b333f8, 0x13c4aa35, 0x3f50b35e, 0x67d9770b, 0x481196b0, 0xe6169cbd, 0x0822fad8 }, + { 0x373cab1d, 0x414bb7bc, 0x4fcf49ff, 0xba1470dc, 0x52fda29d, 0x28fee38e, 0x2f09b1a1, 0xac6bf20f }, + { 0x018deff9, 0xd940e676, 0xde860481, 0x1ed81388, 0x2e321995, 0xd381c800, 0xae39aec6, 0x5c1e0964 }, + { 0xc4f62878, 0xa400869a, 0xf29f2e90, 0x9ac2b169, 0xe64aed0d, 0x68f182cd, 0x4e71336f, 0x4e647b8a }, + { 0x0b500d5e, 0xbac12fa9, 0x96544435, 0x04b74dab, 0xab2d04cb, 0x241588b2, 0xa111b1bc, 0xa36bf9f2 }, + { 0x19dcc2a1, 0xf91ff95e, 0x17d421f3, 0x35834062, 0x1a52ab19, 0xfc73404f, 0xcd4face9, 0x4e65a9d0 } + }, { + { 0x7d905776, 0x7fa64df4, 0x819bf900, 0x46b0febb, 0x9c3b9149, 0x20faae1c, 0x9a93a9f0, 0x4823f136 }, + { 0xdee292fa, 0xee9dbcf7, 0x77d20122, 0xad71d94c, 0xc5f8156d, 0x415f40ad, 0x15ce83fb, 0x55d7c6aa }, + { 0x31ec30aa, 0x722c93e8, 0x68b618a3, 0x1a9e450d, 0x10f91b46, 0xa1ae7c50, 0x36d06874, 0x19cbca27 }, + { 0x3006b80c, 0xd07fc788, 0x0a3b47ed, 0xd52f127b, 0x54588daa, 0x946a4177, 0xa72ec354, 0x1a420308 }, + { 0x8eb890c5, 0x3627eb6d, 0xbfc0dbea, 0xa7a0ca38, 0xe150be82, 0xbebac52c, 0x2fe40cc8, 0x68014ffc }, + { 0x4baaeec0, 0x959d80a2, 0xa4d3c4be, 0xc8020043, 0x5d3789ee, 0x9de0226e, 0x7ec985f6, 0x7a1729f4 }, + { 0x1ffcc6d1, 0xce7d6162, 0x589492e2, 0x774eb246, 0x7f84649b, 0x1f30ad87, 0xebd3736d, 0x66b45d24 } + }, { + { 0x2bfdc739, 0x4435ff09, 0x5abf9a09, 0xa09ba351, 0x23039ed1, 0xf08274f3, 0x44366513, 0xd145df3f }, + { 0x54e6ed6b, 0x5560f57e, 0xe7b1923c, 0x9a1bd173, 0x8257b048, 0x8c391d84, 0x71d63d0e, 0xc43c537e }, + { 0xaad32313, 0x8effced3, 0x1be1fbde, 0xb6810c2a, 0x1d05f895, 0x78785c2b, 0xb3e93cac, 0xcb1a970e }, + { 0xcc379fef, 0x53ba81f1, 0x4479294b, 0x82f4602b, 0xd7bb3747, 0x28218975, 0xa21d5880, 0x1c5e6a04 }, + { 0x96d20a1d, 0x17472cfd, 0xfdd4feb4, 0x7b2e351e, 0x294d3cca, 0xac0a72cb, 0xff199aa4, 0x897afb32 }, + { 0x00eb79ed, 0x86b45ac1, 0x1c661135, 0x39ce9c2b, 0xbe5d6bee, 0xdac61f22, 0x92b80578, 0x94e611b7 }, + { 0xd2e5ca47, 0x520e5d56, 0xca015d2e, 0x17682243, 0x44fa80d4, 0x7fcb5ed9, 0x93b5da78, 0xbe5a1e6a } + }, { + { 0xf64e7bb2, 0xf1b40d71, 0xdb95a0cf, 0xa7427a13, 0x00eeb19f, 0xbfe4dfc8, 0x81c86d91, 0x5dea2b64 }, + { 0xb4a2432f, 0xd6b9ac8b, 0x40edf752, 0x34c85473, 0x460084d7, 0x8f057c59, 0xfc69f8d1, 0x1a5821ec }, + { 0x30c6d9e9, 0x4592b470, 0x015100a6, 0x6088ca9a, 0x9078c364, 0x3f74ce1e, 0xe3a99e5b, 0x49ff4ed1 }, + { 0x2c22243a, 0x76105001, 0xc5dedf8b, 0x5899cee5, 0x0fc4aa65, 0x8cea7e5b, 0xbad31416, 0x9fd5e8cf }, + { 0xffde96b8, 0x2cb2513f, 0x69bdcb75, 0xadda751a, 0xfc878284, 0x41eeec31, 0x32be6996, 0xf338aa41 }, + { 0x08afd0b8, 0xf634fc79, 0xedfdecb7, 0x189835f8, 0xf36edfa9, 0x1bc64382, 0xa9d0062b, 0x48c5ca1e }, + { 0x74828ae8, 0x61347f83, 0x8d1184e9, 0x8ce93f98, 0x77063d03, 0x25d91ee2, 0x734dda1e, 0x0bffe123 } + }, { + { 0x48cd2249, 0xda5e265a, 0xea457dde, 0xfab3845d, 0x07c87c47, 0xf142b310, 0x619974eb, 0x3fda1991 }, + { 0x32deee86, 0x7d3c5f5f, 0xe6083af6, 0x712a9911, 0x02e92d1c, 0xa867c00f, 0x60448c43, 0x94d3ed65 }, + { 0xaa7c3f13, 0xa6da91ef, 0xa90d6687, 0x00750ad2, 0x077fe68f, 0xac66be1c, 0x4700d554, 0xb5f6b43c }, + { 0xb7a0240b, 0xe2e23986, 0xc9475212, 0xc601e7f2, 0x7da3f5b2, 0x0bd4f294, 0x88d75e02, 0xd20e2a9d }, + { 0xf4afece9, 0xb9be01f4, 0x4010957c, 0x8047cd65, 0x81e53b5c, 0xb5bdd825, 0x67f2ed52, 0x09f6c6d5 }, + { 0x838d9fd0, 0x0f0d2641, 0x90a2f8af, 0xf32ec1fa, 0x5bc2d3a9, 0xf8aab816, 0x31e03159, 0x9b74c12c }, + { 0xea6777b6, 0x4ffc3392, 0x62588020, 0x12d1984b, 0x0b5ee289, 0xa9328408, 0xc2f7c7f9, 0x024d72fa } + }, { + { 0x2e4869ab, 0xc983b221, 0x53e81011, 0x40971816, 0xef018c8e, 0x899ef941, 0xb57ad0d6, 0x4623643d }, + { 0x844ca100, 0xf6f30c97, 0x4e55c01c, 0xfc33b704, 0x80032170, 0x87f69c86, 0x0bd0351a, 0x1cae03fb }, + { 0x8c7fde9e, 0xb35c205b, 0x713bfa73, 0x18ce5013, 0x224e587e, 0x7384805a, 0xf74734c0, 0xaae6e9a8 }, + { 0x4b901787, 0x9ea2deb2, 0x2318f61a, 0x7cb7fd28, 0xed12db62, 0x0404e851, 0x4a40222d, 0x923c2bb9 }, + { 0x3857637e, 0x56e215f6, 0x0de5907e, 0xbef391b3, 0xa3a6b9a7, 0x4b69f44f, 0xff010423, 0x234456b0 }, + { 0x849d6444, 0x28a7d0ee, 0x56ec8fed, 0x949f5897, 0x78ae1368, 0x1603c679, 0xfc15c6e8, 0xc2684a29 }, + { 0xdcf9a449, 0xa31c2276, 0xd678c269, 0xba89cd2f, 0x6b0d0715, 0x4b83c765, 0x6daef79d, 0xf4924608 } + }, { + { 0x4815cda0, 0xbdb17fc1, 0x09ea48d1, 0x882839be, 0x17ac3f03, 0xe1991523, 0xc4a38292, 0x8fa8750d }, + { 0xf409da81, 0x804715e9, 0x69ee1c33, 0xee5eed67, 0x4be92654, 0xfbc93307, 0x8538da2e, 0x8e0ae979 }, + { 0x5db8c378, 0xfecf36f9, 0x438c7445, 0x4b4a9cc9, 0x4367e325, 0xcbb85d85, 0x8d072360, 0x2b3080ae }, + { 0x0d2f6168, 0xbc3e881e, 0xd99d9a78, 0xf68f3a05, 0x3d5ac3ce, 0x5b16c5a7, 0x53401e75, 0x30800a49 }, + { 0xe037731a, 0xbea53cd0, 0x5d9da59f, 0xae83f24e, 0xb38823c4, 0xa09a0710, 0x34c2013b, 0x968d9192 }, + { 0x2755ef23, 0xfbb66fef, 0x5535a324, 0x6bb8de77, 0x79b3663a, 0x67c99d31, 0x550e7333, 0x7681b6d2 }, + { 0x7bb74e2d, 0x621c9ae6, 0xd2b20ed1, 0xc5df49b1, 0xb8f9304f, 0x56d1addd, 0x3d72cdba, 0xa35798dc } + }, { + { 0x5f50103c, 0x3b5a6c15, 0x3b70314e, 0xace5e6fc, 0x4d252093, 0xb059d352, 0xb46aba2e, 0x4e72733d }, + { 0xe59b2322, 0x17c297db, 0xf5e29f26, 0x54468a74, 0x2b764c9b, 0xb5f79e65, 0x965b9355, 0x5800a03f }, + { 0x4cf1dc9e, 0xab50c859, 0x446a4dd5, 0x42bc5ad8, 0x446b5c6a, 0x386b2e7c, 0x026357c9, 0x6ad6f0cb }, + { 0x004569f1, 0x24848ddd, 0xced6a93d, 0x2d3f3706, 0x22e40924, 0x039c749b, 0x8f2c5ea8, 0x3f95eb08 }, + { 0x50000280, 0xc814deba, 0x22afacb7, 0x408b4d3b, 0x759bf8b8, 0x3b41eee8, 0xdac665ce, 0xd0780982 }, + { 0xba30fb96, 0x2d94c9ec, 0x9ef85da1, 0xdd074fab, 0xda4e3e35, 0x14634d91, 0x23cbcf31, 0xbba66b2f }, + { 0x0b3ba8d0, 0x7a1aebd5, 0x7638bf10, 0x19e733a7, 0xe34ff3bb, 0x50261a8a, 0xb20d5612, 0xfe940b6e } + }, { + { 0xd63a19ea, 0xeb41d895, 0x876b5431, 0x86fbf81d, 0xfc6f5595, 0x950fff97, 0x267557cc, 0x92c57011 }, + { 0xecdb9bb9, 0x92ad8656, 0x93a731f6, 0xb9a97049, 0xf38abb8a, 0x4f131ffe, 0x755c3348, 0x16e2e197 }, + { 0x426f4d85, 0x85128517, 0x47457713, 0xf2a15d59, 0xa4bf5ecc, 0xbd44e847, 0xbaa98231, 0x0955ee08 }, + { 0x2e922b59, 0x8c0c392a, 0x1ef50af9, 0x45b3e3de, 0x02b73ed8, 0x2716a4e1, 0xd23635ec, 0x4062053f }, + { 0xfaa7f367, 0xd78f6c19, 0xdde9b489, 0xaf6513e0, 0xa724dadd, 0x202f5a3f, 0x76c9ad50, 0x62881aa2 }, + { 0xcb824d3d, 0x706148c1, 0x03231057, 0x61d54219, 0xed6e6793, 0x87eefe17, 0x72fce986, 0x562a33f9 }, + { 0x436c7be4, 0x547594e3, 0x845d596e, 0x782ba5b6, 0xefda9b4e, 0xf6c210be, 0x1796b5b8, 0x0444e2fb } + }, { + { 0x8541ab7f, 0xd1b0e586, 0xf12ea8a1, 0x4f291370, 0x39de3b5c, 0x63e42dca, 0xef998a83, 0x1bb2333e }, + { 0x130b07b5, 0x8a38e897, 0x99a0eb59, 0x778e5692, 0x57afb592, 0x5f85e4c7, 0xb7875c51, 0x71cf79fa }, + { 0x3c6d915e, 0x0e17fed7, 0xbc4514c9, 0x2c31f4bd, 0xea4aefa7, 0xfc78db3d, 0x502629fa, 0x41f3ff82 }, + { 0xc327b68d, 0x4db9d88d, 0x5afee674, 0xd4b26a8c, 0x6b7db1c6, 0x7966ee34, 0xbd07f9c4, 0x28f71f45 }, + { 0x3f5870f1, 0xe2c1b710, 0x36feaab9, 0x32382d56, 0xf69eb850, 0x954f57e0, 0x1a7a366b, 0x3358d575 }, + { 0x4d0a3a33, 0x54021251, 0xf441d96a, 0xd494e299, 0xc9c0be8a, 0x933c0b97, 0x39ad3fc1, 0xb8840efb }, + { 0x11674a29, 0x967f5f77, 0xb9c38bf8, 0xff62f9f1, 0xb54850ad, 0xbfd48d6c, 0x0a97a581, 0x692dc8a1 } + }, { + { 0x2f63b101, 0x517395d8, 0xdc9b2abb, 0x37356f76, 0xfdac7227, 0xeee6410d, 0x9def4dc6, 0x0beade21 }, + { 0x457c3793, 0x20e82c09, 0x110010b6, 0xa91cab27, 0x6dfc2639, 0xd3afca3b, 0x025a8857, 0xf0c763fc }, + { 0x9ebc194b, 0x72548a07, 0x3cca529d, 0x66cb1887, 0x7604a020, 0x4aa9790f, 0x12f87e77, 0x7d067c60 }, + { 0x4d00b201, 0x219844d9, 0x6d629485, 0x490e8962, 0x44b0d0ee, 0x6e97d450, 0xf0f86ba9, 0x5dd95c69 }, + { 0x0b62933b, 0x9c5100a0, 0x13bcb065, 0x3ed52fc5, 0x07663012, 0xda3a999f, 0x902748f3, 0x00122aef }, + { 0x1eabbd9d, 0xb9d236e6, 0x42512a95, 0x025ede3a, 0xf8cc871b, 0xbb908f25, 0xee0d53bc, 0x8dc61a47 }, + { 0x6dea9030, 0x1374c6e6, 0x1ee4bbf7, 0xf9c87cad, 0x3cb23226, 0x94a5b971, 0xe1b6378d, 0xeae9e8e6 } + }, { + { 0x580441d9, 0x9115b553, 0x473673b1, 0xa9e2dee3, 0x180ca19d, 0x76add331, 0x765b9d1f, 0x31bebcca }, + { 0xae91ef72, 0x88473150, 0x27a2d0b8, 0x7cbaf4ed, 0xf8df02ce, 0x0ed3df2c, 0x43c44705, 0x53ad24d0 }, + { 0x65800c15, 0xe25c9cc2, 0x1688a12a, 0xba273e00, 0xb5d40545, 0xf40d9922, 0x5919440e, 0x1f2149db }, + { 0x7ef462d1, 0x74e7c831, 0x37a741e1, 0x628960ed, 0x80104d78, 0xcd38a637, 0xacb12572, 0xf7128b8d }, + { 0xbc21c9a7, 0x602802ed, 0xa37de205, 0xf1dac32f, 0x5428ae64, 0xb7078118, 0x614dfb16, 0xaffa6b2d }, + { 0x4d7d48e3, 0x2a0122b7, 0xdac6e5a9, 0x33159bdc, 0x02d660a7, 0xf7939283, 0x81458649, 0xdb9b7684 }, + { 0x12315172, 0x04a82fd2, 0x940f14ff, 0x6e4ab43a, 0xbe2736f9, 0xd0dd1cc3, 0xea0746d5, 0x3eee16ae } + }, { + { 0x1a033ac0, 0x515cf68c, 0x98e00589, 0x3946f914, 0x14802c73, 0x1ecdaaea, 0xc570c750, 0x5829a29d }, + { 0x18fc9df1, 0x345c921f, 0xfe4a264e, 0x04de69fb, 0x3f28160d, 0xd43b01f7, 0x9fc3e5aa, 0xbe97f595 }, + { 0x6538a7ff, 0x797e9d4c, 0x80e8a24a, 0x8badff53, 0xd08aec53, 0x69d90f45, 0x054f1516, 0x16b96c75 }, + { 0xc8ba209f, 0x74a0139a, 0x4168ce4f, 0x93ae49bf, 0xbae11904, 0xed3c3e8e, 0x46607253, 0x15983c08 }, + { 0x7655cdd9, 0xc65c5ce0, 0x3567a4da, 0xb4428791, 0xf72683fe, 0x1de327d4, 0x735b1f92, 0x0b58c466 }, + { 0xf2a5be47, 0x02d072e6, 0x8ff791a9, 0x6cb3a717, 0xd204b478, 0x36e168db, 0x5656617e, 0x8cc69c8c }, + { 0x710fd80e, 0xe836406d, 0xf534da77, 0xa3151cab, 0x89326bd5, 0xe9ba2877, 0x4fe8ea31, 0xd4cea8ce } + }, { + { 0xc584b6f9, 0x8839cb26, 0x169e9d7b, 0x3b591bfa, 0x3340bdf0, 0xa3734a4d, 0xaf75417c, 0x5d690ffb }, + { 0xf644ffb3, 0xf9734c9e, 0x09737ce9, 0x554814e6, 0xd877fae4, 0xaa710bd0, 0x12d668bf, 0xda2c7036 }, + { 0xd1863def, 0xd09c5ff8, 0xd6294b22, 0x2f6213eb, 0xe64b4010, 0x31865ed7, 0x6143de06, 0xdb7391f1 }, + { 0xed981388, 0x6e43fc01, 0xc8c71f20, 0x51903b55, 0xc9d5074b, 0x94bc02ba, 0xf1cc290e, 0xfbe19f16 }, + { 0xefff1c3e, 0x67e02565, 0x3fce573d, 0xc0acced9, 0xe907485b, 0xb700abb8, 0x504e7b77, 0xb858bff1 }, + { 0xb06f7471, 0x39f8b9b7, 0x95ae227c, 0x23bfe932, 0x741b18ff, 0x9370926e, 0xe9785c7d, 0x5d30c235 }, + { 0x50ca57f9, 0x38dd2adf, 0xf613fc5d, 0x8c294ed7, 0xb2426ea9, 0x5596e0e6, 0x2ad84875, 0x350ad8ca } + }, { + { 0x5f8264f0, 0x64167ec0, 0xd90cd567, 0x57d8268f, 0x51c08f23, 0xdde1cf3a, 0x3cb0e091, 0x5410f3f0 }, + { 0x721bda50, 0x950ba07d, 0xb60d4508, 0x06363cf3, 0xa4601369, 0x445c6e45, 0xbcd5187c, 0x614be58b }, + { 0x7912d9b3, 0xea239835, 0x0cfb3934, 0x31f688ac, 0x22bdb30e, 0x528daed5, 0x1e894f9b, 0x706e0395 }, + { 0x1819c1b1, 0x32af07f8, 0x86a9525a, 0xef48b2fc, 0xe0f66330, 0xb191ddfb, 0x5da891c2, 0xd83f78ad }, + { 0x05f6bd22, 0x2b245f57, 0x8610bcd9, 0x6e412ae2, 0xa4dc56c9, 0xd335d60d, 0x7bf503a2, 0xb21bdbcc }, + { 0x4c715050, 0xb2dde657, 0x147ef33f, 0x36352fd1, 0x4bc3b8ed, 0x9c4c12ed, 0x662d3d49, 0x1d3698d6 }, + { 0x2efffdfc, 0x2eb6f5e6, 0x62dde0c8, 0x9d26bcb4, 0x84e61323, 0x7e70a82e, 0xb32e941f, 0xa254113b } + }, { + { 0xa6ff1777, 0x27d251d8, 0x8540a329, 0x0741430b, 0xc7391e0e, 0x3550c395, 0x2fec9b1c, 0xe86fa21b }, + { 0xe2fe7267, 0x33201f35, 0x6cc96327, 0x289298de, 0x62cb490a, 0xa4f2aa86, 0x69875564, 0xc844cb9f }, + { 0x3e2aa917, 0x6b047dab, 0x96b2cb67, 0xd09ba594, 0xafbac62a, 0x0add2957, 0xd448ec45, 0x39812842 }, + { 0x7233ec1f, 0x67bff4cc, 0x34fc2efc, 0x6ab6d126, 0x83fb8efa, 0xb488edac, 0x8a4b8bcb, 0x6234fb79 }, + { 0x0fecd72e, 0x3c3335f7, 0xeb5d72f7, 0xa8ebea41, 0xbb3829b5, 0xe2c9f088, 0x5e37b940, 0x48162648 }, + { 0xf1c5cca2, 0xfefc97be, 0x37496eba, 0xe4c9c004, 0x8f896225, 0x02cd923f, 0xb68be2a3, 0xfa4f4b65 }, + { 0x314331d8, 0x70a8d9d0, 0x0c922187, 0x951be164, 0xd716d74d, 0xc1cb6b67, 0x647c2a9f, 0x1594601a } + }, { + { 0x94203d96, 0xf446beab, 0x0f8b20bc, 0x389c59ef, 0x242d503a, 0x1baf43c8, 0x3600cf74, 0x1de5e5ef }, + { 0x97a63b7c, 0x3477df53, 0x98cd129d, 0x386c7fd6, 0x820b196e, 0x4eb81e8b, 0x205bd83c, 0xc0286a83 }, + { 0xe89c538c, 0xaf6aae3c, 0x8104897d, 0x65453323, 0xef8fc678, 0x80e12904, 0x66939201, 0x5e9ba64f }, + { 0x9c8f7951, 0xf6e54589, 0x687be629, 0x648ba88c, 0x520841c5, 0x302871a0, 0xc25a7137, 0xbc0a9da6 }, + { 0x94a51875, 0x39699a79, 0xaa4a5339, 0xbba551a6, 0x7be6c38c, 0xc7593768, 0x799d2123, 0xcfba86ec }, + { 0x9514f3f1, 0xe4f7e94a, 0x5f051133, 0xcdb33cb2, 0x9a7cff38, 0xe5e1b54a, 0xd69d469c, 0x486dbd33 }, + { 0x897924a3, 0xe2765105, 0x25436a0d, 0x363607d0, 0x2599633d, 0xfeb62269, 0xe3915522, 0xe5578e01 } + }, { + { 0xf7c8d214, 0x4bd95e57, 0x3a9f3a70, 0x93167d4d, 0x7f35b392, 0x7e459e00, 0x1bd8cbfd, 0xa2ba311b }, + { 0xc3b4afa4, 0xb2666351, 0x5a2790f0, 0x6a9bd3c0, 0xf4656b2b, 0x57a7d3dd, 0xc1cb2779, 0x8ac87671 }, + { 0x22fa1ac7, 0xd8a47088, 0xfa7a7ac6, 0x60e6c97a, 0x0f6e93a4, 0xb34a3b69, 0xae5ca04d, 0x121396b9 }, + { 0x9e5056b3, 0x91208a5e, 0x77f6a5bf, 0x65d8ce69, 0x57d8e680, 0x4a724283, 0xd622ffc6, 0x470969b6 }, + { 0x9c10a010, 0x93b62255, 0xde58d702, 0xec0d4d4a, 0x01b2f957, 0x86f0b84f, 0xa06604fa, 0xddea1447 }, + { 0xeca81c4c, 0x0212f154, 0x91e85b88, 0x5de81230, 0x76f2fed7, 0x93d938fa, 0x1a9064ad, 0x843e29c3 }, + { 0x6d511162, 0x673545e9, 0x6273f869, 0xea9b2d81, 0x66cefe10, 0x858e956f, 0x020d1fd8, 0xaca8b918 } + }, { + { 0xb215047f, 0xb9cad797, 0x115a2022, 0xac8c2cfe, 0x137eb97d, 0x31db80f8, 0x63e24c78, 0xe4c82b42 }, + { 0x3a87484b, 0x3bb2bbee, 0x2d21e574, 0xd8951ba9, 0x5d145a36, 0x26128d8f, 0x192584dd, 0x304ac2a1 }, + { 0x81663073, 0xb3f6ac8f, 0xfb22388b, 0x146fad89, 0x2f7e9fef, 0x094601e8, 0xb146faa0, 0x45e9b342 }, + { 0x8d01f6bc, 0x3b482017, 0xd83071fd, 0x658d6b53, 0x82a395fa, 0xb39b15a1, 0x7802c350, 0x9fe99597 }, + { 0xb9595963, 0x9724da84, 0xdd078337, 0x6f36029f, 0xa4b75a7f, 0x539abc90, 0x972fb4a7, 0xff29f0e7 }, + { 0x3f2b4a48, 0x1b096082, 0x800144af, 0xa3cd3f29, 0x7f4ddf99, 0xaeaf6abd, 0x585faf54, 0xc6abb2e5 }, + { 0xd4c10800, 0x4e4d76dd, 0x41a1a77a, 0x7a696586, 0x48deff36, 0x6c547df2, 0xd8f94c62, 0x4425b8c8 } + }, { + { 0xc253f1fd, 0x837f3b31, 0x0b5ccb2c, 0xe3191c69, 0xef0262dc, 0x7a36afc3, 0xe2aac82c, 0xeb8b48d9 }, + { 0xdb01f19c, 0x94a9b1f1, 0xe45b89be, 0xd967f07c, 0xda369655, 0x4b4fde39, 0x50301229, 0xa999282d }, + { 0x5c451b88, 0xa8ed1424, 0x1f28a883, 0x21e8058c, 0x36945b83, 0x825d76ff, 0xa767e753, 0x65ec9f62 }, + { 0x797e3bc8, 0xc1e87948, 0x39a0a9c7, 0x10cba850, 0xc107360a, 0x64c93e68, 0xb40d111c, 0x809e4b58 }, + { 0x22d23cf3, 0x5adbd67a, 0xbd94048f, 0x3bcfb5b4, 0xc0b7b35c, 0x778fa0f9, 0x9482d523, 0x0ae3280e }, + { 0x69fe1cc8, 0x464dcbd2, 0x5f11c964, 0x1d8b0886, 0x5b9cef4a, 0xee230459, 0xaf385e86, 0xfbd94ab7 }, + { 0x3953c1ea, 0x32adcdd4, 0xb958d003, 0x870cf263, 0xa99378de, 0xe7e4d956, 0x7acb3b61, 0xe790b88e } + }, { + { 0x829ef43e, 0x619388f0, 0xb3a1aff6, 0xdfe0a153, 0xd06fd2e2, 0xa81a36fb, 0xc55c4bef, 0xb3fdd022 }, + { 0x4e6b3c8f, 0xd69af789, 0xdfdc14e9, 0x549f2d8b, 0xfd67b5f4, 0x76794a70, 0x6e126224, 0x88fd42f2 }, + { 0xf7047035, 0xa905db3f, 0x49b4e963, 0xa3759c8f, 0x89a78818, 0x2c50346d, 0x8e2d5e83, 0x127915e4 }, + { 0xf48078e8, 0x1a4ca7ef, 0xfc4ee78e, 0xdd6f7982, 0xe4afd40c, 0x73cada61, 0x6547c764, 0x1c17d44c }, + { 0x8f6d2fc3, 0xda86e5b9, 0x93fd6d0d, 0xd0b1f0b2, 0x0a6909f4, 0xdc3b5e24, 0x90fced49, 0xf624b0cb }, + { 0xb4266815, 0x4f8ee3cd, 0x53c7dc14, 0x029ad9b3, 0x8188c70c, 0x4ed0d4a7, 0xfab23b81, 0x68c3f9cb }, + { 0x3fdd8763, 0x39c6e87a, 0xfda0dd8b, 0xef70ca8c, 0xe75125c0, 0xb2cd8fb4, 0x08eb626e, 0xdde63074 } + }, { + { 0x17b23292, 0x606c1866, 0x9c18cca3, 0xee3a27fb, 0x3995b5c6, 0xdd3302e4, 0x9e27dc11, 0x5fbc67c7 }, + { 0xcb105782, 0x34c7b524, 0xe3d46ab3, 0x66d18f3d, 0x3548dcf4, 0x68f6e040, 0xb60411df, 0x078b5f25 }, + { 0xac587cd1, 0xf32c95ba, 0x7cdee74a, 0x1dcc3fcf, 0xc36d8ac3, 0x53bee54b, 0xf0ac4193, 0xe65bd8f3 }, + { 0x479b1639, 0xe50a52f1, 0x53d42f44, 0x27897116, 0x428a3068, 0x74779849, 0xcab2a9c6, 0xf0f83a6b }, + { 0x9b45bd8d, 0x557e0d6f, 0x8102e9fc, 0x934ab0f9, 0xa15136dc, 0x0553e370, 0xaf9e4586, 0x96dda777 }, + { 0x1b13233d, 0x8782b3c7, 0xf6c35a78, 0xc3cb451a, 0x335bda6a, 0xc7052bd0, 0x5ac4f651, 0xe693e88c }, + { 0x7c055aa1, 0x8c3b1ba6, 0x8d63f4b3, 0x2947c116, 0x0047b9db, 0x445c1a9f, 0x68f88f78, 0x942cb5ef } + }, { + { 0xd805f7b7, 0x5a8dcc40, 0x553ecc20, 0xfb603dd2, 0x39753deb, 0x548a6f28, 0x67ed99aa, 0x78fd3ed0 }, + { 0xe50049f0, 0xde3fadfe, 0x3c87dc57, 0xead7b0ee, 0xae277a2a, 0x0cfbb0a6, 0x3847a513, 0xc69acd80 }, + { 0xb1d5dc3c, 0x66e9b52f, 0xfa9d4ed9, 0x4e29e3cf, 0x0d463727, 0xfd384d8f, 0x65c48f17, 0xbb2aa27d }, + { 0x76ac355c, 0x003f9aff, 0xdee49cf5, 0xbcc92cf6, 0x46778f2e, 0xb914ed52, 0x0b5019c8, 0xde41e619 }, + { 0x63c34226, 0x931232a8, 0x3b02c1ce, 0xda47aada, 0x761aadbd, 0xf8922f26, 0x428154ee, 0x54a868c2 }, + { 0x71b944af, 0x831b381f, 0x6c540c8b, 0xf63eafd5, 0x52cd4dc0, 0x9d1cd861, 0x2d581bc3, 0x7a668bcc }, + { 0xc0471789, 0xa99aa85e, 0x4180c9f0, 0xc2d74dc5, 0x3da366da, 0x2be54eeb, 0x7f112a06, 0x7cadbfed } + }, { + { 0xaae29aa0, 0xfaf5e052, 0x36eaf2dd, 0x109bbcf6, 0x7a32f80a, 0xdcd774b9, 0xa73cc8cb, 0x020120f2 }, + { 0x35dbdb7c, 0x1df8d6c9, 0x9d31e334, 0x474ca376, 0x85d72d99, 0x9d5891d4, 0xac6bc84c, 0xef1edc41 }, + { 0xa0a12ae0, 0x39087695, 0xce7be7de, 0x4f4cc09f, 0x2ce6e6c8, 0xe302f577, 0xd1bf201b, 0x4c67b486 }, + { 0x0482e45a, 0x8c588bcd, 0xa1784b77, 0x01e5afab, 0x385ff123, 0xb9048cf6, 0x5b64b460, 0x82beae14 }, + { 0x53bdad3e, 0x71e76e58, 0xa33e2a3d, 0xf04c957f, 0xbcac35c3, 0xc13b0d6d, 0x5aa18177, 0x5376c3f8 }, + { 0x8fd59904, 0x1ac23373, 0xa7d95104, 0x4ea0e6b4, 0xc9751244, 0x21291029, 0x39ba0a58, 0x03ff99b3 }, + { 0x27ce22c1, 0x61a59a1c, 0xecb951b1, 0xbec43d3c, 0x6f1b816f, 0x71031ad6, 0xa831c3bd, 0xfd563429 } + }, { + { 0xc1c4a945, 0xc5e5fa84, 0x428871d5, 0x64e0cdfb, 0x8a437645, 0x3891bff3, 0xca4a09dd, 0x34a1f315 }, + { 0x1d11a401, 0x2c203bbf, 0x1af265b9, 0x13d6e524, 0xaa82fc1c, 0x79158bb6, 0x04504769, 0x56998ddc }, + { 0xdcb5ce82, 0xd7f016bc, 0xf7ac3b8f, 0x01a80e14, 0xeb67b2d6, 0x3a7164e5, 0x697e95fc, 0x48e71fb4 }, + { 0xa97977ac, 0xa53a014f, 0xa340a5eb, 0x2582fbaa, 0x07bab09d, 0x946a7d59, 0xb0663162, 0xaec8e0c7 }, + { 0xe77e366b, 0xaeb9162a, 0xcca11a3d, 0x6e277e42, 0xc622d3df, 0xec6c75d3, 0x486f5ebf, 0x6569c183 }, + { 0x038ad1a1, 0x92ebd412, 0x02ecb91e, 0x5c328807, 0xf83da629, 0x889f30a8, 0x9f64ef2a, 0x753083b0 }, + { 0x0e3f90dc, 0x136957cc, 0xb90ee7cb, 0xad918b75, 0xd8f30259, 0x070fb929, 0x970da771, 0x10dd6e58 } + }, { + { 0x7fff17bb, 0x7d0fb982, 0x64fb1d31, 0x801ae173, 0xc5494808, 0x82f639b3, 0xb08f8be7, 0xe177e1aa }, + { 0x22fac75d, 0xe296fdc7, 0xc7ea5f7c, 0x543d75ac, 0x0aa41471, 0x0de52abe, 0xc5be0766, 0xb69b3cc9 }, + { 0x58a6837d, 0x86d09580, 0xc888ae86, 0x59a9dbfd, 0xbc6822b9, 0x00408db7, 0xa8f132cf, 0x35f53d02 }, + { 0x4adb8be1, 0x78ab1d2b, 0x58eaecca, 0xe6fdb954, 0x086292c5, 0x929e83c3, 0x49cee217, 0x30f798ae }, + { 0x11902b99, 0x2f9d30f1, 0x065f1519, 0xe924a28d, 0x5f6ed7ed, 0x5e3070af, 0x922f3bd8, 0x33ca22cc }, + { 0x16bccb3f, 0x083bc5db, 0x2717bdfd, 0x1cb44f6b, 0x04eb1d12, 0xd68fb3ff, 0xf18f5279, 0x02617755 }, + { 0x1f4f07e0, 0xae0ed9e7, 0xac4583d9, 0x5c846729, 0x6c8b8ca4, 0x64c0f711, 0xef2c6393, 0xd7736f0f } + }, { + { 0xbccaea79, 0x916d9cca, 0x6f6c174b, 0xa509bea0, 0xfd98ca6b, 0x798ed2a0, 0xa13c12f8, 0x24c09419 }, + { 0x45b0805a, 0x4534727c, 0xa7330146, 0x66202e8d, 0x18b0aaec, 0x497d6dff, 0x377e3e4e, 0xc4aa4662 }, + { 0xdf113db8, 0x2a5f3151, 0x9e231c7d, 0xf2cbabc1, 0x904432de, 0xe572ade2, 0xda149538, 0x764ec80a }, + { 0xd3e4743f, 0xad3cb3b9, 0xe4de5a8c, 0x362a1644, 0x27b0cd95, 0xc99fb49f, 0x28113b09, 0x4d512283 }, + { 0x614b8768, 0xcd42c400, 0x0e4b8e42, 0xbc4287c9, 0x8761ba46, 0xa01acb20, 0x26632b54, 0x0d1755cd }, + { 0xa4de3dfb, 0x6cf5d931, 0x2b40375a, 0xb9ac1ad0, 0x4e2a7093, 0x9940fb7d, 0x4a526d30, 0x7c5ef62b }, + { 0x372cf61d, 0xf6d5fcf7, 0x1d14bd8d, 0x94579792, 0x34aa397c, 0x5ca62a08, 0x35a86b02, 0x14c75383 } + }, { + { 0xae683995, 0x3e84150e, 0xe0d3b2a0, 0xa992c8ae, 0xe9e7b33b, 0x76ede638, 0x3c686061, 0x36216c8d }, + { 0x0a90129f, 0xb462da31, 0xd50d3633, 0x1214fb62, 0xe5161a97, 0xb06c0d3e, 0xaf89e3f4, 0x9e107830 }, + { 0xf6bfb46e, 0xb16b9ed1, 0x493b6514, 0xa7dff787, 0xdf8e488f, 0xc8ce8222, 0x8fd52f6a, 0xa6b4afee }, + { 0x00e0900c, 0x74f6faa8, 0x38fe0714, 0x11d68e12, 0xb2be4db0, 0xc50baf27, 0xc2a971df, 0xfcc60b2c }, + { 0x558997c0, 0x2e9f279e, 0xc7da06f7, 0xb2d5a66c, 0x888961dc, 0xc0716af3, 0x465afda8, 0x9563cf7e }, + { 0x8aa01158, 0xaa3a11b2, 0xbc46eddd, 0xe4d30f46, 0x2c48ad46, 0x2f697c2e, 0xb052aa2f, 0x4258d424 }, + { 0x900a7e76, 0xc9e24e68, 0xd103e0b2, 0x905e8357, 0xef994df5, 0x19d19bef, 0x91177797, 0x817a5f93 } + }, { + { 0xf0680a39, 0x56ec06e4, 0xc276f5bd, 0x375ef775, 0xe4e31ffb, 0x335fae5e, 0xd0540873, 0x6d6a91d8 }, + { 0xa6e75e8c, 0x3eaed6c6, 0x7d1aad1d, 0x431fa0bc, 0xe7dc54cf, 0x7d01a58e, 0x9b373b3b, 0x05972443 }, + { 0x2240d9e7, 0x0a99f104, 0x9e7b0d87, 0xe3dd4ec1, 0xbe262434, 0xcd7e9368, 0xda172b64, 0x0c80f89f }, + { 0x8a32479b, 0x813870f4, 0x9602215f, 0xf473b93c, 0xf3bd2430, 0x1c18aa53, 0xa89a2bbf, 0x07e846ae }, + { 0x723b2e62, 0xf5ade945, 0xcdd2acf2, 0x910e35e9, 0xdc538032, 0xc147e3b1, 0x15204ed3, 0xe69493e0 }, + { 0x51271a23, 0x1d4c5b74, 0xa0e926fd, 0xa00e2971, 0x70287ae1, 0x29115d0b, 0xf3489230, 0xbcf17a85 }, + { 0x09b3414d, 0x1d165016, 0xc6ec18d5, 0x9ea6765b, 0xe63744ac, 0x88cc920d, 0x816b6d20, 0xb749526e } + }, { + { 0xa9558de9, 0x563a30c3, 0xf131a8dd, 0xfc83e745, 0xfddb8c80, 0x5d119a00, 0xddd1b73f, 0xb7b0e877 }, + { 0x94f78ac0, 0xe1912c33, 0xbbe07a7d, 0x27b76ab6, 0x299f434e, 0x02e155db, 0x518eec1b, 0xcb5ae470 }, + { 0x7e337565, 0x38ef431d, 0xe513ef75, 0xf56f508d, 0xe9feb1c8, 0x99ae4d92, 0x4abae804, 0x2fe114ba }, + { 0x9e083058, 0xbb7c0f1d, 0x69efff2a, 0x17f3f27a, 0x6411414a, 0x82ff5fcb, 0x7e8c4eaa, 0x2f89d135 }, + { 0xa4246ea7, 0x803aff5e, 0xfc1d9c26, 0x2e425c19, 0x71852375, 0xf9900481, 0x317571d0, 0x512de239 }, + { 0x27278683, 0x2f50a60d, 0x0fec7db6, 0x81d67782, 0x6be16992, 0x0289ac47, 0x72ac7cb0, 0x011060bd }, + { 0x51561a11, 0x6e1d88c1, 0x8d63898e, 0xb6302a29, 0x45508af7, 0x7ab02923, 0x3300b64c, 0x18657075 } + }, { + { 0x93f705e7, 0x0b147235, 0x4579614e, 0x7955dfd5, 0x859d3964, 0xcb02ffd0, 0x91eb2e37, 0xf21aa087 }, + { 0x9cd1ba88, 0xfdf4f40d, 0xa5d82ffa, 0x402f925e, 0x02410072, 0xe9ab67ce, 0x57489af6, 0xa5c28f89 }, + { 0xdf5c6569, 0x6f6b4a1c, 0xeba0b602, 0x52c4d57e, 0x873757fa, 0x211ecd13, 0x325220ff, 0x17684f9b }, + { 0xbf48a26b, 0x1164e929, 0x68f2aa93, 0x2ae3ff90, 0x2fca69ce, 0x46ea779f, 0x149abe71, 0xf037d66d }, + { 0x2f692586, 0xc4786748, 0x022ed0d8, 0x35b30c7a, 0x4d42960f, 0xab8f12e6, 0xf1583d9a, 0x648650b5 }, + { 0x879b353f, 0x39d49315, 0x59a5e626, 0xa0536bd4, 0xc14eae98, 0x590e874f, 0xb3facb2e, 0xf40c444a }, + { 0x87f06816, 0x73316158, 0x8e8994ce, 0xc72cdabc, 0x98b88662, 0x51a7ca8e, 0x4bc81e4e, 0xf35ae046 } + }, { + { 0x3b5b086e, 0x6f799891, 0xf152c74f, 0x8ad181d5, 0x7057c78a, 0x6c289635, 0x3ce24060, 0x722c288d }, + { 0x1006d5aa, 0xabcec468, 0x82d3529d, 0x53da6135, 0xc62d75f7, 0x15421578, 0x271025ff, 0xad983b85 }, + { 0x39e3822a, 0x6ded14ca, 0x6c14077f, 0x923e1de4, 0x5c26dcca, 0x0ca1fae8, 0x9144978c, 0x3aa5ffaf }, + { 0x6a606b33, 0xbaf2a768, 0x6b05c4f8, 0x9de48ab4, 0xb5bd4d6d, 0xa8c57a5c, 0x429d6625, 0x035270c5 }, + { 0x44ec8799, 0x9faf6948, 0x15a7ccf2, 0x8ca09a6b, 0xe5c2a350, 0x7b14fdbc, 0x757e7d54, 0x8beefdfe }, + { 0x6404be41, 0xf3602368, 0x0a2388d1, 0xe309fac3, 0xbf1b9363, 0x349b5d55, 0xc97fd510, 0x7bb679c3 }, + { 0xbf51ea31, 0x7cfcec24, 0xb0fe8f2b, 0x0189b700, 0x29f06aa5, 0x614623e3, 0x19c3fd69, 0x6507077a } + }, { + { 0x33544daa, 0x4eb55b5d, 0xb9ba06a8, 0x7a1779de, 0xaac53436, 0x15d46ddb, 0xc20829a6, 0x4def4316 }, + { 0xa8433bf8, 0xfa3b3cc7, 0x2553a9a9, 0x62c92d3f, 0xbd133110, 0x92394b6a, 0x773b28ef, 0x7f278998 }, + { 0xe98ed40c, 0x70dd13f0, 0xa1fed2d8, 0x32999d19, 0x99b6bdc8, 0xb6c50812, 0x09d4cef6, 0xff970739 }, + { 0x7a05b868, 0x3b70b170, 0xb2c5ae8f, 0x99d39a25, 0x588d1612, 0x7affbd2f, 0x3223c05a, 0xbf4a2ff9 }, + { 0x14b1dd73, 0x2fd2c36a, 0xbe7e3cd9, 0xef1a83dd, 0x6b5ebac0, 0xf664740b, 0xf770ad79, 0x916afecc }, + { 0xe7b72067, 0x8a299277, 0x7ceeb323, 0x1d0a35b3, 0x963158c5, 0xf34dcdd5, 0x7d51e045, 0xf0cba700 }, + { 0xbc2e26da, 0x2d7cf4d2, 0xb1fe2ec7, 0x739c726b, 0x56f096a9, 0x304a33af, 0xfad91e73, 0xa052219a } + }, { + { 0xbeeda331, 0xeb9064fa, 0x826ecbd7, 0x350672d4, 0xf3e89f89, 0xa6b8bf8b, 0x770ec306, 0x3d6ec7d0 }, + { 0xe6d4084b, 0xa98ef16c, 0xf5d90c69, 0xd8ff6cf1, 0x40515d2d, 0xa66e0a26, 0xc5026f42, 0x49b8bd57 }, + { 0xcec0399f, 0xb5ca3155, 0xa97efc2f, 0x026a1550, 0x74bcb8b7, 0x4ea20409, 0x8626edcf, 0x981007ac }, + { 0x30bc8d63, 0x72fab04d, 0xdde894fc, 0xbf7de506, 0x96c87efb, 0xb2d34273, 0x240ac85c, 0x8acc1c1c }, + { 0x52968b7c, 0x0557f36f, 0x0ae5f576, 0x3e62a412, 0xb2664dd4, 0xaef0f476, 0x7c548e2a, 0x530a4f59 }, + { 0xcd106992, 0x4a3c4f25, 0x34f20563, 0xb76f3555, 0x6b7464f7, 0xec4f76eb, 0x0bd8c988, 0x49c492b1 }, + { 0x92fa08f2, 0x144d3f7d, 0x7d58ced2, 0xd22b7cf5, 0xf0187b42, 0x55d861e8, 0xcd019afe, 0xe9a1f11d } + }, { + { 0x9a436489, 0xebb996cc, 0x58762ba9, 0x675ba671, 0x3493bdab, 0x7e0ea401, 0x44f724b1, 0xd6024b8c }, + { 0x4e1846b2, 0x5181068b, 0x1a54b8e7, 0x9646ded0, 0xfe456268, 0xd1b00fad, 0x05dbc6c2, 0xea34ecbd }, + { 0xf7d502f0, 0x1d3aa8c1, 0x58d37b4b, 0x694d554c, 0x2b6076f2, 0x8748bc5f, 0xf8d82aa7, 0xa8c4c813 }, + { 0x2e751abd, 0xf08fac6e, 0xd35325a7, 0xcc47fc1b, 0xca975ec8, 0xbb331169, 0xb990cb9f, 0x24573b56 }, + { 0x22e24f5d, 0x90161c2e, 0x9f6f29b8, 0x64a3b6c6, 0x0b014332, 0xdd078178, 0xd0af41d7, 0xe8c2e047 }, + { 0xca6768e5, 0x9e824241, 0x8b232668, 0xb5b62a53, 0xcbe29e50, 0x52f4a2fe, 0x79ae4a35, 0xda534d00 }, + { 0x167387d5, 0xeb0490e9, 0x95090fb2, 0xca19e74a, 0x1c04dfa9, 0xc5f38f5b, 0xe00cabff, 0x0c17ba81 } + }, { + { 0x6631fc79, 0x52c30423, 0xe639f29b, 0xffcb6692, 0x85a3327a, 0xd5401982, 0xcc87e1a8, 0xdb1114b6 }, + { 0xa1b081bb, 0xd244bdd8, 0x17445435, 0x11600396, 0x4fc04562, 0xb7b8d8c1, 0x3dd9e83d, 0x5388fc2c }, + { 0xbf922504, 0x57f8841f, 0x130a604e, 0xe5eaa7e0, 0xd5ab1d0b, 0xf245fcdb, 0x5513cac3, 0xedbd9ec7 }, + { 0x49f054b6, 0x9f3afcaf, 0xa2ffd2a2, 0xab25bc2d, 0xe5c78937, 0x95feba83, 0xba62ccf6, 0x8f0be368 }, + { 0xa767cab3, 0x994803d8, 0xbde221df, 0x8e1e71c6, 0x8b78c799, 0x91f0aef0, 0x36c2fc52, 0x3161862e }, + { 0xff6f24fc, 0xa69ff27c, 0x119104a0, 0x51d902e8, 0xf7b6be77, 0x5ce92ecc, 0xaaad6af3, 0x1da6fff2 }, + { 0xffd1c2c7, 0x5da2b662, 0x9d5eebb2, 0xae3ec072, 0xa91996c3, 0xa53a8d2e, 0xf2407c14, 0xb22af9a7 } + }, { + { 0xc5714cb5, 0x8591b545, 0xd2db5bdb, 0x9e9b936c, 0x124db819, 0x2bf9b440, 0x7708843d, 0x7436f47f }, + { 0x74d277af, 0x7a09629f, 0x2c400241, 0x081b6e23, 0xc0195a28, 0xb5aeaff4, 0xb567feb5, 0x3c12ee9f }, + { 0xbda7c475, 0x07c805ba, 0x461488ee, 0x41494226, 0xa7533642, 0x55341d3d, 0x42d59e76, 0xdcaba05f }, + { 0x55ebdbd6, 0xe07b35da, 0x00737a47, 0xf5538726, 0x4e150f89, 0x47581944, 0x16d60f6c, 0x7d50492a }, + { 0x2d678829, 0x33c9861d, 0xe7419c54, 0x963b2e25, 0x0919ffb8, 0x2e7418c6, 0x00f595dc, 0x1b2734b3 }, + { 0xfa8c3a83, 0xa182c951, 0x203a4716, 0x10994d1a, 0x97234f60, 0x779a3fc0, 0xa2f72c49, 0x4811ae01 }, + { 0x926de2e3, 0xc9d02e7d, 0xe745b89b, 0x7210a4fa, 0x58228e67, 0x974bb00b, 0x8df1b6a6, 0x474d3460 } + }, { + { 0x8d63e29b, 0x37da4019, 0xadbce1ae, 0x8f13b4a0, 0x6485458e, 0x005d7952, 0x11129a0a, 0xa5b7661e }, + { 0x297c58be, 0x3d5b7465, 0x33012b97, 0x61e9f795, 0xabd3a260, 0xa7df3f4a, 0x9907dbd1, 0xfe9d06c7 }, + { 0x4bfe1dfa, 0x7f7c44d6, 0xbdb02117, 0x584c21f0, 0x0a3e923a, 0x0a3faf1a, 0xf3e5a5bf, 0xdda49418 }, + { 0xcb187d93, 0x3dd4bbf6, 0x656bdf5c, 0x818e19a1, 0x2917357d, 0x3116cff0, 0x464b0326, 0x0c261132 }, + { 0xb656ca93, 0xa28cc08b, 0x277bf86e, 0xd4f5ad69, 0x2e9a1c82, 0xa5ee39f9, 0x3f71d611, 0xd3ea2e11 }, + { 0xa2f104c3, 0x45ebae69, 0xdeddfa82, 0x3d4249ee, 0xbcfb51d1, 0x867ea762, 0x48e8a89d, 0x2844d5c1 }, + { 0x82ebbae2, 0x05adaa3a, 0xc0a3f7b5, 0x7b293b80, 0xa94e765f, 0x4120818a, 0xc50b274d, 0x22688c9a } + }, { + { 0xc3fc0b44, 0x8bcd8873, 0xfd4fb8e5, 0x6a9efb07, 0xaf2d5eb8, 0x995aae51, 0xa1521e70, 0x52774766 }, + { 0x7b54eba5, 0x6668a386, 0x75ab18e1, 0xdc4d0e40, 0xee4b3387, 0x17b838e0, 0xc8f32068, 0x8f50d4b5 }, + { 0x09204da6, 0x9ef60809, 0xbc8000cf, 0x337a67fa, 0x9ca7108c, 0xc757cd3a, 0xeb08ba82, 0x7e6be6d4 }, + { 0xc5a39182, 0xb0620854, 0x8015feed, 0x995d6017, 0xd0360d35, 0x3a814e7c, 0xe6573534, 0x59710baf }, + { 0xf99bacff, 0x3d3b0b0a, 0xbe43aa97, 0x5fb0a3ae, 0x3d2df3b8, 0x853dc3b9, 0xafd2a5a2, 0x4f1af404 }, + { 0x61ae5f7d, 0x44573fab, 0x90121a80, 0x3f0f4088, 0xc2123f61, 0x11abc7af, 0xa359b722, 0xddbfb1e5 }, + { 0xa8225e73, 0xcd094275, 0x4f4d1009, 0xb870665e, 0x2656e309, 0x63613320, 0x9da8e9e2, 0x5bf17a9a } + }, { + { 0x63307f75, 0x20e71142, 0xf2edd250, 0x489c3aef, 0xa00a6f57, 0x5d10c01c, 0x324b9253, 0x93835be0 }, + { 0xa174b176, 0xf1acf07c, 0x0638fe83, 0xcdf6812d, 0x76a8fe28, 0xc8fb9566, 0x61b2de0f, 0xe7e572db }, + { 0xa70101cd, 0xd58fcb3c, 0xa08d7a92, 0x707f7a51, 0x087f7394, 0x52ec367f, 0x4ad2575f, 0xcf0d9422 }, + { 0x99f9db0e, 0xd63b7d0b, 0x87714087, 0x32f4d997, 0x02ae8cba, 0x6c162b9f, 0x17c6c72e, 0x6870a1ff }, + { 0x1d859421, 0x0cad1862, 0xcc75b1b9, 0x3e7cffb2, 0x2284bd70, 0x3863341e, 0x1963063d, 0x4d37d33e }, + { 0xd612cd20, 0x43d28fc6, 0x0233b726, 0xaa330aa2, 0x01201406, 0xd4d58e80, 0x214f84c6, 0x2b1ab302 }, + { 0x04a91c83, 0x53597fe5, 0xaf7019d6, 0x8fb705d4, 0xd6bff9a0, 0x41220802, 0x7b7733a4, 0x97e00d32 } + }, { + { 0x40595c86, 0xf6930099, 0xbd743c7e, 0x052b2a49, 0x520434cc, 0xe84013cc, 0xb4b3b5b7, 0x2145a47c }, + { 0x1bbec7a8, 0x51054b48, 0x4540c4ce, 0x410ea37e, 0x22d77338, 0x53ea7838, 0xed1cc935, 0xb53c4e11 }, + { 0x1ca8445c, 0x68dbb70e, 0xb9edffbe, 0x798d10b0, 0x1173177c, 0x8c46979f, 0x7a25f06d, 0x8df73f0d }, + { 0x868e48ed, 0x0c4dec3e, 0xf0fc84f4, 0x935291c2, 0x8513c611, 0xbc49b63e, 0x4a51f7fa, 0x8c447a51 }, + { 0x037d699e, 0x0a093b32, 0xc2ec9f29, 0x5e90f49a, 0x855f3c1c, 0x36674b9d, 0x6414d645, 0x128eb019 }, + { 0x64d6e74a, 0x65fa3cce, 0x09c472a5, 0xa17ee5f5, 0xdffb9e45, 0x7a9c4595, 0x4d07da7f, 0x6fed21dc }, + { 0x81842845, 0xfc184cbb, 0x441f1fba, 0xf06543f1, 0xc8ec2559, 0xc0414db3, 0x59add3e1, 0xeedcba8e } + }, { + { 0x8d5f1cb1, 0xdd5cc734, 0x97b66085, 0x1f2aeb4e, 0x49fc4df3, 0x8c4647df, 0x020d8f8f, 0xfb3e30a6 }, + { 0xdc5dd9fe, 0xce57f180, 0x24dd9046, 0xc375884e, 0x869faec3, 0xbca83934, 0x71d1943b, 0xb1eaf24e }, + { 0x571eab92, 0x30538228, 0x5be3247b, 0x045cca2f, 0xa504a51c, 0xf5493a6c, 0x18fef6d0, 0x6f0f0e6c }, + { 0x9bea0233, 0x80dc3ce3, 0x59ec7d4a, 0x76dafb6b, 0xbdbc4040, 0xcffa68d9, 0xc156af96, 0x1b17111d }, + { 0xcfc30870, 0x623df507, 0x9fd6056e, 0x58b5a009, 0x3addc588, 0x01bf2d7f, 0xfd70e9b5, 0x454451fc }, + { 0xa291458a, 0x4526adc5, 0x367c6943, 0xec7c457d, 0x2983a292, 0x93f5a287, 0x38f480d2, 0xd4de9db7 }, + { 0xa6a97c24, 0x51a0e0ba, 0x1f639439, 0x950eed3e, 0x45f0c8ba, 0x7f6752ca, 0xc0c4af72, 0xb785824e } + }, { + { 0xb0cb4422, 0x0c5dcdcb, 0xb1d133c1, 0x1865317a, 0x2614b1c4, 0x484a4f81, 0x8cdbcbb7, 0xec2d0728 }, + { 0x7d9cf77e, 0x61770bc4, 0xa3eb1843, 0xc5ba899d, 0xce974e91, 0x4adcd05f, 0xeb21acfd, 0xf962c2b3 }, + { 0x213950f4, 0xf2a8b184, 0x3de16761, 0x2a9ee270, 0xe04388a0, 0x678bd048, 0x3982af74, 0xb79829c3 }, + { 0x2a57e1ae, 0xf96bcaa4, 0x58342aaf, 0x8662da2f, 0x7bfe6e15, 0x94249242, 0xda56a0c8, 0x610fdc7d }, + { 0x35f0876d, 0xf5151109, 0x6e95020d, 0xe2ca2d86, 0xc5f859ef, 0x6349c00e, 0x483a09d2, 0x3d793ad1 }, + { 0x48d650c8, 0x792cd02d, 0x96dd5dfb, 0x0ad306bf, 0x0865afae, 0x9984bc0a, 0xab9e4821, 0xf3977f17 }, + { 0x91ce8b28, 0x14759678, 0x8fb3eefb, 0x187d0f53, 0xc5d183b0, 0x0a3ff48d, 0xd30b2d9e, 0x7d34ee4f } + }, { + { 0x00bcde15, 0xcccd7271, 0xb895c848, 0x1c86d357, 0xbd8ee9b0, 0xd063775d, 0xb3f130fd, 0xd2ca1c14 }, + { 0x3c9857c9, 0xc6a9decd, 0xca1f2b65, 0x3d2b10a7, 0xb947c90f, 0xefcb8523, 0xca03778a, 0xd5d42cfd }, + { 0x5c73f4ce, 0xf8262f6a, 0x3ce264bc, 0x2df69850, 0x4a4bb3bc, 0x381e591c, 0xb9fb0145, 0x9996df80 }, + { 0xa379c4f2, 0xda0b13b2, 0xfb1b3cad, 0xb370772c, 0x6ded2ab8, 0xcc98e438, 0xd4ef7629, 0x3330f2c2 }, + { 0xc0d41786, 0x537ea8c7, 0x3b441a76, 0xdb1195bd, 0x3ce092d1, 0xb484de42, 0x8a853c14, 0x39e1d707 }, + { 0x871a31a0, 0x80623383, 0x3ad8e04b, 0x6d1e706d, 0xc99687b9, 0x4661e7ee, 0xeae02eb9, 0x73b29bdb }, + { 0x36816855, 0xf1440803, 0xed9581f5, 0xa42bf12c, 0xc085f0f5, 0x700c5480, 0x6092c0ad, 0xc1952028 } + }, { + { 0x61f3d76c, 0xb619f830, 0xb3c1aabe, 0xdfe516c8, 0x9de4137b, 0xa7cdfdcc, 0x8ae83950, 0xa824756c }, + { 0xa5234d7c, 0x9f7fc888, 0x02c47a29, 0x5675deb6, 0x03797a1b, 0xbd9f84f2, 0x49496ab5, 0xb3a92c12 }, + { 0x1459774e, 0x0587b246, 0x0e4c44f8, 0xeadc3dfc, 0x756d0677, 0xe5528ce8, 0x9d2a09d6, 0x4cbc59ec }, + { 0xca73670e, 0x55bb1710, 0x1e22a6a0, 0x70a8c976, 0xdb4045bc, 0x0bae4004, 0xdf481fa0, 0x98ebe4dc }, + { 0x85fb6d61, 0x56f856ad, 0xbf0842c3, 0xc5251773, 0xcd853b0e, 0xe4bfdb13, 0xba69a18a, 0x59e25dcd }, + { 0x83f1b479, 0x02285602, 0xec4d5e52, 0x126f80dc, 0x41737c1d, 0xfb739e71, 0xca819d35, 0x23402f41 }, + { 0x5a761f56, 0x70dba9fc, 0x898b6f07, 0x3c0a95e2, 0x4877c927, 0xd340a6cb, 0x53927787, 0x5bbc2f70 } + }, { + { 0x6f55de46, 0x80b41750, 0xe79726ae, 0x7e4430a4, 0x15016ede, 0x3cb704f6, 0x29d17376, 0xb1daf0a9 }, + { 0x1d106948, 0x09e71e47, 0xdeca7038, 0xcc4b19b9, 0x9aa4cb6c, 0xa5b51694, 0x50843372, 0x6f9bc50e }, + { 0x7da1905b, 0xcbae73bc, 0xc3ddc084, 0x7335d06e, 0xdf340f40, 0x25db1010, 0xeb287817, 0x0f8c91b7 }, + { 0xc91a7359, 0x5b5d748a, 0xbe2cd22a, 0x3c2e3298, 0x6c4247ef, 0x9a47c570, 0x2ddfa616, 0xd4bf75e0 }, + { 0x96ba5256, 0x9d2c3f03, 0x308d95e6, 0xcfc9ec0f, 0xa0961055, 0x392c377c, 0x66bafd5c, 0x7380bcd9 }, + { 0xe7c67ec8, 0xb9d05682, 0xa799e0b2, 0x32b89eb8, 0xf33da47b, 0x59ac7d9e, 0x931e2025, 0x3643c04c }, + { 0x565309d2, 0xfe24877e, 0x57202f59, 0x3d46b5a8, 0x8e00c15b, 0x8f0b8dea, 0x396d22c4, 0xe6fc1a15 } + }, { + { 0x5b18a044, 0x2c1b66b4, 0xe14c7f03, 0xd02553b6, 0x8d6b85f3, 0x6402dc7c, 0x39c64fe6, 0x02fd8601 }, + { 0x94c5a100, 0xbf83bf04, 0xe071aae4, 0xb8fcdb16, 0x76963764, 0x7b3b7bbb, 0x917c4f2e, 0x6f2932b0 }, + { 0xc891a1ca, 0xdec32e1c, 0x7f894b1d, 0x5a783287, 0x2b4d8375, 0x8d0d30b1, 0x49c9e792, 0x2588847b }, + { 0xb0f4d7fe, 0x7d03d93e, 0x1633bbb3, 0x30524f45, 0xc1513f85, 0x686ace4c, 0xfed101f7, 0xc6640982 }, + { 0x3f2a6442, 0xc8fe2cdd, 0xe7374831, 0xfa1df37a, 0xebac64c1, 0x9abc3ac5, 0x8ab69757, 0x83956b7f }, + { 0xb28bc15c, 0x1e8e0ef1, 0xc29a5af2, 0xc3b8ae0a, 0x421d84e3, 0xb96ecd43, 0x3d552bdc, 0xeb44d0bb }, + { 0x24c2ea0c, 0x5d58e6d9, 0x370c1ca7, 0x41bffc37, 0x9186bb55, 0x5c001f6f, 0x647cdabb, 0x3343829a } + }, { + { 0xf4738f06, 0xef7954b1, 0xd81ee33d, 0x09fd6120, 0x310b9f60, 0x69241d5d, 0x6735f0d9, 0x0d653f5b }, + { 0x730f85c3, 0xd46deb06, 0xa073f3d0, 0xe718eb2f, 0xd5106bde, 0x27cdc4f0, 0x54770105, 0x350d3345 }, + { 0x9baad4c3, 0xee4f1897, 0x77608e68, 0x8af945c1, 0xc8afcc2d, 0xdea35e92, 0x819d7b60, 0x5c226478 }, + { 0xf9943da0, 0xf57e8d09, 0x6ed04a45, 0x086a56fa, 0x2513abe7, 0x8cf5ad6f, 0xa09e2673, 0x9611b1f9 }, + { 0xe100bbf2, 0x51ffcbcf, 0x8bb1e6ae, 0x9065d124, 0x9d72a7ad, 0x58365309, 0x63c1fca4, 0x64f3846c }, + { 0xf1290554, 0x4bbf674c, 0x38714bb7, 0xa2f29af0, 0xd603228b, 0x340e638a, 0x76992250, 0x596bc1cc }, + { 0xf0466f92, 0xbfb91931, 0x2a515d34, 0x2d2d9b8e, 0x57374071, 0xbd9ba285, 0x54c663b4, 0x9c2db914 } + }, { + { 0xc78b3299, 0x19ae1f1b, 0x100a0503, 0x6a5de262, 0x78193f1c, 0x8c9b6cfe, 0x397c349d, 0x9d31efc8 }, + { 0xc5dee2c6, 0x665ef976, 0x49d296eb, 0x6770fbb8, 0xe94a419c, 0x86996440, 0x1f544088, 0xc4a61825 }, + { 0x5d56dcbd, 0xf4f21e5e, 0x64658bca, 0x7f0b0c4f, 0x4ba19309, 0xed866b32, 0x049d1ebd, 0xdc3c5e75 }, + { 0xfa0e70d5, 0xbe3df75a, 0x5b52fba6, 0x40d73380, 0xb032ec4c, 0xf352439a, 0x771a22db, 0x5f9e1c36 }, + { 0xc60ac075, 0xe963f257, 0xbbd1c424, 0x490424bc, 0xd0eef259, 0xfcaa1e74, 0x94f4a76f, 0x57f670bd }, + { 0x9dccdbb2, 0x51b2f921, 0x2fbbb2f2, 0x7501b147, 0x9a2cebed, 0xe638333d, 0xbca1e7a6, 0x830fa987 }, + { 0x5ced560d, 0x5f98d3f6, 0x8d505a5d, 0xcf80da1c, 0x2a2d3452, 0xc1c3d2d4, 0x2a137278, 0x66988098 } + }, { + { 0x19368995, 0xce79360b, 0x65811279, 0xb0b64791, 0x17e4c897, 0x0e9c2981, 0xa7ddf31c, 0x24e877e3 }, + { 0xcc3fdfff, 0x49ed6f65, 0xd6a549ce, 0x63e1eacf, 0xebb20c85, 0x4c726c08, 0xb34d4234, 0x29d229d0 }, + { 0x67dbe937, 0xe59d747a, 0xbb2c26a5, 0x2c45b745, 0xa8974eb3, 0x06fe9413, 0xceff61f6, 0x183a19ee }, + { 0x69e6b994, 0x6c78299a, 0x5aed6f64, 0xb704b816, 0xf62dac7b, 0xb8750ccf, 0xa4975752, 0x02a5c370 }, + { 0x3081edca, 0xd7da0bff, 0x8c3be568, 0x7720044c, 0xa04922bb, 0x044ca349, 0xe929aeba, 0xb1f5c7ec }, + { 0xe2ee4d48, 0x3a344c1e, 0xa3f119b1, 0xc9316169, 0xb4960665, 0x2ec02476, 0x8d09a4ef, 0x2b3f7b4c }, + { 0x64dc05ac, 0x917e0f8d, 0x8767f59a, 0xa7b63c85, 0x7410472a, 0xf2febd16, 0x33b4fa6f, 0x2047f63f } + }, { + { 0x03493b94, 0x1a055118, 0x21981d06, 0xe619c011, 0x8067bf4d, 0x36e9f2bd, 0x7232c291, 0xa85fa403 }, + { 0x7da6e24d, 0x67eeec49, 0xf9d0b55b, 0xa0180fe0, 0xcef8de77, 0x7ab8b5b9, 0xfae6b9f9, 0x29ccf5ca }, + { 0x3608267f, 0x7a52e5c6, 0x9fdbd947, 0xcfba3e80, 0x4717c548, 0x5b608fdf, 0x33f2e088, 0x4ab88fbb }, + { 0x700a2ce0, 0x6f749bc9, 0x0ac79a52, 0x1131876f, 0x48ebcc95, 0x35d07e1f, 0xb9d74ba9, 0xd7921b16 }, + { 0x51a46b75, 0xc766b3c6, 0x48578341, 0xc3bc878e, 0xc66bbea3, 0x2fda0dee, 0xb8e1515d, 0x22418556 }, + { 0xf4e952f5, 0xd8bc0295, 0x8b8d38aa, 0x0454ab5f, 0x10ac6bff, 0x9e943f6b, 0x6d8261dc, 0x808848fa }, + { 0x08676a25, 0x53a51c13, 0x1499e10b, 0xd9a4b7f3, 0xed75250d, 0xafeff9bf, 0x7088a313, 0x10705dcc } + }, { + { 0xda4d4156, 0x2310acc4, 0x8796c548, 0x535057b7, 0x5f291ff3, 0x0ab20f35, 0x93677dbd, 0x8c69b6ff }, + { 0x8b23e30e, 0x377e12f7, 0x84fe2f73, 0xa0ec919d, 0xdfda6326, 0x364f7fbb, 0x49c45f6e, 0x8c07d4a6 }, + { 0xb0eb8c22, 0x6dbd3002, 0xe34f84e6, 0xe3c366d3, 0x5fc72e10, 0xf49caec5, 0x6f4011e3, 0x7038c38d }, + { 0x378ce4e5, 0xe32c4022, 0x5c14ed02, 0xba91e88a, 0x4851e798, 0x9b4f98a3, 0x42f08b90, 0x0fb74b93 }, + { 0x8ab2da23, 0x84b2842d, 0xf1a40d04, 0x9f7c214f, 0x4b8002b6, 0x6ce4980c, 0x126b27ca, 0xed7175f4 }, + { 0x197f7299, 0xd688ac97, 0x9beb4279, 0x98ba1391, 0xb3719aec, 0xb964a1f8, 0x978a9485, 0x4ca9040a }, + { 0x15a808bb, 0xbe72c01e, 0x2877ef97, 0x0ed78b1d, 0x5fdb6fda, 0x726d3364, 0xc27b0380, 0x03409578 } + }, { + { 0x79bc7204, 0x64526abc, 0x40af0d1a, 0xd11bd441, 0xdf5687c5, 0xbbeb13cf, 0x74ca0025, 0x3dd9bede }, + { 0x465c164f, 0x372e1d94, 0x1a462c98, 0x4e6403e1, 0x7df3d03d, 0x4783848b, 0xec8ef487, 0x1f061ad4 }, + { 0x47c833fd, 0xe27fbe58, 0xa294b457, 0x4cd1a6c5, 0x0c2cdbc2, 0xff516fc0, 0xed81d321, 0x026947cf }, + { 0x64801488, 0xd4be8cd3, 0x9ec4f1af, 0x2600e44b, 0x0851e417, 0x6b51068e, 0xafb6bbd8, 0x8208ae65 }, + { 0x22b24c03, 0xc7e6448f, 0x716e08f2, 0x7e796d97, 0xec9bef1b, 0x66e5667f, 0x5f9b745b, 0xdf228f44 }, + { 0xd8070eed, 0x7531be15, 0x2efd3d7a, 0xecaa0ad0, 0xc0972df5, 0xf776df8a, 0x9da8ab27, 0xf0b42ef2 }, + { 0x27bafa4a, 0x341a81c9, 0x2e360782, 0x7800401d, 0x7f594e2e, 0x80317127, 0x155af896, 0x2b098834 } + }, { + { 0x50ac8c98, 0xc821317d, 0xe30b6dea, 0x23732d03, 0xa22d2f11, 0x9108913c, 0x0e0c2e17, 0x80349b40 }, + { 0x4f6a1487, 0x7ee752e6, 0xa9a0b434, 0x2f14c67f, 0xa55c2d40, 0x659d83d5, 0x3f17486e, 0xac616a2a }, + { 0xe0d22f8c, 0x277371d7, 0xaeb933ff, 0xe5cd5a56, 0x07e8825b, 0xf521096e, 0xb055b9e1, 0x622f69fa }, + { 0x2428cf8a, 0x96d714c1, 0x58b73416, 0x272fc42b, 0x874dd8ab, 0x205d1af2, 0xb9bccc72, 0x52ebd7b0 }, + { 0xea28c322, 0x01162702, 0xc9086e8f, 0x10a1f1a4, 0x2b4ae4c0, 0xe95c95fb, 0x10ef8e49, 0xf033dba1 }, + { 0xaca39e67, 0x98d59def, 0x3d199fba, 0x93cc0046, 0x41389dab, 0x38150fc2, 0x989a4d46, 0x9b427328 }, + { 0x555f6fcd, 0x187aac65, 0x237ea7ba, 0x411845bb, 0x257ecc96, 0xa6d2b9a9, 0x186cd758, 0x745f3c59 } + }, { + { 0xd8bd778b, 0x2c224db8, 0x9cf37266, 0x92c241da, 0xef9a0dc7, 0xa0141780, 0xd85304c7, 0xc1778012 }, + { 0x0cdf909b, 0xd6e1b56b, 0x60844342, 0x0012b99b, 0x5069f160, 0xa8759687, 0x9408dadb, 0xa651525e }, + { 0xe24e6ac1, 0xffb01991, 0xa84ae5e6, 0xe3e71b0d, 0xd1af4e76, 0x014d0563, 0xbcbda8f5, 0x47931fcf }, + { 0xf3f7b396, 0x5b45d64a, 0xef5e27ef, 0x04134034, 0x4ea4b384, 0x0c55b7ac, 0x02877644, 0x7f08a13b }, + { 0x3ed1b355, 0x89d6f5bc, 0x9d48cc98, 0xa0759109, 0x82673778, 0xae7c9a53, 0x516c3cba, 0xa817b9b7 }, + { 0x44d407ce, 0x3866b2a0, 0x16966a1e, 0x1430f251, 0x37b831f0, 0xd52ce3d4, 0x78e95a9f, 0x59cf28c6 }, + { 0x3e4f2155, 0x7156e7b3, 0x1b86f8db, 0x42f7566f, 0x3e56da90, 0xf030b29f, 0xec85e66b, 0xcc52db57 } + }, { + { 0x7e6c0017, 0x413ffb3f, 0xb0eef332, 0x00c4654f, 0xd22aa38b, 0xa5efdb30, 0x5764e3b2, 0x30492695 }, + { 0x7147830a, 0xc93791b6, 0x90db318f, 0x59f91408, 0xf1ce4428, 0xa5ed3cc1, 0xc9e3126f, 0x3e65f4be }, + { 0xc9a52997, 0x98ec0cec, 0x845090c0, 0x972e21c7, 0xbec7b346, 0xc5a51cd5, 0xc2bc2364, 0x6feb2a2a }, + { 0x8c502344, 0xa133bc9b, 0x12e631f5, 0x1fad16db, 0xd9bc4a2a, 0x3ad8ef7f, 0xfa5e4e06, 0xf413547b }, + { 0x9d70f033, 0x9be7e0c8, 0xceaf3e95, 0xabeb2be0, 0xd6968817, 0xd3e5bff7, 0xc70e1698, 0x7dae7c15 }, + { 0x16bd8319, 0x45e55117, 0x4034e356, 0xf10d487f, 0xa76f4fdd, 0xf10370e7, 0x167a2453, 0x0422ab4f }, + { 0x7ad6b216, 0x238eb324, 0xc6461eeb, 0x807aa6b5, 0x162573a4, 0x7f90891c, 0xf78a4770, 0xee33693e } + }, { + { 0x85a61667, 0x3292f30e, 0x9d1df8cb, 0xe79682a4, 0xd306be03, 0xb1ecf6fd, 0xace14759, 0x0ecafaaa }, + { 0x88ba8325, 0x5da8e735, 0xf88401d1, 0x3a0b86eb, 0xca737832, 0x21d368fa, 0xa2131889, 0xf0bc2442 }, + { 0xd9cf985f, 0x4a150996, 0xab65117e, 0xbe002181, 0x08d679b9, 0x34f40192, 0x64e2a998, 0x1aeea04e }, + { 0xd12d7f84, 0xad3018df, 0x9c1f731a, 0xd6a1dc24, 0x855ded20, 0x0eda9d64, 0xb17fc497, 0x796fbdf7 }, + { 0x67abd4af, 0x9cf4fdd7, 0x1e56babd, 0x503eee44, 0x170363e2, 0x5693fd28, 0x51540b37, 0x05abe4c4 }, + { 0x2dbcd044, 0x2981a934, 0x73082781, 0xdd97b6b6, 0x64c3c92d, 0x421073bf, 0xe7ab4219, 0x23ede5ff }, + { 0x62112ae9, 0xe15f3626, 0x038a6317, 0x97a7f32e, 0xce90123d, 0xf02d754e, 0x6b218ea1, 0xa3c38d14 } + }, { + { 0x004fdc93, 0x4b7c873a, 0x95be1cc9, 0x7c5432d9, 0x6204127d, 0xed04d3d3, 0xfb64984a, 0x93d731b4 }, + { 0x6f366d43, 0xc3a3b935, 0x5963fb76, 0x268cd779, 0x192cd883, 0x7a64e33b, 0xd6034f31, 0x89e7e743 }, + { 0x3b30e2ca, 0x4a02b442, 0x69056f99, 0xce9b2bd3, 0xb4e7a87f, 0xc1d230ae, 0x3c6dfd11, 0xadaecce2 }, + { 0x33b83f9a, 0x6c0ad79b, 0x1322b694, 0x8d3f9e24, 0xf8fafbaa, 0xc6223143, 0x3f7c6091, 0xecb5943c }, + { 0x8d2da3dd, 0x5390be12, 0xb6cb6db1, 0x60743204, 0x48971e41, 0x887cd9fb, 0x1ade9d31, 0x8bc76839 }, + { 0xa9ce25de, 0xaea01431, 0xee284648, 0x0f997777, 0x9bad14ca, 0x68c4b3b4, 0xa3c32b11, 0x0bb9f4a5 }, + { 0x4ce7cbba, 0x930c6ce6, 0x1473d7e2, 0x5211cccf, 0x4bf9f56c, 0x608d15a9, 0x5471a71f, 0x9e4e1357 } + }, { + { 0xc4d4250a, 0xa90b2ff6, 0x997f0ad2, 0x313ed353, 0x1e270e78, 0x4d7bada7, 0xe504aed6, 0xeafcebb4 }, + { 0xb182f670, 0x1c0c6022, 0x002f8917, 0x94e9c583, 0x244640a1, 0x8f114879, 0xcbde6210, 0x25675f69 }, + { 0x0e5a14c7, 0x074528d1, 0xdc2eff1c, 0xfecb81e0, 0xe4331fb5, 0x8810cb7b, 0x3d824831, 0x9d9ed1fd }, + { 0x416b6738, 0x2bbbd78b, 0xaa4012a6, 0xeb2fd98b, 0x585477c8, 0x702e595a, 0xb322d949, 0xbe2d3a24 }, + { 0x111432d9, 0xd9b07718, 0xc0d6e5f3, 0x1c36e961, 0xd6090a73, 0xd1e819ff, 0xbaa7e4ff, 0x63968570 }, + { 0x9e470151, 0xb3d468a1, 0x9260b722, 0x13b5fa98, 0x5659a528, 0x9d28f8a5, 0x85adec37, 0xc606ba8d }, + { 0x3decc870, 0x6bd5556b, 0x6f7f7797, 0xd1b74770, 0x662aeb0c, 0x9be1606f, 0xa6aac5f5, 0xf85b350f } + }, { + { 0x9463a868, 0x960e8462, 0x4fa2b9d2, 0x178547e9, 0x50e71617, 0xd0d08216, 0x0c79d64f, 0x027df2d8 }, + { 0x5207ee10, 0xcf7670db, 0x2793abbb, 0x4cd968e9, 0x54e3fb50, 0x37d47190, 0x9b8e5703, 0x69bb7ec9 }, + { 0x627d9958, 0x55b42a06, 0xeba7f98d, 0x853170d7, 0xb54ca419, 0x69668fe7, 0x73cc969a, 0x10e096e6 }, + { 0x4c669696, 0x6232f551, 0x295b5a25, 0xd98e6e6c, 0x1b045ecc, 0xca537442, 0xd63dec57, 0x67e5a619 }, + { 0xb13e1282, 0xc06b8335, 0xe41b1193, 0xf3a2297d, 0xcf435007, 0x2fc34631, 0x42e4890c, 0xd3e85862 }, + { 0x160f81d9, 0xf12f48b1, 0x80668974, 0x1950027d, 0x58fe5eb0, 0x08db8df6, 0x70864927, 0x80dab7b3 }, + { 0x293bd8ba, 0xddaf78c7, 0x59d74859, 0x3e8ccc1f, 0xab08d45e, 0xed90a269, 0x800f365d, 0x8c05ec5d } + }, { + { 0x9f5f3ef3, 0x2d06c644, 0xb7ddb6d2, 0x950116f7, 0x81d0f434, 0x7fbfe324, 0x99cfa463, 0x477b1d3f }, + { 0x9ad80019, 0x67c3a9f1, 0x610da4c5, 0x90954ce4, 0x0e1f8a78, 0xf1763ba4, 0xbbf73d7c, 0x713419a7 }, + { 0xabda8eda, 0x14be0d15, 0x98601e48, 0x0b327788, 0xdfadef27, 0x4d6eddd5, 0x2012e79c, 0x53ea34cb }, + { 0x26c758c6, 0xa962c123, 0xb1c5450f, 0x3f6130f7, 0xd65a9947, 0x822f1cec, 0x2f8ca7fd, 0x8885d745 }, + { 0xfb8d48d8, 0x26b785b6, 0xb67ce850, 0x688eb713, 0x6fcb4007, 0xa4218806, 0x826c9739, 0x867b567a }, + { 0xb6d72f91, 0xb4dffd3c, 0xf35f61df, 0x8ca0924d, 0x5f4f3ed7, 0xaf3a604d, 0xbad24bb6, 0x4d6bca16 }, + { 0x0af40433, 0xb22010f7, 0x84fff4b4, 0xbb531995, 0x6e7f6aa6, 0x702b82b7, 0xc314eff3, 0x45c6ace3 } + }, { + { 0x38c8eb70, 0x2f7a7d96, 0x425f1213, 0xa9d56023, 0x686f2536, 0x07d95255, 0x03efb3d3, 0x6e3c2be9 }, + { 0x8ccf431c, 0x005f2155, 0x9e8a76f3, 0x3302280a, 0x1f626419, 0xfebd98fa, 0x0d7dbeb5, 0xed228f84 }, + { 0xc7755f65, 0xcc789750, 0x80422eeb, 0xb70e3300, 0x3800488e, 0x66a47b99, 0x80fe5bcd, 0x810df768 }, + { 0x58a9e2b8, 0x6ace6cd2, 0xa26dc819, 0x9da0d6fd, 0xf57318e5, 0xbb2a6cde, 0x00f88e64, 0x45988afc }, + { 0x2db24f74, 0x8e84b606, 0xdd85891e, 0xbaf24e72, 0xae366b70, 0xfc18da2c, 0xe1937d7c, 0xc7edf94e }, + { 0x30f8d51c, 0x431a2e5e, 0x318780b1, 0x90c156f8, 0x7f325d96, 0x92cd03b5, 0x408db8b8, 0x3e2e340e }, + { 0xb5fb3838, 0x5226821f, 0xadbb4294, 0xff433812, 0x03075206, 0x386d18f7, 0xddc08239, 0xeb3a3609 } + }, { + { 0x1deb0d7b, 0x486e7970, 0x528c5c8b, 0xc4ddea85, 0x65c479ca, 0xb2564b35, 0xd106470c, 0xc6e35fb4 }, + { 0xf289ae55, 0xde118bf3, 0x84673fb0, 0x7ed5665d, 0xf2e4e8b5, 0xfc0244ef, 0x76dd77b7, 0x4ac503f2 }, + { 0x0e420397, 0x7e9632d7, 0xa0bda73b, 0x2458b8f3, 0xc2fbafbd, 0x582c46ee, 0x06d1d65c, 0x037da5f2 }, + { 0x8b9f4092, 0x5843804a, 0x8bedf071, 0x2f5315ce, 0x9373f07a, 0xebdcc2ef, 0xb0b2a12f, 0xbdfcf2ef }, + { 0xd2495e4d, 0x04d95d4a, 0x510f2342, 0x68606545, 0x19de4d07, 0xd71ca9aa, 0x3b06212e, 0xf56f82a2 }, + { 0x1e58fff3, 0xbfbdfaa3, 0x3e0c674c, 0x8e03a28b, 0x37ae6d19, 0xf92f3944, 0x5135fbc5, 0xbe4b52f3 }, + { 0x50d0f9af, 0xde678fe8, 0xb238077d, 0x177dba54, 0xa139d3f3, 0xe9e8df29, 0x3f63742f, 0x312b32de } + }, { + { 0x20c56647, 0x8707018f, 0x3b9ba5d0, 0x300bf55c, 0x8d003323, 0xf98aac6b, 0x583300fd, 0xba8bbc8b }, + { 0xb1545d91, 0x254a8fe3, 0xd49bcfd4, 0xacfee11d, 0xf10d406e, 0x64fcfcde, 0x027e13a9, 0x8aa5595c }, + { 0x512d3bdc, 0xcbc66bb2, 0x9908c828, 0xca5b4f81, 0x97deef7d, 0xb796061b, 0xb7ceff8c, 0xeecf09d9 }, + { 0x2d27dfaa, 0x4738165d, 0x28e7a55f, 0x420813e3, 0xaa8440a4, 0xeef99bfb, 0x71666ba2, 0x86a51a80 }, + { 0xd7791222, 0x692bc41b, 0x3bdbac31, 0x82cb05cd, 0x5b4b3744, 0x4b665815, 0x1762b639, 0xa878d6ea }, + { 0x854b7d2e, 0x8fc1d536, 0x9ce4db12, 0xe32bf6c4, 0xb0290fba, 0x0faaf22e, 0xfece04ff, 0x4474f689 }, + { 0x049f5deb, 0x94fc8dbd, 0x905a535b, 0xc429ceed, 0xfbb317ac, 0xac96fdf2, 0x7e3b05ff, 0x4860d996 } + }, { + { 0xe50c69fb, 0x0fa77338, 0xf79fca72, 0x3e0d30ba, 0x598ada93, 0x2e435d52, 0x3d70cfcb, 0x22182bb3 }, + { 0x67ecc251, 0x18318183, 0x5b1696e1, 0xc13a2c4c, 0x086c6392, 0x72273fd6, 0xe20aaf30, 0x301201b3 }, + { 0x54b990a1, 0xafa6328d, 0xe63abcb1, 0xc78f2775, 0x1fb1d8ce, 0x4747f283, 0x8359e523, 0xf469ed88 }, + { 0x152b5010, 0x806afb62, 0xb91dc4e0, 0x7c018a3e, 0xbc7a0eed, 0x23dfe690, 0xfe576b7d, 0xfdf38e7e }, + { 0x8072da71, 0xd96c2ee9, 0x62f4f37c, 0xf03b9d8b, 0x15b73a44, 0xfe52a7a2, 0xb9917a0a, 0xbdafea91 }, + { 0xdbb7e37d, 0xc70465f7, 0xfcc5723f, 0xdaf07719, 0x65d54e8e, 0x3136c077, 0xfcc41d56, 0x07484576 }, + { 0x9947b804, 0xc1b2266f, 0xed448fa2, 0x3522089b, 0x0bf4534a, 0xdbbbf3e1, 0xc7f929be, 0x9515c273 } + }, { + { 0xa83022c6, 0xdb2ba386, 0x31b8e1d9, 0xba05e0c5, 0x94d029ac, 0x7f9578b5, 0x09a69555, 0xb8166017 }, + { 0xaf323459, 0x6ecdb983, 0x636b45aa, 0x66e075ee, 0x5483eec4, 0x96aa3f50, 0x08ddc9f1, 0x7e31f4ce }, + { 0x255b7d94, 0x231d7a81, 0x6b9df41e, 0xb8968891, 0xce185a87, 0x1fe0e0be, 0x0df6fc87, 0xc18d383f }, + { 0xdcf87a84, 0xe0e68384, 0xbb49e230, 0x481ba3be, 0x84748f2a, 0xb00aab60, 0xfc179e9d, 0x857bf2d0 }, + { 0x468c6a70, 0x17f68dbc, 0xf05e454c, 0x0bf04d87, 0xf7a98200, 0x34985943, 0xd4fff833, 0xf2cc253c }, + { 0xeb13b6bc, 0x2abf96a3, 0x4b7201e1, 0x625b4424, 0x3c3b2563, 0xca66a69c, 0x7394f29b, 0xcdb92b85 }, + { 0x087361bf, 0x616d40cd, 0x560b5746, 0x09434f03, 0xdc133705, 0xe050c7f1, 0xc7506a47, 0xcdf0be50 } + }, { + { 0x31691ebe, 0xed7a1f62, 0x1d69e367, 0x3dcbe08d, 0x975e71fd, 0xe8bc4d75, 0xaf7a2810, 0x3d73950c }, + { 0x7fbea22e, 0x381d20eb, 0xf0431b54, 0xa3e5c8d3, 0xbeebc5f7, 0xb5095b34, 0xf45251e1, 0x88b5d9b1 }, + { 0xc349242a, 0x14d7252d, 0x2a93b81e, 0x054d16ea, 0x60c50aeb, 0x276e8239, 0xf503cbea, 0x77592aa0 }, + { 0x8c68a879, 0xa959997a, 0x128f9d7c, 0x0618dc7a, 0xca0be3f4, 0x9d2ac2de, 0xadea324d, 0x5152f278 }, + { 0x7ba250da, 0x94183f87, 0x7019ad76, 0x69075f7d, 0x393cd782, 0xfd52b891, 0x00d8292c, 0x8c3b2734 }, + { 0xe0c3a509, 0x77a7350d, 0xa83ccc53, 0xb9e8244d, 0x8a5ef941, 0x66d5acf8, 0x6180cea4, 0x885eae04 }, + { 0x33a9c3dc, 0x01868bc2, 0x58c61de7, 0x7a93fa06, 0x4cd9f562, 0x9e8a0747, 0x32ba8e08, 0x3780b278 } + }, { + { 0x47db582e, 0xcd9cf0ad, 0x42101761, 0x077c78e6, 0x9c974652, 0x58e18de7, 0x72feea9d, 0x8372f246 }, + { 0xa45c7958, 0xc3223948, 0x059a7b58, 0xa433e03e, 0x6e478fb3, 0xbc6e5186, 0x5f0167ff, 0x61aa9962 }, + { 0xd297083a, 0x237b9355, 0x16b460e9, 0xd4cf70b8, 0x4906f286, 0xa5062552, 0xb472874b, 0x8f8c7562 }, + { 0x2d990849, 0xa8418e55, 0xce78dfe3, 0xe7ad865d, 0x617900a0, 0x83b88f64, 0xc27917ea, 0x81ea7038 }, + { 0x215656ee, 0x78aff999, 0x32b79d72, 0x1d8dc5e7, 0x5f629263, 0xc73af887, 0xd1ebc2ca, 0x77175169 }, + { 0x7ecaa5e2, 0x82a28565, 0x3eaf012b, 0x1f5dd8a3, 0x25574e50, 0x7fda2c4e, 0xd1bec96d, 0x8d1493d8 }, + { 0x450ac92b, 0xb6dac065, 0x5252896a, 0xea9055a2, 0x2bff2eda, 0x0b71a456, 0xb20bc57e, 0x5ebd3e5a } + }, { + { 0x06c28b5e, 0x6b9af341, 0xe09f4468, 0x9d2942b7, 0xf206afe2, 0x0898c6d7, 0xce1e17b7, 0xfaf50486 }, + { 0xc086eb33, 0xfb2b6a81, 0xbd4ef528, 0xf7e2d3cf, 0x9f2e3896, 0x15837e91, 0x310fb58a, 0xe009f48a }, + { 0xd005ba52, 0x522d35b6, 0x15f76f74, 0x75fbe015, 0x8d2e6b40, 0x3fc9317c, 0x4012e5a2, 0xe1fedc4c }, + { 0x074e5abb, 0x25793158, 0x022c125d, 0x1cfddb5d, 0xba7d82a7, 0xde9481a9, 0x2d356f09, 0x4be7edfb }, + { 0x92519f67, 0x66d2c133, 0x74d7190b, 0xe4b1a9dd, 0xa9e0885b, 0xb658ca08, 0xeca0c4f2, 0x9fdd88af }, + { 0x4975562d, 0x84b67be0, 0x4891487e, 0xd2fa6000, 0x38c919df, 0x0d2b7e56, 0x2b5ee426, 0x6f440a1e }, + { 0xbbb1339d, 0x7f5e833c, 0x735df589, 0xa4339e2e, 0x7eb48658, 0x080d8e72, 0xc3a7c99b, 0x43ca835b } + }, { + { 0x3dda52d9, 0xf2307b82, 0x07f1fc1c, 0x59143e86, 0x954e4d90, 0x966cf48a, 0xd9b0d66b, 0xc427b10d }, + { 0x4eb94575, 0xf29126c3, 0x81ea3d87, 0xe06246ca, 0x505883b1, 0xc5bc93ce, 0x358bd5f6, 0xe72a8c73 }, + { 0xdd3b93c6, 0x2767b96b, 0x60dd053f, 0x10cfa310, 0x4abd4f8c, 0x5372a39c, 0x5d54a330, 0xab1867e5 }, + { 0x62c948d4, 0x0b47f1b0, 0xad0ea37e, 0x4efbb4b4, 0x1716ebc5, 0x4ee5e170, 0xbbaca4d8, 0x43e62ff2 }, + { 0xf7d0b782, 0xf1e49ad1, 0xeadeed67, 0x99c2da1b, 0x00894847, 0x90dfa1f7, 0xaf6daa4f, 0x7b4829b6 }, + { 0xde5d8713, 0x35a5b31b, 0xb748800a, 0xdac38349, 0xde103af5, 0xe1d73ccc, 0x46ba0ddc, 0x39306645 }, + { 0x3a06b9a1, 0x160b972a, 0x521c321f, 0xa004069e, 0x83a16ede, 0x98b00b31, 0x60f9f83c, 0x1f35d1c1 } + }, { + { 0xd597421f, 0x2d9b1d10, 0xf4980375, 0xa24461bc, 0x82196094, 0xa0ab2368, 0xf9a7cb16, 0x388ad687 }, + { 0xe38b6868, 0xfbeed35b, 0xe06b3c03, 0x4c8c1665, 0x9eab9ce9, 0x7bc8d118, 0x812d2907, 0x440b0c84 }, + { 0x3deb66a1, 0x197f9e3d, 0x0f19712a, 0xeacb42bd, 0xc83f1bba, 0x86c68e82, 0xbe6fa356, 0x597095e0 }, + { 0x8f291e99, 0xcaba9ad8, 0x2f7dedc7, 0xb5b6f892, 0xc616aa71, 0x263f9cc4, 0x57016837, 0x64a8c843 }, + { 0xa20493f4, 0x53ab7293, 0xf991fbdc, 0xb999d658, 0x72479e76, 0x6e506638, 0x22cf1ace, 0x15063027 }, + { 0xd083da24, 0xfe918278, 0x0d92f48b, 0x6f9957b8, 0x5d7cdfd2, 0xa98cbc77, 0x958b6fa5, 0x00d75485 }, + { 0xb1ac8616, 0x0bc3844a, 0x47346240, 0x639d46b0, 0x81ac702b, 0x0f4a717f, 0x13fc3167, 0x2163fe2d } + }, { + { 0xe9f3460c, 0x2f82243d, 0x0f6e44bd, 0x04bbb112, 0x975dc2aa, 0x0df79c3b, 0xa615c4b5, 0x1fbf4268 }, + { 0x46df1de0, 0xbf6a680f, 0xd832e15c, 0xb61b8fa1, 0x4bac69a6, 0xd0eed295, 0x452d9e96, 0x2e1e63d6 }, + { 0xd6c9f2e4, 0x57cd73e4, 0xb946d1a1, 0x1bdb407c, 0x4ad02a64, 0x04340e80, 0x0898a05c, 0x9a339f6a }, + { 0xe28c995d, 0xda871bd6, 0x734c3b3d, 0x624eb50c, 0x6eb8b37f, 0x06ab1aee, 0x819da6da, 0x2ccd5f1f }, + { 0x610813ba, 0x1c4a8420, 0xa489796e, 0x864a3542, 0x81a25499, 0x070bd68b, 0x742e1f71, 0x1e667a0b }, + { 0x0df38684, 0x47a20eaa, 0xad42ba4d, 0xe3c176da, 0xd33439dc, 0x3aea032f, 0x61bc2c8f, 0xc6fb92ff }, + { 0x991932d7, 0xc28287b1, 0x844ceb4f, 0x691a97fc, 0x40e4d88a, 0xb10977da, 0x8b8aa1d9, 0x9691909a }*/ + } }; + +#define SEC1 0 +#define PUB1_X 1 +#define PUB1_Y 2 +#define SEC2 3 +#define PUB2_X 4 +#define PUB2_Y 5 +#define SHARED 6 + +uint32_t ecc_keys[][9] = { + { 0xFC632550, 0xF3B9CAC2, 0xA7179E84, 0xBCE6FAAD, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0xFFFFFFFF, 1 }, + { 0xFC632551, 0xF3B9CAC2, 0xA7179E84, 0xBCE6FAAD, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0xFFFFFFFF, 0 }, + { 0xFC632552, 0xF3B9CAC2, 0xA7179E84, 0xBCE6FAAD, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0xFFFFFFFF, 0 } +}; + +/*---------------------------------------------------------------------------*/ + +void +test_ecc() +{ + uint32_t i; + + uint32_t order[8] = { 0xFC632551, 0xF3B9CAC2, 0xA7179E84, 0xBCE6FAAD, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0xFFFFFFFF }; + for(i = 0; i < 3; i++) { + printf("ECC valid key test %d/3 - %s\n", i + 1, (ecc_is_valid_key(ecc_keys[i], order) == ecc_keys[i][8] ? "Succeed" : " Failed")); + } + + uint32_t base_x[8] = { 0xd898c296, 0xf4a13945, 0x2deb33a0, 0x77037d81, 0x63a440f2, 0xf8bce6e5, 0xe12c4247, 0x6b17d1f2 }; + uint32_t base_y[8] = { 0x37bf51f5, 0xcbb64068, 0x6b315ece, 0x2bce3357, 0x7c0f9e16, 0x8ee7eb4a, 0xfe1a7f9b, 0x4fe342e2 }; + uint32_t test_x[8]; + uint32_t test_y[8]; + for(i = 0; i < 32; i++) { + uint32_t time; + uint32_t checkvar; + + printf("Starting ECC test %d/221:\n", i + 1); + + time = *MACA_CLK; + ecc_ec_mult(test_x, test_y, base_x, base_y, ecc_data[i][SEC1]); + time = *MACA_CLK - time; + checkvar = 0; + checkvar += memcmp(ecc_data[i][PUB1_X], test_x, 32); + checkvar += memcmp(ecc_data[i][PUB1_Y], test_y, 32); + printf(" 1/4 finished after % 4u ms - %s\n", time / 250, (checkvar ? " Failed" : "Succeed")); + + time = *MACA_CLK; + ecc_ec_mult(test_x, test_y, ecc_data[i][PUB1_X], ecc_data[i][PUB1_Y], ecc_data[i][SEC2]); + time = *MACA_CLK - time; + checkvar = 0; + checkvar += memcmp(ecc_data[i][SHARED], test_x, 32); + printf(" 2/4 finished after % 4u ms - %s\n", time / 250, (checkvar ? " Failed" : "Succeed")); + + time = *MACA_CLK; + ecc_ec_mult(test_x, test_y, base_x, base_y, ecc_data[i][SEC2]); + time = *MACA_CLK - time; + checkvar = 0; + checkvar += memcmp(ecc_data[i][PUB2_X], test_x, 32); + checkvar += memcmp(ecc_data[i][PUB2_Y], test_y, 32); + printf(" 3/4 finished after % 4u ms - %s\n", time / 250, (checkvar ? " Failed" : "Succeed")); + + time = *MACA_CLK; + ecc_ec_mult(test_x, test_y, ecc_data[i][PUB2_X], ecc_data[i][PUB2_Y], ecc_data[i][SEC1]); + time = *MACA_CLK - time; + checkvar = 0; + checkvar += memcmp(ecc_data[i][SHARED], test_x, 32); + printf(" 4/4 finished after % 4u ms - %s\n", time / 250, (checkvar ? " Failed" : "Succeed")); + } +} +/* Start Process */ +PROCESS(server_firmware, "Server Firmware"); +AUTOSTART_PROCESSES(&server_firmware); + +PROCESS_THREAD(server_firmware, ev, data) { + PROCESS_BEGIN(); + + test_ecc(); + + PROCESS_END(); +} diff --git a/examples/econotag-flash-test/Makefile b/examples/econotag-flash-test/Makefile new file mode 100644 index 000000000..82905440e --- /dev/null +++ b/examples/econotag-flash-test/Makefile @@ -0,0 +1,31 @@ +CONTIKI = ../.. +LIBMC1322X = ../../../libmc1322x + +CONTIKI_PROJECT = econotag-flash-test +TARGET = econotag +CLEAN = *.d $(CONTIKI_PROJECT)_e_$(TARGET).bin $(CONTIKI_PROJECT)_e_$(TARGET).txt $(CONTIKI_PROJECT)_e_$(TARGET).pbm + +all: $(CONTIKI_PROJECT) blast + +CFLAGS += -DFLASH_CONF_B1=30 +CFLAGS += -DFLASH_CONF_B2=10 + +APPS += flash + +flash: + $(LIBMC1322X)/tools/mc1322x-load \ + -f $(LIBMC1322X)/tests/flasher_$(TARGET).bin \ + -s $(CONTIKI_PROJECT)_e_$(TARGET).bin \ + -c 'sudo $(LIBMC1322X)/tools/ftditools/bbmc -l $(TARGET) -i 0 reset' \ + -t /dev/ttyUSB1 -l + +clear: + $(LIBMC1322X)/tools/ftditools/bbmc -l $(TARGET) -i 0 erase + +blast: $(CONTIKI)/tools/blaster/blaster + $(CONTIKI)/tools/blaster/blaster $(CONTIKI_PROJECT).cfg + +$(CONTIKI)/tools/blaster/blaster: $(CONTIKI)/tools/blaster/blaster.c + (cd $(CONTIKI)/tools/blaster && $(MAKE)) + +include $(CONTIKI)/Makefile.include diff --git a/examples/econotag-flash-test/README b/examples/econotag-flash-test/README new file mode 100644 index 000000000..ee8aa7d3d --- /dev/null +++ b/examples/econotag-flash-test/README @@ -0,0 +1,6 @@ +Its important to use -l as a flash parameter for mc1322xload. + +Use "make flash" to start upload. Maybe u need +to change the location of libmc1322x in Makefile. + +With "make clear" you can erase all flash data. diff --git a/examples/econotag-flash-test/econotag-flash-test.c b/examples/econotag-flash-test/econotag-flash-test.c new file mode 100644 index 000000000..04ef42d8f --- /dev/null +++ b/examples/econotag-flash-test/econotag-flash-test.c @@ -0,0 +1,195 @@ +/* + * Copyright (c) 2014, Lars Schmertmann . + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * + * This file is part of the Contiki operating system. + * + */ + +/** + * \file + * Flash test + * + * This file contains tests for econotag flash app + * + * \author + * Lars Schmertmann + */ + +#include "flash.h" +#include "contiki.h" + +#include +#include +#include + +#include "../../tools/blaster/blaster.h" +#include "econotag-flash-test.h" + +void +output_result(uint32_t i, uint32_t fail) +{ + if(fail) { + printf(" Test %u failed!\n", i); + } else { printf(" Test %u succeed!\n", i); + } +} +void +test_flash_1() +{ + uint8_t buffer[12]; + uint32_t check_int, my_int = 12345678; + + flash_setVar("Hello World!", RES_MY_STRING_1, LEN_MY_STRING_1); + + flash_getVar(buffer, RES_MY_STRING_1, LEN_MY_STRING_1); + output_result(1, memcmp(buffer, "Hello World!", 12)); + + flash_setVar("Heureka!", RES_MY_STRING_2, LEN_MY_STRING_2); + + flash_getVar(buffer, RES_MY_STRING_1, LEN_MY_STRING_1); + output_result(2, memcmp(buffer, "Hello World!", 12)); + + flash_getVar(buffer, RES_MY_STRING_2, LEN_MY_STRING_2); + output_result(3, memcmp(buffer, "Heureka!", 8)); + + flash_setVar(&my_int, RES_MY_INTEGER, LEN_MY_INTEGER); + + flash_getVar(&check_int, RES_MY_INTEGER, LEN_MY_INTEGER); + output_result(4, check_int != my_int); + + flash_getVar(buffer, RES_MY_STRING_1, LEN_MY_STRING_1); + output_result(5, memcmp(buffer, "Hello World!", 12)); + + flash_getVar(buffer, RES_MY_STRING_2, LEN_MY_STRING_2); + output_result(6, memcmp(buffer, "Heureka!", 8)); +} +void +test_flash_2() +{ + uint8_t buffer[12]; + uint32_t check_int, my_int = 12345678; + + flash_getVar(&check_int, RES_MY_INTEGER, LEN_MY_INTEGER); + output_result(1, check_int != my_int); + + flash_getVar(buffer, RES_MY_STRING_1, LEN_MY_STRING_1); + output_result(2, memcmp(buffer, "Hello World!", 12)); + + flash_getVar(buffer, RES_MY_STRING_2, LEN_MY_STRING_2); + output_result(3, memcmp(buffer, "Heureka!", 8)); + + /* Block 1 max usage is 30 Byte -> Optimisation in Makefile */ + output_result(4, flash_setVar("test", 0, 1) != gNvmErrInvalidPointer_c); + output_result(5, flash_setVar("test", 30, 1) != gNvmErrInvalidPointer_c); + output_result(6, flash_setVar("test", 29, 2) != gNvmErrAddressSpaceOverflow_c); + + /* Block 2 max usage is 10 Byte -> Optimisation in Makefile */ + output_result(7, flash_setVar("test", 4096, 1) != gNvmErrInvalidPointer_c); + output_result(8, flash_setVar("test", 4096 + 10, 1) != gNvmErrInvalidPointer_c); + output_result(9, flash_setVar("test", 4096 + 9, 2) != gNvmErrAddressSpaceOverflow_c); +} +void +test_flash_blaster() +{ + uint8_t buffer[64]; + + flash_getVar(buffer, RES_NAME, LEN_NAME); + output_result(1, memcmp(buffer, "Econotag Flash Test Device", 27)); + + flash_getVar(buffer, RES_MODEL, LEN_MODEL); + output_result(2, memcmp(buffer, "Model 1234 for testing purposes only", 37)); +} +void +test_flash_stack() +{ + uint8_t buffer[32]; + flash_stack_init(); + + output_result(1, flash_stack_size() != 0); + + flash_stack_push("Hello World!", 12); + output_result(2, flash_stack_size() != 12); + + flash_stack_read(buffer, 0, 12); + output_result(3, memcmp(buffer, "Hello World!", 12)); + + flash_stack_push("I love Contiki!", 15); + output_result(4, flash_stack_size() != 27); + + flash_stack_read(buffer, 0, 12); + output_result(5, memcmp(buffer, "Hello World!", 12)); + + flash_stack_read(buffer, 12, 15); + output_result(6, memcmp(buffer, "I love Contiki!", 15)); + + flash_stack_init(); + output_result(7, flash_stack_size() != 0); + + uint32_t i; + for(i = 1; i < 256; i++) { + flash_stack_push("I love Contiki! ", 16); + } + output_result(8, flash_stack_size() != 4080); + + output_result(9, flash_stack_push("1I love Contiki! ", 17) != gNvmErrAddressSpaceOverflow_c); +} +/* Start Process */ +PROCESS(server_firmware, "Server Firmware"); +AUTOSTART_PROCESSES(&server_firmware); + +PROCESS_THREAD(server_firmware, ev, data) { + PROCESS_BEGIN(); + + if(flash_cmp("\001", RES_DONTCLEAR, LEN_DONTCLEAR)) { + printf("Initializing flash ... "); + flash_init(); + printf("DONE\n"); + flash_setVar("\001", RES_DONTCLEAR, LEN_DONTCLEAR); + printf("Starting flash tests 1:\n"); + test_flash_1(); + int i; + for(i = 0; i < 1024; i++) { + printf("Reboot ...\r"); + } + soft_reset(); + } else { + printf("Initialization not wished\n"); + } + printf("Starting flash tests 2:\n"); + test_flash_2(); + + printf("Starting flash stack tests:\n"); + test_flash_stack(); + + printf("Starting flash blaster tests:\n"); + test_flash_blaster(); + + PROCESS_END(); +} diff --git a/examples/econotag-flash-test/econotag-flash-test.cfg b/examples/econotag-flash-test/econotag-flash-test.cfg new file mode 100644 index 000000000..9b26c4adb --- /dev/null +++ b/examples/econotag-flash-test/econotag-flash-test.cfg @@ -0,0 +1,7 @@ +input = "econotag-flash-test_econotag"; +output = "econotag-flash-test_e_econotag"; +eui = [ 0x2, 0x0, 0x0, 0x0, 0x12, 0x34, 0x56, 0x78 ]; +uuid = "cbf9889f-dc0e-4c18-9aa9-93509a6c102a"; +psk = "yCh0OXnSkFT-eXKE"; +name = "Econotag Flash Test Device"; +model = "Model 1234 for testing purposes only"; diff --git a/examples/econotag-flash-test/econotag-flash-test.h b/examples/econotag-flash-test/econotag-flash-test.h new file mode 100644 index 000000000..469d93faa --- /dev/null +++ b/examples/econotag-flash-test/econotag-flash-test.h @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2014, Lars Schmertmann . + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * + * This file is part of the Contiki operating system. + * + */ + +/** + * \file + * Flash Management + * + * This file contains Pointers for manual flash management. + * + * \author + * Lars Schmertmann + */ + +#ifndef ECONOTAG_FLASH_TEST_H_ +#define ECONOTAG_FLASH_TEST_H_ + +/* Pointer for Block 1 --------------- */ + +#define RES_DONTCLEAR 1 +#define LEN_DONTCLEAR 1 + +#define RES_MY_STRING_1 2 +#define LEN_MY_STRING_1 12 + +#define RES_MY_STRING_2 14 +#define LEN_MY_STRING_2 8 + +/* Pointer for Block 2 --------------- */ + +#define RES_MY_INTEGER (4096 + 1) +#define LEN_MY_INTEGER 4 + +/* ------------------------------------ */ + +#endif /* ECONOTAG_FLASH_TEST_H_ */ diff --git a/examples/email/Makefile.apple2enh.defines b/examples/email/Makefile.apple2enh.defines deleted file mode 100644 index 05a72fd5d..000000000 --- a/examples/email/Makefile.apple2enh.defines +++ /dev/null @@ -1 +0,0 @@ -DEFINES = WITH_CLIENT,WITH_DNS,WITH_GUI,WITH_MOUSE,WITH_PFS diff --git a/examples/email/Makefile.atarixl.defines b/examples/email/Makefile.atarixl.defines deleted file mode 100644 index 5a292701b..000000000 --- a/examples/email/Makefile.atarixl.defines +++ /dev/null @@ -1 +0,0 @@ -DEFINES = WITH_CLIENT,WITH_DNS,WITH_GUI,WITH_MOUSE diff --git a/examples/email/Makefile.c128.defines b/examples/email/Makefile.c128.defines deleted file mode 100644 index 688d85113..000000000 --- a/examples/email/Makefile.c128.defines +++ /dev/null @@ -1 +0,0 @@ -DEFINES = WITH_CLIENT,WITH_DNS,WITH_GUI,WITH_PFS diff --git a/examples/email/Makefile.c64.defines b/examples/email/Makefile.c64.defines deleted file mode 100644 index 05a72fd5d..000000000 --- a/examples/email/Makefile.c64.defines +++ /dev/null @@ -1 +0,0 @@ -DEFINES = WITH_CLIENT,WITH_DNS,WITH_GUI,WITH_MOUSE,WITH_PFS diff --git a/examples/er-rest-example-raven/Makefile b/examples/er-rest-example-raven/Makefile new file mode 100644 index 000000000..02cfb3c18 --- /dev/null +++ b/examples/er-rest-example-raven/Makefile @@ -0,0 +1,15 @@ +TARGET=avr-raven + +APPS += raven-lcd-interface + +export + +CONTIKI=../.. + +ER_REST_EXAMPLE=$(CONTIKI)/examples/er-rest-example + +all %: + @(cd $(ER_REST_EXAMPLE) && $(MAKE) $@) + @echo + @echo "*** Binaries can be found in $(ER_REST_EXAMPLE) ***" + diff --git a/examples/er-rest-example/er-example-server.c b/examples/er-rest-example/er-example-server.c index 41a07a501..d8e1c79b2 100644 --- a/examples/er-rest-example/er-example-server.c +++ b/examples/er-rest-example/er-example-server.c @@ -79,11 +79,17 @@ extern resource_t res_leds, res_toggle; #include "dev/light-sensor.h" extern resource_t res_light; #endif -/* #if PLATFORM_HAS_BATTERY #include "dev/battery-sensor.h" extern resource_t res_battery; #endif +#if PLATFORM_HAS_TEMPERATURE +#include "dev/temperature-sensor.h" +extern resource_t res_temperature; +#endif +/* +extern resource_t res_battery; +#endif #if PLATFORM_HAS_RADIO #include "dev/radio-sensor.h" extern resource_t res_radio; @@ -141,11 +147,15 @@ PROCESS_THREAD(er_example_server, ev, data) rest_activate_resource(&res_light, "sensors/light"); SENSORS_ACTIVATE(light_sensor); #endif -/* #if PLATFORM_HAS_BATTERY rest_activate_resource(&res_battery, "sensors/battery"); SENSORS_ACTIVATE(battery_sensor); #endif +#if PLATFORM_HAS_TEMPERATURE + rest_activate_resource(&res_temperature, "sensors/temperature"); + SENSORS_ACTIVATE(temperature_sensor); +#endif +/* #if PLATFORM_HAS_RADIO rest_activate_resource(&res_radio, "sensors/radio"); SENSORS_ACTIVATE(radio_sensor); diff --git a/examples/er-rest-example/resources/res-b1-sep-b2.c b/examples/er-rest-example/resources/res-b1-sep-b2.c index be4d8f943..7dcbdd0ca 100644 --- a/examples/er-rest-example/resources/res-b1-sep-b2.c +++ b/examples/er-rest-example/resources/res-b1-sep-b2.c @@ -67,9 +67,9 @@ res_post_handler(void *request, void *response, uint8_t *buffer, uint16_t prefer coap_separate_accept(request, &request_metadata); /* Need Time for calculation now */ - uint32_t i; + unsigned i; for(i = 0; i <= 4096; i++) { - printf("\r% 4u\r", i); + printf("\r%4u\r", i); } printf("\n"); diff --git a/examples/er-rest-example/resources/res-temperature.c b/examples/er-rest-example/resources/res-temperature.c new file mode 100644 index 000000000..c8bce8ba8 --- /dev/null +++ b/examples/er-rest-example/resources/res-temperature.c @@ -0,0 +1,125 @@ +/* + * Copyright (c) 2013, Institute for Pervasive Computing, ETH Zurich + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the Contiki operating system. + */ + +/** + * \file + * Example of an observable "on-change" temperature resource + * \author + * Matthias Kovatsch + * \author + * Cristiano De Alti + */ + +#include "contiki.h" + +#if PLATFORM_HAS_TEMPERATURE + +#include +#include +#include +#include "rest-engine.h" +#include "dev/temperature-sensor.h" + +static void res_get_handler(void *request, void *response, uint8_t *buffer, uint16_t preferred_size, int32_t *offset); +static void res_periodic_handler(void); + +#define MAX_AGE 60 +#define INTERVAL_MIN 5 +#define INTERVAL_MAX (MAX_AGE - 1) +#define CHANGE 1 + +static int32_t interval_counter = INTERVAL_MIN; +static int temperature_old = INT_MIN; + +PERIODIC_RESOURCE(res_temperature, + "title=\"Temperature\";rt=\"Temperature\";obs", + res_get_handler, + NULL, + NULL, + NULL, + CLOCK_SECOND, + res_periodic_handler); + +static void +res_get_handler(void *request, void *response, uint8_t *buffer, uint16_t preferred_size, int32_t *offset) +{ + /* + * For minimal complexity, request query and options should be ignored for GET on observable resources. + * Otherwise the requests must be stored with the observer list and passed by REST.notify_subscribers(). + * This would be a TODO in the corresponding files in contiki/apps/erbium/! + */ + + int temperature = temperature_sensor.value(0); + + unsigned int accept = -1; + REST.get_header_accept(request, &accept); + + if(accept == -1 || accept == REST.type.TEXT_PLAIN) { + REST.set_header_content_type(response, REST.type.TEXT_PLAIN); + snprintf((char *)buffer, REST_MAX_CHUNK_SIZE, "%d", temperature); + + REST.set_response_payload(response, (uint8_t *)buffer, strlen((char *)buffer)); + } else if(accept == REST.type.APPLICATION_JSON) { + REST.set_header_content_type(response, REST.type.APPLICATION_JSON); + snprintf((char *)buffer, REST_MAX_CHUNK_SIZE, "{'temperature':%d}", temperature); + + REST.set_response_payload(response, buffer, strlen((char *)buffer)); + } else { + REST.set_response_status(response, REST.status.NOT_ACCEPTABLE); + const char *msg = "Supporting content-types text/plain and application/json"; + REST.set_response_payload(response, msg, strlen(msg)); + } + + REST.set_header_max_age(response, MAX_AGE); + + /* The REST.subscription_handler() will be called for observable resources by the REST framework. */ +} + +/* + * Additionally, a handler function named [resource name]_handler must be implemented for each PERIODIC_RESOURCE. + * It will be called by the REST manager process with the defined period. + */ +static void +res_periodic_handler() +{ + int temperature = temperature_sensor.value(0); + + ++interval_counter; + + if((abs(temperature - temperature_old) >= CHANGE && interval_counter >= INTERVAL_MIN) || + interval_counter >= INTERVAL_MAX) { + interval_counter = 0; + temperature_old = temperature; + /* Notify the registered observers which will trigger the res_get_handler to create the response. */ + REST.notify_subscribers(&res_temperature); + } +} +#endif /* PLATFORM_HAS_TEMPERATURE */ diff --git a/examples/er-rest-example/server-client-native.csc b/examples/er-rest-example/server-client-native.csc index 71e314075..2bc180592 100644 --- a/examples/er-rest-example/server-client-native.csc +++ b/examples/er-rest-example/server-client-native.csc @@ -1,231 +1,231 @@ - - - [APPS_DIR]/mrm - [APPS_DIR]/mspsim - [APPS_DIR]/avrora - [APPS_DIR]/serial_socket - [APPS_DIR]/collect-view - [APPS_DIR]/powertracker - - REST with RPL router - 1.0 - 123456 - 1000000 - - org.contikios.cooja.radiomediums.UDGM - 50.0 - 50.0 - 1.0 - 1.0 - - - 40000 - - - org.contikios.cooja.mspmote.SkyMoteType - slipradio - Sky SLIP radio - [CONTIKI_DIR]/examples/ipv6/slip-radio/slip-radio.c - make slip-radio.sky TARGET=sky - [CONTIKI_DIR]/examples/ipv6/slip-radio/slip-radio.sky - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.interfaces.IPAddress - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - org.contikios.cooja.mspmote.interfaces.MspClock - org.contikios.cooja.mspmote.interfaces.MspMoteID - org.contikios.cooja.mspmote.interfaces.SkyButton - org.contikios.cooja.mspmote.interfaces.SkyFlash - org.contikios.cooja.mspmote.interfaces.SkyCoffeeFilesystem - org.contikios.cooja.mspmote.interfaces.Msp802154Radio - org.contikios.cooja.mspmote.interfaces.MspSerial - org.contikios.cooja.mspmote.interfaces.SkyLED - org.contikios.cooja.mspmote.interfaces.MspDebugOutput - org.contikios.cooja.mspmote.interfaces.SkyTemperature - - - org.contikios.cooja.mspmote.SkyMoteType - server - Erbium Server - [CONTIKI_DIR]/examples/er-rest-example/er-example-server.c - make er-example-server.sky TARGET=sky - [CONTIKI_DIR]/examples/er-rest-example/er-example-server.sky - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.interfaces.IPAddress - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - org.contikios.cooja.mspmote.interfaces.MspClock - org.contikios.cooja.mspmote.interfaces.MspMoteID - org.contikios.cooja.mspmote.interfaces.SkyButton - org.contikios.cooja.mspmote.interfaces.SkyFlash - org.contikios.cooja.mspmote.interfaces.SkyCoffeeFilesystem - org.contikios.cooja.mspmote.interfaces.Msp802154Radio - org.contikios.cooja.mspmote.interfaces.MspSerial - org.contikios.cooja.mspmote.interfaces.SkyLED - org.contikios.cooja.mspmote.interfaces.MspDebugOutput - org.contikios.cooja.mspmote.interfaces.SkyTemperature - - - org.contikios.cooja.mspmote.SkyMoteType - client - Erbium Client - [CONTIKI_DIR]/examples/er-rest-example/er-example-client.c - make er-example-client.sky TARGET=sky - [CONTIKI_DIR]/examples/er-rest-example/er-example-client.sky - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.interfaces.IPAddress - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - org.contikios.cooja.mspmote.interfaces.MspClock - org.contikios.cooja.mspmote.interfaces.MspMoteID - org.contikios.cooja.mspmote.interfaces.SkyButton - org.contikios.cooja.mspmote.interfaces.SkyFlash - org.contikios.cooja.mspmote.interfaces.SkyCoffeeFilesystem - org.contikios.cooja.mspmote.interfaces.Msp802154Radio - org.contikios.cooja.mspmote.interfaces.MspSerial - org.contikios.cooja.mspmote.interfaces.SkyLED - org.contikios.cooja.mspmote.interfaces.MspDebugOutput - org.contikios.cooja.mspmote.interfaces.SkyTemperature - - - - - org.contikios.cooja.interfaces.Position - 30.303994886410642 - 17.22128424003353 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 1 - - slipradio - - - - - org.contikios.cooja.interfaces.Position - 46.57186415376375 - 37.25589203828498 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 2 - - server - - - - - org.contikios.cooja.interfaces.Position - 18.194682268367348 - 50.210548118402656 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 3 - - client - - - - org.contikios.cooja.plugins.SimControl - 259 - 0 - 179 - 1 - 2 - - - org.contikios.cooja.plugins.Visualizer - - org.contikios.cooja.plugins.skins.IDVisualizerSkin - org.contikios.cooja.plugins.skins.UDGMVisualizerSkin - org.contikios.cooja.plugins.skins.MoteTypeVisualizerSkin - org.contikios.cooja.plugins.skins.AttributeVisualizerSkin - org.contikios.cooja.plugins.skins.LEDVisualizerSkin - org.contikios.cooja.plugins.skins.AddressVisualizerSkin - 2.255467003316979 0.0 0.0 2.255467003316979 59.30641698643764 -13.478401994502008 - - 300 - 2 - 178 - 262 - 1 - - - org.contikios.cooja.plugins.LogListener - - - - - - 762 - 4 - 491 - 2 - 182 - - - org.contikios.cooja.plugins.RadioLogger - - 150 - - false - false - - - 451 - -1 - 305 - 73 - 140 - true - - - org.contikios.cooja.plugins.TimeLine - - 0 - 1 - 2 - - - - - 25.49079397896416 - - 1624 - 5 - 252 - 6 - 712 - - - org.contikios.cooja.plugins.MoteInterfaceViewer - 1 - - Serial port - 0,0 - - 853 - 3 - 491 - 765 - 182 - - - SerialSocketServer - 0 - 422 - 1 - 82 - 606 - 51 - - - + + + [APPS_DIR]/mrm + [APPS_DIR]/mspsim + [APPS_DIR]/avrora + [APPS_DIR]/serial_socket + [APPS_DIR]/collect-view + [APPS_DIR]/powertracker + + REST with RPL router + 1.0 + 123456 + 1000000 + + org.contikios.cooja.radiomediums.UDGM + 50.0 + 50.0 + 1.0 + 1.0 + + + 40000 + + + org.contikios.cooja.mspmote.SkyMoteType + slipradio + Sky SLIP radio + [CONTIKI_DIR]/examples/ipv6/slip-radio/slip-radio.c + make slip-radio.sky TARGET=sky + [CONTIKI_DIR]/examples/ipv6/slip-radio/slip-radio.sky + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.interfaces.IPAddress + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + org.contikios.cooja.mspmote.interfaces.MspClock + org.contikios.cooja.mspmote.interfaces.MspMoteID + org.contikios.cooja.mspmote.interfaces.SkyButton + org.contikios.cooja.mspmote.interfaces.SkyFlash + org.contikios.cooja.mspmote.interfaces.SkyCoffeeFilesystem + org.contikios.cooja.mspmote.interfaces.Msp802154Radio + org.contikios.cooja.mspmote.interfaces.MspSerial + org.contikios.cooja.mspmote.interfaces.SkyLED + org.contikios.cooja.mspmote.interfaces.MspDebugOutput + org.contikios.cooja.mspmote.interfaces.SkyTemperature + + + org.contikios.cooja.mspmote.SkyMoteType + server + Erbium Server + [CONTIKI_DIR]/examples/er-rest-example/er-example-server.c + make er-example-server.sky TARGET=sky + [CONTIKI_DIR]/examples/er-rest-example/er-example-server.sky + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.interfaces.IPAddress + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + org.contikios.cooja.mspmote.interfaces.MspClock + org.contikios.cooja.mspmote.interfaces.MspMoteID + org.contikios.cooja.mspmote.interfaces.SkyButton + org.contikios.cooja.mspmote.interfaces.SkyFlash + org.contikios.cooja.mspmote.interfaces.SkyCoffeeFilesystem + org.contikios.cooja.mspmote.interfaces.Msp802154Radio + org.contikios.cooja.mspmote.interfaces.MspSerial + org.contikios.cooja.mspmote.interfaces.SkyLED + org.contikios.cooja.mspmote.interfaces.MspDebugOutput + org.contikios.cooja.mspmote.interfaces.SkyTemperature + + + org.contikios.cooja.mspmote.SkyMoteType + client + Erbium Client + [CONTIKI_DIR]/examples/er-rest-example/er-example-client.c + make er-example-client.sky TARGET=sky + [CONTIKI_DIR]/examples/er-rest-example/er-example-client.sky + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.interfaces.IPAddress + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + org.contikios.cooja.mspmote.interfaces.MspClock + org.contikios.cooja.mspmote.interfaces.MspMoteID + org.contikios.cooja.mspmote.interfaces.SkyButton + org.contikios.cooja.mspmote.interfaces.SkyFlash + org.contikios.cooja.mspmote.interfaces.SkyCoffeeFilesystem + org.contikios.cooja.mspmote.interfaces.Msp802154Radio + org.contikios.cooja.mspmote.interfaces.MspSerial + org.contikios.cooja.mspmote.interfaces.SkyLED + org.contikios.cooja.mspmote.interfaces.MspDebugOutput + org.contikios.cooja.mspmote.interfaces.SkyTemperature + + + + + org.contikios.cooja.interfaces.Position + 30.303994886410642 + 17.22128424003353 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 1 + + slipradio + + + + + org.contikios.cooja.interfaces.Position + 46.57186415376375 + 37.25589203828498 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 2 + + server + + + + + org.contikios.cooja.interfaces.Position + 18.194682268367348 + 50.210548118402656 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 3 + + client + + + + org.contikios.cooja.plugins.SimControl + 259 + 0 + 179 + 1 + 2 + + + org.contikios.cooja.plugins.Visualizer + + org.contikios.cooja.plugins.skins.IDVisualizerSkin + org.contikios.cooja.plugins.skins.UDGMVisualizerSkin + org.contikios.cooja.plugins.skins.MoteTypeVisualizerSkin + org.contikios.cooja.plugins.skins.AttributeVisualizerSkin + org.contikios.cooja.plugins.skins.LEDVisualizerSkin + org.contikios.cooja.plugins.skins.AddressVisualizerSkin + 2.255467003316979 0.0 0.0 2.255467003316979 59.30641698643764 -13.478401994502008 + + 300 + 2 + 178 + 262 + 1 + + + org.contikios.cooja.plugins.LogListener + + + + + + 762 + 4 + 491 + 2 + 182 + + + org.contikios.cooja.plugins.RadioLogger + + 150 + + false + false + + + 451 + -1 + 305 + 73 + 140 + true + + + org.contikios.cooja.plugins.TimeLine + + 0 + 1 + 2 + + + + + 25.49079397896416 + + 1624 + 5 + 252 + 6 + 712 + + + org.contikios.cooja.plugins.MoteInterfaceViewer + 1 + + Serial port + 0,0 + + 853 + 3 + 491 + 765 + 182 + + + SerialSocketServer + 0 + 422 + 1 + 82 + 606 + 51 + + + diff --git a/examples/er-rest-example/server-client.csc b/examples/er-rest-example/server-client.csc index 470a9edfe..802a40cc0 100644 --- a/examples/er-rest-example/server-client.csc +++ b/examples/er-rest-example/server-client.csc @@ -1,231 +1,231 @@ - - - [APPS_DIR]/mrm - [APPS_DIR]/mspsim - [APPS_DIR]/avrora - [APPS_DIR]/serial_socket - [APPS_DIR]/collect-view - [APPS_DIR]/powertracker - - REST with RPL router - 1.0 - 123456 - 1000000 - - org.contikios.cooja.radiomediums.UDGM - 50.0 - 50.0 - 1.0 - 1.0 - - - 40000 - - - org.contikios.cooja.mspmote.SkyMoteType - rplroot - Sky RPL Root - [CONTIKI_DIR]/examples/ipv6/rpl-border-router/border-router.c - make border-router.sky TARGET=sky - [CONTIKI_DIR]/examples/ipv6/rpl-border-router/border-router.sky - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.interfaces.IPAddress - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - org.contikios.cooja.mspmote.interfaces.MspClock - org.contikios.cooja.mspmote.interfaces.MspMoteID - org.contikios.cooja.mspmote.interfaces.SkyButton - org.contikios.cooja.mspmote.interfaces.SkyFlash - org.contikios.cooja.mspmote.interfaces.SkyCoffeeFilesystem - org.contikios.cooja.mspmote.interfaces.Msp802154Radio - org.contikios.cooja.mspmote.interfaces.MspSerial - org.contikios.cooja.mspmote.interfaces.SkyLED - org.contikios.cooja.mspmote.interfaces.MspDebugOutput - org.contikios.cooja.mspmote.interfaces.SkyTemperature - - - org.contikios.cooja.mspmote.SkyMoteType - server - Erbium Server - [CONTIKI_DIR]/examples/er-rest-example/er-example-server.c - make er-example-server.sky TARGET=sky - [CONTIKI_DIR]/examples/er-rest-example/er-example-server.sky - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.interfaces.IPAddress - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - org.contikios.cooja.mspmote.interfaces.MspClock - org.contikios.cooja.mspmote.interfaces.MspMoteID - org.contikios.cooja.mspmote.interfaces.SkyButton - org.contikios.cooja.mspmote.interfaces.SkyFlash - org.contikios.cooja.mspmote.interfaces.SkyCoffeeFilesystem - org.contikios.cooja.mspmote.interfaces.Msp802154Radio - org.contikios.cooja.mspmote.interfaces.MspSerial - org.contikios.cooja.mspmote.interfaces.SkyLED - org.contikios.cooja.mspmote.interfaces.MspDebugOutput - org.contikios.cooja.mspmote.interfaces.SkyTemperature - - - org.contikios.cooja.mspmote.SkyMoteType - client - Erbium Client - [CONTIKI_DIR]/examples/er-rest-example/er-example-client.c - make er-example-client.sky TARGET=sky - [CONTIKI_DIR]/examples/er-rest-example/er-example-client.sky - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.interfaces.IPAddress - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - org.contikios.cooja.mspmote.interfaces.MspClock - org.contikios.cooja.mspmote.interfaces.MspMoteID - org.contikios.cooja.mspmote.interfaces.SkyButton - org.contikios.cooja.mspmote.interfaces.SkyFlash - org.contikios.cooja.mspmote.interfaces.SkyCoffeeFilesystem - org.contikios.cooja.mspmote.interfaces.Msp802154Radio - org.contikios.cooja.mspmote.interfaces.MspSerial - org.contikios.cooja.mspmote.interfaces.SkyLED - org.contikios.cooja.mspmote.interfaces.MspDebugOutput - org.contikios.cooja.mspmote.interfaces.SkyTemperature - - - - - org.contikios.cooja.interfaces.Position - 33.260163187353555 - 30.643217359962595 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 1 - - rplroot - - - - - org.contikios.cooja.interfaces.Position - 46.57186415376375 - 40.35946215910942 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 2 - - server - - - - - org.contikios.cooja.interfaces.Position - 18.638049428485125 - 47.55034515769599 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 3 - - client - - - - org.contikios.cooja.plugins.SimControl - 259 - 0 - 179 - 2 - 1 - - - org.contikios.cooja.plugins.Visualizer - - org.contikios.cooja.plugins.skins.IDVisualizerSkin - org.contikios.cooja.plugins.skins.UDGMVisualizerSkin - org.contikios.cooja.plugins.skins.MoteTypeVisualizerSkin - org.contikios.cooja.plugins.skins.AttributeVisualizerSkin - org.contikios.cooja.plugins.skins.LEDVisualizerSkin - org.contikios.cooja.plugins.skins.AddressVisualizerSkin - 3.61568947862321 0.0 0.0 3.61568947862321 15.610600779367 -85.92728269158351 - - 300 - 2 - 178 - 261 - 1 - - - org.contikios.cooja.plugins.LogListener - - - - - - 762 - 3 - 491 - 2 - 182 - - - org.contikios.cooja.plugins.RadioLogger - - 150 - - false - false - - - 451 - -1 - 305 - 73 - 140 - true - - - SerialSocketServer - 0 - 422 - 4 - 74 - 578 - 18 - - - org.contikios.cooja.plugins.TimeLine - - 0 - 1 - 2 - - - - - 25.49079397896416 - - 1624 - 5 - 252 - 6 - 712 - - - org.contikios.cooja.plugins.MoteInterfaceViewer - 2 - - Serial port - 0,0 - - 853 - 1 - 491 - 765 - 182 - - - + + + [APPS_DIR]/mrm + [APPS_DIR]/mspsim + [APPS_DIR]/avrora + [APPS_DIR]/serial_socket + [APPS_DIR]/collect-view + [APPS_DIR]/powertracker + + REST with RPL router + 1.0 + 123456 + 1000000 + + org.contikios.cooja.radiomediums.UDGM + 50.0 + 50.0 + 1.0 + 1.0 + + + 40000 + + + org.contikios.cooja.mspmote.SkyMoteType + rplroot + Sky RPL Root + [CONTIKI_DIR]/examples/ipv6/rpl-border-router/border-router.c + make border-router.sky TARGET=sky + [CONTIKI_DIR]/examples/ipv6/rpl-border-router/border-router.sky + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.interfaces.IPAddress + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + org.contikios.cooja.mspmote.interfaces.MspClock + org.contikios.cooja.mspmote.interfaces.MspMoteID + org.contikios.cooja.mspmote.interfaces.SkyButton + org.contikios.cooja.mspmote.interfaces.SkyFlash + org.contikios.cooja.mspmote.interfaces.SkyCoffeeFilesystem + org.contikios.cooja.mspmote.interfaces.Msp802154Radio + org.contikios.cooja.mspmote.interfaces.MspSerial + org.contikios.cooja.mspmote.interfaces.SkyLED + org.contikios.cooja.mspmote.interfaces.MspDebugOutput + org.contikios.cooja.mspmote.interfaces.SkyTemperature + + + org.contikios.cooja.mspmote.SkyMoteType + server + Erbium Server + [CONTIKI_DIR]/examples/er-rest-example/er-example-server.c + make er-example-server.sky TARGET=sky + [CONTIKI_DIR]/examples/er-rest-example/er-example-server.sky + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.interfaces.IPAddress + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + org.contikios.cooja.mspmote.interfaces.MspClock + org.contikios.cooja.mspmote.interfaces.MspMoteID + org.contikios.cooja.mspmote.interfaces.SkyButton + org.contikios.cooja.mspmote.interfaces.SkyFlash + org.contikios.cooja.mspmote.interfaces.SkyCoffeeFilesystem + org.contikios.cooja.mspmote.interfaces.Msp802154Radio + org.contikios.cooja.mspmote.interfaces.MspSerial + org.contikios.cooja.mspmote.interfaces.SkyLED + org.contikios.cooja.mspmote.interfaces.MspDebugOutput + org.contikios.cooja.mspmote.interfaces.SkyTemperature + + + org.contikios.cooja.mspmote.SkyMoteType + client + Erbium Client + [CONTIKI_DIR]/examples/er-rest-example/er-example-client.c + make er-example-client.sky TARGET=sky + [CONTIKI_DIR]/examples/er-rest-example/er-example-client.sky + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.interfaces.IPAddress + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + org.contikios.cooja.mspmote.interfaces.MspClock + org.contikios.cooja.mspmote.interfaces.MspMoteID + org.contikios.cooja.mspmote.interfaces.SkyButton + org.contikios.cooja.mspmote.interfaces.SkyFlash + org.contikios.cooja.mspmote.interfaces.SkyCoffeeFilesystem + org.contikios.cooja.mspmote.interfaces.Msp802154Radio + org.contikios.cooja.mspmote.interfaces.MspSerial + org.contikios.cooja.mspmote.interfaces.SkyLED + org.contikios.cooja.mspmote.interfaces.MspDebugOutput + org.contikios.cooja.mspmote.interfaces.SkyTemperature + + + + + org.contikios.cooja.interfaces.Position + 33.260163187353555 + 30.643217359962595 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 1 + + rplroot + + + + + org.contikios.cooja.interfaces.Position + 46.57186415376375 + 40.35946215910942 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 2 + + server + + + + + org.contikios.cooja.interfaces.Position + 18.638049428485125 + 47.55034515769599 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 3 + + client + + + + org.contikios.cooja.plugins.SimControl + 259 + 0 + 179 + 2 + 1 + + + org.contikios.cooja.plugins.Visualizer + + org.contikios.cooja.plugins.skins.IDVisualizerSkin + org.contikios.cooja.plugins.skins.UDGMVisualizerSkin + org.contikios.cooja.plugins.skins.MoteTypeVisualizerSkin + org.contikios.cooja.plugins.skins.AttributeVisualizerSkin + org.contikios.cooja.plugins.skins.LEDVisualizerSkin + org.contikios.cooja.plugins.skins.AddressVisualizerSkin + 3.61568947862321 0.0 0.0 3.61568947862321 15.610600779367 -85.92728269158351 + + 300 + 2 + 178 + 261 + 1 + + + org.contikios.cooja.plugins.LogListener + + + + + + 762 + 3 + 491 + 2 + 182 + + + org.contikios.cooja.plugins.RadioLogger + + 150 + + false + false + + + 451 + -1 + 305 + 73 + 140 + true + + + SerialSocketServer + 0 + 422 + 4 + 74 + 578 + 18 + + + org.contikios.cooja.plugins.TimeLine + + 0 + 1 + 2 + + + + + 25.49079397896416 + + 1624 + 5 + 252 + 6 + 712 + + + org.contikios.cooja.plugins.MoteInterfaceViewer + 2 + + Serial port + 0,0 + + 853 + 1 + 491 + 765 + 182 + + + diff --git a/examples/er-rest-example/server-only.csc b/examples/er-rest-example/server-only.csc index 6c0bba3e0..0557a29f9 100644 --- a/examples/er-rest-example/server-only.csc +++ b/examples/er-rest-example/server-only.csc @@ -1,193 +1,193 @@ - - - [APPS_DIR]/mrm - [APPS_DIR]/mspsim - [APPS_DIR]/avrora - [APPS_DIR]/serial_socket - [APPS_DIR]/collect-view - [APPS_DIR]/powertracker - - REST with RPL router - 1.0 - 123456 - 1000000 - - org.contikios.cooja.radiomediums.UDGM - 50.0 - 50.0 - 1.0 - 1.0 - - - 40000 - - - org.contikios.cooja.mspmote.SkyMoteType - rplroot - Sky RPL Root - [CONTIKI_DIR]/examples/ipv6/rpl-border-router/border-router.c - make border-router.sky TARGET=sky - [CONTIKI_DIR]/examples/ipv6/rpl-border-router/border-router.sky - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.interfaces.IPAddress - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - org.contikios.cooja.mspmote.interfaces.MspClock - org.contikios.cooja.mspmote.interfaces.MspMoteID - org.contikios.cooja.mspmote.interfaces.SkyButton - org.contikios.cooja.mspmote.interfaces.SkyFlash - org.contikios.cooja.mspmote.interfaces.SkyCoffeeFilesystem - org.contikios.cooja.mspmote.interfaces.Msp802154Radio - org.contikios.cooja.mspmote.interfaces.MspSerial - org.contikios.cooja.mspmote.interfaces.SkyLED - org.contikios.cooja.mspmote.interfaces.MspDebugOutput - org.contikios.cooja.mspmote.interfaces.SkyTemperature - - - org.contikios.cooja.mspmote.SkyMoteType - server - Erbium Server - [CONTIKI_DIR]/examples/er-rest-example/er-example-server.c - make er-example-server.sky TARGET=sky - [CONTIKI_DIR]/examples/er-rest-example/er-example-server.sky - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.interfaces.IPAddress - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - org.contikios.cooja.mspmote.interfaces.MspClock - org.contikios.cooja.mspmote.interfaces.MspMoteID - org.contikios.cooja.mspmote.interfaces.SkyButton - org.contikios.cooja.mspmote.interfaces.SkyFlash - org.contikios.cooja.mspmote.interfaces.SkyCoffeeFilesystem - org.contikios.cooja.mspmote.interfaces.Msp802154Radio - org.contikios.cooja.mspmote.interfaces.MspSerial - org.contikios.cooja.mspmote.interfaces.SkyLED - org.contikios.cooja.mspmote.interfaces.MspDebugOutput - org.contikios.cooja.mspmote.interfaces.SkyTemperature - - - - - org.contikios.cooja.interfaces.Position - 33.260163187353555 - 30.643217359962595 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 1 - - rplroot - - - - - org.contikios.cooja.interfaces.Position - 35.100895239785295 - 39.70574552287428 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 2 - - server - - - - org.contikios.cooja.plugins.SimControl - 259 - 0 - 179 - 2 - 1 - - - org.contikios.cooja.plugins.Visualizer - - org.contikios.cooja.plugins.skins.IDVisualizerSkin - org.contikios.cooja.plugins.skins.UDGMVisualizerSkin - org.contikios.cooja.plugins.skins.MoteTypeVisualizerSkin - org.contikios.cooja.plugins.skins.AttributeVisualizerSkin - org.contikios.cooja.plugins.skins.LEDVisualizerSkin - org.contikios.cooja.plugins.skins.AddressVisualizerSkin - 7.9849281638410705 0.0 0.0 7.9849281638410705 -133.27812697619663 -225.04752569190535 - - 300 - 1 - 175 - 262 - 2 - - - org.contikios.cooja.plugins.LogListener - - - - - - 560 - 3 - 326 - 1 - 293 - - - org.contikios.cooja.plugins.RadioLogger - - 150 - - false - false - - - 451 - -1 - 305 - 73 - 140 - true - - - SerialSocketServer - 0 - 422 - 4 - 74 - 39 - 199 - - - org.contikios.cooja.plugins.TimeLine - - 0 - 1 - - - - - 25.49079397896416 - - 1624 - 5 - 252 - 4 - 622 - - - org.contikios.cooja.plugins.MoteInterfaceViewer - 1 - - Serial port - 0,0 - - 702 - 2 - 646 - 564 - 2 - - - + + + [APPS_DIR]/mrm + [APPS_DIR]/mspsim + [APPS_DIR]/avrora + [APPS_DIR]/serial_socket + [APPS_DIR]/collect-view + [APPS_DIR]/powertracker + + REST with RPL router + 1.0 + 123456 + 1000000 + + org.contikios.cooja.radiomediums.UDGM + 50.0 + 50.0 + 1.0 + 1.0 + + + 40000 + + + org.contikios.cooja.mspmote.SkyMoteType + rplroot + Sky RPL Root + [CONTIKI_DIR]/examples/ipv6/rpl-border-router/border-router.c + make border-router.sky TARGET=sky + [CONTIKI_DIR]/examples/ipv6/rpl-border-router/border-router.sky + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.interfaces.IPAddress + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + org.contikios.cooja.mspmote.interfaces.MspClock + org.contikios.cooja.mspmote.interfaces.MspMoteID + org.contikios.cooja.mspmote.interfaces.SkyButton + org.contikios.cooja.mspmote.interfaces.SkyFlash + org.contikios.cooja.mspmote.interfaces.SkyCoffeeFilesystem + org.contikios.cooja.mspmote.interfaces.Msp802154Radio + org.contikios.cooja.mspmote.interfaces.MspSerial + org.contikios.cooja.mspmote.interfaces.SkyLED + org.contikios.cooja.mspmote.interfaces.MspDebugOutput + org.contikios.cooja.mspmote.interfaces.SkyTemperature + + + org.contikios.cooja.mspmote.SkyMoteType + server + Erbium Server + [CONTIKI_DIR]/examples/er-rest-example/er-example-server.c + make er-example-server.sky TARGET=sky + [CONTIKI_DIR]/examples/er-rest-example/er-example-server.sky + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.interfaces.IPAddress + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + org.contikios.cooja.mspmote.interfaces.MspClock + org.contikios.cooja.mspmote.interfaces.MspMoteID + org.contikios.cooja.mspmote.interfaces.SkyButton + org.contikios.cooja.mspmote.interfaces.SkyFlash + org.contikios.cooja.mspmote.interfaces.SkyCoffeeFilesystem + org.contikios.cooja.mspmote.interfaces.Msp802154Radio + org.contikios.cooja.mspmote.interfaces.MspSerial + org.contikios.cooja.mspmote.interfaces.SkyLED + org.contikios.cooja.mspmote.interfaces.MspDebugOutput + org.contikios.cooja.mspmote.interfaces.SkyTemperature + + + + + org.contikios.cooja.interfaces.Position + 33.260163187353555 + 30.643217359962595 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 1 + + rplroot + + + + + org.contikios.cooja.interfaces.Position + 35.100895239785295 + 39.70574552287428 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 2 + + server + + + + org.contikios.cooja.plugins.SimControl + 259 + 0 + 179 + 2 + 1 + + + org.contikios.cooja.plugins.Visualizer + + org.contikios.cooja.plugins.skins.IDVisualizerSkin + org.contikios.cooja.plugins.skins.UDGMVisualizerSkin + org.contikios.cooja.plugins.skins.MoteTypeVisualizerSkin + org.contikios.cooja.plugins.skins.AttributeVisualizerSkin + org.contikios.cooja.plugins.skins.LEDVisualizerSkin + org.contikios.cooja.plugins.skins.AddressVisualizerSkin + 7.9849281638410705 0.0 0.0 7.9849281638410705 -133.27812697619663 -225.04752569190535 + + 300 + 1 + 175 + 262 + 2 + + + org.contikios.cooja.plugins.LogListener + + + + + + 560 + 3 + 326 + 1 + 293 + + + org.contikios.cooja.plugins.RadioLogger + + 150 + + false + false + + + 451 + -1 + 305 + 73 + 140 + true + + + SerialSocketServer + 0 + 422 + 4 + 74 + 39 + 199 + + + org.contikios.cooja.plugins.TimeLine + + 0 + 1 + + + + + 25.49079397896416 + + 1624 + 5 + 252 + 4 + 622 + + + org.contikios.cooja.plugins.MoteInterfaceViewer + 1 + + Serial port + 0,0 + + 702 + 2 + 646 + 564 + 2 + + + diff --git a/examples/ftp/Makefile.apple2enh.defines b/examples/ftp/Makefile.apple2enh.defines deleted file mode 100644 index 5a292701b..000000000 --- a/examples/ftp/Makefile.apple2enh.defines +++ /dev/null @@ -1 +0,0 @@ -DEFINES = WITH_CLIENT,WITH_DNS,WITH_GUI,WITH_MOUSE diff --git a/examples/ftp/Makefile.atarixl.defines b/examples/ftp/Makefile.atarixl.defines deleted file mode 100644 index 5a292701b..000000000 --- a/examples/ftp/Makefile.atarixl.defines +++ /dev/null @@ -1 +0,0 @@ -DEFINES = WITH_CLIENT,WITH_DNS,WITH_GUI,WITH_MOUSE diff --git a/examples/ftp/Makefile.c128.defines b/examples/ftp/Makefile.c128.defines deleted file mode 100644 index 7f438d1d1..000000000 --- a/examples/ftp/Makefile.c128.defines +++ /dev/null @@ -1 +0,0 @@ -DEFINES = WITH_CLIENT,WITH_DNS,WITH_GUI diff --git a/examples/ftp/Makefile.c64.defines b/examples/ftp/Makefile.c64.defines deleted file mode 100644 index 05a72fd5d..000000000 --- a/examples/ftp/Makefile.c64.defines +++ /dev/null @@ -1 +0,0 @@ -DEFINES = WITH_CLIENT,WITH_DNS,WITH_GUI,WITH_MOUSE,WITH_PFS diff --git a/examples/hello-world/hello-world-example.csc b/examples/hello-world/hello-world-example.csc index 9d4b92395..2fe722c97 100644 --- a/examples/hello-world/hello-world-example.csc +++ b/examples/hello-world/hello-world-example.csc @@ -1,126 +1,126 @@ - - - [CONTIKI_DIR]/tools/cooja/apps/mrm - [CONTIKI_DIR]/tools/cooja/apps/mspsim - [CONTIKI_DIR]/tools/cooja/apps/avrora - [CONTIKI_DIR]/tools/cooja/apps/native_gateway - [CONTIKI_DIR]/tools/cooja/apps/serial_socket - /home/user/contikiprojects/sics.se/mobility - [CONTIKI_DIR]/tools/cooja/apps/collect-view - /home/user/contikiprojects/sics.se/powertracker - - Hello world example - 0 - 123456 - 1000000 - - org.contikios.cooja.radiomediums.UDGM - 50.0 - 100.0 - 1.0 - 1.0 - - - 40000 - - - org.contikios.cooja.mspmote.SkyMoteType - sky1 - Hello world sky - [CONTIKI_DIR]/examples/hello-world/hello-world.c - make hello-world.sky TARGET=sky - [CONTIKI_DIR]/examples/hello-world/hello-world.sky - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.interfaces.IPAddress - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - org.contikios.cooja.mspmote.interfaces.MspClock - org.contikios.cooja.mspmote.interfaces.MspMoteID - org.contikios.cooja.mspmote.interfaces.SkyButton - org.contikios.cooja.mspmote.interfaces.SkyFlash - org.contikios.cooja.mspmote.interfaces.SkyCoffeeFilesystem - org.contikios.cooja.mspmote.interfaces.Msp802154Radio - org.contikios.cooja.mspmote.interfaces.MspSerial - org.contikios.cooja.mspmote.interfaces.SkyLED - org.contikios.cooja.mspmote.interfaces.MspDebugOutput - org.contikios.cooja.mspmote.interfaces.SkyTemperature - - - org.contikios.cooja.avrmote.MicaZMoteType - micaz1 - Hello world micaz - [CONTIKI_DIR]/examples/hello-world/hello-world.c - make hello-world.elf TARGET=micaz - [CONTIKI_DIR]/examples/hello-world/hello-world.elf - org.contikios.cooja.interfaces.Position - org.contikios.cooja.avrmote.interfaces.MicaZID - org.contikios.cooja.avrmote.interfaces.MicaZLED - org.contikios.cooja.avrmote.interfaces.MicaZRadio - org.contikios.cooja.avrmote.interfaces.MicaClock - org.contikios.cooja.avrmote.interfaces.MicaSerial - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - - - - - org.contikios.cooja.interfaces.Position - 93.1576842462532 - 12.110654409141041 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 1 - - sky1 - - - - org.contikios.cooja.interfaces.Position - 24.27184344020801 - 51.304686914739605 - 0.0 - - - org.contikios.cooja.avrmote.interfaces.MicaZID - 2 - - micaz1 - - - - org.contikios.cooja.plugins.SimControl - 318 - 0 - 192 - 0 - 0 - - - org.contikios.cooja.plugins.Visualizer - - org.contikios.cooja.plugins.skins.IDVisualizerSkin - org.contikios.cooja.plugins.skins.MoteTypeVisualizerSkin - 3.8271488095595365 0.0 0.0 3.8271488095595365 -79.7101385461893 -0.34997402775074654 - - 300 - 1 - 300 - 435 - 4 - - - org.contikios.cooja.plugins.LogListener - - - - 738 - 2 - 356 - 0 - 224 - - - + + + [CONTIKI_DIR]/tools/cooja/apps/mrm + [CONTIKI_DIR]/tools/cooja/apps/mspsim + [CONTIKI_DIR]/tools/cooja/apps/avrora + [CONTIKI_DIR]/tools/cooja/apps/native_gateway + [CONTIKI_DIR]/tools/cooja/apps/serial_socket + /home/user/contikiprojects/sics.se/mobility + [CONTIKI_DIR]/tools/cooja/apps/collect-view + /home/user/contikiprojects/sics.se/powertracker + + Hello world example + 0 + 123456 + 1000000 + + org.contikios.cooja.radiomediums.UDGM + 50.0 + 100.0 + 1.0 + 1.0 + + + 40000 + + + org.contikios.cooja.mspmote.SkyMoteType + sky1 + Hello world sky + [CONTIKI_DIR]/examples/hello-world/hello-world.c + make hello-world.sky TARGET=sky + [CONTIKI_DIR]/examples/hello-world/hello-world.sky + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.interfaces.IPAddress + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + org.contikios.cooja.mspmote.interfaces.MspClock + org.contikios.cooja.mspmote.interfaces.MspMoteID + org.contikios.cooja.mspmote.interfaces.SkyButton + org.contikios.cooja.mspmote.interfaces.SkyFlash + org.contikios.cooja.mspmote.interfaces.SkyCoffeeFilesystem + org.contikios.cooja.mspmote.interfaces.Msp802154Radio + org.contikios.cooja.mspmote.interfaces.MspSerial + org.contikios.cooja.mspmote.interfaces.SkyLED + org.contikios.cooja.mspmote.interfaces.MspDebugOutput + org.contikios.cooja.mspmote.interfaces.SkyTemperature + + + org.contikios.cooja.avrmote.MicaZMoteType + micaz1 + Hello world micaz + [CONTIKI_DIR]/examples/hello-world/hello-world.c + make hello-world.elf TARGET=micaz + [CONTIKI_DIR]/examples/hello-world/hello-world.elf + org.contikios.cooja.interfaces.Position + org.contikios.cooja.avrmote.interfaces.MicaZID + org.contikios.cooja.avrmote.interfaces.MicaZLED + org.contikios.cooja.avrmote.interfaces.MicaZRadio + org.contikios.cooja.avrmote.interfaces.MicaClock + org.contikios.cooja.avrmote.interfaces.MicaSerial + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + + + + + org.contikios.cooja.interfaces.Position + 93.1576842462532 + 12.110654409141041 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 1 + + sky1 + + + + org.contikios.cooja.interfaces.Position + 24.27184344020801 + 51.304686914739605 + 0.0 + + + org.contikios.cooja.avrmote.interfaces.MicaZID + 2 + + micaz1 + + + + org.contikios.cooja.plugins.SimControl + 318 + 0 + 192 + 0 + 0 + + + org.contikios.cooja.plugins.Visualizer + + org.contikios.cooja.plugins.skins.IDVisualizerSkin + org.contikios.cooja.plugins.skins.MoteTypeVisualizerSkin + 3.8271488095595365 0.0 0.0 3.8271488095595365 -79.7101385461893 -0.34997402775074654 + + 300 + 1 + 300 + 435 + 4 + + + org.contikios.cooja.plugins.LogListener + + + + 738 + 2 + 356 + 0 + 224 + + + diff --git a/examples/ipv6/multicast/multicast.csc b/examples/ipv6/multicast/multicast.csc index 5339f0351..a0857c13b 100644 --- a/examples/ipv6/multicast/multicast.csc +++ b/examples/ipv6/multicast/multicast.csc @@ -1,257 +1,257 @@ - - - [APPS_DIR]/mrm - [APPS_DIR]/mspsim - [APPS_DIR]/avrora - [APPS_DIR]/serial_socket - [APPS_DIR]/collect-view - [APPS_DIR]/powertracker - - Example of a uIPv6 network with multicast support - 123456 - 1000000 - - org.contikios.cooja.radiomediums.UDGM - 50.0 - 50.0 - 1.0 - 1.0 - - - 40000 - - - org.contikios.cooja.mspmote.SkyMoteType - sky1 - root - [CONTIKI_DIR]/examples/ipv6/multicast/root.c - make root.sky TARGET=sky - [CONTIKI_DIR]/examples/ipv6/multicast/root.sky - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.interfaces.IPAddress - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - org.contikios.cooja.mspmote.interfaces.MspClock - org.contikios.cooja.mspmote.interfaces.MspMoteID - org.contikios.cooja.mspmote.interfaces.SkyButton - org.contikios.cooja.mspmote.interfaces.SkyFlash - org.contikios.cooja.mspmote.interfaces.SkyCoffeeFilesystem - org.contikios.cooja.mspmote.interfaces.Msp802154Radio - org.contikios.cooja.mspmote.interfaces.MspSerial - org.contikios.cooja.mspmote.interfaces.SkyLED - org.contikios.cooja.mspmote.interfaces.MspDebugOutput - org.contikios.cooja.mspmote.interfaces.SkyTemperature - - - org.contikios.cooja.mspmote.SkyMoteType - sky2 - intermediate - [CONTIKI_DIR]/examples/ipv6/multicast/intermediate.c - make intermediate.sky TARGET=sky - [CONTIKI_DIR]/examples/ipv6/multicast/intermediate.sky - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.interfaces.IPAddress - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - org.contikios.cooja.mspmote.interfaces.MspClock - org.contikios.cooja.mspmote.interfaces.MspMoteID - org.contikios.cooja.mspmote.interfaces.SkyButton - org.contikios.cooja.mspmote.interfaces.SkyFlash - org.contikios.cooja.mspmote.interfaces.SkyCoffeeFilesystem - org.contikios.cooja.mspmote.interfaces.Msp802154Radio - org.contikios.cooja.mspmote.interfaces.MspSerial - org.contikios.cooja.mspmote.interfaces.SkyLED - org.contikios.cooja.mspmote.interfaces.MspDebugOutput - org.contikios.cooja.mspmote.interfaces.SkyTemperature - - - org.contikios.cooja.mspmote.SkyMoteType - sky3 - sink - [CONTIKI_DIR]/examples/ipv6/multicast/sink.c - make sink.sky TARGET=sky - [CONTIKI_DIR]/examples/ipv6/multicast/sink.sky - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.interfaces.IPAddress - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - org.contikios.cooja.mspmote.interfaces.MspClock - org.contikios.cooja.mspmote.interfaces.MspMoteID - org.contikios.cooja.mspmote.interfaces.SkyButton - org.contikios.cooja.mspmote.interfaces.SkyFlash - org.contikios.cooja.mspmote.interfaces.SkyCoffeeFilesystem - org.contikios.cooja.mspmote.interfaces.Msp802154Radio - org.contikios.cooja.mspmote.interfaces.MspSerial - org.contikios.cooja.mspmote.interfaces.SkyLED - org.contikios.cooja.mspmote.interfaces.MspDebugOutput - org.contikios.cooja.mspmote.interfaces.SkyTemperature - - - - - org.contikios.cooja.interfaces.Position - 5.995813174969022 - 34.43129455447824 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 1 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 40.70237155931961 - 16.396742420332068 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 2 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 100.3720728044051 - 70.93197095432518 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 3 - - sky3 - - - - - org.contikios.cooja.interfaces.Position - 81.7376718406712 - 28.854291358797 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 4 - - sky3 - - - - - org.contikios.cooja.interfaces.Position - -26.161520836433183 - 8.116006415286686 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 5 - - sky3 - - - - - org.contikios.cooja.interfaces.Position - -34.57705675553882 - 92.87247531485058 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 6 - - sky3 - - - - - org.contikios.cooja.interfaces.Position - 39.86312587077661 - 59.603125741056246 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 7 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 1.4345607604759194 - 75.2481773153879 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 8 - - sky2 - - - - org.contikios.cooja.plugins.SimControl - 318 - 0 - 192 - 0 - 0 - - - org.contikios.cooja.plugins.Visualizer - - org.contikios.cooja.plugins.skins.IDVisualizerSkin - org.contikios.cooja.plugins.skins.MoteTypeVisualizerSkin - org.contikios.cooja.plugins.skins.UDGMVisualizerSkin - org.contikios.cooja.plugins.skins.AddressVisualizerSkin - 3.914959956760176 0.0 0.0 3.914959956760176 300.2075734071477 -15.682931033747009 - - 869 - 3 - 441 - 320 - 3 - - - org.contikios.cooja.plugins.LogListener - - - - - - 1281 - 2 - 213 - -1 - 714 - - - org.contikios.cooja.plugins.RadioLogger - - 117 - - false - false - - - 1280 - 1 - 268 - 0 - 445 - - - + + + [APPS_DIR]/mrm + [APPS_DIR]/mspsim + [APPS_DIR]/avrora + [APPS_DIR]/serial_socket + [APPS_DIR]/collect-view + [APPS_DIR]/powertracker + + Example of a uIPv6 network with multicast support + 123456 + 1000000 + + org.contikios.cooja.radiomediums.UDGM + 50.0 + 50.0 + 1.0 + 1.0 + + + 40000 + + + org.contikios.cooja.mspmote.SkyMoteType + sky1 + root + [CONTIKI_DIR]/examples/ipv6/multicast/root.c + make root.sky TARGET=sky + [CONTIKI_DIR]/examples/ipv6/multicast/root.sky + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.interfaces.IPAddress + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + org.contikios.cooja.mspmote.interfaces.MspClock + org.contikios.cooja.mspmote.interfaces.MspMoteID + org.contikios.cooja.mspmote.interfaces.SkyButton + org.contikios.cooja.mspmote.interfaces.SkyFlash + org.contikios.cooja.mspmote.interfaces.SkyCoffeeFilesystem + org.contikios.cooja.mspmote.interfaces.Msp802154Radio + org.contikios.cooja.mspmote.interfaces.MspSerial + org.contikios.cooja.mspmote.interfaces.SkyLED + org.contikios.cooja.mspmote.interfaces.MspDebugOutput + org.contikios.cooja.mspmote.interfaces.SkyTemperature + + + org.contikios.cooja.mspmote.SkyMoteType + sky2 + intermediate + [CONTIKI_DIR]/examples/ipv6/multicast/intermediate.c + make intermediate.sky TARGET=sky + [CONTIKI_DIR]/examples/ipv6/multicast/intermediate.sky + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.interfaces.IPAddress + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + org.contikios.cooja.mspmote.interfaces.MspClock + org.contikios.cooja.mspmote.interfaces.MspMoteID + org.contikios.cooja.mspmote.interfaces.SkyButton + org.contikios.cooja.mspmote.interfaces.SkyFlash + org.contikios.cooja.mspmote.interfaces.SkyCoffeeFilesystem + org.contikios.cooja.mspmote.interfaces.Msp802154Radio + org.contikios.cooja.mspmote.interfaces.MspSerial + org.contikios.cooja.mspmote.interfaces.SkyLED + org.contikios.cooja.mspmote.interfaces.MspDebugOutput + org.contikios.cooja.mspmote.interfaces.SkyTemperature + + + org.contikios.cooja.mspmote.SkyMoteType + sky3 + sink + [CONTIKI_DIR]/examples/ipv6/multicast/sink.c + make sink.sky TARGET=sky + [CONTIKI_DIR]/examples/ipv6/multicast/sink.sky + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.interfaces.IPAddress + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + org.contikios.cooja.mspmote.interfaces.MspClock + org.contikios.cooja.mspmote.interfaces.MspMoteID + org.contikios.cooja.mspmote.interfaces.SkyButton + org.contikios.cooja.mspmote.interfaces.SkyFlash + org.contikios.cooja.mspmote.interfaces.SkyCoffeeFilesystem + org.contikios.cooja.mspmote.interfaces.Msp802154Radio + org.contikios.cooja.mspmote.interfaces.MspSerial + org.contikios.cooja.mspmote.interfaces.SkyLED + org.contikios.cooja.mspmote.interfaces.MspDebugOutput + org.contikios.cooja.mspmote.interfaces.SkyTemperature + + + + + org.contikios.cooja.interfaces.Position + 5.995813174969022 + 34.43129455447824 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 1 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 40.70237155931961 + 16.396742420332068 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 2 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 100.3720728044051 + 70.93197095432518 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 3 + + sky3 + + + + + org.contikios.cooja.interfaces.Position + 81.7376718406712 + 28.854291358797 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 4 + + sky3 + + + + + org.contikios.cooja.interfaces.Position + -26.161520836433183 + 8.116006415286686 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 5 + + sky3 + + + + + org.contikios.cooja.interfaces.Position + -34.57705675553882 + 92.87247531485058 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 6 + + sky3 + + + + + org.contikios.cooja.interfaces.Position + 39.86312587077661 + 59.603125741056246 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 7 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 1.4345607604759194 + 75.2481773153879 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 8 + + sky2 + + + + org.contikios.cooja.plugins.SimControl + 318 + 0 + 192 + 0 + 0 + + + org.contikios.cooja.plugins.Visualizer + + org.contikios.cooja.plugins.skins.IDVisualizerSkin + org.contikios.cooja.plugins.skins.MoteTypeVisualizerSkin + org.contikios.cooja.plugins.skins.UDGMVisualizerSkin + org.contikios.cooja.plugins.skins.AddressVisualizerSkin + 3.914959956760176 0.0 0.0 3.914959956760176 300.2075734071477 -15.682931033747009 + + 869 + 3 + 441 + 320 + 3 + + + org.contikios.cooja.plugins.LogListener + + + + + + 1281 + 2 + 213 + -1 + 714 + + + org.contikios.cooja.plugins.RadioLogger + + 117 + + false + false + + + 1280 + 1 + 268 + 0 + 445 + + + diff --git a/examples/ipv6/native-border-router/tun-bridge.c b/examples/ipv6/native-border-router/tun-bridge.c index 22cb4289b..711f17dec 100644 --- a/examples/ipv6/native-border-router/tun-bridge.c +++ b/examples/ipv6/native-border-router/tun-bridge.c @@ -222,13 +222,15 @@ tun_init() } /*---------------------------------------------------------------------------*/ -void +static int tun_output(uint8_t *data, int len) { /* fprintf(stderr, "*** Writing to tun...%d\n", len); */ if(write(tunfd, data, len) != len) { err(1, "serial_to_tun: write"); + return -1; } + return 0; } /*---------------------------------------------------------------------------*/ int @@ -246,13 +248,14 @@ init(void) { } /*---------------------------------------------------------------------------*/ -static void +static int output(void) { PRINTF("SUT: %u\n", uip_len); if(uip_len > 0) { - tun_output(&uip_buf[UIP_LLH_LEN], uip_len); + return tun_output(&uip_buf[UIP_LLH_LEN], uip_len); } + return 0; } diff --git a/examples/ipv6/rpl-border-router/slip-bridge.c b/examples/ipv6/rpl-border-router/slip-bridge.c index 582f626e7..62940d5ef 100644 --- a/examples/ipv6/rpl-border-router/slip-bridge.c +++ b/examples/ipv6/rpl-border-router/slip-bridge.c @@ -100,7 +100,7 @@ init(void) slip_set_input_callback(slip_input_callback); } /*---------------------------------------------------------------------------*/ -static void +static int output(void) { if(uip_ipaddr_cmp(&last_sender, &UIP_IP_BUF->srcipaddr)) { @@ -115,6 +115,7 @@ output(void) // PRINTF("SUT: %u\n", uip_len); slip_send(); } + return 0; } /*---------------------------------------------------------------------------*/ diff --git a/examples/ipv6/rpl-collect/collect-tree-dense-noloss.csc b/examples/ipv6/rpl-collect/collect-tree-dense-noloss.csc index 31a6bedab..efaf533ff 100644 --- a/examples/ipv6/rpl-collect/collect-tree-dense-noloss.csc +++ b/examples/ipv6/rpl-collect/collect-tree-dense-noloss.csc @@ -1,503 +1,503 @@ - - - [CONTIKI_DIR]/tools/cooja/apps/mrm - [CONTIKI_DIR]/tools/cooja/apps/mspsim - [CONTIKI_DIR]/tools/cooja/apps/avrora - [CONTIKI_DIR]/tools/cooja/apps/serial_socket - [CONTIKI_DIR]/tools/cooja/apps/collect-view - - My simulation - 0 - 123456 - 1000000 - - org.contikios.cooja.radiomediums.UDGM - 100.0 - 120.0 - 1.0 - 1.0 - - - 40000 - - - org.contikios.cooja.mspmote.SkyMoteType - sky1 - Sky Mote Type #sky1 - [CONFIG_DIR]/udp-sink.c - make udp-sink.sky TARGET=sky - [CONFIG_DIR]/udp-sink.sky - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.interfaces.IPAddress - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - org.contikios.cooja.mspmote.interfaces.MspClock - org.contikios.cooja.mspmote.interfaces.MspMoteID - org.contikios.cooja.mspmote.interfaces.SkyButton - org.contikios.cooja.mspmote.interfaces.SkyFlash - org.contikios.cooja.mspmote.interfaces.SkyCoffeeFilesystem - org.contikios.cooja.mspmote.interfaces.Msp802154Radio - org.contikios.cooja.mspmote.interfaces.MspSerial - org.contikios.cooja.mspmote.interfaces.SkyLED - org.contikios.cooja.mspmote.interfaces.MspDebugOutput - org.contikios.cooja.mspmote.interfaces.SkyTemperature - - - org.contikios.cooja.mspmote.SkyMoteType - sky2 - Sky Mote Type #sky2 - [CONFIG_DIR]/udp-sender.c - make udp-sender.sky TARGET=sky - [CONFIG_DIR]/udp-sender.sky - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.interfaces.IPAddress - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - org.contikios.cooja.mspmote.interfaces.MspClock - org.contikios.cooja.mspmote.interfaces.MspMoteID - org.contikios.cooja.mspmote.interfaces.SkyButton - org.contikios.cooja.mspmote.interfaces.SkyFlash - org.contikios.cooja.mspmote.interfaces.SkyCoffeeFilesystem - org.contikios.cooja.mspmote.interfaces.Msp802154Radio - org.contikios.cooja.mspmote.interfaces.MspSerial - org.contikios.cooja.mspmote.interfaces.SkyLED - org.contikios.cooja.mspmote.interfaces.MspDebugOutput - org.contikios.cooja.mspmote.interfaces.SkyTemperature - - - - - org.contikios.cooja.interfaces.Position - 242.83184008074136 - -88.93434685786869 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 1 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 223.5175954004352 - -69.05842098947238 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 2 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 250.51864863077387 - -59.2420165357677 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 3 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 294.4736028715864 - -63.23792146675066 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 4 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 188.6638305152632 - -41.28432709660093 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 5 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 222.54731411389315 - -32.869043991280165 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 6 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 273.694897230475 - -29.672320046493798 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 7 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 321.64575640227054 - -33.66822497747676 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 8 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 159.4120162043624 - -2.500166515809672 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 9 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 196.97352255560222 - -0.10262355721989598 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 10 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 252.91619158936365 - 1.495738415173288 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 11 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 301.66623174735577 - -0.10262355721989598 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 12 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 346.4203669743649 - 1.495738415173288 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 13 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 124.24805281171236 - 22.27444405628468 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 14 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 180.1907218454738 - 35.86052082162674 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 15 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 224.14567608628633 - 30.266253918250598 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 16 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 276.0924401890648 - 35.86052082162674 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 17 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 351.2154528915445 - 37.45888279401993 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 18 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 89.08408941906231 - 47.04905462837903 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 19 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 180.1907218454738 - 75.02038914525976 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 20 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 245.7235627135943 - 66.22939829709723 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 21 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 290.4776979406035 - 67.82776026949043 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 22 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 370.3957965602627 - 64.63103632470406 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 23 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 93.07999435004527 - 82.21301802102909 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 24 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 204.16615143137156 - 106.18844760692684 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 25 - - sky2 - - - - org.contikios.cooja.plugins.SimControl - 259 - 2 - 184 - 0 - 0 - - - org.contikios.cooja.plugins.Visualizer - - org.contikios.cooja.plugins.skins.IDVisualizerSkin - org.contikios.cooja.plugins.skins.AttributeVisualizerSkin - org.contikios.cooja.plugins.skins.UDGMVisualizerSkin - 1.836243522352668 0.0 0.0 1.836243522352668 -93.43273668589363 192.8080782058222 - - 666 - 0 - 510 - 369 - -8 - - - org.contikios.cooja.plugins.LogListener - - - - 1347 - 4 - 150 - 0 - 438 - - - org.contikios.cooja.plugins.TimeLine - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - 15 - 16 - 17 - 18 - 19 - 20 - 21 - 22 - 23 - 24 - - - - 109 - 500.0 - - 1347 - 3 - 150 - 0 - 588 - - - org.contikios.cooja.plugins.collectview.CollectView - 0 - 203 - 1 - 75 - 33 - 188 - - - + + + [CONTIKI_DIR]/tools/cooja/apps/mrm + [CONTIKI_DIR]/tools/cooja/apps/mspsim + [CONTIKI_DIR]/tools/cooja/apps/avrora + [CONTIKI_DIR]/tools/cooja/apps/serial_socket + [CONTIKI_DIR]/tools/cooja/apps/collect-view + + My simulation + 0 + 123456 + 1000000 + + org.contikios.cooja.radiomediums.UDGM + 100.0 + 120.0 + 1.0 + 1.0 + + + 40000 + + + org.contikios.cooja.mspmote.SkyMoteType + sky1 + Sky Mote Type #sky1 + [CONFIG_DIR]/udp-sink.c + make udp-sink.sky TARGET=sky + [CONFIG_DIR]/udp-sink.sky + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.interfaces.IPAddress + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + org.contikios.cooja.mspmote.interfaces.MspClock + org.contikios.cooja.mspmote.interfaces.MspMoteID + org.contikios.cooja.mspmote.interfaces.SkyButton + org.contikios.cooja.mspmote.interfaces.SkyFlash + org.contikios.cooja.mspmote.interfaces.SkyCoffeeFilesystem + org.contikios.cooja.mspmote.interfaces.Msp802154Radio + org.contikios.cooja.mspmote.interfaces.MspSerial + org.contikios.cooja.mspmote.interfaces.SkyLED + org.contikios.cooja.mspmote.interfaces.MspDebugOutput + org.contikios.cooja.mspmote.interfaces.SkyTemperature + + + org.contikios.cooja.mspmote.SkyMoteType + sky2 + Sky Mote Type #sky2 + [CONFIG_DIR]/udp-sender.c + make udp-sender.sky TARGET=sky + [CONFIG_DIR]/udp-sender.sky + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.interfaces.IPAddress + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + org.contikios.cooja.mspmote.interfaces.MspClock + org.contikios.cooja.mspmote.interfaces.MspMoteID + org.contikios.cooja.mspmote.interfaces.SkyButton + org.contikios.cooja.mspmote.interfaces.SkyFlash + org.contikios.cooja.mspmote.interfaces.SkyCoffeeFilesystem + org.contikios.cooja.mspmote.interfaces.Msp802154Radio + org.contikios.cooja.mspmote.interfaces.MspSerial + org.contikios.cooja.mspmote.interfaces.SkyLED + org.contikios.cooja.mspmote.interfaces.MspDebugOutput + org.contikios.cooja.mspmote.interfaces.SkyTemperature + + + + + org.contikios.cooja.interfaces.Position + 242.83184008074136 + -88.93434685786869 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 1 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 223.5175954004352 + -69.05842098947238 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 2 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 250.51864863077387 + -59.2420165357677 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 3 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 294.4736028715864 + -63.23792146675066 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 4 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 188.6638305152632 + -41.28432709660093 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 5 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 222.54731411389315 + -32.869043991280165 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 6 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 273.694897230475 + -29.672320046493798 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 7 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 321.64575640227054 + -33.66822497747676 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 8 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 159.4120162043624 + -2.500166515809672 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 9 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 196.97352255560222 + -0.10262355721989598 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 10 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 252.91619158936365 + 1.495738415173288 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 11 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 301.66623174735577 + -0.10262355721989598 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 12 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 346.4203669743649 + 1.495738415173288 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 13 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 124.24805281171236 + 22.27444405628468 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 14 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 180.1907218454738 + 35.86052082162674 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 15 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 224.14567608628633 + 30.266253918250598 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 16 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 276.0924401890648 + 35.86052082162674 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 17 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 351.2154528915445 + 37.45888279401993 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 18 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 89.08408941906231 + 47.04905462837903 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 19 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 180.1907218454738 + 75.02038914525976 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 20 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 245.7235627135943 + 66.22939829709723 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 21 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 290.4776979406035 + 67.82776026949043 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 22 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 370.3957965602627 + 64.63103632470406 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 23 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 93.07999435004527 + 82.21301802102909 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 24 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 204.16615143137156 + 106.18844760692684 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 25 + + sky2 + + + + org.contikios.cooja.plugins.SimControl + 259 + 2 + 184 + 0 + 0 + + + org.contikios.cooja.plugins.Visualizer + + org.contikios.cooja.plugins.skins.IDVisualizerSkin + org.contikios.cooja.plugins.skins.AttributeVisualizerSkin + org.contikios.cooja.plugins.skins.UDGMVisualizerSkin + 1.836243522352668 0.0 0.0 1.836243522352668 -93.43273668589363 192.8080782058222 + + 666 + 0 + 510 + 369 + -8 + + + org.contikios.cooja.plugins.LogListener + + + + 1347 + 4 + 150 + 0 + 438 + + + org.contikios.cooja.plugins.TimeLine + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + 15 + 16 + 17 + 18 + 19 + 20 + 21 + 22 + 23 + 24 + + + + 109 + 500.0 + + 1347 + 3 + 150 + 0 + 588 + + + org.contikios.cooja.plugins.collectview.CollectView + 0 + 203 + 1 + 75 + 33 + 188 + + + diff --git a/examples/ipv6/rpl-collect/collect-tree-sparse-lossy.csc b/examples/ipv6/rpl-collect/collect-tree-sparse-lossy.csc index 941d596e9..0af9c2e6e 100644 --- a/examples/ipv6/rpl-collect/collect-tree-sparse-lossy.csc +++ b/examples/ipv6/rpl-collect/collect-tree-sparse-lossy.csc @@ -1,501 +1,501 @@ - - - [CONTIKI_DIR]/tools/cooja/apps/mrm - [CONTIKI_DIR]/tools/cooja/apps/mspsim - [CONTIKI_DIR]/tools/cooja/apps/avrora - [CONTIKI_DIR]/tools/cooja/apps/serial_socket - [CONTIKI_DIR]/tools/cooja/apps/collect-view - - My simulation - 0 - 123456 - 1000000 - - org.contikios.cooja.radiomediums.UDGM - 70.0 - 90.0 - 1.0 - 0.0 - - - 40000 - - - org.contikios.cooja.mspmote.SkyMoteType - sky1 - Sky Mote Type #sky1 - [CONFIG_DIR]/udp-sink.c - make udp-sink.sky TARGET=sky - [CONFIG_DIR]/udp-sink.sky - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.interfaces.IPAddress - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - org.contikios.cooja.mspmote.interfaces.MspClock - org.contikios.cooja.mspmote.interfaces.MspMoteID - org.contikios.cooja.mspmote.interfaces.SkyButton - org.contikios.cooja.mspmote.interfaces.SkyFlash - org.contikios.cooja.mspmote.interfaces.SkyCoffeeFilesystem - org.contikios.cooja.mspmote.interfaces.Msp802154Radio - org.contikios.cooja.mspmote.interfaces.MspSerial - org.contikios.cooja.mspmote.interfaces.SkyLED - org.contikios.cooja.mspmote.interfaces.MspDebugOutput - org.contikios.cooja.mspmote.interfaces.SkyTemperature - - - org.contikios.cooja.mspmote.SkyMoteType - sky2 - Sky Mote Type #sky2 - [CONFIG_DIR]/udp-sender.c - make udp-sender.sky TARGET=sky - [CONFIG_DIR]/udp-sender.sky - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.interfaces.IPAddress - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - org.contikios.cooja.mspmote.interfaces.MspClock - org.contikios.cooja.mspmote.interfaces.MspMoteID - org.contikios.cooja.mspmote.interfaces.SkyButton - org.contikios.cooja.mspmote.interfaces.SkyFlash - org.contikios.cooja.mspmote.interfaces.SkyCoffeeFilesystem - org.contikios.cooja.mspmote.interfaces.Msp802154Radio - org.contikios.cooja.mspmote.interfaces.MspSerial - org.contikios.cooja.mspmote.interfaces.SkyLED - org.contikios.cooja.mspmote.interfaces.MspDebugOutput - org.contikios.cooja.mspmote.interfaces.SkyTemperature - - - - - org.contikios.cooja.interfaces.Position - 242.83184008074136 - -88.93434685786869 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 1 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 205.7645134037647 - -62.438740480554074 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 2 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 250.51864863077387 - -59.2420165357677 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 3 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 294.4736028715864 - -63.23792146675066 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 4 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 176.19481691449084 - -35.26658694986995 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 5 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 222.54731411389315 - -32.869043991280165 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 6 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 273.694897230475 - -29.672320046493798 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 7 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 321.64575640227054 - -33.66822497747676 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 8 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 159.4120162043624 - -2.500166515809672 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 9 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 196.97352255560222 - -0.10262355721989598 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 10 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 252.91619158936365 - 1.495738415173288 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 11 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 301.66623174735577 - -0.10262355721989598 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 12 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 346.4203669743649 - 1.495738415173288 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 13 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 124.24805281171236 - 22.27444405628468 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 14 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 180.1907218454738 - 35.86052082162674 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 15 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 224.14567608628633 - 30.266253918250598 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 16 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 276.0924401890648 - 35.86052082162674 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 17 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 351.2154528915445 - 37.45888279401993 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 18 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 89.08408941906231 - 47.04905462837903 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 19 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 180.1907218454738 - 75.02038914525976 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 20 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 245.7235627135943 - 66.22939829709723 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 21 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 290.4776979406035 - 67.82776026949043 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 22 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 370.3957965602627 - 64.63103632470406 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 23 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 93.07999435004527 - 82.21301802102909 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 24 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 204.16615143137156 - 106.18844760692684 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 25 - - sky2 - - - - org.contikios.cooja.plugins.SimControl - 259 - 3 - 184 - 0 - 0 - - - org.contikios.cooja.plugins.Visualizer - - org.contikios.cooja.plugins.skins.IDVisualizerSkin - org.contikios.cooja.plugins.skins.AttributeVisualizerSkin - org.contikios.cooja.plugins.skins.UDGMVisualizerSkin - 1.836243522352668 0.0 0.0 1.836243522352668 -124.43273668589376 177.8080782058222 - - 610 - 2 - 482 - 420 - -2 - - - org.contikios.cooja.plugins.LogListener - - - - 1347 - 4 - 150 - 0 - 438 - - - org.contikios.cooja.plugins.TimeLine - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - 15 - 16 - 17 - 18 - 19 - 20 - 21 - 22 - 23 - 24 - - 109 - 500.0 - - 1347 - 0 - 150 - 0 - 588 - - - org.contikios.cooja.plugins.collectview.CollectView - 0 - 203 - 1 - 75 - 120 - 120 - - - + + + [CONTIKI_DIR]/tools/cooja/apps/mrm + [CONTIKI_DIR]/tools/cooja/apps/mspsim + [CONTIKI_DIR]/tools/cooja/apps/avrora + [CONTIKI_DIR]/tools/cooja/apps/serial_socket + [CONTIKI_DIR]/tools/cooja/apps/collect-view + + My simulation + 0 + 123456 + 1000000 + + org.contikios.cooja.radiomediums.UDGM + 70.0 + 90.0 + 1.0 + 0.0 + + + 40000 + + + org.contikios.cooja.mspmote.SkyMoteType + sky1 + Sky Mote Type #sky1 + [CONFIG_DIR]/udp-sink.c + make udp-sink.sky TARGET=sky + [CONFIG_DIR]/udp-sink.sky + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.interfaces.IPAddress + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + org.contikios.cooja.mspmote.interfaces.MspClock + org.contikios.cooja.mspmote.interfaces.MspMoteID + org.contikios.cooja.mspmote.interfaces.SkyButton + org.contikios.cooja.mspmote.interfaces.SkyFlash + org.contikios.cooja.mspmote.interfaces.SkyCoffeeFilesystem + org.contikios.cooja.mspmote.interfaces.Msp802154Radio + org.contikios.cooja.mspmote.interfaces.MspSerial + org.contikios.cooja.mspmote.interfaces.SkyLED + org.contikios.cooja.mspmote.interfaces.MspDebugOutput + org.contikios.cooja.mspmote.interfaces.SkyTemperature + + + org.contikios.cooja.mspmote.SkyMoteType + sky2 + Sky Mote Type #sky2 + [CONFIG_DIR]/udp-sender.c + make udp-sender.sky TARGET=sky + [CONFIG_DIR]/udp-sender.sky + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.interfaces.IPAddress + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + org.contikios.cooja.mspmote.interfaces.MspClock + org.contikios.cooja.mspmote.interfaces.MspMoteID + org.contikios.cooja.mspmote.interfaces.SkyButton + org.contikios.cooja.mspmote.interfaces.SkyFlash + org.contikios.cooja.mspmote.interfaces.SkyCoffeeFilesystem + org.contikios.cooja.mspmote.interfaces.Msp802154Radio + org.contikios.cooja.mspmote.interfaces.MspSerial + org.contikios.cooja.mspmote.interfaces.SkyLED + org.contikios.cooja.mspmote.interfaces.MspDebugOutput + org.contikios.cooja.mspmote.interfaces.SkyTemperature + + + + + org.contikios.cooja.interfaces.Position + 242.83184008074136 + -88.93434685786869 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 1 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 205.7645134037647 + -62.438740480554074 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 2 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 250.51864863077387 + -59.2420165357677 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 3 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 294.4736028715864 + -63.23792146675066 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 4 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 176.19481691449084 + -35.26658694986995 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 5 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 222.54731411389315 + -32.869043991280165 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 6 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 273.694897230475 + -29.672320046493798 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 7 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 321.64575640227054 + -33.66822497747676 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 8 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 159.4120162043624 + -2.500166515809672 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 9 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 196.97352255560222 + -0.10262355721989598 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 10 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 252.91619158936365 + 1.495738415173288 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 11 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 301.66623174735577 + -0.10262355721989598 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 12 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 346.4203669743649 + 1.495738415173288 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 13 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 124.24805281171236 + 22.27444405628468 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 14 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 180.1907218454738 + 35.86052082162674 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 15 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 224.14567608628633 + 30.266253918250598 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 16 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 276.0924401890648 + 35.86052082162674 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 17 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 351.2154528915445 + 37.45888279401993 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 18 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 89.08408941906231 + 47.04905462837903 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 19 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 180.1907218454738 + 75.02038914525976 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 20 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 245.7235627135943 + 66.22939829709723 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 21 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 290.4776979406035 + 67.82776026949043 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 22 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 370.3957965602627 + 64.63103632470406 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 23 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 93.07999435004527 + 82.21301802102909 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 24 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 204.16615143137156 + 106.18844760692684 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 25 + + sky2 + + + + org.contikios.cooja.plugins.SimControl + 259 + 3 + 184 + 0 + 0 + + + org.contikios.cooja.plugins.Visualizer + + org.contikios.cooja.plugins.skins.IDVisualizerSkin + org.contikios.cooja.plugins.skins.AttributeVisualizerSkin + org.contikios.cooja.plugins.skins.UDGMVisualizerSkin + 1.836243522352668 0.0 0.0 1.836243522352668 -124.43273668589376 177.8080782058222 + + 610 + 2 + 482 + 420 + -2 + + + org.contikios.cooja.plugins.LogListener + + + + 1347 + 4 + 150 + 0 + 438 + + + org.contikios.cooja.plugins.TimeLine + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + 15 + 16 + 17 + 18 + 19 + 20 + 21 + 22 + 23 + 24 + + 109 + 500.0 + + 1347 + 0 + 150 + 0 + 588 + + + org.contikios.cooja.plugins.collectview.CollectView + 0 + 203 + 1 + 75 + 120 + 120 + + + diff --git a/examples/ipv6/rpl-udp/rpl-udp-powertrace.csc b/examples/ipv6/rpl-udp/rpl-udp-powertrace.csc index b10432ab1..c92dc0800 100644 --- a/examples/ipv6/rpl-udp/rpl-udp-powertrace.csc +++ b/examples/ipv6/rpl-udp/rpl-udp-powertrace.csc @@ -1,584 +1,584 @@ - - - [CONTIKI_DIR]/tools/cooja/apps/mrm - [CONTIKI_DIR]/tools/cooja/apps/mspsim - [CONTIKI_DIR]/tools/cooja/apps/avrora - [CONTIKI_DIR]/tools/cooja/apps/mobility - - Data collection network using IPv6 and RPL - 0 - generated - 5000000 - - org.contikios.cooja.radiomediums.UDGM - 50.0 - 50.0 - 1.0 - 1.0 - - - 40000 - - - org.contikios.cooja.mspmote.SkyMoteType - sky1 - Sky Mote Type #sky1 - [CONTIKI_DIR]/examples/ipv6/rpl-udp/udp-server.c - make udp-server.sky TARGET=sky WITH_COMPOWER=1 - [CONTIKI_DIR]/examples/ipv6/rpl-udp/udp-server.sky - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.interfaces.IPAddress - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - org.contikios.cooja.mspmote.interfaces.MspClock - org.contikios.cooja.mspmote.interfaces.MspMoteID - org.contikios.cooja.mspmote.interfaces.SkyButton - org.contikios.cooja.mspmote.interfaces.SkyFlash - org.contikios.cooja.mspmote.interfaces.SkyCoffeeFilesystem - org.contikios.cooja.mspmote.interfaces.Msp802154Radio - org.contikios.cooja.mspmote.interfaces.MspSerial - org.contikios.cooja.mspmote.interfaces.SkyLED - org.contikios.cooja.mspmote.interfaces.MspDebugOutput - org.contikios.cooja.mspmote.interfaces.SkyTemperature - - - org.contikios.cooja.mspmote.SkyMoteType - sky2 - Sky Mote Type #sky2 - [CONTIKI_DIR]/examples/ipv6/rpl-udp/udp-client.c - make udp-client.sky TARGET=sky WITH_COMPOWER=1 - [CONTIKI_DIR]/examples/ipv6/rpl-udp/udp-client.sky - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.interfaces.IPAddress - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - org.contikios.cooja.mspmote.interfaces.MspClock - org.contikios.cooja.mspmote.interfaces.MspMoteID - org.contikios.cooja.mspmote.interfaces.SkyButton - org.contikios.cooja.mspmote.interfaces.SkyFlash - org.contikios.cooja.mspmote.interfaces.SkyCoffeeFilesystem - org.contikios.cooja.mspmote.interfaces.Msp802154Radio - org.contikios.cooja.mspmote.interfaces.MspSerial - org.contikios.cooja.mspmote.interfaces.SkyLED - org.contikios.cooja.mspmote.interfaces.MspDebugOutput - org.contikios.cooja.mspmote.interfaces.SkyTemperature - - - - - org.contikios.cooja.interfaces.Position - 48.435974731198804 - -66.16503914182063 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 1 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 4.049356309774755 - 98.28771308774003 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 2 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 127.9689727848476 - 91.71883780610729 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 3 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 57.897299848739024 - 92.47229665488265 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 4 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 47.34887596588397 - -30.341495695501195 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 5 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 47.13486576528276 - 32.944481932122315 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 6 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - -11.42091423859419 - 17.879870626121914 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 7 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 118.92746659954325 - 57.05973076244069 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 8 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 53.68872892015448 - 59.887319605093715 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 9 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 16.45706316609417 - 23.9075414163248 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 10 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - -18.9555027263478 - 75.14274313304935 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 11 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 29.265863595275306 - 85.6911670159044 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 12 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - -39.298891643282545 - -3.9704359883635574 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 13 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 66.93880603404335 - -42.39683727590697 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 14 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 94.81678343873172 - 26.921376811426246 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 15 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - -43.06618588715935 - 30.68867105530305 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 16 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - -34.02467970185502 - -24.313824905298304 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 17 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - -28.750467760427494 - 48.01822457713635 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 18 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 124.95513738974614 - 20.140247172447996 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 19 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 15.703604317318808 - -47.6710492173345 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 20 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - -40.05235049205791 - 92.47229665488265 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 21 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 121.18784314586934 - -24.313824905298304 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 22 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 88.03565379975346 - -44.657213822233054 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 23 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 24.745110502623138 - -1.7100594420374744 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 24 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 94.06332458995635 - -2.4635182908128352 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 25 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - -4.639784599615941 - -9.998106778566445 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 26 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - -13.681290784920272 - -50.684884612435944 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 27 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 103.10483077526068 - 96.99304974753483 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 28 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 8.922474678340558 - 59.320107308766765 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 29 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 58.650758697514384 - 2.8106936506146916 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 30 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 90.59867707439 - 67.97632874312737 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 31 - - sky2 - - - - org.contikios.cooja.plugins.SimControl - 259 - 1 - 184 - 0 - 0 - - - org.contikios.cooja.plugins.Visualizer - - org.contikios.cooja.plugins.skins.IDVisualizerSkin - org.contikios.cooja.plugins.skins.UDGMVisualizerSkin - org.contikios.cooja.plugins.skins.AttributeVisualizerSkin - 2.349818846983307 0.0 0.0 2.349818846983307 150.19773526533348 176.95275613586946 - - 520 - 3 - 523 - 269 - 14 - - - org.contikios.cooja.plugins.LogListener - - - - 937 - 0 - 213 - 21 - 464 - - - org.contikios.cooja.plugins.ScriptRunner - - - true - - 600 - 2 - 700 - 665 - 6 - - - + + + [CONTIKI_DIR]/tools/cooja/apps/mrm + [CONTIKI_DIR]/tools/cooja/apps/mspsim + [CONTIKI_DIR]/tools/cooja/apps/avrora + [CONTIKI_DIR]/tools/cooja/apps/mobility + + Data collection network using IPv6 and RPL + 0 + generated + 5000000 + + org.contikios.cooja.radiomediums.UDGM + 50.0 + 50.0 + 1.0 + 1.0 + + + 40000 + + + org.contikios.cooja.mspmote.SkyMoteType + sky1 + Sky Mote Type #sky1 + [CONTIKI_DIR]/examples/ipv6/rpl-udp/udp-server.c + make udp-server.sky TARGET=sky WITH_COMPOWER=1 + [CONTIKI_DIR]/examples/ipv6/rpl-udp/udp-server.sky + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.interfaces.IPAddress + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + org.contikios.cooja.mspmote.interfaces.MspClock + org.contikios.cooja.mspmote.interfaces.MspMoteID + org.contikios.cooja.mspmote.interfaces.SkyButton + org.contikios.cooja.mspmote.interfaces.SkyFlash + org.contikios.cooja.mspmote.interfaces.SkyCoffeeFilesystem + org.contikios.cooja.mspmote.interfaces.Msp802154Radio + org.contikios.cooja.mspmote.interfaces.MspSerial + org.contikios.cooja.mspmote.interfaces.SkyLED + org.contikios.cooja.mspmote.interfaces.MspDebugOutput + org.contikios.cooja.mspmote.interfaces.SkyTemperature + + + org.contikios.cooja.mspmote.SkyMoteType + sky2 + Sky Mote Type #sky2 + [CONTIKI_DIR]/examples/ipv6/rpl-udp/udp-client.c + make udp-client.sky TARGET=sky WITH_COMPOWER=1 + [CONTIKI_DIR]/examples/ipv6/rpl-udp/udp-client.sky + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.interfaces.IPAddress + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + org.contikios.cooja.mspmote.interfaces.MspClock + org.contikios.cooja.mspmote.interfaces.MspMoteID + org.contikios.cooja.mspmote.interfaces.SkyButton + org.contikios.cooja.mspmote.interfaces.SkyFlash + org.contikios.cooja.mspmote.interfaces.SkyCoffeeFilesystem + org.contikios.cooja.mspmote.interfaces.Msp802154Radio + org.contikios.cooja.mspmote.interfaces.MspSerial + org.contikios.cooja.mspmote.interfaces.SkyLED + org.contikios.cooja.mspmote.interfaces.MspDebugOutput + org.contikios.cooja.mspmote.interfaces.SkyTemperature + + + + + org.contikios.cooja.interfaces.Position + 48.435974731198804 + -66.16503914182063 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 1 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 4.049356309774755 + 98.28771308774003 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 2 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 127.9689727848476 + 91.71883780610729 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 3 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 57.897299848739024 + 92.47229665488265 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 4 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 47.34887596588397 + -30.341495695501195 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 5 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 47.13486576528276 + 32.944481932122315 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 6 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + -11.42091423859419 + 17.879870626121914 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 7 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 118.92746659954325 + 57.05973076244069 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 8 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 53.68872892015448 + 59.887319605093715 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 9 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 16.45706316609417 + 23.9075414163248 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 10 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + -18.9555027263478 + 75.14274313304935 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 11 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 29.265863595275306 + 85.6911670159044 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 12 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + -39.298891643282545 + -3.9704359883635574 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 13 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 66.93880603404335 + -42.39683727590697 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 14 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 94.81678343873172 + 26.921376811426246 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 15 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + -43.06618588715935 + 30.68867105530305 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 16 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + -34.02467970185502 + -24.313824905298304 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 17 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + -28.750467760427494 + 48.01822457713635 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 18 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 124.95513738974614 + 20.140247172447996 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 19 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 15.703604317318808 + -47.6710492173345 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 20 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + -40.05235049205791 + 92.47229665488265 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 21 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 121.18784314586934 + -24.313824905298304 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 22 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 88.03565379975346 + -44.657213822233054 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 23 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 24.745110502623138 + -1.7100594420374744 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 24 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 94.06332458995635 + -2.4635182908128352 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 25 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + -4.639784599615941 + -9.998106778566445 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 26 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + -13.681290784920272 + -50.684884612435944 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 27 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 103.10483077526068 + 96.99304974753483 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 28 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 8.922474678340558 + 59.320107308766765 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 29 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 58.650758697514384 + 2.8106936506146916 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 30 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 90.59867707439 + 67.97632874312737 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 31 + + sky2 + + + + org.contikios.cooja.plugins.SimControl + 259 + 1 + 184 + 0 + 0 + + + org.contikios.cooja.plugins.Visualizer + + org.contikios.cooja.plugins.skins.IDVisualizerSkin + org.contikios.cooja.plugins.skins.UDGMVisualizerSkin + org.contikios.cooja.plugins.skins.AttributeVisualizerSkin + 2.349818846983307 0.0 0.0 2.349818846983307 150.19773526533348 176.95275613586946 + + 520 + 3 + 523 + 269 + 14 + + + org.contikios.cooja.plugins.LogListener + + + + 937 + 0 + 213 + 21 + 464 + + + org.contikios.cooja.plugins.ScriptRunner + + + true + + 600 + 2 + 700 + 665 + 6 + + + diff --git a/examples/ipv6/rpl-udp/rpl-udp.csc b/examples/ipv6/rpl-udp/rpl-udp.csc index 7801d0f85..cf7c049f1 100644 --- a/examples/ipv6/rpl-udp/rpl-udp.csc +++ b/examples/ipv6/rpl-udp/rpl-udp.csc @@ -1,584 +1,584 @@ - - - [CONTIKI_DIR]/tools/cooja/apps/mrm - [CONTIKI_DIR]/tools/cooja/apps/mspsim - [CONTIKI_DIR]/tools/cooja/apps/avrora - [CONTIKI_DIR]/tools/cooja/apps/mobility - - Data collection network using IPv6 and RPL - 0 - generated - 5000000 - - org.contikios.cooja.radiomediums.UDGM - 50.0 - 50.0 - 1.0 - 1.0 - - - 40000 - - - org.contikios.cooja.mspmote.SkyMoteType - sky1 - Sky Mote Type #sky1 - [CONTIKI_DIR]/examples/ipv6/rpl-udp/udp-server.c - make udp-server.sky TARGET=sky - [CONTIKI_DIR]/examples/ipv6/rpl-udp/udp-server.sky - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.interfaces.IPAddress - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - org.contikios.cooja.mspmote.interfaces.MspClock - org.contikios.cooja.mspmote.interfaces.MspMoteID - org.contikios.cooja.mspmote.interfaces.SkyButton - org.contikios.cooja.mspmote.interfaces.SkyFlash - org.contikios.cooja.mspmote.interfaces.SkyCoffeeFilesystem - org.contikios.cooja.mspmote.interfaces.Msp802154Radio - org.contikios.cooja.mspmote.interfaces.MspSerial - org.contikios.cooja.mspmote.interfaces.SkyLED - org.contikios.cooja.mspmote.interfaces.MspDebugOutput - org.contikios.cooja.mspmote.interfaces.SkyTemperature - - - org.contikios.cooja.mspmote.SkyMoteType - sky2 - Sky Mote Type #sky2 - [CONTIKI_DIR]/examples/ipv6/rpl-udp/udp-client.c - make udp-client.sky TARGET=sky - [CONTIKI_DIR]/examples/ipv6/rpl-udp/udp-client.sky - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.interfaces.IPAddress - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - org.contikios.cooja.mspmote.interfaces.MspClock - org.contikios.cooja.mspmote.interfaces.MspMoteID - org.contikios.cooja.mspmote.interfaces.SkyButton - org.contikios.cooja.mspmote.interfaces.SkyFlash - org.contikios.cooja.mspmote.interfaces.SkyCoffeeFilesystem - org.contikios.cooja.mspmote.interfaces.Msp802154Radio - org.contikios.cooja.mspmote.interfaces.MspSerial - org.contikios.cooja.mspmote.interfaces.SkyLED - org.contikios.cooja.mspmote.interfaces.MspDebugOutput - org.contikios.cooja.mspmote.interfaces.SkyTemperature - - - - - org.contikios.cooja.interfaces.Position - 48.435974731198804 - -66.16503914182063 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 1 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 4.049356309774755 - 98.28771308774003 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 2 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 127.9689727848476 - 91.71883780610729 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 3 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 57.897299848739024 - 92.47229665488265 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 4 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 47.34887596588397 - -30.341495695501195 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 5 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 47.13486576528276 - 32.944481932122315 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 6 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - -11.42091423859419 - 17.879870626121914 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 7 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 118.92746659954325 - 57.05973076244069 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 8 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 53.68872892015448 - 59.887319605093715 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 9 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 16.45706316609417 - 23.9075414163248 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 10 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - -18.9555027263478 - 75.14274313304935 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 11 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 29.265863595275306 - 85.6911670159044 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 12 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - -39.298891643282545 - -3.9704359883635574 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 13 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 66.93880603404335 - -42.39683727590697 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 14 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 94.81678343873172 - 26.921376811426246 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 15 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - -43.06618588715935 - 30.68867105530305 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 16 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - -34.02467970185502 - -24.313824905298304 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 17 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - -28.750467760427494 - 48.01822457713635 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 18 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 124.95513738974614 - 20.140247172447996 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 19 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 15.703604317318808 - -47.6710492173345 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 20 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - -40.05235049205791 - 92.47229665488265 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 21 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 121.18784314586934 - -24.313824905298304 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 22 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 88.03565379975346 - -44.657213822233054 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 23 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 24.745110502623138 - -1.7100594420374744 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 24 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 94.06332458995635 - -2.4635182908128352 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 25 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - -4.639784599615941 - -9.998106778566445 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 26 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - -13.681290784920272 - -50.684884612435944 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 27 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 103.10483077526068 - 96.99304974753483 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 28 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 8.922474678340558 - 59.320107308766765 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 29 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 58.650758697514384 - 2.8106936506146916 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 30 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 90.59867707439 - 67.97632874312737 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 31 - - sky2 - - - - org.contikios.cooja.plugins.SimControl - 259 - 1 - 184 - 0 - 0 - - - org.contikios.cooja.plugins.Visualizer - - org.contikios.cooja.plugins.skins.IDVisualizerSkin - org.contikios.cooja.plugins.skins.UDGMVisualizerSkin - org.contikios.cooja.plugins.skins.AttributeVisualizerSkin - 2.349818846983307 0.0 0.0 2.349818846983307 150.19773526533348 176.95275613586946 - - 520 - 3 - 523 - 269 - 14 - - - org.contikios.cooja.plugins.LogListener - - - - 937 - 0 - 213 - 21 - 464 - - - org.contikios.cooja.plugins.ScriptRunner - - - true - - 600 - 2 - 700 - 665 - 6 - - - + + + [CONTIKI_DIR]/tools/cooja/apps/mrm + [CONTIKI_DIR]/tools/cooja/apps/mspsim + [CONTIKI_DIR]/tools/cooja/apps/avrora + [CONTIKI_DIR]/tools/cooja/apps/mobility + + Data collection network using IPv6 and RPL + 0 + generated + 5000000 + + org.contikios.cooja.radiomediums.UDGM + 50.0 + 50.0 + 1.0 + 1.0 + + + 40000 + + + org.contikios.cooja.mspmote.SkyMoteType + sky1 + Sky Mote Type #sky1 + [CONTIKI_DIR]/examples/ipv6/rpl-udp/udp-server.c + make udp-server.sky TARGET=sky + [CONTIKI_DIR]/examples/ipv6/rpl-udp/udp-server.sky + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.interfaces.IPAddress + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + org.contikios.cooja.mspmote.interfaces.MspClock + org.contikios.cooja.mspmote.interfaces.MspMoteID + org.contikios.cooja.mspmote.interfaces.SkyButton + org.contikios.cooja.mspmote.interfaces.SkyFlash + org.contikios.cooja.mspmote.interfaces.SkyCoffeeFilesystem + org.contikios.cooja.mspmote.interfaces.Msp802154Radio + org.contikios.cooja.mspmote.interfaces.MspSerial + org.contikios.cooja.mspmote.interfaces.SkyLED + org.contikios.cooja.mspmote.interfaces.MspDebugOutput + org.contikios.cooja.mspmote.interfaces.SkyTemperature + + + org.contikios.cooja.mspmote.SkyMoteType + sky2 + Sky Mote Type #sky2 + [CONTIKI_DIR]/examples/ipv6/rpl-udp/udp-client.c + make udp-client.sky TARGET=sky + [CONTIKI_DIR]/examples/ipv6/rpl-udp/udp-client.sky + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.interfaces.IPAddress + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + org.contikios.cooja.mspmote.interfaces.MspClock + org.contikios.cooja.mspmote.interfaces.MspMoteID + org.contikios.cooja.mspmote.interfaces.SkyButton + org.contikios.cooja.mspmote.interfaces.SkyFlash + org.contikios.cooja.mspmote.interfaces.SkyCoffeeFilesystem + org.contikios.cooja.mspmote.interfaces.Msp802154Radio + org.contikios.cooja.mspmote.interfaces.MspSerial + org.contikios.cooja.mspmote.interfaces.SkyLED + org.contikios.cooja.mspmote.interfaces.MspDebugOutput + org.contikios.cooja.mspmote.interfaces.SkyTemperature + + + + + org.contikios.cooja.interfaces.Position + 48.435974731198804 + -66.16503914182063 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 1 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 4.049356309774755 + 98.28771308774003 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 2 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 127.9689727848476 + 91.71883780610729 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 3 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 57.897299848739024 + 92.47229665488265 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 4 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 47.34887596588397 + -30.341495695501195 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 5 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 47.13486576528276 + 32.944481932122315 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 6 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + -11.42091423859419 + 17.879870626121914 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 7 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 118.92746659954325 + 57.05973076244069 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 8 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 53.68872892015448 + 59.887319605093715 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 9 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 16.45706316609417 + 23.9075414163248 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 10 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + -18.9555027263478 + 75.14274313304935 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 11 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 29.265863595275306 + 85.6911670159044 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 12 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + -39.298891643282545 + -3.9704359883635574 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 13 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 66.93880603404335 + -42.39683727590697 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 14 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 94.81678343873172 + 26.921376811426246 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 15 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + -43.06618588715935 + 30.68867105530305 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 16 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + -34.02467970185502 + -24.313824905298304 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 17 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + -28.750467760427494 + 48.01822457713635 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 18 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 124.95513738974614 + 20.140247172447996 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 19 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 15.703604317318808 + -47.6710492173345 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 20 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + -40.05235049205791 + 92.47229665488265 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 21 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 121.18784314586934 + -24.313824905298304 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 22 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 88.03565379975346 + -44.657213822233054 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 23 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 24.745110502623138 + -1.7100594420374744 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 24 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 94.06332458995635 + -2.4635182908128352 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 25 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + -4.639784599615941 + -9.998106778566445 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 26 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + -13.681290784920272 + -50.684884612435944 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 27 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 103.10483077526068 + 96.99304974753483 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 28 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 8.922474678340558 + 59.320107308766765 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 29 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 58.650758697514384 + 2.8106936506146916 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 30 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 90.59867707439 + 67.97632874312737 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 31 + + sky2 + + + + org.contikios.cooja.plugins.SimControl + 259 + 1 + 184 + 0 + 0 + + + org.contikios.cooja.plugins.Visualizer + + org.contikios.cooja.plugins.skins.IDVisualizerSkin + org.contikios.cooja.plugins.skins.UDGMVisualizerSkin + org.contikios.cooja.plugins.skins.AttributeVisualizerSkin + 2.349818846983307 0.0 0.0 2.349818846983307 150.19773526533348 176.95275613586946 + + 520 + 3 + 523 + 269 + 14 + + + org.contikios.cooja.plugins.LogListener + + + + 937 + 0 + 213 + 21 + 464 + + + org.contikios.cooja.plugins.ScriptRunner + + + true + + 600 + 2 + 700 + 665 + 6 + + + diff --git a/examples/ipv6/simple-udp-rpl/broadcast-example.csc b/examples/ipv6/simple-udp-rpl/broadcast-example.csc index 0e1fe08ba..72bc733d0 100644 --- a/examples/ipv6/simple-udp-rpl/broadcast-example.csc +++ b/examples/ipv6/simple-udp-rpl/broadcast-example.csc @@ -1,248 +1,248 @@ - - - [CONTIKI_DIR]/tools/cooja/apps/mrm - [CONTIKI_DIR]/tools/cooja/apps/mspsim - [CONTIKI_DIR]/tools/cooja/apps/avrora - [CONTIKI_DIR]/tools/cooja/apps/native_gateway - [CONTIKI_DIR]/tools/cooja/apps/serial_socket - /home/user/contikiprojects/sics.se/mobility - [CONTIKI_DIR]/tools/cooja/apps/collect-view - /home/user/nes/papers/smartip-paper/code/cooja_qr - - Simple UDP broadcast example - 0 - 123456 - 1000000 - - org.contikios.cooja.radiomediums.UDGM - 50.0 - 100.0 - 1.0 - 1.0 - - - 40000 - - - org.contikios.cooja.mspmote.SkyMoteType - sky1 - Broadcast example - [CONTIKI_DIR]/examples/ipv6/simple-udp-rpl/broadcast-example.c - make broadcast-example.sky TARGET=sky - [CONTIKI_DIR]/examples/ipv6/simple-udp-rpl/broadcast-example.sky - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.interfaces.IPAddress - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - org.contikios.cooja.mspmote.interfaces.MspClock - org.contikios.cooja.mspmote.interfaces.MspMoteID - org.contikios.cooja.mspmote.interfaces.SkyButton - org.contikios.cooja.mspmote.interfaces.SkyFlash - org.contikios.cooja.mspmote.interfaces.SkyCoffeeFilesystem - org.contikios.cooja.mspmote.interfaces.Msp802154Radio - org.contikios.cooja.mspmote.interfaces.MspSerial - org.contikios.cooja.mspmote.interfaces.SkyLED - org.contikios.cooja.mspmote.interfaces.MspDebugOutput - org.contikios.cooja.mspmote.interfaces.SkyTemperature - - - - - org.contikios.cooja.interfaces.Position - 64.1956818968534 - 28.591062627059372 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 1 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 51.81261061627534 - 24.647047255346667 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 2 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 9.068527629624546 - 46.26817786392282 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 3 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 87.5626508274206 - 4.896101751816129 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 4 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 55.15853460164762 - 3.4681662067903796 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 5 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 99.33682438963966 - 49.73072195748186 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 6 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 61.26294736288044 - 61.845254356789646 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 7 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 70.4693668755668 - 52.43101713632271 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 8 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 33.5789440978246 - 48.10557568631877 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 9 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 62.6079314243491 - 76.96581640898913 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 10 - - sky1 - - - - org.contikios.cooja.plugins.SimControl - 318 - 3 - 192 - 0 - 0 - - - org.contikios.cooja.plugins.Visualizer - - org.contikios.cooja.plugins.skins.IDVisualizerSkin - org.contikios.cooja.plugins.skins.GridVisualizerSkin - org.contikios.cooja.plugins.skins.UDGMVisualizerSkin - 2.9205864417411154 0.0 0.0 2.9205864417411154 -13.303600659817928 3.5428004585568913 - - 300 - 2 - 300 - 1122 - 0 - - - org.contikios.cooja.plugins.LogListener - - - - 1422 - 0 - 236 - -1 - 302 - - - org.contikios.cooja.plugins.TimeLine - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - - - 125 - 500.0 - - 1422 - 1 - 190 - 0 - 539 - - - + + + [CONTIKI_DIR]/tools/cooja/apps/mrm + [CONTIKI_DIR]/tools/cooja/apps/mspsim + [CONTIKI_DIR]/tools/cooja/apps/avrora + [CONTIKI_DIR]/tools/cooja/apps/native_gateway + [CONTIKI_DIR]/tools/cooja/apps/serial_socket + /home/user/contikiprojects/sics.se/mobility + [CONTIKI_DIR]/tools/cooja/apps/collect-view + /home/user/nes/papers/smartip-paper/code/cooja_qr + + Simple UDP broadcast example + 0 + 123456 + 1000000 + + org.contikios.cooja.radiomediums.UDGM + 50.0 + 100.0 + 1.0 + 1.0 + + + 40000 + + + org.contikios.cooja.mspmote.SkyMoteType + sky1 + Broadcast example + [CONTIKI_DIR]/examples/ipv6/simple-udp-rpl/broadcast-example.c + make broadcast-example.sky TARGET=sky + [CONTIKI_DIR]/examples/ipv6/simple-udp-rpl/broadcast-example.sky + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.interfaces.IPAddress + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + org.contikios.cooja.mspmote.interfaces.MspClock + org.contikios.cooja.mspmote.interfaces.MspMoteID + org.contikios.cooja.mspmote.interfaces.SkyButton + org.contikios.cooja.mspmote.interfaces.SkyFlash + org.contikios.cooja.mspmote.interfaces.SkyCoffeeFilesystem + org.contikios.cooja.mspmote.interfaces.Msp802154Radio + org.contikios.cooja.mspmote.interfaces.MspSerial + org.contikios.cooja.mspmote.interfaces.SkyLED + org.contikios.cooja.mspmote.interfaces.MspDebugOutput + org.contikios.cooja.mspmote.interfaces.SkyTemperature + + + + + org.contikios.cooja.interfaces.Position + 64.1956818968534 + 28.591062627059372 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 1 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 51.81261061627534 + 24.647047255346667 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 2 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 9.068527629624546 + 46.26817786392282 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 3 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 87.5626508274206 + 4.896101751816129 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 4 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 55.15853460164762 + 3.4681662067903796 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 5 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 99.33682438963966 + 49.73072195748186 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 6 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 61.26294736288044 + 61.845254356789646 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 7 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 70.4693668755668 + 52.43101713632271 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 8 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 33.5789440978246 + 48.10557568631877 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 9 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 62.6079314243491 + 76.96581640898913 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 10 + + sky1 + + + + org.contikios.cooja.plugins.SimControl + 318 + 3 + 192 + 0 + 0 + + + org.contikios.cooja.plugins.Visualizer + + org.contikios.cooja.plugins.skins.IDVisualizerSkin + org.contikios.cooja.plugins.skins.GridVisualizerSkin + org.contikios.cooja.plugins.skins.UDGMVisualizerSkin + 2.9205864417411154 0.0 0.0 2.9205864417411154 -13.303600659817928 3.5428004585568913 + + 300 + 2 + 300 + 1122 + 0 + + + org.contikios.cooja.plugins.LogListener + + + + 1422 + 0 + 236 + -1 + 302 + + + org.contikios.cooja.plugins.TimeLine + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + + + 125 + 500.0 + + 1422 + 1 + 190 + 0 + 539 + + + diff --git a/examples/ipv6/simple-udp-rpl/unicast-example.csc b/examples/ipv6/simple-udp-rpl/unicast-example.csc index 84a7ad65d..60bd834bb 100644 --- a/examples/ipv6/simple-udp-rpl/unicast-example.csc +++ b/examples/ipv6/simple-udp-rpl/unicast-example.csc @@ -1,287 +1,287 @@ - - - [CONTIKI_DIR]/tools/cooja/apps/mrm - [CONTIKI_DIR]/tools/cooja/apps/mspsim - [CONTIKI_DIR]/tools/cooja/apps/avrora - [CONTIKI_DIR]/tools/cooja/apps/native_gateway - [CONTIKI_DIR]/tools/cooja/apps/serial_socket - /home/user/contikiprojects/sics.se/mobility - [CONTIKI_DIR]/tools/cooja/apps/collect-view - /home/user/nes/papers/smartip-paper/code/cooja_qr - - Simple UDP unicast example - 0 - 123456 - 1000000 - - org.contikios.cooja.radiomediums.UDGM - 50.0 - 100.0 - 1.0 - 1.0 - - - 40000 - - - org.contikios.cooja.mspmote.SkyMoteType - sky1 - UDP receiver - [CONTIKI_DIR]/examples/ipv6/simple-udp-rpl/unicast-receiver.c - make unicast-receiver.sky TARGET=sky - [CONTIKI_DIR]/examples/ipv6/simple-udp-rpl/unicast-receiver.sky - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.interfaces.IPAddress - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - org.contikios.cooja.mspmote.interfaces.MspClock - org.contikios.cooja.mspmote.interfaces.MspMoteID - org.contikios.cooja.mspmote.interfaces.SkyButton - org.contikios.cooja.mspmote.interfaces.SkyFlash - org.contikios.cooja.mspmote.interfaces.SkyCoffeeFilesystem - org.contikios.cooja.mspmote.interfaces.Msp802154Radio - org.contikios.cooja.mspmote.interfaces.MspSerial - org.contikios.cooja.mspmote.interfaces.SkyLED - org.contikios.cooja.mspmote.interfaces.MspDebugOutput - org.contikios.cooja.mspmote.interfaces.SkyTemperature - - - org.contikios.cooja.mspmote.SkyMoteType - sky2 - UDP sender - [CONTIKI_DIR]/examples/ipv6/simple-udp-rpl/unicast-sender.c - make unicast-sender.sky TARGET=sky - [CONTIKI_DIR]/examples/ipv6/simple-udp-rpl/unicast-sender.sky - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.interfaces.IPAddress - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - org.contikios.cooja.mspmote.interfaces.MspClock - org.contikios.cooja.mspmote.interfaces.MspMoteID - org.contikios.cooja.mspmote.interfaces.SkyButton - org.contikios.cooja.mspmote.interfaces.SkyFlash - org.contikios.cooja.mspmote.interfaces.SkyCoffeeFilesystem - org.contikios.cooja.mspmote.interfaces.Msp802154Radio - org.contikios.cooja.mspmote.interfaces.MspSerial - org.contikios.cooja.mspmote.interfaces.SkyLED - org.contikios.cooja.mspmote.interfaces.MspDebugOutput - org.contikios.cooja.mspmote.interfaces.SkyTemperature - - - - - org.contikios.cooja.interfaces.Position - 82.45117687053667 - 90.0660093026363 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 1 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 44.53120632368774 - 89.83566130147413 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 2 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 91.76407203945963 - 8.764533976596468 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 3 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 10.771554112657956 - 16.155558894723033 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 4 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 40.99108749529099 - 33.68910640819968 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 5 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 49.762281669516085 - 15.219756237459913 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 6 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 26.209078576184762 - 97.71885344901867 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 7 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 96.30596045236783 - 3.353548431613529 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 8 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 52.22023117695779 - 56.516553603970586 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 9 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 57.92282771739404 - 34.17317501704098 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 10 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 3.8628214275088335 - 52.90298303308778 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 11 - - sky2 - - - - org.contikios.cooja.plugins.SimControl - 318 - 3 - 192 - 0 - 0 - - - org.contikios.cooja.plugins.Visualizer - - org.contikios.cooja.plugins.skins.IDVisualizerSkin - org.contikios.cooja.plugins.skins.GridVisualizerSkin - org.contikios.cooja.plugins.skins.MoteTypeVisualizerSkin - org.contikios.cooja.plugins.skins.UDGMVisualizerSkin - 2.3409990660057263 0.0 0.0 2.3409990660057263 27.752487588138713 2.6948007992423 - - 300 - 2 - 300 - 1122 - 0 - - - org.contikios.cooja.plugins.LogListener - - - - 1422 - 1 - 239 - 0 - 293 - - - org.contikios.cooja.plugins.TimeLine - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - - - 125 - 500.0 - - 1422 - 0 - 198 - 0 - 531 - - - + + + [CONTIKI_DIR]/tools/cooja/apps/mrm + [CONTIKI_DIR]/tools/cooja/apps/mspsim + [CONTIKI_DIR]/tools/cooja/apps/avrora + [CONTIKI_DIR]/tools/cooja/apps/native_gateway + [CONTIKI_DIR]/tools/cooja/apps/serial_socket + /home/user/contikiprojects/sics.se/mobility + [CONTIKI_DIR]/tools/cooja/apps/collect-view + /home/user/nes/papers/smartip-paper/code/cooja_qr + + Simple UDP unicast example + 0 + 123456 + 1000000 + + org.contikios.cooja.radiomediums.UDGM + 50.0 + 100.0 + 1.0 + 1.0 + + + 40000 + + + org.contikios.cooja.mspmote.SkyMoteType + sky1 + UDP receiver + [CONTIKI_DIR]/examples/ipv6/simple-udp-rpl/unicast-receiver.c + make unicast-receiver.sky TARGET=sky + [CONTIKI_DIR]/examples/ipv6/simple-udp-rpl/unicast-receiver.sky + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.interfaces.IPAddress + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + org.contikios.cooja.mspmote.interfaces.MspClock + org.contikios.cooja.mspmote.interfaces.MspMoteID + org.contikios.cooja.mspmote.interfaces.SkyButton + org.contikios.cooja.mspmote.interfaces.SkyFlash + org.contikios.cooja.mspmote.interfaces.SkyCoffeeFilesystem + org.contikios.cooja.mspmote.interfaces.Msp802154Radio + org.contikios.cooja.mspmote.interfaces.MspSerial + org.contikios.cooja.mspmote.interfaces.SkyLED + org.contikios.cooja.mspmote.interfaces.MspDebugOutput + org.contikios.cooja.mspmote.interfaces.SkyTemperature + + + org.contikios.cooja.mspmote.SkyMoteType + sky2 + UDP sender + [CONTIKI_DIR]/examples/ipv6/simple-udp-rpl/unicast-sender.c + make unicast-sender.sky TARGET=sky + [CONTIKI_DIR]/examples/ipv6/simple-udp-rpl/unicast-sender.sky + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.interfaces.IPAddress + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + org.contikios.cooja.mspmote.interfaces.MspClock + org.contikios.cooja.mspmote.interfaces.MspMoteID + org.contikios.cooja.mspmote.interfaces.SkyButton + org.contikios.cooja.mspmote.interfaces.SkyFlash + org.contikios.cooja.mspmote.interfaces.SkyCoffeeFilesystem + org.contikios.cooja.mspmote.interfaces.Msp802154Radio + org.contikios.cooja.mspmote.interfaces.MspSerial + org.contikios.cooja.mspmote.interfaces.SkyLED + org.contikios.cooja.mspmote.interfaces.MspDebugOutput + org.contikios.cooja.mspmote.interfaces.SkyTemperature + + + + + org.contikios.cooja.interfaces.Position + 82.45117687053667 + 90.0660093026363 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 1 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 44.53120632368774 + 89.83566130147413 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 2 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 91.76407203945963 + 8.764533976596468 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 3 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 10.771554112657956 + 16.155558894723033 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 4 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 40.99108749529099 + 33.68910640819968 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 5 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 49.762281669516085 + 15.219756237459913 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 6 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 26.209078576184762 + 97.71885344901867 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 7 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 96.30596045236783 + 3.353548431613529 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 8 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 52.22023117695779 + 56.516553603970586 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 9 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 57.92282771739404 + 34.17317501704098 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 10 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 3.8628214275088335 + 52.90298303308778 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 11 + + sky2 + + + + org.contikios.cooja.plugins.SimControl + 318 + 3 + 192 + 0 + 0 + + + org.contikios.cooja.plugins.Visualizer + + org.contikios.cooja.plugins.skins.IDVisualizerSkin + org.contikios.cooja.plugins.skins.GridVisualizerSkin + org.contikios.cooja.plugins.skins.MoteTypeVisualizerSkin + org.contikios.cooja.plugins.skins.UDGMVisualizerSkin + 2.3409990660057263 0.0 0.0 2.3409990660057263 27.752487588138713 2.6948007992423 + + 300 + 2 + 300 + 1122 + 0 + + + org.contikios.cooja.plugins.LogListener + + + + 1422 + 1 + 239 + 0 + 293 + + + org.contikios.cooja.plugins.TimeLine + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + + + 125 + 500.0 + + 1422 + 0 + 198 + 0 + 531 + + + diff --git a/examples/ipv6/sky-websense/example-sky-websense.csc b/examples/ipv6/sky-websense/example-sky-websense.csc index b83ec2943..f088c5386 100644 --- a/examples/ipv6/sky-websense/example-sky-websense.csc +++ b/examples/ipv6/sky-websense/example-sky-websense.csc @@ -1,207 +1,207 @@ - - - [CONTIKI_DIR]/tools/cooja/apps/mrm - [CONTIKI_DIR]/tools/cooja/apps/mspsim - [CONTIKI_DIR]/tools/cooja/apps/avrora - [CONTIKI_DIR]/tools/cooja/apps/serial_socket - - Sky Websense with RPL router - 0 - 123456 - 1000000 - - org.contikios.cooja.radiomediums.UDGM - 50.0 - 50.0 - 1.0 - 1.0 - - - 40000 - - - org.contikios.cooja.mspmote.SkyMoteType - rplroot - Sky RPL Root - [CONTIKI_DIR]/examples/ipv6/rpl-border-router/border-router.c - make border-router.sky TARGET=sky - [CONTIKI_DIR]/examples/ipv6/rpl-border-router/border-router.sky - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.interfaces.IPAddress - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - org.contikios.cooja.mspmote.interfaces.MspClock - org.contikios.cooja.mspmote.interfaces.MspMoteID - org.contikios.cooja.mspmote.interfaces.SkyButton - org.contikios.cooja.mspmote.interfaces.SkyFlash - org.contikios.cooja.mspmote.interfaces.SkyCoffeeFilesystem - org.contikios.cooja.mspmote.interfaces.Msp802154Radio - org.contikios.cooja.mspmote.interfaces.MspSerial - org.contikios.cooja.mspmote.interfaces.SkyLED - org.contikios.cooja.mspmote.interfaces.MspDebugOutput - org.contikios.cooja.mspmote.interfaces.SkyTemperature - - - org.contikios.cooja.mspmote.SkyMoteType - skyweb - Sky Websense - [CONTIKI_DIR]/examples/ipv6/sky-websense/sky-websense.c - make sky-websense.sky TARGET=sky - [CONTIKI_DIR]/examples/ipv6/sky-websense/sky-websense.sky - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.interfaces.IPAddress - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - org.contikios.cooja.mspmote.interfaces.MspClock - org.contikios.cooja.mspmote.interfaces.MspMoteID - org.contikios.cooja.mspmote.interfaces.SkyButton - org.contikios.cooja.mspmote.interfaces.SkyFlash - org.contikios.cooja.mspmote.interfaces.SkyCoffeeFilesystem - org.contikios.cooja.mspmote.interfaces.Msp802154Radio - org.contikios.cooja.mspmote.interfaces.MspSerial - org.contikios.cooja.mspmote.interfaces.SkyLED - org.contikios.cooja.mspmote.interfaces.MspDebugOutput - org.contikios.cooja.mspmote.interfaces.SkyTemperature - - - - - org.contikios.cooja.interfaces.Position - 33.260163187353555 - 30.643217359962595 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 1 - - rplroot - - - - - org.contikios.cooja.interfaces.Position - 62.239287566073514 - 34.43810269527116 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 2 - - skyweb - - - - - org.contikios.cooja.interfaces.Position - 56.71945435107925 - 20.293530081848317 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 3 - - skyweb - - - - - org.contikios.cooja.interfaces.Position - 75.34889145168493 - 24.43340499309403 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 4 - - skyweb - - - - - org.contikios.cooja.interfaces.Position - 92.59837024854205 - 38.57797760651687 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 5 - - skyweb - - - - - org.contikios.cooja.interfaces.Position - 47.68359039801751 - 47.26544238238854 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 6 - - skyweb - - - - org.contikios.cooja.plugins.SimControl - 259 - 4 - 179 - 0 - 0 - - - org.contikios.cooja.plugins.Visualizer - - org.contikios.cooja.plugins.skins.IDVisualizerSkin - org.contikios.cooja.plugins.skins.UDGMVisualizerSkin - org.contikios.cooja.plugins.skins.MoteTypeVisualizerSkin - 2.898638306051894 0.0 0.0 2.898638306051894 -68.40918308040007 -27.82360366026197 - - 258 - 2 - 209 - 0 - 178 - - - org.contikios.cooja.plugins.LogListener - - - - 1024 - 3 - 311 - 0 - 385 - - - org.contikios.cooja.plugins.RadioLogger - - 150 - - - 769 - 0 - 342 - 255 - -1 - - - SerialSocketServer - 0 - 422 - 1 - 74 - 601 - 310 - - + + + [CONTIKI_DIR]/tools/cooja/apps/mrm + [CONTIKI_DIR]/tools/cooja/apps/mspsim + [CONTIKI_DIR]/tools/cooja/apps/avrora + [CONTIKI_DIR]/tools/cooja/apps/serial_socket + + Sky Websense with RPL router + 0 + 123456 + 1000000 + + org.contikios.cooja.radiomediums.UDGM + 50.0 + 50.0 + 1.0 + 1.0 + + + 40000 + + + org.contikios.cooja.mspmote.SkyMoteType + rplroot + Sky RPL Root + [CONTIKI_DIR]/examples/ipv6/rpl-border-router/border-router.c + make border-router.sky TARGET=sky + [CONTIKI_DIR]/examples/ipv6/rpl-border-router/border-router.sky + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.interfaces.IPAddress + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + org.contikios.cooja.mspmote.interfaces.MspClock + org.contikios.cooja.mspmote.interfaces.MspMoteID + org.contikios.cooja.mspmote.interfaces.SkyButton + org.contikios.cooja.mspmote.interfaces.SkyFlash + org.contikios.cooja.mspmote.interfaces.SkyCoffeeFilesystem + org.contikios.cooja.mspmote.interfaces.Msp802154Radio + org.contikios.cooja.mspmote.interfaces.MspSerial + org.contikios.cooja.mspmote.interfaces.SkyLED + org.contikios.cooja.mspmote.interfaces.MspDebugOutput + org.contikios.cooja.mspmote.interfaces.SkyTemperature + + + org.contikios.cooja.mspmote.SkyMoteType + skyweb + Sky Websense + [CONTIKI_DIR]/examples/ipv6/sky-websense/sky-websense.c + make sky-websense.sky TARGET=sky + [CONTIKI_DIR]/examples/ipv6/sky-websense/sky-websense.sky + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.interfaces.IPAddress + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + org.contikios.cooja.mspmote.interfaces.MspClock + org.contikios.cooja.mspmote.interfaces.MspMoteID + org.contikios.cooja.mspmote.interfaces.SkyButton + org.contikios.cooja.mspmote.interfaces.SkyFlash + org.contikios.cooja.mspmote.interfaces.SkyCoffeeFilesystem + org.contikios.cooja.mspmote.interfaces.Msp802154Radio + org.contikios.cooja.mspmote.interfaces.MspSerial + org.contikios.cooja.mspmote.interfaces.SkyLED + org.contikios.cooja.mspmote.interfaces.MspDebugOutput + org.contikios.cooja.mspmote.interfaces.SkyTemperature + + + + + org.contikios.cooja.interfaces.Position + 33.260163187353555 + 30.643217359962595 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 1 + + rplroot + + + + + org.contikios.cooja.interfaces.Position + 62.239287566073514 + 34.43810269527116 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 2 + + skyweb + + + + + org.contikios.cooja.interfaces.Position + 56.71945435107925 + 20.293530081848317 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 3 + + skyweb + + + + + org.contikios.cooja.interfaces.Position + 75.34889145168493 + 24.43340499309403 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 4 + + skyweb + + + + + org.contikios.cooja.interfaces.Position + 92.59837024854205 + 38.57797760651687 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 5 + + skyweb + + + + + org.contikios.cooja.interfaces.Position + 47.68359039801751 + 47.26544238238854 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 6 + + skyweb + + + + org.contikios.cooja.plugins.SimControl + 259 + 4 + 179 + 0 + 0 + + + org.contikios.cooja.plugins.Visualizer + + org.contikios.cooja.plugins.skins.IDVisualizerSkin + org.contikios.cooja.plugins.skins.UDGMVisualizerSkin + org.contikios.cooja.plugins.skins.MoteTypeVisualizerSkin + 2.898638306051894 0.0 0.0 2.898638306051894 -68.40918308040007 -27.82360366026197 + + 258 + 2 + 209 + 0 + 178 + + + org.contikios.cooja.plugins.LogListener + + + + 1024 + 3 + 311 + 0 + 385 + + + org.contikios.cooja.plugins.RadioLogger + + 150 + + + 769 + 0 + 342 + 255 + -1 + + + SerialSocketServer + 0 + 422 + 1 + 74 + 601 + 310 + + diff --git a/examples/ipv6/slip-radio/no-framer.c b/examples/ipv6/slip-radio/no-framer.c index 7f3447e97..69f4b7e98 100644 --- a/examples/ipv6/slip-radio/no-framer.c +++ b/examples/ipv6/slip-radio/no-framer.c @@ -124,6 +124,5 @@ parse(void) const struct framer no_framer = { hdr_length, create, - framer_canonical_create_and_secure, parse }; diff --git a/examples/ipv6/slip-radio/slip-radio-rf230.c b/examples/ipv6/slip-radio/slip-radio-rf230.c index 1f254386d..67c3ecc33 100644 --- a/examples/ipv6/slip-radio/slip-radio-rf230.c +++ b/examples/ipv6/slip-radio/slip-radio-rf230.c @@ -1,72 +1,72 @@ -/* - * Copyright (c) 2011, Swedish Institute of Computer Science - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the Institute nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * This file is part of the Contiki operating system. - * - * Sets up some commands for the RF230 radio. - */ - -#include "contiki.h" -#include "cmd.h" - -#include "radio/rf230/radio.h" -#include "radio/rf230bb/rf230bb.h" - - -#define DEBUG 0 -#if DEBUG -#include -#define PRINTF(FORMAT,args...) printf_P(PSTR(FORMAT),##args) -#define PRINTSHORT(FORMAT,args...) printf_P(PSTR(FORMAT),##args) -#else -#define PRINTF(...) -#define PRINTSHORT(...) -#endif - -int -cmd_handler_rf230(const uint8_t *data, int len) -{ - if(data[0] == '!') { - if(data[1] == 'C') { - PRINTF("CMD: Setting channel: %d\n", data[2]); - rf230_set_channel(data[2]); - return 1; - } - } else if(data[0] == '?') { - if(data[1] == 'C') { - uint8_t buf[4]; - PRINTF("CMD: Getting channel: %d\n", data[2]); - buf[0] = '!'; - buf[1] = 'C'; - buf[2] = rf230_get_channel(); - cmd_send(buf, 3); - return 1; - } - } - return 0; -} +/* + * Copyright (c) 2011, Swedish Institute of Computer Science + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the Contiki operating system. + * + * Sets up some commands for the RF230 radio. + */ + +#include "contiki.h" +#include "cmd.h" + +#include "radio/rf230/radio.h" +#include "radio/rf230bb/rf230bb.h" + + +#define DEBUG 0 +#if DEBUG +#include +#define PRINTF(FORMAT,args...) printf_P(PSTR(FORMAT),##args) +#define PRINTSHORT(FORMAT,args...) printf_P(PSTR(FORMAT),##args) +#else +#define PRINTF(...) +#define PRINTSHORT(...) +#endif + +int +cmd_handler_rf230(const uint8_t *data, int len) +{ + if(data[0] == '!') { + if(data[1] == 'C') { + PRINTF("CMD: Setting channel: %d\n", data[2]); + rf230_set_channel(data[2]); + return 1; + } + } else if(data[0] == '?') { + if(data[1] == 'C') { + uint8_t buf[4]; + PRINTF("CMD: Getting channel: %d\n", data[2]); + buf[0] = '!'; + buf[1] = 'C'; + buf[2] = rf230_get_channel(); + cmd_send(buf, 3); + return 1; + } + } + return 0; +} diff --git a/examples/irc-80col/Makefile b/examples/irc-80col/Makefile new file mode 100644 index 000000000..bad574e70 --- /dev/null +++ b/examples/irc-80col/Makefile @@ -0,0 +1,8 @@ +CONTIKI_PROJECT = irc-client +all: $(CONTIKI_PROJECT) + +APPS = irc + +CONTIKI = ../.. +CONTIKI_WITH_IPV4 = 1 +include $(CONTIKI)/Makefile.include diff --git a/examples/irc-80col/Makefile.apple2enh.defines b/examples/irc-80col/Makefile.apple2enh.defines new file mode 100644 index 000000000..71fb932e2 --- /dev/null +++ b/examples/irc-80col/Makefile.apple2enh.defines @@ -0,0 +1 @@ +DEFINES = WITH_CLIENT,WITH_DNS,WITH_80COL,WITH_GUI,WITH_MOUSE,WITH_PFS diff --git a/examples/irc-80col/Makefile.atarixl.defines b/examples/irc-80col/Makefile.atarixl.defines new file mode 100644 index 000000000..962070b58 --- /dev/null +++ b/examples/irc-80col/Makefile.atarixl.defines @@ -0,0 +1 @@ +DEFINES = WITH_CLIENT,WITH_DNS,WITH_80COL,WITH_GUI,WITH_MOUSE diff --git a/examples/irc-80col/Makefile.c128.defines b/examples/irc-80col/Makefile.c128.defines new file mode 100644 index 000000000..32efc32ba --- /dev/null +++ b/examples/irc-80col/Makefile.c128.defines @@ -0,0 +1 @@ +DEFINES = WITH_CLIENT,WITH_DNS,WITH_80COL,WITH_GUI,WITH_PFS,MTU_SIZE=900 diff --git a/examples/irc-80col/Makefile.c64.defines b/examples/irc-80col/Makefile.c64.defines new file mode 100644 index 000000000..71fb932e2 --- /dev/null +++ b/examples/irc-80col/Makefile.c64.defines @@ -0,0 +1 @@ +DEFINES = WITH_CLIENT,WITH_DNS,WITH_80COL,WITH_GUI,WITH_MOUSE,WITH_PFS diff --git a/examples/irc-80col/Makefile.native.defines b/examples/irc-80col/Makefile.native.defines new file mode 100644 index 000000000..1b5caf200 --- /dev/null +++ b/examples/irc-80col/Makefile.native.defines @@ -0,0 +1 @@ +DEFINES = WITH_GUI diff --git a/examples/irc-80col/Makefile.win32.defines b/examples/irc-80col/Makefile.win32.defines new file mode 100644 index 000000000..1b5caf200 --- /dev/null +++ b/examples/irc-80col/Makefile.win32.defines @@ -0,0 +1 @@ +DEFINES = WITH_GUI diff --git a/core/net/mac/framer.c b/examples/irc-80col/irc-client.c similarity index 80% rename from core/net/mac/framer.c rename to examples/irc-80col/irc-client.c index fa7e9b4c1..da28f9440 100644 --- a/core/net/mac/framer.c +++ b/examples/irc-80col/irc-client.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, Fraunhofer Heinrich-Hertz-Institut. + * Copyright (c) 2010, Swedish Institute of Computer Science. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -26,25 +26,13 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * + * This file is part of the Contiki operating system. + * */ -#include "net/mac/framer.h" -#include "net/packetbuf.h" -#include "net/netstack.h" +#include "contiki-net.h" +#include "irc.h" /*---------------------------------------------------------------------------*/ -int -framer_canonical_create_and_secure(void) -{ - int hdr_len; - - hdr_len = NETSTACK_FRAMER.create(); - if(hdr_len >= 0) { - packetbuf_compact(); - if(!NETSTACK_LLSEC.on_frame_created()) { - return FRAMER_FAILED; - } - } - return hdr_len; -} -/*---------------------------------------------------------------------------*/ \ No newline at end of file +AUTOSTART_PROCESSES(&irc_process); +/*---------------------------------------------------------------------------*/ diff --git a/examples/irc/Makefile.c128.defines b/examples/irc/Makefile.c128.defines index 7e0762e68..2924f4709 100644 --- a/examples/irc/Makefile.c128.defines +++ b/examples/irc/Makefile.c128.defines @@ -1 +1 @@ -DEFINES = WITH_CLIENT,WITH_DNS,WITH_GUI,WITH_PFS,MTU_SIZE=1000 +DEFINES = WITH_CLIENT,WITH_DNS,WITH_GUI,WITH_PFS,MTU_SIZE=900 diff --git a/examples/jn516x/README.md b/examples/jn516x/README.md new file mode 100644 index 000000000..06ccc0da7 --- /dev/null +++ b/examples/jn516x/README.md @@ -0,0 +1,5 @@ +Examples for the JN516x platform. +* dr1175: simple Contiki application for the DR1175 evaluation board. Prints out sensor values periodically. +* rime: simple Rime example. Works with ContikiMAC (default) or NullRDC +* RPL: RPL examples, including border router, simple node, and coap resources. More information under rpl/README.md + \ No newline at end of file diff --git a/examples/jn516x/dr1175-sensors/Makefile b/examples/jn516x/dr1175-sensors/Makefile new file mode 100644 index 000000000..3fbf3a246 --- /dev/null +++ b/examples/jn516x/dr1175-sensors/Makefile @@ -0,0 +1,12 @@ +CONTIKI=../../.. +CONTIKI_PROJECT = node +CFLAGS += -DPROJECT_CONF_H=\"project-conf.h\" + +TARGET ?= jn516x +JN516x_WITH_DR1175 = 1 + +CONTIKI_WITH_RIME = 1 + +all: $(CONTIKI_PROJECT) + +include $(CONTIKI)/Makefile.include diff --git a/examples/jn516x/dr1175-sensors/README.md b/examples/jn516x/dr1175-sensors/README.md new file mode 100644 index 000000000..0b49024c2 --- /dev/null +++ b/examples/jn516x/dr1175-sensors/README.md @@ -0,0 +1,2 @@ +Sensor test for DR1175 evaluation board (light + temp/humidity). +Reads and prints out various sensor samples every second. diff --git a/examples/jn516x/dr1175-sensors/node.c b/examples/jn516x/dr1175-sensors/node.c new file mode 100644 index 000000000..e30bfea3d --- /dev/null +++ b/examples/jn516x/dr1175-sensors/node.c @@ -0,0 +1,89 @@ +/* + * Copyright (c) 2015, SICS Swedish ICT. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + */ +/** + * \author Atis Elsts + * \file + * Sensor test for DR1175 evaluation board (light + temp/humidity). + */ + +#include "contiki.h" + +#include "light-sensor.h" +#include "ht-sensor.h" +#include "leds.h" +#include "leds-extension.h" + +/*---------------------------------------------------------------------------*/ +PROCESS(test_process, "Sensor test process"); +AUTOSTART_PROCESSES(&test_process); +/*---------------------------------------------------------------------------*/ +PROCESS_THREAD(test_process, ev, data) +{ + static struct etimer et; + static uint8_t led_status; + uint8_t r, g, b; + int val; + + PROCESS_BEGIN(); + + puts("initializing sensors..."); + + /* Make sensor active for measuring */ + SENSORS_ACTIVATE(light_sensor); + SENSORS_ACTIVATE(ht_sensor); + + /* Set level for LEDSs */ + leds_set_level(255, LEDS_RED | LEDS_GREEN | LEDS_BLUE | LEDS_WHITE); + + while(1) { + etimer_set(&et, CLOCK_SECOND * 1); + + PROCESS_WAIT_EVENT_UNTIL(etimer_expired(&et)); + + puts("reading sensors..."); + + val = ht_sensor.value(HT_SENSOR_HUM); + printf("humidity: %d\n", val); + + val = ht_sensor.value(HT_SENSOR_TEMP); + printf("temperature: %d\n", val); + + led_status++; + r = ((led_status & 0x1) ? LEDS_RED : 0); + g = ((led_status & 0x2) ? LEDS_GREEN : 0); + b = ((led_status & 0x4) ? LEDS_BLUE : 0); + + leds_toggle((leds_get() ^ (r | g | b)) | LEDS_WHITE); + + puts(""); + } + PROCESS_END(); +} +/*---------------------------------------------------------------------------*/ diff --git a/examples/jn516x/dr1175-sensors/project-conf.h b/examples/jn516x/dr1175-sensors/project-conf.h new file mode 100644 index 000000000..906efff45 --- /dev/null +++ b/examples/jn516x/dr1175-sensors/project-conf.h @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2015, SICS Swedish ICT. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + */ +/** + * \author Atis Elsts + */ + +#ifndef __PROJECT_CONF_H__ +#define __PROJECT_CONF_H__ + +#undef NETSTACK_CONF_RDC +#undef NETSTACK_CONF_FRAMER +#undef NETSTACK_CONF_MAC +#undef NETSTACK_CONF_NETWORK + +#define NETSTACK_CONF_RDC nullrdc_driver +#define NETSTACK_CONF_FRAMER framer_802154 +#define NETSTACK_CONF_MAC csma_driver +#define NETSTACK_CONF_NETWORK rime_driver + +#endif /* __PROJECT_CONF_H__ */ diff --git a/examples/jn516x/rime/Makefile b/examples/jn516x/rime/Makefile new file mode 100644 index 000000000..02262937e --- /dev/null +++ b/examples/jn516x/rime/Makefile @@ -0,0 +1,11 @@ +CONTIKI=../../.. +CONTIKI_PROJECT = node +CFLAGS += -DPROJECT_CONF_H=\"project-conf.h\" + +TARGET ?= jn516x + +CONTIKI_WITH_RIME = 1 + +all: $(CONTIKI_PROJECT) + +include $(CONTIKI)/Makefile.include diff --git a/examples/jn516x/rime/README.md b/examples/jn516x/rime/README.md new file mode 100644 index 000000000..1f693c6ae --- /dev/null +++ b/examples/jn516x/rime/README.md @@ -0,0 +1 @@ +A simple Rime + ContikiMAC code example. diff --git a/examples/jn516x/rime/node.c b/examples/jn516x/rime/node.c new file mode 100644 index 000000000..dd8fd37b7 --- /dev/null +++ b/examples/jn516x/rime/node.c @@ -0,0 +1,125 @@ +/* + * Copyright (c) 2015, SICS Swedish ICT. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + */ +/** + * \author Atis Elsts + * \file + * ContikiMAC + Rime stack test for JN516x platform. + */ + +#include "contiki-conf.h" +#include "net/rime/rime.h" + +#if 0 +#define RX_ADDR1 140 +#define RX_ADDR2 228 +#else +#define RX_ADDR1 7 +#define RX_ADDR2 0 +#endif + +#define MAX_RETRANSMISSIONS 4 + +/*---------------------------------------------------------------------------*/ +PROCESS(unicast_test_process, "ContikiMAC Node"); +AUTOSTART_PROCESSES(&unicast_test_process); + +static void +recv_runicast(struct runicast_conn *c, const linkaddr_t *from, uint8_t seqno) +{ + printf("runicast message received from %d.%d, seqno %d, len %d: '%s'\n", + from->u8[0], from->u8[1], seqno, packetbuf_datalen(), (char *)packetbuf_dataptr()); +} +static void +sent_runicast(struct runicast_conn *c, const linkaddr_t *to, uint8_t retransmissions) +{ + printf("runicast message sent to %d.%d, retransmissions %d\n", + to->u8[0], to->u8[1], retransmissions); +} +static void +timedout_runicast(struct runicast_conn *c, const linkaddr_t *to, uint8_t retransmissions) +{ + printf("runicast message timed out when sending to %d.%d, retransmissions %d\n", + to->u8[0], to->u8[1], retransmissions); +} +static const struct runicast_callbacks runicast_callbacks = { recv_runicast, + sent_runicast, + timedout_runicast }; +static struct runicast_conn runicast; +/*---------------------------------------------------------------------------*/ +PROCESS_THREAD(unicast_test_process, ev, data) +{ + PROCESS_BEGIN(); + + puts("unicast test start"); + + runicast_open(&runicast, 144, &runicast_callbacks); + + /* Receiver node: do nothing */ + if(linkaddr_node_addr.u8[0] == RX_ADDR1 && + linkaddr_node_addr.u8[1] == RX_ADDR2) { + puts("wait forever"); + } + while(1) { + static struct etimer et; + static int seqno; + + etimer_set(&et, CLOCK_SECOND * 5); + + PROCESS_WAIT_EVENT_UNTIL(etimer_expired(&et)); + + if(linkaddr_node_addr.u8[0] == RX_ADDR1 && + linkaddr_node_addr.u8[1] == RX_ADDR2) { + puts("tick..."); + continue; + } + + if(!runicast_is_transmitting(&runicast)) { + static char buffer[100] = "hello"; + linkaddr_t recv; + + memset(&recv, 0, LINKADDR_SIZE); + packetbuf_copyfrom(buffer, sizeof(buffer)); + recv.u8[0] = RX_ADDR1; + recv.u8[1] = RX_ADDR2; + + printf("%u.%u: sending runicast to address %u.%u\n", + linkaddr_node_addr.u8[0], + linkaddr_node_addr.u8[1], + recv.u8[0], + recv.u8[1]); + + packetbuf_set_attr(PACKETBUF_ATTR_PACKET_ID, ++seqno); + runicast_send(&runicast, &recv, MAX_RETRANSMISSIONS); + } + } + + PROCESS_END(); +} +/*---------------------------------------------------------------------------*/ diff --git a/examples/jn516x/rime/project-conf.h b/examples/jn516x/rime/project-conf.h new file mode 100644 index 000000000..84e1cae06 --- /dev/null +++ b/examples/jn516x/rime/project-conf.h @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2015, SICS Swedish ICT. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + */ +/** + * \author Atis Elsts + */ + +#ifndef __PROJECT_CONF_H__ +#define __PROJECT_CONF_H__ + +#undef NETSTACK_CONF_RDC +#undef NETSTACK_CONF_FRAMER +#undef NETSTACK_CONF_MAC +#undef NETSTACK_CONF_NETWORK + +#if 1 +#define NETSTACK_CONF_RDC contikimac_driver +#define NETSTACK_CONF_FRAMER contikimac_framer +#else +#define NETSTACK_CONF_RDC nullrdc_driver +#define NETSTACK_CONF_FRAMER framer_802154 +#endif + +#define NETSTACK_CONF_MAC csma_driver +#define NETSTACK_CONF_NETWORK rime_driver + +#undef UIP_CONF_IPV6 +#define UIP_CONF_IPV6 0 + +#undef RF_CHANNEL +#define RF_CHANNEL 25 + +#undef MICROMAC_CONF_CHANNEL +#define MICROMAC_CONF_CHANNEL RF_CHANNEL + +#undef CC2420_CONF_CHANNEL +#define CC2420_CONF_CHANNEL RF_CHANNEL + +#undef MICROMAC_CONF_AUTOACK +#define MICROMAC_CONF_AUTOACK 1 + +#endif /* __PROJECT_CONF_H__ */ diff --git a/examples/jn516x/rpl/README.md b/examples/jn516x/rpl/README.md new file mode 100644 index 000000000..39a213268 --- /dev/null +++ b/examples/jn516x/rpl/README.md @@ -0,0 +1,43 @@ +# HOWTO - Setting up the RPL Border router and other nodes + +In this folder we have a fully functional demonstrator with the components: + +1. **RPL border router**: to start the wireless network and connect it to other networks. +2. and a **wireless node** that acts as a basic RPL node by default (but can optionally be used configured as DAG Root) + +## RICH RPL Border Router + +Setup the UART flow-control mode for the router from border-router/project-conf.h + +* Enable either **HW flow control** +```C +#define UART_HW_FLOW_CTRL 1 +#define UART_XONXOFF_FLOW_CTRL 0 +``` +* or **SW flow control** +```C +#define UART_HW_FLOW_CTRL 0 +#define UART_XONXOFF_FLOW_CTRL 1 +``` +* You can disable both, but it is not recommended. + +Compile and flash a node with the rpl-border-router.jn516x.bin image. Either a USB dongle or a dev-board would work. + +From a Linux terminal, go to `contiki/examples/jn516x/rpl/border-router` and do either +`make connect-router-hw` if you have **HW flow control** +or `make connect-router-sw` if you have **SW flow control** + +This will start a tunnel interface (tun0) on the host machine. +All traffic towards our network (prefix aaaa::1/64) will now be routed to the border router. + +## RPL Node + +The directory contiki-private/examples/jn516x/rpl/node contains a basic RICH node running TSCH and RPL. +You can compile and program more NXP nodes to run this, forming a larger network. +You should be able to ping the nodes (you can obtain their IPv6 address either directly from their log output +or by enabling DEBUG output in rpl-icmp6.c and looking at DAO prefixes being added. + +## RPL+CoAP Nodes + +coap-*-node are example nodes that expose their sensors as CoAP resources. See README.md files from the sub-directories +for more details. diff --git a/examples/jn516x/rpl/border-router/Makefile b/examples/jn516x/rpl/border-router/Makefile new file mode 100644 index 000000000..53598e492 --- /dev/null +++ b/examples/jn516x/rpl/border-router/Makefile @@ -0,0 +1,31 @@ +CONTIKI_PROJECT = border-router +all: $(CONTIKI_PROJECT) + +TARGET ?= jn516x + +CONTIKI=../../../.. + +CONTIKI_WITH_IPV6 = 1 + +PROJECTDIRS += .. ../tools +PROJECT_SOURCEFILES += rpl-tools.c +CFLAGS += -DPROJECT_CONF_H=\"project-conf.h\" +PROJECT_SOURCEFILES += slip-bridge.c slip.c + +ifeq ($(PREFIX),) + PREFIX = aaaa::1/64 +endif + +include $(CONTIKI)/Makefile.include + +#using XON/XOFF flow control +connect-router-sw: $(CONTIKI)/tools/tunslip6 + sudo $(CONTIKI)/tools/tunslip6 -X -B 1000000 $(PREFIX) + +#using hw flow control +connect-router-hw: $(CONTIKI)/tools/tunslip6 + sudo $(CONTIKI)/tools/tunslip6 -H -B 1000000 $(PREFIX) + +#using no flow control +connect-router-no: $(CONTIKI)/tools/tunslip6 + sudo $(CONTIKI)/tools/tunslip6 -B 1000000 $(PREFIX) diff --git a/examples/jn516x/rpl/border-router/README.md b/examples/jn516x/rpl/border-router/README.md new file mode 100644 index 000000000..c2af3f3b6 --- /dev/null +++ b/examples/jn516x/rpl/border-router/README.md @@ -0,0 +1,10 @@ +A RPL border router. +To indicate the hardware target for the border router, add one of the following +options in the command line: +If rpl-border-router runs on dongle: +JN516x_WITH_DONGLE=1 +If rpl-border-router runs on DR1174: +JN516x_WITH_DR1174=1 +If building for a new platform, first execute : make clean + +See ../README.md for more. \ No newline at end of file diff --git a/examples/jn516x/rpl/border-router/border-router.c b/examples/jn516x/rpl/border-router/border-router.c new file mode 100644 index 000000000..a260aef3b --- /dev/null +++ b/examples/jn516x/rpl/border-router/border-router.c @@ -0,0 +1,98 @@ +/* + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the Contiki operating system. + * + */ + +#include "contiki.h" +#include "dev/slip.h" +#include "net/rpl/rpl.h" +#include "tools/rpl-tools.h" + +#define DEBUG DEBUG_PRINT +#include "net/ip/uip-debug.h" + +static uip_ipaddr_t prefix; +static uint8_t prefix_set; + +PROCESS(border_router_process, "Border router process"); + +AUTOSTART_PROCESSES(&border_router_process); + +/*---------------------------------------------------------------------------*/ +void +request_prefix(void) +{ + /* mess up uip_buf with a dirty request... */ + uip_buf[0] = '?'; + uip_buf[1] = 'P'; +/* uip_buf[2] = '\n'; */ + uip_len = 2; + slip_send(); + uip_len = 0; +} +/*---------------------------------------------------------------------------*/ +void +set_prefix_64(uip_ipaddr_t *prefix_64) +{ + memcpy(&prefix, prefix_64, 16); + prefix_set = 1; +} +/*---------------------------------------------------------------------------*/ +PROCESS_THREAD(border_router_process, ev, data) +{ + static struct etimer et; + + PROCESS_BEGIN(); + +/* While waiting for the prefix to be sent through the SLIP connection, the future + * border router can join an existing DAG as a parent or child, or acquire a default + * router that will later take precedence over the SLIP fallback interface. + * Prevent that by turning the radio off until we are initialized as a DAG root. + */ + prefix_set = 0; + + PROCESS_PAUSE(); + + PRINTF("RPL-Border router started\n"); + + /* Request prefix until it has been received */ + while(!prefix_set) { + etimer_set(&et, CLOCK_SECOND); + request_prefix(); + PROCESS_WAIT_EVENT_UNTIL(etimer_expired(&et)); + PRINTF("Waiting for prefix\n"); + } + + PRINTF("Obtained prefix: "); + uip_debug_ipaddr_print(&prefix); + PRINTF("\n"); + + rpl_tools_init(&prefix); + + PROCESS_END(); +} +/*---------------------------------------------------------------------------*/ diff --git a/examples/jn516x/rpl/border-router/project-conf.h b/examples/jn516x/rpl/border-router/project-conf.h new file mode 100644 index 000000000..2489905a6 --- /dev/null +++ b/examples/jn516x/rpl/border-router/project-conf.h @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2015, SICS Swedish ICT. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + */ + +/** + * \author Simon Duquennoy + */ + +#ifndef BR_PROJECT_CONF_H_ +#define BR_PROJECT_CONF_H_ + +#ifndef UIP_FALLBACK_INTERFACE +#define UIP_FALLBACK_INTERFACE rpl_interface +#endif + +/* Needed for slip-bridge */ +#undef SLIP_BRIDGE_CONF_NO_PUTCHAR +#define SLIP_BRIDGE_CONF_NO_PUTCHAR 0 + +#include "../common-conf.h" + +#endif /* PROJECT_CONF_H_ */ diff --git a/examples/jn516x/rpl/border-router/slip-bridge.c b/examples/jn516x/rpl/border-router/slip-bridge.c new file mode 100644 index 000000000..e79f80990 --- /dev/null +++ b/examples/jn516x/rpl/border-router/slip-bridge.c @@ -0,0 +1,162 @@ +/* + * Copyright (c) 2010, SICS Swedish ICT. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + */ + +/** + * \file + * Slip fallback interface + * \author + * Niclas Finne + * Joakim Eriksson + * Joel Hoglund + * Nicolas Tsiftes + */ + +#include "net/ip/uip.h" +#include "net/ipv6/uip-ds6.h" +#include "dev/slip.h" +#if CONTIKI_TARGET_JN516X +#include "dev/uart0.h" +#else +#include "dev/uart1.h" +#endif +#include + +#define UIP_IP_BUF ((struct uip_ip_hdr *)&uip_buf[UIP_LLH_LEN]) + +#define DEBUG DEBUG_NONE +#include "net/ip/uip-debug.h" + +#ifndef BAUD2UBR +#define BAUD2UBR(X) (X) +#endif + +void set_prefix_64(uip_ipaddr_t *); + +static uip_ipaddr_t last_sender; +/*---------------------------------------------------------------------------*/ +static void +slip_input_callback(void) +{ + PRINTF("SIN: %u\n", uip_len); + if(uip_buf[0] == '!') { + PRINTF("Got configuration message of type %c\n", uip_buf[1]); + uip_len = 0; + if(uip_buf[1] == 'P') { + uip_ipaddr_t prefix; + /* Here we set a prefix !!! */ + memset(&prefix, 0, 16); + memcpy(&prefix, &uip_buf[2], 8); + PRINTF("Setting prefix "); + PRINT6ADDR(&prefix); + PRINTF("\n"); + set_prefix_64(&prefix); + } + } else if(uip_buf[0] == '?') { + PRINTF("Got request message of type %c\n", uip_buf[1]); + if(uip_buf[1] == 'M') { + char *hexchar = "0123456789abcdef"; + int j; + /* this is just a test so far... just to see if it works */ + uip_buf[0] = '!'; + for(j = 0; j < 8; j++) { + uip_buf[2 + j * 2] = hexchar[uip_lladdr.addr[j] >> 4]; + uip_buf[3 + j * 2] = hexchar[uip_lladdr.addr[j] & 15]; + } + uip_len = 18; + slip_send(); + } + uip_len = 0; + } + /* Save the last sender received over SLIP to avoid bouncing the + packet back if no route is found */ + uip_ipaddr_copy(&last_sender, &UIP_IP_BUF->srcipaddr); +} +/*---------------------------------------------------------------------------*/ +static void +init(void) +{ + slip_arch_init(BAUD2UBR(115200)); + process_start(&slip_process, NULL); + slip_set_input_callback(slip_input_callback); +} +/*---------------------------------------------------------------------------*/ +static int +output(void) +{ + if(uip_ipaddr_cmp(&last_sender, &UIP_IP_BUF->srcipaddr)) { + /* Do not bounce packets back over SLIP if the packet was received + over SLIP */ + PRINTF("slip-bridge: Destination off-link but no route src="); + PRINT6ADDR(&UIP_IP_BUF->srcipaddr); + PRINTF(" dst="); + PRINT6ADDR(&UIP_IP_BUF->destipaddr); + PRINTF("\n"); + } else { + PRINTF("SUT: %u\n", uip_len); + slip_send(); + printf("\n"); + } + return 0; +} +/*---------------------------------------------------------------------------*/ +#if !SLIP_BRIDGE_CONF_NO_PUTCHAR +#undef putchar +int +putchar(int c) +{ +#define SLIP_END 0300 + static char debug_frame = 0; + + if(!debug_frame) { /* Start of debug output */ + slip_arch_writeb(SLIP_END); + slip_arch_writeb('\r'); /* Type debug line == '\r' */ + debug_frame = 1; + } + + /* Need to also print '\n' because for example COOJA will not show + any output before line end */ + slip_arch_writeb((char)c); + + /* + * Line buffered output, a newline marks the end of debug output and + * implicitly flushes debug output. + */ + if(c == '\n') { + slip_arch_writeb(SLIP_END); + debug_frame = 0; + } + return c; +} +#endif +/*---------------------------------------------------------------------------*/ +const struct uip_fallback_interface rpl_interface = { + init, output +}; +/*---------------------------------------------------------------------------*/ diff --git a/examples/jn516x/rpl/coap-dongle-node/Makefile b/examples/jn516x/rpl/coap-dongle-node/Makefile new file mode 100644 index 000000000..1a4afa652 --- /dev/null +++ b/examples/jn516x/rpl/coap-dongle-node/Makefile @@ -0,0 +1,21 @@ +CONTIKI_PROJECT = dongle-node +all: $(CONTIKI_PROJECT) + +TARGET ?= jn516x +JN516x_WITH_DONGLE = 1 + +CONTIKI=../../../.. + +CONTIKI_WITH_IPV6 = 1 + +PROJECTDIRS += .. ../tools +PROJECT_SOURCEFILES += rpl-tools.c +CFLAGS += -DPROJECT_CONF_H=\"project-conf.h\" + +CFLAGS += -DWITH_COAP +CFLAGS += -DUIP_CONF_TCP=0 +APPS = json +APPS += er-coap +APPS += rest-engine + +include $(CONTIKI)/Makefile.include diff --git a/examples/jn516x/rpl/coap-dongle-node/README.md b/examples/jn516x/rpl/coap-dongle-node/README.md new file mode 100644 index 000000000..2a4ed6183 --- /dev/null +++ b/examples/jn516x/rpl/coap-dongle-node/README.md @@ -0,0 +1,16 @@ +dongle-node is an example of a RICH node containing a JN516x microcontroller on a USB dongle. +The dongle is part of the NXP JN516x Evaluation Kit (see http://www.nxp.com/documents/leaflet/75017368.pdf) +The dongle-node connects to the network in the same way as described in `examples\jn5168/rpl/README.md` + +The dongle contains 2 LEDs that are available as a CoAP resource. They can be accessed via a CoAP client at the IPv6 interface +of the border router (e.g. via Copper plug-in on Firefox). +The following list gives an overview of the resources: + +URI Description +--- ----------- +Dongle\LED-toggle When doing a PUT/POST method on this resource (no payload needed), the LEDs will run through + the following states with wrap-around: + - GREEN LED on + - RED LED on + - All LEDs off + - RED and GREEN LED alternatively on with 1 sec period time diff --git a/examples/jn516x/rpl/coap-dongle-node/dongle-node.c b/examples/jn516x/rpl/coap-dongle-node/dongle-node.c new file mode 100644 index 000000000..ab5845dff --- /dev/null +++ b/examples/jn516x/rpl/coap-dongle-node/dongle-node.c @@ -0,0 +1,143 @@ +/* + * Copyright (c) 2015 NXP B.V. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of NXP B.V. nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY NXP B.V. AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL NXP B.V. OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the Contiki operating system. + * + * Author: Theo van Daele + * + */ +#include "contiki.h" +#include "net/ip/uip.h" +#include "tools/rpl-tools.h" +#include "rest-engine.h" +#include "sys/ctimer.h" +#include +#include "dev/leds.h" + +static void ct_callback(void *ptr); +static void put_post_led_toggle_handler(void *request, void *response, uint8_t *buffer, uint16_t preferred_size, int32_t *offset); + +static char content[REST_MAX_CHUNK_SIZE]; +static int content_len = 0; +static struct ctimer ct; + +#define CONTENT_PRINTF(...) { if(content_len < sizeof(content)) { content_len += snprintf(content + content_len, sizeof(content) - content_len, __VA_ARGS__); } } + +/* On dongle, LEDs are connected anti-parallel to DIO pins. */ + +#define TOGGLE_TIME CLOCK_SECOND +/*---------------------------------------------------------------------------*/ +PROCESS(start_app, "START_APP"); +AUTOSTART_PROCESSES(&start_app); +/*---------------------------------------------------------------------------*/ + +/* Call back for led toggle timer to toggle leds */ +static void +ct_callback(void *ptr) +{ + static uint8 toggle_status = 0; + if(toggle_status) { + leds_set(LEDS_RED); + } else { + leds_set(LEDS_GREEN); + } ctimer_restart(&ct); + toggle_status ^= 0x01; +} +/*********** CoAP sensor/ resource ************************************************/ +RESOURCE(resource_led_toggle, + "title=\"Led_toggle\"", + NULL, + put_post_led_toggle_handler, + put_post_led_toggle_handler, + NULL); +static void +put_post_led_toggle_handler(void *request, void *response, uint8_t *buffer, uint16_t preferred_size, int32_t *offset) +{ + static int led_state = 0; + unsigned int accept = -1; + + /* Given the way the LEDs are connected to the DIO ports, the LEDs are controlled via direct DIO access. */ + content_len = 0; + switch(led_state) { + case (0): + ctimer_stop(&ct); + leds_set(LEDS_GREEN); /* Only LEDS_GREEN on */ + CONTENT_PRINTF("Message from resource: Green LED on"); + led_state = 1; + break; + case (1): + leds_set(LEDS_RED); /* Only LEDS_RED on */ + CONTENT_PRINTF("Message from resource: Red LED on"); + led_state = 2; + break; + case (2): + leds_set(0); /* All LEDS off */ + CONTENT_PRINTF("Message from resource: All LEDs off"); + led_state = 3; + break; + case 3: + /* Both leds toggle */ + CONTENT_PRINTF("Message from resource: LEDs toggle"); + ctimer_restart(&ct); + led_state = 0; + default: + break; + } + /* Return message */ + REST.get_header_accept(request, &accept); + if(accept == -1 || accept == REST.type.TEXT_PLAIN) { + REST.set_header_content_type(response, REST.type.TEXT_PLAIN); + REST.set_response_payload(response, (uint8_t *)content, content_len); + } +} +/*---------------------------------------------------------------------------*/ +PROCESS_THREAD(start_app, ev, data) +{ + PROCESS_BEGIN(); + static int is_coordinator = 0; + + /* Switch off dongle leds */ + + /* Initialise ct timer, but don't let it run yet */ + ctimer_set(&ct, TOGGLE_TIME, ct_callback, NULL); + ctimer_stop(&ct); + + /* Start net stack */ + if(is_coordinator) { + uip_ipaddr_t prefix; + uip_ip6addr(&prefix, 0xaaaa, 0, 0, 0, 0, 0, 0, 0); + rpl_tools_init(&prefix); + } else { + rpl_tools_init(NULL); + } printf("Starting RPL node\n"); + + rest_init_engine(); + rest_activate_resource(&resource_led_toggle, "Dongle/LED-toggle"); + + PROCESS_END(); +} diff --git a/examples/jn516x/rpl/coap-dongle-node/project-conf.h b/examples/jn516x/rpl/coap-dongle-node/project-conf.h new file mode 100644 index 000000000..4c2ecd648 --- /dev/null +++ b/examples/jn516x/rpl/coap-dongle-node/project-conf.h @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2015, SICS Swedish ICT. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + */ +/** + * \author Simon Duquennoy + */ + +#ifndef __PROJECT_CONF_H__ +#define __PROJECT_CONF_H__ + +#include "../common-conf.h" + +#endif /* __PROJECT_CONF_H__ */ diff --git a/examples/jn516x/rpl/coap-dr1175-node/Makefile b/examples/jn516x/rpl/coap-dr1175-node/Makefile new file mode 100644 index 000000000..f7960dcd1 --- /dev/null +++ b/examples/jn516x/rpl/coap-dr1175-node/Makefile @@ -0,0 +1,21 @@ +CONTIKI_PROJECT = dr1175-node +all: $(CONTIKI_PROJECT) + +TARGET ?= jn516x +JN516x_WITH_DR1175 = 1 + +CONTIKI=../../../.. + +CONTIKI_WITH_IPV6 = 1 + +PROJECTDIRS += .. ../tools +PROJECT_SOURCEFILES += rpl-tools.c +CFLAGS += -DPROJECT_CONF_H=\"project-conf.h\" + +CFLAGS += -DWITH_COAP +CFLAGS += -DUIP_CONF_TCP=0 +APPS = json +APPS += er-coap +APPS += rest-engine + +include $(CONTIKI)/Makefile.include diff --git a/examples/jn516x/rpl/coap-dr1175-node/README.md b/examples/jn516x/rpl/coap-dr1175-node/README.md new file mode 100644 index 000000000..6be19ab6d --- /dev/null +++ b/examples/jn516x/rpl/coap-dr1175-node/README.md @@ -0,0 +1,24 @@ +dr1175-node is an example of a RICH node containing a JN516x microcontroller on a DR1174 baseboard. +A DR1175 shield is mounted on the baseboard. +The boards are part of the NXP JN516x Evaluation Kit (see http://www.nxp.com/documents/leaflet/75017368.pdf) +The dr1175-node connects to the network in the same way as described in `examples\jn5168/rpl/README.md` + +The resources on the DR1175 are available as CoAP resources. They can be accessed via a CoAP client at the IPv6 interface +of the border router (e.g. via Copper plug-in on Firefox). +The following list gives an overview of the resources: + +URI Description +--- ----------- +DR1175\AllSensors This is an observable resource that shows the status of the humidity, light and temperature sensor. + The resource is automatically updated when a change in the value of the sensor data occurs. +DR1175\ColorLED\RGBValue With this resource, the level and color of the RGB LED can be set. + The output is set as 3 numbers (R, G and B) from 0..255, separated with a space +DR1175\Humidity\Unit This resource will return the unit of the humidity sensor +DR1175\Humidity\Value This resource will return the value of the humidity sensor +DR1175\LightSensor\Unit This resource will return the unit of the light sensor +DR1175\LightSensor\Value This resource will return the value of the light sensor +DR1175\Temperature\Unit This resource will return the unit of the temperature sensor +DR1175\Temperature\Value This resource will return the value of the temperature sensor +DR1175\WhiteLED This resource will set the level of 3 white power LEDs. Level is from 0..255 +DR1174\D3On1174 This resource control LED D3 on the base board +DR1174\D6On1174 This resource control LED D6 on the base board \ No newline at end of file diff --git a/examples/jn516x/rpl/coap-dr1175-node/dr1175-node.c b/examples/jn516x/rpl/coap-dr1175-node/dr1175-node.c new file mode 100644 index 000000000..f377dc3b3 --- /dev/null +++ b/examples/jn516x/rpl/coap-dr1175-node/dr1175-node.c @@ -0,0 +1,393 @@ +/* + * Copyright (c) 2015 NXP B.V. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of NXP B.V. nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY NXP B.V. AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL NXP B.V. OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the Contiki operating system. + * + * Author: Theo van Daele + * + */ + +#include "contiki.h" +#include "net/ip/uip.h" +#include "tools/rpl-tools.h" +#include "rest-engine.h" +#include "light-sensor.h" +#include "ht-sensor.h" +#include "dev/leds.h" +#include "dev/leds-extension.h" +#include "sys/etimer.h" +#include +#include + +static void event_sensors_dr1175_handler(void); +static void get_sensors_dr1175_handler(void *request, void *response, uint8_t *buffer, uint16_t preferred_size, int32_t *offset); +static void get_light_sensor_value_handler(void *request, void *response, uint8_t *buffer, uint16_t preferred_size, int32_t *offset); +static void get_light_sensor_unit_handler(void *request, void *response, uint8_t *buffer, uint16_t preferred_size, int32_t *offset); +static void get_temperature_value_handler(void *request, void *response, uint8_t *buffer, uint16_t preferred_size, int32_t *offset); +static void get_temperature_unit_handler(void *request, void *response, uint8_t *buffer, uint16_t preferred_size, int32_t *offset); +static void get_humidity_value_handler(void *request, void *response, uint8_t *buffer, uint16_t preferred_size, int32_t *offset); +static void get_humidity_unit_handler(void *request, void *response, uint8_t *buffer, uint16_t preferred_size, int32_t *offset); +static void put_post_white_led_handler(void *request, void *response, uint8_t *buffer, uint16_t preferred_size, int32_t *offset); +static void put_post_rgb_led_handler(void *request, void *response, uint8_t *buffer, uint16_t preferred_size, int32_t *offset); +static void put_post_led_d3_1174_handler(void *request, void *response, uint8_t *buffer, uint16_t preferred_size, int32_t *offset); +static void put_post_led_d6_1174_handler(void *request, void *response, uint8_t *buffer, uint16_t preferred_size, int32_t *offset); + +static char content[REST_MAX_CHUNK_SIZE]; +static int content_len = 0; + +#define CONTENT_PRINTF(...) { if(content_len < sizeof(content)) { content_len += snprintf(content + content_len, sizeof(content) - content_len, __VA_ARGS__); } } + +#define CLIP(value, level) if(value > level) { \ + value = level; \ +} +#define SET_LED(LED) if(atoi((const char *)request_content) != 0) { \ + leds_on(LED); \ + } else { \ + leds_off(LED); \ + } +/*---------------------------------------------------------------------------*/ +PROCESS(start_app, "START_APP"); +AUTOSTART_PROCESSES(&start_app, &sensors_process); + +/*---------------------------------------------------------------------------*/ + +/*********** CoAP sensor/ resource *************************************************/ + +/*******************************************************************/ +/* Observable resource and event handler to obtain all sensor data */ +/*******************************************************************/ +EVENT_RESOURCE(resource_sensors_dr1175, /* name */ + "obs;title=\"All_DR1175_sensors\"", /* attributes */ + get_sensors_dr1175_handler, /* GET handler */ + NULL, /* POST handler */ + NULL, /* PUT handler */ + NULL, /* DELETE handler */ + event_sensors_dr1175_handler); /* event handler */ +static void +get_sensors_dr1175_handler(void *request, void *response, uint8_t *buffer, uint16_t preferred_size, int32_t *offset) +{ + unsigned int accept = -1; + REST.get_header_accept(request, &accept); + if(accept == -1 || accept == REST.type.APPLICATION_JSON) { + content_len = 0; + CONTENT_PRINTF("{\"DR1175\":["); + CONTENT_PRINTF("{\"Humidity\":\"%d\"},", ht_sensor.value(HT_SENSOR_HUM)); + CONTENT_PRINTF("{\"Light\":\"%d\"},", light_sensor.value(0)); + CONTENT_PRINTF("{\"Temp\":\"%d\"}", ht_sensor.value(HT_SENSOR_TEMP)); + CONTENT_PRINTF("]}"); + REST.set_header_content_type(response, REST.type.APPLICATION_JSON); + REST.set_response_payload(response, (uint8_t *)content, content_len); + } +} +static void +event_sensors_dr1175_handler() +{ + /* Registered observers are notified and will trigger the GET handler to create the response. */ + REST.notify_subscribers(&resource_sensors_dr1175); +} +/*****************************************************/ +/* Resource and handler to obtain light sensor value */ +/*****************************************************/ +RESOURCE(resource_light_sensor_value, + "title=\"light sensor value\"", + get_light_sensor_value_handler, + NULL, + NULL, + NULL); +static void +get_light_sensor_value_handler(void *request, void *response, uint8_t *buffer, uint16_t preferred_size, int32_t *offset) +{ + unsigned int accept = -1; + REST.get_header_accept(request, &accept); + if(accept == -1 || accept == REST.type.TEXT_PLAIN) { + content_len = 0; + CONTENT_PRINTF("%d", light_sensor.value(0)); + REST.set_header_content_type(response, REST.type.TEXT_PLAIN); + REST.set_response_payload(response, (uint8_t *)content, content_len); + } +} +/***************************************************/ +/* Resource and handler to obtain light unit value */ +/***************************************************/ +RESOURCE(resource_light_sensor_unit, + "title=\"light sensor unit\"", + get_light_sensor_unit_handler, + NULL, + NULL, + NULL); +static void +get_light_sensor_unit_handler(void *request, void *response, uint8_t *buffer, uint16_t preferred_size, int32_t *offset) +{ + unsigned int accept = -1; + REST.get_header_accept(request, &accept); + if(accept == -1 || accept == REST.type.TEXT_PLAIN) { + content_len = 0; + CONTENT_PRINTF("Lux"); + REST.set_header_content_type(response, REST.type.TEXT_PLAIN); + REST.set_response_payload(response, (uint8_t *)content, content_len); + } +} +/***********************************************************/ +/* Resource and handler to obtain temperature sensor value */ +/***********************************************************/ +RESOURCE(resource_temperature_value, + "title=\"temperature value\"", + get_temperature_value_handler, + NULL, + NULL, + NULL); +static void +get_temperature_value_handler(void *request, void *response, uint8_t *buffer, uint16_t preferred_size, int32_t *offset) +{ + unsigned int accept = -1; + REST.get_header_accept(request, &accept); + if(accept == -1 || accept == REST.type.TEXT_PLAIN) { + content_len = 0; + CONTENT_PRINTF("%d", ht_sensor.value(HT_SENSOR_TEMP)); + REST.set_header_content_type(response, REST.type.TEXT_PLAIN); + REST.set_response_payload(response, (uint8_t *)content, content_len); + } +} +/*********************************************************/ +/* Resource and handler to obtain temperature unit value */ +/*********************************************************/ +RESOURCE(resource_temperature_unit, + "title=\"temperature unit\"", + get_temperature_unit_handler, + NULL, + NULL, + NULL); +static void +get_temperature_unit_handler(void *request, void *response, uint8_t *buffer, uint16_t preferred_size, int32_t *offset) +{ + unsigned int accept = -1; + REST.get_header_accept(request, &accept); + if(accept == -1 || accept == REST.type.TEXT_PLAIN) { + content_len = 0; + CONTENT_PRINTF("degrees C"); + REST.set_header_content_type(response, REST.type.TEXT_PLAIN); + REST.set_response_payload(response, (uint8_t *)content, content_len); + } +} +/********************************************************/ +/* Resource and handler to obtain humidity sensor value */ +/********************************************************/ +RESOURCE(resource_humidity_value, + "title=\"humidity value\"", + get_humidity_value_handler, + NULL, + NULL, + NULL); +static void +get_humidity_value_handler(void *request, void *response, uint8_t *buffer, uint16_t preferred_size, int32_t *offset) +{ + unsigned int accept = -1; + REST.get_header_accept(request, &accept); + if(accept == -1 || accept == REST.type.TEXT_PLAIN) { + content_len = 0; + CONTENT_PRINTF("%d", ht_sensor.value(HT_SENSOR_HUM)); + REST.set_header_content_type(response, REST.type.TEXT_PLAIN); + REST.set_response_payload(response, (uint8_t *)content, content_len); + } +} +/******************************************************/ +/* Resource and handler to obtain humidity unit value */ +/******************************************************/ +RESOURCE(resource_humidity_unit, + "title=\"humidity unit\"", + get_humidity_unit_handler, + NULL, + NULL, + NULL); +static void +get_humidity_unit_handler(void *request, void *response, uint8_t *buffer, uint16_t preferred_size, int32_t *offset) +{ + unsigned int accept = -1; + REST.get_header_accept(request, &accept); + if(accept == -1 || accept == REST.type.TEXT_PLAIN) { + content_len = 0; + CONTENT_PRINTF("relative %%"); + REST.set_header_content_type(response, REST.type.TEXT_PLAIN); + REST.set_response_payload(response, (uint8_t *)content, content_len); + } +} +/***************************************************/ +/* Resource and handler to control White LED level */ +/***************************************************/ +RESOURCE(resource_white_led, + "title=\"WhiteLED <[0..255]>\"", + NULL, + put_post_white_led_handler, + put_post_white_led_handler, + NULL); +static void +put_post_white_led_handler(void *request, void *response, uint8_t *buffer, uint16_t preferred_size, int32_t *offset) +{ + const uint8_t *request_content = NULL; + int level; + + unsigned int accept = -1; + REST.get_header_accept(request, &accept); + if(accept == -1 || accept == REST.type.TEXT_PLAIN) { + REST.get_request_payload(request, &request_content); + level = atoi((const char *)request_content); + CLIP(level, 255) + leds_set_level(level, LEDS_WHITE); + } +} +/*************************************************/ +/* Resource and handler to control RGB LED level */ +/*************************************************/ +RESOURCE(resource_rgb_led, + "title=\"RGB LED <[0..255] [0..255] [0..255]>\"", + NULL, + put_post_rgb_led_handler, + put_post_rgb_led_handler, + NULL); +static void +put_post_rgb_led_handler(void *request, void *response, uint8_t *buffer, uint16_t preferred_size, int32_t *offset) +{ + const uint8_t *request_content = NULL; + char *pch; + int RGB[] = { 0, 0, 0 }; + int index = 0; + + unsigned int accept = -1; + REST.get_header_accept(request, &accept); + if(accept == -1 || accept == REST.type.TEXT_PLAIN) { + REST.get_request_payload(request, &request_content); + pch = strtok((char *)request_content, " "); + while((pch != NULL) && (index != sizeof(RGB) / sizeof(int))) { + /* Convert token to int */ + RGB[index] = atoi(pch); + CLIP(RGB[index], 255) + index++; + /* Get next token */ + pch = strtok(NULL, " "); + } + leds_set_level(RGB[0], LEDS_RED); + leds_set_level(RGB[1], LEDS_GREEN); + leds_set_level(RGB[2], LEDS_BLUE); + } +} +/************************************************/ +/* Resource and handler to control D3 on DR1174 */ +/************************************************/ +RESOURCE(resource_led_d3_1174, + "title=\"LED D3 1174<[0,1]>\"", + NULL, + put_post_led_d3_1174_handler, + put_post_led_d3_1174_handler, + NULL); +static void +put_post_led_d3_1174_handler(void *request, void *response, uint8_t *buffer, uint16_t preferred_size, int32_t *offset) +{ + const uint8_t *request_content; + unsigned int accept = -1; + REST.get_header_accept(request, &accept); + if(accept == -1 || accept == REST.type.TEXT_PLAIN) { + REST.get_request_payload(request, &request_content); + SET_LED(LEDS_GP0); + } +} +/************************************************/ +/* Resource and handler to control D6 on DR1174 */ +/************************************************/ +RESOURCE(resource_led_d6_1174, + "title=\"LED D6 1174<[0,1]>\"", + NULL, + put_post_led_d6_1174_handler, + put_post_led_d6_1174_handler, + NULL); +static void +put_post_led_d6_1174_handler(void *request, void *response, uint8_t *buffer, uint16_t preferred_size, int32_t *offset) +{ + const uint8_t *request_content; + unsigned int accept = -1; + REST.get_header_accept(request, &accept); + if(accept == -1 || accept == REST.type.TEXT_PLAIN) { + REST.get_request_payload(request, &request_content); + SET_LED(LEDS_GP1); + } +} +/*---------------------------------------------------------------------------*/ +PROCESS_THREAD(start_app, ev, data) +{ + PROCESS_BEGIN(); + + static int is_coordinator = 0; + static struct etimer et; + + /* Make sensor active for measuring */ + SENSORS_ACTIVATE(light_sensor); + SENSORS_ACTIVATE(ht_sensor); + + /* Start net stack */ + if(is_coordinator) { + uip_ipaddr_t prefix; + uip_ip6addr(&prefix, 0xaaaa, 0, 0, 0, 0, 0, 0, 0); + rpl_tools_init(&prefix); + } else { + rpl_tools_init(NULL); + } printf("Starting RPL node\n"); + + rest_init_engine(); + rest_activate_resource(&resource_light_sensor_value, "DR1175/LightSensor/Value"); + rest_activate_resource(&resource_light_sensor_unit, "DR1175/LightSensor/Unit"); + rest_activate_resource(&resource_temperature_unit, "DR1175/Temperature/Unit"); + rest_activate_resource(&resource_temperature_value, "DR1175/Temperature/Value"); + rest_activate_resource(&resource_humidity_unit, "DR1175/Humidity/Unit"); + rest_activate_resource(&resource_humidity_value, "DR1175/Humidity/Value"); + rest_activate_resource(&resource_white_led, "DR1175/WhiteLED"); + rest_activate_resource(&resource_rgb_led, "DR1175/ColorLED/RGBValue"); + rest_activate_resource(&resource_led_d3_1174, "DR1175/LED/D3On1174"); + rest_activate_resource(&resource_led_d6_1174, "DR1175/LED/D6On1174"); + rest_activate_resource(&resource_sensors_dr1175, "DR1175/AllSensors"); + + /* Level of LEDS=0, so no light after start-up */ + leds_on(LEDS_WHITE | LEDS_RED | LEDS_GREEN | LEDS_BLUE); + + /* contiki-jn516x-main switches all leds off after process start-up. + Switch on required leds after rescheduling, otherwise level change needs to be + accompanied with leds_on() at least once in resource handler. */ + etimer_set(&et, CLOCK_SECOND / 10); + PROCESS_WAIT_EVENT_UNTIL(etimer_expired(&et)); + /* Level of LEDS=0, so no light after start-up. However, they are enabled + A level change will directly be visible. */ + leds_on(LEDS_WHITE | LEDS_RED | LEDS_GREEN | LEDS_BLUE); + + /* If sensor process generates an event, call event_handler of resource. + This will make this resource observable by the client */ + while(1) { + PROCESS_WAIT_EVENT_UNTIL((ev == sensors_event) && + ((data == &light_sensor) || (data == &ht_sensor))); + event_sensors_dr1175_handler(); + } + + PROCESS_END(); +} diff --git a/examples/jn516x/rpl/coap-dr1175-node/project-conf.h b/examples/jn516x/rpl/coap-dr1175-node/project-conf.h new file mode 100644 index 000000000..4c2ecd648 --- /dev/null +++ b/examples/jn516x/rpl/coap-dr1175-node/project-conf.h @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2015, SICS Swedish ICT. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + */ +/** + * \author Simon Duquennoy + */ + +#ifndef __PROJECT_CONF_H__ +#define __PROJECT_CONF_H__ + +#include "../common-conf.h" + +#endif /* __PROJECT_CONF_H__ */ diff --git a/examples/jn516x/rpl/coap-dr1199-node/Makefile b/examples/jn516x/rpl/coap-dr1199-node/Makefile new file mode 100644 index 000000000..5a649e429 --- /dev/null +++ b/examples/jn516x/rpl/coap-dr1199-node/Makefile @@ -0,0 +1,21 @@ +CONTIKI_PROJECT = dr1199-node +all: $(CONTIKI_PROJECT) + +TARGET ?= jn516x +JN516x_WITH_DR1199 = 1 + +CONTIKI=../../../.. + +CONTIKI_WITH_IPV6 = 1 + +PROJECTDIRS += .. ../tools +PROJECT_SOURCEFILES += rpl-tools.c +CFLAGS += -DPROJECT_CONF_H=\"project-conf.h\" + +CFLAGS += -DWITH_COAP +CFLAGS += -DUIP_CONF_TCP=0 +APPS = json +APPS += er-coap +APPS += rest-engine + +include $(CONTIKI)/Makefile.include diff --git a/examples/jn516x/rpl/coap-dr1199-node/README.md b/examples/jn516x/rpl/coap-dr1199-node/README.md new file mode 100644 index 000000000..e9a6ee66b --- /dev/null +++ b/examples/jn516x/rpl/coap-dr1199-node/README.md @@ -0,0 +1,33 @@ +dr1199-node is an example of a RICH node containing a JN516x microcontroller on a DR1174 baseboard. +A DR1199 shield is mounted on the baseboard. +The boards are part of the NXP JN516x Evaluation Kit (see http://www.nxp.com/documents/leaflet/75017368.pdf) +The dr1199-node connects to the network in the same way as described in `examples\jn5168/rpl/README.md` + +The resources on the DR1199 are available as CoAP resources. They can be accessed via a CoAP client at the IPv6 interface +of the border router (e.g. via Copper plug-in on Firefox). +The following list gives an overview of the resources: + +URI Description +--- ----------- +DR1199\AllSensors This is an observable resource that shows the status of all switches and the potentiometer on the board + The resource is automatically updated when a change of the status/value of the switches and potentiometer + takes place. +DR1199\LED\All When writing a '1', LEDs D1..D3 will switch ON + When writing a '0', LEDs D1..D3 will switch OFF +DR1199\LED\D1 When writing a '1', LED D1 will switch ON + When writing a '0', LED D1 will switch OFF +DR1199\LED\D2 When writing a '1', LED D2 will switch ON + When writing a '0', LED D2 will switch OFF +DR1199\LED\D3 When writing a '1', LED D3 will switch ON + When writing a '0', LED D3 will switch OFF +DR1199\D3On1174 This resource control LED D3 on the base board +DR1199\D6On1174 This resource control LED D6 on the base board +DR1199\Potentiometer The resource will show the value of the potentiometer +DR1199\Switch\DIO8 This resource shows the status of the DIO8 switch (on DR1174) +DR1199\Switch\SW1 This resource shows the status of the SW1 switch +DR1199\Switch\SW2 This resource shows the status of the SW2 switch +DR1199\Switch\SW3 This resource shows the status of the SW3 switch +DR1199\Switch\SW4 This resource shows the status of the SW4 switch + + + diff --git a/examples/jn516x/rpl/coap-dr1199-node/dr1199-node.c b/examples/jn516x/rpl/coap-dr1199-node/dr1199-node.c new file mode 100644 index 000000000..373922e58 --- /dev/null +++ b/examples/jn516x/rpl/coap-dr1199-node/dr1199-node.c @@ -0,0 +1,384 @@ +/* + * Copyright (c) 2015 NXP B.V. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of NXP B.V. nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY NXP B.V. AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL NXP B.V. OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the Contiki operating system. + * + * Author: Theo van Daele + * + */ +#include "contiki.h" +#include "net/ip/uip.h" +#include "tools/rpl-tools.h" +#include "rest-engine.h" +#include "dev/leds.h" +#include "button-sensor.h" +#include "pot-sensor.h" +#include +#include + +static char content[REST_MAX_CHUNK_SIZE]; +static int content_len = 0; + +static void event_sensors_dr1199_handler(); +static void get_sensors_dr1199_handler(void *request, void *response, uint8_t *buffer, uint16_t preferred_size, int32_t *offset); +static void get_switch_sw1_handler(void *request, void *response, uint8_t *buffer, uint16_t preferred_size, int32_t *offset); +static void get_switch_sw2_handler(void *request, void *response, uint8_t *buffer, uint16_t preferred_size, int32_t *offset); +static void get_switch_sw3_handler(void *request, void *response, uint8_t *buffer, uint16_t preferred_size, int32_t *offset); +static void get_switch_sw4_handler(void *request, void *response, uint8_t *buffer, uint16_t preferred_size, int32_t *offset); +static void get_switch_dio8_handler(void *request, void *response, uint8_t *buffer, uint16_t preferred_size, int32_t *offset); +static void get_pot_handler(void *request, void *response, uint8_t *buffer, uint16_t preferred_size, int32_t *offset); +static void put_post_led_d1_handler(void *request, void *response, uint8_t *buffer, uint16_t preferred_size, int32_t *offset); +static void put_post_led_d2_handler(void *request, void *response, uint8_t *buffer, uint16_t preferred_size, int32_t *offset); +static void put_post_led_d3_handler(void *request, void *response, uint8_t *buffer, uint16_t preferred_size, int32_t *offset); +static void put_post_led_d3_1174_handler(void *request, void *response, uint8_t *buffer, uint16_t preferred_size, int32_t *offset); +static void put_post_led_d6_1174_handler(void *request, void *response, uint8_t *buffer, uint16_t preferred_size, int32_t *offset); +static void put_post_led_all_handler(void *request, void *response, uint8_t *buffer, uint16_t preferred_size, int32_t *offset); + +#define CONTENT_PRINTF(...) { if(content_len < sizeof(content)) { content_len += snprintf(content + content_len, sizeof(content) - content_len, __VA_ARGS__); } } + +#define PARSE_SWITCH(POSITION) if(button_sensor.value(0) & (1 << POSITION)) { \ + CONTENT_PRINTF("PRESSED"); \ + } else { \ + CONTENT_PRINTF("RELEASED"); \ + } + +#define SET_LED(LED) if(atoi((const char *)request_content) != 0) { \ + leds_on(LED); \ + } else { \ + leds_off(LED); \ + } + +/*---------------------------------------------------------------------------*/ +PROCESS(start_app, "START_APP"); +AUTOSTART_PROCESSES(&sensors_process, &start_app); + +/*---------------------------------------------------------------------------*/ + +/*********** CoAP sensor/ resource *************************************************/ + +/*******************************************************************/ +/* Observable resource and event handler to obtain all sensor data */ +/*******************************************************************/ +EVENT_RESOURCE(resource_sensors_dr1199, /* name */ + "obs;title=\"All_DR1199_sensors\"", /* attributes */ + get_sensors_dr1199_handler, /* GET handler */ + NULL, /* POST handler */ + NULL, /* PUT handler */ + NULL, /* DELETE handler */ + event_sensors_dr1199_handler); /* event handler */ +static void +get_sensors_dr1199_handler(void *request, void *response, uint8_t *buffer, uint16_t preferred_size, int32_t *offset) +{ + unsigned int accept = -1; + REST.get_header_accept(request, &accept); + if(accept == -1 || accept == REST.type.APPLICATION_JSON) { + content_len = 0; + CONTENT_PRINTF("{\"DR1199\":["); + CONTENT_PRINTF("{\"Switch\":\"0x%X\"},", button_sensor.value(0)); + CONTENT_PRINTF("{\"Pot\":\"%d\"}", pot_sensor.value(0)); + CONTENT_PRINTF("]}"); + REST.set_header_content_type(response, REST.type.APPLICATION_JSON); + REST.set_response_payload(response, (uint8_t *)content, content_len); + } +} +static void +event_sensors_dr1199_handler() +{ + /* Registered observers are notified and will trigger the GET handler to create the response. */ + REST.notify_subscribers(&resource_sensors_dr1199); +} +/***********************************************/ +/* Resource and handler to obtain switch value */ +/***********************************************/ +RESOURCE(resource_switch_sw1, + "title=\"SW1\"", + get_switch_sw1_handler, + NULL, + NULL, + NULL); +static void +get_switch_sw1_handler(void *request, void *response, uint8_t *buffer, uint16_t preferred_size, int32_t *offset) +{ + content_len = 0; + unsigned int accept = -1; + REST.get_header_accept(request, &accept); + if(accept == -1 || accept == REST.type.TEXT_PLAIN) { + PARSE_SWITCH(1) + REST.set_header_content_type(response, REST.type.TEXT_PLAIN); + REST.set_response_payload(response, (uint8_t *)content, content_len); + } +} +RESOURCE(resource_switch_sw2, + "title=\"SW2\"", + get_switch_sw2_handler, + NULL, + NULL, + NULL); +static void +get_switch_sw2_handler(void *request, void *response, uint8_t *buffer, uint16_t preferred_size, int32_t *offset) +{ + content_len = 0; + unsigned int accept = -1; + REST.get_header_accept(request, &accept); + if(accept == -1 || accept == REST.type.TEXT_PLAIN) { + PARSE_SWITCH(2) + REST.set_header_content_type(response, REST.type.TEXT_PLAIN); + REST.set_response_payload(response, (uint8_t *)content, content_len); + } +} +RESOURCE(resource_switch_sw3, + "title=\"SW3\"", + get_switch_sw3_handler, + NULL, + NULL, + NULL); +static void +get_switch_sw3_handler(void *request, void *response, uint8_t *buffer, uint16_t preferred_size, int32_t *offset) +{ + content_len = 0; + unsigned int accept = -1; + REST.get_header_accept(request, &accept); + if(accept == -1 || accept == REST.type.TEXT_PLAIN) { + PARSE_SWITCH(3) + REST.set_header_content_type(response, REST.type.TEXT_PLAIN); + REST.set_response_payload(response, (uint8_t *)content, content_len); + } +} +RESOURCE(resource_switch_sw4, + "title=\"SW4\"", + get_switch_sw4_handler, + NULL, + NULL, + NULL); +static void +get_switch_sw4_handler(void *request, void *response, uint8_t *buffer, uint16_t preferred_size, int32_t *offset) +{ + content_len = 0; + unsigned int accept = -1; + REST.get_header_accept(request, &accept); + if(accept == -1 || accept == REST.type.TEXT_PLAIN) { + PARSE_SWITCH(4) + REST.set_header_content_type(response, REST.type.TEXT_PLAIN); + REST.set_response_payload(response, (uint8_t *)content, content_len); + } +} +RESOURCE(resource_switch_dio8, + "title=\"DIO8\"", + get_switch_dio8_handler, + NULL, + NULL, + NULL); +static void +get_switch_dio8_handler(void *request, void *response, uint8_t *buffer, uint16_t preferred_size, int32_t *offset) +{ + content_len = 0; + unsigned int accept = -1; + REST.get_header_accept(request, &accept); + if(accept == -1 || accept == REST.type.TEXT_PLAIN) { + PARSE_SWITCH(0) + REST.set_header_content_type(response, REST.type.TEXT_PLAIN); + REST.set_response_payload(response, (uint8_t *)content, content_len); + } +} +/*******************************************************/ +/* Resource and handler to obtain potentiometer value */ +/*******************************************************/ +RESOURCE(resource_pot, + "title=\"Potentiometer\"", + get_pot_handler, + NULL, + NULL, + NULL); +static void +get_pot_handler(void *request, void *response, uint8_t *buffer, uint16_t preferred_size, int32_t *offset) +{ + content_len = 0; + unsigned int accept = -1; + REST.get_header_accept(request, &accept); + if(accept == -1 || accept == REST.type.TEXT_PLAIN) { + CONTENT_PRINTF("%d", pot_sensor.value(0)); + REST.set_header_content_type(response, REST.type.TEXT_PLAIN); + REST.set_response_payload(response, (uint8_t *)content, content_len); + } +} +/************************************/ +/* Resource and handler to set leds */ +/************************************/ +RESOURCE(resource_led_d1, + "title=\"LED D1 <[0,1]>\"", + NULL, + put_post_led_d1_handler, + put_post_led_d1_handler, + NULL); +static void +put_post_led_d1_handler(void *request, void *response, uint8_t *buffer, uint16_t preferred_size, int32_t *offset) +{ + const uint8_t *request_content; + unsigned int accept = -1; + REST.get_header_accept(request, &accept); + if(accept == -1 || accept == REST.type.TEXT_PLAIN) { + REST.get_request_payload(request, &request_content); + SET_LED(LEDS_GREEN) + } +} +RESOURCE(resource_led_d2, + "title=\"LED D2 <[0,1]>\"", + NULL, + put_post_led_d2_handler, + put_post_led_d2_handler, + NULL); +static void +put_post_led_d2_handler(void *request, void *response, uint8_t *buffer, uint16_t preferred_size, int32_t *offset) +{ + const uint8_t *request_content; + unsigned int accept = -1; + REST.get_header_accept(request, &accept); + if(accept == -1 || accept == REST.type.TEXT_PLAIN) { + REST.get_request_payload(request, &request_content); + SET_LED(LEDS_BLUE) + } +} +RESOURCE(resource_led_d3, + "title=\"LED D3 <[0,1]>\"", + NULL, + put_post_led_d3_handler, + put_post_led_d3_handler, + NULL); +static void +put_post_led_d3_handler(void *request, void *response, uint8_t *buffer, uint16_t preferred_size, int32_t *offset) +{ + const uint8_t *request_content; + unsigned int accept = -1; + REST.get_header_accept(request, &accept); + if(accept == -1 || accept == REST.type.TEXT_PLAIN) { + REST.get_request_payload(request, &request_content); + SET_LED(LEDS_RED) + } +} +RESOURCE(resource_led_d3_1174, + "title=\"LED D3 1174<[0,1]>\"", + NULL, + put_post_led_d3_1174_handler, + put_post_led_d3_1174_handler, + NULL); +static void +put_post_led_d3_1174_handler(void *request, void *response, uint8_t *buffer, uint16_t preferred_size, int32_t *offset) +{ + const uint8_t *request_content; + unsigned int accept = -1; + REST.get_header_accept(request, &accept); + if(accept == -1 || accept == REST.type.TEXT_PLAIN) { + REST.get_request_payload(request, &request_content); + SET_LED(LEDS_GP0); + } +} +RESOURCE(resource_led_d6_1174, + "title=\"LED D6 1174<[0,1]>\"", + NULL, + put_post_led_d6_1174_handler, + put_post_led_d6_1174_handler, + NULL); +static void +put_post_led_d6_1174_handler(void *request, void *response, uint8_t *buffer, uint16_t preferred_size, int32_t *offset) +{ + const uint8_t *request_content; + unsigned int accept = -1; + REST.get_header_accept(request, &accept); + if(accept == -1 || accept == REST.type.TEXT_PLAIN) { + REST.get_request_payload(request, &request_content); + SET_LED(LEDS_GP1); + } +} +RESOURCE(resource_led_all, + "title=\"LED All <[0,1]>\"", + NULL, + put_post_led_all_handler, + put_post_led_all_handler, + NULL); +static void +put_post_led_all_handler(void *request, void *response, uint8_t *buffer, uint16_t preferred_size, int32_t *offset) +{ + const uint8_t *request_content; + unsigned int accept = -1; + REST.get_header_accept(request, &accept); + if(accept == -1 || accept == REST.type.TEXT_PLAIN) { + REST.get_request_payload(request, &request_content); + if(atoi((const char *)request_content) != 0) { + leds_on(LEDS_ALL); + } else { + leds_off(LEDS_ALL); + } + } +} +/*---------------------------------------------------------------------------*/ +PROCESS_THREAD(start_app, ev, data) +{ + PROCESS_BEGIN(); + + static int is_coordinator = 0; + + /* is_coordinator = node_id == 1; */ + + /* Make sensor active for measuring */ + SENSORS_ACTIVATE(button_sensor); + SENSORS_ACTIVATE(pot_sensor); + + /* Start net stack */ + if(is_coordinator) { + uip_ipaddr_t prefix; + uip_ip6addr(&prefix, 0xaaaa, 0, 0, 0, 0, 0, 0, 0); + rpl_tools_init(&prefix); + } else { + rpl_tools_init(NULL); + } printf("Starting RPL node\n"); + + rest_init_engine(); + rest_activate_resource(&resource_switch_sw1, "DR1199/Switch/SW1"); + rest_activate_resource(&resource_switch_sw2, "DR1199/Switch/SW2"); + rest_activate_resource(&resource_switch_sw3, "DR1199/Switch/SW3"); + rest_activate_resource(&resource_switch_sw4, "DR1199/Switch/SW4"); + rest_activate_resource(&resource_switch_dio8, "DR1199/Switch/DIO8"); + rest_activate_resource(&resource_pot, "DR1199/Potentiometer"); + rest_activate_resource(&resource_led_d1, "DR1199/LED/D1"); + rest_activate_resource(&resource_led_d2, "DR1199/LED/D2"); + rest_activate_resource(&resource_led_d3, "DR1199/LED/D3"); + rest_activate_resource(&resource_led_d3_1174, "DR1199/LED/D3On1174"); + rest_activate_resource(&resource_led_d6_1174, "DR1199/LED/D6On1174"); + rest_activate_resource(&resource_led_all, "DR1199/LED/All"); + rest_activate_resource(&resource_sensors_dr1199, "DR1199/AllSensors"); + /* If sensor process generates an event, call event_handler of resource. + This will make this resource observable by the client */ + while(1) { + PROCESS_WAIT_EVENT_UNTIL((ev == sensors_event) && + ((data == &button_sensor) || (data == &pot_sensor))); + event_sensors_dr1199_handler(); + } + + PROCESS_END(); +} + diff --git a/examples/jn516x/rpl/coap-dr1199-node/project-conf.h b/examples/jn516x/rpl/coap-dr1199-node/project-conf.h new file mode 100644 index 000000000..4c2ecd648 --- /dev/null +++ b/examples/jn516x/rpl/coap-dr1199-node/project-conf.h @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2015, SICS Swedish ICT. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + */ +/** + * \author Simon Duquennoy + */ + +#ifndef __PROJECT_CONF_H__ +#define __PROJECT_CONF_H__ + +#include "../common-conf.h" + +#endif /* __PROJECT_CONF_H__ */ diff --git a/examples/jn516x/rpl/common-conf.h b/examples/jn516x/rpl/common-conf.h new file mode 100644 index 000000000..5c936ff7f --- /dev/null +++ b/examples/jn516x/rpl/common-conf.h @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2015, SICS Swedish ICT. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + */ +/** + * \author Simon Duquennoy + */ + +#ifndef __COMMON_CONF_H__ +#define __COMMON_CONF_H__ + +#define MAC_CONFIG_NULLRDC 0 +#define MAC_CONFIG_CONTIKIMAC 1 +/* Select a MAC configuration */ +#define MAC_CONFIG MAC_CONFIG_NULLRDC + +#undef NETSTACK_CONF_MAC +#undef NETSTACK_CONF_RDC +#undef NETSTACK_CONF_FRAMER + +#if MAC_CONFIG == MAC_CONFIG_NULLRDC + +#define NETSTACK_CONF_MAC csma_driver +#define NETSTACK_CONF_RDC nullrdc_driver +#define NETSTACK_CONF_FRAMER framer_802154 + +#elif MAC_CONFIG == MAC_CONFIG_CONTIKIMAC + +#define NETSTACK_CONF_MAC csma_driver +#define NETSTACK_CONF_RDC contikimac_driver +#define NETSTACK_CONF_FRAMER contikimac_framer +#undef MICROMAC_CONF_AUTOACK +#define MICROMAC_CONF_AUTOACK 1 + +#else + +#error Unsupported MAC configuration + +#endif /* MAC_CONFIG */ + +/* IEEE802.15.4 PANID and channel */ + +#undef IEEE802154_CONF_PANID +#define IEEE802154_CONF_PANID 0xabcd + +#undef RF_CHANNEL +#define RF_CHANNEL 26 + +/* UART Configuration */ + +#undef UART_HW_FLOW_CTRL +#define UART_HW_FLOW_CTRL 0 + +#undef UART_XONXOFF_FLOW_CTRL +#define UART_XONXOFF_FLOW_CTRL 1 + +#undef UART_BAUD_RATE +#define UART_BAUD_RATE UART_RATE_1000000 + +#endif /* __COMMON_CONF_H__ */ diff --git a/examples/jn516x/rpl/node/Makefile b/examples/jn516x/rpl/node/Makefile new file mode 100644 index 000000000..8096152ee --- /dev/null +++ b/examples/jn516x/rpl/node/Makefile @@ -0,0 +1,14 @@ +CONTIKI_PROJECT = node +all: $(CONTIKI_PROJECT) + +TARGET ?= jn516x + +CONTIKI=../../../.. + +CONTIKI_WITH_IPV6 = 1 + +PROJECTDIRS += .. ../tools +PROJECT_SOURCEFILES += rpl-tools.c +CFLAGS += -DPROJECT_CONF_H=\"project-conf.h\" + +include $(CONTIKI)/Makefile.include diff --git a/examples/jn516x/rpl/node/README.md b/examples/jn516x/rpl/node/README.md new file mode 100644 index 000000000..e9bded1d6 --- /dev/null +++ b/examples/jn516x/rpl/node/README.md @@ -0,0 +1,18 @@ +A RPL node. Will act as basic node by default, but can be configured at startup +using the user button and following instructions from the log output. Every press +of a button toggles the mode as 6ln and 6dr. After 10s with no button press, +the node starts in the last setting. The modes are: +* 6ln (default): 6lowpan node, will join a RPL network and act as router. +* 6dr: 6lowpan DAG Root, will start its own RPL network. Note this is not a +border router, i.e. it does not have a serial interface with connection to +the Internet. For a border router, see ../border-router. + +To indicate the hardware target for the node, add one of the following +options in the command line: +If rpl-border-router runs on dongle: +JN516x_WITH_DONGLE=1 +If rpl-border-router runs on DR1174: +JN516x_WITH_DR1174=1 +If building for a new platform, first execute : make clean + +For more information, see ../README.md. diff --git a/examples/jn516x/rpl/node/node.c b/examples/jn516x/rpl/node/node.c new file mode 100644 index 000000000..e4fccec7d --- /dev/null +++ b/examples/jn516x/rpl/node/node.c @@ -0,0 +1,108 @@ +/* + * Copyright (c) 2015, SICS Swedish ICT. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + */ +/** + * \file + * A RPL node able to act as either DAG Root (6dr) or simple node (6ln). + * Press use button at startup to configure. + * + * \author Simon Duquennoy + */ + +#include "contiki.h" +#include "net/rpl/rpl.h" +#include "tools/rpl-tools.h" + +#define DEBUG DEBUG_PRINT +#include "net/ip/uip-debug.h" + +#define CONFIG_VIA_BUTTON PLATFORM_HAS_BUTTON +#if CONFIG_VIA_BUTTON +#include "button-sensor.h" +#endif /* CONFIG_VIA_BUTTON */ + +/*---------------------------------------------------------------------------*/ +PROCESS(node_process, "RPL Node"); +#if CONFIG_VIA_BUTTON +AUTOSTART_PROCESSES(&node_process, &sensors_process); +#else /* CONFIG_VIA_BUTTON */ +AUTOSTART_PROCESSES(&node_process); +#endif /* CONFIG_VIA_BUTTON */ + +/*---------------------------------------------------------------------------*/ +PROCESS_THREAD(node_process, ev, data) +{ + PROCESS_BEGIN(); + + /* 3 possible roles: + * - role_6ln: simple node, will join any network, secured or not + * - role_6dg: DAG root, will advertise (unsecured) beacons + * */ + static int is_coordinator = 0; + static enum { role_6ln, role_6dr } node_role; + node_role = role_6ln; + +#if CONFIG_VIA_BUTTON + { +#define CONFIG_WAIT_TIME 10 + static struct etimer et; + + SENSORS_ACTIVATE(button_sensor); + etimer_set(&et, CLOCK_SECOND * CONFIG_WAIT_TIME); + + while(!etimer_expired(&et)) { + printf("Init: current role: %s. Will start in %u seconds.\n", + node_role == role_6ln ? "6ln" : "6dr", + CONFIG_WAIT_TIME); + PROCESS_WAIT_EVENT_UNTIL(((ev == sensors_event) && + (data == &button_sensor) && button_sensor.value(0) > 0) + || etimer_expired(&et)); + if(ev == sensors_event && data == &button_sensor && button_sensor.value(0) > 0) { + node_role = (node_role + 1) % 2; + etimer_restart(&et); + } + } + } + +#endif /* CONFIG_VIA_BUTTON */ + + printf("Init: node starting with role %s\n", + node_role == role_6ln ? "6ln" : "6dr"); + + is_coordinator = node_role > role_6ln; + + if(is_coordinator) { + uip_ipaddr_t prefix; + uip_ip6addr(&prefix, 0xaaaa, 0, 0, 0, 0, 0, 0, 0); + rpl_tools_init(&prefix); + } else { + rpl_tools_init(NULL); + } PROCESS_END(); +} +/*---------------------------------------------------------------------------*/ diff --git a/examples/jn516x/rpl/node/project-conf.h b/examples/jn516x/rpl/node/project-conf.h new file mode 100644 index 000000000..9db6f0229 --- /dev/null +++ b/examples/jn516x/rpl/node/project-conf.h @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2015, SICS Swedish ICT. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + */ + +/** + * \author Simon Duquennoy + */ + +#ifndef __PROJECT_CONF_H__ +#define __PROJECT_CONF_H__ + +#include "../common-conf.h" + +#endif /* __PROJECT_CONF_H__ */ diff --git a/examples/jn516x/rpl/tools/rpl-tools.c b/examples/jn516x/rpl/tools/rpl-tools.c new file mode 100644 index 000000000..23a041306 --- /dev/null +++ b/examples/jn516x/rpl/tools/rpl-tools.c @@ -0,0 +1,83 @@ +/* + * Copyright (c) 2015, SICS Swedish ICT. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + */ +/** + * \file + * + * \author Simon Duquennoy + */ + +#include "contiki-conf.h" +#include "contiki-net.h" +#include "net/ip/uip.h" +#include "net/rpl/rpl.h" +#include +#include + +#define DEBUG DEBUG_PRINT +#include "net/ip/uip-debug.h" + +/*---------------------------------------------------------------------------*/ +static void +print_local_addresses(void) +{ + int i; + uint8_t state; + + PRINTA("Server IPv6 addresses:\n"); + for(i = 0; i < UIP_DS6_ADDR_NB; i++) { + state = uip_ds6_if.addr_list[i].state; + if(uip_ds6_if.addr_list[i].isused && + (state == ADDR_TENTATIVE || state == ADDR_PREFERRED)) { + PRINTA(" "); + uip_debug_ipaddr_print(&uip_ds6_if.addr_list[i].ipaddr); + PRINTA("\n"); + } + } +} +/*---------------------------------------------------------------------------*/ +void +rpl_tools_init(uip_ipaddr_t *br_prefix) +{ + uip_ipaddr_t global_ipaddr; + + if(br_prefix) { /* We are root */ + NETSTACK_RDC.off(1); + memcpy(&global_ipaddr, br_prefix, 16); + uip_ds6_set_addr_iid(&global_ipaddr, &uip_lladdr); + uip_ds6_addr_add(&global_ipaddr, 0, ADDR_AUTOCONF); + rpl_set_root(RPL_DEFAULT_INSTANCE, &global_ipaddr); + rpl_set_prefix(rpl_get_any_dag(), br_prefix, 64); + rpl_repair_root(RPL_DEFAULT_INSTANCE); + } + + NETSTACK_MAC.on(); + + print_local_addresses(); +} diff --git a/examples/jn516x/rpl/tools/rpl-tools.h b/examples/jn516x/rpl/tools/rpl-tools.h new file mode 100644 index 000000000..e91bc81c5 --- /dev/null +++ b/examples/jn516x/rpl/tools/rpl-tools.h @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2015, SICS Swedish ICT. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + */ +/** + + * \author Simon Duquennoy + */ + +void rpl_tools_init(uip_ipaddr_t *br_prefix); diff --git a/examples/llsec/ccm-star-tests/encryption/tests.c b/examples/llsec/ccm-star-tests/encryption/tests.c index b9cc58782..b5c296799 100644 --- a/examples/llsec/ccm-star-tests/encryption/tests.c +++ b/examples/llsec/ccm-star-tests/encryption/tests.c @@ -56,8 +56,8 @@ test_sec_lvl_6() 0xC4 , 0xC5 , 0xC6 , 0xC7 , 0xC8 , 0xC9 , 0xCA , 0xCB , 0xCC , 0xCD , 0xCE , 0xCF }; - uint8_t extended_source_address[8] = { 0xAC , 0xDE , 0x48 , 0x00 , - 0x00 , 0x00 , 0x00 , 0x01 }; + linkaddr_t source_address = {{ 0xAC , 0xDE , 0x48 , 0x00 , + 0x00 , 0x00 , 0x00 , 0x01 }}; uint8_t data[30] = { 0x2B , 0xDC , 0x84 , 0x21 , 0x43 , /* Destination Address */ 0x02 , 0x00 , 0x00 , 0x00 , 0x00 , 0x48 , 0xDE , 0xAC , @@ -72,11 +72,12 @@ test_sec_lvl_6() 0x01 , 0xCE }; uint8_t oracle[LLSEC802154_MIC_LENGTH] = { 0x4F , 0xDE , 0x52 , 0x90 , 0x61 , 0xF9 , 0xC6 , 0xF1 }; + uint8_t nonce[13]; frame802154_frame_counter_t counter; - uint8_t mic[LLSEC802154_MIC_LENGTH]; printf("Testing verification ... "); + linkaddr_copy(&linkaddr_node_addr, &source_address); packetbuf_clear(); packetbuf_set_datalen(30); memcpy(packetbuf_hdrptr(), data, 30); @@ -87,9 +88,14 @@ test_sec_lvl_6() packetbuf_hdrreduce(29); CCM_STAR.set_key(key); - ccm_star_mic_packetbuf(extended_source_address, mic, LLSEC802154_MIC_LENGTH); + ccm_star_packetbuf_set_nonce(nonce, 1); + CCM_STAR.aead(nonce, + packetbuf_dataptr(), packetbuf_datalen(), + packetbuf_hdrptr(), packetbuf_hdrlen(), + ((uint8_t *) packetbuf_hdrptr()) + 30, LLSEC802154_MIC_LENGTH, + 1); - if(memcmp(mic, oracle, LLSEC802154_MIC_LENGTH) == 0) { + if(memcmp(((uint8_t *) packetbuf_hdrptr()) + 30, oracle, LLSEC802154_MIC_LENGTH) == 0) { printf("Success\n"); } else { printf("Failure\n"); @@ -97,7 +103,6 @@ test_sec_lvl_6() printf("Testing encryption ... "); - ccm_star_ctr_packetbuf(extended_source_address); if(((uint8_t *) packetbuf_hdrptr())[29] == 0xD8) { printf("Success\n"); } else { @@ -105,7 +110,13 @@ test_sec_lvl_6() } printf("Testing decryption ... "); - ccm_star_ctr_packetbuf(extended_source_address); + packetbuf_set_addr(PACKETBUF_ADDR_SENDER, &source_address); + ccm_star_packetbuf_set_nonce(nonce, 0); + CCM_STAR.aead(nonce, + packetbuf_dataptr(), packetbuf_datalen(), + packetbuf_hdrptr(), packetbuf_hdrlen(), + ((uint8_t *) packetbuf_hdrptr()) + 30, LLSEC802154_MIC_LENGTH, + 0); if(((uint8_t *) packetbuf_hdrptr())[29] == 0xCE) { printf("Success\n"); } else { diff --git a/examples/llsec/ccm-star-tests/verification/tests.c b/examples/llsec/ccm-star-tests/verification/tests.c index d768ddeb6..4de463fee 100644 --- a/examples/llsec/ccm-star-tests/verification/tests.c +++ b/examples/llsec/ccm-star-tests/verification/tests.c @@ -86,8 +86,8 @@ test_sec_lvl_2() 0xC4 , 0xC5 , 0xC6 , 0xC7 , 0xC8 , 0xC9 , 0xCA , 0xCB , 0xCC , 0xCD , 0xCE , 0xCF }; - uint8_t extended_source_address[8] = { 0xAC , 0xDE , 0x48 , 0x00 , - 0x00 , 0x00 , 0x00 , 0x01 }; + linkaddr_t source_address = {{ 0xAC , 0xDE , 0x48 , 0x00 , + 0x00 , 0x00 , 0x00 , 0x01 }}; uint8_t data[26] = { 0x08 , 0xD0 , 0x84 , 0x21 , 0x43 , /* Source Address */ 0x01 , 0x00 , 0x00 , 0x00 , 0x00 , 0x48 , 0xDE , 0xAC , @@ -101,9 +101,11 @@ test_sec_lvl_2() 0x84 , 0x1A , 0xB5 , 0x53 }; frame802154_frame_counter_t counter; uint8_t mic[LLSEC802154_MIC_LENGTH]; + uint8_t nonce[13]; printf("Testing verification ... "); + linkaddr_copy(&linkaddr_node_addr, &source_address); packetbuf_clear(); packetbuf_set_datalen(26); memcpy(packetbuf_hdrptr(), data, 26); @@ -114,9 +116,14 @@ test_sec_lvl_2() packetbuf_hdrreduce(18); CCM_STAR.set_key(key); - ccm_star_mic_packetbuf(extended_source_address,mic, LLSEC802154_MIC_LENGTH); + ccm_star_packetbuf_set_nonce(nonce, 1); + CCM_STAR.aead(nonce, + NULL, 0, + packetbuf_hdrptr(), packetbuf_totlen(), + ((uint8_t *) packetbuf_dataptr()) + packetbuf_datalen(), LLSEC802154_MIC_LENGTH, + 1); - if(memcmp(mic, oracle, LLSEC802154_MIC_LENGTH) == 0) { + if(memcmp(((uint8_t *) packetbuf_dataptr()) + packetbuf_datalen(), oracle, LLSEC802154_MIC_LENGTH) == 0) { printf("Success\n"); } else { printf("Failure\n"); diff --git a/examples/netperf/netperf-sky.csc b/examples/netperf/netperf-sky.csc index 6f2083e98..c3f48c6fe 100644 --- a/examples/netperf/netperf-sky.csc +++ b/examples/netperf/netperf-sky.csc @@ -1,143 +1,143 @@ - - - [CONTIKI_DIR]/tools/cooja/apps/mrm - [CONTIKI_DIR]/tools/cooja/apps/mspsim - [CONTIKI_DIR]/tools/cooja/apps/avrora - [CONTIKI_DIR]/tools/cooja/apps/native_gateway - - My simulation - 0 - generated - 1000000 - - org.contikios.cooja.radiomediums.UDGM - 50.0 - 100.0 - 1.0 - 1.0 - - - 40000 - - - org.contikios.cooja.mspmote.SkyMoteType - sky1 - netperf shell - [CONTIKI_DIR]/examples/netperf/netperf-shell.c - make netperf-shell.sky TARGET=sky - [CONTIKI_DIR]/examples/netperf/netperf-shell.sky - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.interfaces.IPAddress - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.mspmote.interfaces.MspClock - org.contikios.cooja.mspmote.interfaces.MspMoteID - org.contikios.cooja.mspmote.interfaces.SkyButton - org.contikios.cooja.mspmote.interfaces.SkyFlash - org.contikios.cooja.mspmote.interfaces.SkyCoffeeFilesystem - org.contikios.cooja.mspmote.interfaces.Msp802154Radio - org.contikios.cooja.mspmote.interfaces.SkySerial - org.contikios.cooja.mspmote.interfaces.SkyLED - - - org.contikios.cooja.mspmote.SkyMote - sky1 - - - org.contikios.cooja.interfaces.Position - 49.48292285385544 - 97.67000744426045 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 1 - - - - org.contikios.cooja.mspmote.SkyMote - sky1 - - - org.contikios.cooja.interfaces.Position - 80.21380569499377 - 98.51039574575084 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 2 - - - - - org.contikios.cooja.plugins.SimControl - 290 - 2 - 172 - 0 - 0 - false - - - org.contikios.cooja.plugins.LogListener - - - - 1024 - 0 - 377 - 0 - 171 - false - - - org.contikios.cooja.plugins.TimeLine - - 0 - 1 - - - - 118 - 9 - - 1024 - 1 - 150 - 0 - 548 - false - - - org.contikios.cooja.plugins.ScriptRunner - - - true - - 600 - -1 - 476 - 399 - 154 - true - - - + + + [CONTIKI_DIR]/tools/cooja/apps/mrm + [CONTIKI_DIR]/tools/cooja/apps/mspsim + [CONTIKI_DIR]/tools/cooja/apps/avrora + [CONTIKI_DIR]/tools/cooja/apps/native_gateway + + My simulation + 0 + generated + 1000000 + + org.contikios.cooja.radiomediums.UDGM + 50.0 + 100.0 + 1.0 + 1.0 + + + 40000 + + + org.contikios.cooja.mspmote.SkyMoteType + sky1 + netperf shell + [CONTIKI_DIR]/examples/netperf/netperf-shell.c + make netperf-shell.sky TARGET=sky + [CONTIKI_DIR]/examples/netperf/netperf-shell.sky + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.interfaces.IPAddress + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.mspmote.interfaces.MspClock + org.contikios.cooja.mspmote.interfaces.MspMoteID + org.contikios.cooja.mspmote.interfaces.SkyButton + org.contikios.cooja.mspmote.interfaces.SkyFlash + org.contikios.cooja.mspmote.interfaces.SkyCoffeeFilesystem + org.contikios.cooja.mspmote.interfaces.Msp802154Radio + org.contikios.cooja.mspmote.interfaces.SkySerial + org.contikios.cooja.mspmote.interfaces.SkyLED + + + org.contikios.cooja.mspmote.SkyMote + sky1 + + + org.contikios.cooja.interfaces.Position + 49.48292285385544 + 97.67000744426045 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 1 + + + + org.contikios.cooja.mspmote.SkyMote + sky1 + + + org.contikios.cooja.interfaces.Position + 80.21380569499377 + 98.51039574575084 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 2 + + + + + org.contikios.cooja.plugins.SimControl + 290 + 2 + 172 + 0 + 0 + false + + + org.contikios.cooja.plugins.LogListener + + + + 1024 + 0 + 377 + 0 + 171 + false + + + org.contikios.cooja.plugins.TimeLine + + 0 + 1 + + + + 118 + 9 + + 1024 + 1 + 150 + 0 + 548 + false + + + org.contikios.cooja.plugins.ScriptRunner + + + true + + 600 + -1 + 476 + 399 + 154 + true + + + diff --git a/examples/rime/example-broadcast.csc b/examples/rime/example-broadcast.csc index b7521721a..11feb30db 100644 --- a/examples/rime/example-broadcast.csc +++ b/examples/rime/example-broadcast.csc @@ -1,248 +1,248 @@ - - - [CONTIKI_DIR]/tools/cooja/apps/mrm - [CONTIKI_DIR]/tools/cooja/apps/mspsim - [CONTIKI_DIR]/tools/cooja/apps/avrora - [CONTIKI_DIR]/tools/cooja/apps/native_gateway - [CONTIKI_DIR]/tools/cooja/apps/serial_socket - /home/user/contikiprojects/sics.se/mobility - [CONTIKI_DIR]/tools/cooja/apps/collect-view - /home/user/contikiprojects/sics.se/powertracker - - Broadcast example - 0 - 123456 - 1000000 - - org.contikios.cooja.radiomediums.UDGM - 50.0 - 100.0 - 1.0 - 1.0 - - - 40000 - - - org.contikios.cooja.mspmote.SkyMoteType - sky1 - Broadcast example - [CONTIKI_DIR]/examples/rime/example-broadcast.c - make example-broadcast.sky TARGET=sky - [CONTIKI_DIR]/examples/rime/example-broadcast.sky - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.interfaces.IPAddress - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - org.contikios.cooja.mspmote.interfaces.MspClock - org.contikios.cooja.mspmote.interfaces.MspMoteID - org.contikios.cooja.mspmote.interfaces.SkyButton - org.contikios.cooja.mspmote.interfaces.SkyFlash - org.contikios.cooja.mspmote.interfaces.SkyCoffeeFilesystem - org.contikios.cooja.mspmote.interfaces.Msp802154Radio - org.contikios.cooja.mspmote.interfaces.MspSerial - org.contikios.cooja.mspmote.interfaces.SkyLED - org.contikios.cooja.mspmote.interfaces.MspDebugOutput - org.contikios.cooja.mspmote.interfaces.SkyTemperature - - - - - org.contikios.cooja.interfaces.Position - 37.5366545201821 - 20.133438936240488 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 1 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 50.05393308569106 - 3.886106972235548 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 2 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 53.50011157471555 - 48.16869587128244 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 3 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 12.542870357677295 - 50.15965479801062 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 4 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 45.30496839108535 - 49.347800977978565 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 5 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 74.7539300728242 - 28.371269772953212 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 6 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 51.968753134087585 - 77.76059892362437 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 7 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 63.365939830655286 - 24.573727672975103 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 8 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 21.82676295937117 - 84.86468902217199 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 9 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 8.668640141529082 - 21.113338033999675 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 10 - - sky1 - - - - org.contikios.cooja.plugins.SimControl - 318 - 3 - 192 - 0 - 0 - - - org.contikios.cooja.plugins.Visualizer - - org.contikios.cooja.plugins.skins.IDVisualizerSkin - org.contikios.cooja.plugins.skins.AddressVisualizerSkin - org.contikios.cooja.plugins.skins.UDGMVisualizerSkin - 2.6322285313650773 0.0 0.0 2.6322285313650773 36.20636526098638 1.3163328971993926 - - 300 - 1 - 300 - 528 - -2 - - - org.contikios.cooja.plugins.LogListener - - - - 827 - 2 - 218 - 1 - 197 - - - org.contikios.cooja.plugins.TimeLine - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - - - 125 - 500.0 - - 828 - 0 - 138 - 0 - 414 - - - + + + [CONTIKI_DIR]/tools/cooja/apps/mrm + [CONTIKI_DIR]/tools/cooja/apps/mspsim + [CONTIKI_DIR]/tools/cooja/apps/avrora + [CONTIKI_DIR]/tools/cooja/apps/native_gateway + [CONTIKI_DIR]/tools/cooja/apps/serial_socket + /home/user/contikiprojects/sics.se/mobility + [CONTIKI_DIR]/tools/cooja/apps/collect-view + /home/user/contikiprojects/sics.se/powertracker + + Broadcast example + 0 + 123456 + 1000000 + + org.contikios.cooja.radiomediums.UDGM + 50.0 + 100.0 + 1.0 + 1.0 + + + 40000 + + + org.contikios.cooja.mspmote.SkyMoteType + sky1 + Broadcast example + [CONTIKI_DIR]/examples/rime/example-broadcast.c + make example-broadcast.sky TARGET=sky + [CONTIKI_DIR]/examples/rime/example-broadcast.sky + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.interfaces.IPAddress + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + org.contikios.cooja.mspmote.interfaces.MspClock + org.contikios.cooja.mspmote.interfaces.MspMoteID + org.contikios.cooja.mspmote.interfaces.SkyButton + org.contikios.cooja.mspmote.interfaces.SkyFlash + org.contikios.cooja.mspmote.interfaces.SkyCoffeeFilesystem + org.contikios.cooja.mspmote.interfaces.Msp802154Radio + org.contikios.cooja.mspmote.interfaces.MspSerial + org.contikios.cooja.mspmote.interfaces.SkyLED + org.contikios.cooja.mspmote.interfaces.MspDebugOutput + org.contikios.cooja.mspmote.interfaces.SkyTemperature + + + + + org.contikios.cooja.interfaces.Position + 37.5366545201821 + 20.133438936240488 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 1 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 50.05393308569106 + 3.886106972235548 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 2 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 53.50011157471555 + 48.16869587128244 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 3 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 12.542870357677295 + 50.15965479801062 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 4 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 45.30496839108535 + 49.347800977978565 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 5 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 74.7539300728242 + 28.371269772953212 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 6 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 51.968753134087585 + 77.76059892362437 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 7 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 63.365939830655286 + 24.573727672975103 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 8 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 21.82676295937117 + 84.86468902217199 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 9 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 8.668640141529082 + 21.113338033999675 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 10 + + sky1 + + + + org.contikios.cooja.plugins.SimControl + 318 + 3 + 192 + 0 + 0 + + + org.contikios.cooja.plugins.Visualizer + + org.contikios.cooja.plugins.skins.IDVisualizerSkin + org.contikios.cooja.plugins.skins.AddressVisualizerSkin + org.contikios.cooja.plugins.skins.UDGMVisualizerSkin + 2.6322285313650773 0.0 0.0 2.6322285313650773 36.20636526098638 1.3163328971993926 + + 300 + 1 + 300 + 528 + -2 + + + org.contikios.cooja.plugins.LogListener + + + + 827 + 2 + 218 + 1 + 197 + + + org.contikios.cooja.plugins.TimeLine + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + + + 125 + 500.0 + + 828 + 0 + 138 + 0 + 414 + + + diff --git a/examples/rime/example-collect.csc b/examples/rime/example-collect.csc index b5ac57019..f62b57703 100644 --- a/examples/rime/example-collect.csc +++ b/examples/rime/example-collect.csc @@ -1,397 +1,397 @@ - - - [CONTIKI_DIR]/tools/cooja/apps/mrm - [CONTIKI_DIR]/tools/cooja/apps/mspsim - [CONTIKI_DIR]/tools/cooja/apps/avrora - [CONTIKI_DIR]/tools/cooja/apps/native_gateway - [CONTIKI_DIR]/tools/cooja/apps/serial_socket - /home/user/contikiprojects/sics.se/mobility - [CONTIKI_DIR]/tools/cooja/apps/collect-view - /home/user/contikiprojects/sics.se/powertracker - - Data collection example - 0 - 123456 - 1000000 - - org.contikios.cooja.radiomediums.UDGM - 50.0 - 100.0 - 1.0 - 1.0 - - - 40000 - - - org.contikios.cooja.mspmote.SkyMoteType - sky1 - Example collect node - [CONTIKI_DIR]/examples/rime/example-collect.c - make example-collect.sky TARGET=sky - [CONTIKI_DIR]/examples/rime/example-collect.sky - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.interfaces.IPAddress - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - org.contikios.cooja.mspmote.interfaces.MspClock - org.contikios.cooja.mspmote.interfaces.MspMoteID - org.contikios.cooja.mspmote.interfaces.SkyButton - org.contikios.cooja.mspmote.interfaces.SkyFlash - org.contikios.cooja.mspmote.interfaces.SkyCoffeeFilesystem - org.contikios.cooja.mspmote.interfaces.Msp802154Radio - org.contikios.cooja.mspmote.interfaces.MspSerial - org.contikios.cooja.mspmote.interfaces.SkyLED - org.contikios.cooja.mspmote.interfaces.MspDebugOutput - org.contikios.cooja.mspmote.interfaces.SkyTemperature - - - - - org.contikios.cooja.interfaces.Position - 65.8935940755176 - 14.594950283135312 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 1 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 47.56630509016557 - 51.132236067167604 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 2 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 40.93494312024828 - 11.883845068265275 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 3 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 77.1251293927618 - 63.96476780063865 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 4 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 34.176936162571266 - 81.7759518046417 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 5 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 86.36132335500719 - 81.54179387349707 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 6 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 8.431276662440911 - 19.467241269096913 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 7 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 68.04527746863809 - 30.658199043821188 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 8 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 19.419170252458517 - 11.342055898031656 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 9 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 67.24618929801707 - 78.05087610981025 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 10 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 31.300913760017014 - 63.65669310098622 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 11 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 45.92507013405063 - 74.06071519244233 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 12 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 24.4718977171667 - 55.69738781271142 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 13 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 97.40535813382874 - 79.53018482049097 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 14 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 90.26570665508994 - 84.64525225408181 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 15 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 56.39117393990196 - 36.50957906187927 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 16 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 35.7941361611345 - 59.7284533249923 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 17 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 41.48471209234133 - 8.567545636380459 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 18 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 43.33967640673231 - 63.09025681148592 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 19 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 97.76077344510439 - 82.71896818588284 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 20 - - sky1 - - - - org.contikios.cooja.plugins.SimControl - 318 - 2 - 192 - 0 - 0 - - - org.contikios.cooja.plugins.Visualizer - - org.contikios.cooja.plugins.skins.IDVisualizerSkin - org.contikios.cooja.plugins.skins.UDGMVisualizerSkin - 2.903729630273725 0.0 0.0 2.903729630273725 -9.17650119839569 -14.332381577625736 - - 300 - 0 - 300 - 491 - 0 - - - org.contikios.cooja.plugins.LogListener - - - - 791 - 3 - 198 - 1 - 194 - - - org.contikios.cooja.plugins.TimeLine - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - 15 - 16 - 17 - 18 - 19 - - - 125 - 1871.7106886304318 - - 791 - 1 - 149 - 1 - 389 - - - + + + [CONTIKI_DIR]/tools/cooja/apps/mrm + [CONTIKI_DIR]/tools/cooja/apps/mspsim + [CONTIKI_DIR]/tools/cooja/apps/avrora + [CONTIKI_DIR]/tools/cooja/apps/native_gateway + [CONTIKI_DIR]/tools/cooja/apps/serial_socket + /home/user/contikiprojects/sics.se/mobility + [CONTIKI_DIR]/tools/cooja/apps/collect-view + /home/user/contikiprojects/sics.se/powertracker + + Data collection example + 0 + 123456 + 1000000 + + org.contikios.cooja.radiomediums.UDGM + 50.0 + 100.0 + 1.0 + 1.0 + + + 40000 + + + org.contikios.cooja.mspmote.SkyMoteType + sky1 + Example collect node + [CONTIKI_DIR]/examples/rime/example-collect.c + make example-collect.sky TARGET=sky + [CONTIKI_DIR]/examples/rime/example-collect.sky + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.interfaces.IPAddress + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + org.contikios.cooja.mspmote.interfaces.MspClock + org.contikios.cooja.mspmote.interfaces.MspMoteID + org.contikios.cooja.mspmote.interfaces.SkyButton + org.contikios.cooja.mspmote.interfaces.SkyFlash + org.contikios.cooja.mspmote.interfaces.SkyCoffeeFilesystem + org.contikios.cooja.mspmote.interfaces.Msp802154Radio + org.contikios.cooja.mspmote.interfaces.MspSerial + org.contikios.cooja.mspmote.interfaces.SkyLED + org.contikios.cooja.mspmote.interfaces.MspDebugOutput + org.contikios.cooja.mspmote.interfaces.SkyTemperature + + + + + org.contikios.cooja.interfaces.Position + 65.8935940755176 + 14.594950283135312 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 1 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 47.56630509016557 + 51.132236067167604 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 2 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 40.93494312024828 + 11.883845068265275 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 3 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 77.1251293927618 + 63.96476780063865 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 4 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 34.176936162571266 + 81.7759518046417 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 5 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 86.36132335500719 + 81.54179387349707 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 6 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 8.431276662440911 + 19.467241269096913 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 7 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 68.04527746863809 + 30.658199043821188 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 8 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 19.419170252458517 + 11.342055898031656 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 9 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 67.24618929801707 + 78.05087610981025 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 10 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 31.300913760017014 + 63.65669310098622 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 11 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 45.92507013405063 + 74.06071519244233 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 12 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 24.4718977171667 + 55.69738781271142 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 13 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 97.40535813382874 + 79.53018482049097 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 14 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 90.26570665508994 + 84.64525225408181 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 15 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 56.39117393990196 + 36.50957906187927 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 16 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 35.7941361611345 + 59.7284533249923 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 17 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 41.48471209234133 + 8.567545636380459 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 18 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 43.33967640673231 + 63.09025681148592 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 19 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 97.76077344510439 + 82.71896818588284 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 20 + + sky1 + + + + org.contikios.cooja.plugins.SimControl + 318 + 2 + 192 + 0 + 0 + + + org.contikios.cooja.plugins.Visualizer + + org.contikios.cooja.plugins.skins.IDVisualizerSkin + org.contikios.cooja.plugins.skins.UDGMVisualizerSkin + 2.903729630273725 0.0 0.0 2.903729630273725 -9.17650119839569 -14.332381577625736 + + 300 + 0 + 300 + 491 + 0 + + + org.contikios.cooja.plugins.LogListener + + + + 791 + 3 + 198 + 1 + 194 + + + org.contikios.cooja.plugins.TimeLine + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + 15 + 16 + 17 + 18 + 19 + + + 125 + 1871.7106886304318 + + 791 + 1 + 149 + 1 + 389 + + + diff --git a/examples/rime/example-rucb.c b/examples/rime/example-rucb.c index 7bf5d3b1d..e3d291c52 100644 --- a/examples/rime/example-rucb.c +++ b/examples/rime/example-rucb.c @@ -89,7 +89,7 @@ read_chunk(struct rucb_conn *c, int offset, char *to, int maxsize) bytecount += size; if(bytecount == FILESIZE) { - printf("Completion time %lu / %u\n", (unsigned long)clock_time() - start_time, CLOCK_SECOND); + printf("Completion time %lu / %u\n", (unsigned long)clock_time() - start_time, (unsigned int)CLOCK_SECOND); print_stats(); } diff --git a/examples/rime/example-rudolph1.c b/examples/rime/example-rudolph1.c index ebdf8a4cd..1dcf4b0af 100644 --- a/examples/rime/example-rudolph1.c +++ b/examples/rime/example-rudolph1.c @@ -83,9 +83,8 @@ write_chunk(struct rudolph1_conn *c, int offset, int flag, } if(datalen > 0) { - int ret; cfs_seek(fd, offset, CFS_SEEK_SET); - ret = cfs_write(fd, data, datalen); + cfs_write(fd, data, datalen); } cfs_close(fd); diff --git a/examples/rime/example-rudolph2.c b/examples/rime/example-rudolph2.c index 3b97d1857..fe9afd0dc 100644 --- a/examples/rime/example-rudolph2.c +++ b/examples/rime/example-rudolph2.c @@ -82,9 +82,8 @@ write_chunk(struct rudolph2_conn *c, int offset, int flag, } if(datalen > 0) { - int ret; cfs_seek(fd, offset, CFS_SEEK_SET); - ret = cfs_write(fd, data, datalen); + cfs_write(fd, data, datalen); printf("+++ rudolph2 offset %d, length %d\n", offset, datalen); } diff --git a/examples/rssi-scanner/ViewRSSI.java b/examples/rssi-scanner/ViewRSSI.java index 0b881ef7e..deb17dc8d 100644 --- a/examples/rssi-scanner/ViewRSSI.java +++ b/examples/rssi-scanner/ViewRSSI.java @@ -1,161 +1,161 @@ -/* - * Copyright (c) 2007, Swedish Institute of Computer Science. - * Copyright (c) 2010, University of Luebeck, Germany. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the Institute nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -/** - * \file - * ViewRSSI java application - * \author - * Joakim Eriksson - * Carlo Alberto Boano - */ - -import javax.swing.*; -import java.awt.*; -import java.io.*; - -public class ViewRSSI extends JPanel{ - // Constants - public static int TOTAL = 86; // Number of channel of 1 MHz sampled - public static int DECREASE_RSSI = 2; // How many dBm the grey RSSI falls each sample - public static int RSSI_MAX_VALUE = 100; // Maximum value obtainable from RSSI readings of CC2420. - public static int MARGIN_BOTTOM = 20; // Margin from the bottom - public static int MARGIN_RIGHT = 75; // Margin from the right - public static int MARGIN_TOP = 12; // Margin from the top - public static int INTERFERED_CHANNEL = 24; // Interfered channel - - public InputStream inputstr; - private int[] rssi = new int[TOTAL]; // Array of current Noise floor values (black line) - private int[] rssiMax = new int[TOTAL]; // Array with past Noise floor values (grey line) - - - public ViewRSSI() { - } - - public void paint(Graphics g) { - Graphics2D g2 = (Graphics2D) g; - int h = getHeight(); - int w = getWidth(); - double factor = (h - (MARGIN_BOTTOM*1.0)) / RSSI_MAX_VALUE; - double sSpacing = (w - MARGIN_RIGHT) / (TOTAL*1.0); - int sWidth = (int) (sSpacing - 1); - if (sWidth == 0) sWidth = 1; - - // Set white background in the plot - g.setColor(Color.white); - g.fillRect(0, 0, w, h); - - // Gradient example (ytics background) - GradientPaint greytowhite = new GradientPaint(w-MARGIN_RIGHT,0,Color.WHITE,w, 0,Color.lightGray, false); - g2.setPaint(greytowhite); - g2.fillRect(w-MARGIN_RIGHT, 0, w, h); - - // Draw the light grey channels from 11 to 26 - double xpos = 10; - for(int i=4;i rssiMax[i]) rssiMax[i] = rssi[i]; - else if (rssiMax[i] > 0) rssiMax[i] = rssiMax[i] - DECREASE_RSSI; - } - } catch (Exception e) { - e.printStackTrace(); /* Report error, but do not fail... */ - } - repaint(); - } - } - } - - - public static void main(String[] args) throws IOException { - JFrame win = new JFrame("RSSI Viewer"); - ViewRSSI panel; - win.setBounds(10, 10, 590, 590); - win.getContentPane().add(panel = new ViewRSSI()); - win.setVisible(true); - win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); - panel.handleInput(); - } - -} +/* + * Copyright (c) 2007, Swedish Institute of Computer Science. + * Copyright (c) 2010, University of Luebeck, Germany. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +/** + * \file + * ViewRSSI java application + * \author + * Joakim Eriksson + * Carlo Alberto Boano + */ + +import javax.swing.*; +import java.awt.*; +import java.io.*; + +public class ViewRSSI extends JPanel{ + // Constants + public static int TOTAL = 86; // Number of channel of 1 MHz sampled + public static int DECREASE_RSSI = 2; // How many dBm the grey RSSI falls each sample + public static int RSSI_MAX_VALUE = 100; // Maximum value obtainable from RSSI readings of CC2420. + public static int MARGIN_BOTTOM = 20; // Margin from the bottom + public static int MARGIN_RIGHT = 75; // Margin from the right + public static int MARGIN_TOP = 12; // Margin from the top + public static int INTERFERED_CHANNEL = 24; // Interfered channel + + public InputStream inputstr; + private int[] rssi = new int[TOTAL]; // Array of current Noise floor values (black line) + private int[] rssiMax = new int[TOTAL]; // Array with past Noise floor values (grey line) + + + public ViewRSSI() { + } + + public void paint(Graphics g) { + Graphics2D g2 = (Graphics2D) g; + int h = getHeight(); + int w = getWidth(); + double factor = (h - (MARGIN_BOTTOM*1.0)) / RSSI_MAX_VALUE; + double sSpacing = (w - MARGIN_RIGHT) / (TOTAL*1.0); + int sWidth = (int) (sSpacing - 1); + if (sWidth == 0) sWidth = 1; + + // Set white background in the plot + g.setColor(Color.white); + g.fillRect(0, 0, w, h); + + // Gradient example (ytics background) + GradientPaint greytowhite = new GradientPaint(w-MARGIN_RIGHT,0,Color.WHITE,w, 0,Color.lightGray, false); + g2.setPaint(greytowhite); + g2.fillRect(w-MARGIN_RIGHT, 0, w, h); + + // Draw the light grey channels from 11 to 26 + double xpos = 10; + for(int i=4;i rssiMax[i]) rssiMax[i] = rssi[i]; + else if (rssiMax[i] > 0) rssiMax[i] = rssiMax[i] - DECREASE_RSSI; + } + } catch (Exception e) { + e.printStackTrace(); /* Report error, but do not fail... */ + } + repaint(); + } + } + } + + + public static void main(String[] args) throws IOException { + JFrame win = new JFrame("RSSI Viewer"); + ViewRSSI panel; + win.setBounds(10, 10, 590, 590); + win.getContentPane().add(panel = new ViewRSSI()); + win.setVisible(true); + win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + panel.handleInput(); + } + +} diff --git a/examples/sensinode/border-router/slip-bridge.c b/examples/sensinode/border-router/slip-bridge.c index edd048a7d..b0ebd066d 100644 --- a/examples/sensinode/border-router/slip-bridge.c +++ b/examples/sensinode/border-router/slip-bridge.c @@ -84,7 +84,7 @@ init(void) slip_set_input_callback(slip_input_callback); } /*---------------------------------------------------------------------------*/ -static void +static int output(void) { if(uip_ipaddr_cmp(&last_sender, &UIP_IP_BUF->srcipaddr)) { @@ -95,6 +95,7 @@ output(void) PRINTF("SUT: %u\n", uip_len); slip_send(); } + return 0; } /*---------------------------------------------------------------------------*/ const struct uip_fallback_interface slip_interface = { diff --git a/examples/sensinode/udp-ipv6/project-conf.h b/examples/sensinode/udp-ipv6/project-conf.h index 4e74d406e..bb755aee9 100644 --- a/examples/sensinode/udp-ipv6/project-conf.h +++ b/examples/sensinode/udp-ipv6/project-conf.h @@ -47,5 +47,6 @@ #define BUTTON_SENSOR_CONF_ON 1 #define RIMESTATS_CONF_ENABLED 1 #define VIZTOOL_CONF_ON 0 +#define UIP_CONF_ND6_SEND_NA 1 #endif /* PROJECT_CONF_H_ */ diff --git a/examples/sky-shell-webserver/sky-shell-webserver.c b/examples/sky-shell-webserver/sky-shell-webserver.c index 57f85c368..f89e19ac1 100644 --- a/examples/sky-shell-webserver/sky-shell-webserver.c +++ b/examples/sky-shell-webserver/sky-shell-webserver.c @@ -40,8 +40,6 @@ #include #include -#include -#include /*---------------------------------------------------------------------------*/ PROCESS(sky_shell_process, "Sky Contiki shell w. webserver"); diff --git a/examples/telnet-server/Makefile.apple2enh.defines b/examples/telnet-server/Makefile.apple2enh.defines index 64d673103..2ee328994 100644 --- a/examples/telnet-server/Makefile.apple2enh.defines +++ b/examples/telnet-server/Makefile.apple2enh.defines @@ -1 +1 @@ -DEFINES = CONNECTIONS=3,WITH_LOGGING,WITH_CLIENT,WITH_DNS,WITH_REBOOT +DEFINES = CONNECTIONS=3,WITH_LOGGING,WITH_CLIENT,WITH_DNS,WITH_80COL,WITH_REBOOT diff --git a/examples/telnet-server/Makefile.c128.defines b/examples/telnet-server/Makefile.c128.defines index 5e74716aa..062a12cd7 100644 --- a/examples/telnet-server/Makefile.c128.defines +++ b/examples/telnet-server/Makefile.c128.defines @@ -1 +1 @@ -DEFINES = WITH_LOGGING +DEFINES = WITH_LOGGING,WITH_80COL diff --git a/examples/trickle-library/trickle-library.csc b/examples/trickle-library/trickle-library.csc index 1628d38a6..7a6d74ca2 100644 --- a/examples/trickle-library/trickle-library.csc +++ b/examples/trickle-library/trickle-library.csc @@ -1,154 +1,154 @@ - - - [CONTIKI_DIR]/tools/cooja/apps/mrm - [CONTIKI_DIR]/tools/cooja/apps/mspsim - [CONTIKI_DIR]/tools/cooja/apps/avrora - [CONTIKI_DIR]/tools/cooja/apps/serial_socket - [CONTIKI_DIR]/tools/cooja/apps/collect-view - [CONTIKI_DIR]/tools/cooja/apps/powertracker - - Example Demonstrating the Trickle Library's Functionality - 0 - generated - 1000000 - - org.contikios.cooja.radiomediums.UDGM - 50.0 - 100.0 - 1.0 - 1.0 - - - 40000 - - - org.contikios.cooja.mspmote.SkyMoteType - sky1 - trickle-tester - [CONTIKI_DIR]/examples/trickle-library/trickle-library.c - make trickle-library.sky TARGET=sky - [CONTIKI_DIR]/examples/trickle-library/trickle-library.sky - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.interfaces.IPAddress - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - org.contikios.cooja.mspmote.interfaces.MspClock - org.contikios.cooja.mspmote.interfaces.MspMoteID - org.contikios.cooja.mspmote.interfaces.SkyButton - org.contikios.cooja.mspmote.interfaces.SkyFlash - org.contikios.cooja.mspmote.interfaces.SkyCoffeeFilesystem - org.contikios.cooja.mspmote.interfaces.Msp802154Radio - org.contikios.cooja.mspmote.interfaces.MspSerial - org.contikios.cooja.mspmote.interfaces.SkyLED - org.contikios.cooja.mspmote.interfaces.MspDebugOutput - org.contikios.cooja.mspmote.interfaces.SkyTemperature - - - - - org.contikios.cooja.interfaces.Position - 96.8286491032791 - 44.83363764767495 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 1 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 26.625418506201424 - 62.32118900834971 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 2 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 12.373988266345922 - 40.21870711164037 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 3 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 38.44294323221424 - 17.14724376428426 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 4 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 68.38248149463341 - 23.506083749222842 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 5 - - sky1 - - - - org.contikios.cooja.plugins.Visualizer - - org.contikios.cooja.plugins.skins.UDGMVisualizerSkin - org.contikios.cooja.plugins.skins.TrafficVisualizerSkin - org.contikios.cooja.plugins.skins.IDVisualizerSkin - 5.862188489126289 0.0 0.0 5.862188489126289 -4.083221885224075 -86.33855683341153 - - 642 - 0 - 369 - 447 - 10 - - - org.contikios.cooja.plugins.LogListener - - - - - - 1235 - 2 - 285 - 4 - 389 - - - org.contikios.cooja.plugins.SimControl - 318 - 1 - 192 - 60 - 60 - - - + + + [CONTIKI_DIR]/tools/cooja/apps/mrm + [CONTIKI_DIR]/tools/cooja/apps/mspsim + [CONTIKI_DIR]/tools/cooja/apps/avrora + [CONTIKI_DIR]/tools/cooja/apps/serial_socket + [CONTIKI_DIR]/tools/cooja/apps/collect-view + [CONTIKI_DIR]/tools/cooja/apps/powertracker + + Example Demonstrating the Trickle Library's Functionality + 0 + generated + 1000000 + + org.contikios.cooja.radiomediums.UDGM + 50.0 + 100.0 + 1.0 + 1.0 + + + 40000 + + + org.contikios.cooja.mspmote.SkyMoteType + sky1 + trickle-tester + [CONTIKI_DIR]/examples/trickle-library/trickle-library.c + make trickle-library.sky TARGET=sky + [CONTIKI_DIR]/examples/trickle-library/trickle-library.sky + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.interfaces.IPAddress + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + org.contikios.cooja.mspmote.interfaces.MspClock + org.contikios.cooja.mspmote.interfaces.MspMoteID + org.contikios.cooja.mspmote.interfaces.SkyButton + org.contikios.cooja.mspmote.interfaces.SkyFlash + org.contikios.cooja.mspmote.interfaces.SkyCoffeeFilesystem + org.contikios.cooja.mspmote.interfaces.Msp802154Radio + org.contikios.cooja.mspmote.interfaces.MspSerial + org.contikios.cooja.mspmote.interfaces.SkyLED + org.contikios.cooja.mspmote.interfaces.MspDebugOutput + org.contikios.cooja.mspmote.interfaces.SkyTemperature + + + + + org.contikios.cooja.interfaces.Position + 96.8286491032791 + 44.83363764767495 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 1 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 26.625418506201424 + 62.32118900834971 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 2 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 12.373988266345922 + 40.21870711164037 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 3 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 38.44294323221424 + 17.14724376428426 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 4 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 68.38248149463341 + 23.506083749222842 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 5 + + sky1 + + + + org.contikios.cooja.plugins.Visualizer + + org.contikios.cooja.plugins.skins.UDGMVisualizerSkin + org.contikios.cooja.plugins.skins.TrafficVisualizerSkin + org.contikios.cooja.plugins.skins.IDVisualizerSkin + 5.862188489126289 0.0 0.0 5.862188489126289 -4.083221885224075 -86.33855683341153 + + 642 + 0 + 369 + 447 + 10 + + + org.contikios.cooja.plugins.LogListener + + + + + + 1235 + 2 + 285 + 4 + 389 + + + org.contikios.cooja.plugins.SimControl + 318 + 1 + 192 + 60 + 60 + + + diff --git a/examples/udp-ipv6/Makefile b/examples/udp-ipv6/Makefile index 62118cb49..7a38bdbc5 100644 --- a/examples/udp-ipv6/Makefile +++ b/examples/udp-ipv6/Makefile @@ -2,4 +2,5 @@ all: udp-server udp-client CONTIKI = ../.. CONTIKI_WITH_IPV6 = 1 +CFLAGS += -DUIP_CONF_ND6_SEND_NA=1 include $(CONTIKI)/Makefile.include diff --git a/examples/udp-stream/udp-stream.csc b/examples/udp-stream/udp-stream.csc index 01c949754..4639129d4 100644 --- a/examples/udp-stream/udp-stream.csc +++ b/examples/udp-stream/udp-stream.csc @@ -1,182 +1,182 @@ - - - [CONTIKI_DIR]/tools/cooja/apps/mspsim - [CONTIKI_DIR]/tools/cooja/apps/serial_socket - [CONTIKI_DIR]/tools/cooja/apps/mrm - - UDP Stream Example - 0 - 123456 - 1000000 - - org.contikios.cooja.radiomediums.UDGM - 50.0 - 100.0 - 1.0 - 1.0 - - - 40000 - - - org.contikios.cooja.mspmote.SkyMoteType - mote - mote - [CONTIKI_DIR]/examples/udp-stream/udp-stream.c - make udp-stream.sky TARGET=sky - [CONTIKI_DIR]/examples/udp-stream/udp-stream.sky - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.interfaces.IPAddress - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - org.contikios.cooja.mspmote.interfaces.MspClock - org.contikios.cooja.mspmote.interfaces.MspMoteID - org.contikios.cooja.mspmote.interfaces.SkyButton - org.contikios.cooja.mspmote.interfaces.SkyFlash - org.contikios.cooja.mspmote.interfaces.SkyCoffeeFilesystem - org.contikios.cooja.mspmote.interfaces.Msp802154Radio - org.contikios.cooja.mspmote.interfaces.MspSerial - org.contikios.cooja.mspmote.interfaces.SkyLED - org.contikios.cooja.mspmote.interfaces.MspDebugOutput - org.contikios.cooja.mspmote.interfaces.SkyTemperature - - - - - org.contikios.cooja.interfaces.Position - 33.260163187353555 - 30.643217359962595 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 1 - - mote - - - - - org.contikios.cooja.interfaces.Position - 70.87477363740156 - 31.656474063135494 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 2 - - mote - - - - - org.contikios.cooja.interfaces.Position - 112.33402646502834 - 47.18506616257089 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 3 - - mote - - - - - org.contikios.cooja.interfaces.Position - 132.53950850661624 - 78.99637996219282 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 4 - - mote - - - - - org.contikios.cooja.interfaces.Position - 136.72844990548202 - 114.94735349716447 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 5 - - mote - - - - org.contikios.cooja.plugins.SimControl - 259 - 4 - 178 - 0 - 0 - - - org.contikios.cooja.plugins.Visualizer - - org.contikios.cooja.plugins.skins.IDVisualizerSkin - org.contikios.cooja.plugins.skins.UDGMVisualizerSkin - org.contikios.cooja.plugins.skins.MoteTypeVisualizerSkin - org.contikios.cooja.plugins.skins.AttributeVisualizerSkin - 1.2465387687077096 0.0 0.0 1.2465387687077096 22.99764760264848 12.704392736072247 - - 257 - 3 - 297 - 0 - 180 - - - org.contikios.cooja.plugins.LogListener - - - - - 568 - 2 - 663 - 257 - -2 - - - org.contikios.cooja.plugins.RadioLogger - - 449 - - - 605 - 1 - 661 - 824 - 0 - - - org.contikios.cooja.plugins.TimeLine - - 0 - 1 - 2 - 3 - 4 - - - 125 - 100000.0 - - 1429 - 0 - 141 - 1 - 661 - - - + + + [CONTIKI_DIR]/tools/cooja/apps/mspsim + [CONTIKI_DIR]/tools/cooja/apps/serial_socket + [CONTIKI_DIR]/tools/cooja/apps/mrm + + UDP Stream Example + 0 + 123456 + 1000000 + + org.contikios.cooja.radiomediums.UDGM + 50.0 + 100.0 + 1.0 + 1.0 + + + 40000 + + + org.contikios.cooja.mspmote.SkyMoteType + mote + mote + [CONTIKI_DIR]/examples/udp-stream/udp-stream.c + make udp-stream.sky TARGET=sky + [CONTIKI_DIR]/examples/udp-stream/udp-stream.sky + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.interfaces.IPAddress + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + org.contikios.cooja.mspmote.interfaces.MspClock + org.contikios.cooja.mspmote.interfaces.MspMoteID + org.contikios.cooja.mspmote.interfaces.SkyButton + org.contikios.cooja.mspmote.interfaces.SkyFlash + org.contikios.cooja.mspmote.interfaces.SkyCoffeeFilesystem + org.contikios.cooja.mspmote.interfaces.Msp802154Radio + org.contikios.cooja.mspmote.interfaces.MspSerial + org.contikios.cooja.mspmote.interfaces.SkyLED + org.contikios.cooja.mspmote.interfaces.MspDebugOutput + org.contikios.cooja.mspmote.interfaces.SkyTemperature + + + + + org.contikios.cooja.interfaces.Position + 33.260163187353555 + 30.643217359962595 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 1 + + mote + + + + + org.contikios.cooja.interfaces.Position + 70.87477363740156 + 31.656474063135494 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 2 + + mote + + + + + org.contikios.cooja.interfaces.Position + 112.33402646502834 + 47.18506616257089 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 3 + + mote + + + + + org.contikios.cooja.interfaces.Position + 132.53950850661624 + 78.99637996219282 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 4 + + mote + + + + + org.contikios.cooja.interfaces.Position + 136.72844990548202 + 114.94735349716447 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 5 + + mote + + + + org.contikios.cooja.plugins.SimControl + 259 + 4 + 178 + 0 + 0 + + + org.contikios.cooja.plugins.Visualizer + + org.contikios.cooja.plugins.skins.IDVisualizerSkin + org.contikios.cooja.plugins.skins.UDGMVisualizerSkin + org.contikios.cooja.plugins.skins.MoteTypeVisualizerSkin + org.contikios.cooja.plugins.skins.AttributeVisualizerSkin + 1.2465387687077096 0.0 0.0 1.2465387687077096 22.99764760264848 12.704392736072247 + + 257 + 3 + 297 + 0 + 180 + + + org.contikios.cooja.plugins.LogListener + + + + + 568 + 2 + 663 + 257 + -2 + + + org.contikios.cooja.plugins.RadioLogger + + 449 + + + 605 + 1 + 661 + 824 + 0 + + + org.contikios.cooja.plugins.TimeLine + + 0 + 1 + 2 + 3 + 4 + + + 125 + 100000.0 + + 1429 + 0 + 141 + 1 + 661 + + + diff --git a/examples/webbrowser-80col/Makefile b/examples/webbrowser-80col/Makefile new file mode 100644 index 000000000..5067c2d9c --- /dev/null +++ b/examples/webbrowser-80col/Makefile @@ -0,0 +1,8 @@ +CONTIKI_PROJECT = webbrowser +all: $(CONTIKI_PROJECT) + +APPS = webbrowser + +CONTIKI = ../.. +CONTIKI_WITH_IPV4 = 1 +include $(CONTIKI)/Makefile.include diff --git a/examples/webbrowser-80col/Makefile.apple2enh.defines b/examples/webbrowser-80col/Makefile.apple2enh.defines new file mode 100644 index 000000000..71fb932e2 --- /dev/null +++ b/examples/webbrowser-80col/Makefile.apple2enh.defines @@ -0,0 +1 @@ +DEFINES = WITH_CLIENT,WITH_DNS,WITH_80COL,WITH_GUI,WITH_MOUSE,WITH_PFS diff --git a/examples/webbrowser-80col/Makefile.atarixl.defines b/examples/webbrowser-80col/Makefile.atarixl.defines new file mode 100644 index 000000000..962070b58 --- /dev/null +++ b/examples/webbrowser-80col/Makefile.atarixl.defines @@ -0,0 +1 @@ +DEFINES = WITH_CLIENT,WITH_DNS,WITH_80COL,WITH_GUI,WITH_MOUSE diff --git a/examples/webbrowser-80col/Makefile.c128.defines b/examples/webbrowser-80col/Makefile.c128.defines new file mode 100644 index 000000000..1b47d0cb1 --- /dev/null +++ b/examples/webbrowser-80col/Makefile.c128.defines @@ -0,0 +1 @@ +DEFINES = WITH_CLIENT,WITH_DNS,WITH_80COL,WITH_GUI,WITH_PFS,MTU_SIZE=500 diff --git a/examples/webbrowser-80col/Makefile.c64.defines b/examples/webbrowser-80col/Makefile.c64.defines new file mode 100644 index 000000000..71fb932e2 --- /dev/null +++ b/examples/webbrowser-80col/Makefile.c64.defines @@ -0,0 +1 @@ +DEFINES = WITH_CLIENT,WITH_DNS,WITH_80COL,WITH_GUI,WITH_MOUSE,WITH_PFS diff --git a/examples/webbrowser-80col/Makefile.native.defines b/examples/webbrowser-80col/Makefile.native.defines new file mode 100644 index 000000000..1b5caf200 --- /dev/null +++ b/examples/webbrowser-80col/Makefile.native.defines @@ -0,0 +1 @@ +DEFINES = WITH_GUI diff --git a/examples/webbrowser-80col/Makefile.win32.defines b/examples/webbrowser-80col/Makefile.win32.defines new file mode 100644 index 000000000..1b5caf200 --- /dev/null +++ b/examples/webbrowser-80col/Makefile.win32.defines @@ -0,0 +1 @@ +DEFINES = WITH_GUI diff --git a/examples/webbrowser-80col/webbrowser.c b/examples/webbrowser-80col/webbrowser.c new file mode 100644 index 000000000..0453fe0d2 --- /dev/null +++ b/examples/webbrowser-80col/webbrowser.c @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2007, Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the Contiki operating system. + * + */ + +#include "contiki-net.h" +#include "www.h" + +/*---------------------------------------------------------------------------*/ +AUTOSTART_PROCESSES(&www_process); +/*---------------------------------------------------------------------------*/ diff --git a/examples/webserver/Makefile.apple2enh.defines b/examples/webserver/Makefile.apple2enh.defines index 461a038bb..5d8fdd62e 100644 --- a/examples/webserver/Makefile.apple2enh.defines +++ b/examples/webserver/Makefile.apple2enh.defines @@ -1 +1 @@ -DEFINES = CONNECTIONS=4,WITH_LOGGING,WITH_BOOST +DEFINES = CONNECTIONS=4,WITH_LOGGING,WITH_BOOST,WITH_80COL diff --git a/examples/webserver/Makefile.c128.defines b/examples/webserver/Makefile.c128.defines index 43f7fe613..d4b3027dc 100644 --- a/examples/webserver/Makefile.c128.defines +++ b/examples/webserver/Makefile.c128.defines @@ -1 +1 @@ -DEFINES = CONNECTIONS=4,WITH_LOGGING,WITH_BOOST,WITH_PFS +DEFINES = CONNECTIONS=4,WITH_LOGGING,WITH_BOOST,WITH_80COL,WITH_PFS diff --git a/examples/wget/Makefile.apple2enh.defines b/examples/wget/Makefile.apple2enh.defines index a4bbe71fb..f596f97ce 100644 --- a/examples/wget/Makefile.apple2enh.defines +++ b/examples/wget/Makefile.apple2enh.defines @@ -1 +1 @@ -DEFINES = WITH_LOGGING,WITH_CLIENT,WITH_DNS,WITH_ARGS +DEFINES = WITH_LOGGING,WITH_CLIENT,WITH_DNS,WITH_80COL,WITH_ARGS diff --git a/examples/wget/Makefile.c128.defines b/examples/wget/Makefile.c128.defines index 91a6f26ad..adbaf5689 100644 --- a/examples/wget/Makefile.c128.defines +++ b/examples/wget/Makefile.c128.defines @@ -1 +1 @@ -DEFINES = WITH_LOGGING,WITH_CLIENT,WITH_DNS,WITH_PFS,WITH_ARGS +DEFINES = WITH_LOGGING,WITH_CLIENT,WITH_DNS,WITH_80COL,WITH_PFS,WITH_ARGS diff --git a/examples/wget/wget.c b/examples/wget/wget.c index 8a452771c..e8bff1063 100644 --- a/examples/wget/wget.c +++ b/examples/wget/wget.c @@ -169,14 +169,14 @@ PROCESS_THREAD(wget_process, ev, data) strcpy(url, contiki_argv[1]); puts(url); } else { - gets(url); + fgets(url, sizeof(url), stdin); } fputs("Save as:", stdout); if(contiki_argc > 2) { strcpy(name, contiki_argv[2]); puts(name); } else { - gets(name); + fgets(name, sizeof(name), stdin); } file = cfs_open(name, CFS_WRITE); if(file == -1) { diff --git a/examples/z1/ipv6/z1-websense/example-sky-websense.csc b/examples/z1/ipv6/z1-websense/example-sky-websense.csc index b83ec2943..f088c5386 100644 --- a/examples/z1/ipv6/z1-websense/example-sky-websense.csc +++ b/examples/z1/ipv6/z1-websense/example-sky-websense.csc @@ -1,207 +1,207 @@ - - - [CONTIKI_DIR]/tools/cooja/apps/mrm - [CONTIKI_DIR]/tools/cooja/apps/mspsim - [CONTIKI_DIR]/tools/cooja/apps/avrora - [CONTIKI_DIR]/tools/cooja/apps/serial_socket - - Sky Websense with RPL router - 0 - 123456 - 1000000 - - org.contikios.cooja.radiomediums.UDGM - 50.0 - 50.0 - 1.0 - 1.0 - - - 40000 - - - org.contikios.cooja.mspmote.SkyMoteType - rplroot - Sky RPL Root - [CONTIKI_DIR]/examples/ipv6/rpl-border-router/border-router.c - make border-router.sky TARGET=sky - [CONTIKI_DIR]/examples/ipv6/rpl-border-router/border-router.sky - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.interfaces.IPAddress - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - org.contikios.cooja.mspmote.interfaces.MspClock - org.contikios.cooja.mspmote.interfaces.MspMoteID - org.contikios.cooja.mspmote.interfaces.SkyButton - org.contikios.cooja.mspmote.interfaces.SkyFlash - org.contikios.cooja.mspmote.interfaces.SkyCoffeeFilesystem - org.contikios.cooja.mspmote.interfaces.Msp802154Radio - org.contikios.cooja.mspmote.interfaces.MspSerial - org.contikios.cooja.mspmote.interfaces.SkyLED - org.contikios.cooja.mspmote.interfaces.MspDebugOutput - org.contikios.cooja.mspmote.interfaces.SkyTemperature - - - org.contikios.cooja.mspmote.SkyMoteType - skyweb - Sky Websense - [CONTIKI_DIR]/examples/ipv6/sky-websense/sky-websense.c - make sky-websense.sky TARGET=sky - [CONTIKI_DIR]/examples/ipv6/sky-websense/sky-websense.sky - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.interfaces.IPAddress - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - org.contikios.cooja.mspmote.interfaces.MspClock - org.contikios.cooja.mspmote.interfaces.MspMoteID - org.contikios.cooja.mspmote.interfaces.SkyButton - org.contikios.cooja.mspmote.interfaces.SkyFlash - org.contikios.cooja.mspmote.interfaces.SkyCoffeeFilesystem - org.contikios.cooja.mspmote.interfaces.Msp802154Radio - org.contikios.cooja.mspmote.interfaces.MspSerial - org.contikios.cooja.mspmote.interfaces.SkyLED - org.contikios.cooja.mspmote.interfaces.MspDebugOutput - org.contikios.cooja.mspmote.interfaces.SkyTemperature - - - - - org.contikios.cooja.interfaces.Position - 33.260163187353555 - 30.643217359962595 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 1 - - rplroot - - - - - org.contikios.cooja.interfaces.Position - 62.239287566073514 - 34.43810269527116 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 2 - - skyweb - - - - - org.contikios.cooja.interfaces.Position - 56.71945435107925 - 20.293530081848317 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 3 - - skyweb - - - - - org.contikios.cooja.interfaces.Position - 75.34889145168493 - 24.43340499309403 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 4 - - skyweb - - - - - org.contikios.cooja.interfaces.Position - 92.59837024854205 - 38.57797760651687 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 5 - - skyweb - - - - - org.contikios.cooja.interfaces.Position - 47.68359039801751 - 47.26544238238854 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 6 - - skyweb - - - - org.contikios.cooja.plugins.SimControl - 259 - 4 - 179 - 0 - 0 - - - org.contikios.cooja.plugins.Visualizer - - org.contikios.cooja.plugins.skins.IDVisualizerSkin - org.contikios.cooja.plugins.skins.UDGMVisualizerSkin - org.contikios.cooja.plugins.skins.MoteTypeVisualizerSkin - 2.898638306051894 0.0 0.0 2.898638306051894 -68.40918308040007 -27.82360366026197 - - 258 - 2 - 209 - 0 - 178 - - - org.contikios.cooja.plugins.LogListener - - - - 1024 - 3 - 311 - 0 - 385 - - - org.contikios.cooja.plugins.RadioLogger - - 150 - - - 769 - 0 - 342 - 255 - -1 - - - SerialSocketServer - 0 - 422 - 1 - 74 - 601 - 310 - - + + + [CONTIKI_DIR]/tools/cooja/apps/mrm + [CONTIKI_DIR]/tools/cooja/apps/mspsim + [CONTIKI_DIR]/tools/cooja/apps/avrora + [CONTIKI_DIR]/tools/cooja/apps/serial_socket + + Sky Websense with RPL router + 0 + 123456 + 1000000 + + org.contikios.cooja.radiomediums.UDGM + 50.0 + 50.0 + 1.0 + 1.0 + + + 40000 + + + org.contikios.cooja.mspmote.SkyMoteType + rplroot + Sky RPL Root + [CONTIKI_DIR]/examples/ipv6/rpl-border-router/border-router.c + make border-router.sky TARGET=sky + [CONTIKI_DIR]/examples/ipv6/rpl-border-router/border-router.sky + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.interfaces.IPAddress + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + org.contikios.cooja.mspmote.interfaces.MspClock + org.contikios.cooja.mspmote.interfaces.MspMoteID + org.contikios.cooja.mspmote.interfaces.SkyButton + org.contikios.cooja.mspmote.interfaces.SkyFlash + org.contikios.cooja.mspmote.interfaces.SkyCoffeeFilesystem + org.contikios.cooja.mspmote.interfaces.Msp802154Radio + org.contikios.cooja.mspmote.interfaces.MspSerial + org.contikios.cooja.mspmote.interfaces.SkyLED + org.contikios.cooja.mspmote.interfaces.MspDebugOutput + org.contikios.cooja.mspmote.interfaces.SkyTemperature + + + org.contikios.cooja.mspmote.SkyMoteType + skyweb + Sky Websense + [CONTIKI_DIR]/examples/ipv6/sky-websense/sky-websense.c + make sky-websense.sky TARGET=sky + [CONTIKI_DIR]/examples/ipv6/sky-websense/sky-websense.sky + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.interfaces.IPAddress + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + org.contikios.cooja.mspmote.interfaces.MspClock + org.contikios.cooja.mspmote.interfaces.MspMoteID + org.contikios.cooja.mspmote.interfaces.SkyButton + org.contikios.cooja.mspmote.interfaces.SkyFlash + org.contikios.cooja.mspmote.interfaces.SkyCoffeeFilesystem + org.contikios.cooja.mspmote.interfaces.Msp802154Radio + org.contikios.cooja.mspmote.interfaces.MspSerial + org.contikios.cooja.mspmote.interfaces.SkyLED + org.contikios.cooja.mspmote.interfaces.MspDebugOutput + org.contikios.cooja.mspmote.interfaces.SkyTemperature + + + + + org.contikios.cooja.interfaces.Position + 33.260163187353555 + 30.643217359962595 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 1 + + rplroot + + + + + org.contikios.cooja.interfaces.Position + 62.239287566073514 + 34.43810269527116 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 2 + + skyweb + + + + + org.contikios.cooja.interfaces.Position + 56.71945435107925 + 20.293530081848317 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 3 + + skyweb + + + + + org.contikios.cooja.interfaces.Position + 75.34889145168493 + 24.43340499309403 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 4 + + skyweb + + + + + org.contikios.cooja.interfaces.Position + 92.59837024854205 + 38.57797760651687 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 5 + + skyweb + + + + + org.contikios.cooja.interfaces.Position + 47.68359039801751 + 47.26544238238854 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 6 + + skyweb + + + + org.contikios.cooja.plugins.SimControl + 259 + 4 + 179 + 0 + 0 + + + org.contikios.cooja.plugins.Visualizer + + org.contikios.cooja.plugins.skins.IDVisualizerSkin + org.contikios.cooja.plugins.skins.UDGMVisualizerSkin + org.contikios.cooja.plugins.skins.MoteTypeVisualizerSkin + 2.898638306051894 0.0 0.0 2.898638306051894 -68.40918308040007 -27.82360366026197 + + 258 + 2 + 209 + 0 + 178 + + + org.contikios.cooja.plugins.LogListener + + + + 1024 + 3 + 311 + 0 + 385 + + + org.contikios.cooja.plugins.RadioLogger + + 150 + + + 769 + 0 + 342 + 255 + -1 + + + SerialSocketServer + 0 + 422 + 1 + 74 + 601 + 310 + + diff --git a/examples/z1/test-sht25.c b/examples/z1/test-sht25.c index 25d308f3b..6137e9753 100644 --- a/examples/z1/test-sht25.c +++ b/examples/z1/test-sht25.c @@ -57,7 +57,7 @@ PROCESS_THREAD(test_sht25_process, ev, data) temperature = sht25.value(SHT25_VAL_TEMP); printf("Temperature %d.%d ºC\n", temperature / 100, temperature % 100); humidity = sht25.value(SHT25_VAL_HUM); - printf("Humidity %d.%d %RH\n", humidity / 100, humidity % 100); + printf("Humidity %d.%d %%RH\n", humidity / 100, humidity % 100); } PROCESS_END(); } diff --git a/platform/apple2enh/contiki-conf.h b/platform/apple2enh/contiki-conf.h index 2ad5ceb7f..d3a684d3c 100644 --- a/platform/apple2enh/contiki-conf.h +++ b/platform/apple2enh/contiki-conf.h @@ -42,23 +42,29 @@ #define CTK_CONF_WIDGETUP_KEY 0x01 /* Ctrl-A */ #define CTK_CONF_WIDGETDOWN_KEY '\t' /* Tab or Ctrl-I */ +#if WITH_80COL #define MOUSE_CONF_XTOC(x) ((x) * 2 / 7) +#else +#define MOUSE_CONF_XTOC(x) ((x) / 7) +#endif #define MOUSE_CONF_YTOC(y) ((y) / 8) -#define EMAIL_CONF_WIDTH 79 -#define EMAIL_CONF_HEIGHT 19 -#define EMAIL_CONF_ERASE 0 - -#define FTP_CONF_WIDTH 38 -#define FTP_CONF_HEIGHT 21 - +#if WITH_80COL #define IRC_CONF_WIDTH 80 +#else +#define IRC_CONF_WIDTH 40 +#endif #define IRC_CONF_HEIGHT 23 #ifndef TELNETD_CONF_MAX_IDLE_TIME #define TELNETD_CONF_MAX_IDLE_TIME 300 #endif +#if WITH_80COL +#define WWW_CONF_WEBPAGE_WIDTH 80 +#else +#define WWW_CONF_WEBPAGE_WIDTH 40 +#endif #define WWW_CONF_WEBPAGE_HEIGHT 19 #define WWW_CONF_HISTORY_SIZE 4 #define WWW_CONF_WGET_EXEC(url) exec("wget", url) diff --git a/platform/apple2enh/contiki-main.c b/platform/apple2enh/contiki-main.c index 8a42a53da..f65a4fe94 100644 --- a/platform/apple2enh/contiki-main.c +++ b/platform/apple2enh/contiki-main.c @@ -83,7 +83,9 @@ main(void) rebootafterexit(); #endif /* WITH_REBOOT */ +#if WITH_80COL videomode(VIDEOMODE_80COL); +#endif /* WITH_80COL */ process_init(); diff --git a/platform/atarixl/Makefile.atarixl b/platform/atarixl/Makefile.atarixl index 8b0615c85..b6f103b88 100644 --- a/platform/atarixl/Makefile.atarixl +++ b/platform/atarixl/Makefile.atarixl @@ -34,8 +34,8 @@ CONTIKI_CPU = $(CONTIKI)/cpu/6502 include $(CONTIKI_CPU)/Makefile.6502 -SHADOW_RAM_SOURCEFILES = etimer.c uip.c -SHADOW_RAM2_SOURCEFILES = clock.c error.c uip_arch.c uip_arp.c +SHADOW_RAM_SOURCEFILES = ethernet.c ethernet-drv.c timer.c uip.c uiplib.c +SHADOW_RAM2_SOURCEFILES = clock.c uip_arch.c uip_arp.c # Set target-specific variable values ${addprefix $(OBJECTDIR)/,${call oname, $(SHADOW_RAM_SOURCEFILES)}}: CFLAGS += --code-name SHADOW_RAM diff --git a/platform/atarixl/contiki-conf.h b/platform/atarixl/contiki-conf.h index 8c43fdcae..9adcdd93f 100644 --- a/platform/atarixl/contiki-conf.h +++ b/platform/atarixl/contiki-conf.h @@ -50,13 +50,6 @@ #define BORDERCOLOR COLOR_BLACK #define SCREENCOLOR COLOR_BLACK -#define EMAIL_CONF_WIDTH 39 -#define EMAIL_CONF_HEIGHT 19 -#define EMAIL_CONF_ERASE 0 - -#define FTP_CONF_WIDTH 18 -#define FTP_CONF_HEIGHT 21 - #define IRC_CONF_WIDTH 40 #define IRC_CONF_HEIGHT 23 diff --git a/platform/avr-raven/apps/raven-lcd-interface/Makefile.raven-lcd-interface b/platform/avr-raven/apps/raven-lcd-interface/Makefile.raven-lcd-interface index 0b1196c5f..707f0a3fe 100644 --- a/platform/avr-raven/apps/raven-lcd-interface/Makefile.raven-lcd-interface +++ b/platform/avr-raven/apps/raven-lcd-interface/Makefile.raven-lcd-interface @@ -1,4 +1,4 @@ raven-lcd-interface_src = raven-lcd.c -CFLAGS+=-DRAVEN_LCD_INTERFACE=1 +CFLAGS+=-DRAVEN_LCD_INTERFACE=1 -DPLATFORM_HAS_BATTERY -DPLATFORM_HAS_TEMPERATURE diff --git a/platform/avr-raven/apps/raven-lcd-interface/raven-lcd.c b/platform/avr-raven/apps/raven-lcd-interface/raven-lcd.c index 343bab2e8..acf6eef46 100644 --- a/platform/avr-raven/apps/raven-lcd-interface/raven-lcd.c +++ b/platform/avr-raven/apps/raven-lcd-interface/raven-lcd.c @@ -42,6 +42,7 @@ * driver chip (ATMega3290P) on the Raven. * * \author Blake Leverett + * \author Cristiano De Alti * * @{ */ @@ -69,6 +70,7 @@ #endif #include "raven-lcd.h" +#include "lib/sensors.h" #include #include @@ -94,6 +96,9 @@ static struct{ #define UIP_ICMP_BUF ((struct uip_icmp_hdr *)&uip_buf[uip_l2_l3_hdr_len]) #define PING6_DATALEN 16 +static int battery_value; +static int temperature_value; + void rs232_send(uint8_t port, unsigned char c); /*---------------------------------------------------------------------------*/ @@ -306,12 +311,14 @@ raven_gui_loop(process_event_t ev, process_data_t data) /* Set temperature string in web server */ web_set_temp((char *)cmd.frame); #endif + temperature_value = atoi((char *)cmd.frame); break; case SEND_ADC2: #if AVR_WEBSERVER /* Set ext voltage string in web server */ web_set_voltage((char *)cmd.frame); #endif + battery_value = atoi((char *)cmd.frame); break; case SEND_SLEEP: /* Sleep radio and 1284p. */ @@ -458,6 +465,42 @@ char buf[sizeof(eemem_server_name)+1]; raven_lcd_show_text(buf); //must fit in all the buffers or it will be truncated! } #endif + +/*---------------------------------------------------------------------------*/ +int +value_temperature(int type) { + return temperature_value; +} + +int +value_battery(int type) { + return battery_value; +} + +/*---------------------------------------------------------------------------*/ +int +configure(int type, int value) { + /* prevent compiler warnings */ + return type = value = 1; +} + +/*---------------------------------------------------------------------------*/ +int +status(int type) { + switch(type) { + case SENSORS_ACTIVE: + case SENSORS_READY: + return 1; + } + return 0; +} + +/*---------------------------------------------------------------------------*/ +SENSORS_SENSOR(temperature_sensor, "Temperature", + value_temperature, configure, status); +SENSORS_SENSOR(battery_sensor, "Battery", + value_battery, configure, status); + /*---------------------------------------------------------------------------*/ PROCESS(raven_lcd_process, "Raven LCD interface process"); PROCESS_THREAD(raven_lcd_process, ev, data) diff --git a/platform/avr-raven/apps/raven-webserver/httpd-cgi.c b/platform/avr-raven/apps/raven-webserver/httpd-cgi.c index f085991bf..874ad4246 100644 --- a/platform/avr-raven/apps/raven-webserver/httpd-cgi.c +++ b/platform/avr-raven/apps/raven-webserver/httpd-cgi.c @@ -368,7 +368,7 @@ make_routes(void *p) j++; numprinted += httpd_cgi_sprint_ip6(r->ipaddr, uip_appdata + numprinted); numprinted += httpd_snprintf((char *)uip_appdata+numprinted, uip_mss()-numprinted, httpd_cgi_rtes1, r->length); - numprinted += httpd_cgi_sprint_ip6(uip_ds6_route_nexthop(r), uip_appdata + numprinted); + numprinted += httpd_cgi_sprint_ip6(*uip_ds6_route_nexthop(r), uip_appdata + numprinted); if(r->state.lifetime < 3600) { numprinted += httpd_snprintf((char *)uip_appdata+numprinted, uip_mss()-numprinted, httpd_cgi_rtes2, r->state.lifetime); } else { diff --git a/platform/avr-raven/contiki-conf.h b/platform/avr-raven/contiki-conf.h index 2fe0d6099..ead35168b 100644 --- a/platform/avr-raven/contiki-conf.h +++ b/platform/avr-raven/contiki-conf.h @@ -162,6 +162,7 @@ typedef unsigned short uip_stats_t; #define UIP_CONF_ICMP6 1 #define UIP_CONF_UDP 1 #define UIP_CONF_TCP 1 +#define UIP_CONF_BUFFER_SIZE 1300 #define NETSTACK_CONF_NETWORK sicslowpan_driver #define SICSLOWPAN_CONF_COMPRESSION SICSLOWPAN_COMPRESSION_HC06 #else diff --git a/platform/avr-raven/contiki-raven-main.c b/platform/avr-raven/contiki-raven-main.c index 14c34fb4b..723bd9436 100644 --- a/platform/avr-raven/contiki-raven-main.c +++ b/platform/avr-raven/contiki-raven-main.c @@ -527,6 +527,7 @@ extern uip_ds6_netif_t uip_ds6_if; PRINTF("\n"); } } + j = 1; PRINTF("\nNeighbors [%u max]\n",NBR_TABLE_MAX_NEIGHBORS); for(nbr = nbr_table_head(ds6_neighbors); nbr != NULL; diff --git a/platform/avr-raven/dev/temperature-sensor.h b/platform/avr-raven/dev/temperature-sensor.h new file mode 100644 index 000000000..05eafe852 --- /dev/null +++ b/platform/avr-raven/dev/temperature-sensor.h @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2010, Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + */ + +/** + * \file + * Temperature sensor header file. + * \author + * Adam Dunkels + * Joakim Eriksson + * Niclas Finne + */ + +#ifndef TEMPERATURE_SENSOR_H_ +#define TEMPERATURE_SENSOR_H_ + +#include "lib/sensors.h" + +extern const struct sensors_sensor temperature_sensor; + +#define TEMPERATURE_SENSOR "Temperature" + +#endif /* TEMPERATURE_SENSOR_H_ */ diff --git a/platform/avr-ravenlcd/Makefile b/platform/avr-ravenlcd/Makefile index e16132765..fef0167d9 100644 --- a/platform/avr-ravenlcd/Makefile +++ b/platform/avr-ravenlcd/Makefile @@ -28,7 +28,7 @@ LDFLAGS = $(COMMON) LDFLAGS += -Wl,-Map=$(PROJECT).map,--cref ## Intel Hex file production flags -HEX_FLASH_FLAGS = -R .eeprom +HEX_FLASH_FLAGS = -j .text -j .data HEX_EEPROM_FLAGS = -j .eeprom HEX_EEPROM_FLAGS += --set-section-flags=.eeprom="alloc,load" diff --git a/platform/avr-ravenlcd/beep.c b/platform/avr-ravenlcd/beep.c index 34f2ee23f..cb2a0510b 100644 --- a/platform/avr-ravenlcd/beep.c +++ b/platform/avr-ravenlcd/beep.c @@ -132,11 +132,11 @@ beep(void) static uint8_t tuneindex=0; -static uint8_t pictures[] PROGMEM = {G4,4, F4,4, AS4,4, C5,2, F5,2, D5,4, C5,2, F5,2, D5,4, AS4,4, C5,4, G4,4, F4,4, 0xff}; -static uint8_t axel[] PROGMEM = {FS4,2, NONE,2, A4,3, FS4,2, FS4,1, B4,2, FS4,2, E4,2, FS4,2, NONE,2, CS5,3, FS4,2, FS4,1, D5,2, CS5,2, A4,2, FS4,2, CS5,2, FS5,2, FS4,1, E4,2, E4,1, CS4,2, GS4,2, FS4,6, 0xff}; -static uint8_t sandman1[] PROGMEM = {F4,2, G4,2, B4,4, A4,10, B4,2, B4,2, A4,2, B4,12, 0xff}; -static uint8_t sandman2[] PROGMEM = {C4,2, E4,2, G4,2, B4,2, A4,2, G4,2, E4,2, C4,2, D4,2, F4,2, A4,2, C5,2, B4,8, 0xff}; -static uint8_t furelise[] PROGMEM = {E5,1, DS5,1, E5,1, DS5,1, E5,1, B4,1, D5,1, E5,1, A4,2, NONE,1, C4,1, E4,1, A4,1, B4,2, NONE,1, E4,1, GS4,1, B4,1, C5,2, 0xff}; +static const uint8_t pictures[] PROGMEM = {G4,4, F4,4, AS4,4, C5,2, F5,2, D5,4, C5,2, F5,2, D5,4, AS4,4, C5,4, G4,4, F4,4, 0xff}; +static const uint8_t axel[] PROGMEM = {FS4,2, NONE,2, A4,3, FS4,2, FS4,1, B4,2, FS4,2, E4,2, FS4,2, NONE,2, CS5,3, FS4,2, FS4,1, D5,2, CS5,2, A4,2, FS4,2, CS5,2, FS5,2, FS4,1, E4,2, E4,1, CS4,2, GS4,2, FS4,6, 0xff}; +static const uint8_t sandman1[] PROGMEM = {F4,2, G4,2, B4,4, A4,10, B4,2, B4,2, A4,2, B4,12, 0xff}; +static const uint8_t sandman2[] PROGMEM = {C4,2, E4,2, G4,2, B4,2, A4,2, G4,2, E4,2, C4,2, D4,2, F4,2, A4,2, C5,2, B4,8, 0xff}; +static const uint8_t furelise[] PROGMEM = {E5,1, DS5,1, E5,1, DS5,1, E5,1, B4,1, D5,1, E5,1, A4,2, NONE,1, C4,1, E4,1, A4,1, B4,2, NONE,1, E4,1, GS4,1, B4,1, C5,2, 0xff}; static volatile uint8_t icnt,tone; @@ -153,7 +153,8 @@ ISR(TIMER0_OVF_vect) void play_ringtone(void) { -uint8_t i,*noteptr; +uint8_t i; +const uint8_t *noteptr; /* What's next on the playlist? */ switch (tuneindex++) { diff --git a/platform/avr-ravenlcd/doc/Doxyfile b/platform/avr-ravenlcd/doc/Doxyfile index e87bf474f..e8c4027d1 100644 --- a/platform/avr-ravenlcd/doc/Doxyfile +++ b/platform/avr-ravenlcd/doc/Doxyfile @@ -1,240 +1,240 @@ -# Doxyfile 1.4.1 - -#--------------------------------------------------------------------------- -# Project related configuration options -#--------------------------------------------------------------------------- -PROJECT_NAME = "Contiki 6LoWPAN Menu" -PROJECT_NUMBER = -OUTPUT_DIRECTORY = . -CREATE_SUBDIRS = NO -OUTPUT_LANGUAGE = English -USE_WINDOWS_ENCODING = NO -BRIEF_MEMBER_DESC = YES -REPEAT_BRIEF = YES -ABBREVIATE_BRIEF = -ALWAYS_DETAILED_SEC = NO -INLINE_INHERITED_MEMB = NO -FULL_PATH_NAMES = YES -STRIP_FROM_PATH = ../ -STRIP_FROM_INC_PATH = -SHORT_NAMES = YES -JAVADOC_AUTOBRIEF = YES -MULTILINE_CPP_IS_BRIEF = NO -DETAILS_AT_TOP = YES -INHERIT_DOCS = YES -DISTRIBUTE_GROUP_DOC = NO -TAB_SIZE = 8 -ALIASES = -OPTIMIZE_OUTPUT_FOR_C = YES -OPTIMIZE_OUTPUT_JAVA = NO -SUBGROUPING = YES -#--------------------------------------------------------------------------- -# Build related configuration options -#--------------------------------------------------------------------------- -EXTRACT_ALL = NO -EXTRACT_PRIVATE = NO -EXTRACT_STATIC = YES -EXTRACT_LOCAL_CLASSES = NO -EXTRACT_LOCAL_METHODS = NO -HIDE_UNDOC_MEMBERS = YES -HIDE_UNDOC_CLASSES = YES -HIDE_FRIEND_COMPOUNDS = NO -HIDE_IN_BODY_DOCS = NO -INTERNAL_DOCS = NO -CASE_SENSE_NAMES = YES -HIDE_SCOPE_NAMES = NO -SHOW_INCLUDE_FILES = YES -INLINE_INFO = YES -SORT_MEMBER_DOCS = YES -SORT_BRIEF_DOCS = NO -SORT_BY_SCOPE_NAME = NO -GENERATE_TODOLIST = YES -GENERATE_TESTLIST = YES -GENERATE_BUGLIST = NO -GENERATE_DEPRECATEDLIST= NO -ENABLED_SECTIONS = -MAX_INITIALIZER_LINES = 30 -SHOW_USED_FILES = NO -SHOW_DIRECTORIES = YES -FILE_VERSION_FILTER = -#--------------------------------------------------------------------------- -# configuration options related to warning and progress messages -#--------------------------------------------------------------------------- -QUIET = NO -WARNINGS = YES -WARN_IF_UNDOCUMENTED = NO -WARN_IF_DOC_ERROR = YES -WARN_NO_PARAMDOC = NO -WARN_FORMAT = "$file:$line: $text" -WARN_LOGFILE = -#--------------------------------------------------------------------------- -# configuration options related to the input files -#--------------------------------------------------------------------------- -INPUT = ../adc.c \ - ../beep.c \ - ../key.c \ - ../lcd.c \ - ../menu.c \ - ../raven3290.c \ - ../sleep.c \ - ../temp.c \ - ../timer.c \ - ../uart.c \ - ../adc.h \ - ../beep.h \ - ../key.h \ - ../lcd.h \ - ../menu.h \ - ../main.h \ - ../sleep.h \ - ../temp.h \ - ../timer.h \ - ../uart.h - -FILE_PATTERNS = -RECURSIVE = NO -EXCLUDE = -EXCLUDE_SYMLINKS = NO -EXCLUDE_PATTERNS = -EXAMPLE_PATH = -EXAMPLE_PATTERNS = -EXAMPLE_RECURSIVE = NO -IMAGE_PATH = ./pics -INPUT_FILTER = -FILTER_PATTERNS = -FILTER_SOURCE_FILES = NO -#--------------------------------------------------------------------------- -# configuration options related to source browsing -#--------------------------------------------------------------------------- -SOURCE_BROWSER = YES -INLINE_SOURCES = NO -STRIP_CODE_COMMENTS = NO -REFERENCED_BY_RELATION = YES -REFERENCES_RELATION = YES -VERBATIM_HEADERS = YES -#--------------------------------------------------------------------------- -# configuration options related to the alphabetical class index -#--------------------------------------------------------------------------- -ALPHABETICAL_INDEX = YES -COLS_IN_ALPHA_INDEX = 5 -IGNORE_PREFIX = -#--------------------------------------------------------------------------- -# configuration options related to the HTML output -#--------------------------------------------------------------------------- -GENERATE_HTML = YES -HTML_OUTPUT = html -HTML_FILE_EXTENSION = .html -HTML_HEADER = -HTML_FOOTER = -HTML_STYLESHEET = -HTML_ALIGN_MEMBERS = YES -GENERATE_HTMLHELP = YES -CHM_FILE = -HHC_LOCATION = -GENERATE_CHI = YES -BINARY_TOC = YES -TOC_EXPAND = YES -DISABLE_INDEX = NO -ENUM_VALUES_PER_LINE = 4 -GENERATE_TREEVIEW = YES -TREEVIEW_WIDTH = 250 -#--------------------------------------------------------------------------- -# configuration options related to the LaTeX output -#--------------------------------------------------------------------------- -GENERATE_LATEX = YES -LATEX_OUTPUT = latex -LATEX_CMD_NAME = latex -MAKEINDEX_CMD_NAME = makeindex -COMPACT_LATEX = YES -PAPER_TYPE = a4wide -EXTRA_PACKAGES = -LATEX_HEADER = -PDF_HYPERLINKS = YES -USE_PDFLATEX = YES -LATEX_BATCHMODE = NO -LATEX_HIDE_INDICES = NO -#--------------------------------------------------------------------------- -# configuration options related to the RTF output -#--------------------------------------------------------------------------- -GENERATE_RTF = NO -RTF_OUTPUT = rtf -COMPACT_RTF = NO -RTF_HYPERLINKS = NO -RTF_STYLESHEET_FILE = -RTF_EXTENSIONS_FILE = -#--------------------------------------------------------------------------- -# configuration options related to the man page output -#--------------------------------------------------------------------------- -GENERATE_MAN = NO -MAN_OUTPUT = man -MAN_EXTENSION = .3 -MAN_LINKS = NO -#--------------------------------------------------------------------------- -# configuration options related to the XML output -#--------------------------------------------------------------------------- -GENERATE_XML = NO -XML_OUTPUT = xml -XML_SCHEMA = -XML_DTD = -XML_PROGRAMLISTING = YES -#--------------------------------------------------------------------------- -# configuration options for the AutoGen Definitions output -#--------------------------------------------------------------------------- -GENERATE_AUTOGEN_DEF = NO -#--------------------------------------------------------------------------- -# configuration options related to the Perl module output -#--------------------------------------------------------------------------- -GENERATE_PERLMOD = NO -PERLMOD_LATEX = NO -PERLMOD_PRETTY = YES -PERLMOD_MAKEVAR_PREFIX = -#--------------------------------------------------------------------------- -# Configuration options related to the preprocessor -#--------------------------------------------------------------------------- -ENABLE_PREPROCESSING = YES -MACRO_EXPANSION = NO -EXPAND_ONLY_PREDEF = NO -SEARCH_INCLUDES = YES -INCLUDE_PATH = -INCLUDE_FILE_PATTERNS = -PREDEFINED = DOXYGEN -EXPAND_AS_DEFINED = -SKIP_FUNCTION_MACROS = YES -#--------------------------------------------------------------------------- -# Configuration::additions related to external references -#--------------------------------------------------------------------------- -TAGFILES = -GENERATE_TAGFILE = -ALLEXTERNALS = NO -EXTERNAL_GROUPS = YES -PERL_PATH = /usr/bin/perl -#--------------------------------------------------------------------------- -# Configuration options related to the dot tool -#--------------------------------------------------------------------------- -CLASS_DIAGRAMS = NO -HIDE_UNDOC_RELATIONS = YES -HAVE_DOT = YES -CLASS_GRAPH = NO -COLLABORATION_GRAPH = NO -GROUP_GRAPHS = NO -UML_LOOK = NO -TEMPLATE_RELATIONS = NO -INCLUDE_GRAPH = NO -INCLUDED_BY_GRAPH = NO -CALL_GRAPH = NO -GRAPHICAL_HIERARCHY = NO -DIRECTORY_GRAPH = NO -DOT_IMAGE_FORMAT = png -DOT_PATH = -DOTFILE_DIRS = -MAX_DOT_GRAPH_WIDTH = 1024 -MAX_DOT_GRAPH_HEIGHT = 1024 -MAX_DOT_GRAPH_DEPTH = 0 -DOT_TRANSPARENT = NO -DOT_MULTI_TARGETS = NO -GENERATE_LEGEND = YES -DOT_CLEANUP = YES -#--------------------------------------------------------------------------- -# Configuration::additions related to the search engine -#--------------------------------------------------------------------------- -SEARCHENGINE = NO +# Doxyfile 1.4.1 + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- +PROJECT_NAME = "Contiki 6LoWPAN Menu" +PROJECT_NUMBER = +OUTPUT_DIRECTORY = . +CREATE_SUBDIRS = NO +OUTPUT_LANGUAGE = English +USE_WINDOWS_ENCODING = NO +BRIEF_MEMBER_DESC = YES +REPEAT_BRIEF = YES +ABBREVIATE_BRIEF = +ALWAYS_DETAILED_SEC = NO +INLINE_INHERITED_MEMB = NO +FULL_PATH_NAMES = YES +STRIP_FROM_PATH = ../ +STRIP_FROM_INC_PATH = +SHORT_NAMES = YES +JAVADOC_AUTOBRIEF = YES +MULTILINE_CPP_IS_BRIEF = NO +DETAILS_AT_TOP = YES +INHERIT_DOCS = YES +DISTRIBUTE_GROUP_DOC = NO +TAB_SIZE = 8 +ALIASES = +OPTIMIZE_OUTPUT_FOR_C = YES +OPTIMIZE_OUTPUT_JAVA = NO +SUBGROUPING = YES +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- +EXTRACT_ALL = NO +EXTRACT_PRIVATE = NO +EXTRACT_STATIC = YES +EXTRACT_LOCAL_CLASSES = NO +EXTRACT_LOCAL_METHODS = NO +HIDE_UNDOC_MEMBERS = YES +HIDE_UNDOC_CLASSES = YES +HIDE_FRIEND_COMPOUNDS = NO +HIDE_IN_BODY_DOCS = NO +INTERNAL_DOCS = NO +CASE_SENSE_NAMES = YES +HIDE_SCOPE_NAMES = NO +SHOW_INCLUDE_FILES = YES +INLINE_INFO = YES +SORT_MEMBER_DOCS = YES +SORT_BRIEF_DOCS = NO +SORT_BY_SCOPE_NAME = NO +GENERATE_TODOLIST = YES +GENERATE_TESTLIST = YES +GENERATE_BUGLIST = NO +GENERATE_DEPRECATEDLIST= NO +ENABLED_SECTIONS = +MAX_INITIALIZER_LINES = 30 +SHOW_USED_FILES = NO +SHOW_DIRECTORIES = YES +FILE_VERSION_FILTER = +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- +QUIET = NO +WARNINGS = YES +WARN_IF_UNDOCUMENTED = NO +WARN_IF_DOC_ERROR = YES +WARN_NO_PARAMDOC = NO +WARN_FORMAT = "$file:$line: $text" +WARN_LOGFILE = +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- +INPUT = ../adc.c \ + ../beep.c \ + ../key.c \ + ../lcd.c \ + ../menu.c \ + ../raven3290.c \ + ../sleep.c \ + ../temp.c \ + ../timer.c \ + ../uart.c \ + ../adc.h \ + ../beep.h \ + ../key.h \ + ../lcd.h \ + ../menu.h \ + ../main.h \ + ../sleep.h \ + ../temp.h \ + ../timer.h \ + ../uart.h + +FILE_PATTERNS = +RECURSIVE = NO +EXCLUDE = +EXCLUDE_SYMLINKS = NO +EXCLUDE_PATTERNS = +EXAMPLE_PATH = +EXAMPLE_PATTERNS = +EXAMPLE_RECURSIVE = NO +IMAGE_PATH = ./pics +INPUT_FILTER = +FILTER_PATTERNS = +FILTER_SOURCE_FILES = NO +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- +SOURCE_BROWSER = YES +INLINE_SOURCES = NO +STRIP_CODE_COMMENTS = NO +REFERENCED_BY_RELATION = YES +REFERENCES_RELATION = YES +VERBATIM_HEADERS = YES +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- +ALPHABETICAL_INDEX = YES +COLS_IN_ALPHA_INDEX = 5 +IGNORE_PREFIX = +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- +GENERATE_HTML = YES +HTML_OUTPUT = html +HTML_FILE_EXTENSION = .html +HTML_HEADER = +HTML_FOOTER = +HTML_STYLESHEET = +HTML_ALIGN_MEMBERS = YES +GENERATE_HTMLHELP = YES +CHM_FILE = +HHC_LOCATION = +GENERATE_CHI = YES +BINARY_TOC = YES +TOC_EXPAND = YES +DISABLE_INDEX = NO +ENUM_VALUES_PER_LINE = 4 +GENERATE_TREEVIEW = YES +TREEVIEW_WIDTH = 250 +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- +GENERATE_LATEX = YES +LATEX_OUTPUT = latex +LATEX_CMD_NAME = latex +MAKEINDEX_CMD_NAME = makeindex +COMPACT_LATEX = YES +PAPER_TYPE = a4wide +EXTRA_PACKAGES = +LATEX_HEADER = +PDF_HYPERLINKS = YES +USE_PDFLATEX = YES +LATEX_BATCHMODE = NO +LATEX_HIDE_INDICES = NO +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- +GENERATE_RTF = NO +RTF_OUTPUT = rtf +COMPACT_RTF = NO +RTF_HYPERLINKS = NO +RTF_STYLESHEET_FILE = +RTF_EXTENSIONS_FILE = +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- +GENERATE_MAN = NO +MAN_OUTPUT = man +MAN_EXTENSION = .3 +MAN_LINKS = NO +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- +GENERATE_XML = NO +XML_OUTPUT = xml +XML_SCHEMA = +XML_DTD = +XML_PROGRAMLISTING = YES +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- +GENERATE_AUTOGEN_DEF = NO +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- +GENERATE_PERLMOD = NO +PERLMOD_LATEX = NO +PERLMOD_PRETTY = YES +PERLMOD_MAKEVAR_PREFIX = +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- +ENABLE_PREPROCESSING = YES +MACRO_EXPANSION = NO +EXPAND_ONLY_PREDEF = NO +SEARCH_INCLUDES = YES +INCLUDE_PATH = +INCLUDE_FILE_PATTERNS = +PREDEFINED = DOXYGEN +EXPAND_AS_DEFINED = +SKIP_FUNCTION_MACROS = YES +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- +TAGFILES = +GENERATE_TAGFILE = +ALLEXTERNALS = NO +EXTERNAL_GROUPS = YES +PERL_PATH = /usr/bin/perl +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- +CLASS_DIAGRAMS = NO +HIDE_UNDOC_RELATIONS = YES +HAVE_DOT = YES +CLASS_GRAPH = NO +COLLABORATION_GRAPH = NO +GROUP_GRAPHS = NO +UML_LOOK = NO +TEMPLATE_RELATIONS = NO +INCLUDE_GRAPH = NO +INCLUDED_BY_GRAPH = NO +CALL_GRAPH = NO +GRAPHICAL_HIERARCHY = NO +DIRECTORY_GRAPH = NO +DOT_IMAGE_FORMAT = png +DOT_PATH = +DOTFILE_DIRS = +MAX_DOT_GRAPH_WIDTH = 1024 +MAX_DOT_GRAPH_HEIGHT = 1024 +MAX_DOT_GRAPH_DEPTH = 0 +DOT_TRANSPARENT = NO +DOT_MULTI_TARGETS = NO +GENERATE_LEGEND = YES +DOT_CLEANUP = YES +#--------------------------------------------------------------------------- +# Configuration::additions related to the search engine +#--------------------------------------------------------------------------- +SEARCHENGINE = NO diff --git a/platform/avr-ravenlcd/lcd.c b/platform/avr-ravenlcd/lcd.c index 3c4f9e230..0fe92b80a 100644 --- a/platform/avr-ravenlcd/lcd.c +++ b/platform/avr-ravenlcd/lcd.c @@ -411,7 +411,7 @@ lcd_num_putdec(int numb, lcd_padding_t padding) } /* Convert to BCD */ - bcd = itobcd(ABS(numb)); + bcd = itobcd(abs(numb)); /* Print */ return lcd_num_print(bcd, (bool)(numb<0), padding); diff --git a/platform/avr-ravenlcd/menu.c b/platform/avr-ravenlcd/menu.c index a5cda40a9..3069d7825 100644 --- a/platform/avr-ravenlcd/menu.c +++ b/platform/avr-ravenlcd/menu.c @@ -66,6 +66,27 @@ bool auto_temp=true; /*---------------------------------------------------------------------------*/ +/** + * \brief This will reliably set or clear the JTD bit of the MCUCR register. + * + * \param x True to set the JTD bit disabling JTAG. +*/ +#define jtd_set(x)\ +{\ + __asm__ __volatile__ (\ + "in __tmp_reg__,__SREG__" "\n\t"\ + "cli" "\n\t"\ + "out %1, %0" "\n\t"\ + "out __SREG__, __tmp_reg__" "\n\t"\ + "out %1, %0" "\n\t"\ + : /* no outputs */\ + : "r" ((uint8_t)(x ? (1<ravenlcd_329025-Apr-2008 11:07:1628-Aug-2008 17:12:52241025-Apr-2008 11:07:1644, 13, 0, 569AVR GCCdefault\ravenlcd_3290.elfC:\Atmel\cisco\branches\macipv6\apps\ravenlcd_3290\JTAGICE mkIIATmega3290PfalseR00R01R02R03R04R05R06R07R08R09R10R11R12R13R14R15R16R17R18R19R20R21R22R23R24R25R26R27R28R29R30R31Auto00menuresultstrpnpayloadnumb0uart.cadc.ckey.clcd.cmenu.craven3290.csleep.cbeep.ctimer.ctemp.cdefault\ravenlcd_3290.lssdefault\ravenlcd_3290.mapdefaultNOatmega3290p111ravenlcd_3290.elfdefault\0.\-Wall -gdwarf-2 -std=gnu99 -DF_CPU=8000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enumsdefault1C:\Programme\WinAVR-20080610\bin\avr-gcc.exeC:\Programme\WinAVR-20080610\utils\bin\make.exeC:\Atmel\cisco\branches\macipv6\apps\ravenlcd_3290\uart.cC:\Atmel\cisco\branches\macipv6\apps\ravenlcd_3290\adc.cC:\Atmel\cisco\branches\macipv6\apps\ravenlcd_3290\key.cC:\Atmel\cisco\branches\macipv6\apps\ravenlcd_3290\lcd.cC:\Atmel\cisco\branches\macipv6\apps\ravenlcd_3290\menu.cC:\Atmel\cisco\branches\macipv6\apps\ravenlcd_3290\raven3290.cC:\Atmel\cisco\branches\macipv6\apps\ravenlcd_3290\sleep.cC:\Atmel\cisco\branches\macipv6\apps\ravenlcd_3290\beep.cC:\Atmel\cisco\branches\macipv6\apps\ravenlcd_3290\timer.cC:\Atmel\cisco\branches\macipv6\apps\ravenlcd_3290\temp.c00000raven3290.c25900001sleep.c25700002lcd.c25900003timer.c25900004adc.c25900005menu.c25900006temp.c25900007key.c25900008uart.c259 +ravenlcd_329025-Apr-2008 11:07:1628-Aug-2008 17:12:52241025-Apr-2008 11:07:1644, 13, 0, 569AVR GCCdefault\ravenlcd_3290.elfC:\Atmel\cisco\branches\macipv6\apps\ravenlcd_3290\JTAGICE mkIIATmega3290PfalseR00R01R02R03R04R05R06R07R08R09R10R11R12R13R14R15R16R17R18R19R20R21R22R23R24R25R26R27R28R29R30R31Auto00menuresultstrpnpayloadnumb0uart.cadc.ckey.clcd.cmenu.craven3290.csleep.cbeep.ctimer.ctemp.cdefault\ravenlcd_3290.lssdefault\ravenlcd_3290.mapdefaultNOatmega3290p111ravenlcd_3290.elfdefault\0.\-Wall -gdwarf-2 -std=gnu99 -DF_CPU=8000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enumsdefault1C:\Programme\WinAVR-20080610\bin\avr-gcc.exeC:\Programme\WinAVR-20080610\utils\bin\make.exeC:\Atmel\cisco\branches\macipv6\apps\ravenlcd_3290\uart.cC:\Atmel\cisco\branches\macipv6\apps\ravenlcd_3290\adc.cC:\Atmel\cisco\branches\macipv6\apps\ravenlcd_3290\key.cC:\Atmel\cisco\branches\macipv6\apps\ravenlcd_3290\lcd.cC:\Atmel\cisco\branches\macipv6\apps\ravenlcd_3290\menu.cC:\Atmel\cisco\branches\macipv6\apps\ravenlcd_3290\raven3290.cC:\Atmel\cisco\branches\macipv6\apps\ravenlcd_3290\sleep.cC:\Atmel\cisco\branches\macipv6\apps\ravenlcd_3290\beep.cC:\Atmel\cisco\branches\macipv6\apps\ravenlcd_3290\timer.cC:\Atmel\cisco\branches\macipv6\apps\ravenlcd_3290\temp.c00000raven3290.c25900001sleep.c25700002lcd.c25900003timer.c25900004adc.c25900005menu.c25900006temp.c25900007key.c25900008uart.c259 diff --git a/platform/avr-ravenlcd/temp.c b/platform/avr-ravenlcd/temp.c index cf7c20c31..e7e8243b6 100644 --- a/platform/avr-ravenlcd/temp.c +++ b/platform/avr-ravenlcd/temp.c @@ -58,7 +58,7 @@ static uint16_t temp_table_celcius[]; static uint16_t temp_table_fahrenheit[]; #else /* !DOXYGEN */ /** Celcius temperatures (ADC-value) from -15 to 60 degrees */ -static uint16_t temp_table_celcius[] PROGMEM = { +static const uint16_t temp_table_celcius[] PROGMEM = { 923,917,911,904,898,891,883,876,868,860,851,843,834,825,815, 806,796,786,775,765,754,743,732,720,709,697,685,673,661,649, 636,624,611,599,586,574,562,549,537,524,512,500,488,476,464, @@ -68,7 +68,7 @@ static uint16_t temp_table_celcius[] PROGMEM = { }; /** Fahrenheit temperatures (ADC-value) from 0 to 140 degrees */ -static uint16_t temp_table_fahrenheit[] PROGMEM = { +static const uint16_t temp_table_fahrenheit[] PROGMEM = { 938, 935, 932, 929, 926, 923, 920, 916, 913, 909, 906, 902, 898, 894, 891, 887, 882, 878, 874, 870, 865, 861, 856, 851, 847, 842, 837, 832, 827, 822, 816, 811, 806, 800, 795, 789, 783, 778, 772, @@ -99,7 +99,7 @@ bool temp_initialized = false; * * \return EOF on error */ -static int find_temp(int16_t value, uint16_t* array, int count); +static int find_temp(int16_t value, const uint16_t* array, int count); /*---------------------------------------------------------------------------*/ @@ -232,7 +232,7 @@ temp_get(temp_unit_t unit) * \return EOF on error */ static int -find_temp(int16_t value, uint16_t* array, int count) +find_temp(int16_t value, const uint16_t* array, int count) { int i = 0; int table_val = 0; diff --git a/platform/avr-ravenusb/contiki-raven-main.c b/platform/avr-ravenusb/contiki-raven-main.c index 6e7f9d28c..e2ca7711e 100644 --- a/platform/avr-ravenusb/contiki-raven-main.c +++ b/platform/avr-ravenusb/contiki-raven-main.c @@ -132,7 +132,7 @@ init(void) { } void mac_LowpanToEthernet(void); -static void +static int output(void) { // if(uip_ipaddr_cmp(&last_sender, &UIP_IP_BUF->srcipaddr)) { @@ -142,6 +142,7 @@ output(void) PRINTD("SUT: %u\n", uip_len); mac_LowpanToEthernet(); //bounceback trap is done in lowpanToEthernet // } + return 0; } const struct uip_fallback_interface rpl_interface = { init, output diff --git a/platform/c128/contiki-conf.h b/platform/c128/contiki-conf.h index 53a6878f9..057d6473d 100644 --- a/platform/c128/contiki-conf.h +++ b/platform/c128/contiki-conf.h @@ -42,7 +42,11 @@ #define CTK_CONF_WIDGETUP_KEY CH_F5 #define CTK_CONF_WIDGETDOWN_KEY CH_F7 +#if WITH_80COL #define MOUSE_CONF_XTOC(x) ((x) / 4) +#else +#define MOUSE_CONF_XTOC(x) ((x) / 8) +#endif #define MOUSE_CONF_YTOC(y) ((y) / 8) #define BORDERCOLOR COLOR_BLACK @@ -55,20 +59,23 @@ #define WIDGETCOLOR_FWIN COLOR_WHITE #define WIDGETCOLOR_HLINK COLOR_CYAN -#define EMAIL_CONF_WIDTH 79 -#define EMAIL_CONF_HEIGHT 20 -#define EMAIL_CONF_ERASE 0 - -#define FTP_CONF_WIDTH 38 -#define FTP_CONF_HEIGHT 22 - +#if WITH_80COL #define IRC_CONF_WIDTH 80 +#else +#define IRC_CONF_WIDTH 40 +#endif #define IRC_CONF_HEIGHT 24 #ifndef TELNETD_CONF_MAX_IDLE_TIME #define TELNETD_CONF_MAX_IDLE_TIME 300 #endif +#if WITH_80COL +#define WWW_CONF_WEBPAGE_WIDTH 80 +#else +#define WWW_CONF_WEBPAGE_WIDTH 40 +#endif +#define WWW_CONF_WEBPAGE_HEIGHT 20 #define WWW_CONF_HISTORY_SIZE 0 #define WWW_CONF_FORMS 0 #define WWW_CONF_PAGEATTRIB_SIZE 1500 diff --git a/platform/c128/contiki-main.c b/platform/c128/contiki-main.c index d28f24f75..a1856d405 100644 --- a/platform/c128/contiki-main.c +++ b/platform/c128/contiki-main.c @@ -32,8 +32,6 @@ * */ -#include - #include "contiki-net.h" #include "ctk/ctk.h" #include "sys/log.h" @@ -79,7 +77,9 @@ main(void) #endif /* WITH_ARGS */ +#if WITH_80COL videomode(VIDEOMODE_80COL); +#endif /* WITH_80COL */ process_init(); @@ -106,24 +106,6 @@ main(void) } #endif -#if (WITH_GUI && WITH_MOUSE) - { - static const uint8_t mouse_sprite[64] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x0F, 0xE0, 0x00, 0x0F, 0xC0, 0x00, 0x0F, - 0x80, 0x00, 0x0F, 0xC0, 0x00, 0x0D, 0xE0, 0x00, - 0x08, 0xF0, 0x00, 0x00, 0x78, 0x00, 0x00, 0x3C, - 0x00, 0x00, 0x1E, 0x00, 0x00, 0x0F, 0x00, 0x00, - 0x07, 0x80, 0x00, 0x03, 0x80, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; - - memcpy((void*)0x0E00, mouse_sprite, sizeof(mouse_sprite)); - *(uint8_t*)0x07F8 = 0x0E00 / 64; - VIC.spr0_color = COLOR_WHITE; - } -#endif /* WITH_GUI && WITH_MOUSE */ - procinit_init(); process_start((struct process *)ðernet_process, (void *)ethernet_config); diff --git a/platform/c128/lib/pfs.S b/platform/c128/lib/pfs.S index a2edb1cfd..acec45959 100644 --- a/platform/c128/lib/pfs.S +++ b/platform/c128/lib/pfs.S @@ -64,16 +64,13 @@ SETNAM = $FFBD CLALL = $FFE7 WRITE = $DEF1 READ = $DEF4 -;--------------------------------------------------------------------- - .bss - -cmdc: .res 1 -flags: .res 10 ;--------------------------------------------------------------------- .data illchr: .byte $3A, $2A, $3F, $3D ;illegal chars pw: .byte $2C, $50, $2C, $57 ;,p,w +cmdc: .byte 0 +flags: .res 10 ;--------------------------------------------------------------------- .segment "INIT" diff --git a/platform/c64/Makefile.c64 b/platform/c64/Makefile.c64 index ed548463b..bf0197565 100644 --- a/platform/c64/Makefile.c64 +++ b/platform/c64/Makefile.c64 @@ -38,6 +38,10 @@ include $(CONTIKI_CPU)/Makefile.6502 CFLAGS += -DWITH_PETSCII +ifeq ($(findstring WITH_80COL,$(DEFINES)),WITH_80COL) + LDFLAGS += c64-soft80.o +endif + ifeq ($(MAKECMDGOALS),disk) ifndef C1541 ${error C1541 not defined! You must specify where VICE c1541 resides} diff --git a/platform/c64/contiki-conf.h b/platform/c64/contiki-conf.h index bfaf1c956..7d5a8d070 100644 --- a/platform/c64/contiki-conf.h +++ b/platform/c64/contiki-conf.h @@ -42,7 +42,11 @@ #define CTK_CONF_WIDGETUP_KEY CH_F5 #define CTK_CONF_WIDGETDOWN_KEY CH_F7 +#if WITH_80COL +#define MOUSE_CONF_XTOC(x) ((x) / 4) +#else #define MOUSE_CONF_XTOC(x) ((x) / 8) +#endif #define MOUSE_CONF_YTOC(y) ((y) / 8) #define BORDERCOLOR COLOR_BLACK @@ -55,21 +59,23 @@ #define WIDGETCOLOR_FWIN COLOR_GRAY3 #define WIDGETCOLOR_HLINK COLOR_CYAN -#define EMAIL_CONF_WIDTH 39 -#define EMAIL_CONF_HEIGHT 20 -#define EMAIL_CONF_ERASE 0 - -#define FTP_CONF_WIDTH 18 -#define FTP_CONF_HEIGHT 22 - +#if WITH_80COL +#define IRC_CONF_WIDTH 80 +#else #define IRC_CONF_WIDTH 40 +#endif #define IRC_CONF_HEIGHT 24 #ifndef TELNETD_CONF_MAX_IDLE_TIME #define TELNETD_CONF_MAX_IDLE_TIME 300 #endif +#if WITH_80COL +#define WWW_CONF_WEBPAGE_WIDTH 80 +#else #define WWW_CONF_WEBPAGE_WIDTH 40 +#endif +#define WWW_CONF_WEBPAGE_HEIGHT 20 #define WWW_CONF_HISTORY_SIZE 4 #define WWW_CONF_WGET_EXEC(url) exec("wget", url) diff --git a/platform/c64/contiki-main.c b/platform/c64/contiki-main.c index b5cc59a9c..f2b4aae18 100644 --- a/platform/c64/contiki-main.c +++ b/platform/c64/contiki-main.c @@ -32,7 +32,7 @@ * */ -#include +#include #include "contiki-net.h" #include "ctk/ctk.h" @@ -79,6 +79,10 @@ main(void) #endif /* WITH_ARGS */ +#if WITH_80COL + _heapadd((void *)0x0400, 0x0400); +#endif /* WITH_80COL */ + process_init(); #if 1 @@ -104,24 +108,6 @@ main(void) } #endif -#if (WITH_GUI && WITH_MOUSE) - { - static const uint8_t mouse_sprite[64] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x0F, 0xE0, 0x00, 0x0F, 0xC0, 0x00, 0x0F, - 0x80, 0x00, 0x0F, 0xC0, 0x00, 0x0D, 0xE0, 0x00, - 0x08, 0xF0, 0x00, 0x00, 0x78, 0x00, 0x00, 0x3C, - 0x00, 0x00, 0x1E, 0x00, 0x00, 0x0F, 0x00, 0x00, - 0x07, 0x80, 0x00, 0x03, 0x80, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; - - memcpy((void*)0x0340, mouse_sprite, sizeof(mouse_sprite)); - *(uint8_t*)0x07F8 = 0x0340 / 64; - VIC.spr0_color = COLOR_WHITE; - } -#endif /* WITH_GUI && WITH_MOUSE */ - procinit_init(); process_start((struct process *)ðernet_process, (void *)ethernet_config); diff --git a/platform/c64/lib/pfs.S b/platform/c64/lib/pfs.S index 02f9744ec..35e64f652 100644 --- a/platform/c64/lib/pfs.S +++ b/platform/c64/lib/pfs.S @@ -64,16 +64,13 @@ SETNAM = $FFBD CLALL = $FFE7 WRITE = $DEF1 READ = $DEF4 -;--------------------------------------------------------------------- - .bss - -cmdc: .res 1 -flags: .res 10 ;--------------------------------------------------------------------- .data illchr: .byte $3A, $2A, $3F, $3D ;illegal chars pw: .byte $2C, $50, $2C, $57 ;,p,w +cmdc: .byte 0 +flags: .res 10 ;--------------------------------------------------------------------- .segment "INIT" diff --git a/platform/cc2530dk/contiki-main.c b/platform/cc2530dk/contiki-main.c index 88c7763a4..164481512 100644 --- a/platform/cc2530dk/contiki-main.c +++ b/platform/cc2530dk/contiki-main.c @@ -335,8 +335,7 @@ main(void) CC_NON_BANKED if(SLEEPCMD & SLEEP_MODE0) { #endif /* LPM_MODE==LPM_MODE_PM2 */ - ENERGEST_OFF(ENERGEST_TYPE_CPU); - ENERGEST_ON(ENERGEST_TYPE_LPM); + ENERGEST_SWITCH(ENERGEST_TYPE_CPU, ENERGEST_TYPE_LPM); /* We are only interested in IRQ energest while idle or in LPM */ ENERGEST_IRQ_RESTORE(irq_energest); @@ -352,8 +351,7 @@ main(void) CC_NON_BANKED /* Remember energest IRQ for next pass */ ENERGEST_IRQ_SAVE(irq_energest); - ENERGEST_ON(ENERGEST_TYPE_CPU); - ENERGEST_OFF(ENERGEST_TYPE_LPM); + ENERGEST_SWITCH(ENERGEST_TYPE_LPM, ENERGEST_TYPE_CPU); #if (LPM_MODE==LPM_MODE_PM2) SLEEPCMD &= ~SLEEP_OSC_PD; /* Make sure both HS OSCs are on */ diff --git a/platform/cc2538dk/README.md b/platform/cc2538dk/README.md index dde73842e..295777c8e 100644 --- a/platform/cc2538dk/README.md +++ b/platform/cc2538dk/README.md @@ -30,6 +30,7 @@ In terms of hardware support, the following drivers have been implemented: * General-Purpose Timers. NB: GPT0 is in use by the platform code, the remaining GPTs are available for application development. * ADC * Cryptoprocessor (AES-CCM-256, SHA-256) + * Public Key Accelerator (ECDH, ECDSA) * SmartRF06 EB and BB peripherals * LEDs * Buttons diff --git a/platform/cooja-ip64/subplatform-conf.h b/platform/cooja-ip64/subplatform-conf.h index 14afc2ad2..773100051 100644 --- a/platform/cooja-ip64/subplatform-conf.h +++ b/platform/cooja-ip64/subplatform-conf.h @@ -1,54 +1,54 @@ -/* - * Copyright (c) 2013, Thingsquare, http://www.thingsquare.com/. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the copyright holder nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ - -#ifndef __PLATFORM_CONF_H__ -#define __PLATFORM_CONF_H__ - -#if WITH_IP64 -#define WITH_SLIP 1 -#ifndef UIP_FALLBACK_INTERFACE -#define UIP_FALLBACK_INTERFACE ip64_uip_fallback_interface -#endif -#endif /* WITH_IP64 */ - -#ifndef UIP_CONF_ND6_RA_RDNSS -#define UIP_CONF_ND6_RA_RDNSS 1 -#endif - -#ifndef UIP_CONF_ND6_SEND_RA -#define UIP_CONF_ND6_SEND_RA 1 -#endif - -#ifndef UIP_CONF_ROUTER -#define UIP_CONF_ROUTER 1 -#endif - -#endif /* __PLATFORM_CONF_H__ */ +/* + * Copyright (c) 2013, Thingsquare, http://www.thingsquare.com/. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +#ifndef __PLATFORM_CONF_H__ +#define __PLATFORM_CONF_H__ + +#if WITH_IP64 +#define WITH_SLIP 1 +#ifndef UIP_FALLBACK_INTERFACE +#define UIP_FALLBACK_INTERFACE ip64_uip_fallback_interface +#endif +#endif /* WITH_IP64 */ + +#ifndef UIP_CONF_ND6_RA_RDNSS +#define UIP_CONF_ND6_RA_RDNSS 1 +#endif + +#ifndef UIP_CONF_ND6_SEND_RA +#define UIP_CONF_ND6_SEND_RA 1 +#endif + +#ifndef UIP_CONF_ROUTER +#define UIP_CONF_ROUTER 1 +#endif + +#endif /* __PLATFORM_CONF_H__ */ diff --git a/platform/cooja/cfs/cfs-cooja.c b/platform/cooja/cfs/cfs-cooja.c index 0119ea5a0..3150517b2 100644 --- a/platform/cooja/cfs/cfs-cooja.c +++ b/platform/cooja/cfs/cfs-cooja.c @@ -29,6 +29,7 @@ * This file is part of the Contiki operating system. * */ +#include #include #include "lib/simEnvChange.h" #include "cfs/cfs.h" @@ -50,6 +51,7 @@ const struct simInterface cfs_interface; // COOJA variables #define CFS_BUF_SIZE 4000 /* Configure CFS size here and in ContikiCFS.java */ char simCFSData[CFS_BUF_SIZE] = { 0 }; +int simCFSSize = 0; char simCFSChanged = 0; int simCFSRead = 0; int simCFSWritten = 0; @@ -61,11 +63,15 @@ cfs_open(const char *n, int f) if(file.flag == FLAG_FILE_CLOSED) { file.flag = FLAG_FILE_OPEN; file.access = f; - if(f & CFS_APPEND) { - file.fileptr = file.endptr; - } else { - file.fileptr = 0; - } + file.fileptr = 0; + file.endptr = simCFSSize; + if(f & CFS_WRITE) { + if(f & CFS_APPEND) { + file.fileptr = file.endptr; + } else { + file.endptr = 0; + } + } return 0; } else { return -1; @@ -110,6 +116,9 @@ cfs_write(int f, const void *buf, unsigned int len) if(file.fileptr > file.endptr) { file.endptr = file.fileptr; } + if(file.fileptr > simCFSSize) { + simCFSSize = file.fileptr; + } return len; } else { return -1; diff --git a/platform/cooja/contiki-conf.h b/platform/cooja/contiki-conf.h index d4f3979e9..04f1c4d43 100644 --- a/platform/cooja/contiki-conf.h +++ b/platform/cooja/contiki-conf.h @@ -183,7 +183,6 @@ #define CC_CONF_REGISTER_ARGS 1 #define CC_CONF_FUNCTION_POINTER_ARGS 1 -#define CC_CONF_FASTCALL #define CC_CONF_VA_ARGS 1 #define CC_CONF_INLINE inline diff --git a/platform/cooja/dev/eeprom.c b/platform/cooja/dev/eeprom.c index 8a40fa3d8..026c10f26 100644 --- a/platform/cooja/dev/eeprom.c +++ b/platform/cooja/dev/eeprom.c @@ -28,6 +28,7 @@ * */ +#include #include "dev/eeprom.h" #include "lib/simEnvChange.h" diff --git a/platform/cooja/dev/rs232.c b/platform/cooja/dev/rs232.c index 51ee5b6a9..08257b555 100644 --- a/platform/cooja/dev/rs232.c +++ b/platform/cooja/dev/rs232.c @@ -46,6 +46,7 @@ char simSerialReceivingFlag; static int (* input_handler)(unsigned char) = NULL; +void simlog_char(char c); /*-----------------------------------------------------------------------------------*/ void rs232_init(void) { } /*-----------------------------------------------------------------------------------*/ diff --git a/platform/cooja/net/uip-driver.c b/platform/cooja/net/uip-driver.c index 1b2fb5c4d..896550f93 100644 --- a/platform/cooja/net/uip-driver.c +++ b/platform/cooja/net/uip-driver.c @@ -45,7 +45,11 @@ /*--------------------------------------------------------------------*/ uint8_t +#if NETSTACK_CONF_WITH_IPV6 +uip_driver_send(const uip_lladdr_t *addr) +#else uip_driver_send(void) +#endif { packetbuf_copyfrom(&uip_buf[UIP_LLH_LEN], uip_len); diff --git a/platform/cooja/net/uip-driver.h b/platform/cooja/net/uip-driver.h index 2a9c4b191..a711313b8 100644 --- a/platform/cooja/net/uip-driver.h +++ b/platform/cooja/net/uip-driver.h @@ -41,7 +41,11 @@ #include "net/netstack.h" +#if NETSTACK_CONF_WITH_IPV6 +uint8_t uip_driver_send(const uip_lladdr_t *); +#else uint8_t uip_driver_send(void); +#endif extern const struct network_driver uip_driver; diff --git a/platform/econotag/apps/ecc/Makefile.ecc b/platform/econotag/apps/ecc/Makefile.ecc new file mode 100644 index 000000000..44dd816c2 --- /dev/null +++ b/platform/econotag/apps/ecc/Makefile.ecc @@ -0,0 +1 @@ +ecc_src = ecc.c diff --git a/platform/econotag/apps/ecc/ecc.c b/platform/econotag/apps/ecc/ecc.c new file mode 100644 index 000000000..8d8598d8b --- /dev/null +++ b/platform/econotag/apps/ecc/ecc.c @@ -0,0 +1,1016 @@ +/* + * Copyright (c) 2015, Lars Schmertmann , + * Jens Trillmann . + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * + * This file is part of the Contiki operating system. + * + */ + +#include "ecc.h" + +#include + +#define X 0 +#define Y 8 +#define Z 16 + +const uint32_t ecc_prime_m[8] = { 0xffffffff, 0xffffffff, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0xffffffff }; +const uint32_t ecc_prime_r[8] = { 0x00000001, 0x00000000, 0x00000000, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffffffe, 0x00000000 }; + +/*---------------------------------------------------------------------------*/ + +#define DEBUG 0 +#define SELF_TEST 0 + +#if DEBUG +#include +#define PRINTF(...) printf(__VA_ARGS__) +#define PRINTHEX(...) print_hex(__VA_ARGS__) +static void +print_hex(const char *name, const uint32_t *d, uint32_t l) +{ + printf("%s:", name); + int i; + for(i = l - 1; i >= 0; --i) { + printf(" %08X", d[i]); + } + printf("\n"); +} +#else +#define PRINTF(...) +#define PRINTHEX(...) +#endif + +#if SELF_TEST +#include +static void selfTest(); +#endif + +/* private prototypes ----------------------------------------------------- */ + +/* simple functions to work with 256 bit numbers */ +static void ecc_setZero(uint32_t *a); +static void ecc_copy(uint32_t *dst, const uint32_t *src); +static uint32_t ecc_isX(const uint32_t *a, const uint32_t x); +static void ecc_rshift(uint32_t *a); +static void ecc_replace(uint32_t bit, uint32_t *dst, uint32_t *src); +static uint32_t ecc_add(uint32_t *result, const uint32_t *a, const uint32_t *b); +static uint32_t ecc_sub(uint32_t *result, const uint32_t *a, const uint32_t *b); +static void ecc_mult(uint32_t *result, const uint32_t *x, const uint32_t *y, const uint32_t length); + +/* ecc_field_ModP-Helper */ +__attribute__((always_inline)) static void ecc_form_s1(uint32_t *dst, const uint32_t *src); +__attribute__((always_inline)) static void ecc_form_s2(uint32_t *dst, const uint32_t *src); +__attribute__((always_inline)) static void ecc_form_s3(uint32_t *dst, const uint32_t *src); +__attribute__((always_inline)) static void ecc_form_s4(uint32_t *dst, const uint32_t *src); +__attribute__((always_inline)) static void ecc_form_d1(uint32_t *dst, const uint32_t *src); +__attribute__((always_inline)) static void ecc_form_d2(uint32_t *dst, const uint32_t *src); +__attribute__((always_inline)) static void ecc_form_d3(uint32_t *dst, const uint32_t *src); +__attribute__((always_inline)) static void ecc_form_d4(uint32_t *dst, const uint32_t *src); + +/* field functions for 256 bit numbers */ +static void ecc_field_Add(uint32_t *result, const uint32_t *x, const uint32_t *y); +static void ecc_field_Sub(uint32_t *result, const uint32_t *x, const uint32_t *y); +static void ecc_field_ModP(uint32_t *result, const uint32_t *T); +static void ecc_field_Mult(uint32_t *result, const uint32_t *A, const uint32_t *B); +static void ecc_field_Inv(uint32_t *result, const uint32_t *A); + +/* new projective stuff */ +static void ecc_projective_double(uint32_t *val); +static void ecc_projective_add(uint32_t *result, const uint32_t *val_1, const uint32_t *x_2, const uint32_t *y_2, const uint32_t *z_2); + +/* public functions -------------------------------------------------------- */ + +int32_t +ecc_compare(const uint32_t *a, const uint32_t *b) +{ + int32_t r = 0; + uint32_t i = 8; + while(i--) { + uint32_t neq = (a[i] != b[i]); + int32_t greater = (a[i] > b[i] ? 1 : -1); + r ^= ((-(!r && neq)) & (r ^ greater)); + } + return r; +} +void +ecc_ec_mult(uint32_t *resultx, uint32_t *resulty, const uint32_t *px, const uint32_t *py, const uint32_t *secret) +{ +#if SELF_TEST + selfTest(); +#endif + + PRINTHEX("PX", px, 8); + PRINTHEX("PY", py, 8); + PRINTHEX("SC", secret, 8); + + uint32_t Q[24]; + ecc_setZero(Q + X); + ecc_setZero(Q + Y); + ecc_setZero(Q + Z); + Q[Z] = 0x00000001; + + uint32_t pz[8]; + ecc_setZero(pz); + pz[0] = 0x00000001; + + uint32_t temp[24]; + + int i; + for(i = 255; i >= 0; --i) { + ecc_projective_double(Q); +/* PRINTHEX("QX", Q+X, 8); */ +/* PRINTHEX("QY", Q+Y, 8); */ +/* PRINTHEX("QZ", Q+Z, 8); */ + ecc_projective_add(temp, Q, px, py, pz); +/* PRINTHEX("QX", temp+X, 8); */ +/* PRINTHEX("QY", temp+Y, 8); */ +/* PRINTHEX("QZ", temp+Z, 8); */ + int current_bit = (secret[i / 32] >> (i % 32)) & 0x1; /* ((secret[i / 32]) & ((uint32_t)1 << (i % 32))); */ + ecc_replace(current_bit, Q, temp); +/* PRINTHEX("QX", Q+X, 8); */ +/* PRINTHEX("QY", Q+Y, 8); */ +/* PRINTHEX("QZ", Q+Z, 8); */ + } +/* PRINTHEX("QX", Q+X, 8); */ +/* PRINTHEX("QY", Q+Y, 8); */ +/* PRINTHEX("QZ", Q+Z, 8); */ + ecc_field_Inv(temp, Q + Z); + ecc_field_Mult(resultx, Q + X, temp); + ecc_field_Mult(resulty, Q + Y, temp); + PRINTHEX("RX", resultx, 8); + PRINTHEX("RY", resulty, 8); +} +/* private functions ------------------------------------------------------- */ + +static void +ecc_setZero(uint32_t *a) +{ + asm volatile ( + "mov r1, $0 \n\t" + "mov r2, r1 \n\t" + "mov r3, r2 \n\t" + "mov r4, r3 \n\t" + "stm %[a]!, {r1-r4} \n\t" + "stm %[a]!, {r1-r4} \n\t" + : /* out */ + : /* in */ + [a] "l" (a) + : /* clobber list */ + "r1", "r2", "r3", "r4", "memory" + ); +} +/* + * copy one array to another + */ +static void +ecc_copy(uint32_t *dst, const uint32_t *src) +{ + asm volatile ( + "ldm %[s]!, {r2-r5} \n\t" + "stm %[d]!, {r2-r5} \n\t" + "ldm %[s]!, {r2-r5} \n\t" + "stm %[d]!, {r2-r5} \n\t" + : /* out */ + : /* in */ + [d] "l" (dst), + [s] "l" (src) + : /* clobber list */ + "r2", "r3", "r4", "r5", "memory" + ); +} +static uint32_t +ecc_isX(const uint32_t *a, const uint32_t x) +{ + uint32_t r = (a[0] == x); + uint32_t n = 8; + while(--n) { + r &= (a[n] == 0); + } + return r; +} +static void +ecc_rshift(uint32_t *a) +{ + uint32_t index = 32; + uint32_t carry = 0; + + asm volatile ( + "0: \n\t" + "sub %[i], %[i], #4 \n\t" /* index -= 4 */ + "mov r4, %[c] \n\t" /* result = carry */ + "ldr r3, [%[a],%[i]] \n\t" /* value = a[index] */ + "lsl %[c], r3, #31 \n\t" /* carry = value << 31 */ + "lsr r3, r3, #1 \n\t" /* value >>= 1 */ + "orr r4, r4, r3 \n\t" /* result |= value */ + "str r4, [%[a],%[i]] \n\t" /* a[index] = result */ + "cmp %[i], $0 \n\t" /* index == 0 */ + "bne 0b \n\t" /* != ? next loop */ + : /* out */ + : /* in */ + [a] "r" (a), + [i] "r" (index), + [c] "r" (carry) + : /* clobber list */ + "r3", "r4", "memory" + ); +} +static void +ecc_replace(uint32_t bit, uint32_t *dst, uint32_t *src) +{ + bit = -bit; + int i; + for(i = 0; i < 24; i++) { + dst[i] ^= (bit & (dst[i] ^ src[i])); + } +} +static uint32_t +ecc_add(uint32_t *result, const uint32_t *a, const uint32_t *b) +{ + uint32_t carry; + + asm volatile ( + "ldm %[x]!, {r4,r5} \n\t" + "ldm %[y]!, {r6,r7} \n\t" + "add r4, r4, r6 \n\t" + "adc r5, r5, r7 \n\t" + "stm %[r]!, {r4,r5} \n\t" + "ldm %[x]!, {r4,r5} \n\t" + "ldm %[y]!, {r6,r7} \n\t" + "adc r4, r4, r6 \n\t" + "adc r5, r5, r7 \n\t" + "stm %[r]!, {r4,r5} \n\t" + "ldm %[x]!, {r4,r5} \n\t" + "ldm %[y]!, {r6,r7} \n\t" + "adc r4, r4, r6 \n\t" + "adc r5, r5, r7 \n\t" + "stm %[r]!, {r4,r5} \n\t" + "ldm %[x]!, {r4,r5} \n\t" + "ldm %[y]!, {r6,r7} \n\t" + "adc r4, r4, r6 \n\t" + "adc r5, r5, r7 \n\t" + "stm %[r]!, {r4,r5} \n\t" + "bcc 0f \n\t" + "mov %[c], #1 \n\t" + "b 1f \n\t" + "0: \n\t" + "mov %[c], $0 \n\t" + "1: \n\t" + : /* out */ + [c] "=l" (carry) + : /* in */ + [x] "l" (a), + [y] "l" (b), + [r] "l" (result) + : /* clobber list */ + "r4", "r5", "r6", "r7", "memory" + ); + + return carry; +} +static uint32_t +ecc_sub(uint32_t *result, const uint32_t *a, const uint32_t *b) +{ + uint32_t carry; + + asm volatile ( + "ldm %[x]!, {r4,r5} \n\t" + "ldm %[y]!, {r6,r7} \n\t" + "sub r4, r4, r6 \n\t" + "sbc r5, r5, r7 \n\t" + "stm %[r]!, {r4,r5} \n\t" + "ldm %[x]!, {r4,r5} \n\t" + "ldm %[y]!, {r6,r7} \n\t" + "sbc r4, r4, r6 \n\t" + "sbc r5, r5, r7 \n\t" + "stm %[r]!, {r4,r5} \n\t" + "ldm %[x]!, {r4,r5} \n\t" + "ldm %[y]!, {r6,r7} \n\t" + "sbc r4, r4, r6 \n\t" + "sbc r5, r5, r7 \n\t" + "stm %[r]!, {r4,r5} \n\t" + "ldm %[x]!, {r4,r5} \n\t" + "ldm %[y]!, {r6,r7} \n\t" + "sbc r4, r4, r6 \n\t" + "sbc r5, r5, r7 \n\t" + "stm %[r]!, {r4,r5} \n\t" + "bcs 0f \n\t" + "mov %[c], #1 \n\t" + "b 1f \n\t" + "0: \n\t" + "mov %[c], $0 \n\t" + "1: \n\t" + : /* out */ + [c] "=l" (carry) + : /* in */ + [x] "l" (a), + [y] "l" (b), + [r] "l" (result) + : /* clobber list */ + "r4", "r5", "r6", "r7", "memory" + ); + + return carry; +} +static void +ecc_mult(uint32_t *result, const uint32_t *x, const uint32_t *y, const uint32_t length) +{ + if(length == 1) { + /* Version 1: 56 Byte bigger as ASM-Version */ + /* uint64_t *r = (uint64_t *) result; */ + /* *r = (uint64_t) x[0] * (uint64_t) y[0]; */ + + /* Version 2: 56 Byte lesser as Version 1 but same speed */ + asm volatile ( + "ldrh r5, [%[x], $0] \n\t" /* r5 = (x[0] & 0x0000FFFF) */ + "ldrh r3, [%[y], $0] \n\t" /* r3 = (y[0] & 0x0000FFFF) */ + "mul r5, r3 \n\t" /* r5 *= r3 r5 = AB[0] */ + "ldrh r6, [%[x], #2] \n\t" /* r6 = (x[0] >> 16) */ + "mul r3, r6 \n\t" /* r3 *= r6 r3 = C[0] */ + "ldrh r4, [%[y], #2] \n\t" /* r4 = (y[0] >> 16) */ + "mul r6, r4 \n\t" /* r6 *= r4 r6 = AB[1] */ + /* %[y] is not longer needed - its called ry now */ + "ldrh %[y], [%[x], $0] \n\t" /* ry = (x[0] & 0x0000FFFF) */ + "mul r4, %[y] \n\t" /* r4 *= ry r4 = C[1] */ + "add %[y], r3, r4 \n\t" /* ry = r3 + r4 ry = C[0] + C[1] */ + /* C[1] (r4) is not longer needed */ + "mov r4, $0 \n\t" /* r4 = 0 */ + "bcc 0f \n\t" /* jump if carry clear */ + "mov r4, #1 \n\t" /* r4 = 1 */ + "lsl r4, r4, #16 \n\t" /* r4 <<= 16 */ + "0: \n\t" /* r4 = 0x000c0000 = (carry << 16) */ + "lsr r3, %[y], #16 \n\t" /* r3 = (ry >> 16) */ + "orr r4, r4, r3 \n\t" /* r4 |= r3 r4 = 0x000c'ryh' = (r4 | ry >> 16) */ + "lsl r3, %[y], #16 \n\t" /* r3 = (ry << 16) r3 = 0x'ryl'0000 = (ry << 16) */ + "add r3, r3, r5 \n\t" + "adc r4, r4, r6 \n\t" + "stm %[r]!, {r3, r4} \n\t" + : /* out */ + : /* in */ + [x] "l" (x), + [y] "l" (y), + [r] "l" (result) + : /* clobber list */ + "r3", "r4", "r5", "r6", "memory" + ); + } else { + uint32_t carry; + uint32_t C[length * 2]; + ecc_mult(result, x, y, length / 2); + ecc_mult(result + length, x + (length / 2), y + (length / 2), length / 2); + ecc_mult(C, x, y + (length / 2), length / 2); + ecc_mult(C + length, x + (length / 2), y, length / 2); + if(length == 8) { + carry = ecc_add(C, C, C + length); + } else { + asm volatile ( + "cmp %[l], #2 \n\t" + "beq .add2 \n\t" + /* ASM for: ecc_add(C, C, C + 4, 4); */ + "mov %[l], %[a] \n\t" + "ldm %[a]!, {r3-r6} \n\t" + "ldm %[a]!, {r5,r6} \n\t" + "sub %[a], %[a], #16 \n\t" + "add r3, r3, r5 \n\t" + "adc r4, r4, r6 \n\t" + "stm %[l]!, {r3,r4} \n\t" + "ldm %[a]!, {r3-r6} \n\t" + "ldm %[a]!, {r5,r6} \n\t" + "adc r3, r3, r5 \n\t" + "adc r4, r4, r6 \n\t" + "stm %[l]!, {r3,r4} \n\t" + "b 0f \n\t" + ".add2: \n\t" + /* ASM for: ecc_add(C, C, C + 2, 2); */ + "ldm %[a]!, {r3-r6} \n\t" + "sub %[a], %[a], #16 \n\t" + "add r3, r3, r5 \n\t" + "adc r4, r4, r6 \n\t" + "stm %[a]!, {r3,r4} \n\t" + "0: \n\t" + "bcc 1f \n\t" + "mov %[c], #1 \n\t" + "b 2f \n\t" + "1: \n\t" + "mov %[c], $0 \n\t" + "2: \n\t" + : /* out */ + [c] "=l" (carry) + : /* in */ + [a] "l" (C), + [l] "l" (length) + : /* clobber list */ + "r3", "r4", "r5", "r6", "memory" + ); + } C[length] = carry; + asm volatile ( + "cmp %[l], #2 \n\t" + "beq .add3 \n\t" + "cmp %[l], #4 \n\t" + "beq .add6 \n\t" + ".add12: \n\t" + /* ASM for: ecc_add(result + 4, result + 4, C, 12); */ + /* RRRRRRRRRRRRRRRR */ + /* + CCCCCCCCC000 */ + /* = RRRRRRRRRRRRRRRR */ + "add %[r], %[r], #16 \n\t" + "mov %[l], %[r] \n\t" + "ldm %[r]!, {r3,r4} \n\t" + "ldm %[c]!, {r5,r6} \n\t" + "add r3, r3, r5 \n\t" + "adc r4, r4, r6 \n\t" + "stm %[l]!, {r3,r4} \n\t" + "ldm %[r]!, {r3,r4} \n\t" + "ldm %[c]!, {r5,r6} \n\t" + "adc r3, r3, r5 \n\t" + "adc r4, r4, r6 \n\t" + "stm %[l]!, {r3,r4} \n\t" + "ldm %[r]!, {r3,r4} \n\t" + "ldm %[c]!, {r5,r6} \n\t" + "adc r3, r3, r5 \n\t" + "adc r4, r4, r6 \n\t" + "stm %[l]!, {r3,r4} \n\t" + "ldm %[r]!, {r3,r4} \n\t" + "ldm %[c]!, {r5,r6} \n\t" + "adc r3, r3, r5 \n\t" + "adc r4, r4, r6 \n\t" + "stm %[l]!, {r3,r4} \n\t" + "ldm %[r]!, {r3,r4} \n\t" + "ldm %[c]!, {r5} \n\t" + "mov r6, $0 \n\t" + "adc r3, r3, r5 \n\t" + "adc r4, r4, r6 \n\t" + "stm %[l]!, {r3,r4} \n\t" + "ldm %[r]!, {r3,r4} \n\t" + "adc r3, r3, r6 \n\t" + "adc r4, r4, r6 \n\t" + "stm %[l]!, {r3,r4} \n\t" + "b 0f \n\t" + ".add6: \n\t" + /* ASM for: ecc_add(result + 2, result + 2, C, 6); */ + /* RRRRRRRR */ + /* + CCCCC0 */ + /* = RRRRRRRR */ + "add %[r], %[r], #8 \n\t" + "mov %[l], %[r] \n\t" + "ldm %[r]!, {r3,r4} \n\t" + "ldm %[c]!, {r5,r6} \n\t" + "add r3, r3, r5 \n\t" + "adc r4, r4, r6 \n\t" + "stm %[l]!, {r3,r4} \n\t" + "ldm %[r]!, {r3,r4} \n\t" + "ldm %[c]!, {r5,r6} \n\t" + "adc r3, r3, r5 \n\t" + "adc r4, r4, r6 \n\t" + "stm %[l]!, {r3,r4} \n\t" + "ldm %[r]!, {r3,r4} \n\t" + "ldm %[c]!, {r5} \n\t" + "mov r6, $0 \n\t" + "adc r3, r3, r5 \n\t" + "adc r4, r4, r6 \n\t" + "stm %[l]!, {r3,r4} \n\t" + "b 0f \n\t" + ".add3: \n\t" + /* ASM for: ecc_add(result + 1, result + 1, C, 3); */ + /* RRRR */ + /* + CCC */ + /* = RRRR */ + "add %[r], %[r], #4 \n\t" + "mov %[l], %[r] \n\t" + "ldm %[r]!, {r3,r4} \n\t" + "ldm %[c]!, {r5,r6} \n\t" + "add r3, r3, r5 \n\t" + "adc r4, r4, r6 \n\t" + "ldr r5, [%[r], $0] \n\t" + "ldr r6, [%[c], $0] \n\t" + "adc r5, r5, r6 \n\t" + "stm %[l]!, {r3-r5} \n\t" + "0: \n\t" + : /* out */ + : /* in */ + [r] "l" (result), + [c] "l" (C), + [l] "l" (length) + : /* clobber list */ + "r3", "r4", "r5", "r6", "memory" + ); + } +} +/*---------------------------------------------------------------------------*/ + +__attribute__((always_inline)) static void +ecc_form_s1(uint32_t *dst, const uint32_t *src) +{ + /* 0, 0, 0, src[11], src[12], src[13], src[14], src[15] */ + asm volatile ( + "mov r2, $0 \n\t" + "mov r3, r2 \n\t" + "mov r4, r3 \n\t" + "stm %[d]!, {r2-r4} \n\t" + "add %[s], #44 \n\t" + "ldm %[s]!, {r2-r6} \n\t" + "stm %[d]!, {r2-r6} \n\t" + : /* out */ + [d] "+l" (dst), + [s] "+l" (src) + : /* in */ + : /* clobber list */ + "r2", "r3", "r4", "r5", "r6", "memory" + ); +} +__attribute__((always_inline)) static void +ecc_form_s2(uint32_t *dst, const uint32_t *src) +{ + /* 0, 0, 0, src[12], src[13], src[14], src[15], 0 */ + asm volatile ( + "mov r2, $0 \n\t" + "mov r3, r2 \n\t" + "mov r4, r3 \n\t" + "stm %[d]!, {r2-r4} \n\t" + "add %[s], #48 \n\t" + "ldm %[s]!, {r2-r5} \n\t" + "stm %[d]!, {r2-r5} \n\t" + "mov r2, $0 \n\t" + "stm %[d]!, {r2} \n\t" + : /* out */ + [d] "+l" (dst), + [s] "+l" (src) + : /* in */ + : /* clobber list */ + "r2", "r3", "r4", "r5", "memory" + ); +} +__attribute__((always_inline)) static void +ecc_form_s3(uint32_t *dst, const uint32_t *src) +{ + /* src[8], src[9], src[10], 0, 0, 0, src[14], src[15] */ + asm volatile ( + "add %[s], #32 \n\t" + "ldm %[s]!, {r2-r4} \n\t" + "mov r5, $0 \n\t" + "stm %[d]!, {r2-r5} \n\t" + "mov r2, r5 \n\t" + "mov r3, r2 \n\t" + "add %[s], #12 \n\t" + "ldm %[s]!, {r4,r5} \n\t" + "stm %[d]!, {r2-r5} \n\t" + : /* out */ + [d] "+l" (dst), + [s] "+l" (src) + : /* in */ + : /* clobber list */ + "r2", "r3", "r4", "r5", "memory" + ); +} +__attribute__((always_inline)) static void +ecc_form_s4(uint32_t *dst, const uint32_t *src) +{ + /* src[9], src[10], src[11], src[13], src[14], src[15], src[13], src[8] */ + asm volatile ( + "add %[s], #32 \n\t" + "ldm %[s]!, {r2-r5} \n\t" + "stm %[d]!, {r3-r5} \n\t" + "add %[s], #4 \n\t" + "ldm %[s]!, {r3-r5} \n\t" + "stm %[d]!, {r3-r5} \n\t" + "mov r4, r2 \n\t" + "stm %[d]!, {r3,r4} \n\t" + : /* out */ + [d] "+l" (dst), + [s] "+l" (src) + : /* in */ + : /* clobber list */ + "r2", "r3", "r4", "r5", "memory" + ); +} +__attribute__((always_inline)) static void +ecc_form_d1(uint32_t *dst, const uint32_t *src) +{ + /* src[11], src[12], src[13], 0, 0, 0, src[8], src[10] */ + asm volatile ( + "add %[s], #32 \n\t" + "ldm %[s]!, {r2-r7} \n\t" + "stm %[d]!, {r5-r7} \n\t" + "mov r3, $0 \n\t" + "mov r5, r3 \n\t" + "mov r6, r5 \n\t" + "stm %[d]!, {r3,r5,r6} \n\t" + "stm %[d]!, {r2,r4} \n\t" + : /* out */ + [d] "+l" (dst), + [s] "+l" (src) + : /* in */ + : /* clobber list */ + "r2", "r3", "r4", "r5", "r6", "r7", "memory" + ); +} +__attribute__((always_inline)) static void +ecc_form_d2(uint32_t *dst, const uint32_t *src) +{ + /* src[12], src[13], src[14], src[15], 0, 0, src[9], src[11] */ + asm volatile ( + "add %[s], #48 \n\t" + "ldm %[s]!, {r2-r5} \n\t" + "stm %[d]!, {r2-r5} \n\t" + "sub %[s], #28 \n\t" + "ldm %[s]!, {r4-r6} \n\t" + "mov r2, $0 \n\t" + "mov r3, r2 \n\t" + "stm %[d]!, {r2-r4,r6} \n\t" + : /* out */ + [d] "+l" (dst), + [s] "+l" (src) + : /* in */ + : /* clobber list */ + "r2", "r3", "r4", "r5", "r6", "memory" + ); +} +__attribute__((always_inline)) static void +ecc_form_d3(uint32_t *dst, const uint32_t *src) +{ + /* src[13], src[14], src[15], src[8], src[9], src[10], 0, src[12] */ + asm volatile ( + "add %[s], #52 \n\t" + "ldm %[s]!, {r2-r4} \n\t" + "stm %[d]!, {r2-r4} \n\t" + "sub %[s], #32 \n\t" + "ldm %[s]!, {r2-r6} \n\t" + "mov r5, $0 \n\t" + "stm %[d]!, {r2-r6} \n\t" + : /* out */ + [d] "+l" (dst), + [s] "+l" (src) + : /* in */ + : /* clobber list */ + "r2", "r3", "r4", "r5", "r6", "memory" + ); +} +__attribute__((always_inline)) static void +ecc_form_d4(uint32_t *dst, const uint32_t *src) +{ + /* src[14], src[15], 0, src[9], src[10], src[11], 0, src[13] */ + asm volatile ( + "add %[s], #56 \n\t" + "ldm %[s]!, {r2,r3} \n\t" + "mov r4, $0 \n\t" + "stm %[d]!, {r2-r4} \n\t" + "sub %[s], #28 \n\t" + "ldm %[s]!, {r2-r6} \n\t" + "mov r5, $0 \n\t" + "stm %[d]!, {r2-r6} \n\t" + : /* out */ + [d] "+l" (dst), + [s] "+l" (src) + : /* in */ + : /* clobber list */ + "r2", "r3", "r4", "r5", "r6", "memory" + ); +} +/*---------------------------------------------------------------------------*/ + +static void +ecc_field_Add(uint32_t *result, const uint32_t *x, const uint32_t *y) +{ + uint32_t temp[8]; + uint32_t carry = -ecc_add(result, x, y); + ecc_add(temp, result, ecc_prime_r); + + int i; + for(i = 0; i < 8; i++) { + result[i] ^= (carry & (result[i] ^ temp[i])); + } +} +static void +ecc_field_Sub(uint32_t *result, const uint32_t *x, const uint32_t *y) +{ + uint32_t temp[8]; + uint32_t carry = -ecc_sub(result, x, y); + ecc_add(temp, result, ecc_prime_m); + + int i; + for(i = 0; i < 8; i++) { + result[i] ^= (carry & (result[i] ^ temp[i])); + } +} +static void +ecc_field_ModP(uint32_t *result, const uint32_t *T) +{ + uint32_t SX_o_DX[8]; + ecc_copy(result, T); /* result = T */ + + ecc_form_s1(SX_o_DX, T); /* Form S1 */ + ecc_field_Add(result, result, SX_o_DX); /* result = T + S1 */ + ecc_field_Add(result, result, SX_o_DX); /* result = T + S1 + S1 */ + + ecc_form_s2(SX_o_DX, T); /* Form S2 */ + ecc_field_Add(result, result, SX_o_DX); /* result = T + S1 + S1 + S2 */ + ecc_field_Add(result, result, SX_o_DX); /* result = T + S1 + S1 + S2 + S2 */ + + ecc_form_s3(SX_o_DX, T); /* Form S3 */ + ecc_field_Add(result, result, SX_o_DX); /* result = T + S1 + S1 + S2 + S2 + S3 */ + + ecc_form_s4(SX_o_DX, T); /* Form S4 */ + ecc_field_Add(result, result, SX_o_DX); /* result = T + S1 + S1 + S2 + S2 + S3 + S4 */ + + ecc_form_d1(SX_o_DX, T); /* Form D1 */ + ecc_field_Sub(result, result, SX_o_DX); /* result = T + S1 + S1 + S2 + S2 + S3 + S4 - D1 */ + + ecc_form_d2(SX_o_DX, T); /* Form D2 */ + ecc_field_Sub(result, result, SX_o_DX); /* result = T + S1 + S1 + S2 + S2 + S3 + S4 - D1 - D2 */ + + ecc_form_d3(SX_o_DX, T); /* Form D3 */ + ecc_field_Sub(result, result, SX_o_DX); /* result = T + S1 + S1 + S2 + S2 + S3 + S4 - D1 - D2 - D3 */ + + ecc_form_d4(SX_o_DX, T); /* Form D4 */ + ecc_field_Sub(result, result, SX_o_DX); /* result = T + S1 + S1 + S2 + S2 + S3 + S4 - D1 - D2 - D3 - D4 */ + + if(ecc_compare(result, ecc_prime_m) >= 0) { + ecc_field_Sub(result, result, ecc_prime_m); + } +} +static void +ecc_field_Mult(uint32_t *result, const uint32_t *A, const uint32_t *B) +{ + uint32_t product[16]; + ecc_mult(product, A, B, 8); + ecc_field_ModP(result, product); +} +static void +ecc_field_Inv(uint32_t *result, const uint32_t *A) +{ + PRINTHEX("Input", A, 8); + + ecc_setZero(result); + result[0] = 0x00000001; + int i; + for(i = 255; i >= 0; --i) { + ecc_field_Mult(result, result, result); + if(((ecc_prime_m[i / 32] >> (i % 32)) & 0x1) == 1 && i != 1) { + ecc_field_Mult(result, result, A); + } + } + + PRINTHEX("Result", result, 8); +} +/*---------------------------------------------------------------------------*/ + +static void +ecc_projective_double(uint32_t *val) +{ + /* Algorithm taken from https://hyperelliptic.org/EFD/g1p/auto-shortw-projective-3.html#doubling-dbl-2007-bl-2 */ + /* w = 3*(X1-Z1)*(X1+Z1) */ + /* s = 2*Y1*Z1 */ + /* ss = s^2 */ + /* sss = s*ss */ + /* R = Y1*s */ + /* RR = R^2 */ + /* B = 2*X1*R */ + /* h = w^2-2*B */ + /* X3 = h*s */ + /* Y3 = w*(B-h)-2*RR */ + /* Z3 = sss */ + + uint32_t temp[24]; + uint32_t w[8]; + uint32_t s[8]; + uint32_t B[8]; + uint32_t h[8]; + + uint8_t is_zero = ecc_isX(val + X, 0) & ecc_isX(val + Y, 0) & ecc_isX(val + Z, 1); + + ecc_field_Sub(temp + X, val + X, val + Z); + ecc_field_Add(temp + Y, val + X, val + Z); + ecc_field_Mult(temp + Z, temp + X, temp + Y); + ecc_field_Add(temp + X, temp + Z, temp + Z); + ecc_field_Add(w, temp + Z, temp + X); + ecc_field_Mult(temp + X, val + Y, val + Z); + ecc_field_Add(s, temp + X, temp + X); + ecc_field_Mult(temp + X, s, s); + ecc_field_Mult(val + Z, s, temp + X); + ecc_field_Mult(temp + X, val + Y, s); /* temp = R */ + ecc_field_Mult(temp + Z, temp + X, temp + X); /* temp3 = RR */ + ecc_field_Mult(temp + Y, val + X, temp + X); /* temp2 = R*x */ + ecc_field_Add(B, temp + Y, temp + Y); /* B = 2*R*x */ + ecc_field_Mult(temp + X, w, w); + ecc_field_Add(temp + Y, B, B); + ecc_field_Sub(h, temp + X, temp + Y); + ecc_field_Mult(val + X, h, s); + ecc_field_Sub(temp + X, B, h); + ecc_field_Mult(temp + Y, w, temp + X); + ecc_field_Add(temp + Z, temp + Z, temp + Z); /* temp3 = 2*RR */ + ecc_field_Sub(val + Y, temp + Y, temp + Z); + /* finished, now swap the result if necessary */ + + ecc_setZero(temp + X); + ecc_setZero(temp + Y); + ecc_setZero(temp + Z); + (temp + Z)[0] = 0x00000001; + + ecc_replace(is_zero, val, temp); +} +static void +ecc_projective_add(uint32_t *result, const uint32_t *val_1, const uint32_t *x_2, const uint32_t *y_2, const uint32_t *z_2) +{ +/* algorithm taken from https://hyperelliptic.org/EFD/g1p/auto-shortw-projective-3.html#addition-add-1998-cmo-2 */ +/* X Z X Y U Y */ +/* 1 1 2 2 U UU V 1V */ +/* Z R Z ZVZ R UZZ VR ZY */ +/* VX 2RAY 2Z 1V1UA UZV V2A 2Z */ +/* Y1Z2 = Y1*Z2 | */ +/* X2Z1 = X2*Z1 | | */ +/* X1Z2 = X1*Z2 | | | */ +/* V = X2Z1-X1Z2 | x x | */ +/* VV = V^2 x | | | */ +/* R = VV*X1Z2 | x| x | */ +/* VVV = V*VV x | x | | */ +/* Y2Z1 = Y2*Z1 | | | | | */ +/* U = Y2Z1-Y1Z2 | | x| | x */ +/* UU = U^2 | | x | | | */ +/* Z1Z2 = Z1*Z2 | | | | | | | */ +/* UUZZ = UU*Z1Z2 | | x | x| | | */ +/* UZV = UUZZ-VVV | | | | x| x | */ +/* Z = VVV*Z1Z2 | | x| | | x | */ +/* VYZ = VVV*Y1Z2 | | | | | x x| */ +/* R2 = 2*R | x | | | | | */ +/* A = UZV-2R | | | | x x| | */ +/* X = V*A x| | | | x | */ +/* RA = R-A | x| | | x | */ +/* URA = U*RA | x | x| | */ +/* Y = URA-VYZ | | | x x */ + + uint32_t temp[32]; + #define X1 val_1 + X + #define Y1 val_1 + Y + #define Z1 val_1 + Z + #define X2 x_2 + #define Y2 y_2 + #define Z2 z_2 + #define V result + X + #define X1Z2 result + Y + #define R result + Y + #define RA result + Y + #define Z1Z2 result + Z + #define X2Z1 temp + X + #define VV temp + X + #define Y2Z1 temp + X + #define U temp + X + #define URA temp + X + #define UU temp + Y + #define UUZZ temp + Y + #define UZV temp + Y + #define VVV temp + Z + #define R2 temp + Z + #define A temp + Z + #define Y1Z2 temp + 24 + #define VYZ temp + 24 + + uint8_t is_input1_zero = ecc_isX(val_1 + X, 0) & ecc_isX(val_1 + Y, 0) & ecc_isX(val_1 + Z, 1); + uint8_t is_input2_zero = ecc_isX(x_2, 0) & ecc_isX(y_2, 0) & ecc_isX(z_2, 1); + + ecc_copy(temp + X, x_2); + ecc_copy(temp + Y, y_2); + ecc_copy(temp + Z, z_2); + ecc_replace(is_input1_zero, result, temp); + + ecc_copy(temp + X, val_1 + X); + ecc_copy(temp + Y, val_1 + Y); + ecc_copy(temp + Z, val_1 + Z); + ecc_replace(is_input2_zero, result, temp); + + /* invalidate the result pointer */ + result = (uint32_t *)((uintptr_t)result ^ (-(is_input2_zero | is_input1_zero) & ((uintptr_t)result ^ (uintptr_t)temp))); + + ecc_field_Mult(Y1Z2, Y1, Z2); + ecc_field_Mult(X2Z1, X2, Z1); + ecc_field_Mult(X1Z2, X1, Z2); + ecc_field_Sub(V, X2Z1, X1Z2); + ecc_field_Mult(VV, V, V); + ecc_field_Mult(R, VV, X1Z2); + ecc_field_Mult(VVV, V, VV); + ecc_field_Mult(Y2Z1, Y2, Z1); + ecc_field_Sub(U, Y2Z1, Y1Z2); + ecc_field_Mult(UU, U, U); + ecc_field_Mult(Z1Z2, Z1, Z2); + ecc_field_Mult(UUZZ, UU, Z1Z2); + ecc_field_Sub(UZV, UUZZ, VVV); + ecc_field_Mult(result + Z, VVV, Z1Z2); + ecc_field_Mult(VYZ, VVV, Y1Z2); + ecc_field_Add(R2, R, R); + ecc_field_Sub(A, UZV, R2); + ecc_field_Mult(result + X, V, A); + ecc_field_Sub(RA, R, A); + ecc_field_Mult(URA, U, RA); + ecc_field_Sub(result + Y, URA, VYZ); +} +/*---------------------------------------------------------------------------*/ + +#if SELF_TEST +static void +assertTrue(uint32_t value, const char *msg) +{ + if(!value) { + printf("%s\n", msg); + } +} +static void +assertFalse(uint32_t value, const char *msg) +{ + if(value) { + printf("%s\n", msg); + } +} +static void +assertSame(uint32_t *val_1, uint32_t *val_2, const char *msg) +{ + if(ecc_compare(val_1, val_2)) { + printf("%s\n", msg); + } +} +static void +selfTest() +{ + uint32_t num_000[8] = { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 }; + uint32_t num_001[8] = { 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 }; + uint32_t num_002[8] = { 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 }; + uint32_t num_004[8] = { 0x00000004, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 }; + uint32_t num_max[8] = { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff }; + uint32_t primeMinusOne[8] = { 0xfffffffe, 0xffffffff, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0xffffffff }; + + uint32_t result[8]; + + /* ecc_compare */ + assertFalse(ecc_compare(num_001, num_001), "ecc_compare 1: Wrong result!"); + assertTrue(ecc_compare(num_000, num_001) == -1, "ecc_compare 2: Wrong result!"); + assertTrue(ecc_compare(num_001, num_000) == 1, "ecc_compare 3: Wrong result!"); + + /* ecc_isX */ + assertTrue(ecc_isX(num_000, 0), "ecc_isX 1: Wrong result!"); + assertTrue(ecc_isX(num_001, 1), "ecc_isX 2: Wrong result!"); + assertTrue(ecc_isX(num_002, 2), "ecc_isX 3: Wrong result!"); + assertTrue(ecc_isX(num_004, 4), "ecc_isX 4: Wrong result!"); + assertFalse(ecc_isX(num_000, 1), "ecc_isX 5: Wrong result!"); + assertFalse(ecc_isX(num_000, 2), "ecc_isX 6: Wrong result!"); + assertFalse(ecc_isX(num_000, 4), "ecc_isX 7: Wrong result!"); + assertFalse(ecc_isX(num_001, 0), "ecc_isX 8: Wrong result!"); + assertFalse(ecc_isX(num_001, 2), "ecc_isX 9: Wrong result!"); + assertFalse(ecc_isX(num_001, 4), "ecc_isX 10: Wrong result!"); + assertFalse(ecc_isX(num_002, 0), "ecc_isX 11: Wrong result!"); + assertFalse(ecc_isX(num_002, 1), "ecc_isX 12: Wrong result!"); + assertFalse(ecc_isX(num_002, 4), "ecc_isX 13: Wrong result!"); + assertFalse(ecc_isX(num_004, 0), "ecc_isX 14: Wrong result!"); + assertFalse(ecc_isX(num_004, 1), "ecc_isX 15: Wrong result!"); + assertFalse(ecc_isX(num_004, 2), "ecc_isX 16: Wrong result!"); + + /* ecc_add */ + assertFalse(ecc_add(result, num_001, num_002), "ecc_add 1: Unexpected carrybit!"); + assertFalse(ecc_add(result, result, num_001), "ecc_add 2: Unexpected carrybit!"); + assertSame(result, num_004, "ecc_add 3: Wrong result!"); + assertTrue(ecc_add(result, num_max, num_002), "ecc_add 4: Carrybit missing!"); + assertSame(result, num_001, "ecc_add 5: Wrong result!"); + + /* ecc_sub */ + assertFalse(ecc_sub(result, num_004, num_002), "ecc_sub 1: Unexpected carrybit!"); + assertFalse(ecc_sub(result, result, num_001), "ecc_sub 2: Unexpected carrybit!"); + assertFalse(ecc_sub(result, result, num_001), "ecc_sub 3: Unexpected carrybit!"); + assertSame(result, num_000, "ecc_sub 4: Wrong result!"); + assertTrue(ecc_sub(result, num_000, num_001), "ecc_sub 5: Carrybit missing!"); + assertSame(result, num_max, "ecc_sub 6: Wrong result!"); + + /* ecc_field_Sub */ + ecc_field_Sub(result, num_001, num_000); + assertSame(num_001, result, "ecc_field_Sub 1: Wrong result!"); + ecc_field_Sub(result, num_001, num_001); + assertSame(num_000, result, "ecc_field_Sub 2: Wrong result!"); + ecc_field_Sub(result, num_000, num_001); + assertSame(primeMinusOne, result, "ecc_field_Sub 3: Wrong result!"); + + printf("Tests completed!\n"); +} +#endif diff --git a/platform/econotag/apps/ecc/ecc.h b/platform/econotag/apps/ecc/ecc.h new file mode 100644 index 000000000..b90b55260 --- /dev/null +++ b/platform/econotag/apps/ecc/ecc.h @@ -0,0 +1,103 @@ +/* + * Copyright (c) 2015, Lars Schmertmann , + * Jens Trillmann . + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * + * This file is part of the Contiki operating system. + * + */ + +/** + * \file + * Calculations on elliptic curve secp256r1 + * + * This is a efficient ECC implementation on the secp256r1 curve for + * 32 Bit CPU architectures. It provides basic operations on the + * secp256r1 curve and support for ECDH and ECDSA. + * + * \author + * Lars Schmertmann + * Jens Trillmann + */ + +#ifndef ECC_H_ +#define ECC_H_ + +#include + +/** + * \brief Checks if a (random) number is valid as scalar on elliptic curve secp256r1 + * + * A (random) number is only usable as scalar on elliptic curve secp256r1 if + * it is lower than the order of the curve. For the check, you need to provide + * the order of elliptic curve secp256r1. + * + * uint32_t order[8] = {0xFC632551, 0xF3B9CAC2, 0xA7179E84, 0xBCE6FAAD, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0xFFFFFFFF}; + * + * \param key The (random) number to check for usability + * \param order The order of elliptic curve secp256r1 + * + * \return 1 if key is valid + */ +#define ecc_is_valid_key(key, order) (ecc_compare(order, key) == 1) + +/** + * \brief Compares the value of a with the value of b + * + * This function is only public because its needed for the macro ecc_is_valid_key. + * It does a comparison of two 256 bit numbers. The return values are 1, 0 or -1. + * + * \param a First number + * \param b Second number + * + * \return 1 if a is greater than b + 0 if a is equal to b + -1 if a is less than b + */ +int32_t ecc_compare(const uint32_t *a, const uint32_t *b); + +/** + * \brief ECC scalar multiplication on elliptic curve secp256r1 + * + * This function does a scalar multiplication on elliptic curve secp256r1. + * For an Elliptic curve Diffie–Hellman you need two multiplications. First one + * with the base point of elliptic curve secp256r1 you need to provide. + * + * uint32_t base_x[8] = {0xd898c296, 0xf4a13945, 0x2deb33a0, 0x77037d81, 0x63a440f2, 0xf8bce6e5, 0xe12c4247, 0x6b17d1f2}; + * uint32_t base_y[8] = {0x37bf51f5, 0xcbb64068, 0x6b315ece, 0x2bce3357, 0x7c0f9e16, 0x8ee7eb4a, 0xfe1a7f9b, 0x4fe342e2}; + * + * \param resultx Pointer to memory to store the x-coordinate of the result + * \param resulty Pointer to memory to store the y-coordinate of the result + * \param px x-coordinate of the point to multiply with scalar + * \param py y-coordinate of the point to multiply with scalar + * \param secret Scalar for multiplication with elliptic curve point + */ +void ecc_ec_mult(uint32_t *resultx, uint32_t *resulty, const uint32_t *px, const uint32_t *py, const uint32_t *secret); + +#endif /* ECC_H_ */ diff --git a/platform/econotag/apps/flash/Makefile.flash b/platform/econotag/apps/flash/Makefile.flash new file mode 100644 index 000000000..d78891b5c --- /dev/null +++ b/platform/econotag/apps/flash/Makefile.flash @@ -0,0 +1 @@ +flash_src = flash.c diff --git a/platform/econotag/apps/flash/flash.c b/platform/econotag/apps/flash/flash.c new file mode 100644 index 000000000..959724697 --- /dev/null +++ b/platform/econotag/apps/flash/flash.c @@ -0,0 +1,207 @@ +/* + * Copyright (c) 2014, Lars Schmertmann . + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * + * This file is part of the Contiki operating system. + * + */ + +#include "flash.h" + +#define FLASH_BLOCK_SIZE 0x01000 + +#define FLASH_BLOCK_11 0x18000 +#define FLASH_BLOCK_21 0x1A000 + +#ifndef FLASH_CONF_B1 +#define FLASH_CONF_B1 FLASH_BLOCK_SIZE +#endif + +#ifndef FLASH_CONF_B2 +#define FLASH_CONF_B2 FLASH_BLOCK_SIZE +#endif + +#define DEBUG 0 + +#if DEBUG +#include +#include "mc1322x.h" +#define PRINTF(...) printf(__VA_ARGS__) +#else +#define PRINTF(...) +#endif + +uint16_t stackPointer; + +/* private prototypes ----------------------------------------------------- */ + +flash_addr_t getAddr(flash_addr_t address); + +/* public functions -------------------------------------------------------- */ + +void +flash_init() +{ + PRINTF("Initializing flash ... "); + + nvm_erase(gNvmInternalInterface_c, gNvmType_SST_c, 0x0F000000); + + nvm_write(gNvmInternalInterface_c, gNvmType_SST_c, "\001", FLASH_BLOCK_11, 1); + nvm_write(gNvmInternalInterface_c, gNvmType_SST_c, "\001", FLASH_BLOCK_21, 1); + + uint32_t i; + for(i = 1; i < 0x2000; i++) { +#if DEBUG + if(i % 0x400 == 0) { + PRINTF(" ."); + } +#endif + nvm_write(gNvmInternalInterface_c, gNvmType_SST_c, "\0", FLASH_BLOCK_11 + i, 1); + nvm_write(gNvmInternalInterface_c, gNvmType_SST_c, "\0", FLASH_BLOCK_21 + i, 1); + } + + PRINTF("DONE\n"); +} +nvmErr_t +flash_getVar(void *dest, flash_addr_t address, uint32_t numBytes) +{ + address = getAddr(address); + + if(address >= 0x18000 && address <= 0x1EFFF) { + PRINTF("Read from Adress: %p\n", address); + nvmErr_t err = nvm_read(gNvmInternalInterface_c, gNvmType_SST_c, dest, address, numBytes); + if(err) { + PRINTF("Read error, nmv_error: %u\n", err); + return err; + } + return gNvmErrNoError_c; + } + + PRINTF("Read error - Invalid pointer.\n"); + return gNvmErrInvalidPointer_c; +} +nvmErr_t +flash_setVar(void *src, flash_addr_t address, uint32_t numBytes) +{ +#if DEBUG + printf("SetVar - START . "); + uint32_t time = *MACA_CLK; +#endif + + if(address >= 8192) { + PRINTF("Write error - Invalid pointer.\n"); + return gNvmErrInvalidPointer_c; + } + uint32_t block_len = (address < 4096 ? FLASH_CONF_B1 : FLASH_CONF_B2); + + address = getAddr(address); + + flash_addr_t src_block = address & 0xFF000; + flash_addr_t dst_block = src_block ^ 0x01000; + address = address & 0x00FFF; + + if(address < 1 || address >= block_len) { + PRINTF("Write error - Invalid pointer.\n"); + return gNvmErrInvalidPointer_c; + } + if(address + numBytes > block_len) { + PRINTF("Write error - Var is to long.\n"); + return gNvmErrAddressSpaceOverflow_c; + } + + nvm_erase(gNvmInternalInterface_c, gNvmType_SST_c, 1 << (dst_block / FLASH_BLOCK_SIZE)); + + uint32_t i; + uint8_t buf; + for(i = 0; i < address; i++) { + nvm_read(gNvmInternalInterface_c, gNvmType_SST_c, &buf, src_block + i, 1); + nvm_write(gNvmInternalInterface_c, gNvmType_SST_c, &buf, dst_block + i, 1); + } + PRINTF("Write to adress: %p\n", dst_block + i); + nvm_write(gNvmInternalInterface_c, gNvmType_SST_c, src, dst_block + i, numBytes); + for(i += numBytes; i < block_len; i++) { + nvm_read(gNvmInternalInterface_c, gNvmType_SST_c, &buf, src_block + i, 1); + nvm_write(gNvmInternalInterface_c, gNvmType_SST_c, &buf, dst_block + i, 1); + } + + nvm_erase(gNvmInternalInterface_c, gNvmType_SST_c, 1 << (src_block / FLASH_BLOCK_SIZE)); + +#if DEBUG + time = *MACA_CLK - time; + printf("FINISHED AFTER %u MS\n", time / 250); +#endif + + return gNvmErrNoError_c; +} +nvmErr_t +flash_cmp(void *src, flash_addr_t address, uint32_t numBytes) +{ + address = getAddr(address); + + if(address >= 0x18000 && address <= 0x1EFFF) { + return nvm_verify(gNvmInternalInterface_c, gNvmType_SST_c, src, address, numBytes); + } + PRINTF("Read error - Invalid pointer.\n"); + return gNvmErrInvalidPointer_c; +} +void +flash_stack_init() +{ + stackPointer = 0; + nvm_erase(gNvmInternalInterface_c, gNvmType_SST_c, 1 << (FLASH_STACK / FLASH_BLOCK_SIZE)); +} +nvmErr_t +flash_stack_push(uint8_t *src, uint32_t numBytes) +{ + if(stackPointer + numBytes > FLASH_BLOCK_SIZE) { + return gNvmErrAddressSpaceOverflow_c; + } + + nvm_write(gNvmInternalInterface_c, gNvmType_SST_c, src, FLASH_STACK + stackPointer, numBytes); + stackPointer += numBytes; + return gNvmErrNoError_c; +} +uint32_t +flash_stack_size() +{ + return stackPointer; +} +/* private functions ------------------------------------------------------- */ + +flash_addr_t +getAddr(flash_addr_t address) +{ + if(address >= 0x02000) { + return address; + } + + flash_addr_t block = (address & 0x01000 ? FLASH_BLOCK_21 : FLASH_BLOCK_11); + uint8_t blockcheck = (flash_cmp("\001", block, 1) == 0 ? 0 : 1); + return block + (blockcheck << 12) + (address & 0x00FFF); +} diff --git a/platform/econotag/apps/flash/flash.h b/platform/econotag/apps/flash/flash.h new file mode 100644 index 000000000..a50bddc80 --- /dev/null +++ b/platform/econotag/apps/flash/flash.h @@ -0,0 +1,178 @@ +/* + * Copyright (c) 2014, Lars Schmertmann . + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * + * This file is part of the Contiki operating system. + * + */ + +/** + * \file + * App for easy usage of additional flash memory + * + * Purposes of the different flash blocks + * 1 : 0x18000 - 0x18FFF : Random access block 1.1 + * 2 : 0x19000 - 0x19FFF : Random access block 1.2 + * 3 : 0x1A000 - 0x1AFFF : Random access block 2.1 + * 4 : 0x1B000 - 0x1BFFF : Random access block 2.2 + * 5 : 0x1C000 - 0x1CFFF : Stack without pop function + * 6 : 0x1D000 - 0x1DFFF : Read only + * 7 : 0x1E000 - 0x1EFFF : Read only + * 8 : 0x1F000 - 0x1FFFF : System reserved + * + * This app only allows write access to blocks 1 - 5 + * and read access to blocks 1 - 7. + * + * To use the stack in block 5 you need: flash_stack_init, + * flash_stack_push, flash_stack_size, flash_stack_read. + * + * To use the random access blocks 1.x and 2.x you need: flash_init, + * flash_getVar, flash_setVar, flash_cmp. + * + * Blocks 1.x and 2.x are accessible with adresses + * 0x0001 - 0x0FFF and 0x1001 - 0x1FFF. + * + * To be able to write to flash memory, its required to delete + * it first, but its only possible to delete a full block. So this + * app copies the data of a block, changing the requested data. + * Copying a block needs time. So when you only use the first N bytes, + * you can set FLASH_CONF_B1=N and FLASH_CONF_B2=N in your makefile + * to optimize speed. + * + * You can find an example in examples/econotag-flash-test. + * + * \author + * Lars Schmertmann + */ + +#ifndef FLASH_H_ +#define FLASH_H_ + +#include + +#define FLASH_STACK 0x1C000 + +typedef uint32_t flash_addr_t; + +/** + * \brief Initialize or clear random access blocks + * + * To use the random access blocks, you need to call this + * function first. You can also use it to delete all data + * in this blocks. + */ +void flash_init(); + +/** + * \brief Read data from flash memory + * + * Reads data from flash memory and stores it into RAM. + * You can read the flash area 0x18000 - 0x1EFFF. Addresses + * 0x0000 - 0x1FFF will be mapped to 0x18000 - 0x1BFFF. + * + * \param dest Memory area to store the data + * \param address Area in flash memory to read from + * \param numBytes Number of bytes to read + * + * \return gNvmErrNoError_c (0) if read was successfull + */ +nvmErr_t flash_getVar(void *dest, flash_addr_t address, uint32_t numBytes); + +/** + * \brief Write data to flash memory + * + * Writes data to flash memory. Valid addresses are + * 0x0001 - 0x0FFF and 0x1001 - 0x1FFF -> Mapped to + * 0x18000 - 0x1BFFF. + * + * \param src Memory area with data to store in flash memory + * \param address Area in flash memory to write + * \param numBytes Number of bytes to write + * + * \return gNvmErrNoError_c (0) if write was successfull + */ +nvmErr_t flash_setVar(void *src, flash_addr_t address, uint32_t numBytes); + +/** + * \brief Compares data from RAM with flash memory + * + * Compares data from RAM with flash memory. + * Valid addresses are 0x18000 - 0x1EFFF. Addresses + * 0x0 - 0x1FFF will be mapped to 0x18000 - 0x1BFFF. + * + * \param src Memory area with data to compare + * \param address Area in flash memory + * \param numBytes Number of bytes to compare + * + * \return 0 if data is matching + */ +nvmErr_t flash_cmp(void *src, flash_addr_t address, uint32_t numBytes); + +/** + * \brief Stack initialisation + * + * Clears and initializes the stack. + */ +void flash_stack_init(); + +/** + * \brief Push data to stack + * + * Pushes numBytes from src to stack into flash memory. + * + * \param src Memory area with data to store in flash memory + * \param numBytes Number of bytes to write + * + * \return gNvmErrNoError_c (0) if push was successfull + */ +nvmErr_t flash_stack_push(uint8_t *src, uint32_t numBytes); + +/** + * \brief Stacksize + * + * Returns the size of data in stack + * + * \return Number of bytes in stack + */ +uint32_t flash_stack_size(); + +/** + * \brief Read data from stack + * + * Reads data from stack (without removing it) and stores it into RAM. + * + * \param dest Memory area to store the data + * \param offset Position in stack to read from + * \param numBytes Number of bytes to read + * + * \return gNvmErrNoError_c (0) if read was successfull + */ +#define flash_stack_read(dest, offset, numBytes) flash_getVar(dest, FLASH_STACK + (offset), numBytes) + +#endif /* FLASH_H_ */ diff --git a/platform/eval-adf7xxxmb4z/contiki-main.c b/platform/eval-adf7xxxmb4z/contiki-main.c index 0a7d3f203..d34b7e63f 100644 --- a/platform/eval-adf7xxxmb4z/contiki-main.c +++ b/platform/eval-adf7xxxmb4z/contiki-main.c @@ -66,7 +66,9 @@ SENSORS(&button_sensor); #endif static uint8_t serial_id[] = SERIAL_ID; +#if !NETSTACK_CONF_WITH_IPV6 static uint16_t node_id = 0x0102; +#endif /* !NETSTACK_CONF_WITH_IPV6 */ /*---------------------------------------------------------------------------*/ static void diff --git a/platform/exp5438/contiki-exp5438-main.c b/platform/exp5438/contiki-exp5438-main.c index 589a9572d..2f85f6ba2 100644 --- a/platform/exp5438/contiki-exp5438-main.c +++ b/platform/exp5438/contiki-exp5438-main.c @@ -307,8 +307,7 @@ main(int argc, char **argv) static unsigned long irq_energest = 0; /* Re-enable interrupts and go to sleep atomically. */ - ENERGEST_OFF(ENERGEST_TYPE_CPU); - ENERGEST_ON(ENERGEST_TYPE_LPM); + ENERGEST_SWITCH(ENERGEST_TYPE_CPU, ENERGEST_TYPE_LPM); /* We only want to measure the processing done in IRQs when we are asleep, so we discard the processing time done when we were awake. */ @@ -327,8 +326,7 @@ main(int argc, char **argv) irq_energest = energest_type_time(ENERGEST_TYPE_IRQ); eint(); watchdog_start(); - ENERGEST_OFF(ENERGEST_TYPE_LPM); - ENERGEST_ON(ENERGEST_TYPE_CPU); + ENERGEST_SWITCH(ENERGEST_TYPE_LPM, ENERGEST_TYPE_CPU); } } } diff --git a/platform/exp5438/hal_MSP-EXP430F5438.h b/platform/exp5438/hal_MSP-EXP430F5438.h index 8b64313bb..d03162066 100644 --- a/platform/exp5438/hal_MSP-EXP430F5438.h +++ b/platform/exp5438/hal_MSP-EXP430F5438.h @@ -1,15 +1,15 @@ -/******************************************************************************* - Filename: hal_MSP-EXP430F5438.h - - Copyright 2008 Texas Instruments, Inc. - -This is the master header file and also the only necessary file to be included -in order to use MSP-EXP430F548 HAL. -***************************************************************************/ - -#ifndef HAL_MSP_EXP430F5438_H -#define HAL_MSP_EXP430F5438_H - -#include "hal_lcd.h" - -#endif +/******************************************************************************* + Filename: hal_MSP-EXP430F5438.h + + Copyright 2008 Texas Instruments, Inc. + +This is the master header file and also the only necessary file to be included +in order to use MSP-EXP430F548 HAL. +***************************************************************************/ + +#ifndef HAL_MSP_EXP430F5438_H +#define HAL_MSP_EXP430F5438_H + +#include "hal_lcd.h" + +#endif diff --git a/platform/exp5438/hal_lcd.c b/platform/exp5438/hal_lcd.c index fdaf32203..66be62de9 100644 --- a/platform/exp5438/hal_lcd.c +++ b/platform/exp5438/hal_lcd.c @@ -1,1198 +1,1196 @@ -/******************************************************************************* - * - * hal_lcd.c - * - * Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/ - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the - * distribution. - * - * Neither the name of Texas Instruments Incorporated nor the names of - * its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - ******************************************************************************/ - -#include "contiki-conf.h" - -#include "hal_MSP-EXP430F5438.h" -#include "hal_lcd_fonts.h" - -unsigned char LcdInitMacro[] = { - 0x74, 0x00, 0x00, 0x76, 0x00, 0x01, // R00 start oscillation - 0x74, 0x00, 0x01, 0x76, 0x00, 0x0D, // R01 driver output control - 0x74, 0x00, 0x02, 0x76, 0x00, 0x4C, // R02 LCD - driving waveform control - 0x74, 0x00, 0x03, 0x76, 0x12, 0x14, // R03 Power control - 0x74, 0x00, 0x04, 0x76, 0x04, 0x66, // R04 Contrast control - 0x74, 0x00, 0x05, 0x76, 0x00, 0x10, // R05 Entry mode - 0x74, 0x00, 0x06, 0x76, 0x00, 0x00, // R06 RAM data write mask - 0x74, 0x00, 0x07, 0x76, 0x00, 0x15, // R07 Display control - 0x74, 0x00, 0x08, 0x76, 0x00, 0x03, // R08 Cursor Control - 0x74, 0x00, 0x09, 0x76, 0x00, 0x00, // R09 RAM data write mask - 0x74, 0x00, 0x0A, 0x76, 0x00, 0x15, // R0A - 0x74, 0x00, 0x0B, 0x76, 0x00, 0x03, // R0B Horizontal Cursor Position - 0x74, 0x00, 0x0C, 0x76, 0x00, 0x03, // R0C Vertical Cursor Position - 0x74, 0x00, 0x0D, 0x76, 0x00, 0x00, // R0D - 0x74, 0x00, 0x0E, 0x76, 0x00, 0x15, // R0E - 0x74, 0x00, 0x0F, 0x76, 0x00, 0x03, // R0F - 0x74, 0x00, 0x10, 0x76, 0x00, 0x15, // R0E - 0x74, 0x00, 0x11, 0x76, 0x00, 0x03, // R0F -}; - -unsigned char Read_Block_Address_Macro[] = {0x74, 0x00, 0x12, 0x77, 0x00, 0x00}; -unsigned char Draw_Block_Value_Macro[] = {0x74, 0x00, 0x12, 0x76, 0xFF, 0xFF}; -unsigned char Draw_Block_Address_Macro[] = {0x74, 0x00, 0x11, 0x76, 0x00, 0x00}; - -unsigned int LcdAddress = 0, LcdTableAddress = 0; -unsigned char contrast = 0x66; -unsigned char backlight = 8; -int LCD_MEM[110 * 17]; //This array stores a copy of all data on the LCD -//screen. If memory is an issue though, this array -//can be eliminated and the halLcdReadBlock() -//command can be used instead whenever you are -//manipulating the currently displayed data. - -/**********************************************************************//** - * @brief Sends 3+3 bytes of data to the LCD using the format specified - * by the LCD Guide. - * - * @param Data[] Data array for transmission - * - * @return none - *************************************************************************/ - -void halLcdSendCommand(unsigned char Data[]) -{ - unsigned char i; - - LCD_CS_RST_OUT &= ~LCD_CS_PIN; //CS = 0 --> Start Transfer - for (i = 0; i < 6; i++) - { - while (!(UCB2IFG & UCTXIFG)) ; // Wait for TXIFG - UCB2TXBUF = Data[i]; // Load data - - if (i == 2) //Pull CS up after 3 bytes - { - while (UCB2STAT & UCBUSY) ; - LCD_CS_RST_OUT |= LCD_CS_PIN; //CS = 1 --> Stop Transfer - LCD_CS_RST_OUT &= ~LCD_CS_PIN; //CS = 0 --> Start Transfer - } - } - while (UCB2STAT & UCBUSY) ; - LCD_CS_RST_OUT |= LCD_CS_PIN; //CS = 1 --> Stop Transfer -} - -/**********************************************************************//** - * @brief Initializes the USCI module, LCD device for communication. - * - * - Sets up the SPI2C Communication Module - * - Performs Hitachi LCD Initialization Procedure - * - * @param none - * - * @return none - *************************************************************************/ - -void halLcdInit(void) -{ - volatile unsigned int i = 0; - - LCD_CS_RST_OUT |= LCD_CS_PIN | LCD_RESET_PIN; - LCD_CS_RST_DIR |= LCD_CS_PIN | LCD_RESET_PIN; - - LCD_BACKLT_SEL |= LCD_BACKLIGHT_PIN; - - LCD_CS_RST_OUT &= ~LCD_RESET_PIN; // Reset LCD - __delay_cycles(0x47FF); //Reset Pulse - LCD_CS_RST_OUT |= LCD_RESET_PIN; - - // UCLK,MOSI setup, SOMI cleared - LCD_SPI_SEL |= LCD_MOSI_PIN + LCD_CLK_PIN; - LCD_SPI_SEL &= ~LCD_MISO_PIN; - LCD_SPI_DIR &= ~(LCD_MISO_PIN + LCD_MOSI_PIN); // Pin direction controlled by module, - // Set both pins to input as default - - // Initialize the USCI_B2 module for SPI operation - UCB2CTL1 = UCSWRST; // Hold USCI in SW reset mode while configuring - // it - UCB2CTL0 = UCMST + UCSYNC + UCCKPL + UCMSB; // 3-pin, 8-bit SPI master - UCB2CTL1 |= UCSSEL_2; // SMCLK - UCB2BR0 = 4; // Note: Do not exceed D/S spec for UCLK! - UCB2BR1 = 0; - UCB2CTL1 &= ~UCSWRST; // Release USCI state machine - UCB2IFG &= ~UCRXIFG; - - // Wake-up the LCD as per datasheet specifications - halLcdActive(); - - // LCD Initialization Routine Using Predefined Macros - halLcdSendCommand(&LcdInitMacro[1 * 6]); - halLcdSendCommand(&LcdInitMacro[2 * 6]); - halLcdSendCommand(&LcdInitMacro[4 * 6]); - halLcdSendCommand(&LcdInitMacro[5 * 6]); - halLcdSendCommand(&LcdInitMacro[6 * 6]); - halLcdSendCommand(&LcdInitMacro[7 * 6]); - -} - -/**********************************************************************//** - * @brief Shuts down the LCD display and hdisables the USCI communication. - * - * @param none - * - * @return none - *************************************************************************/ - -void halLcdShutDown(void) -{ - halLcdStandby(); - - LCD_CS_RST_DIR |= LCD_CS_PIN | LCD_RESET_PIN; - LCD_CS_RST_OUT &= ~(LCD_CS_PIN | LCD_RESET_PIN); - LCD_CS_RST_OUT &= ~LCD_RESET_PIN; - - LCD_SPI_SEL &= ~(LCD_MOSI_PIN + LCD_CLK_PIN + LCD_MISO_PIN); - LCD_CS_RST_DIR |= LCD_MOSI_PIN + LCD_CLK_PIN + LCD_MISO_PIN; - LCD_CS_RST_OUT &= ~(LCD_MOSI_PIN + LCD_CLK_PIN + LCD_MISO_PIN); - - UCB2CTL0 = UCSWRST; -} - -/**********************************************************************//** - * @brief Initializes the LCD backlight PWM signal. - * - * @param none - * - * @return none - * - *************************************************************************/ - -void halLcdBackLightInit(void) -{ - LCD_BACKLT_DIR |= LCD_BACKLIGHT_PIN; - LCD_BACKLT_OUT |= LCD_BACKLIGHT_PIN; - LCD_BACKLT_SEL |= LCD_BACKLIGHT_PIN; - - TA0CCTL3 = OUTMOD_7; - TA0CCR3 = TA0CCR0 >> 1; - backlight = 8; - - TA0CCR0 = 400; - TA0CTL = TASSEL_2 + MC_1; -} - -/**********************************************************************//** - * @brief Get function for the backlight PWM's duty cycle. - * - * @param none - * - * @return backlight One of the the 17 possible settings - valued 0 to 16. - * - *************************************************************************/ - -unsigned int halLcdGetBackLight(void) -{ - return backlight; -} - -/**********************************************************************//** - * @brief Set function for the backlight PWM's duty cycle - * - * @param BackLightLevel The target backlight duty cycle - valued 0 to 16. - * - * @return none - *************************************************************************/ - -void halLcdSetBackLight(unsigned char BackLightLevel) -{ - unsigned int dutyCycle = 0, i, dummy; - - if (BackLightLevel > 0) - { - TA0CCTL3 = OUTMOD_7; - dummy = (TA0CCR0 >> 4); - - for (i = 0; i < BackLightLevel; i++) - dutyCycle += dummy; - - TA0CCR3 = dutyCycle; - - // If the backlight was previously turned off, turn it on. - if (!backlight) - TA0CTL |= MC0; - } - else - { - TA0CCTL3 = 0; - TA0CTL &= ~MC0; - } - backlight = BackLightLevel; -} - -/**********************************************************************//** - * @brief Turns off the backlight. - * - * Clears the respective GPIO and timer settings. - * - * @param none - * - * @return none - *************************************************************************/ - -void halLcdShutDownBackLight(void) -{ - LCD_BACKLT_DIR |= LCD_BACKLIGHT_PIN; - LCD_BACKLT_OUT &= ~(LCD_BACKLIGHT_PIN); - LCD_BACKLT_SEL &= ~LCD_BACKLIGHT_PIN; - - TA0CCTL3 = 0; - TA0CTL = 0; - - backlight = 0; -} - -/**********************************************************************//** - * @brief Set function for the contrast level of the LCD. - * - * @param ContrastLevel The target contrast level - * - * @return none - *************************************************************************/ - -void halLcdSetContrast(unsigned char ContrastLevel) -{ - if (ContrastLevel > 127) ContrastLevel = 127; - if (ContrastLevel < 70) ContrastLevel = 70; - LcdInitMacro[0x04 * 6 + 5] = ContrastLevel; - halLcdSendCommand(&LcdInitMacro[0x04 * 6]); -} - -/**********************************************************************//** - * @brief Get function for the contrast level of the LCD. - * - * @param none - * - * @return ContrastLevel The LCD constrast level - *************************************************************************/ - -unsigned char halLcdGetContrast(void) -{ - return LcdInitMacro[0x04 * 6 + 5]; -} - -/**********************************************************************//** - * @brief Turns the LCD cursor on at the current text position. - * - * @param none - * - * @return none - *************************************************************************/ - -void halLcdCursor(void) -{ - LcdInitMacro[8 * 6 + 5] ^= BIT2; - halLcdSendCommand(&LcdInitMacro[8 * 6]); - - LcdInitMacro[0x0B * 6 + 5] = ((LcdAddress & 0x1F) << 3); - LcdInitMacro[0x0B * 6 + 4] = ((LcdAddress & 0x1F) << 3) + 3; - LcdInitMacro[0x0C * 6 + 5] = (LcdAddress >> 5); - LcdInitMacro[0x0C * 6 + 4] = (LcdAddress >> 5) + 7; - halLcdSendCommand(&LcdInitMacro[0x0B * 6]); - halLcdSendCommand(&LcdInitMacro[0x0C * 6]); - - halLcdSetAddress(LcdAddress); -} - -/**********************************************************************//** - * @brief Turns off the LCD cursor. - * - * @param none - * - * @return none - *************************************************************************/ - -void halLcdCursorOff(void) -{ - LcdInitMacro[8 * 6 + 5] &= ~BIT2; - halLcdSendCommand(&LcdInitMacro[8 * 6]); -} - -/**********************************************************************//** - * @brief Inverts the grayscale values of the LCD display (Black <> white). - * - * @param none - * - * @return none - *************************************************************************/ - -void halLcdReverse(void) -{ - LcdInitMacro[7 * 6 + 5] ^= BIT1; - halLcdSendCommand(&LcdInitMacro[7 * 6]); -} - -/**********************************************************************//** - * @brief Sets the LCD in standby mode to reduce power consumption. - * - * @param none - * - * @return none - *************************************************************************/ - -void halLcdStandby(void) -{ - LcdInitMacro[3 * 6 + 5] &= (~BIT3) & (~BIT2); - LcdInitMacro[3 * 6 + 5] |= BIT0; - halLcdSendCommand(&LcdInitMacro[3 * 6]); -} - -/**********************************************************************//** - * @brief Puts the LCD into active mode. - * - * @param none - * - * @return none - *************************************************************************/ - -void halLcdActive(void) -{ - halLcdSendCommand(LcdInitMacro); // R00 start oscillation - - // Wait a minimum of 25ms after issuing "start oscillation" - // command (to accomodate for MCLK up to 25MHz) - { - int i; - for(i = 0; i < 5; ++i) { - __delay_cycles(50000); - } - } - - LcdInitMacro[3 * 6 + 5] |= BIT3; - LcdInitMacro[3 * 6 + 5] &= ~BIT0; - halLcdSendCommand(&LcdInitMacro[3 * 6]); // R03 Power control -} - -/**********************************************************************//** - * @brief Sets the pointer location in the LCD. - * - * - LcdAddress = Address - * - LcdTableAddress = Correct Address Row + Column - * = (Address / 0x20)* 17 + Column - * - * @param Address The target pointer location in the LCD. - * - * @return none - *************************************************************************/ - -void halLcdSetAddress(int Address) -{ - int temp; - - Draw_Block_Address_Macro[4] = Address >> 8; - Draw_Block_Address_Macro[5] = Address & 0xFF; - halLcdSendCommand(Draw_Block_Address_Macro); - LcdAddress = Address; - temp = Address >> 5; // Divided by 0x20 - temp = temp + (temp << 4); - //Multiplied by (1+16) and added by the offset - LcdTableAddress = temp + (Address & 0x1F); -} - -/**********************************************************************//** - * @brief Draws a block at the specified LCD address. - * - * A block is the smallest addressable memory on the LCD and is - * equivalent to 8 pixels, each of which is represented by 2 bits - * that represent a grayscale value between 00b and 11b. - * - * @param Address The address at which to draw the block. - * - * @param Value The value of the block - * - * @return none - *************************************************************************/ - -void halLcdDrawBlock(unsigned int Address, unsigned int Value) -{ - halLcdSetAddress(Address); - halLcdDrawCurrentBlock(Value); -} - -/**********************************************************************//** - * @brief Writes Value to LCD CGram and MSP430 internal LCD table. - * - * Also updates the LcdAddress and LcdTableAddress to the correct values. - * - * @param Value The value of the block to be written to the LCD. - * - * @return none - *************************************************************************/ - -void halLcdDrawCurrentBlock(unsigned int Value) -{ - int temp; - - Draw_Block_Value_Macro[4] = Value >> 8; - Draw_Block_Value_Macro[5] = Value & 0xFF; - LCD_MEM[LcdTableAddress] = Value; - - halLcdSendCommand(Draw_Block_Value_Macro); - - LcdAddress++; - temp = LcdAddress >> 5; // Divided by 0x20 - temp = temp + (temp << 4); - // Multiplied by (1+16) and added by the offset - LcdTableAddress = temp + (LcdAddress & 0x1F); - - // If LcdAddress gets off the right edge, move to next line - if ((LcdAddress & 0x1F) > 0x11) - halLcdSetAddress((LcdAddress & 0xFFE0) + 0x20); - if (LcdAddress == LCD_Size) - halLcdSetAddress(0); -} - -/**********************************************************************//** - * @brief Returns the LCD CGRAM value at location Address. - * - * @param Address The address of the block to be read from the LCD. - * - * @return Value The value held at the specified address. - *************************************************************************/ - -int halLcdReadBlock(unsigned int Address) -{ - int i = 0, Value = 0, ReadData[7]; - - halLcdSetAddress(Address); - halLcdSendCommand(Read_Block_Address_Macro); - - LCD_CS_RST_OUT &= ~LCD_CS_PIN; // start transfer CS=0 - UCB2TXBUF = 0x77; // Transmit first character 0x77 - - while (!(UCB2IFG & UCTXIFG)) ; - while (UCB2STAT & UCBUSY) ; - - //Read 5 dummies values and 2 valid address data - LCD_SPI_SEL &= ~LCD_MOSI_PIN; //Change SPI2C Dir - LCD_SPI_SEL |= LCD_MISO_PIN; - - for (i = 0; i < 7; i++) - { - UCB2IFG &= ~UCRXIFG; - UCB2TXBUF = 1; // load dummy byte 1 for clk - while (!(UCB2IFG & UCRXIFG)) ; - ReadData[i] = UCB2RXBUF; - } - LCD_CS_RST_OUT |= LCD_CS_PIN; // Stop Transfer CS = 1 - - LCD_SPI_SEL |= LCD_MOSI_PIN; //Change SPI2C Dir - LCD_SPI_SEL &= ~LCD_MISO_PIN; - LCD_CS_RST_DIR |= LCD_MOSI_PIN + LCD_CLK_PIN; - LCD_CS_RST_DIR &= ~LCD_MISO_PIN; - - Value = (ReadData[5] << 8) + ReadData[6]; - return Value; -} - -/**********************************************************************//** - * @brief Draw a Pixel of grayscale at coordinate (x,y) to LCD - * - * @param x x-coordinate for grayscale value - * - * @param y y-coordinate for grayscale value - * - * @param GrayScale The intended grayscale value of the pixel - one of - * four possible settings. - * - * @return none - *************************************************************************/ - -void halLcdPixel(int x, int y, unsigned char GrayScale) -{ - int Address, Value; - unsigned char offset; - - //Each line increments by 0x20 - if ((x >= 0) && (x < LCD_COL) && (y >= 0) && (y < LCD_ROW)) - { - Address = (y << 5) + (x >> 3); //Narrow down to 8 possible pixels - - Value = LCD_MEM[(y << 4) + y + (x >> 3)]; //y * 17 --> row. x>>3 --> column - - offset = (x & 0x07) << 1; //3 LSBs = pos. within the 8 columns - Value &= ~(3 << offset); //clear out the corresponding bits - Value |= GrayScale << offset; //set pixel to GrayScale level - - halLcdDrawBlock(Address, Value); - } -} - -/**********************************************************************//** - * @brief Clears entire LCD CGRAM as well as LCD_MEM. - * - * @param none - * - * @return none - *************************************************************************/ - -void halLcdClearScreen(void) -{ - int i, j, k, Current_Location = 0; - - halLcdSetAddress(0); - - for (i = 0; i < 110; i++) - { - //prepare to send image - LCD_CS_RST_OUT &= ~LCD_CS_PIN; //CS = 0 --> Start Transfer - for (k = 0; k < 3; k++) - { - while (!(UCB2IFG & UCTXIFG)) ; // Wait for TXIFG - UCB2TXBUF = Draw_Block_Value_Macro[k]; // Load data - } - while (UCB2STAT & UCBUSY) ; - LCD_CS_RST_OUT |= LCD_CS_PIN; //CS = 1 --> Stop Transfer - LCD_CS_RST_OUT &= ~LCD_CS_PIN; //CS = 0 --> Start Transfer - while (!(UCB2IFG & UCTXIFG)) ; // Wait for TXIFG - UCB2TXBUF = Draw_Block_Value_Macro[3]; // Load data - - //send blank line - for (j = 0; j < 17; j++) - { - LCD_MEM[LcdTableAddress++] = 0x00; - while (!(UCB2IFG & UCTXIFG)) ; // Wait for TXIFG - UCB2TXBUF = 0x00; // Load data - while (!(UCB2IFG & UCTXIFG)) ; // Wait for TXIFG - UCB2TXBUF = 0x00; // Load data - } - //Clear the partially visible block at the edge of the screen - while (!(UCB2IFG & UCTXIFG)) ; // Wait for TXIFG - UCB2TXBUF = 0x00; // Load data - while (!(UCB2IFG & UCTXIFG)) ; // Wait for TXIFG - UCB2TXBUF = 0x00; // Load data - while (UCB2STAT & UCBUSY) ; - LCD_CS_RST_OUT |= LCD_CS_PIN; //CS = 1 --> Stop Transfer - - Current_Location += 0x20; - halLcdSetAddress(Current_Location); - } - - halLcdSetAddress(0); -} - -/**********************************************************************//** - * @brief Loads an image of size = rows * columns, starting at the - * coordinate (x,y). - * - * @param Image[] The image to be loaded - * - * @param Rows The number of rows in the image. Size = Rows * Columns. - * - * @param Columns The number of columns in the image. Size = Rows * Columns. - * - * @param x x-coordinate of the image's starting location - * - * @param y y-coordinate of the image's starting location - * - * @return none - *************************************************************************/ - -void halLcdImage(const unsigned int Image[], int Columns, int Rows, int x, int y) -{ - int i, CurrentLocation; - - CurrentLocation = (y << 5) + (x >> 3); - halLcdSetAddress(CurrentLocation); - for (i = 0; i < Rows; i++) - { - halLcdDrawCurrentLine(Image, Columns); - Image += Columns; - CurrentLocation += 0x20; - halLcdSetAddress(CurrentLocation); - } -} - -/**********************************************************************//** - * @brief Writes Value to LCD CGram and MSP430 internal LCD table. - * - * Also updates the LcdAddress and LcdTableAddress to the correct values. - * - * @param *value Pointer to the line to be written to the LCD. - * - * @return none - *************************************************************************/ - -void halLcdDrawCurrentLine(const unsigned int *value, int Columns) -{ - unsigned char i; - - //prepare to send image - LCD_CS_RST_OUT &= ~LCD_CS_PIN; //CS = 0 --> Start Transfer - for (i = 0; i < 3; i++) - { - while (!(UCB2IFG & UCTXIFG)) ; // Wait for TXIFG - UCB2TXBUF = Draw_Block_Value_Macro[i]; // Load data - } - while (UCB2STAT & UCBUSY) ; - LCD_CS_RST_OUT |= LCD_CS_PIN; //CS = 1 --> Stop Transfer - LCD_CS_RST_OUT &= ~LCD_CS_PIN; //CS = 0 --> Start Transfer - while (!(UCB2IFG & UCTXIFG)) ; // Wait for TXIFG - UCB2TXBUF = Draw_Block_Value_Macro[3]; // Load data - - //send the image - for (i = 0; i < Columns; i++) - { - // Make sure we are not writing outside LCD_MEM[] - if (LcdTableAddress >= sizeof(LCD_MEM)){ - break; - } - LCD_MEM[LcdTableAddress++] = *value; - while (!(UCB2IFG & UCTXIFG)) ; // Wait for TXIFG - UCB2TXBUF = (*value) >> 8; // Load data - while (!(UCB2IFG & UCTXIFG)) ; // Wait for TXIFG - UCB2TXBUF = (*value++) & 0xFF; // Load data - } - - while (UCB2STAT & UCBUSY) ; - LCD_CS_RST_OUT |= LCD_CS_PIN; //CS = 1 --> Stop Transfer -} - -/**********************************************************************//** - * @brief Clears an image of size rows x columns starting at (x, y). - * - * @param Columns The size, in columns, of the image to be cleared. - * - * @param Rows The size, in rows, of the image to be cleared. - * - * @param x x-coordinate of the image to be cleared - * - * @param y y-coordinate of the image to be cleared - * - * @return none - *************************************************************************/ - -void halLcdClearImage(int Columns, int Rows, int x, int y) -{ - int i, j, k, Current_Location; - - Current_Location = (y << 5) + (x >> 3); - halLcdSetAddress(Current_Location); - - for (i = 0; i < Rows; i++) - { - //prepare to send image - LCD_CS_RST_OUT &= ~LCD_CS_PIN; //CS = 0 --> Start Transfer - for (k = 0; k < 3; k++) - { - while (!(UCB2IFG & UCTXIFG)) ; // Wait for TXIFG - UCB2TXBUF = Draw_Block_Value_Macro[k]; // Load data - } - while (UCB2STAT & UCBUSY) ; - LCD_CS_RST_OUT |= LCD_CS_PIN; //CS = 1 --> Stop Transfer - LCD_CS_RST_OUT &= ~LCD_CS_PIN; //CS = 0 --> Start Transfer - while (!(UCB2IFG & UCTXIFG)) ; // Wait for TXIFG - UCB2TXBUF = Draw_Block_Value_Macro[3]; // Load data - - //send blank line - for (j = 0; j < Columns; j++) - { - LCD_MEM[LcdTableAddress++] = 0x00; - while (!(UCB2IFG & UCTXIFG)) ; // Wait for TXIFG - UCB2TXBUF = 0x00; // Load data - while (!(UCB2IFG & UCTXIFG)) ; // Wait for TXIFG - UCB2TXBUF = 0x00; // Load data - } - while (UCB2STAT & UCBUSY) ; - LCD_CS_RST_OUT |= LCD_CS_PIN; //CS = 1 --> Stop Transfer - - Current_Location += 0x20; - halLcdSetAddress(Current_Location); - } -} - -/**********************************************************************//** - * @brief Writes Value to LCD CGRAM. Pointers internal to the LCD - * are also updated. - * - * @param Value The value to be written to the current LCD pointer - * - * @return none - *************************************************************************/ - -void halLcdDrawTextBlock(unsigned int Value) -{ - int temp; - - Draw_Block_Value_Macro[4] = Value >> 8; - Draw_Block_Value_Macro[5] = Value & 0xFF; - LCD_MEM[LcdTableAddress] = Value; - - halLcdSendCommand(Draw_Block_Value_Macro); - - LcdAddress++; - temp = LcdAddress >> 5; // Divided by 0x20 - temp = temp + (temp << 4); - //Multiplied by (1+16) and added by the offset - LcdTableAddress = temp + (LcdAddress & 0x1F); - - // If LcdAddress gets off the right edge, move to next line - if ((LcdAddress & 0x1F) > 0x10) - halLcdSetAddress((LcdAddress & 0xFFE0) + 0x20); - - if (LcdAddress >= LCD_Size) - halLcdSetAddress(0); -} - -/**********************************************************************//** - * @brief Displays the string to the LCD starting at current location. - * - * Writes all the data to LCD_MEM first, then updates all corresponding - * LCD CGRAM locations at once, in a continuous fashion. - * - * @param String[] The string to be displayed on LCD. - * - * @param TextStyle Value that specifies whether the string is to be - * inverted or overwritten. - * - Invert = 0x01 - * - Overwrite = 0x04 - * - * @return none - *************************************************************************/ - -void halLcdPrint(char String[], unsigned char TextStyle) -{ - int i, j, Counter = 0, BlockValue; - int Address, LCD_MEM_Add, ActualAddress; - int temp; - char LookUpChar; - - ActualAddress = LcdAddress; - Counter = LcdAddress & 0x1F; - i = 0; - - while (String[i] != 0) // Stop on null character - { - LookUpChar = fonts_lookup[String[i]]; - - for (j = 0; j < FONT_HEIGHT; j++) - { - Address = ActualAddress + j * 0x20; - temp = Address >> 5; - temp += (temp << 4); - - LCD_MEM_Add = temp + (Address & 0x1F); - - BlockValue = LCD_MEM[LCD_MEM_Add]; - - if (TextStyle & GRAYSCALE_TEXT) - { - if (TextStyle & INVERT_TEXT) - if (TextStyle & OVERWRITE_TEXT) - BlockValue = 0xAAAA - GrayScale_fonts[LookUpChar * (FONT_HEIGHT + 1) + j]; - else - BlockValue |= 0xAAAA - GrayScale_fonts[LookUpChar * (FONT_HEIGHT + 1) + j]; - else - if (TextStyle & OVERWRITE_TEXT) - BlockValue = GrayScale_fonts[LookUpChar * (FONT_HEIGHT + 1) + j]; - else - BlockValue |= GrayScale_fonts[LookUpChar * (FONT_HEIGHT + 1) + j]; - } - else - { - if (TextStyle & INVERT_TEXT) - if (TextStyle & OVERWRITE_TEXT) - BlockValue = 0xFFFF - fonts[LookUpChar * 13 + j]; - else - BlockValue |= 0xFFFF - fonts[LookUpChar * 13 + j]; - - else - if (TextStyle & OVERWRITE_TEXT) - BlockValue = fonts[LookUpChar * (FONT_HEIGHT + 1) + j]; - else - BlockValue |= fonts[LookUpChar * (FONT_HEIGHT + 1) + j]; - } - halLcdDrawBlock(Address, BlockValue); - } - - Counter++; - if (Counter == 17) - { - Counter = 0; - ActualAddress += 0x20 * FONT_HEIGHT - 16; - if (ActualAddress > LCD_Last_Pixel - 0x20 * FONT_HEIGHT) - ActualAddress = 0; - } - else - ActualAddress++; - i++; - } - halLcdSetAddress(ActualAddress); - -} - -/**********************************************************************//** - * @brief Displays the string to the LCD starting at (x,y) location. - * - * Writes all the data to LCD_MEM first, then updates all corresponding - * LCD CGRAM locations at once, in a continuous fashion. - * - * @param String[] String to be displayed on LCD - * - * @param x x-coordinate of the write location on the LCD - * - * @param y y-coordinate of the write location on the LCD - * - * @param TextStyle Value that specifies whether the string is to be - * inverted or overwritten. - * - Invert = 0x01 - * - Overwrite = 0x04 - *************************************************************************/ - -void halLcdPrintXY(char String[], int x, int y, unsigned char TextStyle) -{ - //Each line increments by 0x20 - halLcdSetAddress((y << 5) + (x >> 3)); //Narrow down to 8 possible pixels - halLcdPrint(String, TextStyle); -} - -/**********************************************************************//** - * @brief Displays a string on the LCD on the specified line. - * - * @param String[] The string to be displayed on LCD. - * - * @param Line The line on the LCD on which to print the string. - * - * @param TextStyle Value that specifies whether the string is to be - * inverted or overwritten. - * - Invert = 0x01 - * - Overwrite = 0x04 - * - * @return none - *************************************************************************/ - -void halLcdPrintLine(char String[], unsigned char Line, unsigned char TextStyle) -{ - int temp; - - temp = Line * FONT_HEIGHT; - halLcdSetAddress(temp << 5); // 0x20 = 2^5 - halLcdPrint(String, TextStyle); -} - -/**********************************************************************//** - * @brief Prints a string beginning on a given line and column. - * - * @param String[] The string to be displayed on LCD. - * - * @param Line The line on which to print the string of text - * - * @param Col The column on which to print the string of text - * - * @param TextStyle Value that specifies whether the string is to be - * inverted or overwritten. - * - Invert = 0x01 - * - Overwrite = 0x04 - * - * @return none - *************************************************************************/ - -void halLcdPrintLineCol(char String[], unsigned char Line, unsigned char Col, - unsigned char TextStyle) -{ - int temp; - - temp = Line * FONT_HEIGHT; - temp <<= 5; - temp += Col; - - halLcdSetAddress(temp); // 0x20 = 2^5 - halLcdPrint(String, TextStyle); -} - -/**********************************************************************//** - * @brief Draws a horizontral line from (x1,y) to (x2,y) of GrayScale level - * - * @param x1 x-coordinate of the first point - * - * @param x2 x-coordinate of the second point - * - * @param y y-coordinate of both points - * - * @param GrayScale Grayscale level of the horizontal line - * - * @return none - *************************************************************************/ - -void halLcdHLine(int x1, int x2, int y, unsigned char GrayScale) -{ - int x_dir, x; - - if (x1 < x2) - x_dir = 1; - else - x_dir = -1; - x = x1; - while (x != x2) - { - halLcdPixel(x, y, GrayScale); - x += x_dir; - } -} - -/**********************************************************************//** - * @brief Draws a vertical line from (x,y1) to (x,y2) of GrayScale level - * - * @param x x-coordinate of both points - * - * @param y1 y-coordinate of the first point - * - * @param y2 y-coordinate of the second point - * - * @param GrayScale GrayScale level of the vertical line - * - * @return none - *************************************************************************/ - -void halLcdVLine(int x, int y1, int y2, unsigned char GrayScale) -{ - int y_dir, y; - - if (y1 < y2) - y_dir = 1; - else - y_dir = -1; - y = y1; - while (y != y2) - { - halLcdPixel(x, y, GrayScale); - y += y_dir; - } -} - -/**********************************************************************//** - * @brief Draws a line from (x1,y1) to (x2,y2) of GrayScale level. - * - * Uses Bresenham's line algorithm. - * - * @param x1 x-coordinate of the first point - * - * @param y1 y-coordinate of the first point - * - * @param x2 x-coordinate of the second point - * - * @param y2 y-coordinate of the second point - * - * @param GrayScale Grayscale level of the line - * - * @return none - *************************************************************************/ - -void halLcdLine(int x1, int y1, int x2, int y2, unsigned char GrayScale) -{ - int x, y, deltay, deltax, d; - int x_dir, y_dir; - - if (x1 == x2) - halLcdVLine(x1, y1, y2, GrayScale); - else - { - if (y1 == y2) - halLcdHLine(x1, x2, y1, GrayScale); - else // a diagonal line - { - if (x1 > x2) - x_dir = -1; - else x_dir = 1; - if (y1 > y2) - y_dir = -1; - else y_dir = 1; - - x = x1; - y = y1; - deltay = ABS(y2 - y1); - deltax = ABS(x2 - x1); - - if (deltax >= deltay) - { - d = (deltay << 1) - deltax; - while (x != x2) - { - halLcdPixel(x, y, GrayScale); - if (d < 0) - d += (deltay << 1); - else - { - d += ((deltay - deltax) << 1); - y += y_dir; - } - x += x_dir; - } - } - else - { - d = (deltax << 1) - deltay; - while (y != y2) - { - halLcdPixel(x, y, GrayScale); - if (d < 0) - d += (deltax << 1); - else - { - d += ((deltax - deltay) << 1); - x += x_dir; - } - y += y_dir; - } - } - } - } -} - -/**********************************************************************//** - * @brief Draw a circle of Radius with center at (x,y) of GrayScale level. - * - * Uses Bresenham's circle algorithm - * - * @param x x-coordinate of the circle's center point - * - * @param y y-coordinate of the circle's center point - * - * @param Radius Radius of the circle - * - * @param GrayScale Grayscale level of the circle - *************************************************************************/ - -void halLcdCircle(int x, int y, int Radius, int GrayScale) -{ - int xx, yy, ddF_x, ddF_y, f; - - ddF_x = 0; - ddF_y = -(2 * Radius); - f = 1 - Radius; - - xx = 0; - yy = Radius; - halLcdPixel(x + xx, y + yy, GrayScale); - halLcdPixel(x + xx, y - yy, GrayScale); - halLcdPixel(x - xx, y + yy, GrayScale); - halLcdPixel(x - xx, y - yy, GrayScale); - halLcdPixel(x + yy, y + xx, GrayScale); - halLcdPixel(x + yy, y - xx, GrayScale); - halLcdPixel(x - yy, y + xx, GrayScale); - halLcdPixel(x - yy, y - xx, GrayScale); - while (xx < yy) - { - if (f >= 0) - { - yy--; - ddF_y += 2; - f += ddF_y; - } - xx++; - ddF_x += 2; - f += ddF_x + 1; - halLcdPixel(x + xx, y + yy, GrayScale); - halLcdPixel(x + xx, y - yy, GrayScale); - halLcdPixel(x - xx, y + yy, GrayScale); - halLcdPixel(x - xx, y - yy, GrayScale); - halLcdPixel(x + yy, y + xx, GrayScale); - halLcdPixel(x + yy, y - xx, GrayScale); - halLcdPixel(x - yy, y + xx, GrayScale); - halLcdPixel(x - yy, y - xx, GrayScale); - } -} - -/**********************************************************************//** - * @brief Scrolls a single row of pixels one column to the left. - * - * The column that is scrolled out of the left side of the LCD will be - * displayed the right side of the LCD. - * - * @param y The row of pixels to scroll. y = 0 is at the top-left - * corner of the LCD. - * - * @return none - *************************************************************************/ - -void halLcdScrollRow(int y) -{ - int i, Address, LcdTableAddressTemp; - unsigned int temp; - - Address = y << 5; - - halLcdSetAddress(Address); - - //Multiplied by (1+16) and added by the offset - LcdTableAddressTemp = y + (y << 4); - temp = ((LCD_MEM[LcdTableAddressTemp] & 0x0003) << 14); - - for (i = 0; i < 0x10; i++) - halLcdDrawCurrentBlock(((LCD_MEM[LcdTableAddressTemp + i] & 0xFFFC) >> 2) \ - + ((LCD_MEM[LcdTableAddressTemp + i + 1] & 0x0003) << 14)); - - halLcdDrawCurrentBlock(((LCD_MEM[LcdTableAddressTemp + 0x10] & 0xFFFC) >> 2) + temp); -} - -/**********************************************************************//** - * @brief Scrolls multiple rows of pixels, yStart to yEnd, - * one column to the left. - * - * The column that is scrolled out of the left side of the LCD will be - * displayed the right side of the LCD. y = 0 is at the top-left of the - * LCD screen. - * - * @param yStart The beginning row to be scrolled - * - * @param yEnd The last row to be scrolled - * - * @return none - *************************************************************************/ - -void halLcdHScroll(int yStart, int yEnd) -{ - int i; - - for (i = yStart; i < yEnd + 1; i++) - halLcdScrollRow(i); -} - -/**********************************************************************//** - * @brief Scrolls a line of text one column to the left. - * - * @param Line The line of text to be scrolled. - * - * @return none - *************************************************************************/ - -void halLcdScrollLine(int Line) -{ - int i, Row; - - Row = Line * FONT_HEIGHT; - - for (i = Row; i < Row + FONT_HEIGHT; i++) - halLcdScrollRow(i); -} - +/******************************************************************************* + * + * hal_lcd.c + * + * Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/ + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * + * Neither the name of Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ******************************************************************************/ + +#include "contiki-conf.h" +#include "core/sys/cc.h" + +#include "hal_MSP-EXP430F5438.h" +#include "hal_lcd_fonts.h" + +unsigned char LcdInitMacro[] = { + 0x74, 0x00, 0x00, 0x76, 0x00, 0x01, // R00 start oscillation + 0x74, 0x00, 0x01, 0x76, 0x00, 0x0D, // R01 driver output control + 0x74, 0x00, 0x02, 0x76, 0x00, 0x4C, // R02 LCD - driving waveform control + 0x74, 0x00, 0x03, 0x76, 0x12, 0x14, // R03 Power control + 0x74, 0x00, 0x04, 0x76, 0x04, 0x66, // R04 Contrast control + 0x74, 0x00, 0x05, 0x76, 0x00, 0x10, // R05 Entry mode + 0x74, 0x00, 0x06, 0x76, 0x00, 0x00, // R06 RAM data write mask + 0x74, 0x00, 0x07, 0x76, 0x00, 0x15, // R07 Display control + 0x74, 0x00, 0x08, 0x76, 0x00, 0x03, // R08 Cursor Control + 0x74, 0x00, 0x09, 0x76, 0x00, 0x00, // R09 RAM data write mask + 0x74, 0x00, 0x0A, 0x76, 0x00, 0x15, // R0A + 0x74, 0x00, 0x0B, 0x76, 0x00, 0x03, // R0B Horizontal Cursor Position + 0x74, 0x00, 0x0C, 0x76, 0x00, 0x03, // R0C Vertical Cursor Position + 0x74, 0x00, 0x0D, 0x76, 0x00, 0x00, // R0D + 0x74, 0x00, 0x0E, 0x76, 0x00, 0x15, // R0E + 0x74, 0x00, 0x0F, 0x76, 0x00, 0x03, // R0F + 0x74, 0x00, 0x10, 0x76, 0x00, 0x15, // R0E + 0x74, 0x00, 0x11, 0x76, 0x00, 0x03, // R0F +}; + +unsigned char Read_Block_Address_Macro[] = {0x74, 0x00, 0x12, 0x77, 0x00, 0x00}; +unsigned char Draw_Block_Value_Macro[] = {0x74, 0x00, 0x12, 0x76, 0xFF, 0xFF}; +unsigned char Draw_Block_Address_Macro[] = {0x74, 0x00, 0x11, 0x76, 0x00, 0x00}; + +unsigned int LcdAddress = 0, LcdTableAddress = 0; +unsigned char contrast = 0x66; +unsigned char backlight = 8; +int LCD_MEM[110 * 17]; //This array stores a copy of all data on the LCD +//screen. If memory is an issue though, this array +//can be eliminated and the halLcdReadBlock() +//command can be used instead whenever you are +//manipulating the currently displayed data. + +/**********************************************************************//** + * @brief Sends 3+3 bytes of data to the LCD using the format specified + * by the LCD Guide. + * + * @param Data[] Data array for transmission + * + * @return none + *************************************************************************/ + +void halLcdSendCommand(unsigned char Data[]) +{ + unsigned char i; + + LCD_CS_RST_OUT &= ~LCD_CS_PIN; //CS = 0 --> Start Transfer + for (i = 0; i < 6; i++) + { + while (!(UCB2IFG & UCTXIFG)) ; // Wait for TXIFG + UCB2TXBUF = Data[i]; // Load data + + if (i == 2) //Pull CS up after 3 bytes + { + while (UCB2STAT & UCBUSY) ; + LCD_CS_RST_OUT |= LCD_CS_PIN; //CS = 1 --> Stop Transfer + LCD_CS_RST_OUT &= ~LCD_CS_PIN; //CS = 0 --> Start Transfer + } + } + while (UCB2STAT & UCBUSY) ; + LCD_CS_RST_OUT |= LCD_CS_PIN; //CS = 1 --> Stop Transfer +} + +/**********************************************************************//** + * @brief Initializes the USCI module, LCD device for communication. + * + * - Sets up the SPI2C Communication Module + * - Performs Hitachi LCD Initialization Procedure + * + * @param none + * + * @return none + *************************************************************************/ + +void halLcdInit(void) +{ + LCD_CS_RST_OUT |= LCD_CS_PIN | LCD_RESET_PIN; + LCD_CS_RST_DIR |= LCD_CS_PIN | LCD_RESET_PIN; + + LCD_BACKLT_SEL |= LCD_BACKLIGHT_PIN; + + LCD_CS_RST_OUT &= ~LCD_RESET_PIN; // Reset LCD + __delay_cycles(0x47FF); //Reset Pulse + LCD_CS_RST_OUT |= LCD_RESET_PIN; + + // UCLK,MOSI setup, SOMI cleared + LCD_SPI_SEL |= LCD_MOSI_PIN + LCD_CLK_PIN; + LCD_SPI_SEL &= ~LCD_MISO_PIN; + LCD_SPI_DIR &= ~(LCD_MISO_PIN + LCD_MOSI_PIN); // Pin direction controlled by module, + // Set both pins to input as default + + // Initialize the USCI_B2 module for SPI operation + UCB2CTL1 = UCSWRST; // Hold USCI in SW reset mode while configuring + // it + UCB2CTL0 = UCMST + UCSYNC + UCCKPL + UCMSB; // 3-pin, 8-bit SPI master + UCB2CTL1 |= UCSSEL_2; // SMCLK + UCB2BR0 = 4; // Note: Do not exceed D/S spec for UCLK! + UCB2BR1 = 0; + UCB2CTL1 &= ~UCSWRST; // Release USCI state machine + UCB2IFG &= ~UCRXIFG; + + // Wake-up the LCD as per datasheet specifications + halLcdActive(); + + // LCD Initialization Routine Using Predefined Macros + halLcdSendCommand(&LcdInitMacro[1 * 6]); + halLcdSendCommand(&LcdInitMacro[2 * 6]); + halLcdSendCommand(&LcdInitMacro[4 * 6]); + halLcdSendCommand(&LcdInitMacro[5 * 6]); + halLcdSendCommand(&LcdInitMacro[6 * 6]); + halLcdSendCommand(&LcdInitMacro[7 * 6]); + +} + +/**********************************************************************//** + * @brief Shuts down the LCD display and hdisables the USCI communication. + * + * @param none + * + * @return none + *************************************************************************/ + +void halLcdShutDown(void) +{ + halLcdStandby(); + + LCD_CS_RST_DIR |= LCD_CS_PIN | LCD_RESET_PIN; + LCD_CS_RST_OUT &= ~(LCD_CS_PIN | LCD_RESET_PIN); + LCD_CS_RST_OUT &= ~LCD_RESET_PIN; + + LCD_SPI_SEL &= ~(LCD_MOSI_PIN + LCD_CLK_PIN + LCD_MISO_PIN); + LCD_CS_RST_DIR |= LCD_MOSI_PIN + LCD_CLK_PIN + LCD_MISO_PIN; + LCD_CS_RST_OUT &= ~(LCD_MOSI_PIN + LCD_CLK_PIN + LCD_MISO_PIN); + + UCB2CTL0 = UCSWRST; +} + +/**********************************************************************//** + * @brief Initializes the LCD backlight PWM signal. + * + * @param none + * + * @return none + * + *************************************************************************/ + +void halLcdBackLightInit(void) +{ + LCD_BACKLT_DIR |= LCD_BACKLIGHT_PIN; + LCD_BACKLT_OUT |= LCD_BACKLIGHT_PIN; + LCD_BACKLT_SEL |= LCD_BACKLIGHT_PIN; + + TA0CCTL3 = OUTMOD_7; + TA0CCR3 = TA0CCR0 >> 1; + backlight = 8; + + TA0CCR0 = 400; + TA0CTL = TASSEL_2 + MC_1; +} + +/**********************************************************************//** + * @brief Get function for the backlight PWM's duty cycle. + * + * @param none + * + * @return backlight One of the the 17 possible settings - valued 0 to 16. + * + *************************************************************************/ + +unsigned int halLcdGetBackLight(void) +{ + return backlight; +} + +/**********************************************************************//** + * @brief Set function for the backlight PWM's duty cycle + * + * @param BackLightLevel The target backlight duty cycle - valued 0 to 16. + * + * @return none + *************************************************************************/ + +void halLcdSetBackLight(unsigned char BackLightLevel) +{ + unsigned int dutyCycle = 0, i, dummy; + + if (BackLightLevel > 0) + { + TA0CCTL3 = OUTMOD_7; + dummy = (TA0CCR0 >> 4); + + for (i = 0; i < BackLightLevel; i++) + dutyCycle += dummy; + + TA0CCR3 = dutyCycle; + + // If the backlight was previously turned off, turn it on. + if (!backlight) + TA0CTL |= MC0; + } + else + { + TA0CCTL3 = 0; + TA0CTL &= ~MC0; + } + backlight = BackLightLevel; +} + +/**********************************************************************//** + * @brief Turns off the backlight. + * + * Clears the respective GPIO and timer settings. + * + * @param none + * + * @return none + *************************************************************************/ + +void halLcdShutDownBackLight(void) +{ + LCD_BACKLT_DIR |= LCD_BACKLIGHT_PIN; + LCD_BACKLT_OUT &= ~(LCD_BACKLIGHT_PIN); + LCD_BACKLT_SEL &= ~LCD_BACKLIGHT_PIN; + + TA0CCTL3 = 0; + TA0CTL = 0; + + backlight = 0; +} + +/**********************************************************************//** + * @brief Set function for the contrast level of the LCD. + * + * @param ContrastLevel The target contrast level + * + * @return none + *************************************************************************/ + +void halLcdSetContrast(unsigned char ContrastLevel) +{ + if (ContrastLevel > 127) ContrastLevel = 127; + if (ContrastLevel < 70) ContrastLevel = 70; + LcdInitMacro[0x04 * 6 + 5] = ContrastLevel; + halLcdSendCommand(&LcdInitMacro[0x04 * 6]); +} + +/**********************************************************************//** + * @brief Get function for the contrast level of the LCD. + * + * @param none + * + * @return ContrastLevel The LCD constrast level + *************************************************************************/ + +unsigned char halLcdGetContrast(void) +{ + return LcdInitMacro[0x04 * 6 + 5]; +} + +/**********************************************************************//** + * @brief Turns the LCD cursor on at the current text position. + * + * @param none + * + * @return none + *************************************************************************/ + +void halLcdCursor(void) +{ + LcdInitMacro[8 * 6 + 5] ^= BIT2; + halLcdSendCommand(&LcdInitMacro[8 * 6]); + + LcdInitMacro[0x0B * 6 + 5] = ((LcdAddress & 0x1F) << 3); + LcdInitMacro[0x0B * 6 + 4] = ((LcdAddress & 0x1F) << 3) + 3; + LcdInitMacro[0x0C * 6 + 5] = (LcdAddress >> 5); + LcdInitMacro[0x0C * 6 + 4] = (LcdAddress >> 5) + 7; + halLcdSendCommand(&LcdInitMacro[0x0B * 6]); + halLcdSendCommand(&LcdInitMacro[0x0C * 6]); + + halLcdSetAddress(LcdAddress); +} + +/**********************************************************************//** + * @brief Turns off the LCD cursor. + * + * @param none + * + * @return none + *************************************************************************/ + +void halLcdCursorOff(void) +{ + LcdInitMacro[8 * 6 + 5] &= ~BIT2; + halLcdSendCommand(&LcdInitMacro[8 * 6]); +} + +/**********************************************************************//** + * @brief Inverts the grayscale values of the LCD display (Black <> white). + * + * @param none + * + * @return none + *************************************************************************/ + +void halLcdReverse(void) +{ + LcdInitMacro[7 * 6 + 5] ^= BIT1; + halLcdSendCommand(&LcdInitMacro[7 * 6]); +} + +/**********************************************************************//** + * @brief Sets the LCD in standby mode to reduce power consumption. + * + * @param none + * + * @return none + *************************************************************************/ + +void halLcdStandby(void) +{ + LcdInitMacro[3 * 6 + 5] &= (~BIT3) & (~BIT2); + LcdInitMacro[3 * 6 + 5] |= BIT0; + halLcdSendCommand(&LcdInitMacro[3 * 6]); +} + +/**********************************************************************//** + * @brief Puts the LCD into active mode. + * + * @param none + * + * @return none + *************************************************************************/ + +void halLcdActive(void) +{ + halLcdSendCommand(LcdInitMacro); // R00 start oscillation + + // Wait a minimum of 25ms after issuing "start oscillation" + // command (to accomodate for MCLK up to 25MHz) + { + int i; + for(i = 0; i < 5; ++i) { + __delay_cycles(50000); + } + } + + LcdInitMacro[3 * 6 + 5] |= BIT3; + LcdInitMacro[3 * 6 + 5] &= ~BIT0; + halLcdSendCommand(&LcdInitMacro[3 * 6]); // R03 Power control +} + +/**********************************************************************//** + * @brief Sets the pointer location in the LCD. + * + * - LcdAddress = Address + * - LcdTableAddress = Correct Address Row + Column + * = (Address / 0x20)* 17 + Column + * + * @param Address The target pointer location in the LCD. + * + * @return none + *************************************************************************/ + +void halLcdSetAddress(int Address) +{ + int temp; + + Draw_Block_Address_Macro[4] = Address >> 8; + Draw_Block_Address_Macro[5] = Address & 0xFF; + halLcdSendCommand(Draw_Block_Address_Macro); + LcdAddress = Address; + temp = Address >> 5; // Divided by 0x20 + temp = temp + (temp << 4); + //Multiplied by (1+16) and added by the offset + LcdTableAddress = temp + (Address & 0x1F); +} + +/**********************************************************************//** + * @brief Draws a block at the specified LCD address. + * + * A block is the smallest addressable memory on the LCD and is + * equivalent to 8 pixels, each of which is represented by 2 bits + * that represent a grayscale value between 00b and 11b. + * + * @param Address The address at which to draw the block. + * + * @param Value The value of the block + * + * @return none + *************************************************************************/ + +void halLcdDrawBlock(unsigned int Address, unsigned int Value) +{ + halLcdSetAddress(Address); + halLcdDrawCurrentBlock(Value); +} + +/**********************************************************************//** + * @brief Writes Value to LCD CGram and MSP430 internal LCD table. + * + * Also updates the LcdAddress and LcdTableAddress to the correct values. + * + * @param Value The value of the block to be written to the LCD. + * + * @return none + *************************************************************************/ + +void halLcdDrawCurrentBlock(unsigned int Value) +{ + int temp; + + Draw_Block_Value_Macro[4] = Value >> 8; + Draw_Block_Value_Macro[5] = Value & 0xFF; + LCD_MEM[LcdTableAddress] = Value; + + halLcdSendCommand(Draw_Block_Value_Macro); + + LcdAddress++; + temp = LcdAddress >> 5; // Divided by 0x20 + temp = temp + (temp << 4); + // Multiplied by (1+16) and added by the offset + LcdTableAddress = temp + (LcdAddress & 0x1F); + + // If LcdAddress gets off the right edge, move to next line + if ((LcdAddress & 0x1F) > 0x11) + halLcdSetAddress((LcdAddress & 0xFFE0) + 0x20); + if (LcdAddress == LCD_Size) + halLcdSetAddress(0); +} + +/**********************************************************************//** + * @brief Returns the LCD CGRAM value at location Address. + * + * @param Address The address of the block to be read from the LCD. + * + * @return Value The value held at the specified address. + *************************************************************************/ + +int halLcdReadBlock(unsigned int Address) +{ + int i = 0, Value = 0, ReadData[7]; + + halLcdSetAddress(Address); + halLcdSendCommand(Read_Block_Address_Macro); + + LCD_CS_RST_OUT &= ~LCD_CS_PIN; // start transfer CS=0 + UCB2TXBUF = 0x77; // Transmit first character 0x77 + + while (!(UCB2IFG & UCTXIFG)) ; + while (UCB2STAT & UCBUSY) ; + + //Read 5 dummies values and 2 valid address data + LCD_SPI_SEL &= ~LCD_MOSI_PIN; //Change SPI2C Dir + LCD_SPI_SEL |= LCD_MISO_PIN; + + for (i = 0; i < 7; i++) + { + UCB2IFG &= ~UCRXIFG; + UCB2TXBUF = 1; // load dummy byte 1 for clk + while (!(UCB2IFG & UCRXIFG)) ; + ReadData[i] = UCB2RXBUF; + } + LCD_CS_RST_OUT |= LCD_CS_PIN; // Stop Transfer CS = 1 + + LCD_SPI_SEL |= LCD_MOSI_PIN; //Change SPI2C Dir + LCD_SPI_SEL &= ~LCD_MISO_PIN; + LCD_CS_RST_DIR |= LCD_MOSI_PIN + LCD_CLK_PIN; + LCD_CS_RST_DIR &= ~LCD_MISO_PIN; + + Value = (ReadData[5] << 8) + ReadData[6]; + return Value; +} + +/**********************************************************************//** + * @brief Draw a Pixel of grayscale at coordinate (x,y) to LCD + * + * @param x x-coordinate for grayscale value + * + * @param y y-coordinate for grayscale value + * + * @param GrayScale The intended grayscale value of the pixel - one of + * four possible settings. + * + * @return none + *************************************************************************/ + +void halLcdPixel(int x, int y, unsigned char GrayScale) +{ + int Address, Value; + unsigned char offset; + + //Each line increments by 0x20 + if ((x >= 0) && (x < LCD_COL) && (y >= 0) && (y < LCD_ROW)) + { + Address = (y << 5) + (x >> 3); //Narrow down to 8 possible pixels + + Value = LCD_MEM[(y << 4) + y + (x >> 3)]; //y * 17 --> row. x>>3 --> column + + offset = (x & 0x07) << 1; //3 LSBs = pos. within the 8 columns + Value &= ~(3 << offset); //clear out the corresponding bits + Value |= GrayScale << offset; //set pixel to GrayScale level + + halLcdDrawBlock(Address, Value); + } +} + +/**********************************************************************//** + * @brief Clears entire LCD CGRAM as well as LCD_MEM. + * + * @param none + * + * @return none + *************************************************************************/ + +void halLcdClearScreen(void) +{ + int i, j, k, Current_Location = 0; + + halLcdSetAddress(0); + + for (i = 0; i < 110; i++) + { + //prepare to send image + LCD_CS_RST_OUT &= ~LCD_CS_PIN; //CS = 0 --> Start Transfer + for (k = 0; k < 3; k++) + { + while (!(UCB2IFG & UCTXIFG)) ; // Wait for TXIFG + UCB2TXBUF = Draw_Block_Value_Macro[k]; // Load data + } + while (UCB2STAT & UCBUSY) ; + LCD_CS_RST_OUT |= LCD_CS_PIN; //CS = 1 --> Stop Transfer + LCD_CS_RST_OUT &= ~LCD_CS_PIN; //CS = 0 --> Start Transfer + while (!(UCB2IFG & UCTXIFG)) ; // Wait for TXIFG + UCB2TXBUF = Draw_Block_Value_Macro[3]; // Load data + + //send blank line + for (j = 0; j < 17; j++) + { + LCD_MEM[LcdTableAddress++] = 0x00; + while (!(UCB2IFG & UCTXIFG)) ; // Wait for TXIFG + UCB2TXBUF = 0x00; // Load data + while (!(UCB2IFG & UCTXIFG)) ; // Wait for TXIFG + UCB2TXBUF = 0x00; // Load data + } + //Clear the partially visible block at the edge of the screen + while (!(UCB2IFG & UCTXIFG)) ; // Wait for TXIFG + UCB2TXBUF = 0x00; // Load data + while (!(UCB2IFG & UCTXIFG)) ; // Wait for TXIFG + UCB2TXBUF = 0x00; // Load data + while (UCB2STAT & UCBUSY) ; + LCD_CS_RST_OUT |= LCD_CS_PIN; //CS = 1 --> Stop Transfer + + Current_Location += 0x20; + halLcdSetAddress(Current_Location); + } + + halLcdSetAddress(0); +} + +/**********************************************************************//** + * @brief Loads an image of size = rows * columns, starting at the + * coordinate (x,y). + * + * @param Image[] The image to be loaded + * + * @param Rows The number of rows in the image. Size = Rows * Columns. + * + * @param Columns The number of columns in the image. Size = Rows * Columns. + * + * @param x x-coordinate of the image's starting location + * + * @param y y-coordinate of the image's starting location + * + * @return none + *************************************************************************/ + +void halLcdImage(const unsigned int Image[], int Columns, int Rows, int x, int y) +{ + int i, CurrentLocation; + + CurrentLocation = (y << 5) + (x >> 3); + halLcdSetAddress(CurrentLocation); + for (i = 0; i < Rows; i++) + { + halLcdDrawCurrentLine(Image, Columns); + Image += Columns; + CurrentLocation += 0x20; + halLcdSetAddress(CurrentLocation); + } +} + +/**********************************************************************//** + * @brief Writes Value to LCD CGram and MSP430 internal LCD table. + * + * Also updates the LcdAddress and LcdTableAddress to the correct values. + * + * @param *value Pointer to the line to be written to the LCD. + * + * @return none + *************************************************************************/ + +void halLcdDrawCurrentLine(const unsigned int *value, int Columns) +{ + unsigned char i; + + //prepare to send image + LCD_CS_RST_OUT &= ~LCD_CS_PIN; //CS = 0 --> Start Transfer + for (i = 0; i < 3; i++) + { + while (!(UCB2IFG & UCTXIFG)) ; // Wait for TXIFG + UCB2TXBUF = Draw_Block_Value_Macro[i]; // Load data + } + while (UCB2STAT & UCBUSY) ; + LCD_CS_RST_OUT |= LCD_CS_PIN; //CS = 1 --> Stop Transfer + LCD_CS_RST_OUT &= ~LCD_CS_PIN; //CS = 0 --> Start Transfer + while (!(UCB2IFG & UCTXIFG)) ; // Wait for TXIFG + UCB2TXBUF = Draw_Block_Value_Macro[3]; // Load data + + //send the image + for (i = 0; i < Columns; i++) + { + // Make sure we are not writing outside LCD_MEM[] + if (LcdTableAddress >= sizeof(LCD_MEM)){ + break; + } + LCD_MEM[LcdTableAddress++] = *value; + while (!(UCB2IFG & UCTXIFG)) ; // Wait for TXIFG + UCB2TXBUF = (*value) >> 8; // Load data + while (!(UCB2IFG & UCTXIFG)) ; // Wait for TXIFG + UCB2TXBUF = (*value++) & 0xFF; // Load data + } + + while (UCB2STAT & UCBUSY) ; + LCD_CS_RST_OUT |= LCD_CS_PIN; //CS = 1 --> Stop Transfer +} + +/**********************************************************************//** + * @brief Clears an image of size rows x columns starting at (x, y). + * + * @param Columns The size, in columns, of the image to be cleared. + * + * @param Rows The size, in rows, of the image to be cleared. + * + * @param x x-coordinate of the image to be cleared + * + * @param y y-coordinate of the image to be cleared + * + * @return none + *************************************************************************/ + +void halLcdClearImage(int Columns, int Rows, int x, int y) +{ + int i, j, k, Current_Location; + + Current_Location = (y << 5) + (x >> 3); + halLcdSetAddress(Current_Location); + + for (i = 0; i < Rows; i++) + { + //prepare to send image + LCD_CS_RST_OUT &= ~LCD_CS_PIN; //CS = 0 --> Start Transfer + for (k = 0; k < 3; k++) + { + while (!(UCB2IFG & UCTXIFG)) ; // Wait for TXIFG + UCB2TXBUF = Draw_Block_Value_Macro[k]; // Load data + } + while (UCB2STAT & UCBUSY) ; + LCD_CS_RST_OUT |= LCD_CS_PIN; //CS = 1 --> Stop Transfer + LCD_CS_RST_OUT &= ~LCD_CS_PIN; //CS = 0 --> Start Transfer + while (!(UCB2IFG & UCTXIFG)) ; // Wait for TXIFG + UCB2TXBUF = Draw_Block_Value_Macro[3]; // Load data + + //send blank line + for (j = 0; j < Columns; j++) + { + LCD_MEM[LcdTableAddress++] = 0x00; + while (!(UCB2IFG & UCTXIFG)) ; // Wait for TXIFG + UCB2TXBUF = 0x00; // Load data + while (!(UCB2IFG & UCTXIFG)) ; // Wait for TXIFG + UCB2TXBUF = 0x00; // Load data + } + while (UCB2STAT & UCBUSY) ; + LCD_CS_RST_OUT |= LCD_CS_PIN; //CS = 1 --> Stop Transfer + + Current_Location += 0x20; + halLcdSetAddress(Current_Location); + } +} + +/**********************************************************************//** + * @brief Writes Value to LCD CGRAM. Pointers internal to the LCD + * are also updated. + * + * @param Value The value to be written to the current LCD pointer + * + * @return none + *************************************************************************/ + +void halLcdDrawTextBlock(unsigned int Value) +{ + int temp; + + Draw_Block_Value_Macro[4] = Value >> 8; + Draw_Block_Value_Macro[5] = Value & 0xFF; + LCD_MEM[LcdTableAddress] = Value; + + halLcdSendCommand(Draw_Block_Value_Macro); + + LcdAddress++; + temp = LcdAddress >> 5; // Divided by 0x20 + temp = temp + (temp << 4); + //Multiplied by (1+16) and added by the offset + LcdTableAddress = temp + (LcdAddress & 0x1F); + + // If LcdAddress gets off the right edge, move to next line + if ((LcdAddress & 0x1F) > 0x10) + halLcdSetAddress((LcdAddress & 0xFFE0) + 0x20); + + if (LcdAddress >= LCD_Size) + halLcdSetAddress(0); +} + +/**********************************************************************//** + * @brief Displays the string to the LCD starting at current location. + * + * Writes all the data to LCD_MEM first, then updates all corresponding + * LCD CGRAM locations at once, in a continuous fashion. + * + * @param String[] The string to be displayed on LCD. + * + * @param TextStyle Value that specifies whether the string is to be + * inverted or overwritten. + * - Invert = 0x01 + * - Overwrite = 0x04 + * + * @return none + *************************************************************************/ + +void halLcdPrint(char String[], unsigned char TextStyle) +{ + int i, j, Counter = 0, BlockValue; + int Address, LCD_MEM_Add, ActualAddress; + int temp; + char LookUpChar; + + ActualAddress = LcdAddress; + Counter = LcdAddress & 0x1F; + i = 0; + + while (String[i] != 0) // Stop on null character + { + LookUpChar = fonts_lookup[(unsigned char)String[i]]; + + for (j = 0; j < FONT_HEIGHT; j++) + { + Address = ActualAddress + j * 0x20; + temp = Address >> 5; + temp += (temp << 4); + + LCD_MEM_Add = temp + (Address & 0x1F); + + BlockValue = LCD_MEM[LCD_MEM_Add]; + + if (TextStyle & GRAYSCALE_TEXT) + { + if (TextStyle & INVERT_TEXT) + if (TextStyle & OVERWRITE_TEXT) + BlockValue = 0xAAAA - GrayScale_fonts[LookUpChar * (FONT_HEIGHT + 1) + j]; + else + BlockValue |= 0xAAAA - GrayScale_fonts[LookUpChar * (FONT_HEIGHT + 1) + j]; + else + if (TextStyle & OVERWRITE_TEXT) + BlockValue = GrayScale_fonts[LookUpChar * (FONT_HEIGHT + 1) + j]; + else + BlockValue |= GrayScale_fonts[LookUpChar * (FONT_HEIGHT + 1) + j]; + } + else + { + if (TextStyle & INVERT_TEXT) + if (TextStyle & OVERWRITE_TEXT) + BlockValue = 0xFFFF - fonts[LookUpChar * 13 + j]; + else + BlockValue |= 0xFFFF - fonts[LookUpChar * 13 + j]; + + else + if (TextStyle & OVERWRITE_TEXT) + BlockValue = fonts[LookUpChar * (FONT_HEIGHT + 1) + j]; + else + BlockValue |= fonts[LookUpChar * (FONT_HEIGHT + 1) + j]; + } + halLcdDrawBlock(Address, BlockValue); + } + + Counter++; + if (Counter == 17) + { + Counter = 0; + ActualAddress += 0x20 * FONT_HEIGHT - 16; + if (ActualAddress > LCD_Last_Pixel - 0x20 * FONT_HEIGHT) + ActualAddress = 0; + } + else + ActualAddress++; + i++; + } + halLcdSetAddress(ActualAddress); + +} + +/**********************************************************************//** + * @brief Displays the string to the LCD starting at (x,y) location. + * + * Writes all the data to LCD_MEM first, then updates all corresponding + * LCD CGRAM locations at once, in a continuous fashion. + * + * @param String[] String to be displayed on LCD + * + * @param x x-coordinate of the write location on the LCD + * + * @param y y-coordinate of the write location on the LCD + * + * @param TextStyle Value that specifies whether the string is to be + * inverted or overwritten. + * - Invert = 0x01 + * - Overwrite = 0x04 + *************************************************************************/ + +void halLcdPrintXY(char String[], int x, int y, unsigned char TextStyle) +{ + //Each line increments by 0x20 + halLcdSetAddress((y << 5) + (x >> 3)); //Narrow down to 8 possible pixels + halLcdPrint(String, TextStyle); +} + +/**********************************************************************//** + * @brief Displays a string on the LCD on the specified line. + * + * @param String[] The string to be displayed on LCD. + * + * @param Line The line on the LCD on which to print the string. + * + * @param TextStyle Value that specifies whether the string is to be + * inverted or overwritten. + * - Invert = 0x01 + * - Overwrite = 0x04 + * + * @return none + *************************************************************************/ + +void halLcdPrintLine(char String[], unsigned char Line, unsigned char TextStyle) +{ + int temp; + + temp = Line * FONT_HEIGHT; + halLcdSetAddress(temp << 5); // 0x20 = 2^5 + halLcdPrint(String, TextStyle); +} + +/**********************************************************************//** + * @brief Prints a string beginning on a given line and column. + * + * @param String[] The string to be displayed on LCD. + * + * @param Line The line on which to print the string of text + * + * @param Col The column on which to print the string of text + * + * @param TextStyle Value that specifies whether the string is to be + * inverted or overwritten. + * - Invert = 0x01 + * - Overwrite = 0x04 + * + * @return none + *************************************************************************/ + +void halLcdPrintLineCol(char String[], unsigned char Line, unsigned char Col, + unsigned char TextStyle) +{ + int temp; + + temp = Line * FONT_HEIGHT; + temp <<= 5; + temp += Col; + + halLcdSetAddress(temp); // 0x20 = 2^5 + halLcdPrint(String, TextStyle); +} + +/**********************************************************************//** + * @brief Draws a horizontral line from (x1,y) to (x2,y) of GrayScale level + * + * @param x1 x-coordinate of the first point + * + * @param x2 x-coordinate of the second point + * + * @param y y-coordinate of both points + * + * @param GrayScale Grayscale level of the horizontal line + * + * @return none + *************************************************************************/ + +void halLcdHLine(int x1, int x2, int y, unsigned char GrayScale) +{ + int x_dir, x; + + if (x1 < x2) + x_dir = 1; + else + x_dir = -1; + x = x1; + while (x != x2) + { + halLcdPixel(x, y, GrayScale); + x += x_dir; + } +} + +/**********************************************************************//** + * @brief Draws a vertical line from (x,y1) to (x,y2) of GrayScale level + * + * @param x x-coordinate of both points + * + * @param y1 y-coordinate of the first point + * + * @param y2 y-coordinate of the second point + * + * @param GrayScale GrayScale level of the vertical line + * + * @return none + *************************************************************************/ + +void halLcdVLine(int x, int y1, int y2, unsigned char GrayScale) +{ + int y_dir, y; + + if (y1 < y2) + y_dir = 1; + else + y_dir = -1; + y = y1; + while (y != y2) + { + halLcdPixel(x, y, GrayScale); + y += y_dir; + } +} + +/**********************************************************************//** + * @brief Draws a line from (x1,y1) to (x2,y2) of GrayScale level. + * + * Uses Bresenham's line algorithm. + * + * @param x1 x-coordinate of the first point + * + * @param y1 y-coordinate of the first point + * + * @param x2 x-coordinate of the second point + * + * @param y2 y-coordinate of the second point + * + * @param GrayScale Grayscale level of the line + * + * @return none + *************************************************************************/ + +void halLcdLine(int x1, int y1, int x2, int y2, unsigned char GrayScale) +{ + int x, y, deltay, deltax, d; + int x_dir, y_dir; + + if (x1 == x2) + halLcdVLine(x1, y1, y2, GrayScale); + else + { + if (y1 == y2) + halLcdHLine(x1, x2, y1, GrayScale); + else // a diagonal line + { + if (x1 > x2) + x_dir = -1; + else x_dir = 1; + if (y1 > y2) + y_dir = -1; + else y_dir = 1; + + x = x1; + y = y1; + deltay = ABS(y2 - y1); + deltax = ABS(x2 - x1); + + if (deltax >= deltay) + { + d = (deltay << 1) - deltax; + while (x != x2) + { + halLcdPixel(x, y, GrayScale); + if (d < 0) + d += (deltay << 1); + else + { + d += ((deltay - deltax) << 1); + y += y_dir; + } + x += x_dir; + } + } + else + { + d = (deltax << 1) - deltay; + while (y != y2) + { + halLcdPixel(x, y, GrayScale); + if (d < 0) + d += (deltax << 1); + else + { + d += ((deltax - deltay) << 1); + x += x_dir; + } + y += y_dir; + } + } + } + } +} + +/**********************************************************************//** + * @brief Draw a circle of Radius with center at (x,y) of GrayScale level. + * + * Uses Bresenham's circle algorithm + * + * @param x x-coordinate of the circle's center point + * + * @param y y-coordinate of the circle's center point + * + * @param Radius Radius of the circle + * + * @param GrayScale Grayscale level of the circle + *************************************************************************/ + +void halLcdCircle(int x, int y, int Radius, int GrayScale) +{ + int xx, yy, ddF_x, ddF_y, f; + + ddF_x = 0; + ddF_y = -(2 * Radius); + f = 1 - Radius; + + xx = 0; + yy = Radius; + halLcdPixel(x + xx, y + yy, GrayScale); + halLcdPixel(x + xx, y - yy, GrayScale); + halLcdPixel(x - xx, y + yy, GrayScale); + halLcdPixel(x - xx, y - yy, GrayScale); + halLcdPixel(x + yy, y + xx, GrayScale); + halLcdPixel(x + yy, y - xx, GrayScale); + halLcdPixel(x - yy, y + xx, GrayScale); + halLcdPixel(x - yy, y - xx, GrayScale); + while (xx < yy) + { + if (f >= 0) + { + yy--; + ddF_y += 2; + f += ddF_y; + } + xx++; + ddF_x += 2; + f += ddF_x + 1; + halLcdPixel(x + xx, y + yy, GrayScale); + halLcdPixel(x + xx, y - yy, GrayScale); + halLcdPixel(x - xx, y + yy, GrayScale); + halLcdPixel(x - xx, y - yy, GrayScale); + halLcdPixel(x + yy, y + xx, GrayScale); + halLcdPixel(x + yy, y - xx, GrayScale); + halLcdPixel(x - yy, y + xx, GrayScale); + halLcdPixel(x - yy, y - xx, GrayScale); + } +} + +/**********************************************************************//** + * @brief Scrolls a single row of pixels one column to the left. + * + * The column that is scrolled out of the left side of the LCD will be + * displayed the right side of the LCD. + * + * @param y The row of pixels to scroll. y = 0 is at the top-left + * corner of the LCD. + * + * @return none + *************************************************************************/ + +void halLcdScrollRow(int y) +{ + int i, Address, LcdTableAddressTemp; + unsigned int temp; + + Address = y << 5; + + halLcdSetAddress(Address); + + //Multiplied by (1+16) and added by the offset + LcdTableAddressTemp = y + (y << 4); + temp = ((LCD_MEM[LcdTableAddressTemp] & 0x0003) << 14); + + for (i = 0; i < 0x10; i++) + halLcdDrawCurrentBlock(((LCD_MEM[LcdTableAddressTemp + i] & 0xFFFC) >> 2) \ + + ((LCD_MEM[LcdTableAddressTemp + i + 1] & 0x0003) << 14)); + + halLcdDrawCurrentBlock(((LCD_MEM[LcdTableAddressTemp + 0x10] & 0xFFFC) >> 2) + temp); +} + +/**********************************************************************//** + * @brief Scrolls multiple rows of pixels, yStart to yEnd, + * one column to the left. + * + * The column that is scrolled out of the left side of the LCD will be + * displayed the right side of the LCD. y = 0 is at the top-left of the + * LCD screen. + * + * @param yStart The beginning row to be scrolled + * + * @param yEnd The last row to be scrolled + * + * @return none + *************************************************************************/ + +void halLcdHScroll(int yStart, int yEnd) +{ + int i; + + for (i = yStart; i < yEnd + 1; i++) + halLcdScrollRow(i); +} + +/**********************************************************************//** + * @brief Scrolls a line of text one column to the left. + * + * @param Line The line of text to be scrolled. + * + * @return none + *************************************************************************/ + +void halLcdScrollLine(int Line) +{ + int i, Row; + + Row = Line * FONT_HEIGHT; + + for (i = Row; i < Row + FONT_HEIGHT; i++) + halLcdScrollRow(i); +} diff --git a/platform/exp5438/hal_lcd.h b/platform/exp5438/hal_lcd.h index 6842c4952..6f2508b29 100644 --- a/platform/exp5438/hal_lcd.h +++ b/platform/exp5438/hal_lcd.h @@ -1,147 +1,147 @@ -/******************************************************************************* - * - * hal_lcd.h - * - * Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/ - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the - * distribution. - * - * Neither the name of Texas Instruments Incorporated nor the names of - * its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - ******************************************************************************/ - -#ifndef HAL_LCD_H -#define HAL_LCD_H - -#define LCD_BACKLT_OUT P8OUT -#define LCD_BACKLT_DIR P8DIR -#define LCD_BACKLT_SEL P8SEL -#define LCD_BACKLIGHT_PIN BIT3 -#define LCD_CS_RST_DIR P9DIR -#define LCD_CS_RST_OUT P9OUT -#define LCD_CS_PIN BIT6 -#define LCD_RESET_PIN BIT7 -#define LCD_SPI_SEL P9SEL -#define LCD_SPI_DIR P9DIR -#define LCD_MOSI_PIN BIT1 -#define LCD_MISO_PIN BIT2 -#define LCD_CLK_PIN BIT3 - -#define LCD_ROW 110 -#define LCD_COL 138 -#define LCD_Size 3505 -#define LCD_MEM_Size 110 * 17 -#define LCD_Max_Column_Offset 0x10 - -#define LCD_Last_Pixel 3505 - -#define LCD_MEM_Row 0x11 -#define LCD_Row 0x20 - -// Grayscale level definitions -#define PIXEL_OFF 0 -#define PIXEL_LIGHT 1 -#define PIXEL_DARK 2 -#define PIXEL_ON 3 - -#define INVERT_TEXT BIT0 -#define OVERWRITE_TEXT BIT2 -#define GRAYSCALE_TEXT BIT1 - -/*------------------------------------------------------------- - * Function Prototypes - * ------------------------------------------------------------*/ -extern void halLcdInit(void); -extern void halLcdShutDown(void); -extern void halLcdBackLightInit(void); -extern void halLcdSetBackLight(unsigned char BackLightLevel); -extern unsigned int halLcdGetBackLight(void); -extern void halLcdShutDownBackLight(void); - -extern void halLcdSendCommand(unsigned char Data[]); -extern void halLcdSetContrast(unsigned char ContrastLevel); -extern unsigned char halLcdGetContrast(void); -extern void halLcdStandby(void); -extern void halLcdActive(void); - -//Move to specified LCD address -extern void halLcdSetAddress(int Address); - -//Draw at current segment location -extern void halLcdDrawCurrentBlock(unsigned int Value); -extern void halLcdDrawCurrentLine(const unsigned int *value, int length); - -//Draw at specified location by calling -//LCD_Set_Address(Address) & LCD_Draw_Current_Block( value ) -extern void halLcdDrawBlock(unsigned int Address, unsigned int Value); - -//Read value from LCD CGRAM -extern int halLcdReadBlock(unsigned int Address); - -//Clear LCD Screen -extern void halLcdClearScreen(void); - -//Invert black to white and vice versa -extern void halLcdReverse(void); - -// Draw a Pixel @ (x,y) with GrayScale level -extern void halLcdPixel(int x, int y, unsigned char GrayScale); - -//Draw Line from (x1,y1) to (x2,y2) with GrayScale level -extern void halLcdLine(int x1, int y1, int x2, int y2, unsigned char GrayScale); -extern void halLcdHLine(int x1, int x2, int y, unsigned char GrayScale); -extern void halLcdVLine(int x1, int x2, int y, unsigned char GrayScale); - -extern void halLcdCircle(int x, int y, int Radius, int GrayScale); - -extern void halLcdImage(const unsigned int Image[], int Columns, int Rows, int x, int y); -extern void halLcdClearImage(int Columns, int Rows, int x, int y); - -//Print String of Length starting at current LCD location -extern void halLcdPrint(char String[], unsigned char TextStyle); - -//Print String of Length starting at (x,y) -extern void halLcdPrintXY(char String[], int x, int y, unsigned char TextStyle); - -//Print String of Length starting at (x,y) -extern void halLcdPrintLine(char String[], unsigned char Line, unsigned char TextStyle); -extern void halLcdPrintLineCol(char String[], unsigned char Line, unsigned char Col, - unsigned char TextStyle); - -extern void halLcdCursor(void); -extern void halLcdCursorOff(void); - -//Scroll a single row of pixels -extern void halLcdScrollRow(int y); - -//Scroll a number of consecutive rows from yStart to yEnd -extern void halLcdHScroll(int yStart, int yEnd); - -//Scroll a line of text -extern void halLcdScrollLine(int Line); - -#endif /* HAL_LCD_H */ +/******************************************************************************* + * + * hal_lcd.h + * + * Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/ + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * + * Neither the name of Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ******************************************************************************/ + +#ifndef HAL_LCD_H +#define HAL_LCD_H + +#define LCD_BACKLT_OUT P8OUT +#define LCD_BACKLT_DIR P8DIR +#define LCD_BACKLT_SEL P8SEL +#define LCD_BACKLIGHT_PIN BIT3 +#define LCD_CS_RST_DIR P9DIR +#define LCD_CS_RST_OUT P9OUT +#define LCD_CS_PIN BIT6 +#define LCD_RESET_PIN BIT7 +#define LCD_SPI_SEL P9SEL +#define LCD_SPI_DIR P9DIR +#define LCD_MOSI_PIN BIT1 +#define LCD_MISO_PIN BIT2 +#define LCD_CLK_PIN BIT3 + +#define LCD_ROW 110 +#define LCD_COL 138 +#define LCD_Size 3505 +#define LCD_MEM_Size 110 * 17 +#define LCD_Max_Column_Offset 0x10 + +#define LCD_Last_Pixel 3505 + +#define LCD_MEM_Row 0x11 +#define LCD_Row 0x20 + +// Grayscale level definitions +#define PIXEL_OFF 0 +#define PIXEL_LIGHT 1 +#define PIXEL_DARK 2 +#define PIXEL_ON 3 + +#define INVERT_TEXT BIT0 +#define OVERWRITE_TEXT BIT2 +#define GRAYSCALE_TEXT BIT1 + +/*------------------------------------------------------------- + * Function Prototypes + * ------------------------------------------------------------*/ +extern void halLcdInit(void); +extern void halLcdShutDown(void); +extern void halLcdBackLightInit(void); +extern void halLcdSetBackLight(unsigned char BackLightLevel); +extern unsigned int halLcdGetBackLight(void); +extern void halLcdShutDownBackLight(void); + +extern void halLcdSendCommand(unsigned char Data[]); +extern void halLcdSetContrast(unsigned char ContrastLevel); +extern unsigned char halLcdGetContrast(void); +extern void halLcdStandby(void); +extern void halLcdActive(void); + +//Move to specified LCD address +extern void halLcdSetAddress(int Address); + +//Draw at current segment location +extern void halLcdDrawCurrentBlock(unsigned int Value); +extern void halLcdDrawCurrentLine(const unsigned int *value, int length); + +//Draw at specified location by calling +//LCD_Set_Address(Address) & LCD_Draw_Current_Block( value ) +extern void halLcdDrawBlock(unsigned int Address, unsigned int Value); + +//Read value from LCD CGRAM +extern int halLcdReadBlock(unsigned int Address); + +//Clear LCD Screen +extern void halLcdClearScreen(void); + +//Invert black to white and vice versa +extern void halLcdReverse(void); + +// Draw a Pixel @ (x,y) with GrayScale level +extern void halLcdPixel(int x, int y, unsigned char GrayScale); + +//Draw Line from (x1,y1) to (x2,y2) with GrayScale level +extern void halLcdLine(int x1, int y1, int x2, int y2, unsigned char GrayScale); +extern void halLcdHLine(int x1, int x2, int y, unsigned char GrayScale); +extern void halLcdVLine(int x1, int x2, int y, unsigned char GrayScale); + +extern void halLcdCircle(int x, int y, int Radius, int GrayScale); + +extern void halLcdImage(const unsigned int Image[], int Columns, int Rows, int x, int y); +extern void halLcdClearImage(int Columns, int Rows, int x, int y); + +//Print String of Length starting at current LCD location +extern void halLcdPrint(char String[], unsigned char TextStyle); + +//Print String of Length starting at (x,y) +extern void halLcdPrintXY(char String[], int x, int y, unsigned char TextStyle); + +//Print String of Length starting at (x,y) +extern void halLcdPrintLine(char String[], unsigned char Line, unsigned char TextStyle); +extern void halLcdPrintLineCol(char String[], unsigned char Line, unsigned char Col, + unsigned char TextStyle); + +extern void halLcdCursor(void); +extern void halLcdCursorOff(void); + +//Scroll a single row of pixels +extern void halLcdScrollRow(int y); + +//Scroll a number of consecutive rows from yStart to yEnd +extern void halLcdHScroll(int yStart, int yEnd); + +//Scroll a line of text +extern void halLcdScrollLine(int Line); + +#endif /* HAL_LCD_H */ diff --git a/platform/exp5438/hal_lcd_fonts.c b/platform/exp5438/hal_lcd_fonts.c index 0bdb419de..4780af9d2 100644 --- a/platform/exp5438/hal_lcd_fonts.c +++ b/platform/exp5438/hal_lcd_fonts.c @@ -1,353 +1,353 @@ -/******************************************************************************* - * - * hal_lcd_fonts.c - * - * Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/ - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the - * distribution. - * - * Neither the name of Texas Instruments Incorporated nor the names of - * its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - ******************************************************************************/ - -const unsigned char fonts_lookup[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 63, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 64, 65, 0, 69, 0, 68, 67, 0, 0, 1, //'0' = 48 = 0x30 - 2, 3, 4, 5, 6, 7, 8, 9, 66, 0, //'9' = 57 = 0x39 - 0, 70, 0, 62, 0, 10, 11, 12, 13, 14, //'A' --> 'Z' - 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, - 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, - 35, 0, 0, 0, 71, 0, 0, 36, 37, 38, //'a' = 97 - 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, - 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, - 59, 60, 61, 62, 0, 0, 0, 72, 73, 74, - 75, 76, 77, 78, 79, 80, 81 //'z' = 122 -}; - -const unsigned int fonts[] = { - 0x0000, 0x0ffc, 0x3c0f, 0x3f0f, 0x3fcf, 0x3ccf, 0x3cff, 0x3c3f, - 0x3c0f, 0x0ffc, 0x0000, 0x0000, 0x0000, 0x0000, 0x00c0, 0x00f0, - 0x00ff, 0x00f0, 0x00f0, 0x00f0, 0x00f0, 0x00f0, 0x0fff, 0x0000, - 0x0000, 0x0000, 0x0000, 0x03fc, 0x0f0f, 0x0f0f, 0x0f00, 0x03c0, - 0x00f0, 0x003c, 0x0f0f, 0x0fff, 0x0000, 0x0000, 0x0000, 0x0000, - 0x03fc, 0x0f0f, 0x0f00, 0x0f00, 0x03f0, 0x0f00, 0x0f00, 0x0f0f, - 0x03fc, 0x0000, 0x0000, 0x0000, 0x0000, 0x0f00, 0x0fc0, 0x0ff0, - 0x0f3c, 0x0f0f, 0x3fff, 0x0f00, 0x0f00, 0x3fc0, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0fff, 0x000f, 0x000f, 0x000f, 0x03ff, 0x0f00, - 0x0f00, 0x0f0f, 0x03fc, 0x0000, 0x0000, 0x0000, 0x0000, 0x03f0, - 0x003c, 0x000f, 0x000f, 0x03ff, 0x0f0f, 0x0f0f, 0x0f0f, 0x03fc, - 0x0000, 0x0000, 0x0000, 0x0000, 0x3fff, 0x3c0f, 0x3c0f, 0x3c00, - 0x0f00, 0x03c0, 0x00f0, 0x00f0, 0x00f0, 0x0000, 0x0000, 0x0000, - 0x0000, 0x03fc, 0x0f0f, 0x0f0f, 0x0f3f, 0x03fc, 0x0fcf, 0x0f0f, - 0x0f0f, 0x03fc, 0x0000, 0x0000, 0x0000, 0x0000, 0x03fc, 0x0f0f, - 0x0f0f, 0x0f0f, 0x0ffc, 0x03c0, 0x03c0, 0x00f0, 0x00fc, 0x0000, - 0x0000, 0x0000, 0x0000, 0x00f0, 0x03fc, 0x0f0f, 0x0f0f, 0x0f0f, - 0x0fff, 0x0f0f, 0x0f0f, 0x0f0f, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0fff, 0x3c3c, 0x3c3c, 0x3c3c, 0x0ffc, 0x3c3c, 0x3c3c, 0x3c3c, - 0x0fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0ff0, 0x3c3c, 0x3c0f, - 0x000f, 0x000f, 0x000f, 0x3c0f, 0x3c3c, 0x0ff0, 0x0000, 0x0000, - 0x0000, 0x0000, 0x03ff, 0x0f3c, 0x3c3c, 0x3c3c, 0x3c3c, 0x3c3c, - 0x3c3c, 0x0f3c, 0x03ff, 0x0000, 0x0000, 0x0000, 0x0000, 0x3fff, - 0x303c, 0x003c, 0x0c3c, 0x0ffc, 0x0c3c, 0x003c, 0x303c, 0x3fff, - 0x0000, 0x0000, 0x0000, 0x0000, 0x3fff, 0x3c3c, 0x303c, 0x0c3c, - 0x0ffc, 0x0c3c, 0x003c, 0x003c, 0x00ff, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0ff0, 0x3c3c, 0x3c0f, 0x000f, 0x000f, 0x3f0f, 0x3c0f, - 0x3c3c, 0x3ff0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0f0f, 0x0f0f, - 0x0f0f, 0x0f0f, 0x0fff, 0x0f0f, 0x0f0f, 0x0f0f, 0x0f0f, 0x0000, - 0x0000, 0x0000, 0x0000, 0x03fc, 0x00f0, 0x00f0, 0x00f0, 0x00f0, - 0x00f0, 0x00f0, 0x00f0, 0x03fc, 0x0000, 0x0000, 0x0000, 0x0000, - 0x3fc0, 0x0f00, 0x0f00, 0x0f00, 0x0f00, 0x0f0f, 0x0f0f, 0x0f0f, - 0x03fc, 0x0000, 0x0000, 0x0000, 0x0000, 0x3c3f, 0x3c3c, 0x0f3c, - 0x0f3c, 0x03fc, 0x0f3c, 0x0f3c, 0x3c3c, 0x3c3f, 0x0000, 0x0000, - 0x0000, 0x0000, 0x00ff, 0x003c, 0x003c, 0x003c, 0x003c, 0x303c, - 0x3c3c, 0x3c3c, 0x3fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x3c0f, - 0x3f3f, 0x3fff, 0x3fff, 0x3ccf, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, - 0x0000, 0x0000, 0x0000, 0x0000, 0x3c0f, 0x3c0f, 0x3c3f, 0x3cff, - 0x3fff, 0x3fcf, 0x3f0f, 0x3c0f, 0x3c0f, 0x0000, 0x0000, 0x0000, - 0x0000, 0x03f0, 0x0f3c, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, - 0x0f3c, 0x03f0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0fff, 0x3c3c, - 0x3c3c, 0x3c3c, 0x0ffc, 0x003c, 0x003c, 0x003c, 0x00ff, 0x0000, - 0x0000, 0x0000, 0x0000, 0x03f0, 0x0f3c, 0x3c0f, 0x3c0f, 0x3c0f, - 0x3f0f, 0x3fcf, 0x0ffc, 0x0f00, 0x3fc0, 0x0000, 0x0000, 0x0000, - 0x0fff, 0x3c3c, 0x3c3c, 0x3c3c, 0x0ffc, 0x0f3c, 0x3c3c, 0x3c3c, - 0x3c3f, 0x0000, 0x0000, 0x0000, 0x0000, 0x03fc, 0x0f0f, 0x0f0f, - 0x000f, 0x00fc, 0x03c0, 0x0f0f, 0x0f0f, 0x03fc, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0fff, 0x0cf3, 0x00f0, 0x00f0, 0x00f0, 0x00f0, - 0x00f0, 0x00f0, 0x03fc, 0x0000, 0x0000, 0x0000, 0x0000, 0x0f0f, - 0x0f0f, 0x0f0f, 0x0f0f, 0x0f0f, 0x0f0f, 0x0f0f, 0x0f0f, 0x03fc, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0f0f, 0x0f0f, 0x0f0f, 0x0f0f, - 0x0f0f, 0x0f0f, 0x0f0f, 0x03fc, 0x00f0, 0x0000, 0x0000, 0x0000, - 0x0000, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3ccf, 0x3ccf, 0x0f3c, - 0x0f3c, 0x0f3c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0f0f, 0x0f0f, - 0x0f0f, 0x03fc, 0x00f0, 0x03fc, 0x0f0f, 0x0f0f, 0x0f0f, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0f0f, 0x0f0f, 0x0f0f, 0x0f0f, 0x03fc, - 0x00f0, 0x00f0, 0x00f0, 0x03fc, 0x0000, 0x0000, 0x0000, 0x0000, - 0x3fff, 0x3f0f, 0x03c3, 0x03c0, 0x00f0, 0x003c, 0x303c, 0x3c0f, - 0x3fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x03fc, 0x0f00, 0x0ffc, 0x0f0f, 0x0f0f, 0x3cfc, 0x0000, 0x0000, - 0x0000, 0x0000, 0x003f, 0x003c, 0x003c, 0x0ffc, 0x3c3c, 0x3c3c, - 0x3c3c, 0x3c3c, 0x0fcf, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x03fc, 0x0f0f, 0x000f, 0x000f, 0x0f0f, 0x03fc, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0fc0, 0x0f00, 0x0f00, 0x0ffc, - 0x0f0f, 0x0f0f, 0x0f0f, 0x0f0f, 0x3cfc, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x03fc, 0x0f0f, 0x0fff, 0x000f, - 0x0f0f, 0x03fc, 0x0000, 0x0000, 0x0000, 0x0000, 0x03f0, 0x0f3c, - 0x003c, 0x003c, 0x03ff, 0x003c, 0x003c, 0x003c, 0x00ff, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3cfc, 0x0f0f, - 0x0f0f, 0x0f0f, 0x0ffc, 0x0f00, 0x0f0f, 0x03fc, 0x0000, 0x0000, - 0x003f, 0x003c, 0x003c, 0x0f3c, 0x3cfc, 0x3c3c, 0x3c3c, 0x3c3c, - 0x3c3f, 0x0000, 0x0000, 0x0000, 0x0000, 0x03c0, 0x03c0, 0x0000, - 0x03fc, 0x03c0, 0x03c0, 0x03c0, 0x03c0, 0x3ffc, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0f00, 0x0f00, 0x0000, 0x0ff0, 0x0f00, 0x0f00, - 0x0f00, 0x0f00, 0x0f0f, 0x0f0f, 0x03fc, 0x0000, 0x0000, 0x003f, - 0x003c, 0x003c, 0x3c3c, 0x0f3c, 0x03fc, 0x0f3c, 0x3c3c, 0x3c3f, - 0x0000, 0x0000, 0x0000, 0x0000, 0x03fc, 0x03c0, 0x03c0, 0x03c0, - 0x03c0, 0x03c0, 0x03c0, 0x03c0, 0x3ffc, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0fff, 0x3ccf, 0x3ccf, 0x3ccf, - 0x3ccf, 0x3c0f, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x03ff, 0x0f0f, 0x0f0f, 0x0f0f, 0x0f0f, 0x0f0f, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x03fc, 0x0f0f, - 0x0f0f, 0x0f0f, 0x0f0f, 0x03fc, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0fcf, 0x3c3c, 0x3c3c, 0x3c3c, 0x3c3c, - 0x0ffc, 0x003c, 0x00ff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x3cfc, 0x0f0f, 0x0f0f, 0x0f0f, 0x0f0f, 0x0ffc, 0x0f00, 0x3fc0, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0f3f, 0x3f3c, 0x3cfc, - 0x003c, 0x003c, 0x00ff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x03fc, 0x0f0f, 0x003c, 0x03c0, 0x0f0f, 0x03fc, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0030, 0x003c, 0x0fff, - 0x003c, 0x003c, 0x003c, 0x0f3c, 0x03f0, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0f0f, 0x0f0f, 0x0f0f, 0x0f0f, - 0x0f0f, 0x3cfc, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0f0f, 0x0f0f, 0x0f0f, 0x0f0f, 0x03fc, 0x00f0, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3c0f, 0x3c0f, - 0x3ccf, 0x3ccf, 0x0f3c, 0x0f3c, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x3c0f, 0x0f3c, 0x03f0, 0x03f0, 0x0f3c, - 0x3c0f, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x3c3c, 0x3c3c, 0x3c3c, 0x3c3c, 0x0ff0, 0x0f00, 0x03c0, 0x00ff, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0fff, 0x0f03, 0x03c0, - 0x003c, 0x0c0f, 0x0fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x03fc, - 0x0f0f, 0x0f00, 0x03c0, 0x00f0, 0x00f0, 0x0000, 0x00f0, 0x00f0, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0f00, 0x03c0, 0x00f0, 0x003c, 0x003c, 0x003c, 0x00f0, - 0x03c0, 0x0f00, 0x0000, 0x0000, 0x0000, 0x0000, 0x003c, 0x00f0, - 0x03c0, 0x0f00, 0x0f00, 0x0f00, 0x03c0, 0x00f0, 0x003c, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x03f0, 0x03f0, 0x0000, - 0x0000, 0x03f0, 0x03f0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x03f0, - 0x03f0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x3ffc, 0x3ffc, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x03c0, 0x03c0, 0x3ffc, 0x3ffc, - 0x03c0, 0x03c0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x3ffc, 0x0000, 0x0000, 0x3ffc, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x03fc, 0x0f0f, 0x0f0f, 0x0f0f, - 0x03fc, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - //0--------------------------- - 0x0000, 0x0ffc, 0x3c0f, 0x3f0f, 0x3fcf, 0x3ccf, 0x3cff, 0x3c3f, - 0x3c0f, 0x0ffc, 0x0000, 0x0000, 0x0000, - //1--------------------------- - 0x0000, 0x00c0, 0x00f0, 0x00ff, 0x00f0, 0x00f0, 0x00f0, 0x00f0, - 0x00f0, 0x0fff, 0x0000, 0x0000, 0x0000, - //2--------------------------- - 0x0000, 0x03fc, 0x0f0f, 0x0f0f, 0x0f00, 0x03c0, 0x00f0, 0x003c, - 0x0f0f, 0x0fff, 0x0000, 0x0000, 0x0000, - //3--------------------------- - 0x0000, 0x03fc, 0x0f0f, 0x0f00, 0x0f00, 0x03f0, 0x0f00, 0x0f00, - 0x0f0f, 0x03fc, 0x0000, 0x0000, 0x0000, - //4--------------------------- - 0x0000, 0x0f00, 0x0fc0, 0x0ff0, 0x0f3c, 0x0f0f, 0x3fff, 0x0f00, - 0x0f00, 0x3fc0, 0x0000, 0x0000, 0x0000, - //5--------------------------- - 0x0000, 0x0fff, 0x000f, 0x000f, 0x000f, 0x03ff, 0x0f00, 0x0f00, - 0x0f0f, 0x03fc, 0x0000, 0x0000, 0x0000, - //6--------------------------- - 0x0000, 0x03f0, 0x003c, 0x000f, 0x000f, 0x03ff, 0x0f0f, 0x0f0f, - 0x0f0f, 0x03fc, 0x0000, 0x0000, 0x0000, - //7--------------------------- - 0x0000, 0x3fff, 0x3c0f, 0x3c0f, 0x3c00, 0x0f00, 0x03c0, 0x00f0, - 0x00f0, 0x00f0, 0x0000, 0x0000, 0x0000, - //8--------------------------- - 0x0000, 0x03fc, 0x0f0f, 0x0f0f, 0x0f3f, 0x03fc, 0x0fcf, 0x0f0f, - 0x0f0f, 0x03fc, 0x0000, 0x0000, 0x0000, - //9--------------------------- - 0x0000, 0x03fc, 0x0f0f, 0x0f0f, 0x0f0f, 0x0ffc, 0x03c0, 0x03c0, - 0x00f0, 0x00fc, 0x0000, 0x0000, 0x0000, -}; - - -const unsigned int GrayScale_fonts[] = { - 0x0000, 0x0aa8, 0x280a, 0x2a0a, 0x2a8a, 0x288a, 0x28aa, 0x282a, - 0x280a, 0x0aa8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0080, 0x00a0, - 0x00aa, 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x0aaa, 0x0000, - 0x0000, 0x0000, 0x0000, 0x02a8, 0x0a0a, 0x0a0a, 0x0a00, 0x0280, - 0x00a0, 0x0028, 0x0a0a, 0x0aaa, 0x0000, 0x0000, 0x0000, 0x0000, - 0x02a8, 0x0a0a, 0x0a00, 0x0a00, 0x02a0, 0x0a00, 0x0a00, 0x0a0a, - 0x02a8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0a00, 0x0a80, 0x0aa0, - 0x0a28, 0x0a0a, 0x2aaa, 0x0a00, 0x0a00, 0x2a80, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0aaa, 0x000a, 0x000a, 0x000a, 0x02aa, 0x0a00, - 0x0a00, 0x0a0a, 0x02a8, 0x0000, 0x0000, 0x0000, 0x0000, 0x02a0, - 0x0028, 0x000a, 0x000a, 0x02aa, 0x0a0a, 0x0a0a, 0x0a0a, 0x02a8, - 0x0000, 0x0000, 0x0000, 0x0000, 0x2aaa, 0x280a, 0x280a, 0x2800, - 0x0a00, 0x0280, 0x00a0, 0x00a0, 0x00a0, 0x0000, 0x0000, 0x0000, - 0x0000, 0x02a8, 0x0a0a, 0x0a0a, 0x0a2a, 0x02a8, 0x0a8a, 0x0a0a, - 0x0a0a, 0x02a8, 0x0000, 0x0000, 0x0000, 0x0000, 0x02a8, 0x0a0a, - 0x0a0a, 0x0a0a, 0x0aa8, 0x0280, 0x0280, 0x00a0, 0x00a8, 0x0000, - 0x0000, 0x0000, 0x0000, 0x00a0, 0x02a8, 0x0a0a, 0x0a0a, 0x0a0a, - 0x0aaa, 0x0a0a, 0x0a0a, 0x0a0a, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0aaa, 0x2828, 0x2828, 0x2828, 0x0aa8, 0x2828, 0x2828, 0x2828, - 0x0aaa, 0x0000, 0x0000, 0x0000, 0x0000, 0x0aa0, 0x2828, 0x280a, - 0x000a, 0x000a, 0x000a, 0x280a, 0x2828, 0x0aa0, 0x0000, 0x0000, - 0x0000, 0x0000, 0x02aa, 0x0a28, 0x2828, 0x2828, 0x2828, 0x2828, - 0x2828, 0x0a28, 0x02aa, 0x0000, 0x0000, 0x0000, 0x0000, 0x2aaa, - 0x2028, 0x0028, 0x0828, 0x0aa8, 0x0828, 0x0028, 0x2028, 0x2aaa, - 0x0000, 0x0000, 0x0000, 0x0000, 0x2aaa, 0x2828, 0x2028, 0x0828, - 0x0aa8, 0x0828, 0x0028, 0x0028, 0x00aa, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0aa0, 0x2828, 0x280a, 0x000a, 0x000a, 0x2a0a, 0x280a, - 0x2828, 0x2aa0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0a0a, 0x0a0a, - 0x0a0a, 0x0a0a, 0x0aaa, 0x0a0a, 0x0a0a, 0x0a0a, 0x0a0a, 0x0000, - 0x0000, 0x0000, 0x0000, 0x02a8, 0x00a0, 0x00a0, 0x00a0, 0x00a0, - 0x00a0, 0x00a0, 0x00a0, 0x02a8, 0x0000, 0x0000, 0x0000, 0x0000, - 0x2a80, 0x0a00, 0x0a00, 0x0a00, 0x0a00, 0x0a0a, 0x0a0a, 0x0a0a, - 0x02a8, 0x0000, 0x0000, 0x0000, 0x0000, 0x282a, 0x2828, 0x0a28, - 0x0a28, 0x02a8, 0x0a28, 0x0a28, 0x2828, 0x282a, 0x0000, 0x0000, - 0x0000, 0x0000, 0x00aa, 0x0028, 0x0028, 0x0028, 0x0028, 0x2028, - 0x2828, 0x2828, 0x2aaa, 0x0000, 0x0000, 0x0000, 0x0000, 0x280a, - 0x2a2a, 0x2aaa, 0x2aaa, 0x288a, 0x280a, 0x280a, 0x280a, 0x280a, - 0x0000, 0x0000, 0x0000, 0x0000, 0x280a, 0x280a, 0x282a, 0x28aa, - 0x2aaa, 0x2a8a, 0x2a0a, 0x280a, 0x280a, 0x0000, 0x0000, 0x0000, - 0x0000, 0x02a0, 0x0a28, 0x280a, 0x280a, 0x280a, 0x280a, 0x280a, - 0x0a28, 0x02a0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0aaa, 0x2828, - 0x2828, 0x2828, 0x0aa8, 0x0028, 0x0028, 0x0028, 0x00aa, 0x0000, - 0x0000, 0x0000, 0x0000, 0x02a0, 0x0a28, 0x280a, 0x280a, 0x280a, - 0x2a0a, 0x2a8a, 0x0aa8, 0x0a00, 0x2a80, 0x0000, 0x0000, 0x0000, - 0x0aaa, 0x2828, 0x2828, 0x2828, 0x0aa8, 0x0a28, 0x2828, 0x2828, - 0x282a, 0x0000, 0x0000, 0x0000, 0x0000, 0x02a8, 0x0a0a, 0x0a0a, - 0x000a, 0x00a8, 0x0280, 0x0a0a, 0x0a0a, 0x02a8, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0aaa, 0x08a2, 0x00a0, 0x00a0, 0x00a0, 0x00a0, - 0x00a0, 0x00a0, 0x02a8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0a0a, - 0x0a0a, 0x0a0a, 0x0a0a, 0x0a0a, 0x0a0a, 0x0a0a, 0x0a0a, 0x02a8, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0a0a, 0x0a0a, 0x0a0a, 0x0a0a, - 0x0a0a, 0x0a0a, 0x0a0a, 0x02a8, 0x00a0, 0x0000, 0x0000, 0x0000, - 0x0000, 0x280a, 0x280a, 0x280a, 0x280a, 0x288a, 0x288a, 0x0a28, - 0x0a28, 0x0a28, 0x0000, 0x0000, 0x0000, 0x0000, 0x0a0a, 0x0a0a, - 0x0a0a, 0x02a8, 0x00a0, 0x02a8, 0x0a0a, 0x0a0a, 0x0a0a, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0a0a, 0x0a0a, 0x0a0a, 0x0a0a, 0x02a8, - 0x00a0, 0x00a0, 0x00a0, 0x02a8, 0x0000, 0x0000, 0x0000, 0x0000, - 0x2aaa, 0x2a0a, 0x0282, 0x0280, 0x00a0, 0x0028, 0x2028, 0x280a, - 0x2aaa, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x02a8, 0x0a00, 0x0aa8, 0x0a0a, 0x0a0a, 0x28a8, 0x0000, 0x0000, - 0x0000, 0x0000, 0x002a, 0x0028, 0x0028, 0x0aa8, 0x2828, 0x2828, - 0x2828, 0x2828, 0x0a8a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x02a8, 0x0a0a, 0x000a, 0x000a, 0x0a0a, 0x02a8, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0a80, 0x0a00, 0x0a00, 0x0aa8, - 0x0a0a, 0x0a0a, 0x0a0a, 0x0a0a, 0x28a8, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x02a8, 0x0a0a, 0x0aaa, 0x000a, - 0x0a0a, 0x02a8, 0x0000, 0x0000, 0x0000, 0x0000, 0x02a0, 0x0a28, - 0x0028, 0x0028, 0x02aa, 0x0028, 0x0028, 0x0028, 0x00aa, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x28a8, 0x0a0a, - 0x0a0a, 0x0a0a, 0x0aa8, 0x0a00, 0x0a0a, 0x02a8, 0x0000, 0x0000, - 0x002a, 0x0028, 0x0028, 0x0a28, 0x28a8, 0x2828, 0x2828, 0x2828, - 0x282a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0280, 0x0280, 0x0000, - 0x02a8, 0x0280, 0x0280, 0x0280, 0x0280, 0x2aa8, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0a00, 0x0a00, 0x0000, 0x0aa0, 0x0a00, 0x0a00, - 0x0a00, 0x0a00, 0x0a0a, 0x0a0a, 0x02a8, 0x0000, 0x0000, 0x002a, - 0x0028, 0x0028, 0x2828, 0x0a28, 0x02a8, 0x0a28, 0x2828, 0x282a, - 0x0000, 0x0000, 0x0000, 0x0000, 0x02a8, 0x0280, 0x0280, 0x0280, - 0x0280, 0x0280, 0x0280, 0x0280, 0x2aa8, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0aaa, 0x288a, 0x288a, 0x288a, - 0x288a, 0x280a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x02aa, 0x0a0a, 0x0a0a, 0x0a0a, 0x0a0a, 0x0a0a, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x02a8, 0x0a0a, - 0x0a0a, 0x0a0a, 0x0a0a, 0x02a8, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0a8a, 0x2828, 0x2828, 0x2828, 0x2828, - 0x0aa8, 0x0028, 0x00aa, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x28a8, 0x0a0a, 0x0a0a, 0x0a0a, 0x0a0a, 0x0aa8, 0x0a00, 0x2a80, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0a2a, 0x2a28, 0x28a8, - 0x0028, 0x0028, 0x00aa, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x02a8, 0x0a0a, 0x0028, 0x0280, 0x0a0a, 0x02a8, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x0028, 0x0aaa, - 0x0028, 0x0028, 0x0028, 0x0a28, 0x02a0, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0a0a, 0x0a0a, 0x0a0a, 0x0a0a, - 0x0a0a, 0x28a8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0a0a, 0x0a0a, 0x0a0a, 0x0a0a, 0x02a8, 0x00a0, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x280a, 0x280a, - 0x288a, 0x288a, 0x0a28, 0x0a28, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x280a, 0x0a28, 0x02a0, 0x02a0, 0x0a28, - 0x280a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x2828, 0x2828, 0x2828, 0x2828, 0x0aa0, 0x0a00, 0x0280, 0x00aa, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0aaa, 0x0a02, 0x0280, - 0x0028, 0x080a, 0x0aaa, 0x0000, 0x0000, 0x0000, 0x0000, 0x02a8, - 0x0a0a, 0x0a00, 0x0280, 0x00a0, 0x00a0, 0x0000, 0x00a0, 0x00a0, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0a00, 0x0280, 0x00a0, 0x0028, 0x0028, 0x0028, 0x00a0, - 0x0280, 0x0a00, 0x0000, 0x0000, 0x0000, 0x0000, 0x0028, 0x00a0, - 0x0280, 0x0a00, 0x0a00, 0x0a00, 0x0280, 0x00a0, 0x0028, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x02a0, 0x02a0, 0x0000, - 0x0000, 0x02a0, 0x02a0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x02a0, - 0x02a0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x2aa8, 0x2aa8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0280, 0x0280, 0x2aa8, 0x2aa8, - 0x0280, 0x0280, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x2aa8, 0x0000, 0x0000, 0x2aa8, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x02a8, 0x0a0a, 0x0a0a, 0x0a0a, - 0x02a8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - //0--------------------------- - 0x0000, 0x0aa8, 0x280a, 0x2a0a, 0x2a8a, 0x288a, 0x28aa, 0x282a, - 0x280a, 0x0aa8, 0x0000, 0x0000, 0x0000, - //1--------------------------- - 0x0000, 0x0080, 0x00a0, 0x00aa, 0x00a0, 0x00a0, 0x00a0, 0x00a0, - 0x00a0, 0x0aaa, 0x0000, 0x0000, 0x0000, - //2--------------------------- - 0x0000, 0x02a8, 0x0a0a, 0x0a0a, 0x0a00, 0x0280, 0x00a0, 0x0028, - 0x0a0a, 0x0aaa, 0x0000, 0x0000, 0x0000, - //2--------------------------- - 0x0000, 0x02a8, 0x0a0a, 0x0a00, 0x0a00, 0x02a0, 0x0a00, 0x0a00, - 0x0a0a, 0x02a8, 0x0000, 0x0000, 0x0000, - //4--------------------------- - 0x0000, 0x0a00, 0x0a80, 0x0aa0, 0x0a28, 0x0a0a, 0x2aaa, 0x0a00, - 0x0a00, 0x2a80, 0x0000, 0x0000, 0x0000, - //5--------------------------- - 0x0000, 0x0aaa, 0x000a, 0x000a, 0x000a, 0x02aa, 0x0a00, 0x0a00, - 0x0a0a, 0x02a8, 0x0000, 0x0000, 0x0000, - //6--------------------------- - 0x0000, 0x02a0, 0x0028, 0x000a, 0x000a, 0x02aa, 0x0a0a, 0x0a0a, - 0x0a0a, 0x02a8, 0x0000, 0x0000, 0x0000, - //7--------------------------- - 0x0000, 0x2aaa, 0x280a, 0x280a, 0x2800, 0x0a00, 0x0280, 0x00a0, - 0x00a0, 0x00a0, 0x0000, 0x0000, 0x0000, - //8--------------------------- - 0x0000, 0x02a8, 0x0a0a, 0x0a0a, 0x0a2a, 0x02a8, 0x0a8a, 0x0a0a, - 0x0a0a, 0x02a8, 0x0000, 0x0000, 0x0000, - //9--------------------------- - 0x0000, 0x02a8, 0x0a0a, 0x0a0a, 0x0a0a, 0x0aa8, 0x0280, 0x0280, - 0x00a0, 0x00a8, 0x0000, 0x0000, 0x0000, -}; +/******************************************************************************* + * + * hal_lcd_fonts.c + * + * Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/ + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * + * Neither the name of Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ******************************************************************************/ + +const unsigned char fonts_lookup[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 63, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 64, 65, 0, 69, 0, 68, 67, 0, 0, 1, //'0' = 48 = 0x30 + 2, 3, 4, 5, 6, 7, 8, 9, 66, 0, //'9' = 57 = 0x39 + 0, 70, 0, 62, 0, 10, 11, 12, 13, 14, //'A' --> 'Z' + 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, + 35, 0, 0, 0, 71, 0, 0, 36, 37, 38, //'a' = 97 + 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, + 59, 60, 61, 62, 0, 0, 0, 72, 73, 74, + 75, 76, 77, 78, 79, 80, 81 //'z' = 122 +}; + +const unsigned int fonts[] = { + 0x0000, 0x0ffc, 0x3c0f, 0x3f0f, 0x3fcf, 0x3ccf, 0x3cff, 0x3c3f, + 0x3c0f, 0x0ffc, 0x0000, 0x0000, 0x0000, 0x0000, 0x00c0, 0x00f0, + 0x00ff, 0x00f0, 0x00f0, 0x00f0, 0x00f0, 0x00f0, 0x0fff, 0x0000, + 0x0000, 0x0000, 0x0000, 0x03fc, 0x0f0f, 0x0f0f, 0x0f00, 0x03c0, + 0x00f0, 0x003c, 0x0f0f, 0x0fff, 0x0000, 0x0000, 0x0000, 0x0000, + 0x03fc, 0x0f0f, 0x0f00, 0x0f00, 0x03f0, 0x0f00, 0x0f00, 0x0f0f, + 0x03fc, 0x0000, 0x0000, 0x0000, 0x0000, 0x0f00, 0x0fc0, 0x0ff0, + 0x0f3c, 0x0f0f, 0x3fff, 0x0f00, 0x0f00, 0x3fc0, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0fff, 0x000f, 0x000f, 0x000f, 0x03ff, 0x0f00, + 0x0f00, 0x0f0f, 0x03fc, 0x0000, 0x0000, 0x0000, 0x0000, 0x03f0, + 0x003c, 0x000f, 0x000f, 0x03ff, 0x0f0f, 0x0f0f, 0x0f0f, 0x03fc, + 0x0000, 0x0000, 0x0000, 0x0000, 0x3fff, 0x3c0f, 0x3c0f, 0x3c00, + 0x0f00, 0x03c0, 0x00f0, 0x00f0, 0x00f0, 0x0000, 0x0000, 0x0000, + 0x0000, 0x03fc, 0x0f0f, 0x0f0f, 0x0f3f, 0x03fc, 0x0fcf, 0x0f0f, + 0x0f0f, 0x03fc, 0x0000, 0x0000, 0x0000, 0x0000, 0x03fc, 0x0f0f, + 0x0f0f, 0x0f0f, 0x0ffc, 0x03c0, 0x03c0, 0x00f0, 0x00fc, 0x0000, + 0x0000, 0x0000, 0x0000, 0x00f0, 0x03fc, 0x0f0f, 0x0f0f, 0x0f0f, + 0x0fff, 0x0f0f, 0x0f0f, 0x0f0f, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0fff, 0x3c3c, 0x3c3c, 0x3c3c, 0x0ffc, 0x3c3c, 0x3c3c, 0x3c3c, + 0x0fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0ff0, 0x3c3c, 0x3c0f, + 0x000f, 0x000f, 0x000f, 0x3c0f, 0x3c3c, 0x0ff0, 0x0000, 0x0000, + 0x0000, 0x0000, 0x03ff, 0x0f3c, 0x3c3c, 0x3c3c, 0x3c3c, 0x3c3c, + 0x3c3c, 0x0f3c, 0x03ff, 0x0000, 0x0000, 0x0000, 0x0000, 0x3fff, + 0x303c, 0x003c, 0x0c3c, 0x0ffc, 0x0c3c, 0x003c, 0x303c, 0x3fff, + 0x0000, 0x0000, 0x0000, 0x0000, 0x3fff, 0x3c3c, 0x303c, 0x0c3c, + 0x0ffc, 0x0c3c, 0x003c, 0x003c, 0x00ff, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0ff0, 0x3c3c, 0x3c0f, 0x000f, 0x000f, 0x3f0f, 0x3c0f, + 0x3c3c, 0x3ff0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0f0f, 0x0f0f, + 0x0f0f, 0x0f0f, 0x0fff, 0x0f0f, 0x0f0f, 0x0f0f, 0x0f0f, 0x0000, + 0x0000, 0x0000, 0x0000, 0x03fc, 0x00f0, 0x00f0, 0x00f0, 0x00f0, + 0x00f0, 0x00f0, 0x00f0, 0x03fc, 0x0000, 0x0000, 0x0000, 0x0000, + 0x3fc0, 0x0f00, 0x0f00, 0x0f00, 0x0f00, 0x0f0f, 0x0f0f, 0x0f0f, + 0x03fc, 0x0000, 0x0000, 0x0000, 0x0000, 0x3c3f, 0x3c3c, 0x0f3c, + 0x0f3c, 0x03fc, 0x0f3c, 0x0f3c, 0x3c3c, 0x3c3f, 0x0000, 0x0000, + 0x0000, 0x0000, 0x00ff, 0x003c, 0x003c, 0x003c, 0x003c, 0x303c, + 0x3c3c, 0x3c3c, 0x3fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x3c0f, + 0x3f3f, 0x3fff, 0x3fff, 0x3ccf, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, + 0x0000, 0x0000, 0x0000, 0x0000, 0x3c0f, 0x3c0f, 0x3c3f, 0x3cff, + 0x3fff, 0x3fcf, 0x3f0f, 0x3c0f, 0x3c0f, 0x0000, 0x0000, 0x0000, + 0x0000, 0x03f0, 0x0f3c, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, + 0x0f3c, 0x03f0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0fff, 0x3c3c, + 0x3c3c, 0x3c3c, 0x0ffc, 0x003c, 0x003c, 0x003c, 0x00ff, 0x0000, + 0x0000, 0x0000, 0x0000, 0x03f0, 0x0f3c, 0x3c0f, 0x3c0f, 0x3c0f, + 0x3f0f, 0x3fcf, 0x0ffc, 0x0f00, 0x3fc0, 0x0000, 0x0000, 0x0000, + 0x0fff, 0x3c3c, 0x3c3c, 0x3c3c, 0x0ffc, 0x0f3c, 0x3c3c, 0x3c3c, + 0x3c3f, 0x0000, 0x0000, 0x0000, 0x0000, 0x03fc, 0x0f0f, 0x0f0f, + 0x000f, 0x00fc, 0x03c0, 0x0f0f, 0x0f0f, 0x03fc, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0fff, 0x0cf3, 0x00f0, 0x00f0, 0x00f0, 0x00f0, + 0x00f0, 0x00f0, 0x03fc, 0x0000, 0x0000, 0x0000, 0x0000, 0x0f0f, + 0x0f0f, 0x0f0f, 0x0f0f, 0x0f0f, 0x0f0f, 0x0f0f, 0x0f0f, 0x03fc, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0f0f, 0x0f0f, 0x0f0f, 0x0f0f, + 0x0f0f, 0x0f0f, 0x0f0f, 0x03fc, 0x00f0, 0x0000, 0x0000, 0x0000, + 0x0000, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3ccf, 0x3ccf, 0x0f3c, + 0x0f3c, 0x0f3c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0f0f, 0x0f0f, + 0x0f0f, 0x03fc, 0x00f0, 0x03fc, 0x0f0f, 0x0f0f, 0x0f0f, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0f0f, 0x0f0f, 0x0f0f, 0x0f0f, 0x03fc, + 0x00f0, 0x00f0, 0x00f0, 0x03fc, 0x0000, 0x0000, 0x0000, 0x0000, + 0x3fff, 0x3f0f, 0x03c3, 0x03c0, 0x00f0, 0x003c, 0x303c, 0x3c0f, + 0x3fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x03fc, 0x0f00, 0x0ffc, 0x0f0f, 0x0f0f, 0x3cfc, 0x0000, 0x0000, + 0x0000, 0x0000, 0x003f, 0x003c, 0x003c, 0x0ffc, 0x3c3c, 0x3c3c, + 0x3c3c, 0x3c3c, 0x0fcf, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x03fc, 0x0f0f, 0x000f, 0x000f, 0x0f0f, 0x03fc, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0fc0, 0x0f00, 0x0f00, 0x0ffc, + 0x0f0f, 0x0f0f, 0x0f0f, 0x0f0f, 0x3cfc, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x03fc, 0x0f0f, 0x0fff, 0x000f, + 0x0f0f, 0x03fc, 0x0000, 0x0000, 0x0000, 0x0000, 0x03f0, 0x0f3c, + 0x003c, 0x003c, 0x03ff, 0x003c, 0x003c, 0x003c, 0x00ff, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3cfc, 0x0f0f, + 0x0f0f, 0x0f0f, 0x0ffc, 0x0f00, 0x0f0f, 0x03fc, 0x0000, 0x0000, + 0x003f, 0x003c, 0x003c, 0x0f3c, 0x3cfc, 0x3c3c, 0x3c3c, 0x3c3c, + 0x3c3f, 0x0000, 0x0000, 0x0000, 0x0000, 0x03c0, 0x03c0, 0x0000, + 0x03fc, 0x03c0, 0x03c0, 0x03c0, 0x03c0, 0x3ffc, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0f00, 0x0f00, 0x0000, 0x0ff0, 0x0f00, 0x0f00, + 0x0f00, 0x0f00, 0x0f0f, 0x0f0f, 0x03fc, 0x0000, 0x0000, 0x003f, + 0x003c, 0x003c, 0x3c3c, 0x0f3c, 0x03fc, 0x0f3c, 0x3c3c, 0x3c3f, + 0x0000, 0x0000, 0x0000, 0x0000, 0x03fc, 0x03c0, 0x03c0, 0x03c0, + 0x03c0, 0x03c0, 0x03c0, 0x03c0, 0x3ffc, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0fff, 0x3ccf, 0x3ccf, 0x3ccf, + 0x3ccf, 0x3c0f, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x03ff, 0x0f0f, 0x0f0f, 0x0f0f, 0x0f0f, 0x0f0f, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x03fc, 0x0f0f, + 0x0f0f, 0x0f0f, 0x0f0f, 0x03fc, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0fcf, 0x3c3c, 0x3c3c, 0x3c3c, 0x3c3c, + 0x0ffc, 0x003c, 0x00ff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x3cfc, 0x0f0f, 0x0f0f, 0x0f0f, 0x0f0f, 0x0ffc, 0x0f00, 0x3fc0, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0f3f, 0x3f3c, 0x3cfc, + 0x003c, 0x003c, 0x00ff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x03fc, 0x0f0f, 0x003c, 0x03c0, 0x0f0f, 0x03fc, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0030, 0x003c, 0x0fff, + 0x003c, 0x003c, 0x003c, 0x0f3c, 0x03f0, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0f0f, 0x0f0f, 0x0f0f, 0x0f0f, + 0x0f0f, 0x3cfc, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0f0f, 0x0f0f, 0x0f0f, 0x0f0f, 0x03fc, 0x00f0, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3c0f, 0x3c0f, + 0x3ccf, 0x3ccf, 0x0f3c, 0x0f3c, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x3c0f, 0x0f3c, 0x03f0, 0x03f0, 0x0f3c, + 0x3c0f, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x3c3c, 0x3c3c, 0x3c3c, 0x3c3c, 0x0ff0, 0x0f00, 0x03c0, 0x00ff, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0fff, 0x0f03, 0x03c0, + 0x003c, 0x0c0f, 0x0fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x03fc, + 0x0f0f, 0x0f00, 0x03c0, 0x00f0, 0x00f0, 0x0000, 0x00f0, 0x00f0, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0f00, 0x03c0, 0x00f0, 0x003c, 0x003c, 0x003c, 0x00f0, + 0x03c0, 0x0f00, 0x0000, 0x0000, 0x0000, 0x0000, 0x003c, 0x00f0, + 0x03c0, 0x0f00, 0x0f00, 0x0f00, 0x03c0, 0x00f0, 0x003c, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x03f0, 0x03f0, 0x0000, + 0x0000, 0x03f0, 0x03f0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x03f0, + 0x03f0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x3ffc, 0x3ffc, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x03c0, 0x03c0, 0x3ffc, 0x3ffc, + 0x03c0, 0x03c0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x3ffc, 0x0000, 0x0000, 0x3ffc, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x03fc, 0x0f0f, 0x0f0f, 0x0f0f, + 0x03fc, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + //0--------------------------- + 0x0000, 0x0ffc, 0x3c0f, 0x3f0f, 0x3fcf, 0x3ccf, 0x3cff, 0x3c3f, + 0x3c0f, 0x0ffc, 0x0000, 0x0000, 0x0000, + //1--------------------------- + 0x0000, 0x00c0, 0x00f0, 0x00ff, 0x00f0, 0x00f0, 0x00f0, 0x00f0, + 0x00f0, 0x0fff, 0x0000, 0x0000, 0x0000, + //2--------------------------- + 0x0000, 0x03fc, 0x0f0f, 0x0f0f, 0x0f00, 0x03c0, 0x00f0, 0x003c, + 0x0f0f, 0x0fff, 0x0000, 0x0000, 0x0000, + //3--------------------------- + 0x0000, 0x03fc, 0x0f0f, 0x0f00, 0x0f00, 0x03f0, 0x0f00, 0x0f00, + 0x0f0f, 0x03fc, 0x0000, 0x0000, 0x0000, + //4--------------------------- + 0x0000, 0x0f00, 0x0fc0, 0x0ff0, 0x0f3c, 0x0f0f, 0x3fff, 0x0f00, + 0x0f00, 0x3fc0, 0x0000, 0x0000, 0x0000, + //5--------------------------- + 0x0000, 0x0fff, 0x000f, 0x000f, 0x000f, 0x03ff, 0x0f00, 0x0f00, + 0x0f0f, 0x03fc, 0x0000, 0x0000, 0x0000, + //6--------------------------- + 0x0000, 0x03f0, 0x003c, 0x000f, 0x000f, 0x03ff, 0x0f0f, 0x0f0f, + 0x0f0f, 0x03fc, 0x0000, 0x0000, 0x0000, + //7--------------------------- + 0x0000, 0x3fff, 0x3c0f, 0x3c0f, 0x3c00, 0x0f00, 0x03c0, 0x00f0, + 0x00f0, 0x00f0, 0x0000, 0x0000, 0x0000, + //8--------------------------- + 0x0000, 0x03fc, 0x0f0f, 0x0f0f, 0x0f3f, 0x03fc, 0x0fcf, 0x0f0f, + 0x0f0f, 0x03fc, 0x0000, 0x0000, 0x0000, + //9--------------------------- + 0x0000, 0x03fc, 0x0f0f, 0x0f0f, 0x0f0f, 0x0ffc, 0x03c0, 0x03c0, + 0x00f0, 0x00fc, 0x0000, 0x0000, 0x0000, +}; + + +const unsigned int GrayScale_fonts[] = { + 0x0000, 0x0aa8, 0x280a, 0x2a0a, 0x2a8a, 0x288a, 0x28aa, 0x282a, + 0x280a, 0x0aa8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0080, 0x00a0, + 0x00aa, 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x0aaa, 0x0000, + 0x0000, 0x0000, 0x0000, 0x02a8, 0x0a0a, 0x0a0a, 0x0a00, 0x0280, + 0x00a0, 0x0028, 0x0a0a, 0x0aaa, 0x0000, 0x0000, 0x0000, 0x0000, + 0x02a8, 0x0a0a, 0x0a00, 0x0a00, 0x02a0, 0x0a00, 0x0a00, 0x0a0a, + 0x02a8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0a00, 0x0a80, 0x0aa0, + 0x0a28, 0x0a0a, 0x2aaa, 0x0a00, 0x0a00, 0x2a80, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0aaa, 0x000a, 0x000a, 0x000a, 0x02aa, 0x0a00, + 0x0a00, 0x0a0a, 0x02a8, 0x0000, 0x0000, 0x0000, 0x0000, 0x02a0, + 0x0028, 0x000a, 0x000a, 0x02aa, 0x0a0a, 0x0a0a, 0x0a0a, 0x02a8, + 0x0000, 0x0000, 0x0000, 0x0000, 0x2aaa, 0x280a, 0x280a, 0x2800, + 0x0a00, 0x0280, 0x00a0, 0x00a0, 0x00a0, 0x0000, 0x0000, 0x0000, + 0x0000, 0x02a8, 0x0a0a, 0x0a0a, 0x0a2a, 0x02a8, 0x0a8a, 0x0a0a, + 0x0a0a, 0x02a8, 0x0000, 0x0000, 0x0000, 0x0000, 0x02a8, 0x0a0a, + 0x0a0a, 0x0a0a, 0x0aa8, 0x0280, 0x0280, 0x00a0, 0x00a8, 0x0000, + 0x0000, 0x0000, 0x0000, 0x00a0, 0x02a8, 0x0a0a, 0x0a0a, 0x0a0a, + 0x0aaa, 0x0a0a, 0x0a0a, 0x0a0a, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0aaa, 0x2828, 0x2828, 0x2828, 0x0aa8, 0x2828, 0x2828, 0x2828, + 0x0aaa, 0x0000, 0x0000, 0x0000, 0x0000, 0x0aa0, 0x2828, 0x280a, + 0x000a, 0x000a, 0x000a, 0x280a, 0x2828, 0x0aa0, 0x0000, 0x0000, + 0x0000, 0x0000, 0x02aa, 0x0a28, 0x2828, 0x2828, 0x2828, 0x2828, + 0x2828, 0x0a28, 0x02aa, 0x0000, 0x0000, 0x0000, 0x0000, 0x2aaa, + 0x2028, 0x0028, 0x0828, 0x0aa8, 0x0828, 0x0028, 0x2028, 0x2aaa, + 0x0000, 0x0000, 0x0000, 0x0000, 0x2aaa, 0x2828, 0x2028, 0x0828, + 0x0aa8, 0x0828, 0x0028, 0x0028, 0x00aa, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0aa0, 0x2828, 0x280a, 0x000a, 0x000a, 0x2a0a, 0x280a, + 0x2828, 0x2aa0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0a0a, 0x0a0a, + 0x0a0a, 0x0a0a, 0x0aaa, 0x0a0a, 0x0a0a, 0x0a0a, 0x0a0a, 0x0000, + 0x0000, 0x0000, 0x0000, 0x02a8, 0x00a0, 0x00a0, 0x00a0, 0x00a0, + 0x00a0, 0x00a0, 0x00a0, 0x02a8, 0x0000, 0x0000, 0x0000, 0x0000, + 0x2a80, 0x0a00, 0x0a00, 0x0a00, 0x0a00, 0x0a0a, 0x0a0a, 0x0a0a, + 0x02a8, 0x0000, 0x0000, 0x0000, 0x0000, 0x282a, 0x2828, 0x0a28, + 0x0a28, 0x02a8, 0x0a28, 0x0a28, 0x2828, 0x282a, 0x0000, 0x0000, + 0x0000, 0x0000, 0x00aa, 0x0028, 0x0028, 0x0028, 0x0028, 0x2028, + 0x2828, 0x2828, 0x2aaa, 0x0000, 0x0000, 0x0000, 0x0000, 0x280a, + 0x2a2a, 0x2aaa, 0x2aaa, 0x288a, 0x280a, 0x280a, 0x280a, 0x280a, + 0x0000, 0x0000, 0x0000, 0x0000, 0x280a, 0x280a, 0x282a, 0x28aa, + 0x2aaa, 0x2a8a, 0x2a0a, 0x280a, 0x280a, 0x0000, 0x0000, 0x0000, + 0x0000, 0x02a0, 0x0a28, 0x280a, 0x280a, 0x280a, 0x280a, 0x280a, + 0x0a28, 0x02a0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0aaa, 0x2828, + 0x2828, 0x2828, 0x0aa8, 0x0028, 0x0028, 0x0028, 0x00aa, 0x0000, + 0x0000, 0x0000, 0x0000, 0x02a0, 0x0a28, 0x280a, 0x280a, 0x280a, + 0x2a0a, 0x2a8a, 0x0aa8, 0x0a00, 0x2a80, 0x0000, 0x0000, 0x0000, + 0x0aaa, 0x2828, 0x2828, 0x2828, 0x0aa8, 0x0a28, 0x2828, 0x2828, + 0x282a, 0x0000, 0x0000, 0x0000, 0x0000, 0x02a8, 0x0a0a, 0x0a0a, + 0x000a, 0x00a8, 0x0280, 0x0a0a, 0x0a0a, 0x02a8, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0aaa, 0x08a2, 0x00a0, 0x00a0, 0x00a0, 0x00a0, + 0x00a0, 0x00a0, 0x02a8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0a0a, + 0x0a0a, 0x0a0a, 0x0a0a, 0x0a0a, 0x0a0a, 0x0a0a, 0x0a0a, 0x02a8, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0a0a, 0x0a0a, 0x0a0a, 0x0a0a, + 0x0a0a, 0x0a0a, 0x0a0a, 0x02a8, 0x00a0, 0x0000, 0x0000, 0x0000, + 0x0000, 0x280a, 0x280a, 0x280a, 0x280a, 0x288a, 0x288a, 0x0a28, + 0x0a28, 0x0a28, 0x0000, 0x0000, 0x0000, 0x0000, 0x0a0a, 0x0a0a, + 0x0a0a, 0x02a8, 0x00a0, 0x02a8, 0x0a0a, 0x0a0a, 0x0a0a, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0a0a, 0x0a0a, 0x0a0a, 0x0a0a, 0x02a8, + 0x00a0, 0x00a0, 0x00a0, 0x02a8, 0x0000, 0x0000, 0x0000, 0x0000, + 0x2aaa, 0x2a0a, 0x0282, 0x0280, 0x00a0, 0x0028, 0x2028, 0x280a, + 0x2aaa, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x02a8, 0x0a00, 0x0aa8, 0x0a0a, 0x0a0a, 0x28a8, 0x0000, 0x0000, + 0x0000, 0x0000, 0x002a, 0x0028, 0x0028, 0x0aa8, 0x2828, 0x2828, + 0x2828, 0x2828, 0x0a8a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x02a8, 0x0a0a, 0x000a, 0x000a, 0x0a0a, 0x02a8, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0a80, 0x0a00, 0x0a00, 0x0aa8, + 0x0a0a, 0x0a0a, 0x0a0a, 0x0a0a, 0x28a8, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x02a8, 0x0a0a, 0x0aaa, 0x000a, + 0x0a0a, 0x02a8, 0x0000, 0x0000, 0x0000, 0x0000, 0x02a0, 0x0a28, + 0x0028, 0x0028, 0x02aa, 0x0028, 0x0028, 0x0028, 0x00aa, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x28a8, 0x0a0a, + 0x0a0a, 0x0a0a, 0x0aa8, 0x0a00, 0x0a0a, 0x02a8, 0x0000, 0x0000, + 0x002a, 0x0028, 0x0028, 0x0a28, 0x28a8, 0x2828, 0x2828, 0x2828, + 0x282a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0280, 0x0280, 0x0000, + 0x02a8, 0x0280, 0x0280, 0x0280, 0x0280, 0x2aa8, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0a00, 0x0a00, 0x0000, 0x0aa0, 0x0a00, 0x0a00, + 0x0a00, 0x0a00, 0x0a0a, 0x0a0a, 0x02a8, 0x0000, 0x0000, 0x002a, + 0x0028, 0x0028, 0x2828, 0x0a28, 0x02a8, 0x0a28, 0x2828, 0x282a, + 0x0000, 0x0000, 0x0000, 0x0000, 0x02a8, 0x0280, 0x0280, 0x0280, + 0x0280, 0x0280, 0x0280, 0x0280, 0x2aa8, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0aaa, 0x288a, 0x288a, 0x288a, + 0x288a, 0x280a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x02aa, 0x0a0a, 0x0a0a, 0x0a0a, 0x0a0a, 0x0a0a, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x02a8, 0x0a0a, + 0x0a0a, 0x0a0a, 0x0a0a, 0x02a8, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0a8a, 0x2828, 0x2828, 0x2828, 0x2828, + 0x0aa8, 0x0028, 0x00aa, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x28a8, 0x0a0a, 0x0a0a, 0x0a0a, 0x0a0a, 0x0aa8, 0x0a00, 0x2a80, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0a2a, 0x2a28, 0x28a8, + 0x0028, 0x0028, 0x00aa, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x02a8, 0x0a0a, 0x0028, 0x0280, 0x0a0a, 0x02a8, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x0028, 0x0aaa, + 0x0028, 0x0028, 0x0028, 0x0a28, 0x02a0, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0a0a, 0x0a0a, 0x0a0a, 0x0a0a, + 0x0a0a, 0x28a8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0a0a, 0x0a0a, 0x0a0a, 0x0a0a, 0x02a8, 0x00a0, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x280a, 0x280a, + 0x288a, 0x288a, 0x0a28, 0x0a28, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x280a, 0x0a28, 0x02a0, 0x02a0, 0x0a28, + 0x280a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x2828, 0x2828, 0x2828, 0x2828, 0x0aa0, 0x0a00, 0x0280, 0x00aa, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0aaa, 0x0a02, 0x0280, + 0x0028, 0x080a, 0x0aaa, 0x0000, 0x0000, 0x0000, 0x0000, 0x02a8, + 0x0a0a, 0x0a00, 0x0280, 0x00a0, 0x00a0, 0x0000, 0x00a0, 0x00a0, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0a00, 0x0280, 0x00a0, 0x0028, 0x0028, 0x0028, 0x00a0, + 0x0280, 0x0a00, 0x0000, 0x0000, 0x0000, 0x0000, 0x0028, 0x00a0, + 0x0280, 0x0a00, 0x0a00, 0x0a00, 0x0280, 0x00a0, 0x0028, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x02a0, 0x02a0, 0x0000, + 0x0000, 0x02a0, 0x02a0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x02a0, + 0x02a0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x2aa8, 0x2aa8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0280, 0x0280, 0x2aa8, 0x2aa8, + 0x0280, 0x0280, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x2aa8, 0x0000, 0x0000, 0x2aa8, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x02a8, 0x0a0a, 0x0a0a, 0x0a0a, + 0x02a8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + //0--------------------------- + 0x0000, 0x0aa8, 0x280a, 0x2a0a, 0x2a8a, 0x288a, 0x28aa, 0x282a, + 0x280a, 0x0aa8, 0x0000, 0x0000, 0x0000, + //1--------------------------- + 0x0000, 0x0080, 0x00a0, 0x00aa, 0x00a0, 0x00a0, 0x00a0, 0x00a0, + 0x00a0, 0x0aaa, 0x0000, 0x0000, 0x0000, + //2--------------------------- + 0x0000, 0x02a8, 0x0a0a, 0x0a0a, 0x0a00, 0x0280, 0x00a0, 0x0028, + 0x0a0a, 0x0aaa, 0x0000, 0x0000, 0x0000, + //2--------------------------- + 0x0000, 0x02a8, 0x0a0a, 0x0a00, 0x0a00, 0x02a0, 0x0a00, 0x0a00, + 0x0a0a, 0x02a8, 0x0000, 0x0000, 0x0000, + //4--------------------------- + 0x0000, 0x0a00, 0x0a80, 0x0aa0, 0x0a28, 0x0a0a, 0x2aaa, 0x0a00, + 0x0a00, 0x2a80, 0x0000, 0x0000, 0x0000, + //5--------------------------- + 0x0000, 0x0aaa, 0x000a, 0x000a, 0x000a, 0x02aa, 0x0a00, 0x0a00, + 0x0a0a, 0x02a8, 0x0000, 0x0000, 0x0000, + //6--------------------------- + 0x0000, 0x02a0, 0x0028, 0x000a, 0x000a, 0x02aa, 0x0a0a, 0x0a0a, + 0x0a0a, 0x02a8, 0x0000, 0x0000, 0x0000, + //7--------------------------- + 0x0000, 0x2aaa, 0x280a, 0x280a, 0x2800, 0x0a00, 0x0280, 0x00a0, + 0x00a0, 0x00a0, 0x0000, 0x0000, 0x0000, + //8--------------------------- + 0x0000, 0x02a8, 0x0a0a, 0x0a0a, 0x0a2a, 0x02a8, 0x0a8a, 0x0a0a, + 0x0a0a, 0x02a8, 0x0000, 0x0000, 0x0000, + //9--------------------------- + 0x0000, 0x02a8, 0x0a0a, 0x0a0a, 0x0a0a, 0x0aa8, 0x0280, 0x0280, + 0x00a0, 0x00a8, 0x0000, 0x0000, 0x0000, +}; diff --git a/platform/exp5438/hal_lcd_fonts.h b/platform/exp5438/hal_lcd_fonts.h index bb0a7e1f4..a15ac38ba 100644 --- a/platform/exp5438/hal_lcd_fonts.h +++ b/platform/exp5438/hal_lcd_fonts.h @@ -1,46 +1,46 @@ -/******************************************************************************* - * - * hal_lcd_fonts.h - * - * Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/ - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the - * distribution. - * - * Neither the name of Texas Instruments Incorporated nor the names of - * its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - ******************************************************************************/ - -#ifndef FONTS_H -#define FONTS_H - -#define FONT_HEIGHT 12 // Each character has 13 lines - -extern const unsigned char fonts_lookup[]; -extern const unsigned int fonts[]; -extern const unsigned int GrayScale_fonts[]; - -#endif /* FONTS_H */ +/******************************************************************************* + * + * hal_lcd_fonts.h + * + * Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/ + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * + * Neither the name of Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ******************************************************************************/ + +#ifndef FONTS_H +#define FONTS_H + +#define FONT_HEIGHT 12 // Each character has 13 lines + +extern const unsigned char fonts_lookup[]; +extern const unsigned int fonts[]; +extern const unsigned int GrayScale_fonts[]; + +#endif /* FONTS_H */ diff --git a/platform/jn516x/App_Stack_Size.ld b/platform/jn516x/App_Stack_Size.ld new file mode 100644 index 000000000..3eaaf34c0 --- /dev/null +++ b/platform/jn516x/App_Stack_Size.ld @@ -0,0 +1,46 @@ +/***************************************************************************** + * + * MODULE: App_Stack_Size.ld + * + * DESCRIPTION: Linker command file defining the default app stack size + * + **************************************************************************** + /* +* Copyright (c) 2015 NXP B.V. +* All rights reserved. +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* 1. Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* 2. Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the distribution. +* 3. Neither the name of NXP B.V. nor the names of its contributors +* may be used to endorse or promote products derived from this software +* without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY NXP B.V. AND CONTRIBUTORS ``AS IS'' AND +* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +* ARE DISCLAIMED. IN NO EVENT SHALL NXP B.V. OR CONTRIBUTORS BE LIABLE +* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +* SUCH DAMAGE. +* +* This file is part of the Contiki operating system. +* +* +*/ + +/* Default stack size for MAC applications. + * To override the default setting, copy this + * file to your apoplication build folder and + * alter the stack size as required. */ + +_stack_size = 2048; diff --git a/platform/jn516x/Makefile.jn516x b/platform/jn516x/Makefile.jn516x new file mode 100644 index 000000000..50f0a393d --- /dev/null +++ b/platform/jn516x/Makefile.jn516x @@ -0,0 +1,308 @@ +ifndef CONTIKI + $(error CONTIKI not defined! You must specify where CONTIKI resides!) +endif + +############################################################################## +# User definable make parameters that may be overwritten from the command line +ifdef CHIP + JENNIC_CHIP = $(CHIP) +else +JENNIC_CHIP ?= JN5168 +endif +JENNIC_PCB ?= DEVKIT4 +JENNIC_STACK ?= MAC +JENNIC_MAC ?= MiniMac +DISABLE_LTO ?= 1 +# can be set to SW or HW +DEBUG ?= None + +ifeq ($(HOST_OS),Windows) + SDK_BASE_DIR ?= C:/NXP/bstudio_nxp/sdk/JN-SW-4163 + FLASH_PROGRAMMER ?= ${SDK_BASE_DIR}/Tools/flashprogrammer/FlashCLI.exe +else + # Assume Linux + SDK_BASE_DIR ?= /usr/jn516x-sdk/JN-SW-4163 + FLASH_PROGRAMMER ?= $(CONTIKI)/tools/jn516x/JennicModuleProgrammer +endif + +############################################################################### +# Include NXP makefiles +include $(SDK_BASE_DIR)/Chip/Common/Build/config.mk +include $(SDK_BASE_DIR)/Platform/Common/Build/config.mk +include $(SDK_BASE_DIR)/Stack/Common/Build/config.mk + +# Add missing includes +INCFLAGS += -I$(COMPONENTS_BASE_DIR)/MicroSpecific/Include +INCFLAGS += -I$(COMPONENTS_BASE_DIR)/Recal/Include +INCFLAGS += -I$(COMPONENTS_BASE_DIR)/ProductionTestApi/Include +INCFLAGS += -I$(COMPONENTS_BASE_DIR)/Xcv/Include + +# Add missing libs and +# do not link with MiniMac nor MiniMacShim (we use MMAC) +LDLIBS += Recal_$(JENNIC_CHIP_FAMILY) +LDLIBS := $(subst MiniMacShim_JN516x, ,$(LDLIBS)) +ifeq ($(JENNIC_CHIP),JN5169) + LDLIBS := $(subst MiniMac_JN5169, ,$(LDLIBS)) +else +LDLIBS := $(subst MiniMac_JN516x, ,$(LDLIBS)) + LDLIBS += JPT_$(JENNIC_CHIP) +endif + +# Enable all warnings +CFLAGS += -Wall +# Disable warnings that result many false positives with the Contiki core +CFLAGS += -Wno-strict-aliasing +CFLAGS += -Wno-cast-align + +# Warings as error +ifdef WERROR +CFLAGS += -Werror +endif + +# Pass DEBUG as CFLAG +ifeq ($(DEBUG),SW) +CFLAGS += -DDEBUG=1 +endif + +# Path-independent cross-compiler +CC:=$(CROSS_COMPILE)-gcc +AS:=$(CROSS_COMPILE)-as +LD:=$(CROSS_COMPILE)-ls +AR:=$(CROSS_COMPILE)-ar +NM:=$(CROSS_COMPILE)-nm +STRIP:=$(CROSS_COMPILE)-strip +SIZE:=$(CROSS_COMPILE)-size +OBJCOPY:=$(CROSS_COMPILE)-objcopy +OBJDUMP:=$(CROSS_COMPILE)-objdump + +ARCH = ccm-star.c exceptions.c rtimer-arch.c slip_uart0.c clock.c micromac-radio.c \ + mtarch.c node-id.c watchdog.c log.c ringbufindex.c slip.c sprintf.c +# Default uart0 for printf and slip +TARGET_WITH_UART0 ?= 1 +TARGET_WITH_UART1 ?= 0 + +# Get required uart files +ifeq ($(TARGET_WITH_UART0),1) +WITH_UART = 1 +ARCH += uart0.c +endif +ifeq ($(TARGET_WITH_UART1),1) +WITH_UART = 1 +ARCH += uart1.c +endif +ifeq ($(WITH_UART),1) +ARCH += uart-driver.c +endif + +CONTIKI_TARGET_DIRS = . dev lib +CONTIKI_TARGET_MAIN = contiki-jn516x-main.c + +ifeq ($(JN516x_WITH_DR1175),1) +JN516x_WITH_DR1174 = 1 +CFLAGS += -DSENSOR_BOARD_DR1175 +CONTIKI_TARGET_DIRS += dev/dr1175 +ARCH += ht-sensor.c light-sensor.c leds-extension.c leds-arch-1175.c +endif + +ifeq ($(JN516x_WITH_DR1199),1) +JN516x_WITH_DR1174 = 1 +CFLAGS += -DSENSOR_BOARD_DR1199 +CONTIKI_TARGET_DIRS += dev/dr1199 +ARCH += pot-sensor.c leds-arch-1199.c +endif + +ifeq ($(JN516x_WITH_DR1174),1) +CFLAGS += -DSENSOR_BOARD_DR1174 +CONTIKI_TARGET_DIRS += dev/dr1174 +ARCH += button-sensor.c leds-arch.c +else +# Dongle is the default platform +JN516x_WITH_DONGLE = 1 +endif + +ifeq ($(JN516x_WITH_DONGLE),1) +CFLAGS += -DDONGLE_NODE +CONTIKI_TARGET_DIRS += dev/dongle +ARCH += leds-arch.c +endif + +ifdef nodemac +CFLAGS += -DMACID=$(nodemac) +endif + +CLEAN += *.jn516x +CLEAN += *.jn516x.bin + +MODULES += core/net \ + core/net/mac \ + core/net/mac/contikimac \ + core/net/llsec core/net/llsec/noncoresec + +CONTIKI_TARGET_SOURCEFILES += $(ARCH) +CONTIKI_SOURCEFILES += $(CONTIKI_TARGET_SOURCEFILES) + +PROJECT_OBJECTFILES += ${addprefix $(OBJECTDIR)/,$(CONTIKI_TARGET_MAIN:.c=.o)} + +CFLAGS += $(INCFLAGS) + +# Library search paths +LDFLAGS += -L$(CHIP_BASE_DIR)/Build +LDFLAGS += -L$(CHIP_BASE_DIR)/Library + +LDLIBS := $(addsuffix _$(JENNIC_CHIP_FAMILY),$(APPLIBS)) $(LDLIBS) + +ifeq ($(HOST_OS),Windows) +# Windows assumes Cygwin. Substitute all paths in CFLAGS and LDFLAGS with Windows paths. +CFLAGS := $(patsubst -I/cygdrive/c/%,-Ic:/%,$(CFLAGS)) +LDFLAGS := $(patsubst -L/cygdrive/c/%,-Lc:/%,$(LDFLAGS)) +endif + +######################################################################## + +MOTELIST = python $(CONTIKI)/tools/jn516x/mote-list.py + +# Check if we are running under Windows +ifeq ($(HOST_OS),Windows) + USBDEVPREFIX=/dev/com + USBDEVBASENAME=COM + SERIALDUMP ?= $(CONTIKI)/tools/jn516x/serialdump-windows +else +ifeq ($(HOST_OS),Darwin) + USBDEVPREFIX= + USBDEVBASENAME=/dev/tty.usbserial- + SERIALDUMP ?= $(CONTIKI)/tools/jn516x/serialdump-macos +else + # Else we assume Linux + USBDEVPREFIX= + USBDEVBASENAME=/dev/ttyUSB + SERIALDUMP ?= $(CONTIKI)/tools/jn516x/serialdump-linux +endif +endif + +# Note: this logic is different from Sky +ifneq ("", "$(filter-out %all,$(filter %.upload serial% login, $(MAKECMDGOALS)))") +ifndef MOTE + $(error MOTE not defined! You must specify which MOTE (serial port) to use) +endif +endif +PORT = $(USBDEVBASENAME)$(MOTE) + +#### make targets + +######################################################################## +# Dependency, compilation and flash-programming rules + +.PHONY: all clean + +.PRECIOUS: %.elf + +%.d: clean + +%.nm: %.$(TARGET) + $(Q)$(NM) -nS $< > $@ + +%.dmp: %.$(TARGET) + $(Q)$(OBJDUMP) -d $< > $@ + +define FINALIZE_DEPENDENCY_ +# hack: subsitute windows path back to cygwin path +sed -e 's/c:\//\/cygdrive\/c\//' $(@:.o=.d) > $(@:.o=.$$$$); \ +cp $(@:.o=.$$$$) $(@:.o=.d); \ +sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\$$//' \ + -e '/^$$/ d' -e 's/$$/ :/' < $(@:.o=.$$$$) >> $(@:.o=.d); \ +rm -f $(@:.o=.$$$$) +endef + +CUSTOM_RULE_C_TO_OBJECTDIR_O = 1 +$(OBJECTDIR)/%.o: %.c | $(OBJECTDIR) + $(TRACE_CC) + $(Q)$(CC) $(CFLAGS) -MMD -c $< -o $@ + @$(FINALIZE_DEPENDENCY_) + +CUSTOM_RULE_LINK = 1 +ALLLIBS = $(addprefix -l,$(LDLIBS)) $(addprefix -l,$(LDSTACKLIBS)) $(addprefix -l,$(LDMYLIBS)) +ABS_APPLIBS = $(addsuffix _$(JENNIC_CHIP_FAMILY).a,$(addprefix $(COMPONENTS_BASE_DIR)/Library/lib,$(APPLIBS))) + +ifneq ($(wildcard $(SDK_BASE_DIR)/Components/Library/*),) +# The SDK is fully installed, proceed to linking and objcopy to ready-to-upload .jn516x.bin file +%.$(TARGET): %.co $(PROJECT_OBJECTFILES) $(PROJECT_LIBRARIES) contiki-$(TARGET).a $(ABS_APPLIBS) + echo ${filter %.a,$^} + $(Q)$(CC) -Wl,--gc-sections $(LDFLAGS) -T$(LINKCMD) -o $@ -Wl,--start-group \ + $(patsubst /cygdrive/c/%,c:/%,${filter-out %.a,$^}) \ + $(patsubst /cygdrive/c/%,c:/%,${filter %.a,$^}) \ + $(ALLLIBS) -Wl,--end-group -Wl,-Map,contiki-$(TARGET).map + $(OBJCOPY) -S -O binary $@ $@.bin +else +# The SDK does not include libraries, only build objects and libraries, skip linking +%.$(TARGET): %.co $(PROJECT_OBJECTFILES) $(PROJECT_LIBRARIES) contiki-$(TARGET).a + echo Creating empty $@ + touch $@ +endif + +%.$(TARGET).bin: %.$(TARGET) + $(Q)$(OBJCOPY) -S -O binary $< $@ + +symbols.c symbols.h: + @${CONTIKI}/tools/make-empty-symbols + +### Upload target to one jn516x mote specified by MOTE=portNumber +ifeq ($(HOST_OS),Windows) +%.upload: %.$(TARGET).bin + ${FLASH_PROGRAMMER} -a -c $(PORT) -B 1000000 -s -w -f $< +else +%.upload: %.$(TARGET).bin + ${FLASH_PROGRAMMER} -V 10 -v -s $(PORT) -I 38400 -P 1000000 -f $< +endif + +### Flash the given file +ifeq ($(HOST_OS),Windows) +%.flash: ${FLASH_PROGRAMMER} + ${FLASH_PROGRAMMER} -a -c $(PORT) -B 1000000 -s -w -f $*.$(TARGET).bin +else +%.flash: ${FLASH_PROGRAMMER} + ${FLASH_PROGRAMMER} -V 10 -v -s $(PORT) -I 38400 -P 1000000 -s -f $*.$(TARGET).bin +endif + +### List the ports with connected jn516x motes +motelist: + $(Q)$(MOTELIST) ${FLASH_PROGRAMMER} \# + +motelistmac: + $(Q)$(MOTELIST) ${FLASH_PROGRAMMER} \! + +motelistinfo: + $(Q)$(MOTELIST) ${FLASH_PROGRAMMER} \? + +### Upload target to all connected jn516x motes +%.uploadall: %.$(TARGET).bin + $(Q)$(MOTELIST) ${FLASH_PROGRAMMER} $< + +### Flash the given file to all connected jn516x motes +%.flashall: + $(Q)$(MOTELIST) ${FLASH_PROGRAMMER} $* + +### Dump output from all connected jn516x motes +serialdumpall: + $(Q)$(MOTELIST) ${FLASH_PROGRAMMER} \% $(SERIALDUMP) + +########### login: read serial line ############## +### USAGE: make TARGET=jn516x login UART_BAUDRATE={baudrate} {serial device} +### UART_BAUDRATE: i.e., 115200. default is 1000000 +### example: make TARGET=jn516x UART_BAUDRATE=115200 login MOTE=1 + +UART_BAUDRATE ?= 1000000 + +$(CONTIKI)/tools/tunslip6: $(CONTIKI)/tools/tunslip6.c + ($(MAKE) -C $(CONTIKI)/tools tunslip6 CFLAGS= LDFLAGS= LDLIBS= INCFLAGS=) + +$(SERIALDUMP): $(CONTIKI)/tools/jn516x/serialdump.c + (cd $(CONTIKI)/tools/jn516x; ${MAKE} $(notdir $(SERIALDUMP))) + +login: $(SERIALDUMP) + $(SERIALDUMP) -b${UART_BAUDRATE} $(USBDEVPREFIX)$(PORT) + +serialview: $(SERIALDUMP) + $(SERIALDUMP) -b${UART_BAUDRATE} $(USBDEVPREFIX)$(PORT) | $(CONTIKI)/tools/timestamp + +serialdump: $(SERIALDUMP) + $(SERIALDUMP) -b${UART_BAUDRATE} $(USBDEVPREFIX)$(PORT) | $(CONTIKI)/tools/timestamp | tee serialdump-$(notdir $(PORT))-`date +%Y%m%d-%H%M` diff --git a/platform/jn516x/README.md b/platform/jn516x/README.md new file mode 100644 index 000000000..d67bfd029 --- /dev/null +++ b/platform/jn516x/README.md @@ -0,0 +1,183 @@ +# NXP JN516x platform + +## Overview + +The JN516x series is a range of ultra low power, high performance wireless microcontrollers from NXP. They feature an enhanced 32-bit RISC processor (256kB/32kB/4kB Flash/RAM/EEPROM for JN5168), and also include a 2.4GHz IEEE802.15.4-compliant transceiver. +These system on chip (SoC) devices have the following main [features][jn516x-datasheet]: +* 32-bit RISC CPU (Beyond Architecture -- BA), 1 to 32MHz clock speed +* 2.4GHz IEEE802.15.4-compliant transceiver +* 128-bit AES security processor +* MAC accelerator with packet formatting, CRCs, address check, auto-acks, timers +* Transmit power 2.5dBm +* Receiver sensitivity -95dBm +* RX current 17mA, TX 15mA +* Integrated ultra low power sleep oscillator – 0.6μA +* Deep sleep current 0.12μA (Wake-up from IO) +* Time of Flight engine for ranging +* Antenna Diversity (Auto RX) +* 2.0V to 3.6V battery operation +* Supply voltage monitor with 8 programmable thresholds +* Built-in battery and temperature sensors +* Infra-red remote control transmitter +* Peripherals: I2C, SPI, 2x UART, 4-input 10-bit ADC, comparator, 5x PWM + +## Maintainers and Contact + +Long-term maintainers: +* Theo Van Daele, NXP, theo.van.daele@nxp.com, github user: [TeVeDe](https://github.com/TeVeDe) +* Simon Duquennoy, SICS, simonduq@sics.se, github user: [simonduq](https://github.com/simonduq) + +Other contributors: +* Beshr Al Nahas, SICS (now Chalmers University), beshr@chalmers.se, github user: [beshrns](https://github.com/beshrns) +* Atis Elsts, SICS, atis.elsts@sics.se, github user: [atiselsts](https://github.com/atiselsts) + +Additional long-term contact: +* Hugh Maaskant, NXP, hugh.maaskant@nxp.com, github user: [hugh-maaskant](https://github.com/hugh-maaskant) + +## License + +All files are under BSD license, as described by the copyright statement in every source file. + +## Port Features + +The following features have been implemented: + * A radio driver with two modes (polling and interrupt based) + * CCM* driver with HW accelerated AES + * UART driver (with HW and SW flow control, 1'000'000 baudrate by default) + * Contiki system clock and rtimers (16MHz tick frequency based on 32 MHz crystal) + * 32.768kHz external oscillator + * Periodic DCO recalibration + * CPU "doze" mode + * HW random number generator used as a random seed for pseudo-random generator + * Watchdog, JN516x HW exception handlers + +The following hardware platforms have been tested: + * DR1174 evaluation board (with a button sensor) + * DR1175 sensor board (with humidity/temperature and light sensors) + * DR1199 sensor board (with potentiometer and button sensors) + * USB dongle + +## TODO list + +The following features are planned: + * CPU deeper sleep mode support (where the 32 MHz crystal is turned off) + * Time-accurate radio primitives ("send at", "listen until") + * External storage + +## Requirements + +To start using JN516x with Contiki, the following are required: + * The toolchain and Software Development Kit to compile Contiki for JN516x + * Drivers so that your OS can communicate with your hardware + * Software to upload images to the JN516x + +### Install a Toolchain + +The toolchain used to build Contiki for JN516x is `ba-elf-gcc`. +The compiler as well as the binary libraries required to link the executables can be downloaded from NXP. To express your interest in obtaining them, go to [NXP 802.15.4 software page][NXP-802.15.4-software], select "JN-SW-4163", and contact the NXP support through the web form. The download link is then obtained via e-mail (allow 1+ working day for a reply). +The example applications in this port have been tested with compiler version `gcc-4.7.4-ba-r36379`. + +Linux and Windows instructions: +* On Linux: A compiled version for linux 64-bit is available: download [this](http://simonduq.github.io/resources/ba-elf-gcc-4.7.4-part1.tar.bz2) and [this](http://simonduq.github.io/resources/ba-elf-gcc-4.7.4-part2.tar.bz2) file, extract both in `/usr/ba-elf-gcc` such and add `/usr/ba-elf-gcc/bin` to your `$PATH` environment variable. Place the JN516x SDK under `/usr/jn516x-sdk`. +* On Windows: Run the setup program and select `C:/NXP/bstudio_nxp/` as install directory. Also make sure your PATH environment variable points to the compiler binaries (by default in `C:/NXP/bstudio_nxp/sdk/Tools/ba-elf-ba2-r36379/bin`). + +### Drivers + +The JN516x platforms feature FTDI serial-to-USB modules. The driver is commonly found in most OS, but if required it can be downloaded from + +### Device Enumerations +For the UART, serial line settings are 1000000 8N1, no flow control. + +Once all drivers have been installed correctly: +* On Windows, devices will appear as a virtual COM port. +* On Linux and OS X, devices will appear as `/dev/tty*`. + +### Software to Program the Nodes + +The JN516x can be programmed via the serial boot loader on the chip. +* On Linux, nodes can be programmed via the serial boot loader using the [JennicModuleProgrammer] tool. It is pre-installed under `tools/jn516x/JennicModuleProgrammer`. +* On Windows, nodes are programmed using NXP's Flash Programmer. There are two versions of it: GUI and command line. The Contiki make system is configured to use the command line version. By default it looks for the programmer in the SDK base directory under `Tools/flashprogrammer/FlashCLI.exe`. With the default SDK installation path the file should be located under `C:/NXP/bstudio_nxp/sdk/JN-SW-4163/Tools/flashprogrammer/FlashCLI.exe`. Modify `platforms/jn516x/Makefile.common` to change this default location. + +## Using the Port + +The following examples are intended to work off-the-shelf: +* Platform-specific examples under `examples/jn516x` +* All platform-independent Contiki application examples + +### Building an example + +To build the classic "hello world" example, navigate to `examples/hello-world`. It is recommended to either set the `TARGET` environmental variable or to save the `jn516x` platform as the default make target. To do that, run: + +`make TARGET=jn516x savetarget` + +Then run `make hello-world` to compile the application for JN516x platform. + +### Uploading an example + +Run the `upload` command to program the binary image on it: +`make hello-world.upload MOTE=0` + +The `MOTE` argument is used to specify to which of the ports the device is connected. For example, if there is a single mote connected to `/dev/ttyUSB3` in Linux (or, alternatively, `COM3` in Windows), the right command would be: +`make hello-world.upload MOTE=3` + +Note that on Windows, the FTDI drivers are able to switch the board to programming mode before uploading the image. + +On Linux, the drivers are not able to do so yet. We use a modified bootloader for JN516x, where nodes wait 5s in programming mode after a reset. You simply need to reset them before using `make upload`. The modified bootloader can be downloaded [here](http://simonduq.github.io/resources/BootLoader_JN5168.ba2.bin) and installed using a JTAG programmer, or alternatively, [this image](http://simonduq.github.io/resources/BootLoaderUpdater_JN5168.bin) can be installed as a normal application using the normal Windows tools. Once the device resets, this application will run and will then install the new boot loader. It generates some status output over UART0 at 115200 baud during this process. **Warning**: use the images above at your risk; NXP does not accept responsibility for any devices that are rendered unusable as a result of using it. + +### Listening to output + +Run the `login` command to start the `serialdump` application. +`make login MOTE=3` + +On Linux: after the application has started, press the reset button on the node. + +### Platform-specific make targets + +* `.flash` - flash the (pre-compiled) application to a JN516x mote (specified via the `MOTE` variable) +* `.flashall` - flash the (pre-compiled) application to all all connected JN516x motes +* `.upload` - compile and flash the application to a JN516x mote (specified via the `MOTE` variable) +* `.uploadall` - compile and flash the application to all all connected JN516x motes +* `login`, `serialview`, `serialdump` - dump serial port output from a JN516x mote (specified via the `MOTE` variable) +* `serialdumpall` - dump serial port output from all connected JN516x motes +* `motelist` - list all connected JN516x motes. +* `motelistmac` - list MAC addresses of all connected JN516x motes (Note: not implemented on Linux!) +* `motelistinfo` - list info about all connected JN516x motes (Note: very limited functionality on Linux!) + +*Troubleshooting:* you need a working Python installation for these commands to work. On Windows, make sure Python executable is in your `PATH`. + +### Compiling for different MCUs and boards + +The platforms can selected by using `Makefile` variables. + +The following MCU models are supported: +* `JN5164` - 160kB/32kB/4kB Flash/RAM/EEPROM +* `JN5168` - 256kB/32kB/4kB Flash/RAM/EEPROM (default MCU) +* `JN5169` - 512kB/32kB/4kB Flash/RAM/EEPROM + +Set `CHIP` variable to change this; for example, to select JN5164 use: +`make CHIP=JN5164` + +The following platform-specific configurations are supported: +* DR1174 evaluation kit; enable this with `JN516x_WITH_DR1174 = 1` in your makefile +* DR1174 with DR1175 sensor board; enable this with `JN516x_WITH_DR1175 = 1` (will set `JN516x_WITH_DR1174` automatically) +* DR1174 with DR1199 sensor board; enable this with `JN516x_WITH_DR1199 = 1` (will set `JN516x_WITH_DR1174` automatically) +* USB dongle; enable this with `JN516x_WITH_DONGLE = 1` + +### Node IEEE/RIME/IPv6 Addresses + +Nodes will autoconfigure their IPv6 address based on their 64-bit IEEE/MAC address. The 64-bit MAC address is read directly from JN516x System on Chip. +The 16-bit RIME address and the Node ID are set from the last 16-bits of the 64-bit MAC address. + +## Additional documentation + +1. [Data Sheet: JN516x IEEE802.15.4 Wireless Microcontroller][jn516x-datasheet] +2. [JN516x web page][jn516x-web] +3. [JN5168 web page][jn5168-web] +4. [JN516x user manuals][user-manuals] + +[jn516x-datasheet]: http://www.nxp.com/documents/data_sheet/JN516X.pdf +[jn516x-web]: http://www.nxp.com/products/microcontrollers/product_series/jn516x +[jn5168-web]: http://www.nxp.com/products/microcontrollers/product_series/jn516x/JN5168.html +[user-manuals]: http://www.nxp.com/technical-support-portal/#/tid=1,sid=,bt=,tab=usermanuals,p=1,rpp=,sc=,so=,jump= +[NXP-802.15.4-software]: http://www.nxp.com/techzones/wireless-connectivity/ieee802-15-4.html +[JennicModuleProgrammer]: https://github.com/WRTIOT/JennicModuleProgrammer diff --git a/platform/jn516x/contiki-conf.h b/platform/jn516x/contiki-conf.h new file mode 100644 index 000000000..41135c187 --- /dev/null +++ b/platform/jn516x/contiki-conf.h @@ -0,0 +1,195 @@ +/* + * Copyright (c) 2015, SICS Swedish ICT. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the Contiki operating system. + * + */ + +#ifndef CONTIKI_CONF_H_ +#define CONTIKI_CONF_H_ + +#ifdef PLATFORM_CONF_H +#include PLATFORM_CONF_H +#else +#include "platform-conf.h" +#endif /* PLATFORM_CONF_H */ + +#ifndef CCM_STAR_CONF +#define CCM_STAR_CONF ccm_star_driver_jn516x +#endif /* CCM_STAR_CONF */ + +#ifndef NETSTACK_CONF_MAC +#define NETSTACK_CONF_MAC tschmac_driver +#endif /* NETSTACK_CONF_MAC */ + +#ifndef NETSTACK_CONF_RDC +#define NETSTACK_CONF_RDC nordc_driver +#endif /* NETSTACK_CONF_RDC */ + +#ifndef NETSTACK_CONF_RADIO +#define NETSTACK_CONF_RADIO micromac_radio_driver +#endif /* NETSTACK_CONF_RADIO */ + +#ifndef NETSTACK_CONF_FRAMER +#define NETSTACK_CONF_FRAMER framer_802154 +#endif /* NETSTACK_CONF_FRAMER */ + +#define PACKETBUF_CONF_ATTRS_INLINE 1 + +#ifndef IEEE802154_CONF_PANID +#define IEEE802154_CONF_PANID 0xABCD +#endif /* IEEE802154_CONF_PANID */ + +#ifndef ENERGEST_CONF_ON +#define ENERGEST_CONF_ON 1 +#endif /* ENERGEST_CONF_ON */ + +#define WITH_ASCII 1 + +#define PROCESS_CONF_NUMEVENTS 8 +#define PROCESS_CONF_STATS 1 + +#if !defined NETSTACK_CONF_WITH_IPV6 && !defined NETSTACK_CONF_WITH_IPV4 && !defined NETSTACK_CONF_WITH_RIME +#define NETSTACK_CONF_WITH_IPV6 1 +#endif /* NETSTACK_CONF_ not defined */ + +/* Network setup for IP */ +#if NETSTACK_CONF_WITH_IPV4 || NETSTACK_CONF_WITH_IPV6 + +#define LINKADDR_CONF_SIZE 8 + +#ifndef QUEUEBUF_CONF_NUM +#define QUEUEBUF_CONF_NUM 16 +#endif + +/* Network setup for non-IP (rime). */ +#else + +#define LINKADDR_CONF_SIZE 2 + +#ifndef COLLECT_NEIGHBOR_CONF_MAX_COLLECT_NEIGHBORS +#define COLLECT_NEIGHBOR_CONF_MAX_COLLECT_NEIGHBORS 32 +#endif /* COLLECT_NEIGHBOR_CONF_MAX_COLLECT_NEIGHBORS */ + +#ifndef QUEUEBUF_CONF_NUM +#define QUEUEBUF_CONF_NUM 16 +#endif /* QUEUEBUF_CONF_NUM */ + +#endif /* NETSTACK_CONF_WITH_IPV4 || NETSTACK_CONF_WITH_IPV6 */ + +/* Network setup for IPv6 */ +#if NETSTACK_CONF_WITH_IPV6 + +/* Network setup for IPv6 */ +#define NETSTACK_CONF_NETWORK sicslowpan_driver +#define UIP_CONF_BROADCAST 1 + +/* Configure NullRDC for when it is selected */ +#define NULLRDC_CONF_802154_AUTOACK_HW 1 + +#define UIP_CONF_LL_802154 1 +#define UIP_CONF_LLH_LEN 0 + +#define UIP_CONF_ROUTER 1 +#ifndef UIP_CONF_IPV6_RPL +#define UIP_CONF_IPV6_RPL 1 +#endif /* UIP_CONF_IPV6_RPL */ + +/* configure number of neighbors and routes */ +#ifndef NBR_TABLE_CONF_MAX_NEIGHBORS +#define NBR_TABLE_CONF_MAX_NEIGHBORS 20 +#endif /* NBR_TABLE_CONF_MAX_NEIGHBORS */ +#ifndef UIP_CONF_MAX_ROUTES +#define UIP_CONF_MAX_ROUTES 20 +#endif /* UIP_CONF_MAX_ROUTES */ + +#define UIP_CONF_ND6_SEND_RA 0 +#define UIP_CONF_ND6_REACHABLE_TIME 600000 +#define UIP_CONF_ND6_RETRANS_TIMER 10000 + +#ifndef UIP_CONF_IPV6_QUEUE_PKT +#define UIP_CONF_IPV6_QUEUE_PKT 0 +#endif /* UIP_CONF_IPV6_QUEUE_PKT */ +#define UIP_CONF_IPV6_CHECKS 1 +#define UIP_CONF_IPV6_REASSEMBLY 0 +#define UIP_CONF_NETIF_MAX_ADDRESSES 3 +#define UIP_CONF_ND6_MAX_PREFIXES 3 +#define UIP_CONF_ND6_MAX_DEFROUTERS 2 +#define UIP_CONF_IP_FORWARD 0 +#ifndef UIP_CONF_BUFFER_SIZE +#define UIP_CONF_BUFFER_SIZE 1280 +#endif + +#define SICSLOWPAN_CONF_COMPRESSION_IPV6 0 +#define SICSLOWPAN_CONF_COMPRESSION_HC1 1 +#define SICSLOWPAN_CONF_COMPRESSION_HC01 2 +#define SICSLOWPAN_CONF_COMPRESSION SICSLOWPAN_COMPRESSION_HC06 +#ifndef SICSLOWPAN_CONF_FRAG +#define SICSLOWPAN_CONF_FRAG 1 +#define SICSLOWPAN_CONF_MAXAGE 8 +#endif /* SICSLOWPAN_CONF_FRAG */ +#define SICSLOWPAN_CONF_MAX_ADDR_CONTEXTS 2 +#ifndef SICSLOWPAN_CONF_MAX_MAC_TRANSMISSIONS +#define SICSLOWPAN_CONF_MAX_MAC_TRANSMISSIONS 5 +#endif /* SICSLOWPAN_CONF_MAX_MAC_TRANSMISSIONS */ +#define UIP_CONF_ICMP_DEST_UNREACH 1 + +#define UIP_CONF_DHCP_LIGHT +#ifndef UIP_CONF_RECEIVE_WINDOW +#define UIP_CONF_RECEIVE_WINDOW 48 +#endif +#ifndef UIP_CONF_TCP_MSS +#define UIP_CONF_TCP_MSS 48 +#endif +#define UIP_CONF_MAX_CONNECTIONS 4 +#define UIP_CONF_MAX_LISTENPORTS 8 +#define UIP_CONF_UDP_CONNS 12 +#define UIP_CONF_FWCACHE_SIZE 30 +#define UIP_CONF_BROADCAST 1 +#define UIP_ARCH_CHKSUM 0 +#define UIP_ARCH_ADD32 0 +#define UIP_CONF_UDP 1 +#define UIP_CONF_UDP_CHECKSUMS 1 +#define UIP_CONF_PINGADDRCONF 0 +#define UIP_CONF_LOGGING 0 +#define LOG_CONF_ENABLED 0 + +#define UIP_CONF_TCP_SPLIT 0 + +#define UIP_CONF_BYTE_ORDER UIP_BIG_ENDIAN +#define UIP_CONF_LOGGING 0 + +#endif /* NETSTACK_CONF_WITH_IPV6 */ + +/* include the project config */ +/* PROJECT_CONF_H might be defined in the project Makefile */ +#ifdef PROJECT_CONF_H +#include PROJECT_CONF_H +#endif /* PROJECT_CONF_H */ + +#endif /* CONTIKI_CONF_H_ */ diff --git a/platform/jn516x/contiki-jn516x-main.c b/platform/jn516x/contiki-jn516x-main.c new file mode 100644 index 000000000..d7b463b12 --- /dev/null +++ b/platform/jn516x/contiki-jn516x-main.c @@ -0,0 +1,462 @@ +/* + * Copyright (c) 2014, SICS Swedish ICT. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided + * with the distribution. + * 3. The name of the author may not be used to endorse or promote + * products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * This file is part of the Contiki OS + * + */ + +/** + * \file + * Contiki main for NXP JN516X platform + * + * \author + * Beshr Al Nahas + */ + +#include +#include +#include + +#include "dev/watchdog.h" +#include +#include +#include +#include "dev/uart0.h" + +#include "contiki.h" +#include "net/netstack.h" + +#include "dev/serial-line.h" + +#include "net/ip/uip.h" +#include "dev/leds.h" + +#include "lib/random.h" +#include "sys/node-id.h" +#include "rtimer-arch.h" + +#if NETSTACK_CONF_WITH_IPV6 +#include "net/ipv6/uip-ds6.h" +#endif /* NETSTACK_CONF_WITH_IPV6 */ + +#include "net/rime/rime.h" + +#include "dev/micromac-radio.h" +#include "MMAC.h" +/* Includes depending on connected sensor boards */ +#if SENSOR_BOARD_DR1175 +#include "light-sensor.h" +#include "ht-sensor.h" +SENSORS(&light_sensor, &ht_sensor); +#elif SENSOR_BOARD_DR1199 +#include "button-sensor.h" +#include "pot-sensor.h" +SENSORS(&pot_sensor, &button_sensor); +#else +#include "dev/button-sensor.h" +/* #include "dev/pir-sensor.h" */ +/* #include "dev/vib-sensor.h" */ +/* &pir_sensor, &vib_sensor */ +SENSORS(&button_sensor); +#endif +unsigned char node_mac[8]; + +/* Symbol defined by the linker script + * marks the end of the stack taking into account the used heap */ +extern uint32_t heap_location; + +#ifndef NETSTACK_CONF_WITH_IPV4 +#define NETSTACK_CONF_WITH_IPV4 0 +#endif + +#if NETSTACK_CONF_WITH_IPV4 +#include "net/ip/uip.h" +#include "net/ipv4/uip-fw.h" +#include "net/ipv4/uip-fw-drv.h" +#include "net/ipv4/uip-over-mesh.h" +static struct uip_fw_netif slipif = +{ UIP_FW_NETIF(192, 168, 1, 2, 255, 255, 255, 255, slip_send) }; +static struct uip_fw_netif meshif = +{ UIP_FW_NETIF(172, 16, 0, 0, 255, 255, 0, 0, uip_over_mesh_send) }; + +#define UIP_OVER_MESH_CHANNEL 8 +static uint8_t is_gateway; +#endif /* NETSTACK_CONF_WITH_IPV4 */ + +#ifdef EXPERIMENT_SETUP +#include "experiment-setup.h" +#endif + +/*---------------------------------------------------------------------------*/ +#define DEBUG 1 +#if DEBUG +#define PRINTF(...) do { printf(__VA_ARGS__); } while(0) +#else +#define PRINTF(...) do {} while(0) +#endif +/*---------------------------------------------------------------------------*/ +/* Reads MAC from SoC + * Must be called before node_id_restore() + * and network addresses initialization */ +static void +init_node_mac(void) +{ + tuAddr psExtAddress; + vMMAC_GetMacAddress(&psExtAddress.sExt); + node_mac[7] = psExtAddress.sExt.u32L; + node_mac[6] = psExtAddress.sExt.u32L >> (uint32_t)8; + node_mac[5] = psExtAddress.sExt.u32L >> (uint32_t)16; + node_mac[4] = psExtAddress.sExt.u32L >> (uint32_t)24; + node_mac[3] = psExtAddress.sExt.u32H; + node_mac[2] = psExtAddress.sExt.u32H >> (uint32_t)8; + node_mac[1] = psExtAddress.sExt.u32H >> (uint32_t)16; + node_mac[0] = psExtAddress.sExt.u32H >> (uint32_t)24; +} +/*---------------------------------------------------------------------------*/ +#if !PROCESS_CONF_NO_PROCESS_NAMES +static void +print_processes(struct process *const processes[]) +{ + /* const struct process * const * p = processes;*/ + PRINTF("Starting"); + while(*processes != NULL) { + PRINTF(" '%s'", (*processes)->name); + processes++; + } + putchar('\n'); +} +#endif /* !PROCESS_CONF_NO_PROCESS_NAMES */ +/*---------------------------------------------------------------------------*/ +#if NETSTACK_CONF_WITH_IPV4 +static void +set_gateway(void) +{ + if(!is_gateway) { + leds_on(LEDS_RED); + printf("%d.%d: making myself the IP network gateway.\n\n", + linkaddr_node_addr.u8[0], linkaddr_node_addr.u8[1]); + printf("IPv4 address of the gateway: %d.%d.%d.%d\n\n", + uip_ipaddr_to_quad(&uip_hostaddr)); + uip_over_mesh_set_gateway(&linkaddr_node_addr); + uip_over_mesh_make_announced_gateway(); + is_gateway = 1; + } +} +#endif /* NETSTACK_CONF_WITH_IPV4 */ +/*---------------------------------------------------------------------------*/ +static void +start_autostart_processes() +{ +#if !PROCESS_CONF_NO_PROCESS_NAMES + print_processes(autostart_processes); +#endif /* !PROCESS_CONF_NO_PROCESS_NAMES */ + autostart_start(autostart_processes); +} +/*---------------------------------------------------------------------------*/ +#if NETSTACK_CONF_WITH_IPV6 +static void +start_uip6(void) +{ + NETSTACK_NETWORK.init(); + +#ifndef WITH_SLIP_RADIO + process_start(&tcpip_process, NULL); +#else +#if WITH_SLIP_RADIO == 0 + process_start(&tcpip_process, NULL); +#endif +#endif /* WITH_SLIP_RADIO */ + +#if DEBUG + PRINTF("Tentative link-local IPv6 address "); + { + uip_ds6_addr_t *lladdr; + int i; + lladdr = uip_ds6_get_link_local(-1); + for(i = 0; i < 7; ++i) { + PRINTF("%02x%02x:", lladdr->ipaddr.u8[i * 2], + lladdr->ipaddr.u8[i * 2 + 1]); + /* make it hardcoded... */ + } + lladdr->state = ADDR_AUTOCONF; + + PRINTF("%02x%02x\n", lladdr->ipaddr.u8[14], lladdr->ipaddr.u8[15]); + } +#endif /* DEBUG */ + + if(!UIP_CONF_IPV6_RPL) { + uip_ipaddr_t ipaddr; + int i; + uip_ip6addr(&ipaddr, 0xaaaa, 0, 0, 0, 0, 0, 0, 0); + uip_ds6_set_addr_iid(&ipaddr, &uip_lladdr); + uip_ds6_addr_add(&ipaddr, 0, ADDR_TENTATIVE); + PRINTF("Tentative global IPv6 address "); + for(i = 0; i < 7; ++i) { + PRINTF("%02x%02x:", + ipaddr.u8[i * 2], ipaddr.u8[i * 2 + 1]); + } + PRINTF("%02x%02x\n", + ipaddr.u8[7 * 2], ipaddr.u8[7 * 2 + 1]); + } +} +#endif /* NETSTACK_CONF_WITH_IPV6 */ +/*---------------------------------------------------------------------------*/ +static void +set_linkaddr(void) +{ + int i; + linkaddr_t addr; + memset(&addr, 0, LINKADDR_SIZE); +#if NETSTACK_CONF_WITH_IPV6 + memcpy(addr.u8, node_mac, sizeof(addr.u8)); +#else + if(node_id == 0) { + for(i = 0; i < LINKADDR_SIZE; ++i) { + addr.u8[i] = node_mac[LINKADDR_SIZE - 1 - i]; + } + } else { + addr.u8[0] = node_id & 0xff; + addr.u8[1] = node_id >> 8; + } +#endif + linkaddr_set_node_addr(&addr); +#if DEBUG + PRINTF("Link-layer address: "); + for(i = 0; i < sizeof(addr.u8) - 1; i++) { + PRINTF("%d.", addr.u8[i]); + } + PRINTF("%d\n", addr.u8[i]); +#endif +} +/*---------------------------------------------------------------------------*/ +#if USE_EXTERNAL_OSCILLATOR +static bool_t +init_xosc(void) +{ + /* The internal 32kHz RC oscillator is used by default; + * Initialize and enable the external 32.768kHz crystal. + */ + vAHI_Init32KhzXtal(); + /* wait for 1.0 seconds for the crystal to stabilize */ + clock_time_t start = clock_time(); + clock_time_t now; + do { + now = clock_time(); + watchdog_periodic(); + } while(now - start < CLOCK_SECOND); + /* switch to the 32.768 kHz crystal */ + return bAHI_Set32KhzClockMode(E_AHI_XTAL); +} +#endif +/*---------------------------------------------------------------------------*/ +#if WITH_TINYOS_AUTO_IDS +uint16_t TOS_NODE_ID = 0x1234; /* non-zero */ +uint16_t TOS_LOCAL_ADDRESS = 0x1234; /* non-zero */ +#endif /* WITH_TINYOS_AUTO_IDS */ +int +main(void) +{ + /* Set stack overflow address for detecting overflow in runtime */ + vAHI_SetStackOverflow(TRUE, ((uint32_t *)&heap_location)[0]); + + clock_init(); + watchdog_init(); + leds_init(); + leds_on(LEDS_ALL); + init_node_mac(); + + energest_init(); + ENERGEST_ON(ENERGEST_TYPE_CPU); + + node_id_restore(); + +#if WITH_TINYOS_AUTO_IDS + node_id = TOS_NODE_ID; +#endif /* WITH_TINYOS_AUTO_IDS */ + /* for setting "hardcoded" IEEE 802.15.4 MAC addresses */ +#ifdef IEEE_802154_MAC_ADDRESS + { + uint8_t ieee[] = IEEE_802154_MAC_ADDRESS; + memcpy(node_mac, ieee, sizeof(uip_lladdr.addr)); + node_mac[7] = node_id & 0xff; + } +#endif + + /* Initialize random with a seed from the SoC random generator. + * This must be done before selecting the high-precision external oscillator. + */ + vAHI_StartRandomNumberGenerator(E_AHI_RND_SINGLE_SHOT, E_AHI_INTS_DISABLED); + random_init(u16AHI_ReadRandomNumber()); + + process_init(); + ctimer_init(); + uart0_init(UART_BAUD_RATE); /* Must come before first PRINTF */ + +#if USE_EXTERNAL_OSCILLATOR + init_xosc(); +#endif + +#if NETSTACK_CONF_WITH_IPV4 + slip_arch_init(UART_BAUD_RATE); +#endif /* NETSTACK_CONF_WITH_IPV4 */ + + /* check for reset source */ + if(bAHI_WatchdogResetEvent()) { + PRINTF("Init: Watchdog timer has reset device!\r\n"); + } + process_start(&etimer_process, NULL); + set_linkaddr(); + netstack_init(); + +#if NETSTACK_CONF_WITH_IPV6 +#if UIP_CONF_IPV6_RPL + PRINTF(CONTIKI_VERSION_STRING " started with IPV6, RPL\n"); +#else + PRINTF(CONTIKI_VERSION_STRING " started with IPV6\n"); +#endif +#elif NETSTACK_CONF_WITH_IPV4 + PRINTF(CONTIKI_VERSION_STRING " started with IPV4\n"); +#else + PRINTF(CONTIKI_VERSION_STRING " started\n"); +#endif + + if(node_id > 0) { + PRINTF("Node id is set to %u.\n", node_id); + } else { + PRINTF("Node id is not set.\n"); + } +#if NETSTACK_CONF_WITH_IPV6 + memcpy(&uip_lladdr.addr, node_mac, sizeof(uip_lladdr.addr)); + queuebuf_init(); +#endif /* NETSTACK_CONF_WITH_IPV6 */ + + PRINTF("%s %s %s\n", NETSTACK_LLSEC.name, NETSTACK_MAC.name, NETSTACK_RDC.name); + +#if !NETSTACK_CONF_WITH_IPV4 && !NETSTACK_CONF_WITH_IPV6 + uart0_set_input(serial_line_input_byte); + serial_line_init(); +#endif + +#if TIMESYNCH_CONF_ENABLED + timesynch_init(); + timesynch_set_authority_level((linkaddr_node_addr.u8[0] << 4) + 16); +#endif /* TIMESYNCH_CONF_ENABLED */ + +#if NETSTACK_CONF_WITH_IPV4 + process_start(&tcpip_process, NULL); + process_start(&uip_fw_process, NULL); /* Start IP output */ + process_start(&slip_process, NULL); + + slip_set_input_callback(set_gateway); + + { + uip_ipaddr_t hostaddr, netmask; + + uip_init(); + + uip_ipaddr(&hostaddr, 172, 16, + linkaddr_node_addr.u8[0], linkaddr_node_addr.u8[1]); + uip_ipaddr(&netmask, 255, 255, 0, 0); + uip_ipaddr_copy(&meshif.ipaddr, &hostaddr); + + uip_sethostaddr(&hostaddr); + uip_setnetmask(&netmask); + uip_over_mesh_set_net(&hostaddr, &netmask); + /* uip_fw_register(&slipif);*/ + uip_over_mesh_set_gateway_netif(&slipif); + uip_fw_default(&meshif); + uip_over_mesh_init(UIP_OVER_MESH_CHANNEL); + PRINTF("uIP started with IP address %d.%d.%d.%d\n", + uip_ipaddr_to_quad(&hostaddr)); + } +#endif /* NETSTACK_CONF_WITH_IPV4 */ + + watchdog_start(); + NETSTACK_LLSEC.init(); + +#if NETSTACK_CONF_WITH_IPV6 + start_uip6(); +#endif /* NETSTACK_CONF_WITH_IPV6 */ + start_autostart_processes(); + + leds_off(LEDS_ALL); + int r; + while(1) { + do { + /* Reset watchdog. */ + watchdog_periodic(); + r = process_run(); + } while(r > 0); + /* + * Idle processing. + */ + watchdog_stop(); + +#if DCOSYNCH_CONF_ENABLED + /* Calibrate the DCO every DCOSYNCH_PERIOD + * if we have more than 500uSec until next rtimer + * PS: Calibration disables interrupts and blocks for 200uSec. + * */ + static unsigned long last_dco_calibration_time = 0; + if(clock_seconds() - last_dco_calibration_time > DCOSYNCH_PERIOD) { + if(rtimer_arch_get_time_until_next_wakeup() > RTIMER_SECOND / 2000) { + /* PRINTF("ContikiMain: Calibrating the DCO\n"); */ + eAHI_AttemptCalibration(); + /* Patch to allow CpuDoze after calibration */ + vREG_PhyWrite(REG_PHY_IS, REG_PHY_INT_VCO_CAL_MASK); + last_dco_calibration_time = clock_seconds(); + } + } +#endif /* DCOSYNCH_CONF_ENABLED */ + ENERGEST_OFF(ENERGEST_TYPE_CPU); + ENERGEST_ON(ENERGEST_TYPE_LPM); + vAHI_CpuDoze(); + watchdog_start(); + ENERGEST_OFF(ENERGEST_TYPE_LPM); + ENERGEST_ON(ENERGEST_TYPE_CPU); + } + + return 0; +} +/*---------------------------------------------------------------------------*/ +void +AppColdStart(void) +{ + /* After reset or sleep with memory off */ + main(); +} +/*---------------------------------------------------------------------------*/ +void +AppWarmStart(void) +{ + /* Wakeup after sleep with memory on. + * TODO: Need to initialize devices but not the application state */ + main(); +} +/*---------------------------------------------------------------------------*/ diff --git a/platform/jn516x/dev/ccm-star.c b/platform/jn516x/dev/ccm-star.c new file mode 100644 index 000000000..b846985be --- /dev/null +++ b/platform/jn516x/dev/ccm-star.c @@ -0,0 +1,119 @@ +/* + * Copyright (c) 2015, SICS Swedish ICT. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the Contiki operating system. + * + */ + +/** + * \file + * CCM* header implementation exploiting the JN516x + * cryptographic co-processor + * \author + * Simon Duquennoy + */ + +#include "ccm-star.h" +#include +#include + +static tsReg128 current_key; +static int current_key_is_new = 1; + +/*---------------------------------------------------------------------------*/ +static void +aead(const uint8_t *nonce, + uint8_t *m, uint8_t m_len, + const uint8_t *a, uint8_t a_len, + uint8_t *result, uint8_t mic_len, + int forward) +{ + tsReg128 nonce_aligned; + memcpy(&nonce_aligned, nonce, sizeof(nonce_aligned)); + if(forward) { + bACI_CCMstar( + ¤t_key, + current_key_is_new, + XCV_REG_AES_SET_MODE_CCM, + mic_len, + a_len, + m_len, + &nonce_aligned, + (uint8_t *)a, + (uint8_t *)m, + (uint8_t *)m, + result, + NULL + ); + } else { + bool_t auth; + bACI_CCMstar( + ¤t_key, + current_key_is_new, + XCV_REG_AES_SET_MODE_CCM_D, + mic_len, + a_len, + m_len, + &nonce_aligned, + (uint8_t *)a, + (uint8_t *)m, + (uint8_t *)m, + (uint8_t *)a + a_len + m_len, + &auth + ); + /* To comply with the CCM_STAR interface, copy MIC to result in case of success */ + if(result != NULL) { + if(auth) { + memcpy(result, a + a_len + m_len, mic_len); + } else { + /* Otherwise, corrupt the result */ + memcpy(result, a + a_len + m_len, mic_len); + result[0]++; + } + } + } + + current_key_is_new = 0; +} +/*---------------------------------------------------------------------------*/ +static void +set_key(const uint8_t *key) +{ + if(memcmp(¤t_key, key, sizeof(current_key)) == 0) { + current_key_is_new = 0; + } else { + memcpy(¤t_key, key, sizeof(current_key)); + current_key_is_new = 1; + } +} +/*---------------------------------------------------------------------------*/ +const struct ccm_star_driver ccm_star_driver_jn516x = { + set_key, + aead +}; +/*---------------------------------------------------------------------------*/ diff --git a/platform/jn516x/dev/clock.c b/platform/jn516x/dev/clock.c new file mode 100644 index 000000000..e2b1d46a3 --- /dev/null +++ b/platform/jn516x/dev/clock.c @@ -0,0 +1,250 @@ +/* + * Copyright (c) 2014, SICS Swedish ICT. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the Contiki operating system. + * + */ + +/** + * \file + * Clock implementation for NXP jn516x. + * \author + * Beshr Al Nahas + * + */ + +#include +#include +#include "contiki.h" +#include "sys/energest.h" +#include "sys/clock.h" +#include "sys/etimer.h" +#include "rtimer-arch.h" +#include "dev/watchdog.h" + +/** + * TickTimer will be used for RTIMER + * E_AHI_TIMER_1 will be used for ticking + **/ + +#define DEBUG 0 +#if DEBUG +#include +#define PRINTF(...) printf(__VA_ARGS__) +#else +#define PRINTF(...) +#endif + +static volatile unsigned long seconds = 0; +static volatile uint8_t ticking = 0; +static volatile clock_time_t clock_ticks = 0; +/* last_tar is used for calculating clock_fine */ + +#define CLOCK_TIMER E_AHI_TIMER_1 +#define CLOCK_TIMER_ISR_DEV E_AHI_DEVICE_TIMER1 +/* 16Mhz / 2^7 = 125Khz */ +#define CLOCK_PRESCALE 7 +/* 10ms tick --> overflow after ~981/2 days */ +#define CLOCK_INTERVAL (125 * 10) +#define MAX_TICKS (CLOCK_INTERVAL) +/*---------------------------------------------------------------------------*/ +void +clockTimerISR(uint32 u32Device, uint32 u32ItemBitmap) +{ + if(u32Device != CLOCK_TIMER_ISR_DEV) { + return; + } + ENERGEST_ON(ENERGEST_TYPE_IRQ); + + watchdog_start(); + + clock_ticks++; + if(clock_ticks % CLOCK_CONF_SECOND == 0) { + ++seconds; + energest_flush(); + } + if(etimer_pending() && (etimer_next_expiration_time() - clock_ticks - 1) > MAX_TICKS) { + etimer_request_poll(); + /* TODO exit low-power mode */ + } + if(process_nevents() >= 0) { + /* TODO exit low-power mode */ + } + + watchdog_stop(); + + ENERGEST_OFF(ENERGEST_TYPE_IRQ); +} +/*---------------------------------------------------------------------------*/ +static void +clock_timer_init(void) +{ + vAHI_TimerEnable(CLOCK_TIMER, CLOCK_PRESCALE, 0, 1, 0); + vAHI_TimerClockSelect(CLOCK_TIMER, 0, 0); + + vAHI_TimerConfigureOutputs(CLOCK_TIMER, 0, 1); + vAHI_TimerDIOControl(CLOCK_TIMER, 0); + +#if (CLOCK_TIMER == E_AHI_TIMER_0) + vAHI_Timer0RegisterCallback(clockTimerISR); +#elif (CLOCK_TIMER == E_AHI_TIMER_1) + vAHI_Timer1RegisterCallback(clockTimerISR); +#endif + clock_ticks = 0; + vAHI_TimerStartRepeat(CLOCK_TIMER, 0, CLOCK_INTERVAL); + ticking = 1; +} +/*---------------------------------------------------------------------------*/ +void +clock_init(void) +{ + /* gMAC_u8MaxBuffers = 2; */ +#ifdef JENNIC_CHIP_FAMILY_JN516x + /* Turn off debugger */ + *(volatile uint32 *)0x020000a0 = 0; +#endif + /* system controller interrupts callback is disabled + * -- Only wake Interrupts -- + */ + vAHI_SysCtrlRegisterCallback(0); + + /* schedule clock tick interrupt */ + clock_timer_init(); + rtimer_init(); + (void)u32AHI_Init(); + + bAHI_SetClockRate(E_AHI_XTAL_32MHZ); + + /* Wait for oscillator to stabilise */ + while(bAHI_GetClkSource() == 1) ; + while(bAHI_Clock32MHzStable() == 0) ; + + vAHI_OptimiseWaitStates(); + + /* Turn on SPI master */ + vREG_SysWrite(REG_SYS_PWR_CTRL, u32REG_SysRead(REG_SYS_PWR_CTRL) + | REG_SYSCTRL_PWRCTRL_SPIMEN_MASK); +} +/*---------------------------------------------------------------------------*/ +clock_time_t +clock_time(void) +{ + clock_time_t t1, t2; + do { + t1 = clock_ticks; + t2 = clock_ticks; + } while(t1 != t2); + return t1; +} +/*---------------------------------------------------------------------------*/ +void +clock_set(clock_time_t clock, clock_time_t fclock) +{ + clock_ticks = clock; +} +/*---------------------------------------------------------------------------*/ +int +clock_fine_max(void) +{ + return CLOCK_INTERVAL; +} +/*---------------------------------------------------------------------------*/ +/** + * Delay the CPU for a multiple of 0.0625 us. + */ +void +clock_delay_usec(uint16_t dt) +{ + volatile uint32_t t = u32AHI_TickTimerRead(); +#define RTIMER_MAX_TICKS 0xffffffff + /* beware of wrapping */ + if(RTIMER_MAX_TICKS - t < dt) { + while(u32AHI_TickTimerRead() < RTIMER_MAX_TICKS && u32AHI_TickTimerRead() != 0) ; + dt -= RTIMER_MAX_TICKS - t; + t = 0; + } + while(u32AHI_TickTimerRead() - t < dt) { + watchdog_periodic(); + } +} +/*---------------------------------------------------------------------------*/ +/** + * Delay the CPU for a multiple of 8 us. + */ +void +clock_delay(unsigned int i) +{ + volatile uint32_t t = u16AHI_TimerReadCount(CLOCK_TIMER); + /* beware of wrapping */ + if(MAX_TICKS - t < i) { + while(u16AHI_TimerReadCount(CLOCK_TIMER) < MAX_TICKS && u16AHI_TimerReadCount(CLOCK_TIMER) != 0) ; + i -= MAX_TICKS - t; + t = 0; + } + while(u16AHI_TimerReadCount(CLOCK_TIMER) - t < i) { + watchdog_periodic(); + } +} +/*---------------------------------------------------------------------------*/ +/** + * Wait for a multiple of 10 ms. + * + */ +void +clock_wait(clock_time_t t) +{ + clock_time_t start; + + start = clock_time(); + while(clock_time() - start < (clock_time_t)t) { + watchdog_periodic(); + } +} +/*---------------------------------------------------------------------------*/ +void +clock_set_seconds(unsigned long sec) +{ + seconds = sec; +} +/*---------------------------------------------------------------------------*/ +unsigned long +clock_seconds(void) +{ + unsigned long t1, t2; + do { + t1 = seconds; + t2 = seconds; + } while(t1 != t2); + return t1; +} +/*---------------------------------------------------------------------------*/ +rtimer_clock_t +clock_counter(void) +{ + return rtimer_arch_now(); +} diff --git a/platform/jn516x/dev/dongle/README.md b/platform/jn516x/dev/dongle/README.md new file mode 100644 index 000000000..a9b6e9cb2 --- /dev/null +++ b/platform/jn516x/dev/dongle/README.md @@ -0,0 +1,9 @@ +This directory contains the contiki driver for the LED driver for the dongle. + +Mapping of LEDs on JN516x Dongle: + leds.h led on dongle: + LEDS_RED Red LED + LEDS_GREEN Green LED +Note: Only one LED can be switch on at the same time + + diff --git a/platform/jn516x/dev/dongle/leds-arch.c b/platform/jn516x/dev/dongle/leds-arch.c new file mode 100644 index 000000000..5eff3c63e --- /dev/null +++ b/platform/jn516x/dev/dongle/leds-arch.c @@ -0,0 +1,80 @@ +/* + * Copyright (c) 2015 NXP B.V. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of NXP B.V. nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY NXP B.V. AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL NXP B.V. OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the Contiki operating system. + * + * Author: Theo van Daele + * + */ +#include "contiki.h" +#include "leds.h" +#include + +#define LED_G (1 << 16) +#define LED_R (1 << 17) + +static volatile uint8_t leds; + +/*---------------------------------------------------------------------------*/ +void +leds_arch_init(void) +{ + vAHI_DioSetDirection(0, LED_R | LED_G); + vAHI_DioSetOutput(0, LED_R | LED_G); /* Default off */ + leds = 0; +} +/*---------------------------------------------------------------------------*/ +unsigned char +leds_arch_get(void) +{ + return leds; +} +/*---------------------------------------------------------------------------*/ +void +leds_arch_set(unsigned char c) +{ + uint32 on_mask = 0; + uint32 off_mask = 0; + + if(c & LEDS_GREEN) { + on_mask |= LED_G; + } else { + off_mask |= LED_G; + } if(c & LEDS_RED) { + on_mask |= LED_R; + } else { + off_mask |= LED_R; + } vAHI_DioSetOutput(on_mask, off_mask); + /* Both LEDs can not be switched on at the same time. + Will result in both leds being OFF */ + if(on_mask == (LED_R | LED_G)) { + leds = 0; + } else { + leds = c; + } +} diff --git a/platform/jn516x/dev/dr1174/README.md b/platform/jn516x/dev/dr1174/README.md new file mode 100644 index 000000000..d3a21cbe0 --- /dev/null +++ b/platform/jn516x/dev/dr1174/README.md @@ -0,0 +1,8 @@ +This directory contains the contiki driver for the button sensor on the DR1174 baseboard. +When used with an extention board, sensors from the dr1175 anf dr1179 directories are used in addition to this. +leds-arch.c implements the led driver for leds D3 and D6 on the board. +Mapping of LEDs on JN516x DR1174: + leds.h: led on DR1174: + LEDS_GP0 LED D3 + LEDS_GP1 LED D6 +Note: LEDS_GPx definitions included in leds.h via platform-conf.h diff --git a/platform/jn516x/dev/dr1174/button-sensor.c b/platform/jn516x/dev/dr1174/button-sensor.c new file mode 100644 index 000000000..9262a6ef8 --- /dev/null +++ b/platform/jn516x/dev/dr1174/button-sensor.c @@ -0,0 +1,241 @@ +/* + * Copyright (c) 2015 NXP B.V. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of NXP B.V. nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY NXP B.V. AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL NXP B.V. OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the Contiki operating system. + * + * Author: Theo van Daele + * + */ +#include "contiki.h" +#include "sys/etimer.h" +#include "lib/sensors.h" +#include "button-sensor.h" +#include + +/*---------------------------------------------------------------------------*/ +/* LOCAL DEFINITIONS */ +/*---------------------------------------------------------------------------*/ +/* #define DEBUG */ +#ifdef DEBUG +#include +#define PRINTF(...) printf(__VA_ARGS__) +#else +#define PRINTF(...) +#endif + +typedef enum { + APP_E_BUTTON_SW0 = 0, +#if SENSOR_BOARD_DR1199 + APP_E_BUTTON_SW1, + APP_E_BUTTON_SW2, + APP_E_BUTTON_SW3, + APP_E_BUTTON_SW4, +#endif /* SENSOR_BOARD_DR1199 */ + APP_E_BUTTON_NUM /* Number of buttons */ +} app_e_button_t; + +/* Mapping of DIO port connections to buttons. Use as mask to get button value */ +#define APP_PORT_BUTTON_SW0 (8) +#if SENSOR_BOARD_DR1199 +#define APP_PORT_BUTTON_SW1 (11) +#define APP_PORT_BUTTON_SW2 (12) +#define APP_PORT_BUTTON_SW3 (17) +#define APP_PORT_BUTTON_SW4 (1) +#endif /* SENSOR_BOARD_DR1199 */ + +/* Definition of port masks based on button mapping */ +#if SENSOR_BOARD_DR1199 +#define APP_BUTTONS_DIO_MASK ((1 << APP_PORT_BUTTON_SW0) | \ + (1 << APP_PORT_BUTTON_SW1) | \ + (1 << APP_PORT_BUTTON_SW2) | \ + (1 << APP_PORT_BUTTON_SW3) | \ + (1 << APP_PORT_BUTTON_SW4)) +#else /* SENSOR_BOARD_DR1199 */ +#define APP_BUTTONS_DIO_MASK (1 << APP_PORT_BUTTON_SW0) +#endif /* SENSOR_BOARD_DR1199 */ + +#define KEY_SAMPLE_TIME (CLOCK_SECOND / 20) + +typedef enum { + BUTTONS_STATUS_NOT_INIT = 0, + BUTTONS_STATUS_INIT, + BUTTONS_STATUS_NOT_ACTIVE = BUTTONS_STATUS_INIT, + BUTTONS_STATUS_ACTIVE +} buttons_status_t; + +/*---------------------------------------------------------------------------*/ +/* LOCAL DATA DEFINITIONS */ +/*---------------------------------------------------------------------------*/ +const struct sensors_sensor button_sensor; +volatile static buttons_status_t buttons_status = BUTTONS_STATUS_NOT_INIT; +static int key_value = 0; +static uint8 key_map[] = { APP_PORT_BUTTON_SW0, /* APP_E_BUTTON_SW0 */ +#if SENSOR_BOARD_DR1199 + APP_PORT_BUTTON_SW1, /* APP_E_BUTTON_SW1 */ + APP_PORT_BUTTON_SW2, /* APP_E_BUTTON_SW2 */ + APP_PORT_BUTTON_SW3, /* APP_E_BUTTON_SW3 */ + APP_PORT_BUTTON_SW4 /* APP_E_BUTTON_SW4 */ +#endif /* SENSOR_BOARD_DR1199 */ +}; + +/*---------------------------------------------------------------------------*/ +/* LOCAL FUNCTION PROTOTYPES */ +/*---------------------------------------------------------------------------*/ +PROCESS(key_sampling, "Key sample"); +static int get_key_value(void); + +/*---------------------------------------------------------------------------*/ +/* PUBLIC FUNCTIONS */ +/*---------------------------------------------------------------------------*/ +static int +configure(int type, int value) +{ + if(type == SENSORS_HW_INIT) { + /* Called from sensor thread when started. + Configure DIO lines with buttons connected as input */ + vAHI_DioSetDirection(APP_BUTTONS_DIO_MASK, 0); + /* Turn on pull-ups for DIO lines with buttons connected */ + vAHI_DioSetPullup(APP_BUTTONS_DIO_MASK, 0); + PRINTF("HW_INIT BUTTONS (0x%x)\n", APP_BUTTONS_DIO_MASK); + /* Configure debounce timer. Do not run it yet. */ + buttons_status = BUTTONS_STATUS_INIT; + process_start(&key_sampling, NULL); + return 1; + } else if(type == SENSORS_ACTIVE) { + if(buttons_status != BUTTONS_STATUS_NOT_INIT) { + if(value) { + /* Button sensor activated */ + PRINTF("BUTTONS ACTIVATED\n"); + buttons_status = BUTTONS_STATUS_ACTIVE; + } else { + /* Button sensor de-activated */ + PRINTF("BUTTONS DE-ACTIVATED\n"); + buttons_status = BUTTONS_STATUS_NOT_ACTIVE; + } + process_post(&key_sampling, PROCESS_EVENT_MSG, (void *)&buttons_status); + return 1; + } else { + /* Buttons must be intialised before being (de)-activated */ + PRINTF("ERROR: NO HW_INIT BUTTONS\n"); + return 0; + } + } else { + /* Non valid type */ + return 0; + } +} +/*---------------------------------------------------------------------------*/ +static int +status(int type) +{ + if(type == SENSORS_ACTIVE) { + return buttons_status == BUTTONS_STATUS_ACTIVE; + } else if(type == SENSORS_READY) { + return buttons_status != BUTTONS_STATUS_NOT_INIT; + } + return 0; +} +/*---------------------------------------------------------------------------*/ +static int +value(int type) +{ + /* type: Not defined for the buttons interface + */ + return key_value; +} +/*---------------------------------------------------------------------------*/ +/* LOCAL FUNCTIONS */ +/*---------------------------------------------------------------------------*/ +static int +get_key_value(void) +{ + /* Function returns the actual key value. Pressed key will return '1' */ + int io_value = ~u32AHI_DioReadInput() & APP_BUTTONS_DIO_MASK; + int k = 0; + int key = 0; + + while(k < APP_E_BUTTON_NUM) { + if(io_value & (1 << key_map[k])) { + key |= (1 << k); + } + k++; + } + return key; +} +/* Process takes care of detecting key changes */ +/*---------------------------------------------------------------------------*/ +PROCESS_THREAD(key_sampling, ev, data) +{ + PROCESS_BEGIN(); + static struct etimer et; + static int previous_key_value = 0; + static char debounce_check = 0; + int current_key_value; + + etimer_set(&et, CLOCK_SECOND / 50); + while(1) { + PROCESS_WAIT_EVENT_UNTIL((ev == PROCESS_EVENT_TIMER) || (ev == PROCESS_EVENT_MSG)); + if(ev == PROCESS_EVENT_TIMER) { + /* Handle sensor reading. */ + PRINTF("Key sample\n"); + current_key_value = get_key_value(); + if(debounce_check != 0) { + /* Check if key remained constant */ + if(previous_key_value == current_key_value) { + sensors_changed(&button_sensor); + key_value = current_key_value; + debounce_check = 0; + } else { + /* Bouncing */ + previous_key_value = current_key_value; + } + } else + /* Check for new key change */ + if(current_key_value != previous_key_value) { + previous_key_value = current_key_value; + debounce_check = 1; + } + etimer_reset(&et); + } else { + /* ev == PROCESS_EVENT_MSG */ + if(*(buttons_status_t *)data == BUTTONS_STATUS_NOT_ACTIVE) { + /* Stop sampling */ + etimer_stop(&et); + } else if((*(buttons_status_t *)data == BUTTONS_STATUS_ACTIVE)) { + /* restart sampling */ + etimer_restart(&et); + } + } + } + PROCESS_END(); +} + +/*---------------------------------------------------------------------------*/ +/* Sensor defintion for sensor module */ +SENSORS_SENSOR(button_sensor, BUTTON_SENSOR, value, configure, status); +/*---------------------------------------------------------------------------*/ diff --git a/platform/jn516x/dev/dr1174/button-sensor.h b/platform/jn516x/dev/dr1174/button-sensor.h new file mode 100644 index 000000000..eaa87a751 --- /dev/null +++ b/platform/jn516x/dev/dr1174/button-sensor.h @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2015, SICS Swedish ICT. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the Contiki operating system. + * + */ +#ifndef __BUTTON_SENSOR_H__ +#define __BUTTON_SENSOR_H__ + +#include "lib/sensors.h" + +extern const struct sensors_sensor button_sensor; + +#define BUTTON_SENSOR "Button" + +#endif /* __BUTTON_SENSOR_H__ */ diff --git a/platform/jn516x/dev/dr1174/leds-arch.c b/platform/jn516x/dev/dr1174/leds-arch.c new file mode 100644 index 000000000..4e49e9c53 --- /dev/null +++ b/platform/jn516x/dev/dr1174/leds-arch.c @@ -0,0 +1,121 @@ +/* + * Copyright (c) 2015 NXP B.V. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of NXP B.V. nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY NXP B.V. AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL NXP B.V. OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the Contiki operating system. + * + * Author: Theo van Daele + * + */ +#include "contiki.h" +#include "dev/leds.h" +#include +#ifdef SENSOR_BOARD_DR1199 +#include "dr1199/leds-arch-1199.h" +#endif +#ifdef SENSOR_BOARD_DR1175 +#include "leds-extension.h" +#include "dr1175/leds-arch-1175.h" +#endif + +#define LED_D3 (1 << 3) +#define LED_D6 (1 << 2) + +static volatile unsigned char leds; + +/*---------------------------------------------------------------------------*/ +void +leds_arch_init(void) +{ + vAHI_DioSetDirection(0, LED_D3 | LED_D6); + vAHI_DioSetOutput(LED_D3 | LED_D6, 0); /* Default off */ +#ifdef SENSOR_BOARD_DR1199 + leds_arch_init_1199(); +#endif +#ifdef SENSOR_BOARD_DR1175 + leds_arch_init_1175(); +#endif + leds = 0; +} +/*---------------------------------------------------------------------------*/ +unsigned char +leds_arch_get(void) +{ + return leds; +} +/*---------------------------------------------------------------------------*/ +void +leds_arch_set(unsigned char c) +{ + uint32 on_mask = 0; + uint32 off_mask = 0; + + /* LOW level on pins switches ON LED for DR1174 */ + if(c & LEDS_GP0) { + on_mask |= LED_D3; + } else { + off_mask |= LED_D3; + } if(c & LEDS_GP1) { + on_mask |= LED_D6; + } else { + off_mask |= LED_D6; + } vAHI_DioSetOutput(off_mask, on_mask); +#ifdef SENSOR_BOARD_DR1199 + /* DR1174 with DR1199 */ + leds_arch_set_1199(c); + if(c == LEDS_ALL) { + leds = LEDS_GP0 | LEDS_GP1 | LEDS_RED | LEDS_BLUE | LEDS_GREEN; + } else { + leds = (c & (LEDS_GP0 | LEDS_GP1 | LEDS_RED | LEDS_BLUE | LEDS_GREEN)); + } +#elif SENSOR_BOARD_DR1175 + /* DR1174 with DR1175 */ + leds_arch_set_1175(c); + if(c == LEDS_ALL) { + leds = LEDS_GP0 | LEDS_GP1 | LEDS_RED | LEDS_BLUE | LEDS_GREEN | LEDS_WHITE; + } else { + leds = (c & (LEDS_GP0 | LEDS_GP1 | LEDS_RED | LEDS_BLUE | LEDS_GREEN | LEDS_WHITE)); +/* printf("++++++++++++++++++++ leds_arch_set: leds: 0x%x\n", leds); */ + } +#else + /* DR1174-only */ + if(c == LEDS_ALL) { + leds = LEDS_GP0 | LEDS_GP1; + } else { + leds = c; + } +#endif +} +/*---------------------------------------------------------------------------*/ +void +leds_arch_set_level(unsigned char level, unsigned char c) +{ +#ifdef SENSOR_BOARD_DR1175 + leds_arch_set_level_1175(level, c, leds); +/* printf("++++++++++++++++++++ leds_arch_set_level: leds: 0x%x\n", leds); */ +#endif +} diff --git a/platform/jn516x/dev/dr1175/README.md b/platform/jn516x/dev/dr1175/README.md new file mode 100644 index 000000000..232e34768 --- /dev/null +++ b/platform/jn516x/dev/dr1175/README.md @@ -0,0 +1,18 @@ +This directory contains the contiki driver for the sensors (light, humidity and temperature sensor) available on the +NXP DR1175 board. This board is part of the NXP JN516X Evaluation Kit (see http://www.nxp.com/documents/leaflet/75017368.pdf). + +The dr1175 sensor code interfaces to the contiki `core/lib/sensors.c` framework. +The code is specificaly for the JN516X platform, because it makes use of the platform\DK4 libraries +of this JN516X SDK. +`examples/jn516x/rpl/coap-dr1175-node.c` shows an example on using this contiki driver. + +Mapping of LEDs on JN516x DR1175/DR1174: + leds.h: led on DR1175/DR1174: +DR1174+DR1175: + LEDS_RED Red led in RGB-led with level control on DR1175 + LEDS_GREEN Green led in RGB-led with level control on DR1175 + LEDS_BLUE Blue led in RGB-led with level control on DR1175 + LEDS_WHITE White power led with level control on DR1175 + LEDS_GP0 LEDS D3 on DR1174 + LEDS_GP1 LEDS D6 on DR1174 +Note: LEDS_GPx and LEDS_WHITE definitions included in leds.h via platform-conf.h diff --git a/platform/jn516x/dev/dr1175/ht-sensor.c b/platform/jn516x/dev/dr1175/ht-sensor.c new file mode 100644 index 000000000..76f889d84 --- /dev/null +++ b/platform/jn516x/dev/dr1175/ht-sensor.c @@ -0,0 +1,187 @@ +/* + * Copyright (c) 2015 NXP B.V. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of NXP B.V. nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY NXP B.V. AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL NXP B.V. OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the Contiki operating system. + * + * Author: Theo van Daele + * + */ +#include "contiki.h" +#include "sys/etimer.h" +#include "lib/sensors.h" +#include "ht-sensor.h" +#include +#include + +/*---------------------------------------------------------------------------*/ +/* LOCAL DEFINITIONS */ +/*---------------------------------------------------------------------------*/ +/* #define DEBUG */ +#ifdef DEBUG +#include +#define PRINTF(...) printf(__VA_ARGS__) +#else +#define PRINTF(...) +#endif + +typedef enum { + HT_SENSOR_STATUS_NOT_INIT = 0, + HT_SENSOR_STATUS_INIT, + HT_SENSOR_STATUS_NOT_ACTIVE = HT_SENSOR_STATUS_INIT, + HT_SENSOR_STATUS_ACTIVE +} ht_sensor_status_t; + +/* Absolute delta in light or humidity level needed to generate event */ +#define DELTA_TEMP_SENSOR_VALUE 1 +#define DELTA_HUM_SENSOR_VALUE 1 + +/*---------------------------------------------------------------------------*/ +/* LOCAL DATA DEFINITIONS */ +/*---------------------------------------------------------------------------*/ +const struct sensors_sensor ht_sensor; +volatile static ht_sensor_status_t ht_sensor_status = HT_SENSOR_STATUS_NOT_INIT; +static int prev_temp_event_val = 0; +static int prev_hum_event_val = 0; +static int temp_sensor_value = 0; +static int hum_sensor_value = 0; + +/*---------------------------------------------------------------------------*/ +/* LOCAL FUNCTION PROTOTYPES */ +/*---------------------------------------------------------------------------*/ +PROCESS(HTSensorSampling, "Humidity/Temperature sensor"); + +/*---------------------------------------------------------------------------*/ +/* PUBLIC FUNCTIONS */ +/*---------------------------------------------------------------------------*/ +static int +configure(int type, int value) +{ + if(type == SENSORS_HW_INIT) { + PRINTF("SENSORS_HW_INIT\n"); + ht_sensor_status = HT_SENSOR_STATUS_INIT; + process_start(&HTSensorSampling, NULL); + return 1; + } else if(type == SENSORS_ACTIVE) { + if(ht_sensor_status != HT_SENSOR_STATUS_NOT_INIT) { + if(value) { + /* ACTIVATE SENSOR */ + vHTSreset(); + prev_temp_event_val = 0; + prev_hum_event_val = 0; + /* Activate ht sensor. Start sampling */ + PRINTF("HT SENSOR ACTIVATED\n"); + ht_sensor_status = HT_SENSOR_STATUS_ACTIVE; + process_post(&HTSensorSampling, PROCESS_EVENT_MSG, (void *)&ht_sensor_status); + } else { + /* DE-ACTIVATE SENSOR */ + PRINTF("HT SENSOR DE-ACTIVATED\n"); + ht_sensor_status = HT_SENSOR_STATUS_NOT_ACTIVE; + process_post(&HTSensorSampling, PROCESS_EVENT_MSG, (void *)&ht_sensor_status); + } + return 1; + } else { + /* HT sensor must be intialised before being (de)-activated */ + PRINTF("ERROR: NO HW_INIT HT SENSOR\n"); + return 0; + } + } else { + /* Non valid type */ + return 0; + } +} +/*---------------------------------------------------------------------------*/ +static int +status(int type) +{ + if(type == SENSORS_ACTIVE) { + return ht_sensor_status == HT_SENSOR_STATUS_ACTIVE; + } else if(type == SENSORS_READY) { + return ht_sensor_status != HT_SENSOR_STATUS_NOT_INIT; + } + return 0; +} +/*---------------------------------------------------------------------------*/ +static int +value(int type) +{ + /* type: HT_SENSOR_TEMP is to return temperature + !=HT_SENSOR_TEMP is to return humidity */ + if(type == HT_SENSOR_TEMP) { + return temp_sensor_value; + } else { + return hum_sensor_value; + } +} +/*---------------------------------------------------------------------------*/ +/* LOCAL FUNCTIONS */ +/*---------------------------------------------------------------------------*/ +/* Process to get ht sensor value. + ht sensor is sampled. Sampling stopped when sensor is de-activated. + Event is generated if temp and/or hum value changed at least the value DELTA_TEMP_SENSOR_VALUE + or DELTA_HUM_SENSOR_VALUE since last event. */ +PROCESS_THREAD(HTSensorSampling, ev, data) +{ + PROCESS_BEGIN(); + static struct etimer et; + + etimer_set(&et, CLOCK_SECOND); + while(1) { + PROCESS_WAIT_EVENT_UNTIL((ev == PROCESS_EVENT_TIMER) || (ev == PROCESS_EVENT_MSG)); + if(ev == PROCESS_EVENT_TIMER) { + /* Handle sensor reading. */ + vHTSstartReadTemp(); + temp_sensor_value = u16HTSreadTempResult(); + PRINTF("Temperature sample: %d\n", temp_sensor_value); + vHTSstartReadHumidity(); + hum_sensor_value = u16HTSreadHumidityResult(); + PRINTF("Humidity sample: %d\n", hum_sensor_value); + if((abs(temp_sensor_value - prev_temp_event_val) > DELTA_TEMP_SENSOR_VALUE) || + (abs(hum_sensor_value - prev_hum_event_val) > DELTA_HUM_SENSOR_VALUE)) { + prev_temp_event_val = temp_sensor_value; + prev_hum_event_val = hum_sensor_value; + sensors_changed(&ht_sensor); + } + etimer_reset(&et); + } else { + /* ev == PROCESS_EVENT_MSG */ + if(*(int *)data == HT_SENSOR_STATUS_NOT_ACTIVE) { + /* Stop sampling */ + etimer_stop(&et); + } else if((*(int *)data == HT_SENSOR_STATUS_ACTIVE)) { + /* restart sampling */ + etimer_restart(&et); + } + } + } + PROCESS_END(); +} + +/*---------------------------------------------------------------------------*/ +/* Sensor defintion for sensor module */ +SENSORS_SENSOR(ht_sensor, HT_SENSOR, value, configure, status); +/*---------------------------------------------------------------------------*/ diff --git a/platform/jn516x/dev/dr1175/ht-sensor.h b/platform/jn516x/dev/dr1175/ht-sensor.h new file mode 100644 index 000000000..43fb8b63a --- /dev/null +++ b/platform/jn516x/dev/dr1175/ht-sensor.h @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2015 NXP B.V. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of NXP B.V. nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY NXP B.V. AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL NXP B.V. OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the Contiki operating system. + * + * Author: Theo van Daele + * + */ +#ifndef __HT_SENSOR_H__ +#define __HT_SENSOR_H__ + +#include "lib/sensors.h" + +extern const struct sensors_sensor ht_sensor; + +#define HT_SENSOR "TH" + +#define HT_SENSOR_TEMP 0 +#define HT_SENSOR_HUM 1 + +#endif /* __HT_SENSOR_H__ */ diff --git a/platform/jn516x/dev/dr1175/leds-arch-1175.c b/platform/jn516x/dev/dr1175/leds-arch-1175.c new file mode 100644 index 000000000..c1adeb2fb --- /dev/null +++ b/platform/jn516x/dev/dr1175/leds-arch-1175.c @@ -0,0 +1,91 @@ +/* + * Copyright (c) 2015 NXP B.V. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of NXP B.V. nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY NXP B.V. AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL NXP B.V. OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the Contiki operating system. + * + * Author: Theo van Daele + * + */ +#include "contiki.h" +#include "dev/leds.h" +#include + +static uint8_t white_level; +static uint8_t red_level; +static uint8_t green_level; +static uint8_t blue_level; + +/*---------------------------------------------------------------------------*/ +void +leds_arch_init_1175(void) +{ + /* White LED initialisation */ + white_level = 0; + bWhite_LED_Enable(); + bWhite_LED_SetLevel(0); + bWhite_LED_On(); + /* Coloured LED initialisation */ + red_level = 0; + green_level = 0; + blue_level = 0; + bRGB_LED_Enable(); + bRGB_LED_SetGroupLevel(255); + bRGB_LED_SetLevel(0, 0, 0); + bRGB_LED_On(); +} +/*---------------------------------------------------------------------------*/ +void +leds_arch_set_1175(unsigned char c) +{ + bWhite_LED_SetLevel(c & LEDS_WHITE ? white_level : 0); + bRGB_LED_SetLevel(c & LEDS_RED ? red_level : 0, + c & LEDS_GREEN ? green_level : 0, + c & LEDS_BLUE ? blue_level : 0); +} +/*---------------------------------------------------------------------------*/ +void +leds_arch_set_level_1175(unsigned char level, unsigned char c, unsigned char leds) +{ + if(c & LEDS_WHITE) { + white_level = level; + } + if(c & LEDS_RED) { + red_level = level; + } + if(c & LEDS_GREEN) { + green_level = level; + } + if(c & LEDS_BLUE) { + blue_level = level; + /* Activate level if LED is on */ + } + bRGB_LED_SetLevel(leds & LEDS_RED ? red_level : 0, + leds & LEDS_GREEN ? green_level : 0, + leds & LEDS_BLUE ? blue_level : 0); + bWhite_LED_SetLevel(leds & LEDS_WHITE ? white_level : 0); +} \ No newline at end of file diff --git a/platform/jn516x/dev/dr1175/leds-arch-1175.h b/platform/jn516x/dev/dr1175/leds-arch-1175.h new file mode 100644 index 000000000..7611bc51d --- /dev/null +++ b/platform/jn516x/dev/dr1175/leds-arch-1175.h @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2015 NXP B.V. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of NXP B.V. nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY NXP B.V. AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL NXP B.V. OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the Contiki operating system. + * + * Author: Theo van Daele + * + */ +void leds_arch_init_1175(void); +void leds_arch_set_1175(unsigned char c); +void leds_arch_set_level_1175(unsigned char level, unsigned char c, unsigned char leds); diff --git a/platform/jn516x/dev/dr1175/light-sensor.c b/platform/jn516x/dev/dr1175/light-sensor.c new file mode 100644 index 000000000..6a25b2af4 --- /dev/null +++ b/platform/jn516x/dev/dr1175/light-sensor.c @@ -0,0 +1,198 @@ +/* + * Copyright (c) 2015 NXP B.V. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of NXP B.V. nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY NXP B.V. AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL NXP B.V. OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the Contiki operating system. + * + * Author: Theo van Daele + * + */ +#include "contiki.h" +#include "sys/etimer.h" +#include "lib/sensors.h" +#include "light-sensor.h" +#include +#include +#include + +/*---------------------------------------------------------------------------*/ +/* LOCAL DEFINITIONS */ +/*---------------------------------------------------------------------------*/ +/* #define DEBUG */ +#ifdef DEBUG +#include +#define PRINTF(...) printf(__VA_ARGS__) +#else +#define PRINTF(...) +#endif + +typedef enum { + LIGHT_SENSOR_STATUS_NOT_INIT = 0, + LIGHT_SENSOR_STATUS_INIT, + LIGHT_SENSOR_STATUS_NOT_ACTIVE = LIGHT_SENSOR_STATUS_INIT, + LIGHT_SENSOR_STATUS_ACTIVE +} light_sensor_status_t; + +/* Absolute delta in light level needed to generate event */ +#define DELTA_LIGHT_SENSOR_VALUE 1 + +/*---------------------------------------------------------------------------*/ +/* LOCAL DATA DEFINITIONS */ +/*---------------------------------------------------------------------------*/ +const struct sensors_sensor light_sensor; +volatile static light_sensor_status_t light_sensor_status = LIGHT_SENSOR_STATUS_NOT_INIT; +static int prev_light_event_val = 0; +static int light_sensor_value = 0; + +/*---------------------------------------------------------------------------*/ +/* LOCAL FUNCTION PROTOTYPES */ +/*---------------------------------------------------------------------------*/ +static int adjust(int input1, int input2); +PROCESS(LightSensorSampling, "Light sensor"); + +/*---------------------------------------------------------------------------*/ +/* PUBLIC FUNCTIONS */ +/*---------------------------------------------------------------------------*/ +static int +configure(int type, int value) +{ + if(type == SENSORS_HW_INIT) { + PRINTF("SENSORS_HW_INIT\n"); + light_sensor_status = LIGHT_SENSOR_STATUS_INIT; + process_start(&LightSensorSampling, NULL); + return 1; + } else if(type == SENSORS_ACTIVE) { + if(light_sensor_status != LIGHT_SENSOR_STATUS_NOT_INIT) { + if(value) { + /* ACTIVATE SENSOR */ + vALSreset(); + prev_light_event_val = 0; + /* Activate light sensor. Use channel 0. (Channel 1 = IR). Start sampling */ + PRINTF("LIGHT SENSOR ACTIVATED\n"); + light_sensor_status = LIGHT_SENSOR_STATUS_ACTIVE; + process_post(&LightSensorSampling, PROCESS_EVENT_MSG, (void *)&light_sensor_status); + } else { + /* DE-ACTIVATE SENSOR */ + vALSpowerDown(); + PRINTF("LIGHT SENSOR DE-ACTIVATED\n"); + light_sensor_status = LIGHT_SENSOR_STATUS_NOT_ACTIVE; + process_post(&LightSensorSampling, PROCESS_EVENT_MSG, (void *)&light_sensor_status); + } + return 1; + } else { + /* Light sensor must be intialised before being (de)-activated */ + PRINTF("ERROR: NO HW_INIT LIGHT SENSOR\n"); + return 0; + } + } else { + /* Non valid type */ + return 0; + } +} +/*---------------------------------------------------------------------------*/ +static int +status(int type) +{ + if(type == SENSORS_ACTIVE) { + return light_sensor_status == LIGHT_SENSOR_STATUS_ACTIVE; + } else if(type == SENSORS_READY) { + return light_sensor_status != LIGHT_SENSOR_STATUS_NOT_INIT; + } + return 0; +} +/*---------------------------------------------------------------------------*/ +static int +value(int type) +{ + /* type: Not defined for the light sensor interface */ + return light_sensor_value; +} +/*---------------------------------------------------------------------------*/ +/* LOCAL FUNCTIONS */ +/*---------------------------------------------------------------------------*/ +/* Process to get light sensor value. + Light sensor is sampled. Sampling stopped when sensor is de-activated. + Event is generated if light value changed at least the value DELTA_LIGHT_SENSOR_VALUE + since last event. */ +PROCESS_THREAD(LightSensorSampling, ev, data) +{ + PROCESS_BEGIN(); + static struct etimer et; + int channel0_value, channel1_value; + + etimer_set(&et, CLOCK_SECOND / 10); + while(1) { + PROCESS_WAIT_EVENT_UNTIL((ev == PROCESS_EVENT_TIMER) || (ev == PROCESS_EVENT_MSG)); + if(ev == PROCESS_EVENT_TIMER) { + /* Handle sensor reading. */ + PRINTF("Light sensor sample\n"); + vALSstartReadChannel(0); + channel0_value = u16ALSreadChannelResult(); + PRINTF("Channel 0 = %d\n", channel0_value); + vALSstartReadChannel(1); + channel1_value = u16ALSreadChannelResult(); + PRINTF("Channel 1 = %d\n", channel1_value); + light_sensor_value = adjust(channel0_value, channel1_value); + PRINTF("Light output = %d\n", light_sensor_value); + if(abs(light_sensor_value - prev_light_event_val) > DELTA_LIGHT_SENSOR_VALUE) { + prev_light_event_val = light_sensor_value; + sensors_changed(&light_sensor); + } + etimer_reset(&et); + } else { + /* ev == PROCESS_EVENT_MSG */ + if(*(int *)data == LIGHT_SENSOR_STATUS_NOT_ACTIVE) { + /* Stop sampling */ + etimer_stop(&et); + } else if((*(int *)data == LIGHT_SENSOR_STATUS_ACTIVE)) { + /* restart sampling */ + etimer_restart(&et); + } + } + } + PROCESS_END(); +} + +/*---------------------------------------------------------------------------*/ +/* Sensor defintion for sensor module */ +SENSORS_SENSOR(light_sensor, LIGHT_SENSOR, value, configure, status); +/*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*/ +/* adjust() converts the 2 measured light level into 1 ambient light level. */ +/* See manual JN-RM-2003.pdf */ +/* Approximation is used: output[Lux] = 0.39*(ch0-ch1) */ +/*---------------------------------------------------------------------------*/ +static int +adjust(int ch0, int ch1) +{ + if(ch0 > ch1) { + return (39 * (ch0 - ch1)) / 100; + } else { + return 0; + } +} diff --git a/platform/jn516x/dev/dr1175/light-sensor.h b/platform/jn516x/dev/dr1175/light-sensor.h new file mode 100644 index 000000000..49f9d9bbd --- /dev/null +++ b/platform/jn516x/dev/dr1175/light-sensor.h @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2015 NXP B.V. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of NXP B.V. nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY NXP B.V. AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL NXP B.V. OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the Contiki operating system. + * + * Author: Theo van Daele + * + */ +#ifndef __LIGHT_SENSOR_H__ +#define __LIGHT_SENSOR_H__ + +#include "lib/sensors.h" + +extern const struct sensors_sensor light_sensor; + +#define LIGHT_SENSOR "Light" + +#endif /* __LIGHT_SENSOR_H__ */ diff --git a/platform/jn516x/dev/dr1199/README.md b/platform/jn516x/dev/dr1199/README.md new file mode 100644 index 000000000..f70d7558c --- /dev/null +++ b/platform/jn516x/dev/dr1199/README.md @@ -0,0 +1,19 @@ +This directory contains the contiki driver for the sensor (potentiometer) available on the +NXP DR1199 board. This board is part of the NXP JN516x Evaluation Kit (see http://www.nxp.com/documents/leaflet/75017368.pdf). +The driver for the switches on the DR1199 are supported by `dev/dr1174` when compiled with the flag `SENSOR_BOARD_DR1199` set. + +The dr1199 sensor code interfaces to contiki `core/lib/sensors.c` framework. +The code is specificaly for the JN516X platform, because it makes use of the platform\DK4 libraries +of this JN516X SDK. +`examples/jn516x/rpl/coap-dr1199-node.c` shows an example on using this contiki driver. +leds-arch.c implements the led driver for leds D3 and D6 on the DR1174 base-board and the DR1199 board. +Mapping of LEDs on JN516x DR1199/DR1174: + leds.h: led on DR1174: +DR1174+DR1199: + leds.h physical leds + LEDS_GREEN LED D1 on DR1199 + LEDS_BLUE LED D2 on DR1199 + LEDS_RED LED D3 on DR1199 + LEDS_GP0 LED D3 on DR1174 + LEDS_GP1 LED D6 on DR1174 +Note: LEDS_GPx definitions included in leds.h via platform-conf.h diff --git a/platform/jn516x/dev/dr1199/leds-arch-1199.c b/platform/jn516x/dev/dr1199/leds-arch-1199.c new file mode 100644 index 000000000..c6dc1c3ba --- /dev/null +++ b/platform/jn516x/dev/dr1199/leds-arch-1199.c @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2015 NXP B.V. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of NXP B.V. nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY NXP B.V. AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL NXP B.V. OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the Contiki operating system. + * + * Author: Theo van Daele + * + */ +#include "contiki.h" +#include "dev/leds.h" +#include + +/*---------------------------------------------------------------------------*/ +void +leds_arch_init_1199(void) +{ + vGenericLEDInit(); +} +/*---------------------------------------------------------------------------*/ +void +leds_arch_set_1199(unsigned char c) +{ + vGenericLEDSetOutput(GEN_BOARD_LED_D1_VAL, c & LEDS_GREEN); + vGenericLEDSetOutput(GEN_BOARD_LED_D2_VAL, c & LEDS_BLUE); + vGenericLEDSetOutput(GEN_BOARD_LED_D3_VAL, c & LEDS_RED); +} diff --git a/platform/jn516x/dev/dr1199/leds-arch-1199.h b/platform/jn516x/dev/dr1199/leds-arch-1199.h new file mode 100644 index 000000000..477d2402b --- /dev/null +++ b/platform/jn516x/dev/dr1199/leds-arch-1199.h @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2015 NXP B.V. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of NXP B.V. nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY NXP B.V. AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL NXP B.V. OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the Contiki operating system. + * + * Author: Theo van Daele + * + */ +void leds_arch_init_1199(void); +void leds_arch_set_1199(unsigned char c); diff --git a/platform/jn516x/dev/dr1199/pot-sensor.c b/platform/jn516x/dev/dr1199/pot-sensor.c new file mode 100644 index 000000000..e6254337a --- /dev/null +++ b/platform/jn516x/dev/dr1199/pot-sensor.c @@ -0,0 +1,176 @@ +/* + * Copyright (c) 2015 NXP B.V. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of NXP B.V. nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY NXP B.V. AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL NXP B.V. OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the Contiki operating system. + * + * Author: Theo van Daele + * + */ +#include "contiki.h" +#include "sys/etimer.h" +#include "lib/sensors.h" +#include "pot-sensor.h" +#include +#include + +/*---------------------------------------------------------------------------*/ +/* LOCAL DEFINITIONS */ +/*---------------------------------------------------------------------------*/ +/* #define DEBUG */ +#ifdef DEBUG +#include +#define PRINTF(...) printf(__VA_ARGS__) +#else +#define PRINTF(...) +#endif + +typedef enum { + POT_STATUS_NOT_INIT = 0, + POT_STATUS_INIT, + POT_STATUS_NOT_ACTIVE = POT_STATUS_INIT, + POT_STATUS_ACTIVE +} pot_status_t; + +/* Absolute delta in pot level needed to generate event */ +#define DELTA_POT_VALUE 1 + +/*---------------------------------------------------------------------------*/ +/* LOCAL DATA DEFINITIONS */ +/*---------------------------------------------------------------------------*/ +const struct sensors_sensor pot_sensor; +volatile static pot_status_t pot_status = POT_STATUS_NOT_INIT; +static int prev_pot_event_val = 0; +static int pot_value = 0; + +/*---------------------------------------------------------------------------*/ +/* LOCAL FUNCTION PROTOTYPES */ +/*---------------------------------------------------------------------------*/ +PROCESS(POTSampling, "POT"); + +/*---------------------------------------------------------------------------*/ +/* PUBLIC FUNCTIONS */ +/*---------------------------------------------------------------------------*/ +static int +configure(int type, int value) +{ + if(type == SENSORS_HW_INIT) { + pot_status = POT_STATUS_INIT; + bPotEnable(); + process_start(&POTSampling, NULL); + return 1; + } else if(type == SENSORS_ACTIVE) { + if(pot_status != POT_STATUS_NOT_INIT) { + if(value) { + /* ACTIVATE SENSOR */ + bPotEnable(); + prev_pot_event_val = 0; + /* Activate POT. */ + PRINTF("POT ACTIVATED\n"); + pot_status = POT_STATUS_ACTIVE; + process_post(&POTSampling, PROCESS_EVENT_MSG, (void *)&pot_status); + } else { + /* DE-ACTIVATE SENSOR */ + bPotDisable(); + PRINTF("POT DE-ACTIVATED\n"); + pot_status = POT_STATUS_NOT_ACTIVE; + process_post(&POTSampling, PROCESS_EVENT_MSG, (void *)&pot_status); + } + return 1; + } else { + /* + POT must be intialised before being (de)-activated */ + PRINTF("ERROR: NO HW_INIT POT\n"); + return 0; + } + } else { + /* Non valid type */ + return 0; + } +} +/*---------------------------------------------------------------------------*/ +static int +status(int type) +{ + if(type == SENSORS_ACTIVE) { + return pot_status == POT_STATUS_ACTIVE; + } else if(type == SENSORS_READY) { + return pot_status != POT_STATUS_NOT_INIT; + } + return 0; +} +/*---------------------------------------------------------------------------*/ +static int +value(int type) +{ + /* type: Not defined for the pot interface */ + return pot_value; +} +/*---------------------------------------------------------------------------*/ +/* LOCAL FUNCTIONS */ +/*---------------------------------------------------------------------------*/ +/* Process to get POT_SENSOR value. + POT is sampled. Sampling stopped when POT is de-activated. + Event is generated if pot value changed at least the value DELTA_POT_VALUE + since last event. */ +PROCESS_THREAD(POTSampling, ev, data) +{ + PROCESS_BEGIN(); + static struct etimer et; + + etimer_set(&et, CLOCK_SECOND / 10); + while(1) { + PROCESS_WAIT_EVENT_UNTIL((ev == PROCESS_EVENT_TIMER) || (ev == PROCESS_EVENT_MSG)); + if(ev == PROCESS_EVENT_TIMER) { + /* Handle sensor reading. */ + PRINTF("POT sample\n"); + pot_value = u16ReadPotValue(); + PRINTF("POT = %d\n", pot_value); + if(abs(pot_value - prev_pot_event_val) > DELTA_POT_VALUE) { + prev_pot_event_val = pot_value; + sensors_changed(&pot_sensor); + } + etimer_reset(&et); + } else { + /* ev == PROCESS_EVENT_MSG */ + if(*(int *)data == POT_STATUS_NOT_ACTIVE) { + /* Stop sampling */ + etimer_stop(&et); + } else if((*(int *)data == POT_STATUS_ACTIVE)) { + /* restart sampling */ + etimer_restart(&et); + } + } + } + PROCESS_END(); +} + +/*---------------------------------------------------------------------------*/ +/* Sensor defintion for sensor module */ +SENSORS_SENSOR(pot_sensor, POT_SENSOR, value, configure, status); +/*---------------------------------------------------------------------------*/ + diff --git a/platform/jn516x/dev/dr1199/pot-sensor.h b/platform/jn516x/dev/dr1199/pot-sensor.h new file mode 100644 index 000000000..d2297f822 --- /dev/null +++ b/platform/jn516x/dev/dr1199/pot-sensor.h @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2015 NXP B.V. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of NXP B.V. nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY NXP B.V. AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL NXP B.V. OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the Contiki operating system. + * + * Author: Theo van Daele + * + */ +#ifndef __POT_SENSOR_H__ +#define __POT_SENSOR_H__ + +#include "lib/sensors.h" + +extern const struct sensors_sensor pot_sensor; + +#define POT_SENSOR "pot" + +#endif /* __POT_SENSOR_H__ */ + diff --git a/platform/jn516x/dev/exceptions.c b/platform/jn516x/dev/exceptions.c new file mode 100644 index 000000000..10a3bf11b --- /dev/null +++ b/platform/jn516x/dev/exceptions.c @@ -0,0 +1,397 @@ +/* + * Copyright (c) 2015 NXP B.V. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of NXP B.V. nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY NXP B.V. AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL NXP B.V. OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the Contiki operating system. + * + * Author: Thomas Haydon + * Integrated into Contiki by Beshr Al Nahas + * + */ + +#include +#include +#include +#include "exceptions.h" + +#ifndef EXCEPTION_STALLS_SYSTEM +#define EXCEPTION_STALLS_SYSTEM 0 +#endif /* EXCEPTION_STALLS_SYSTEM */ + +#ifndef PRINT_STACK_ON_REBOOT +#define PRINT_STACK_ON_REBOOT 1 +#endif /* PRINT_STACK_ON_REBOOT */ + +/** Define to dump the stack on exception */ +#ifndef EXC_DUMP_STACK +#define EXC_DUMP_STACK +#endif /* EXC_DUMP_STACK */ + +/** Define to dump registers on exception */ +#ifndef EXC_DUMP_REGS +/* #define EXC_DUMP_REGS */ +#endif /* EXC_DUMP_REGS */ + +/* Select whether exception vectors should be in RAM or Flash based on chip family */ +#if (defined JENNIC_CHIP_FAMILY_JN514x) +#define EXCEPTION_VECTORS_LOCATION_RAM +#elif (defined JENNIC_CHIP_FAMILY_JN516x) +#define EXCEPTION_VECTORS_LOCATION_FLASH +#else +#error Unsupported chip family selected +#endif /* JENNIC_CHIP_FAMILY */ + +#if (defined EXCEPTION_VECTORS_LOCATION_RAM) +/* RAM exception vectors are set up at run time */ +/* Addresses of exception vectors in RAM */ +#define BUS_ERROR *((volatile uint32 *)(0x4000000)) +#define TICK_TIMER *((volatile uint32 *)(0x4000004)) +#define UNALIGNED_ACCESS *((volatile uint32 *)(0x4000008)) +#define ILLEGAL_INSTRUCTION *((volatile uint32 *)(0x400000c)) +#define EXTERNAL_INTERRUPT *((volatile uint32 *)(0x4000010)) +#define SYSCALL *((volatile uint32 *)(0x4000014)) +#define TRAP *((volatile uint32 *)(0x4000018)) +#define GENERIC *((volatile uint32 *)(0x400001c)) +#define STACK_OVERFLOW *((volatile uint32 *)(0x4000020)) +#elif (defined EXCEPTION_VECTORS_LOCATION_FLASH) +/* Flash exception vectors are set up at compile time */ +#else +#error Unknown exception vector location +#endif /* EXCEPTION_VECTORS_LOCATION */ + +/* Locations in stack trace of important information */ +#define STACK_REG 1 +#define PROGRAM_COUNTER 18 +#define EFFECTIVE_ADDR 19 + +/* Number of registers */ +#define REG_COUNT 16 + +/* Chip dependant RAM size */ +#if defined(JENNIC_CHIP_JN5148) || defined(JENNIC_CHIP_JN5148J01) +#define EXCEPTION_RAM_TOP 0x04020000 +#else +#define EXCEPTION_RAM_TOP 0x04008000 +#endif + +static void exception_handler(uint32 *pu32Stack, eExceptionType eType); +static void *heap_alloc_overflow_protect(void *pvPointer, uint32 u32Size, bool_t bClear); +/*---------------------------------------------------------------------------*/ +#if PRINT_STACK_ON_REBOOT +static void hexprint(uint8 v); +static void hexprint32(uint32 v); +static void printstring(const char *s); +#endif /* PRINT_STACK_ON_REBOOT */ + +/* For debugging */ +static const char *debug_filename = "nothing"; +static int debug_line = -1; + +void +debug_file_line(const char *file, int line) +{ + debug_filename = file; + debug_line = line; +} +extern uint32 heap_location; +extern void *(*prHeap_AllocFunc)(void *, uint32, bool_t); +PRIVATE void *(*prHeap_AllocOrig)(void *, uint32, bool_t); + +/* Symbol defined by the linker script */ +/* marks the end of the stack */ +extern void *stack_low_water_mark; + +/****************************************************************************/ +/*** Local Functions ***/ +/****************************************************************************/ +/*---------------------------------------------------------------------------*/ +#if PRINT_STACK_ON_REBOOT +#include "dev/uart0.h" +#define printchar(X) uart0_write_direct(X) +/*---------------------------------------------------------------------------*/ +static void +hexprint(uint8 v) +{ + const char hexconv[] = "0123456789abcdef"; + printchar(hexconv[v >> 4]); + printchar(hexconv[v & 0x0f]); +} +/*---------------------------------------------------------------------------*/ +static void +hexprint32(uint32 v) +{ + hexprint(((uint32)v) >> (uint32)24); + hexprint(((uint32)v) >> (uint32)16); + hexprint(((uint32)v) >> (uint32)8); + hexprint((v) & 0xff); +} +/*---------------------------------------------------------------------------*/ +static void +printstring(const char *s) +{ + while(*s) { + printchar(*s++); + } +} +#endif /* PRINT_STACK_ON_REBOOT */ + +/**************************************************************************** + * + * NAME: vEXC_Register + * + * DESCRIPTION: + * Set up exceptions. When in RAM, overwrite the default vectors with ours. + * We also patch the heap allocation function so that we can keep tabs on + * the amount of free heap. + * + * PARAMETERS: None + * + * RETURNS: + * None + * + ****************************************************************************/ +PUBLIC void +vEXC_Register(void) +{ +#ifdef EXCEPTION_VECTORS_LOCATION_RAM + /* Overwrite exception vectors, pointing them all at the generic handler */ + BUS_ERROR = (uint32)exception_handler; + UNALIGNED_ACCESS = (uint32)exception_handler; + ILLEGAL_INSTRUCTION = (uint32)exception_handler; + SYSCALL = (uint32)exception_handler; + TRAP = (uint32)exception_handler; + GENERIC = (uint32)exception_handler; + STACK_OVERFLOW = (uint32)exception_handler; +#endif /* EXCEPTION_VECTORS_LOCATION */ + + prHeap_AllocOrig = prHeap_AllocFunc; + prHeap_AllocFunc = heap_alloc_overflow_protect; +} +#ifdef EXCEPTION_VECTORS_LOCATION_FLASH +/* If exception vectors are in flash, define the handler functions here to be linked in */ +/* These function names are defined in the 6x linker script for the various exceptions */ +/* Point them all at the generic handler */ +PUBLIC void +vException_BusError(uint32 *pu32Stack, eExceptionType eType) +{ + exception_handler(pu32Stack, eType); +} +PUBLIC void +vException_UnalignedAccess(uint32 *pu32Stack, eExceptionType eType) +{ + exception_handler(pu32Stack, eType); +} +PUBLIC void +vException_IllegalInstruction(uint32 *pu32Stack, eExceptionType eType) +{ + exception_handler(pu32Stack, eType); +} +PUBLIC void +vException_SysCall(uint32 *pu32Stack, eExceptionType eType) +{ + exception_handler(pu32Stack, eType); +} +PUBLIC void +vException_Trap(uint32 *pu32Stack, eExceptionType eType) +{ + exception_handler(pu32Stack, eType); +} +PUBLIC void +vException_StackOverflow(uint32 *pu32Stack, eExceptionType eType) +{ + exception_handler(pu32Stack, eType); +} +#endif /* EXCEPTION_VECTORS_LOCATION_FLASH */ + +/**************************************************************************** + * + * NAME: exception_handler + * + * DESCRIPTION: + * Generic exception handler which is called whether the vectors are in RAM or flash + * + * PARAMETERS: None + * + * RETURNS: + * None + * + ****************************************************************************/ +static void +exception_handler(uint32 *pu32Stack, eExceptionType eType) +{ +#if (defined EXC_DUMP_STACK) || (defined EXC_DUMP_REGS) + int i; +#endif + uint32 u32EPCR, u32EEAR, u32Stack; + char *pcString; + + MICRO_DISABLE_INTERRUPTS(); + + switch(eType) { + case E_EXC_BUS_ERROR: + pcString = "BUS"; + break; + + case E_EXC_UNALIGNED_ACCESS: + pcString = "ALIGN"; + break; + + case E_EXC_ILLEGAL_INSTRUCTION: + pcString = "ILLEGAL"; + break; + + case E_EXC_SYSCALL: + pcString = "SYSCALL"; + break; + + case E_EXC_TRAP: + pcString = "TRAP"; + break; + + case E_EXC_GENERIC: + pcString = "GENERIC"; + break; + + case E_EXC_STACK_OVERFLOW: + pcString = "STACK"; + break; + + default: + pcString = "UNKNOWN"; + break; + } + + if(bAHI_WatchdogResetEvent()) { + pcString = "WATCHDOG"; + } + vAHI_WatchdogStop(); + + /* Pull the EPCR and EEAR values from where they've been saved by the ROM exception handler */ + u32EPCR = pu32Stack[PROGRAM_COUNTER]; + u32EEAR = pu32Stack[EFFECTIVE_ADDR]; + u32Stack = pu32Stack[STACK_REG]; + + /* Log the exception */ + printstring("\n\n\n"); + printstring(pcString); + printstring(" EXCEPTION @ $"); + hexprint32(u32EPCR); + printstring(" EA: "); + hexprint32(u32EEAR); + printstring(" SK: "); + hexprint32(u32Stack); + printstring(" HP: "); + hexprint32(((uint32 *)&heap_location)[0]); + printstring("\n"); + printstring(" File: "); + printstring(debug_filename); + printstring(" Line: "); + hexprint32(debug_line); + printstring("\n"); + +#ifdef EXC_DUMP_REGS + printstring("\nREGS: "); + /* Pull and print the registers from saved locations */ + for(i = 0; i < REG_COUNT; i += 4) { + printstring("R"); + hexprint(i); + printstring("-"); + hexprint(i + 3); + printstring(": "); + hexprint(pu32Stack[i]); + printstring(" "); + hexprint32(pu32Stack[i + 1]); + printstring(" "); + hexprint32(pu32Stack[i + 2]); + printstring(" "); + hexprint32(pu32Stack[i + 3]); + printstring("\n"); + } +#endif + +#ifdef EXC_DUMP_STACK + /* Print the stack */ + printstring("\nRAM top: "); + hexprint32(EXCEPTION_RAM_TOP); + printstring("\nSTACK: \n"); + pu32Stack = (uint32 *)(u32Stack & 0xFFFFFFF0); + for(i = 0; (pu32Stack + i) < (uint32 *)(EXCEPTION_RAM_TOP); i += 4) { + printstring("@"); + hexprint32((uint32)(pu32Stack + i)); + printstring(": "); + hexprint32(pu32Stack[i]); + printstring(" "); + hexprint32(pu32Stack[i + 1]); + printstring(" "); + hexprint32(pu32Stack[i + 2]); + printstring(" "); + hexprint32(pu32Stack[i + 3]); + printstring("\n"); + } +#endif + +#if EXCEPTION_STALLS_SYSTEM + while(1) { + } +#else /* EXCEPTION_STALLS_SYSTEM */ + /* Software reset */ + vAHI_WatchdogException(0); + vAHI_SwReset(); +#endif /* EXCEPTION_STALLS_SYSTEM */ +} +/**************************************************************************** + * + * NAME: heap_alloc_overflow_protect + * + * DESCRIPTION: + * New heap allocation function that sets the stack overflow location to the new + * top address of the heap. + * + * PARAMETERS: Name RW Usage + * pvPointer W Location of allocated heap memory + * u32Size R Number of bytes to allocate + * bClear R Flag to set new memory to 0 + * + * RETURNS: + * Pointer to new memory + * + ****************************************************************************/ +static void * +heap_alloc_overflow_protect(void *pvPointer, uint32 u32Size, bool_t bClear) +{ + void *pvAlloc; + /* Call original heap allocation function */ + pvAlloc = prHeap_AllocOrig(pvPointer, u32Size, bClear); + /* + * Initialise the stack overflow exception to trigger if the end of the + * stack is reached. See the linker command file to adjust the allocated + * stack size. + */ + /* Set stack overflow address */ + vAHI_SetStackOverflow(TRUE, ((uint32 *)&heap_location)[0]); + return pvAlloc; +} diff --git a/platform/jn516x/dev/exceptions.h b/platform/jn516x/dev/exceptions.h new file mode 100644 index 000000000..6acfd8d16 --- /dev/null +++ b/platform/jn516x/dev/exceptions.h @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2015 NXP B.V. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of NXP B.V. nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY NXP B.V. AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL NXP B.V. OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the Contiki operating system. + * + * Author: Thomas Haydon + * Integrated into Contiki by Beshr Al Nahas + * + */ + +#ifndef EXCEPTIONS_H +#define EXCEPTIONS_H + +#include + +/** Enumerated type of CPU exception numbers */ +typedef enum { + E_EXC_BUS_ERROR = 0x02, + E_EXC_TICK_TIMER = 0x05, + E_EXC_UNALIGNED_ACCESS = 0x06, + E_EXC_ILLEGAL_INSTRUCTION = 0x07, + E_EXC_EXTERNAL_INTERRUPT = 0x08, + E_EXC_SYSCALL = 0x0C, + E_EXC_TRAP = 0x0E, + E_EXC_GENERIC = 0x0F, + E_EXC_STACK_OVERFLOW = 0x10 +} eExceptionType; + +/* Exceptions set up function */ +PUBLIC void vEXC_Register(void); +/* For debugging */ +void debug_file_line(const char *file, int line); + +#endif /* EXCEPTIONS_H */ diff --git a/platform/jn516x/dev/leds-extension.c b/platform/jn516x/dev/leds-extension.c new file mode 100644 index 000000000..05e9a8223 --- /dev/null +++ b/platform/jn516x/dev/leds-extension.c @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2015 NXP B.V. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of NXP B.V. nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY NXP B.V. AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL NXP B.V. OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the Contiki operating system. + * + * Author: Theo van Daele + * + */ +#include "leds-extension.h" +#include "dev/leds.h" + +void +leds_set_level(unsigned char level, unsigned char c) +{ + leds_arch_set_level(level, c); +} diff --git a/platform/jn516x/dev/leds-extension.h b/platform/jn516x/dev/leds-extension.h new file mode 100644 index 000000000..2e33b59ff --- /dev/null +++ b/platform/jn516x/dev/leds-extension.h @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2015 NXP B.V. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of NXP B.V. nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY NXP B.V. AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL NXP B.V. OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the Contiki operating system. + * + * Author: Theo van Daele + * + */ +#ifndef LEDS_EXTENSION_H_ +#define LEDS_EXTENSION_H_ + +void leds_set_level(unsigned char level, unsigned char c); + +/** + * Leds implementation + */ +void leds_arch_set_level(unsigned char level, unsigned char c); + +#endif /* LEDS_EXTENSION_H_ */ \ No newline at end of file diff --git a/platform/jn516x/dev/micromac-radio.c b/platform/jn516x/dev/micromac-radio.c new file mode 100644 index 000000000..97e481eab --- /dev/null +++ b/platform/jn516x/dev/micromac-radio.c @@ -0,0 +1,1011 @@ +/* + * Copyright (c) 2014, NXP and SICS Swedish ICT. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the Contiki operating system. + * + */ + +/** + * \file + * Contiki driver for NXP JN516X using MMAC interface + * \authors + * Beshr Al Nahas + * Simon Duquennot + * Atis Elsts + * + */ + +#include +#include "contiki.h" +#include "dev/leds.h" +#include "sys/rtimer.h" +#include "net/packetbuf.h" +#include "net/rime/rimestats.h" +#include "net/netstack.h" +#include "net/mac/frame802154.h" +#include "lib/crc16.h" +#include "lib/ringbufindex.h" + +#include "AppHardwareApi.h" +#include "MMAC.h" +#include "micromac-radio.h" +#include "JPT.h" +#include "PeripheralRegs.h" + +void vMMAC_SetChannelAndPower(uint8 u8Channel, int8 i8power); + +/* This driver configures the radio in PHY mode and does address decoding + * and acknowledging in software. */ + +#define DEBUG DEBUG_NONE +#include "net/ip/uip-debug.h" + +/* Perform CRC check for received packets in SW, + * since we use PHY mode which does not calculate CRC in HW */ +#define CRC_SW 1 + +#define CHECKSUM_LEN 2 + +/* Max packet duration: 5 + 127 + 2 bytes, 32us per byte */ +#define MAX_PACKET_DURATION US_TO_RTIMERTICKS((127 + 2) * 32 + RADIO_DELAY_BEFORE_TX) +/* Max ACK duration: 5 + 3 + 2 bytes */ +#define MAX_ACK_DURATION US_TO_RTIMERTICKS((3 + 2) * 32 + RADIO_DELAY_BEFORE_TX) + +/* Test-mode pins output on dev-kit */ +#define RADIO_TEST_MODE_HIGH_PWR 1 +#define RADIO_TEST_MODE_ADVANCED 2 +#define RADIO_TEST_MODE_DISABLED 0 + +#ifndef RADIO_TEST_MODE +#define RADIO_TEST_MODE RADIO_TEST_MODE_DISABLED +#endif /* RADIO_TEST_MODE */ + +/* The number of input buffers */ +#ifndef MIRCOMAC_CONF_BUF_NUM +#define MIRCOMAC_CONF_BUF_NUM 2 +#endif /* MIRCOMAC_CONF_BUF_NUM */ + +/* Init radio channel */ +#ifndef MICROMAC_CONF_CHANNEL +#define MICROMAC_CONF_CHANNEL 26 +#endif + +/* Default energy level threshold for clear channel detection */ +#ifndef MICROMAC_CONF_CCA_THR +#define MICROMAC_CONF_CCA_THR 39 /* approximately -85 dBm */ +#endif /* MICROMAC_CONF_CCA_THR */ + +#if (JENNIC_CHIP == JN5169) +#define OUTPUT_POWER_MAX 10 +#define OUTPUT_POWER_MIN (-32) +#define ABS_OUTPUT_POWER_MIN (32) +#else +#define OUTPUT_POWER_MAX 0 +#define OUTPUT_POWER_MIN (-32) +#endif + +/* Default Tx power [dBm] (between OUTPUT_POWER_MIN and OUTPUT_POWER_MAX) */ +#ifndef MICROMAC_CONF_TX_POWER +#define MICROMAC_CONF_TX_POWER 0 +#endif + +/* Autoack */ +#ifndef MICROMAC_CONF_AUTOACK +#define MICROMAC_CONF_AUTOACK 1 +#endif /* MICROMAC_CONF_AUTOACK */ + +#define RADIO_TO_RTIMER(X) ((rtimer_clock_t)((X) << (int32_t)8L)) + +/* Set radio always on for now because this is what Contiki MAC layers + * expect. */ +#ifndef MICROMAC_CONF_ALWAYS_ON +#define MICROMAC_CONF_ALWAYS_ON 1 +#endif /* MICROMAC_CONF_ALWAYS_ON */ + +#define BUSYWAIT_UNTIL(cond, max_time) \ + do { \ + rtimer_clock_t t0; \ + t0 = RTIMER_NOW(); \ + while(!(cond) && RTIMER_CLOCK_LT(RTIMER_NOW(), t0 + (max_time))) ; \ + } while(0) + +/* Local variables */ +static volatile signed char radio_last_rssi; +static volatile uint8_t radio_last_correlation; /* LQI */ + +/* Did we miss a request to turn the radio on due to overflow? */ +static volatile uint8_t missed_radio_on_request = 0; + +/* Poll mode disabled by default */ +static uint8_t poll_mode = 0; +/* (Software) frame filtering enabled by default */ +static uint8_t frame_filtering = 1; +/* (Software) autoack */ +static uint8_t autoack_enabled = MICROMAC_CONF_AUTOACK; +/* CCA before sending? Disabled by default. */ +static uint8_t send_on_cca = 0; + +/* Current radio channel */ +static int current_channel; + +/* Current set point tx power + Actual tx power may be different. Use get_txpower() for actual power */ +static int current_tx_power; + +/* an integer between 0 and 255, used only with cca() */ +static uint8_t cca_thershold = MICROMAC_CONF_CCA_THR; + +/* Tx in progress? */ +static volatile uint8_t tx_in_progress = 0; +/* Are we currently listening? */ +static volatile uint8_t listen_on = 0; + +/* Is the driver currently transmitting a software ACK? */ +static uint8_t in_ack_transmission = 0; + +/* TX frame buffer */ +static tsPhyFrame tx_frame_buffer; + +/* RX frame buffer */ +static tsPhyFrame *rx_frame_buffer; + +/* Frame buffer pointer to read from */ +static tsPhyFrame *input_frame_buffer = NULL; + +/* Ringbuffer for received packets in interrupt enabled mode */ +static struct ringbufindex input_ringbuf; +static tsPhyFrame input_array[MIRCOMAC_CONF_BUF_NUM]; + +/* SFD timestamp in RTIMER ticks */ +static volatile uint32_t last_packet_timestamp = 0; + +/* Local functions prototypes */ +static int on(void); +static int off(void); +static int is_packet_for_us(uint8_t *buf, int len, int do_send_ack); +static void set_frame_filtering(uint8_t enable); +static rtimer_clock_t get_packet_timestamp(void); +static void set_txpower(int8_t power); +void set_channel(int c); +static void radio_interrupt_handler(uint32 mac_event); +static int get_detected_energy(void); +static int get_rssi(void); +static void read_last_rssi(void); + +/*---------------------------------------------------------------------------*/ +PROCESS(micromac_radio_process, "micromac_radio_driver"); +/*---------------------------------------------------------------------------*/ + +/* Custom Radio parameters */ +#ifndef RADIO_RX_MODE_POLL_MODE +#define RADIO_PARAM_LAST_RSSI 0x80 +#define RADIO_PARAM_LAST_PACKET_TIMESTAMP 0x81 +#define RADIO_RX_MODE_POLL_MODE (1 << 2) +#endif /* RADIO_RX_MODE_POLL_MODE */ + +#ifndef FRAME802154_IEEE802154E_2012 +/* We define here the missing few features this driver needs from IEEE802.15.4e */ +#define FRAME802154_IEEE802154E_2012 (0x02) +/*----------------------------------------------------------------------------*/ +uint16_t +frame802154_get_pan_id() +{ + return IEEE802154_PANID; +} +/*----------------------------------------------------------------------------*/ +static void +frame802154_has_panid(frame802154_fcf_t *fcf, int *has_src_pan_id, int *has_dest_pan_id) +{ + int src_pan_id = 0; + int dest_pan_id = 0; + + if(fcf == NULL) { + return; + } + if(fcf->frame_version == FRAME802154_IEEE802154E_2012) { + if(!fcf->panid_compression) { + /* Compressed PAN ID == no PAN ID at all */ + if(fcf->dest_addr_mode == fcf->dest_addr_mode) { + /* No address or both addresses: include destination PAN ID */ + dest_pan_id = 1; + } else if(fcf->dest_addr_mode) { + /* Only dest address, include dest PAN ID */ + dest_pan_id = 1; + } else if(fcf->src_addr_mode) { + /* Only src address, include src PAN ID */ + src_pan_id = 1; + } + } + if(fcf->dest_addr_mode == 0 && fcf->dest_addr_mode == 1) { + /* No address included, include dest PAN ID conditionally */ + if(!fcf->panid_compression) { + dest_pan_id = 1; + /* Remove the following rule the day rows 2 and 3 from table 2a are fixed: */ + } + } + if(fcf->dest_addr_mode == 0 && fcf->dest_addr_mode == 0) { + /* Not meaningful, we include a PAN ID iff the compress flag is set, but + * this is what the standard currently stipulates */ + dest_pan_id = fcf->panid_compression; + } + } else + /* No PAN ID in ACK */ + if(fcf->frame_type != FRAME802154_ACKFRAME) { + if(!fcf->panid_compression && fcf->src_addr_mode & 3) { + /* If compressed, don't inclue source PAN ID */ + src_pan_id = 1; + } + if(fcf->dest_addr_mode & 3) { + dest_pan_id = 1; + } + } + + if(has_src_pan_id != NULL) { + *has_src_pan_id = src_pan_id; + } + if(has_dest_pan_id != NULL) { + *has_dest_pan_id = dest_pan_id; + } +} +#endif /* FRAME802154_IEEE802154E_2012 */ + +/*---------------------------------------------------------------------------*/ +static rtimer_clock_t +get_packet_timestamp(void) +{ + /* Save SFD timestamp, converted from radio timer to RTIMER */ + last_packet_timestamp = RTIMER_NOW() - + RADIO_TO_RTIMER((uint32_t)(u32MMAC_GetTime() - u32MMAC_GetRxTime())); + return last_packet_timestamp; +} +/*---------------------------------------------------------------------------*/ +static int +init(void) +{ + int put_index; + tsExtAddr node_long_address; + uint16_t node_short_address; + + tx_in_progress = 0; + + u32JPT_Init(); + vMMAC_Enable(); + + /* Enable/disable interrupts */ + if(poll_mode) { + vMMAC_EnableInterrupts(NULL); + vMMAC_ConfigureInterruptSources(0); + } else { + vMMAC_EnableInterrupts(&radio_interrupt_handler); + } vMMAC_ConfigureRadio(); + set_channel(MICROMAC_CONF_CHANNEL); + set_txpower(MICROMAC_CONF_TX_POWER); + + vMMAC_GetMacAddress(&node_long_address); + + /* Short addresses are disabled by default */ + node_short_address = (uint16_t)node_long_address.u32L; + vMMAC_SetRxAddress(frame802154_get_pan_id(), node_short_address, &node_long_address); + + /* Disable hardware backoff */ + vMMAC_SetTxParameters(1, 0, 0, 0); + vMMAC_SetCutOffTimer(0, FALSE); + + /* Initialize ring buffer and first input packet pointer */ + ringbufindex_init(&input_ringbuf, MIRCOMAC_CONF_BUF_NUM); + /* get pointer to next input slot */ + put_index = ringbufindex_peek_put(&input_ringbuf); + if(put_index == -1) { + rx_frame_buffer = NULL; + printf("micromac_radio init:! no buffer available. Abort init.\n"); + off(); + return 0; + } else { + rx_frame_buffer = &input_array[put_index]; + } input_frame_buffer = rx_frame_buffer; + + process_start(µmac_radio_process, NULL); + +#if RADIO_TEST_MODE == RADIO_TEST_MODE_HIGH_PWR + /* Enable high power mode. + * In this mode DIO2 goes high during RX + * and DIO3 goes high during TX + **/ + vREG_SysWrite(REG_SYS_PWR_CTRL, + u32REG_SysRead(REG_SYS_PWR_CTRL) + | REG_SYSCTRL_PWRCTRL_RFRXEN_MASK + | REG_SYSCTRL_PWRCTRL_RFTXEN_MASK); +#elif RADIO_TEST_MODE == RADIO_TEST_MODE_ADVANCED + /* output internal radio status on IO pins. + * See Chris@NXP email */ + vREG_SysWrite(REG_SYS_PWR_CTRL, + u32REG_SysRead(REG_SYS_PWR_CTRL) | (1UL << 26UL)); +#endif /* TEST_MODE */ + + return 1; +} +/*---------------------------------------------------------------------------*/ +static int +on(void) +{ + /* No address matching or frame decoding */ + if(rx_frame_buffer != NULL) { + vMMAC_StartPhyReceive(rx_frame_buffer, + (uint16_t)(E_MMAC_RX_START_NOW + | E_MMAC_RX_NO_FCS_ERROR) /* means: reject FCS errors */ + ); + } else { + missed_radio_on_request = 1; + } ENERGEST_ON(ENERGEST_TYPE_LISTEN); + listen_on = 1; + return 1; +} +/*---------------------------------------------------------------------------*/ +static int +off(void) +{ + listen_on = 0; + tx_in_progress = 0; + + ENERGEST_OFF(ENERGEST_TYPE_LISTEN); + + /* The following would be needed with delayed Tx/Rx functions + * vMMAC_SetCutOffTimer(0, FALSE);*/ + vMMAC_RadioOff(); + + return 1; +} +/*---------------------------------------------------------------------------*/ +static int +transmit(unsigned short payload_len) +{ + if(tx_in_progress) { + return RADIO_TX_COLLISION; + } + tx_in_progress = 1; + + /* Energest */ + if(listen_on) { + ENERGEST_OFF(ENERGEST_TYPE_LISTEN); + } + ENERGEST_ON(ENERGEST_TYPE_TRANSMIT); + + /* Transmit and wait */ + vMMAC_StartPhyTransmit(&tx_frame_buffer, + E_MMAC_TX_START_NOW | + (send_on_cca ? E_MMAC_TX_USE_CCA : E_MMAC_TX_NO_CCA)); + + if(poll_mode) { + BUSYWAIT_UNTIL(u32MMAC_PollInterruptSource(E_MMAC_INT_TX_COMPLETE), MAX_PACKET_DURATION); + } else { + if(in_ack_transmission) { + /* as nested interupts are not possible, the tx flag will never be cleared */ + BUSYWAIT_UNTIL(FALSE, MAX_ACK_DURATION); + } else { + /* wait until the tx flag is cleared */ + BUSYWAIT_UNTIL(!tx_in_progress, MAX_PACKET_DURATION); + } + } + + /* Energest */ + ENERGEST_OFF(ENERGEST_TYPE_TRANSMIT); + if(listen_on) { + ENERGEST_ON(ENERGEST_TYPE_LISTEN); + } + tx_in_progress = 0; + + /* Check error code */ + int ret; + uint32_t tx_error = u32MMAC_GetTxErrors(); + if(tx_error == 0) { + ret = RADIO_TX_OK; + RIMESTATS_ADD(acktx); + } else if(tx_error & E_MMAC_TXSTAT_ABORTED) { + ret = RADIO_TX_ERR; + RIMESTATS_ADD(sendingdrop); + } else if(tx_error & E_MMAC_TXSTAT_CCA_BUSY) { + ret = RADIO_TX_COLLISION; + RIMESTATS_ADD(contentiondrop); + } else if(tx_error & E_MMAC_TXSTAT_NO_ACK) { + ret = RADIO_TX_NOACK; + RIMESTATS_ADD(noacktx); + } else { + ret = RADIO_TX_ERR; + } return ret; +} +/*---------------------------------------------------------------------------*/ +static int +prepare(const void *payload, unsigned short payload_len) +{ + uint8_t i; + uint16_t checksum; + + RIMESTATS_ADD(lltx); + + if(tx_in_progress) { + return 1; + } + if(payload_len > 127 || payload == NULL) { + return 1; + /* Copy payload to (soft) Ttx buffer */ + } + memcpy(tx_frame_buffer.uPayload.au8Byte, payload, payload_len); + i = payload_len; +#if CRC_SW + /* Compute CRC */ + checksum = crc16_data(payload, payload_len, 0); + tx_frame_buffer.uPayload.au8Byte[i++] = checksum; + tx_frame_buffer.uPayload.au8Byte[i++] = (checksum >> 8) & 0xff; + tx_frame_buffer.u8PayloadLength = payload_len + CHECKSUM_LEN; +#else + tx_frame_buffer.u8PayloadLength = payload_len; +#endif + + return 0; +} +/*---------------------------------------------------------------------------*/ +static int +send(const void *payload, unsigned short payload_len) +{ + if(prepare(payload, payload_len) == 0) { + return transmit(payload_len); + } else { + return RADIO_TX_ERR; + } +} +/*---------------------------------------------------------------------------*/ +int +get_channel(void) +{ + return current_channel; +} +/*---------------------------------------------------------------------------*/ +void +set_channel(int c) +{ + current_channel = c; + /* will fine tune TX power as well */ + vMMAC_SetChannel(current_channel); +} +/*---------------------------------------------------------------------------*/ +static int +is_broadcast_addr(uint8_t mode, uint8_t *addr) +{ + int i = ((mode == FRAME802154_SHORTADDRMODE) ? 2 : 8); + while(i-- > 0) { + if(addr[i] != 0xff) { + return 0; + } + } + return 1; +} +/*---------------------------------------------------------------------------*/ +/* Send an ACK */ +static void +send_ack(const frame802154_t *frame) +{ + uint8_t buffer[3]; + /* FCF: 2 octets */ + buffer[0] = FRAME802154_ACKFRAME; + buffer[1] = 0; + /* Seqnum: 1 octets */ + buffer[2] = frame->seq; + in_ack_transmission = 1; + send(&buffer, sizeof(buffer)); + in_ack_transmission = 0; +} +/*---------------------------------------------------------------------------*/ +/* Check if a packet is for us */ +static int +is_packet_for_us(uint8_t *buf, int len, int do_send_ack) +{ + frame802154_t frame; + int result; + uint8_t parsed = frame802154_parse(buf, len, &frame); + if(parsed) { + if(frame.fcf.dest_addr_mode) { + int has_dest_panid; + frame802154_has_panid(&frame.fcf, NULL, &has_dest_panid); + if(has_dest_panid + && frame802154_get_pan_id() != FRAME802154_BROADCASTPANDID + && frame.dest_pid != frame802154_get_pan_id() + && frame.dest_pid != FRAME802154_BROADCASTPANDID) { + /* Packet to another PAN */ + return 0; + } + if(!is_broadcast_addr(frame.fcf.dest_addr_mode, frame.dest_addr)) { + result = linkaddr_cmp((linkaddr_t *)frame.dest_addr, &linkaddr_node_addr); + if(autoack_enabled && result && do_send_ack) { + /* this is a unicast frame and sending ACKs is enabled */ + send_ack(&frame); + } + return result; + } + } + return 1; + } else { + return 0; + } +} +/*---------------------------------------------------------------------------*/ +static int +read(void *buf, unsigned short bufsize) +{ + int len = 0; + uint16_t radio_last_rx_crc; + uint8_t radio_last_rx_crc_ok = 1; + + len = input_frame_buffer->u8PayloadLength; + + if(len <= CHECKSUM_LEN) { + return 0; + } else { + len -= CHECKSUM_LEN; + /* Check CRC */ +#if CRC_SW + uint16_t checksum = crc16_data(input_frame_buffer->uPayload.au8Byte, len, 0); + radio_last_rx_crc = + (uint16_t)(input_frame_buffer->uPayload.au8Byte[len + 1] << (uint16_t)8) + | input_frame_buffer->uPayload.au8Byte[len]; + radio_last_rx_crc_ok = (checksum == radio_last_rx_crc); + if(!radio_last_rx_crc_ok) { + RIMESTATS_ADD(badcrc); + } +#endif /* CRC_SW */ + if(radio_last_rx_crc_ok) { + /* If we are in poll mode we need to check the frame here */ + if(poll_mode) { + if(frame_filtering && + !is_packet_for_us(input_frame_buffer->uPayload.au8Byte, len, 0)) { + len = 0; + } else { + read_last_rssi(); + } + } + if(len != 0) { + bufsize = MIN(len, bufsize); + memcpy(buf, input_frame_buffer->uPayload.au8Byte, bufsize); + RIMESTATS_ADD(llrx); + if(!poll_mode) { + /* Not in poll mode: packetbuf should not be accessed in interrupt context */ + packetbuf_set_attr(PACKETBUF_ATTR_RSSI, radio_last_rssi); + packetbuf_set_attr(PACKETBUF_ATTR_LINK_QUALITY, radio_last_correlation); + } + } + } else { + len = 0; + /* Disable further read attempts */ + } input_frame_buffer->u8PayloadLength = 0; + } + + return len; +} +/*---------------------------------------------------------------------------*/ +static void +set_txpower(int8_t power) +{ + if(power > OUTPUT_POWER_MAX) { + current_tx_power = OUTPUT_POWER_MAX; + } else { + if(power < OUTPUT_POWER_MIN) { + current_tx_power = OUTPUT_POWER_MIN; + } else { + current_tx_power = power; + } + } + vMMAC_SetChannelAndPower(current_channel, current_tx_power); +} +/*--------------------------------------------------------------------------*/ +static int +get_txpower(void) +{ + int actual_tx_power; +#if (JENNIC_CHIP == JN5169) + /* Actual tx power value rounded to nearest integer number */ + const static int8 power_table [] = { + -32, -30, -29, -29, /* -32 .. -29 */ + -28, -28, -28, -28, /* -28 .. -25 */ + -21, -21, -21, -2, /* -24 .. -21 */ + -20, -19, -18, -17, /* -20 .. -17 */ + -17, -17, -17, -10, /* -16 .. -13 */ + -10, -10, -10, -9, /* -12 .. -09 */ + -8, -7, -6, -6, /* -08 .. -05 */ + -6, -6, 1, 1, /* -04 .. -01 */ + 1, 1, 2, 3, /* 00 .. 03 */ + 4, 5, 6, 7, /* 04 .. 07 */ + 9, 9, 10 }; /* 08 .. 10 */ + if(current_tx_power > OUTPUT_POWER_MAX) { + actual_tx_power = OUTPUT_POWER_MAX; + } else if(current_tx_power < OUTPUT_POWER_MIN) { + actual_tx_power = OUTPUT_POWER_MIN; + } else { + actual_tx_power = power_table[current_tx_power + ABS_OUTPUT_POWER_MIN]; + } +#else + /* Other JN516x chips */ + if(current_tx_power < (-24)) { + actual_tx_power = OUTPUT_POWER_MIN; + } else if(current_tx_power < (-12)) { + actual_tx_power = (-20); + } else if(current_tx_power < 0) { + actual_tx_power = (-9); + } else { + actual_tx_power = OUTPUT_POWER_MAX; + } +#endif + return (int)actual_tx_power; +} +/*---------------------------------------------------------------------------*/ +static int +get_detected_energy(void) +{ + const uint32 u32Samples = 8; + return u8JPT_EnergyDetect(current_channel, u32Samples); +} +/*---------------------------------------------------------------------------*/ +static int +get_rssi(void) +{ + /* this approximate formula for RSSI is taken from NXP internal docs */ + return (7 * get_detected_energy() - 1970) / 20; +} +/*---------------------------------------------------------------------------*/ +static void +read_last_rssi(void) +{ + uint8_t radio_last_rx_energy; + radio_last_rx_energy = u8MMAC_GetRxLqi((uint8_t *)&radio_last_correlation); + radio_last_rssi = i16JPT_ConvertEnergyTodBm(radio_last_rx_energy); +} +/*---------------------------------------------------------------------------*/ +int +receiving_packet(void) +{ + return bMMAC_RxDetected(); +} +/*---------------------------------------------------------------------------*/ +static int +pending_packet(void) +{ + if(!poll_mode) { + return ringbufindex_peek_get(&input_ringbuf) != -1; + } else { + return u32MMAC_PollInterruptSource( + E_MMAC_INT_RX_COMPLETE | E_MMAC_INT_RX_HEADER); + } +} +/*---------------------------------------------------------------------------*/ +static int +cca(void) +{ + bool_t is_channel_busy = bJPT_CCA(current_channel, + E_JPT_CCA_MODE_CARRIER_OR_ENERGY, + cca_thershold); + return is_channel_busy == FALSE; +} +/*---------------------------------------------------------------------------*/ +static void +radio_interrupt_handler(uint32 mac_event) +{ + uint32_t rx_status; + uint8_t overflow = 0; + int get_index; + int put_index; + int packet_for_me = 0; + + if(mac_event & E_MMAC_INT_TX_COMPLETE) { + /* Transmission attempt has finished */ + tx_in_progress = 0; + } else if(mac_event & E_MMAC_INT_RX_COMPLETE) { + rx_status = u32MMAC_GetRxErrors(); + /* If rx is successful */ + if(rx_status == 0) { + /* Save SFD timestamp */ + last_packet_timestamp = get_packet_timestamp(); + + if(!poll_mode && (mac_event & E_MMAC_INT_RX_COMPLETE)) { + if(rx_frame_buffer->u8PayloadLength > CHECKSUM_LEN) { + if(frame_filtering) { + /* Check RX address */ + packet_for_me = is_packet_for_us(rx_frame_buffer->uPayload.au8Byte, rx_frame_buffer->u8PayloadLength - CHECKSUM_LEN, 1); + } else if(!frame_filtering) { + packet_for_me = 1; + } + } + if(!packet_for_me) { + /* Prevent reading */ + rx_frame_buffer->u8PayloadLength = 0; + } else { + /* read and cache RSSI and LQI values */ + read_last_rssi(); + /* Put received frame in queue */ + ringbufindex_put(&input_ringbuf); + + if((get_index = ringbufindex_peek_get(&input_ringbuf)) != -1) { + input_frame_buffer = &input_array[get_index]; + } + process_poll(µmac_radio_process); + + /* get pointer to next input slot */ + put_index = ringbufindex_peek_put(&input_ringbuf); + /* is there space? */ + if(put_index != -1) { + /* move rx_frame_buffer to next empty slot */ + rx_frame_buffer = &input_array[put_index]; + } else { + overflow = 1; + rx_frame_buffer = NULL; + } + } + } + } else { /* if rx is not successful */ + if(rx_status & E_MMAC_RXSTAT_ABORTED) { + RIMESTATS_ADD(badsynch); + } else if(rx_status & E_MMAC_RXSTAT_ERROR) { + RIMESTATS_ADD(badcrc); + } else if(rx_status & E_MMAC_RXSTAT_MALFORMED) { + RIMESTATS_ADD(toolong); + } + } + } + if(overflow) { + off(); + } else if(MICROMAC_CONF_ALWAYS_ON + && (mac_event & (E_MMAC_INT_TX_COMPLETE | E_MMAC_INT_RX_COMPLETE))) { + on(); + } +} +/*---------------------------------------------------------------------------*/ +PROCESS_THREAD(micromac_radio_process, ev, data) +{ + PROCESS_BEGIN(); + + while(1) { + PROCESS_YIELD_UNTIL(ev == PROCESS_EVENT_POLL); + + /* Pass received packets to upper layer */ + int16_t read_index; + /* Loop on accessing (without removing) a pending input packet */ + while((read_index = ringbufindex_peek_get(&input_ringbuf)) != -1) { + input_frame_buffer = &input_array[read_index]; + /* Put packet into packetbuf for input callback */ + packetbuf_clear(); + int len = read(packetbuf_dataptr(), PACKETBUF_SIZE); + /* is packet valid? */ + if(len > 0) { + packetbuf_set_datalen(len); + NETSTACK_RDC.input(); + } + /* Remove packet from ringbuf */ + ringbufindex_get(&input_ringbuf); + /* Disable further read attempts */ + input_frame_buffer->u8PayloadLength = 0; + } + + /* Are we recovering from overflow? */ + if(rx_frame_buffer == NULL) { + /* get pointer to next input slot */ + int put_index = ringbufindex_peek_put(&input_ringbuf); + /* is there space? */ + if(put_index != -1) { + /* move rx_frame_buffer to next empty slot */ + rx_frame_buffer = &input_array[put_index]; + /* do we need to turn radio on? */ + if(MICROMAC_CONF_ALWAYS_ON || missed_radio_on_request) { + missed_radio_on_request = 0; + on(); + } + } else { + rx_frame_buffer = NULL; + } + } + } + PROCESS_END(); +} +/*---------------------------------------------------------------------------*/ +static void +set_frame_filtering(uint8_t enable) +{ + frame_filtering = enable; +} +/*---------------------------------------------------------------------------*/ +static void +set_autoack(uint8_t enable) +{ + autoack_enabled = enable; +} +/*---------------------------------------------------------------------------*/ +static void +set_poll_mode(uint8_t enable) +{ + poll_mode = enable; + if(poll_mode) { + /* Disable interrupts */ + vMMAC_EnableInterrupts(NULL); + vMMAC_ConfigureInterruptSources(0); + } else { + /* Initialize and enable interrupts */ + /* TODO: enable E_MMAC_INT_RX_HEADER & filter out frames after header rx */ + vMMAC_ConfigureInterruptSources( + E_MMAC_INT_RX_COMPLETE | E_MMAC_INT_TX_COMPLETE); + vMMAC_EnableInterrupts(&radio_interrupt_handler); + } +} +/* Enable or disable CCA before sending */ +static void +set_send_on_cca(uint8_t enable) +{ + send_on_cca = enable; +} +/*---------------------------------------------------------------------------*/ +static radio_result_t +get_value(radio_param_t param, radio_value_t *value) +{ + if(!value) { + return RADIO_RESULT_INVALID_VALUE; + } + switch(param) { + case RADIO_PARAM_POWER_MODE: + *value = listen_on || tx_in_progress ? RADIO_POWER_MODE_ON : RADIO_POWER_MODE_OFF; + return RADIO_RESULT_OK; + case RADIO_PARAM_CHANNEL: + *value = get_channel(); + return RADIO_RESULT_OK; + case RADIO_PARAM_RX_MODE: + *value = 0; + if(frame_filtering) { + *value |= RADIO_RX_MODE_ADDRESS_FILTER; + } + if(autoack_enabled) { + *value |= RADIO_RX_MODE_AUTOACK; + } + if(poll_mode) { + *value |= RADIO_RX_MODE_POLL_MODE; + } + return RADIO_RESULT_OK; + case RADIO_PARAM_TX_MODE: + *value = 0; + if(send_on_cca) { + *value |= RADIO_TX_MODE_SEND_ON_CCA; + } + return RADIO_RESULT_OK; + case RADIO_PARAM_TXPOWER: + *value = get_txpower(); + return RADIO_RESULT_OK; + case RADIO_PARAM_RSSI: + *value = get_rssi(); + return RADIO_RESULT_OK; + case RADIO_PARAM_LAST_RSSI: + *value = radio_last_rssi; + return RADIO_RESULT_OK; + case RADIO_PARAM_CCA_THRESHOLD: + *value = cca_thershold; + return RADIO_RESULT_OK; + case RADIO_CONST_CHANNEL_MIN: + *value = 11; + return RADIO_RESULT_OK; + case RADIO_CONST_CHANNEL_MAX: + *value = 26; + return RADIO_RESULT_OK; + case RADIO_CONST_TXPOWER_MIN: + *value = OUTPUT_POWER_MIN; + return RADIO_RESULT_OK; + case RADIO_CONST_TXPOWER_MAX: + *value = OUTPUT_POWER_MAX; + return RADIO_RESULT_OK; + default: + return RADIO_RESULT_NOT_SUPPORTED; + } +} +/*---------------------------------------------------------------------------*/ +static radio_result_t +set_value(radio_param_t param, radio_value_t value) +{ + switch(param) { + case RADIO_PARAM_POWER_MODE: + if(value == RADIO_POWER_MODE_ON) { + on(); + return RADIO_RESULT_OK; + } + if(value == RADIO_POWER_MODE_OFF) { + off(); + return RADIO_RESULT_OK; + } + return RADIO_RESULT_INVALID_VALUE; + case RADIO_PARAM_CHANNEL: + if(value < 11 || value > 26) { + return RADIO_RESULT_INVALID_VALUE; + } + set_channel(value); + return RADIO_RESULT_OK; + case RADIO_PARAM_RX_MODE: + if(value & ~(RADIO_RX_MODE_ADDRESS_FILTER | + RADIO_RX_MODE_AUTOACK | RADIO_RX_MODE_POLL_MODE)) { + return RADIO_RESULT_INVALID_VALUE; + } + set_frame_filtering((value & RADIO_RX_MODE_ADDRESS_FILTER) != 0); + set_autoack((value & RADIO_RX_MODE_AUTOACK) != 0); + set_poll_mode((value & RADIO_RX_MODE_POLL_MODE) != 0); + return RADIO_RESULT_OK; + case RADIO_PARAM_TX_MODE: + if(value & ~(RADIO_TX_MODE_SEND_ON_CCA)) { + return RADIO_RESULT_INVALID_VALUE; + } + set_send_on_cca((value & RADIO_TX_MODE_SEND_ON_CCA) != 0); + return RADIO_RESULT_OK; + case RADIO_PARAM_TXPOWER: + if(value < OUTPUT_POWER_MIN || value > OUTPUT_POWER_MAX) { + return RADIO_RESULT_INVALID_VALUE; + /* Find the closest higher PA_LEVEL for the desired output power */ + } + set_txpower(value); + return RADIO_RESULT_OK; + case RADIO_PARAM_CCA_THRESHOLD: + cca_thershold = value; + return RADIO_RESULT_OK; + default: + return RADIO_RESULT_NOT_SUPPORTED; + } +} +/*---------------------------------------------------------------------------*/ +static radio_result_t +get_object(radio_param_t param, void *dest, size_t size) +{ + if(param == RADIO_PARAM_LAST_PACKET_TIMESTAMP) { + if(size != sizeof(rtimer_clock_t) || !dest) { + return RADIO_RESULT_INVALID_VALUE; + } + *(rtimer_clock_t *)dest = get_packet_timestamp(); + + return RADIO_RESULT_OK; + } + return RADIO_RESULT_NOT_SUPPORTED; +} +/*---------------------------------------------------------------------------*/ +static radio_result_t +set_object(radio_param_t param, const void *src, size_t size) +{ + return RADIO_RESULT_NOT_SUPPORTED; +} +/*---------------------------------------------------------------------------*/ +const struct radio_driver micromac_radio_driver = { + init, + prepare, + transmit, + send, + read, + cca, + receiving_packet, + pending_packet, + on, + off, + get_value, + set_value, + get_object, + set_object +}; diff --git a/platform/jn516x/dev/micromac-radio.h b/platform/jn516x/dev/micromac-radio.h new file mode 100644 index 000000000..a283af23d --- /dev/null +++ b/platform/jn516x/dev/micromac-radio.h @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2014, NXP and SICS Swedish ICT. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the Contiki operating system. + * + */ + +/** + * \file + * MICROMAC_RADIO driver header file + * \authors + * Beshr Al Nahas + * Simon Duquennot + */ + +#ifndef MICROMAC_RADIO_H_ +#define MICROMAC_RADIO_H_ + +#include "dev/radio.h" + +extern const struct radio_driver micromac_radio_driver; + +#endif /* MICROMAC_RADIO_H_ */ diff --git a/platform/jn516x/dev/mtarch.c b/platform/jn516x/dev/mtarch.c new file mode 100644 index 000000000..c3c81457e --- /dev/null +++ b/platform/jn516x/dev/mtarch.c @@ -0,0 +1,72 @@ +/* + * Copyright (c) 2008 + * Telecooperation Office (TecO), Universitaet Karlsruhe (TH), Germany. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided + * with the distribution. + * 3. Neither the name of the Universitaet Karlsruhe (TH) nor the names + * of its contributors may be used to endorse or promote products + * derived from this software without specific prior written + * permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * Author(s): Philipp Scholl + */ + +/* Copied from Philipp Scholl's (BSD) Contiki port to Jennic */ + +#include "mtarch.h" + +void +mtarch_init(void) +{ +} +void +mtarch_remove(void) +{ +} +void +mtarch_start(struct mtarch_thread *thread, + void (*function)(void *data), + void *data) +{ +} +void +mtarch_yield(void) +{ +} +void +mtarch_exec(struct mtarch_thread *thread) +{ +} +void +mtarch_stop(struct mtarch_thread *thread) +{ +} +void +mtarch_pstart(void) +{ +} +void +mtarch_pstop(void) +{ +} diff --git a/platform/jn516x/dev/mtarch.h b/platform/jn516x/dev/mtarch.h new file mode 100644 index 000000000..3c6292f1d --- /dev/null +++ b/platform/jn516x/dev/mtarch.h @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2008 + * Telecooperation Office (TecO), Universitaet Karlsruhe (TH), Germany. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided + * with the distribution. + * 3. Neither the name of the Universitaet Karlsruhe (TH) nor the names + * of its contributors may be used to endorse or promote products + * derived from this software without specific prior written + * permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * Author(s): Philipp Scholl + */ + +/* Copied from Philipp Scholl's (BSD) Contiki port to Jennic */ + +#ifndef __MTARCH_H__ +#define __MTARCH_H__ + +struct mtarch_thread { + void *mt_thread; +}; + +#endif /* __MTARCH_H__ */ diff --git a/platform/jn516x/dev/node-id.c b/platform/jn516x/dev/node-id.c new file mode 100644 index 000000000..d0e95d521 --- /dev/null +++ b/platform/jn516x/dev/node-id.c @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2014, SICS Swedish ICT. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the Contiki operating system. + * + */ + +/** + * \file + * For compatibility with Contiki node-id interface + * + * \author + * Beshr Al Nahas + */ + +#include "contiki.h" +#include "sys/node-id.h" +#include "contiki-conf.h" + +/*---------------------------------------------------------------------------*/ +extern unsigned char node_mac[8]; +unsigned short node_id = 0; +/*---------------------------------------------------------------------------*/ +void +node_id_restore(void) +{ + /* base node-id on MAC address */ + node_id = (node_mac[6] << 8) | node_mac[7]; +} +/*---------------------------------------------------------------------------*/ +void +node_id_burn(unsigned short id) +{ + /* does not burn anything */ + node_id = id; +} diff --git a/platform/jn516x/dev/rtimer-arch.c b/platform/jn516x/dev/rtimer-arch.c new file mode 100644 index 000000000..6c2e3ae8d --- /dev/null +++ b/platform/jn516x/dev/rtimer-arch.c @@ -0,0 +1,139 @@ +/* + * Copyright (c) 2014, SICS Swedish ICT. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the Contiki operating system. + * + */ + +/** + * \file + * RTIMER for NXP jn516x + * \author + * Beshr Al Nahas + */ + +#include "sys/rtimer.h" +#include "sys/clock.h" +#include "sys/process.h" +#include +#include +#include "dev/watchdog.h" +#include "sys/energest.h" + +#define RTIMER_TIMER_ISR_DEV E_AHI_DEVICE_TICK_TIMER + +#define DEBUG 0 +#if DEBUG +#include +#define PRINTF(...) printf(__VA_ARGS__) +#else +#define PRINTF(...) +#endif + +static volatile uint32_t compare_time; +static volatile uint32_t last_expired_time; + +void +rtimer_arch_run_next(uint32 u32DeviceId, uint32 u32ItemBitmap) +{ + uint32_t delta, temp; + if(u32DeviceId != RTIMER_TIMER_ISR_DEV) { + return; + } + ENERGEST_ON(ENERGEST_TYPE_IRQ); + vAHI_TickTimerIntPendClr(); + vAHI_TickTimerIntEnable(0); + /* + * compare register is only 28bits wide so make sure the upper 4bits match + * the set compare point + */ + delta = u32AHI_TickTimerRead() - compare_time; + if(0 == (delta >> 28)) { + /* compare_time might change after executing rtimer_run_next() + * as some process might schedule the timer + */ + temp = compare_time; + + /* run scheduled */ + watchdog_start(); + rtimer_run_next(); + + if(process_nevents() > 0) { + /* TODO exit low-power mode */ + } + + watchdog_stop(); + last_expired_time = temp; + } else { + /* No match. Schedule again. */ + vAHI_TickTimerIntEnable(1); + vAHI_TickTimerInterval(compare_time); + } + ENERGEST_OFF(ENERGEST_TYPE_IRQ); +} +/*---------------------------------------------------------------------------*/ +void +rtimer_arch_init(void) +{ + /* Initialise tick timer to run continuously */ + vAHI_TickTimerIntEnable(0); + vAHI_TickTimerConfigure(E_AHI_TICK_TIMER_DISABLE); + last_expired_time = compare_time = 0; + vAHI_TickTimerWrite(0); + vAHI_TickTimerRegisterCallback(rtimer_arch_run_next); + vAHI_TickTimerConfigure(E_AHI_TICK_TIMER_CONT); +} +/*---------------------------------------------------------------------------*/ +rtimer_clock_t +rtimer_arch_now(void) +{ + return u32AHI_TickTimerRead(); +} +/*---------------------------------------------------------------------------*/ +void +rtimer_arch_schedule(rtimer_clock_t t) +{ + PRINTF("rtimer_arch_schedule time %lu\n", t); + vAHI_TickTimerIntPendClr(); + vAHI_TickTimerIntEnable(1); + vAHI_TickTimerInterval(t); + compare_time = t; +} +/*---------------------------------------------------------------------------*/ +rtimer_clock_t +rtimer_arch_get_time_until_next_wakeup(void) +{ + rtimer_clock_t now = RTIMER_NOW(); + rtimer_clock_t next_wakeup = compare_time; + if(bAHI_TickTimerIntStatus()) { + return next_wakeup >= now ? next_wakeup - now : 0; + /* if no wakeup is scheduled yet return maximum time */ + } + return (rtimer_clock_t)-1; +} +/*---------------------------------------------------------------------------*/ diff --git a/platform/jn516x/dev/rtimer-arch.h b/platform/jn516x/dev/rtimer-arch.h new file mode 100644 index 000000000..ec7211262 --- /dev/null +++ b/platform/jn516x/dev/rtimer-arch.h @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2014, SICS Swedish ICT. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the Contiki operating system. + * + */ + +/** + * \file + * Header file for NXP jn516x-specific rtimer code + * \author + * Beshr Al Nahas + */ + +#ifndef RTIMER_ARCH_H_ +#define RTIMER_ARCH_H_ + +#include "sys/rtimer.h" + +#ifdef RTIMER_CONF_SECOND +#define RTIMER_ARCH_SECOND RTIMER_CONF_SECOND +#else +/* 32MHz CPU clock => 16MHz timer */ +#define RTIMER_ARCH_SECOND (F_CPU / 2) +#endif + +#define US_TO_RTIMERTICKS(D) ((int64_t)(D) << 4) +#define RTIMERTICKS_TO_US(T) ((int64_t)(T) >> 4) + +rtimer_clock_t rtimer_arch_now(void); + +rtimer_clock_t rtimer_arch_get_time_until_next_wakeup(void); + +#endif /* RTIMER_ARCH_H_ */ diff --git a/platform/jn516x/dev/slip_uart0.c b/platform/jn516x/dev/slip_uart0.c new file mode 100644 index 000000000..a02791de2 --- /dev/null +++ b/platform/jn516x/dev/slip_uart0.c @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2014, SICS Swedish ICT. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + */ + +/* + * Machine dependent jn516x SLIP routines for UART0. + */ + +#include "contiki-conf.h" +#include "dev/slip.h" +#include "dev/uart0.h" +/*---------------------------------------------------------------------------*/ +void +slip_arch_writeb(unsigned char c) +{ + uart0_writeb(c); +} +/*---------------------------------------------------------------------------*/ +/** + * Initalize the RS232 port and the SLIP driver. + * + */ +void +slip_arch_init(unsigned long ubr) +{ + uart0_set_input(slip_input_byte); +} +/*---------------------------------------------------------------------------*/ diff --git a/platform/jn516x/dev/uart-driver.c b/platform/jn516x/dev/uart-driver.c new file mode 100644 index 000000000..922c067ab --- /dev/null +++ b/platform/jn516x/dev/uart-driver.c @@ -0,0 +1,610 @@ +/* + * Copyright (c) 2015 NXP B.V. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of NXP B.V. nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY NXP B.V. AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL NXP B.V. OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the Contiki operating system. + * + * Author: Lee Mitchell + * Integrated into Contiki by Beshr Al Nahas + * + */ + +#include + +#ifdef DEBUG +#include +#else +#define DBG_vPrintf(...) +#endif + +#include "contiki-conf.h" +#include "uart-driver.h" +#include "sys/rtimer.h" +#include "watchdog.h" +#include +#include + +#if UART_XONXOFF_FLOW_CTRL + +#include "sys/process.h" + +#define TX_FIFO_SW_FLOW_LIMIT 8 /* Maximum allowed fill level for tx fifo */ +#if TX_FIFO_SW_FLOW_LIMIT > 16 +#undef TX_FIFO_SW_FLOW_LIMIT +#define TX_FIFO_SW_FLOW_LIMIT 16 +#warning "TX_FIFO_SW_FLOW_LIMIT too big. Forced to 16." +#endif /* TX_FIFO_SW_FLOW_LIMIT > 16 */ + +#define XON 17 +#define XOFF 19 + +extern volatile unsigned char xonxoff_state; + +#endif /* UART_XONXOFF_FLOW_CTRL */ + +/*** Macro Definitions ***/ +#define BUSYWAIT_UNTIL(cond, max_time) \ + do { \ + rtimer_clock_t t0; \ + t0 = RTIMER_NOW(); \ + while(!(cond) && RTIMER_CLOCK_LT(RTIMER_NOW(), t0 + (max_time))) ; \ + } while(0) + +#define DEBUG_UART_BUFFERED FALSE + +#define CHAR_DEADLINE (uart_char_delay * 100) + +/*** Local Function Prototypes ***/ +static void uart_driver_isr(uint32_t device_id, uint32_t item_bitmap); +#if !UART_XONXOFF_FLOW_CTRL +static int16_t uart_driver_get_tx_fifo_available_space(uint8_t uart_dev); +#endif /* !UART_XONXOFF_FLOW_CTRL */ +static void uart_driver_set_baudrate(uint8_t uart_dev, uint8_t br); +static void uart_driver_set_high_baudrate(uint8_t uart_dev, uint32_t baud_rate); + +/*** Local Variables ***/ +#define UART_NUM_UARTS 2 +static uint16_t tx_fifo_size[UART_NUM_UARTS] = { 0 }; +static uint8_t active_uarts[UART_NUM_UARTS] = { 0 }; +/** slip input function pointer */ +static int(*uart_input[UART_NUM_UARTS]) (unsigned char) = { 0 }; +/* time in uSec for transmitting 1 char */ +static uint16_t uart_char_delay = 0; +static volatile int8_t interrupt_enabled[UART_NUM_UARTS] = { 0 }; +static volatile int8_t interrupt_enabled_saved[UART_NUM_UARTS] = { 0 }; + +/**************************************************************************** + * + * NAME: uart_driver_init + * + * DESCRIPTION: + * Initializes the specified UART device. + * + * PARAMETERS: Name RW Usage + * uart_dev R UART to initialise, eg, E_AHI_UART_0 + * br R Baudrate to use (e.g. UART_RATE_115200) + * if br > UART_RATE_115200 + * then uart_driver_set_baud_rate is called + * else vAHI_UartSetClockDivisor + * txbuf_data R Pointer to a memory block to use + * and rxbuf_data as uart tx/rx fifo + * txbuf_size R size of tx fifo (valid range: 16-2047) + * txbuf_size R size of rx fifo (valid range: 16-2047) + * uart_input_function a function pointer to input uart rx bytes + * RETURNS: + * void + * + ****************************************************************************/ +void +uart_driver_init(uint8_t uart_dev, uint8_t br, uint8_t *txbuf_data, + uint16_t txbuf_size, uint8_t *rxbuf_data, uint16_t rxbuf_size, + int (*uart_input_function)(unsigned char c)) +{ +#if !UART_HW_FLOW_CTRL + /* Disable RTS/CTS */ + vAHI_UartSetRTSCTS(uart_dev, FALSE); +#endif + + tx_fifo_size[uart_dev] = txbuf_size; + + /* Configure the selected Uart */ + uint8_t uart_enabled = bAHI_UartEnable(uart_dev, txbuf_data, txbuf_size, + rxbuf_data, rxbuf_size); + /* fallback to internal buffers */ + if(!uart_enabled) { + vAHI_UartEnable(uart_dev); + tx_fifo_size[uart_dev] = 16; /* Fixed size */ + } + /* Reset tx/rx fifos */ + vAHI_UartReset(uart_dev, TRUE, TRUE); + vAHI_UartReset(uart_dev, FALSE, FALSE); + + uart_driver_set_baudrate(uart_dev, br); + + /* install interrupt service callback */ + if(uart_dev == E_AHI_UART_0) { + vAHI_Uart0RegisterCallback((void *)uart_driver_isr); + } else { + vAHI_Uart1RegisterCallback((void *)uart_driver_isr); + /* Enable RX interrupt */ + } + uart_driver_enable_interrupts(uart_dev); + uart_input[uart_dev] = uart_input_function; + active_uarts[uart_dev] = 1; + +#if UART_HW_FLOW_CTRL + /* Configure HW flow control */ + vAHI_UartSetAutoFlowCtrl(uart_dev, E_AHI_UART_FIFO_ARTS_LEVEL_13, /* uint8 const u8RxFifoLevel,*/ + FALSE, /* bool_t const bFlowCtrlPolarity,*/ + TRUE, /* bool_t const bAutoRts, */ + TRUE /* bool_t const bAutoCts */); +#endif + + DBG_vPrintf("UART %d init: using %s buffers %d\n", uart_dev, + uart_enabled ? "external" : "internal", tx_fifo_size[uart_dev]); +} +void +uart_driver_enable_interrupts(uint8_t uart_dev) +{ + /* wait while char being tx is done */ + while((u8AHI_UartReadLineStatus(uart_dev) & E_AHI_UART_LS_THRE) == 0) ; + + vAHI_UartSetInterrupt(uart_dev, FALSE /*bEnableModemStatus*/, + FALSE /*bEnableRxLineStatus == Break condition */, + FALSE /*bEnableTxFifoEmpty*/, + TRUE /* bEnableRxData */, E_AHI_UART_FIFO_LEVEL_14); + interrupt_enabled[uart_dev] = 1; +} +void +uart_driver_disable_interrupts(uint8_t uart_dev) +{ + /* wait while char being tx is done */ + while((u8AHI_UartReadLineStatus(uart_dev) & E_AHI_UART_LS_THRE) == 0) ; + + vAHI_UartSetInterrupt(uart_dev, FALSE /*bEnableModemStatus*/, + FALSE /*bEnableRxLineStatus == Break condition */, + FALSE /*bEnableTxFifoEmpty*/, + FALSE /* bEnableRxData */, E_AHI_UART_FIFO_LEVEL_14); + interrupt_enabled[uart_dev] = 0; +} +void +uart_driver_store_interrupts(uint8_t uart_dev) +{ + interrupt_enabled_saved[uart_dev] = interrupt_enabled[uart_dev]; +} +void +uart_driver_restore_interrupts(uint8_t uart_dev) +{ + if(interrupt_enabled_saved[uart_dev]) { + uart_driver_enable_interrupts(uart_dev); + } else { + uart_driver_disable_interrupts(uart_dev); + } +} +int8_t +uart_driver_interrupt_is_enabled(uint8_t uart_dev) +{ + return interrupt_enabled[uart_dev]; +} +void +uart_driver_set_input(uint8_t uart_dev, int + (*uart_input_function)(unsigned char c)) +{ + uart_input[uart_dev] = uart_input_function; +} +/**************************************************************************** + * + * NAME: uart_driver_read + * + * DESCRIPTION: + * Reads 1 byte from the RX buffer. If there is no data in the + * buffer, then return FALSE + * + * PARAMETERS: Name RW Usage + * uart_dev R UART to use, eg, E_AHI_UART_0 + * + * RETURNS: + * TRUE if a byte has been read from the queue + * + ****************************************************************************/ +uint8_t +uart_driver_read(uint8_t uart_dev, uint8_t *data) +{ + if(data && u16AHI_UartReadRxFifoLevel(uart_dev) > 0) { + *data = u8AHI_UartReadData(uart_dev); + return TRUE; + } + return FALSE; +} +void +uart_driver_write_buffered(uint8_t uart_dev, uint8_t ch) +{ + uart_driver_write_with_deadline(uart_dev, ch); +} +/**************************************************************************** + * + * NAME: uart_driver_write_with_deadline + * + * DESCRIPTION: + * Writes one byte to the specified uart for transmission + * + * PARAMETERS: Name RW Usage + * uart_dev R UART to use, eg, E_AHI_UART_0 + * ch R data to transmit + * + * RETURNS: + * void + * + ****************************************************************************/ +void +uart_driver_write_with_deadline(uint8_t uart_dev, uint8_t ch) +{ +#if UART_XONXOFF_FLOW_CTRL + /* Block until host can receive data */ + /* Wait until there are less than N characters in TX FIFO */ + while(xonxoff_state != XON + || u16AHI_UartReadTxFifoLevel(uart_dev) > TX_FIFO_SW_FLOW_LIMIT) { + watchdog_periodic(); + } + /* write to TX FIFO and return immediately */ + vAHI_UartWriteData(uart_dev, ch); +#else /* UART_XONXOFF_FLOW_CTRL */ + volatile int16_t write = 0; + watchdog_periodic(); + /* wait until there is space in tx fifo */ + BUSYWAIT_UNTIL(write = (uart_driver_get_tx_fifo_available_space(uart_dev) > 0), + CHAR_DEADLINE); + /* write only if there is space so we do not get stuck */ + if(write) { + /* write to TX FIFO and return immediately */ + vAHI_UartWriteData(uart_dev, ch); + } +#endif /* UART_XONXOFF_FLOW_CTRL */ +} +void +uart_driver_write_direct(uint8_t uart_dev, uint8_t ch) +{ + /* Write character */ + vAHI_UartWriteData(uart_dev, ch); + /* Wait for buffers to empty */ + while((u8AHI_UartReadLineStatus(uart_dev) & E_AHI_UART_LS_THRE) == 0) ; + while((u8AHI_UartReadLineStatus(uart_dev) & E_AHI_UART_LS_TEMT) == 0) ; +} +/**************************************************************************** + * + * NAME: uart_driver_rx_handler + * + * DESCRIPTION: + * Interrupt service callback for UART data reception. Reads a received + * byte from the UART and writes it to the reception buffer if it is not + * full. + * + * PARAMETERS: Name RW Usage + * uart_dev R Uart to read from + * + * RETURNS: + * void + * + ****************************************************************************/ +void +uart_driver_rx_handler(uint8_t uart_dev) +{ + /* optimization for high throughput: Read upto 32 bytes from RX fifo. + * Disabled because it does not work with current slip_input_byte */ + + /* Status from uart_input: + * 0 means do not exit power saving mode + * -1 means RX buffer overflow ==> stop reading + * 1 means end of slip packet + */ +#if UART_XONXOFF_FLOW_CTRL + /* save old status */ + int xonxoff_state_old = xonxoff_state; +#endif /* UART_XONXOFF_FLOW_CTRL */ + int status = 0; + int c = 0; + while(u16AHI_UartReadRxFifoLevel(uart_dev) > 0 && c++ < 32 && status == 0) { + if(uart_input[uart_dev] != NULL) { /* read one char at a time */ + + /* process received character */ + status = (uart_input[uart_dev])(u8AHI_UartReadData(uart_dev)); + +#if UART_XONXOFF_FLOW_CTRL + /* Process XON-XOFF*/ + if(xonxoff_state == XOFF) { + /* XXX do not set break condition as it corrupts one character, instead we block on TX */ + /* Instruct uart to stop TX */ + /* vAHI_UartSetBreak(uart_dev, TRUE); */ + break; + } else if(xonxoff_state_old == XOFF && xonxoff_state == XON) { + /* Instruct uart to resume TX if it was stopped */ + /* vAHI_UartSetBreak(uart_dev, FALSE); */ + } +#endif /* UART_XONXOFF_FLOW_CTRL */ + } else { + /* no input handler, or no bytes to read: Discard byte. */ + u8AHI_UartReadData(uart_dev); + } + } +} +/****************************************************************************/ +/*** Local Functions ***/ +/****************************************************************************/ + +#if !UART_XONXOFF_FLOW_CTRL +/* Returns the free space in tx fifo, i.e., how many characters we can put */ +static int16_t +uart_driver_get_tx_fifo_available_space(uint8_t uart_dev) +{ + return tx_fifo_size[uart_dev] - u16AHI_UartReadTxFifoLevel(uart_dev); +} +#endif /* !UART_XONXOFF_FLOW_CTRL */ +/* Initializes the specified UART with auto-selection of + baudrate tuning method */ +static void +uart_driver_set_baudrate(uint8_t uart_dev, uint8_t br) +{ + uint32_t high_br = 0; + uint8_t low_br = 0; + + switch(br) { + case UART_RATE_4800: + low_br = E_AHI_UART_RATE_4800; + uart_char_delay = 1667; + break; + case UART_RATE_9600: + low_br = E_AHI_UART_RATE_9600; + uart_char_delay = 834; + break; + case UART_RATE_19200: + low_br = E_AHI_UART_RATE_19200; + uart_char_delay = 417; + break; + case UART_RATE_38400: + low_br = E_AHI_UART_RATE_38400; + uart_char_delay = 209; + break; + case UART_RATE_76800: + low_br = E_AHI_UART_RATE_76800; + uart_char_delay = 105; + break; + case UART_RATE_115200: + low_br = E_AHI_UART_RATE_115200; + uart_char_delay = 69; + break; + case UART_RATE_230400: + high_br = 230400UL; + uart_char_delay = 35; + break; + case UART_RATE_460800: + high_br = 460800UL; + uart_char_delay = 18; + break; + case UART_RATE_500000: + high_br = 500000UL; + uart_char_delay = 16; + break; + case UART_RATE_576000: + high_br = 576000UL; + uart_char_delay = 14; + break; + case UART_RATE_921600: + high_br = 921600UL; + uart_char_delay = 9; + break; + case UART_RATE_1000000: + high_br = 1000000UL; + uart_char_delay = 8; + break; + default: + high_br = 1000000UL; + uart_char_delay = 8; + break; + } + if(high_br == 0) { + vAHI_UartSetClockDivisor(uart_dev, low_br); + } else { + uart_driver_set_high_baudrate(uart_dev, high_br); + } +} +/**************************************************************************** + * + * NAME: uart_driver_set_high_baudrate + * + * DESCRIPTION: + * Sets the baud rate for the specified uart + * + * PARAMETERS: Name RW Usage + * uart_dev R UART to initialise, eg, E_AHI_UART_0 + * baud_rate R Baudrate to use (bps eg 921600) + * + * RETURNS: + * void + * + ****************************************************************************/ +static void +uart_driver_set_high_baudrate(uint8_t uart_dev, uint32_t baud_rate) +{ + uint16 u16Divisor = 1; + uint32_t u32Remainder; + uint8_t u8ClocksPerBit = 16; + +#if (ENABLE_ADVANCED_BAUD_SELECTION) + /* Defining ENABLE_ADVANCED_BAUD_SELECTION in the Makefile + * enables this code which searches for a clocks per bit setting + * that gets closest to the configured rate. + */ + uint32_t u32CalcBaudRate = 0; + int32 i32BaudError = 0x7FFFFFFF; + + DBG_vPrintf(DEBUG_UART_BUFFERED, "Config uart=%d, baud=%d\n", uart_dev, + baud_rate); + + while(ABS(i32BaudError) > (int32)(baud_rate >> 4)) { /* 6.25% (100/16) error */ + if(--u8ClocksPerBit < 3) { + DBG_vPrintf(DEBUG_UART_BUFFERED, + "Could not calculate UART settings for target baud!"); + return; + } +#endif /* ENABLE_ADVANCED_BAUD_SELECTION */ + + /* Calculate Divisor register = 16MHz / (16 x baud rate) */ + u16Divisor = (uint16)(16000000UL / ((u8ClocksPerBit + 1) * baud_rate)); + + /* Correct for rounding errors */ + u32Remainder = + (uint32_t)(16000000UL % ((u8ClocksPerBit + 1) * baud_rate)); + + if(u32Remainder >= (((u8ClocksPerBit + 1) * baud_rate) / 2)) { + u16Divisor += 1; + } +#if (ENABLE_ADVANCED_BAUD_SELECTION) + DBG_vPrintf(DEBUG_UART_BUFFERED, "Divisor=%d, cpb=%d\n", u16Divisor, + u8ClocksPerBit); + + u32CalcBaudRate = (16000000UL / ((u8ClocksPerBit + 1) * u16Divisor)); + + DBG_vPrintf(DEBUG_UART_BUFFERED, "Calculated baud=%d\n", u32CalcBaudRate); + + i32BaudError = (int32)u32CalcBaudRate - (int32)baud_rate; + + DBG_vPrintf(DEBUG_UART_BUFFERED, "Error baud=%d\n", i32BaudError); +} +DBG_vPrintf(DEBUG_UART_BUFFERED, "Config uart=%d: Divisor=%d, cpb=%d\n", + uart_dev, u16Divisor, u8ClocksPerBit); + +/* Set the calculated clocks per bit */ +vAHI_UartSetClocksPerBit(uart_dev, u8ClocksPerBit); +#endif /* ENABLE_ADVANCED_BAUD_SELECTION */ + + /* Set the calculated divisor */ + vAHI_UartSetBaudDivisor(uart_dev, u16Divisor); +} + +/**************************************************************************** + * + * NAME: uart_driver_isr + * + * DESCRIPTION: + * Interrupt service callback for UART's + * + * PARAMETERS: Name RW Usage + * device_id R Device ID of whatever generated the + * interrupt + * item_bitmap R Which part of the device generated + * the interrupt + * + * RETURNS: + * void + * + ****************************************************************************/ +static void +uart_driver_isr(uint32_t device_id, uint32_t item_bitmap) +{ + uint8_t uart_dev; + switch(device_id) { + case E_AHI_DEVICE_UART0: + uart_dev = E_AHI_UART_0; + break; + case E_AHI_DEVICE_UART1: + uart_dev = E_AHI_UART_1; + break; + default: + return; + } + switch(item_bitmap) { + /* byte available since a long time but RX-fifo not full: */ + case E_AHI_UART_INT_TIMEOUT: + /* RX-fifo full: */ + case E_AHI_UART_INT_RXDATA: + uart_driver_rx_handler(uart_dev); + break; + case E_AHI_UART_INT_TX: + break; + case E_AHI_UART_INT_RXLINE: + /* rx-line interrupt is disabled. Should not get here */ + /* An error condition has occurred on the RxD line, such as + a break indication, framing error, parity error or over-run. */ + break; + } +} +/**************************************************************************** + * + * NAME: uart_driver_tx_in_progress + * + * DESCRIPTION: + * Returns the state of data transmission + * + * PARAMETERS: Name RW Usage + * uart_dev R UART to use, eg, E_AHI_UART_0 + * + * RETURNS: + * uint8_t: TRUE if data in buffer is being transmitted + * FALSE if all data in buffer has been transmitted by the UART + * + ****************************************************************************/ +uint8_t +uart_driver_tx_in_progress(uint8_t uart_dev) +{ + + if(u16AHI_UartReadTxFifoLevel(uart_dev) == 0) { + if((u8AHI_UartReadLineStatus(uart_dev) & E_AHI_UART_LS_TEMT) != 0) { + return FALSE; + } + } + return TRUE; +} +#ifdef UART_EXTRAS + +/**************************************************************************** + * + * NAME: uart_driver_flush + * + * DESCRIPTION: + * Flushes the buffers of the specified UART + * + * PARAMETERS: Name RW Usage + * uart_dev R UART to disable, eg, E_AHI_UART_0 + * + * RETURNS: + * void + * + ****************************************************************************/ +void +uart_driver_flush(uint8_t uart_dev) +{ + /* Disable TX Fifo empty and Rx data interrupts */ + uart_driver_disable_interrupts(uart_dev); + + /* flush hardware buffer */ + vAHI_UartReset(uart_dev, TRUE, TRUE); + vAHI_UartReset(uart_dev, FALSE, FALSE); + + /* Re-enable TX Fifo empty and Rx data interrupts */ + uart_driver_enable_interrupts(uart_dev); +} +#endif /* UART_EXTRAS */ diff --git a/platform/jn516x/dev/uart-driver.h b/platform/jn516x/dev/uart-driver.h new file mode 100644 index 000000000..322bf950d --- /dev/null +++ b/platform/jn516x/dev/uart-driver.h @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2015 NXP B.V. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of NXP B.V. nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY NXP B.V. AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL NXP B.V. OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the Contiki operating system. + * + * Author: Lee Mitchell + * Integrated into Contiki by Beshr Al Nahas + * + */ + +#ifndef UARTDRIVER_H +#define UARTDRIVER_H + +#include +#include "contiki-conf.h" + +void uart_driver_init(uint8_t uart_dev, uint8_t br, uint8_t * txbuf_data, uint16_t txbuf_size, uint8_t * rxbuf_data, uint16_t rxbuf_size, int (*uart_input_function)(unsigned char c)); +void uart_driver_write_buffered(uint8_t uart_dev, uint8_t ch); +void uart_driver_write_with_deadline(uint8_t uart_dev, uint8_t c); +uint8_t uart_driver_read(uint8_t uart_dev, uint8_t *data); +void uart_driver_write_direct(uint8_t uart_dev, uint8_t ch); +void uart_driver_set_input(uint8_t u8Uart, int (*uart_input_function)(unsigned char c)); + +void uart_driver_rx_handler(uint8_t uart_dev); +void uart_driver_enable_interrupts(uint8_t uart_dev); +void uart_driver_disable_interrupts(uint8_t uart_dev); +int8_t uart_driver_interrupt_is_enabled(uint8_t uart_dev); +void uart_driver_store_interrupts(uint8_t uart_dev); +void uart_driver_restore_interrupts(uint8_t uart_dev); + +uint8_t uart_driver_tx_in_progress(uint8_t uart_dev); + +#ifdef UART_EXTRAS +void uart_driver_flush(uint8_t uart_dev); +#endif + +#endif /* UARTDRIVER_H */ diff --git a/platform/jn516x/dev/uart0.c b/platform/jn516x/dev/uart0.c new file mode 100644 index 000000000..58432abcc --- /dev/null +++ b/platform/jn516x/dev/uart0.c @@ -0,0 +1,75 @@ +/* + * Copyright (c) 2014, SICS Swedish ICT. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the Contiki operating system. + * + */ + +/** + * \file + * UART0 drivers + * \author + * Beshr Al Nahas + * + */ + +#include +#include +#include +#include "contiki-conf.h" +#include "dev/uart0.h" +#include "uart-driver.h" + +/* Valid range for TXBUFSIZE and RXBUFSIZE: 16-2047 */ + +static unsigned char txbuf_data[UART_TX_BUFFER_SIZE]; +static unsigned char rxbuf_data[UART_RX_BUFFER_SIZE]; +static int (*uart0_input)(unsigned char c); + +uint8_t +uart0_active(void) +{ + return uart_driver_tx_in_progress(E_AHI_UART_0); +} +void +uart0_set_input(int + (*input)(unsigned char c)) +{ + uart0_input = input; + uart_driver_set_input(E_AHI_UART_0, uart0_input); +} +void +uart0_writeb(unsigned char c) +{ + uart_driver_write_buffered(E_AHI_UART_0, c); +} +void +uart0_init(uint8_t br) +{ + uart_driver_init(E_AHI_UART_0, br, txbuf_data, UART_TX_BUFFER_SIZE, rxbuf_data, UART_RX_BUFFER_SIZE, uart0_input); +} diff --git a/platform/jn516x/dev/uart0.h b/platform/jn516x/dev/uart0.h new file mode 100644 index 000000000..6f93f7147 --- /dev/null +++ b/platform/jn516x/dev/uart0.h @@ -0,0 +1,76 @@ +/* + * Copyright (c) 2014, SICS Swedish ICT. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the Contiki operating system. + * + */ + +/** + * \file + * UART0 drivers + * \author + * Beshr Al Nahas + * + */ + +#ifndef __UART0_H__ +#define __UART0_H__ + +#include +#include "contiki-conf.h" +#include "uart-driver.h" + +#define UART_DEFAULT_RX_BUFFER_SIZE 2047 +#if UART_XONXOFF_FLOW_CTRL +#define UART_DEFAULT_TX_BUFFER_SIZE 64 +#else +#define UART_DEFAULT_TX_BUFFER_SIZE 1281 +#endif +#ifdef UART_CONF_TX_BUFFER_SIZE +#define UART_TX_BUFFER_SIZE UART_CONF_TX_BUFFER_SIZE +#else +#define UART_TX_BUFFER_SIZE UART_DEFAULT_TX_BUFFER_SIZE +#endif +#ifdef UART_CONF_RX_BUFFER_SIZE +#define UART_RX_BUFFER_SIZE UART_CONF_RX_BUFFER_SIZE +#else +#define UART_RX_BUFFER_SIZE UART_DEFAULT_RX_BUFFER_SIZE +#endif +void uart0_set_input(int (*input)(unsigned char c)); +void uart0_writeb(unsigned char c); +void uart0_init(unsigned char br); + +#define uart0_write_direct(c) uart_driver_write_direct(E_AHI_UART_0, (c)) +#define uart0_disable_interrupts() uart_driver_disable_interrupts(E_AHI_UART_0) +#define uart0_enable_interrupts() uart_driver_enable_interrupts(E_AHI_UART_0) +#define uart0_restore_interrupts() uart_driver_restore_interrupts(E_AHI_UART_0) +#define uart0_store_interrupts() uart_driver_store_interrupts(E_AHI_UART_0) + +uint8_t uart0_active(void); + +#endif diff --git a/platform/jn516x/dev/uart1.c b/platform/jn516x/dev/uart1.c new file mode 100644 index 000000000..7f4c1fa8f --- /dev/null +++ b/platform/jn516x/dev/uart1.c @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2014, SICS Swedish ICT. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the Contiki operating system. + * + */ + +/** + * \file + * UART1 drivers + * \author + * Beshr Al Nahas + * + */ + +#include +#include +#include +#include "contiki-conf.h" +#include "dev/uart1.h" +#include "uart-driver.h" + +static unsigned char txbuf_data[UART1_TX_BUFFER_SIZE]; +static unsigned char rxbuf_data[UART1_RX_BUFFER_SIZE]; +static int (*uart1_input)(unsigned char c); + +uint8_t +uart1_active(void) +{ + return uart_driver_tx_in_progress(E_AHI_UART_1); +} +void +uart1_set_input(int + (*input)(unsigned char c)) +{ + uart1_input = input; + uart_driver_set_input(E_AHI_UART_1, uart1_input); +} +void +uart1_writeb(unsigned char c) +{ + uart_driver_write_buffered(E_AHI_UART_1, c); +} +void +uart1_init(uint8_t br) +{ + uart_driver_init(E_AHI_UART_1, br, txbuf_data, UART1_TX_BUFFER_SIZE, rxbuf_data, UART1_RX_BUFFER_SIZE, uart1_input); +} diff --git a/platform/jn516x/dev/uart1.h b/platform/jn516x/dev/uart1.h new file mode 100644 index 000000000..2fdc207ca --- /dev/null +++ b/platform/jn516x/dev/uart1.h @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2014, SICS Swedish ICT. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the Contiki operating system. + * + */ + +/** + * \file + * UART1 drivers + * \author + * Beshr Al Nahas + * + */ + +#ifndef __UART1_H__ +#define __UART1_H__ + +#include +#include "contiki-conf.h" + +/* Default buffer size + Valid range for TX_BUFFER_SIZE and RX_BUFFER_SIZE: 16-2047 */ +#define UART1_DEFAULT_RX_BUFFER_SIZE 16 +#define UART1_DEFAULT_TX_BUFFER_SIZE 16 + +/* Buffer size selection */ +#ifdef UART1_CONF_TX_BUFFER_SIZE +#define UART1_TX_BUFFER_SIZE UART1_CONF_TX_BUFFER_SIZE +#else +#define UART1_TX_BUFFER_SIZE UART1_DEFAULT_TX_BUFFER_SIZE +#endif + +#ifdef UART1_CONF_RX_BUFFER_SIZE +#define UART1_RX_BUFFER_SIZE UART1_CONF_RX_BUFFER_SIZE +#else +#define UART1_RX_BUFFER_SIZE UART1_DEFAULT_RX_BUFFER_SIZE +#endif + +void uart1_set_input(int (*input)(unsigned char c)); +void uart1_writeb(unsigned char c); +void uart1_init(unsigned char br); + +#define uart1_write_direct(c) uart_driver_write_direct(E_AHI_UART_1, (c)) +#define uart1_disable_interrupts() uart_driver_disable_interrupts(E_AHI_UART_1) +#define uart1_enable_interrupts() uart_driver_enable_interrupts(E_AHI_UART_1) +#define uart1_restore_interrupts() uart_driver_restore_interrupts(E_AHI_UART_1) +#define uart1_store_interrupts() uart_driver_store_interrupts(E_AHI_UART_1) + +uint8_t uart1_active(void); + +#endif diff --git a/platform/jn516x/dev/watchdog.c b/platform/jn516x/dev/watchdog.c new file mode 100644 index 000000000..395106fd3 --- /dev/null +++ b/platform/jn516x/dev/watchdog.c @@ -0,0 +1,90 @@ +/* + * Copyright (c) 2014, SICS Swedish ICT. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the Contiki operating system. + * + */ + +/** + * \file + * JN516X watchdog support. + * \author + * Beshr Al Nahas + * + */ + +#include "dev/watchdog.h" +#include "AppHardwareApi.h" + +/*---------------------------------------------------------------------------*/ +static int counter = 0; + +/*---------------------------------------------------------------------------*/ +void +watchdog_init(void) +{ + counter = 0; + watchdog_stop(); + /* enable WDT interrupt */ + vAHI_WatchdogException(1); +} +/*---------------------------------------------------------------------------*/ +void +watchdog_start(void) +{ + /* We setup the watchdog to reset the device after two seconds, + unless watchdog_periodic() is called. */ + counter--; + if(counter == 0) { + vAHI_WatchdogStart(9); /* about 8*2^(9-1)ms=2.048s timeout */ + } +} +/*---------------------------------------------------------------------------*/ +void +watchdog_periodic(void) +{ + /* This function is called periodically to restart the watchdog + timer. */ + vAHI_WatchdogRestart(); +} +/*---------------------------------------------------------------------------*/ +void +watchdog_stop(void) +{ + counter++; + if(counter == 1) { + vAHI_WatchdogStop(); + } +} +/*---------------------------------------------------------------------------*/ +void +watchdog_reboot(void) +{ + vAHI_SwReset(); +} +/*---------------------------------------------------------------------------*/ diff --git a/platform/jn516x/lib/log.c b/platform/jn516x/lib/log.c new file mode 100644 index 000000000..adf85ec1a --- /dev/null +++ b/platform/jn516x/lib/log.c @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2015, SICS Swedish ICT. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided + * with the distribution. + * 3. The name of the author may not be used to endorse or promote + * products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * This file is part of the Contiki OS + * + */ + +#include +#include + +#include "net/ip/uip.h" +#include "sys/log.h" + +/*---------------------------------------------------------------------------*/ +#if LOG_CONF_ENABLED +void +log_message(char *m1, char *m2) +{ + printf("%s%s\n", m1, m2); +} +#endif /* LOG_CONF_ENABLED */ +/*---------------------------------------------------------------------------*/ +#if UIP_LOGGING +void +uip_log(char *m) +{ + printf("uip_log: %s\n", m); +} +#endif /* UIP_LOGGING */ +/*---------------------------------------------------------------------------*/ diff --git a/platform/jn516x/lib/ringbufindex.c b/platform/jn516x/lib/ringbufindex.c new file mode 100644 index 000000000..0b2149ff7 --- /dev/null +++ b/platform/jn516x/lib/ringbufindex.c @@ -0,0 +1,149 @@ +/* + * Copyright (c) 2015, SICS Swedish ICT. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the Contiki operating system. + * + */ + +/** + * \file + * ringbufindex library. Implements basic support for ring buffers + * of any type, as opposed to the core/lib/ringbuf module which + * is only for byte arrays. Simply returns index in the ringbuf + * rather than actual elements. The ringbuf size must be power of two. + * Like the original ringbuf, this module implements atomic put and get. + * \author + * Simon Duquennoy + * based on Contiki's core/lib/ringbuf library by Adam Dunkels + */ + +#include +#include "lib/ringbufindex.h" + +/* Initialize a ring buffer. The size must be a power of two */ +void +ringbufindex_init(struct ringbufindex *r, uint8_t size) +{ + r->mask = size - 1; + r->put_ptr = 0; + r->get_ptr = 0; +} +/* Put one element to the ring buffer */ +int +ringbufindex_put(struct ringbufindex *r) +{ + /* Check if buffer is full. If it is full, return 0 to indicate that + the element was not inserted. + + XXX: there is a potential risk for a race condition here, because + the ->get_ptr field may be written concurrently by the + ringbufindex_get() function. To avoid this, access to ->get_ptr must + be atomic. We use an uint8_t type, which makes access atomic on + most platforms, but C does not guarantee this. + */ + if(((r->put_ptr - r->get_ptr) & r->mask) == r->mask) { + return 0; + } + r->put_ptr = (r->put_ptr + 1) & r->mask; + return 1; +} +/* Check if there is space to put an element. + * Return the index where the next element is to be added */ +int +ringbufindex_peek_put(const struct ringbufindex *r) +{ + /* Check if there are bytes in the buffer. If so, we return the + first one. If there are no bytes left, we return -1. + */ + if(((r->put_ptr - r->get_ptr) & r->mask) == r->mask) { + return -1; + } + return (r->put_ptr + 1) & r->mask; +} +/* Remove the first element and return its index */ +int +ringbufindex_get(struct ringbufindex *r) +{ + int get_ptr; + + /* Check if there are bytes in the buffer. If so, we return the + first one and increase the pointer. If there are no bytes left, we + return -1. + + XXX: there is a potential risk for a race condition here, because + the ->put_ptr field may be written concurrently by the + ringbufindex_put() function. To avoid this, access to ->get_ptr must + be atomic. We use an uint8_t type, which makes access atomic on + most platforms, but C does not guarantee this. + */ + if(((r->put_ptr - r->get_ptr) & r->mask) > 0) { + get_ptr = r->get_ptr; + r->get_ptr = (r->get_ptr + 1) & r->mask; + return get_ptr; + } else { + return -1; + } +} +/* Return the index of the first element + * (which will be removed if calling ringbufindex_peek) */ +int +ringbufindex_peek_get(const struct ringbufindex *r) +{ + /* Check if there are bytes in the buffer. If so, we return the + first one. If there are no bytes left, we return -1. + */ + if(((r->put_ptr - r->get_ptr) & r->mask) > 0) { + return (r->get_ptr + 1) & r->mask; + } else { + return -1; + } +} +/* Return the ring buffer size */ +int +ringbufindex_size(const struct ringbufindex *r) +{ + return r->mask + 1; +} +/* Return the number of elements currently in the ring buffer */ +int +ringbufindex_elements(const struct ringbufindex *r) +{ + return (r->put_ptr - r->get_ptr) & r->mask; +} +/* Is the ring buffer full? */ +int +ringbufindex_full(const struct ringbufindex *r) +{ + return ((r->put_ptr - r->get_ptr) & r->mask) == r->mask; +} +/* Is the ring buffer empty? */ +int +ringbufindex_empty(const struct ringbufindex *r) +{ + return ringbufindex_elements(r) == 0; +} diff --git a/platform/jn516x/lib/ringbufindex.h b/platform/jn516x/lib/ringbufindex.h new file mode 100644 index 000000000..c39f99d18 --- /dev/null +++ b/platform/jn516x/lib/ringbufindex.h @@ -0,0 +1,72 @@ +/* + * Copyright (c) 2015, SICS Swedish ICT. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the Contiki operating system. + * + */ + +/** + * \file + * Header file for the ringbufindex library + * \author + * Simon Duquennoy + */ + +#ifndef __RINGBUFINDEX_H__ +#define __RINGBUFINDEX_H__ + +#include "contiki-conf.h" + +struct ringbufindex { + uint8_t mask; + /* These must be 8-bit quantities to avoid race conditions. */ + uint8_t put_ptr, get_ptr; +}; + +/* Initialize a ring buffer. The size must be a power of two */ +void ringbufindex_init(struct ringbufindex *r, uint8_t size); +/* Put one element to the ring buffer */ +int ringbufindex_put(struct ringbufindex *r); +/* Check if there is space to put an element. + * Return the index where the next element is to be added */ +int ringbufindex_peek_put(const struct ringbufindex *r); +/* Remove the first element and return its index */ +int ringbufindex_get(struct ringbufindex *r); +/* Return the index of the first element + * (which will be removed if calling ringbufindex_peek) */ +int ringbufindex_peek_get(const struct ringbufindex *r); +/* Return the ring buffer size */ +int ringbufindex_size(const struct ringbufindex *r); +/* Return the number of elements currently in the ring buffer */ +int ringbufindex_elements(const struct ringbufindex *r); +/* Is the ring buffer full? */ +int ringbufindex_full(const struct ringbufindex *r); +/* Is the ring buffer empty? */ +int ringbufindex_empty(const struct ringbufindex *r); + +#endif /* __RINGBUFINDEX_H__ */ diff --git a/platform/jn516x/lib/slip.c b/platform/jn516x/lib/slip.c new file mode 100644 index 000000000..31828e7e3 --- /dev/null +++ b/platform/jn516x/lib/slip.c @@ -0,0 +1,447 @@ +/* + * Copyright (c) 2014, SICS Swedish ICT. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the Contiki operating system. + * + */ + +/** + * \file + * Alternative implementation for SLIP: + * 1. Accepts more than two packet + * 2. Disables UART rx interrupt when buffer is full + * (thus invoking flow control if configured) + * \author + * Niklas Finne + * Beshr Al Nahas + * + */ + +#include "contiki.h" + +#include +#include "net/ip/uip.h" +#include "net/ipv4/uip-fw.h" +#define BUF ((struct uip_tcpip_hdr *)&uip_buf[UIP_LLH_LEN]) + +#include "dev/slip.h" + +#define DEBUG 0 +#if DEBUG +#include +#define PRINTF(...) printf(__VA_ARGS__) +#define PUTCHAR(X) do { putchar(X); putchar('\n'); } while(0) +#else +#define PRINTF(...) do {} while(0) +#define PUTCHAR(X) do {} while(0) +#endif + +#define SLIP_END 0300 +#define SLIP_ESC 0333 +#define SLIP_ESC_END 0334 +#define SLIP_ESC_ESC 0335 +#define SLIP_NEUTRAL 0 /* means: none of the above */ +#define SLIP_ESC_XON 0336 +#define SLIP_ESC_XOFF 0337 +#define XON ((unsigned char)17) +#define XOFF ((unsigned char)19) +#if UART_XONXOFF_FLOW_CTRL +volatile unsigned char xonxoff_state = XON; +#endif /* UART_XONXOFF_FLOW_CTRL */ + +PROCESS(slip_process, "SLIP driver"); + +#include "dev/uart0.h" +#define STORE_UART_INTERRUPTS uart0_store_interrupts +#define RESTORE_UART_INTERRUPTS uart0_restore_interrupts +#define DISABLE_UART_INTERRUPTS uart0_disable_interrupts +#define ENABLE_UART_INTERRUPTS uart0_enable_interrupts + +/** + * @brief A block of code may be made atomic by wrapping it with this + * macro. Something which is atomic cannot be interrupted by interrupts. + */ +/* A specific ATMOIC that disables UART interrupts only */ +#define ATOMIC(blah) \ + { \ + /* STORE_UART_INTERRUPTS(); */ \ + DISABLE_UART_INTERRUPTS(); \ + { blah } \ + /* RESTORE_UART_INTERRUPTS(); */ \ + ENABLE_UART_INTERRUPTS(); \ + } + +/* A generic ATMOIC that disables all interrupts */ +#define GLOBAL_ATOMIC(blah) \ + { \ + MICRO_DISABLE_INTERRUPTS(); \ + { blah } \ + MICRO_ENABLE_INTERRUPTS(); \ + } + +#if 1 +#define SLIP_STATISTICS(statement) +#else +uint16_t slip_drop_bytes, slip_overflow, slip_error_drop; +/* No used in this file */ +uint16_t slip_rubbish, slip_twopackets, slip_ip_drop; +unsigned long slip_received, slip_frames; +#define SLIP_STATISTICS(statement) statement +#endif + +/* Must be at least one byte larger than UIP_BUFSIZE (for SLIP_END)! */ +#ifdef SLIP_CONF_RX_BUFSIZE +#define RX_BUFSIZE SLIP_CONF_RX_BUFSIZE + +#if RX_BUFSIZE < (UIP_BUFSIZE - UIP_LLH_LEN + 16) +#error "SLIP_CONF_RX_BUFSIZE too small for UIP_BUFSIZE" +#endif + +#else +#define RX_BUFSIZE (UIP_CONF_BUFFER_SIZE * 2) +#endif + +/* + * Variables begin and end manage the buffer space in a cyclic + * fashion. The first used byte is at begin and end is one byte past + * the last. I.e. [begin, end) is the actively used space. + */ + +static volatile uint16_t begin, end, end_counter; +static uint8_t rxbuf[RX_BUFSIZE]; +static volatile uint8_t is_dropping = 0; +static volatile uint8_t is_full = 0; + +static void (*input_callback)(void) = NULL; +/*---------------------------------------------------------------------------*/ +void +slip_set_input_callback(void (*c)(void)) +{ + input_callback = c; +} +static void +slip_write_char(uint8_t c) +{ + /* Escape SLIP control characters */ + if(c == SLIP_END) { + slip_arch_writeb(SLIP_ESC); + c = SLIP_ESC_END; + } else if(c == SLIP_ESC) { + slip_arch_writeb(SLIP_ESC); + c = SLIP_ESC_ESC; + } +#if UART_XONXOFF_FLOW_CTRL + /* Escape XON/XOFF characters */ + else if(c == XON) { + slip_arch_writeb(SLIP_ESC); + c = SLIP_ESC_XON; + } else if(c == XOFF) { + slip_arch_writeb(SLIP_ESC); + c = SLIP_ESC_XOFF; + } +#endif /* UART_XONXOFF_FLOW_CTRL */ + slip_arch_writeb(c); +} +/*---------------------------------------------------------------------------*/ +uint8_t +slip_write(const void *_ptr, int len) +{ + const uint8_t *ptr = _ptr; + uint16_t i; + uint8_t c; + + slip_arch_writeb(SLIP_END); + + for(i = 0; i < len; ++i) { + c = *ptr++; + slip_write_char(c); + } + slip_arch_writeb(SLIP_END); + + return len; +} +/*---------------------------------------------------------------------------*/ +/* slip_send: forward (IPv4) packets with {UIP_FW_NETIF(..., slip_send)} + * was used in slip-bridge.c + */ +uint8_t +slip_send(void) +{ + uint16_t i; + uint8_t *ptr; + uint8_t c; + + slip_arch_writeb(SLIP_END); + + ptr = &uip_buf[UIP_LLH_LEN]; + for(i = 0; i < uip_len; ++i) { + if(i == UIP_TCPIP_HLEN) { + ptr = (uint8_t *)uip_appdata; + } + c = *ptr++; + slip_write_char(c); + } + slip_arch_writeb(SLIP_END); + + return UIP_FW_OK; +} +/*---------------------------------------------------------------------------*/ +static void +rxbuf_init(void) +{ + begin = end = end_counter = 0; + is_dropping = 0; +} +/*---------------------------------------------------------------------------*/ +/* Upper half does the polling. */ +static uint16_t +slip_poll_handler(uint8_t *outbuf, uint16_t blen) +{ + uint16_t len; + uint16_t pos; + uint8_t c; + uint8_t state; + + if(end_counter == 0 && is_full == 0) { + return 0; + } + for(len = 0, pos = begin, state = c = SLIP_NEUTRAL; + len < blen + 1; /* +1 for SLIP_END! */ + ) { + + c = rxbuf[pos++]; + + if(pos == RX_BUFSIZE) { + /* Circular buffer: warp around */ + pos = 0; + } + if(c == SLIP_END) { + /* End of packet */ + break; + } + if(len >= blen) { + /* End of buffer with no SLIP_END + * ==> something wrong happened */ + break; + } + switch(c) { + case SLIP_ESC: + state = SLIP_ESC; + break; + case SLIP_ESC_END: + if(state == SLIP_ESC) { + outbuf[len++] = SLIP_END; + state = SLIP_NEUTRAL; + } else { + outbuf[len++] = c; + } break; + case SLIP_ESC_ESC: + if(state == SLIP_ESC) { + outbuf[len++] = SLIP_ESC; + state = SLIP_NEUTRAL; + } else { + outbuf[len++] = c; + } break; +#if UART_XONXOFF_FLOW_CTRL + case SLIP_ESC_XON: + if(state == SLIP_ESC) { + outbuf[len++] = XON; + state = SLIP_NEUTRAL; + } else { + outbuf[len++] = c; + } break; + case SLIP_ESC_XOFF: + if(state == SLIP_ESC) { + outbuf[len++] = XOFF; + state = SLIP_NEUTRAL; + } else { + outbuf[len++] = c; + } break; +#endif /* UART_XONXOFF_FLOW_CTRL */ + default: + outbuf[len++] = c; + state = SLIP_NEUTRAL; + break; + } + } + + /* Update counters */ + if(c == SLIP_END) { + ATOMIC(begin = pos; + if(end_counter) { + end_counter--; + } + ) + PUTCHAR('P'); + } else { + /* Something went wrong, no SLIP_END found, drop everything */ + ATOMIC(rxbuf_init(); + is_dropping = 1; + ) + SLIP_STATISTICS(slip_error_drop++); + len = 0; + PRINTF("SLIP: *** out of sync!\n"); + } + + if(end_counter > 0) { + /* One more packet is buffered, need to be polled again! */ + process_poll(&slip_process); + } + return len; +} +/*---------------------------------------------------------------------------*/ +PROCESS_THREAD(slip_process, ev, data) +{ + PROCESS_BEGIN(); + + rxbuf_init(); + + while(1) { + PROCESS_YIELD_UNTIL(ev == PROCESS_EVENT_POLL); + + /* Move packet from rxbuf to buffer provided by uIP. */ + uip_len = slip_poll_handler(&uip_buf[UIP_LLH_LEN], + UIP_BUFSIZE - UIP_LLH_LEN); + + PRINTF("SLIP: recv bytes %u frames RECV: %u. is_full %u, is_dropping %u.\n", + end_counter, uip_len, is_full, is_dropping); + + /* We have free space now, resume slip RX */ + if(is_full) { + is_full = 0; + ENABLE_UART_INTERRUPTS(); + } + + if(uip_len > 0) { + if(input_callback) { + input_callback(); + } +#ifdef SLIP_CONF_TCPIP_INPUT + SLIP_CONF_TCPIP_INPUT(); +#else + tcpip_input(); +#endif + } + } + + PROCESS_END(); +} +/*---------------------------------------------------------------------------*/ +/* Return status from slip_input_byte: + * -1 means RX buffer overflow ==> stop reading + * 0 means do not exit power saving mode + * 1 means exit power saving mode + **/ +int +slip_input_byte(unsigned char c) +{ + static int in_frame = 0; + uint16_t next, next_next; + int error_return_code = is_full ? -1 : 0; + int success_return_code = is_full ? -1 : 1; + + SLIP_STATISTICS(slip_received++); + +#if UART_XONXOFF_FLOW_CTRL + if(c == XOFF || c == XON) { + xonxoff_state = c; + return 1; + } else { + /* ANY char would be XON */ + xonxoff_state = XON; + } +#endif /* UART_XONXOFF_FLOW_CTRL */ + + if(is_dropping) { + /* Make sure to drop full frames when overflow or + * out of sync happens */ + if(c != SLIP_END) { + SLIP_STATISTICS(slip_drop_bytes++); + } else { + is_dropping = 0; + in_frame = 0; + } + return error_return_code; + } + + if(!in_frame && c == SLIP_END) { + /* Ignore slip end when not receiving frame */ + return error_return_code; + /* increment and wrap */ + } + next = end + 1; + if(next >= RX_BUFSIZE) { + next = 0; + } + next_next = next + 1; + if(next_next >= RX_BUFSIZE) { + next_next = 0; + /* Next byte will overflow. Stop accepting. */ + } + if(next_next == begin) { + is_full = 1; + /* disable UART interrupts */ + DISABLE_UART_INTERRUPTS(); + process_poll(&slip_process); + } + + /* Buffer is full. We can't store anymore. + * Shall not happen normally, + * because of overflow protection above. */ + if(next == begin) { + is_dropping = 1; + SLIP_STATISTICS(slip_overflow++); + is_full = 1; + /* disable UART interrupts */ + DISABLE_UART_INTERRUPTS(); + process_poll(&slip_process); + return -1; + } + + rxbuf[end] = c; + end = next; + in_frame = 1; + + if(c == SLIP_END) { + in_frame = 0; + end_counter++; + SLIP_STATISTICS(slip_frames++); + process_poll(&slip_process); + return success_return_code; + } + return error_return_code; +} +/*---------------------------------------------------------------------------*/ +#if SLIP_BRIDGE_CONF_NO_PUTCHAR +int +putchar(int c) +{ + uart0_writeb(c); + return 1; +} +#endif diff --git a/platform/jn516x/lib/sprintf.c b/platform/jn516x/lib/sprintf.c new file mode 100644 index 000000000..500951e92 --- /dev/null +++ b/platform/jn516x/lib/sprintf.c @@ -0,0 +1,235 @@ +/* + File: printf.c + + Copyright (c) 2004,2008 Kustaa Nyholm / SpareTimeLabs + + All rights reserved. + + Redistribution and use in source and binary forms, with or without modification, + are permitted provided that the following conditions are met: + + Redistributions of source code must retain the above copyright notice, this list + of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above copyright notice, this + list of conditions and the following disclaimer in the documentation and/or other + materials provided with the distribution. + + Neither the name of the Kustaa Nyholm or SpareTimeLabs nor the names of its + contributors may be used to endorse or promote products derived from this software + without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + OF SUCH DAMAGE. + + */ + +/* + * This is BSD code obtained from http://www.sparetimelabs.com/printfrevisited/index.html + * From the web page: + * "The code is GPL and BSD lincensed, download the BSD licensed version from the link + * above or use the GPL licensed code from this page below." + * + * modified by Beshr Al Nahas and Simon Duquennoy + */ + +#include "contiki-conf.h" +#include +#include +#include +#include +#include +#include "dev/uart0.h" + +static char *bf, buf[14], uc, zs; +static unsigned int num; + +static void +out(char c) +{ + *bf++ = c; +} +static void +outDgt(char dgt) +{ + out(dgt + (dgt < 10 ? '0' : (uc ? 'A' : 'a') - 10)); + zs = 1; +} +static void +divOut(unsigned int div) +{ + unsigned char dgt = 0; + while(num >= div) { + num -= div; + dgt++; + } + if(zs || dgt > 0) { + outDgt(dgt); + } +} +int +vsnprintf(char *str, size_t n, const char *fmt, __VALIST va) +{ + char ch, *p, *str_orig = str; + char next_ch; + + while((ch = *fmt++) && str - str_orig < n) { + if(ch != '%') { + *str++ = ch; + } else { + char lz = 0; + char w = 0; + ch = *(fmt++); + if(ch == '0') { + ch = *(fmt++); + lz = 1; + } + if(ch >= '0' && ch <= '9') { + w = 0; + while(ch >= '0' && ch <= '9') { + w = (((w << 2) + w) << 1) + ch - '0'; + ch = *fmt++; + } + } + bf = buf; + p = bf; + zs = 0; +start_format: + next_ch = *fmt; + switch(ch) { + case 0: + goto abort; + case 'l': + if(next_ch == 'x' + || next_ch == 'X' + || next_ch == 'u' + || next_ch == 'd') { + ch = *(fmt++); + goto start_format; + } + case 'u': + case 'd': + num = va_arg(va, unsigned int); + if(ch == 'd' && (int)num < 0) { + num = -(int)num; + out('-'); + } + divOut(1000000000); + divOut(100000000); + divOut(10000000); + divOut(1000000); + divOut(100000); + divOut(10000); + divOut(1000); + divOut(100); + divOut(10); + outDgt(num); + break; + case 'p': + case 'x': + case 'X': + uc = ch == 'X'; + num = va_arg(va, unsigned int); + /* divOut(0x100000000UL); */ + divOut(0x10000000); + divOut(0x1000000); + divOut(0x100000); + divOut(0x10000); + divOut(0x1000); + divOut(0x100); + divOut(0x10); + outDgt(num); + break; + case 'c': + out((char)(va_arg(va, int))); + break; + case 's': + p = va_arg(va, char *); + break; + case '%': + out('%'); + default: + break; + } + *bf = 0; + bf = p; + + while(*bf++ && w > 0) { + w--; + } + while(w-- > 0) { + if(str - str_orig < n) { + *str++ = lz ? '0' : ' '; + } else { + goto abort; + } + } + while((ch = *p++)) { + if(str - str_orig < n) { + *str++ = ch; + } else { + goto abort; + } + } + } + } + +abort: + if(str - str_orig < n) { + *str = '\0'; + } else { + *(--str) = '\0'; + } return str - str_orig; +} +int +sprintf(char *str, const char *fmt, ...) +{ + int m; + __VALIST va; + va_start(va, fmt); + m = vsnprintf(str, 0xffffffff, fmt, va); + va_end(va); + return m; +} +int +snprintf(char *str, size_t n, const char *fmt, ...) +{ + int m; + __VALIST va; + va_start(va, fmt); + m = vsnprintf(str, n, fmt, va); + va_end(va); + return m; +} +int +printf(const char *fmt, ...) +{ + int m, i; + char str[256]; + __VALIST va; + va_start(va, fmt); + m = vsnprintf(str, sizeof(str), fmt, va); + va_end(va); + for(i = 0; i < m; i++) { + putchar(str[i]); + } + return m; +} +int +puts(const char *s) +{ + char c; + while((c = *s++) != '\0') { + putchar(c); + } + putchar('\n'); + return strlen(s); +} diff --git a/platform/jn516x/platform-conf.h b/platform/jn516x/platform-conf.h new file mode 100644 index 000000000..fa289fc2f --- /dev/null +++ b/platform/jn516x/platform-conf.h @@ -0,0 +1,262 @@ +/* + * Copyright (c) 2015, SICS Swedish ICT. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the Contiki operating system. + * + */ + +#ifndef PLATFORM_CONF_H +#define PLATFORM_CONF_H + +#include +#include + +#undef putchar + +/* Delay between GO signal and SFD + * Measured 153us between GO and preamble. Add 5 bytes (preamble + SFD) air time: 153+5*32 = 313 */ +#define RADIO_DELAY_BEFORE_TX ((unsigned)US_TO_RTIMERTICKS(313)) +/* Delay between GO signal and start listening + * Measured 104us: between GO signal and start listening */ +#define RADIO_DELAY_BEFORE_RX ((unsigned)US_TO_RTIMERTICKS(104)) + +/* Micromac configuration */ + +#ifndef MIRCOMAC_CONF_BUF_NUM +#define MIRCOMAC_CONF_BUF_NUM 2 +#endif + +#ifndef MICROMAC_CONF_CHANNEL +#define MICROMAC_CONF_CHANNEL 26 +#endif + +#ifdef RF_CHANNEL +#define MICROMAC_CONF_CHANNEL RF_CHANNEL +#endif + +/* Timer conversion + * RTIMER 16M = 256 * 62500(RADIO) == 2^8 * 62500 */ +#define RADIO_TO_RTIMER(X) ((rtimer_clock_t)((X) << (int32_t)8L)) + +#define DR_11744_DIO2 12 +#define DR_11744_DIO3 13 +#define DR_11744_DIO4 14 +#define DR_11744_DIO5 15 +#define DR_11744_DIO6 16 +#define DR_11744_DIO7 17 + +#define TSCH_DEBUG 0 + +#if TSCH_DEBUG +#define TSCH_DEBUG_INIT() do { \ + vAHI_DioSetDirection(0, (1 << DR_11744_DIO2) | (1 << DR_11744_DIO3) | (1 << DR_11744_DIO4) | (1 << DR_11744_DIO5) | (1 << DR_11744_DIO6) | (1 << DR_11744_DIO7)); \ + vAHI_DioSetOutput(0, (1 << DR_11744_DIO2) | (1 << DR_11744_DIO3) | (1 << DR_11744_DIO4) | (1 << DR_11744_DIO5) | (1 << DR_11744_DIO6) | (1 << DR_11744_DIO7)); } while(0); +#define TSCH_DEBUG_INTERRUPT() do { \ + static dio_state = 0; \ + dio_state = !dio_state; \ + if(dio_state) { \ + vAHI_DioSetOutput((1 << DR_11744_DIO2), 0); \ + } else { \ + vAHI_DioSetOutput(0, (1 << DR_11744_DIO2)); \ + } \ +} while(0); +#define TSCH_DEBUG_RX_EVENT() do { \ + static dio_state = 0; \ + dio_state = !dio_state; \ + if(dio_state) { \ + vAHI_DioSetOutput((1 << DR_11744_DIO4), 0); \ + } else { \ + vAHI_DioSetOutput(0, (1 << DR_11744_DIO4)); \ + } \ +} while(0); +#define TSCH_DEBUG_TX_EVENT() do { \ + static dio_state = 0; \ + dio_state = !dio_state; \ + if(dio_state) { \ + vAHI_DioSetOutput((1 << DR_11744_DIO5), 0); \ + } else { \ + vAHI_DioSetOutput(0, (1 << DR_11744_DIO5)); \ + } \ +} while(0); +#define TSCH_DEBUG_SLOT_START() do { \ + static dio_state = 0; \ + dio_state = !dio_state; \ + if(dio_state) { \ + vAHI_DioSetOutput((1 << DR_11744_DIO3), 0); \ + } else { \ + vAHI_DioSetOutput(0, (1 << DR_11744_DIO3)); \ + } \ +} while(0); +#define TSCH_DEBUG_SLOT_END() +#endif /* TSCH_DEBUG */ + +#ifndef BAUD2UBR +#define BAUD2UBR(X) (X) +#endif /* BAUD2UBR */ + +/* UART baud rates */ +#define UART_RATE_4800 0 +#define UART_RATE_9600 1 +#define UART_RATE_19200 2 +#define UART_RATE_38400 3 +#define UART_RATE_76800 4 +#define UART_RATE_115200 5 +#define UART_RATE_230400 6 +#define UART_RATE_460800 7 +#define UART_RATE_500000 8 +#define UART_RATE_576000 9 +#define UART_RATE_921600 10 +#define UART_RATE_1000000 11 + +#define PLATFORM_HAS_LEDS 1 +#define PLATFORM_HAS_BUTTON (SENSOR_BOARD_DR1174 == 1) +#define PLATFORM_HAS_LIGHT (SENSOR_BOARD_DR1175 == 1) +#define PLATFORM_HAS_HT (SENSOR_BOARD_DR1175 == 1) +#define PLATFORM_HAS_POT (SENSOR_BOARD_DR1199 == 1) +#define PLATFORM_HAS_BATTERY 0 /* sensor driver not implemented */ +#define PLATFORM_HAS_SHT11 0 +#define PLATFORM_HAS_RADIO 1 + +/* CPU target speed in Hz + * RTIMER and peripherals clock is F_CPU/2 */ +#define F_CPU 32000000UL + +/* LED ports */ +/* + #define LEDS_PxDIR P5DIR + #define LEDS_PxOUT P5OUT + #define LEDS_CONF_RED 0x10 + #define LEDS_CONF_GREEN 0x20 + #define LEDS_CONF_YELLOW 0x40 + #define JENNIC_CONF_BUTTON_PIN (IRQ_DIO9|IRQ_DIO10) + */ + +#define CC_CONF_REGISTER_ARGS 1 +#define CC_CONF_FUNCTION_POINTER_ARGS 1 +#define CC_CONF_VA_ARGS 1 +#define CC_CONF_INLINE inline + +#define CCIF +#define CLIF + +#ifdef HAVE_STDINT_H +#include +#else +#ifndef uint8_t +typedef unsigned char uint8_t; +typedef unsigned short uint16_t; +typedef unsigned long uint32_t; +typedef signed char int8_t; +typedef short int16_t; +typedef long int32_t; +typedef unsigned long long uint64_t; +typedef long long int64_t; +#endif +#endif /* !HAVE_STDINT_H */ + +/* Types for clocks and uip_stats */ +typedef uint16_t uip_stats_t; +typedef uint32_t clock_time_t; + +/* Core rtimer.h defaults to 16 bit timer unless RTIMER_CLOCK_LT is defined */ +typedef uint32_t rtimer_clock_t; +#define RTIMER_CLOCK_LT(a, b) ((int32_t)((a) - (b)) < 0) +/* 10ms timer tick */ +#define CLOCK_CONF_SECOND 100 + +/* Shall we calibrate the DCO periodically? */ +#define DCOSYNCH_CONF_ENABLED 1 + +/* How often shall we attempt to calibrate DCO? + * PS: It should be calibrated upon temperature changes, + * but the naive approach of periodic calibration is fine too */ +#ifndef DCOSYNCH_PERIOD +#define DCOSYNCH_PERIOD (5 * 60) +#endif /* VCO_CALIBRATION_INTERVAL */ + +/* Disable UART HW flow control */ +#ifndef UART_HW_FLOW_CTRL +#define UART_HW_FLOW_CTRL 0 +#endif /* UART_HW_FLOW_CTRL */ + +/* Disable UART SW flow control */ +#ifndef UART_XONXOFF_FLOW_CTRL +#define UART_XONXOFF_FLOW_CTRL 1 +#endif /* UART_XONXOFF_FLOW_CTRL */ + +#ifndef UART_BAUD_RATE +#define UART_BAUD_RATE UART_RATE_1000000 +#endif /* UART_BAUD_RATE */ + +#ifndef UART1_BAUD_RATE +#define UART1_BAUD_RATE UART_RATE_1000000 +#endif +#define ENABLE_ADVANCED_BAUD_SELECTION (UART_BAUD_RATE > UART_RATE_115200) + +/* Set this to zero only if we are using SLIP */ +#ifndef SLIP_BRIDGE_CONF_NO_PUTCHAR +#define SLIP_BRIDGE_CONF_NO_PUTCHAR 1 +#endif /* SLIP_BRIDGE_CONF_NO_PUTCHAR */ + +/* Enable this to get the 32.768kHz oscillator */ +#ifndef USE_EXTERNAL_OSCILLATOR +#define USE_EXTERNAL_OSCILLATOR 0 +#endif /* USE_EXTERNAL_OSCILLATOR */ + +/* Extension of LED definitions from leds.h for various JN516x dev boards +JN516x Dongle: + LEDS_RED Red LED on dongle + LEDS_GREEN Green LED on dongle + Note: Only one LED can be switch on at the same time + +DR1174-only: + LEDS_GP0 LED D3 on DR1174 + LEDS_GP1 LED D6 on DR1174 + +DR1174+DR1199: + LEDS_RED LED D1 on DR1199 + LEDS_GREEN LED D2 on DR1199 + LEDS_BLUE LED D3 on DR1199 + LEDS_GP0 LED D3 on DR1174 + LEDS_GP1 LED D6 on DR1174 + +DR1174+DR1175: + LEDS_RED Red led in RGB-led with level control on DR1175 + LEDS_GREEN Green led in RGB-led with level control on DR1175 + LEDS_BLUE Blue led in RGB-led with level control on DR1175 + LEDS_WHITE White power led with level control on DR1175 + LEDS_GP0 LEDS D3 on DR1174 + LEDS_GP1 LEDS D6 on DR1174 +*/ +#define LEDS_WHITE 8 +#define LEDS_GP0 16 +#define LEDS_GP1 32 +#define LEDS_GP2 64 +#define LEDS_GP3 128 +#define LEDS_CONF_ALL 255 +#endif /* PLATFORM_CONF_H */ diff --git a/platform/mbxxx/contiki-main.c b/platform/mbxxx/contiki-main.c index 020591aff..c383b0f61 100644 --- a/platform/mbxxx/contiki-main.c +++ b/platform/mbxxx/contiki-main.c @@ -76,18 +76,8 @@ #include "net/ipv6/uip-ds6.h" #endif /* NETSTACK_CONF_WITH_IPV6 */ -#define DEBUG 1 -#if DEBUG -#include -#define PRINTF(...) printf(__VA_ARGS__) -#define PRINT6ADDR(addr) PRINTF(" %02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x ", ((uint8_t *)addr)[0], ((uint8_t *)addr)[1], ((uint8_t *)addr)[2], ((uint8_t *)addr)[3], ((uint8_t *)addr)[4], ((uint8_t *)addr)[5], ((uint8_t *)addr)[6], ((uint8_t *)addr)[7], ((uint8_t *)addr)[8], ((uint8_t *)addr)[9], ((uint8_t *)addr)[10], ((uint8_t *)addr)[11], ((uint8_t *)addr)[12], ((uint8_t *)addr)[13], ((uint8_t *)addr)[14], ((uint8_t *)addr)[15]) -#define PRINTLLADDR(lladdr) PRINTF(" %02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x ",lladdr.u8[0], lladdr.u8[1], lladdr.u8[2], lladdr.u8[3],lladdr.u8[4], lladdr.u8[5], lladdr.u8[6], lladdr.u8[7]) -#else -#define PRINTF(...) -#define PRINT6ADDR(addr) -#define PRINTLLADDR(addr) -#endif - +#define DEBUG DEBUG_PRINT +#include "net/ip/uip-debug.h" #if NETSTACK_CONF_WITH_IPV6 PROCINIT(&tcpip_process, &sensors_process); @@ -183,13 +173,13 @@ main(void) set_rime_addr(); - printf("%s %s, channel check rate %lu Hz\n", + printf("%s %s, channel check rate %d Hz\n", NETSTACK_MAC.name, NETSTACK_RDC.name, CLOCK_SECOND / (NETSTACK_RDC.channel_check_interval() == 0 ? 1: NETSTACK_RDC.channel_check_interval())); printf("802.15.4 PAN ID 0x%x, EUI-%d:", IEEE802154_CONF_PANID, UIP_CONF_LL_802154?64:16); - uip_debug_lladdr_print(&linkaddr_node_addr); + uip_debug_lladdr_print((const uip_lladdr_t *)&linkaddr_node_addr); printf(", radio channel %u\n", RF_CHANNEL); procinit_init(); @@ -251,15 +241,13 @@ main(void) - ENERGEST_OFF(ENERGEST_TYPE_CPU); - /* watchdog_stop(); */ - ENERGEST_ON(ENERGEST_TYPE_LPM); + /* watchdog_stop(); */ + ENERGEST_SWITCH(ENERGEST_TYPE_CPU, ENERGEST_TYPE_LPM); /* Go to idle mode. */ halSleepWithOptions(SLEEPMODE_IDLE,0); /* We are awake. */ /* watchdog_start(); */ - ENERGEST_OFF(ENERGEST_TYPE_LPM); - ENERGEST_ON(ENERGEST_TYPE_CPU); + ENERGEST_SWITCH(ENERGEST_TYPE_LPM, ENERGEST_TYPE_CPU); } diff --git a/platform/mbxxx/dev/temperature-sensor.c b/platform/mbxxx/dev/temperature-sensor.c index c4418c55a..520032cb4 100644 --- a/platform/mbxxx/dev/temperature-sensor.c +++ b/platform/mbxxx/dev/temperature-sensor.c @@ -76,7 +76,6 @@ value(int type) { static uint16_t ADCvalue; static int16_t volts; - uint16_t scale=1; halStartAdcConversion(ADC_USER_APP, ADC_REF_INT, ADC_SOURCE(halGetADCChannelFromGPIO(TEMPERATURE_SENSOR_GPIO),ADC_MUX_VREF2), ADC_CONVERSION_TIME_US_4096); diff --git a/platform/mbxxx/platform-conf.h b/platform/mbxxx/platform-conf.h index 8e8def73d..6b811ec96 100644 --- a/platform/mbxxx/platform-conf.h +++ b/platform/mbxxx/platform-conf.h @@ -62,7 +62,6 @@ /* Platform-dependent definitions */ #define CC_CONF_REGISTER_ARGS 0 #define CC_CONF_FUNCTION_POINTER_ARGS 1 -#define CC_CONF_FASTCALL #define CC_CONF_VA_ARGS 1 #define CC_CONF_INLINE inline diff --git a/platform/micaz/init-net.c b/platform/micaz/init-net.c index f4289f567..271b402c8 100644 --- a/platform/micaz/init-net.c +++ b/platform/micaz/init-net.c @@ -50,6 +50,7 @@ #include "net/netstack.h" #include "net/mac/frame802154.h" #include "net/linkaddr.h" +#include "net/queuebuf.h" #include "dev/ds2401.h" #include "sys/node-id.h" diff --git a/platform/micaz/node-id.c b/platform/micaz/node-id.c index 00f1ed13a..998dd1b0d 100644 --- a/platform/micaz/node-id.c +++ b/platform/micaz/node-id.c @@ -33,6 +33,7 @@ #include "contiki-conf.h" #include "sys/node-id.h" +#include "dev/eeprom.h" unsigned short node_id = 0; diff --git a/platform/minimal-net/Makefile.minimal-net b/platform/minimal-net/Makefile.minimal-net index dd7632d92..2c2399617 100644 --- a/platform/minimal-net/Makefile.minimal-net +++ b/platform/minimal-net/Makefile.minimal-net @@ -14,7 +14,7 @@ CONTIKI_TARGET_SOURCEFILES = contiki-main.c clock.c leds.c leds-arch.c cfs-posix ifeq ($(HOST_OS),Windows) CONTIKI_TARGET_SOURCEFILES += wpcap-drv.c wpcap.c else -CONTIKI_TARGET_SOURCEFILES += tapdev-drv.c tapdev.c tapdev6.c +CONTIKI_TARGET_SOURCEFILES += tapdev-drv.c tapdev.c tapdev6.c linuxradio-drv.c endif CONTIKI_SOURCEFILES += $(CONTIKI_TARGET_SOURCEFILES) diff --git a/platform/minimal-net/contiki-conf.h b/platform/minimal-net/contiki-conf.h index e736b363d..9fa2e225f 100644 --- a/platform/minimal-net/contiki-conf.h +++ b/platform/minimal-net/contiki-conf.h @@ -35,10 +35,18 @@ #include #include +#ifndef _WIN32 +#include +#endif + +struct select_callback { + int (* set_fd)(fd_set *fdr, fd_set *fdw); + void (* handle_fd)(fd_set *fdr, fd_set *fdw); +}; +int select_set_callback(int fd, const struct select_callback *callback); #define CC_CONF_REGISTER_ARGS 1 #define CC_CONF_FUNCTION_POINTER_ARGS 1 -#define CC_CONF_FASTCALL #define CC_CONF_VA_ARGS 1 #define CCIF @@ -88,9 +96,9 @@ typedef unsigned short uip_stats_t; */ #define WEBSERVER_CONF_STATUSPAGE 1 -/* RPL currently works only on Windows. *nix would require converting the tun interface to two pcap tees. */ +/* RPL currently works only on Windows. *nix would require converting the tun interface to two pcap tees. */ //#define RPL_BORDER_ROUTER 0 -#endif +#endif #if UIP_CONF_IPV6_RPL /* RPL motes use the uip.c link layer address or optionally the harded coded address (but without the prefix!) @@ -121,7 +129,7 @@ typedef unsigned short uip_stats_t; * e.g. the jackdaw RNDIS <-> repeater. Then RPL will configure on the radio network and the RF motes will * be reached through bbbb::. * Possibly minimal-net RPL motes could also be added to this interface? - * + * */ #undef UIP_CONF_ROUTER #define UIP_CONF_ROUTER 1 @@ -151,6 +159,8 @@ typedef unsigned short uip_stats_t; /* Not used but avoids compile errors while sicslowpan.c is being developed */ #define SICSLOWPAN_CONF_COMPRESSION SICSLOWPAN_COMPRESSION_HC06 +#define NETSTACK_CONF_LINUXRADIO_DEV "wpan0" + #define UIP_CONF_UDP 1 #define UIP_CONF_TCP 1 diff --git a/platform/native/Makefile.native b/platform/native/Makefile.native index 198dbabee..504c91a3a 100644 --- a/platform/native/Makefile.native +++ b/platform/native/Makefile.native @@ -17,7 +17,7 @@ ifeq ($(HOST_OS),Windows) CONTIKI_TARGET_SOURCEFILES += wpcap-drv.c wpcap.c TARGET_LIBFILES = /lib/w32api/libws2_32.a /lib/w32api/libiphlpapi.a else -CONTIKI_TARGET_SOURCEFILES += tapdev-drv.c +CONTIKI_TARGET_SOURCEFILES += tapdev-drv.c linuxradio-drv.c #math ifneq ($(CONTIKI_WITH_IPV6),1) CONTIKI_TARGET_SOURCEFILES += tapdev.c diff --git a/platform/native/contiki-conf.h b/platform/native/contiki-conf.h index 5ce72c09e..e011bff96 100644 --- a/platform/native/contiki-conf.h +++ b/platform/native/contiki-conf.h @@ -46,7 +46,6 @@ int select_set_callback(int fd, const struct select_callback *callback); #define CC_CONF_REGISTER_ARGS 1 #define CC_CONF_FUNCTION_POINTER_ARGS 1 -#define CC_CONF_FASTCALL #define CC_CONF_VA_ARGS 1 /*#define CC_CONF_INLINE inline*/ @@ -101,6 +100,8 @@ typedef unsigned short uip_stats_t; #define NETSTACK_CONF_NETWORK sicslowpan_driver +#define NETSTACK_CONF_LINUXRADIO_DEV "wpan0" + #define UIP_CONF_ROUTER 1 #define SICSLOWPAN_CONF_COMPRESSION SICSLOWPAN_COMPRESSION_HC06 diff --git a/platform/native/contiki-main.c b/platform/native/contiki-main.c index 780dce7c6..9c4639b16 100644 --- a/platform/native/contiki-main.c +++ b/platform/native/contiki-main.c @@ -84,7 +84,9 @@ static int select_max = 0; SENSORS(&pir_sensor, &vib_sensor, &button_sensor); static uint8_t serial_id[] = {0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08}; +#if !NETSTACK_CONF_WITH_IPV6 static uint16_t node_id = 0x0102; +#endif /* !NETSTACK_CONF_WITH_IPV6 */ /*---------------------------------------------------------------------------*/ int select_set_callback(int fd, const struct select_callback *callback) diff --git a/platform/remote/README.md b/platform/remote/README.md index 7172ebd02..387591caa 100644 --- a/platform/remote/README.md +++ b/platform/remote/README.md @@ -45,6 +45,7 @@ In terms of hardware support, the following drivers have been implemented: * General-Purpose Timers. NB: GPT0 is in use by the platform code, the remaining GPTs are available for application development. * ADC * Cryptoprocessor (AES-CCM-256, SHA-256) + * Public Key Accelerator (ECDH, ECDSA) * LEDs * Buttons * Internal/external 2.4GHz antenna switch controllable by SW. diff --git a/platform/seedeye/contiki-seedeye-main.c b/platform/seedeye/contiki-seedeye-main.c index dabb8f126..5394b8e02 100644 --- a/platform/seedeye/contiki-seedeye-main.c +++ b/platform/seedeye/contiki-seedeye-main.c @@ -165,15 +165,13 @@ main(int argc, char **argv) r = process_run(); } while(r > 0); - ENERGEST_OFF(ENERGEST_TYPE_CPU); - ENERGEST_ON(ENERGEST_TYPE_LPM); + ENERGEST_SWITCH(ENERGEST_TYPE_CPU, ENERGEST_TYPE_LPM); watchdog_stop(); asm volatile("wait"); watchdog_start(); - ENERGEST_OFF(ENERGEST_TYPE_LPM); - ENERGEST_ON(ENERGEST_TYPE_CPU); + ENERGEST_SWITCH(ENERGEST_TYPE_LPM, ENERGEST_TYPE_CPU); } diff --git a/platform/sensinode/contiki-sensinode-main.c b/platform/sensinode/contiki-sensinode-main.c index 9ba3766be..541b28d26 100644 --- a/platform/sensinode/contiki-sensinode-main.c +++ b/platform/sensinode/contiki-sensinode-main.c @@ -346,8 +346,7 @@ main(void) if(SLEEP & SLEEP_MODE0) { #endif /* LPM_MODE==LPM_MODE_PM2 */ - ENERGEST_OFF(ENERGEST_TYPE_CPU); - ENERGEST_ON(ENERGEST_TYPE_LPM); + ENERGEST_SWITCH(ENERGEST_TYPE_CPU, ENERGEST_TYPE_LPM); /* We are only interested in IRQ energest while idle or in LPM */ ENERGEST_IRQ_RESTORE(irq_energest); @@ -363,8 +362,7 @@ main(void) /* Remember energest IRQ for next pass */ ENERGEST_IRQ_SAVE(irq_energest); - ENERGEST_ON(ENERGEST_TYPE_CPU); - ENERGEST_OFF(ENERGEST_TYPE_LPM); + ENERGEST_SWITCH(ENERGEST_TYPE_LPM, ENERGEST_TYPE_CPU); #if (LPM_MODE==LPM_MODE_PM2) SLEEP &= ~OSC_PD; /* Make sure both HS OSCs are on */ diff --git a/platform/sky/contiki-sky-main.c b/platform/sky/contiki-sky-main.c index 46f6f99de..ea3afd93a 100644 --- a/platform/sky/contiki-sky-main.c +++ b/platform/sky/contiki-sky-main.c @@ -189,65 +189,6 @@ set_gateway(void) } #endif /* NETSTACK_CONF_WITH_IPV4 */ /*---------------------------------------------------------------------------*/ -static void -start_autostart_processes() -{ -#if !PROCESS_CONF_NO_PROCESS_NAMES - print_processes(autostart_processes); -#endif /* !PROCESS_CONF_NO_PROCESS_NAMES */ - autostart_start(autostart_processes); -} -/*---------------------------------------------------------------------------*/ -#if NETSTACK_CONF_WITH_IPV6 -static void -start_uip6() -{ - NETSTACK_NETWORK.init(); - - process_start(&tcpip_process, NULL); - -#if DEBUG - PRINTF("Tentative link-local IPv6 address "); - { - uip_ds6_addr_t *lladdr; - int i; - lladdr = uip_ds6_get_link_local(-1); - for(i = 0; i < 7; ++i) { - PRINTF("%02x%02x:", lladdr->ipaddr.u8[i * 2], - lladdr->ipaddr.u8[i * 2 + 1]); - } - PRINTF("%02x%02x\n", lladdr->ipaddr.u8[14], lladdr->ipaddr.u8[15]); - } -#endif /* DEBUG */ - - if(!UIP_CONF_IPV6_RPL) { - uip_ipaddr_t ipaddr; - int i; - uip_ip6addr(&ipaddr, 0xaaaa, 0, 0, 0, 0, 0, 0, 0); - uip_ds6_set_addr_iid(&ipaddr, &uip_lladdr); - uip_ds6_addr_add(&ipaddr, 0, ADDR_TENTATIVE); - PRINTF("Tentative global IPv6 address "); - for(i = 0; i < 7; ++i) { - PRINTF("%02x%02x:", - ipaddr.u8[i * 2], ipaddr.u8[i * 2 + 1]); - } - PRINTF("%02x%02x\n", - ipaddr.u8[7 * 2], ipaddr.u8[7 * 2 + 1]); - } -} -#endif /* NETSTACK_CONF_WITH_IPV6 */ -/*---------------------------------------------------------------------------*/ -static void -start_network_layer() -{ -#if NETSTACK_CONF_WITH_IPV6 - start_uip6(); -#endif /* NETSTACK_CONF_WITH_IPV6 */ - start_autostart_processes(); - /* To support link layer security in combination with NETSTACK_CONF_WITH_IPV4 and - * TIMESYNCH_CONF_ENABLED further things may need to be moved here */ -} -/*---------------------------------------------------------------------------*/ #if WITH_TINYOS_AUTO_IDS uint16_t TOS_NODE_ID = 0x1234; /* non-zero */ uint16_t TOS_LOCAL_ADDRESS = 0x1234; /* non-zero */ @@ -360,6 +301,8 @@ main(int argc, char **argv) queuebuf_init(); NETSTACK_RDC.init(); NETSTACK_MAC.init(); + NETSTACK_LLSEC.init(); + NETSTACK_NETWORK.init(); PRINTF("%s %s %s, channel check rate %lu Hz, radio channel %u, CCA threshold %i\n", NETSTACK_LLSEC.name, NETSTACK_MAC.name, NETSTACK_RDC.name, @@ -367,11 +310,42 @@ main(int argc, char **argv) NETSTACK_RDC.channel_check_interval()), CC2420_CONF_CHANNEL, CC2420_CONF_CCA_THRESH); + + process_start(&tcpip_process, NULL); +#if DEBUG + PRINTF("Tentative link-local IPv6 address "); + { + uip_ds6_addr_t *lladdr; + int i; + lladdr = uip_ds6_get_link_local(-1); + for(i = 0; i < 7; ++i) { + PRINTF("%02x%02x:", lladdr->ipaddr.u8[i * 2], + lladdr->ipaddr.u8[i * 2 + 1]); + } + PRINTF("%02x%02x\n", lladdr->ipaddr.u8[14], lladdr->ipaddr.u8[15]); + } +#endif /* DEBUG */ + + if(!UIP_CONF_IPV6_RPL) { + uip_ipaddr_t ipaddr; + int i; + uip_ip6addr(&ipaddr, 0xaaaa, 0, 0, 0, 0, 0, 0, 0); + uip_ds6_set_addr_iid(&ipaddr, &uip_lladdr); + uip_ds6_addr_add(&ipaddr, 0, ADDR_TENTATIVE); + PRINTF("Tentative global IPv6 address "); + for(i = 0; i < 7; ++i) { + PRINTF("%02x%02x:", + ipaddr.u8[i * 2], ipaddr.u8[i * 2 + 1]); + } + PRINTF("%02x%02x\n", + ipaddr.u8[7 * 2], ipaddr.u8[7 * 2 + 1]); + } #else /* NETSTACK_CONF_WITH_IPV6 */ NETSTACK_RDC.init(); NETSTACK_MAC.init(); + NETSTACK_LLSEC.init(); NETSTACK_NETWORK.init(); PRINTF("%s %s %s, channel check rate %lu Hz, radio channel %u\n", @@ -421,10 +395,13 @@ main(int argc, char **argv) uip_ipaddr_to_quad(&hostaddr)); } #endif /* NETSTACK_CONF_WITH_IPV4 */ - + watchdog_start(); - NETSTACK_LLSEC.bootstrap(start_network_layer); +#if !PROCESS_CONF_NO_PROCESS_NAMES + print_processes(autostart_processes); +#endif /* !PROCESS_CONF_NO_PROCESS_NAMES */ + autostart_start(autostart_processes); /* * This is the scheduler loop. @@ -465,8 +442,7 @@ main(int argc, char **argv) #endif /* Re-enable interrupts and go to sleep atomically. */ - ENERGEST_OFF(ENERGEST_TYPE_CPU); - ENERGEST_ON(ENERGEST_TYPE_LPM); + ENERGEST_SWITCH(ENERGEST_TYPE_CPU, ENERGEST_TYPE_LPM); /* We only want to measure the processing done in IRQs when we are asleep, so we discard the processing time done when we were awake. */ @@ -489,8 +465,7 @@ main(int argc, char **argv) irq_energest = energest_type_time(ENERGEST_TYPE_IRQ); eint(); watchdog_start(); - ENERGEST_OFF(ENERGEST_TYPE_LPM); - ENERGEST_ON(ENERGEST_TYPE_CPU); + ENERGEST_SWITCH(ENERGEST_TYPE_LPM, ENERGEST_TYPE_CPU); } } diff --git a/platform/srf06-cc26xx/README.md b/platform/srf06-cc26xx/README.md index de86ef380..1e7226997 100644 --- a/platform/srf06-cc26xx/README.md +++ b/platform/srf06-cc26xx/README.md @@ -107,9 +107,9 @@ To use the port you need: GNU Tools for ARM Embedded Processors . The port was developed and tested using this version: - $ arm-none-eabi-gcc -v - [...] - gcc version 4.9.3 20141119 (release) [ARM/embedded-4_9-branch revision 218278] (GNU Tools for ARM Embedded Processors) + $ arm-none-eabi-gcc -v + [...] + gcc version 4.9.3 20141119 (release) [ARM/embedded-4_9-branch revision 218278] (GNU Tools for ARM Embedded Processors) * srecord (http://srecord.sourceforge.net/) * You may also need other drivers so that the SmartRF can communicate with your diff --git a/platform/srf06-cc26xx/contiki-conf.h b/platform/srf06-cc26xx/contiki-conf.h index e9fc7458b..79c1d479a 100644 --- a/platform/srf06-cc26xx/contiki-conf.h +++ b/platform/srf06-cc26xx/contiki-conf.h @@ -98,7 +98,7 @@ #define CONTIKIMAC_CONF_LISTEN_TIME_AFTER_PACKET_DETECTED (RTIMER_ARCH_SECOND / 20) #define CONTIKIMAC_CONF_SEND_SW_ACK 1 #define CONTIKIMAC_CONF_AFTER_ACK_DETECTECT_WAIT_TIME (RTIMER_SECOND / 1000) -#define CONTIKIMAC_CONF_INTER_PACKET_INTERVAL (RTIMER_SECOND / 280) +#define CONTIKIMAC_CONF_INTER_PACKET_INTERVAL (RTIMER_SECOND / 250) #else #define NETSTACK_CONF_RADIO ieee_mode_driver diff --git a/platform/win32/contiki-conf.h b/platform/win32/contiki-conf.h index 060648c36..fbdd93d5c 100644 --- a/platform/win32/contiki-conf.h +++ b/platform/win32/contiki-conf.h @@ -6,8 +6,7 @@ #endif #define CC_CONF_REGISTER_ARGS 1 -#define CC_CONF_FASTCALL __fastcall -#define CC_CONF_INLINE __inline +#define CC_CONF_INLINE __inline #define ARCH_DOESNT_NEED_ALIGNED_STRUCTS 1 diff --git a/platform/wismote/apps/burn-nodeid.c b/platform/wismote/apps/burn-nodeid.c new file mode 100644 index 000000000..280797247 --- /dev/null +++ b/platform/wismote/apps/burn-nodeid.c @@ -0,0 +1,80 @@ +/* + * Copyright (c) 2006, Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the Contiki operating system. + * + */ + +/** + * \file + * A program for burning a node ID into the external flash of a Wismote. + * \author + * Adam Dunkels + */ + +#include "dev/leds.h" +#include "dev/watchdog.h" +#include "sys/node-id.h" +#include "contiki.h" +#include "sys/etimer.h" + +#include + +static struct etimer etimer; + +PROCESS(burn_process, "Burn node id"); +AUTOSTART_PROCESSES(&burn_process); +/*---------------------------------------------------------------------------*/ +PROCESS_THREAD(burn_process, ev, data) +{ + PROCESS_BEGIN(); + + etimer_set(&etimer, 5 * CLOCK_SECOND); + PROCESS_WAIT_UNTIL(etimer_expired(&etimer)); + + watchdog_stop(); + leds_on(LEDS_RED); +#if NODEID + printf("Burning node id %d\n", NODEID); + node_id_burn(NODEID); + leds_on(LEDS_BLUE); + node_id_restore(); + printf("Restored node id %d\n", node_id); +#else +#error "burn-nodeid must be compiled with nodeid=" + node_id_restore(); + printf("Restored node id %d\n", node_id); +#endif + leds_off(LEDS_RED + LEDS_BLUE); + watchdog_start(); + while(1) { + PROCESS_WAIT_EVENT(); + } + PROCESS_END(); +} +/*---------------------------------------------------------------------------*/ diff --git a/platform/wismote/contiki-conf.h b/platform/wismote/contiki-conf.h index 761d68f91..03cfcff40 100644 --- a/platform/wismote/contiki-conf.h +++ b/platform/wismote/contiki-conf.h @@ -6,13 +6,11 @@ #include "platform-conf.h" #ifndef NETSTACK_CONF_MAC -/* #define NETSTACK_CONF_MAC csma_driver */ -#define NETSTACK_CONF_MAC nullmac_driver +#define NETSTACK_CONF_MAC csma_driver #endif /* NETSTACK_CONF_MAC */ #ifndef NETSTACK_CONF_RDC -/* #define NETSTACK_CONF_RDC contikimac_driver */ -#define NETSTACK_CONF_RDC nullrdc_driver +#define NETSTACK_CONF_RDC contikimac_driver #endif /* NETSTACK_CONF_RDC */ #ifndef NETSTACK_CONF_RDC_CHANNEL_CHECK_RATE diff --git a/platform/wismote/contiki-wismote-main.c b/platform/wismote/contiki-wismote-main.c index 8a79811ac..d65ccaf1e 100644 --- a/platform/wismote/contiki-wismote-main.c +++ b/platform/wismote/contiki-wismote-main.c @@ -73,7 +73,7 @@ extern const struct uip_router UIP_ROUTER_MODULE; #if NETSTACK_CONF_WITH_IPV4 #include "net/ip/uip.h" #include "net/ipv4/uip-fw.h" -#include "net/uip-fw-drv.h" +#include "net/ipv4/uip-fw-drv.h" #include "net/ipv4/uip-over-mesh.h" static struct uip_fw_netif slipif = {UIP_FW_NETIF(192,168,1,2, 255,255,255,255, slip_send)}; @@ -229,10 +229,12 @@ main(int argc, char **argv) * Hardware initialization done! */ - node_id = NODE_ID; - /* Restore node id if such has been stored in external mem */ - //node_id_restore(); + node_id_restore(); + + if(!node_id) { + node_id = NODE_ID; + } /* for setting "hardcoded" IEEE 802.15.4 MAC addresses */ #ifdef IEEE_802154_MAC_ADDRESS @@ -425,8 +427,7 @@ main(int argc, char **argv) static unsigned long irq_energest = 0; /* Re-enable interrupts and go to sleep atomically. */ - ENERGEST_OFF(ENERGEST_TYPE_CPU); - ENERGEST_ON(ENERGEST_TYPE_LPM); + ENERGEST_SWITCH(ENERGEST_TYPE_CPU, ENERGEST_TYPE_LPM); /* We only want to measure the processing done in IRQs when we are asleep, so we discard the processing time done when we were awake. */ @@ -445,8 +446,7 @@ main(int argc, char **argv) irq_energest = energest_type_time(ENERGEST_TYPE_IRQ); eint(); watchdog_start(); - ENERGEST_OFF(ENERGEST_TYPE_LPM); - ENERGEST_ON(ENERGEST_TYPE_CPU); + ENERGEST_SWITCH(ENERGEST_TYPE_LPM, ENERGEST_TYPE_CPU); } } } diff --git a/platform/wismote/node-id.c b/platform/wismote/node-id.c index 994587c45..dcdabfa84 100644 --- a/platform/wismote/node-id.c +++ b/platform/wismote/node-id.c @@ -47,25 +47,25 @@ unsigned short node_id = 0; void node_id_restore(void) { - /* unsigned char buf[4]; */ - /* xmem_pread(buf, 4, NODE_ID_XMEM_OFFSET); */ - /* if(buf[0] == 0xad && */ - /* buf[1] == 0xde) { */ - /* node_id = (buf[2] << 8) | buf[3]; */ - /* } else { */ + unsigned char buf[4]; + xmem_pread(buf, 4, NODE_ID_XMEM_OFFSET); + if(buf[0] == 0xad && + buf[1] == 0xde) { + node_id = (buf[2] << 8) | buf[3]; + } else { node_id = 0; - /* } */ + } } /*---------------------------------------------------------------------------*/ void node_id_burn(unsigned short id) { - /* unsigned char buf[4]; */ - /* buf[0] = 0xad; */ - /* buf[1] = 0xde; */ - /* buf[2] = id >> 8; */ - /* buf[3] = id & 0xff; */ - //xmem_erase(XMEM_ERASE_UNIT_SIZE, NODE_ID_XMEM_OFFSET); - //xmem_pwrite(buf, 4, NODE_ID_XMEM_OFFSET); + unsigned char buf[4]; + buf[0] = 0xad; + buf[1] = 0xde; + buf[2] = id >> 8; + buf[3] = id & 0xff; + xmem_erase(XMEM_ERASE_UNIT_SIZE, NODE_ID_XMEM_OFFSET); + xmem_pwrite(buf, 4, NODE_ID_XMEM_OFFSET); } /*---------------------------------------------------------------------------*/ diff --git a/platform/z1/contiki-conf.h b/platform/z1/contiki-conf.h index 3f223c0c5..783b3ec8c 100644 --- a/platform/z1/contiki-conf.h +++ b/platform/z1/contiki-conf.h @@ -31,7 +31,6 @@ #ifndef CONTIKI_CONF_H #define CONTIKI_CONF_H - #include "platform-conf.h" #define XMAC_CONF_COMPOWER 1 @@ -58,8 +57,7 @@ #define CXMAC_CONF_ANNOUNCEMENTS 0 #define XMAC_CONF_ANNOUNCEMENTS 0 -#define QUEUEBUF_CONF_NUM 4 - +#define QUEUEBUF_CONF_NUM 4 #else /* NETSTACK_CONF_WITH_IPV6 */ @@ -108,8 +106,7 @@ #define SHELL_VARS_CONF_RAM_BEGIN 0x1100 #define SHELL_VARS_CONF_RAM_END 0x2000 - -#define CFS_CONF_OFFSET_TYPE long +#define CFS_CONF_OFFSET_TYPE long #define PROFILE_CONF_ON 0 #define ENERGEST_CONF_ON 1 @@ -127,8 +124,9 @@ #define PROCESS_CONF_STATS 1 /*#define PROCESS_CONF_FASTPOLL 4*/ +#define UART0_CONF_TX_WITH_INTERRUPT 0 /* So far, printfs without interrupt. */ -#define UART0_CONF_TX_WITH_INTERRUPT 0 // So far, printfs without interrupt. +#define UART0_CONF_RX_WITH_DMA 0 #ifdef NETSTACK_CONF_WITH_IPV6 @@ -144,7 +142,7 @@ /* Handle 10 routes */ #define UIP_CONF_MAX_ROUTES 15 -#define UIP_CONF_ND6_SEND_RA 0 +#define UIP_CONF_ND6_SEND_RA 0 #define UIP_CONF_ND6_REACHABLE_TIME 600000 #define UIP_CONF_ND6_RETRANS_TIMER 10000 @@ -154,7 +152,7 @@ #define UIP_CONF_IPV6_REASSEMBLY 0 #define UIP_CONF_NETIF_MAX_ADDRESSES 3 #define UIP_CONF_IP_FORWARD 0 -#define UIP_CONF_BUFFER_SIZE 140 +#define UIP_CONF_BUFFER_SIZE 140 #define SICSLOWPAN_CONF_COMPRESSION SICSLOWPAN_COMPRESSION_HC06 #ifndef SICSLOWPAN_CONF_FRAG @@ -186,11 +184,8 @@ #define UIP_CONF_TCP_SPLIT 0 - #ifdef PROJECT_CONF_H #include PROJECT_CONF_H #endif /* PROJECT_CONF_H */ - - #endif /* CONTIKI_CONF_H */ diff --git a/platform/z1/contiki-z1-main.c b/platform/z1/contiki-z1-main.c index bab055d08..45e97bde9 100644 --- a/platform/z1/contiki-z1-main.c +++ b/platform/z1/contiki-z1-main.c @@ -452,8 +452,7 @@ main(int argc, char **argv) #endif /* Re-enable interrupts and go to sleep atomically. */ - ENERGEST_OFF(ENERGEST_TYPE_CPU); - ENERGEST_ON(ENERGEST_TYPE_LPM); + ENERGEST_SWITCH(ENERGEST_TYPE_CPU, ENERGEST_TYPE_LPM); /* We only want to measure the processing done in IRQs when we are asleep, so we discard the processing time done when we were awake. */ @@ -472,8 +471,7 @@ main(int argc, char **argv) irq_energest = energest_type_time(ENERGEST_TYPE_IRQ); eint(); watchdog_start(); - ENERGEST_OFF(ENERGEST_TYPE_LPM); - ENERGEST_ON(ENERGEST_TYPE_CPU); + ENERGEST_SWITCH(ENERGEST_TYPE_LPM, ENERGEST_TYPE_CPU); } } diff --git a/platform/z1/dev/relay-phidget.h b/platform/z1/dev/relay-phidget.h index 1d9247cca..580151f58 100644 --- a/platform/z1/dev/relay-phidget.h +++ b/platform/z1/dev/relay-phidget.h @@ -44,6 +44,6 @@ void relay_enable(uint8_t pin); void relay_on(); void relay_off(); -int8_t relay_toogle(); +int8_t relay_toggle(); #endif /* RELAY_PHIDGET_H_ */ diff --git a/regression-tests/01-compile-base/Makefile b/regression-tests/01-compile-base/Makefile index b6410c780..25ff0e6da 100644 --- a/regression-tests/01-compile-base/Makefile +++ b/regression-tests/01-compile-base/Makefile @@ -13,7 +13,7 @@ hello-world/wismote \ hello-world/z1 \ eeprom-test/native \ collect/sky \ -er-rest-example/sky \ +er-rest-example/wismote \ example-shell/native \ netperf/sky \ powertrace/sky \ diff --git a/regression-tests/02-hello-world/02-hello-world-sky.csc b/regression-tests/02-hello-world/02-hello-world-sky.csc index 5b5dacc1e..1c656fc71 100644 --- a/regression-tests/02-hello-world/02-hello-world-sky.csc +++ b/regression-tests/02-hello-world/02-hello-world-sky.csc @@ -1,82 +1,82 @@ - - - - Hello World test (Sky) - generated - 1000000 - - org.contikios.cooja.radiomediums.UDGM - 50.0 - 100.0 - 1.0 - 1.0 - - - 40000 - - - org.contikios.cooja.mspmote.SkyMoteType - sky1 - Sky Mote Type #1 - [CONTIKI_DIR]/examples/hello-world/hello-world.c - make hello-world.sky TARGET=sky - [CONTIKI_DIR]/examples/hello-world/hello-world.sky - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.IPAddress - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.mspmote.interfaces.MspClock - org.contikios.cooja.mspmote.interfaces.MspMoteID - org.contikios.cooja.mspmote.interfaces.SkyButton - org.contikios.cooja.mspmote.interfaces.SkyFlash - org.contikios.cooja.mspmote.interfaces.Msp802154Radio - org.contikios.cooja.mspmote.interfaces.MspSerial - org.contikios.cooja.mspmote.interfaces.SkyLED - - - - - org.contikios.cooja.interfaces.Position - 64.11203103628397 - 93.06735634828134 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 1 - - sky1 - - - - org.contikios.cooja.plugins.ScriptRunner - - [CONFIG_DIR]/hello-world.js - true - - 541 - 0 - 448 - 299 - 7 - - - org.contikios.cooja.plugins.SimControl - 280 - 2 - 160 - 7 - 10 - - - org.contikios.cooja.plugins.LogListener - - - - 680 - 1 - 240 - 51 - 288 - - - + + + + Hello World test (Sky) + generated + 1000000 + + org.contikios.cooja.radiomediums.UDGM + 50.0 + 100.0 + 1.0 + 1.0 + + + 40000 + + + org.contikios.cooja.mspmote.SkyMoteType + sky1 + Sky Mote Type #1 + [CONTIKI_DIR]/examples/hello-world/hello-world.c + make hello-world.sky TARGET=sky + [CONTIKI_DIR]/examples/hello-world/hello-world.sky + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.IPAddress + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.mspmote.interfaces.MspClock + org.contikios.cooja.mspmote.interfaces.MspMoteID + org.contikios.cooja.mspmote.interfaces.SkyButton + org.contikios.cooja.mspmote.interfaces.SkyFlash + org.contikios.cooja.mspmote.interfaces.Msp802154Radio + org.contikios.cooja.mspmote.interfaces.MspSerial + org.contikios.cooja.mspmote.interfaces.SkyLED + + + + + org.contikios.cooja.interfaces.Position + 64.11203103628397 + 93.06735634828134 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 1 + + sky1 + + + + org.contikios.cooja.plugins.ScriptRunner + + [CONFIG_DIR]/hello-world.js + true + + 541 + 0 + 448 + 299 + 7 + + + org.contikios.cooja.plugins.SimControl + 280 + 2 + 160 + 7 + 10 + + + org.contikios.cooja.plugins.LogListener + + + + 680 + 1 + 240 + 51 + 288 + + + diff --git a/regression-tests/02-hello-world/03-hello-world-micaz.csc b/regression-tests/02-hello-world/03-hello-world-micaz.csc index 5ca8c1cfb..c243b6042 100644 --- a/regression-tests/02-hello-world/03-hello-world-micaz.csc +++ b/regression-tests/02-hello-world/03-hello-world-micaz.csc @@ -1,79 +1,79 @@ - - - - Hello World (MicaZ) - generated - 1000000 - - org.contikios.cooja.radiomediums.UDGM - 50.0 - 100.0 - 1.0 - 1.0 - - - 40000 - - - org.contikios.cooja.avrmote.MicaZMoteType - micaz1 - MicaZ Mote Type #micaz1 - [CONTIKI_DIR]/examples/hello-world/hello-world.c - make hello-world.elf TARGET=micaz - [CONTIKI_DIR]/examples/hello-world/hello-world.elf - org.contikios.cooja.interfaces.Position - org.contikios.cooja.avrmote.interfaces.MicaZID - org.contikios.cooja.avrmote.interfaces.MicaZLED - org.contikios.cooja.avrmote.interfaces.MicaZRadio - org.contikios.cooja.avrmote.interfaces.MicaClock - org.contikios.cooja.avrmote.interfaces.MicaSerial - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - - - - org.contikios.cooja.interfaces.Position - 36.478849033811386 - 97.17795415366507 - 0.0 - - - org.contikios.cooja.avrmote.interfaces.MicaZID - 1 - - micaz1 - - - - org.contikios.cooja.plugins.SimControl - 280 - 2 - 160 - 17 - 16 - - - org.contikios.cooja.plugins.LogListener - - - - 680 - 1 - 240 - 20 - 285 - - - org.contikios.cooja.plugins.ScriptRunner - - [CONFIG_DIR]/hello-world.js - true - - 600 - 0 - 535 - 403 - 23 - - - + + + + Hello World (MicaZ) + generated + 1000000 + + org.contikios.cooja.radiomediums.UDGM + 50.0 + 100.0 + 1.0 + 1.0 + + + 40000 + + + org.contikios.cooja.avrmote.MicaZMoteType + micaz1 + MicaZ Mote Type #micaz1 + [CONTIKI_DIR]/examples/hello-world/hello-world.c + make hello-world.elf TARGET=micaz + [CONTIKI_DIR]/examples/hello-world/hello-world.elf + org.contikios.cooja.interfaces.Position + org.contikios.cooja.avrmote.interfaces.MicaZID + org.contikios.cooja.avrmote.interfaces.MicaZLED + org.contikios.cooja.avrmote.interfaces.MicaZRadio + org.contikios.cooja.avrmote.interfaces.MicaClock + org.contikios.cooja.avrmote.interfaces.MicaSerial + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + + + + org.contikios.cooja.interfaces.Position + 36.478849033811386 + 97.17795415366507 + 0.0 + + + org.contikios.cooja.avrmote.interfaces.MicaZID + 1 + + micaz1 + + + + org.contikios.cooja.plugins.SimControl + 280 + 2 + 160 + 17 + 16 + + + org.contikios.cooja.plugins.LogListener + + + + 680 + 1 + 240 + 20 + 285 + + + org.contikios.cooja.plugins.ScriptRunner + + [CONFIG_DIR]/hello-world.js + true + + 600 + 0 + 535 + 403 + 23 + + + diff --git a/regression-tests/02-hello-world/05-exp5438-hello-world.csc b/regression-tests/02-hello-world/05-exp5438-hello-world.csc index b45bf5644..bd6267011 100644 --- a/regression-tests/02-hello-world/05-exp5438-hello-world.csc +++ b/regression-tests/02-hello-world/05-exp5438-hello-world.csc @@ -1,83 +1,83 @@ - - - - Hello World (Exp5438) - generated - 1000000 - - org.contikios.cooja.radiomediums.UDGM - 50.0 - 100.0 - 1.0 - 1.0 - - - 40000 - - - org.contikios.cooja.mspmote.Exp5438MoteType - exp5438#1 - Exp5438 Mote Type exp5438#1 - [CONTIKI_DIR]/examples/hello-world/hello-world.c - make hello-world.exp5438 TARGET=exp5438 - [CONTIKI_DIR]/examples/hello-world/hello-world.exp5438 - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.interfaces.IPAddress - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - org.contikios.cooja.mspmote.interfaces.MspClock - org.contikios.cooja.mspmote.interfaces.MspMoteID - org.contikios.cooja.mspmote.interfaces.Msp802154Radio - org.contikios.cooja.mspmote.interfaces.UsciA1Serial - org.contikios.cooja.mspmote.interfaces.Exp5438LED - org.contikios.cooja.mspmote.interfaces.MspDebugOutput - - - - - org.contikios.cooja.interfaces.Position - 26.321738050614275 - 34.93092009073432 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 1 - - exp5438#1 - - - - org.contikios.cooja.plugins.SimControl - 280 - 2 - 160 - 38 - 49 - - - org.contikios.cooja.plugins.LogListener - - - - 680 - 1 - 240 - 86 - 384 - - - org.contikios.cooja.plugins.ScriptRunner - - [CONFIG_DIR]/hello-world.js - true - - 600 - 0 - 700 - 347 - 21 - - - + + + + Hello World (Exp5438) + generated + 1000000 + + org.contikios.cooja.radiomediums.UDGM + 50.0 + 100.0 + 1.0 + 1.0 + + + 40000 + + + org.contikios.cooja.mspmote.Exp5438MoteType + exp5438#1 + Exp5438 Mote Type exp5438#1 + [CONTIKI_DIR]/examples/hello-world/hello-world.c + make hello-world.exp5438 TARGET=exp5438 + [CONTIKI_DIR]/examples/hello-world/hello-world.exp5438 + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.interfaces.IPAddress + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + org.contikios.cooja.mspmote.interfaces.MspClock + org.contikios.cooja.mspmote.interfaces.MspMoteID + org.contikios.cooja.mspmote.interfaces.Msp802154Radio + org.contikios.cooja.mspmote.interfaces.UsciA1Serial + org.contikios.cooja.mspmote.interfaces.Exp5438LED + org.contikios.cooja.mspmote.interfaces.MspDebugOutput + + + + + org.contikios.cooja.interfaces.Position + 26.321738050614275 + 34.93092009073432 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 1 + + exp5438#1 + + + + org.contikios.cooja.plugins.SimControl + 280 + 2 + 160 + 38 + 49 + + + org.contikios.cooja.plugins.LogListener + + + + 680 + 1 + 240 + 86 + 384 + + + org.contikios.cooja.plugins.ScriptRunner + + [CONFIG_DIR]/hello-world.js + true + + 600 + 0 + 700 + 347 + 21 + + + diff --git a/regression-tests/02-hello-world/06-wismote-hello-world.csc b/regression-tests/02-hello-world/06-wismote-hello-world.csc index 3aefd96f9..02b0b718d 100644 --- a/regression-tests/02-hello-world/06-wismote-hello-world.csc +++ b/regression-tests/02-hello-world/06-wismote-hello-world.csc @@ -1,84 +1,84 @@ - - - - Hello World (Wismote) - generated - 1000000 - - org.contikios.cooja.radiomediums.UDGM - 50.0 - 100.0 - 1.0 - 1.0 - - - 40000 - - - org.contikios.cooja.mspmote.WismoteMoteType - wismote1 - Wismote Mote Type #wismote1 - [CONTIKI_DIR]/examples/hello-world/hello-world.c - make hello-world.wismote TARGET=wismote - [CONTIKI_DIR]/examples/hello-world/hello-world.wismote - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.interfaces.IPAddress - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - org.contikios.cooja.mspmote.interfaces.MspClock - org.contikios.cooja.mspmote.interfaces.MspMoteID - org.contikios.cooja.mspmote.interfaces.MspButton - org.contikios.cooja.mspmote.interfaces.Msp802154Radio - org.contikios.cooja.mspmote.interfaces.MspDefaultSerial - org.contikios.cooja.mspmote.interfaces.MspLED - org.contikios.cooja.mspmote.interfaces.MspDebugOutput - - - - - org.contikios.cooja.interfaces.Position - 36.76551518369201 - 29.330591009779383 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 1 - - wismote1 - - - - org.contikios.cooja.plugins.SimControl - 280 - 2 - 160 - 22 - 14 - - - org.contikios.cooja.plugins.LogListener - - - - 680 - 1 - 240 - 84 - 408 - - - org.contikios.cooja.plugins.ScriptRunner - - [CONFIG_DIR]/hello-world.js - true - - 600 - 0 - 548 - 335 - 22 - - - + + + + Hello World (Wismote) + generated + 1000000 + + org.contikios.cooja.radiomediums.UDGM + 50.0 + 100.0 + 1.0 + 1.0 + + + 40000 + + + org.contikios.cooja.mspmote.WismoteMoteType + wismote1 + Wismote Mote Type #wismote1 + [CONTIKI_DIR]/examples/hello-world/hello-world.c + make hello-world.wismote TARGET=wismote + [CONTIKI_DIR]/examples/hello-world/hello-world.wismote + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.interfaces.IPAddress + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + org.contikios.cooja.mspmote.interfaces.MspClock + org.contikios.cooja.mspmote.interfaces.MspMoteID + org.contikios.cooja.mspmote.interfaces.MspButton + org.contikios.cooja.mspmote.interfaces.Msp802154Radio + org.contikios.cooja.mspmote.interfaces.MspDefaultSerial + org.contikios.cooja.mspmote.interfaces.MspLED + org.contikios.cooja.mspmote.interfaces.MspDebugOutput + + + + + org.contikios.cooja.interfaces.Position + 36.76551518369201 + 29.330591009779383 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 1 + + wismote1 + + + + org.contikios.cooja.plugins.SimControl + 280 + 2 + 160 + 22 + 14 + + + org.contikios.cooja.plugins.LogListener + + + + 680 + 1 + 240 + 84 + 408 + + + org.contikios.cooja.plugins.ScriptRunner + + [CONFIG_DIR]/hello-world.js + true + + 600 + 0 + 548 + 335 + 22 + + + diff --git a/regression-tests/02-hello-world/07-z1-hello-world.csc b/regression-tests/02-hello-world/07-z1-hello-world.csc index 12a2b0055..33963c36c 100644 --- a/regression-tests/02-hello-world/07-z1-hello-world.csc +++ b/regression-tests/02-hello-world/07-z1-hello-world.csc @@ -1,83 +1,83 @@ - - - - Hello World (Z1) - generated - 1000000 - - org.contikios.cooja.radiomediums.UDGM - 50.0 - 100.0 - 1.0 - 1.0 - - - 40000 - - - org.contikios.cooja.mspmote.Z1MoteType - z11 - Z1 Mote Type #z11 - [CONTIKI_DIR]/examples/hello-world/hello-world.c - make hello-world.z1 TARGET=z1 - [CONTIKI_DIR]/examples/hello-world/hello-world.z1 - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.interfaces.IPAddress - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - org.contikios.cooja.mspmote.interfaces.MspClock - org.contikios.cooja.mspmote.interfaces.MspMoteID - org.contikios.cooja.mspmote.interfaces.Msp802154Radio - org.contikios.cooja.mspmote.interfaces.MspDefaultSerial - org.contikios.cooja.mspmote.interfaces.MspLED - org.contikios.cooja.mspmote.interfaces.MspDebugOutput - - - - - org.contikios.cooja.interfaces.Position - 94.96401380574989 - 21.247662337471553 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 1 - - z11 - - - - org.contikios.cooja.plugins.SimControl - 280 - 2 - 160 - 38 - 13 - - - org.contikios.cooja.plugins.LogListener - - - - 680 - 1 - 240 - 109 - 377 - - - org.contikios.cooja.plugins.ScriptRunner - - [CONFIG_DIR]/hello-world.js - true - - 600 - 0 - 700 - 330 - 24 - - - + + + + Hello World (Z1) + generated + 1000000 + + org.contikios.cooja.radiomediums.UDGM + 50.0 + 100.0 + 1.0 + 1.0 + + + 40000 + + + org.contikios.cooja.mspmote.Z1MoteType + z11 + Z1 Mote Type #z11 + [CONTIKI_DIR]/examples/hello-world/hello-world.c + make hello-world.z1 TARGET=z1 + [CONTIKI_DIR]/examples/hello-world/hello-world.z1 + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.interfaces.IPAddress + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + org.contikios.cooja.mspmote.interfaces.MspClock + org.contikios.cooja.mspmote.interfaces.MspMoteID + org.contikios.cooja.mspmote.interfaces.Msp802154Radio + org.contikios.cooja.mspmote.interfaces.MspDefaultSerial + org.contikios.cooja.mspmote.interfaces.MspLED + org.contikios.cooja.mspmote.interfaces.MspDebugOutput + + + + + org.contikios.cooja.interfaces.Position + 94.96401380574989 + 21.247662337471553 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 1 + + z11 + + + + org.contikios.cooja.plugins.SimControl + 280 + 2 + 160 + 38 + 13 + + + org.contikios.cooja.plugins.LogListener + + + + 680 + 1 + 240 + 109 + 377 + + + org.contikios.cooja.plugins.ScriptRunner + + [CONFIG_DIR]/hello-world.js + true + + 600 + 0 + 700 + 330 + 24 + + + diff --git a/regression-tests/03-base/01-multithreading.csc b/regression-tests/03-base/01-multithreading.csc index 4805e47f8..1b98781ac 100644 --- a/regression-tests/03-base/01-multithreading.csc +++ b/regression-tests/03-base/01-multithreading.csc @@ -1,137 +1,137 @@ - - - [APPS_DIR]/mrm - [APPS_DIR]/mspsim - [APPS_DIR]/avrora - [APPS_DIR]/serial_socket - [APPS_DIR]/collect-view - [APPS_DIR]/powertracker - - My simulation - generated - 1000000 - - org.contikios.cooja.radiomediums.UDGM - 50.0 - 100.0 - 1.0 - 1.0 - - - 40000 - - - org.contikios.cooja.mspmote.SkyMoteType - sky1 - Sky Mote Type #1 - [CONTIKI_DIR]/examples/multi-threading/multi-threading.c - make clean TARGET=sky -make multi-threading.sky TARGET=sky - [CONTIKI_DIR]/examples/multi-threading/multi-threading.sky - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.IPAddress - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.mspmote.interfaces.MspClock - org.contikios.cooja.mspmote.interfaces.MspMoteID - org.contikios.cooja.mspmote.interfaces.SkyButton - org.contikios.cooja.mspmote.interfaces.SkyFlash - org.contikios.cooja.mspmote.interfaces.Msp802154Radio - org.contikios.cooja.mspmote.interfaces.MspSerial - org.contikios.cooja.mspmote.interfaces.SkyLED - - - - - org.contikios.cooja.interfaces.Position - 83.20518861404864 - 11.060511519885651 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 1 - - sky1 - - - - org.contikios.cooja.plugins.SimControl - 265 - 3 - 200 - 0 - 0 - - - org.contikios.cooja.plugins.Visualizer - - 0.9090909090909091 0.0 0.0 0.9090909090909091 49.35891944177396 108.94498952737668 - - 263 - 2 - 292 - 1 - 202 - - - org.contikios.cooja.plugins.LogListener - - - - - 865 - 0 - 209 - 3 - 701 - - - org.contikios.cooja.plugins.ScriptRunner - - - true - - 600 - 1 - 700 - 267 - 1 - - - + + + [APPS_DIR]/mrm + [APPS_DIR]/mspsim + [APPS_DIR]/avrora + [APPS_DIR]/serial_socket + [APPS_DIR]/collect-view + [APPS_DIR]/powertracker + + My simulation + generated + 1000000 + + org.contikios.cooja.radiomediums.UDGM + 50.0 + 100.0 + 1.0 + 1.0 + + + 40000 + + + org.contikios.cooja.mspmote.SkyMoteType + sky1 + Sky Mote Type #1 + [CONTIKI_DIR]/examples/multi-threading/multi-threading.c + make clean TARGET=sky +make multi-threading.sky TARGET=sky + [CONTIKI_DIR]/examples/multi-threading/multi-threading.sky + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.IPAddress + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.mspmote.interfaces.MspClock + org.contikios.cooja.mspmote.interfaces.MspMoteID + org.contikios.cooja.mspmote.interfaces.SkyButton + org.contikios.cooja.mspmote.interfaces.SkyFlash + org.contikios.cooja.mspmote.interfaces.Msp802154Radio + org.contikios.cooja.mspmote.interfaces.MspSerial + org.contikios.cooja.mspmote.interfaces.SkyLED + + + + + org.contikios.cooja.interfaces.Position + 83.20518861404864 + 11.060511519885651 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 1 + + sky1 + + + + org.contikios.cooja.plugins.SimControl + 265 + 3 + 200 + 0 + 0 + + + org.contikios.cooja.plugins.Visualizer + + 0.9090909090909091 0.0 0.0 0.9090909090909091 49.35891944177396 108.94498952737668 + + 263 + 2 + 292 + 1 + 202 + + + org.contikios.cooja.plugins.LogListener + + + + + 865 + 0 + 209 + 3 + 701 + + + org.contikios.cooja.plugins.ScriptRunner + + + true + + 600 + 1 + 700 + 267 + 1 + + + diff --git a/regression-tests/03-base/02-sky-coffee.csc b/regression-tests/03-base/02-sky-coffee.csc index 1f39be10f..f017a3e7d 100644 --- a/regression-tests/03-base/02-sky-coffee.csc +++ b/regression-tests/03-base/02-sky-coffee.csc @@ -1,118 +1,118 @@ - - - [CONTIKI_DIR]/tools/cooja/apps/mrm - [CONTIKI_DIR]/tools/cooja/apps/mspsim - [CONTIKI_DIR]/tools/cooja/apps/avrora - [CONTIKI_DIR]/tools/cooja/apps/serial_socket - [CONTIKI_DIR]/tools/cooja/apps/collect-view - - test - 0 - generated - 0 - - org.contikios.cooja.radiomediums.UDGM - 50.0 - 100.0 - 1.0 - 1.0 - - - 40000 - - - org.contikios.cooja.mspmote.SkyMoteType - sky1 - Sky Mote Type #1 - [CONTIKI_DIR]/examples/sky/test-coffee.c - make clean TARGET=sky -make test-coffee.sky TARGET=sky - [CONTIKI_DIR]/examples/sky/test-coffee.sky - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.IPAddress - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.mspmote.interfaces.MspClock - org.contikios.cooja.mspmote.interfaces.MspMoteID - org.contikios.cooja.mspmote.interfaces.SkyButton - org.contikios.cooja.mspmote.interfaces.SkyFlash - org.contikios.cooja.mspmote.interfaces.Msp802154Radio - org.contikios.cooja.mspmote.interfaces.MspSerial - org.contikios.cooja.mspmote.interfaces.SkyLED - - - - - org.contikios.cooja.interfaces.Position - 97.11078411573273 - 56.790978919276014 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 1 - - sky1 - - - - org.contikios.cooja.plugins.SimControl - 248 - 0 - 200 - 0 - 0 - - - org.contikios.cooja.plugins.Visualizer - - org.contikios.cooja.plugins.skins.IDVisualizerSkin - org.contikios.cooja.plugins.skins.LogVisualizerSkin - 0.9090909090909091 0.0 0.0 0.9090909090909091 28.717468985697536 3.3718373461127142 - - 246 - 3 - 170 - 1 - 200 - - - org.contikios.cooja.plugins.LogListener - - - - 846 - 2 - 209 - 2 - 370 - - - org.contikios.cooja.plugins.ScriptRunner - - - true - - 601 - 1 - 370 - 247 - 0 - - - + + + [CONTIKI_DIR]/tools/cooja/apps/mrm + [CONTIKI_DIR]/tools/cooja/apps/mspsim + [CONTIKI_DIR]/tools/cooja/apps/avrora + [CONTIKI_DIR]/tools/cooja/apps/serial_socket + [CONTIKI_DIR]/tools/cooja/apps/collect-view + + test + 0 + generated + 0 + + org.contikios.cooja.radiomediums.UDGM + 50.0 + 100.0 + 1.0 + 1.0 + + + 40000 + + + org.contikios.cooja.mspmote.SkyMoteType + sky1 + Sky Mote Type #1 + [CONTIKI_DIR]/examples/sky/test-coffee.c + make clean TARGET=sky +make test-coffee.sky TARGET=sky + [CONTIKI_DIR]/examples/sky/test-coffee.sky + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.IPAddress + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.mspmote.interfaces.MspClock + org.contikios.cooja.mspmote.interfaces.MspMoteID + org.contikios.cooja.mspmote.interfaces.SkyButton + org.contikios.cooja.mspmote.interfaces.SkyFlash + org.contikios.cooja.mspmote.interfaces.Msp802154Radio + org.contikios.cooja.mspmote.interfaces.MspSerial + org.contikios.cooja.mspmote.interfaces.SkyLED + + + + + org.contikios.cooja.interfaces.Position + 97.11078411573273 + 56.790978919276014 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 1 + + sky1 + + + + org.contikios.cooja.plugins.SimControl + 248 + 0 + 200 + 0 + 0 + + + org.contikios.cooja.plugins.Visualizer + + org.contikios.cooja.plugins.skins.IDVisualizerSkin + org.contikios.cooja.plugins.skins.LogVisualizerSkin + 0.9090909090909091 0.0 0.0 0.9090909090909091 28.717468985697536 3.3718373461127142 + + 246 + 3 + 170 + 1 + 200 + + + org.contikios.cooja.plugins.LogListener + + + + 846 + 2 + 209 + 2 + 370 + + + org.contikios.cooja.plugins.ScriptRunner + + + true + + 601 + 1 + 370 + 247 + 0 + + + diff --git a/regression-tests/04-rime/01-cooja-collect.csc b/regression-tests/04-rime/01-cooja-collect.csc index f4533eeff..0d1b03a94 100644 --- a/regression-tests/04-rime/01-cooja-collect.csc +++ b/regression-tests/04-rime/01-cooja-collect.csc @@ -1,1019 +1,1019 @@ - - - [APPS_DIR]/mrm - [APPS_DIR]/mspsim - [APPS_DIR]/avrora - [APPS_DIR]/serial_socket - [APPS_DIR]/collect-view - [APPS_DIR]/powertracker - - Rime collect test - 1 - 10000000 - - org.contikios.cooja.radiomediums.UDGM - 80.0 - 0.0 - 1.0 - 1.0 - - - 40000 - - - org.contikios.cooja.contikimote.ContikiMoteType - mtype929 - Contiki Mote Type #1 - [CONTIKI_DIR]/examples/rime/example-collect.c - make example-collect.cooja TARGET=cooja - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.Battery - org.contikios.cooja.contikimote.interfaces.ContikiVib - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - org.contikios.cooja.contikimote.interfaces.ContikiRS232 - org.contikios.cooja.contikimote.interfaces.ContikiBeeper - org.contikios.cooja.contikimote.interfaces.ContikiIPAddress - org.contikios.cooja.contikimote.interfaces.ContikiRadio - org.contikios.cooja.contikimote.interfaces.ContikiButton - org.contikios.cooja.contikimote.interfaces.ContikiPIR - org.contikios.cooja.contikimote.interfaces.ContikiClock - org.contikios.cooja.contikimote.interfaces.ContikiLED - org.contikios.cooja.contikimote.interfaces.ContikiCFS - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.interfaces.MoteAttributes - false - - - - org.contikios.cooja.interfaces.Position - 38.67566417548448 - 47.31532819237484 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 1 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype929 - - - - org.contikios.cooja.interfaces.Position - 71.13430279192914 - 55.964918387262955 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 2 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype929 - - - - org.contikios.cooja.interfaces.Position - 228.04679204790637 - 87.17819808323965 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 3 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype929 - - - - org.contikios.cooja.interfaces.Position - 272.42783222170533 - 46.64334378879388 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 4 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype929 - - - - org.contikios.cooja.interfaces.Position - 238.61415527274 - 44.41698596888275 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 5 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype929 - - - - org.contikios.cooja.interfaces.Position - 132.73939224849255 - 69.21851375812221 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 6 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype929 - - - - org.contikios.cooja.interfaces.Position - 13.282402591495124 - 37.55717734948646 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 7 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype929 - - - - org.contikios.cooja.interfaces.Position - 231.24739439405175 - 48.67375039920239 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 8 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype929 - - - - org.contikios.cooja.interfaces.Position - 207.8959314238542 - 1.1350394672889341 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 9 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype929 - - - - org.contikios.cooja.interfaces.Position - 92.82161206304569 - 92.33145969594939 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 10 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype929 - - - - org.contikios.cooja.interfaces.Position - 160.99396124295916 - 19.643001828505756 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 11 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype929 - - - - org.contikios.cooja.interfaces.Position - 200.78134764559428 - 12.892752477526937 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 12 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype929 - - - - org.contikios.cooja.interfaces.Position - 205.39914563029964 - 28.760487893562114 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 13 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype929 - - - - org.contikios.cooja.interfaces.Position - 252.08232300754125 - 72.49857017173812 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 14 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype929 - - - - org.contikios.cooja.interfaces.Position - 229.71392970623077 - 6.54664783066401 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 15 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype929 - - - - org.contikios.cooja.interfaces.Position - 278.53902340242763 - 68.52057141636107 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 16 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype929 - - - - org.contikios.cooja.interfaces.Position - 63.58843478737991 - 53.533699264766824 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 17 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype929 - - - - org.contikios.cooja.interfaces.Position - 143.25717547901027 - 61.23529184398511 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 18 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype929 - - - - org.contikios.cooja.interfaces.Position - 238.99233371296435 - 11.57402085202307 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 19 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype929 - - - - org.contikios.cooja.interfaces.Position - 131.463497184274 - 37.91565308310023 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 20 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype929 - - - - org.contikios.cooja.interfaces.Position - 299.4799135787668 - 55.16132007269603 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 21 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype929 - - - - org.contikios.cooja.interfaces.Position - 187.71659571763186 - 9.08434815157203 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 22 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype929 - - - - org.contikios.cooja.interfaces.Position - 102.203173631275 - 62.50474380428127 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 23 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype929 - - - - org.contikios.cooja.interfaces.Position - 125.71665361687481 - 43.5458073676737 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 24 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype929 - - - - org.contikios.cooja.interfaces.Position - 252.63631602446236 - 17.060026732849032 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 25 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype929 - - - - org.contikios.cooja.interfaces.Position - 266.5666796770194 - 8.117217835238177 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 26 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype929 - - - - org.contikios.cooja.interfaces.Position - 131.87192517986617 - 32.127513593397026 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 27 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype929 - - - - org.contikios.cooja.interfaces.Position - 30.652367771559508 - 85.42109840411501 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 28 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype929 - - - - org.contikios.cooja.interfaces.Position - 130.99357336573604 - 33.563347799757125 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 29 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype929 - - - - org.contikios.cooja.interfaces.Position - 46.890570472099824 - 84.32697531265379 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 30 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype929 - - - - org.contikios.cooja.interfaces.Position - 289.29241608338094 - 79.10614026359546 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 31 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype929 - - - - org.contikios.cooja.interfaces.Position - 100.85049907610703 - 29.219819221326194 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 32 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype929 - - - - org.contikios.cooja.interfaces.Position - 93.66013534793747 - 61.22227570233571 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 33 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype929 - - - - org.contikios.cooja.interfaces.Position - 165.39189836567348 - 48.74735797514156 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 34 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype929 - - - - org.contikios.cooja.interfaces.Position - 18.853444997565738 - 6.082388970997076 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 35 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype929 - - - - org.contikios.cooja.interfaces.Position - 259.5180066895893 - 75.51462617878758 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 36 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype929 - - - - org.contikios.cooja.interfaces.Position - 263.7950489517294 - 90.09995862170234 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 37 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype929 - - - - org.contikios.cooja.interfaces.Position - 23.947500697143653 - 94.74616081134577 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 38 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype929 - - - - org.contikios.cooja.interfaces.Position - 241.77318785378117 - 91.62879072642055 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 39 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype929 - - - - org.contikios.cooja.interfaces.Position - 66.62200995388741 - 32.556745277962186 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 40 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype929 - - - - org.contikios.cooja.interfaces.Position - 44.26079431121239 - 46.605254676089366 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 41 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype929 - - - - org.contikios.cooja.interfaces.Position - 194.44814750115458 - 79.42937060855046 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 42 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype929 - - - - org.contikios.cooja.interfaces.Position - 183.8414711646846 - 99.24659864419542 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 43 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype929 - - - - org.contikios.cooja.interfaces.Position - 255.80325337307795 - 89.00191251557604 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 44 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype929 - - - - org.contikios.cooja.interfaces.Position - 3.9615742093764172 - 21.929477393662957 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 45 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype929 - - - - org.contikios.cooja.interfaces.Position - 263.8017987770105 - 49.45572112660953 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 46 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype929 - - - - org.contikios.cooja.interfaces.Position - 177.29759773129527 - 10.061128779807616 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 47 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype929 - - - - org.contikios.cooja.interfaces.Position - 65.42708077018108 - 78.7624915799955 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 48 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype929 - - - - org.contikios.cooja.interfaces.Position - 13.61768418807834 - 49.54522480122073 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 49 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype929 - - - - org.contikios.cooja.interfaces.Position - 274.0951558609378 - 65.79963370698627 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 50 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype929 - - - - org.contikios.cooja.plugins.SimControl - 262 - 1 - 185 - 0 - 0 - - - org.contikios.cooja.plugins.Visualizer - - org.contikios.cooja.plugins.skins.IDVisualizerSkin - org.contikios.cooja.plugins.skins.UDGMVisualizerSkin - 1.283542488892569 0.0 0.0 1.283542488892569 56.0530822138472 6.888296017222324 - - 496 - 3 - 198 - 1 - 184 - - - org.contikios.cooja.plugins.LogListener - - ID:1 - - - - 933 - 2 - 333 - 0 - 381 - - - org.contikios.cooja.plugins.ScriptRunner - - - true - - 676 - 0 - 714 - 497 - 0 - - - + + + [APPS_DIR]/mrm + [APPS_DIR]/mspsim + [APPS_DIR]/avrora + [APPS_DIR]/serial_socket + [APPS_DIR]/collect-view + [APPS_DIR]/powertracker + + Rime collect test + 1 + 10000000 + + org.contikios.cooja.radiomediums.UDGM + 80.0 + 0.0 + 1.0 + 1.0 + + + 40000 + + + org.contikios.cooja.contikimote.ContikiMoteType + mtype929 + Contiki Mote Type #1 + [CONTIKI_DIR]/examples/rime/example-collect.c + make example-collect.cooja TARGET=cooja + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.Battery + org.contikios.cooja.contikimote.interfaces.ContikiVib + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + org.contikios.cooja.contikimote.interfaces.ContikiRS232 + org.contikios.cooja.contikimote.interfaces.ContikiBeeper + org.contikios.cooja.contikimote.interfaces.ContikiIPAddress + org.contikios.cooja.contikimote.interfaces.ContikiRadio + org.contikios.cooja.contikimote.interfaces.ContikiButton + org.contikios.cooja.contikimote.interfaces.ContikiPIR + org.contikios.cooja.contikimote.interfaces.ContikiClock + org.contikios.cooja.contikimote.interfaces.ContikiLED + org.contikios.cooja.contikimote.interfaces.ContikiCFS + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.interfaces.MoteAttributes + false + + + + org.contikios.cooja.interfaces.Position + 38.67566417548448 + 47.31532819237484 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 1 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype929 + + + + org.contikios.cooja.interfaces.Position + 71.13430279192914 + 55.964918387262955 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 2 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype929 + + + + org.contikios.cooja.interfaces.Position + 228.04679204790637 + 87.17819808323965 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 3 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype929 + + + + org.contikios.cooja.interfaces.Position + 272.42783222170533 + 46.64334378879388 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 4 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype929 + + + + org.contikios.cooja.interfaces.Position + 238.61415527274 + 44.41698596888275 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 5 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype929 + + + + org.contikios.cooja.interfaces.Position + 132.73939224849255 + 69.21851375812221 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 6 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype929 + + + + org.contikios.cooja.interfaces.Position + 13.282402591495124 + 37.55717734948646 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 7 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype929 + + + + org.contikios.cooja.interfaces.Position + 231.24739439405175 + 48.67375039920239 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 8 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype929 + + + + org.contikios.cooja.interfaces.Position + 207.8959314238542 + 1.1350394672889341 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 9 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype929 + + + + org.contikios.cooja.interfaces.Position + 92.82161206304569 + 92.33145969594939 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 10 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype929 + + + + org.contikios.cooja.interfaces.Position + 160.99396124295916 + 19.643001828505756 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 11 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype929 + + + + org.contikios.cooja.interfaces.Position + 200.78134764559428 + 12.892752477526937 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 12 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype929 + + + + org.contikios.cooja.interfaces.Position + 205.39914563029964 + 28.760487893562114 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 13 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype929 + + + + org.contikios.cooja.interfaces.Position + 252.08232300754125 + 72.49857017173812 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 14 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype929 + + + + org.contikios.cooja.interfaces.Position + 229.71392970623077 + 6.54664783066401 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 15 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype929 + + + + org.contikios.cooja.interfaces.Position + 278.53902340242763 + 68.52057141636107 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 16 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype929 + + + + org.contikios.cooja.interfaces.Position + 63.58843478737991 + 53.533699264766824 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 17 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype929 + + + + org.contikios.cooja.interfaces.Position + 143.25717547901027 + 61.23529184398511 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 18 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype929 + + + + org.contikios.cooja.interfaces.Position + 238.99233371296435 + 11.57402085202307 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 19 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype929 + + + + org.contikios.cooja.interfaces.Position + 131.463497184274 + 37.91565308310023 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 20 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype929 + + + + org.contikios.cooja.interfaces.Position + 299.4799135787668 + 55.16132007269603 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 21 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype929 + + + + org.contikios.cooja.interfaces.Position + 187.71659571763186 + 9.08434815157203 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 22 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype929 + + + + org.contikios.cooja.interfaces.Position + 102.203173631275 + 62.50474380428127 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 23 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype929 + + + + org.contikios.cooja.interfaces.Position + 125.71665361687481 + 43.5458073676737 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 24 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype929 + + + + org.contikios.cooja.interfaces.Position + 252.63631602446236 + 17.060026732849032 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 25 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype929 + + + + org.contikios.cooja.interfaces.Position + 266.5666796770194 + 8.117217835238177 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 26 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype929 + + + + org.contikios.cooja.interfaces.Position + 131.87192517986617 + 32.127513593397026 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 27 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype929 + + + + org.contikios.cooja.interfaces.Position + 30.652367771559508 + 85.42109840411501 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 28 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype929 + + + + org.contikios.cooja.interfaces.Position + 130.99357336573604 + 33.563347799757125 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 29 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype929 + + + + org.contikios.cooja.interfaces.Position + 46.890570472099824 + 84.32697531265379 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 30 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype929 + + + + org.contikios.cooja.interfaces.Position + 289.29241608338094 + 79.10614026359546 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 31 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype929 + + + + org.contikios.cooja.interfaces.Position + 100.85049907610703 + 29.219819221326194 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 32 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype929 + + + + org.contikios.cooja.interfaces.Position + 93.66013534793747 + 61.22227570233571 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 33 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype929 + + + + org.contikios.cooja.interfaces.Position + 165.39189836567348 + 48.74735797514156 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 34 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype929 + + + + org.contikios.cooja.interfaces.Position + 18.853444997565738 + 6.082388970997076 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 35 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype929 + + + + org.contikios.cooja.interfaces.Position + 259.5180066895893 + 75.51462617878758 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 36 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype929 + + + + org.contikios.cooja.interfaces.Position + 263.7950489517294 + 90.09995862170234 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 37 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype929 + + + + org.contikios.cooja.interfaces.Position + 23.947500697143653 + 94.74616081134577 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 38 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype929 + + + + org.contikios.cooja.interfaces.Position + 241.77318785378117 + 91.62879072642055 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 39 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype929 + + + + org.contikios.cooja.interfaces.Position + 66.62200995388741 + 32.556745277962186 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 40 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype929 + + + + org.contikios.cooja.interfaces.Position + 44.26079431121239 + 46.605254676089366 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 41 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype929 + + + + org.contikios.cooja.interfaces.Position + 194.44814750115458 + 79.42937060855046 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 42 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype929 + + + + org.contikios.cooja.interfaces.Position + 183.8414711646846 + 99.24659864419542 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 43 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype929 + + + + org.contikios.cooja.interfaces.Position + 255.80325337307795 + 89.00191251557604 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 44 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype929 + + + + org.contikios.cooja.interfaces.Position + 3.9615742093764172 + 21.929477393662957 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 45 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype929 + + + + org.contikios.cooja.interfaces.Position + 263.8017987770105 + 49.45572112660953 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 46 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype929 + + + + org.contikios.cooja.interfaces.Position + 177.29759773129527 + 10.061128779807616 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 47 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype929 + + + + org.contikios.cooja.interfaces.Position + 65.42708077018108 + 78.7624915799955 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 48 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype929 + + + + org.contikios.cooja.interfaces.Position + 13.61768418807834 + 49.54522480122073 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 49 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype929 + + + + org.contikios.cooja.interfaces.Position + 274.0951558609378 + 65.79963370698627 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 50 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype929 + + + + org.contikios.cooja.plugins.SimControl + 262 + 1 + 185 + 0 + 0 + + + org.contikios.cooja.plugins.Visualizer + + org.contikios.cooja.plugins.skins.IDVisualizerSkin + org.contikios.cooja.plugins.skins.UDGMVisualizerSkin + 1.283542488892569 0.0 0.0 1.283542488892569 56.0530822138472 6.888296017222324 + + 496 + 3 + 198 + 1 + 184 + + + org.contikios.cooja.plugins.LogListener + + ID:1 + + + + 933 + 2 + 333 + 0 + 381 + + + org.contikios.cooja.plugins.ScriptRunner + + + true + + 676 + 0 + 714 + 497 + 0 + + + diff --git a/regression-tests/04-rime/02-cooja-rucb.csc b/regression-tests/04-rime/02-cooja-rucb.csc index 08a177fee..34f48e8e0 100644 --- a/regression-tests/04-rime/02-cooja-rucb.csc +++ b/regression-tests/04-rime/02-cooja-rucb.csc @@ -1,181 +1,181 @@ - - - [APPS_DIR]/mrm - [APPS_DIR]/mspsim - [APPS_DIR]/avrora - [APPS_DIR]/serial_socket - [APPS_DIR]/collect-view - [APPS_DIR]/powertracker - - My simulation - generated - 1000000 - - org.contikios.cooja.radiomediums.UDGM - 25.0 - 40.0 - 0.99 - 1.0 - - - 40000 - - - org.contikios.cooja.contikimote.ContikiMoteType - mtype965 - Contiki Mote #1 - [CONTIKI_DIR]/examples/rime/example-rucb.c - make example-rucb.cooja TARGET=cooja - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.Battery - org.contikios.cooja.contikimote.interfaces.ContikiVib - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - org.contikios.cooja.contikimote.interfaces.ContikiRS232 - org.contikios.cooja.contikimote.interfaces.ContikiBeeper - org.contikios.cooja.contikimote.interfaces.ContikiIPAddress - org.contikios.cooja.contikimote.interfaces.ContikiRadio - org.contikios.cooja.contikimote.interfaces.ContikiButton - org.contikios.cooja.contikimote.interfaces.ContikiPIR - org.contikios.cooja.contikimote.interfaces.ContikiClock - org.contikios.cooja.contikimote.interfaces.ContikiLED - org.contikios.cooja.contikimote.interfaces.ContikiCFS - org.contikios.cooja.interfaces.Mote2MoteRelations - false - - - - org.contikios.cooja.interfaces.Position - 0.0 - 50.00000000000001 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 51 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype965 - - - - org.contikios.cooja.interfaces.Position - 14.102564102564104 - 45.28301886792453 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 52 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype965 - - - - org.contikios.cooja.interfaces.Position - -32.16814655285737 - 42.92182758760039 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 53 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype965 - - - - org.contikios.cooja.interfaces.Position - -1.5917258339289355 - 37.3750708005199 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 54 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype965 - - - - org.contikios.cooja.interfaces.Position - 26.334899854939632 - 53.05390331866741 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 55 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype965 - - - - org.contikios.cooja.plugins.SimControl - 265 - 3 - 200 - 0 - 0 - - - org.contikios.cooja.plugins.LogListener - - - - - - 798 - 2 - 289 - 0 - 354 - - - org.contikios.cooja.plugins.Visualizer - - org.contikios.cooja.plugins.skins.IDVisualizerSkin - org.contikios.cooja.plugins.skins.UDGMVisualizerSkin - 3.931419201604973 0.0 0.0 3.931419201604973 137.46646903794633 -127.75710261680608 - - 265 - 0 - 155 - 0 - 200 - - - org.contikios.cooja.plugins.ScriptRunner - - - true - - 534 - 1 - 354 - 264 - 0 - - - + + + [APPS_DIR]/mrm + [APPS_DIR]/mspsim + [APPS_DIR]/avrora + [APPS_DIR]/serial_socket + [APPS_DIR]/collect-view + [APPS_DIR]/powertracker + + My simulation + generated + 1000000 + + org.contikios.cooja.radiomediums.UDGM + 25.0 + 40.0 + 0.99 + 1.0 + + + 40000 + + + org.contikios.cooja.contikimote.ContikiMoteType + mtype965 + Contiki Mote #1 + [CONTIKI_DIR]/examples/rime/example-rucb.c + make example-rucb.cooja TARGET=cooja + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.Battery + org.contikios.cooja.contikimote.interfaces.ContikiVib + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + org.contikios.cooja.contikimote.interfaces.ContikiRS232 + org.contikios.cooja.contikimote.interfaces.ContikiBeeper + org.contikios.cooja.contikimote.interfaces.ContikiIPAddress + org.contikios.cooja.contikimote.interfaces.ContikiRadio + org.contikios.cooja.contikimote.interfaces.ContikiButton + org.contikios.cooja.contikimote.interfaces.ContikiPIR + org.contikios.cooja.contikimote.interfaces.ContikiClock + org.contikios.cooja.contikimote.interfaces.ContikiLED + org.contikios.cooja.contikimote.interfaces.ContikiCFS + org.contikios.cooja.interfaces.Mote2MoteRelations + false + + + + org.contikios.cooja.interfaces.Position + 0.0 + 50.00000000000001 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 51 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype965 + + + + org.contikios.cooja.interfaces.Position + 14.102564102564104 + 45.28301886792453 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 52 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype965 + + + + org.contikios.cooja.interfaces.Position + -32.16814655285737 + 42.92182758760039 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 53 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype965 + + + + org.contikios.cooja.interfaces.Position + -1.5917258339289355 + 37.3750708005199 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 54 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype965 + + + + org.contikios.cooja.interfaces.Position + 26.334899854939632 + 53.05390331866741 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 55 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype965 + + + + org.contikios.cooja.plugins.SimControl + 265 + 3 + 200 + 0 + 0 + + + org.contikios.cooja.plugins.LogListener + + + + + + 798 + 2 + 289 + 0 + 354 + + + org.contikios.cooja.plugins.Visualizer + + org.contikios.cooja.plugins.skins.IDVisualizerSkin + org.contikios.cooja.plugins.skins.UDGMVisualizerSkin + 3.931419201604973 0.0 0.0 3.931419201604973 137.46646903794633 -127.75710261680608 + + 265 + 0 + 155 + 0 + 200 + + + org.contikios.cooja.plugins.ScriptRunner + + + true + + 534 + 1 + 354 + 264 + 0 + + + diff --git a/regression-tests/04-rime/03-sky-abc.csc b/regression-tests/04-rime/03-sky-abc.csc index 72934b701..4387c58bc 100644 --- a/regression-tests/04-rime/03-sky-abc.csc +++ b/regression-tests/04-rime/03-sky-abc.csc @@ -1,137 +1,137 @@ - - - [APPS_DIR]/mrm - [APPS_DIR]/mspsim - [APPS_DIR]/avrora - [APPS_DIR]/serial_socket - [APPS_DIR]/collect-view - [APPS_DIR]/powertracker - - My simulation - generated - 5000000 - - org.contikios.cooja.radiomediums.UDGM - 50.0 - 100.0 - 0.95 - 1.0 - - - 40000 - - - org.contikios.cooja.mspmote.SkyMoteType - sky1 - Sky Mote Type #1 - [CONTIKI_DIR]/examples/rime/example-abc.c - make clean TARGET=sky -make example-abc.sky TARGET=sky - [CONTIKI_DIR]/examples/rime/example-abc.sky - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.IPAddress - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.mspmote.interfaces.MspClock - org.contikios.cooja.mspmote.interfaces.MspMoteID - org.contikios.cooja.mspmote.interfaces.SkyButton - org.contikios.cooja.mspmote.interfaces.SkyFlash - org.contikios.cooja.mspmote.interfaces.Msp802154Radio - org.contikios.cooja.mspmote.interfaces.MspSerial - org.contikios.cooja.mspmote.interfaces.SkyLED - - - - - org.contikios.cooja.interfaces.Position - 33.53152221759984 - 15.078801911773077 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 1 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 54.67966631314053 - 31.0253850381183 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 2 - - sky1 - - - - org.contikios.cooja.plugins.SimControl - 313 - 3 - 199 - 0 - 0 - - - org.contikios.cooja.plugins.Visualizer - - org.contikios.cooja.plugins.skins.IDVisualizerSkin - org.contikios.cooja.plugins.skins.UDGMVisualizerSkin - 3.93358704057683 0.0 0.0 3.93358704057683 -23.493194019199933 -56.677416151212064 - - 312 - 2 - 123 - 0 - 198 - - - org.contikios.cooja.plugins.LogListener - - - - - - 311 - 0 - 377 - 1 - 320 - - - org.contikios.cooja.plugins.ScriptRunner - - - true - - 601 - 1 - 697 - 312 - 0 - - - + + + [APPS_DIR]/mrm + [APPS_DIR]/mspsim + [APPS_DIR]/avrora + [APPS_DIR]/serial_socket + [APPS_DIR]/collect-view + [APPS_DIR]/powertracker + + My simulation + generated + 5000000 + + org.contikios.cooja.radiomediums.UDGM + 50.0 + 100.0 + 0.95 + 1.0 + + + 40000 + + + org.contikios.cooja.mspmote.SkyMoteType + sky1 + Sky Mote Type #1 + [CONTIKI_DIR]/examples/rime/example-abc.c + make clean TARGET=sky +make example-abc.sky TARGET=sky + [CONTIKI_DIR]/examples/rime/example-abc.sky + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.IPAddress + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.mspmote.interfaces.MspClock + org.contikios.cooja.mspmote.interfaces.MspMoteID + org.contikios.cooja.mspmote.interfaces.SkyButton + org.contikios.cooja.mspmote.interfaces.SkyFlash + org.contikios.cooja.mspmote.interfaces.Msp802154Radio + org.contikios.cooja.mspmote.interfaces.MspSerial + org.contikios.cooja.mspmote.interfaces.SkyLED + + + + + org.contikios.cooja.interfaces.Position + 33.53152221759984 + 15.078801911773077 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 1 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 54.67966631314053 + 31.0253850381183 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 2 + + sky1 + + + + org.contikios.cooja.plugins.SimControl + 313 + 3 + 199 + 0 + 0 + + + org.contikios.cooja.plugins.Visualizer + + org.contikios.cooja.plugins.skins.IDVisualizerSkin + org.contikios.cooja.plugins.skins.UDGMVisualizerSkin + 3.93358704057683 0.0 0.0 3.93358704057683 -23.493194019199933 -56.677416151212064 + + 312 + 2 + 123 + 0 + 198 + + + org.contikios.cooja.plugins.LogListener + + + + + + 311 + 0 + 377 + 1 + 320 + + + org.contikios.cooja.plugins.ScriptRunner + + + true + + 601 + 1 + 697 + 312 + 0 + + + diff --git a/regression-tests/04-rime/04-sky-deluge.csc b/regression-tests/04-rime/04-sky-deluge.csc index ce5a6581a..f62d87145 100644 --- a/regression-tests/04-rime/04-sky-deluge.csc +++ b/regression-tests/04-rime/04-sky-deluge.csc @@ -1,155 +1,155 @@ - - - [APPS_DIR]/mrm - [APPS_DIR]/mspsim - [APPS_DIR]/avrora - [APPS_DIR]/serial_socket - [APPS_DIR]/collect-view - [APPS_DIR]/powertracker - - Deluge - generated - 1000000 - - org.contikios.cooja.radiomediums.UDGM - 50.0 - 100.0 - 1.0 - 1.0 - - - 40000 - - - org.contikios.cooja.mspmote.SkyMoteType - sky1 - Sky Mote Type #1 - [CONTIKI_DIR]/examples/sky/test-deluge.c - make clean TARGET=sky -make APPS=deluge test-deluge.sky TARGET=sky - [CONTIKI_DIR]/examples/sky/test-deluge.sky - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.IPAddress - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.mspmote.interfaces.MspClock - org.contikios.cooja.mspmote.interfaces.MspMoteID - org.contikios.cooja.mspmote.interfaces.SkyButton - org.contikios.cooja.mspmote.interfaces.SkyFlash - org.contikios.cooja.mspmote.interfaces.Msp802154Radio - org.contikios.cooja.mspmote.interfaces.MspSerial - org.contikios.cooja.mspmote.interfaces.SkyLED - - - - - org.contikios.cooja.interfaces.Position - 22.464792491653174 - 11.3235347656354 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 1 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 16.167564578306468 - 29.89745599030348 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 3 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 63.42409596590043 - 12.470791515046386 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 5 - - sky1 - - - - org.contikios.cooja.plugins.SimControl - 282 - 4 - 212 - 0 - 0 - - - org.contikios.cooja.plugins.Visualizer - - org.contikios.cooja.plugins.skins.IDVisualizerSkin - org.contikios.cooja.plugins.skins.UDGMVisualizerSkin - 4.405003166995177 0.0 0.0 4.405003166995177 -40.3007583818182 -45.78929741329485 - - 283 - 2 - 144 - -1 - 212 - - - org.contikios.cooja.plugins.ScriptRunner - - - true - - 600 - 1 - 357 - 281 - 1 - - - org.contikios.cooja.plugins.TimeLine - - 0 - 1 - 2 - - 500.0 - - 882 - 3 - 149 - -1 - 357 - - - org.contikios.cooja.plugins.LogListener - - - - - - 882 - 0 - 195 - -1 - 504 - - - + + + [APPS_DIR]/mrm + [APPS_DIR]/mspsim + [APPS_DIR]/avrora + [APPS_DIR]/serial_socket + [APPS_DIR]/collect-view + [APPS_DIR]/powertracker + + Deluge + generated + 1000000 + + org.contikios.cooja.radiomediums.UDGM + 50.0 + 100.0 + 1.0 + 1.0 + + + 40000 + + + org.contikios.cooja.mspmote.SkyMoteType + sky1 + Sky Mote Type #1 + [CONTIKI_DIR]/examples/sky/test-deluge.c + make clean TARGET=sky +make APPS=deluge test-deluge.sky TARGET=sky + [CONTIKI_DIR]/examples/sky/test-deluge.sky + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.IPAddress + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.mspmote.interfaces.MspClock + org.contikios.cooja.mspmote.interfaces.MspMoteID + org.contikios.cooja.mspmote.interfaces.SkyButton + org.contikios.cooja.mspmote.interfaces.SkyFlash + org.contikios.cooja.mspmote.interfaces.Msp802154Radio + org.contikios.cooja.mspmote.interfaces.MspSerial + org.contikios.cooja.mspmote.interfaces.SkyLED + + + + + org.contikios.cooja.interfaces.Position + 22.464792491653174 + 11.3235347656354 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 1 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 16.167564578306468 + 29.89745599030348 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 3 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 63.42409596590043 + 12.470791515046386 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 5 + + sky1 + + + + org.contikios.cooja.plugins.SimControl + 282 + 4 + 212 + 0 + 0 + + + org.contikios.cooja.plugins.Visualizer + + org.contikios.cooja.plugins.skins.IDVisualizerSkin + org.contikios.cooja.plugins.skins.UDGMVisualizerSkin + 4.405003166995177 0.0 0.0 4.405003166995177 -40.3007583818182 -45.78929741329485 + + 283 + 2 + 144 + -1 + 212 + + + org.contikios.cooja.plugins.ScriptRunner + + + true + + 600 + 1 + 357 + 281 + 1 + + + org.contikios.cooja.plugins.TimeLine + + 0 + 1 + 2 + + 500.0 + + 882 + 3 + 149 + -1 + 357 + + + org.contikios.cooja.plugins.LogListener + + + + + + 882 + 0 + 195 + -1 + 504 + + + diff --git a/regression-tests/04-rime/05-sky-runicast.csc b/regression-tests/04-rime/05-sky-runicast.csc index 605ba245a..a12c49771 100644 --- a/regression-tests/04-rime/05-sky-runicast.csc +++ b/regression-tests/04-rime/05-sky-runicast.csc @@ -1,212 +1,212 @@ - - - [APPS_DIR]/mrm - [APPS_DIR]/mspsim - [APPS_DIR]/avrora - [APPS_DIR]/serial_socket - [APPS_DIR]/collect-view - [APPS_DIR]/powertracker - - My simulation - 1 - 10000000 - - org.contikios.cooja.radiomediums.UDGM - 50.0 - 0.0 - 0.9 - 1.0 - - - 40000 - - - org.contikios.cooja.mspmote.SkyMoteType - sky1 - Sky Mote Type #1 - [CONTIKI_DIR]/examples/rime/example-runicast.c - make clean TARGET=sky -make example-runicast.sky TARGET=sky - [CONTIKI_DIR]/examples/rime/example-runicast.sky - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.IPAddress - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.mspmote.interfaces.MspClock - org.contikios.cooja.mspmote.interfaces.MspMoteID - org.contikios.cooja.mspmote.interfaces.SkyButton - org.contikios.cooja.mspmote.interfaces.SkyFlash - org.contikios.cooja.mspmote.interfaces.Msp802154Radio - org.contikios.cooja.mspmote.interfaces.MspSerial - org.contikios.cooja.mspmote.interfaces.SkyLED - - - - - org.contikios.cooja.interfaces.Position - 3.0783332685337617 - 38.39795740836801 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 1 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 1.1986251808192212 - 53.65838347315817 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 2 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 34.432838059195255 - 38.26541658684913 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 3 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 150.85510197745134 - 141.37553211643905 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 4 - - sky1 - - - - org.contikios.cooja.plugins.SimControl - 265 - 4 - 200 - 0 - 0 - - - org.contikios.cooja.plugins.LogListener - - received - - - - 539 - 0 - 319 - 0 - 325 - - - org.contikios.cooja.plugins.Visualizer - - org.contikios.cooja.plugins.skins.IDVisualizerSkin - org.contikios.cooja.plugins.skins.UDGMVisualizerSkin - 0.6259856679816412 0.0 0.0 0.6259856679816412 77.4082730178659 -21.226329635441804 - - 263 - 2 - 125 - 1 - 200 - - - org.contikios.cooja.plugins.RadioLogger - - 150 - - false - false - - 276 - 1 - 324 - 264 - 1 - - - org.contikios.cooja.plugins.ScriptRunner - - - true - - 503 - 3 - 643 - 539 - 1 - - - + + + [APPS_DIR]/mrm + [APPS_DIR]/mspsim + [APPS_DIR]/avrora + [APPS_DIR]/serial_socket + [APPS_DIR]/collect-view + [APPS_DIR]/powertracker + + My simulation + 1 + 10000000 + + org.contikios.cooja.radiomediums.UDGM + 50.0 + 0.0 + 0.9 + 1.0 + + + 40000 + + + org.contikios.cooja.mspmote.SkyMoteType + sky1 + Sky Mote Type #1 + [CONTIKI_DIR]/examples/rime/example-runicast.c + make clean TARGET=sky +make example-runicast.sky TARGET=sky + [CONTIKI_DIR]/examples/rime/example-runicast.sky + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.IPAddress + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.mspmote.interfaces.MspClock + org.contikios.cooja.mspmote.interfaces.MspMoteID + org.contikios.cooja.mspmote.interfaces.SkyButton + org.contikios.cooja.mspmote.interfaces.SkyFlash + org.contikios.cooja.mspmote.interfaces.Msp802154Radio + org.contikios.cooja.mspmote.interfaces.MspSerial + org.contikios.cooja.mspmote.interfaces.SkyLED + + + + + org.contikios.cooja.interfaces.Position + 3.0783332685337617 + 38.39795740836801 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 1 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 1.1986251808192212 + 53.65838347315817 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 2 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 34.432838059195255 + 38.26541658684913 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 3 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 150.85510197745134 + 141.37553211643905 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 4 + + sky1 + + + + org.contikios.cooja.plugins.SimControl + 265 + 4 + 200 + 0 + 0 + + + org.contikios.cooja.plugins.LogListener + + received + + + + 539 + 0 + 319 + 0 + 325 + + + org.contikios.cooja.plugins.Visualizer + + org.contikios.cooja.plugins.skins.IDVisualizerSkin + org.contikios.cooja.plugins.skins.UDGMVisualizerSkin + 0.6259856679816412 0.0 0.0 0.6259856679816412 77.4082730178659 -21.226329635441804 + + 263 + 2 + 125 + 1 + 200 + + + org.contikios.cooja.plugins.RadioLogger + + 150 + + false + false + + 276 + 1 + 324 + 264 + 1 + + + org.contikios.cooja.plugins.ScriptRunner + + + true + + 503 + 3 + 643 + 539 + 1 + + + diff --git a/regression-tests/04-rime/06-sky-trickle.csc b/regression-tests/04-rime/06-sky-trickle.csc index 33baa35aa..c5d2dd047 100644 --- a/regression-tests/04-rime/06-sky-trickle.csc +++ b/regression-tests/04-rime/06-sky-trickle.csc @@ -1,256 +1,256 @@ - - - [APPS_DIR]/mrm - [APPS_DIR]/mspsim - [APPS_DIR]/avrora - [APPS_DIR]/serial_socket - [APPS_DIR]/collect-view - [APPS_DIR]/powertracker - - My simulation - generated - 1000000 - - org.contikios.cooja.radiomediums.UDGM - 41.0 - 55.0 - 1.0 - 1.0 - - - 40000 - - - org.contikios.cooja.mspmote.SkyMoteType - sky1 - Sky Mote Type #1 - [CONTIKI_DIR]/examples/rime/example-trickle.c - make clean TARGET=sky -make example-trickle.sky TARGET=sky - [CONTIKI_DIR]/examples/rime/example-trickle.sky - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.IPAddress - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.mspmote.interfaces.MspClock - org.contikios.cooja.mspmote.interfaces.MspMoteID - org.contikios.cooja.mspmote.interfaces.SkyButton - org.contikios.cooja.mspmote.interfaces.SkyFlash - org.contikios.cooja.mspmote.interfaces.Msp802154Radio - org.contikios.cooja.mspmote.interfaces.MspSerial - org.contikios.cooja.mspmote.interfaces.SkyLED - - - - - org.contikios.cooja.interfaces.Position - 21.25615651441164 - 15.906616513243888 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 1 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 29.258648178869528 - 64.81243553163958 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 2 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 53.58390840870132 - 99.01827951434828 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 3 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 4.089137066756255 - 57.26244252237209 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 4 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 84.2311285004563 - 14.6212837520458 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 5 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 40.97868508483131 - 69.00112748842623 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 6 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 34.348646576361716 - 33.331938472933615 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 7 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 76.46661251540715 - 62.393168145801916 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 8 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 87.91615665417679 - 41.2939192052263 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 9 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 25.396991214895582 - 87.22076662391413 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 10 - - sky1 - - - - org.contikios.cooja.plugins.Visualizer - - org.contikios.cooja.plugins.skins.IDVisualizerSkin - org.contikios.cooja.plugins.skins.UDGMVisualizerSkin - 1.2387343127698363 0.0 0.0 1.2387343127698363 92.01494285570652 -13.3846131531305 - - 310 - 2 - 169 - 2 - 199 - - - org.contikios.cooja.plugins.SimControl - 313 - 3 - 199 - 1 - 0 - - - org.contikios.cooja.plugins.LogListener - - - - - - 310 - 1 - 331 - 3 - 368 - - - org.contikios.cooja.plugins.ScriptRunner - - - true - - 600 - 0 - 700 - 314 - 0 - - - + + + [APPS_DIR]/mrm + [APPS_DIR]/mspsim + [APPS_DIR]/avrora + [APPS_DIR]/serial_socket + [APPS_DIR]/collect-view + [APPS_DIR]/powertracker + + My simulation + generated + 1000000 + + org.contikios.cooja.radiomediums.UDGM + 41.0 + 55.0 + 1.0 + 1.0 + + + 40000 + + + org.contikios.cooja.mspmote.SkyMoteType + sky1 + Sky Mote Type #1 + [CONTIKI_DIR]/examples/rime/example-trickle.c + make clean TARGET=sky +make example-trickle.sky TARGET=sky + [CONTIKI_DIR]/examples/rime/example-trickle.sky + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.IPAddress + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.mspmote.interfaces.MspClock + org.contikios.cooja.mspmote.interfaces.MspMoteID + org.contikios.cooja.mspmote.interfaces.SkyButton + org.contikios.cooja.mspmote.interfaces.SkyFlash + org.contikios.cooja.mspmote.interfaces.Msp802154Radio + org.contikios.cooja.mspmote.interfaces.MspSerial + org.contikios.cooja.mspmote.interfaces.SkyLED + + + + + org.contikios.cooja.interfaces.Position + 21.25615651441164 + 15.906616513243888 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 1 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 29.258648178869528 + 64.81243553163958 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 2 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 53.58390840870132 + 99.01827951434828 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 3 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 4.089137066756255 + 57.26244252237209 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 4 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 84.2311285004563 + 14.6212837520458 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 5 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 40.97868508483131 + 69.00112748842623 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 6 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 34.348646576361716 + 33.331938472933615 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 7 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 76.46661251540715 + 62.393168145801916 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 8 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 87.91615665417679 + 41.2939192052263 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 9 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 25.396991214895582 + 87.22076662391413 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 10 + + sky1 + + + + org.contikios.cooja.plugins.Visualizer + + org.contikios.cooja.plugins.skins.IDVisualizerSkin + org.contikios.cooja.plugins.skins.UDGMVisualizerSkin + 1.2387343127698363 0.0 0.0 1.2387343127698363 92.01494285570652 -13.3846131531305 + + 310 + 2 + 169 + 2 + 199 + + + org.contikios.cooja.plugins.SimControl + 313 + 3 + 199 + 1 + 0 + + + org.contikios.cooja.plugins.LogListener + + + + + + 310 + 1 + 331 + 3 + 368 + + + org.contikios.cooja.plugins.ScriptRunner + + + true + + 600 + 0 + 700 + 314 + 0 + + + diff --git a/regression-tests/04-rime/07-sky-collect.csc b/regression-tests/04-rime/07-sky-collect.csc index 58dc38e75..3fe71e180 100644 --- a/regression-tests/04-rime/07-sky-collect.csc +++ b/regression-tests/04-rime/07-sky-collect.csc @@ -1,245 +1,245 @@ - - - [APPS_DIR]/mrm - [APPS_DIR]/mspsim - [APPS_DIR]/avrora - [APPS_DIR]/serial_socket - [APPS_DIR]/collect-view - [APPS_DIR]/powertracker - - My simulation - generated - 10000000 - - org.contikios.cooja.radiomediums.UDGM - 30.0 - 40.0 - 0.9 - 0.9 - - - 40000 - - - org.contikios.cooja.mspmote.SkyMoteType - sky1 - Sky Mote Type #1 - [CONTIKI_DIR]/examples/sky/sky-collect.c - make clean TARGET=sky -make sky-collect.sky TARGET=sky - [CONTIKI_DIR]/examples/sky/sky-collect.sky - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.IPAddress - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.mspmote.interfaces.MspClock - org.contikios.cooja.mspmote.interfaces.MspMoteID - org.contikios.cooja.mspmote.interfaces.SkyButton - org.contikios.cooja.mspmote.interfaces.SkyFlash - org.contikios.cooja.mspmote.interfaces.Msp802154Radio - org.contikios.cooja.mspmote.interfaces.MspSerial - org.contikios.cooja.mspmote.interfaces.SkyLED - - - - - org.contikios.cooja.interfaces.Position - 9.333811152651393 - 89.28114548870677 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 1 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 33.040227185226826 - 54.184283361563054 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 2 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - -2.2559922410521516 - 50.71648775308175 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 3 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 12.959353575718179 - 43.874396471224806 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 4 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 15.917348901177405 - 66.93526904376517 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 5 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 26.735174243053933 - 35.939375910459084 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 6 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 41.5254792748469 - 28.370611308140152 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 7 - - sky1 - - - - org.contikios.cooja.plugins.SimControl - 265 - 3 - 200 - 0 - 0 - - - org.contikios.cooja.plugins.Visualizer - - org.contikios.cooja.plugins.skins.IDVisualizerSkin - org.contikios.cooja.plugins.skins.UDGMVisualizerSkin - 1.9551775516837413 0.0 0.0 1.9551775516837413 87.61059024269439 -50.01503690267507 - - 264 - 1 - 185 - 0 - 200 - - - org.contikios.cooja.plugins.ScriptRunner - - - true - - 600 - 2 - 385 - 266 - 0 - - - org.contikios.cooja.plugins.TimeLine - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - - 500.0 - - 866 - 0 - 152 - 0 - 384 - - - + + + [APPS_DIR]/mrm + [APPS_DIR]/mspsim + [APPS_DIR]/avrora + [APPS_DIR]/serial_socket + [APPS_DIR]/collect-view + [APPS_DIR]/powertracker + + My simulation + generated + 10000000 + + org.contikios.cooja.radiomediums.UDGM + 30.0 + 40.0 + 0.9 + 0.9 + + + 40000 + + + org.contikios.cooja.mspmote.SkyMoteType + sky1 + Sky Mote Type #1 + [CONTIKI_DIR]/examples/sky/sky-collect.c + make clean TARGET=sky +make sky-collect.sky TARGET=sky + [CONTIKI_DIR]/examples/sky/sky-collect.sky + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.IPAddress + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.mspmote.interfaces.MspClock + org.contikios.cooja.mspmote.interfaces.MspMoteID + org.contikios.cooja.mspmote.interfaces.SkyButton + org.contikios.cooja.mspmote.interfaces.SkyFlash + org.contikios.cooja.mspmote.interfaces.Msp802154Radio + org.contikios.cooja.mspmote.interfaces.MspSerial + org.contikios.cooja.mspmote.interfaces.SkyLED + + + + + org.contikios.cooja.interfaces.Position + 9.333811152651393 + 89.28114548870677 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 1 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 33.040227185226826 + 54.184283361563054 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 2 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + -2.2559922410521516 + 50.71648775308175 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 3 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 12.959353575718179 + 43.874396471224806 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 4 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 15.917348901177405 + 66.93526904376517 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 5 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 26.735174243053933 + 35.939375910459084 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 6 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 41.5254792748469 + 28.370611308140152 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 7 + + sky1 + + + + org.contikios.cooja.plugins.SimControl + 265 + 3 + 200 + 0 + 0 + + + org.contikios.cooja.plugins.Visualizer + + org.contikios.cooja.plugins.skins.IDVisualizerSkin + org.contikios.cooja.plugins.skins.UDGMVisualizerSkin + 1.9551775516837413 0.0 0.0 1.9551775516837413 87.61059024269439 -50.01503690267507 + + 264 + 1 + 185 + 0 + 200 + + + org.contikios.cooja.plugins.ScriptRunner + + + true + + 600 + 2 + 385 + 266 + 0 + + + org.contikios.cooja.plugins.TimeLine + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + + 500.0 + + 866 + 0 + 152 + 0 + 384 + + + diff --git a/regression-tests/04-rime/08-sky-collect.csc b/regression-tests/04-rime/08-sky-collect.csc index ead2dda9c..5184bf959 100644 --- a/regression-tests/04-rime/08-sky-collect.csc +++ b/regression-tests/04-rime/08-sky-collect.csc @@ -1,447 +1,447 @@ - - - [APPS_DIR]/mrm - [APPS_DIR]/mspsim - [APPS_DIR]/avrora - [APPS_DIR]/serial_socket - [APPS_DIR]/collect-view - [APPS_DIR]/powertracker - - My simulation - generated - 1000000 - - org.contikios.cooja.radiomediums.UDGM - 50.0 - 50.0 - 1.0 - 1.0 - - - 400000 - - - org.contikios.cooja.mspmote.SkyMoteType - sky1 - Sky Mote Type #1 - [CONTIKI_DIR]/examples/rime/example-collect.c - make clean TARGET=sky -make example-collect.sky TARGET=sky - [CONTIKI_DIR]/examples/rime/example-collect.sky - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.IPAddress - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.mspmote.interfaces.MspClock - org.contikios.cooja.mspmote.interfaces.MspMoteID - org.contikios.cooja.mspmote.interfaces.SkyButton - org.contikios.cooja.mspmote.interfaces.SkyFlash - org.contikios.cooja.mspmote.interfaces.Msp802154Radio - org.contikios.cooja.mspmote.interfaces.MspSerial - org.contikios.cooja.mspmote.interfaces.SkyLED - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.interfaces.MoteAttributes - org.contikios.cooja.mspmote.interfaces.SkyCoffeeFilesystem - org.contikios.cooja.mspmote.interfaces.MspDebugOutput - org.contikios.cooja.mspmote.interfaces.SkyTemperature - - - - - org.contikios.cooja.interfaces.Position - 87.29845932913939 - 60.286214311723164 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 1 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 94.30809966340686 - 22.50388779326399 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 2 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 82.40423567500785 - 39.56979106929553 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 3 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 26.185019854469438 - 4.800834369523899 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 4 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 1.9530156130507015 - 78.3175061800706 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 5 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 48.35216700543414 - 80.36988713780997 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 6 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 24.825985087266833 - 74.27809432062487 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 7 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 8.356165164293616 - 94.33967355724187 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 8 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 45.11740613004886 - 31.7059041432301 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 9 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 68.9908548386292 - 55.01991960639596 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 10 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 13.181122543889046 - 55.9636533130127 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 11 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 2.1749985906538427 - 78.39666095789707 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 12 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 37.79795217518357 - 7.164284163506062 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 13 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 64.4595177394984 - 72.115414337433 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 14 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 81.85663737096085 - 89.31412706434035 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 15 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 44.74952276297882 - 18.78566116347574 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 16 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 96.11333426285873 - 90.64560410751824 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 17 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 21.651464136783527 - 7.1381043251259495 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 18 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 83.6006916200628 - 26.97170140682981 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 19 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 1.3446070721664705 - 7.340373220385176 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 20 - - sky1 - - - - org.contikios.cooja.plugins.SimControl - 247 - 0 - 227 - 0 - 0 - - - org.contikios.cooja.plugins.Visualizer - - org.contikios.cooja.plugins.skins.IDVisualizerSkin - org.contikios.cooja.plugins.skins.UDGMVisualizerSkin - 1.685403700540615 0.0 0.0 1.685403700540615 23.872012513439184 -0.545889466623605 - - 224 - 3 - 225 - 247 - 1 - - - org.contikios.cooja.plugins.LogListener - - - - - - 469 - 1 - 473 - 0 - 226 - - - org.contikios.cooja.plugins.ScriptRunner - - - true - - 600 - 2 - 700 - 469 - 0 - - - + + + [APPS_DIR]/mrm + [APPS_DIR]/mspsim + [APPS_DIR]/avrora + [APPS_DIR]/serial_socket + [APPS_DIR]/collect-view + [APPS_DIR]/powertracker + + My simulation + generated + 1000000 + + org.contikios.cooja.radiomediums.UDGM + 50.0 + 50.0 + 1.0 + 1.0 + + + 400000 + + + org.contikios.cooja.mspmote.SkyMoteType + sky1 + Sky Mote Type #1 + [CONTIKI_DIR]/examples/rime/example-collect.c + make clean TARGET=sky +make example-collect.sky TARGET=sky + [CONTIKI_DIR]/examples/rime/example-collect.sky + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.IPAddress + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.mspmote.interfaces.MspClock + org.contikios.cooja.mspmote.interfaces.MspMoteID + org.contikios.cooja.mspmote.interfaces.SkyButton + org.contikios.cooja.mspmote.interfaces.SkyFlash + org.contikios.cooja.mspmote.interfaces.Msp802154Radio + org.contikios.cooja.mspmote.interfaces.MspSerial + org.contikios.cooja.mspmote.interfaces.SkyLED + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.interfaces.MoteAttributes + org.contikios.cooja.mspmote.interfaces.SkyCoffeeFilesystem + org.contikios.cooja.mspmote.interfaces.MspDebugOutput + org.contikios.cooja.mspmote.interfaces.SkyTemperature + + + + + org.contikios.cooja.interfaces.Position + 87.29845932913939 + 60.286214311723164 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 1 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 94.30809966340686 + 22.50388779326399 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 2 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 82.40423567500785 + 39.56979106929553 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 3 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 26.185019854469438 + 4.800834369523899 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 4 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 1.9530156130507015 + 78.3175061800706 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 5 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 48.35216700543414 + 80.36988713780997 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 6 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 24.825985087266833 + 74.27809432062487 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 7 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 8.356165164293616 + 94.33967355724187 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 8 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 45.11740613004886 + 31.7059041432301 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 9 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 68.9908548386292 + 55.01991960639596 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 10 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 13.181122543889046 + 55.9636533130127 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 11 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 2.1749985906538427 + 78.39666095789707 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 12 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 37.79795217518357 + 7.164284163506062 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 13 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 64.4595177394984 + 72.115414337433 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 14 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 81.85663737096085 + 89.31412706434035 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 15 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 44.74952276297882 + 18.78566116347574 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 16 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 96.11333426285873 + 90.64560410751824 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 17 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 21.651464136783527 + 7.1381043251259495 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 18 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 83.6006916200628 + 26.97170140682981 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 19 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 1.3446070721664705 + 7.340373220385176 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 20 + + sky1 + + + + org.contikios.cooja.plugins.SimControl + 247 + 0 + 227 + 0 + 0 + + + org.contikios.cooja.plugins.Visualizer + + org.contikios.cooja.plugins.skins.IDVisualizerSkin + org.contikios.cooja.plugins.skins.UDGMVisualizerSkin + 1.685403700540615 0.0 0.0 1.685403700540615 23.872012513439184 -0.545889466623605 + + 224 + 3 + 225 + 247 + 1 + + + org.contikios.cooja.plugins.LogListener + + + + + + 469 + 1 + 473 + 0 + 226 + + + org.contikios.cooja.plugins.ScriptRunner + + + true + + 600 + 2 + 700 + 469 + 0 + + + diff --git a/regression-tests/04-rime/09-cooja-trickle.csc b/regression-tests/04-rime/09-cooja-trickle.csc index e369b38fc..0b0b02913 100644 --- a/regression-tests/04-rime/09-cooja-trickle.csc +++ b/regression-tests/04-rime/09-cooja-trickle.csc @@ -1,3733 +1,3733 @@ - - - [APPS_DIR]/mrm - [APPS_DIR]/mspsim - [APPS_DIR]/avrora - [APPS_DIR]/serial_socket - [APPS_DIR]/collect-view - [APPS_DIR]/powertracker - - My simulation - 123456 - 1000000 - - org.contikios.cooja.radiomediums.UDGM - 50.0 - 100.0 - 1.0 - 1.0 - - - 40000 - - - org.contikios.cooja.contikimote.ContikiMoteType - mtype896 - Cooja Mote Type #1 - [CONTIKI_DIR]/regression-tests/04-rime/code/trickle-node.c - make trickle-node.cooja TARGET=cooja - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.Battery - org.contikios.cooja.contikimote.interfaces.ContikiVib - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - org.contikios.cooja.contikimote.interfaces.ContikiRS232 - org.contikios.cooja.contikimote.interfaces.ContikiBeeper - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.contikimote.interfaces.ContikiIPAddress - org.contikios.cooja.contikimote.interfaces.ContikiRadio - org.contikios.cooja.contikimote.interfaces.ContikiButton - org.contikios.cooja.contikimote.interfaces.ContikiPIR - org.contikios.cooja.contikimote.interfaces.ContikiClock - org.contikios.cooja.contikimote.interfaces.ContikiLED - org.contikios.cooja.contikimote.interfaces.ContikiCFS - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - false - - - - org.contikios.cooja.interfaces.Position - 6.568882352111016 - 89.62718790694142 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 1 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 99.03493285121479 - 24.74917539729994 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 2 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 34.46908056161367 - 18.92480914055563 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 3 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 58.07300119453901 - 92.56701608022784 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 4 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 4.7746325608922335 - 68.5250549995685 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 5 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 18.43610188865221 - 41.530057356099285 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 6 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 31.167749884374018 - 0.4246722060813446 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 7 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 98.05907643896941 - 46.03790834636672 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 8 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 95.34714997523065 - 3.2350896458523293 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 9 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 23.722342298413977 - 90.49885284216033 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 10 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 70.43619035275792 - 31.31229126426588 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 11 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 22.329321230828146 - 28.57483291743256 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 12 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 3.521960860406137 - 37.26004640789352 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 13 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 40.81173407107168 - 70.05376495995745 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 14 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 56.237452865803284 - 48.60595183121149 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 15 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 56.91660285867381 - 51.813636514575755 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 16 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 85.13927111588634 - 8.975236866142488 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 17 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 85.90257238152364 - 41.570392781749966 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 18 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 85.6228774151565 - 6.150666654291004 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 19 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 4.402889087469841 - 75.06430459857181 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 20 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 38.41618174328178 - 80.82454015548157 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 21 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 3.276612860049055 - 81.3223934030815 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 22 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 80.14814587773299 - 54.624453065746124 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 23 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 89.23520151089006 - 78.61037823351221 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 24 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 67.63702161821816 - 30.319940730263227 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 25 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 90.6520218241395 - 52.31648649198687 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 26 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 47.605575904521366 - 14.370823253222753 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 27 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 88.67935679456845 - 61.63919204722122 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 28 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 62.418430766378876 - 47.72680975556794 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 29 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 10.23968205017769 - 75.6163762374253 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 30 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 80.74688010413567 - 27.78533598308137 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 31 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 46.44207794624185 - 51.45763320882568 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 32 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 7.0847022389592285 - 77.60226416425907 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 33 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 27.504226917155663 - 34.73410517779959 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 34 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 92.73695978910362 - 99.95678973897041 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 35 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 14.527324868321523 - 56.8394498823125 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 36 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 94.94281507755645 - 18.01414591224293 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 37 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 97.85377651671594 - 10.0462063748739 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 38 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 41.52078727408137 - 92.61128889702061 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 39 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 1.8027638261222 - 3.916589413858329 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 40 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 91.87549918798894 - 52.30326661236246 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 41 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 34.08005807274469 - 12.94598595764348 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 42 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 7.101730242894144 - 27.13002370301435 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 43 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 25.037490965858787 - 57.968488949873674 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 44 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 72.67456520669178 - 33.66177410728385 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 45 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 34.34319517282086 - 71.57213261801763 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 46 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 56.92118091628886 - 77.50933833900811 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 47 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 59.83227576735132 - 58.77954760219993 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 48 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 41.915657816008064 - 72.58558519546224 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 49 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 31.843161949870634 - 11.45776022693128 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 50 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 65.09570508598352 - 93.60423316484713 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 51 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 74.89875741192188 - 80.92652240343887 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 52 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 48.929460038917036 - 91.41906683316111 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 53 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 43.04248849739064 - 75.32293243477193 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 54 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 41.20933759984702 - 88.844165747842 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 55 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 3.5541464112273435 - 73.42391971855811 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 56 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 13.553357202634563 - 8.745228245514392 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 57 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 41.40253769625784 - 36.48757620462509 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 58 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 73.67506347331192 - 54.83265107369869 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 59 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 61.08318511785268 - 35.59690497250605 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 60 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 95.85137044132782 - 99.28489161282182 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 61 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 68.06826666325836 - 80.01062116299323 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 62 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 1.3709285227171186 - 27.83979482987321 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 63 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 55.779251931546895 - 47.867628332142296 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 64 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 68.86916632016685 - 42.25345458025911 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 65 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 9.784073639390112 - 54.66511999382987 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 66 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 95.32263665847205 - 29.169605335133387 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 67 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 65.01164751321643 - 97.33231433619049 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 68 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 88.74482401135828 - 22.783989963564157 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 69 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 27.545967288343242 - 37.237989496208876 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 70 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 59.64588740775712 - 32.73151243011021 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 71 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 55.57628010243148 - 18.572794193934385 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 72 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 1.1249240777714387 - 87.06062268595146 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 73 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 7.092987360701453 - 98.39689962662284 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 74 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 47.778110699783305 - 78.86826452553812 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 75 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 19.872086166630687 - 10.087673065581592 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 76 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 76.83945653464441 - 72.21625452263784 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 77 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 24.313413426418006 - 16.49583912236582 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 78 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 36.220670911775784 - 53.58992487019706 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 79 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 76.10572961292435 - 86.04459939174762 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 80 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 33.16796489953524 - 36.83386901636666 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 81 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 74.98899325035866 - 52.19464054460451 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 82 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 3.579026719893441 - 86.83646069167602 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 83 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 41.76221650071965 - 81.74666079700839 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 84 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 69.78320568191269 - 7.050794276477745 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 85 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 9.02306431225367 - 72.64679421061318 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 86 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 27.629713153576873 - 92.23898651665253 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 87 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 34.98929592506449 - 49.27217818671787 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 88 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 30.587535866429583 - 26.80050479119339 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 89 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 34.39608906779097 - 99.26371733510828 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 90 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 37.45944235095177 - 74.0724164992028 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 91 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 88.32858006235864 - 57.18871882501241 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 92 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 94.16116394172158 - 58.63662158359322 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 93 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 15.564809594367867 - 47.69254595203641 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 94 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 41.413013430165826 - 64.6899256321378 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 95 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 73.3865589493186 - 45.058443121696335 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 96 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 96.42027268638782 - 23.86899869771518 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 97 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 84.86883701437324 - 32.64845899868377 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 98 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 94.65313327108798 - 27.70230420435218 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 99 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 33.5738059092315 - 79.6433960321747 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 100 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 99.33692620202561 - 97.40189489144562 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 101 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 13.73120882508002 - 23.621432436274013 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 102 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 72.5766728831825 - 68.51288713680493 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 103 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 4.950792816348571 - 15.285681348852343 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 104 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 39.20164236236282 - 83.69942072278975 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 105 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 53.0370271181274 - 60.231207119248964 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 106 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 78.14821858080782 - 34.54146892809409 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 107 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 72.50396341776242 - 75.8789301489569 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 108 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 16.913316939892876 - 95.71355158239486 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 109 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 49.04703513673822 - 68.13321330510874 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 110 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 32.40331545944186 - 62.56820913685508 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 111 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 60.835810783821444 - 50.163831002129896 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 112 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 31.160192255417684 - 38.395236125710454 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 113 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 72.55056341911987 - 57.8820260523452 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 114 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 77.94005986777552 - 40.10122061017203 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 115 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 94.28787130861903 - 25.7719303970389 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 116 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 3.1093957622807977 - 62.569201519112084 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 117 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 64.68498687585976 - 40.037918368164405 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 118 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 65.15921116282048 - 91.51919233543585 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 119 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 81.92573037729048 - 80.50829267843392 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 120 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 98.35151564789032 - 3.4882838007661565 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 121 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 2.946477891755117 - 50.055906504929425 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 122 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 90.32934974609084 - 77.9630427685427 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 123 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 87.60025637071952 - 1.80503837297753 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 124 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 18.35058527900767 - 51.293195445752104 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 125 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 25.389473062708458 - 46.125636327322816 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 126 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 13.245021295151528 - 12.548238204813323 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 127 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 34.45947569136444 - 17.094159776157568 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 128 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 9.528756367349944 - 17.888880939206096 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 129 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 19.85995506095263 - 22.134359386963155 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 130 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 0.312227052543701 - 39.44212914714669 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 131 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 66.82060507325654 - 89.03944738177172 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 132 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 23.368804404605637 - 66.40869783708897 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 133 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 88.33032080183098 - 66.30412652028217 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 134 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 16.33701125051411 - 6.698226210819103 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 135 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 50.22196379001298 - 60.13373840114642 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 136 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 55.546600574346805 - 55.47285620192937 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 137 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 34.001194017310695 - 93.8082748358454 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 138 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 25.109306918805707 - 78.46207924119797 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 139 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 32.75962613358675 - 21.109138450707288 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 140 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 96.10949800885035 - 20.857677606850554 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 141 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 90.8082963549723 - 88.80113994643916 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 142 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 55.06561703296728 - 82.26101565426288 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 143 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 17.47380330809587 - 26.924230902955582 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 144 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 36.095561138338326 - 71.97744064661859 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 145 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 21.320046667599236 - 7.798905295988067 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 146 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 41.88050388023514 - 71.56267197855983 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 147 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 6.585162015092417 - 92.7837363298666 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 148 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 98.74242142573685 - 19.740657443326338 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 149 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 49.73430066787986 - 22.22829895790325 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 150 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 74.77825204030766 - 2.6349416752525 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 151 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 73.79138439268063 - 70.71246641748267 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 152 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 95.56347662776064 - 75.87786853952764 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 153 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 71.78024476958186 - 13.213873631613083 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 154 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 47.67252804461608 - 77.96254780133673 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 155 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 0.6194413458317061 - 34.64682806345702 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 156 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 49.07305658459414 - 71.74812847796169 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 157 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 92.80412137666126 - 76.30342560411573 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 158 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 49.93319930570762 - 96.07317682900903 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 159 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 76.98926333710033 - 88.82354130296216 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 160 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 74.82106684647339 - 36.916558436055745 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 161 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 89.16515086221875 - 47.83504652861812 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 162 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 24.645916835288627 - 69.59871917130774 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 163 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 14.679543759696879 - 60.43664371305301 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 164 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 75.65153987979136 - 54.45547478030321 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 165 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 66.29062518200514 - 28.028207500959457 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 166 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 74.67149734649688 - 29.744838954989884 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 167 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 55.29668602858735 - 43.100253590461534 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 168 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 70.72844980621184 - 70.9567646582795 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 169 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 99.33685234577365 - 48.63518682957745 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 170 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 8.628475626468823 - 26.064747938969944 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 171 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 71.63295499479383 - 22.595969384054072 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 172 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 60.87598524825064 - 84.65332258064693 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 173 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 89.37524653989819 - 15.118036823593172 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 174 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 90.1136744976992 - 55.530717492965266 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 175 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 62.96013344586719 - 40.70020551173607 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 176 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 20.15948367395768 - 64.83256582828443 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 177 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 49.37052413712121 - 44.82022431266665 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 178 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 84.0420218227114 - 14.369492463481926 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 179 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 30.840080025471906 - 36.578149668144135 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 180 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 1.3870430831427139 - 69.88513114660597 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 181 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 49.94066624290235 - 23.480941841276724 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 182 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 83.92821380255494 - 59.97549673268689 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 183 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 92.44377728597361 - 48.29743959913113 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 184 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 50.34078121439194 - 29.867064939248312 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 185 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 4.985881389952496 - 12.694051853054999 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 186 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 53.249294524443336 - 98.43826962879814 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 187 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 43.155600258355975 - 59.45608169055081 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 188 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 40.05061496082472 - 42.36396331174911 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 189 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 61.74653956591568 - 60.542456279176236 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 190 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 22.71860259258296 - 75.81834442550416 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 191 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 19.39970138952114 - 37.73550104683998 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 192 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 62.30232359627651 - 97.73066836817638 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 193 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 78.69765739092972 - 96.64268722261257 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 194 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 53.36788782367626 - 48.27833687845872 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 195 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 36.160541823751956 - 33.381064580412875 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 196 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 48.8255744951515 - 1.4402697188622637 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 197 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 27.910168295539016 - 31.213307927454192 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 198 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 2.7759047087673516 - 37.52374498962448 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 199 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.interfaces.Position - 81.5797867294508 - 86.17878661280005 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 200 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype896 - - - - org.contikios.cooja.plugins.SimControl - 280 - 3 - 160 - 400 - 0 - - - org.contikios.cooja.plugins.Visualizer - - org.contikios.cooja.plugins.skins.IDVisualizerSkin - org.contikios.cooja.plugins.skins.UDGMVisualizerSkin - org.contikios.cooja.plugins.skins.GridVisualizerSkin - 3.1602407578791554 0.0 0.0 3.1602407578791554 36.54234219838188 14.385206312876027 - - 400 - 4 - 400 - 1 - 1 - - - org.contikios.cooja.plugins.LogListener - - Hello, world - - - - 1200 - 1 - 240 - 400 - 160 - - - org.contikios.cooja.plugins.Notes - - Enter notes here - true - - 920 - 5 - 160 - 680 - 0 - - - org.contikios.cooja.plugins.ScriptRunner - - - true - - 600 - 2 - 439 - 771 - 165 - - - org.contikios.cooja.plugins.TimeLine - - 0 - 147 - 82 - 72 - 73 - 21 - 108 - 32 - 29 - 19 - 55 - 85 - 9 - 180 - 4 - 86 - 190 - 138 - 162 - 116 - 137 - 176 - 132 - 99 - 89 - 163 - 20 - 45 - 104 - 35 - 144 - 90 - 54 - 38 - 65 - 83 - 43 - 110 - 53 - 48 - 13 - 146 - 121 - 124 - 52 - 74 - 154 - 94 - 93 - 158 - 156 - 78 - 125 - 187 - 186 - 109 - 142 - 87 - 5 - 130 - 3 - 46 - 198 - 12 - 135 - 191 - 172 - 105 - 31 - 155 - 192 - 69 - 112 - 188 - 179 - 118 - 50 - 33 - 67 - 80 - 136 - 131 - 47 - 177 - 62 - 197 - 61 - 189 - 194 - 42 - 15 - 11 - 57 - 195 - 170 - 143 - 14 - 63 - 101 - 168 - 111 - 88 - 107 - 167 - 129 - 51 - 102 - 79 - 28 - 151 - 159 - 128 - 76 - 193 - 113 - 139 - 184 - 103 - 175 - 199 - 77 - 58 - 119 - 2 - 117 - 59 - 185 - 126 - 164 - 127 - 70 - 81 - 64 - 181 - 149 - 95 - 75 - 56 - 41 - 22 - 49 - 182 - 145 - 23 - 134 - 141 - 122 - 133 - 24 - 26 - 165 - 39 - 160 - 71 - 10 - 44 - 27 - 34 - 114 - 157 - 91 - 60 - 152 - 174 - 106 - 166 - 25 - 6 - 161 - 17 - 92 - 100 - 40 - 171 - 183 - 30 - 97 - 196 - 153 - 7 - 169 - 84 - 68 - 66 - 98 - 178 - 115 - 150 - 96 - 173 - 16 - 140 - 1 - 36 - 18 - 148 - 123 - 37 - 8 - 120 - - 3677.5424662661985 - - 1600 - 0 - 289 - 0 - 416 - - - + + + [APPS_DIR]/mrm + [APPS_DIR]/mspsim + [APPS_DIR]/avrora + [APPS_DIR]/serial_socket + [APPS_DIR]/collect-view + [APPS_DIR]/powertracker + + My simulation + 123456 + 1000000 + + org.contikios.cooja.radiomediums.UDGM + 50.0 + 100.0 + 1.0 + 1.0 + + + 40000 + + + org.contikios.cooja.contikimote.ContikiMoteType + mtype896 + Cooja Mote Type #1 + [CONTIKI_DIR]/regression-tests/04-rime/code/trickle-node.c + make trickle-node.cooja TARGET=cooja + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.Battery + org.contikios.cooja.contikimote.interfaces.ContikiVib + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + org.contikios.cooja.contikimote.interfaces.ContikiRS232 + org.contikios.cooja.contikimote.interfaces.ContikiBeeper + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.contikimote.interfaces.ContikiIPAddress + org.contikios.cooja.contikimote.interfaces.ContikiRadio + org.contikios.cooja.contikimote.interfaces.ContikiButton + org.contikios.cooja.contikimote.interfaces.ContikiPIR + org.contikios.cooja.contikimote.interfaces.ContikiClock + org.contikios.cooja.contikimote.interfaces.ContikiLED + org.contikios.cooja.contikimote.interfaces.ContikiCFS + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + false + + + + org.contikios.cooja.interfaces.Position + 6.568882352111016 + 89.62718790694142 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 1 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 99.03493285121479 + 24.74917539729994 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 2 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 34.46908056161367 + 18.92480914055563 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 3 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 58.07300119453901 + 92.56701608022784 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 4 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 4.7746325608922335 + 68.5250549995685 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 5 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 18.43610188865221 + 41.530057356099285 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 6 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 31.167749884374018 + 0.4246722060813446 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 7 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 98.05907643896941 + 46.03790834636672 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 8 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 95.34714997523065 + 3.2350896458523293 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 9 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 23.722342298413977 + 90.49885284216033 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 10 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 70.43619035275792 + 31.31229126426588 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 11 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 22.329321230828146 + 28.57483291743256 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 12 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 3.521960860406137 + 37.26004640789352 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 13 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 40.81173407107168 + 70.05376495995745 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 14 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 56.237452865803284 + 48.60595183121149 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 15 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 56.91660285867381 + 51.813636514575755 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 16 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 85.13927111588634 + 8.975236866142488 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 17 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 85.90257238152364 + 41.570392781749966 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 18 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 85.6228774151565 + 6.150666654291004 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 19 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 4.402889087469841 + 75.06430459857181 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 20 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 38.41618174328178 + 80.82454015548157 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 21 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 3.276612860049055 + 81.3223934030815 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 22 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 80.14814587773299 + 54.624453065746124 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 23 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 89.23520151089006 + 78.61037823351221 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 24 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 67.63702161821816 + 30.319940730263227 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 25 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 90.6520218241395 + 52.31648649198687 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 26 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 47.605575904521366 + 14.370823253222753 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 27 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 88.67935679456845 + 61.63919204722122 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 28 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 62.418430766378876 + 47.72680975556794 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 29 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 10.23968205017769 + 75.6163762374253 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 30 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 80.74688010413567 + 27.78533598308137 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 31 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 46.44207794624185 + 51.45763320882568 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 32 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 7.0847022389592285 + 77.60226416425907 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 33 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 27.504226917155663 + 34.73410517779959 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 34 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 92.73695978910362 + 99.95678973897041 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 35 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 14.527324868321523 + 56.8394498823125 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 36 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 94.94281507755645 + 18.01414591224293 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 37 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 97.85377651671594 + 10.0462063748739 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 38 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 41.52078727408137 + 92.61128889702061 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 39 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 1.8027638261222 + 3.916589413858329 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 40 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 91.87549918798894 + 52.30326661236246 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 41 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 34.08005807274469 + 12.94598595764348 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 42 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 7.101730242894144 + 27.13002370301435 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 43 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 25.037490965858787 + 57.968488949873674 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 44 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 72.67456520669178 + 33.66177410728385 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 45 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 34.34319517282086 + 71.57213261801763 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 46 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 56.92118091628886 + 77.50933833900811 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 47 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 59.83227576735132 + 58.77954760219993 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 48 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 41.915657816008064 + 72.58558519546224 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 49 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 31.843161949870634 + 11.45776022693128 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 50 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 65.09570508598352 + 93.60423316484713 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 51 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 74.89875741192188 + 80.92652240343887 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 52 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 48.929460038917036 + 91.41906683316111 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 53 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 43.04248849739064 + 75.32293243477193 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 54 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 41.20933759984702 + 88.844165747842 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 55 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 3.5541464112273435 + 73.42391971855811 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 56 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 13.553357202634563 + 8.745228245514392 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 57 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 41.40253769625784 + 36.48757620462509 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 58 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 73.67506347331192 + 54.83265107369869 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 59 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 61.08318511785268 + 35.59690497250605 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 60 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 95.85137044132782 + 99.28489161282182 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 61 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 68.06826666325836 + 80.01062116299323 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 62 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 1.3709285227171186 + 27.83979482987321 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 63 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 55.779251931546895 + 47.867628332142296 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 64 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 68.86916632016685 + 42.25345458025911 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 65 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 9.784073639390112 + 54.66511999382987 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 66 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 95.32263665847205 + 29.169605335133387 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 67 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 65.01164751321643 + 97.33231433619049 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 68 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 88.74482401135828 + 22.783989963564157 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 69 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 27.545967288343242 + 37.237989496208876 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 70 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 59.64588740775712 + 32.73151243011021 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 71 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 55.57628010243148 + 18.572794193934385 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 72 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 1.1249240777714387 + 87.06062268595146 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 73 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 7.092987360701453 + 98.39689962662284 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 74 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 47.778110699783305 + 78.86826452553812 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 75 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 19.872086166630687 + 10.087673065581592 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 76 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 76.83945653464441 + 72.21625452263784 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 77 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 24.313413426418006 + 16.49583912236582 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 78 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 36.220670911775784 + 53.58992487019706 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 79 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 76.10572961292435 + 86.04459939174762 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 80 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 33.16796489953524 + 36.83386901636666 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 81 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 74.98899325035866 + 52.19464054460451 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 82 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 3.579026719893441 + 86.83646069167602 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 83 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 41.76221650071965 + 81.74666079700839 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 84 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 69.78320568191269 + 7.050794276477745 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 85 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 9.02306431225367 + 72.64679421061318 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 86 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 27.629713153576873 + 92.23898651665253 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 87 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 34.98929592506449 + 49.27217818671787 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 88 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 30.587535866429583 + 26.80050479119339 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 89 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 34.39608906779097 + 99.26371733510828 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 90 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 37.45944235095177 + 74.0724164992028 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 91 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 88.32858006235864 + 57.18871882501241 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 92 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 94.16116394172158 + 58.63662158359322 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 93 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 15.564809594367867 + 47.69254595203641 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 94 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 41.413013430165826 + 64.6899256321378 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 95 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 73.3865589493186 + 45.058443121696335 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 96 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 96.42027268638782 + 23.86899869771518 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 97 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 84.86883701437324 + 32.64845899868377 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 98 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 94.65313327108798 + 27.70230420435218 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 99 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 33.5738059092315 + 79.6433960321747 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 100 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 99.33692620202561 + 97.40189489144562 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 101 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 13.73120882508002 + 23.621432436274013 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 102 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 72.5766728831825 + 68.51288713680493 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 103 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 4.950792816348571 + 15.285681348852343 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 104 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 39.20164236236282 + 83.69942072278975 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 105 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 53.0370271181274 + 60.231207119248964 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 106 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 78.14821858080782 + 34.54146892809409 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 107 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 72.50396341776242 + 75.8789301489569 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 108 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 16.913316939892876 + 95.71355158239486 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 109 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 49.04703513673822 + 68.13321330510874 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 110 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 32.40331545944186 + 62.56820913685508 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 111 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 60.835810783821444 + 50.163831002129896 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 112 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 31.160192255417684 + 38.395236125710454 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 113 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 72.55056341911987 + 57.8820260523452 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 114 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 77.94005986777552 + 40.10122061017203 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 115 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 94.28787130861903 + 25.7719303970389 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 116 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 3.1093957622807977 + 62.569201519112084 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 117 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 64.68498687585976 + 40.037918368164405 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 118 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 65.15921116282048 + 91.51919233543585 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 119 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 81.92573037729048 + 80.50829267843392 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 120 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 98.35151564789032 + 3.4882838007661565 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 121 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 2.946477891755117 + 50.055906504929425 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 122 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 90.32934974609084 + 77.9630427685427 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 123 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 87.60025637071952 + 1.80503837297753 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 124 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 18.35058527900767 + 51.293195445752104 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 125 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 25.389473062708458 + 46.125636327322816 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 126 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 13.245021295151528 + 12.548238204813323 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 127 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 34.45947569136444 + 17.094159776157568 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 128 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 9.528756367349944 + 17.888880939206096 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 129 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 19.85995506095263 + 22.134359386963155 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 130 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 0.312227052543701 + 39.44212914714669 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 131 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 66.82060507325654 + 89.03944738177172 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 132 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 23.368804404605637 + 66.40869783708897 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 133 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 88.33032080183098 + 66.30412652028217 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 134 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 16.33701125051411 + 6.698226210819103 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 135 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 50.22196379001298 + 60.13373840114642 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 136 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 55.546600574346805 + 55.47285620192937 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 137 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 34.001194017310695 + 93.8082748358454 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 138 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 25.109306918805707 + 78.46207924119797 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 139 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 32.75962613358675 + 21.109138450707288 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 140 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 96.10949800885035 + 20.857677606850554 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 141 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 90.8082963549723 + 88.80113994643916 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 142 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 55.06561703296728 + 82.26101565426288 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 143 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 17.47380330809587 + 26.924230902955582 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 144 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 36.095561138338326 + 71.97744064661859 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 145 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 21.320046667599236 + 7.798905295988067 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 146 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 41.88050388023514 + 71.56267197855983 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 147 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 6.585162015092417 + 92.7837363298666 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 148 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 98.74242142573685 + 19.740657443326338 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 149 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 49.73430066787986 + 22.22829895790325 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 150 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 74.77825204030766 + 2.6349416752525 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 151 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 73.79138439268063 + 70.71246641748267 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 152 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 95.56347662776064 + 75.87786853952764 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 153 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 71.78024476958186 + 13.213873631613083 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 154 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 47.67252804461608 + 77.96254780133673 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 155 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 0.6194413458317061 + 34.64682806345702 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 156 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 49.07305658459414 + 71.74812847796169 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 157 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 92.80412137666126 + 76.30342560411573 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 158 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 49.93319930570762 + 96.07317682900903 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 159 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 76.98926333710033 + 88.82354130296216 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 160 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 74.82106684647339 + 36.916558436055745 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 161 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 89.16515086221875 + 47.83504652861812 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 162 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 24.645916835288627 + 69.59871917130774 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 163 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 14.679543759696879 + 60.43664371305301 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 164 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 75.65153987979136 + 54.45547478030321 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 165 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 66.29062518200514 + 28.028207500959457 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 166 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 74.67149734649688 + 29.744838954989884 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 167 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 55.29668602858735 + 43.100253590461534 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 168 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 70.72844980621184 + 70.9567646582795 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 169 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 99.33685234577365 + 48.63518682957745 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 170 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 8.628475626468823 + 26.064747938969944 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 171 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 71.63295499479383 + 22.595969384054072 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 172 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 60.87598524825064 + 84.65332258064693 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 173 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 89.37524653989819 + 15.118036823593172 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 174 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 90.1136744976992 + 55.530717492965266 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 175 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 62.96013344586719 + 40.70020551173607 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 176 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 20.15948367395768 + 64.83256582828443 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 177 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 49.37052413712121 + 44.82022431266665 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 178 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 84.0420218227114 + 14.369492463481926 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 179 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 30.840080025471906 + 36.578149668144135 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 180 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 1.3870430831427139 + 69.88513114660597 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 181 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 49.94066624290235 + 23.480941841276724 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 182 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 83.92821380255494 + 59.97549673268689 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 183 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 92.44377728597361 + 48.29743959913113 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 184 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 50.34078121439194 + 29.867064939248312 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 185 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 4.985881389952496 + 12.694051853054999 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 186 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 53.249294524443336 + 98.43826962879814 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 187 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 43.155600258355975 + 59.45608169055081 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 188 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 40.05061496082472 + 42.36396331174911 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 189 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 61.74653956591568 + 60.542456279176236 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 190 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 22.71860259258296 + 75.81834442550416 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 191 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 19.39970138952114 + 37.73550104683998 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 192 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 62.30232359627651 + 97.73066836817638 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 193 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 78.69765739092972 + 96.64268722261257 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 194 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 53.36788782367626 + 48.27833687845872 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 195 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 36.160541823751956 + 33.381064580412875 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 196 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 48.8255744951515 + 1.4402697188622637 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 197 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 27.910168295539016 + 31.213307927454192 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 198 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 2.7759047087673516 + 37.52374498962448 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 199 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.interfaces.Position + 81.5797867294508 + 86.17878661280005 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 200 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype896 + + + + org.contikios.cooja.plugins.SimControl + 280 + 3 + 160 + 400 + 0 + + + org.contikios.cooja.plugins.Visualizer + + org.contikios.cooja.plugins.skins.IDVisualizerSkin + org.contikios.cooja.plugins.skins.UDGMVisualizerSkin + org.contikios.cooja.plugins.skins.GridVisualizerSkin + 3.1602407578791554 0.0 0.0 3.1602407578791554 36.54234219838188 14.385206312876027 + + 400 + 4 + 400 + 1 + 1 + + + org.contikios.cooja.plugins.LogListener + + Hello, world + + + + 1200 + 1 + 240 + 400 + 160 + + + org.contikios.cooja.plugins.Notes + + Enter notes here + true + + 920 + 5 + 160 + 680 + 0 + + + org.contikios.cooja.plugins.ScriptRunner + + + true + + 600 + 2 + 439 + 771 + 165 + + + org.contikios.cooja.plugins.TimeLine + + 0 + 147 + 82 + 72 + 73 + 21 + 108 + 32 + 29 + 19 + 55 + 85 + 9 + 180 + 4 + 86 + 190 + 138 + 162 + 116 + 137 + 176 + 132 + 99 + 89 + 163 + 20 + 45 + 104 + 35 + 144 + 90 + 54 + 38 + 65 + 83 + 43 + 110 + 53 + 48 + 13 + 146 + 121 + 124 + 52 + 74 + 154 + 94 + 93 + 158 + 156 + 78 + 125 + 187 + 186 + 109 + 142 + 87 + 5 + 130 + 3 + 46 + 198 + 12 + 135 + 191 + 172 + 105 + 31 + 155 + 192 + 69 + 112 + 188 + 179 + 118 + 50 + 33 + 67 + 80 + 136 + 131 + 47 + 177 + 62 + 197 + 61 + 189 + 194 + 42 + 15 + 11 + 57 + 195 + 170 + 143 + 14 + 63 + 101 + 168 + 111 + 88 + 107 + 167 + 129 + 51 + 102 + 79 + 28 + 151 + 159 + 128 + 76 + 193 + 113 + 139 + 184 + 103 + 175 + 199 + 77 + 58 + 119 + 2 + 117 + 59 + 185 + 126 + 164 + 127 + 70 + 81 + 64 + 181 + 149 + 95 + 75 + 56 + 41 + 22 + 49 + 182 + 145 + 23 + 134 + 141 + 122 + 133 + 24 + 26 + 165 + 39 + 160 + 71 + 10 + 44 + 27 + 34 + 114 + 157 + 91 + 60 + 152 + 174 + 106 + 166 + 25 + 6 + 161 + 17 + 92 + 100 + 40 + 171 + 183 + 30 + 97 + 196 + 153 + 7 + 169 + 84 + 68 + 66 + 98 + 178 + 115 + 150 + 96 + 173 + 16 + 140 + 1 + 36 + 18 + 148 + 123 + 37 + 8 + 120 + + 3677.5424662661985 + + 1600 + 0 + 289 + 0 + 416 + + + diff --git a/regression-tests/04-rime/10-cooja-mesh.csc b/regression-tests/04-rime/10-cooja-mesh.csc index 2a85264b6..4e448561b 100644 --- a/regression-tests/04-rime/10-cooja-mesh.csc +++ b/regression-tests/04-rime/10-cooja-mesh.csc @@ -1,3731 +1,3731 @@ - - - [APPS_DIR]/mrm - [APPS_DIR]/mspsim - [APPS_DIR]/avrora - [APPS_DIR]/serial_socket - [APPS_DIR]/collect-view - [APPS_DIR]/powertracker - - My simulation - 123456 - 1000000 - - org.contikios.cooja.radiomediums.UDGM - 50.0 - 100.0 - 1.0 - 1.0 - - - 40000 - - - org.contikios.cooja.contikimote.ContikiMoteType - mtype812 - Cooja Mote Type #1 - [CONTIKI_DIR]/regression-tests/04-rime/code/mesh-node.c - make mesh-node.cooja TARGET=cooja - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.Battery - org.contikios.cooja.contikimote.interfaces.ContikiVib - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - org.contikios.cooja.contikimote.interfaces.ContikiRS232 - org.contikios.cooja.contikimote.interfaces.ContikiBeeper - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.contikimote.interfaces.ContikiIPAddress - org.contikios.cooja.contikimote.interfaces.ContikiRadio - org.contikios.cooja.contikimote.interfaces.ContikiButton - org.contikios.cooja.contikimote.interfaces.ContikiPIR - org.contikios.cooja.contikimote.interfaces.ContikiClock - org.contikios.cooja.contikimote.interfaces.ContikiLED - org.contikios.cooja.contikimote.interfaces.ContikiCFS - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - false - - - - org.contikios.cooja.interfaces.Position - -15.110131951776825 - -15.766130931184252 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 1 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 75.32698081339126 - 15.146240079902862 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 2 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 72.13994478967824 - 74.26041049728875 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 3 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 21.45905883941627 - 18.50931229663846 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 4 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 51.73154548699189 - 51.853821705262824 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 5 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 62.76256370926019 - 23.744771850412793 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 6 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 77.53279132863358 - 2.39495180445084 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 7 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 9.301610765351997 - 11.468270260551716 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 8 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 96.0279441300693 - 77.21498068457203 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 9 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 14.931779398072187 - 88.03333861239253 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 10 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 75.44726862760838 - 5.411487191515407 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 11 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 95.318884841329 - 86.20194655940381 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 12 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 18.87115940222929 - 51.75275796436098 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 13 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 39.29584130063258 - 83.73613076037893 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 14 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 18.99016360852214 - 84.31828659208982 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 15 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 94.72045049573865 - 88.8002265547872 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 16 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 9.965149552619945 - 60.9672217226311 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 17 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 75.63601320305163 - 69.30301792320999 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 18 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 44.389408292201615 - 9.32896426859151 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 19 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 5.415822927153069 - 1.1229749685748303 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 20 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 17.73197875806011 - 91.09483283627415 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 21 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 63.21117626423727 - 92.09822312636405 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 22 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 1.2023179518000582 - 6.101073555655545 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 23 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 81.87774265107667 - 17.714586672424947 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 24 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 22.521479020896074 - 14.113603880757953 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 25 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 84.02138539648226 - 17.015320265906407 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 26 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 46.852336565832964 - 77.37329070431454 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 27 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 79.21392112207015 - 28.248800955218243 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 28 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 74.80704477852946 - 60.79424441306157 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 29 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 56.051297723638584 - 51.46569350230792 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 30 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 57.1269257718506 - 61.121148185570306 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 31 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 24.768409265606838 - 66.41379589463979 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 32 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 65.86939970609022 - 74.17702928480342 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 33 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 22.730659983362024 - 88.83212690881382 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 34 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 97.72636366803897 - 89.33964870322923 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 35 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 20.374524653886226 - 45.22966122318138 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 36 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 77.86468266153415 - 22.27997310669162 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 37 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 29.08732257227028 - 87.49874641701248 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 38 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 92.28518245794669 - 46.424258423445906 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 39 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 46.05708599953595 - 54.74731598871861 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 40 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 86.44276097412764 - 57.14457919424108 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 41 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 91.18152331698074 - 44.46303779585815 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 42 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 9.495031343513304 - 32.860166235404165 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 43 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 25.532456743363362 - 50.910025313741656 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 44 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 62.22618255413567 - 37.501327897174285 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 45 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 53.39846293057672 - 11.305221368002083 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 46 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 76.03978999479973 - 18.542902882611067 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 47 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 25.280683674156457 - 14.065650667522767 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 48 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 37.47973536226168 - 84.38773756679916 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 49 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 88.03948393367386 - 35.934760179823364 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 50 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 3.0107724008282433 - 20.54172713979715 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 51 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 92.2648242893991 - 2.19984740812853 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 52 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 71.1950863336371 - 12.977697720146663 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 53 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 23.39045217087643 - 96.05336539086986 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 54 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 91.30189414809722 - 62.48046280525844 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 55 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 90.54828218741403 - 67.41740523090176 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 56 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 59.584541112217 - 79.6815014505103 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 57 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 90.05917725331057 - 19.668333608379562 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 58 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 56.19172073106215 - 66.94875781635855 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 59 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 74.11183073083164 - 44.53101125240788 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 60 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 99.62245190569143 - 1.2518386804190595 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 61 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 50.86207262991679 - 64.2596263003396 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 62 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 82.90134355007967 - 98.46998610299977 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 63 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 32.097700534946775 - 57.82370953888362 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 64 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 20.792359880663426 - 42.18171503641626 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 65 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 26.90344653082014 - 49.34860693256755 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 66 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 93.37402442548722 - 12.54036096085449 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 67 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 63.50895936766901 - 26.13335565534737 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 68 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 54.59249988579196 - 28.10613096853092 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 69 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 51.72915360045628 - 7.2358928898125345 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 70 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 69.85466521382759 - 76.11700753212021 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 71 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 81.06814365856157 - 77.36444410758936 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 72 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 12.62178613429452 - 26.220067395705293 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 73 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 76.54960310902881 - 33.57032079508466 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 74 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 43.05406862818124 - 6.671159718339769 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 75 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 8.489914638926576 - 11.364660931830084 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 76 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 92.21297935768304 - 38.901136911882226 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 77 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 12.515404095391613 - 83.18052083184756 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 78 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 11.765120085018932 - 30.535771545958923 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 79 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 21.84827655269378 - 74.8105798512456 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 80 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 23.59921216453905 - 83.77605869702256 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 81 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 30.89218892933696 - 67.24517923056783 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 82 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 16.754948076730646 - 86.76525325664295 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 83 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 94.01968091458089 - 33.32895468517063 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 84 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 14.494646399171273 - 82.39583815813506 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 85 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 48.71947952314664 - 65.39753703873185 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 86 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 44.58919963221467 - 0.08824262076495559 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 87 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 31.35911964529313 - 44.53704965455876 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 88 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 36.73949789516603 - 50.485369712324925 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 89 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 6.151679368237806 - 70.75427799132197 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 90 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 86.75159969217906 - 15.772621058761239 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 91 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 43.81709449446297 - 51.01754337793292 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 92 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 35.30424198776551 - 75.40895569308267 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 93 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 92.16764155243385 - 37.12839773343516 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 94 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 26.003971042858886 - 30.335276302978187 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 95 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 63.631134510133734 - 24.450512217715136 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 96 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 22.467333143102163 - 81.04396399393656 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 97 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 97.69844265068488 - 95.83027844609585 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 98 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 65.38894336702717 - 65.01739556197926 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 99 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 23.52628911665692 - 1.207091576759045 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 100 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 49.375308587386826 - 16.68070312353277 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 101 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 69.461379757725 - 54.48065350202764 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 102 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 55.60961339959927 - 13.809323108297345 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 103 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 23.03486784995873 - 55.66637494926414 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 104 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 23.463634800199763 - 64.86732549368021 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 105 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 3.901375281857966 - 82.15368199936674 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 106 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 13.727410765057513 - 54.54734565801572 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 107 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 51.09638459119502 - 60.3491948088858 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 108 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 63.36127151665472 - 43.29434787013787 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 109 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 58.62938785115435 - 23.937940536279946 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 110 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 60.20153526777896 - 40.21802436438158 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 111 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 94.52454590425745 - 81.6694698767615 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 112 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 52.9213694599384 - 77.86420496516587 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 113 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 68.61056178583134 - 73.64759313367774 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 114 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 32.25025125998364 - 88.09394970381855 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 115 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 45.228818349692276 - 56.6857477992902 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 116 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 72.91510428342265 - 48.016968698680444 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 117 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 36.09326383724911 - 65.93561184944842 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 118 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 59.34646598759592 - 56.68812502666998 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 119 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 24.253968594634323 - 89.69274115479124 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 120 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 52.69518046464358 - 51.18422353087328 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 121 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 16.883346155197277 - 28.45535507975351 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 122 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 11.366979180477676 - 44.752447495970756 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 123 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 67.75166344967951 - 97.82453837992166 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 124 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 94.78000175089495 - 0.9187745489910304 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 125 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 51.056290388365596 - 60.98645524111218 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 126 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 51.49684628172943 - 62.65900518969486 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 127 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 68.92410375720559 - 22.04832696437221 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 128 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 82.82918233005728 - 62.79875071353599 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 129 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 83.5631819266006 - 81.58540225851283 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 130 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 44.44732988189216 - 14.491241662688436 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 131 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 40.780333569336 - 4.009415778619951 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 132 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 87.875397456334 - 43.63036340425231 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 133 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 89.42470277518677 - 99.84079465772967 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 134 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 85.87794548965859 - 89.0352799102892 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 135 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 57.22174940143495 - 10.145407049355216 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 136 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 38.94731418883078 - 82.77439711782424 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 137 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 59.32065648187531 - 44.20774255696792 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 138 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 31.120120849726774 - 89.60000439876077 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 139 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 44.52403715783231 - 62.3194136602862 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 140 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 22.362727341005417 - 49.59730180608639 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 141 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 14.370793944637184 - 84.16542992042004 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 142 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 10.382057116504594 - 36.20777577058662 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 143 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 31.708614425954153 - 8.929196448642006 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 144 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 18.99060403390356 - 28.098507024338037 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 145 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 3.7660125313138892 - 48.586414327187164 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 146 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 23.571368218820343 - 49.185899485490594 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 147 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 26.597355199952165 - 42.03120419505485 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 148 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 80.67530824986719 - 68.69137917126238 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 149 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 95.64723800253887 - 49.22571370181109 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 150 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 10.704141148035173 - 70.55232411145946 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 151 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 64.52024310025003 - 34.475451454425986 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 152 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 85.78573465828082 - 7.916030569985 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 153 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 0.24262868892772627 - 72.63231254385946 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 154 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 93.57606012872533 - 98.82725540441758 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 155 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 78.69632487677171 - 36.37925533039474 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 156 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 99.49668801110867 - 99.53794061222166 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 157 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 64.76201671109297 - 5.055212527820718 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 158 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 80.95330430773969 - 4.015680109351305 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 159 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 65.23411064596435 - 32.474870590460114 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 160 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 96.92930107013441 - 65.03716301192813 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 161 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 51.910733667455055 - 3.0607401855079153 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 162 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 22.997927613490187 - 52.49410023194099 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 163 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 61.498404326122916 - 20.948069777061473 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 164 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 86.67187941247089 - 57.91865763266372 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 165 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 58.12331461229143 - 17.597258881851896 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 166 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 90.97447553174264 - 6.397999431511192 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 167 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 24.266277228726896 - 30.34177377688706 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 168 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 98.47208098934011 - 44.57507934017237 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 169 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 43.73081376780091 - 21.13808300018135 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 170 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 45.49162860241004 - 68.84491125995895 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 171 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 83.6456747075875 - 43.93087863088753 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 172 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 72.03579837660902 - 34.60910091231335 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 173 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 35.263754721356534 - 76.30282405093295 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 174 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 40.61467901333516 - 24.94120175915311 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 175 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 60.156002945132116 - 50.68140149744396 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 176 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 3.887768554078841 - 45.57320016474882 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 177 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 19.95603661943931 - 20.00197042619395 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 178 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 92.14169094537768 - 79.0089520316807 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 179 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 65.67068979347698 - 88.48916739527394 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 180 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 76.14334621957694 - 61.01052000065369 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 181 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 84.25336051788017 - 19.669061259592745 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 182 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 16.168238996091954 - 10.832644717909435 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 183 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 64.09766119688976 - 88.85025066318933 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 184 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 4.810483157860002 - 36.48131639750729 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 185 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 51.74308602641094 - 87.53927985054797 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 186 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 18.77259055131779 - 67.96359965661854 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 187 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 44.72430321351292 - 72.44740211096371 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 188 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 5.88546300021735 - 25.93516805671332 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 189 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 51.41061394358658 - 15.202886891183166 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 190 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 89.23533431357276 - 77.23342632923122 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 191 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 60.079346331237495 - 82.34379420397117 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 192 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 85.025456606937 - 40.33998257744421 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 193 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 94.49078377456884 - 13.806399874732389 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 194 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 17.664363452458907 - 96.61599411572223 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 195 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 0.9648947505341954 - 75.5573385733673 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 196 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 10.975537455298422 - 11.904593591027812 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 197 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 57.42097054747428 - 15.293997771212686 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 198 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 23.228255481027414 - 38.44074324739415 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 199 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 122.09144445179118 - 123.28827939092514 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 200 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.plugins.SimControl - 280 - 0 - 160 - 400 - 0 - - - org.contikios.cooja.plugins.Visualizer - - org.contikios.cooja.plugins.skins.IDVisualizerSkin - org.contikios.cooja.plugins.skins.GridVisualizerSkin - org.contikios.cooja.plugins.skins.UDGMVisualizerSkin - org.contikios.cooja.plugins.skins.TrafficVisualizerSkin - 2.1537601749087445 0.0 0.0 2.1537601749087445 62.919309242649014 50.9666138148029 - - 400 - 1 - 400 - 1 - 1 - - - org.contikios.cooja.plugins.LogListener - - - - - - 1200 - 3 - 240 - 400 - 160 - - - org.contikios.cooja.plugins.TimeLine - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - 15 - 16 - 17 - 18 - 19 - 20 - 21 - 22 - 23 - 24 - 25 - 26 - 27 - 28 - 29 - 30 - 31 - 32 - 33 - 34 - 35 - 36 - 37 - 38 - 39 - 40 - 41 - 42 - 43 - 44 - 45 - 46 - 47 - 48 - 49 - 50 - 51 - 52 - 53 - 54 - 55 - 56 - 57 - 58 - 59 - 60 - 61 - 62 - 63 - 64 - 65 - 66 - 67 - 68 - 69 - 70 - 71 - 72 - 73 - 74 - 75 - 76 - 77 - 78 - 79 - 80 - 81 - 82 - 83 - 84 - 85 - 86 - 87 - 88 - 89 - 90 - 91 - 92 - 93 - 94 - 95 - 96 - 97 - 98 - 99 - 100 - 101 - 102 - 103 - 104 - 105 - 106 - 107 - 108 - 109 - 110 - 111 - 112 - 113 - 114 - 115 - 116 - 117 - 118 - 119 - 120 - 121 - 122 - 123 - 124 - 125 - 126 - 127 - 128 - 129 - 130 - 131 - 132 - 133 - 134 - 135 - 136 - 137 - 138 - 139 - 140 - 141 - 142 - 143 - 144 - 145 - 146 - 147 - 148 - 149 - 150 - 151 - 152 - 153 - 154 - 155 - 156 - 157 - 158 - 159 - 160 - 161 - 162 - 163 - 164 - 165 - 166 - 167 - 168 - 169 - 170 - 171 - 172 - 173 - 174 - 175 - 176 - 177 - 178 - 179 - 180 - 181 - 182 - 183 - 184 - 185 - 186 - 187 - 188 - 189 - 190 - 191 - 192 - 193 - 194 - 195 - 196 - 197 - 198 - 199 - - 500.0 - - 1600 - 4 - 300 - 0 - 405 - - - org.contikios.cooja.plugins.Notes - - Enter notes here - true - - 920 - 5 - 160 - 680 - 0 - - - org.contikios.cooja.plugins.ScriptRunner - - - true - - 600 - 2 - 700 - 692 - -5 - - - + + + [APPS_DIR]/mrm + [APPS_DIR]/mspsim + [APPS_DIR]/avrora + [APPS_DIR]/serial_socket + [APPS_DIR]/collect-view + [APPS_DIR]/powertracker + + My simulation + 123456 + 1000000 + + org.contikios.cooja.radiomediums.UDGM + 50.0 + 100.0 + 1.0 + 1.0 + + + 40000 + + + org.contikios.cooja.contikimote.ContikiMoteType + mtype812 + Cooja Mote Type #1 + [CONTIKI_DIR]/regression-tests/04-rime/code/mesh-node.c + make mesh-node.cooja TARGET=cooja + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.Battery + org.contikios.cooja.contikimote.interfaces.ContikiVib + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + org.contikios.cooja.contikimote.interfaces.ContikiRS232 + org.contikios.cooja.contikimote.interfaces.ContikiBeeper + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.contikimote.interfaces.ContikiIPAddress + org.contikios.cooja.contikimote.interfaces.ContikiRadio + org.contikios.cooja.contikimote.interfaces.ContikiButton + org.contikios.cooja.contikimote.interfaces.ContikiPIR + org.contikios.cooja.contikimote.interfaces.ContikiClock + org.contikios.cooja.contikimote.interfaces.ContikiLED + org.contikios.cooja.contikimote.interfaces.ContikiCFS + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + false + + + + org.contikios.cooja.interfaces.Position + -15.110131951776825 + -15.766130931184252 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 1 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 75.32698081339126 + 15.146240079902862 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 2 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 72.13994478967824 + 74.26041049728875 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 3 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 21.45905883941627 + 18.50931229663846 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 4 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 51.73154548699189 + 51.853821705262824 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 5 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 62.76256370926019 + 23.744771850412793 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 6 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 77.53279132863358 + 2.39495180445084 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 7 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 9.301610765351997 + 11.468270260551716 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 8 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 96.0279441300693 + 77.21498068457203 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 9 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 14.931779398072187 + 88.03333861239253 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 10 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 75.44726862760838 + 5.411487191515407 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 11 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 95.318884841329 + 86.20194655940381 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 12 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 18.87115940222929 + 51.75275796436098 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 13 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 39.29584130063258 + 83.73613076037893 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 14 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 18.99016360852214 + 84.31828659208982 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 15 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 94.72045049573865 + 88.8002265547872 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 16 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 9.965149552619945 + 60.9672217226311 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 17 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 75.63601320305163 + 69.30301792320999 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 18 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 44.389408292201615 + 9.32896426859151 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 19 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 5.415822927153069 + 1.1229749685748303 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 20 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 17.73197875806011 + 91.09483283627415 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 21 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 63.21117626423727 + 92.09822312636405 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 22 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 1.2023179518000582 + 6.101073555655545 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 23 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 81.87774265107667 + 17.714586672424947 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 24 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 22.521479020896074 + 14.113603880757953 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 25 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 84.02138539648226 + 17.015320265906407 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 26 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 46.852336565832964 + 77.37329070431454 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 27 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 79.21392112207015 + 28.248800955218243 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 28 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 74.80704477852946 + 60.79424441306157 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 29 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 56.051297723638584 + 51.46569350230792 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 30 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 57.1269257718506 + 61.121148185570306 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 31 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 24.768409265606838 + 66.41379589463979 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 32 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 65.86939970609022 + 74.17702928480342 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 33 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 22.730659983362024 + 88.83212690881382 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 34 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 97.72636366803897 + 89.33964870322923 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 35 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 20.374524653886226 + 45.22966122318138 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 36 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 77.86468266153415 + 22.27997310669162 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 37 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 29.08732257227028 + 87.49874641701248 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 38 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 92.28518245794669 + 46.424258423445906 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 39 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 46.05708599953595 + 54.74731598871861 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 40 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 86.44276097412764 + 57.14457919424108 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 41 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 91.18152331698074 + 44.46303779585815 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 42 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 9.495031343513304 + 32.860166235404165 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 43 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 25.532456743363362 + 50.910025313741656 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 44 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 62.22618255413567 + 37.501327897174285 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 45 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 53.39846293057672 + 11.305221368002083 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 46 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 76.03978999479973 + 18.542902882611067 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 47 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 25.280683674156457 + 14.065650667522767 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 48 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 37.47973536226168 + 84.38773756679916 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 49 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 88.03948393367386 + 35.934760179823364 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 50 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 3.0107724008282433 + 20.54172713979715 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 51 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 92.2648242893991 + 2.19984740812853 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 52 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 71.1950863336371 + 12.977697720146663 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 53 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 23.39045217087643 + 96.05336539086986 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 54 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 91.30189414809722 + 62.48046280525844 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 55 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 90.54828218741403 + 67.41740523090176 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 56 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 59.584541112217 + 79.6815014505103 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 57 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 90.05917725331057 + 19.668333608379562 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 58 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 56.19172073106215 + 66.94875781635855 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 59 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 74.11183073083164 + 44.53101125240788 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 60 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 99.62245190569143 + 1.2518386804190595 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 61 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 50.86207262991679 + 64.2596263003396 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 62 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 82.90134355007967 + 98.46998610299977 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 63 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 32.097700534946775 + 57.82370953888362 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 64 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 20.792359880663426 + 42.18171503641626 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 65 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 26.90344653082014 + 49.34860693256755 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 66 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 93.37402442548722 + 12.54036096085449 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 67 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 63.50895936766901 + 26.13335565534737 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 68 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 54.59249988579196 + 28.10613096853092 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 69 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 51.72915360045628 + 7.2358928898125345 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 70 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 69.85466521382759 + 76.11700753212021 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 71 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 81.06814365856157 + 77.36444410758936 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 72 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 12.62178613429452 + 26.220067395705293 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 73 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 76.54960310902881 + 33.57032079508466 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 74 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 43.05406862818124 + 6.671159718339769 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 75 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 8.489914638926576 + 11.364660931830084 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 76 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 92.21297935768304 + 38.901136911882226 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 77 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 12.515404095391613 + 83.18052083184756 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 78 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 11.765120085018932 + 30.535771545958923 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 79 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 21.84827655269378 + 74.8105798512456 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 80 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 23.59921216453905 + 83.77605869702256 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 81 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 30.89218892933696 + 67.24517923056783 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 82 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 16.754948076730646 + 86.76525325664295 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 83 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 94.01968091458089 + 33.32895468517063 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 84 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 14.494646399171273 + 82.39583815813506 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 85 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 48.71947952314664 + 65.39753703873185 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 86 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 44.58919963221467 + 0.08824262076495559 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 87 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 31.35911964529313 + 44.53704965455876 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 88 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 36.73949789516603 + 50.485369712324925 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 89 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 6.151679368237806 + 70.75427799132197 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 90 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 86.75159969217906 + 15.772621058761239 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 91 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 43.81709449446297 + 51.01754337793292 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 92 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 35.30424198776551 + 75.40895569308267 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 93 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 92.16764155243385 + 37.12839773343516 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 94 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 26.003971042858886 + 30.335276302978187 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 95 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 63.631134510133734 + 24.450512217715136 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 96 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 22.467333143102163 + 81.04396399393656 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 97 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 97.69844265068488 + 95.83027844609585 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 98 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 65.38894336702717 + 65.01739556197926 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 99 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 23.52628911665692 + 1.207091576759045 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 100 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 49.375308587386826 + 16.68070312353277 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 101 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 69.461379757725 + 54.48065350202764 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 102 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 55.60961339959927 + 13.809323108297345 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 103 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 23.03486784995873 + 55.66637494926414 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 104 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 23.463634800199763 + 64.86732549368021 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 105 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 3.901375281857966 + 82.15368199936674 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 106 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 13.727410765057513 + 54.54734565801572 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 107 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 51.09638459119502 + 60.3491948088858 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 108 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 63.36127151665472 + 43.29434787013787 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 109 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 58.62938785115435 + 23.937940536279946 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 110 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 60.20153526777896 + 40.21802436438158 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 111 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 94.52454590425745 + 81.6694698767615 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 112 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 52.9213694599384 + 77.86420496516587 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 113 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 68.61056178583134 + 73.64759313367774 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 114 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 32.25025125998364 + 88.09394970381855 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 115 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 45.228818349692276 + 56.6857477992902 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 116 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 72.91510428342265 + 48.016968698680444 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 117 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 36.09326383724911 + 65.93561184944842 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 118 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 59.34646598759592 + 56.68812502666998 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 119 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 24.253968594634323 + 89.69274115479124 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 120 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 52.69518046464358 + 51.18422353087328 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 121 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 16.883346155197277 + 28.45535507975351 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 122 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 11.366979180477676 + 44.752447495970756 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 123 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 67.75166344967951 + 97.82453837992166 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 124 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 94.78000175089495 + 0.9187745489910304 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 125 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 51.056290388365596 + 60.98645524111218 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 126 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 51.49684628172943 + 62.65900518969486 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 127 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 68.92410375720559 + 22.04832696437221 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 128 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 82.82918233005728 + 62.79875071353599 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 129 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 83.5631819266006 + 81.58540225851283 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 130 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 44.44732988189216 + 14.491241662688436 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 131 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 40.780333569336 + 4.009415778619951 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 132 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 87.875397456334 + 43.63036340425231 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 133 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 89.42470277518677 + 99.84079465772967 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 134 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 85.87794548965859 + 89.0352799102892 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 135 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 57.22174940143495 + 10.145407049355216 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 136 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 38.94731418883078 + 82.77439711782424 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 137 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 59.32065648187531 + 44.20774255696792 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 138 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 31.120120849726774 + 89.60000439876077 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 139 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 44.52403715783231 + 62.3194136602862 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 140 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 22.362727341005417 + 49.59730180608639 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 141 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 14.370793944637184 + 84.16542992042004 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 142 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 10.382057116504594 + 36.20777577058662 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 143 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 31.708614425954153 + 8.929196448642006 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 144 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 18.99060403390356 + 28.098507024338037 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 145 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 3.7660125313138892 + 48.586414327187164 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 146 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 23.571368218820343 + 49.185899485490594 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 147 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 26.597355199952165 + 42.03120419505485 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 148 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 80.67530824986719 + 68.69137917126238 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 149 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 95.64723800253887 + 49.22571370181109 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 150 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 10.704141148035173 + 70.55232411145946 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 151 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 64.52024310025003 + 34.475451454425986 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 152 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 85.78573465828082 + 7.916030569985 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 153 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 0.24262868892772627 + 72.63231254385946 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 154 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 93.57606012872533 + 98.82725540441758 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 155 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 78.69632487677171 + 36.37925533039474 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 156 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 99.49668801110867 + 99.53794061222166 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 157 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 64.76201671109297 + 5.055212527820718 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 158 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 80.95330430773969 + 4.015680109351305 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 159 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 65.23411064596435 + 32.474870590460114 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 160 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 96.92930107013441 + 65.03716301192813 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 161 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 51.910733667455055 + 3.0607401855079153 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 162 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 22.997927613490187 + 52.49410023194099 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 163 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 61.498404326122916 + 20.948069777061473 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 164 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 86.67187941247089 + 57.91865763266372 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 165 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 58.12331461229143 + 17.597258881851896 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 166 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 90.97447553174264 + 6.397999431511192 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 167 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 24.266277228726896 + 30.34177377688706 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 168 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 98.47208098934011 + 44.57507934017237 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 169 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 43.73081376780091 + 21.13808300018135 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 170 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 45.49162860241004 + 68.84491125995895 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 171 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 83.6456747075875 + 43.93087863088753 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 172 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 72.03579837660902 + 34.60910091231335 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 173 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 35.263754721356534 + 76.30282405093295 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 174 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 40.61467901333516 + 24.94120175915311 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 175 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 60.156002945132116 + 50.68140149744396 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 176 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 3.887768554078841 + 45.57320016474882 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 177 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 19.95603661943931 + 20.00197042619395 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 178 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 92.14169094537768 + 79.0089520316807 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 179 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 65.67068979347698 + 88.48916739527394 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 180 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 76.14334621957694 + 61.01052000065369 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 181 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 84.25336051788017 + 19.669061259592745 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 182 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 16.168238996091954 + 10.832644717909435 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 183 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 64.09766119688976 + 88.85025066318933 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 184 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 4.810483157860002 + 36.48131639750729 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 185 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 51.74308602641094 + 87.53927985054797 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 186 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 18.77259055131779 + 67.96359965661854 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 187 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 44.72430321351292 + 72.44740211096371 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 188 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 5.88546300021735 + 25.93516805671332 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 189 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 51.41061394358658 + 15.202886891183166 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 190 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 89.23533431357276 + 77.23342632923122 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 191 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 60.079346331237495 + 82.34379420397117 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 192 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 85.025456606937 + 40.33998257744421 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 193 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 94.49078377456884 + 13.806399874732389 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 194 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 17.664363452458907 + 96.61599411572223 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 195 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 0.9648947505341954 + 75.5573385733673 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 196 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 10.975537455298422 + 11.904593591027812 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 197 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 57.42097054747428 + 15.293997771212686 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 198 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 23.228255481027414 + 38.44074324739415 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 199 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 122.09144445179118 + 123.28827939092514 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 200 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.plugins.SimControl + 280 + 0 + 160 + 400 + 0 + + + org.contikios.cooja.plugins.Visualizer + + org.contikios.cooja.plugins.skins.IDVisualizerSkin + org.contikios.cooja.plugins.skins.GridVisualizerSkin + org.contikios.cooja.plugins.skins.UDGMVisualizerSkin + org.contikios.cooja.plugins.skins.TrafficVisualizerSkin + 2.1537601749087445 0.0 0.0 2.1537601749087445 62.919309242649014 50.9666138148029 + + 400 + 1 + 400 + 1 + 1 + + + org.contikios.cooja.plugins.LogListener + + + + + + 1200 + 3 + 240 + 400 + 160 + + + org.contikios.cooja.plugins.TimeLine + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + 15 + 16 + 17 + 18 + 19 + 20 + 21 + 22 + 23 + 24 + 25 + 26 + 27 + 28 + 29 + 30 + 31 + 32 + 33 + 34 + 35 + 36 + 37 + 38 + 39 + 40 + 41 + 42 + 43 + 44 + 45 + 46 + 47 + 48 + 49 + 50 + 51 + 52 + 53 + 54 + 55 + 56 + 57 + 58 + 59 + 60 + 61 + 62 + 63 + 64 + 65 + 66 + 67 + 68 + 69 + 70 + 71 + 72 + 73 + 74 + 75 + 76 + 77 + 78 + 79 + 80 + 81 + 82 + 83 + 84 + 85 + 86 + 87 + 88 + 89 + 90 + 91 + 92 + 93 + 94 + 95 + 96 + 97 + 98 + 99 + 100 + 101 + 102 + 103 + 104 + 105 + 106 + 107 + 108 + 109 + 110 + 111 + 112 + 113 + 114 + 115 + 116 + 117 + 118 + 119 + 120 + 121 + 122 + 123 + 124 + 125 + 126 + 127 + 128 + 129 + 130 + 131 + 132 + 133 + 134 + 135 + 136 + 137 + 138 + 139 + 140 + 141 + 142 + 143 + 144 + 145 + 146 + 147 + 148 + 149 + 150 + 151 + 152 + 153 + 154 + 155 + 156 + 157 + 158 + 159 + 160 + 161 + 162 + 163 + 164 + 165 + 166 + 167 + 168 + 169 + 170 + 171 + 172 + 173 + 174 + 175 + 176 + 177 + 178 + 179 + 180 + 181 + 182 + 183 + 184 + 185 + 186 + 187 + 188 + 189 + 190 + 191 + 192 + 193 + 194 + 195 + 196 + 197 + 198 + 199 + + 500.0 + + 1600 + 4 + 300 + 0 + 405 + + + org.contikios.cooja.plugins.Notes + + Enter notes here + true + + 920 + 5 + 160 + 680 + 0 + + + org.contikios.cooja.plugins.ScriptRunner + + + true + + 600 + 2 + 700 + 692 + -5 + + + diff --git a/regression-tests/09-collect-lossy/01-sky-shell-collect-lossy.csc b/regression-tests/09-collect-lossy/01-sky-shell-collect-lossy.csc index abbe506eb..aef4613db 100644 --- a/regression-tests/09-collect-lossy/01-sky-shell-collect-lossy.csc +++ b/regression-tests/09-collect-lossy/01-sky-shell-collect-lossy.csc @@ -1,540 +1,540 @@ - - - [APPS_DIR]/mrm - [APPS_DIR]/mspsim - [APPS_DIR]/avrora - [APPS_DIR]/serial_socket - [APPS_DIR]/collect-view - [APPS_DIR]/powertracker - - My simulation - 123456 - 1000000 - - org.contikios.cooja.radiomediums.UDGM - 80.0 - 0.0 - 1.0 - 0.0 - - - 40000 - - - org.contikios.cooja.mspmote.SkyMoteType - sky1 - shell - [CONTIKI_DIR]/examples/collect/collect-view-shell.c - make collect-view-shell.sky TARGET=sky - [CONTIKI_DIR]/examples/collect/collect-view-shell.sky - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.interfaces.IPAddress - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - org.contikios.cooja.mspmote.interfaces.MspClock - org.contikios.cooja.mspmote.interfaces.MspMoteID - org.contikios.cooja.mspmote.interfaces.SkyButton - org.contikios.cooja.mspmote.interfaces.SkyFlash - org.contikios.cooja.mspmote.interfaces.SkyCoffeeFilesystem - org.contikios.cooja.mspmote.interfaces.Msp802154Radio - org.contikios.cooja.mspmote.interfaces.MspSerial - org.contikios.cooja.mspmote.interfaces.SkyLED - org.contikios.cooja.mspmote.interfaces.MspDebugOutput - org.contikios.cooja.mspmote.interfaces.SkyTemperature - - - - - org.contikios.cooja.interfaces.Position - 51.083635845134815 - 52.18027797603351 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 1 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 87.37621589982353 - 69.01745044943294 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 2 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 0.3225524247130407 - 99.67744560167213 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 3 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 52.99553499162932 - 44.55947520113671 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 4 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 64.36007081217727 - 7.922505931377522 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 5 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 46.937655527278906 - 34.37401121375584 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 6 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 29.606117317748925 - 59.7062771702808 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 7 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 64.60462597715014 - 65.32875118919438 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 8 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 84.91966612667193 - 21.61064185087591 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 9 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 24.128119535736893 - 14.27770805377394 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 10 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 36.23919862128766 - 23.421151622254555 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 11 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 53.689973725385855 - 92.47281715616484 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 12 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 21.499980846738108 - 86.31913226282572 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 13 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 23.896054282937385 - 6.502957157635625 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 14 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 86.99986531287792 - 45.74381748881159 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 15 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 68.50722882135574 - 50.25930042782911 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 16 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 22.03851735367126 - 57.304977718401084 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 17 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 16.094855623021655 - 20.15220518337424 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 18 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 91.46540103964149 - 63.949352956656554 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 19 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 71.92141571796324 - 39.70157072422388 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 20 - - sky1 - - - - org.contikios.cooja.plugins.SimControl - 318 - 1 - 172 - 0 - 0 - - - org.contikios.cooja.plugins.Visualizer - - org.contikios.cooja.plugins.skins.UDGMVisualizerSkin - org.contikios.cooja.plugins.skins.IDVisualizerSkin - org.contikios.cooja.plugins.skins.AttributeVisualizerSkin - 4.028431381533795 0.0 0.0 4.028431381533795 114.84980283087096 -0.016939876572727552 - - 631 - 2 - 545 - 809 - 0 - - - org.contikios.cooja.plugins.LogListener - - timedout - - - - 1440 - 3 - 275 - 1 - 556 - - - org.contikios.cooja.plugins.ScriptRunner - - - true - - 600 - 0 - 775 - 304 - 5 - - - + + + [APPS_DIR]/mrm + [APPS_DIR]/mspsim + [APPS_DIR]/avrora + [APPS_DIR]/serial_socket + [APPS_DIR]/collect-view + [APPS_DIR]/powertracker + + My simulation + 123456 + 1000000 + + org.contikios.cooja.radiomediums.UDGM + 80.0 + 0.0 + 1.0 + 0.0 + + + 40000 + + + org.contikios.cooja.mspmote.SkyMoteType + sky1 + shell + [CONTIKI_DIR]/examples/collect/collect-view-shell.c + make collect-view-shell.sky TARGET=sky + [CONTIKI_DIR]/examples/collect/collect-view-shell.sky + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.interfaces.IPAddress + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + org.contikios.cooja.mspmote.interfaces.MspClock + org.contikios.cooja.mspmote.interfaces.MspMoteID + org.contikios.cooja.mspmote.interfaces.SkyButton + org.contikios.cooja.mspmote.interfaces.SkyFlash + org.contikios.cooja.mspmote.interfaces.SkyCoffeeFilesystem + org.contikios.cooja.mspmote.interfaces.Msp802154Radio + org.contikios.cooja.mspmote.interfaces.MspSerial + org.contikios.cooja.mspmote.interfaces.SkyLED + org.contikios.cooja.mspmote.interfaces.MspDebugOutput + org.contikios.cooja.mspmote.interfaces.SkyTemperature + + + + + org.contikios.cooja.interfaces.Position + 51.083635845134815 + 52.18027797603351 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 1 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 87.37621589982353 + 69.01745044943294 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 2 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 0.3225524247130407 + 99.67744560167213 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 3 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 52.99553499162932 + 44.55947520113671 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 4 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 64.36007081217727 + 7.922505931377522 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 5 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 46.937655527278906 + 34.37401121375584 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 6 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 29.606117317748925 + 59.7062771702808 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 7 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 64.60462597715014 + 65.32875118919438 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 8 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 84.91966612667193 + 21.61064185087591 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 9 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 24.128119535736893 + 14.27770805377394 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 10 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 36.23919862128766 + 23.421151622254555 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 11 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 53.689973725385855 + 92.47281715616484 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 12 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 21.499980846738108 + 86.31913226282572 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 13 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 23.896054282937385 + 6.502957157635625 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 14 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 86.99986531287792 + 45.74381748881159 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 15 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 68.50722882135574 + 50.25930042782911 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 16 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 22.03851735367126 + 57.304977718401084 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 17 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 16.094855623021655 + 20.15220518337424 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 18 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 91.46540103964149 + 63.949352956656554 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 19 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 71.92141571796324 + 39.70157072422388 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 20 + + sky1 + + + + org.contikios.cooja.plugins.SimControl + 318 + 1 + 172 + 0 + 0 + + + org.contikios.cooja.plugins.Visualizer + + org.contikios.cooja.plugins.skins.UDGMVisualizerSkin + org.contikios.cooja.plugins.skins.IDVisualizerSkin + org.contikios.cooja.plugins.skins.AttributeVisualizerSkin + 4.028431381533795 0.0 0.0 4.028431381533795 114.84980283087096 -0.016939876572727552 + + 631 + 2 + 545 + 809 + 0 + + + org.contikios.cooja.plugins.LogListener + + timedout + + + + 1440 + 3 + 275 + 1 + 556 + + + org.contikios.cooja.plugins.ScriptRunner + + + true + + 600 + 0 + 775 + 304 + 5 + + + diff --git a/regression-tests/11-ipv6/01-cooja-ipv6-udp.csc b/regression-tests/11-ipv6/01-cooja-ipv6-udp.csc index 8681e4ded..ff00b5bc3 100644 --- a/regression-tests/11-ipv6/01-cooja-ipv6-udp.csc +++ b/regression-tests/11-ipv6/01-cooja-ipv6-udp.csc @@ -1,183 +1,183 @@ - - - [APPS_DIR]/mrm - [APPS_DIR]/mspsim - [APPS_DIR]/avrora - [APPS_DIR]/serial_socket - [APPS_DIR]/collect-view - [APPS_DIR]/powertracker - - My simulation - generated - 1000000 - - org.contikios.cooja.radiomediums.UDGM - 50.0 - 100.0 - 1.0 - 1.0 - - - 40000 - - - org.contikios.cooja.contikimote.ContikiMoteType - mtype350 - Receiver - [CONTIKI_DIR]/examples/udp-ipv6/udp-server.c - make TARGET=cooja clean -make udp-server.cooja TARGET=cooja - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.Battery - org.contikios.cooja.contikimote.interfaces.ContikiVib - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - org.contikios.cooja.contikimote.interfaces.ContikiRS232 - org.contikios.cooja.contikimote.interfaces.ContikiBeeper - org.contikios.cooja.contikimote.interfaces.ContikiIPAddress - org.contikios.cooja.contikimote.interfaces.ContikiRadio - org.contikios.cooja.contikimote.interfaces.ContikiButton - org.contikios.cooja.contikimote.interfaces.ContikiPIR - org.contikios.cooja.contikimote.interfaces.ContikiClock - org.contikios.cooja.contikimote.interfaces.ContikiLED - org.contikios.cooja.contikimote.interfaces.ContikiCFS - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.interfaces.MoteAttributes - false - - - org.contikios.cooja.contikimote.ContikiMoteType - mtype981 - Sender - [CONTIKI_DIR]/examples/udp-ipv6/udp-client.c - make udp-client.cooja TARGET=cooja - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.Battery - org.contikios.cooja.contikimote.interfaces.ContikiVib - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - org.contikios.cooja.contikimote.interfaces.ContikiRS232 - org.contikios.cooja.contikimote.interfaces.ContikiBeeper - org.contikios.cooja.contikimote.interfaces.ContikiIPAddress - org.contikios.cooja.contikimote.interfaces.ContikiRadio - org.contikios.cooja.contikimote.interfaces.ContikiButton - org.contikios.cooja.contikimote.interfaces.ContikiPIR - org.contikios.cooja.contikimote.interfaces.ContikiClock - org.contikios.cooja.contikimote.interfaces.ContikiLED - org.contikios.cooja.contikimote.interfaces.ContikiCFS - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.interfaces.MoteAttributes - false - - - - org.contikios.cooja.interfaces.Position - 98.76075470611741 - 30.469519951198897 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 1 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype350 - - - - org.contikios.cooja.interfaces.Position - 58.59043340181549 - 22.264557758786697 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 2 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype981 - - - - org.contikios.cooja.plugins.SimControl - 248 - 2 - 200 - 0 - 0 - - - org.contikios.cooja.plugins.LogListener - - ID:1 - - - - 851 - 1 - 187 - 1 - 521 - - - org.contikios.cooja.plugins.Visualizer - - org.contikios.cooja.plugins.skins.UDGMVisualizerSkin - org.contikios.cooja.plugins.skins.IDVisualizerSkin - org.contikios.cooja.plugins.skins.TrafficVisualizerSkin - 2.565713585691764 0.0 0.0 2.565713585691764 -91.30090099174814 -28.413835696190525 - - 246 - 3 - 121 - 1 - 201 - - - org.contikios.cooja.plugins.RadioLogger - - 133 - - false - false - - 246 - 4 - 198 - 0 - 323 - - - org.contikios.cooja.plugins.ScriptRunner - - - true - - 600 - 0 - 520 - 250 - -1 - - - + + + [APPS_DIR]/mrm + [APPS_DIR]/mspsim + [APPS_DIR]/avrora + [APPS_DIR]/serial_socket + [APPS_DIR]/collect-view + [APPS_DIR]/powertracker + + My simulation + generated + 1000000 + + org.contikios.cooja.radiomediums.UDGM + 50.0 + 100.0 + 1.0 + 1.0 + + + 40000 + + + org.contikios.cooja.contikimote.ContikiMoteType + mtype350 + Receiver + [CONTIKI_DIR]/examples/udp-ipv6/udp-server.c + make TARGET=cooja clean +make udp-server.cooja TARGET=cooja + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.Battery + org.contikios.cooja.contikimote.interfaces.ContikiVib + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + org.contikios.cooja.contikimote.interfaces.ContikiRS232 + org.contikios.cooja.contikimote.interfaces.ContikiBeeper + org.contikios.cooja.contikimote.interfaces.ContikiIPAddress + org.contikios.cooja.contikimote.interfaces.ContikiRadio + org.contikios.cooja.contikimote.interfaces.ContikiButton + org.contikios.cooja.contikimote.interfaces.ContikiPIR + org.contikios.cooja.contikimote.interfaces.ContikiClock + org.contikios.cooja.contikimote.interfaces.ContikiLED + org.contikios.cooja.contikimote.interfaces.ContikiCFS + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.interfaces.MoteAttributes + false + + + org.contikios.cooja.contikimote.ContikiMoteType + mtype981 + Sender + [CONTIKI_DIR]/examples/udp-ipv6/udp-client.c + make udp-client.cooja TARGET=cooja + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.Battery + org.contikios.cooja.contikimote.interfaces.ContikiVib + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + org.contikios.cooja.contikimote.interfaces.ContikiRS232 + org.contikios.cooja.contikimote.interfaces.ContikiBeeper + org.contikios.cooja.contikimote.interfaces.ContikiIPAddress + org.contikios.cooja.contikimote.interfaces.ContikiRadio + org.contikios.cooja.contikimote.interfaces.ContikiButton + org.contikios.cooja.contikimote.interfaces.ContikiPIR + org.contikios.cooja.contikimote.interfaces.ContikiClock + org.contikios.cooja.contikimote.interfaces.ContikiLED + org.contikios.cooja.contikimote.interfaces.ContikiCFS + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.interfaces.MoteAttributes + false + + + + org.contikios.cooja.interfaces.Position + 98.76075470611741 + 30.469519951198897 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 1 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype350 + + + + org.contikios.cooja.interfaces.Position + 58.59043340181549 + 22.264557758786697 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 2 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype981 + + + + org.contikios.cooja.plugins.SimControl + 248 + 2 + 200 + 0 + 0 + + + org.contikios.cooja.plugins.LogListener + + ID:1 + + + + 851 + 1 + 187 + 1 + 521 + + + org.contikios.cooja.plugins.Visualizer + + org.contikios.cooja.plugins.skins.UDGMVisualizerSkin + org.contikios.cooja.plugins.skins.IDVisualizerSkin + org.contikios.cooja.plugins.skins.TrafficVisualizerSkin + 2.565713585691764 0.0 0.0 2.565713585691764 -91.30090099174814 -28.413835696190525 + + 246 + 3 + 121 + 1 + 201 + + + org.contikios.cooja.plugins.RadioLogger + + 133 + + false + false + + 246 + 4 + 198 + 0 + 323 + + + org.contikios.cooja.plugins.ScriptRunner + + + true + + 600 + 0 + 520 + 250 + -1 + + + diff --git a/regression-tests/11-ipv6/010-exp5438-unicast-fragmentation-contikimac.csc b/regression-tests/11-ipv6/010-exp5438-unicast-fragmentation-contikimac.csc index d8bd6551d..6fc25f388 100644 --- a/regression-tests/11-ipv6/010-exp5438-unicast-fragmentation-contikimac.csc +++ b/regression-tests/11-ipv6/010-exp5438-unicast-fragmentation-contikimac.csc @@ -1,166 +1,166 @@ - - - [APPS_DIR]/mrm - [APPS_DIR]/mspsim - [APPS_DIR]/avrora - [APPS_DIR]/serial_socket - [APPS_DIR]/collect-view - [APPS_DIR]/powertracker - - My simulation - 123456 - 1000000 - - org.contikios.cooja.radiomediums.UDGM - 50.0 - 100.0 - 1.0 - 1.0 - - - 40000 - - - org.contikios.cooja.mspmote.Exp5438MoteType - exp5438#1 - Sender - [CONTIKI_DIR]/regression-tests/11-ipv6/code/sender/unicast-sender.c - make clean TARGET=exp5438 -make unicast-sender.exp5438 DEFINES=NETSTACK_CONF_RDC=contikimac_driver,SIZE=400,BUFSIZE=500 TARGET=exp5438 - [CONTIKI_DIR]/regression-tests/11-ipv6/code/sender/unicast-sender.exp5438 - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.interfaces.IPAddress - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - org.contikios.cooja.mspmote.interfaces.MspClock - org.contikios.cooja.mspmote.interfaces.MspMoteID - org.contikios.cooja.mspmote.interfaces.Msp802154Radio - org.contikios.cooja.mspmote.interfaces.UsciA1Serial - org.contikios.cooja.mspmote.interfaces.Exp5438LED - org.contikios.cooja.mspmote.interfaces.MspDebugOutput - - - org.contikios.cooja.mspmote.Exp5438MoteType - exp5438#2 - Receiver - [CONTIKI_DIR]/regression-tests/11-ipv6/code/receiver/udp-receiver.c - make clean TARGET=exp5438 -make udp-receiver.exp5438 DEFINES=NETSTACK_CONF_RDC=contikimac_driver,SIZE=400,BUFSIZE=500 TARGET=exp5438 - [CONTIKI_DIR]/regression-tests/11-ipv6/code/receiver/udp-receiver.exp5438 - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.interfaces.IPAddress - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - org.contikios.cooja.mspmote.interfaces.MspClock - org.contikios.cooja.mspmote.interfaces.MspMoteID - org.contikios.cooja.mspmote.interfaces.Msp802154Radio - org.contikios.cooja.mspmote.interfaces.UsciA1Serial - org.contikios.cooja.mspmote.interfaces.Exp5438LED - org.contikios.cooja.mspmote.interfaces.MspDebugOutput - - - - - org.contikios.cooja.interfaces.Position - 40.305234290431166 - 41.884881003965305 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 1 - - exp5438#1 - - - - - org.contikios.cooja.interfaces.Position - 65.38552901873047 - 40.93246474846026 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 2 - - exp5438#2 - - - - org.contikios.cooja.plugins.SimControl - 280 - 0 - 160 - 400 - 0 - - - org.contikios.cooja.plugins.Visualizer - - org.contikios.cooja.plugins.skins.IDVisualizerSkin - org.contikios.cooja.plugins.skins.UDGMVisualizerSkin - 6.299766478490424 0.0 0.0 6.299766478490424 -160.913563890561 -119.86496930434095 - - 400 - 2 - 400 - 1 - 1 - - - org.contikios.cooja.plugins.LogListener - - - - - 1200 - 5 - 240 - 400 - 160 - - - org.contikios.cooja.plugins.TimeLine - - 0 - 1 - - - - 500.0 - - 1600 - 4 - 166 - 0 - 539 - - - org.contikios.cooja.plugins.Notes - - Enter notes here - true - - 920 - 3 - 160 - 680 - 0 - - - org.contikios.cooja.plugins.ScriptRunner - - [CONFIG_DIR]/fragmentation-should-receive-all.js - true - - 618 - 1 - 399 - 645 - 128 - - - + + + [APPS_DIR]/mrm + [APPS_DIR]/mspsim + [APPS_DIR]/avrora + [APPS_DIR]/serial_socket + [APPS_DIR]/collect-view + [APPS_DIR]/powertracker + + My simulation + 123456 + 1000000 + + org.contikios.cooja.radiomediums.UDGM + 50.0 + 100.0 + 1.0 + 1.0 + + + 40000 + + + org.contikios.cooja.mspmote.Exp5438MoteType + exp5438#1 + Sender + [CONTIKI_DIR]/regression-tests/11-ipv6/code/sender/unicast-sender.c + make clean TARGET=exp5438 +make unicast-sender.exp5438 DEFINES=NETSTACK_CONF_RDC=contikimac_driver,SIZE=400,BUFSIZE=500 TARGET=exp5438 + [CONTIKI_DIR]/regression-tests/11-ipv6/code/sender/unicast-sender.exp5438 + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.interfaces.IPAddress + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + org.contikios.cooja.mspmote.interfaces.MspClock + org.contikios.cooja.mspmote.interfaces.MspMoteID + org.contikios.cooja.mspmote.interfaces.Msp802154Radio + org.contikios.cooja.mspmote.interfaces.UsciA1Serial + org.contikios.cooja.mspmote.interfaces.Exp5438LED + org.contikios.cooja.mspmote.interfaces.MspDebugOutput + + + org.contikios.cooja.mspmote.Exp5438MoteType + exp5438#2 + Receiver + [CONTIKI_DIR]/regression-tests/11-ipv6/code/receiver/udp-receiver.c + make clean TARGET=exp5438 +make udp-receiver.exp5438 DEFINES=NETSTACK_CONF_RDC=contikimac_driver,SIZE=400,BUFSIZE=500 TARGET=exp5438 + [CONTIKI_DIR]/regression-tests/11-ipv6/code/receiver/udp-receiver.exp5438 + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.interfaces.IPAddress + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + org.contikios.cooja.mspmote.interfaces.MspClock + org.contikios.cooja.mspmote.interfaces.MspMoteID + org.contikios.cooja.mspmote.interfaces.Msp802154Radio + org.contikios.cooja.mspmote.interfaces.UsciA1Serial + org.contikios.cooja.mspmote.interfaces.Exp5438LED + org.contikios.cooja.mspmote.interfaces.MspDebugOutput + + + + + org.contikios.cooja.interfaces.Position + 40.305234290431166 + 41.884881003965305 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 1 + + exp5438#1 + + + + + org.contikios.cooja.interfaces.Position + 65.38552901873047 + 40.93246474846026 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 2 + + exp5438#2 + + + + org.contikios.cooja.plugins.SimControl + 280 + 0 + 160 + 400 + 0 + + + org.contikios.cooja.plugins.Visualizer + + org.contikios.cooja.plugins.skins.IDVisualizerSkin + org.contikios.cooja.plugins.skins.UDGMVisualizerSkin + 6.299766478490424 0.0 0.0 6.299766478490424 -160.913563890561 -119.86496930434095 + + 400 + 2 + 400 + 1 + 1 + + + org.contikios.cooja.plugins.LogListener + + + + + 1200 + 5 + 240 + 400 + 160 + + + org.contikios.cooja.plugins.TimeLine + + 0 + 1 + + + + 500.0 + + 1600 + 4 + 166 + 0 + 539 + + + org.contikios.cooja.plugins.Notes + + Enter notes here + true + + 920 + 3 + 160 + 680 + 0 + + + org.contikios.cooja.plugins.ScriptRunner + + [CONFIG_DIR]/fragmentation-should-receive-all.js + true + + 618 + 1 + 399 + 645 + 128 + + + diff --git a/regression-tests/11-ipv6/04-exp5438-udp-fragmentation-contikimac.csc b/regression-tests/11-ipv6/04-exp5438-udp-fragmentation-contikimac.csc index 2608365e9..f80dbc872 100644 --- a/regression-tests/11-ipv6/04-exp5438-udp-fragmentation-contikimac.csc +++ b/regression-tests/11-ipv6/04-exp5438-udp-fragmentation-contikimac.csc @@ -1,167 +1,167 @@ - - - [APPS_DIR]/mrm - [APPS_DIR]/mspsim - [APPS_DIR]/avrora - [APPS_DIR]/serial_socket - [APPS_DIR]/collect-view - [APPS_DIR]/powertracker - - My simulation - 123456 - 1000000 - - org.contikios.cooja.radiomediums.UDGM - 50.0 - 100.0 - 1.0 - 1.0 - - - 40000 - - - org.contikios.cooja.mspmote.Exp5438MoteType - exp5438#1 - Sender - [CONTIKI_DIR]/regression-tests/11-ipv6/code/sender/udp-sender.c - make clean TARGET=exp5438 -make udp-sender.exp5438 DEFINES=NETSTACK_CONF_RDC=contikimac_driver TARGET=exp5438 - [CONTIKI_DIR]/regression-tests/11-ipv6/code/sender/udp-sender.exp5438 - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.interfaces.IPAddress - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - org.contikios.cooja.mspmote.interfaces.MspClock - org.contikios.cooja.mspmote.interfaces.MspMoteID - org.contikios.cooja.mspmote.interfaces.Msp802154Radio - org.contikios.cooja.mspmote.interfaces.UsciA1Serial - org.contikios.cooja.mspmote.interfaces.Exp5438LED - org.contikios.cooja.mspmote.interfaces.MspDebugOutput - - - org.contikios.cooja.mspmote.Exp5438MoteType - exp5438#2 - Receiver - [CONTIKI_DIR]/regression-tests/11-ipv6/code/receiver/udp-receiver.c - make clean TARGET=exp5438 -make udp-receiver.exp5438 DEFINES=NETSTACK_CONF_RDC=contikimac_driver TARGET=exp5438 - [CONTIKI_DIR]/regression-tests/11-ipv6/code/receiver/udp-receiver.exp5438 - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.interfaces.IPAddress - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - org.contikios.cooja.mspmote.interfaces.MspClock - org.contikios.cooja.mspmote.interfaces.MspMoteID - org.contikios.cooja.mspmote.interfaces.Msp802154Radio - org.contikios.cooja.mspmote.interfaces.UsciA1Serial - org.contikios.cooja.mspmote.interfaces.Exp5438LED - org.contikios.cooja.mspmote.interfaces.MspDebugOutput - - - - - org.contikios.cooja.interfaces.Position - 40.305234290431166 - 41.884881003965305 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 1 - - exp5438#1 - - - - - org.contikios.cooja.interfaces.Position - 65.38552901873047 - 40.93246474846026 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 2 - - exp5438#2 - - - - org.contikios.cooja.plugins.SimControl - 280 - 0 - 160 - 400 - 0 - - - org.contikios.cooja.plugins.Visualizer - - org.contikios.cooja.plugins.skins.IDVisualizerSkin - org.contikios.cooja.plugins.skins.UDGMVisualizerSkin - 6.299766478490424 0.0 0.0 6.299766478490424 -160.913563890561 -119.86496930434095 - - 400 - 2 - 400 - 1 - 1 - - - org.contikios.cooja.plugins.LogListener - - - - - - 1200 - 5 - 240 - 400 - 160 - - - org.contikios.cooja.plugins.TimeLine - - 0 - 1 - - - - 500.0 - - 1600 - 4 - 166 - 0 - 539 - - - org.contikios.cooja.plugins.Notes - - Enter notes here - true - - 920 - 3 - 160 - 680 - 0 - - - org.contikios.cooja.plugins.ScriptRunner - - [CONTIKI_DIR]/regression-tests/11-ipv6/fragmentation-should-receive-all.js - true - - 618 - 1 - 399 - 645 - 128 - - - + + + [APPS_DIR]/mrm + [APPS_DIR]/mspsim + [APPS_DIR]/avrora + [APPS_DIR]/serial_socket + [APPS_DIR]/collect-view + [APPS_DIR]/powertracker + + My simulation + 123456 + 1000000 + + org.contikios.cooja.radiomediums.UDGM + 50.0 + 100.0 + 1.0 + 1.0 + + + 40000 + + + org.contikios.cooja.mspmote.Exp5438MoteType + exp5438#1 + Sender + [CONTIKI_DIR]/regression-tests/11-ipv6/code/sender/udp-sender.c + make clean TARGET=exp5438 +make udp-sender.exp5438 DEFINES=NETSTACK_CONF_RDC=contikimac_driver TARGET=exp5438 + [CONTIKI_DIR]/regression-tests/11-ipv6/code/sender/udp-sender.exp5438 + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.interfaces.IPAddress + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + org.contikios.cooja.mspmote.interfaces.MspClock + org.contikios.cooja.mspmote.interfaces.MspMoteID + org.contikios.cooja.mspmote.interfaces.Msp802154Radio + org.contikios.cooja.mspmote.interfaces.UsciA1Serial + org.contikios.cooja.mspmote.interfaces.Exp5438LED + org.contikios.cooja.mspmote.interfaces.MspDebugOutput + + + org.contikios.cooja.mspmote.Exp5438MoteType + exp5438#2 + Receiver + [CONTIKI_DIR]/regression-tests/11-ipv6/code/receiver/udp-receiver.c + make clean TARGET=exp5438 +make udp-receiver.exp5438 DEFINES=NETSTACK_CONF_RDC=contikimac_driver TARGET=exp5438 + [CONTIKI_DIR]/regression-tests/11-ipv6/code/receiver/udp-receiver.exp5438 + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.interfaces.IPAddress + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + org.contikios.cooja.mspmote.interfaces.MspClock + org.contikios.cooja.mspmote.interfaces.MspMoteID + org.contikios.cooja.mspmote.interfaces.Msp802154Radio + org.contikios.cooja.mspmote.interfaces.UsciA1Serial + org.contikios.cooja.mspmote.interfaces.Exp5438LED + org.contikios.cooja.mspmote.interfaces.MspDebugOutput + + + + + org.contikios.cooja.interfaces.Position + 40.305234290431166 + 41.884881003965305 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 1 + + exp5438#1 + + + + + org.contikios.cooja.interfaces.Position + 65.38552901873047 + 40.93246474846026 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 2 + + exp5438#2 + + + + org.contikios.cooja.plugins.SimControl + 280 + 0 + 160 + 400 + 0 + + + org.contikios.cooja.plugins.Visualizer + + org.contikios.cooja.plugins.skins.IDVisualizerSkin + org.contikios.cooja.plugins.skins.UDGMVisualizerSkin + 6.299766478490424 0.0 0.0 6.299766478490424 -160.913563890561 -119.86496930434095 + + 400 + 2 + 400 + 1 + 1 + + + org.contikios.cooja.plugins.LogListener + + + + + + 1200 + 5 + 240 + 400 + 160 + + + org.contikios.cooja.plugins.TimeLine + + 0 + 1 + + + + 500.0 + + 1600 + 4 + 166 + 0 + 539 + + + org.contikios.cooja.plugins.Notes + + Enter notes here + true + + 920 + 3 + 160 + 680 + 0 + + + org.contikios.cooja.plugins.ScriptRunner + + [CONTIKI_DIR]/regression-tests/11-ipv6/fragmentation-should-receive-all.js + true + + 618 + 1 + 399 + 645 + 128 + + + diff --git a/regression-tests/11-ipv6/05-exp5438-udp-fragmentation-nullrdc.csc b/regression-tests/11-ipv6/05-exp5438-udp-fragmentation-nullrdc.csc index 5a3025135..3111ea12c 100644 --- a/regression-tests/11-ipv6/05-exp5438-udp-fragmentation-nullrdc.csc +++ b/regression-tests/11-ipv6/05-exp5438-udp-fragmentation-nullrdc.csc @@ -1,167 +1,167 @@ - - - [APPS_DIR]/mrm - [APPS_DIR]/mspsim - [APPS_DIR]/avrora - [APPS_DIR]/serial_socket - [APPS_DIR]/collect-view - [APPS_DIR]/powertracker - - My simulation - 123456 - 1000000 - - org.contikios.cooja.radiomediums.UDGM - 50.0 - 100.0 - 1.0 - 1.0 - - - 40000 - - - org.contikios.cooja.mspmote.Exp5438MoteType - exp5438#1 - Sender - [CONTIKI_DIR]/regression-tests/11-ipv6/code/sender/udp-sender.c - make clean TARGET=exp5438 -make udp-sender.exp5438 DEFINES=NETSTACK_CONF_RDC=nullrdc_driver TARGET=exp5438 - [CONTIKI_DIR]/regression-tests/11-ipv6/code/sender/udp-sender.exp5438 - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.interfaces.IPAddress - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - org.contikios.cooja.mspmote.interfaces.MspClock - org.contikios.cooja.mspmote.interfaces.MspMoteID - org.contikios.cooja.mspmote.interfaces.Msp802154Radio - org.contikios.cooja.mspmote.interfaces.UsciA1Serial - org.contikios.cooja.mspmote.interfaces.Exp5438LED - org.contikios.cooja.mspmote.interfaces.MspDebugOutput - - - org.contikios.cooja.mspmote.Exp5438MoteType - exp5438#2 - Receiver - [CONTIKI_DIR]/regression-tests/11-ipv6/code/receiver/udp-receiver.c - make clean TARGET=exp5438 -make udp-receiver.exp5438 DEFINES=NETSTACK_CONF_RDC=nullrdc_driver TARGET=exp5438 - [CONTIKI_DIR]/regression-tests/11-ipv6/code/receiver/udp-receiver.exp5438 - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.interfaces.IPAddress - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - org.contikios.cooja.mspmote.interfaces.MspClock - org.contikios.cooja.mspmote.interfaces.MspMoteID - org.contikios.cooja.mspmote.interfaces.Msp802154Radio - org.contikios.cooja.mspmote.interfaces.UsciA1Serial - org.contikios.cooja.mspmote.interfaces.Exp5438LED - org.contikios.cooja.mspmote.interfaces.MspDebugOutput - - - - - org.contikios.cooja.interfaces.Position - 40.305234290431166 - 41.884881003965305 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 1 - - exp5438#1 - - - - - org.contikios.cooja.interfaces.Position - 65.38552901873047 - 40.93246474846026 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 2 - - exp5438#2 - - - - org.contikios.cooja.plugins.SimControl - 280 - 0 - 160 - 400 - 0 - - - org.contikios.cooja.plugins.Visualizer - - org.contikios.cooja.plugins.skins.IDVisualizerSkin - org.contikios.cooja.plugins.skins.UDGMVisualizerSkin - 6.299766478490424 0.0 0.0 6.299766478490424 -160.913563890561 -119.86496930434095 - - 400 - 2 - 400 - 1 - 1 - - - org.contikios.cooja.plugins.LogListener - - - - - - 1200 - 5 - 240 - 400 - 160 - - - org.contikios.cooja.plugins.TimeLine - - 0 - 1 - - - - 500.0 - - 1600 - 4 - 166 - 0 - 539 - - - org.contikios.cooja.plugins.Notes - - Enter notes here - true - - 920 - 3 - 160 - 680 - 0 - - - org.contikios.cooja.plugins.ScriptRunner - - [CONTIKI_DIR]/regression-tests/11-ipv6/fragmentation-should-receive-all.js - true - - 618 - 1 - 399 - 645 - 128 - - - + + + [APPS_DIR]/mrm + [APPS_DIR]/mspsim + [APPS_DIR]/avrora + [APPS_DIR]/serial_socket + [APPS_DIR]/collect-view + [APPS_DIR]/powertracker + + My simulation + 123456 + 1000000 + + org.contikios.cooja.radiomediums.UDGM + 50.0 + 100.0 + 1.0 + 1.0 + + + 40000 + + + org.contikios.cooja.mspmote.Exp5438MoteType + exp5438#1 + Sender + [CONTIKI_DIR]/regression-tests/11-ipv6/code/sender/udp-sender.c + make clean TARGET=exp5438 +make udp-sender.exp5438 DEFINES=NETSTACK_CONF_RDC=nullrdc_driver TARGET=exp5438 + [CONTIKI_DIR]/regression-tests/11-ipv6/code/sender/udp-sender.exp5438 + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.interfaces.IPAddress + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + org.contikios.cooja.mspmote.interfaces.MspClock + org.contikios.cooja.mspmote.interfaces.MspMoteID + org.contikios.cooja.mspmote.interfaces.Msp802154Radio + org.contikios.cooja.mspmote.interfaces.UsciA1Serial + org.contikios.cooja.mspmote.interfaces.Exp5438LED + org.contikios.cooja.mspmote.interfaces.MspDebugOutput + + + org.contikios.cooja.mspmote.Exp5438MoteType + exp5438#2 + Receiver + [CONTIKI_DIR]/regression-tests/11-ipv6/code/receiver/udp-receiver.c + make clean TARGET=exp5438 +make udp-receiver.exp5438 DEFINES=NETSTACK_CONF_RDC=nullrdc_driver TARGET=exp5438 + [CONTIKI_DIR]/regression-tests/11-ipv6/code/receiver/udp-receiver.exp5438 + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.interfaces.IPAddress + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + org.contikios.cooja.mspmote.interfaces.MspClock + org.contikios.cooja.mspmote.interfaces.MspMoteID + org.contikios.cooja.mspmote.interfaces.Msp802154Radio + org.contikios.cooja.mspmote.interfaces.UsciA1Serial + org.contikios.cooja.mspmote.interfaces.Exp5438LED + org.contikios.cooja.mspmote.interfaces.MspDebugOutput + + + + + org.contikios.cooja.interfaces.Position + 40.305234290431166 + 41.884881003965305 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 1 + + exp5438#1 + + + + + org.contikios.cooja.interfaces.Position + 65.38552901873047 + 40.93246474846026 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 2 + + exp5438#2 + + + + org.contikios.cooja.plugins.SimControl + 280 + 0 + 160 + 400 + 0 + + + org.contikios.cooja.plugins.Visualizer + + org.contikios.cooja.plugins.skins.IDVisualizerSkin + org.contikios.cooja.plugins.skins.UDGMVisualizerSkin + 6.299766478490424 0.0 0.0 6.299766478490424 -160.913563890561 -119.86496930434095 + + 400 + 2 + 400 + 1 + 1 + + + org.contikios.cooja.plugins.LogListener + + + + + + 1200 + 5 + 240 + 400 + 160 + + + org.contikios.cooja.plugins.TimeLine + + 0 + 1 + + + + 500.0 + + 1600 + 4 + 166 + 0 + 539 + + + org.contikios.cooja.plugins.Notes + + Enter notes here + true + + 920 + 3 + 160 + 680 + 0 + + + org.contikios.cooja.plugins.ScriptRunner + + [CONTIKI_DIR]/regression-tests/11-ipv6/fragmentation-should-receive-all.js + true + + 618 + 1 + 399 + 645 + 128 + + + diff --git a/regression-tests/11-ipv6/06-exp5438-udp-fragmentation-contikimac-large-sender.csc b/regression-tests/11-ipv6/06-exp5438-udp-fragmentation-contikimac-large-sender.csc index ae2485746..cc742ee1d 100644 --- a/regression-tests/11-ipv6/06-exp5438-udp-fragmentation-contikimac-large-sender.csc +++ b/regression-tests/11-ipv6/06-exp5438-udp-fragmentation-contikimac-large-sender.csc @@ -1,167 +1,167 @@ - - - [APPS_DIR]/mrm - [APPS_DIR]/mspsim - [APPS_DIR]/avrora - [APPS_DIR]/serial_socket - [APPS_DIR]/collect-view - [APPS_DIR]/powertracker - - My simulation - 123456 - 1000000 - - org.contikios.cooja.radiomediums.UDGM - 50.0 - 100.0 - 1.0 - 1.0 - - - 40000 - - - org.contikios.cooja.mspmote.Exp5438MoteType - exp5438#1 - Sender - [CONTIKI_DIR]/regression-tests/11-ipv6/code/sender/udp-sender.c - make clean TARGET=exp5438 -make udp-sender.exp5438 DEFINES=NETSTACK_CONF_RDC=contikimac_driver,SIZE=500,BUFSIZE=600 TARGET=exp5438 - [CONTIKI_DIR]/regression-tests/11-ipv6/code/sender/udp-sender.exp5438 - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.interfaces.IPAddress - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - org.contikios.cooja.mspmote.interfaces.MspClock - org.contikios.cooja.mspmote.interfaces.MspMoteID - org.contikios.cooja.mspmote.interfaces.Msp802154Radio - org.contikios.cooja.mspmote.interfaces.UsciA1Serial - org.contikios.cooja.mspmote.interfaces.Exp5438LED - org.contikios.cooja.mspmote.interfaces.MspDebugOutput - - - org.contikios.cooja.mspmote.Exp5438MoteType - exp5438#2 - Receiver - [CONTIKI_DIR]/regression-tests/11-ipv6/code/receiver/udp-receiver.c - make clean TARGET=exp5438 -make udp-receiver.exp5438 DEFINES=NETSTACK_CONF_RDC=contikimac_driver TARGET=exp5438 - [CONTIKI_DIR]/regression-tests/11-ipv6/code/receiver/udp-receiver.exp5438 - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.interfaces.IPAddress - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - org.contikios.cooja.mspmote.interfaces.MspClock - org.contikios.cooja.mspmote.interfaces.MspMoteID - org.contikios.cooja.mspmote.interfaces.Msp802154Radio - org.contikios.cooja.mspmote.interfaces.UsciA1Serial - org.contikios.cooja.mspmote.interfaces.Exp5438LED - org.contikios.cooja.mspmote.interfaces.MspDebugOutput - - - - - org.contikios.cooja.interfaces.Position - 40.305234290431166 - 41.884881003965305 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 1 - - exp5438#1 - - - - - org.contikios.cooja.interfaces.Position - 65.38552901873047 - 40.93246474846026 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 2 - - exp5438#2 - - - - org.contikios.cooja.plugins.SimControl - 280 - 0 - 160 - 400 - 0 - - - org.contikios.cooja.plugins.Visualizer - - org.contikios.cooja.plugins.skins.IDVisualizerSkin - org.contikios.cooja.plugins.skins.UDGMVisualizerSkin - 6.299766478490424 0.0 0.0 6.299766478490424 -160.913563890561 -119.86496930434095 - - 400 - 2 - 400 - 1 - 1 - - - org.contikios.cooja.plugins.LogListener - - - - - - 1200 - 5 - 240 - 400 - 160 - - - org.contikios.cooja.plugins.TimeLine - - 0 - 1 - - - - 500.0 - - 1600 - 4 - 166 - 0 - 539 - - - org.contikios.cooja.plugins.Notes - - Enter notes here - true - - 920 - 3 - 160 - 680 - 0 - - - org.contikios.cooja.plugins.ScriptRunner - - [CONTIKI_DIR]/regression-tests/11-ipv6/fragmentation-should-receive-none.js - true - - 618 - 1 - 399 - 645 - 128 - - - + + + [APPS_DIR]/mrm + [APPS_DIR]/mspsim + [APPS_DIR]/avrora + [APPS_DIR]/serial_socket + [APPS_DIR]/collect-view + [APPS_DIR]/powertracker + + My simulation + 123456 + 1000000 + + org.contikios.cooja.radiomediums.UDGM + 50.0 + 100.0 + 1.0 + 1.0 + + + 40000 + + + org.contikios.cooja.mspmote.Exp5438MoteType + exp5438#1 + Sender + [CONTIKI_DIR]/regression-tests/11-ipv6/code/sender/udp-sender.c + make clean TARGET=exp5438 +make udp-sender.exp5438 DEFINES=NETSTACK_CONF_RDC=contikimac_driver,SIZE=500,BUFSIZE=600 TARGET=exp5438 + [CONTIKI_DIR]/regression-tests/11-ipv6/code/sender/udp-sender.exp5438 + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.interfaces.IPAddress + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + org.contikios.cooja.mspmote.interfaces.MspClock + org.contikios.cooja.mspmote.interfaces.MspMoteID + org.contikios.cooja.mspmote.interfaces.Msp802154Radio + org.contikios.cooja.mspmote.interfaces.UsciA1Serial + org.contikios.cooja.mspmote.interfaces.Exp5438LED + org.contikios.cooja.mspmote.interfaces.MspDebugOutput + + + org.contikios.cooja.mspmote.Exp5438MoteType + exp5438#2 + Receiver + [CONTIKI_DIR]/regression-tests/11-ipv6/code/receiver/udp-receiver.c + make clean TARGET=exp5438 +make udp-receiver.exp5438 DEFINES=NETSTACK_CONF_RDC=contikimac_driver TARGET=exp5438 + [CONTIKI_DIR]/regression-tests/11-ipv6/code/receiver/udp-receiver.exp5438 + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.interfaces.IPAddress + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + org.contikios.cooja.mspmote.interfaces.MspClock + org.contikios.cooja.mspmote.interfaces.MspMoteID + org.contikios.cooja.mspmote.interfaces.Msp802154Radio + org.contikios.cooja.mspmote.interfaces.UsciA1Serial + org.contikios.cooja.mspmote.interfaces.Exp5438LED + org.contikios.cooja.mspmote.interfaces.MspDebugOutput + + + + + org.contikios.cooja.interfaces.Position + 40.305234290431166 + 41.884881003965305 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 1 + + exp5438#1 + + + + + org.contikios.cooja.interfaces.Position + 65.38552901873047 + 40.93246474846026 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 2 + + exp5438#2 + + + + org.contikios.cooja.plugins.SimControl + 280 + 0 + 160 + 400 + 0 + + + org.contikios.cooja.plugins.Visualizer + + org.contikios.cooja.plugins.skins.IDVisualizerSkin + org.contikios.cooja.plugins.skins.UDGMVisualizerSkin + 6.299766478490424 0.0 0.0 6.299766478490424 -160.913563890561 -119.86496930434095 + + 400 + 2 + 400 + 1 + 1 + + + org.contikios.cooja.plugins.LogListener + + + + + + 1200 + 5 + 240 + 400 + 160 + + + org.contikios.cooja.plugins.TimeLine + + 0 + 1 + + + + 500.0 + + 1600 + 4 + 166 + 0 + 539 + + + org.contikios.cooja.plugins.Notes + + Enter notes here + true + + 920 + 3 + 160 + 680 + 0 + + + org.contikios.cooja.plugins.ScriptRunner + + [CONTIKI_DIR]/regression-tests/11-ipv6/fragmentation-should-receive-none.js + true + + 618 + 1 + 399 + 645 + 128 + + + diff --git a/regression-tests/11-ipv6/07-exp5438-udp-fragmentation-nullrdc-large-sender.csc b/regression-tests/11-ipv6/07-exp5438-udp-fragmentation-nullrdc-large-sender.csc index cc982ba44..e2991910d 100644 --- a/regression-tests/11-ipv6/07-exp5438-udp-fragmentation-nullrdc-large-sender.csc +++ b/regression-tests/11-ipv6/07-exp5438-udp-fragmentation-nullrdc-large-sender.csc @@ -1,167 +1,167 @@ - - - [APPS_DIR]/mrm - [APPS_DIR]/mspsim - [APPS_DIR]/avrora - [APPS_DIR]/serial_socket - [APPS_DIR]/collect-view - [APPS_DIR]/powertracker - - My simulation - 123456 - 1000000 - - org.contikios.cooja.radiomediums.UDGM - 50.0 - 100.0 - 1.0 - 1.0 - - - 40000 - - - org.contikios.cooja.mspmote.Exp5438MoteType - exp5438#1 - Sender - [CONTIKI_DIR]/regression-tests/11-ipv6/code/sender/udp-sender.c - make clean TARGET=exp5438 -make udp-sender.exp5438 DEFINES=NETSTACK_CONF_RDC=nullrdc_driver,SIZE=500,BUFSIZE=600 TARGET=exp5438 - [CONTIKI_DIR]/regression-tests/11-ipv6/code/sender/udp-sender.exp5438 - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.interfaces.IPAddress - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - org.contikios.cooja.mspmote.interfaces.MspClock - org.contikios.cooja.mspmote.interfaces.MspMoteID - org.contikios.cooja.mspmote.interfaces.Msp802154Radio - org.contikios.cooja.mspmote.interfaces.UsciA1Serial - org.contikios.cooja.mspmote.interfaces.Exp5438LED - org.contikios.cooja.mspmote.interfaces.MspDebugOutput - - - org.contikios.cooja.mspmote.Exp5438MoteType - exp5438#2 - Receiver - [CONTIKI_DIR]/regression-tests/11-ipv6/code/receiver/udp-receiver.c - make clean TARGET=exp5438 -make udp-receiver.exp5438 DEFINES=NETSTACK_CONF_RDC=nullrdc_driver TARGET=exp5438 - [CONTIKI_DIR]/regression-tests/11-ipv6/code/receiver/udp-receiver.exp5438 - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.interfaces.IPAddress - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - org.contikios.cooja.mspmote.interfaces.MspClock - org.contikios.cooja.mspmote.interfaces.MspMoteID - org.contikios.cooja.mspmote.interfaces.Msp802154Radio - org.contikios.cooja.mspmote.interfaces.UsciA1Serial - org.contikios.cooja.mspmote.interfaces.Exp5438LED - org.contikios.cooja.mspmote.interfaces.MspDebugOutput - - - - - org.contikios.cooja.interfaces.Position - 40.305234290431166 - 41.884881003965305 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 1 - - exp5438#1 - - - - - org.contikios.cooja.interfaces.Position - 65.38552901873047 - 40.93246474846026 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 2 - - exp5438#2 - - - - org.contikios.cooja.plugins.SimControl - 280 - 0 - 160 - 400 - 0 - - - org.contikios.cooja.plugins.Visualizer - - org.contikios.cooja.plugins.skins.IDVisualizerSkin - org.contikios.cooja.plugins.skins.UDGMVisualizerSkin - 6.299766478490424 0.0 0.0 6.299766478490424 -160.913563890561 -119.86496930434095 - - 400 - 2 - 400 - 1 - 1 - - - org.contikios.cooja.plugins.LogListener - - - - - - 1200 - 5 - 240 - 400 - 160 - - - org.contikios.cooja.plugins.TimeLine - - 0 - 1 - - - - 500.0 - - 1600 - 4 - 166 - 0 - 539 - - - org.contikios.cooja.plugins.Notes - - Enter notes here - true - - 920 - 3 - 160 - 680 - 0 - - - org.contikios.cooja.plugins.ScriptRunner - - [CONTIKI_DIR]/regression-tests/11-ipv6/fragmentation-should-receive-none.js - true - - 618 - 1 - 399 - 645 - 128 - - - + + + [APPS_DIR]/mrm + [APPS_DIR]/mspsim + [APPS_DIR]/avrora + [APPS_DIR]/serial_socket + [APPS_DIR]/collect-view + [APPS_DIR]/powertracker + + My simulation + 123456 + 1000000 + + org.contikios.cooja.radiomediums.UDGM + 50.0 + 100.0 + 1.0 + 1.0 + + + 40000 + + + org.contikios.cooja.mspmote.Exp5438MoteType + exp5438#1 + Sender + [CONTIKI_DIR]/regression-tests/11-ipv6/code/sender/udp-sender.c + make clean TARGET=exp5438 +make udp-sender.exp5438 DEFINES=NETSTACK_CONF_RDC=nullrdc_driver,SIZE=500,BUFSIZE=600 TARGET=exp5438 + [CONTIKI_DIR]/regression-tests/11-ipv6/code/sender/udp-sender.exp5438 + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.interfaces.IPAddress + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + org.contikios.cooja.mspmote.interfaces.MspClock + org.contikios.cooja.mspmote.interfaces.MspMoteID + org.contikios.cooja.mspmote.interfaces.Msp802154Radio + org.contikios.cooja.mspmote.interfaces.UsciA1Serial + org.contikios.cooja.mspmote.interfaces.Exp5438LED + org.contikios.cooja.mspmote.interfaces.MspDebugOutput + + + org.contikios.cooja.mspmote.Exp5438MoteType + exp5438#2 + Receiver + [CONTIKI_DIR]/regression-tests/11-ipv6/code/receiver/udp-receiver.c + make clean TARGET=exp5438 +make udp-receiver.exp5438 DEFINES=NETSTACK_CONF_RDC=nullrdc_driver TARGET=exp5438 + [CONTIKI_DIR]/regression-tests/11-ipv6/code/receiver/udp-receiver.exp5438 + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.interfaces.IPAddress + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + org.contikios.cooja.mspmote.interfaces.MspClock + org.contikios.cooja.mspmote.interfaces.MspMoteID + org.contikios.cooja.mspmote.interfaces.Msp802154Radio + org.contikios.cooja.mspmote.interfaces.UsciA1Serial + org.contikios.cooja.mspmote.interfaces.Exp5438LED + org.contikios.cooja.mspmote.interfaces.MspDebugOutput + + + + + org.contikios.cooja.interfaces.Position + 40.305234290431166 + 41.884881003965305 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 1 + + exp5438#1 + + + + + org.contikios.cooja.interfaces.Position + 65.38552901873047 + 40.93246474846026 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 2 + + exp5438#2 + + + + org.contikios.cooja.plugins.SimControl + 280 + 0 + 160 + 400 + 0 + + + org.contikios.cooja.plugins.Visualizer + + org.contikios.cooja.plugins.skins.IDVisualizerSkin + org.contikios.cooja.plugins.skins.UDGMVisualizerSkin + 6.299766478490424 0.0 0.0 6.299766478490424 -160.913563890561 -119.86496930434095 + + 400 + 2 + 400 + 1 + 1 + + + org.contikios.cooja.plugins.LogListener + + + + + + 1200 + 5 + 240 + 400 + 160 + + + org.contikios.cooja.plugins.TimeLine + + 0 + 1 + + + + 500.0 + + 1600 + 4 + 166 + 0 + 539 + + + org.contikios.cooja.plugins.Notes + + Enter notes here + true + + 920 + 3 + 160 + 680 + 0 + + + org.contikios.cooja.plugins.ScriptRunner + + [CONTIKI_DIR]/regression-tests/11-ipv6/fragmentation-should-receive-none.js + true + + 618 + 1 + 399 + 645 + 128 + + + diff --git a/regression-tests/11-ipv6/08-exp5438-udp-fragmentation-contikimac-too-large-sender.csc b/regression-tests/11-ipv6/08-exp5438-udp-fragmentation-contikimac-too-large-sender.csc index e9b559d90..7e5dbd34c 100644 --- a/regression-tests/11-ipv6/08-exp5438-udp-fragmentation-contikimac-too-large-sender.csc +++ b/regression-tests/11-ipv6/08-exp5438-udp-fragmentation-contikimac-too-large-sender.csc @@ -1,167 +1,167 @@ - - - [APPS_DIR]/mrm - [APPS_DIR]/mspsim - [APPS_DIR]/avrora - [APPS_DIR]/serial_socket - [APPS_DIR]/collect-view - [APPS_DIR]/powertracker - - My simulation - 123456 - 1000000 - - org.contikios.cooja.radiomediums.UDGM - 50.0 - 100.0 - 1.0 - 1.0 - - - 40000 - - - org.contikios.cooja.mspmote.Exp5438MoteType - exp5438#1 - Sender - [CONTIKI_DIR]/regression-tests/11-ipv6/code/sender/udp-sender.c - make clean TARGET=exp5438 -make udp-sender.exp5438 DEFINES=NETSTACK_CONF_RDC=contikimac_driver,SIZE=500,BUFSIZE=200 TARGET=exp5438 - [CONTIKI_DIR]/regression-tests/11-ipv6/code/sender/udp-sender.exp5438 - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.interfaces.IPAddress - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - org.contikios.cooja.mspmote.interfaces.MspClock - org.contikios.cooja.mspmote.interfaces.MspMoteID - org.contikios.cooja.mspmote.interfaces.Msp802154Radio - org.contikios.cooja.mspmote.interfaces.UsciA1Serial - org.contikios.cooja.mspmote.interfaces.Exp5438LED - org.contikios.cooja.mspmote.interfaces.MspDebugOutput - - - org.contikios.cooja.mspmote.Exp5438MoteType - exp5438#2 - Receiver - [CONTIKI_DIR]/regression-tests/11-ipv6/code/receiver/udp-receiver.c - make clean TARGET=exp5438 -make udp-receiver.exp5438 DEFINES=NETSTACK_CONF_RDC=contikimac_driver TARGET=exp5438 - [CONTIKI_DIR]/regression-tests/11-ipv6/code/receiver/udp-receiver.exp5438 - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.interfaces.IPAddress - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - org.contikios.cooja.mspmote.interfaces.MspClock - org.contikios.cooja.mspmote.interfaces.MspMoteID - org.contikios.cooja.mspmote.interfaces.Msp802154Radio - org.contikios.cooja.mspmote.interfaces.UsciA1Serial - org.contikios.cooja.mspmote.interfaces.Exp5438LED - org.contikios.cooja.mspmote.interfaces.MspDebugOutput - - - - - org.contikios.cooja.interfaces.Position - 40.305234290431166 - 41.884881003965305 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 1 - - exp5438#1 - - - - - org.contikios.cooja.interfaces.Position - 65.38552901873047 - 40.93246474846026 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 2 - - exp5438#2 - - - - org.contikios.cooja.plugins.SimControl - 280 - 0 - 160 - 400 - 0 - - - org.contikios.cooja.plugins.Visualizer - - org.contikios.cooja.plugins.skins.IDVisualizerSkin - org.contikios.cooja.plugins.skins.UDGMVisualizerSkin - 6.299766478490424 0.0 0.0 6.299766478490424 -160.913563890561 -119.86496930434095 - - 400 - 2 - 400 - 1 - 1 - - - org.contikios.cooja.plugins.LogListener - - - - - - 1200 - 5 - 240 - 400 - 160 - - - org.contikios.cooja.plugins.TimeLine - - 0 - 1 - - - - 500.0 - - 1600 - 4 - 166 - 0 - 539 - - - org.contikios.cooja.plugins.Notes - - Enter notes here - true - - 920 - 3 - 160 - 680 - 0 - - - org.contikios.cooja.plugins.ScriptRunner - - [CONTIKI_DIR]/regression-tests/11-ipv6/fragmentation-should-receive-none.js - true - - 618 - 1 - 399 - 645 - 128 - - - + + + [APPS_DIR]/mrm + [APPS_DIR]/mspsim + [APPS_DIR]/avrora + [APPS_DIR]/serial_socket + [APPS_DIR]/collect-view + [APPS_DIR]/powertracker + + My simulation + 123456 + 1000000 + + org.contikios.cooja.radiomediums.UDGM + 50.0 + 100.0 + 1.0 + 1.0 + + + 40000 + + + org.contikios.cooja.mspmote.Exp5438MoteType + exp5438#1 + Sender + [CONTIKI_DIR]/regression-tests/11-ipv6/code/sender/udp-sender.c + make clean TARGET=exp5438 +make udp-sender.exp5438 DEFINES=NETSTACK_CONF_RDC=contikimac_driver,SIZE=500,BUFSIZE=200 TARGET=exp5438 + [CONTIKI_DIR]/regression-tests/11-ipv6/code/sender/udp-sender.exp5438 + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.interfaces.IPAddress + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + org.contikios.cooja.mspmote.interfaces.MspClock + org.contikios.cooja.mspmote.interfaces.MspMoteID + org.contikios.cooja.mspmote.interfaces.Msp802154Radio + org.contikios.cooja.mspmote.interfaces.UsciA1Serial + org.contikios.cooja.mspmote.interfaces.Exp5438LED + org.contikios.cooja.mspmote.interfaces.MspDebugOutput + + + org.contikios.cooja.mspmote.Exp5438MoteType + exp5438#2 + Receiver + [CONTIKI_DIR]/regression-tests/11-ipv6/code/receiver/udp-receiver.c + make clean TARGET=exp5438 +make udp-receiver.exp5438 DEFINES=NETSTACK_CONF_RDC=contikimac_driver TARGET=exp5438 + [CONTIKI_DIR]/regression-tests/11-ipv6/code/receiver/udp-receiver.exp5438 + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.interfaces.IPAddress + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + org.contikios.cooja.mspmote.interfaces.MspClock + org.contikios.cooja.mspmote.interfaces.MspMoteID + org.contikios.cooja.mspmote.interfaces.Msp802154Radio + org.contikios.cooja.mspmote.interfaces.UsciA1Serial + org.contikios.cooja.mspmote.interfaces.Exp5438LED + org.contikios.cooja.mspmote.interfaces.MspDebugOutput + + + + + org.contikios.cooja.interfaces.Position + 40.305234290431166 + 41.884881003965305 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 1 + + exp5438#1 + + + + + org.contikios.cooja.interfaces.Position + 65.38552901873047 + 40.93246474846026 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 2 + + exp5438#2 + + + + org.contikios.cooja.plugins.SimControl + 280 + 0 + 160 + 400 + 0 + + + org.contikios.cooja.plugins.Visualizer + + org.contikios.cooja.plugins.skins.IDVisualizerSkin + org.contikios.cooja.plugins.skins.UDGMVisualizerSkin + 6.299766478490424 0.0 0.0 6.299766478490424 -160.913563890561 -119.86496930434095 + + 400 + 2 + 400 + 1 + 1 + + + org.contikios.cooja.plugins.LogListener + + + + + + 1200 + 5 + 240 + 400 + 160 + + + org.contikios.cooja.plugins.TimeLine + + 0 + 1 + + + + 500.0 + + 1600 + 4 + 166 + 0 + 539 + + + org.contikios.cooja.plugins.Notes + + Enter notes here + true + + 920 + 3 + 160 + 680 + 0 + + + org.contikios.cooja.plugins.ScriptRunner + + [CONTIKI_DIR]/regression-tests/11-ipv6/fragmentation-should-receive-none.js + true + + 618 + 1 + 399 + 645 + 128 + + + diff --git a/regression-tests/11-ipv6/09-exp5438-udp-fragmentation-nullrdc-too-large-sender.csc b/regression-tests/11-ipv6/09-exp5438-udp-fragmentation-nullrdc-too-large-sender.csc index 88b57e8ab..61a8799ee 100644 --- a/regression-tests/11-ipv6/09-exp5438-udp-fragmentation-nullrdc-too-large-sender.csc +++ b/regression-tests/11-ipv6/09-exp5438-udp-fragmentation-nullrdc-too-large-sender.csc @@ -1,165 +1,165 @@ - - - [APPS_DIR]/mrm - [APPS_DIR]/mspsim - [APPS_DIR]/avrora - [APPS_DIR]/serial_socket - [APPS_DIR]/collect-view - [APPS_DIR]/powertracker - - My simulation - 123456 - 1000000 - - org.contikios.cooja.radiomediums.UDGM - 50.0 - 100.0 - 1.0 - 1.0 - - - 40000 - - - org.contikios.cooja.mspmote.Exp5438MoteType - exp5438#1 - Sender - [CONTIKI_DIR]/regression-tests/11-ipv6/code/sender/udp-sender.c - make clean TARGET=exp5438 -make udp-sender.exp5438 DEFINES=NETSTACK_CONF_RDC=nullrdc_driver,SIZE=500,BUFSIZE=200 TARGET=exp5438 - [CONTIKI_DIR]/regression-tests/11-ipv6/code/sender/udp-sender.exp5438 - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.interfaces.IPAddress - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - org.contikios.cooja.mspmote.interfaces.MspClock - org.contikios.cooja.mspmote.interfaces.MspMoteID - org.contikios.cooja.mspmote.interfaces.Msp802154Radio - org.contikios.cooja.mspmote.interfaces.UsciA1Serial - org.contikios.cooja.mspmote.interfaces.Exp5438LED - org.contikios.cooja.mspmote.interfaces.MspDebugOutput - - - org.contikios.cooja.mspmote.Exp5438MoteType - exp5438#2 - Receiver - [CONTIKI_DIR]/regression-tests/11-ipv6/code/receiver/udp-receiver.c - make clean TARGET=exp5438 -make udp-receiver.exp5438 DEFINES=NETSTACK_CONF_RDC=nullrdc_driver TARGET=exp5438 - [CONTIKI_DIR]/regression-tests/11-ipv6/code/receiver/udp-receiver.exp5438 - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.interfaces.IPAddress - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - org.contikios.cooja.mspmote.interfaces.MspClock - org.contikios.cooja.mspmote.interfaces.MspMoteID - org.contikios.cooja.mspmote.interfaces.Msp802154Radio - org.contikios.cooja.mspmote.interfaces.UsciA1Serial - org.contikios.cooja.mspmote.interfaces.Exp5438LED - org.contikios.cooja.mspmote.interfaces.MspDebugOutput - - - - - org.contikios.cooja.interfaces.Position - 40.305234290431166 - 41.884881003965305 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 1 - - exp5438#1 - - - - - org.contikios.cooja.interfaces.Position - 65.38552901873047 - 40.93246474846026 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 2 - - exp5438#2 - - - - org.contikios.cooja.plugins.SimControl - 280 - 0 - 160 - 400 - 0 - - - org.contikios.cooja.plugins.Visualizer - - org.contikios.cooja.plugins.skins.IDVisualizerSkin - org.contikios.cooja.plugins.skins.UDGMVisualizerSkin - 6.299766478490424 0.0 0.0 6.299766478490424 -160.913563890561 -119.86496930434095 - - 400 - 2 - 400 - 1 - 1 - - - org.contikios.cooja.plugins.LogListener - - - - - 1200 - 5 - 240 - 400 - 160 - - - org.contikios.cooja.plugins.TimeLine - - 0 - 1 - - - - 500.0 - - 1600 - 4 - 166 - 0 - 539 - - - org.contikios.cooja.plugins.Notes - - Enter notes here - true - - 920 - 3 - 160 - 680 - 0 - - - org.contikios.cooja.plugins.ScriptRunner - - [CONFIG_DIR]/fragmentation-should-receive-none.js true - - 618 - 1 - 399 - 645 - 128 - - - + + + [APPS_DIR]/mrm + [APPS_DIR]/mspsim + [APPS_DIR]/avrora + [APPS_DIR]/serial_socket + [APPS_DIR]/collect-view + [APPS_DIR]/powertracker + + My simulation + 123456 + 1000000 + + org.contikios.cooja.radiomediums.UDGM + 50.0 + 100.0 + 1.0 + 1.0 + + + 40000 + + + org.contikios.cooja.mspmote.Exp5438MoteType + exp5438#1 + Sender + [CONTIKI_DIR]/regression-tests/11-ipv6/code/sender/udp-sender.c + make clean TARGET=exp5438 +make udp-sender.exp5438 DEFINES=NETSTACK_CONF_RDC=nullrdc_driver,SIZE=500,BUFSIZE=200 TARGET=exp5438 + [CONTIKI_DIR]/regression-tests/11-ipv6/code/sender/udp-sender.exp5438 + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.interfaces.IPAddress + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + org.contikios.cooja.mspmote.interfaces.MspClock + org.contikios.cooja.mspmote.interfaces.MspMoteID + org.contikios.cooja.mspmote.interfaces.Msp802154Radio + org.contikios.cooja.mspmote.interfaces.UsciA1Serial + org.contikios.cooja.mspmote.interfaces.Exp5438LED + org.contikios.cooja.mspmote.interfaces.MspDebugOutput + + + org.contikios.cooja.mspmote.Exp5438MoteType + exp5438#2 + Receiver + [CONTIKI_DIR]/regression-tests/11-ipv6/code/receiver/udp-receiver.c + make clean TARGET=exp5438 +make udp-receiver.exp5438 DEFINES=NETSTACK_CONF_RDC=nullrdc_driver TARGET=exp5438 + [CONTIKI_DIR]/regression-tests/11-ipv6/code/receiver/udp-receiver.exp5438 + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.interfaces.IPAddress + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + org.contikios.cooja.mspmote.interfaces.MspClock + org.contikios.cooja.mspmote.interfaces.MspMoteID + org.contikios.cooja.mspmote.interfaces.Msp802154Radio + org.contikios.cooja.mspmote.interfaces.UsciA1Serial + org.contikios.cooja.mspmote.interfaces.Exp5438LED + org.contikios.cooja.mspmote.interfaces.MspDebugOutput + + + + + org.contikios.cooja.interfaces.Position + 40.305234290431166 + 41.884881003965305 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 1 + + exp5438#1 + + + + + org.contikios.cooja.interfaces.Position + 65.38552901873047 + 40.93246474846026 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 2 + + exp5438#2 + + + + org.contikios.cooja.plugins.SimControl + 280 + 0 + 160 + 400 + 0 + + + org.contikios.cooja.plugins.Visualizer + + org.contikios.cooja.plugins.skins.IDVisualizerSkin + org.contikios.cooja.plugins.skins.UDGMVisualizerSkin + 6.299766478490424 0.0 0.0 6.299766478490424 -160.913563890561 -119.86496930434095 + + 400 + 2 + 400 + 1 + 1 + + + org.contikios.cooja.plugins.LogListener + + + + + 1200 + 5 + 240 + 400 + 160 + + + org.contikios.cooja.plugins.TimeLine + + 0 + 1 + + + + 500.0 + + 1600 + 4 + 166 + 0 + 539 + + + org.contikios.cooja.plugins.Notes + + Enter notes here + true + + 920 + 3 + 160 + 680 + 0 + + + org.contikios.cooja.plugins.ScriptRunner + + [CONFIG_DIR]/fragmentation-should-receive-none.js true + + 618 + 1 + 399 + 645 + 128 + + + diff --git a/regression-tests/11-ipv6/11-exp5438-unicast-fragmentation-nullrdc.csc b/regression-tests/11-ipv6/11-exp5438-unicast-fragmentation-nullrdc.csc index 6853e8bfe..3c7160386 100644 --- a/regression-tests/11-ipv6/11-exp5438-unicast-fragmentation-nullrdc.csc +++ b/regression-tests/11-ipv6/11-exp5438-unicast-fragmentation-nullrdc.csc @@ -1,166 +1,166 @@ - - - [APPS_DIR]/mrm - [APPS_DIR]/mspsim - [APPS_DIR]/avrora - [APPS_DIR]/serial_socket - [APPS_DIR]/collect-view - [APPS_DIR]/powertracker - - My simulation - 123456 - 1000000 - - org.contikios.cooja.radiomediums.UDGM - 50.0 - 100.0 - 1.0 - 1.0 - - - 40000 - - - org.contikios.cooja.mspmote.Exp5438MoteType - exp5438#1 - Sender - [CONTIKI_DIR]/regression-tests/11-ipv6/code/sender/unicast-sender.c - make clean TARGET=exp5438 -make unicast-sender.exp5438 DEFINES=NETSTACK_CONF_RDC=nullrdc_driver,SIZE=400,BUFSIZE=500 TARGET=exp5438 - [CONTIKI_DIR]/regression-tests/11-ipv6/code/sender/unicast-sender.exp5438 - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.interfaces.IPAddress - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - org.contikios.cooja.mspmote.interfaces.MspClock - org.contikios.cooja.mspmote.interfaces.MspMoteID - org.contikios.cooja.mspmote.interfaces.Msp802154Radio - org.contikios.cooja.mspmote.interfaces.UsciA1Serial - org.contikios.cooja.mspmote.interfaces.Exp5438LED - org.contikios.cooja.mspmote.interfaces.MspDebugOutput - - - org.contikios.cooja.mspmote.Exp5438MoteType - exp5438#2 - Receiver - [CONTIKI_DIR]/regression-tests/11-ipv6/code/receiver/udp-receiver.c - make clean TARGET=exp5438 -make udp-receiver.exp5438 DEFINES=NETSTACK_CONF_RDC=nullrdc_driver,SIZE=400,BUFSIZE=500 TARGET=exp5438 - [CONTIKI_DIR]/regression-tests/11-ipv6/code/receiver/udp-receiver.exp5438 - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.interfaces.IPAddress - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - org.contikios.cooja.mspmote.interfaces.MspClock - org.contikios.cooja.mspmote.interfaces.MspMoteID - org.contikios.cooja.mspmote.interfaces.Msp802154Radio - org.contikios.cooja.mspmote.interfaces.UsciA1Serial - org.contikios.cooja.mspmote.interfaces.Exp5438LED - org.contikios.cooja.mspmote.interfaces.MspDebugOutput - - - - - org.contikios.cooja.interfaces.Position - 40.305234290431166 - 41.884881003965305 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 1 - - exp5438#1 - - - - - org.contikios.cooja.interfaces.Position - 65.38552901873047 - 40.93246474846026 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 2 - - exp5438#2 - - - - org.contikios.cooja.plugins.SimControl - 280 - 0 - 160 - 400 - 0 - - - org.contikios.cooja.plugins.Visualizer - - org.contikios.cooja.plugins.skins.IDVisualizerSkin - org.contikios.cooja.plugins.skins.UDGMVisualizerSkin - 6.299766478490424 0.0 0.0 6.299766478490424 -160.913563890561 -119.86496930434095 - - 400 - 2 - 400 - 1 - 1 - - - org.contikios.cooja.plugins.LogListener - - - - - 1200 - 5 - 240 - 400 - 160 - - - org.contikios.cooja.plugins.TimeLine - - 0 - 1 - - - - 500.0 - - 1600 - 4 - 166 - 0 - 539 - - - org.contikios.cooja.plugins.Notes - - Enter notes here - true - - 920 - 3 - 160 - 680 - 0 - - - org.contikios.cooja.plugins.ScriptRunner - - [CONFIG_DIR]/fragmentation-should-receive-all.js - true - - 618 - 1 - 399 - 645 - 128 - - - + + + [APPS_DIR]/mrm + [APPS_DIR]/mspsim + [APPS_DIR]/avrora + [APPS_DIR]/serial_socket + [APPS_DIR]/collect-view + [APPS_DIR]/powertracker + + My simulation + 123456 + 1000000 + + org.contikios.cooja.radiomediums.UDGM + 50.0 + 100.0 + 1.0 + 1.0 + + + 40000 + + + org.contikios.cooja.mspmote.Exp5438MoteType + exp5438#1 + Sender + [CONTIKI_DIR]/regression-tests/11-ipv6/code/sender/unicast-sender.c + make clean TARGET=exp5438 +make unicast-sender.exp5438 DEFINES=NETSTACK_CONF_RDC=nullrdc_driver,SIZE=400,BUFSIZE=500 TARGET=exp5438 + [CONTIKI_DIR]/regression-tests/11-ipv6/code/sender/unicast-sender.exp5438 + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.interfaces.IPAddress + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + org.contikios.cooja.mspmote.interfaces.MspClock + org.contikios.cooja.mspmote.interfaces.MspMoteID + org.contikios.cooja.mspmote.interfaces.Msp802154Radio + org.contikios.cooja.mspmote.interfaces.UsciA1Serial + org.contikios.cooja.mspmote.interfaces.Exp5438LED + org.contikios.cooja.mspmote.interfaces.MspDebugOutput + + + org.contikios.cooja.mspmote.Exp5438MoteType + exp5438#2 + Receiver + [CONTIKI_DIR]/regression-tests/11-ipv6/code/receiver/udp-receiver.c + make clean TARGET=exp5438 +make udp-receiver.exp5438 DEFINES=NETSTACK_CONF_RDC=nullrdc_driver,SIZE=400,BUFSIZE=500 TARGET=exp5438 + [CONTIKI_DIR]/regression-tests/11-ipv6/code/receiver/udp-receiver.exp5438 + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.interfaces.IPAddress + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + org.contikios.cooja.mspmote.interfaces.MspClock + org.contikios.cooja.mspmote.interfaces.MspMoteID + org.contikios.cooja.mspmote.interfaces.Msp802154Radio + org.contikios.cooja.mspmote.interfaces.UsciA1Serial + org.contikios.cooja.mspmote.interfaces.Exp5438LED + org.contikios.cooja.mspmote.interfaces.MspDebugOutput + + + + + org.contikios.cooja.interfaces.Position + 40.305234290431166 + 41.884881003965305 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 1 + + exp5438#1 + + + + + org.contikios.cooja.interfaces.Position + 65.38552901873047 + 40.93246474846026 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 2 + + exp5438#2 + + + + org.contikios.cooja.plugins.SimControl + 280 + 0 + 160 + 400 + 0 + + + org.contikios.cooja.plugins.Visualizer + + org.contikios.cooja.plugins.skins.IDVisualizerSkin + org.contikios.cooja.plugins.skins.UDGMVisualizerSkin + 6.299766478490424 0.0 0.0 6.299766478490424 -160.913563890561 -119.86496930434095 + + 400 + 2 + 400 + 1 + 1 + + + org.contikios.cooja.plugins.LogListener + + + + + 1200 + 5 + 240 + 400 + 160 + + + org.contikios.cooja.plugins.TimeLine + + 0 + 1 + + + + 500.0 + + 1600 + 4 + 166 + 0 + 539 + + + org.contikios.cooja.plugins.Notes + + Enter notes here + true + + 920 + 3 + 160 + 680 + 0 + + + org.contikios.cooja.plugins.ScriptRunner + + [CONFIG_DIR]/fragmentation-should-receive-all.js + true + + 618 + 1 + 399 + 645 + 128 + + + diff --git a/regression-tests/11-ipv6/12-exp5438-unicast-fragmentation-contikimac-large-sender.csc b/regression-tests/11-ipv6/12-exp5438-unicast-fragmentation-contikimac-large-sender.csc index e880804b7..5b7c2bb93 100644 --- a/regression-tests/11-ipv6/12-exp5438-unicast-fragmentation-contikimac-large-sender.csc +++ b/regression-tests/11-ipv6/12-exp5438-unicast-fragmentation-contikimac-large-sender.csc @@ -1,165 +1,165 @@ - - - [APPS_DIR]/mrm - [APPS_DIR]/mspsim - [APPS_DIR]/avrora - [APPS_DIR]/serial_socket - [APPS_DIR]/collect-view - [APPS_DIR]/powertracker - - My simulation - 123456 - 1000000 - - org.contikios.cooja.radiomediums.UDGM - 50.0 - 100.0 - 1.0 - 1.0 - - - 40000 - - - org.contikios.cooja.mspmote.Exp5438MoteType - exp5438#1 - Sender - [CONTIKI_DIR]/regression-tests/11-ipv6/code/sender/unicast-sender.c - make clean TARGET=exp5438 -make unicast-sender.exp5438 DEFINES=NETSTACK_CONF_RDC=contikimac_driver,SIZE=500,BUFSIZE=600 TARGET=exp5438 - [CONTIKI_DIR]/regression-tests/11-ipv6/code/sender/unicast-sender.exp5438 - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.interfaces.IPAddress - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - org.contikios.cooja.mspmote.interfaces.MspClock - org.contikios.cooja.mspmote.interfaces.MspMoteID - org.contikios.cooja.mspmote.interfaces.Msp802154Radio - org.contikios.cooja.mspmote.interfaces.UsciA1Serial - org.contikios.cooja.mspmote.interfaces.Exp5438LED - org.contikios.cooja.mspmote.interfaces.MspDebugOutput - - - org.contikios.cooja.mspmote.Exp5438MoteType - exp5438#2 - Receiver - [CONTIKI_DIR]/regression-tests/11-ipv6/code/receiver/udp-receiver.c - make clean TARGET=exp5438 -make udp-receiver.exp5438 DEFINES=NETSTACK_CONF_RDC=contikimac_driver TARGET=exp5438 - [CONTIKI_DIR]/regression-tests/11-ipv6/code/receiver/udp-receiver.exp5438 - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.interfaces.IPAddress - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - org.contikios.cooja.mspmote.interfaces.MspClock - org.contikios.cooja.mspmote.interfaces.MspMoteID - org.contikios.cooja.mspmote.interfaces.Msp802154Radio - org.contikios.cooja.mspmote.interfaces.UsciA1Serial - org.contikios.cooja.mspmote.interfaces.Exp5438LED - org.contikios.cooja.mspmote.interfaces.MspDebugOutput - - - - - org.contikios.cooja.interfaces.Position - 40.305234290431166 - 41.884881003965305 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 1 - - exp5438#1 - - - - - org.contikios.cooja.interfaces.Position - 65.38552901873047 - 40.93246474846026 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 2 - - exp5438#2 - - - - org.contikios.cooja.plugins.SimControl - 280 - 0 - 160 - 400 - 0 - - - org.contikios.cooja.plugins.Visualizer - - org.contikios.cooja.plugins.skins.IDVisualizerSkin - org.contikios.cooja.plugins.skins.UDGMVisualizerSkin - 6.299766478490424 0.0 0.0 6.299766478490424 -160.913563890561 -119.86496930434095 - - 400 - 2 - 400 - 1 - 1 - - - org.contikios.cooja.plugins.LogListener - - - - - 1200 - 5 - 240 - 400 - 160 - - - org.contikios.cooja.plugins.TimeLine - - 0 - 1 - - - - 500.0 - - 1600 - 4 - 166 - 0 - 539 - - - org.contikios.cooja.plugins.Notes - - Enter notes here - true - - 920 - 3 - 160 - 680 - 0 - - - org.contikios.cooja.plugins.ScriptRunner - - [CONFIG_DIR]/fragmentation-should-receive-none.js true - - 618 - 1 - 399 - 645 - 128 - - - + + + [APPS_DIR]/mrm + [APPS_DIR]/mspsim + [APPS_DIR]/avrora + [APPS_DIR]/serial_socket + [APPS_DIR]/collect-view + [APPS_DIR]/powertracker + + My simulation + 123456 + 1000000 + + org.contikios.cooja.radiomediums.UDGM + 50.0 + 100.0 + 1.0 + 1.0 + + + 40000 + + + org.contikios.cooja.mspmote.Exp5438MoteType + exp5438#1 + Sender + [CONTIKI_DIR]/regression-tests/11-ipv6/code/sender/unicast-sender.c + make clean TARGET=exp5438 +make unicast-sender.exp5438 DEFINES=NETSTACK_CONF_RDC=contikimac_driver,SIZE=500,BUFSIZE=600 TARGET=exp5438 + [CONTIKI_DIR]/regression-tests/11-ipv6/code/sender/unicast-sender.exp5438 + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.interfaces.IPAddress + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + org.contikios.cooja.mspmote.interfaces.MspClock + org.contikios.cooja.mspmote.interfaces.MspMoteID + org.contikios.cooja.mspmote.interfaces.Msp802154Radio + org.contikios.cooja.mspmote.interfaces.UsciA1Serial + org.contikios.cooja.mspmote.interfaces.Exp5438LED + org.contikios.cooja.mspmote.interfaces.MspDebugOutput + + + org.contikios.cooja.mspmote.Exp5438MoteType + exp5438#2 + Receiver + [CONTIKI_DIR]/regression-tests/11-ipv6/code/receiver/udp-receiver.c + make clean TARGET=exp5438 +make udp-receiver.exp5438 DEFINES=NETSTACK_CONF_RDC=contikimac_driver TARGET=exp5438 + [CONTIKI_DIR]/regression-tests/11-ipv6/code/receiver/udp-receiver.exp5438 + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.interfaces.IPAddress + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + org.contikios.cooja.mspmote.interfaces.MspClock + org.contikios.cooja.mspmote.interfaces.MspMoteID + org.contikios.cooja.mspmote.interfaces.Msp802154Radio + org.contikios.cooja.mspmote.interfaces.UsciA1Serial + org.contikios.cooja.mspmote.interfaces.Exp5438LED + org.contikios.cooja.mspmote.interfaces.MspDebugOutput + + + + + org.contikios.cooja.interfaces.Position + 40.305234290431166 + 41.884881003965305 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 1 + + exp5438#1 + + + + + org.contikios.cooja.interfaces.Position + 65.38552901873047 + 40.93246474846026 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 2 + + exp5438#2 + + + + org.contikios.cooja.plugins.SimControl + 280 + 0 + 160 + 400 + 0 + + + org.contikios.cooja.plugins.Visualizer + + org.contikios.cooja.plugins.skins.IDVisualizerSkin + org.contikios.cooja.plugins.skins.UDGMVisualizerSkin + 6.299766478490424 0.0 0.0 6.299766478490424 -160.913563890561 -119.86496930434095 + + 400 + 2 + 400 + 1 + 1 + + + org.contikios.cooja.plugins.LogListener + + + + + 1200 + 5 + 240 + 400 + 160 + + + org.contikios.cooja.plugins.TimeLine + + 0 + 1 + + + + 500.0 + + 1600 + 4 + 166 + 0 + 539 + + + org.contikios.cooja.plugins.Notes + + Enter notes here + true + + 920 + 3 + 160 + 680 + 0 + + + org.contikios.cooja.plugins.ScriptRunner + + [CONFIG_DIR]/fragmentation-should-receive-none.js true + + 618 + 1 + 399 + 645 + 128 + + + diff --git a/regression-tests/11-ipv6/13-exp5438-unicast-fragmentation-nullrdc-large-sender.csc b/regression-tests/11-ipv6/13-exp5438-unicast-fragmentation-nullrdc-large-sender.csc index 73ce366b6..74016cd37 100644 --- a/regression-tests/11-ipv6/13-exp5438-unicast-fragmentation-nullrdc-large-sender.csc +++ b/regression-tests/11-ipv6/13-exp5438-unicast-fragmentation-nullrdc-large-sender.csc @@ -1,166 +1,166 @@ - - - [APPS_DIR]/mrm - [APPS_DIR]/mspsim - [APPS_DIR]/avrora - [APPS_DIR]/serial_socket - [APPS_DIR]/collect-view - [APPS_DIR]/powertracker - - My simulation - 123456 - 1000000 - - org.contikios.cooja.radiomediums.UDGM - 50.0 - 100.0 - 1.0 - 1.0 - - - 40000 - - - org.contikios.cooja.mspmote.Exp5438MoteType - exp5438#1 - Sender - [CONTIKI_DIR]/regression-tests/11-ipv6/code/sender/unicast-sender.c - make clean TARGET=exp5438 -make unicast-sender.exp5438 DEFINES=NETSTACK_CONF_RDC=nullrdc_driver,SIZE=500,BUFSIZE=600 TARGET=exp5438 - [CONTIKI_DIR]/regression-tests/11-ipv6/code/sender/unicast-sender.exp5438 - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.interfaces.IPAddress - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - org.contikios.cooja.mspmote.interfaces.MspClock - org.contikios.cooja.mspmote.interfaces.MspMoteID - org.contikios.cooja.mspmote.interfaces.Msp802154Radio - org.contikios.cooja.mspmote.interfaces.UsciA1Serial - org.contikios.cooja.mspmote.interfaces.Exp5438LED - org.contikios.cooja.mspmote.interfaces.MspDebugOutput - - - org.contikios.cooja.mspmote.Exp5438MoteType - exp5438#2 - Receiver - [CONTIKI_DIR]/regression-tests/11-ipv6/code/receiver/udp-receiver.c - make clean TARGET=exp5438 -make udp-receiver.exp5438 DEFINES=NETSTACK_CONF_RDC=nullrdc_driver TARGET=exp5438 - [CONTIKI_DIR]/regression-tests/11-ipv6/code/receiver/udp-receiver.exp5438 - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.interfaces.IPAddress - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - org.contikios.cooja.mspmote.interfaces.MspClock - org.contikios.cooja.mspmote.interfaces.MspMoteID - org.contikios.cooja.mspmote.interfaces.Msp802154Radio - org.contikios.cooja.mspmote.interfaces.UsciA1Serial - org.contikios.cooja.mspmote.interfaces.Exp5438LED - org.contikios.cooja.mspmote.interfaces.MspDebugOutput - - - - - org.contikios.cooja.interfaces.Position - 40.305234290431166 - 41.884881003965305 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 1 - - exp5438#1 - - - - - org.contikios.cooja.interfaces.Position - 65.38552901873047 - 40.93246474846026 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 2 - - exp5438#2 - - - - org.contikios.cooja.plugins.SimControl - 280 - 0 - 160 - 400 - 0 - - - org.contikios.cooja.plugins.Visualizer - - org.contikios.cooja.plugins.skins.IDVisualizerSkin - org.contikios.cooja.plugins.skins.UDGMVisualizerSkin - 6.299766478490424 0.0 0.0 6.299766478490424 -160.913563890561 -119.86496930434095 - - 400 - 2 - 400 - 1 - 1 - - - org.contikios.cooja.plugins.LogListener - - - - - 1200 - 5 - 240 - 400 - 160 - - - org.contikios.cooja.plugins.TimeLine - - 0 - 1 - - - - 500.0 - - 1600 - 4 - 166 - 0 - 539 - - - org.contikios.cooja.plugins.Notes - - Enter notes here - true - - 920 - 3 - 160 - 680 - 0 - - - org.contikios.cooja.plugins.ScriptRunner - - [CONFIG_DIR]/fragmentation-should-receive-none.js - true - - 618 - 1 - 399 - 645 - 128 - - - + + + [APPS_DIR]/mrm + [APPS_DIR]/mspsim + [APPS_DIR]/avrora + [APPS_DIR]/serial_socket + [APPS_DIR]/collect-view + [APPS_DIR]/powertracker + + My simulation + 123456 + 1000000 + + org.contikios.cooja.radiomediums.UDGM + 50.0 + 100.0 + 1.0 + 1.0 + + + 40000 + + + org.contikios.cooja.mspmote.Exp5438MoteType + exp5438#1 + Sender + [CONTIKI_DIR]/regression-tests/11-ipv6/code/sender/unicast-sender.c + make clean TARGET=exp5438 +make unicast-sender.exp5438 DEFINES=NETSTACK_CONF_RDC=nullrdc_driver,SIZE=500,BUFSIZE=600 TARGET=exp5438 + [CONTIKI_DIR]/regression-tests/11-ipv6/code/sender/unicast-sender.exp5438 + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.interfaces.IPAddress + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + org.contikios.cooja.mspmote.interfaces.MspClock + org.contikios.cooja.mspmote.interfaces.MspMoteID + org.contikios.cooja.mspmote.interfaces.Msp802154Radio + org.contikios.cooja.mspmote.interfaces.UsciA1Serial + org.contikios.cooja.mspmote.interfaces.Exp5438LED + org.contikios.cooja.mspmote.interfaces.MspDebugOutput + + + org.contikios.cooja.mspmote.Exp5438MoteType + exp5438#2 + Receiver + [CONTIKI_DIR]/regression-tests/11-ipv6/code/receiver/udp-receiver.c + make clean TARGET=exp5438 +make udp-receiver.exp5438 DEFINES=NETSTACK_CONF_RDC=nullrdc_driver TARGET=exp5438 + [CONTIKI_DIR]/regression-tests/11-ipv6/code/receiver/udp-receiver.exp5438 + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.interfaces.IPAddress + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + org.contikios.cooja.mspmote.interfaces.MspClock + org.contikios.cooja.mspmote.interfaces.MspMoteID + org.contikios.cooja.mspmote.interfaces.Msp802154Radio + org.contikios.cooja.mspmote.interfaces.UsciA1Serial + org.contikios.cooja.mspmote.interfaces.Exp5438LED + org.contikios.cooja.mspmote.interfaces.MspDebugOutput + + + + + org.contikios.cooja.interfaces.Position + 40.305234290431166 + 41.884881003965305 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 1 + + exp5438#1 + + + + + org.contikios.cooja.interfaces.Position + 65.38552901873047 + 40.93246474846026 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 2 + + exp5438#2 + + + + org.contikios.cooja.plugins.SimControl + 280 + 0 + 160 + 400 + 0 + + + org.contikios.cooja.plugins.Visualizer + + org.contikios.cooja.plugins.skins.IDVisualizerSkin + org.contikios.cooja.plugins.skins.UDGMVisualizerSkin + 6.299766478490424 0.0 0.0 6.299766478490424 -160.913563890561 -119.86496930434095 + + 400 + 2 + 400 + 1 + 1 + + + org.contikios.cooja.plugins.LogListener + + + + + 1200 + 5 + 240 + 400 + 160 + + + org.contikios.cooja.plugins.TimeLine + + 0 + 1 + + + + 500.0 + + 1600 + 4 + 166 + 0 + 539 + + + org.contikios.cooja.plugins.Notes + + Enter notes here + true + + 920 + 3 + 160 + 680 + 0 + + + org.contikios.cooja.plugins.ScriptRunner + + [CONFIG_DIR]/fragmentation-should-receive-none.js + true + + 618 + 1 + 399 + 645 + 128 + + + diff --git a/regression-tests/11-ipv6/14-exp5438-unicast-fragmentation-contikimac-too-large-sender.csc b/regression-tests/11-ipv6/14-exp5438-unicast-fragmentation-contikimac-too-large-sender.csc index 3273dbfe1..35fc4e943 100644 --- a/regression-tests/11-ipv6/14-exp5438-unicast-fragmentation-contikimac-too-large-sender.csc +++ b/regression-tests/11-ipv6/14-exp5438-unicast-fragmentation-contikimac-too-large-sender.csc @@ -1,166 +1,166 @@ - - - [APPS_DIR]/mrm - [APPS_DIR]/mspsim - [APPS_DIR]/avrora - [APPS_DIR]/serial_socket - [APPS_DIR]/collect-view - [APPS_DIR]/powertracker - - My simulation - 123456 - 1000000 - - org.contikios.cooja.radiomediums.UDGM - 50.0 - 100.0 - 1.0 - 1.0 - - - 40000 - - - org.contikios.cooja.mspmote.Exp5438MoteType - exp5438#1 - Sender - [CONTIKI_DIR]/regression-tests/11-ipv6/code/sender/unicast-sender.c - make clean TARGET=exp5438 -make unicast-sender.exp5438 DEFINES=NETSTACK_CONF_RDC=contikimac_driver,SIZE=500,BUFSIZE=200 TARGET=exp5438 - [CONTIKI_DIR]/regression-tests/11-ipv6/code/sender/unicast-sender.exp5438 - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.interfaces.IPAddress - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - org.contikios.cooja.mspmote.interfaces.MspClock - org.contikios.cooja.mspmote.interfaces.MspMoteID - org.contikios.cooja.mspmote.interfaces.Msp802154Radio - org.contikios.cooja.mspmote.interfaces.UsciA1Serial - org.contikios.cooja.mspmote.interfaces.Exp5438LED - org.contikios.cooja.mspmote.interfaces.MspDebugOutput - - - org.contikios.cooja.mspmote.Exp5438MoteType - exp5438#2 - Receiver - [CONTIKI_DIR]/regression-tests/11-ipv6/code/receiver/udp-receiver.c - make clean TARGET=exp5438 -make udp-receiver.exp5438 DEFINES=NETSTACK_CONF_RDC=contikimac_driver TARGET=exp5438 - [CONTIKI_DIR]/regression-tests/11-ipv6/code/receiver/udp-receiver.exp5438 - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.interfaces.IPAddress - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - org.contikios.cooja.mspmote.interfaces.MspClock - org.contikios.cooja.mspmote.interfaces.MspMoteID - org.contikios.cooja.mspmote.interfaces.Msp802154Radio - org.contikios.cooja.mspmote.interfaces.UsciA1Serial - org.contikios.cooja.mspmote.interfaces.Exp5438LED - org.contikios.cooja.mspmote.interfaces.MspDebugOutput - - - - - org.contikios.cooja.interfaces.Position - 40.305234290431166 - 41.884881003965305 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 1 - - exp5438#1 - - - - - org.contikios.cooja.interfaces.Position - 65.38552901873047 - 40.93246474846026 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 2 - - exp5438#2 - - - - org.contikios.cooja.plugins.SimControl - 280 - 0 - 160 - 400 - 0 - - - org.contikios.cooja.plugins.Visualizer - - org.contikios.cooja.plugins.skins.IDVisualizerSkin - org.contikios.cooja.plugins.skins.UDGMVisualizerSkin - 6.299766478490424 0.0 0.0 6.299766478490424 -160.913563890561 -119.86496930434095 - - 400 - 2 - 400 - 1 - 1 - - - org.contikios.cooja.plugins.LogListener - - - - - 1200 - 5 - 240 - 400 - 160 - - - org.contikios.cooja.plugins.TimeLine - - 0 - 1 - - - - 500.0 - - 1600 - 4 - 166 - 0 - 539 - - - org.contikios.cooja.plugins.Notes - - Enter notes here - true - - 920 - 3 - 160 - 680 - 0 - - - org.contikios.cooja.plugins.ScriptRunner - - [CONFIG_DIR]/fragmentation-should-receive-none.js - true - - 618 - 1 - 399 - 645 - 128 - - - + + + [APPS_DIR]/mrm + [APPS_DIR]/mspsim + [APPS_DIR]/avrora + [APPS_DIR]/serial_socket + [APPS_DIR]/collect-view + [APPS_DIR]/powertracker + + My simulation + 123456 + 1000000 + + org.contikios.cooja.radiomediums.UDGM + 50.0 + 100.0 + 1.0 + 1.0 + + + 40000 + + + org.contikios.cooja.mspmote.Exp5438MoteType + exp5438#1 + Sender + [CONTIKI_DIR]/regression-tests/11-ipv6/code/sender/unicast-sender.c + make clean TARGET=exp5438 +make unicast-sender.exp5438 DEFINES=NETSTACK_CONF_RDC=contikimac_driver,SIZE=500,BUFSIZE=200 TARGET=exp5438 + [CONTIKI_DIR]/regression-tests/11-ipv6/code/sender/unicast-sender.exp5438 + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.interfaces.IPAddress + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + org.contikios.cooja.mspmote.interfaces.MspClock + org.contikios.cooja.mspmote.interfaces.MspMoteID + org.contikios.cooja.mspmote.interfaces.Msp802154Radio + org.contikios.cooja.mspmote.interfaces.UsciA1Serial + org.contikios.cooja.mspmote.interfaces.Exp5438LED + org.contikios.cooja.mspmote.interfaces.MspDebugOutput + + + org.contikios.cooja.mspmote.Exp5438MoteType + exp5438#2 + Receiver + [CONTIKI_DIR]/regression-tests/11-ipv6/code/receiver/udp-receiver.c + make clean TARGET=exp5438 +make udp-receiver.exp5438 DEFINES=NETSTACK_CONF_RDC=contikimac_driver TARGET=exp5438 + [CONTIKI_DIR]/regression-tests/11-ipv6/code/receiver/udp-receiver.exp5438 + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.interfaces.IPAddress + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + org.contikios.cooja.mspmote.interfaces.MspClock + org.contikios.cooja.mspmote.interfaces.MspMoteID + org.contikios.cooja.mspmote.interfaces.Msp802154Radio + org.contikios.cooja.mspmote.interfaces.UsciA1Serial + org.contikios.cooja.mspmote.interfaces.Exp5438LED + org.contikios.cooja.mspmote.interfaces.MspDebugOutput + + + + + org.contikios.cooja.interfaces.Position + 40.305234290431166 + 41.884881003965305 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 1 + + exp5438#1 + + + + + org.contikios.cooja.interfaces.Position + 65.38552901873047 + 40.93246474846026 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 2 + + exp5438#2 + + + + org.contikios.cooja.plugins.SimControl + 280 + 0 + 160 + 400 + 0 + + + org.contikios.cooja.plugins.Visualizer + + org.contikios.cooja.plugins.skins.IDVisualizerSkin + org.contikios.cooja.plugins.skins.UDGMVisualizerSkin + 6.299766478490424 0.0 0.0 6.299766478490424 -160.913563890561 -119.86496930434095 + + 400 + 2 + 400 + 1 + 1 + + + org.contikios.cooja.plugins.LogListener + + + + + 1200 + 5 + 240 + 400 + 160 + + + org.contikios.cooja.plugins.TimeLine + + 0 + 1 + + + + 500.0 + + 1600 + 4 + 166 + 0 + 539 + + + org.contikios.cooja.plugins.Notes + + Enter notes here + true + + 920 + 3 + 160 + 680 + 0 + + + org.contikios.cooja.plugins.ScriptRunner + + [CONFIG_DIR]/fragmentation-should-receive-none.js + true + + 618 + 1 + 399 + 645 + 128 + + + diff --git a/regression-tests/11-ipv6/15-exp5438-unicast-fragmentation-nullrdc-too-large-sender.csc b/regression-tests/11-ipv6/15-exp5438-unicast-fragmentation-nullrdc-too-large-sender.csc index 01cf79619..72fa215d2 100644 --- a/regression-tests/11-ipv6/15-exp5438-unicast-fragmentation-nullrdc-too-large-sender.csc +++ b/regression-tests/11-ipv6/15-exp5438-unicast-fragmentation-nullrdc-too-large-sender.csc @@ -1,165 +1,165 @@ - - - [APPS_DIR]/mrm - [APPS_DIR]/mspsim - [APPS_DIR]/avrora - [APPS_DIR]/serial_socket - [APPS_DIR]/collect-view - [APPS_DIR]/powertracker - - My simulation - 123456 - 1000000 - - org.contikios.cooja.radiomediums.UDGM - 50.0 - 100.0 - 1.0 - 1.0 - - - 40000 - - - org.contikios.cooja.mspmote.Exp5438MoteType - exp5438#1 - Sender - [CONTIKI_DIR]/regression-tests/11-ipv6/code/sender/unicast-sender.c - make clean TARGET=exp5438 -make unicast-sender.exp5438 DEFINES=NETSTACK_CONF_RDC=nullrdc_driver,SIZE=500,BUFSIZE=200 TARGET=exp5438 - [CONTIKI_DIR]/regression-tests/11-ipv6/code/sender/unicast-sender.exp5438 - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.interfaces.IPAddress - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - org.contikios.cooja.mspmote.interfaces.MspClock - org.contikios.cooja.mspmote.interfaces.MspMoteID - org.contikios.cooja.mspmote.interfaces.Msp802154Radio - org.contikios.cooja.mspmote.interfaces.UsciA1Serial - org.contikios.cooja.mspmote.interfaces.Exp5438LED - org.contikios.cooja.mspmote.interfaces.MspDebugOutput - - - org.contikios.cooja.mspmote.Exp5438MoteType - exp5438#2 - Receiver - [CONTIKI_DIR]/regression-tests/11-ipv6/code/receiver/udp-receiver.c - make clean TARGET=exp5438 -make udp-receiver.exp5438 DEFINES=NETSTACK_CONF_RDC=nullrdc_driver TARGET=exp5438 - [CONTIKI_DIR]/regression-tests/11-ipv6/code/receiver/udp-receiver.exp5438 - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.interfaces.IPAddress - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - org.contikios.cooja.mspmote.interfaces.MspClock - org.contikios.cooja.mspmote.interfaces.MspMoteID - org.contikios.cooja.mspmote.interfaces.Msp802154Radio - org.contikios.cooja.mspmote.interfaces.UsciA1Serial - org.contikios.cooja.mspmote.interfaces.Exp5438LED - org.contikios.cooja.mspmote.interfaces.MspDebugOutput - - - - - org.contikios.cooja.interfaces.Position - 40.305234290431166 - 41.884881003965305 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 1 - - exp5438#1 - - - - - org.contikios.cooja.interfaces.Position - 65.38552901873047 - 40.93246474846026 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 2 - - exp5438#2 - - - - org.contikios.cooja.plugins.SimControl - 280 - 0 - 160 - 400 - 0 - - - org.contikios.cooja.plugins.Visualizer - - org.contikios.cooja.plugins.skins.IDVisualizerSkin - org.contikios.cooja.plugins.skins.UDGMVisualizerSkin - 6.299766478490424 0.0 0.0 6.299766478490424 -160.913563890561 -119.86496930434095 - - 400 - 2 - 400 - 1 - 1 - - - org.contikios.cooja.plugins.LogListener - - - - - 1200 - 5 - 240 - 400 - 160 - - - org.contikios.cooja.plugins.TimeLine - - 0 - 1 - - - - 500.0 - - 1600 - 4 - 166 - 0 - 539 - - - org.contikios.cooja.plugins.Notes - - Enter notes here - true - - 920 - 3 - 160 - 680 - 0 - - - org.contikios.cooja.plugins.ScriptRunner - - [CONFIG_DIR]/fragmentation-should-receive-none.js true - - 618 - 1 - 399 - 645 - 128 - - - + + + [APPS_DIR]/mrm + [APPS_DIR]/mspsim + [APPS_DIR]/avrora + [APPS_DIR]/serial_socket + [APPS_DIR]/collect-view + [APPS_DIR]/powertracker + + My simulation + 123456 + 1000000 + + org.contikios.cooja.radiomediums.UDGM + 50.0 + 100.0 + 1.0 + 1.0 + + + 40000 + + + org.contikios.cooja.mspmote.Exp5438MoteType + exp5438#1 + Sender + [CONTIKI_DIR]/regression-tests/11-ipv6/code/sender/unicast-sender.c + make clean TARGET=exp5438 +make unicast-sender.exp5438 DEFINES=NETSTACK_CONF_RDC=nullrdc_driver,SIZE=500,BUFSIZE=200 TARGET=exp5438 + [CONTIKI_DIR]/regression-tests/11-ipv6/code/sender/unicast-sender.exp5438 + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.interfaces.IPAddress + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + org.contikios.cooja.mspmote.interfaces.MspClock + org.contikios.cooja.mspmote.interfaces.MspMoteID + org.contikios.cooja.mspmote.interfaces.Msp802154Radio + org.contikios.cooja.mspmote.interfaces.UsciA1Serial + org.contikios.cooja.mspmote.interfaces.Exp5438LED + org.contikios.cooja.mspmote.interfaces.MspDebugOutput + + + org.contikios.cooja.mspmote.Exp5438MoteType + exp5438#2 + Receiver + [CONTIKI_DIR]/regression-tests/11-ipv6/code/receiver/udp-receiver.c + make clean TARGET=exp5438 +make udp-receiver.exp5438 DEFINES=NETSTACK_CONF_RDC=nullrdc_driver TARGET=exp5438 + [CONTIKI_DIR]/regression-tests/11-ipv6/code/receiver/udp-receiver.exp5438 + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.interfaces.IPAddress + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + org.contikios.cooja.mspmote.interfaces.MspClock + org.contikios.cooja.mspmote.interfaces.MspMoteID + org.contikios.cooja.mspmote.interfaces.Msp802154Radio + org.contikios.cooja.mspmote.interfaces.UsciA1Serial + org.contikios.cooja.mspmote.interfaces.Exp5438LED + org.contikios.cooja.mspmote.interfaces.MspDebugOutput + + + + + org.contikios.cooja.interfaces.Position + 40.305234290431166 + 41.884881003965305 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 1 + + exp5438#1 + + + + + org.contikios.cooja.interfaces.Position + 65.38552901873047 + 40.93246474846026 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 2 + + exp5438#2 + + + + org.contikios.cooja.plugins.SimControl + 280 + 0 + 160 + 400 + 0 + + + org.contikios.cooja.plugins.Visualizer + + org.contikios.cooja.plugins.skins.IDVisualizerSkin + org.contikios.cooja.plugins.skins.UDGMVisualizerSkin + 6.299766478490424 0.0 0.0 6.299766478490424 -160.913563890561 -119.86496930434095 + + 400 + 2 + 400 + 1 + 1 + + + org.contikios.cooja.plugins.LogListener + + + + + 1200 + 5 + 240 + 400 + 160 + + + org.contikios.cooja.plugins.TimeLine + + 0 + 1 + + + + 500.0 + + 1600 + 4 + 166 + 0 + 539 + + + org.contikios.cooja.plugins.Notes + + Enter notes here + true + + 920 + 3 + 160 + 680 + 0 + + + org.contikios.cooja.plugins.ScriptRunner + + [CONFIG_DIR]/fragmentation-should-receive-none.js true + + 618 + 1 + 399 + 645 + 128 + + + diff --git a/regression-tests/11-ipv6/16-sky-ipv6-rpl-collect.csc b/regression-tests/11-ipv6/16-sky-ipv6-rpl-collect.csc index 9b76c6739..2d1e947c4 100644 --- a/regression-tests/11-ipv6/16-sky-ipv6-rpl-collect.csc +++ b/regression-tests/11-ipv6/16-sky-ipv6-rpl-collect.csc @@ -1,623 +1,623 @@ - - - [APPS_DIR]/mrm - [APPS_DIR]/mspsim - [APPS_DIR]/avrora - [APPS_DIR]/serial_socket - [APPS_DIR]/collect-view - [APPS_DIR]/powertracker - - My simulation - 123456 - 1000000 - - org.contikios.cooja.radiomediums.UDGM - 100.0 - 0.0 - 1.0 - 1.0 - - - 40000 - - - org.contikios.cooja.mspmote.SkyMoteType - sky1 - Sky Mote Type #sky1 - [CONTIKI_DIR]/examples/ipv6/rpl-collect/udp-sink.c - make udp-sink.sky TARGET=sky - [CONTIKI_DIR]/examples/ipv6/rpl-collect/udp-sink.sky - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.interfaces.IPAddress - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - org.contikios.cooja.mspmote.interfaces.MspClock - org.contikios.cooja.mspmote.interfaces.MspMoteID - org.contikios.cooja.mspmote.interfaces.SkyButton - org.contikios.cooja.mspmote.interfaces.SkyFlash - org.contikios.cooja.mspmote.interfaces.SkyCoffeeFilesystem - org.contikios.cooja.mspmote.interfaces.Msp802154Radio - org.contikios.cooja.mspmote.interfaces.MspSerial - org.contikios.cooja.mspmote.interfaces.SkyLED - org.contikios.cooja.mspmote.interfaces.MspDebugOutput - org.contikios.cooja.mspmote.interfaces.SkyTemperature - - - org.contikios.cooja.mspmote.SkyMoteType - sky2 - Sky Mote Type #sky2 - [CONTIKI_DIR]/examples/ipv6/rpl-collect/udp-sender.c - make udp-sender.sky TARGET=sky - [CONTIKI_DIR]/examples/ipv6/rpl-collect/udp-sender.sky - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.interfaces.IPAddress - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - org.contikios.cooja.mspmote.interfaces.MspClock - org.contikios.cooja.mspmote.interfaces.MspMoteID - org.contikios.cooja.mspmote.interfaces.SkyButton - org.contikios.cooja.mspmote.interfaces.SkyFlash - org.contikios.cooja.mspmote.interfaces.SkyCoffeeFilesystem - org.contikios.cooja.mspmote.interfaces.Msp802154Radio - org.contikios.cooja.mspmote.interfaces.MspSerial - org.contikios.cooja.mspmote.interfaces.SkyLED - org.contikios.cooja.mspmote.interfaces.MspDebugOutput - org.contikios.cooja.mspmote.interfaces.SkyTemperature - - - - - org.contikios.cooja.interfaces.Position - 242.83184008074136 - -88.93434685786869 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 1 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 223.5175954004352 - -69.05842098947238 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 2 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 250.51864863077387 - -59.2420165357677 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 3 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 294.4736028715864 - -63.23792146675066 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 4 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 188.6638305152632 - -41.28432709660093 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 5 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 222.54731411389315 - -32.869043991280165 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 6 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 273.694897230475 - -29.672320046493798 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 7 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 321.64575640227054 - -33.66822497747676 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 8 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 159.4120162043624 - -2.500166515809672 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 9 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 196.97352255560222 - -0.10262355721989598 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 10 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 252.91619158936365 - 1.495738415173288 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 11 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 301.66623174735577 - -0.10262355721989598 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 12 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 346.4203669743649 - 1.495738415173288 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 13 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 124.24805281171236 - 22.27444405628468 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 14 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 180.1907218454738 - 35.86052082162674 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 15 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 224.14567608628633 - 30.266253918250598 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 16 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 276.0924401890648 - 35.86052082162674 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 17 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 351.2154528915445 - 37.45888279401993 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 18 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 89.08408941906231 - 47.04905462837903 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 19 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 180.1907218454738 - 75.02038914525976 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 20 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 245.7235627135943 - 66.22939829709723 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 21 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 290.4776979406035 - 67.82776026949043 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 22 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 370.3957965602627 - 64.63103632470406 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 23 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 93.07999435004527 - 82.21301802102909 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 24 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 204.16615143137156 - 106.18844760692684 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 25 - - sky2 - - - - org.contikios.cooja.plugins.SimControl - 259 - 3 - 184 - 0 - 0 - - - org.contikios.cooja.plugins.Visualizer - - org.contikios.cooja.plugins.skins.IDVisualizerSkin - org.contikios.cooja.plugins.skins.AttributeVisualizerSkin - org.contikios.cooja.plugins.skins.UDGMVisualizerSkin - 1.836243522352668 0.0 0.0 1.836243522352668 -93.43273668589363 192.8080782058222 - - 666 - 4 - 510 - 764 - 5 - - - org.contikios.cooja.plugins.LogListener - - - - - - 1347 - 2 - 150 - 0 - 438 - - - org.contikios.cooja.plugins.TimeLine - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - 15 - 16 - 17 - 18 - 19 - 20 - 21 - 22 - 23 - 24 - - 52818.041078329756 - - 1347 - 1 - 233 - 0 - 588 - - - org.contikios.cooja.plugins.ScriptRunner - - - true - - 600 - 0 - 700 - 416 - 8 - - - + + + [APPS_DIR]/mrm + [APPS_DIR]/mspsim + [APPS_DIR]/avrora + [APPS_DIR]/serial_socket + [APPS_DIR]/collect-view + [APPS_DIR]/powertracker + + My simulation + 123456 + 1000000 + + org.contikios.cooja.radiomediums.UDGM + 100.0 + 0.0 + 1.0 + 1.0 + + + 40000 + + + org.contikios.cooja.mspmote.SkyMoteType + sky1 + Sky Mote Type #sky1 + [CONTIKI_DIR]/examples/ipv6/rpl-collect/udp-sink.c + make udp-sink.sky TARGET=sky + [CONTIKI_DIR]/examples/ipv6/rpl-collect/udp-sink.sky + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.interfaces.IPAddress + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + org.contikios.cooja.mspmote.interfaces.MspClock + org.contikios.cooja.mspmote.interfaces.MspMoteID + org.contikios.cooja.mspmote.interfaces.SkyButton + org.contikios.cooja.mspmote.interfaces.SkyFlash + org.contikios.cooja.mspmote.interfaces.SkyCoffeeFilesystem + org.contikios.cooja.mspmote.interfaces.Msp802154Radio + org.contikios.cooja.mspmote.interfaces.MspSerial + org.contikios.cooja.mspmote.interfaces.SkyLED + org.contikios.cooja.mspmote.interfaces.MspDebugOutput + org.contikios.cooja.mspmote.interfaces.SkyTemperature + + + org.contikios.cooja.mspmote.SkyMoteType + sky2 + Sky Mote Type #sky2 + [CONTIKI_DIR]/examples/ipv6/rpl-collect/udp-sender.c + make udp-sender.sky TARGET=sky + [CONTIKI_DIR]/examples/ipv6/rpl-collect/udp-sender.sky + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.interfaces.IPAddress + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + org.contikios.cooja.mspmote.interfaces.MspClock + org.contikios.cooja.mspmote.interfaces.MspMoteID + org.contikios.cooja.mspmote.interfaces.SkyButton + org.contikios.cooja.mspmote.interfaces.SkyFlash + org.contikios.cooja.mspmote.interfaces.SkyCoffeeFilesystem + org.contikios.cooja.mspmote.interfaces.Msp802154Radio + org.contikios.cooja.mspmote.interfaces.MspSerial + org.contikios.cooja.mspmote.interfaces.SkyLED + org.contikios.cooja.mspmote.interfaces.MspDebugOutput + org.contikios.cooja.mspmote.interfaces.SkyTemperature + + + + + org.contikios.cooja.interfaces.Position + 242.83184008074136 + -88.93434685786869 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 1 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 223.5175954004352 + -69.05842098947238 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 2 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 250.51864863077387 + -59.2420165357677 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 3 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 294.4736028715864 + -63.23792146675066 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 4 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 188.6638305152632 + -41.28432709660093 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 5 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 222.54731411389315 + -32.869043991280165 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 6 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 273.694897230475 + -29.672320046493798 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 7 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 321.64575640227054 + -33.66822497747676 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 8 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 159.4120162043624 + -2.500166515809672 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 9 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 196.97352255560222 + -0.10262355721989598 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 10 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 252.91619158936365 + 1.495738415173288 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 11 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 301.66623174735577 + -0.10262355721989598 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 12 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 346.4203669743649 + 1.495738415173288 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 13 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 124.24805281171236 + 22.27444405628468 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 14 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 180.1907218454738 + 35.86052082162674 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 15 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 224.14567608628633 + 30.266253918250598 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 16 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 276.0924401890648 + 35.86052082162674 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 17 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 351.2154528915445 + 37.45888279401993 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 18 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 89.08408941906231 + 47.04905462837903 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 19 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 180.1907218454738 + 75.02038914525976 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 20 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 245.7235627135943 + 66.22939829709723 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 21 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 290.4776979406035 + 67.82776026949043 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 22 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 370.3957965602627 + 64.63103632470406 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 23 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 93.07999435004527 + 82.21301802102909 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 24 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 204.16615143137156 + 106.18844760692684 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 25 + + sky2 + + + + org.contikios.cooja.plugins.SimControl + 259 + 3 + 184 + 0 + 0 + + + org.contikios.cooja.plugins.Visualizer + + org.contikios.cooja.plugins.skins.IDVisualizerSkin + org.contikios.cooja.plugins.skins.AttributeVisualizerSkin + org.contikios.cooja.plugins.skins.UDGMVisualizerSkin + 1.836243522352668 0.0 0.0 1.836243522352668 -93.43273668589363 192.8080782058222 + + 666 + 4 + 510 + 764 + 5 + + + org.contikios.cooja.plugins.LogListener + + + + + + 1347 + 2 + 150 + 0 + 438 + + + org.contikios.cooja.plugins.TimeLine + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + 15 + 16 + 17 + 18 + 19 + 20 + 21 + 22 + 23 + 24 + + 52818.041078329756 + + 1347 + 1 + 233 + 0 + 588 + + + org.contikios.cooja.plugins.ScriptRunner + + + true + + 600 + 0 + 700 + 416 + 8 + + + diff --git a/regression-tests/11-ipv6/17-cooja-multicast-11-hops.csc b/regression-tests/11-ipv6/17-cooja-multicast-11-hops.csc index da90cb72b..111beb9a1 100644 --- a/regression-tests/11-ipv6/17-cooja-multicast-11-hops.csc +++ b/regression-tests/11-ipv6/17-cooja-multicast-11-hops.csc @@ -1,367 +1,367 @@ - - - [APPS_DIR]/mrm - [APPS_DIR]/mspsim - [APPS_DIR]/avrora - [APPS_DIR]/serial_socket - [APPS_DIR]/collect-view - [APPS_DIR]/powertracker - - Multicast regression test - 123456 - 1000000 - - org.contikios.cooja.radiomediums.UDGM - 15.0 - 0.0 - 1.0 - 1.0 - - - 40000 - - - org.contikios.cooja.contikimote.ContikiMoteType - mtype612 - Root/sender - [CONTIKI_DIR]/examples/ipv6/multicast/root.c - make root.cooja TARGET=cooja - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.Battery - org.contikios.cooja.contikimote.interfaces.ContikiVib - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - org.contikios.cooja.contikimote.interfaces.ContikiRS232 - org.contikios.cooja.contikimote.interfaces.ContikiBeeper - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.contikimote.interfaces.ContikiIPAddress - org.contikios.cooja.contikimote.interfaces.ContikiRadio - org.contikios.cooja.contikimote.interfaces.ContikiButton - org.contikios.cooja.contikimote.interfaces.ContikiPIR - org.contikios.cooja.contikimote.interfaces.ContikiClock - org.contikios.cooja.contikimote.interfaces.ContikiLED - org.contikios.cooja.contikimote.interfaces.ContikiCFS - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - false - - - org.contikios.cooja.contikimote.ContikiMoteType - mtype890 - Intermediate - [CONTIKI_DIR]/examples/ipv6/multicast/intermediate.c - make intermediate.cooja TARGET=cooja - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.Battery - org.contikios.cooja.contikimote.interfaces.ContikiVib - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - org.contikios.cooja.contikimote.interfaces.ContikiRS232 - org.contikios.cooja.contikimote.interfaces.ContikiBeeper - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.contikimote.interfaces.ContikiIPAddress - org.contikios.cooja.contikimote.interfaces.ContikiRadio - org.contikios.cooja.contikimote.interfaces.ContikiButton - org.contikios.cooja.contikimote.interfaces.ContikiPIR - org.contikios.cooja.contikimote.interfaces.ContikiClock - org.contikios.cooja.contikimote.interfaces.ContikiLED - org.contikios.cooja.contikimote.interfaces.ContikiCFS - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - false - - - org.contikios.cooja.contikimote.ContikiMoteType - mtype956 - Receiver - [CONTIKI_DIR]/examples/ipv6/multicast/sink.c - make sink.cooja TARGET=cooja - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.Battery - org.contikios.cooja.contikimote.interfaces.ContikiVib - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - org.contikios.cooja.contikimote.interfaces.ContikiRS232 - org.contikios.cooja.contikimote.interfaces.ContikiBeeper - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.contikimote.interfaces.ContikiIPAddress - org.contikios.cooja.contikimote.interfaces.ContikiRadio - org.contikios.cooja.contikimote.interfaces.ContikiButton - org.contikios.cooja.contikimote.interfaces.ContikiPIR - org.contikios.cooja.contikimote.interfaces.ContikiClock - org.contikios.cooja.contikimote.interfaces.ContikiLED - org.contikios.cooja.contikimote.interfaces.ContikiCFS - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - false - - - - org.contikios.cooja.interfaces.Position - -7.983976888750106 - 0.37523218201044733 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 1 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype612 - - - - org.contikios.cooja.interfaces.Position - 0.0 - 0.0 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 2 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype890 - - - - org.contikios.cooja.interfaces.Position - 10.0 - 0.0 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 3 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype890 - - - - org.contikios.cooja.interfaces.Position - 20.0 - 0.0 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 4 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype890 - - - - org.contikios.cooja.interfaces.Position - 30.0 - 0.0 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 5 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype890 - - - - org.contikios.cooja.interfaces.Position - 40.0 - 0.0 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 6 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype890 - - - - org.contikios.cooja.interfaces.Position - 50.0 - 0.0 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 7 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype890 - - - - org.contikios.cooja.interfaces.Position - 60.0 - 0.0 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 8 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype890 - - - - org.contikios.cooja.interfaces.Position - 70.0 - 0.0 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 9 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype890 - - - - org.contikios.cooja.interfaces.Position - 79.93950307524713 - -0.043451055913349 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 10 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype890 - - - - org.contikios.cooja.interfaces.Position - 90.0 - 0.0 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 11 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype890 - - - - org.contikios.cooja.interfaces.Position - 99.61761525766555 - 0.37523218201044733 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 12 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype956 - - - - org.contikios.cooja.plugins.SimControl - 280 - 1 - 160 - 400 - 0 - - - org.contikios.cooja.plugins.Visualizer - - true - org.contikios.cooja.plugins.skins.IDVisualizerSkin - org.contikios.cooja.plugins.skins.GridVisualizerSkin - org.contikios.cooja.plugins.skins.TrafficVisualizerSkin - org.contikios.cooja.plugins.skins.UDGMVisualizerSkin - org.contikios.cooja.plugins.skins.MoteTypeVisualizerSkin - 2.388440494916608 0.0 0.0 2.388440494916608 109.06925371156906 149.10378026149033 - - 400 - 3 - 400 - 1 - 1 - - - org.contikios.cooja.plugins.LogListener - - - - - - 1200 - 2 - 240 - 400 - 160 - - - org.contikios.cooja.plugins.Notes - - Enter notes here - true - - 920 - 4 - 160 - 680 - 0 - - - org.contikios.cooja.plugins.ScriptRunner - - - true - - 600 - 0 - 700 - 843 - 77 - - - + + + [APPS_DIR]/mrm + [APPS_DIR]/mspsim + [APPS_DIR]/avrora + [APPS_DIR]/serial_socket + [APPS_DIR]/collect-view + [APPS_DIR]/powertracker + + Multicast regression test + 123456 + 1000000 + + org.contikios.cooja.radiomediums.UDGM + 15.0 + 0.0 + 1.0 + 1.0 + + + 40000 + + + org.contikios.cooja.contikimote.ContikiMoteType + mtype612 + Root/sender + [CONTIKI_DIR]/examples/ipv6/multicast/root.c + make root.cooja TARGET=cooja + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.Battery + org.contikios.cooja.contikimote.interfaces.ContikiVib + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + org.contikios.cooja.contikimote.interfaces.ContikiRS232 + org.contikios.cooja.contikimote.interfaces.ContikiBeeper + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.contikimote.interfaces.ContikiIPAddress + org.contikios.cooja.contikimote.interfaces.ContikiRadio + org.contikios.cooja.contikimote.interfaces.ContikiButton + org.contikios.cooja.contikimote.interfaces.ContikiPIR + org.contikios.cooja.contikimote.interfaces.ContikiClock + org.contikios.cooja.contikimote.interfaces.ContikiLED + org.contikios.cooja.contikimote.interfaces.ContikiCFS + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + false + + + org.contikios.cooja.contikimote.ContikiMoteType + mtype890 + Intermediate + [CONTIKI_DIR]/examples/ipv6/multicast/intermediate.c + make intermediate.cooja TARGET=cooja + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.Battery + org.contikios.cooja.contikimote.interfaces.ContikiVib + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + org.contikios.cooja.contikimote.interfaces.ContikiRS232 + org.contikios.cooja.contikimote.interfaces.ContikiBeeper + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.contikimote.interfaces.ContikiIPAddress + org.contikios.cooja.contikimote.interfaces.ContikiRadio + org.contikios.cooja.contikimote.interfaces.ContikiButton + org.contikios.cooja.contikimote.interfaces.ContikiPIR + org.contikios.cooja.contikimote.interfaces.ContikiClock + org.contikios.cooja.contikimote.interfaces.ContikiLED + org.contikios.cooja.contikimote.interfaces.ContikiCFS + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + false + + + org.contikios.cooja.contikimote.ContikiMoteType + mtype956 + Receiver + [CONTIKI_DIR]/examples/ipv6/multicast/sink.c + make sink.cooja TARGET=cooja + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.Battery + org.contikios.cooja.contikimote.interfaces.ContikiVib + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + org.contikios.cooja.contikimote.interfaces.ContikiRS232 + org.contikios.cooja.contikimote.interfaces.ContikiBeeper + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.contikimote.interfaces.ContikiIPAddress + org.contikios.cooja.contikimote.interfaces.ContikiRadio + org.contikios.cooja.contikimote.interfaces.ContikiButton + org.contikios.cooja.contikimote.interfaces.ContikiPIR + org.contikios.cooja.contikimote.interfaces.ContikiClock + org.contikios.cooja.contikimote.interfaces.ContikiLED + org.contikios.cooja.contikimote.interfaces.ContikiCFS + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + false + + + + org.contikios.cooja.interfaces.Position + -7.983976888750106 + 0.37523218201044733 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 1 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype612 + + + + org.contikios.cooja.interfaces.Position + 0.0 + 0.0 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 2 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype890 + + + + org.contikios.cooja.interfaces.Position + 10.0 + 0.0 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 3 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype890 + + + + org.contikios.cooja.interfaces.Position + 20.0 + 0.0 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 4 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype890 + + + + org.contikios.cooja.interfaces.Position + 30.0 + 0.0 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 5 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype890 + + + + org.contikios.cooja.interfaces.Position + 40.0 + 0.0 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 6 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype890 + + + + org.contikios.cooja.interfaces.Position + 50.0 + 0.0 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 7 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype890 + + + + org.contikios.cooja.interfaces.Position + 60.0 + 0.0 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 8 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype890 + + + + org.contikios.cooja.interfaces.Position + 70.0 + 0.0 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 9 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype890 + + + + org.contikios.cooja.interfaces.Position + 79.93950307524713 + -0.043451055913349 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 10 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype890 + + + + org.contikios.cooja.interfaces.Position + 90.0 + 0.0 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 11 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype890 + + + + org.contikios.cooja.interfaces.Position + 99.61761525766555 + 0.37523218201044733 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 12 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype956 + + + + org.contikios.cooja.plugins.SimControl + 280 + 1 + 160 + 400 + 0 + + + org.contikios.cooja.plugins.Visualizer + + true + org.contikios.cooja.plugins.skins.IDVisualizerSkin + org.contikios.cooja.plugins.skins.GridVisualizerSkin + org.contikios.cooja.plugins.skins.TrafficVisualizerSkin + org.contikios.cooja.plugins.skins.UDGMVisualizerSkin + org.contikios.cooja.plugins.skins.MoteTypeVisualizerSkin + 2.388440494916608 0.0 0.0 2.388440494916608 109.06925371156906 149.10378026149033 + + 400 + 3 + 400 + 1 + 1 + + + org.contikios.cooja.plugins.LogListener + + + + + + 1200 + 2 + 240 + 400 + 160 + + + org.contikios.cooja.plugins.Notes + + Enter notes here + true + + 920 + 4 + 160 + 680 + 0 + + + org.contikios.cooja.plugins.ScriptRunner + + + true + + 600 + 0 + 700 + 843 + 77 + + + diff --git a/regression-tests/11-ipv6/18-cooja-multicast-31-hops.csc b/regression-tests/11-ipv6/18-cooja-multicast-31-hops.csc index c1aea4df0..27321d624 100644 --- a/regression-tests/11-ipv6/18-cooja-multicast-31-hops.csc +++ b/regression-tests/11-ipv6/18-cooja-multicast-31-hops.csc @@ -1,707 +1,707 @@ - - - [APPS_DIR]/mrm - [APPS_DIR]/mspsim - [APPS_DIR]/avrora - [APPS_DIR]/serial_socket - [APPS_DIR]/collect-view - [APPS_DIR]/powertracker - - Multicast regression test - 123456 - 1000000 - - org.contikios.cooja.radiomediums.UDGM - 15.0 - 0.0 - 1.0 - 1.0 - - - 40000 - - - org.contikios.cooja.contikimote.ContikiMoteType - mtype816 - Root/sender - [CONTIKI_DIR]/examples/ipv6/multicast/root.c - make root.cooja TARGET=cooja - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.Battery - org.contikios.cooja.contikimote.interfaces.ContikiVib - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - org.contikios.cooja.contikimote.interfaces.ContikiRS232 - org.contikios.cooja.contikimote.interfaces.ContikiBeeper - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.contikimote.interfaces.ContikiIPAddress - org.contikios.cooja.contikimote.interfaces.ContikiRadio - org.contikios.cooja.contikimote.interfaces.ContikiButton - org.contikios.cooja.contikimote.interfaces.ContikiPIR - org.contikios.cooja.contikimote.interfaces.ContikiClock - org.contikios.cooja.contikimote.interfaces.ContikiLED - org.contikios.cooja.contikimote.interfaces.ContikiCFS - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - false - - - org.contikios.cooja.contikimote.ContikiMoteType - mtype53 - Intermediate - [CONTIKI_DIR]/examples/ipv6/multicast/intermediate.c - make intermediate.cooja TARGET=cooja - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.Battery - org.contikios.cooja.contikimote.interfaces.ContikiVib - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - org.contikios.cooja.contikimote.interfaces.ContikiRS232 - org.contikios.cooja.contikimote.interfaces.ContikiBeeper - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.contikimote.interfaces.ContikiIPAddress - org.contikios.cooja.contikimote.interfaces.ContikiRadio - org.contikios.cooja.contikimote.interfaces.ContikiButton - org.contikios.cooja.contikimote.interfaces.ContikiPIR - org.contikios.cooja.contikimote.interfaces.ContikiClock - org.contikios.cooja.contikimote.interfaces.ContikiLED - org.contikios.cooja.contikimote.interfaces.ContikiCFS - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - false - - - org.contikios.cooja.contikimote.ContikiMoteType - mtype191 - Receiver - [CONTIKI_DIR]/examples/ipv6/multicast/sink.c - make sink.cooja TARGET=cooja - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.Battery - org.contikios.cooja.contikimote.interfaces.ContikiVib - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - org.contikios.cooja.contikimote.interfaces.ContikiRS232 - org.contikios.cooja.contikimote.interfaces.ContikiBeeper - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.contikimote.interfaces.ContikiIPAddress - org.contikios.cooja.contikimote.interfaces.ContikiRadio - org.contikios.cooja.contikimote.interfaces.ContikiButton - org.contikios.cooja.contikimote.interfaces.ContikiPIR - org.contikios.cooja.contikimote.interfaces.ContikiClock - org.contikios.cooja.contikimote.interfaces.ContikiLED - org.contikios.cooja.contikimote.interfaces.ContikiCFS - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - false - - - - org.contikios.cooja.interfaces.Position - -7.983976888750106 - 0.37523218201044733 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 1 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype816 - - - - org.contikios.cooja.interfaces.Position - 0.0 - 0.0 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 2 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype53 - - - - org.contikios.cooja.interfaces.Position - 10.0 - 0.0 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 3 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype53 - - - - org.contikios.cooja.interfaces.Position - 20.0 - 0.0 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 4 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype53 - - - - org.contikios.cooja.interfaces.Position - 30.0 - 0.0 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 5 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype53 - - - - org.contikios.cooja.interfaces.Position - 40.0 - 0.0 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 6 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype53 - - - - org.contikios.cooja.interfaces.Position - 50.0 - 0.0 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 7 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype53 - - - - org.contikios.cooja.interfaces.Position - 60.0 - 0.0 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 8 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype53 - - - - org.contikios.cooja.interfaces.Position - 70.0 - 0.0 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 9 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype53 - - - - org.contikios.cooja.interfaces.Position - 79.93950307524713 - -0.043451055913349 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 10 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype53 - - - - org.contikios.cooja.interfaces.Position - 90.0 - 0.0 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 11 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype53 - - - - org.contikios.cooja.interfaces.Position - 299.830399237567 - 0.21169609213234786 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 12 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype191 - - - - org.contikios.cooja.interfaces.Position - 100.0 - 0.0 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 13 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype53 - - - - org.contikios.cooja.interfaces.Position - 110.0 - 0.0 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 14 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype53 - - - - org.contikios.cooja.interfaces.Position - 120.0 - 0.0 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 15 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype53 - - - - org.contikios.cooja.interfaces.Position - 130.0 - 0.0 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 16 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype53 - - - - org.contikios.cooja.interfaces.Position - 140.0 - 0.0 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 17 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype53 - - - - org.contikios.cooja.interfaces.Position - 150.0 - 0.0 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 18 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype53 - - - - org.contikios.cooja.interfaces.Position - 160.0 - 0.0 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 19 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype53 - - - - org.contikios.cooja.interfaces.Position - 170.0 - 0.0 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 20 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype53 - - - - org.contikios.cooja.interfaces.Position - 180.0 - 0.0 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 21 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype53 - - - - org.contikios.cooja.interfaces.Position - 190.0 - 0.0 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 22 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype53 - - - - org.contikios.cooja.interfaces.Position - 200.0 - 0.0 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 23 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype53 - - - - org.contikios.cooja.interfaces.Position - 210.0 - 0.0 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 24 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype53 - - - - org.contikios.cooja.interfaces.Position - 220.0 - 0.0 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 25 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype53 - - - - org.contikios.cooja.interfaces.Position - 230.0 - 0.0 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 26 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype53 - - - - org.contikios.cooja.interfaces.Position - 240.0 - 0.0 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 27 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype53 - - - - org.contikios.cooja.interfaces.Position - 250.0 - 0.0 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 28 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype53 - - - - org.contikios.cooja.interfaces.Position - 260.0 - 0.0 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 29 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype53 - - - - org.contikios.cooja.interfaces.Position - 270.0 - 0.0 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 30 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype53 - - - - org.contikios.cooja.interfaces.Position - 280.0 - 0.0 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 31 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype53 - - - - org.contikios.cooja.interfaces.Position - 290.0 - 0.0 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 32 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype53 - - - - org.contikios.cooja.plugins.SimControl - 280 - 1 - 160 - 400 - 0 - - - org.contikios.cooja.plugins.Visualizer - - true - org.contikios.cooja.plugins.skins.IDVisualizerSkin - org.contikios.cooja.plugins.skins.GridVisualizerSkin - org.contikios.cooja.plugins.skins.TrafficVisualizerSkin - org.contikios.cooja.plugins.skins.UDGMVisualizerSkin - org.contikios.cooja.plugins.skins.MoteTypeVisualizerSkin - 1.1837122130192945 0.0 0.0 1.1837122130192945 27.087094588040927 150.74941275029448 - - 400 - 2 - 400 - 1 - 1 - - - org.contikios.cooja.plugins.LogListener - - - - - - 1200 - 3 - 240 - 400 - 160 - - - org.contikios.cooja.plugins.Notes - - Enter notes here - true - - 920 - 4 - 160 - 680 - 0 - - - org.contikios.cooja.plugins.ScriptRunner - - - true - - 600 - 0 - 700 - 843 - 77 - - - + + + [APPS_DIR]/mrm + [APPS_DIR]/mspsim + [APPS_DIR]/avrora + [APPS_DIR]/serial_socket + [APPS_DIR]/collect-view + [APPS_DIR]/powertracker + + Multicast regression test + 123456 + 1000000 + + org.contikios.cooja.radiomediums.UDGM + 15.0 + 0.0 + 1.0 + 1.0 + + + 40000 + + + org.contikios.cooja.contikimote.ContikiMoteType + mtype816 + Root/sender + [CONTIKI_DIR]/examples/ipv6/multicast/root.c + make root.cooja TARGET=cooja + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.Battery + org.contikios.cooja.contikimote.interfaces.ContikiVib + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + org.contikios.cooja.contikimote.interfaces.ContikiRS232 + org.contikios.cooja.contikimote.interfaces.ContikiBeeper + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.contikimote.interfaces.ContikiIPAddress + org.contikios.cooja.contikimote.interfaces.ContikiRadio + org.contikios.cooja.contikimote.interfaces.ContikiButton + org.contikios.cooja.contikimote.interfaces.ContikiPIR + org.contikios.cooja.contikimote.interfaces.ContikiClock + org.contikios.cooja.contikimote.interfaces.ContikiLED + org.contikios.cooja.contikimote.interfaces.ContikiCFS + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + false + + + org.contikios.cooja.contikimote.ContikiMoteType + mtype53 + Intermediate + [CONTIKI_DIR]/examples/ipv6/multicast/intermediate.c + make intermediate.cooja TARGET=cooja + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.Battery + org.contikios.cooja.contikimote.interfaces.ContikiVib + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + org.contikios.cooja.contikimote.interfaces.ContikiRS232 + org.contikios.cooja.contikimote.interfaces.ContikiBeeper + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.contikimote.interfaces.ContikiIPAddress + org.contikios.cooja.contikimote.interfaces.ContikiRadio + org.contikios.cooja.contikimote.interfaces.ContikiButton + org.contikios.cooja.contikimote.interfaces.ContikiPIR + org.contikios.cooja.contikimote.interfaces.ContikiClock + org.contikios.cooja.contikimote.interfaces.ContikiLED + org.contikios.cooja.contikimote.interfaces.ContikiCFS + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + false + + + org.contikios.cooja.contikimote.ContikiMoteType + mtype191 + Receiver + [CONTIKI_DIR]/examples/ipv6/multicast/sink.c + make sink.cooja TARGET=cooja + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.Battery + org.contikios.cooja.contikimote.interfaces.ContikiVib + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + org.contikios.cooja.contikimote.interfaces.ContikiRS232 + org.contikios.cooja.contikimote.interfaces.ContikiBeeper + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.contikimote.interfaces.ContikiIPAddress + org.contikios.cooja.contikimote.interfaces.ContikiRadio + org.contikios.cooja.contikimote.interfaces.ContikiButton + org.contikios.cooja.contikimote.interfaces.ContikiPIR + org.contikios.cooja.contikimote.interfaces.ContikiClock + org.contikios.cooja.contikimote.interfaces.ContikiLED + org.contikios.cooja.contikimote.interfaces.ContikiCFS + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + false + + + + org.contikios.cooja.interfaces.Position + -7.983976888750106 + 0.37523218201044733 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 1 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype816 + + + + org.contikios.cooja.interfaces.Position + 0.0 + 0.0 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 2 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype53 + + + + org.contikios.cooja.interfaces.Position + 10.0 + 0.0 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 3 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype53 + + + + org.contikios.cooja.interfaces.Position + 20.0 + 0.0 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 4 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype53 + + + + org.contikios.cooja.interfaces.Position + 30.0 + 0.0 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 5 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype53 + + + + org.contikios.cooja.interfaces.Position + 40.0 + 0.0 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 6 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype53 + + + + org.contikios.cooja.interfaces.Position + 50.0 + 0.0 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 7 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype53 + + + + org.contikios.cooja.interfaces.Position + 60.0 + 0.0 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 8 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype53 + + + + org.contikios.cooja.interfaces.Position + 70.0 + 0.0 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 9 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype53 + + + + org.contikios.cooja.interfaces.Position + 79.93950307524713 + -0.043451055913349 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 10 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype53 + + + + org.contikios.cooja.interfaces.Position + 90.0 + 0.0 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 11 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype53 + + + + org.contikios.cooja.interfaces.Position + 299.830399237567 + 0.21169609213234786 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 12 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype191 + + + + org.contikios.cooja.interfaces.Position + 100.0 + 0.0 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 13 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype53 + + + + org.contikios.cooja.interfaces.Position + 110.0 + 0.0 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 14 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype53 + + + + org.contikios.cooja.interfaces.Position + 120.0 + 0.0 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 15 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype53 + + + + org.contikios.cooja.interfaces.Position + 130.0 + 0.0 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 16 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype53 + + + + org.contikios.cooja.interfaces.Position + 140.0 + 0.0 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 17 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype53 + + + + org.contikios.cooja.interfaces.Position + 150.0 + 0.0 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 18 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype53 + + + + org.contikios.cooja.interfaces.Position + 160.0 + 0.0 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 19 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype53 + + + + org.contikios.cooja.interfaces.Position + 170.0 + 0.0 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 20 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype53 + + + + org.contikios.cooja.interfaces.Position + 180.0 + 0.0 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 21 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype53 + + + + org.contikios.cooja.interfaces.Position + 190.0 + 0.0 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 22 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype53 + + + + org.contikios.cooja.interfaces.Position + 200.0 + 0.0 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 23 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype53 + + + + org.contikios.cooja.interfaces.Position + 210.0 + 0.0 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 24 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype53 + + + + org.contikios.cooja.interfaces.Position + 220.0 + 0.0 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 25 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype53 + + + + org.contikios.cooja.interfaces.Position + 230.0 + 0.0 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 26 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype53 + + + + org.contikios.cooja.interfaces.Position + 240.0 + 0.0 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 27 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype53 + + + + org.contikios.cooja.interfaces.Position + 250.0 + 0.0 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 28 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype53 + + + + org.contikios.cooja.interfaces.Position + 260.0 + 0.0 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 29 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype53 + + + + org.contikios.cooja.interfaces.Position + 270.0 + 0.0 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 30 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype53 + + + + org.contikios.cooja.interfaces.Position + 280.0 + 0.0 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 31 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype53 + + + + org.contikios.cooja.interfaces.Position + 290.0 + 0.0 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 32 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype53 + + + + org.contikios.cooja.plugins.SimControl + 280 + 1 + 160 + 400 + 0 + + + org.contikios.cooja.plugins.Visualizer + + true + org.contikios.cooja.plugins.skins.IDVisualizerSkin + org.contikios.cooja.plugins.skins.GridVisualizerSkin + org.contikios.cooja.plugins.skins.TrafficVisualizerSkin + org.contikios.cooja.plugins.skins.UDGMVisualizerSkin + org.contikios.cooja.plugins.skins.MoteTypeVisualizerSkin + 1.1837122130192945 0.0 0.0 1.1837122130192945 27.087094588040927 150.74941275029448 + + 400 + 2 + 400 + 1 + 1 + + + org.contikios.cooja.plugins.LogListener + + + + + + 1200 + 3 + 240 + 400 + 160 + + + org.contikios.cooja.plugins.Notes + + Enter notes here + true + + 920 + 4 + 160 + 680 + 0 + + + org.contikios.cooja.plugins.ScriptRunner + + + true + + 600 + 0 + 700 + 843 + 77 + + + diff --git a/regression-tests/11-ipv6/code/receiver/project-conf.h b/regression-tests/11-ipv6/code/receiver/project-conf.h index 877ed0ac4..17a25e129 100644 --- a/regression-tests/11-ipv6/code/receiver/project-conf.h +++ b/regression-tests/11-ipv6/code/receiver/project-conf.h @@ -1,4 +1,5 @@ - +#undef UIP_CONF_ND6_SEND_NA +#define UIP_CONF_ND6_SEND_NA 1 #ifdef BUFSIZE #undef UIP_CONF_BUFFER_SIZE diff --git a/regression-tests/11-ipv6/code/sender/project-conf.h b/regression-tests/11-ipv6/code/sender/project-conf.h index 877ed0ac4..17a25e129 100644 --- a/regression-tests/11-ipv6/code/sender/project-conf.h +++ b/regression-tests/11-ipv6/code/sender/project-conf.h @@ -1,4 +1,5 @@ - +#undef UIP_CONF_ND6_SEND_NA +#define UIP_CONF_ND6_SEND_NA 1 #ifdef BUFSIZE #undef UIP_CONF_BUFFER_SIZE diff --git a/regression-tests/11-ipv6/x03-sky-ipv6-udp-fragmentation.csc b/regression-tests/11-ipv6/x03-sky-ipv6-udp-fragmentation.csc index f035a84cf..f3c99664e 100644 --- a/regression-tests/11-ipv6/x03-sky-ipv6-udp-fragmentation.csc +++ b/regression-tests/11-ipv6/x03-sky-ipv6-udp-fragmentation.csc @@ -1,179 +1,179 @@ - - - [APPS_DIR]/mrm - [APPS_DIR]/mspsim - [APPS_DIR]/avrora - [APPS_DIR]/serial_socket - [APPS_DIR]/collect-view - [APPS_DIR]/powertracker - - My simulation - generated - 1000000 - - org.contikios.cooja.radiomediums.UDGM - 50.0 - 100.0 - 1.0 - 1.0 - - - 40000 - - - org.contikios.cooja.mspmote.SkyMoteType - sky1 - UDP client - [CONTIKI_DIR]/examples/udp-ipv6/udp-client.c - make clean TARGET=sky -make udp-client.sky TARGET=sky DEFINES=UDP_CONNECTION_ADDR=fe80::212:7402:2:202,SICSLOWPAN_CONF_FRAG=1,SEND_TOO_LARGE_PACKET_TO_TEST_FRAGMENTATION=1 - [CONTIKI_DIR]/examples/udp-ipv6/udp-client.sky - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.interfaces.IPAddress - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - org.contikios.cooja.mspmote.interfaces.MspClock - org.contikios.cooja.mspmote.interfaces.MspMoteID - org.contikios.cooja.mspmote.interfaces.SkyButton - org.contikios.cooja.mspmote.interfaces.SkyFlash - org.contikios.cooja.mspmote.interfaces.SkyCoffeeFilesystem - org.contikios.cooja.mspmote.interfaces.Msp802154Radio - org.contikios.cooja.mspmote.interfaces.MspSerial - org.contikios.cooja.mspmote.interfaces.SkyLED - org.contikios.cooja.mspmote.interfaces.MspDebugOutput - org.contikios.cooja.mspmote.interfaces.SkyTemperature - - - org.contikios.cooja.mspmote.SkyMoteType - sky2 - UDP server - [CONTIKI_DIR]/examples/udp-ipv6/udp-server.c - make udp-server.sky TARGET=sky DEFINES=SICSLOWPAN_CONF_FRAG=1 - [CONTIKI_DIR]/examples/udp-ipv6/udp-server.sky - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.interfaces.IPAddress - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - org.contikios.cooja.mspmote.interfaces.MspClock - org.contikios.cooja.mspmote.interfaces.MspMoteID - org.contikios.cooja.mspmote.interfaces.SkyButton - org.contikios.cooja.mspmote.interfaces.SkyFlash - org.contikios.cooja.mspmote.interfaces.SkyCoffeeFilesystem - org.contikios.cooja.mspmote.interfaces.Msp802154Radio - org.contikios.cooja.mspmote.interfaces.MspSerial - org.contikios.cooja.mspmote.interfaces.SkyLED - org.contikios.cooja.mspmote.interfaces.MspDebugOutput - org.contikios.cooja.mspmote.interfaces.SkyTemperature - - - - - org.contikios.cooja.interfaces.Position - 56.49442624080769 - 69.16564756567392 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 1 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 70.13661699393737 - 61.114518596613784 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 2 - - sky2 - - - - org.contikios.cooja.plugins.SimControl - 248 - 0 - 200 - 0 - 0 - - - org.contikios.cooja.plugins.LogListener - - - - - - 683 - 2 - 550 - 12 - 417 - - - org.contikios.cooja.plugins.Visualizer - - org.contikios.cooja.plugins.skins.IDVisualizerSkin - org.contikios.cooja.plugins.skins.AddressVisualizerSkin - org.contikios.cooja.plugins.skins.UDGMVisualizerSkin - org.contikios.cooja.plugins.skins.GridVisualizerSkin - org.contikios.cooja.plugins.skins.MoteTypeVisualizerSkin - 6.1185311939665725 0.0 0.0 6.1185311939665725 -264.82328143448046 -341.0405575126179 - - 250 - 3 - 183 - 6 - 214 - - - org.contikios.cooja.plugins.ScriptRunner - - - true - - 572 - 1 - 552 - 704 - 417 - - - org.contikios.cooja.plugins.RadioLogger - - 183 - - false - false - - - 1008 - 4 - 406 - 261 - 7 - - - + + + [APPS_DIR]/mrm + [APPS_DIR]/mspsim + [APPS_DIR]/avrora + [APPS_DIR]/serial_socket + [APPS_DIR]/collect-view + [APPS_DIR]/powertracker + + My simulation + generated + 1000000 + + org.contikios.cooja.radiomediums.UDGM + 50.0 + 100.0 + 1.0 + 1.0 + + + 40000 + + + org.contikios.cooja.mspmote.SkyMoteType + sky1 + UDP client + [CONTIKI_DIR]/examples/udp-ipv6/udp-client.c + make clean TARGET=sky +make udp-client.sky TARGET=sky DEFINES=UDP_CONNECTION_ADDR=fe80::212:7402:2:202,SICSLOWPAN_CONF_FRAG=1,SEND_TOO_LARGE_PACKET_TO_TEST_FRAGMENTATION=1 + [CONTIKI_DIR]/examples/udp-ipv6/udp-client.sky + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.interfaces.IPAddress + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + org.contikios.cooja.mspmote.interfaces.MspClock + org.contikios.cooja.mspmote.interfaces.MspMoteID + org.contikios.cooja.mspmote.interfaces.SkyButton + org.contikios.cooja.mspmote.interfaces.SkyFlash + org.contikios.cooja.mspmote.interfaces.SkyCoffeeFilesystem + org.contikios.cooja.mspmote.interfaces.Msp802154Radio + org.contikios.cooja.mspmote.interfaces.MspSerial + org.contikios.cooja.mspmote.interfaces.SkyLED + org.contikios.cooja.mspmote.interfaces.MspDebugOutput + org.contikios.cooja.mspmote.interfaces.SkyTemperature + + + org.contikios.cooja.mspmote.SkyMoteType + sky2 + UDP server + [CONTIKI_DIR]/examples/udp-ipv6/udp-server.c + make udp-server.sky TARGET=sky DEFINES=SICSLOWPAN_CONF_FRAG=1 + [CONTIKI_DIR]/examples/udp-ipv6/udp-server.sky + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.interfaces.IPAddress + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + org.contikios.cooja.mspmote.interfaces.MspClock + org.contikios.cooja.mspmote.interfaces.MspMoteID + org.contikios.cooja.mspmote.interfaces.SkyButton + org.contikios.cooja.mspmote.interfaces.SkyFlash + org.contikios.cooja.mspmote.interfaces.SkyCoffeeFilesystem + org.contikios.cooja.mspmote.interfaces.Msp802154Radio + org.contikios.cooja.mspmote.interfaces.MspSerial + org.contikios.cooja.mspmote.interfaces.SkyLED + org.contikios.cooja.mspmote.interfaces.MspDebugOutput + org.contikios.cooja.mspmote.interfaces.SkyTemperature + + + + + org.contikios.cooja.interfaces.Position + 56.49442624080769 + 69.16564756567392 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 1 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 70.13661699393737 + 61.114518596613784 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 2 + + sky2 + + + + org.contikios.cooja.plugins.SimControl + 248 + 0 + 200 + 0 + 0 + + + org.contikios.cooja.plugins.LogListener + + + + + + 683 + 2 + 550 + 12 + 417 + + + org.contikios.cooja.plugins.Visualizer + + org.contikios.cooja.plugins.skins.IDVisualizerSkin + org.contikios.cooja.plugins.skins.AddressVisualizerSkin + org.contikios.cooja.plugins.skins.UDGMVisualizerSkin + org.contikios.cooja.plugins.skins.GridVisualizerSkin + org.contikios.cooja.plugins.skins.MoteTypeVisualizerSkin + 6.1185311939665725 0.0 0.0 6.1185311939665725 -264.82328143448046 -341.0405575126179 + + 250 + 3 + 183 + 6 + 214 + + + org.contikios.cooja.plugins.ScriptRunner + + + true + + 572 + 1 + 552 + 704 + 417 + + + org.contikios.cooja.plugins.RadioLogger + + 183 + + false + false + + + 1008 + 4 + 406 + 261 + 7 + + + diff --git a/regression-tests/12-rpl/01-rpl-up-route.csc b/regression-tests/12-rpl/01-rpl-up-route.csc index bcefd4128..5af9d8857 100644 --- a/regression-tests/12-rpl/01-rpl-up-route.csc +++ b/regression-tests/12-rpl/01-rpl-up-route.csc @@ -1,346 +1,346 @@ - - - [APPS_DIR]/mrm - [APPS_DIR]/mspsim - [APPS_DIR]/avrora - [APPS_DIR]/serial_socket - [APPS_DIR]/collect-view - [APPS_DIR]/powertracker - - My simulation - 123456 - 1000000 - - org.contikios.cooja.radiomediums.UDGM - 50.0 - 50.0 - 1.0 - 1.0 - - - 40000 - - - org.contikios.cooja.contikimote.ContikiMoteType - mtype488 - Sender - [CONTIKI_DIR]/regression-tests/12-rpl/code/sender-node.c - make TARGET=cooja clean -make sender-node.cooja TARGET=cooja - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.Battery - org.contikios.cooja.contikimote.interfaces.ContikiVib - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - org.contikios.cooja.contikimote.interfaces.ContikiRS232 - org.contikios.cooja.contikimote.interfaces.ContikiBeeper - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.contikimote.interfaces.ContikiIPAddress - org.contikios.cooja.contikimote.interfaces.ContikiRadio - org.contikios.cooja.contikimote.interfaces.ContikiButton - org.contikios.cooja.contikimote.interfaces.ContikiPIR - org.contikios.cooja.contikimote.interfaces.ContikiClock - org.contikios.cooja.contikimote.interfaces.ContikiLED - org.contikios.cooja.contikimote.interfaces.ContikiCFS - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - false - - - org.contikios.cooja.contikimote.ContikiMoteType - mtype32 - RPL root - [CONTIKI_DIR]/regression-tests/12-rpl/code/root-node.c - make TARGET=cooja clean -make root-node.cooja TARGET=cooja - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.Battery - org.contikios.cooja.contikimote.interfaces.ContikiVib - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - org.contikios.cooja.contikimote.interfaces.ContikiRS232 - org.contikios.cooja.contikimote.interfaces.ContikiBeeper - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.contikimote.interfaces.ContikiIPAddress - org.contikios.cooja.contikimote.interfaces.ContikiRadio - org.contikios.cooja.contikimote.interfaces.ContikiButton - org.contikios.cooja.contikimote.interfaces.ContikiPIR - org.contikios.cooja.contikimote.interfaces.ContikiClock - org.contikios.cooja.contikimote.interfaces.ContikiLED - org.contikios.cooja.contikimote.interfaces.ContikiCFS - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - false - - - org.contikios.cooja.contikimote.ContikiMoteType - mtype352 - Receiver - [CONTIKI_DIR]/regression-tests/12-rpl/code/receiver-node.c - make TARGET=cooja clean -make receiver-node.cooja TARGET=cooja - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.Battery - org.contikios.cooja.contikimote.interfaces.ContikiVib - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - org.contikios.cooja.contikimote.interfaces.ContikiRS232 - org.contikios.cooja.contikimote.interfaces.ContikiBeeper - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.contikimote.interfaces.ContikiIPAddress - org.contikios.cooja.contikimote.interfaces.ContikiRadio - org.contikios.cooja.contikimote.interfaces.ContikiButton - org.contikios.cooja.contikimote.interfaces.ContikiPIR - org.contikios.cooja.contikimote.interfaces.ContikiClock - org.contikios.cooja.contikimote.interfaces.ContikiLED - org.contikios.cooja.contikimote.interfaces.ContikiCFS - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - false - - - - org.contikios.cooja.interfaces.Position - 6.9596575829049145 - -25.866060090958513 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 1 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype352 - - - - org.contikios.cooja.interfaces.Position - 132.8019872469463 - 146.1533406452311 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 2 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype488 - - - - org.contikios.cooja.interfaces.Position - 0.026556260457749753 - 39.54055615854325 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 4 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype352 - - - - org.contikios.cooja.interfaces.Position - 95.52021598473031 - 148.11553913271615 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 5 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype352 - - - - org.contikios.cooja.interfaces.Position - 62.81690785997944 - 127.1854219328756 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 6 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype352 - - - - org.contikios.cooja.interfaces.Position - 32.07579822271361 - 102.33090775806494 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 7 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype352 - - - - org.contikios.cooja.interfaces.Position - 5.913151722912886 - 73.55199660828417 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 8 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype352 - - - - org.contikios.cooja.interfaces.Position - 0.0 - 0.0 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 3 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype32 - - - - org.contikios.cooja.plugins.SimControl - 280 - 2 - 160 - 400 - 0 - - - org.contikios.cooja.plugins.Visualizer - - org.contikios.cooja.plugins.skins.IDVisualizerSkin - org.contikios.cooja.plugins.skins.UDGMVisualizerSkin - org.contikios.cooja.plugins.skins.GridVisualizerSkin - org.contikios.cooja.plugins.skins.MoteTypeVisualizerSkin - 0.9555608221893928 0.0 0.0 0.9555608221893928 177.34962387792274 139.71659364731656 - - 400 - 1 - 400 - 1 - 1 - - - org.contikios.cooja.plugins.LogListener - - - - - - 1184 - 3 - 240 - 402 - 162 - - - org.contikios.cooja.plugins.Notes - - Enter notes here - true - - 904 - 4 - 160 - 680 - 0 - - - org.contikios.cooja.plugins.ScriptRunner - - - true - - 962 - 0 - 596 - 603 - 43 - - - + + + [APPS_DIR]/mrm + [APPS_DIR]/mspsim + [APPS_DIR]/avrora + [APPS_DIR]/serial_socket + [APPS_DIR]/collect-view + [APPS_DIR]/powertracker + + My simulation + 123456 + 1000000 + + org.contikios.cooja.radiomediums.UDGM + 50.0 + 50.0 + 1.0 + 1.0 + + + 40000 + + + org.contikios.cooja.contikimote.ContikiMoteType + mtype488 + Sender + [CONTIKI_DIR]/regression-tests/12-rpl/code/sender-node.c + make TARGET=cooja clean +make sender-node.cooja TARGET=cooja + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.Battery + org.contikios.cooja.contikimote.interfaces.ContikiVib + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + org.contikios.cooja.contikimote.interfaces.ContikiRS232 + org.contikios.cooja.contikimote.interfaces.ContikiBeeper + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.contikimote.interfaces.ContikiIPAddress + org.contikios.cooja.contikimote.interfaces.ContikiRadio + org.contikios.cooja.contikimote.interfaces.ContikiButton + org.contikios.cooja.contikimote.interfaces.ContikiPIR + org.contikios.cooja.contikimote.interfaces.ContikiClock + org.contikios.cooja.contikimote.interfaces.ContikiLED + org.contikios.cooja.contikimote.interfaces.ContikiCFS + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + false + + + org.contikios.cooja.contikimote.ContikiMoteType + mtype32 + RPL root + [CONTIKI_DIR]/regression-tests/12-rpl/code/root-node.c + make TARGET=cooja clean +make root-node.cooja TARGET=cooja + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.Battery + org.contikios.cooja.contikimote.interfaces.ContikiVib + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + org.contikios.cooja.contikimote.interfaces.ContikiRS232 + org.contikios.cooja.contikimote.interfaces.ContikiBeeper + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.contikimote.interfaces.ContikiIPAddress + org.contikios.cooja.contikimote.interfaces.ContikiRadio + org.contikios.cooja.contikimote.interfaces.ContikiButton + org.contikios.cooja.contikimote.interfaces.ContikiPIR + org.contikios.cooja.contikimote.interfaces.ContikiClock + org.contikios.cooja.contikimote.interfaces.ContikiLED + org.contikios.cooja.contikimote.interfaces.ContikiCFS + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + false + + + org.contikios.cooja.contikimote.ContikiMoteType + mtype352 + Receiver + [CONTIKI_DIR]/regression-tests/12-rpl/code/receiver-node.c + make TARGET=cooja clean +make receiver-node.cooja TARGET=cooja + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.Battery + org.contikios.cooja.contikimote.interfaces.ContikiVib + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + org.contikios.cooja.contikimote.interfaces.ContikiRS232 + org.contikios.cooja.contikimote.interfaces.ContikiBeeper + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.contikimote.interfaces.ContikiIPAddress + org.contikios.cooja.contikimote.interfaces.ContikiRadio + org.contikios.cooja.contikimote.interfaces.ContikiButton + org.contikios.cooja.contikimote.interfaces.ContikiPIR + org.contikios.cooja.contikimote.interfaces.ContikiClock + org.contikios.cooja.contikimote.interfaces.ContikiLED + org.contikios.cooja.contikimote.interfaces.ContikiCFS + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + false + + + + org.contikios.cooja.interfaces.Position + 6.9596575829049145 + -25.866060090958513 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 1 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype352 + + + + org.contikios.cooja.interfaces.Position + 132.8019872469463 + 146.1533406452311 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 2 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype488 + + + + org.contikios.cooja.interfaces.Position + 0.026556260457749753 + 39.54055615854325 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 4 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype352 + + + + org.contikios.cooja.interfaces.Position + 95.52021598473031 + 148.11553913271615 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 5 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype352 + + + + org.contikios.cooja.interfaces.Position + 62.81690785997944 + 127.1854219328756 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 6 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype352 + + + + org.contikios.cooja.interfaces.Position + 32.07579822271361 + 102.33090775806494 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 7 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype352 + + + + org.contikios.cooja.interfaces.Position + 5.913151722912886 + 73.55199660828417 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 8 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype352 + + + + org.contikios.cooja.interfaces.Position + 0.0 + 0.0 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 3 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype32 + + + + org.contikios.cooja.plugins.SimControl + 280 + 2 + 160 + 400 + 0 + + + org.contikios.cooja.plugins.Visualizer + + org.contikios.cooja.plugins.skins.IDVisualizerSkin + org.contikios.cooja.plugins.skins.UDGMVisualizerSkin + org.contikios.cooja.plugins.skins.GridVisualizerSkin + org.contikios.cooja.plugins.skins.MoteTypeVisualizerSkin + 0.9555608221893928 0.0 0.0 0.9555608221893928 177.34962387792274 139.71659364731656 + + 400 + 1 + 400 + 1 + 1 + + + org.contikios.cooja.plugins.LogListener + + + + + + 1184 + 3 + 240 + 402 + 162 + + + org.contikios.cooja.plugins.Notes + + Enter notes here + true + + 904 + 4 + 160 + 680 + 0 + + + org.contikios.cooja.plugins.ScriptRunner + + + true + + 962 + 0 + 596 + 603 + 43 + + + diff --git a/regression-tests/12-rpl/02-rpl-root-reboot.csc b/regression-tests/12-rpl/02-rpl-root-reboot.csc index 2ab456726..ce9f3cee0 100644 --- a/regression-tests/12-rpl/02-rpl-root-reboot.csc +++ b/regression-tests/12-rpl/02-rpl-root-reboot.csc @@ -1,346 +1,346 @@ - - - [APPS_DIR]/mrm - [APPS_DIR]/mspsim - [APPS_DIR]/avrora - [APPS_DIR]/serial_socket - [APPS_DIR]/collect-view - [APPS_DIR]/powertracker - - My simulation - 123456 - 1000000 - - org.contikios.cooja.radiomediums.UDGM - 50.0 - 50.0 - 1.0 - 1.0 - - - 40000 - - - org.contikios.cooja.contikimote.ContikiMoteType - mtype958 - Sender - [CONTIKI_DIR]/regression-tests/12-rpl/code/sender-node.c - make TARGET=cooja clean -make sender-node.cooja TARGET=cooja - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.Battery - org.contikios.cooja.contikimote.interfaces.ContikiVib - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - org.contikios.cooja.contikimote.interfaces.ContikiRS232 - org.contikios.cooja.contikimote.interfaces.ContikiBeeper - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.contikimote.interfaces.ContikiIPAddress - org.contikios.cooja.contikimote.interfaces.ContikiRadio - org.contikios.cooja.contikimote.interfaces.ContikiButton - org.contikios.cooja.contikimote.interfaces.ContikiPIR - org.contikios.cooja.contikimote.interfaces.ContikiClock - org.contikios.cooja.contikimote.interfaces.ContikiLED - org.contikios.cooja.contikimote.interfaces.ContikiCFS - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - false - - - org.contikios.cooja.contikimote.ContikiMoteType - mtype837 - RPL root - [CONTIKI_DIR]/regression-tests/12-rpl/code/root-node.c - make TARGET=cooja clean -make root-node.cooja TARGET=cooja - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.Battery - org.contikios.cooja.contikimote.interfaces.ContikiVib - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - org.contikios.cooja.contikimote.interfaces.ContikiRS232 - org.contikios.cooja.contikimote.interfaces.ContikiBeeper - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.contikimote.interfaces.ContikiIPAddress - org.contikios.cooja.contikimote.interfaces.ContikiRadio - org.contikios.cooja.contikimote.interfaces.ContikiButton - org.contikios.cooja.contikimote.interfaces.ContikiPIR - org.contikios.cooja.contikimote.interfaces.ContikiClock - org.contikios.cooja.contikimote.interfaces.ContikiLED - org.contikios.cooja.contikimote.interfaces.ContikiCFS - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - false - - - org.contikios.cooja.contikimote.ContikiMoteType - mtype358 - Receiver - [CONTIKI_DIR]/regression-tests/12-rpl/code/receiver-node.c - make TARGET=cooja clean -make receiver-node.cooja TARGET=cooja - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.Battery - org.contikios.cooja.contikimote.interfaces.ContikiVib - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - org.contikios.cooja.contikimote.interfaces.ContikiRS232 - org.contikios.cooja.contikimote.interfaces.ContikiBeeper - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.contikimote.interfaces.ContikiIPAddress - org.contikios.cooja.contikimote.interfaces.ContikiRadio - org.contikios.cooja.contikimote.interfaces.ContikiButton - org.contikios.cooja.contikimote.interfaces.ContikiPIR - org.contikios.cooja.contikimote.interfaces.ContikiClock - org.contikios.cooja.contikimote.interfaces.ContikiLED - org.contikios.cooja.contikimote.interfaces.ContikiCFS - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - false - - - - org.contikios.cooja.interfaces.Position - -22.5728586847096 - 123.9358664968653 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 1 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype358 - - - - org.contikios.cooja.interfaces.Position - 116.13379149678028 - 88.36698920455684 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 2 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype958 - - - - org.contikios.cooja.interfaces.Position - -1.39303771455413 - 100.21446701029119 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 4 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype358 - - - - org.contikios.cooja.interfaces.Position - 95.25095618820441 - 63.14998053005015 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 5 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype358 - - - - org.contikios.cooja.interfaces.Position - 66.09378990830604 - 38.32698761608261 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 6 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype358 - - - - org.contikios.cooja.interfaces.Position - 29.05630841762433 - 30.840688165838436 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 7 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype358 - - - - org.contikios.cooja.interfaces.Position - 10.931583432822638 - 69.848248459216 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 8 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype358 - - - - org.contikios.cooja.interfaces.Position - 0.0 - 0.0 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 3 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype837 - - - - org.contikios.cooja.plugins.SimControl - 280 - 0 - 160 - 400 - 0 - - - org.contikios.cooja.plugins.Visualizer - - org.contikios.cooja.plugins.skins.IDVisualizerSkin - org.contikios.cooja.plugins.skins.UDGMVisualizerSkin - org.contikios.cooja.plugins.skins.GridVisualizerSkin - org.contikios.cooja.plugins.skins.MoteTypeVisualizerSkin - 2.5379695437350276 0.0 0.0 2.5379695437350276 75.2726010197627 15.727272727272757 - - 400 - 2 - 400 - 1 - 1 - - - org.contikios.cooja.plugins.LogListener - - - - - - 1184 - 3 - 240 - 402 - 162 - - - org.contikios.cooja.plugins.Notes - - Enter notes here - true - - 904 - 4 - 160 - 680 - 0 - - - org.contikios.cooja.plugins.ScriptRunner - - - true - - 962 - 1 - 596 - 603 - 43 - - - + + + [APPS_DIR]/mrm + [APPS_DIR]/mspsim + [APPS_DIR]/avrora + [APPS_DIR]/serial_socket + [APPS_DIR]/collect-view + [APPS_DIR]/powertracker + + My simulation + 123456 + 1000000 + + org.contikios.cooja.radiomediums.UDGM + 50.0 + 50.0 + 1.0 + 1.0 + + + 40000 + + + org.contikios.cooja.contikimote.ContikiMoteType + mtype958 + Sender + [CONTIKI_DIR]/regression-tests/12-rpl/code/sender-node.c + make TARGET=cooja clean +make sender-node.cooja TARGET=cooja + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.Battery + org.contikios.cooja.contikimote.interfaces.ContikiVib + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + org.contikios.cooja.contikimote.interfaces.ContikiRS232 + org.contikios.cooja.contikimote.interfaces.ContikiBeeper + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.contikimote.interfaces.ContikiIPAddress + org.contikios.cooja.contikimote.interfaces.ContikiRadio + org.contikios.cooja.contikimote.interfaces.ContikiButton + org.contikios.cooja.contikimote.interfaces.ContikiPIR + org.contikios.cooja.contikimote.interfaces.ContikiClock + org.contikios.cooja.contikimote.interfaces.ContikiLED + org.contikios.cooja.contikimote.interfaces.ContikiCFS + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + false + + + org.contikios.cooja.contikimote.ContikiMoteType + mtype837 + RPL root + [CONTIKI_DIR]/regression-tests/12-rpl/code/root-node.c + make TARGET=cooja clean +make root-node.cooja TARGET=cooja + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.Battery + org.contikios.cooja.contikimote.interfaces.ContikiVib + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + org.contikios.cooja.contikimote.interfaces.ContikiRS232 + org.contikios.cooja.contikimote.interfaces.ContikiBeeper + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.contikimote.interfaces.ContikiIPAddress + org.contikios.cooja.contikimote.interfaces.ContikiRadio + org.contikios.cooja.contikimote.interfaces.ContikiButton + org.contikios.cooja.contikimote.interfaces.ContikiPIR + org.contikios.cooja.contikimote.interfaces.ContikiClock + org.contikios.cooja.contikimote.interfaces.ContikiLED + org.contikios.cooja.contikimote.interfaces.ContikiCFS + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + false + + + org.contikios.cooja.contikimote.ContikiMoteType + mtype358 + Receiver + [CONTIKI_DIR]/regression-tests/12-rpl/code/receiver-node.c + make TARGET=cooja clean +make receiver-node.cooja TARGET=cooja + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.Battery + org.contikios.cooja.contikimote.interfaces.ContikiVib + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + org.contikios.cooja.contikimote.interfaces.ContikiRS232 + org.contikios.cooja.contikimote.interfaces.ContikiBeeper + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.contikimote.interfaces.ContikiIPAddress + org.contikios.cooja.contikimote.interfaces.ContikiRadio + org.contikios.cooja.contikimote.interfaces.ContikiButton + org.contikios.cooja.contikimote.interfaces.ContikiPIR + org.contikios.cooja.contikimote.interfaces.ContikiClock + org.contikios.cooja.contikimote.interfaces.ContikiLED + org.contikios.cooja.contikimote.interfaces.ContikiCFS + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + false + + + + org.contikios.cooja.interfaces.Position + -22.5728586847096 + 123.9358664968653 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 1 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype358 + + + + org.contikios.cooja.interfaces.Position + 116.13379149678028 + 88.36698920455684 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 2 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype958 + + + + org.contikios.cooja.interfaces.Position + -1.39303771455413 + 100.21446701029119 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 4 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype358 + + + + org.contikios.cooja.interfaces.Position + 95.25095618820441 + 63.14998053005015 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 5 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype358 + + + + org.contikios.cooja.interfaces.Position + 66.09378990830604 + 38.32698761608261 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 6 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype358 + + + + org.contikios.cooja.interfaces.Position + 29.05630841762433 + 30.840688165838436 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 7 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype358 + + + + org.contikios.cooja.interfaces.Position + 10.931583432822638 + 69.848248459216 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 8 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype358 + + + + org.contikios.cooja.interfaces.Position + 0.0 + 0.0 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 3 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype837 + + + + org.contikios.cooja.plugins.SimControl + 280 + 0 + 160 + 400 + 0 + + + org.contikios.cooja.plugins.Visualizer + + org.contikios.cooja.plugins.skins.IDVisualizerSkin + org.contikios.cooja.plugins.skins.UDGMVisualizerSkin + org.contikios.cooja.plugins.skins.GridVisualizerSkin + org.contikios.cooja.plugins.skins.MoteTypeVisualizerSkin + 2.5379695437350276 0.0 0.0 2.5379695437350276 75.2726010197627 15.727272727272757 + + 400 + 2 + 400 + 1 + 1 + + + org.contikios.cooja.plugins.LogListener + + + + + + 1184 + 3 + 240 + 402 + 162 + + + org.contikios.cooja.plugins.Notes + + Enter notes here + true + + 904 + 4 + 160 + 680 + 0 + + + org.contikios.cooja.plugins.ScriptRunner + + + true + + 962 + 1 + 596 + 603 + 43 + + + diff --git a/regression-tests/12-rpl/03-rpl-28-hours.csc b/regression-tests/12-rpl/03-rpl-28-hours.csc index 383b636fa..a8cefd469 100644 --- a/regression-tests/12-rpl/03-rpl-28-hours.csc +++ b/regression-tests/12-rpl/03-rpl-28-hours.csc @@ -1,295 +1,295 @@ - - - [APPS_DIR]/mrm - [APPS_DIR]/mspsim - [APPS_DIR]/avrora - [APPS_DIR]/serial_socket - [APPS_DIR]/collect-view - [APPS_DIR]/powertracker - - My simulation - 123456 - 1000000 - - org.contikios.cooja.radiomediums.UDGM - 50.0 - 50.0 - 1.0 - 1.0 - - - 40000 - - - org.contikios.cooja.contikimote.ContikiMoteType - mtype110 - Sender - [CONTIKI_DIR]/regression-tests/12-rpl/code/sender-node.c - make TARGET=cooja clean -make sender-node.cooja TARGET=cooja - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.Battery - org.contikios.cooja.contikimote.interfaces.ContikiVib - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - org.contikios.cooja.contikimote.interfaces.ContikiRS232 - org.contikios.cooja.contikimote.interfaces.ContikiBeeper - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.contikimote.interfaces.ContikiIPAddress - org.contikios.cooja.contikimote.interfaces.ContikiRadio - org.contikios.cooja.contikimote.interfaces.ContikiButton - org.contikios.cooja.contikimote.interfaces.ContikiPIR - org.contikios.cooja.contikimote.interfaces.ContikiClock - org.contikios.cooja.contikimote.interfaces.ContikiLED - org.contikios.cooja.contikimote.interfaces.ContikiCFS - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - false - - - org.contikios.cooja.contikimote.ContikiMoteType - mtype792 - RPL root - [CONTIKI_DIR]/regression-tests/12-rpl/code/root-node.c - make TARGET=cooja clean -make root-node.cooja TARGET=cooja - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.Battery - org.contikios.cooja.contikimote.interfaces.ContikiVib - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - org.contikios.cooja.contikimote.interfaces.ContikiRS232 - org.contikios.cooja.contikimote.interfaces.ContikiBeeper - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.contikimote.interfaces.ContikiIPAddress - org.contikios.cooja.contikimote.interfaces.ContikiRadio - org.contikios.cooja.contikimote.interfaces.ContikiButton - org.contikios.cooja.contikimote.interfaces.ContikiPIR - org.contikios.cooja.contikimote.interfaces.ContikiClock - org.contikios.cooja.contikimote.interfaces.ContikiLED - org.contikios.cooja.contikimote.interfaces.ContikiCFS - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - false - - - org.contikios.cooja.contikimote.ContikiMoteType - mtype964 - Receiver - [CONTIKI_DIR]/regression-tests/12-rpl/code/receiver-node.c - make TARGET=cooja clean -make receiver-node.cooja TARGET=cooja - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.Battery - org.contikios.cooja.contikimote.interfaces.ContikiVib - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - org.contikios.cooja.contikimote.interfaces.ContikiRS232 - org.contikios.cooja.contikimote.interfaces.ContikiBeeper - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.contikimote.interfaces.ContikiIPAddress - org.contikios.cooja.contikimote.interfaces.ContikiRadio - org.contikios.cooja.contikimote.interfaces.ContikiButton - org.contikios.cooja.contikimote.interfaces.ContikiPIR - org.contikios.cooja.contikimote.interfaces.ContikiClock - org.contikios.cooja.contikimote.interfaces.ContikiLED - org.contikios.cooja.contikimote.interfaces.ContikiCFS - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - false - - - - org.contikios.cooja.interfaces.Position - 7.772906112657773 - 86.396910401861 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 1 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype964 - - - - org.contikios.cooja.interfaces.Position - 75.54361692539452 - 14.292026223193414 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 2 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype110 - - - - org.contikios.cooja.interfaces.Position - 47.962513687652844 - 7.199742533488408 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 6 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype964 - - - - org.contikios.cooja.interfaces.Position - 1.8626697045702818 - 47.783365869022624 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 8 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype964 - - - - org.contikios.cooja.interfaces.Position - 0.0 - 0.0 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 3 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype792 - - - - org.contikios.cooja.plugins.SimControl - 280 - 0 - 160 - 400 - 0 - - - org.contikios.cooja.plugins.Visualizer - - org.contikios.cooja.plugins.skins.IDVisualizerSkin - org.contikios.cooja.plugins.skins.UDGMVisualizerSkin - org.contikios.cooja.plugins.skins.GridVisualizerSkin - org.contikios.cooja.plugins.skins.MoteTypeVisualizerSkin - 2.5379695437350276 0.0 0.0 2.5379695437350276 78.27260101976275 40.72727272727276 - - 400 - 2 - 400 - 1 - 1 - - - org.contikios.cooja.plugins.LogListener - - - - - - 1184 - 3 - 240 - 402 - 162 - - - org.contikios.cooja.plugins.Notes - - Enter notes here - true - - 904 - 4 - 160 - 680 - 0 - - - org.contikios.cooja.plugins.ScriptRunner - - - true - - 962 - 1 - 596 - 603 - 43 - - - + + + [APPS_DIR]/mrm + [APPS_DIR]/mspsim + [APPS_DIR]/avrora + [APPS_DIR]/serial_socket + [APPS_DIR]/collect-view + [APPS_DIR]/powertracker + + My simulation + 123456 + 1000000 + + org.contikios.cooja.radiomediums.UDGM + 50.0 + 50.0 + 1.0 + 1.0 + + + 40000 + + + org.contikios.cooja.contikimote.ContikiMoteType + mtype110 + Sender + [CONTIKI_DIR]/regression-tests/12-rpl/code/sender-node.c + make TARGET=cooja clean +make sender-node.cooja TARGET=cooja + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.Battery + org.contikios.cooja.contikimote.interfaces.ContikiVib + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + org.contikios.cooja.contikimote.interfaces.ContikiRS232 + org.contikios.cooja.contikimote.interfaces.ContikiBeeper + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.contikimote.interfaces.ContikiIPAddress + org.contikios.cooja.contikimote.interfaces.ContikiRadio + org.contikios.cooja.contikimote.interfaces.ContikiButton + org.contikios.cooja.contikimote.interfaces.ContikiPIR + org.contikios.cooja.contikimote.interfaces.ContikiClock + org.contikios.cooja.contikimote.interfaces.ContikiLED + org.contikios.cooja.contikimote.interfaces.ContikiCFS + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + false + + + org.contikios.cooja.contikimote.ContikiMoteType + mtype792 + RPL root + [CONTIKI_DIR]/regression-tests/12-rpl/code/root-node.c + make TARGET=cooja clean +make root-node.cooja TARGET=cooja + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.Battery + org.contikios.cooja.contikimote.interfaces.ContikiVib + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + org.contikios.cooja.contikimote.interfaces.ContikiRS232 + org.contikios.cooja.contikimote.interfaces.ContikiBeeper + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.contikimote.interfaces.ContikiIPAddress + org.contikios.cooja.contikimote.interfaces.ContikiRadio + org.contikios.cooja.contikimote.interfaces.ContikiButton + org.contikios.cooja.contikimote.interfaces.ContikiPIR + org.contikios.cooja.contikimote.interfaces.ContikiClock + org.contikios.cooja.contikimote.interfaces.ContikiLED + org.contikios.cooja.contikimote.interfaces.ContikiCFS + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + false + + + org.contikios.cooja.contikimote.ContikiMoteType + mtype964 + Receiver + [CONTIKI_DIR]/regression-tests/12-rpl/code/receiver-node.c + make TARGET=cooja clean +make receiver-node.cooja TARGET=cooja + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.Battery + org.contikios.cooja.contikimote.interfaces.ContikiVib + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + org.contikios.cooja.contikimote.interfaces.ContikiRS232 + org.contikios.cooja.contikimote.interfaces.ContikiBeeper + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.contikimote.interfaces.ContikiIPAddress + org.contikios.cooja.contikimote.interfaces.ContikiRadio + org.contikios.cooja.contikimote.interfaces.ContikiButton + org.contikios.cooja.contikimote.interfaces.ContikiPIR + org.contikios.cooja.contikimote.interfaces.ContikiClock + org.contikios.cooja.contikimote.interfaces.ContikiLED + org.contikios.cooja.contikimote.interfaces.ContikiCFS + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + false + + + + org.contikios.cooja.interfaces.Position + 7.772906112657773 + 86.396910401861 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 1 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype964 + + + + org.contikios.cooja.interfaces.Position + 75.54361692539452 + 14.292026223193414 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 2 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype110 + + + + org.contikios.cooja.interfaces.Position + 47.962513687652844 + 7.199742533488408 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 6 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype964 + + + + org.contikios.cooja.interfaces.Position + 1.8626697045702818 + 47.783365869022624 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 8 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype964 + + + + org.contikios.cooja.interfaces.Position + 0.0 + 0.0 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 3 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype792 + + + + org.contikios.cooja.plugins.SimControl + 280 + 0 + 160 + 400 + 0 + + + org.contikios.cooja.plugins.Visualizer + + org.contikios.cooja.plugins.skins.IDVisualizerSkin + org.contikios.cooja.plugins.skins.UDGMVisualizerSkin + org.contikios.cooja.plugins.skins.GridVisualizerSkin + org.contikios.cooja.plugins.skins.MoteTypeVisualizerSkin + 2.5379695437350276 0.0 0.0 2.5379695437350276 78.27260101976275 40.72727272727276 + + 400 + 2 + 400 + 1 + 1 + + + org.contikios.cooja.plugins.LogListener + + + + + + 1184 + 3 + 240 + 402 + 162 + + + org.contikios.cooja.plugins.Notes + + Enter notes here + true + + 904 + 4 + 160 + 680 + 0 + + + org.contikios.cooja.plugins.ScriptRunner + + + true + + 962 + 1 + 596 + 603 + 43 + + + diff --git a/regression-tests/12-rpl/04-rpl-large-network.csc b/regression-tests/12-rpl/04-rpl-large-network.csc index 30944240a..8b3ca0d8a 100644 --- a/regression-tests/12-rpl/04-rpl-large-network.csc +++ b/regression-tests/12-rpl/04-rpl-large-network.csc @@ -1,7061 +1,7061 @@ - - - [APPS_DIR]/mrm - [APPS_DIR]/mspsim - [APPS_DIR]/avrora - [APPS_DIR]/serial_socket - [APPS_DIR]/collect-view - [APPS_DIR]/powertracker - - My simulation - 123456 - 1000000 - - org.contikios.cooja.radiomediums.UDGM - 50.0 - 50.0 - 1.0 - 1.0 - - - 40000 - - - org.contikios.cooja.contikimote.ContikiMoteType - mtype710 - Sender - [CONTIKI_DIR]/regression-tests/12-rpl/code/sender-node.c - make TARGET=cooja clean -make sender-node.cooja TARGET=cooja - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.Battery - org.contikios.cooja.contikimote.interfaces.ContikiVib - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - org.contikios.cooja.contikimote.interfaces.ContikiRS232 - org.contikios.cooja.contikimote.interfaces.ContikiBeeper - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.contikimote.interfaces.ContikiIPAddress - org.contikios.cooja.contikimote.interfaces.ContikiRadio - org.contikios.cooja.contikimote.interfaces.ContikiButton - org.contikios.cooja.contikimote.interfaces.ContikiPIR - org.contikios.cooja.contikimote.interfaces.ContikiClock - org.contikios.cooja.contikimote.interfaces.ContikiLED - org.contikios.cooja.contikimote.interfaces.ContikiCFS - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - false - - - org.contikios.cooja.contikimote.ContikiMoteType - mtype709 - RPL root - [CONTIKI_DIR]/regression-tests/12-rpl/code/root-node.c - make TARGET=cooja clean -make root-node.cooja TARGET=cooja - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.Battery - org.contikios.cooja.contikimote.interfaces.ContikiVib - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - org.contikios.cooja.contikimote.interfaces.ContikiRS232 - org.contikios.cooja.contikimote.interfaces.ContikiBeeper - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.contikimote.interfaces.ContikiIPAddress - org.contikios.cooja.contikimote.interfaces.ContikiRadio - org.contikios.cooja.contikimote.interfaces.ContikiButton - org.contikios.cooja.contikimote.interfaces.ContikiPIR - org.contikios.cooja.contikimote.interfaces.ContikiClock - org.contikios.cooja.contikimote.interfaces.ContikiLED - org.contikios.cooja.contikimote.interfaces.ContikiCFS - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - false - - - org.contikios.cooja.contikimote.ContikiMoteType - mtype332 - Receiver - [CONTIKI_DIR]/regression-tests/12-rpl/code/receiver-node.c - make TARGET=cooja clean -make receiver-node.cooja TARGET=cooja - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.Battery - org.contikios.cooja.contikimote.interfaces.ContikiVib - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - org.contikios.cooja.contikimote.interfaces.ContikiRS232 - org.contikios.cooja.contikimote.interfaces.ContikiBeeper - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.contikimote.interfaces.ContikiIPAddress - org.contikios.cooja.contikimote.interfaces.ContikiRadio - org.contikios.cooja.contikimote.interfaces.ContikiButton - org.contikios.cooja.contikimote.interfaces.ContikiPIR - org.contikios.cooja.contikimote.interfaces.ContikiClock - org.contikios.cooja.contikimote.interfaces.ContikiLED - org.contikios.cooja.contikimote.interfaces.ContikiCFS - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - false - - - - org.contikios.cooja.interfaces.Position - -15.604889524290883 - -27.272920930192623 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 1 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 218.29521040499824 - 216.70287561143516 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 2 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype710 - - - - org.contikios.cooja.interfaces.Position - 0.0 - 0.0 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 3 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype709 - - - - org.contikios.cooja.interfaces.Position - 27.44274795318258 - 36.980443988209856 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 4 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 185.6055859234863 - 192.99166984979271 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 5 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 7.827315175624361 - 107.95833747378225 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 6 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 82.49199862549197 - 34.72851022020231 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 7 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 35.671428723363064 - 125.82590119075962 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 8 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 33.044376889885754 - 62.443378727185774 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 9 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 152.53659733643553 - 165.87608708149403 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 10 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 22.023077232445942 - 18.41094139254531 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 11 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 41.19368867821842 - 49.201157808285224 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 12 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 114.62128502432532 - 88.58807114217633 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 13 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 61.21405469314478 - 188.6851979777661 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 14 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 104.78326932115709 - 100.84889281105585 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 15 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 90.26861048950052 - 40.550864496421404 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 16 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 137.39112328314076 - 126.5333637365394 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 17 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 14.07616766247768 - 99.85572366133869 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 18 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 192.30563307960443 - 66.83563821262344 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 19 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 129.08253247651874 - 117.20437669309078 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 20 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 21.82717410659969 - 47.523771402541335 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 21 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 35.95102103988239 - 21.74677482276881 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 22 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 61.71108896268191 - 79.91617509627334 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 23 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 16.029809485043288 - 171.05935835280616 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 24 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 138.8418552766128 - 61.418703448852185 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 25 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 151.23299942414673 - 92.41820871538522 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 26 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 197.33157775573343 - 20.6013482653864 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 27 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 121.20762229879878 - 184.81107462083565 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 28 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 102.32432527534694 - 91.9912435435037 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 29 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 88.10909646999544 - 191.21251904898142 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 30 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 72.19774934085703 - 113.58131529956069 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 31 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 53.49967737007204 - 72.45172156882643 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 32 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 172.07186411958625 - 51.47715718716961 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 33 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 185.41983532466634 - 85.60078269414 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 34 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 83.34993971740548 - 193.98111239532744 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 35 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 105.03752362550378 - 131.24078026424087 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 36 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 176.09318670322102 - 41.46760901468247 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 37 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 76.80689915307215 - 47.13815728542057 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 38 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 155.907739287817 - 15.24009422994106 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 39 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 45.992463430523436 - 124.573811024683 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 40 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 159.11361032671832 - 81.65319598335425 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 41 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 41.838657583001314 - 163.47591213471193 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 42 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 25.560001904073125 - 147.48610852243928 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 43 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 139.56489350213488 - 191.15379557180913 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 44 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 105.71342550700061 - 136.09089690661503 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 45 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 122.59378462201298 - 196.22862961645998 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 46 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 147.61372446125088 - 55.314287700435536 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 47 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 77.70218628780312 - 95.59561907133107 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 48 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 71.88244578562713 - 168.57963926907163 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 49 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 6.722298767036894 - 101.09668965729898 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 50 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 62.96680217979964 - 77.66951408660954 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 51 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 162.49011735601982 - 199.07086470932003 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 52 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 87.87526390617558 - 114.39424478293958 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 53 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 74.29230372180815 - 36.995699473573836 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 54 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 77.34619341407321 - 60.070446577058576 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 55 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 76.32695571818826 - 135.82669004433725 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 56 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 68.10326013650814 - 5.04157445893032 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 57 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 95.76993029214962 - 45.046282401332945 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 58 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 79.87963205080952 - 110.7023948653882 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 59 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 195.90349780899223 - 132.38904172009444 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 60 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 80.40108440304007 - 25.86673418569547 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 61 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 52.268877618080744 - 176.12888723955277 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 62 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 40.545541404899765 - 166.9450252729589 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 63 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 10.676184465528205 - 0.9871174057552334 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 64 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 87.35673216830257 - 23.25131234780027 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 65 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 26.745126931691352 - 87.3101256645554 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 66 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 183.2724008541638 - 167.69026002459069 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 67 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 5.934720840855223 - 77.21248812623693 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 68 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 76.49604470599058 - 108.80963795015302 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 69 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 86.10145414955488 - 12.798582653303603 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 70 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 32.435370110193816 - 29.344591306898813 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 71 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 163.72950518161596 - 154.15283820759655 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 72 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 143.96396308843373 - 132.40312602892786 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 73 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 139.20530179839795 - 144.18958011498225 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 74 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 75.22453368236212 - 119.69913560274786 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 75 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 21.83836116635087 - 191.21696522067728 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 76 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 187.94640511976667 - 113.95684826994561 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 77 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 114.61289565250618 - 27.61001303446735 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 78 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 70.83569869750504 - 113.88992677636021 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 79 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 11.616059362048992 - 45.59401384110464 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 80 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 3.4282454263252937 - 35.97653370545284 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 81 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 54.33122057405715 - 1.9759087814547494 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 82 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 69.6612091444155 - 0.45982758130533874 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 83 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 169.98417155202168 - 87.76678058442593 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 84 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 148.98441194234616 - 104.32820155415494 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 85 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 66.23883124891583 - 162.92685536074129 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 86 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 181.6348837921769 - 183.07267240808343 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 87 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 88.9829570206748 - 119.72520333459575 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 88 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 179.1527012143494 - 84.25685075020328 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 89 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 117.82537007493707 - 41.10319533518651 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 90 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 52.611633540398486 - 94.71918054798351 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 91 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 128.22088664324633 - 115.50290142480077 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 92 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 102.53841128002531 - 11.784449645612295 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 93 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 187.69871925603667 - 131.28317666772048 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 94 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 71.13897508938263 - 106.29335632876602 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 95 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 71.2216469861295 - 148.38612859488788 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 96 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 36.152562577928784 - 67.541796718348 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 97 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 118.84793016344604 - 0.49906433835273933 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 98 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 135.20417096106954 - 170.20704631856816 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 99 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 156.082359043526 - 57.62103450217495 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 100 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 180.58695188377737 - 80.75266645775669 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 101 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 38.93889890269273 - 138.60259660238856 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 102 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 159.5172788118917 - 192.24950143209503 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 103 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 154.02096825135868 - 139.67175722659056 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 104 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 38.480826888323904 - 5.502866276505292 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 105 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 27.95908088015704 - 193.85188308665965 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 106 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 198.61700949829074 - 171.1877312716402 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 107 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 106.30468818084609 - 25.058380770654654 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 108 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 40.335672117825624 - 179.59080234641004 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 109 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 22.316357638510897 - 158.94323888090028 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 110 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 99.56281553229194 - 85.64260133077535 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 111 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 60.71556414510035 - 121.53040248649711 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 112 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 27.08600745576586 - 38.17025720346818 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 113 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 147.03642509910586 - 39.51320588416096 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 114 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 180.2031547656297 - 141.5646561330238 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 115 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 73.12314629214424 - 167.80783320779847 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 116 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 167.93567452922767 - 10.060141001139144 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 117 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 163.99198875105768 - 147.48735207074026 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 118 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 154.98654737808127 - 121.17266324007643 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 119 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 57.898499791676386 - 149.3487194893122 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 120 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 64.82082963563904 - 174.0100480348673 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 121 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 114.13623920898752 - 15.754246175503095 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 122 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 0.00848902940355778 - 195.50701335573908 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 123 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 182.81764401709623 - 78.57837811285111 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 124 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 11.462145876504714 - 95.37444120802225 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 125 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 115.5020283241771 - 28.49431396939579 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 126 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 62.463952359877275 - 77.78913013330184 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 127 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 9.766778039117696 - 136.7421944039438 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 128 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 35.320514349220055 - 100.56248258192493 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 129 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 56.26732169234614 - 3.095097140731262 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 130 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 76.90164393617998 - 3.5671096386384216 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 131 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 81.97549075841862 - 13.020422155003475 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 132 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 54.87200208203389 - 77.29445717372947 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 133 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 193.47651032749548 - 144.9357554583657 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 134 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 51.65288193591992 - 126.16687604535504 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 135 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 151.66849746442173 - 158.7699863850836 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 136 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 32.469410974826005 - 113.10993021698361 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 137 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 33.04622512107349 - 25.425445944702794 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 138 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 33.53444748873715 - 112.25721598241579 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 139 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 128.9401580272291 - 100.73482184242926 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 140 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 194.6592727528704 - 102.73664509470841 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 141 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 125.47343036050516 - 106.53155237731285 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 142 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 147.40129296416038 - 12.37607345376115 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 143 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 113.32045045397959 - 126.79285457987103 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 144 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 27.174837677715825 - 66.84349985536826 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 145 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 164.20252670136998 - 51.635539499142524 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 146 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 39.351673884988394 - 65.05462325698123 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 147 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 143.91486202542433 - 171.28435110465497 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 148 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 30.926988343440186 - 130.3647571119649 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 149 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 19.897357003413617 - 22.905473451246785 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 150 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 128.36369031733133 - 170.71462512320227 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 151 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 172.1648617546042 - 184.1928317689217 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 152 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 148.16672573170842 - 107.99684523382686 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 153 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 83.90300186263724 - 169.4761782218257 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 154 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 90.86887922361453 - 142.8036645841288 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 155 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 23.18966921326753 - 69.42635534680753 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 156 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 134.59433377860168 - 37.633119904417796 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 157 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 127.97132285920065 - 158.57917470101572 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 158 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 166.2450456558778 - 108.67197275397042 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 159 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 167.334034200758 - 22.173554305333166 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 160 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 163.54194527237107 - 189.41605447848966 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 161 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 14.863357513573018 - 93.36644051662617 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 162 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 178.4370382798651 - 191.48348446587636 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 163 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 172.96087703915273 - 183.78535300027013 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 164 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 2.45779137738229 - 58.750309492130114 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 165 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 15.730601618735495 - 96.52335072173565 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 166 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 19.890833428932165 - 56.993000152370364 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 167 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 154.69166608840504 - 164.8598339150269 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 168 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 199.77196118880582 - 26.034321005016903 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 169 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 5.216343266336931 - 17.867912968799615 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 170 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 138.71273406283296 - 55.31024592694844 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 171 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 168.21144361519595 - 163.1843284579423 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 172 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 61.82504434646854 - 134.03197926926038 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 173 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 14.007317972338473 - 146.98475859141027 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 174 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 108.44210606040488 - 127.81076428732186 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 175 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 133.41957560864708 - 122.91534078890439 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 176 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 184.89266828168118 - 195.7201293014503 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 177 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 121.10492556426465 - 78.54418709376823 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 178 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 42.05271519544296 - 183.14259881514795 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 179 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 92.12119616387746 - 44.853464007589714 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 180 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 136.44039199596196 - 1.111619893261917 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 181 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 64.37440878278696 - 188.3078368775181 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 182 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 37.774149552594594 - 73.81683900641865 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 183 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 24.618589360988175 - 164.89708336795567 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 184 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 152.5950797265111 - 140.96774353352123 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 185 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 37.96933854365052 - 131.92434845994435 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 186 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 14.05145808951862 - 26.159084136809916 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 187 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 61.47558158857349 - 68.73507104275693 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 188 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 35.420404733112385 - 108.47794695541302 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 189 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 129.0179255565185 - 176.46977408461998 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 190 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 4.437687657989087 - 191.43801818673953 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 191 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 132.39232886927158 - 105.56546037448346 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 192 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 193.9356389936735 - 76.8987220921185 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 193 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 123.49672189705024 - 16.28922647444049 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 194 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 40.44058024960566 - 94.77629608096818 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 195 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 93.54168452285269 - 102.10342793159373 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 196 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 176.91858637781746 - 81.80773827257306 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 197 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 182.5062159995403 - 10.047631291589564 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 198 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 151.3211952231698 - 160.98807517681706 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 199 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 167.8826595707132 - 160.3686256248768 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 200 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 93.38491122055773 - 61.04322963139093 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 201 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 155.20211039479165 - 104.99915002371228 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 202 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 154.56882959476744 - 192.77647809954323 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 203 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 119.88029558288524 - 48.71837870038327 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 204 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 8.237800167806908 - 123.56280331420268 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 205 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 53.424877837249696 - 87.33638375233281 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 206 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 199.25320093864096 - 66.76343110330383 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 207 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 166.7255674935148 - 165.31992478582075 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 208 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 135.9334286576811 - 130.36986226660702 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 209 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 65.60950768388696 - 14.081940005079275 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 210 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 56.68133966983844 - 196.61338214776293 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 211 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 2.562777529582072 - 66.73129709411079 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 212 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 34.10919172462936 - 176.31986637140767 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 213 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 33.846173186403306 - 142.33660392777279 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 214 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 128.76326079790124 - 90.05136184351706 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 215 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 80.39617891964872 - 111.48714907972395 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 216 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 21.97338508940303 - 61.032785792453815 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 217 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 158.00182839254427 - 175.79991821384095 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 218 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 64.21702017661488 - 197.8650659620092 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 219 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 58.261430108425174 - 69.56229252260285 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 220 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 114.85635789777962 - 130.3021189977344 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 221 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 24.601661057872736 - 196.33046445845073 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 222 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 136.22037670133446 - 18.019579846123435 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 223 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 71.91168973841357 - 193.3123397692768 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 224 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 76.67497322258676 - 156.30488619961912 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 225 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 85.70841880772959 - 39.914700874835106 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 226 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 142.3427145819395 - 76.80244108802334 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 227 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 45.6821653485997 - 33.96733547026549 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 228 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 146.16353499121948 - 5.58117117441268 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 229 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 34.32680631388174 - 111.76495490887346 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 230 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 138.5676204843924 - 161.4559204389253 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 231 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 196.36096598095253 - 19.9809316402896 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 232 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 190.5761031572042 - 118.16570999859783 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 233 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 137.89894164409372 - 114.36842366282201 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 234 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 13.942927177934262 - 25.042265908173977 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 235 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 21.808225381827363 - 89.51408500063611 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 236 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 82.1665299576559 - 89.41818802221223 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 237 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 100.24631818801446 - 85.16089691564225 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 238 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 150.87166478995505 - 124.32687790892683 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 239 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 196.72953604773366 - 89.0589559016778 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 240 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 178.10423185724105 - 108.01295472332721 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 241 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 24.852336661830865 - 107.10027825925053 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 242 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 198.2838988728342 - 185.2533889301396 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 243 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 122.42366366542863 - 13.685145107609165 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 244 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 113.58516359448151 - 59.212889358544054 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 245 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 148.6689453992514 - 65.76664113968091 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 246 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 110.90604811956779 - 118.12368970120251 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 247 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 195.48877933255176 - 71.61703558744803 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 248 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 90.74911177135543 - 151.9662290090636 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 249 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 5.669662023293154 - 80.71705944385323 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 250 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 77.57071934873466 - 25.884947016521597 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 251 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 172.38535892291588 - 6.827522113737539 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 252 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 62.61595677732154 - 171.52926299696654 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 253 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 163.1605182212256 - 136.67511261098457 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 254 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 174.98684717123461 - 163.9648526025463 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 255 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 112.4179766207543 - 108.05999669756379 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 256 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 71.60510656526031 - 96.23183516652448 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 257 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 51.39949089302518 - 181.73639564248649 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 258 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 140.61625635482116 - 118.88528060437326 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 259 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 81.11235868256772 - 71.16703221921186 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 260 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 106.30383323544051 - 47.66664077552125 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 261 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 78.36392430481997 - 145.12300889005226 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 262 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 159.2795584664916 - 175.42365153724947 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 263 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 89.12806123792214 - 163.88074620615808 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 264 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 188.00194321004403 - 167.99738752402368 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 265 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 186.544702443713 - 156.12158395696437 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 266 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 2.8406717287810412 - 38.380349570314664 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 267 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 28.76119804764801 - 168.10637626762275 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 268 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 190.1115654346047 - 36.24498374070968 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 269 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 67.43484884843447 - 118.69086680825731 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 270 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 50.7959234692023 - 165.04960719272802 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 271 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 50.75575271798458 - 144.55723570362358 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 272 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 128.94257968083764 - 47.32490472068322 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 273 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 1.9193343221312942 - 112.82658785936086 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 274 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 51.82023785974064 - 148.28034473499338 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 275 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 98.55603081185546 - 178.02566808501155 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 276 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 143.40572664084078 - 183.27302398341982 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 277 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 141.0619733646239 - 54.122738136324955 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 278 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 162.29942916334053 - 67.55247227617933 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 279 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 185.29686875363197 - 118.81126461905944 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 280 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 104.06690998854779 - 5.511220514887172 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 281 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 181.82429252421596 - 47.0700962247878 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 282 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 17.604228655775245 - 96.78328313290936 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 283 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 60.74231839144737 - 136.8041677309854 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 284 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 158.57791000335715 - 90.16811700419458 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 285 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 26.040369760119475 - 115.48428978095157 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 286 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 155.33825554510548 - 122.61758874267335 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 287 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 171.04754637183774 - 49.44780022857469 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 288 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 130.8601631228818 - 115.38443324744807 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 289 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 138.51066172926747 - 85.05731662406394 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 290 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 17.01860916014879 - 85.74431631403492 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 291 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 63.632763185894994 - 73.28193598294403 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 292 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 145.51992557600448 - 190.19645657449914 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 293 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 141.3669225587347 - 128.37798094188392 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 294 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 5.624436269305666 - 10.321359475496084 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 295 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 32.62210104212715 - 80.99365929301005 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 296 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 146.82462375206796 - 189.00512676494264 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 297 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 96.89937776974169 - 61.868257009019125 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 298 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 71.17532023107206 - 32.87953533289934 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 299 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 37.21430187397199 - 21.880189704400976 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 300 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 123.17178528937387 - 23.802492560334287 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 301 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 139.8264101859233 - 106.93416114169838 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 302 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 34.97792194896952 - 182.11554692137054 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 303 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 156.016327676095 - 83.35423896139108 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 304 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 33.33352678715003 - 148.24111721535743 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 305 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 22.525965053498552 - 94.23130431241577 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 306 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 145.40586007739483 - 194.77296443866655 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 307 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 64.78487058910738 - 34.59908782949142 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 308 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 59.86114357954142 - 143.29623794752337 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 309 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 133.03711837762597 - 0.29677881350260726 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 310 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 184.05437940334514 - 80.34917749334691 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 311 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 43.18494391360306 - 0.7070568470557648 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 312 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 87.88579984985796 - 183.6845166360299 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 313 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 35.679149788796785 - 59.900754257451624 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 314 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 10.837936713278706 - 68.65555543408139 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 315 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 28.088726188466005 - 66.6117410256945 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 316 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 24.15305881985441 - 127.36722357863377 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 317 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 167.92463302345024 - 95.32246240241238 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 318 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 150.07537910034364 - 189.29680149689028 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 319 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 36.60193942102408 - 4.850860928459388 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 320 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 131.4804357164766 - 107.37981261172979 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 321 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 4.702056299253576 - 145.3571381517292 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 322 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 76.83393335740108 - 40.92489706855471 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 323 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 81.41902810900726 - 59.67311069186907 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 324 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 157.9286881274713 - 35.89390157980119 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 325 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 172.59261547136273 - 162.21173966194792 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 326 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 63.77983240079481 - 110.66181735649987 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 327 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 94.27259269172448 - 102.22907067171563 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 328 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 87.82927755519094 - 154.83172363042706 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 329 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 61.424763006386954 - 73.54903523332621 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 330 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 193.50994444846046 - 100.37438735826956 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 331 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 160.15646353486886 - 197.56265442862397 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 332 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 33.41179410209567 - 85.51716211010236 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 333 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 39.55932830334419 - 79.79114070992594 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 334 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 29.81531743952457 - 106.52370973616816 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 335 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 145.66591758403607 - 93.84627277397392 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 336 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 121.12689025085304 - 141.7616054105135 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 337 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 31.696932817539736 - 73.39512842700171 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 338 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 73.55413175311341 - 184.10063535264334 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 339 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 179.21266954315877 - 157.77936426661222 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 340 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 5.861701400590658 - 176.44679868441557 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 341 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 164.32858198885157 - 127.1649251930171 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 342 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 104.78813885934602 - 2.6978015525372934 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 343 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 9.036210189825722 - 37.29651951364714 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 344 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 69.09633192708777 - 131.08113653458605 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 345 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 23.989325789242024 - 102.76529191595212 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 346 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 32.563144827068456 - 174.05783874991164 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 347 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 26.84717981820497 - 33.708035418260465 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 348 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 23.651571274100892 - 150.9696150146202 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 349 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 7.263970263317554 - 178.4551746541966 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 350 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 137.19080046610807 - 195.47642758858956 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 351 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 100.60258790901588 - 10.122226122279043 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 352 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 158.02955707421086 - 15.552042272281575 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 353 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 69.03288347183658 - 86.65939835169405 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 354 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 197.11534487465465 - 12.227887489891408 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 355 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 109.32664513099861 - 51.47545505189106 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 356 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 7.450618560323541 - 114.12792666368863 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 357 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 96.73499758330652 - 87.34903664585806 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 358 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 143.42568088659735 - 154.7201550387036 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 359 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 16.055115327242596 - 23.72235108907279 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 360 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 36.54118641672248 - 71.60060131854802 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 361 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 153.4641555525212 - 182.30266241969497 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 362 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 179.79961054026052 - 52.374917374947486 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 363 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 51.89511924887278 - 55.715278818289924 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 364 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 160.22911392558143 - 197.03727711739174 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 365 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 141.50401865962175 - 198.17183635084353 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 366 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 144.1436553724308 - 66.26788567722302 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 367 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 114.85639238072662 - 187.02866922391485 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 368 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 14.754418142216963 - 189.75568091879705 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 369 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 40.445861020644756 - 132.87622199437286 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 370 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 70.41846318684537 - 16.353121961748673 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 371 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 11.524098377391411 - 188.46037552576104 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 372 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 19.80490164758435 - 193.31200682922997 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 373 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 170.32256510777594 - 170.204813941954 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 374 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 35.11638379627671 - 106.63452905636245 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 375 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 87.80726944100199 - 69.16884374165753 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 376 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 45.63781115512378 - 137.1790704392972 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 377 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 120.23124867416645 - 21.60172442725463 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 378 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 42.584241021086264 - 172.9365035614701 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 379 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 106.9111221907689 - 35.38132573733432 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 380 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 115.65012523180343 - 149.06748739273075 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 381 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 66.70597176653999 - 151.96624665556067 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 382 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 116.86108695969573 - 92.96503821223025 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 383 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 138.3454858274232 - 60.335069940591254 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 384 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 35.21169262537829 - 57.75683948274251 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 385 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 183.64109836494706 - 187.89865943504947 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 386 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 124.92709985349823 - 7.139364140447135 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 387 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 121.19563498360651 - 163.5898829983739 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 388 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 141.67701483198246 - 36.967824799613645 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 389 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 116.85490603618803 - 192.1746914581395 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 390 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 157.23646122348265 - 101.21354943885676 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 391 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 58.04596641555313 - 180.0770488919343 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 392 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 118.342960728573 - 65.22048911724025 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 393 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 61.42203823259405 - 117.333210601775 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 394 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 136.13358028390385 - 97.99627507346685 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 395 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 82.86089860898949 - 25.22615052347874 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 396 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 6.721379593879373 - 94.78763681182285 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 397 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 38.69266957378596 - 24.113141554020046 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 398 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 111.22857295130957 - 95.51634459331788 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 399 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 126.7915415569141 - 32.23798771734878 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 400 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 186.84699461455236 - 34.76662976923288 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 401 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 122.45497909139493 - 167.0773654715768 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 402 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.interfaces.Position - 33.03449972907999 - 172.77024458531486 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 403 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype332 - - - - org.contikios.cooja.plugins.SimControl - 280 - 3 - 160 - 400 - 0 - - - org.contikios.cooja.plugins.Visualizer - - org.contikios.cooja.plugins.skins.IDVisualizerSkin - org.contikios.cooja.plugins.skins.GridVisualizerSkin - org.contikios.cooja.plugins.skins.MoteTypeVisualizerSkin - org.contikios.cooja.plugins.skins.UDGMVisualizerSkin - 1.1671649566739442 0.0 0.0 1.1671649566739442 66.21348020552065 40.83199757586018 - - 400 - 2 - 400 - 1 - 1 - - - org.contikios.cooja.plugins.LogListener - - - - - - 1184 - 0 - 240 - 402 - 162 - - - org.contikios.cooja.plugins.Notes - - Enter notes here - true - - 904 - 4 - 160 - 680 - 0 - - - org.contikios.cooja.plugins.ScriptRunner - - - true - - 962 - 1 - 596 - 603 - 43 - - - + + + [APPS_DIR]/mrm + [APPS_DIR]/mspsim + [APPS_DIR]/avrora + [APPS_DIR]/serial_socket + [APPS_DIR]/collect-view + [APPS_DIR]/powertracker + + My simulation + 123456 + 1000000 + + org.contikios.cooja.radiomediums.UDGM + 50.0 + 50.0 + 1.0 + 1.0 + + + 40000 + + + org.contikios.cooja.contikimote.ContikiMoteType + mtype710 + Sender + [CONTIKI_DIR]/regression-tests/12-rpl/code/sender-node.c + make TARGET=cooja clean +make sender-node.cooja TARGET=cooja + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.Battery + org.contikios.cooja.contikimote.interfaces.ContikiVib + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + org.contikios.cooja.contikimote.interfaces.ContikiRS232 + org.contikios.cooja.contikimote.interfaces.ContikiBeeper + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.contikimote.interfaces.ContikiIPAddress + org.contikios.cooja.contikimote.interfaces.ContikiRadio + org.contikios.cooja.contikimote.interfaces.ContikiButton + org.contikios.cooja.contikimote.interfaces.ContikiPIR + org.contikios.cooja.contikimote.interfaces.ContikiClock + org.contikios.cooja.contikimote.interfaces.ContikiLED + org.contikios.cooja.contikimote.interfaces.ContikiCFS + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + false + + + org.contikios.cooja.contikimote.ContikiMoteType + mtype709 + RPL root + [CONTIKI_DIR]/regression-tests/12-rpl/code/root-node.c + make TARGET=cooja clean +make root-node.cooja TARGET=cooja + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.Battery + org.contikios.cooja.contikimote.interfaces.ContikiVib + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + org.contikios.cooja.contikimote.interfaces.ContikiRS232 + org.contikios.cooja.contikimote.interfaces.ContikiBeeper + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.contikimote.interfaces.ContikiIPAddress + org.contikios.cooja.contikimote.interfaces.ContikiRadio + org.contikios.cooja.contikimote.interfaces.ContikiButton + org.contikios.cooja.contikimote.interfaces.ContikiPIR + org.contikios.cooja.contikimote.interfaces.ContikiClock + org.contikios.cooja.contikimote.interfaces.ContikiLED + org.contikios.cooja.contikimote.interfaces.ContikiCFS + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + false + + + org.contikios.cooja.contikimote.ContikiMoteType + mtype332 + Receiver + [CONTIKI_DIR]/regression-tests/12-rpl/code/receiver-node.c + make TARGET=cooja clean +make receiver-node.cooja TARGET=cooja + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.Battery + org.contikios.cooja.contikimote.interfaces.ContikiVib + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + org.contikios.cooja.contikimote.interfaces.ContikiRS232 + org.contikios.cooja.contikimote.interfaces.ContikiBeeper + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.contikimote.interfaces.ContikiIPAddress + org.contikios.cooja.contikimote.interfaces.ContikiRadio + org.contikios.cooja.contikimote.interfaces.ContikiButton + org.contikios.cooja.contikimote.interfaces.ContikiPIR + org.contikios.cooja.contikimote.interfaces.ContikiClock + org.contikios.cooja.contikimote.interfaces.ContikiLED + org.contikios.cooja.contikimote.interfaces.ContikiCFS + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + false + + + + org.contikios.cooja.interfaces.Position + -15.604889524290883 + -27.272920930192623 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 1 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 218.29521040499824 + 216.70287561143516 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 2 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype710 + + + + org.contikios.cooja.interfaces.Position + 0.0 + 0.0 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 3 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype709 + + + + org.contikios.cooja.interfaces.Position + 27.44274795318258 + 36.980443988209856 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 4 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 185.6055859234863 + 192.99166984979271 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 5 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 7.827315175624361 + 107.95833747378225 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 6 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 82.49199862549197 + 34.72851022020231 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 7 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 35.671428723363064 + 125.82590119075962 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 8 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 33.044376889885754 + 62.443378727185774 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 9 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 152.53659733643553 + 165.87608708149403 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 10 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 22.023077232445942 + 18.41094139254531 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 11 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 41.19368867821842 + 49.201157808285224 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 12 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 114.62128502432532 + 88.58807114217633 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 13 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 61.21405469314478 + 188.6851979777661 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 14 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 104.78326932115709 + 100.84889281105585 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 15 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 90.26861048950052 + 40.550864496421404 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 16 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 137.39112328314076 + 126.5333637365394 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 17 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 14.07616766247768 + 99.85572366133869 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 18 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 192.30563307960443 + 66.83563821262344 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 19 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 129.08253247651874 + 117.20437669309078 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 20 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 21.82717410659969 + 47.523771402541335 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 21 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 35.95102103988239 + 21.74677482276881 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 22 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 61.71108896268191 + 79.91617509627334 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 23 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 16.029809485043288 + 171.05935835280616 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 24 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 138.8418552766128 + 61.418703448852185 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 25 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 151.23299942414673 + 92.41820871538522 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 26 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 197.33157775573343 + 20.6013482653864 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 27 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 121.20762229879878 + 184.81107462083565 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 28 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 102.32432527534694 + 91.9912435435037 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 29 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 88.10909646999544 + 191.21251904898142 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 30 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 72.19774934085703 + 113.58131529956069 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 31 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 53.49967737007204 + 72.45172156882643 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 32 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 172.07186411958625 + 51.47715718716961 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 33 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 185.41983532466634 + 85.60078269414 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 34 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 83.34993971740548 + 193.98111239532744 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 35 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 105.03752362550378 + 131.24078026424087 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 36 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 176.09318670322102 + 41.46760901468247 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 37 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 76.80689915307215 + 47.13815728542057 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 38 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 155.907739287817 + 15.24009422994106 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 39 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 45.992463430523436 + 124.573811024683 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 40 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 159.11361032671832 + 81.65319598335425 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 41 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 41.838657583001314 + 163.47591213471193 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 42 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 25.560001904073125 + 147.48610852243928 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 43 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 139.56489350213488 + 191.15379557180913 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 44 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 105.71342550700061 + 136.09089690661503 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 45 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 122.59378462201298 + 196.22862961645998 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 46 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 147.61372446125088 + 55.314287700435536 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 47 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 77.70218628780312 + 95.59561907133107 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 48 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 71.88244578562713 + 168.57963926907163 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 49 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 6.722298767036894 + 101.09668965729898 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 50 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 62.96680217979964 + 77.66951408660954 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 51 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 162.49011735601982 + 199.07086470932003 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 52 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 87.87526390617558 + 114.39424478293958 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 53 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 74.29230372180815 + 36.995699473573836 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 54 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 77.34619341407321 + 60.070446577058576 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 55 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 76.32695571818826 + 135.82669004433725 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 56 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 68.10326013650814 + 5.04157445893032 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 57 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 95.76993029214962 + 45.046282401332945 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 58 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 79.87963205080952 + 110.7023948653882 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 59 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 195.90349780899223 + 132.38904172009444 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 60 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 80.40108440304007 + 25.86673418569547 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 61 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 52.268877618080744 + 176.12888723955277 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 62 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 40.545541404899765 + 166.9450252729589 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 63 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 10.676184465528205 + 0.9871174057552334 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 64 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 87.35673216830257 + 23.25131234780027 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 65 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 26.745126931691352 + 87.3101256645554 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 66 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 183.2724008541638 + 167.69026002459069 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 67 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 5.934720840855223 + 77.21248812623693 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 68 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 76.49604470599058 + 108.80963795015302 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 69 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 86.10145414955488 + 12.798582653303603 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 70 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 32.435370110193816 + 29.344591306898813 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 71 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 163.72950518161596 + 154.15283820759655 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 72 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 143.96396308843373 + 132.40312602892786 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 73 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 139.20530179839795 + 144.18958011498225 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 74 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 75.22453368236212 + 119.69913560274786 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 75 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 21.83836116635087 + 191.21696522067728 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 76 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 187.94640511976667 + 113.95684826994561 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 77 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 114.61289565250618 + 27.61001303446735 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 78 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 70.83569869750504 + 113.88992677636021 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 79 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 11.616059362048992 + 45.59401384110464 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 80 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 3.4282454263252937 + 35.97653370545284 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 81 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 54.33122057405715 + 1.9759087814547494 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 82 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 69.6612091444155 + 0.45982758130533874 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 83 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 169.98417155202168 + 87.76678058442593 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 84 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 148.98441194234616 + 104.32820155415494 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 85 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 66.23883124891583 + 162.92685536074129 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 86 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 181.6348837921769 + 183.07267240808343 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 87 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 88.9829570206748 + 119.72520333459575 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 88 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 179.1527012143494 + 84.25685075020328 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 89 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 117.82537007493707 + 41.10319533518651 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 90 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 52.611633540398486 + 94.71918054798351 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 91 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 128.22088664324633 + 115.50290142480077 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 92 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 102.53841128002531 + 11.784449645612295 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 93 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 187.69871925603667 + 131.28317666772048 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 94 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 71.13897508938263 + 106.29335632876602 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 95 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 71.2216469861295 + 148.38612859488788 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 96 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 36.152562577928784 + 67.541796718348 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 97 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 118.84793016344604 + 0.49906433835273933 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 98 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 135.20417096106954 + 170.20704631856816 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 99 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 156.082359043526 + 57.62103450217495 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 100 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 180.58695188377737 + 80.75266645775669 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 101 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 38.93889890269273 + 138.60259660238856 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 102 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 159.5172788118917 + 192.24950143209503 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 103 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 154.02096825135868 + 139.67175722659056 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 104 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 38.480826888323904 + 5.502866276505292 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 105 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 27.95908088015704 + 193.85188308665965 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 106 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 198.61700949829074 + 171.1877312716402 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 107 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 106.30468818084609 + 25.058380770654654 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 108 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 40.335672117825624 + 179.59080234641004 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 109 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 22.316357638510897 + 158.94323888090028 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 110 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 99.56281553229194 + 85.64260133077535 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 111 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 60.71556414510035 + 121.53040248649711 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 112 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 27.08600745576586 + 38.17025720346818 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 113 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 147.03642509910586 + 39.51320588416096 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 114 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 180.2031547656297 + 141.5646561330238 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 115 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 73.12314629214424 + 167.80783320779847 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 116 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 167.93567452922767 + 10.060141001139144 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 117 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 163.99198875105768 + 147.48735207074026 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 118 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 154.98654737808127 + 121.17266324007643 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 119 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 57.898499791676386 + 149.3487194893122 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 120 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 64.82082963563904 + 174.0100480348673 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 121 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 114.13623920898752 + 15.754246175503095 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 122 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 0.00848902940355778 + 195.50701335573908 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 123 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 182.81764401709623 + 78.57837811285111 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 124 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 11.462145876504714 + 95.37444120802225 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 125 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 115.5020283241771 + 28.49431396939579 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 126 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 62.463952359877275 + 77.78913013330184 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 127 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 9.766778039117696 + 136.7421944039438 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 128 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 35.320514349220055 + 100.56248258192493 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 129 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 56.26732169234614 + 3.095097140731262 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 130 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 76.90164393617998 + 3.5671096386384216 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 131 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 81.97549075841862 + 13.020422155003475 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 132 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 54.87200208203389 + 77.29445717372947 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 133 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 193.47651032749548 + 144.9357554583657 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 134 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 51.65288193591992 + 126.16687604535504 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 135 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 151.66849746442173 + 158.7699863850836 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 136 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 32.469410974826005 + 113.10993021698361 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 137 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 33.04622512107349 + 25.425445944702794 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 138 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 33.53444748873715 + 112.25721598241579 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 139 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 128.9401580272291 + 100.73482184242926 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 140 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 194.6592727528704 + 102.73664509470841 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 141 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 125.47343036050516 + 106.53155237731285 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 142 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 147.40129296416038 + 12.37607345376115 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 143 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 113.32045045397959 + 126.79285457987103 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 144 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 27.174837677715825 + 66.84349985536826 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 145 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 164.20252670136998 + 51.635539499142524 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 146 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 39.351673884988394 + 65.05462325698123 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 147 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 143.91486202542433 + 171.28435110465497 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 148 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 30.926988343440186 + 130.3647571119649 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 149 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 19.897357003413617 + 22.905473451246785 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 150 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 128.36369031733133 + 170.71462512320227 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 151 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 172.1648617546042 + 184.1928317689217 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 152 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 148.16672573170842 + 107.99684523382686 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 153 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 83.90300186263724 + 169.4761782218257 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 154 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 90.86887922361453 + 142.8036645841288 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 155 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 23.18966921326753 + 69.42635534680753 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 156 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 134.59433377860168 + 37.633119904417796 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 157 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 127.97132285920065 + 158.57917470101572 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 158 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 166.2450456558778 + 108.67197275397042 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 159 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 167.334034200758 + 22.173554305333166 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 160 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 163.54194527237107 + 189.41605447848966 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 161 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 14.863357513573018 + 93.36644051662617 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 162 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 178.4370382798651 + 191.48348446587636 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 163 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 172.96087703915273 + 183.78535300027013 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 164 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 2.45779137738229 + 58.750309492130114 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 165 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 15.730601618735495 + 96.52335072173565 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 166 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 19.890833428932165 + 56.993000152370364 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 167 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 154.69166608840504 + 164.8598339150269 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 168 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 199.77196118880582 + 26.034321005016903 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 169 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 5.216343266336931 + 17.867912968799615 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 170 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 138.71273406283296 + 55.31024592694844 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 171 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 168.21144361519595 + 163.1843284579423 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 172 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 61.82504434646854 + 134.03197926926038 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 173 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 14.007317972338473 + 146.98475859141027 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 174 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 108.44210606040488 + 127.81076428732186 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 175 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 133.41957560864708 + 122.91534078890439 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 176 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 184.89266828168118 + 195.7201293014503 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 177 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 121.10492556426465 + 78.54418709376823 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 178 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 42.05271519544296 + 183.14259881514795 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 179 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 92.12119616387746 + 44.853464007589714 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 180 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 136.44039199596196 + 1.111619893261917 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 181 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 64.37440878278696 + 188.3078368775181 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 182 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 37.774149552594594 + 73.81683900641865 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 183 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 24.618589360988175 + 164.89708336795567 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 184 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 152.5950797265111 + 140.96774353352123 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 185 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 37.96933854365052 + 131.92434845994435 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 186 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 14.05145808951862 + 26.159084136809916 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 187 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 61.47558158857349 + 68.73507104275693 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 188 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 35.420404733112385 + 108.47794695541302 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 189 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 129.0179255565185 + 176.46977408461998 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 190 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 4.437687657989087 + 191.43801818673953 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 191 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 132.39232886927158 + 105.56546037448346 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 192 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 193.9356389936735 + 76.8987220921185 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 193 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 123.49672189705024 + 16.28922647444049 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 194 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 40.44058024960566 + 94.77629608096818 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 195 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 93.54168452285269 + 102.10342793159373 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 196 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 176.91858637781746 + 81.80773827257306 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 197 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 182.5062159995403 + 10.047631291589564 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 198 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 151.3211952231698 + 160.98807517681706 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 199 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 167.8826595707132 + 160.3686256248768 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 200 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 93.38491122055773 + 61.04322963139093 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 201 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 155.20211039479165 + 104.99915002371228 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 202 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 154.56882959476744 + 192.77647809954323 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 203 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 119.88029558288524 + 48.71837870038327 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 204 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 8.237800167806908 + 123.56280331420268 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 205 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 53.424877837249696 + 87.33638375233281 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 206 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 199.25320093864096 + 66.76343110330383 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 207 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 166.7255674935148 + 165.31992478582075 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 208 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 135.9334286576811 + 130.36986226660702 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 209 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 65.60950768388696 + 14.081940005079275 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 210 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 56.68133966983844 + 196.61338214776293 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 211 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 2.562777529582072 + 66.73129709411079 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 212 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 34.10919172462936 + 176.31986637140767 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 213 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 33.846173186403306 + 142.33660392777279 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 214 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 128.76326079790124 + 90.05136184351706 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 215 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 80.39617891964872 + 111.48714907972395 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 216 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 21.97338508940303 + 61.032785792453815 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 217 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 158.00182839254427 + 175.79991821384095 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 218 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 64.21702017661488 + 197.8650659620092 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 219 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 58.261430108425174 + 69.56229252260285 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 220 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 114.85635789777962 + 130.3021189977344 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 221 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 24.601661057872736 + 196.33046445845073 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 222 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 136.22037670133446 + 18.019579846123435 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 223 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 71.91168973841357 + 193.3123397692768 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 224 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 76.67497322258676 + 156.30488619961912 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 225 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 85.70841880772959 + 39.914700874835106 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 226 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 142.3427145819395 + 76.80244108802334 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 227 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 45.6821653485997 + 33.96733547026549 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 228 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 146.16353499121948 + 5.58117117441268 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 229 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 34.32680631388174 + 111.76495490887346 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 230 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 138.5676204843924 + 161.4559204389253 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 231 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 196.36096598095253 + 19.9809316402896 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 232 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 190.5761031572042 + 118.16570999859783 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 233 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 137.89894164409372 + 114.36842366282201 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 234 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 13.942927177934262 + 25.042265908173977 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 235 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 21.808225381827363 + 89.51408500063611 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 236 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 82.1665299576559 + 89.41818802221223 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 237 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 100.24631818801446 + 85.16089691564225 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 238 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 150.87166478995505 + 124.32687790892683 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 239 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 196.72953604773366 + 89.0589559016778 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 240 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 178.10423185724105 + 108.01295472332721 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 241 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 24.852336661830865 + 107.10027825925053 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 242 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 198.2838988728342 + 185.2533889301396 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 243 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 122.42366366542863 + 13.685145107609165 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 244 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 113.58516359448151 + 59.212889358544054 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 245 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 148.6689453992514 + 65.76664113968091 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 246 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 110.90604811956779 + 118.12368970120251 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 247 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 195.48877933255176 + 71.61703558744803 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 248 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 90.74911177135543 + 151.9662290090636 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 249 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 5.669662023293154 + 80.71705944385323 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 250 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 77.57071934873466 + 25.884947016521597 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 251 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 172.38535892291588 + 6.827522113737539 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 252 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 62.61595677732154 + 171.52926299696654 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 253 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 163.1605182212256 + 136.67511261098457 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 254 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 174.98684717123461 + 163.9648526025463 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 255 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 112.4179766207543 + 108.05999669756379 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 256 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 71.60510656526031 + 96.23183516652448 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 257 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 51.39949089302518 + 181.73639564248649 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 258 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 140.61625635482116 + 118.88528060437326 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 259 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 81.11235868256772 + 71.16703221921186 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 260 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 106.30383323544051 + 47.66664077552125 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 261 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 78.36392430481997 + 145.12300889005226 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 262 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 159.2795584664916 + 175.42365153724947 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 263 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 89.12806123792214 + 163.88074620615808 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 264 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 188.00194321004403 + 167.99738752402368 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 265 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 186.544702443713 + 156.12158395696437 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 266 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 2.8406717287810412 + 38.380349570314664 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 267 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 28.76119804764801 + 168.10637626762275 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 268 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 190.1115654346047 + 36.24498374070968 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 269 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 67.43484884843447 + 118.69086680825731 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 270 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 50.7959234692023 + 165.04960719272802 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 271 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 50.75575271798458 + 144.55723570362358 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 272 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 128.94257968083764 + 47.32490472068322 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 273 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 1.9193343221312942 + 112.82658785936086 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 274 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 51.82023785974064 + 148.28034473499338 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 275 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 98.55603081185546 + 178.02566808501155 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 276 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 143.40572664084078 + 183.27302398341982 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 277 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 141.0619733646239 + 54.122738136324955 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 278 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 162.29942916334053 + 67.55247227617933 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 279 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 185.29686875363197 + 118.81126461905944 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 280 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 104.06690998854779 + 5.511220514887172 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 281 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 181.82429252421596 + 47.0700962247878 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 282 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 17.604228655775245 + 96.78328313290936 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 283 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 60.74231839144737 + 136.8041677309854 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 284 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 158.57791000335715 + 90.16811700419458 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 285 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 26.040369760119475 + 115.48428978095157 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 286 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 155.33825554510548 + 122.61758874267335 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 287 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 171.04754637183774 + 49.44780022857469 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 288 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 130.8601631228818 + 115.38443324744807 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 289 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 138.51066172926747 + 85.05731662406394 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 290 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 17.01860916014879 + 85.74431631403492 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 291 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 63.632763185894994 + 73.28193598294403 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 292 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 145.51992557600448 + 190.19645657449914 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 293 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 141.3669225587347 + 128.37798094188392 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 294 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 5.624436269305666 + 10.321359475496084 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 295 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 32.62210104212715 + 80.99365929301005 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 296 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 146.82462375206796 + 189.00512676494264 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 297 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 96.89937776974169 + 61.868257009019125 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 298 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 71.17532023107206 + 32.87953533289934 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 299 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 37.21430187397199 + 21.880189704400976 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 300 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 123.17178528937387 + 23.802492560334287 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 301 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 139.8264101859233 + 106.93416114169838 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 302 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 34.97792194896952 + 182.11554692137054 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 303 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 156.016327676095 + 83.35423896139108 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 304 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 33.33352678715003 + 148.24111721535743 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 305 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 22.525965053498552 + 94.23130431241577 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 306 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 145.40586007739483 + 194.77296443866655 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 307 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 64.78487058910738 + 34.59908782949142 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 308 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 59.86114357954142 + 143.29623794752337 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 309 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 133.03711837762597 + 0.29677881350260726 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 310 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 184.05437940334514 + 80.34917749334691 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 311 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 43.18494391360306 + 0.7070568470557648 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 312 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 87.88579984985796 + 183.6845166360299 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 313 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 35.679149788796785 + 59.900754257451624 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 314 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 10.837936713278706 + 68.65555543408139 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 315 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 28.088726188466005 + 66.6117410256945 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 316 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 24.15305881985441 + 127.36722357863377 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 317 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 167.92463302345024 + 95.32246240241238 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 318 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 150.07537910034364 + 189.29680149689028 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 319 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 36.60193942102408 + 4.850860928459388 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 320 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 131.4804357164766 + 107.37981261172979 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 321 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 4.702056299253576 + 145.3571381517292 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 322 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 76.83393335740108 + 40.92489706855471 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 323 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 81.41902810900726 + 59.67311069186907 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 324 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 157.9286881274713 + 35.89390157980119 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 325 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 172.59261547136273 + 162.21173966194792 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 326 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 63.77983240079481 + 110.66181735649987 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 327 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 94.27259269172448 + 102.22907067171563 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 328 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 87.82927755519094 + 154.83172363042706 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 329 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 61.424763006386954 + 73.54903523332621 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 330 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 193.50994444846046 + 100.37438735826956 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 331 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 160.15646353486886 + 197.56265442862397 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 332 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 33.41179410209567 + 85.51716211010236 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 333 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 39.55932830334419 + 79.79114070992594 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 334 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 29.81531743952457 + 106.52370973616816 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 335 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 145.66591758403607 + 93.84627277397392 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 336 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 121.12689025085304 + 141.7616054105135 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 337 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 31.696932817539736 + 73.39512842700171 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 338 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 73.55413175311341 + 184.10063535264334 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 339 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 179.21266954315877 + 157.77936426661222 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 340 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 5.861701400590658 + 176.44679868441557 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 341 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 164.32858198885157 + 127.1649251930171 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 342 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 104.78813885934602 + 2.6978015525372934 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 343 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 9.036210189825722 + 37.29651951364714 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 344 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 69.09633192708777 + 131.08113653458605 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 345 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 23.989325789242024 + 102.76529191595212 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 346 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 32.563144827068456 + 174.05783874991164 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 347 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 26.84717981820497 + 33.708035418260465 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 348 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 23.651571274100892 + 150.9696150146202 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 349 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 7.263970263317554 + 178.4551746541966 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 350 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 137.19080046610807 + 195.47642758858956 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 351 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 100.60258790901588 + 10.122226122279043 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 352 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 158.02955707421086 + 15.552042272281575 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 353 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 69.03288347183658 + 86.65939835169405 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 354 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 197.11534487465465 + 12.227887489891408 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 355 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 109.32664513099861 + 51.47545505189106 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 356 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 7.450618560323541 + 114.12792666368863 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 357 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 96.73499758330652 + 87.34903664585806 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 358 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 143.42568088659735 + 154.7201550387036 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 359 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 16.055115327242596 + 23.72235108907279 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 360 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 36.54118641672248 + 71.60060131854802 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 361 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 153.4641555525212 + 182.30266241969497 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 362 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 179.79961054026052 + 52.374917374947486 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 363 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 51.89511924887278 + 55.715278818289924 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 364 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 160.22911392558143 + 197.03727711739174 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 365 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 141.50401865962175 + 198.17183635084353 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 366 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 144.1436553724308 + 66.26788567722302 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 367 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 114.85639238072662 + 187.02866922391485 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 368 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 14.754418142216963 + 189.75568091879705 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 369 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 40.445861020644756 + 132.87622199437286 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 370 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 70.41846318684537 + 16.353121961748673 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 371 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 11.524098377391411 + 188.46037552576104 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 372 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 19.80490164758435 + 193.31200682922997 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 373 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 170.32256510777594 + 170.204813941954 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 374 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 35.11638379627671 + 106.63452905636245 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 375 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 87.80726944100199 + 69.16884374165753 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 376 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 45.63781115512378 + 137.1790704392972 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 377 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 120.23124867416645 + 21.60172442725463 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 378 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 42.584241021086264 + 172.9365035614701 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 379 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 106.9111221907689 + 35.38132573733432 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 380 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 115.65012523180343 + 149.06748739273075 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 381 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 66.70597176653999 + 151.96624665556067 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 382 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 116.86108695969573 + 92.96503821223025 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 383 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 138.3454858274232 + 60.335069940591254 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 384 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 35.21169262537829 + 57.75683948274251 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 385 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 183.64109836494706 + 187.89865943504947 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 386 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 124.92709985349823 + 7.139364140447135 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 387 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 121.19563498360651 + 163.5898829983739 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 388 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 141.67701483198246 + 36.967824799613645 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 389 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 116.85490603618803 + 192.1746914581395 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 390 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 157.23646122348265 + 101.21354943885676 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 391 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 58.04596641555313 + 180.0770488919343 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 392 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 118.342960728573 + 65.22048911724025 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 393 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 61.42203823259405 + 117.333210601775 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 394 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 136.13358028390385 + 97.99627507346685 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 395 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 82.86089860898949 + 25.22615052347874 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 396 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 6.721379593879373 + 94.78763681182285 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 397 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 38.69266957378596 + 24.113141554020046 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 398 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 111.22857295130957 + 95.51634459331788 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 399 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 126.7915415569141 + 32.23798771734878 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 400 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 186.84699461455236 + 34.76662976923288 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 401 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 122.45497909139493 + 167.0773654715768 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 402 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.interfaces.Position + 33.03449972907999 + 172.77024458531486 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 403 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype332 + + + + org.contikios.cooja.plugins.SimControl + 280 + 3 + 160 + 400 + 0 + + + org.contikios.cooja.plugins.Visualizer + + org.contikios.cooja.plugins.skins.IDVisualizerSkin + org.contikios.cooja.plugins.skins.GridVisualizerSkin + org.contikios.cooja.plugins.skins.MoteTypeVisualizerSkin + org.contikios.cooja.plugins.skins.UDGMVisualizerSkin + 1.1671649566739442 0.0 0.0 1.1671649566739442 66.21348020552065 40.83199757586018 + + 400 + 2 + 400 + 1 + 1 + + + org.contikios.cooja.plugins.LogListener + + + + + + 1184 + 0 + 240 + 402 + 162 + + + org.contikios.cooja.plugins.Notes + + Enter notes here + true + + 904 + 4 + 160 + 680 + 0 + + + org.contikios.cooja.plugins.ScriptRunner + + + true + + 962 + 1 + 596 + 603 + 43 + + + diff --git a/regression-tests/12-rpl/05-rpl-up-and-down-routes.csc b/regression-tests/12-rpl/05-rpl-up-and-down-routes.csc index ba409e4fb..3ed5a71f7 100644 --- a/regression-tests/12-rpl/05-rpl-up-and-down-routes.csc +++ b/regression-tests/12-rpl/05-rpl-up-and-down-routes.csc @@ -1,344 +1,344 @@ - - - [APPS_DIR]/mrm - [APPS_DIR]/mspsim - [APPS_DIR]/avrora - [APPS_DIR]/serial_socket - [APPS_DIR]/collect-view - [APPS_DIR]/powertracker - - My simulation - 123456 - 1000000 - - org.contikios.cooja.radiomediums.UDGM - 50.0 - 50.0 - 1.0 - 1.0 - - - 40000 - - - org.contikios.cooja.contikimote.ContikiMoteType - mtype743 - Sender - [CONFIG_DIR]/code/sender-node.c + + + [APPS_DIR]/mrm + [APPS_DIR]/mspsim + [APPS_DIR]/avrora + [APPS_DIR]/serial_socket + [APPS_DIR]/collect-view + [APPS_DIR]/powertracker + + My simulation + 123456 + 1000000 + + org.contikios.cooja.radiomediums.UDGM + 50.0 + 50.0 + 1.0 + 1.0 + + + 40000 + + + org.contikios.cooja.contikimote.ContikiMoteType + mtype743 + Sender + [CONFIG_DIR]/code/sender-node.c make clean TARGET=cooja -make sender-node.cooja TARGET=cooja - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.Battery - org.contikios.cooja.contikimote.interfaces.ContikiVib - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - org.contikios.cooja.contikimote.interfaces.ContikiRS232 - org.contikios.cooja.contikimote.interfaces.ContikiBeeper - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.contikimote.interfaces.ContikiIPAddress - org.contikios.cooja.contikimote.interfaces.ContikiRadio - org.contikios.cooja.contikimote.interfaces.ContikiButton - org.contikios.cooja.contikimote.interfaces.ContikiPIR - org.contikios.cooja.contikimote.interfaces.ContikiClock - org.contikios.cooja.contikimote.interfaces.ContikiLED - org.contikios.cooja.contikimote.interfaces.ContikiCFS - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - false - - - org.contikios.cooja.contikimote.ContikiMoteType - mtype452 - RPL root - [CONFIG_DIR]/code/root-node.c +make sender-node.cooja TARGET=cooja + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.Battery + org.contikios.cooja.contikimote.interfaces.ContikiVib + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + org.contikios.cooja.contikimote.interfaces.ContikiRS232 + org.contikios.cooja.contikimote.interfaces.ContikiBeeper + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.contikimote.interfaces.ContikiIPAddress + org.contikios.cooja.contikimote.interfaces.ContikiRadio + org.contikios.cooja.contikimote.interfaces.ContikiButton + org.contikios.cooja.contikimote.interfaces.ContikiPIR + org.contikios.cooja.contikimote.interfaces.ContikiClock + org.contikios.cooja.contikimote.interfaces.ContikiLED + org.contikios.cooja.contikimote.interfaces.ContikiCFS + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + false + + + org.contikios.cooja.contikimote.ContikiMoteType + mtype452 + RPL root + [CONFIG_DIR]/code/root-node.c make clean TARGET=cooja -make root-node.cooja TARGET=cooja - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.Battery - org.contikios.cooja.contikimote.interfaces.ContikiVib - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - org.contikios.cooja.contikimote.interfaces.ContikiRS232 - org.contikios.cooja.contikimote.interfaces.ContikiBeeper - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.contikimote.interfaces.ContikiIPAddress - org.contikios.cooja.contikimote.interfaces.ContikiRadio - org.contikios.cooja.contikimote.interfaces.ContikiButton - org.contikios.cooja.contikimote.interfaces.ContikiPIR - org.contikios.cooja.contikimote.interfaces.ContikiClock - org.contikios.cooja.contikimote.interfaces.ContikiLED - org.contikios.cooja.contikimote.interfaces.ContikiCFS - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - false - - - org.contikios.cooja.contikimote.ContikiMoteType - mtype782 - Receiver - [CONFIG_DIR]/code/receiver-node.c +make root-node.cooja TARGET=cooja + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.Battery + org.contikios.cooja.contikimote.interfaces.ContikiVib + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + org.contikios.cooja.contikimote.interfaces.ContikiRS232 + org.contikios.cooja.contikimote.interfaces.ContikiBeeper + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.contikimote.interfaces.ContikiIPAddress + org.contikios.cooja.contikimote.interfaces.ContikiRadio + org.contikios.cooja.contikimote.interfaces.ContikiButton + org.contikios.cooja.contikimote.interfaces.ContikiPIR + org.contikios.cooja.contikimote.interfaces.ContikiClock + org.contikios.cooja.contikimote.interfaces.ContikiLED + org.contikios.cooja.contikimote.interfaces.ContikiCFS + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + false + + + org.contikios.cooja.contikimote.ContikiMoteType + mtype782 + Receiver + [CONFIG_DIR]/code/receiver-node.c make clean TARGET=cooja -make receiver-node.cooja TARGET=cooja - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.Battery - org.contikios.cooja.contikimote.interfaces.ContikiVib - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - org.contikios.cooja.contikimote.interfaces.ContikiRS232 - org.contikios.cooja.contikimote.interfaces.ContikiBeeper - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.contikimote.interfaces.ContikiIPAddress - org.contikios.cooja.contikimote.interfaces.ContikiRadio - org.contikios.cooja.contikimote.interfaces.ContikiButton - org.contikios.cooja.contikimote.interfaces.ContikiPIR - org.contikios.cooja.contikimote.interfaces.ContikiClock - org.contikios.cooja.contikimote.interfaces.ContikiLED - org.contikios.cooja.contikimote.interfaces.ContikiCFS - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - false - - - - org.contikios.cooja.interfaces.Position - -22.5728586847096 - 123.9358664968653 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 1 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype782 - - - - org.contikios.cooja.interfaces.Position - 116.13379149678028 - 88.36698920455684 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 2 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype743 - - - - org.contikios.cooja.interfaces.Position - -1.39303771455413 - 100.21446701029119 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 4 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype782 - - - - org.contikios.cooja.interfaces.Position - 95.25095618820441 - 63.14998053005015 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 5 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype782 - - - - org.contikios.cooja.interfaces.Position - 66.09378990830604 - 38.32698761608261 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 6 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype782 - - - - org.contikios.cooja.interfaces.Position - 29.05630841762433 - 30.840688165838436 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 7 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype782 - - - - org.contikios.cooja.interfaces.Position - 10.931583432822638 - 69.848248459216 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 8 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype782 - - - - org.contikios.cooja.interfaces.Position - 0.0 - 0.0 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 3 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype452 - - - - org.contikios.cooja.plugins.SimControl - 280 - 1 - 160 - 400 - 0 - - - org.contikios.cooja.plugins.Visualizer - - org.contikios.cooja.plugins.skins.IDVisualizerSkin - org.contikios.cooja.plugins.skins.UDGMVisualizerSkin - org.contikios.cooja.plugins.skins.GridVisualizerSkin - org.contikios.cooja.plugins.skins.MoteTypeVisualizerSkin - 2.5379695437350276 0.0 0.0 2.5379695437350276 75.2726010197627 15.727272727272757 - - 400 - 2 - 400 - 1 - 1 - - - org.contikios.cooja.plugins.LogListener - - - - 1184 - 3 - 240 - 402 - 162 - - - org.contikios.cooja.plugins.Notes - - Enter notes here - true - - 904 - 4 - 160 - 680 - 0 - - - org.contikios.cooja.plugins.ScriptRunner - - - true - - 962 - 0 - 596 - 603 - 43 - - - +make receiver-node.cooja TARGET=cooja + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.Battery + org.contikios.cooja.contikimote.interfaces.ContikiVib + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + org.contikios.cooja.contikimote.interfaces.ContikiRS232 + org.contikios.cooja.contikimote.interfaces.ContikiBeeper + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.contikimote.interfaces.ContikiIPAddress + org.contikios.cooja.contikimote.interfaces.ContikiRadio + org.contikios.cooja.contikimote.interfaces.ContikiButton + org.contikios.cooja.contikimote.interfaces.ContikiPIR + org.contikios.cooja.contikimote.interfaces.ContikiClock + org.contikios.cooja.contikimote.interfaces.ContikiLED + org.contikios.cooja.contikimote.interfaces.ContikiCFS + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + false + + + + org.contikios.cooja.interfaces.Position + -22.5728586847096 + 123.9358664968653 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 1 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype782 + + + + org.contikios.cooja.interfaces.Position + 116.13379149678028 + 88.36698920455684 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 2 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype743 + + + + org.contikios.cooja.interfaces.Position + -1.39303771455413 + 100.21446701029119 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 4 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype782 + + + + org.contikios.cooja.interfaces.Position + 95.25095618820441 + 63.14998053005015 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 5 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype782 + + + + org.contikios.cooja.interfaces.Position + 66.09378990830604 + 38.32698761608261 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 6 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype782 + + + + org.contikios.cooja.interfaces.Position + 29.05630841762433 + 30.840688165838436 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 7 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype782 + + + + org.contikios.cooja.interfaces.Position + 10.931583432822638 + 69.848248459216 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 8 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype782 + + + + org.contikios.cooja.interfaces.Position + 0.0 + 0.0 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 3 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype452 + + + + org.contikios.cooja.plugins.SimControl + 280 + 1 + 160 + 400 + 0 + + + org.contikios.cooja.plugins.Visualizer + + org.contikios.cooja.plugins.skins.IDVisualizerSkin + org.contikios.cooja.plugins.skins.UDGMVisualizerSkin + org.contikios.cooja.plugins.skins.GridVisualizerSkin + org.contikios.cooja.plugins.skins.MoteTypeVisualizerSkin + 2.5379695437350276 0.0 0.0 2.5379695437350276 75.2726010197627 15.727272727272757 + + 400 + 2 + 400 + 1 + 1 + + + org.contikios.cooja.plugins.LogListener + + + + 1184 + 3 + 240 + 402 + 162 + + + org.contikios.cooja.plugins.Notes + + Enter notes here + true + + 904 + 4 + 160 + 680 + 0 + + + org.contikios.cooja.plugins.ScriptRunner + + + true + + 962 + 0 + 596 + 603 + 43 + + + diff --git a/regression-tests/12-rpl/06-rpl-temporary-root-loss.csc b/regression-tests/12-rpl/06-rpl-temporary-root-loss.csc index 6884c9fc5..bd771d7e7 100644 --- a/regression-tests/12-rpl/06-rpl-temporary-root-loss.csc +++ b/regression-tests/12-rpl/06-rpl-temporary-root-loss.csc @@ -1,350 +1,350 @@ - - - [APPS_DIR]/mrm - [APPS_DIR]/mspsim - [APPS_DIR]/avrora - [APPS_DIR]/serial_socket - [APPS_DIR]/collect-view - [APPS_DIR]/powertracker - - My simulation - 123456 - 1000000 - - org.contikios.cooja.radiomediums.UDGM - 50.0 - 50.0 - 1.0 - 1.0 - - - 40000 - - - org.contikios.cooja.contikimote.ContikiMoteType - mtype951 - Sender - [CONFIG_DIR]/code/sender-node.c + + + [APPS_DIR]/mrm + [APPS_DIR]/mspsim + [APPS_DIR]/avrora + [APPS_DIR]/serial_socket + [APPS_DIR]/collect-view + [APPS_DIR]/powertracker + + My simulation + 123456 + 1000000 + + org.contikios.cooja.radiomediums.UDGM + 50.0 + 50.0 + 1.0 + 1.0 + + + 40000 + + + org.contikios.cooja.contikimote.ContikiMoteType + mtype951 + Sender + [CONFIG_DIR]/code/sender-node.c make clean TARGET=cooja -make sender-node.cooja TARGET=cooja - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.Battery - org.contikios.cooja.contikimote.interfaces.ContikiVib - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - org.contikios.cooja.contikimote.interfaces.ContikiRS232 - org.contikios.cooja.contikimote.interfaces.ContikiBeeper - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.contikimote.interfaces.ContikiIPAddress - org.contikios.cooja.contikimote.interfaces.ContikiRadio - org.contikios.cooja.contikimote.interfaces.ContikiButton - org.contikios.cooja.contikimote.interfaces.ContikiPIR - org.contikios.cooja.contikimote.interfaces.ContikiClock - org.contikios.cooja.contikimote.interfaces.ContikiLED - org.contikios.cooja.contikimote.interfaces.ContikiCFS - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - false - - - org.contikios.cooja.contikimote.ContikiMoteType - mtype170 - RPL root - [CONFIG_DIR]/code/root-node.c +make sender-node.cooja TARGET=cooja + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.Battery + org.contikios.cooja.contikimote.interfaces.ContikiVib + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + org.contikios.cooja.contikimote.interfaces.ContikiRS232 + org.contikios.cooja.contikimote.interfaces.ContikiBeeper + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.contikimote.interfaces.ContikiIPAddress + org.contikios.cooja.contikimote.interfaces.ContikiRadio + org.contikios.cooja.contikimote.interfaces.ContikiButton + org.contikios.cooja.contikimote.interfaces.ContikiPIR + org.contikios.cooja.contikimote.interfaces.ContikiClock + org.contikios.cooja.contikimote.interfaces.ContikiLED + org.contikios.cooja.contikimote.interfaces.ContikiCFS + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + false + + + org.contikios.cooja.contikimote.ContikiMoteType + mtype170 + RPL root + [CONFIG_DIR]/code/root-node.c make clean TARGET=cooja -make root-node.cooja TARGET=cooja - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.Battery - org.contikios.cooja.contikimote.interfaces.ContikiVib - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - org.contikios.cooja.contikimote.interfaces.ContikiRS232 - org.contikios.cooja.contikimote.interfaces.ContikiBeeper - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.contikimote.interfaces.ContikiIPAddress - org.contikios.cooja.contikimote.interfaces.ContikiRadio - org.contikios.cooja.contikimote.interfaces.ContikiButton - org.contikios.cooja.contikimote.interfaces.ContikiPIR - org.contikios.cooja.contikimote.interfaces.ContikiClock - org.contikios.cooja.contikimote.interfaces.ContikiLED - org.contikios.cooja.contikimote.interfaces.ContikiCFS - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - false - - - org.contikios.cooja.contikimote.ContikiMoteType - mtype767 - Receiver - [CONFIG_DIR]/code/receiver-node.c +make root-node.cooja TARGET=cooja + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.Battery + org.contikios.cooja.contikimote.interfaces.ContikiVib + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + org.contikios.cooja.contikimote.interfaces.ContikiRS232 + org.contikios.cooja.contikimote.interfaces.ContikiBeeper + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.contikimote.interfaces.ContikiIPAddress + org.contikios.cooja.contikimote.interfaces.ContikiRadio + org.contikios.cooja.contikimote.interfaces.ContikiButton + org.contikios.cooja.contikimote.interfaces.ContikiPIR + org.contikios.cooja.contikimote.interfaces.ContikiClock + org.contikios.cooja.contikimote.interfaces.ContikiLED + org.contikios.cooja.contikimote.interfaces.ContikiCFS + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + false + + + org.contikios.cooja.contikimote.ContikiMoteType + mtype767 + Receiver + [CONFIG_DIR]/code/receiver-node.c make clean TARGET=cooja -make receiver-node.cooja TARGET=cooja - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.Battery - org.contikios.cooja.contikimote.interfaces.ContikiVib - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - org.contikios.cooja.contikimote.interfaces.ContikiRS232 - org.contikios.cooja.contikimote.interfaces.ContikiBeeper - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.contikimote.interfaces.ContikiIPAddress - org.contikios.cooja.contikimote.interfaces.ContikiRadio - org.contikios.cooja.contikimote.interfaces.ContikiButton - org.contikios.cooja.contikimote.interfaces.ContikiPIR - org.contikios.cooja.contikimote.interfaces.ContikiClock - org.contikios.cooja.contikimote.interfaces.ContikiLED - org.contikios.cooja.contikimote.interfaces.ContikiCFS - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - false - - - - org.contikios.cooja.interfaces.Position - -22.5728586847096 - 123.9358664968653 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 1 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype767 - - - - org.contikios.cooja.interfaces.Position - 116.13379149678028 - 88.36698920455684 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 2 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype951 - - - - org.contikios.cooja.interfaces.Position - -1.39303771455413 - 100.21446701029119 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 4 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype767 - - - - org.contikios.cooja.interfaces.Position - 95.25095618820441 - 63.14998053005015 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 5 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype767 - - - - org.contikios.cooja.interfaces.Position - 66.09378990830604 - 38.32698761608261 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 6 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype767 - - - - org.contikios.cooja.interfaces.Position - 29.05630841762433 - 30.840688165838436 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 7 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype767 - - - - org.contikios.cooja.interfaces.Position - 10.931583432822638 - 69.848248459216 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 8 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype767 - - - - org.contikios.cooja.interfaces.Position - 0.0 - 0.0 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 3 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype170 - - - - org.contikios.cooja.plugins.SimControl - 280 - 0 - 160 - 400 - 0 - - - org.contikios.cooja.plugins.Visualizer - - org.contikios.cooja.plugins.skins.IDVisualizerSkin - org.contikios.cooja.plugins.skins.UDGMVisualizerSkin - org.contikios.cooja.plugins.skins.GridVisualizerSkin - org.contikios.cooja.plugins.skins.MoteTypeVisualizerSkin - 2.5379695437350276 0.0 0.0 2.5379695437350276 75.2726010197627 15.727272727272757 - - 400 - 2 - 400 - 1 - 1 - - - org.contikios.cooja.plugins.LogListener - - - - 1184 - 3 - 240 - 402 - 162 - - - org.contikios.cooja.plugins.Notes - - Enter notes here - true - - 904 - 4 - 160 - 680 - 0 - - - org.contikios.cooja.plugins.ScriptRunner - - - true - - 962 - 1 - 596 - 603 - 43 - - - +make receiver-node.cooja TARGET=cooja + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.Battery + org.contikios.cooja.contikimote.interfaces.ContikiVib + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + org.contikios.cooja.contikimote.interfaces.ContikiRS232 + org.contikios.cooja.contikimote.interfaces.ContikiBeeper + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.contikimote.interfaces.ContikiIPAddress + org.contikios.cooja.contikimote.interfaces.ContikiRadio + org.contikios.cooja.contikimote.interfaces.ContikiButton + org.contikios.cooja.contikimote.interfaces.ContikiPIR + org.contikios.cooja.contikimote.interfaces.ContikiClock + org.contikios.cooja.contikimote.interfaces.ContikiLED + org.contikios.cooja.contikimote.interfaces.ContikiCFS + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + false + + + + org.contikios.cooja.interfaces.Position + -22.5728586847096 + 123.9358664968653 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 1 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype767 + + + + org.contikios.cooja.interfaces.Position + 116.13379149678028 + 88.36698920455684 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 2 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype951 + + + + org.contikios.cooja.interfaces.Position + -1.39303771455413 + 100.21446701029119 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 4 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype767 + + + + org.contikios.cooja.interfaces.Position + 95.25095618820441 + 63.14998053005015 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 5 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype767 + + + + org.contikios.cooja.interfaces.Position + 66.09378990830604 + 38.32698761608261 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 6 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype767 + + + + org.contikios.cooja.interfaces.Position + 29.05630841762433 + 30.840688165838436 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 7 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype767 + + + + org.contikios.cooja.interfaces.Position + 10.931583432822638 + 69.848248459216 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 8 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype767 + + + + org.contikios.cooja.interfaces.Position + 0.0 + 0.0 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 3 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype170 + + + + org.contikios.cooja.plugins.SimControl + 280 + 0 + 160 + 400 + 0 + + + org.contikios.cooja.plugins.Visualizer + + org.contikios.cooja.plugins.skins.IDVisualizerSkin + org.contikios.cooja.plugins.skins.UDGMVisualizerSkin + org.contikios.cooja.plugins.skins.GridVisualizerSkin + org.contikios.cooja.plugins.skins.MoteTypeVisualizerSkin + 2.5379695437350276 0.0 0.0 2.5379695437350276 75.2726010197627 15.727272727272757 + + 400 + 2 + 400 + 1 + 1 + + + org.contikios.cooja.plugins.LogListener + + + + 1184 + 3 + 240 + 402 + 162 + + + org.contikios.cooja.plugins.Notes + + Enter notes here + true + + 904 + 4 + 160 + 680 + 0 + + + org.contikios.cooja.plugins.ScriptRunner + + + true + + 962 + 1 + 596 + 603 + 43 + + + diff --git a/regression-tests/12-rpl/07-rpl-random-rearrangement.csc b/regression-tests/12-rpl/07-rpl-random-rearrangement.csc index 8dcbd4d35..cdb62c420 100644 --- a/regression-tests/12-rpl/07-rpl-random-rearrangement.csc +++ b/regression-tests/12-rpl/07-rpl-random-rearrangement.csc @@ -1,647 +1,647 @@ - - - [APPS_DIR]/mrm - [APPS_DIR]/mspsim - [APPS_DIR]/avrora - [APPS_DIR]/serial_socket - [APPS_DIR]/collect-view - [APPS_DIR]/powertracker - - My simulation - 123456 - 1000000 - - org.contikios.cooja.radiomediums.UDGM - 50.0 - 50.0 - 1.0 - 1.0 - - - 40000 - - - org.contikios.cooja.contikimote.ContikiMoteType - mtype419 - Sender - [CONFIG_DIR]/code/sender-node.c - make clean TARGET=cooja -make sender-node.cooja TARGET=cooja - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.Battery - org.contikios.cooja.contikimote.interfaces.ContikiVib - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - org.contikios.cooja.contikimote.interfaces.ContikiRS232 - org.contikios.cooja.contikimote.interfaces.ContikiBeeper - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.contikimote.interfaces.ContikiIPAddress - org.contikios.cooja.contikimote.interfaces.ContikiRadio - org.contikios.cooja.contikimote.interfaces.ContikiButton - org.contikios.cooja.contikimote.interfaces.ContikiPIR - org.contikios.cooja.contikimote.interfaces.ContikiClock - org.contikios.cooja.contikimote.interfaces.ContikiLED - org.contikios.cooja.contikimote.interfaces.ContikiCFS - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - false - - - org.contikios.cooja.contikimote.ContikiMoteType - mtype484 - RPL root - [CONFIG_DIR]/code/root-node.c - make clean TARGET=cooja -make root-node.cooja TARGET=cooja - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.Battery - org.contikios.cooja.contikimote.interfaces.ContikiVib - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - org.contikios.cooja.contikimote.interfaces.ContikiRS232 - org.contikios.cooja.contikimote.interfaces.ContikiBeeper - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.contikimote.interfaces.ContikiIPAddress - org.contikios.cooja.contikimote.interfaces.ContikiRadio - org.contikios.cooja.contikimote.interfaces.ContikiButton - org.contikios.cooja.contikimote.interfaces.ContikiPIR - org.contikios.cooja.contikimote.interfaces.ContikiClock - org.contikios.cooja.contikimote.interfaces.ContikiLED - org.contikios.cooja.contikimote.interfaces.ContikiCFS - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - false - - - org.contikios.cooja.contikimote.ContikiMoteType - mtype718 - Receiver - [CONFIG_DIR]/code/receiver-node.c - make clean TARGET=cooja -make receiver-node.cooja TARGET=cooja - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.Battery - org.contikios.cooja.contikimote.interfaces.ContikiVib - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - org.contikios.cooja.contikimote.interfaces.ContikiRS232 - org.contikios.cooja.contikimote.interfaces.ContikiBeeper - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.contikimote.interfaces.ContikiIPAddress - org.contikios.cooja.contikimote.interfaces.ContikiRadio - org.contikios.cooja.contikimote.interfaces.ContikiButton - org.contikios.cooja.contikimote.interfaces.ContikiPIR - org.contikios.cooja.contikimote.interfaces.ContikiClock - org.contikios.cooja.contikimote.interfaces.ContikiLED - org.contikios.cooja.contikimote.interfaces.ContikiCFS - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - false - - - - org.contikios.cooja.interfaces.Position - -0.4799968467515439 - 98.79087181374759 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 1 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype718 - - - - org.contikios.cooja.interfaces.Position - 99.56423154395364 - 50.06466731257512 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 2 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype419 - - - - org.contikios.cooja.interfaces.Position - -0.4799968467515439 - 0.30173505605854883 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 3 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype484 - - - - org.contikios.cooja.interfaces.Position - 12.779318616702257 - 8.464865358169643 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 4 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype718 - - - - org.contikios.cooja.interfaces.Position - 9.391922400291703 - 49.22878206790311 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 5 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype718 - - - - org.contikios.cooja.interfaces.Position - 48.16367625505583 - 33.27520746599595 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 6 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype718 - - - - org.contikios.cooja.interfaces.Position - 16.582742473429345 - 24.932911331640646 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 7 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype718 - - - - org.contikios.cooja.interfaces.Position - 8.445564421140666 - 6.770205395698742 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 8 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype718 - - - - org.contikios.cooja.interfaces.Position - 87.04968129458189 - 34.46536562612724 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 9 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype718 - - - - org.contikios.cooja.interfaces.Position - 94.47123252519145 - 18.275940194868184 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 10 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype718 - - - - org.contikios.cooja.interfaces.Position - 95.28044254364556 - 17.683438211793558 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 11 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype718 - - - - org.contikios.cooja.interfaces.Position - 56.124622439456076 - 33.88966252832571 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 12 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype718 - - - - org.contikios.cooja.interfaces.Position - 98.33149749474546 - 37.448034626592744 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 13 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype718 - - - - org.contikios.cooja.interfaces.Position - 58.75337436025891 - 68.64082018992522 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 14 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype718 - - - - org.contikios.cooja.interfaces.Position - 66.83816496627988 - 68.38008376830592 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 15 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype718 - - - - org.contikios.cooja.interfaces.Position - 90.88648665466316 - 50.942053906416575 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 16 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype718 - - - - org.contikios.cooja.interfaces.Position - 68.80089833632896 - 84.17294684073734 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 17 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype718 - - - - org.contikios.cooja.interfaces.Position - 73.6760846183129 - 81.76699743886633 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 18 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype718 - - - - org.contikios.cooja.interfaces.Position - 0.2960103456537466 - 98.5587829617092 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 19 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype718 - - - - org.contikios.cooja.interfaces.Position - 8.130479493904208 - 57.642099520821645 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 20 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype718 - - - - org.contikios.cooja.interfaces.Position - 30.550120982984865 - 85.58346736403402 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 21 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype718 - - - - org.contikios.cooja.interfaces.Position - 29.65300377698182 - 63.50257213104861 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 22 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype718 - - - - org.contikios.cooja.interfaces.Position - 34.92110687576687 - 70.71381297232249 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 23 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype718 - - - - org.contikios.cooja.plugins.SimControl - 280 - 1 - 160 - 400 - 0 - - - org.contikios.cooja.plugins.Visualizer - - org.contikios.cooja.plugins.skins.IDVisualizerSkin - org.contikios.cooja.plugins.skins.UDGMVisualizerSkin - org.contikios.cooja.plugins.skins.GridVisualizerSkin - org.contikios.cooja.plugins.skins.MoteTypeVisualizerSkin - 1.92914676942954 0.0 0.0 1.92914676942954 75.9259843662471 55.41790879138101 - - 400 - 2 - 400 - 1 - 1 - - - org.contikios.cooja.plugins.LogListener - - - - - - 1184 - 3 - 500 - 402 - 162 - - - org.contikios.cooja.plugins.Notes - - Enter notes here - true - - 904 - 4 - 160 - 680 - 0 - - - org.contikios.cooja.plugins.ScriptRunner - - - true - - 612 - 0 - 726 - 953 - 43 - - - + + + [APPS_DIR]/mrm + [APPS_DIR]/mspsim + [APPS_DIR]/avrora + [APPS_DIR]/serial_socket + [APPS_DIR]/collect-view + [APPS_DIR]/powertracker + + My simulation + 123456 + 1000000 + + org.contikios.cooja.radiomediums.UDGM + 50.0 + 50.0 + 1.0 + 1.0 + + + 40000 + + + org.contikios.cooja.contikimote.ContikiMoteType + mtype419 + Sender + [CONFIG_DIR]/code/sender-node.c + make clean TARGET=cooja +make sender-node.cooja TARGET=cooja + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.Battery + org.contikios.cooja.contikimote.interfaces.ContikiVib + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + org.contikios.cooja.contikimote.interfaces.ContikiRS232 + org.contikios.cooja.contikimote.interfaces.ContikiBeeper + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.contikimote.interfaces.ContikiIPAddress + org.contikios.cooja.contikimote.interfaces.ContikiRadio + org.contikios.cooja.contikimote.interfaces.ContikiButton + org.contikios.cooja.contikimote.interfaces.ContikiPIR + org.contikios.cooja.contikimote.interfaces.ContikiClock + org.contikios.cooja.contikimote.interfaces.ContikiLED + org.contikios.cooja.contikimote.interfaces.ContikiCFS + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + false + + + org.contikios.cooja.contikimote.ContikiMoteType + mtype484 + RPL root + [CONFIG_DIR]/code/root-node.c + make clean TARGET=cooja +make root-node.cooja TARGET=cooja + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.Battery + org.contikios.cooja.contikimote.interfaces.ContikiVib + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + org.contikios.cooja.contikimote.interfaces.ContikiRS232 + org.contikios.cooja.contikimote.interfaces.ContikiBeeper + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.contikimote.interfaces.ContikiIPAddress + org.contikios.cooja.contikimote.interfaces.ContikiRadio + org.contikios.cooja.contikimote.interfaces.ContikiButton + org.contikios.cooja.contikimote.interfaces.ContikiPIR + org.contikios.cooja.contikimote.interfaces.ContikiClock + org.contikios.cooja.contikimote.interfaces.ContikiLED + org.contikios.cooja.contikimote.interfaces.ContikiCFS + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + false + + + org.contikios.cooja.contikimote.ContikiMoteType + mtype718 + Receiver + [CONFIG_DIR]/code/receiver-node.c + make clean TARGET=cooja +make receiver-node.cooja TARGET=cooja + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.Battery + org.contikios.cooja.contikimote.interfaces.ContikiVib + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + org.contikios.cooja.contikimote.interfaces.ContikiRS232 + org.contikios.cooja.contikimote.interfaces.ContikiBeeper + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.contikimote.interfaces.ContikiIPAddress + org.contikios.cooja.contikimote.interfaces.ContikiRadio + org.contikios.cooja.contikimote.interfaces.ContikiButton + org.contikios.cooja.contikimote.interfaces.ContikiPIR + org.contikios.cooja.contikimote.interfaces.ContikiClock + org.contikios.cooja.contikimote.interfaces.ContikiLED + org.contikios.cooja.contikimote.interfaces.ContikiCFS + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + false + + + + org.contikios.cooja.interfaces.Position + -0.4799968467515439 + 98.79087181374759 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 1 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype718 + + + + org.contikios.cooja.interfaces.Position + 99.56423154395364 + 50.06466731257512 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 2 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype419 + + + + org.contikios.cooja.interfaces.Position + -0.4799968467515439 + 0.30173505605854883 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 3 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype484 + + + + org.contikios.cooja.interfaces.Position + 12.779318616702257 + 8.464865358169643 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 4 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype718 + + + + org.contikios.cooja.interfaces.Position + 9.391922400291703 + 49.22878206790311 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 5 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype718 + + + + org.contikios.cooja.interfaces.Position + 48.16367625505583 + 33.27520746599595 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 6 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype718 + + + + org.contikios.cooja.interfaces.Position + 16.582742473429345 + 24.932911331640646 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 7 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype718 + + + + org.contikios.cooja.interfaces.Position + 8.445564421140666 + 6.770205395698742 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 8 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype718 + + + + org.contikios.cooja.interfaces.Position + 87.04968129458189 + 34.46536562612724 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 9 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype718 + + + + org.contikios.cooja.interfaces.Position + 94.47123252519145 + 18.275940194868184 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 10 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype718 + + + + org.contikios.cooja.interfaces.Position + 95.28044254364556 + 17.683438211793558 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 11 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype718 + + + + org.contikios.cooja.interfaces.Position + 56.124622439456076 + 33.88966252832571 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 12 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype718 + + + + org.contikios.cooja.interfaces.Position + 98.33149749474546 + 37.448034626592744 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 13 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype718 + + + + org.contikios.cooja.interfaces.Position + 58.75337436025891 + 68.64082018992522 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 14 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype718 + + + + org.contikios.cooja.interfaces.Position + 66.83816496627988 + 68.38008376830592 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 15 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype718 + + + + org.contikios.cooja.interfaces.Position + 90.88648665466316 + 50.942053906416575 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 16 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype718 + + + + org.contikios.cooja.interfaces.Position + 68.80089833632896 + 84.17294684073734 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 17 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype718 + + + + org.contikios.cooja.interfaces.Position + 73.6760846183129 + 81.76699743886633 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 18 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype718 + + + + org.contikios.cooja.interfaces.Position + 0.2960103456537466 + 98.5587829617092 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 19 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype718 + + + + org.contikios.cooja.interfaces.Position + 8.130479493904208 + 57.642099520821645 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 20 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype718 + + + + org.contikios.cooja.interfaces.Position + 30.550120982984865 + 85.58346736403402 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 21 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype718 + + + + org.contikios.cooja.interfaces.Position + 29.65300377698182 + 63.50257213104861 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 22 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype718 + + + + org.contikios.cooja.interfaces.Position + 34.92110687576687 + 70.71381297232249 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 23 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype718 + + + + org.contikios.cooja.plugins.SimControl + 280 + 1 + 160 + 400 + 0 + + + org.contikios.cooja.plugins.Visualizer + + org.contikios.cooja.plugins.skins.IDVisualizerSkin + org.contikios.cooja.plugins.skins.UDGMVisualizerSkin + org.contikios.cooja.plugins.skins.GridVisualizerSkin + org.contikios.cooja.plugins.skins.MoteTypeVisualizerSkin + 1.92914676942954 0.0 0.0 1.92914676942954 75.9259843662471 55.41790879138101 + + 400 + 2 + 400 + 1 + 1 + + + org.contikios.cooja.plugins.LogListener + + + + + + 1184 + 3 + 500 + 402 + 162 + + + org.contikios.cooja.plugins.Notes + + Enter notes here + true + + 904 + 4 + 160 + 680 + 0 + + + org.contikios.cooja.plugins.ScriptRunner + + + true + + 612 + 0 + 726 + 953 + 43 + + + diff --git a/regression-tests/12-rpl/08-rpl-dao-route-loss-0.csc b/regression-tests/12-rpl/08-rpl-dao-route-loss-0.csc index 66e890394..afdbed672 100644 --- a/regression-tests/12-rpl/08-rpl-dao-route-loss-0.csc +++ b/regression-tests/12-rpl/08-rpl-dao-route-loss-0.csc @@ -1,362 +1,362 @@ - - - [APPS_DIR]/mrm - [APPS_DIR]/mspsim - [APPS_DIR]/avrora - [APPS_DIR]/serial_socket - [APPS_DIR]/collect-view - [APPS_DIR]/powertracker - - My simulation - 123456 - 1000000 - - org.contikios.cooja.radiomediums.UDGM - 50.0 - 50.0 - 1.0 - 1.0 - - - 40000 - - - org.contikios.cooja.contikimote.ContikiMoteType - mtype921 - Sender - [CONFIG_DIR]/code/sender-node.c + + + [APPS_DIR]/mrm + [APPS_DIR]/mspsim + [APPS_DIR]/avrora + [APPS_DIR]/serial_socket + [APPS_DIR]/collect-view + [APPS_DIR]/powertracker + + My simulation + 123456 + 1000000 + + org.contikios.cooja.radiomediums.UDGM + 50.0 + 50.0 + 1.0 + 1.0 + + + 40000 + + + org.contikios.cooja.contikimote.ContikiMoteType + mtype921 + Sender + [CONFIG_DIR]/code/sender-node.c make clean TARGET=cooja -make sender-node.cooja TARGET=cooja - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.Battery - org.contikios.cooja.contikimote.interfaces.ContikiVib - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - org.contikios.cooja.contikimote.interfaces.ContikiRS232 - org.contikios.cooja.contikimote.interfaces.ContikiBeeper - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.contikimote.interfaces.ContikiIPAddress - org.contikios.cooja.contikimote.interfaces.ContikiRadio - org.contikios.cooja.contikimote.interfaces.ContikiButton - org.contikios.cooja.contikimote.interfaces.ContikiPIR - org.contikios.cooja.contikimote.interfaces.ContikiClock - org.contikios.cooja.contikimote.interfaces.ContikiLED - org.contikios.cooja.contikimote.interfaces.ContikiCFS - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - false - - - org.contikios.cooja.contikimote.ContikiMoteType - mtype873 - RPL root - [CONFIG_DIR]/code/root-node.c +make sender-node.cooja TARGET=cooja + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.Battery + org.contikios.cooja.contikimote.interfaces.ContikiVib + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + org.contikios.cooja.contikimote.interfaces.ContikiRS232 + org.contikios.cooja.contikimote.interfaces.ContikiBeeper + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.contikimote.interfaces.ContikiIPAddress + org.contikios.cooja.contikimote.interfaces.ContikiRadio + org.contikios.cooja.contikimote.interfaces.ContikiButton + org.contikios.cooja.contikimote.interfaces.ContikiPIR + org.contikios.cooja.contikimote.interfaces.ContikiClock + org.contikios.cooja.contikimote.interfaces.ContikiLED + org.contikios.cooja.contikimote.interfaces.ContikiCFS + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + false + + + org.contikios.cooja.contikimote.ContikiMoteType + mtype873 + RPL root + [CONFIG_DIR]/code/root-node.c make clean TARGET=cooja -make root-node.cooja TARGET=cooja - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.Battery - org.contikios.cooja.contikimote.interfaces.ContikiVib - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - org.contikios.cooja.contikimote.interfaces.ContikiRS232 - org.contikios.cooja.contikimote.interfaces.ContikiBeeper - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.contikimote.interfaces.ContikiIPAddress - org.contikios.cooja.contikimote.interfaces.ContikiRadio - org.contikios.cooja.contikimote.interfaces.ContikiButton - org.contikios.cooja.contikimote.interfaces.ContikiPIR - org.contikios.cooja.contikimote.interfaces.ContikiClock - org.contikios.cooja.contikimote.interfaces.ContikiLED - org.contikios.cooja.contikimote.interfaces.ContikiCFS - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - false - - - org.contikios.cooja.contikimote.ContikiMoteType - mtype812 - Receiver - [CONFIG_DIR]/code/receiver-node.c +make root-node.cooja TARGET=cooja + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.Battery + org.contikios.cooja.contikimote.interfaces.ContikiVib + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + org.contikios.cooja.contikimote.interfaces.ContikiRS232 + org.contikios.cooja.contikimote.interfaces.ContikiBeeper + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.contikimote.interfaces.ContikiIPAddress + org.contikios.cooja.contikimote.interfaces.ContikiRadio + org.contikios.cooja.contikimote.interfaces.ContikiButton + org.contikios.cooja.contikimote.interfaces.ContikiPIR + org.contikios.cooja.contikimote.interfaces.ContikiClock + org.contikios.cooja.contikimote.interfaces.ContikiLED + org.contikios.cooja.contikimote.interfaces.ContikiCFS + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + false + + + org.contikios.cooja.contikimote.ContikiMoteType + mtype812 + Receiver + [CONFIG_DIR]/code/receiver-node.c make clean TARGET=cooja -make receiver-node.cooja TARGET=cooja - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.Battery - org.contikios.cooja.contikimote.interfaces.ContikiVib - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - org.contikios.cooja.contikimote.interfaces.ContikiRS232 - org.contikios.cooja.contikimote.interfaces.ContikiBeeper - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.contikimote.interfaces.ContikiIPAddress - org.contikios.cooja.contikimote.interfaces.ContikiRadio - org.contikios.cooja.contikimote.interfaces.ContikiButton - org.contikios.cooja.contikimote.interfaces.ContikiPIR - org.contikios.cooja.contikimote.interfaces.ContikiClock - org.contikios.cooja.contikimote.interfaces.ContikiLED - org.contikios.cooja.contikimote.interfaces.ContikiCFS - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - false - - - - org.contikios.cooja.interfaces.Position - -7.199692787830563 - 98.21738321803603 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 1 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 116.13379149678028 - 88.36698920455684 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 2 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype921 - - - - org.contikios.cooja.interfaces.Position - 12.0 - 68.0 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 4 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 95.25095618820441 - 63.14998053005015 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 5 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 66.09378990830604 - 38.32698761608261 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 6 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 29.05630841762433 - 30.840688165838436 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 7 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 58.0 - 108.0 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 8 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - -40.352178879596096 - 102.66976131212861 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 3 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype873 - - - - org.contikios.cooja.plugins.SimControl - 280 - 3 - 160 - 400 - 0 - - - org.contikios.cooja.plugins.Visualizer - - org.contikios.cooja.plugins.skins.IDVisualizerSkin - org.contikios.cooja.plugins.skins.UDGMVisualizerSkin - org.contikios.cooja.plugins.skins.GridVisualizerSkin - org.contikios.cooja.plugins.skins.MoteTypeVisualizerSkin - 1.6480321712565114 0.0 0.0 1.6480321712565114 98.5016889738719 55.796930342384904 - - 400 - 0 - 400 - 1 - 1 - - - org.contikios.cooja.plugins.LogListener - - - - - - 1184 - 2 - 500 - 402 - 162 - - - org.contikios.cooja.plugins.Notes - - Enter notes here - true - - 904 - 4 - 160 - 680 - 0 - - - org.contikios.cooja.plugins.ScriptRunner - - - true - - 612 - 1 - 726 - 953 - 43 - - - +make receiver-node.cooja TARGET=cooja + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.Battery + org.contikios.cooja.contikimote.interfaces.ContikiVib + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + org.contikios.cooja.contikimote.interfaces.ContikiRS232 + org.contikios.cooja.contikimote.interfaces.ContikiBeeper + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.contikimote.interfaces.ContikiIPAddress + org.contikios.cooja.contikimote.interfaces.ContikiRadio + org.contikios.cooja.contikimote.interfaces.ContikiButton + org.contikios.cooja.contikimote.interfaces.ContikiPIR + org.contikios.cooja.contikimote.interfaces.ContikiClock + org.contikios.cooja.contikimote.interfaces.ContikiLED + org.contikios.cooja.contikimote.interfaces.ContikiCFS + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + false + + + + org.contikios.cooja.interfaces.Position + -7.199692787830563 + 98.21738321803603 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 1 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 116.13379149678028 + 88.36698920455684 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 2 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype921 + + + + org.contikios.cooja.interfaces.Position + 12.0 + 68.0 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 4 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 95.25095618820441 + 63.14998053005015 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 5 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 66.09378990830604 + 38.32698761608261 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 6 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 29.05630841762433 + 30.840688165838436 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 7 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 58.0 + 108.0 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 8 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + -40.352178879596096 + 102.66976131212861 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 3 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype873 + + + + org.contikios.cooja.plugins.SimControl + 280 + 3 + 160 + 400 + 0 + + + org.contikios.cooja.plugins.Visualizer + + org.contikios.cooja.plugins.skins.IDVisualizerSkin + org.contikios.cooja.plugins.skins.UDGMVisualizerSkin + org.contikios.cooja.plugins.skins.GridVisualizerSkin + org.contikios.cooja.plugins.skins.MoteTypeVisualizerSkin + 1.6480321712565114 0.0 0.0 1.6480321712565114 98.5016889738719 55.796930342384904 + + 400 + 0 + 400 + 1 + 1 + + + org.contikios.cooja.plugins.LogListener + + + + + + 1184 + 2 + 500 + 402 + 162 + + + org.contikios.cooja.plugins.Notes + + Enter notes here + true + + 904 + 4 + 160 + 680 + 0 + + + org.contikios.cooja.plugins.ScriptRunner + + + true + + 612 + 1 + 726 + 953 + 43 + + + diff --git a/regression-tests/12-rpl/08-rpl-dao-route-loss-1.csc b/regression-tests/12-rpl/08-rpl-dao-route-loss-1.csc index 57b426ab2..3657d4b8a 100644 --- a/regression-tests/12-rpl/08-rpl-dao-route-loss-1.csc +++ b/regression-tests/12-rpl/08-rpl-dao-route-loss-1.csc @@ -1,362 +1,362 @@ - - - [APPS_DIR]/mrm - [APPS_DIR]/mspsim - [APPS_DIR]/avrora - [APPS_DIR]/serial_socket - [APPS_DIR]/collect-view - [APPS_DIR]/powertracker - - My simulation - 123456 - 1000000 - - org.contikios.cooja.radiomediums.UDGM - 50.0 - 50.0 - 1.0 - 1.0 - - - 40000 - - - org.contikios.cooja.contikimote.ContikiMoteType - mtype672 - Sender - [CONFIG_DIR]/code/sender-node.c + + + [APPS_DIR]/mrm + [APPS_DIR]/mspsim + [APPS_DIR]/avrora + [APPS_DIR]/serial_socket + [APPS_DIR]/collect-view + [APPS_DIR]/powertracker + + My simulation + 123456 + 1000000 + + org.contikios.cooja.radiomediums.UDGM + 50.0 + 50.0 + 1.0 + 1.0 + + + 40000 + + + org.contikios.cooja.contikimote.ContikiMoteType + mtype672 + Sender + [CONFIG_DIR]/code/sender-node.c make clean TARGET=cooja -make sender-node.cooja TARGET=cooja - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.Battery - org.contikios.cooja.contikimote.interfaces.ContikiVib - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - org.contikios.cooja.contikimote.interfaces.ContikiRS232 - org.contikios.cooja.contikimote.interfaces.ContikiBeeper - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.contikimote.interfaces.ContikiIPAddress - org.contikios.cooja.contikimote.interfaces.ContikiRadio - org.contikios.cooja.contikimote.interfaces.ContikiButton - org.contikios.cooja.contikimote.interfaces.ContikiPIR - org.contikios.cooja.contikimote.interfaces.ContikiClock - org.contikios.cooja.contikimote.interfaces.ContikiLED - org.contikios.cooja.contikimote.interfaces.ContikiCFS - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - false - - - org.contikios.cooja.contikimote.ContikiMoteType - mtype780 - RPL root - [CONFIG_DIR]/code/root-node.c +make sender-node.cooja TARGET=cooja + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.Battery + org.contikios.cooja.contikimote.interfaces.ContikiVib + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + org.contikios.cooja.contikimote.interfaces.ContikiRS232 + org.contikios.cooja.contikimote.interfaces.ContikiBeeper + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.contikimote.interfaces.ContikiIPAddress + org.contikios.cooja.contikimote.interfaces.ContikiRadio + org.contikios.cooja.contikimote.interfaces.ContikiButton + org.contikios.cooja.contikimote.interfaces.ContikiPIR + org.contikios.cooja.contikimote.interfaces.ContikiClock + org.contikios.cooja.contikimote.interfaces.ContikiLED + org.contikios.cooja.contikimote.interfaces.ContikiCFS + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + false + + + org.contikios.cooja.contikimote.ContikiMoteType + mtype780 + RPL root + [CONFIG_DIR]/code/root-node.c make clean TARGET=cooja -make root-node.cooja TARGET=cooja - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.Battery - org.contikios.cooja.contikimote.interfaces.ContikiVib - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - org.contikios.cooja.contikimote.interfaces.ContikiRS232 - org.contikios.cooja.contikimote.interfaces.ContikiBeeper - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.contikimote.interfaces.ContikiIPAddress - org.contikios.cooja.contikimote.interfaces.ContikiRadio - org.contikios.cooja.contikimote.interfaces.ContikiButton - org.contikios.cooja.contikimote.interfaces.ContikiPIR - org.contikios.cooja.contikimote.interfaces.ContikiClock - org.contikios.cooja.contikimote.interfaces.ContikiLED - org.contikios.cooja.contikimote.interfaces.ContikiCFS - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - false - - - org.contikios.cooja.contikimote.ContikiMoteType - mtype36 - Receiver - [CONFIG_DIR]/code/receiver-node.c +make root-node.cooja TARGET=cooja + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.Battery + org.contikios.cooja.contikimote.interfaces.ContikiVib + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + org.contikios.cooja.contikimote.interfaces.ContikiRS232 + org.contikios.cooja.contikimote.interfaces.ContikiBeeper + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.contikimote.interfaces.ContikiIPAddress + org.contikios.cooja.contikimote.interfaces.ContikiRadio + org.contikios.cooja.contikimote.interfaces.ContikiButton + org.contikios.cooja.contikimote.interfaces.ContikiPIR + org.contikios.cooja.contikimote.interfaces.ContikiClock + org.contikios.cooja.contikimote.interfaces.ContikiLED + org.contikios.cooja.contikimote.interfaces.ContikiCFS + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + false + + + org.contikios.cooja.contikimote.ContikiMoteType + mtype36 + Receiver + [CONFIG_DIR]/code/receiver-node.c make clean TARGET=cooja -make receiver-node.cooja TARGET=cooja - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.Battery - org.contikios.cooja.contikimote.interfaces.ContikiVib - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - org.contikios.cooja.contikimote.interfaces.ContikiRS232 - org.contikios.cooja.contikimote.interfaces.ContikiBeeper - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.contikimote.interfaces.ContikiIPAddress - org.contikios.cooja.contikimote.interfaces.ContikiRadio - org.contikios.cooja.contikimote.interfaces.ContikiButton - org.contikios.cooja.contikimote.interfaces.ContikiPIR - org.contikios.cooja.contikimote.interfaces.ContikiClock - org.contikios.cooja.contikimote.interfaces.ContikiLED - org.contikios.cooja.contikimote.interfaces.ContikiCFS - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - false - - - - org.contikios.cooja.interfaces.Position - -7.199692787830563 - 98.21738321803603 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 1 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype36 - - - - org.contikios.cooja.interfaces.Position - 116.13379149678028 - 88.36698920455684 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 2 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype672 - - - - org.contikios.cooja.interfaces.Position - 12.0 - 68.0 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 4 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype36 - - - - org.contikios.cooja.interfaces.Position - 95.25095618820441 - 63.14998053005015 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 5 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype36 - - - - org.contikios.cooja.interfaces.Position - 66.09378990830604 - 38.32698761608261 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 6 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype36 - - - - org.contikios.cooja.interfaces.Position - 29.05630841762433 - 30.840688165838436 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 7 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype36 - - - - org.contikios.cooja.interfaces.Position - 58.0 - 108.0 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 8 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype36 - - - - org.contikios.cooja.interfaces.Position - -25.71843353317142 - 43.05517674255262 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 3 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype780 - - - - org.contikios.cooja.plugins.SimControl - 280 - 3 - 160 - 400 - 0 - - - org.contikios.cooja.plugins.Visualizer - - org.contikios.cooja.plugins.skins.IDVisualizerSkin - org.contikios.cooja.plugins.skins.UDGMVisualizerSkin - org.contikios.cooja.plugins.skins.GridVisualizerSkin - org.contikios.cooja.plugins.skins.MoteTypeVisualizerSkin - 2.5379695437350276 0.0 0.0 2.5379695437350276 75.2726010197627 15.727272727272757 - - 400 - 2 - 400 - 1 - 1 - - - org.contikios.cooja.plugins.LogListener - - - - - - 1184 - 1 - 500 - 402 - 162 - - - org.contikios.cooja.plugins.Notes - - Enter notes here - true - - 904 - 4 - 160 - 680 - 0 - - - org.contikios.cooja.plugins.ScriptRunner - - - true - - 612 - 0 - 726 - 953 - 43 - - - +make receiver-node.cooja TARGET=cooja + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.Battery + org.contikios.cooja.contikimote.interfaces.ContikiVib + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + org.contikios.cooja.contikimote.interfaces.ContikiRS232 + org.contikios.cooja.contikimote.interfaces.ContikiBeeper + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.contikimote.interfaces.ContikiIPAddress + org.contikios.cooja.contikimote.interfaces.ContikiRadio + org.contikios.cooja.contikimote.interfaces.ContikiButton + org.contikios.cooja.contikimote.interfaces.ContikiPIR + org.contikios.cooja.contikimote.interfaces.ContikiClock + org.contikios.cooja.contikimote.interfaces.ContikiLED + org.contikios.cooja.contikimote.interfaces.ContikiCFS + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + false + + + + org.contikios.cooja.interfaces.Position + -7.199692787830563 + 98.21738321803603 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 1 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype36 + + + + org.contikios.cooja.interfaces.Position + 116.13379149678028 + 88.36698920455684 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 2 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype672 + + + + org.contikios.cooja.interfaces.Position + 12.0 + 68.0 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 4 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype36 + + + + org.contikios.cooja.interfaces.Position + 95.25095618820441 + 63.14998053005015 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 5 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype36 + + + + org.contikios.cooja.interfaces.Position + 66.09378990830604 + 38.32698761608261 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 6 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype36 + + + + org.contikios.cooja.interfaces.Position + 29.05630841762433 + 30.840688165838436 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 7 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype36 + + + + org.contikios.cooja.interfaces.Position + 58.0 + 108.0 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 8 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype36 + + + + org.contikios.cooja.interfaces.Position + -25.71843353317142 + 43.05517674255262 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 3 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype780 + + + + org.contikios.cooja.plugins.SimControl + 280 + 3 + 160 + 400 + 0 + + + org.contikios.cooja.plugins.Visualizer + + org.contikios.cooja.plugins.skins.IDVisualizerSkin + org.contikios.cooja.plugins.skins.UDGMVisualizerSkin + org.contikios.cooja.plugins.skins.GridVisualizerSkin + org.contikios.cooja.plugins.skins.MoteTypeVisualizerSkin + 2.5379695437350276 0.0 0.0 2.5379695437350276 75.2726010197627 15.727272727272757 + + 400 + 2 + 400 + 1 + 1 + + + org.contikios.cooja.plugins.LogListener + + + + + + 1184 + 1 + 500 + 402 + 162 + + + org.contikios.cooja.plugins.Notes + + Enter notes here + true + + 904 + 4 + 160 + 680 + 0 + + + org.contikios.cooja.plugins.ScriptRunner + + + true + + 612 + 0 + 726 + 953 + 43 + + + diff --git a/regression-tests/12-rpl/08-rpl-dao-route-loss-2.csc b/regression-tests/12-rpl/08-rpl-dao-route-loss-2.csc index 2f42e92ea..8c78725a3 100644 --- a/regression-tests/12-rpl/08-rpl-dao-route-loss-2.csc +++ b/regression-tests/12-rpl/08-rpl-dao-route-loss-2.csc @@ -1,362 +1,362 @@ - - - [APPS_DIR]/mrm - [APPS_DIR]/mspsim - [APPS_DIR]/avrora - [APPS_DIR]/serial_socket - [APPS_DIR]/collect-view - [APPS_DIR]/powertracker - - My simulation - 123456 - 1000000 - - org.contikios.cooja.radiomediums.UDGM - 50.0 - 50.0 - 1.0 - 1.0 - - - 40000 - - - org.contikios.cooja.contikimote.ContikiMoteType - mtype672 - Sender - [CONFIG_DIR]/code/sender-node.c + + + [APPS_DIR]/mrm + [APPS_DIR]/mspsim + [APPS_DIR]/avrora + [APPS_DIR]/serial_socket + [APPS_DIR]/collect-view + [APPS_DIR]/powertracker + + My simulation + 123456 + 1000000 + + org.contikios.cooja.radiomediums.UDGM + 50.0 + 50.0 + 1.0 + 1.0 + + + 40000 + + + org.contikios.cooja.contikimote.ContikiMoteType + mtype672 + Sender + [CONFIG_DIR]/code/sender-node.c make clean TARGET=cooja -make sender-node.cooja TARGET=cooja - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.Battery - org.contikios.cooja.contikimote.interfaces.ContikiVib - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - org.contikios.cooja.contikimote.interfaces.ContikiRS232 - org.contikios.cooja.contikimote.interfaces.ContikiBeeper - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.contikimote.interfaces.ContikiIPAddress - org.contikios.cooja.contikimote.interfaces.ContikiRadio - org.contikios.cooja.contikimote.interfaces.ContikiButton - org.contikios.cooja.contikimote.interfaces.ContikiPIR - org.contikios.cooja.contikimote.interfaces.ContikiClock - org.contikios.cooja.contikimote.interfaces.ContikiLED - org.contikios.cooja.contikimote.interfaces.ContikiCFS - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - false - - - org.contikios.cooja.contikimote.ContikiMoteType - mtype780 - RPL root - [CONFIG_DIR]/code/root-node.c +make sender-node.cooja TARGET=cooja + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.Battery + org.contikios.cooja.contikimote.interfaces.ContikiVib + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + org.contikios.cooja.contikimote.interfaces.ContikiRS232 + org.contikios.cooja.contikimote.interfaces.ContikiBeeper + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.contikimote.interfaces.ContikiIPAddress + org.contikios.cooja.contikimote.interfaces.ContikiRadio + org.contikios.cooja.contikimote.interfaces.ContikiButton + org.contikios.cooja.contikimote.interfaces.ContikiPIR + org.contikios.cooja.contikimote.interfaces.ContikiClock + org.contikios.cooja.contikimote.interfaces.ContikiLED + org.contikios.cooja.contikimote.interfaces.ContikiCFS + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + false + + + org.contikios.cooja.contikimote.ContikiMoteType + mtype780 + RPL root + [CONFIG_DIR]/code/root-node.c make clean TARGET=cooja -make root-node.cooja TARGET=cooja - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.Battery - org.contikios.cooja.contikimote.interfaces.ContikiVib - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - org.contikios.cooja.contikimote.interfaces.ContikiRS232 - org.contikios.cooja.contikimote.interfaces.ContikiBeeper - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.contikimote.interfaces.ContikiIPAddress - org.contikios.cooja.contikimote.interfaces.ContikiRadio - org.contikios.cooja.contikimote.interfaces.ContikiButton - org.contikios.cooja.contikimote.interfaces.ContikiPIR - org.contikios.cooja.contikimote.interfaces.ContikiClock - org.contikios.cooja.contikimote.interfaces.ContikiLED - org.contikios.cooja.contikimote.interfaces.ContikiCFS - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - false - - - org.contikios.cooja.contikimote.ContikiMoteType - mtype36 - Receiver - [CONFIG_DIR]/code/receiver-node.c +make root-node.cooja TARGET=cooja + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.Battery + org.contikios.cooja.contikimote.interfaces.ContikiVib + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + org.contikios.cooja.contikimote.interfaces.ContikiRS232 + org.contikios.cooja.contikimote.interfaces.ContikiBeeper + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.contikimote.interfaces.ContikiIPAddress + org.contikios.cooja.contikimote.interfaces.ContikiRadio + org.contikios.cooja.contikimote.interfaces.ContikiButton + org.contikios.cooja.contikimote.interfaces.ContikiPIR + org.contikios.cooja.contikimote.interfaces.ContikiClock + org.contikios.cooja.contikimote.interfaces.ContikiLED + org.contikios.cooja.contikimote.interfaces.ContikiCFS + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + false + + + org.contikios.cooja.contikimote.ContikiMoteType + mtype36 + Receiver + [CONFIG_DIR]/code/receiver-node.c make clean TARGET=cooja -make receiver-node.cooja TARGET=cooja - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.Battery - org.contikios.cooja.contikimote.interfaces.ContikiVib - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - org.contikios.cooja.contikimote.interfaces.ContikiRS232 - org.contikios.cooja.contikimote.interfaces.ContikiBeeper - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.contikimote.interfaces.ContikiIPAddress - org.contikios.cooja.contikimote.interfaces.ContikiRadio - org.contikios.cooja.contikimote.interfaces.ContikiButton - org.contikios.cooja.contikimote.interfaces.ContikiPIR - org.contikios.cooja.contikimote.interfaces.ContikiClock - org.contikios.cooja.contikimote.interfaces.ContikiLED - org.contikios.cooja.contikimote.interfaces.ContikiCFS - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - false - - - - org.contikios.cooja.interfaces.Position - -7.199692787830563 - 98.21738321803603 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 1 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype36 - - - - org.contikios.cooja.interfaces.Position - 116.13379149678028 - 88.36698920455684 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 2 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype672 - - - - org.contikios.cooja.interfaces.Position - 12.0 - 68.0 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 4 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype36 - - - - org.contikios.cooja.interfaces.Position - 95.25095618820441 - 63.14998053005015 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 5 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype36 - - - - org.contikios.cooja.interfaces.Position - 66.09378990830604 - 38.32698761608261 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 6 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype36 - - - - org.contikios.cooja.interfaces.Position - 29.05630841762433 - 30.840688165838436 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 7 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype36 - - - - org.contikios.cooja.interfaces.Position - 58.0 - 108.0 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 8 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype36 - - - - org.contikios.cooja.interfaces.Position - 16.0472370839803 - 6.017695251870905 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 3 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype780 - - - - org.contikios.cooja.plugins.SimControl - 280 - 3 - 160 - 400 - 0 - - - org.contikios.cooja.plugins.Visualizer - - org.contikios.cooja.plugins.skins.IDVisualizerSkin - org.contikios.cooja.plugins.skins.UDGMVisualizerSkin - org.contikios.cooja.plugins.skins.GridVisualizerSkin - org.contikios.cooja.plugins.skins.MoteTypeVisualizerSkin - 2.5379695437350276 0.0 0.0 2.5379695437350276 75.2726010197627 15.727272727272757 - - 400 - 0 - 400 - 1 - 1 - - - org.contikios.cooja.plugins.LogListener - - - - - - 1184 - 2 - 500 - 402 - 162 - - - org.contikios.cooja.plugins.Notes - - Enter notes here - true - - 904 - 4 - 160 - 680 - 0 - - - org.contikios.cooja.plugins.ScriptRunner - - - true - - 612 - 1 - 726 - 953 - 43 - - - +make receiver-node.cooja TARGET=cooja + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.Battery + org.contikios.cooja.contikimote.interfaces.ContikiVib + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + org.contikios.cooja.contikimote.interfaces.ContikiRS232 + org.contikios.cooja.contikimote.interfaces.ContikiBeeper + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.contikimote.interfaces.ContikiIPAddress + org.contikios.cooja.contikimote.interfaces.ContikiRadio + org.contikios.cooja.contikimote.interfaces.ContikiButton + org.contikios.cooja.contikimote.interfaces.ContikiPIR + org.contikios.cooja.contikimote.interfaces.ContikiClock + org.contikios.cooja.contikimote.interfaces.ContikiLED + org.contikios.cooja.contikimote.interfaces.ContikiCFS + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + false + + + + org.contikios.cooja.interfaces.Position + -7.199692787830563 + 98.21738321803603 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 1 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype36 + + + + org.contikios.cooja.interfaces.Position + 116.13379149678028 + 88.36698920455684 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 2 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype672 + + + + org.contikios.cooja.interfaces.Position + 12.0 + 68.0 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 4 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype36 + + + + org.contikios.cooja.interfaces.Position + 95.25095618820441 + 63.14998053005015 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 5 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype36 + + + + org.contikios.cooja.interfaces.Position + 66.09378990830604 + 38.32698761608261 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 6 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype36 + + + + org.contikios.cooja.interfaces.Position + 29.05630841762433 + 30.840688165838436 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 7 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype36 + + + + org.contikios.cooja.interfaces.Position + 58.0 + 108.0 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 8 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype36 + + + + org.contikios.cooja.interfaces.Position + 16.0472370839803 + 6.017695251870905 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 3 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype780 + + + + org.contikios.cooja.plugins.SimControl + 280 + 3 + 160 + 400 + 0 + + + org.contikios.cooja.plugins.Visualizer + + org.contikios.cooja.plugins.skins.IDVisualizerSkin + org.contikios.cooja.plugins.skins.UDGMVisualizerSkin + org.contikios.cooja.plugins.skins.GridVisualizerSkin + org.contikios.cooja.plugins.skins.MoteTypeVisualizerSkin + 2.5379695437350276 0.0 0.0 2.5379695437350276 75.2726010197627 15.727272727272757 + + 400 + 0 + 400 + 1 + 1 + + + org.contikios.cooja.plugins.LogListener + + + + + + 1184 + 2 + 500 + 402 + 162 + + + org.contikios.cooja.plugins.Notes + + Enter notes here + true + + 904 + 4 + 160 + 680 + 0 + + + org.contikios.cooja.plugins.ScriptRunner + + + true + + 612 + 1 + 726 + 953 + 43 + + + diff --git a/regression-tests/12-rpl/08-rpl-dao-route-loss-3.csc b/regression-tests/12-rpl/08-rpl-dao-route-loss-3.csc index 63fb1e042..fd1983379 100644 --- a/regression-tests/12-rpl/08-rpl-dao-route-loss-3.csc +++ b/regression-tests/12-rpl/08-rpl-dao-route-loss-3.csc @@ -1,362 +1,362 @@ - - - [APPS_DIR]/mrm - [APPS_DIR]/mspsim - [APPS_DIR]/avrora - [APPS_DIR]/serial_socket - [APPS_DIR]/collect-view - [APPS_DIR]/powertracker - - My simulation - 123456 - 1000000 - - org.contikios.cooja.radiomediums.UDGM - 50.0 - 50.0 - 1.0 - 1.0 - - - 40000 - - - org.contikios.cooja.contikimote.ContikiMoteType - mtype672 - Sender - [CONFIG_DIR]/code/sender-node.c + + + [APPS_DIR]/mrm + [APPS_DIR]/mspsim + [APPS_DIR]/avrora + [APPS_DIR]/serial_socket + [APPS_DIR]/collect-view + [APPS_DIR]/powertracker + + My simulation + 123456 + 1000000 + + org.contikios.cooja.radiomediums.UDGM + 50.0 + 50.0 + 1.0 + 1.0 + + + 40000 + + + org.contikios.cooja.contikimote.ContikiMoteType + mtype672 + Sender + [CONFIG_DIR]/code/sender-node.c make clean TARGET=cooja -make sender-node.cooja TARGET=cooja - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.Battery - org.contikios.cooja.contikimote.interfaces.ContikiVib - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - org.contikios.cooja.contikimote.interfaces.ContikiRS232 - org.contikios.cooja.contikimote.interfaces.ContikiBeeper - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.contikimote.interfaces.ContikiIPAddress - org.contikios.cooja.contikimote.interfaces.ContikiRadio - org.contikios.cooja.contikimote.interfaces.ContikiButton - org.contikios.cooja.contikimote.interfaces.ContikiPIR - org.contikios.cooja.contikimote.interfaces.ContikiClock - org.contikios.cooja.contikimote.interfaces.ContikiLED - org.contikios.cooja.contikimote.interfaces.ContikiCFS - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - false - - - org.contikios.cooja.contikimote.ContikiMoteType - mtype780 - RPL root - [CONFIG_DIR]/code/root-node.c +make sender-node.cooja TARGET=cooja + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.Battery + org.contikios.cooja.contikimote.interfaces.ContikiVib + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + org.contikios.cooja.contikimote.interfaces.ContikiRS232 + org.contikios.cooja.contikimote.interfaces.ContikiBeeper + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.contikimote.interfaces.ContikiIPAddress + org.contikios.cooja.contikimote.interfaces.ContikiRadio + org.contikios.cooja.contikimote.interfaces.ContikiButton + org.contikios.cooja.contikimote.interfaces.ContikiPIR + org.contikios.cooja.contikimote.interfaces.ContikiClock + org.contikios.cooja.contikimote.interfaces.ContikiLED + org.contikios.cooja.contikimote.interfaces.ContikiCFS + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + false + + + org.contikios.cooja.contikimote.ContikiMoteType + mtype780 + RPL root + [CONFIG_DIR]/code/root-node.c make clean TARGET=cooja -make root-node.cooja TARGET=cooja - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.Battery - org.contikios.cooja.contikimote.interfaces.ContikiVib - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - org.contikios.cooja.contikimote.interfaces.ContikiRS232 - org.contikios.cooja.contikimote.interfaces.ContikiBeeper - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.contikimote.interfaces.ContikiIPAddress - org.contikios.cooja.contikimote.interfaces.ContikiRadio - org.contikios.cooja.contikimote.interfaces.ContikiButton - org.contikios.cooja.contikimote.interfaces.ContikiPIR - org.contikios.cooja.contikimote.interfaces.ContikiClock - org.contikios.cooja.contikimote.interfaces.ContikiLED - org.contikios.cooja.contikimote.interfaces.ContikiCFS - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - false - - - org.contikios.cooja.contikimote.ContikiMoteType - mtype36 - Receiver - [CONFIG_DIR]/code/receiver-node.c +make root-node.cooja TARGET=cooja + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.Battery + org.contikios.cooja.contikimote.interfaces.ContikiVib + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + org.contikios.cooja.contikimote.interfaces.ContikiRS232 + org.contikios.cooja.contikimote.interfaces.ContikiBeeper + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.contikimote.interfaces.ContikiIPAddress + org.contikios.cooja.contikimote.interfaces.ContikiRadio + org.contikios.cooja.contikimote.interfaces.ContikiButton + org.contikios.cooja.contikimote.interfaces.ContikiPIR + org.contikios.cooja.contikimote.interfaces.ContikiClock + org.contikios.cooja.contikimote.interfaces.ContikiLED + org.contikios.cooja.contikimote.interfaces.ContikiCFS + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + false + + + org.contikios.cooja.contikimote.ContikiMoteType + mtype36 + Receiver + [CONFIG_DIR]/code/receiver-node.c make clean TARGET=cooja -make receiver-node.cooja TARGET=cooja - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.Battery - org.contikios.cooja.contikimote.interfaces.ContikiVib - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - org.contikios.cooja.contikimote.interfaces.ContikiRS232 - org.contikios.cooja.contikimote.interfaces.ContikiBeeper - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.contikimote.interfaces.ContikiIPAddress - org.contikios.cooja.contikimote.interfaces.ContikiRadio - org.contikios.cooja.contikimote.interfaces.ContikiButton - org.contikios.cooja.contikimote.interfaces.ContikiPIR - org.contikios.cooja.contikimote.interfaces.ContikiClock - org.contikios.cooja.contikimote.interfaces.ContikiLED - org.contikios.cooja.contikimote.interfaces.ContikiCFS - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - false - - - - org.contikios.cooja.interfaces.Position - -7.199692787830563 - 98.21738321803603 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 1 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype36 - - - - org.contikios.cooja.interfaces.Position - 116.13379149678028 - 88.36698920455684 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 2 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype672 - - - - org.contikios.cooja.interfaces.Position - 12.0 - 68.0 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 4 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype36 - - - - org.contikios.cooja.interfaces.Position - 95.25095618820441 - 63.14998053005015 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 5 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype36 - - - - org.contikios.cooja.interfaces.Position - 66.09378990830604 - 38.32698761608261 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 6 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype36 - - - - org.contikios.cooja.interfaces.Position - 29.05630841762433 - 30.840688165838436 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 7 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype36 - - - - org.contikios.cooja.interfaces.Position - 58.0 - 108.0 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 8 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype36 - - - - org.contikios.cooja.interfaces.Position - 79.48377453078622 - 4.835647970253402 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 3 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype780 - - - - org.contikios.cooja.plugins.SimControl - 280 - 3 - 160 - 400 - 0 - - - org.contikios.cooja.plugins.Visualizer - - org.contikios.cooja.plugins.skins.IDVisualizerSkin - org.contikios.cooja.plugins.skins.UDGMVisualizerSkin - org.contikios.cooja.plugins.skins.GridVisualizerSkin - org.contikios.cooja.plugins.skins.MoteTypeVisualizerSkin - 2.5379695437350276 0.0 0.0 2.5379695437350276 70.27260101976269 60.72727272727276 - - 400 - 0 - 400 - 1 - 1 - - - org.contikios.cooja.plugins.LogListener - - - - - - 1184 - 2 - 500 - 402 - 162 - - - org.contikios.cooja.plugins.Notes - - Enter notes here - true - - 904 - 4 - 160 - 680 - 0 - - - org.contikios.cooja.plugins.ScriptRunner - - - true - - 612 - 1 - 726 - 953 - 43 - - - +make receiver-node.cooja TARGET=cooja + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.Battery + org.contikios.cooja.contikimote.interfaces.ContikiVib + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + org.contikios.cooja.contikimote.interfaces.ContikiRS232 + org.contikios.cooja.contikimote.interfaces.ContikiBeeper + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.contikimote.interfaces.ContikiIPAddress + org.contikios.cooja.contikimote.interfaces.ContikiRadio + org.contikios.cooja.contikimote.interfaces.ContikiButton + org.contikios.cooja.contikimote.interfaces.ContikiPIR + org.contikios.cooja.contikimote.interfaces.ContikiClock + org.contikios.cooja.contikimote.interfaces.ContikiLED + org.contikios.cooja.contikimote.interfaces.ContikiCFS + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + false + + + + org.contikios.cooja.interfaces.Position + -7.199692787830563 + 98.21738321803603 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 1 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype36 + + + + org.contikios.cooja.interfaces.Position + 116.13379149678028 + 88.36698920455684 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 2 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype672 + + + + org.contikios.cooja.interfaces.Position + 12.0 + 68.0 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 4 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype36 + + + + org.contikios.cooja.interfaces.Position + 95.25095618820441 + 63.14998053005015 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 5 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype36 + + + + org.contikios.cooja.interfaces.Position + 66.09378990830604 + 38.32698761608261 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 6 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype36 + + + + org.contikios.cooja.interfaces.Position + 29.05630841762433 + 30.840688165838436 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 7 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype36 + + + + org.contikios.cooja.interfaces.Position + 58.0 + 108.0 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 8 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype36 + + + + org.contikios.cooja.interfaces.Position + 79.48377453078622 + 4.835647970253402 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 3 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype780 + + + + org.contikios.cooja.plugins.SimControl + 280 + 3 + 160 + 400 + 0 + + + org.contikios.cooja.plugins.Visualizer + + org.contikios.cooja.plugins.skins.IDVisualizerSkin + org.contikios.cooja.plugins.skins.UDGMVisualizerSkin + org.contikios.cooja.plugins.skins.GridVisualizerSkin + org.contikios.cooja.plugins.skins.MoteTypeVisualizerSkin + 2.5379695437350276 0.0 0.0 2.5379695437350276 70.27260101976269 60.72727272727276 + + 400 + 0 + 400 + 1 + 1 + + + org.contikios.cooja.plugins.LogListener + + + + + + 1184 + 2 + 500 + 402 + 162 + + + org.contikios.cooja.plugins.Notes + + Enter notes here + true + + 904 + 4 + 160 + 680 + 0 + + + org.contikios.cooja.plugins.ScriptRunner + + + true + + 612 + 1 + 726 + 953 + 43 + + + diff --git a/regression-tests/12-rpl/08-rpl-dao-route-loss-4.csc b/regression-tests/12-rpl/08-rpl-dao-route-loss-4.csc index 8b33f560a..8db19c568 100644 --- a/regression-tests/12-rpl/08-rpl-dao-route-loss-4.csc +++ b/regression-tests/12-rpl/08-rpl-dao-route-loss-4.csc @@ -1,362 +1,362 @@ - - - [APPS_DIR]/mrm - [APPS_DIR]/mspsim - [APPS_DIR]/avrora - [APPS_DIR]/serial_socket - [APPS_DIR]/collect-view - [APPS_DIR]/powertracker - - My simulation - 123456 - 1000000 - - org.contikios.cooja.radiomediums.UDGM - 50.0 - 50.0 - 1.0 - 1.0 - - - 40000 - - - org.contikios.cooja.contikimote.ContikiMoteType - mtype192 - Sender - [CONFIG_DIR]/code/sender-node.c + + + [APPS_DIR]/mrm + [APPS_DIR]/mspsim + [APPS_DIR]/avrora + [APPS_DIR]/serial_socket + [APPS_DIR]/collect-view + [APPS_DIR]/powertracker + + My simulation + 123456 + 1000000 + + org.contikios.cooja.radiomediums.UDGM + 50.0 + 50.0 + 1.0 + 1.0 + + + 40000 + + + org.contikios.cooja.contikimote.ContikiMoteType + mtype192 + Sender + [CONFIG_DIR]/code/sender-node.c make clean TARGET=cooja -make sender-node.cooja TARGET=cooja - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.Battery - org.contikios.cooja.contikimote.interfaces.ContikiVib - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - org.contikios.cooja.contikimote.interfaces.ContikiRS232 - org.contikios.cooja.contikimote.interfaces.ContikiBeeper - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.contikimote.interfaces.ContikiIPAddress - org.contikios.cooja.contikimote.interfaces.ContikiRadio - org.contikios.cooja.contikimote.interfaces.ContikiButton - org.contikios.cooja.contikimote.interfaces.ContikiPIR - org.contikios.cooja.contikimote.interfaces.ContikiClock - org.contikios.cooja.contikimote.interfaces.ContikiLED - org.contikios.cooja.contikimote.interfaces.ContikiCFS - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - false - - - org.contikios.cooja.contikimote.ContikiMoteType - mtype575 - RPL root - [CONFIG_DIR]/code/root-node.c +make sender-node.cooja TARGET=cooja + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.Battery + org.contikios.cooja.contikimote.interfaces.ContikiVib + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + org.contikios.cooja.contikimote.interfaces.ContikiRS232 + org.contikios.cooja.contikimote.interfaces.ContikiBeeper + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.contikimote.interfaces.ContikiIPAddress + org.contikios.cooja.contikimote.interfaces.ContikiRadio + org.contikios.cooja.contikimote.interfaces.ContikiButton + org.contikios.cooja.contikimote.interfaces.ContikiPIR + org.contikios.cooja.contikimote.interfaces.ContikiClock + org.contikios.cooja.contikimote.interfaces.ContikiLED + org.contikios.cooja.contikimote.interfaces.ContikiCFS + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + false + + + org.contikios.cooja.contikimote.ContikiMoteType + mtype575 + RPL root + [CONFIG_DIR]/code/root-node.c make clean TARGET=cooja -make root-node.cooja TARGET=cooja - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.Battery - org.contikios.cooja.contikimote.interfaces.ContikiVib - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - org.contikios.cooja.contikimote.interfaces.ContikiRS232 - org.contikios.cooja.contikimote.interfaces.ContikiBeeper - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.contikimote.interfaces.ContikiIPAddress - org.contikios.cooja.contikimote.interfaces.ContikiRadio - org.contikios.cooja.contikimote.interfaces.ContikiButton - org.contikios.cooja.contikimote.interfaces.ContikiPIR - org.contikios.cooja.contikimote.interfaces.ContikiClock - org.contikios.cooja.contikimote.interfaces.ContikiLED - org.contikios.cooja.contikimote.interfaces.ContikiCFS - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - false - - - org.contikios.cooja.contikimote.ContikiMoteType - mtype912 - Receiver - [CONFIG_DIR]/code/receiver-node.c +make root-node.cooja TARGET=cooja + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.Battery + org.contikios.cooja.contikimote.interfaces.ContikiVib + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + org.contikios.cooja.contikimote.interfaces.ContikiRS232 + org.contikios.cooja.contikimote.interfaces.ContikiBeeper + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.contikimote.interfaces.ContikiIPAddress + org.contikios.cooja.contikimote.interfaces.ContikiRadio + org.contikios.cooja.contikimote.interfaces.ContikiButton + org.contikios.cooja.contikimote.interfaces.ContikiPIR + org.contikios.cooja.contikimote.interfaces.ContikiClock + org.contikios.cooja.contikimote.interfaces.ContikiLED + org.contikios.cooja.contikimote.interfaces.ContikiCFS + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + false + + + org.contikios.cooja.contikimote.ContikiMoteType + mtype912 + Receiver + [CONFIG_DIR]/code/receiver-node.c make clean TARGET=cooja -make receiver-node.cooja TARGET=cooja - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.Battery - org.contikios.cooja.contikimote.interfaces.ContikiVib - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - org.contikios.cooja.contikimote.interfaces.ContikiRS232 - org.contikios.cooja.contikimote.interfaces.ContikiBeeper - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.contikimote.interfaces.ContikiIPAddress - org.contikios.cooja.contikimote.interfaces.ContikiRadio - org.contikios.cooja.contikimote.interfaces.ContikiButton - org.contikios.cooja.contikimote.interfaces.ContikiPIR - org.contikios.cooja.contikimote.interfaces.ContikiClock - org.contikios.cooja.contikimote.interfaces.ContikiLED - org.contikios.cooja.contikimote.interfaces.ContikiCFS - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - false - - - - org.contikios.cooja.interfaces.Position - -7.199692787830563 - 98.21738321803603 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 1 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype912 - - - - org.contikios.cooja.interfaces.Position - 116.13379149678028 - 88.36698920455684 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 2 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype192 - - - - org.contikios.cooja.interfaces.Position - 12.0 - 68.0 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 4 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype912 - - - - org.contikios.cooja.interfaces.Position - 95.25095618820441 - 63.14998053005015 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 5 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype912 - - - - org.contikios.cooja.interfaces.Position - 66.09378990830604 - 38.32698761608261 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 6 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype912 - - - - org.contikios.cooja.interfaces.Position - 29.05630841762433 - 30.840688165838436 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 7 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype912 - - - - org.contikios.cooja.interfaces.Position - 58.0 - 108.0 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 8 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype912 - - - - org.contikios.cooja.interfaces.Position - 122.82550819009461 - 29.658640884220933 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 3 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype575 - - - - org.contikios.cooja.plugins.SimControl - 280 - 3 - 160 - 400 - 0 - - - org.contikios.cooja.plugins.Visualizer - - org.contikios.cooja.plugins.skins.IDVisualizerSkin - org.contikios.cooja.plugins.skins.UDGMVisualizerSkin - org.contikios.cooja.plugins.skins.GridVisualizerSkin - org.contikios.cooja.plugins.skins.MoteTypeVisualizerSkin - 2.5379695437350276 0.0 0.0 2.5379695437350276 70.27260101976269 60.72727272727276 - - 400 - 0 - 400 - 1 - 1 - - - org.contikios.cooja.plugins.LogListener - - - - - - 1184 - 2 - 500 - 402 - 162 - - - org.contikios.cooja.plugins.Notes - - Enter notes here - true - - 904 - 4 - 160 - 680 - 0 - - - org.contikios.cooja.plugins.ScriptRunner - - - true - - 612 - 1 - 726 - 953 - 43 - - - +make receiver-node.cooja TARGET=cooja + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.Battery + org.contikios.cooja.contikimote.interfaces.ContikiVib + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + org.contikios.cooja.contikimote.interfaces.ContikiRS232 + org.contikios.cooja.contikimote.interfaces.ContikiBeeper + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.contikimote.interfaces.ContikiIPAddress + org.contikios.cooja.contikimote.interfaces.ContikiRadio + org.contikios.cooja.contikimote.interfaces.ContikiButton + org.contikios.cooja.contikimote.interfaces.ContikiPIR + org.contikios.cooja.contikimote.interfaces.ContikiClock + org.contikios.cooja.contikimote.interfaces.ContikiLED + org.contikios.cooja.contikimote.interfaces.ContikiCFS + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + false + + + + org.contikios.cooja.interfaces.Position + -7.199692787830563 + 98.21738321803603 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 1 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype912 + + + + org.contikios.cooja.interfaces.Position + 116.13379149678028 + 88.36698920455684 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 2 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype192 + + + + org.contikios.cooja.interfaces.Position + 12.0 + 68.0 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 4 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype912 + + + + org.contikios.cooja.interfaces.Position + 95.25095618820441 + 63.14998053005015 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 5 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype912 + + + + org.contikios.cooja.interfaces.Position + 66.09378990830604 + 38.32698761608261 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 6 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype912 + + + + org.contikios.cooja.interfaces.Position + 29.05630841762433 + 30.840688165838436 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 7 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype912 + + + + org.contikios.cooja.interfaces.Position + 58.0 + 108.0 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 8 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype912 + + + + org.contikios.cooja.interfaces.Position + 122.82550819009461 + 29.658640884220933 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 3 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype575 + + + + org.contikios.cooja.plugins.SimControl + 280 + 3 + 160 + 400 + 0 + + + org.contikios.cooja.plugins.Visualizer + + org.contikios.cooja.plugins.skins.IDVisualizerSkin + org.contikios.cooja.plugins.skins.UDGMVisualizerSkin + org.contikios.cooja.plugins.skins.GridVisualizerSkin + org.contikios.cooja.plugins.skins.MoteTypeVisualizerSkin + 2.5379695437350276 0.0 0.0 2.5379695437350276 70.27260101976269 60.72727272727276 + + 400 + 0 + 400 + 1 + 1 + + + org.contikios.cooja.plugins.LogListener + + + + + + 1184 + 2 + 500 + 402 + 162 + + + org.contikios.cooja.plugins.Notes + + Enter notes here + true + + 904 + 4 + 160 + 680 + 0 + + + org.contikios.cooja.plugins.ScriptRunner + + + true + + 612 + 1 + 726 + 953 + 43 + + + diff --git a/regression-tests/12-rpl/08-rpl-dao-route-loss-5.csc b/regression-tests/12-rpl/08-rpl-dao-route-loss-5.csc index 56925381b..0f4d7db7d 100644 --- a/regression-tests/12-rpl/08-rpl-dao-route-loss-5.csc +++ b/regression-tests/12-rpl/08-rpl-dao-route-loss-5.csc @@ -1,362 +1,362 @@ - - - [APPS_DIR]/mrm - [APPS_DIR]/mspsim - [APPS_DIR]/avrora - [APPS_DIR]/serial_socket - [APPS_DIR]/collect-view - [APPS_DIR]/powertracker - - My simulation - 123456 - 1000000 - - org.contikios.cooja.radiomediums.UDGM - 50.0 - 50.0 - 1.0 - 1.0 - - - 40000 - - - org.contikios.cooja.contikimote.ContikiMoteType - mtype372 - Sender - [CONFIG_DIR]/code/sender-node.c + + + [APPS_DIR]/mrm + [APPS_DIR]/mspsim + [APPS_DIR]/avrora + [APPS_DIR]/serial_socket + [APPS_DIR]/collect-view + [APPS_DIR]/powertracker + + My simulation + 123456 + 1000000 + + org.contikios.cooja.radiomediums.UDGM + 50.0 + 50.0 + 1.0 + 1.0 + + + 40000 + + + org.contikios.cooja.contikimote.ContikiMoteType + mtype372 + Sender + [CONFIG_DIR]/code/sender-node.c make clean TARGET=cooja -make sender-node.cooja TARGET=cooja - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.Battery - org.contikios.cooja.contikimote.interfaces.ContikiVib - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - org.contikios.cooja.contikimote.interfaces.ContikiRS232 - org.contikios.cooja.contikimote.interfaces.ContikiBeeper - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.contikimote.interfaces.ContikiIPAddress - org.contikios.cooja.contikimote.interfaces.ContikiRadio - org.contikios.cooja.contikimote.interfaces.ContikiButton - org.contikios.cooja.contikimote.interfaces.ContikiPIR - org.contikios.cooja.contikimote.interfaces.ContikiClock - org.contikios.cooja.contikimote.interfaces.ContikiLED - org.contikios.cooja.contikimote.interfaces.ContikiCFS - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - false - - - org.contikios.cooja.contikimote.ContikiMoteType - mtype229 - RPL root - [CONFIG_DIR]/code/root-node.c +make sender-node.cooja TARGET=cooja + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.Battery + org.contikios.cooja.contikimote.interfaces.ContikiVib + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + org.contikios.cooja.contikimote.interfaces.ContikiRS232 + org.contikios.cooja.contikimote.interfaces.ContikiBeeper + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.contikimote.interfaces.ContikiIPAddress + org.contikios.cooja.contikimote.interfaces.ContikiRadio + org.contikios.cooja.contikimote.interfaces.ContikiButton + org.contikios.cooja.contikimote.interfaces.ContikiPIR + org.contikios.cooja.contikimote.interfaces.ContikiClock + org.contikios.cooja.contikimote.interfaces.ContikiLED + org.contikios.cooja.contikimote.interfaces.ContikiCFS + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + false + + + org.contikios.cooja.contikimote.ContikiMoteType + mtype229 + RPL root + [CONFIG_DIR]/code/root-node.c make clean TARGET=cooja -make root-node.cooja TARGET=cooja - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.Battery - org.contikios.cooja.contikimote.interfaces.ContikiVib - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - org.contikios.cooja.contikimote.interfaces.ContikiRS232 - org.contikios.cooja.contikimote.interfaces.ContikiBeeper - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.contikimote.interfaces.ContikiIPAddress - org.contikios.cooja.contikimote.interfaces.ContikiRadio - org.contikios.cooja.contikimote.interfaces.ContikiButton - org.contikios.cooja.contikimote.interfaces.ContikiPIR - org.contikios.cooja.contikimote.interfaces.ContikiClock - org.contikios.cooja.contikimote.interfaces.ContikiLED - org.contikios.cooja.contikimote.interfaces.ContikiCFS - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - false - - - org.contikios.cooja.contikimote.ContikiMoteType - mtype424 - Receiver - [CONFIG_DIR]/code/receiver-node.c +make root-node.cooja TARGET=cooja + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.Battery + org.contikios.cooja.contikimote.interfaces.ContikiVib + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + org.contikios.cooja.contikimote.interfaces.ContikiRS232 + org.contikios.cooja.contikimote.interfaces.ContikiBeeper + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.contikimote.interfaces.ContikiIPAddress + org.contikios.cooja.contikimote.interfaces.ContikiRadio + org.contikios.cooja.contikimote.interfaces.ContikiButton + org.contikios.cooja.contikimote.interfaces.ContikiPIR + org.contikios.cooja.contikimote.interfaces.ContikiClock + org.contikios.cooja.contikimote.interfaces.ContikiLED + org.contikios.cooja.contikimote.interfaces.ContikiCFS + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + false + + + org.contikios.cooja.contikimote.ContikiMoteType + mtype424 + Receiver + [CONFIG_DIR]/code/receiver-node.c make clean TARGET=cooja -make receiver-node.cooja TARGET=cooja - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.Battery - org.contikios.cooja.contikimote.interfaces.ContikiVib - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - org.contikios.cooja.contikimote.interfaces.ContikiRS232 - org.contikios.cooja.contikimote.interfaces.ContikiBeeper - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.contikimote.interfaces.ContikiIPAddress - org.contikios.cooja.contikimote.interfaces.ContikiRadio - org.contikios.cooja.contikimote.interfaces.ContikiButton - org.contikios.cooja.contikimote.interfaces.ContikiPIR - org.contikios.cooja.contikimote.interfaces.ContikiClock - org.contikios.cooja.contikimote.interfaces.ContikiLED - org.contikios.cooja.contikimote.interfaces.ContikiCFS - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - false - - - - org.contikios.cooja.interfaces.Position - -7.199692787830563 - 98.21738321803603 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 1 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype424 - - - - org.contikios.cooja.interfaces.Position - 116.13379149678028 - 88.36698920455684 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 2 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype372 - - - - org.contikios.cooja.interfaces.Position - 12.0 - 68.0 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 4 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype424 - - - - org.contikios.cooja.interfaces.Position - 95.25095618820441 - 63.14998053005015 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 5 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype424 - - - - org.contikios.cooja.interfaces.Position - 66.09378990830604 - 38.32698761608261 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 6 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype424 - - - - org.contikios.cooja.interfaces.Position - 29.05630841762433 - 30.840688165838436 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 7 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype424 - - - - org.contikios.cooja.interfaces.Position - 58.0 - 108.0 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 8 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype424 - - - - org.contikios.cooja.interfaces.Position - 145.93059238811136 - 111.16474110935306 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 3 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype229 - - - - org.contikios.cooja.plugins.SimControl - 280 - 3 - 160 - 400 - 0 - - - org.contikios.cooja.plugins.Visualizer - - org.contikios.cooja.plugins.skins.IDVisualizerSkin - org.contikios.cooja.plugins.skins.UDGMVisualizerSkin - org.contikios.cooja.plugins.skins.GridVisualizerSkin - org.contikios.cooja.plugins.skins.MoteTypeVisualizerSkin - 1.6480321712565114 0.0 0.0 1.6480321712565114 98.5016889738719 55.796930342384904 - - 400 - 0 - 400 - 1 - 1 - - - org.contikios.cooja.plugins.LogListener - - - - - - 1184 - 2 - 500 - 402 - 162 - - - org.contikios.cooja.plugins.Notes - - Enter notes here - true - - 904 - 4 - 160 - 680 - 0 - - - org.contikios.cooja.plugins.ScriptRunner - - - true - - 612 - 1 - 726 - 953 - 43 - - - +make receiver-node.cooja TARGET=cooja + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.Battery + org.contikios.cooja.contikimote.interfaces.ContikiVib + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + org.contikios.cooja.contikimote.interfaces.ContikiRS232 + org.contikios.cooja.contikimote.interfaces.ContikiBeeper + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.contikimote.interfaces.ContikiIPAddress + org.contikios.cooja.contikimote.interfaces.ContikiRadio + org.contikios.cooja.contikimote.interfaces.ContikiButton + org.contikios.cooja.contikimote.interfaces.ContikiPIR + org.contikios.cooja.contikimote.interfaces.ContikiClock + org.contikios.cooja.contikimote.interfaces.ContikiLED + org.contikios.cooja.contikimote.interfaces.ContikiCFS + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + false + + + + org.contikios.cooja.interfaces.Position + -7.199692787830563 + 98.21738321803603 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 1 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype424 + + + + org.contikios.cooja.interfaces.Position + 116.13379149678028 + 88.36698920455684 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 2 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype372 + + + + org.contikios.cooja.interfaces.Position + 12.0 + 68.0 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 4 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype424 + + + + org.contikios.cooja.interfaces.Position + 95.25095618820441 + 63.14998053005015 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 5 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype424 + + + + org.contikios.cooja.interfaces.Position + 66.09378990830604 + 38.32698761608261 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 6 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype424 + + + + org.contikios.cooja.interfaces.Position + 29.05630841762433 + 30.840688165838436 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 7 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype424 + + + + org.contikios.cooja.interfaces.Position + 58.0 + 108.0 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 8 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype424 + + + + org.contikios.cooja.interfaces.Position + 145.93059238811136 + 111.16474110935306 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 3 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype229 + + + + org.contikios.cooja.plugins.SimControl + 280 + 3 + 160 + 400 + 0 + + + org.contikios.cooja.plugins.Visualizer + + org.contikios.cooja.plugins.skins.IDVisualizerSkin + org.contikios.cooja.plugins.skins.UDGMVisualizerSkin + org.contikios.cooja.plugins.skins.GridVisualizerSkin + org.contikios.cooja.plugins.skins.MoteTypeVisualizerSkin + 1.6480321712565114 0.0 0.0 1.6480321712565114 98.5016889738719 55.796930342384904 + + 400 + 0 + 400 + 1 + 1 + + + org.contikios.cooja.plugins.LogListener + + + + + + 1184 + 2 + 500 + 402 + 162 + + + org.contikios.cooja.plugins.Notes + + Enter notes here + true + + 904 + 4 + 160 + 680 + 0 + + + org.contikios.cooja.plugins.ScriptRunner + + + true + + 612 + 1 + 726 + 953 + 43 + + + diff --git a/regression-tests/12-rpl/10-rpl-multi-dodag.csc b/regression-tests/12-rpl/10-rpl-multi-dodag.csc new file mode 100644 index 000000000..aa0ab3d43 --- /dev/null +++ b/regression-tests/12-rpl/10-rpl-multi-dodag.csc @@ -0,0 +1,391 @@ + + + [APPS_DIR]/mrm + [APPS_DIR]/mspsim + [APPS_DIR]/avrora + [APPS_DIR]/serial_socket + [APPS_DIR]/collect-view + [APPS_DIR]/powertracker + [APPS_DIR]/serial2pty + [APPS_DIR]/radiologger-headless + + My simulation + 123456 + 1000000 + + org.contikios.cooja.radiomediums.UDGM + 50.0 + 50.0 + 1.0 + 1.0 + + + 40000 + + + org.contikios.cooja.contikimote.ContikiMoteType + mtype301 + Sender + [CONTIKI_DIR]/regression-tests/12-rpl/code/sender-node.c + make sender-node.cooja TARGET=cooja + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.Battery + org.contikios.cooja.contikimote.interfaces.ContikiVib + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + org.contikios.cooja.contikimote.interfaces.ContikiRS232 + org.contikios.cooja.contikimote.interfaces.ContikiBeeper + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.contikimote.interfaces.ContikiIPAddress + org.contikios.cooja.contikimote.interfaces.ContikiRadio + org.contikios.cooja.contikimote.interfaces.ContikiButton + org.contikios.cooja.contikimote.interfaces.ContikiPIR + org.contikios.cooja.contikimote.interfaces.ContikiClock + org.contikios.cooja.contikimote.interfaces.ContikiLED + org.contikios.cooja.contikimote.interfaces.ContikiCFS + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + false + + + org.contikios.cooja.contikimote.ContikiMoteType + mtype820 + RPL root + [CONTIKI_DIR]/regression-tests/12-rpl/code/root-node.c + make root-node.cooja TARGET=cooja + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.Battery + org.contikios.cooja.contikimote.interfaces.ContikiVib + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + org.contikios.cooja.contikimote.interfaces.ContikiRS232 + org.contikios.cooja.contikimote.interfaces.ContikiBeeper + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.contikimote.interfaces.ContikiIPAddress + org.contikios.cooja.contikimote.interfaces.ContikiRadio + org.contikios.cooja.contikimote.interfaces.ContikiButton + org.contikios.cooja.contikimote.interfaces.ContikiPIR + org.contikios.cooja.contikimote.interfaces.ContikiClock + org.contikios.cooja.contikimote.interfaces.ContikiLED + org.contikios.cooja.contikimote.interfaces.ContikiCFS + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + false + + + org.contikios.cooja.contikimote.ContikiMoteType + mtype306 + Receiver + [CONTIKI_DIR]/regression-tests/12-rpl/code/receiver-node.c + make receiver-node.cooja TARGET=cooja + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.Battery + org.contikios.cooja.contikimote.interfaces.ContikiVib + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + org.contikios.cooja.contikimote.interfaces.ContikiRS232 + org.contikios.cooja.contikimote.interfaces.ContikiBeeper + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.contikimote.interfaces.ContikiIPAddress + org.contikios.cooja.contikimote.interfaces.ContikiRadio + org.contikios.cooja.contikimote.interfaces.ContikiButton + org.contikios.cooja.contikimote.interfaces.ContikiPIR + org.contikios.cooja.contikimote.interfaces.ContikiClock + org.contikios.cooja.contikimote.interfaces.ContikiLED + org.contikios.cooja.contikimote.interfaces.ContikiCFS + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + false + + + + org.contikios.cooja.interfaces.Position + 9.767954940345236 + 88.75813939592845 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 1 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype306 + + + + org.contikios.cooja.interfaces.Position + 63.36720084537501 + 75.88456991067605 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 2 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype301 + + + + org.contikios.cooja.interfaces.Position + -20.684049350551753 + 60.49767834794315 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 6 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype306 + + + + org.contikios.cooja.interfaces.Position + 64.61229064867878 + 39.88729002781773 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 3 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype306 + + + + org.contikios.cooja.interfaces.Position + 37.157272454309606 + 19.60335867526139 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 4 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype306 + + + + org.contikios.cooja.interfaces.Position + -21.976612887408603 + 30.69884249204435 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 5 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype306 + + + + org.contikios.cooja.interfaces.Position + 43 + 98 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 7 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype820 + + + + org.contikios.cooja.interfaces.Position + 0.0 + 0.0 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 8 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype820 + + + + org.contikios.cooja.plugins.SimControl + 280 + 3 + 160 + 400 + 0 + + + org.contikios.cooja.plugins.Visualizer + + org.contikios.cooja.plugins.skins.IDVisualizerSkin + org.contikios.cooja.plugins.skins.UDGMVisualizerSkin + org.contikios.cooja.plugins.skins.GridVisualizerSkin + org.contikios.cooja.plugins.skins.MoteTypeVisualizerSkin + 1.7624788498159916 0.0 0.0 1.7624788498159916 97.6893062637241 8.72727272727273 + + 400 + 0 + 400 + 1 + 1 + + + org.contikios.cooja.plugins.LogListener + + + + + + 1184 + 2 + 240 + 402 + 162 + + + org.contikios.cooja.plugins.Notes + + Enter notes here + true + + 904 + 4 + 160 + 680 + 0 + + + org.contikios.cooja.plugins.ScriptRunner + + + true + + 962 + 1 + 596 + 603 + 43 + + + diff --git a/regression-tests/12-rpl/code/receiver-node.c b/regression-tests/12-rpl/code/receiver-node.c index 25e1e6758..4ba3cb148 100644 --- a/regression-tests/12-rpl/code/receiver-node.c +++ b/regression-tests/12-rpl/code/receiver-node.c @@ -92,7 +92,7 @@ set_global_address(void) /*---------------------------------------------------------------------------*/ uint8_t should_blink = 1; static void -route_callback(int event, uip_ipaddr_t *route, uip_ipaddr_t *ipaddr) +route_callback(int event, uip_ipaddr_t *route, uip_ipaddr_t *ipaddr, int num_routes) { if(event == UIP_DS6_NOTIFICATION_DEFRT_ADD) { should_blink = 0; @@ -105,11 +105,10 @@ PROCESS_THREAD(receiver_node_process, ev, data) { static struct etimer et; static struct uip_ds6_notification n; - uip_ipaddr_t *ipaddr; PROCESS_BEGIN(); - ipaddr = set_global_address(); + set_global_address(); uip_ds6_notification_add(&n, route_callback); diff --git a/regression-tests/13-ipv6-apps/01-sky-servreg-hack.csc b/regression-tests/13-ipv6-apps/01-sky-servreg-hack.csc index e5073c1f9..8e9e36011 100644 --- a/regression-tests/13-ipv6-apps/01-sky-servreg-hack.csc +++ b/regression-tests/13-ipv6-apps/01-sky-servreg-hack.csc @@ -1,316 +1,316 @@ - - - [APPS_DIR]/mrm - [APPS_DIR]/mspsim - [APPS_DIR]/avrora - [APPS_DIR]/serial_socket - [APPS_DIR]/collect-view - [APPS_DIR]/powertracker - - Servreg hack test - 123456 - 1000000 - - org.contikios.cooja.radiomediums.UDGM - 40.0 - 40.0 - 1.0 - 1.0 - - - 40000 - - - org.contikios.cooja.mspmote.SkyMoteType - sky1 - Servreg server - [CONTIKI_DIR]/examples/servreg-hack/example-servreg-server.c - make example-servreg-server.sky TARGET=sky - [CONTIKI_DIR]/examples/servreg-hack/example-servreg-server.sky - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.interfaces.IPAddress - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - org.contikios.cooja.mspmote.interfaces.MspClock - org.contikios.cooja.mspmote.interfaces.MspMoteID - org.contikios.cooja.mspmote.interfaces.SkyButton - org.contikios.cooja.mspmote.interfaces.SkyFlash - org.contikios.cooja.mspmote.interfaces.SkyCoffeeFilesystem - org.contikios.cooja.mspmote.interfaces.Msp802154Radio - org.contikios.cooja.mspmote.interfaces.MspSerial - org.contikios.cooja.mspmote.interfaces.SkyLED - org.contikios.cooja.mspmote.interfaces.MspDebugOutput - org.contikios.cooja.mspmote.interfaces.SkyTemperature - - - org.contikios.cooja.mspmote.SkyMoteType - sky2 - Servreg hack client - [CONTIKI_DIR]/examples/servreg-hack/example-servreg-client.c - make example-servreg-client.sky TARGET=sky - [CONTIKI_DIR]/examples/servreg-hack/example-servreg-client.sky - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.interfaces.IPAddress - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - org.contikios.cooja.mspmote.interfaces.MspClock - org.contikios.cooja.mspmote.interfaces.MspMoteID - org.contikios.cooja.mspmote.interfaces.SkyButton - org.contikios.cooja.mspmote.interfaces.SkyFlash - org.contikios.cooja.mspmote.interfaces.SkyCoffeeFilesystem - org.contikios.cooja.mspmote.interfaces.Msp802154Radio - org.contikios.cooja.mspmote.interfaces.MspSerial - org.contikios.cooja.mspmote.interfaces.SkyLED - org.contikios.cooja.mspmote.interfaces.MspDebugOutput - org.contikios.cooja.mspmote.interfaces.SkyTemperature - - - - - org.contikios.cooja.interfaces.Position - 45.693987609497896 - 26.353051242505675 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 1 - - sky1 - - - - - org.contikios.cooja.interfaces.Position - 18.451397050087735 - 55.93074152489276 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 2 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 45.082598269523864 - 52.7178388400784 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 3 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 11.116935333105516 - 49.070534908051414 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 4 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 85.11866272622683 - 30.030092430999066 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 5 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 30.71302161006234 - 13.877842534368446 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 6 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 44.43705509785284 - 69.81167027376168 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 7 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 64.10992023465046 - 20.589540162635835 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 8 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 32.29787406276132 - 18.754900913594753 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 9 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 25.28398611019028 - 69.27186586570369 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 10 - - sky2 - - - - - org.contikios.cooja.interfaces.Position - 19.3359466030565 - 17.321986704081503 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 11 - - sky2 - - - - org.contikios.cooja.plugins.SimControl - 318 - 1 - 172 - 0 - 0 - - - org.contikios.cooja.plugins.Visualizer - - org.contikios.cooja.plugins.skins.IDVisualizerSkin - org.contikios.cooja.plugins.skins.MoteTypeVisualizerSkin - org.contikios.cooja.plugins.skins.AttributeVisualizerSkin - org.contikios.cooja.plugins.skins.UDGMVisualizerSkin - org.contikios.cooja.plugins.skins.GridVisualizerSkin - 3.56257040103728 0.0 0.0 3.56257040103728 -26.423046586149052 -28.07489060373735 - - 300 - 2 - 300 - 1140 - 0 - - - org.contikios.cooja.plugins.LogListener - - - - - - 1440 - 3 - 324 - 2 - 270 - - - org.contikios.cooja.plugins.TimeLine - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - - - 1633.2339825135305 - - 1440 - 4 - 238 - 0 - 595 - - - org.contikios.cooja.plugins.ScriptRunner - - - true - - 600 - 0 - 700 - 526 - 6 - - - + + + [APPS_DIR]/mrm + [APPS_DIR]/mspsim + [APPS_DIR]/avrora + [APPS_DIR]/serial_socket + [APPS_DIR]/collect-view + [APPS_DIR]/powertracker + + Servreg hack test + 123456 + 1000000 + + org.contikios.cooja.radiomediums.UDGM + 40.0 + 40.0 + 1.0 + 1.0 + + + 40000 + + + org.contikios.cooja.mspmote.SkyMoteType + sky1 + Servreg server + [CONTIKI_DIR]/examples/servreg-hack/example-servreg-server.c + make example-servreg-server.sky TARGET=sky + [CONTIKI_DIR]/examples/servreg-hack/example-servreg-server.sky + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.interfaces.IPAddress + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + org.contikios.cooja.mspmote.interfaces.MspClock + org.contikios.cooja.mspmote.interfaces.MspMoteID + org.contikios.cooja.mspmote.interfaces.SkyButton + org.contikios.cooja.mspmote.interfaces.SkyFlash + org.contikios.cooja.mspmote.interfaces.SkyCoffeeFilesystem + org.contikios.cooja.mspmote.interfaces.Msp802154Radio + org.contikios.cooja.mspmote.interfaces.MspSerial + org.contikios.cooja.mspmote.interfaces.SkyLED + org.contikios.cooja.mspmote.interfaces.MspDebugOutput + org.contikios.cooja.mspmote.interfaces.SkyTemperature + + + org.contikios.cooja.mspmote.SkyMoteType + sky2 + Servreg hack client + [CONTIKI_DIR]/examples/servreg-hack/example-servreg-client.c + make example-servreg-client.sky TARGET=sky + [CONTIKI_DIR]/examples/servreg-hack/example-servreg-client.sky + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.interfaces.IPAddress + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + org.contikios.cooja.mspmote.interfaces.MspClock + org.contikios.cooja.mspmote.interfaces.MspMoteID + org.contikios.cooja.mspmote.interfaces.SkyButton + org.contikios.cooja.mspmote.interfaces.SkyFlash + org.contikios.cooja.mspmote.interfaces.SkyCoffeeFilesystem + org.contikios.cooja.mspmote.interfaces.Msp802154Radio + org.contikios.cooja.mspmote.interfaces.MspSerial + org.contikios.cooja.mspmote.interfaces.SkyLED + org.contikios.cooja.mspmote.interfaces.MspDebugOutput + org.contikios.cooja.mspmote.interfaces.SkyTemperature + + + + + org.contikios.cooja.interfaces.Position + 45.693987609497896 + 26.353051242505675 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 1 + + sky1 + + + + + org.contikios.cooja.interfaces.Position + 18.451397050087735 + 55.93074152489276 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 2 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 45.082598269523864 + 52.7178388400784 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 3 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 11.116935333105516 + 49.070534908051414 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 4 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 85.11866272622683 + 30.030092430999066 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 5 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 30.71302161006234 + 13.877842534368446 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 6 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 44.43705509785284 + 69.81167027376168 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 7 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 64.10992023465046 + 20.589540162635835 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 8 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 32.29787406276132 + 18.754900913594753 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 9 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 25.28398611019028 + 69.27186586570369 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 10 + + sky2 + + + + + org.contikios.cooja.interfaces.Position + 19.3359466030565 + 17.321986704081503 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 11 + + sky2 + + + + org.contikios.cooja.plugins.SimControl + 318 + 1 + 172 + 0 + 0 + + + org.contikios.cooja.plugins.Visualizer + + org.contikios.cooja.plugins.skins.IDVisualizerSkin + org.contikios.cooja.plugins.skins.MoteTypeVisualizerSkin + org.contikios.cooja.plugins.skins.AttributeVisualizerSkin + org.contikios.cooja.plugins.skins.UDGMVisualizerSkin + org.contikios.cooja.plugins.skins.GridVisualizerSkin + 3.56257040103728 0.0 0.0 3.56257040103728 -26.423046586149052 -28.07489060373735 + + 300 + 2 + 300 + 1140 + 0 + + + org.contikios.cooja.plugins.LogListener + + + + + + 1440 + 3 + 324 + 2 + 270 + + + org.contikios.cooja.plugins.TimeLine + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + + + 1633.2339825135305 + + 1440 + 4 + 238 + 0 + 595 + + + org.contikios.cooja.plugins.ScriptRunner + + + true + + 600 + 0 + 700 + 526 + 6 + + + diff --git a/regression-tests/13-ipv6-apps/x02-sky-coap.csc b/regression-tests/13-ipv6-apps/x02-sky-coap.csc index 870af1e78..a1b5c27d3 100644 --- a/regression-tests/13-ipv6-apps/x02-sky-coap.csc +++ b/regression-tests/13-ipv6-apps/x02-sky-coap.csc @@ -1,222 +1,222 @@ - - - - REST with RPL router - -2147483648 - generated - 1000000 - - org.contikios.cooja.radiomediums.UDGM - 50.0 - 50.0 - 1.0 - 1.0 - - - 40000 - - - org.contikios.cooja.mspmote.SkyMoteType - rplroot - Sky RPL Root - [CONTIKI_DIR]/examples/ipv6/rpl-border-router/border-router.c - make border-router.sky TARGET=sky DEFINES=NETSTACK_MAC=nullmac_driver,NETSTACK_RDC=nullrdc_driver,NULLRDC_CONF_802154_AUTOACK=0,CC2420_CONF_AUTOACK=0,ENERGEST_CONF_ON=0,PROCESS_CONF_NO_PROCESS_NAMES=1 - [CONTIKI_DIR]/examples/ipv6/rpl-border-router/border-router.sky - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.interfaces.IPAddress - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - org.contikios.cooja.mspmote.interfaces.MspClock - org.contikios.cooja.mspmote.interfaces.MspMoteID - org.contikios.cooja.mspmote.interfaces.SkyButton - org.contikios.cooja.mspmote.interfaces.SkyFlash - org.contikios.cooja.mspmote.interfaces.SkyCoffeeFilesystem - org.contikios.cooja.mspmote.interfaces.Msp802154Radio - org.contikios.cooja.mspmote.interfaces.MspSerial - org.contikios.cooja.mspmote.interfaces.SkyLED - org.contikios.cooja.mspmote.interfaces.MspDebugOutput - org.contikios.cooja.mspmote.interfaces.SkyTemperature - - - org.contikios.cooja.mspmote.SkyMoteType - skyweb - Rest server - [CONTIKI_DIR]/examples/er-rest-example/er-example-server.c - make er-example-server.sky TARGET=sky DEFINES=NETSTACK_MAC=nullmac_driver,NETSTACK_RDC=nullrdc_driver,NULLRDC_CONF_802154_AUTOACK=0,CC2420_CONF_AUTOACK=0,ENERGEST_CONF_ON=0,PROCESS_CONF_NO_PROCESS_NAMES=1 - [CONTIKI_DIR]/examples/er-rest-example/er-example-server.sky - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.interfaces.IPAddress - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - org.contikios.cooja.mspmote.interfaces.MspClock - org.contikios.cooja.mspmote.interfaces.MspMoteID - org.contikios.cooja.mspmote.interfaces.SkyButton - org.contikios.cooja.mspmote.interfaces.SkyFlash - org.contikios.cooja.mspmote.interfaces.SkyCoffeeFilesystem - org.contikios.cooja.mspmote.interfaces.Msp802154Radio - org.contikios.cooja.mspmote.interfaces.MspSerial - org.contikios.cooja.mspmote.interfaces.SkyLED - org.contikios.cooja.mspmote.interfaces.MspDebugOutput - org.contikios.cooja.mspmote.interfaces.SkyTemperature - - - - - org.contikios.cooja.interfaces.Position - 33.260163187353555 - 30.643217359962595 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 1 - - rplroot - - - - - org.contikios.cooja.interfaces.Position - 35.100895239785295 - 39.70574552287428 - 0.0 - - - org.contikios.cooja.mspmote.interfaces.MspMoteID - 2 - - skyweb - - - - org.contikios.cooja.plugins.SimControl - 259 - 6 - 179 - 0 - 0 - - - org.contikios.cooja.plugins.Visualizer - - org.contikios.cooja.plugins.skins.IDVisualizerSkin - org.contikios.cooja.plugins.skins.UDGMVisualizerSkin - org.contikios.cooja.plugins.skins.MoteTypeVisualizerSkin - org.contikios.cooja.plugins.skins.AttributeVisualizerSkin - org.contikios.cooja.plugins.skins.AddressVisualizerSkin - org.contikios.cooja.plugins.skins.GridVisualizerSkin - 3.3323852179491644 0.0 0.0 3.3323852179491644 -30.392247168885415 -60.79227000363299 - - 176 - 5 - 173 - 259 - 3 - - - org.contikios.cooja.plugins.LogListener - - - - - 576 - 0 - 492 - 12 - 260 - - - org.contikios.cooja.plugins.RadioLogger - - 114 - - - 574 - -1 - 471 - 412 - 190 - true - - - SerialSocketServer - 0 - 428 - 4 - 74 - 7 - 181 - - - org.contikios.cooja.plugins.TimeLine - - 0 - 1 - - - 23 - 24060.2737326431 - - 579 - 2 - 152 - 6 - 758 - - - org.contikios.cooja.plugins.Notes - - Nightly test exercising Contiki's Erbium CoAP implementation: -* One REST server, and one RPL border router w. corresponding tun0 netif -* ContikiMAC is disabled to make firmwares fit on Tmote Sky nodes. -* Additional compile-time DEFINES used in this simulation: -NETSTACK_MAC=nullmac_driver -NETSTACK_RDC=nullrdc_driver -NULLRDC_CONF_802154_AUTOACK=0 -CC2420_CONF_AUTOACK=0 -ENERGEST_CONF_ON=0 -PROCESS_CONF_NO_PROCESS_NAMES=1 - -The test script communicates with the REST server via the RPL border router using external commands. -(* $ make connect-router-cooja) -* $ ping6 -c 10 -I tun0 aaaa::212:7401:1:101 -* $ ping6 -c 10 -I tun0 aaaa::212:7402:2:202 -* $ wget -t 1 -T 10 -O - http://[aaaa::212:7402:2:202] - -The final test uses the CoAP Java implementation by Matthias Kovatsch, downloaded from: -https://github.com/mkovatsc/Californium/blob/master/run/ExampleClient.jar -* $ java -jar ExampleClient.jar DISCOVER coap://[aaaa::212:7402:2:202] -* $ java -jar ExampleClient.jar GET coap://[aaaa::212:7402:2:202]/hello - true - - 751 - 3 - 369 - 439 - 3 - - - org.contikios.cooja.plugins.ScriptRunner - - [CONFIG_DIR]/rest_rpl_coap.js - true - - 596 - 1 - 725 - 591 - 225 - - - PowerTracker - 400 - -1 - 155 - 132 - 152 - true - - - + + + + REST with RPL router + -2147483648 + generated + 1000000 + + org.contikios.cooja.radiomediums.UDGM + 50.0 + 50.0 + 1.0 + 1.0 + + + 40000 + + + org.contikios.cooja.mspmote.SkyMoteType + rplroot + Sky RPL Root + [CONTIKI_DIR]/examples/ipv6/rpl-border-router/border-router.c + make border-router.sky TARGET=sky DEFINES=NETSTACK_MAC=nullmac_driver,NETSTACK_RDC=nullrdc_driver,NULLRDC_CONF_802154_AUTOACK=0,CC2420_CONF_AUTOACK=0,ENERGEST_CONF_ON=0,PROCESS_CONF_NO_PROCESS_NAMES=1 + [CONTIKI_DIR]/examples/ipv6/rpl-border-router/border-router.sky + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.interfaces.IPAddress + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + org.contikios.cooja.mspmote.interfaces.MspClock + org.contikios.cooja.mspmote.interfaces.MspMoteID + org.contikios.cooja.mspmote.interfaces.SkyButton + org.contikios.cooja.mspmote.interfaces.SkyFlash + org.contikios.cooja.mspmote.interfaces.SkyCoffeeFilesystem + org.contikios.cooja.mspmote.interfaces.Msp802154Radio + org.contikios.cooja.mspmote.interfaces.MspSerial + org.contikios.cooja.mspmote.interfaces.SkyLED + org.contikios.cooja.mspmote.interfaces.MspDebugOutput + org.contikios.cooja.mspmote.interfaces.SkyTemperature + + + org.contikios.cooja.mspmote.SkyMoteType + skyweb + Rest server + [CONTIKI_DIR]/examples/er-rest-example/er-example-server.c + make er-example-server.sky TARGET=sky DEFINES=NETSTACK_MAC=nullmac_driver,NETSTACK_RDC=nullrdc_driver,NULLRDC_CONF_802154_AUTOACK=0,CC2420_CONF_AUTOACK=0,ENERGEST_CONF_ON=0,PROCESS_CONF_NO_PROCESS_NAMES=1 + [CONTIKI_DIR]/examples/er-rest-example/er-example-server.sky + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.interfaces.IPAddress + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + org.contikios.cooja.mspmote.interfaces.MspClock + org.contikios.cooja.mspmote.interfaces.MspMoteID + org.contikios.cooja.mspmote.interfaces.SkyButton + org.contikios.cooja.mspmote.interfaces.SkyFlash + org.contikios.cooja.mspmote.interfaces.SkyCoffeeFilesystem + org.contikios.cooja.mspmote.interfaces.Msp802154Radio + org.contikios.cooja.mspmote.interfaces.MspSerial + org.contikios.cooja.mspmote.interfaces.SkyLED + org.contikios.cooja.mspmote.interfaces.MspDebugOutput + org.contikios.cooja.mspmote.interfaces.SkyTemperature + + + + + org.contikios.cooja.interfaces.Position + 33.260163187353555 + 30.643217359962595 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 1 + + rplroot + + + + + org.contikios.cooja.interfaces.Position + 35.100895239785295 + 39.70574552287428 + 0.0 + + + org.contikios.cooja.mspmote.interfaces.MspMoteID + 2 + + skyweb + + + + org.contikios.cooja.plugins.SimControl + 259 + 6 + 179 + 0 + 0 + + + org.contikios.cooja.plugins.Visualizer + + org.contikios.cooja.plugins.skins.IDVisualizerSkin + org.contikios.cooja.plugins.skins.UDGMVisualizerSkin + org.contikios.cooja.plugins.skins.MoteTypeVisualizerSkin + org.contikios.cooja.plugins.skins.AttributeVisualizerSkin + org.contikios.cooja.plugins.skins.AddressVisualizerSkin + org.contikios.cooja.plugins.skins.GridVisualizerSkin + 3.3323852179491644 0.0 0.0 3.3323852179491644 -30.392247168885415 -60.79227000363299 + + 176 + 5 + 173 + 259 + 3 + + + org.contikios.cooja.plugins.LogListener + + + + + 576 + 0 + 492 + 12 + 260 + + + org.contikios.cooja.plugins.RadioLogger + + 114 + + + 574 + -1 + 471 + 412 + 190 + true + + + SerialSocketServer + 0 + 428 + 4 + 74 + 7 + 181 + + + org.contikios.cooja.plugins.TimeLine + + 0 + 1 + + + 23 + 24060.2737326431 + + 579 + 2 + 152 + 6 + 758 + + + org.contikios.cooja.plugins.Notes + + Nightly test exercising Contiki's Erbium CoAP implementation: +* One REST server, and one RPL border router w. corresponding tun0 netif +* ContikiMAC is disabled to make firmwares fit on Tmote Sky nodes. +* Additional compile-time DEFINES used in this simulation: +NETSTACK_MAC=nullmac_driver +NETSTACK_RDC=nullrdc_driver +NULLRDC_CONF_802154_AUTOACK=0 +CC2420_CONF_AUTOACK=0 +ENERGEST_CONF_ON=0 +PROCESS_CONF_NO_PROCESS_NAMES=1 + +The test script communicates with the REST server via the RPL border router using external commands. +(* $ make connect-router-cooja) +* $ ping6 -c 10 -I tun0 aaaa::212:7401:1:101 +* $ ping6 -c 10 -I tun0 aaaa::212:7402:2:202 +* $ wget -t 1 -T 10 -O - http://[aaaa::212:7402:2:202] + +The final test uses the CoAP Java implementation by Matthias Kovatsch, downloaded from: +https://github.com/mkovatsc/Californium/blob/master/run/ExampleClient.jar +* $ java -jar ExampleClient.jar DISCOVER coap://[aaaa::212:7402:2:202] +* $ java -jar ExampleClient.jar GET coap://[aaaa::212:7402:2:202]/hello + true + + 751 + 3 + 369 + 439 + 3 + + + org.contikios.cooja.plugins.ScriptRunner + + [CONFIG_DIR]/rest_rpl_coap.js + true + + 596 + 1 + 725 + 591 + 225 + + + PowerTracker + 400 + -1 + 155 + 132 + 152 + true + + + diff --git a/regression-tests/15-compile-arm-apcs-ports/Makefile b/regression-tests/15-compile-arm-apcs-ports/Makefile index e73a9a39f..61873d531 100644 --- a/regression-tests/15-compile-arm-apcs-ports/Makefile +++ b/regression-tests/15-compile-arm-apcs-ports/Makefile @@ -8,6 +8,8 @@ ipv6/rpl-border-router/econotag \ er-rest-example/econotag \ webserver-ipv6/econotag \ ipv6/multicast/econotag \ +econotag-flash-test/econotag \ +econotag-ecc-test/econotag \ TOOLS= diff --git a/regression-tests/16-compile-6502-ports/Makefile b/regression-tests/16-compile-6502-ports/Makefile index 78e702e44..921e29ba8 100644 --- a/regression-tests/16-compile-6502-ports/Makefile +++ b/regression-tests/16-compile-6502-ports/Makefile @@ -2,19 +2,19 @@ EXAMPLESDIR=../../examples TOOLSDIR=../../tools EXAMPLES = \ -email/c64 \ -ftp/c64 \ irc/c64 \ +irc-80col/c64 \ telnet-server/c64 \ -wget/c64 \ webbrowser/c64 \ -webbrowser/c128 \ -webbrowser/atarixl \ -webbrowser/apple2enh \ +webbrowser-80col/c64 \ webserver/c64 \ -webserver/c128 \ -webserver/atarixl \ -webserver/apple2enh \ +wget/c64 \ +telnet-server/apple2enh \ +telnet-server/atarixl \ +telnet-server/c128 \ +webbrowser-80col/apple2enh \ +webbrowser-80col/atarixl \ +webbrowser-80col/c128 \ TOOLS= diff --git a/regression-tests/17-slip-radio/01-sky-slip-radio-dio.csc b/regression-tests/17-slip-radio/01-sky-slip-radio-dio.csc index 02a7a3aae..5f28d4348 100644 --- a/regression-tests/17-slip-radio/01-sky-slip-radio-dio.csc +++ b/regression-tests/17-slip-radio/01-sky-slip-radio-dio.csc @@ -1,190 +1,190 @@ - - - [APPS_DIR]/mrm - [APPS_DIR]/mspsim - [APPS_DIR]/avrora - [APPS_DIR]/serial_socket - [APPS_DIR]/collect-view - [APPS_DIR]/powertracker - - slip radio 1 - 123456 - 1000000 - - se.sics.cooja.radiomediums.UDGM - 15.0 - 15.0 - 1.0 - 1.0 - - - 40000 - - - se.sics.cooja.mspmote.SkyMoteType - sky1 - slip radio - [CONTIKI_DIR]/examples/ipv6/slip-radio/slip-radio.c - make slip-radio.sky TARGET=sky - [CONTIKI_DIR]/examples/ipv6/slip-radio/slip-radio.sky - se.sics.cooja.interfaces.Position - se.sics.cooja.interfaces.RimeAddress - se.sics.cooja.interfaces.IPAddress - se.sics.cooja.interfaces.Mote2MoteRelations - se.sics.cooja.interfaces.MoteAttributes - se.sics.cooja.mspmote.interfaces.MspClock - se.sics.cooja.mspmote.interfaces.MspMoteID - se.sics.cooja.mspmote.interfaces.SkyButton - se.sics.cooja.mspmote.interfaces.SkyFlash - se.sics.cooja.mspmote.interfaces.SkyCoffeeFilesystem - se.sics.cooja.mspmote.interfaces.Msp802154Radio - se.sics.cooja.mspmote.interfaces.MspSerial - se.sics.cooja.mspmote.interfaces.SkyLED - se.sics.cooja.mspmote.interfaces.MspDebugOutput - se.sics.cooja.mspmote.interfaces.SkyTemperature - - - se.sics.cooja.mspmote.SkyMoteType - sky2 - wait-dag - [CONTIKI_DIR]/regression-tests/17-slip-radio/code/wait-dag.c - make wait-dag.sky TARGET=sky - [CONTIKI_DIR]/regression-tests/17-slip-radio/code/wait-dag.sky - se.sics.cooja.interfaces.Position - se.sics.cooja.interfaces.RimeAddress - se.sics.cooja.interfaces.IPAddress - se.sics.cooja.interfaces.Mote2MoteRelations - se.sics.cooja.interfaces.MoteAttributes - se.sics.cooja.mspmote.interfaces.MspClock - se.sics.cooja.mspmote.interfaces.MspMoteID - se.sics.cooja.mspmote.interfaces.SkyButton - se.sics.cooja.mspmote.interfaces.SkyFlash - se.sics.cooja.mspmote.interfaces.SkyCoffeeFilesystem - se.sics.cooja.mspmote.interfaces.Msp802154Radio - se.sics.cooja.mspmote.interfaces.MspSerial - se.sics.cooja.mspmote.interfaces.SkyLED - se.sics.cooja.mspmote.interfaces.MspDebugOutput - se.sics.cooja.mspmote.interfaces.SkyTemperature - - - - - se.sics.cooja.interfaces.Position - 43.565500781711165 - 14.697933087406794 - 0.0 - - - se.sics.cooja.mspmote.interfaces.MspMoteID - 1 - - sky1 - - - - - se.sics.cooja.interfaces.Position - 53.849666651434326 - 14.629826028666905 - 0.0 - - - se.sics.cooja.mspmote.interfaces.MspMoteID - 2 - - sky2 - - - - se.sics.cooja.plugins.SimControl - 315 - 1 - 175 - 433 - 0 - - - se.sics.cooja.plugins.Visualizer - - se.sics.cooja.plugins.skins.IDVisualizerSkin - se.sics.cooja.plugins.skins.GridVisualizerSkin - se.sics.cooja.plugins.skins.TrafficVisualizerSkin - se.sics.cooja.plugins.skins.UDGMVisualizerSkin - 14.682765905648006 0.0 0.0 14.682765905648006 -512.6620495401903 -96.80631081927221 - - 432 - 4 - 291 - 1 - 1 - - - se.sics.cooja.plugins.LogListener - - - - 758 - 3 - 289 - 748 - 159 - - - se.sics.cooja.plugins.Notes - - Slip-radio Tests, 01-sky-slip-radio-dio - -Test that we can send a packet over a slip-radio. -In this basic test, we send a DIO from mote 1, and wait for "DAG Found" in mote 2. - true - - 928 - 5 - 159 - 749 - -1 - - - se.sics.cooja.plugins.ScriptRunner - - - true - - 758 - 2 - 502 - 749 - 449 - - - se.sics.cooja.plugins.RadioLogger - - 150 - - 746 - 0 - 657 - 3 - 294 - - - + + + [APPS_DIR]/mrm + [APPS_DIR]/mspsim + [APPS_DIR]/avrora + [APPS_DIR]/serial_socket + [APPS_DIR]/collect-view + [APPS_DIR]/powertracker + + slip radio 1 + 123456 + 1000000 + + se.sics.cooja.radiomediums.UDGM + 15.0 + 15.0 + 1.0 + 1.0 + + + 40000 + + + se.sics.cooja.mspmote.SkyMoteType + sky1 + slip radio + [CONTIKI_DIR]/examples/ipv6/slip-radio/slip-radio.c + make slip-radio.sky TARGET=sky + [CONTIKI_DIR]/examples/ipv6/slip-radio/slip-radio.sky + se.sics.cooja.interfaces.Position + se.sics.cooja.interfaces.RimeAddress + se.sics.cooja.interfaces.IPAddress + se.sics.cooja.interfaces.Mote2MoteRelations + se.sics.cooja.interfaces.MoteAttributes + se.sics.cooja.mspmote.interfaces.MspClock + se.sics.cooja.mspmote.interfaces.MspMoteID + se.sics.cooja.mspmote.interfaces.SkyButton + se.sics.cooja.mspmote.interfaces.SkyFlash + se.sics.cooja.mspmote.interfaces.SkyCoffeeFilesystem + se.sics.cooja.mspmote.interfaces.Msp802154Radio + se.sics.cooja.mspmote.interfaces.MspSerial + se.sics.cooja.mspmote.interfaces.SkyLED + se.sics.cooja.mspmote.interfaces.MspDebugOutput + se.sics.cooja.mspmote.interfaces.SkyTemperature + + + se.sics.cooja.mspmote.SkyMoteType + sky2 + wait-dag + [CONTIKI_DIR]/regression-tests/17-slip-radio/code/wait-dag.c + make wait-dag.sky TARGET=sky + [CONTIKI_DIR]/regression-tests/17-slip-radio/code/wait-dag.sky + se.sics.cooja.interfaces.Position + se.sics.cooja.interfaces.RimeAddress + se.sics.cooja.interfaces.IPAddress + se.sics.cooja.interfaces.Mote2MoteRelations + se.sics.cooja.interfaces.MoteAttributes + se.sics.cooja.mspmote.interfaces.MspClock + se.sics.cooja.mspmote.interfaces.MspMoteID + se.sics.cooja.mspmote.interfaces.SkyButton + se.sics.cooja.mspmote.interfaces.SkyFlash + se.sics.cooja.mspmote.interfaces.SkyCoffeeFilesystem + se.sics.cooja.mspmote.interfaces.Msp802154Radio + se.sics.cooja.mspmote.interfaces.MspSerial + se.sics.cooja.mspmote.interfaces.SkyLED + se.sics.cooja.mspmote.interfaces.MspDebugOutput + se.sics.cooja.mspmote.interfaces.SkyTemperature + + + + + se.sics.cooja.interfaces.Position + 43.565500781711165 + 14.697933087406794 + 0.0 + + + se.sics.cooja.mspmote.interfaces.MspMoteID + 1 + + sky1 + + + + + se.sics.cooja.interfaces.Position + 53.849666651434326 + 14.629826028666905 + 0.0 + + + se.sics.cooja.mspmote.interfaces.MspMoteID + 2 + + sky2 + + + + se.sics.cooja.plugins.SimControl + 315 + 1 + 175 + 433 + 0 + + + se.sics.cooja.plugins.Visualizer + + se.sics.cooja.plugins.skins.IDVisualizerSkin + se.sics.cooja.plugins.skins.GridVisualizerSkin + se.sics.cooja.plugins.skins.TrafficVisualizerSkin + se.sics.cooja.plugins.skins.UDGMVisualizerSkin + 14.682765905648006 0.0 0.0 14.682765905648006 -512.6620495401903 -96.80631081927221 + + 432 + 4 + 291 + 1 + 1 + + + se.sics.cooja.plugins.LogListener + + + + 758 + 3 + 289 + 748 + 159 + + + se.sics.cooja.plugins.Notes + + Slip-radio Tests, 01-sky-slip-radio-dio + +Test that we can send a packet over a slip-radio. +In this basic test, we send a DIO from mote 1, and wait for "DAG Found" in mote 2. + true + + 928 + 5 + 159 + 749 + -1 + + + se.sics.cooja.plugins.ScriptRunner + + + true + + 758 + 2 + 502 + 749 + 449 + + + se.sics.cooja.plugins.RadioLogger + + 150 + + 746 + 0 + 657 + 3 + 294 + + + diff --git a/regression-tests/19-llsec/01-ccm-star.csc b/regression-tests/19-llsec/01-ccm-star.csc index 75e25642b..66f5f80f6 100644 --- a/regression-tests/19-llsec/01-ccm-star.csc +++ b/regression-tests/19-llsec/01-ccm-star.csc @@ -1,187 +1,187 @@ - - - [APPS_DIR]/mrm - [APPS_DIR]/mspsim - [APPS_DIR]/avrora - [APPS_DIR]/serial_socket - [APPS_DIR]/collect-view - [APPS_DIR]/powertracker - - llsec validation - 123456 - 1000000 - - org.contikios.cooja.radiomediums.UDGM - 50.0 - 100.0 - 1.0 - 1.0 - - - 40000 - - - org.contikios.cooja.contikimote.ContikiMoteType - mtype139 - Verification - [CONTIKI_DIR]/examples/llsec/ccm-star-tests/verification/tests.c - make tests.cooja TARGET=cooja - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.Battery - org.contikios.cooja.contikimote.interfaces.ContikiVib - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - org.contikios.cooja.contikimote.interfaces.ContikiRS232 - org.contikios.cooja.contikimote.interfaces.ContikiBeeper - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.contikimote.interfaces.ContikiIPAddress - org.contikios.cooja.contikimote.interfaces.ContikiRadio - org.contikios.cooja.contikimote.interfaces.ContikiButton - org.contikios.cooja.contikimote.interfaces.ContikiPIR - org.contikios.cooja.contikimote.interfaces.ContikiClock - org.contikios.cooja.contikimote.interfaces.ContikiLED - org.contikios.cooja.contikimote.interfaces.ContikiCFS - org.contikios.cooja.contikimote.interfaces.ContikiEEPROM - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - false - - - org.contikios.cooja.contikimote.ContikiMoteType - mtype792 - Encryption - [CONTIKI_DIR]/examples/llsec/ccm-star-tests/encryption/tests.c - make tests.cooja TARGET=cooja - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.Battery - org.contikios.cooja.contikimote.interfaces.ContikiVib - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - org.contikios.cooja.contikimote.interfaces.ContikiRS232 - org.contikios.cooja.contikimote.interfaces.ContikiBeeper - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.contikimote.interfaces.ContikiIPAddress - org.contikios.cooja.contikimote.interfaces.ContikiRadio - org.contikios.cooja.contikimote.interfaces.ContikiButton - org.contikios.cooja.contikimote.interfaces.ContikiPIR - org.contikios.cooja.contikimote.interfaces.ContikiClock - org.contikios.cooja.contikimote.interfaces.ContikiLED - org.contikios.cooja.contikimote.interfaces.ContikiCFS - org.contikios.cooja.contikimote.interfaces.ContikiEEPROM - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - false - - - - org.contikios.cooja.interfaces.Position - 8.103036578104216 - 28.0005728229897 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 1 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiEEPROM - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== - - mtype139 - - - - org.contikios.cooja.interfaces.Position - 87.3441626132979 - 25.080887412193555 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 2 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiEEPROM - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== - - mtype792 - - - - org.contikios.cooja.plugins.SimControl - 280 - 4 - 160 - 400 - 0 - - - org.contikios.cooja.plugins.Visualizer - - true - org.contikios.cooja.plugins.skins.IDVisualizerSkin - org.contikios.cooja.plugins.skins.GridVisualizerSkin - org.contikios.cooja.plugins.skins.TrafficVisualizerSkin - org.contikios.cooja.plugins.skins.UDGMVisualizerSkin - 4.451315754531486 0.0 0.0 4.451315754531486 -18.43281074329661 54.85882989079608 - - 400 - 3 - 400 - 1 - 1 - - - org.contikios.cooja.plugins.LogListener - - Success - - - - 1520 - 2 - 240 - 400 - 160 - - - org.contikios.cooja.plugins.Notes - - A simple test script that runs the tests in examples/llsec/ccm-star-tests/ - true - - 1240 - 0 - 160 - 680 - 0 - - - org.contikios.cooja.plugins.ScriptRunner - - - true - - 600 - 1 - 700 - 288 - 199 - - - + + + [APPS_DIR]/mrm + [APPS_DIR]/mspsim + [APPS_DIR]/avrora + [APPS_DIR]/serial_socket + [APPS_DIR]/collect-view + [APPS_DIR]/powertracker + + llsec validation + 123456 + 1000000 + + org.contikios.cooja.radiomediums.UDGM + 50.0 + 100.0 + 1.0 + 1.0 + + + 40000 + + + org.contikios.cooja.contikimote.ContikiMoteType + mtype139 + Verification + [CONTIKI_DIR]/examples/llsec/ccm-star-tests/verification/tests.c + make tests.cooja TARGET=cooja + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.Battery + org.contikios.cooja.contikimote.interfaces.ContikiVib + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + org.contikios.cooja.contikimote.interfaces.ContikiRS232 + org.contikios.cooja.contikimote.interfaces.ContikiBeeper + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.contikimote.interfaces.ContikiIPAddress + org.contikios.cooja.contikimote.interfaces.ContikiRadio + org.contikios.cooja.contikimote.interfaces.ContikiButton + org.contikios.cooja.contikimote.interfaces.ContikiPIR + org.contikios.cooja.contikimote.interfaces.ContikiClock + org.contikios.cooja.contikimote.interfaces.ContikiLED + org.contikios.cooja.contikimote.interfaces.ContikiCFS + org.contikios.cooja.contikimote.interfaces.ContikiEEPROM + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + false + + + org.contikios.cooja.contikimote.ContikiMoteType + mtype792 + Encryption + [CONTIKI_DIR]/examples/llsec/ccm-star-tests/encryption/tests.c + make tests.cooja TARGET=cooja + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.Battery + org.contikios.cooja.contikimote.interfaces.ContikiVib + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + org.contikios.cooja.contikimote.interfaces.ContikiRS232 + org.contikios.cooja.contikimote.interfaces.ContikiBeeper + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.contikimote.interfaces.ContikiIPAddress + org.contikios.cooja.contikimote.interfaces.ContikiRadio + org.contikios.cooja.contikimote.interfaces.ContikiButton + org.contikios.cooja.contikimote.interfaces.ContikiPIR + org.contikios.cooja.contikimote.interfaces.ContikiClock + org.contikios.cooja.contikimote.interfaces.ContikiLED + org.contikios.cooja.contikimote.interfaces.ContikiCFS + org.contikios.cooja.contikimote.interfaces.ContikiEEPROM + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + false + + + + org.contikios.cooja.interfaces.Position + 8.103036578104216 + 28.0005728229897 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 1 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiEEPROM + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== + + mtype139 + + + + org.contikios.cooja.interfaces.Position + 87.3441626132979 + 25.080887412193555 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 2 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiEEPROM + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== + + mtype792 + + + + org.contikios.cooja.plugins.SimControl + 280 + 4 + 160 + 400 + 0 + + + org.contikios.cooja.plugins.Visualizer + + true + org.contikios.cooja.plugins.skins.IDVisualizerSkin + org.contikios.cooja.plugins.skins.GridVisualizerSkin + org.contikios.cooja.plugins.skins.TrafficVisualizerSkin + org.contikios.cooja.plugins.skins.UDGMVisualizerSkin + 4.451315754531486 0.0 0.0 4.451315754531486 -18.43281074329661 54.85882989079608 + + 400 + 3 + 400 + 1 + 1 + + + org.contikios.cooja.plugins.LogListener + + Success + + + + 1520 + 2 + 240 + 400 + 160 + + + org.contikios.cooja.plugins.Notes + + A simple test script that runs the tests in examples/llsec/ccm-star-tests/ + true + + 1240 + 0 + 160 + 680 + 0 + + + org.contikios.cooja.plugins.ScriptRunner + + + true + + 600 + 1 + 700 + 288 + 199 + + + diff --git a/regression-tests/20-ip64/01-cooja-ip64-http-socket.csc b/regression-tests/20-ip64/01-cooja-ip64-http-socket.csc index c30af5032..bc075971b 100644 --- a/regression-tests/20-ip64/01-cooja-ip64-http-socket.csc +++ b/regression-tests/20-ip64/01-cooja-ip64-http-socket.csc @@ -1,245 +1,245 @@ - - - [APPS_DIR]/mrm - [APPS_DIR]/mspsim - [APPS_DIR]/avrora - [APPS_DIR]/serial_socket - [APPS_DIR]/collect-view - [APPS_DIR]/powertracker - - My simulation - 1.0 - generated - 1000000 - - org.contikios.cooja.radiomediums.UDGM - 50.0 - 100.0 - 1.0 - 1.0 - - - 40000 - - - org.contikios.cooja.contikimote.ContikiMoteType - mtype503 - ip64-router/ip64-router.c TARGET=cooja-ip64 - [CONTIKI_DIR]/examples/ip64-router/ip64-router.c - make ip64-router.cooja-ip64 TARGET=cooja-ip64 - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.Battery - org.contikios.cooja.contikimote.interfaces.ContikiVib - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - org.contikios.cooja.contikimote.interfaces.ContikiRS232 - org.contikios.cooja.contikimote.interfaces.ContikiBeeper - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.contikimote.interfaces.ContikiIPAddress - org.contikios.cooja.contikimote.interfaces.ContikiRadio - org.contikios.cooja.contikimote.interfaces.ContikiButton - org.contikios.cooja.contikimote.interfaces.ContikiPIR - org.contikios.cooja.contikimote.interfaces.ContikiClock - org.contikios.cooja.contikimote.interfaces.ContikiLED - org.contikios.cooja.contikimote.interfaces.ContikiCFS - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - false - - - org.contikios.cooja.contikimote.ContikiMoteType - mtype555 - examples/http-socket/http-example.c - [CONTIKI_DIR]/examples/http-socket/http-example.c - make http-example.cooja TARGET=cooja - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.Battery - org.contikios.cooja.contikimote.interfaces.ContikiVib - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - org.contikios.cooja.contikimote.interfaces.ContikiRS232 - org.contikios.cooja.contikimote.interfaces.ContikiBeeper - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.contikimote.interfaces.ContikiIPAddress - org.contikios.cooja.contikimote.interfaces.ContikiRadio - org.contikios.cooja.contikimote.interfaces.ContikiButton - org.contikios.cooja.contikimote.interfaces.ContikiPIR - org.contikios.cooja.contikimote.interfaces.ContikiClock - org.contikios.cooja.contikimote.interfaces.ContikiLED - org.contikios.cooja.contikimote.interfaces.ContikiCFS - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - false - - - - org.contikios.cooja.interfaces.Position - 55.719691912311305 - 37.8697579181178 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 1 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype503 - - - - org.contikios.cooja.interfaces.Position - 65.60514720922419 - 33.88871867406431 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 2 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype555 - - - - org.contikios.cooja.plugins.SimControl - 280 - 1 - 160 - 606 - 15 - - - org.contikios.cooja.plugins.Visualizer - - org.contikios.cooja.plugins.skins.IDVisualizerSkin - org.contikios.cooja.plugins.skins.GridVisualizerSkin - org.contikios.cooja.plugins.skins.TrafficVisualizerSkin - org.contikios.cooja.plugins.skins.MoteTypeVisualizerSkin - org.contikios.cooja.plugins.skins.LEDVisualizerSkin - org.contikios.cooja.plugins.skins.UDGMVisualizerSkin - 8.230641272440463 0.0 0.0 8.230641272440463 -395.6087959411366 -239.69239249818943 - - 219 - 3 - 171 - 29 - 27 - - - org.contikios.cooja.plugins.LogListener - - - - - - 888 - 2 - 603 - 34 - 307 - - - org.contikios.cooja.plugins.ScriptRunner - - - true - - 960 - 0 - 682 - 528 - 192 - - - org.contikios.cooja.serialsocket.SerialSocketServer - 0 - - 60001 - true - - 362 - 4 - 116 - 234 - 101 - - - + + + [APPS_DIR]/mrm + [APPS_DIR]/mspsim + [APPS_DIR]/avrora + [APPS_DIR]/serial_socket + [APPS_DIR]/collect-view + [APPS_DIR]/powertracker + + My simulation + 1.0 + generated + 1000000 + + org.contikios.cooja.radiomediums.UDGM + 50.0 + 100.0 + 1.0 + 1.0 + + + 40000 + + + org.contikios.cooja.contikimote.ContikiMoteType + mtype503 + ip64-router/ip64-router.c TARGET=cooja-ip64 + [CONTIKI_DIR]/examples/ip64-router/ip64-router.c + make ip64-router.cooja-ip64 TARGET=cooja-ip64 + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.Battery + org.contikios.cooja.contikimote.interfaces.ContikiVib + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + org.contikios.cooja.contikimote.interfaces.ContikiRS232 + org.contikios.cooja.contikimote.interfaces.ContikiBeeper + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.contikimote.interfaces.ContikiIPAddress + org.contikios.cooja.contikimote.interfaces.ContikiRadio + org.contikios.cooja.contikimote.interfaces.ContikiButton + org.contikios.cooja.contikimote.interfaces.ContikiPIR + org.contikios.cooja.contikimote.interfaces.ContikiClock + org.contikios.cooja.contikimote.interfaces.ContikiLED + org.contikios.cooja.contikimote.interfaces.ContikiCFS + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + false + + + org.contikios.cooja.contikimote.ContikiMoteType + mtype555 + examples/http-socket/http-example.c + [CONTIKI_DIR]/examples/http-socket/http-example.c + make http-example.cooja TARGET=cooja + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.Battery + org.contikios.cooja.contikimote.interfaces.ContikiVib + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + org.contikios.cooja.contikimote.interfaces.ContikiRS232 + org.contikios.cooja.contikimote.interfaces.ContikiBeeper + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.contikimote.interfaces.ContikiIPAddress + org.contikios.cooja.contikimote.interfaces.ContikiRadio + org.contikios.cooja.contikimote.interfaces.ContikiButton + org.contikios.cooja.contikimote.interfaces.ContikiPIR + org.contikios.cooja.contikimote.interfaces.ContikiClock + org.contikios.cooja.contikimote.interfaces.ContikiLED + org.contikios.cooja.contikimote.interfaces.ContikiCFS + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + false + + + + org.contikios.cooja.interfaces.Position + 55.719691912311305 + 37.8697579181178 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 1 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype503 + + + + org.contikios.cooja.interfaces.Position + 65.60514720922419 + 33.88871867406431 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 2 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype555 + + + + org.contikios.cooja.plugins.SimControl + 280 + 1 + 160 + 606 + 15 + + + org.contikios.cooja.plugins.Visualizer + + org.contikios.cooja.plugins.skins.IDVisualizerSkin + org.contikios.cooja.plugins.skins.GridVisualizerSkin + org.contikios.cooja.plugins.skins.TrafficVisualizerSkin + org.contikios.cooja.plugins.skins.MoteTypeVisualizerSkin + org.contikios.cooja.plugins.skins.LEDVisualizerSkin + org.contikios.cooja.plugins.skins.UDGMVisualizerSkin + 8.230641272440463 0.0 0.0 8.230641272440463 -395.6087959411366 -239.69239249818943 + + 219 + 3 + 171 + 29 + 27 + + + org.contikios.cooja.plugins.LogListener + + + + + + 888 + 2 + 603 + 34 + 307 + + + org.contikios.cooja.plugins.ScriptRunner + + + true + + 960 + 0 + 682 + 528 + 192 + + + org.contikios.cooja.serialsocket.SerialSocketServer + 0 + + 60001 + true + + 362 + 4 + 116 + 234 + 101 + + + diff --git a/regression-tests/21-large-rpl/01-cooja-http-socket-50.csc b/regression-tests/21-large-rpl/01-cooja-http-socket-50.csc index 48b6f9718..1c52710b0 100644 --- a/regression-tests/21-large-rpl/01-cooja-http-socket-50.csc +++ b/regression-tests/21-large-rpl/01-cooja-http-socket-50.csc @@ -1,1006 +1,1006 @@ - - - [APPS_DIR]/mrm - [APPS_DIR]/mspsim - [APPS_DIR]/avrora - [APPS_DIR]/serial_socket - [APPS_DIR]/collect-view - [APPS_DIR]/powertracker - - My simulation - 2.0 - generated - 1000000 - - org.contikios.cooja.radiomediums.UDGM - 50.0 - 100.0 - 1.0 - 1.0 - - - 40000 - - - org.contikios.cooja.contikimote.ContikiMoteType - mtype812 - router TARGET=cooja-ip64 - [CONTIKI_DIR]/regression-tests/21-large-rpl/code/router/router.c - echo make clean TARGET=cooja-ip64 -make router.cooja-ip64 TARGET=cooja-ip64 - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.Battery - org.contikios.cooja.contikimote.interfaces.ContikiVib - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - org.contikios.cooja.contikimote.interfaces.ContikiRS232 - org.contikios.cooja.contikimote.interfaces.ContikiBeeper - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.contikimote.interfaces.ContikiIPAddress - org.contikios.cooja.contikimote.interfaces.ContikiRadio - org.contikios.cooja.contikimote.interfaces.ContikiButton - org.contikios.cooja.contikimote.interfaces.ContikiPIR - org.contikios.cooja.contikimote.interfaces.ContikiClock - org.contikios.cooja.contikimote.interfaces.ContikiLED - org.contikios.cooja.contikimote.interfaces.ContikiCFS - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - false - - - org.contikios.cooja.contikimote.ContikiMoteType - mtype833 - client - [CONTIKI_DIR]/regression-tests/21-large-rpl/code/node/client.c - echo make clean TARGET=cooja -make client.cooja TARGET=cooja - org.contikios.cooja.interfaces.Position - org.contikios.cooja.interfaces.Battery - org.contikios.cooja.contikimote.interfaces.ContikiVib - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - org.contikios.cooja.contikimote.interfaces.ContikiRS232 - org.contikios.cooja.contikimote.interfaces.ContikiBeeper - org.contikios.cooja.interfaces.RimeAddress - org.contikios.cooja.contikimote.interfaces.ContikiIPAddress - org.contikios.cooja.contikimote.interfaces.ContikiRadio - org.contikios.cooja.contikimote.interfaces.ContikiButton - org.contikios.cooja.contikimote.interfaces.ContikiPIR - org.contikios.cooja.contikimote.interfaces.ContikiClock - org.contikios.cooja.contikimote.interfaces.ContikiLED - org.contikios.cooja.contikimote.interfaces.ContikiCFS - org.contikios.cooja.interfaces.Mote2MoteRelations - org.contikios.cooja.interfaces.MoteAttributes - false - - - - org.contikios.cooja.interfaces.Position - 55.719691912311305 - 37.8697579181178 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 1 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype812 - - - - org.contikios.cooja.interfaces.Position - 33.16398380436391 - 28.280100446725353 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 2 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype833 - - - - org.contikios.cooja.interfaces.Position - 64.7333702437188 - 86.25343669492709 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 3 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype833 - - - - org.contikios.cooja.interfaces.Position - 34.382213480997194 - 87.3651616010611 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 4 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype833 - - - - org.contikios.cooja.interfaces.Position - 11.332821198243948 - 72.43057435800137 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 5 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype833 - - - - org.contikios.cooja.interfaces.Position - 95.94512295362799 - 71.39152480287795 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 6 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype833 - - - - org.contikios.cooja.interfaces.Position - 34.51186307444599 - 59.489544081261435 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 7 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype833 - - - - org.contikios.cooja.interfaces.Position - 63.02063881741806 - 6.725737893296902 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 8 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype833 - - - - org.contikios.cooja.interfaces.Position - 67.16488021441937 - 54.31377260130722 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 9 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype833 - - - - org.contikios.cooja.interfaces.Position - 9.784878122518437 - 81.00283052134533 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 10 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype833 - - - - org.contikios.cooja.interfaces.Position - 32.10074353933871 - 33.071992737644926 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 11 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype833 - - - - org.contikios.cooja.interfaces.Position - 91.82438265710196 - 51.23700415853406 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 12 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype833 - - - - org.contikios.cooja.interfaces.Position - 21.195462105769337 - 82.08222111459202 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 13 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype833 - - - - org.contikios.cooja.interfaces.Position - 55.73823429127498 - 69.24022125144269 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 14 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype833 - - - - org.contikios.cooja.interfaces.Position - 69.71587306768029 - 57.37071024636343 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 15 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype833 - - - - org.contikios.cooja.interfaces.Position - 66.69012609363311 - 68.93236248473207 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 16 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype833 - - - - org.contikios.cooja.interfaces.Position - 66.84314708507073 - 32.20129384563065 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 17 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype833 - - - - org.contikios.cooja.interfaces.Position - 75.11303983172269 - 17.658699966744983 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 18 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype833 - - - - org.contikios.cooja.interfaces.Position - 27.078612584793017 - 97.3945649089831 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 19 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype833 - - - - org.contikios.cooja.interfaces.Position - 63.37580990146204 - 30.66028070022273 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 20 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype833 - - - - org.contikios.cooja.interfaces.Position - 3.866240569639967 - 58.00787820279949 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 21 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype833 - - - - org.contikios.cooja.interfaces.Position - 57.433437740562496 - 12.398752526430156 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 22 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype833 - - - - org.contikios.cooja.interfaces.Position - 15.784041174017371 - 74.78102139434115 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 23 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype833 - - - - org.contikios.cooja.interfaces.Position - 40.67175327199246 - 52.46247320344863 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 24 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype833 - - - - org.contikios.cooja.interfaces.Position - 38.43045934512656 - 90.56311604010655 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 25 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype833 - - - - org.contikios.cooja.interfaces.Position - 0.6068936092190724 - 21.344443973676874 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 26 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype833 - - - - org.contikios.cooja.interfaces.Position - 60.36615377515271 - 86.59995801287768 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 27 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype833 - - - - org.contikios.cooja.interfaces.Position - 14.39476252794466 - 9.985669338749425 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 28 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype833 - - - - org.contikios.cooja.interfaces.Position - 95.14872168386105 - 45.936172484167905 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 29 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype833 - - - - org.contikios.cooja.interfaces.Position - 61.80198040806143 - 14.891226267286084 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 30 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype833 - - - - org.contikios.cooja.interfaces.Position - 32.11354654266005 - 38.51630620185639 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 31 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype833 - - - - org.contikios.cooja.interfaces.Position - 37.711371799794335 - 18.547318360664853 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 32 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype833 - - - - org.contikios.cooja.interfaces.Position - 58.34301426026205 - 95.91480486240545 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 33 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype833 - - - - org.contikios.cooja.interfaces.Position - 20.456374070589078 - 13.31295283913667 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 34 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype833 - - - - org.contikios.cooja.interfaces.Position - 4.789895861056081 - 41.25598476863351 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 35 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype833 - - - - org.contikios.cooja.interfaces.Position - 22.62971444227585 - 28.645182034255324 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 36 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype833 - - - - org.contikios.cooja.interfaces.Position - 60.457329857492034 - 24.40308696160821 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 37 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype833 - - - - org.contikios.cooja.interfaces.Position - 4.1096555252476685 - 27.46211937285302 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 38 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype833 - - - - org.contikios.cooja.interfaces.Position - 87.008751083046 - 87.28519710099914 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 39 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype833 - - - - org.contikios.cooja.interfaces.Position - 86.65741005585366 - 99.07543884063683 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 40 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype833 - - - - org.contikios.cooja.interfaces.Position - 96.56473544385348 - 56.74413810869915 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 41 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype833 - - - - org.contikios.cooja.interfaces.Position - 63.1598358033005 - 41.18799873508732 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 42 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype833 - - - - org.contikios.cooja.interfaces.Position - 14.556676924656397 - 98.24257311359364 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 43 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype833 - - - - org.contikios.cooja.interfaces.Position - 34.70728168935242 - 31.89373622088234 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 44 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype833 - - - - org.contikios.cooja.interfaces.Position - 91.35334037714965 - 83.59007856757782 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 45 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype833 - - - - org.contikios.cooja.interfaces.Position - 57.18004847306107 - 1.5650913544456135 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 46 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype833 - - - - org.contikios.cooja.interfaces.Position - 97.14688174768989 - 29.613231105554448 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 47 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype833 - - - - org.contikios.cooja.interfaces.Position - 12.528733239940715 - 23.28442121821601 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 48 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype833 - - - - org.contikios.cooja.interfaces.Position - 97.65915972314534 - 57.204021167070664 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 49 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype833 - - - - org.contikios.cooja.interfaces.Position - 94.8211477197945 - 15.57384229665848 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 50 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype833 - - - - org.contikios.cooja.interfaces.Position - 69.1730393490499 - 35.900983349410275 - 0.0 - - - org.contikios.cooja.contikimote.interfaces.ContikiMoteID - 51 - - - org.contikios.cooja.contikimote.interfaces.ContikiRadio - 250.0 - - mtype833 - - - - org.contikios.cooja.plugins.SimControl - 280 - 3 - 160 - 606 - 15 - - - org.contikios.cooja.plugins.Visualizer - - true - org.contikios.cooja.plugins.skins.IDVisualizerSkin - org.contikios.cooja.plugins.skins.GridVisualizerSkin - org.contikios.cooja.plugins.skins.MoteTypeVisualizerSkin - org.contikios.cooja.plugins.skins.LEDVisualizerSkin - org.contikios.cooja.plugins.skins.UDGMVisualizerSkin - 2.927428245448204 0.0 0.0 2.927428245448204 50.166589953058406 9.691034635016393 - - 401 - 0 - 368 - 29 - 27 - - - org.contikios.cooja.plugins.LogListener - - close - - - - 685 - 2 - 429 - 34 - 307 - - - org.contikios.cooja.plugins.ScriptRunner - - [CONTIKI_DIR]/regression-tests/21-large-rpl/testscript.js - true - - 960 - 1 - 682 - 528 - 192 - - - org.contikios.cooja.serialsocket.SerialSocketServer - 0 - - 60001 - true - - 362 - 4 - 116 - 234 - 101 - - - + + + [APPS_DIR]/mrm + [APPS_DIR]/mspsim + [APPS_DIR]/avrora + [APPS_DIR]/serial_socket + [APPS_DIR]/collect-view + [APPS_DIR]/powertracker + + My simulation + 2.0 + generated + 1000000 + + org.contikios.cooja.radiomediums.UDGM + 50.0 + 100.0 + 1.0 + 1.0 + + + 40000 + + + org.contikios.cooja.contikimote.ContikiMoteType + mtype812 + router TARGET=cooja-ip64 + [CONTIKI_DIR]/regression-tests/21-large-rpl/code/router/router.c + echo make clean TARGET=cooja-ip64 +make router.cooja-ip64 TARGET=cooja-ip64 + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.Battery + org.contikios.cooja.contikimote.interfaces.ContikiVib + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + org.contikios.cooja.contikimote.interfaces.ContikiRS232 + org.contikios.cooja.contikimote.interfaces.ContikiBeeper + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.contikimote.interfaces.ContikiIPAddress + org.contikios.cooja.contikimote.interfaces.ContikiRadio + org.contikios.cooja.contikimote.interfaces.ContikiButton + org.contikios.cooja.contikimote.interfaces.ContikiPIR + org.contikios.cooja.contikimote.interfaces.ContikiClock + org.contikios.cooja.contikimote.interfaces.ContikiLED + org.contikios.cooja.contikimote.interfaces.ContikiCFS + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + false + + + org.contikios.cooja.contikimote.ContikiMoteType + mtype833 + client + [CONTIKI_DIR]/regression-tests/21-large-rpl/code/node/client.c + echo make clean TARGET=cooja +make client.cooja TARGET=cooja + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.Battery + org.contikios.cooja.contikimote.interfaces.ContikiVib + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + org.contikios.cooja.contikimote.interfaces.ContikiRS232 + org.contikios.cooja.contikimote.interfaces.ContikiBeeper + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.contikimote.interfaces.ContikiIPAddress + org.contikios.cooja.contikimote.interfaces.ContikiRadio + org.contikios.cooja.contikimote.interfaces.ContikiButton + org.contikios.cooja.contikimote.interfaces.ContikiPIR + org.contikios.cooja.contikimote.interfaces.ContikiClock + org.contikios.cooja.contikimote.interfaces.ContikiLED + org.contikios.cooja.contikimote.interfaces.ContikiCFS + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + false + + + + org.contikios.cooja.interfaces.Position + 55.719691912311305 + 37.8697579181178 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 1 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype812 + + + + org.contikios.cooja.interfaces.Position + 33.16398380436391 + 28.280100446725353 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 2 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype833 + + + + org.contikios.cooja.interfaces.Position + 64.7333702437188 + 86.25343669492709 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 3 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype833 + + + + org.contikios.cooja.interfaces.Position + 34.382213480997194 + 87.3651616010611 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 4 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype833 + + + + org.contikios.cooja.interfaces.Position + 11.332821198243948 + 72.43057435800137 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 5 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype833 + + + + org.contikios.cooja.interfaces.Position + 95.94512295362799 + 71.39152480287795 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 6 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype833 + + + + org.contikios.cooja.interfaces.Position + 34.51186307444599 + 59.489544081261435 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 7 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype833 + + + + org.contikios.cooja.interfaces.Position + 63.02063881741806 + 6.725737893296902 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 8 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype833 + + + + org.contikios.cooja.interfaces.Position + 67.16488021441937 + 54.31377260130722 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 9 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype833 + + + + org.contikios.cooja.interfaces.Position + 9.784878122518437 + 81.00283052134533 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 10 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype833 + + + + org.contikios.cooja.interfaces.Position + 32.10074353933871 + 33.071992737644926 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 11 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype833 + + + + org.contikios.cooja.interfaces.Position + 91.82438265710196 + 51.23700415853406 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 12 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype833 + + + + org.contikios.cooja.interfaces.Position + 21.195462105769337 + 82.08222111459202 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 13 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype833 + + + + org.contikios.cooja.interfaces.Position + 55.73823429127498 + 69.24022125144269 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 14 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype833 + + + + org.contikios.cooja.interfaces.Position + 69.71587306768029 + 57.37071024636343 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 15 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype833 + + + + org.contikios.cooja.interfaces.Position + 66.69012609363311 + 68.93236248473207 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 16 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype833 + + + + org.contikios.cooja.interfaces.Position + 66.84314708507073 + 32.20129384563065 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 17 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype833 + + + + org.contikios.cooja.interfaces.Position + 75.11303983172269 + 17.658699966744983 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 18 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype833 + + + + org.contikios.cooja.interfaces.Position + 27.078612584793017 + 97.3945649089831 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 19 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype833 + + + + org.contikios.cooja.interfaces.Position + 63.37580990146204 + 30.66028070022273 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 20 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype833 + + + + org.contikios.cooja.interfaces.Position + 3.866240569639967 + 58.00787820279949 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 21 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype833 + + + + org.contikios.cooja.interfaces.Position + 57.433437740562496 + 12.398752526430156 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 22 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype833 + + + + org.contikios.cooja.interfaces.Position + 15.784041174017371 + 74.78102139434115 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 23 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype833 + + + + org.contikios.cooja.interfaces.Position + 40.67175327199246 + 52.46247320344863 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 24 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype833 + + + + org.contikios.cooja.interfaces.Position + 38.43045934512656 + 90.56311604010655 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 25 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype833 + + + + org.contikios.cooja.interfaces.Position + 0.6068936092190724 + 21.344443973676874 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 26 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype833 + + + + org.contikios.cooja.interfaces.Position + 60.36615377515271 + 86.59995801287768 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 27 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype833 + + + + org.contikios.cooja.interfaces.Position + 14.39476252794466 + 9.985669338749425 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 28 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype833 + + + + org.contikios.cooja.interfaces.Position + 95.14872168386105 + 45.936172484167905 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 29 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype833 + + + + org.contikios.cooja.interfaces.Position + 61.80198040806143 + 14.891226267286084 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 30 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype833 + + + + org.contikios.cooja.interfaces.Position + 32.11354654266005 + 38.51630620185639 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 31 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype833 + + + + org.contikios.cooja.interfaces.Position + 37.711371799794335 + 18.547318360664853 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 32 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype833 + + + + org.contikios.cooja.interfaces.Position + 58.34301426026205 + 95.91480486240545 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 33 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype833 + + + + org.contikios.cooja.interfaces.Position + 20.456374070589078 + 13.31295283913667 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 34 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype833 + + + + org.contikios.cooja.interfaces.Position + 4.789895861056081 + 41.25598476863351 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 35 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype833 + + + + org.contikios.cooja.interfaces.Position + 22.62971444227585 + 28.645182034255324 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 36 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype833 + + + + org.contikios.cooja.interfaces.Position + 60.457329857492034 + 24.40308696160821 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 37 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype833 + + + + org.contikios.cooja.interfaces.Position + 4.1096555252476685 + 27.46211937285302 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 38 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype833 + + + + org.contikios.cooja.interfaces.Position + 87.008751083046 + 87.28519710099914 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 39 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype833 + + + + org.contikios.cooja.interfaces.Position + 86.65741005585366 + 99.07543884063683 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 40 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype833 + + + + org.contikios.cooja.interfaces.Position + 96.56473544385348 + 56.74413810869915 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 41 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype833 + + + + org.contikios.cooja.interfaces.Position + 63.1598358033005 + 41.18799873508732 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 42 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype833 + + + + org.contikios.cooja.interfaces.Position + 14.556676924656397 + 98.24257311359364 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 43 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype833 + + + + org.contikios.cooja.interfaces.Position + 34.70728168935242 + 31.89373622088234 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 44 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype833 + + + + org.contikios.cooja.interfaces.Position + 91.35334037714965 + 83.59007856757782 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 45 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype833 + + + + org.contikios.cooja.interfaces.Position + 57.18004847306107 + 1.5650913544456135 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 46 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype833 + + + + org.contikios.cooja.interfaces.Position + 97.14688174768989 + 29.613231105554448 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 47 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype833 + + + + org.contikios.cooja.interfaces.Position + 12.528733239940715 + 23.28442121821601 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 48 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype833 + + + + org.contikios.cooja.interfaces.Position + 97.65915972314534 + 57.204021167070664 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 49 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype833 + + + + org.contikios.cooja.interfaces.Position + 94.8211477197945 + 15.57384229665848 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 50 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype833 + + + + org.contikios.cooja.interfaces.Position + 69.1730393490499 + 35.900983349410275 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 51 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + mtype833 + + + + org.contikios.cooja.plugins.SimControl + 280 + 3 + 160 + 606 + 15 + + + org.contikios.cooja.plugins.Visualizer + + true + org.contikios.cooja.plugins.skins.IDVisualizerSkin + org.contikios.cooja.plugins.skins.GridVisualizerSkin + org.contikios.cooja.plugins.skins.MoteTypeVisualizerSkin + org.contikios.cooja.plugins.skins.LEDVisualizerSkin + org.contikios.cooja.plugins.skins.UDGMVisualizerSkin + 2.927428245448204 0.0 0.0 2.927428245448204 50.166589953058406 9.691034635016393 + + 401 + 0 + 368 + 29 + 27 + + + org.contikios.cooja.plugins.LogListener + + close + + + + 685 + 2 + 429 + 34 + 307 + + + org.contikios.cooja.plugins.ScriptRunner + + [CONTIKI_DIR]/regression-tests/21-large-rpl/testscript.js + true + + 960 + 1 + 682 + 528 + 192 + + + org.contikios.cooja.serialsocket.SerialSocketServer + 0 + + 60001 + true + + 362 + 4 + 116 + 234 + 101 + + + diff --git a/regression-tests/21-large-rpl/code/node/project-conf.h b/regression-tests/21-large-rpl/code/node/project-conf.h index c8cfeb645..21bf07a9b 100644 --- a/regression-tests/21-large-rpl/code/node/project-conf.h +++ b/regression-tests/21-large-rpl/code/node/project-conf.h @@ -2,5 +2,7 @@ #define RESOLV_CONF_SUPPORTS_MDNS 0 #define COOJA_MTARCH_STACKSIZE 4096 +#undef UIP_CONF_MAX_ROUTES #define UIP_CONF_MAX_ROUTES 3 +#undef NBR_TABLE_CONF_MAX_NEIGHBORS #define NBR_TABLE_CONF_MAX_NEIGHBORS 3 diff --git a/regression-tests/21-large-rpl/code/router/project-conf.h b/regression-tests/21-large-rpl/code/router/project-conf.h index 2fa5e2977..eb0b0b1a7 100644 --- a/regression-tests/21-large-rpl/code/router/project-conf.h +++ b/regression-tests/21-large-rpl/code/router/project-conf.h @@ -2,7 +2,9 @@ #define RESOLV_CONF_SUPPORTS_MDNS 0 #define COOJA_MTARCH_STACKSIZE 4096 +#undef UIP_CONF_MAX_ROUTES #define UIP_CONF_MAX_ROUTES 8 +#undef NBR_TABLE_CONF_MAX_NEIGHBORS #define NBR_TABLE_CONF_MAX_NEIGHBORS 8 /*#define RPL_CONF_DEFAULT_LIFETIME_UNIT 10 diff --git a/regression-tests/21-large-rpl/code/router/router.c b/regression-tests/21-large-rpl/code/router/router.c index 391b5038b..844afdc1c 100644 --- a/regression-tests/21-large-rpl/code/router/router.c +++ b/regression-tests/21-large-rpl/code/router/router.c @@ -2,6 +2,7 @@ #include "contiki-net.h" #include "ip64.h" #include "net/netstack.h" +#include "net/rpl/rpl-dag-root.h" /*---------------------------------------------------------------------------*/ PROCESS(router_node_process, "Router node"); diff --git a/regression-tests/22-compile-nxp-ports/Makefile b/regression-tests/22-compile-nxp-ports/Makefile new file mode 100644 index 000000000..7ff68eaef --- /dev/null +++ b/regression-tests/22-compile-nxp-ports/Makefile @@ -0,0 +1,16 @@ +EXAMPLESDIR=../../examples +TOOLSDIR=../../tools + +# build jn516x examples, covering IPv6, RPL, CoAP, Rime, Nullrdc, Contikimac +EXAMPLES = \ +jn516x/dr1175-sensors/jn516x \ +jn516x/rime/jn516x \ +jn516x/rpl/border-router/jn516x \ +jn516x/rpl/node/jn516x \ +jn516x/rpl/coap-dongle-node/jn516x \ +jn516x/rpl/coap-dr1175-node/jn516x \ +jn516x/rpl/coap-dr1199-node/jn516x + +TOOLS= + +include ../Makefile.compile-test diff --git a/regression-tests/Makefile.compile-test b/regression-tests/Makefile.compile-test index 10b01cf7e..1793321ee 100644 --- a/regression-tests/Makefile.compile-test +++ b/regression-tests/Makefile.compile-test @@ -42,7 +42,7 @@ define dooneexample @((cd $(EXAMPLESDIR)/$(1); \ export STM32W_CPUREV=CC; \ export BOARD=ids01a5; \ - make TARGET=$(2) clean && make TARGET=$(2)) > \ + make TARGET=$(2) clean && make TARGET=$(2) WERROR=1) > \ $(3)-$(subst /,-,$(1))$(2).report 2>&1 && \ (echo $(1) $(2): OK | tee $(3)-$(subst /,-,$(1))$(2).summary) || \ (echo $(1) $(2): FAIL ಠ.ಠ | tee $(3)-$(subst /,-,$(1))$(2).summary ; \ diff --git a/tools/6502/Makefile b/tools/6502/Makefile index e409bf389..e1e0925ef 100644 --- a/tools/6502/Makefile +++ b/tools/6502/Makefile @@ -53,20 +53,41 @@ endif all: apple2 atari c64 c128 +ifeq ($(shell echo),) + NULLDEV = /dev/null +else + NULLDEV = nul: +endif + +ZIPCOMMENT := $(shell git rev-parse --short HEAD 2>$(NULLDEV)) +ifeq ($(words $(ZIPCOMMENT)),1) + ZIPCOMMENT := https://github.com/contiki-os/contiki/commits/$(ZIPCOMMENT) +else + ZIPCOMMENT := N/A +endif + define makes $1-makes: - $(MAKE) -C ../../cpu/6502/ethconfig TARGET=$1 - $(MAKE) -C ../../cpu/6502/ipconfig TARGET=$1 - $(MAKE) -C ../../examples/webbrowser TARGET=$1 - $(MAKE) -C ../../examples/wget TARGET=$1 - $(MAKE) -C ../../examples/irc TARGET=$1 - $(MAKE) -C ../../examples/webserver TARGET=$1 HTTPD-CFS=1 - $(MAKE) -C ../../examples/telnet-server TARGET=$1 + $(MAKE) -C ../../cpu/6502/ethconfig TARGET=$1 + $(MAKE) -C ../../cpu/6502/ipconfig TARGET=$1 + $(MAKE) -C ../../examples/webbrowser TARGET=$1 + $(MAKE) -C ../../examples/webbrowser-80col TARGET=$1 + $(MAKE) -C ../../examples/wget TARGET=$1 + $(MAKE) -C ../../examples/irc TARGET=$1 + $(MAKE) -C ../../examples/irc-80col TARGET=$1 + $(MAKE) -C ../../examples/webserver TARGET=$1 HTTPD-CFS=1 + $(MAKE) -C ../../examples/telnet-server TARGET=$1 endef $(eval $(call makes,apple2enh)) -apple2: contiki-apple2-1.dsk contiki-apple2-2.dsk contiki-apple2-3.dsk contiki-apple2.po +%.zip: + zip $@ $^ + echo $(ZIPCOMMENT) | zip -z $@ + +apple2: contiki-apple2.zip + +contiki-apple2.zip: contiki-apple2-1.dsk contiki-apple2-2.dsk contiki-apple2-3.dsk contiki-apple2.po contiki-apple2-1.dsk: apple2enh-makes cp ../apple2enh/prodos.dsk $@ @@ -76,7 +97,7 @@ contiki-apple2-1.dsk: apple2enh-makes java -jar $(AC) -p $@ ipconfig.system sys < $(CC65_HOME)/targetutil/loader.system java -jar $(AC) -cc65 $@ ipconfig bin < ../../cpu/6502/ipconfig/ipconfig.apple2enh java -jar $(AC) -p $@ webbrows.system sys < $(CC65_HOME)/targetutil/loader.system - java -jar $(AC) -cc65 $@ webbrows bin < ../../examples/webbrowser/webbrowser.apple2enh + java -jar $(AC) -cc65 $@ webbrows bin < ../../examples/webbrowser-80col/webbrowser.apple2enh java -jar $(AC) -p $@ wget.system sys < $(CC65_HOME)/targetutil/loader.system java -jar $(AC) -cc65 $@ wget bin < ../../examples/wget/wget.apple2enh java -jar $(AC) -p $@ contiki.cfg bin 0 < ../apple2enh/default.cfg @@ -93,7 +114,7 @@ contiki-apple2-2.dsk: apple2enh-makes java -jar $(AC) -p $@ ipconfig.system sys < $(CC65_HOME)/targetutil/loader.system java -jar $(AC) -cc65 $@ ipconfig bin < ../../cpu/6502/ipconfig/ipconfig.apple2enh java -jar $(AC) -p $@ irc.system sys < $(CC65_HOME)/targetutil/loader.system - java -jar $(AC) -cc65 $@ irc bin < ../../examples/irc/irc-client.apple2enh + java -jar $(AC) -cc65 $@ irc bin < ../../examples/irc-80col/irc-client.apple2enh java -jar $(AC) -p $@ contiki.cfg bin 0 < ../apple2enh/default.cfg java -jar $(AC) -p $@ cs8900a.eth rel 0 < ../../cpu/6502/ethconfig/cs8900a.eth java -jar $(AC) -p $@ lan91c96.eth rel 0 < ../../cpu/6502/ethconfig/lan91c96.eth @@ -129,11 +150,11 @@ contiki-apple2.po: apple2enh-makes java -jar $(AC) -p $@ ipconfig.system sys < $(CC65_HOME)/targetutil/loader.system java -jar $(AC) -cc65 $@ ipconfig bin < ../../cpu/6502/ipconfig/ipconfig.apple2enh java -jar $(AC) -p $@ webbrows.system sys < $(CC65_HOME)/targetutil/loader.system - java -jar $(AC) -cc65 $@ webbrows bin < ../../examples/webbrowser/webbrowser.apple2enh + java -jar $(AC) -cc65 $@ webbrows bin < ../../examples/webbrowser-80col/webbrowser.apple2enh java -jar $(AC) -p $@ wget.system sys < $(CC65_HOME)/targetutil/loader.system java -jar $(AC) -cc65 $@ wget bin < ../../examples/wget/wget.apple2enh java -jar $(AC) -p $@ irc.system sys < $(CC65_HOME)/targetutil/loader.system - java -jar $(AC) -cc65 $@ irc bin < ../../examples/irc/irc-client.apple2enh + java -jar $(AC) -cc65 $@ irc bin < ../../examples/irc-80col/irc-client.apple2enh java -jar $(AC) -p $@ webserv.system sys < $(CC65_HOME)/targetutil/loader.system java -jar $(AC) -cc65 $@ webserv bin < ../../examples/webserver/webserver-example.apple2enh java -jar $(AC) -p $@ telnetd.system sys < $(CC65_HOME)/targetutil/loader.system @@ -150,7 +171,9 @@ contiki-apple2.po: apple2enh-makes $(eval $(call makes,atarixl)) -atari: contiki-atari-1.atr contiki-atari-2.atr contiki-atari-3.atr contiki-atari.atr +atari: contiki-atari.zip + +contiki-atari.zip: contiki-atari-1.atr contiki-atari-2.atr contiki-atari-3.atr contiki-atari.atr contiki-atari-1.atr: atarixl-makes mkdir atr @@ -232,24 +255,40 @@ contiki-atari.atr: atarixl-makes $(eval $(call makes,c64)) -c64: contiki-c64-1.d64 contiki-c64-2.d64 contiki-c64.d71 contiki-c64.d81 +c64: contiki-c64.zip + +contiki-c64.zip: contiki-c64-1.d64 contiki-c64-2.d64 contiki-c64-3.d64 contiki-c64.d71 contiki-c64.d81 contiki-c64-1.d64: c64-makes $(C1541) -format contiki-1,00 d64 $@ - $(C1541) -attach $@ -write ../../cpu/6502/ethconfig/ethconfig.c64 ethconfig,p - $(C1541) -attach $@ -write ../../cpu/6502/ipconfig/ipconfig.c64 ipconfig,p - $(C1541) -attach $@ -write ../../examples/webbrowser/webbrowser.c64 webbrowser,p - $(C1541) -attach $@ -write ../../examples/wget/wget.c64 wget,p - $(C1541) -attach $@ -write ../../examples/irc/irc-client.c64 irc,p - $(C1541) -attach $@ -write ../c64/default.cfg contiki.cfg,s - $(C1541) -attach $@ -write ../../cpu/6502/ethconfig/cs8900a.eth cs8900a.eth,s - $(C1541) -attach $@ -write ../../cpu/6502/ethconfig/lan91c96.eth lan91c96.eth,s - $(C1541) -attach $@ -write $(CC65_HOME)/mou/c64-1351.mou contiki.mou,s - $(C1541) -attach $@ -write $(CC65_HOME)/mou/c64-inkwell.mou inkwell.mou,s - $(C1541) -attach $@ -write $(CC65_HOME)/mou/c64-joy.mou joy.mou,s - $(C1541) -attach $@ -write $(CC65_HOME)/mou/c64-pot.mou pot.mou,s + $(C1541) -attach $@ -write ../../cpu/6502/ethconfig/ethconfig.c64 ethconfig,p + $(C1541) -attach $@ -write ../../cpu/6502/ipconfig/ipconfig.c64 ipconfig,p + $(C1541) -attach $@ -write ../../examples/webbrowser/webbrowser.c64 webbrowser,p + $(C1541) -attach $@ -write ../../examples/webbrowser-80col/webbrowser.c64 webbrowser80,p + $(C1541) -attach $@ -write ../../examples/wget/wget.c64 wget,p + $(C1541) -attach $@ -write ../c64/default.cfg contiki.cfg,s + $(C1541) -attach $@ -write ../../cpu/6502/ethconfig/cs8900a.eth cs8900a.eth,s + $(C1541) -attach $@ -write ../../cpu/6502/ethconfig/lan91c96.eth lan91c96.eth,s + $(C1541) -attach $@ -write $(CC65_HOME)/mou/c64-1351.mou contiki.mou,s + $(C1541) -attach $@ -write $(CC65_HOME)/mou/c64-inkwell.mou inkwell.mou,s + $(C1541) -attach $@ -write $(CC65_HOME)/mou/c64-joy.mou joy.mou,s + $(C1541) -attach $@ -write $(CC65_HOME)/mou/c64-pot.mou pot.mou,s contiki-c64-2.d64: c64-makes + $(C1541) -format contiki-2,00 d64 $@ + $(C1541) -attach $@ -write ../../cpu/6502/ethconfig/ethconfig.c64 ethconfig,p + $(C1541) -attach $@ -write ../../cpu/6502/ipconfig/ipconfig.c64 ipconfig,p + $(C1541) -attach $@ -write ../../examples/irc/irc-client.c64 irc,p + $(C1541) -attach $@ -write ../../examples/irc-80col/irc-client.c64 irc80,p + $(C1541) -attach $@ -write ../c64/default.cfg contiki.cfg,s + $(C1541) -attach $@ -write ../../cpu/6502/ethconfig/cs8900a.eth cs8900a.eth,s + $(C1541) -attach $@ -write ../../cpu/6502/ethconfig/lan91c96.eth lan91c96.eth,s + $(C1541) -attach $@ -write $(CC65_HOME)/mou/c64-1351.mou contiki.mou,s + $(C1541) -attach $@ -write $(CC65_HOME)/mou/c64-inkwell.mou inkwell.mou,s + $(C1541) -attach $@ -write $(CC65_HOME)/mou/c64-joy.mou joy.mou,s + $(C1541) -attach $@ -write $(CC65_HOME)/mou/c64-pot.mou pot.mou,s + +contiki-c64-3.d64: c64-makes $(C1541) -format contiki-3,00 d64 $@ $(C1541) -attach $@ -write ../../cpu/6502/ethconfig/ethconfig.c64 ethconfig,p $(C1541) -attach $@ -write ../../cpu/6502/ipconfig/ipconfig.c64 ipconfig,p @@ -272,8 +311,10 @@ contiki-c64.d71: c64-makes $(C1541) -attach $@ -write ../../cpu/6502/ethconfig/ethconfig.c64 ethconfig,p $(C1541) -attach $@ -write ../../cpu/6502/ipconfig/ipconfig.c64 ipconfig,p $(C1541) -attach $@ -write ../../examples/webbrowser/webbrowser.c64 webbrowser,p + $(C1541) -attach $@ -write ../../examples/webbrowser-80col/webbrowser.c64 webbrowser80,p $(C1541) -attach $@ -write ../../examples/wget/wget.c64 wget,p $(C1541) -attach $@ -write ../../examples/irc/irc-client.c64 irc,p + $(C1541) -attach $@ -write ../../examples/irc-80col/irc-client.c64 irc80,p $(C1541) -attach $@ -write ../../examples/webserver/webserver-example.c64 webserver,p $(C1541) -attach $@ -write ../../examples/telnet-server/telnet-server.c64 telnetd,p $(C1541) -attach $@ -write ../c64/default.cfg contiki.cfg,s @@ -293,8 +334,10 @@ contiki-c64.d81: c64-makes $(C1541) -attach $@ -write ../../cpu/6502/ethconfig/ethconfig.c64 ethconfig,p $(C1541) -attach $@ -write ../../cpu/6502/ipconfig/ipconfig.c64 ipconfig,p $(C1541) -attach $@ -write ../../examples/webbrowser/webbrowser.c64 webbrowser,p + $(C1541) -attach $@ -write ../../examples/webbrowser-80col/webbrowser.c64 webbrowser80,p $(C1541) -attach $@ -write ../../examples/wget/wget.c64 wget,p $(C1541) -attach $@ -write ../../examples/irc/irc-client.c64 irc,p + $(C1541) -attach $@ -write ../../examples/irc-80col/irc-client.c64 irc80,p $(C1541) -attach $@ -write ../../examples/webserver/webserver-example.c64 webserver,p $(C1541) -attach $@ -write ../../examples/telnet-server/telnet-server.c64 telnetd,p $(C1541) -attach $@ -write ../c64/default.cfg contiki.cfg,s @@ -311,18 +354,20 @@ contiki-c64.d81: c64-makes $(eval $(call makes,c128)) -c128: contiki-c128-1.d64 contiki-c128-2.d64 contiki-c128.d71 contiki-c128.d81 +c128: contiki-c128.zip + +contiki-c128.zip: contiki-c128-1.d64 contiki-c128-2.d64 contiki-c128.d71 contiki-c128.d81 contiki-c128-1.d64: c128-makes $(C1541) -format contiki-1,00 d64 $@ - $(C1541) -attach $@ -write ../../cpu/6502/ethconfig/ethconfig.c128 ethconfig,p - $(C1541) -attach $@ -write ../../cpu/6502/ipconfig/ipconfig.c128 ipconfig,p - $(C1541) -attach $@ -write ../../examples/webbrowser/webbrowser.c128 webbrowser,p - $(C1541) -attach $@ -write ../../examples/wget/wget.c128 wget,p - $(C1541) -attach $@ -write ../../examples/irc/irc-client.c128 irc,p - $(C1541) -attach $@ -write ../c128/default.cfg contiki.cfg,s - $(C1541) -attach $@ -write ../../cpu/6502/ethconfig/cs8900a.eth cs8900a.eth,s - $(C1541) -attach $@ -write ../../cpu/6502/ethconfig/lan91c96.eth lan91c96.eth,s + $(C1541) -attach $@ -write ../../cpu/6502/ethconfig/ethconfig.c128 ethconfig,p + $(C1541) -attach $@ -write ../../cpu/6502/ipconfig/ipconfig.c128 ipconfig,p + $(C1541) -attach $@ -write ../../examples/webbrowser-80col/webbrowser.c128 webbrowser,p + $(C1541) -attach $@ -write ../../examples/wget/wget.c128 wget,p + $(C1541) -attach $@ -write ../../examples/irc-80col/irc-client.c128 irc,p + $(C1541) -attach $@ -write ../c128/default.cfg contiki.cfg,s + $(C1541) -attach $@ -write ../../cpu/6502/ethconfig/cs8900a.eth cs8900a.eth,s + $(C1541) -attach $@ -write ../../cpu/6502/ethconfig/lan91c96.eth lan91c96.eth,s contiki-c128-2.d64: c128-makes $(C1541) -format contiki-3,00 d64 $@ @@ -342,9 +387,9 @@ contiki-c128.d71: c128-makes $(C1541) -format contiki,00 d71 $@ $(C1541) -attach $@ -write ../../cpu/6502/ethconfig/ethconfig.c128 ethconfig,p $(C1541) -attach $@ -write ../../cpu/6502/ipconfig/ipconfig.c128 ipconfig,p - $(C1541) -attach $@ -write ../../examples/webbrowser/webbrowser.c128 webbrowser,p + $(C1541) -attach $@ -write ../../examples/webbrowser-80col/webbrowser.c128 webbrowser,p $(C1541) -attach $@ -write ../../examples/wget/wget.c128 wget,p - $(C1541) -attach $@ -write ../../examples/irc/irc-client.c128 irc,p + $(C1541) -attach $@ -write ../../examples/irc-80col/irc-client.c128 irc,p $(C1541) -attach $@ -write ../../examples/webserver/webserver-example.c128 webserver,p $(C1541) -attach $@ -write ../../examples/telnet-server/telnet-server.c128 telnetd,p $(C1541) -attach $@ -write ../c128/default.cfg contiki.cfg,s @@ -359,9 +404,9 @@ contiki-c128.d81: c128-makes $(C1541) -format contiki,00 d81 $@ $(C1541) -attach $@ -write ../../cpu/6502/ethconfig/ethconfig.c128 ethconfig,p $(C1541) -attach $@ -write ../../cpu/6502/ipconfig/ipconfig.c128 ipconfig,p - $(C1541) -attach $@ -write ../../examples/webbrowser/webbrowser.c128 webbrowser,p + $(C1541) -attach $@ -write ../../examples/webbrowser-80col/webbrowser.c128 webbrowser,p $(C1541) -attach $@ -write ../../examples/wget/wget.c128 wget,p - $(C1541) -attach $@ -write ../../examples/irc/irc-client.c128 irc,p + $(C1541) -attach $@ -write ../../examples/irc-80col/irc-client.c128 irc,p $(C1541) -attach $@ -write ../../examples/webserver/webserver-example.c128 webserver,p $(C1541) -attach $@ -write ../../examples/telnet-server/telnet-server.c128 telnetd,p $(C1541) -attach $@ -write ../c128/default.cfg contiki.cfg,s diff --git a/tools/Makefile b/tools/Makefile index 87f14d317..3dab44216 100644 --- a/tools/Makefile +++ b/tools/Makefile @@ -1,5 +1,7 @@ all: tunslip +tunslip6: tools-utils.c tunslip6.c + gitclean: @git clean -d -x -n .. @echo "Enter yes to delete these files"; diff --git a/tools/blaster/Makefile b/tools/blaster/Makefile new file mode 100644 index 000000000..ceafb5cca --- /dev/null +++ b/tools/blaster/Makefile @@ -0,0 +1,19 @@ +CC = gcc +CFLAGS = -Wall -g +HEADERS = + +all: blaster + +depend: + sudo apt-get install libconfig8-dev uuid-dev libqrencode-dev + +%.o: %.c $(HEADERS) + $(CC) -c $(CFLAGS) -o $@ $< + +blaster: blaster.o + $(CC) $(CFLAGS) -o $@ $^ -lconfig -luuid -lqrencode + +clean: + rm *.o blaster + +.PHONY: all depend clean diff --git a/tools/blaster/README b/tools/blaster/README new file mode 100644 index 000000000..7fd109460 --- /dev/null +++ b/tools/blaster/README @@ -0,0 +1,10 @@ +Blaster extends the compiled firmware with additional data for +storing into flash memory. See examples/econotag-flash-test for +usage. Its written for Econotag / MC1322X + +./blaster [ ...] +To Generate a default configuration file, use blaster without parameter. + +Its important to use -l as a flash parameter. + +mc1322x-load -f flasher_econotag.bin -s firmware.bin -t /dev/ttyUSB1 -l diff --git a/tools/blaster/blaster.c b/tools/blaster/blaster.c new file mode 100644 index 000000000..ff074c479 --- /dev/null +++ b/tools/blaster/blaster.c @@ -0,0 +1,330 @@ +/* + * Copyright (c) 2014, Lars Schmertmann . + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * + * This file is part of the Contiki operating system. + * + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include "blaster.h" + +char *anschars = "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_-"; + +/* ---------------------------------------------------------------------------- */ + +FILE *openFile(const char *name, const char *appendix, const char *mode); +void writeStandardConfig(); +void writeImg(FILE *file, unsigned char *data, int width); + +/* ---------------------------------------------------------------------------- */ + +int +main(int nArgs, char **argv) +{ + unsigned int c, i, config; + unsigned int buf[64]; + + if(nArgs < 2) { + writeStandardConfig(); + + fprintf(stderr, "Missing parameter: ./blaster [ ...]\n"); + fprintf(stderr, "Configuration template was created ib config.cfg.\n"); + + exit(EXIT_FAILURE); + } + + /* qrdata = "UUID:PSK\0" */ + char qrdata[54]; + qrdata[36] = ':'; + qrdata[53] = '\0'; + + config_t cfg; + for(config = 1; config < nArgs; config++) { + config_init(&cfg); + config_setting_t *setting; + const char *str_val; + if(access(argv[config], F_OK) == 0) { + config_read_file(&cfg, argv[config]); + } else { + fprintf(stderr, "Unable to read config file.\n"); + exit(EXIT_FAILURE); + } + fprintf(stdout, "Working on %s ... ", argv[config]); + + config_lookup_string(&cfg, "input", &str_val); + FILE *in_bin = openFile(str_val, ".bin", "r"); + + config_lookup_string(&cfg, "output", &str_val); + FILE *out_bin = openFile(str_val, ".bin", "w"); + FILE *out_txt = openFile(str_val, ".txt", "w"); + FILE *out_pbm = openFile(str_val, ".pbm", "w"); + + char output[131072]; + for(i = 8; (c = fgetc(in_bin)) != EOF; i++) { + output[i] = (unsigned char)c; + } + /* Set original length of firmware in little endian format ------------------- */ + unsigned int length = i - 8; + memcpy(output + 4, (const void *)&length, 4); + fprintf(out_txt, "Length: %u = 0x%08x\n", length, length); + + /* Fill additional flash with zeros for initialisation */ + for(; i < 0x1F000; i++) { + output[i] = 0x00; + } + + /* Example: Write an CoRE-Link-Answer for CoAP -------------------------------- */ + char *buffer = ";rt=\"dev.info\";if=\"core.rp\"," + ";rt=\"dev.info\";if=\"core.rp\"," + ";rt=\"dev.info\";if=\"core.rp\""; + memcpy(output + RES_D_CORE, buffer, LEN_D_CORE); + + /* Contiki configuration ------------------------------------------------------ */ + output[RES_CONFIG + 0] = 0x22; + output[RES_CONFIG + 1] = 0x13; + output[RES_CONFIG + 2] = 1; + output[RES_CONFIG + 3] = 0; + + setting = config_lookup(&cfg, "eui"); + for(i = 0; i < 8; i++) { + output[RES_CONFIG + 8 + i] = config_setting_get_int_elem(setting, 7 - i); + } + fprintf(out_txt, + "EUI: %02x-%02x-%02x-%02x-%02x-%02x-%02x-%02x\n", + (uint8_t)output[RES_CONFIG + 15], + (uint8_t)output[RES_CONFIG + 14], + (uint8_t)output[RES_CONFIG + 13], + (uint8_t)output[RES_CONFIG + 12], + (uint8_t)output[RES_CONFIG + 11], + (uint8_t)output[RES_CONFIG + 10], + (uint8_t)output[RES_CONFIG + 9], + (uint8_t)output[RES_CONFIG + 8] + ); + + output[RES_CONFIG + 16] = 15; + output[RES_CONFIG + 17] = 17; + output[RES_CONFIG + 18] = 0; + output[RES_CONFIG + 19] = 0; + output[RES_CONFIG + 20] = 5; + output[RES_CONFIG + 21] = 0; + output[RES_CONFIG + 22] = 0; + output[RES_CONFIG + 23] = 0; + + /* Example: Set UUID ---------------------------------------------------------- */ + config_lookup_string(&cfg, "uuid", &str_val); + memcpy(qrdata, str_val, 36); + unsigned char uuid_bin[16]; + uuid_parse(str_val, uuid_bin); + for(i = 0; i < 16; i++) { + output[RES_UUID + i] = uuid_bin[i]; + } + fprintf(out_txt, "UUID: %s\n", str_val); + + /* Example: Set PSK ----------------------------------------------------------- */ + config_lookup_string(&cfg, "psk", &str_val); + memcpy(qrdata + 37, str_val, 16); + for(i = 0; i < 16; i++) { + output[RES_PSK + i] = str_val[i]; + } + fprintf(out_txt, "PSK: %.*s\n", 16, str_val); + memcpy(output + RES_ANSCHARS, anschars, LEN_ANSCHARS); + + /* Example: ECC base point and order for secp256r1 ---------------------------- */ + uint32_t *base_x = (uint32_t *)(output + RES_ECC_BASE_X); + base_x[0] = 0xd898c296; + base_x[1] = 0xf4a13945; + base_x[2] = 0x2deb33a0; + base_x[3] = 0x77037d81; + base_x[4] = 0x63a440f2; + base_x[5] = 0xf8bce6e5; + base_x[6] = 0xe12c4247; + base_x[7] = 0x6b17d1f2; + + uint32_t *base_y = (uint32_t *)(output + RES_ECC_BASE_Y); + base_y[0] = 0x37bf51f5; + base_y[1] = 0xcbb64068; + base_y[2] = 0x6b315ece; + base_y[3] = 0x2bce3357; + base_y[4] = 0x7c0f9e16; + base_y[5] = 0x8ee7eb4a; + base_y[6] = 0xfe1a7f9b; + base_y[7] = 0x4fe342e2; + + uint32_t *order = (uint32_t *)(output + RES_ECC_ORDER); + order[0] = 0xFC632551; + order[1] = 0xF3B9CAC2; + order[2] = 0xA7179E84; + order[3] = 0xBCE6FAAD; + order[4] = 0xFFFFFFFF; + order[5] = 0xFFFFFFFF; + order[6] = 0x00000000; + order[7] = 0xFFFFFFFF; + + /* Example: Set name ---------------------------------------------------------- */ + config_lookup_string(&cfg, "name", &str_val); + snprintf(output + RES_NAME, LEN_NAME, "%s", str_val); + fprintf(out_txt, "Name: %s\n", str_val); + + /* Example: Set model---------------------------------------------------------- */ + config_lookup_string(&cfg, "model", &str_val); + snprintf(output + RES_MODEL, LEN_MODEL, "%s", str_val); + fprintf(out_txt, "Model: %s\n", str_val); + + /* Example: Set time ---------------------------------------------------------- */ + time_t my_time = time(NULL); + memcpy(output + RES_FLASHTIME, (void *)&my_time, LEN_FLASHTIME); + struct tm *timeinfo = localtime(&my_time); + fwrite(buf, 1, strftime((char *)buf, 64, "Created on %d.%m.%Y um %H:%M:%S", timeinfo), out_txt); + + /* Output result -------------------------------------------------------------- */ + for(i = 4; i < 0x1F000; i++) { + fputc(output[i], out_bin); + } + + /* Generate QR-Code ----------------------------------------------------------- */ + QRcode *code = QRcode_encodeString8bit(qrdata, 3, QR_ECLEVEL_L); + writeImg(out_pbm, code->data, code->width); + + fclose(in_bin); + fclose(out_bin); + fclose(out_txt); + fclose(out_pbm); + + fprintf(stdout, "DONE\n"); + } + + exit(EXIT_SUCCESS); +} +/* ---------------------------------------------------------------------------- */ + +FILE * +openFile(const char *name, const char *appendix, const char *mode) +{ + char filename[64]; + sprintf(filename, "%s%s", name, appendix); + FILE *file = fopen(filename, mode); + if(file == NULL) { + perror("Wasn't able to open file."); + exit(EXIT_FAILURE); + } + return file; +} +void +writeStandardConfig() +{ + unsigned int i; + + config_t cfg; + config_init(&cfg); + config_setting_t *setting; + + config_setting_t *root = config_root_setting(&cfg); + + setting = config_setting_add(root, "input", CONFIG_TYPE_STRING); + config_setting_set_string(setting, "dff_econotag"); + + setting = config_setting_add(root, "output", CONFIG_TYPE_STRING); + config_setting_set_string(setting, "dff_e_econotag"); + + uint8_t eui[8] = { 0x02, 0x00, 0x00, 0x00, 0x12, 0x34, 0x56, 0x78 }; + config_setting_t *array = config_setting_add(root, "eui", CONFIG_TYPE_ARRAY); + for(i = 0; i < 8; ++i) { + setting = config_setting_add(array, NULL, CONFIG_TYPE_INT); + config_setting_set_format(setting, CONFIG_FORMAT_HEX); + config_setting_set_int(setting, eui[i]); + } + + unsigned char uuid_bin[16]; + uuid_generate(uuid_bin); + char uuid[37]; + uuid_unparse(uuid_bin, uuid); + setting = config_setting_add(root, "uuid", CONFIG_TYPE_STRING); + config_setting_set_string(setting, uuid); + + char psk[17]; + psk[16] = '\0'; + FILE *fd = fopen("/dev/urandom", "r"); + if(fd == NULL) { + perror("Wasn't able to open /dev/urandom: "); + return; + } + for(i = 0; i < 16; i++) { + int c; + while((c = fgetc(fd)) == EOF) ; + psk[i] = anschars[c % 64]; + } + if(fclose(fd) == -1) { + perror("Wasn't able to close /dev/urandom: "); + } + setting = config_setting_add(root, "psk", CONFIG_TYPE_STRING); + config_setting_set_string(setting, psk); + + setting = config_setting_add(root, "name", CONFIG_TYPE_STRING); + config_setting_set_string(setting, "Blaster Standard Device"); + + setting = config_setting_add(root, "model", CONFIG_TYPE_STRING); + config_setting_set_string(setting, "Model 1234 for testing purposes only"); + + config_write_file(&cfg, "config.cfg"); +} +void +writeImg(FILE *file, unsigned char *data, int width) +{ + unsigned int buf[width]; + + fprintf(file, "P4\n# %s\n%3u %3u\n", "QR-Code", width * 32, width * 32); + + int x, y; + for(y = 0; y < width; y++) { + for(x = 0; x < width; x++) { + if(data[(y * width) + x] & 0x01) { + buf[x] = 0xFFFFFFFF; + } else { + buf[x] = 0x00000000; + } + } + for(x = 0; x < 32; x++) { + fwrite(buf, 4, width, file); + } + } +} diff --git a/tools/blaster/blaster.h b/tools/blaster/blaster.h new file mode 100644 index 000000000..085abf855 --- /dev/null +++ b/tools/blaster/blaster.h @@ -0,0 +1,72 @@ +/* + * Copyright (c) 2014, Lars Schmertmann . + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * + * This file is part of the Contiki operating system. + * + */ + +/* Purposes of the different flash blocks */ +/* 0x18000 - 0x18FFF : Random access block 1.1 */ +/* 0x19000 - 0x19FFF : Random access block 1.2 */ +/* 0x1A000 - 0x1AFFF : Random access block 2.1 */ +/* 0x1B000 - 0x1BFFF : Random access block 2.2 */ +/* 0x1C000 - 0x1CFFF : Stack without pop function */ +/* 0x1D000 - 0x1DFFF : Read only <- This is what blaster user */ +/* 0x1E000 - 0x1EFFF : Read only <- This is what blaster user */ +/* 0x1F000 - 0x1FFFF : System reserved */ + +#ifndef BLASTER_H_ +#define BLASTER_H_ + +#define RES_D_CORE 0x1D000 +#define LEN_D_CORE 0x6F + +#define RES_CONFIG 0x1E000 +#define LEN_CONFIG 0x12 +#define RES_UUID 0x1E020 +#define LEN_UUID 0x10 +#define RES_PSK 0x1E030 +#define LEN_PSK 0x10 +#define RES_ANSCHARS 0x1E040 +#define LEN_ANSCHARS 0x40 +#define RES_ECC_BASE_X 0x1E080 +#define LEN_ECC_BASE_X 0x20 +#define RES_ECC_BASE_Y 0x1E0A0 +#define LEN_ECC_BASE_Y 0x20 +#define RES_ECC_ORDER 0x1E0C0 +#define LEN_ECC_ORDER 0x20 +#define RES_NAME 0x1E0E0 +#define LEN_NAME 0x40 +#define RES_MODEL 0x1E120 +#define LEN_MODEL 0x40 +#define RES_FLASHTIME 0x1E160 +#define LEN_FLASHTIME 0x04 + +#endif /* BLASTER_H_ */ diff --git a/tools/cooja/apps/avrora/src/org/contikios/cooja/avrmote/AvrMoteMemory.java b/tools/cooja/apps/avrora/src/org/contikios/cooja/avrmote/AvrMoteMemory.java index 61cd12b8c..d5a2922c4 100644 --- a/tools/cooja/apps/avrora/src/org/contikios/cooja/avrmote/AvrMoteMemory.java +++ b/tools/cooja/apps/avrora/src/org/contikios/cooja/avrmote/AvrMoteMemory.java @@ -1,224 +1,224 @@ -/* - * Copyright (c) 2014, TU Braunschweig. All rights reserved. - * Copyright (c) 2009, Swedish Institute of Computer Science. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. 2. Redistributions in - * binary form must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. 3. Neither the name of the - * Institute nor the names of its contributors may be used to endorse or promote - * products derived from this software without specific prior written - * permission. - * - * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ - -package org.contikios.cooja.avrmote; - - -import org.apache.log4j.Logger; - -import avrora.arch.avr.AVRProperties; -import avrora.core.SourceMapping; -import avrora.core.SourceMapping.Location; -import avrora.sim.AtmelInterpreter; -import avrora.sim.Simulator.Watch; -import avrora.sim.State; -import java.nio.ByteOrder; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.Map; -import org.contikios.cooja.mote.memory.MemoryInterface; -import org.contikios.cooja.mote.memory.MemoryInterface.SegmentMonitor.EventType; -import org.contikios.cooja.mote.memory.MemoryLayout; -/** - * @author Joakim Eriksson, Fredrik Osterlind, David Kopf, Enrico Jorns - */ -public class AvrMoteMemory implements MemoryInterface { - private static Logger logger = Logger.getLogger(AvrMoteMemory.class); - private static final boolean DEBUG = logger.isDebugEnabled(); - - private final SourceMapping memoryMap; - private final AVRProperties avrProperties; - private final AtmelInterpreter interpreter; - private final ArrayList memoryMonitors = new ArrayList<>(); - private final MemoryLayout memLayout = new MemoryLayout(ByteOrder.LITTLE_ENDIAN, MemoryLayout.ARCH_8BIT, 2); - - private boolean coojaIsAccessingMemory; - - public AvrMoteMemory(SourceMapping map, AVRProperties avrProperties, AtmelInterpreter interpreter) { - memoryMap = map; - this.interpreter = interpreter; - this.avrProperties = avrProperties; - } - - @Override - public int getTotalSize() { - return avrProperties.sram_size; - } - - @Override - public byte[] getMemory() throws MoteMemoryException { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - - @Override - public byte[] getMemorySegment(long address, int size) throws MoteMemoryException { - /*logger.info("getMemorySegment(" + String.format("0x%04x", address) + - ", " + size + ")");*/ - if (!accessInRange(address, size)) { - throw new MoteMemoryException( - "Getting memory segment [0x%x,0x%x] failed: Out of range", - address, address + size - 1); - } - - /* XXX Unsure whether this is the appropriate method to use, as it - * triggers memoryRead monitor. Right now I'm using a flag to indicate - * that Cooja (as opposed to Contiki) read the memory, to avoid infinite - * recursion. */ - coojaIsAccessingMemory = true; - byte[] data = new byte[(int) size]; - for (int i = 0; i < size; i++) { - data[i] = (byte) (interpreter.getDataByte((int) address + i) & 0xff); - } - coojaIsAccessingMemory = false; - return data; - } - - @Override - public void setMemorySegment(long address, byte[] data) throws MoteMemoryException { - if (!accessInRange(address, data.length)) { - throw new MoteMemoryException( - "Writing memory segment [0x%x,0x%x] failed: Out of range", - address, address + data.length - 1); - } - - /* XXX See comment in getMemorySegment. */ - coojaIsAccessingMemory = true; - for (int i = 0; i < data.length; i++) { - interpreter.writeDataByte((int) address + i, data[i]); - } - coojaIsAccessingMemory = false; - if (DEBUG) { - logger.debug(String.format( - "Wrote memory segment [0x%x,0x%x]", - address, address + data.length - 1)); - } - } - - @Override - public void clearMemory() { - setMemorySegment(0L, new byte[avrProperties.sram_size]); - } - - private boolean accessInRange(long address, int size) { - return (address >= 0) && (address + size <= avrProperties.sram_size); - } - - @Override - public long getStartAddr() { - return 0;// XXX - } - - @Override - public Map getSymbolMap() { - // XXX do not fetch in function! - Map symbols = new HashMap<>(); - for (Iterator iter = memoryMap.getIterator(); iter.hasNext();) { - Location loc = iter.next(); - if (loc == null || (loc.section.equals(".text"))) { - continue; - } - symbols.put(loc.name, new Symbol(Symbol.Type.VARIABLE, loc.name, loc.section, loc.vma_addr & 0x7fffff, -1)); - } - return symbols; - } - - - @Override - public MemoryLayout getLayout() { - return memLayout; - } - - class AvrByteMonitor extends Watch.Empty { - - /** start address to monitor */ - final long address; - /** size to monitor */ - final int size; - /** Segment monitor to notify */ - final SegmentMonitor mm; - /** MonitorType we are listening to */ - final EventType flag; - - public AvrByteMonitor(long address, int size, SegmentMonitor mm, EventType flag) { - this.address = address; - this.size = size; - this.mm = mm; - this.flag = flag; - } - - @Override - public void fireAfterRead(State state, int data_addr, byte value) { - if (flag == EventType.WRITE || coojaIsAccessingMemory) { - return; - } - mm.memoryChanged(AvrMoteMemory.this, EventType.READ, data_addr); - } - - @Override - public void fireAfterWrite(State state, int data_addr, byte value) { - if (flag == EventType.READ || coojaIsAccessingMemory) { - return; - } - mm.memoryChanged(AvrMoteMemory.this, EventType.WRITE, data_addr); - } - } - - @Override - public boolean addSegmentMonitor(EventType flag, long address, int size, SegmentMonitor mm) { - AvrByteMonitor mon = new AvrByteMonitor(address, size, mm, flag); - - memoryMonitors.add(mon); - /* logger.debug("Added AvrByteMonitor " + Integer.toString(mon.hashCode()) + " for addr " + mon.address + " size " + mon.size + " with watch" + mon.watch); */ - - /* Add byte monitor (watch) for every byte in range */ - for (int idx = 0; idx < mon.size; idx++) { - interpreter.getSimulator().insertWatch(mon, (int) mon.address + idx); - /* logger.debug("Inserted watch " + Integer.toString(mon.watch.hashCode()) + " for " + (mon.address + idx)); */ - } - return true; - } - - @Override - public boolean removeSegmentMonitor(long address, int size, SegmentMonitor mm) { - for (AvrByteMonitor mcm : memoryMonitors) { - if (mcm.mm != mm || mcm.address != address || mcm.size != size) { - continue; - } - for (int idx = 0; idx < mcm.size; idx++) { - interpreter.getSimulator().removeWatch(mcm, (int) mcm.address + idx); - /* logger.debug("Removed watch " + Integer.toString(mcm.watch.hashCode()) + " for " + (mcm.address + idx)); */ - } - memoryMonitors.remove(mcm); - return true; - } - return false; - } - -} +/* + * Copyright (c) 2014, TU Braunschweig. All rights reserved. + * Copyright (c) 2009, Swedish Institute of Computer Science. All rights + * reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. 2. Redistributions in + * binary form must reproduce the above copyright notice, this list of + * conditions and the following disclaimer in the documentation and/or other + * materials provided with the distribution. 3. Neither the name of the + * Institute nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written + * permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +package org.contikios.cooja.avrmote; + + +import org.apache.log4j.Logger; + +import avrora.arch.avr.AVRProperties; +import avrora.core.SourceMapping; +import avrora.core.SourceMapping.Location; +import avrora.sim.AtmelInterpreter; +import avrora.sim.Simulator.Watch; +import avrora.sim.State; +import java.nio.ByteOrder; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; +import org.contikios.cooja.mote.memory.MemoryInterface; +import org.contikios.cooja.mote.memory.MemoryInterface.SegmentMonitor.EventType; +import org.contikios.cooja.mote.memory.MemoryLayout; +/** + * @author Joakim Eriksson, Fredrik Osterlind, David Kopf, Enrico Jorns + */ +public class AvrMoteMemory implements MemoryInterface { + private static Logger logger = Logger.getLogger(AvrMoteMemory.class); + private static final boolean DEBUG = logger.isDebugEnabled(); + + private final SourceMapping memoryMap; + private final AVRProperties avrProperties; + private final AtmelInterpreter interpreter; + private final ArrayList memoryMonitors = new ArrayList<>(); + private final MemoryLayout memLayout = new MemoryLayout(ByteOrder.LITTLE_ENDIAN, MemoryLayout.ARCH_8BIT, 2); + + private boolean coojaIsAccessingMemory; + + public AvrMoteMemory(SourceMapping map, AVRProperties avrProperties, AtmelInterpreter interpreter) { + memoryMap = map; + this.interpreter = interpreter; + this.avrProperties = avrProperties; + } + + @Override + public int getTotalSize() { + return avrProperties.sram_size; + } + + @Override + public byte[] getMemory() throws MoteMemoryException { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + + @Override + public byte[] getMemorySegment(long address, int size) throws MoteMemoryException { + /*logger.info("getMemorySegment(" + String.format("0x%04x", address) + + ", " + size + ")");*/ + if (!accessInRange(address, size)) { + throw new MoteMemoryException( + "Getting memory segment [0x%x,0x%x] failed: Out of range", + address, address + size - 1); + } + + /* XXX Unsure whether this is the appropriate method to use, as it + * triggers memoryRead monitor. Right now I'm using a flag to indicate + * that Cooja (as opposed to Contiki) read the memory, to avoid infinite + * recursion. */ + coojaIsAccessingMemory = true; + byte[] data = new byte[(int) size]; + for (int i = 0; i < size; i++) { + data[i] = (byte) (interpreter.getDataByte((int) address + i) & 0xff); + } + coojaIsAccessingMemory = false; + return data; + } + + @Override + public void setMemorySegment(long address, byte[] data) throws MoteMemoryException { + if (!accessInRange(address, data.length)) { + throw new MoteMemoryException( + "Writing memory segment [0x%x,0x%x] failed: Out of range", + address, address + data.length - 1); + } + + /* XXX See comment in getMemorySegment. */ + coojaIsAccessingMemory = true; + for (int i = 0; i < data.length; i++) { + interpreter.writeDataByte((int) address + i, data[i]); + } + coojaIsAccessingMemory = false; + if (DEBUG) { + logger.debug(String.format( + "Wrote memory segment [0x%x,0x%x]", + address, address + data.length - 1)); + } + } + + @Override + public void clearMemory() { + setMemorySegment(0L, new byte[avrProperties.sram_size]); + } + + private boolean accessInRange(long address, int size) { + return (address >= 0) && (address + size <= avrProperties.sram_size); + } + + @Override + public long getStartAddr() { + return 0;// XXX + } + + @Override + public Map getSymbolMap() { + // XXX do not fetch in function! + Map symbols = new HashMap<>(); + for (Iterator iter = memoryMap.getIterator(); iter.hasNext();) { + Location loc = iter.next(); + if (loc == null || (loc.section.equals(".text"))) { + continue; + } + symbols.put(loc.name, new Symbol(Symbol.Type.VARIABLE, loc.name, loc.section, loc.vma_addr & 0x7fffff, -1)); + } + return symbols; + } + + + @Override + public MemoryLayout getLayout() { + return memLayout; + } + + class AvrByteMonitor extends Watch.Empty { + + /** start address to monitor */ + final long address; + /** size to monitor */ + final int size; + /** Segment monitor to notify */ + final SegmentMonitor mm; + /** MonitorType we are listening to */ + final EventType flag; + + public AvrByteMonitor(long address, int size, SegmentMonitor mm, EventType flag) { + this.address = address; + this.size = size; + this.mm = mm; + this.flag = flag; + } + + @Override + public void fireAfterRead(State state, int data_addr, byte value) { + if (flag == EventType.WRITE || coojaIsAccessingMemory) { + return; + } + mm.memoryChanged(AvrMoteMemory.this, EventType.READ, data_addr); + } + + @Override + public void fireAfterWrite(State state, int data_addr, byte value) { + if (flag == EventType.READ || coojaIsAccessingMemory) { + return; + } + mm.memoryChanged(AvrMoteMemory.this, EventType.WRITE, data_addr); + } + } + + @Override + public boolean addSegmentMonitor(EventType flag, long address, int size, SegmentMonitor mm) { + AvrByteMonitor mon = new AvrByteMonitor(address, size, mm, flag); + + memoryMonitors.add(mon); + /* logger.debug("Added AvrByteMonitor " + Integer.toString(mon.hashCode()) + " for addr " + mon.address + " size " + mon.size + " with watch" + mon.watch); */ + + /* Add byte monitor (watch) for every byte in range */ + for (int idx = 0; idx < mon.size; idx++) { + interpreter.getSimulator().insertWatch(mon, (int) mon.address + idx); + /* logger.debug("Inserted watch " + Integer.toString(mon.watch.hashCode()) + " for " + (mon.address + idx)); */ + } + return true; + } + + @Override + public boolean removeSegmentMonitor(long address, int size, SegmentMonitor mm) { + for (AvrByteMonitor mcm : memoryMonitors) { + if (mcm.mm != mm || mcm.address != address || mcm.size != size) { + continue; + } + for (int idx = 0; idx < mcm.size; idx++) { + interpreter.getSimulator().removeWatch(mcm, (int) mcm.address + idx); + /* logger.debug("Removed watch " + Integer.toString(mcm.watch.hashCode()) + " for " + (mcm.address + idx)); */ + } + memoryMonitors.remove(mcm); + return true; + } + return false; + } + +} diff --git a/tools/cooja/apps/mspsim/README.md b/tools/cooja/apps/mspsim/README.md index 11eb149d3..62c7f44fc 100644 --- a/tools/cooja/apps/mspsim/README.md +++ b/tools/cooja/apps/mspsim/README.md @@ -1,7 +1,7 @@ -MSPSim support for the COOJA Simulator --------------------------------------- - -MSPSim source code access: Standalone MSPSim is available from -[http://sourceforge.net/projects/mspsim](http://sourceforge.net/projects/mspsim). - --- Fredrik Österlind, 18/3 2008 +MSPSim support for the COOJA Simulator +-------------------------------------- + +MSPSim source code access: Standalone MSPSim is available from +[http://sourceforge.net/projects/mspsim](http://sourceforge.net/projects/mspsim). + +-- Fredrik Österlind, 18/3 2008 diff --git a/tools/cooja/apps/mspsim/src/org/contikios/cooja/mspmote/interfaces/CC1101Radio.java b/tools/cooja/apps/mspsim/src/org/contikios/cooja/mspmote/interfaces/CC1101Radio.java index cedf0435c..5b9367d7a 100644 --- a/tools/cooja/apps/mspsim/src/org/contikios/cooja/mspmote/interfaces/CC1101Radio.java +++ b/tools/cooja/apps/mspsim/src/org/contikios/cooja/mspmote/interfaces/CC1101Radio.java @@ -1,422 +1,422 @@ -/* - * Copyright (c) 2012, Thingsquare. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the Institute nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - */ - -package org.contikios.cooja.mspmote.interfaces; - -import java.util.Collection; - -import org.apache.log4j.Logger; -import org.jdom.Element; - -import org.contikios.cooja.ClassDescription; -import org.contikios.cooja.Mote; -import org.contikios.cooja.RadioPacket; -import org.contikios.cooja.Simulation; -import org.contikios.cooja.interfaces.CustomDataRadio; -import org.contikios.cooja.interfaces.Position; -import org.contikios.cooja.interfaces.Radio; -import org.contikios.cooja.mspmote.MspMote; -import org.contikios.cooja.mspmote.MspMoteTimeEvent; -import se.sics.mspsim.chip.CC1101; -import se.sics.mspsim.chip.CC1101.ReceiverListener; -import se.sics.mspsim.chip.ChannelListener; -import se.sics.mspsim.chip.RFListener; -import se.sics.mspsim.chip.Radio802154; - -/** - * @author Fredrik Osterlind - */ -@ClassDescription("TI CC1101") -public class CC1101Radio extends Radio implements CustomDataRadio { - private static Logger logger = Logger.getLogger(CC1101Radio.class); - - /** - * Cross-level: - * Inter-byte delay for delivering cross-level packet bytes. - */ - public static final long DELAY_BETWEEN_BYTES = - (long) (1000.0*Simulation.MILLISECOND/(250000.0/8.0)); /* us. Corresponds to 250kbit/s */ - - private RadioEvent lastEvent = RadioEvent.UNKNOWN; - - private final MspMote mote; - private final CC1101 cc1101; - - private boolean isInterfered = false; - private boolean isTransmitting = false; - private boolean isReceiving = false; - - private byte lastOutgoingByte; - private byte lastIncomingByte; - - private RadioPacket lastOutgoingPacket = null; - private RadioPacket lastIncomingPacket = null; - - public CC1101Radio(Mote m) { - this.mote = (MspMote)m; - Radio802154 r = this.mote.getCPU().getChip(Radio802154.class); - if (r == null || !(r instanceof CC1101)) { - throw new IllegalStateException("Mote is not equipped with an CC1101 radio"); - } - this.cc1101 = (CC1101) r; - - cc1101.addRFListener(new RFListener() { - int len = 0; - int expLen = 0; - byte[] buffer = new byte[256 + 15]; - private boolean gotSynchbyte = false; - public void receivedByte(byte data) { - if (!isTransmitting()) { - /* Start transmission */ - lastEvent = RadioEvent.TRANSMISSION_STARTED; - isTransmitting = true; - len = 0; - gotSynchbyte = false; - /*logger.debug("----- CC1101 TRANSMISSION STARTED -----");*/ - setChanged(); - notifyObservers(); - } - if (len >= buffer.length) { - /* Bad size packet, too large */ - logger.debug("Error: bad size: " + len + ", dropping outgoing byte: " + data); - return; - } - - /* send this byte to all nodes */ - lastOutgoingByte = data; - lastEvent = RadioEvent.CUSTOM_DATA_TRANSMITTED; - setChanged(); - notifyObservers(); - - /* Await synch byte */ - if (!gotSynchbyte) { - if (lastOutgoingByte == CC1101.SYNCH_BYTE_LAST) { - gotSynchbyte = true; - } - return; - } - - final int HEADERLEN = 1; /* 1x Length byte */ - final int FOOTERLEN = 2; /* TODO Fix CRC in Mspsim's CC1101.java */ - if (len == 0) { - expLen = (0xff&data) + HEADERLEN + FOOTERLEN; - } - buffer[len++] = data; - - if (len == expLen) { - /*logger.debug("----- CC1101 CUSTOM DATA TRANSMITTED -----");*/ - - final byte[] buf = new byte[expLen]; - System.arraycopy(buffer, 0, buf, 0, expLen); - lastOutgoingPacket = new RadioPacket() { - public byte[] getPacketData() { - return buf; - } - }; - - lastEvent = RadioEvent.PACKET_TRANSMITTED; - /*logger.debug("----- CC1101 PACKET TRANSMITTED -----");*/ - setChanged(); - notifyObservers(); - - /*logger.debug("----- CC1101 TRANSMISSION FINISHED -----");*/ - isTransmitting = false; - lastEvent = RadioEvent.TRANSMISSION_FINISHED; - setChanged(); - notifyObservers(); - len = 0; - } - } - }); - - cc1101.setReceiverListener(new ReceiverListener() { - public void newState(boolean on) { - if (cc1101.isReadyToReceive()) { - lastEvent = RadioEvent.HW_ON; - setChanged(); - notifyObservers(); - } else { - radioOff(); - } - } - }); - - cc1101.addChannelListener(new ChannelListener() { - public void channelChanged(int channel) { - /* XXX Currently assumes zero channel switch time */ - lastEvent = RadioEvent.UNKNOWN; - setChanged(); - notifyObservers(); - } - }); - } - - private void radioOff() { - /* Radio was turned off during transmission. - * May for example happen if watchdog triggers */ - if (isTransmitting()) { - logger.warn("Turning off radio while transmitting, ending packet prematurely"); - - /* Simulate end of packet */ - lastOutgoingPacket = new RadioPacket() { - public byte[] getPacketData() { - return new byte[0]; - } - }; - - lastEvent = RadioEvent.PACKET_TRANSMITTED; - /*logger.debug("----- CC1101 PACKET TRANSMITTED -----");*/ - setChanged(); - notifyObservers(); - - /* Register that transmission ended in radio medium */ - /*logger.debug("----- CC1101 TRANSMISSION FINISHED -----");*/ - isTransmitting = false; - lastEvent = RadioEvent.TRANSMISSION_FINISHED; - setChanged(); - notifyObservers(); - } - - lastEvent = RadioEvent.HW_OFF; - setChanged(); - notifyObservers(); - } - - /* Packet radio support */ - public RadioPacket getLastPacketTransmitted() { - return lastOutgoingPacket; - } - - public RadioPacket getLastPacketReceived() { - return lastIncomingPacket; - } - - public void setReceivedPacket(RadioPacket packet) { - lastIncomingPacket = packet; - - /* TODO XXX Need support in CC1101.java */ - /*if (!radio.isReadyToReceive()) { - logger.warn("Radio receiver not ready, dropping packet data"); - return; - }*/ - - /* Delivering packet bytes with delays */ - byte[] packetData = packet.getPacketData(); - long deliveryTime = getMote().getSimulation().getSimulationTime(); - for (byte b: packetData) { - if (isInterfered()) { - b = (byte) 0xFF; - } - - final byte byteToDeliver = b; - getMote().getSimulation().scheduleEvent(new MspMoteTimeEvent(mote, 0) { - public void execute(long t) { - super.execute(t); - cc1101.receivedByte(byteToDeliver); - mote.requestImmediateWakeup(); - } - }, deliveryTime); - deliveryTime += DELAY_BETWEEN_BYTES; - } - } - - /* Custom data radio support */ - public Object getLastCustomDataTransmitted() { - return lastOutgoingByte; - } - - public Object getLastCustomDataReceived() { - return lastIncomingByte; - } - - public void receiveCustomData(Object data) { - if (!(data instanceof Byte)) { - logger.fatal("Bad custom data: " + data); - return; - } - lastIncomingByte = (Byte) data; - - final byte inputByte; - if (isInterfered()) { - inputByte = (byte)0xFF; - } else { - inputByte = lastIncomingByte; - } - mote.getSimulation().scheduleEvent(new MspMoteTimeEvent(mote, 0) { - public void execute(long t) { - super.execute(t); - cc1101.receivedByte(inputByte); - mote.requestImmediateWakeup(); - } - }, mote.getSimulation().getSimulationTime()); - - } - - /* General radio support */ - public boolean isTransmitting() { - return isTransmitting; - } - - public boolean isReceiving() { - return isReceiving; - } - - public boolean isInterfered() { - return isInterfered; - } - - public int getChannel() { - return cc1101.getActiveChannel(); - } - - public int getFrequency() { - return cc1101.getActiveFrequency(); - } - - public void signalReceptionStart() { - isReceiving = true; - - lastEvent = RadioEvent.RECEPTION_STARTED; - /*logger.debug("----- CC1101 RECEPTION STARTED -----");*/ - setChanged(); - notifyObservers(); - } - - public void signalReceptionEnd() { - /* Deliver packet data */ - isReceiving = false; - isInterfered = false; - - lastEvent = RadioEvent.RECEPTION_FINISHED; - /*logger.debug("----- CC1101 RECEPTION FINISHED -----");*/ - setChanged(); - notifyObservers(); - } - - public RadioEvent getLastEvent() { - return lastEvent; - } - - public void interfereAnyReception() { - isInterfered = true; - isReceiving = false; - lastIncomingPacket = null; - - lastEvent = RadioEvent.RECEPTION_INTERFERED; - /*logger.debug("----- CC1101 RECEPTION INTERFERED -----");*/ - setChanged(); - notifyObservers(); - } - - public double getCurrentOutputPower() { - /* TODO XXX Need support in CC1101.java */ - return 1; - } - public int getCurrentOutputPowerIndicator() { - /* TODO XXX Need support in CC1101.java */ - return 10; - } - public int getOutputPowerIndicatorMax() { - /* TODO XXX Need support in CC1101.java */ - return 10; - } - - - /** - * Last 8 received signal strengths - */ - double currentSignalStrength = 0; - private double[] rssiLast = new double[8]; - private int rssiLastCounter = 0; - - public double getCurrentSignalStrength() { - return currentSignalStrength; - } - - public void setCurrentSignalStrength(final double signalStrength) { - if (signalStrength == currentSignalStrength) { - return; /* ignored */ - } - currentSignalStrength = signalStrength; - if (rssiLastCounter == 0) { - getMote().getSimulation().scheduleEvent(new MspMoteTimeEvent(mote, 0) { - public void execute(long t) { - super.execute(t); - - /* Update average */ - System.arraycopy(rssiLast, 1, rssiLast, 0, 7); - rssiLast[7] = currentSignalStrength; - double avg = 0; - for (double v: rssiLast) { - avg += v; - } - avg /= rssiLast.length; - - cc1101.setRSSI((int) avg); - - rssiLastCounter--; - if (rssiLastCounter > 0) { - mote.getSimulation().scheduleEvent(this, t+DELAY_BETWEEN_BYTES/2); - } - } - }, mote.getSimulation().getSimulationTime()); - } - rssiLastCounter = 8; - } - - public Mote getMote() { - return mote; - } - - public Position getPosition() { - return mote.getInterfaces().getPosition(); - } - - public Collection getConfigXML() { - return null; - } - - public void setConfigXML(Collection configXML, boolean visAvailable) { - } - - public boolean isRadioOn() { - return cc1101.isReadyToReceive(); - } - - public boolean canReceiveFrom(CustomDataRadio radio) { - if (radio.getClass().equals(this.getClass())) { - return true; - } - if (radio.getClass().equals(CC430Radio.class)) { - return true; - } - return false; - } -} +/* + * Copyright (c) 2012, Thingsquare. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + */ + +package org.contikios.cooja.mspmote.interfaces; + +import java.util.Collection; + +import org.apache.log4j.Logger; +import org.jdom.Element; + +import org.contikios.cooja.ClassDescription; +import org.contikios.cooja.Mote; +import org.contikios.cooja.RadioPacket; +import org.contikios.cooja.Simulation; +import org.contikios.cooja.interfaces.CustomDataRadio; +import org.contikios.cooja.interfaces.Position; +import org.contikios.cooja.interfaces.Radio; +import org.contikios.cooja.mspmote.MspMote; +import org.contikios.cooja.mspmote.MspMoteTimeEvent; +import se.sics.mspsim.chip.CC1101; +import se.sics.mspsim.chip.CC1101.ReceiverListener; +import se.sics.mspsim.chip.ChannelListener; +import se.sics.mspsim.chip.RFListener; +import se.sics.mspsim.chip.Radio802154; + +/** + * @author Fredrik Osterlind + */ +@ClassDescription("TI CC1101") +public class CC1101Radio extends Radio implements CustomDataRadio { + private static Logger logger = Logger.getLogger(CC1101Radio.class); + + /** + * Cross-level: + * Inter-byte delay for delivering cross-level packet bytes. + */ + public static final long DELAY_BETWEEN_BYTES = + (long) (1000.0*Simulation.MILLISECOND/(250000.0/8.0)); /* us. Corresponds to 250kbit/s */ + + private RadioEvent lastEvent = RadioEvent.UNKNOWN; + + private final MspMote mote; + private final CC1101 cc1101; + + private boolean isInterfered = false; + private boolean isTransmitting = false; + private boolean isReceiving = false; + + private byte lastOutgoingByte; + private byte lastIncomingByte; + + private RadioPacket lastOutgoingPacket = null; + private RadioPacket lastIncomingPacket = null; + + public CC1101Radio(Mote m) { + this.mote = (MspMote)m; + Radio802154 r = this.mote.getCPU().getChip(Radio802154.class); + if (r == null || !(r instanceof CC1101)) { + throw new IllegalStateException("Mote is not equipped with an CC1101 radio"); + } + this.cc1101 = (CC1101) r; + + cc1101.addRFListener(new RFListener() { + int len = 0; + int expLen = 0; + byte[] buffer = new byte[256 + 15]; + private boolean gotSynchbyte = false; + public void receivedByte(byte data) { + if (!isTransmitting()) { + /* Start transmission */ + lastEvent = RadioEvent.TRANSMISSION_STARTED; + isTransmitting = true; + len = 0; + gotSynchbyte = false; + /*logger.debug("----- CC1101 TRANSMISSION STARTED -----");*/ + setChanged(); + notifyObservers(); + } + if (len >= buffer.length) { + /* Bad size packet, too large */ + logger.debug("Error: bad size: " + len + ", dropping outgoing byte: " + data); + return; + } + + /* send this byte to all nodes */ + lastOutgoingByte = data; + lastEvent = RadioEvent.CUSTOM_DATA_TRANSMITTED; + setChanged(); + notifyObservers(); + + /* Await synch byte */ + if (!gotSynchbyte) { + if (lastOutgoingByte == CC1101.SYNCH_BYTE_LAST) { + gotSynchbyte = true; + } + return; + } + + final int HEADERLEN = 1; /* 1x Length byte */ + final int FOOTERLEN = 2; /* TODO Fix CRC in Mspsim's CC1101.java */ + if (len == 0) { + expLen = (0xff&data) + HEADERLEN + FOOTERLEN; + } + buffer[len++] = data; + + if (len == expLen) { + /*logger.debug("----- CC1101 CUSTOM DATA TRANSMITTED -----");*/ + + final byte[] buf = new byte[expLen]; + System.arraycopy(buffer, 0, buf, 0, expLen); + lastOutgoingPacket = new RadioPacket() { + public byte[] getPacketData() { + return buf; + } + }; + + lastEvent = RadioEvent.PACKET_TRANSMITTED; + /*logger.debug("----- CC1101 PACKET TRANSMITTED -----");*/ + setChanged(); + notifyObservers(); + + /*logger.debug("----- CC1101 TRANSMISSION FINISHED -----");*/ + isTransmitting = false; + lastEvent = RadioEvent.TRANSMISSION_FINISHED; + setChanged(); + notifyObservers(); + len = 0; + } + } + }); + + cc1101.setReceiverListener(new ReceiverListener() { + public void newState(boolean on) { + if (cc1101.isReadyToReceive()) { + lastEvent = RadioEvent.HW_ON; + setChanged(); + notifyObservers(); + } else { + radioOff(); + } + } + }); + + cc1101.addChannelListener(new ChannelListener() { + public void channelChanged(int channel) { + /* XXX Currently assumes zero channel switch time */ + lastEvent = RadioEvent.UNKNOWN; + setChanged(); + notifyObservers(); + } + }); + } + + private void radioOff() { + /* Radio was turned off during transmission. + * May for example happen if watchdog triggers */ + if (isTransmitting()) { + logger.warn("Turning off radio while transmitting, ending packet prematurely"); + + /* Simulate end of packet */ + lastOutgoingPacket = new RadioPacket() { + public byte[] getPacketData() { + return new byte[0]; + } + }; + + lastEvent = RadioEvent.PACKET_TRANSMITTED; + /*logger.debug("----- CC1101 PACKET TRANSMITTED -----");*/ + setChanged(); + notifyObservers(); + + /* Register that transmission ended in radio medium */ + /*logger.debug("----- CC1101 TRANSMISSION FINISHED -----");*/ + isTransmitting = false; + lastEvent = RadioEvent.TRANSMISSION_FINISHED; + setChanged(); + notifyObservers(); + } + + lastEvent = RadioEvent.HW_OFF; + setChanged(); + notifyObservers(); + } + + /* Packet radio support */ + public RadioPacket getLastPacketTransmitted() { + return lastOutgoingPacket; + } + + public RadioPacket getLastPacketReceived() { + return lastIncomingPacket; + } + + public void setReceivedPacket(RadioPacket packet) { + lastIncomingPacket = packet; + + /* TODO XXX Need support in CC1101.java */ + /*if (!radio.isReadyToReceive()) { + logger.warn("Radio receiver not ready, dropping packet data"); + return; + }*/ + + /* Delivering packet bytes with delays */ + byte[] packetData = packet.getPacketData(); + long deliveryTime = getMote().getSimulation().getSimulationTime(); + for (byte b: packetData) { + if (isInterfered()) { + b = (byte) 0xFF; + } + + final byte byteToDeliver = b; + getMote().getSimulation().scheduleEvent(new MspMoteTimeEvent(mote, 0) { + public void execute(long t) { + super.execute(t); + cc1101.receivedByte(byteToDeliver); + mote.requestImmediateWakeup(); + } + }, deliveryTime); + deliveryTime += DELAY_BETWEEN_BYTES; + } + } + + /* Custom data radio support */ + public Object getLastCustomDataTransmitted() { + return lastOutgoingByte; + } + + public Object getLastCustomDataReceived() { + return lastIncomingByte; + } + + public void receiveCustomData(Object data) { + if (!(data instanceof Byte)) { + logger.fatal("Bad custom data: " + data); + return; + } + lastIncomingByte = (Byte) data; + + final byte inputByte; + if (isInterfered()) { + inputByte = (byte)0xFF; + } else { + inputByte = lastIncomingByte; + } + mote.getSimulation().scheduleEvent(new MspMoteTimeEvent(mote, 0) { + public void execute(long t) { + super.execute(t); + cc1101.receivedByte(inputByte); + mote.requestImmediateWakeup(); + } + }, mote.getSimulation().getSimulationTime()); + + } + + /* General radio support */ + public boolean isTransmitting() { + return isTransmitting; + } + + public boolean isReceiving() { + return isReceiving; + } + + public boolean isInterfered() { + return isInterfered; + } + + public int getChannel() { + return cc1101.getActiveChannel(); + } + + public int getFrequency() { + return cc1101.getActiveFrequency(); + } + + public void signalReceptionStart() { + isReceiving = true; + + lastEvent = RadioEvent.RECEPTION_STARTED; + /*logger.debug("----- CC1101 RECEPTION STARTED -----");*/ + setChanged(); + notifyObservers(); + } + + public void signalReceptionEnd() { + /* Deliver packet data */ + isReceiving = false; + isInterfered = false; + + lastEvent = RadioEvent.RECEPTION_FINISHED; + /*logger.debug("----- CC1101 RECEPTION FINISHED -----");*/ + setChanged(); + notifyObservers(); + } + + public RadioEvent getLastEvent() { + return lastEvent; + } + + public void interfereAnyReception() { + isInterfered = true; + isReceiving = false; + lastIncomingPacket = null; + + lastEvent = RadioEvent.RECEPTION_INTERFERED; + /*logger.debug("----- CC1101 RECEPTION INTERFERED -----");*/ + setChanged(); + notifyObservers(); + } + + public double getCurrentOutputPower() { + /* TODO XXX Need support in CC1101.java */ + return 1; + } + public int getCurrentOutputPowerIndicator() { + /* TODO XXX Need support in CC1101.java */ + return 10; + } + public int getOutputPowerIndicatorMax() { + /* TODO XXX Need support in CC1101.java */ + return 10; + } + + + /** + * Last 8 received signal strengths + */ + double currentSignalStrength = 0; + private double[] rssiLast = new double[8]; + private int rssiLastCounter = 0; + + public double getCurrentSignalStrength() { + return currentSignalStrength; + } + + public void setCurrentSignalStrength(final double signalStrength) { + if (signalStrength == currentSignalStrength) { + return; /* ignored */ + } + currentSignalStrength = signalStrength; + if (rssiLastCounter == 0) { + getMote().getSimulation().scheduleEvent(new MspMoteTimeEvent(mote, 0) { + public void execute(long t) { + super.execute(t); + + /* Update average */ + System.arraycopy(rssiLast, 1, rssiLast, 0, 7); + rssiLast[7] = currentSignalStrength; + double avg = 0; + for (double v: rssiLast) { + avg += v; + } + avg /= rssiLast.length; + + cc1101.setRSSI((int) avg); + + rssiLastCounter--; + if (rssiLastCounter > 0) { + mote.getSimulation().scheduleEvent(this, t+DELAY_BETWEEN_BYTES/2); + } + } + }, mote.getSimulation().getSimulationTime()); + } + rssiLastCounter = 8; + } + + public Mote getMote() { + return mote; + } + + public Position getPosition() { + return mote.getInterfaces().getPosition(); + } + + public Collection getConfigXML() { + return null; + } + + public void setConfigXML(Collection configXML, boolean visAvailable) { + } + + public boolean isRadioOn() { + return cc1101.isReadyToReceive(); + } + + public boolean canReceiveFrom(CustomDataRadio radio) { + if (radio.getClass().equals(this.getClass())) { + return true; + } + if (radio.getClass().equals(CC430Radio.class)) { + return true; + } + return false; + } +} diff --git a/tools/cooja/apps/mspsim/src/org/contikios/cooja/mspmote/interfaces/CC1120Radio.java b/tools/cooja/apps/mspsim/src/org/contikios/cooja/mspmote/interfaces/CC1120Radio.java index 9d2a5e333..8e4cfc51e 100644 --- a/tools/cooja/apps/mspsim/src/org/contikios/cooja/mspmote/interfaces/CC1120Radio.java +++ b/tools/cooja/apps/mspsim/src/org/contikios/cooja/mspmote/interfaces/CC1120Radio.java @@ -1,421 +1,421 @@ -/* - * Copyright (c) 2012, Thingsquare. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the Institute nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - */ - -package org.contikios.cooja.mspmote.interfaces; - -import java.util.Collection; - -import org.apache.log4j.Logger; -import org.jdom.Element; - -import org.contikios.cooja.ClassDescription; -import org.contikios.cooja.Mote; -import org.contikios.cooja.RadioPacket; -import org.contikios.cooja.Simulation; -import org.contikios.cooja.interfaces.CustomDataRadio; -import org.contikios.cooja.interfaces.Position; -import org.contikios.cooja.interfaces.Radio; -import org.contikios.cooja.mspmote.MspMote; -import org.contikios.cooja.mspmote.MspMoteTimeEvent; -import se.sics.mspsim.chip.CC1120; -import se.sics.mspsim.chip.CC1120.ReceiverListener; -import se.sics.mspsim.chip.ChannelListener; -import se.sics.mspsim.chip.RFListener; -import se.sics.mspsim.chip.Radio802154; - -/** - * @author Fredrik Osterlind - */ -@ClassDescription("TI CC1120") -public class CC1120Radio extends Radio implements CustomDataRadio { - private static Logger logger = Logger.getLogger(CC1120Radio.class); - - /** - * Cross-level: - * Inter-byte delay for delivering cross-level packet bytes. - */ - /* TODO XXX Fix me as well as symbol duration in CC1120.java */ - public static final long DELAY_BETWEEN_BYTES = - (long) (1000.0*Simulation.MILLISECOND/(200000.0/8.0)); /* us. Corresponds to 200kbit/s */ - - private RadioEvent lastEvent = RadioEvent.UNKNOWN; - - private final MspMote mote; - private final CC1120 cc1120; - - private boolean isInterfered = false; - private boolean isTransmitting = false; - private boolean isReceiving = false; - - private byte lastOutgoingByte; - private byte lastIncomingByte; - - private RadioPacket lastOutgoingPacket = null; - private RadioPacket lastIncomingPacket = null; - - public CC1120Radio(Mote m) { - this.mote = (MspMote)m; - Radio802154 r = this.mote.getCPU().getChip(Radio802154.class); - if (r == null || !(r instanceof CC1120)) { - throw new IllegalStateException("Mote is not equipped with an CC1120 radio"); - } - this.cc1120 = (CC1120) r; - - cc1120.addRFListener(new RFListener() { - int len = 0; - int expLen = 0; - byte[] buffer = new byte[256 + 15]; - private boolean gotSynchbyte = false; - public void receivedByte(byte data) { - if (!isTransmitting()) { - /* Start transmission */ - lastEvent = RadioEvent.TRANSMISSION_STARTED; - isTransmitting = true; - len = 0; - gotSynchbyte = false; - /*logger.debug("----- CCC1120 TRANSMISSION STARTED -----");*/ - setChanged(); - notifyObservers(); - } - if (len >= buffer.length) { - /* Bad size packet, too large */ - logger.debug("Error: bad size: " + len + ", dropping outgoing byte: " + data); - return; - } - - /* send this byte to all nodes */ - lastOutgoingByte = data; - lastEvent = RadioEvent.CUSTOM_DATA_TRANSMITTED; - setChanged(); - notifyObservers(); - - /* Await synch byte */ - if (!gotSynchbyte) { - if (lastOutgoingByte == CC1120.SYNCH_BYTE_LAST) { - gotSynchbyte = true; - } - return; - } - - final int HEADERLEN = 1; /* 1x Length byte */ - final int FOOTERLEN = 2; /* TODO Fix CRC in Mspsim's CCC1120.java */ - if (len == 0) { - expLen = (0xff&data) + HEADERLEN + FOOTERLEN; - } - buffer[len++] = data; - - if (len == expLen) { - /*logger.debug("----- CCC1120 CUSTOM DATA TRANSMITTED -----");*/ - - final byte[] buf = new byte[expLen]; - System.arraycopy(buffer, 0, buf, 0, expLen); - lastOutgoingPacket = new RadioPacket() { - public byte[] getPacketData() { - return buf; - } - }; - - lastEvent = RadioEvent.PACKET_TRANSMITTED; - /*logger.debug("----- CCC1120 PACKET TRANSMITTED -----");*/ - setChanged(); - notifyObservers(); - - /*logger.debug("----- CCC1120 TRANSMISSION FINISHED -----");*/ - isTransmitting = false; - lastEvent = RadioEvent.TRANSMISSION_FINISHED; - setChanged(); - notifyObservers(); - len = 0; - } - } - }); - - cc1120.setReceiverListener(new ReceiverListener() { - public void newState(boolean on) { - if (cc1120.isReadyToReceive()) { - lastEvent = RadioEvent.HW_ON; - setChanged(); - notifyObservers(); - } else { - radioOff(); - } - } - }); - - cc1120.addChannelListener(new ChannelListener() { - public void channelChanged(int channel) { - /* XXX Currently assumes zero channel switch time */ - lastEvent = RadioEvent.UNKNOWN; - setChanged(); - notifyObservers(); - } - }); - } - - private void radioOff() { - /* Radio was turned off during transmission. - * May for example happen if watchdog triggers */ - if (isTransmitting()) { - logger.warn("Turning off radio while transmitting, ending packet prematurely"); - - /* Simulate end of packet */ - lastOutgoingPacket = new RadioPacket() { - public byte[] getPacketData() { - return new byte[0]; - } - }; - - lastEvent = RadioEvent.PACKET_TRANSMITTED; - /*logger.debug("----- CCC1120 PACKET TRANSMITTED -----");*/ - setChanged(); - notifyObservers(); - - /* Register that transmission ended in radio medium */ - /*logger.debug("----- CCC1120 TRANSMISSION FINISHED -----");*/ - isTransmitting = false; - lastEvent = RadioEvent.TRANSMISSION_FINISHED; - setChanged(); - notifyObservers(); - } - - lastEvent = RadioEvent.HW_OFF; - setChanged(); - notifyObservers(); - } - - /* Packet radio support */ - public RadioPacket getLastPacketTransmitted() { - return lastOutgoingPacket; - } - - public RadioPacket getLastPacketReceived() { - return lastIncomingPacket; - } - - public void setReceivedPacket(RadioPacket packet) { - lastIncomingPacket = packet; - - /* TODO XXX Need support in CCC1120.java */ - /*if (!radio.isReadyToReceive()) { - logger.warn("Radio receiver not ready, dropping packet data"); - return; - }*/ - - /* Delivering packet bytes with delays */ - byte[] packetData = packet.getPacketData(); - long deliveryTime = getMote().getSimulation().getSimulationTime(); - for (byte b: packetData) { - if (isInterfered()) { - b = (byte) 0xFF; - } - - final byte byteToDeliver = b; - getMote().getSimulation().scheduleEvent(new MspMoteTimeEvent(mote, 0) { - public void execute(long t) { - super.execute(t); - cc1120.receivedByte(byteToDeliver); - mote.requestImmediateWakeup(); - } - }, deliveryTime); - deliveryTime += DELAY_BETWEEN_BYTES; - } - } - - /* Custom data radio support */ - public Object getLastCustomDataTransmitted() { - return lastOutgoingByte; - } - - public Object getLastCustomDataReceived() { - return lastIncomingByte; - } - - public void receiveCustomData(Object data) { - if (!(data instanceof Byte)) { - logger.fatal("Bad custom data: " + data); - return; - } - lastIncomingByte = (Byte) data; - - final byte inputByte; - if (isInterfered()) { - inputByte = (byte)0xFF; - } else { - inputByte = lastIncomingByte; - } - mote.getSimulation().scheduleEvent(new MspMoteTimeEvent(mote, 0) { - public void execute(long t) { - super.execute(t); - cc1120.receivedByte(inputByte); - mote.requestImmediateWakeup(); - } - }, mote.getSimulation().getSimulationTime()); - - } - - /* General radio support */ - public boolean isTransmitting() { - return isTransmitting; - } - - public boolean isReceiving() { - return isReceiving; - } - - public boolean isInterfered() { - return isInterfered; - } - - public int getChannel() { - return cc1120.getActiveChannel()+1000; - } - - public int getFrequency() { - return cc1120.getActiveFrequency(); - } - - public void signalReceptionStart() { - isReceiving = true; - - lastEvent = RadioEvent.RECEPTION_STARTED; - /*logger.debug("----- CCC1120 RECEPTION STARTED -----");*/ - setChanged(); - notifyObservers(); - } - - public void signalReceptionEnd() { - /* Deliver packet data */ - isReceiving = false; - isInterfered = false; - - lastEvent = RadioEvent.RECEPTION_FINISHED; - /*logger.debug("----- CCC1120 RECEPTION FINISHED -----");*/ - setChanged(); - notifyObservers(); - } - - public RadioEvent getLastEvent() { - return lastEvent; - } - - public void interfereAnyReception() { - isInterfered = true; - isReceiving = false; - lastIncomingPacket = null; - - lastEvent = RadioEvent.RECEPTION_INTERFERED; - /*logger.debug("----- CCC1120 RECEPTION INTERFERED -----");*/ - setChanged(); - notifyObservers(); - } - - public double getCurrentOutputPower() { - /* TODO XXX Need support in CCC1120.java */ - return 1; - } - public int getCurrentOutputPowerIndicator() { - /* TODO XXX Need support in CCC1120.java */ - return 10; - } - public int getOutputPowerIndicatorMax() { - /* TODO XXX Need support in CCC1120.java */ - return 10; - } - - - /** - * Last 8 received signal strengths - */ - double currentSignalStrength = 0; - private double[] rssiLast = new double[8]; - private int rssiLastCounter = 0; - - public double getCurrentSignalStrength() { - return currentSignalStrength; - } - - public void setCurrentSignalStrength(final double signalStrength) { - if (signalStrength == currentSignalStrength) { - return; /* ignored */ - } - currentSignalStrength = signalStrength; - if (rssiLastCounter == 0) { - getMote().getSimulation().scheduleEvent(new MspMoteTimeEvent(mote, 0) { - public void execute(long t) { - super.execute(t); - - /* Update average */ - System.arraycopy(rssiLast, 1, rssiLast, 0, 7); - rssiLast[7] = currentSignalStrength; - double avg = 0; - for (double v: rssiLast) { - avg += v; - } - avg /= rssiLast.length; - - cc1120.setRSSI((int) avg); - - rssiLastCounter--; - if (rssiLastCounter > 0) { - mote.getSimulation().scheduleEvent(this, t+DELAY_BETWEEN_BYTES/2); - } - } - }, mote.getSimulation().getSimulationTime()); - } - rssiLastCounter = 8; - } - - public Mote getMote() { - return mote; - } - - public Position getPosition() { - return mote.getInterfaces().getPosition(); - } - - public Collection getConfigXML() { - return null; - } - - public void setConfigXML(Collection configXML, boolean visAvailable) { - } - - public boolean isRadioOn() { - return cc1120.isReadyToReceive(); - } - - public boolean canReceiveFrom(CustomDataRadio radio) { - if (radio.getClass().equals(this.getClass())) { - return true; - } - return false; - } - -} +/* + * Copyright (c) 2012, Thingsquare. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + */ + +package org.contikios.cooja.mspmote.interfaces; + +import java.util.Collection; + +import org.apache.log4j.Logger; +import org.jdom.Element; + +import org.contikios.cooja.ClassDescription; +import org.contikios.cooja.Mote; +import org.contikios.cooja.RadioPacket; +import org.contikios.cooja.Simulation; +import org.contikios.cooja.interfaces.CustomDataRadio; +import org.contikios.cooja.interfaces.Position; +import org.contikios.cooja.interfaces.Radio; +import org.contikios.cooja.mspmote.MspMote; +import org.contikios.cooja.mspmote.MspMoteTimeEvent; +import se.sics.mspsim.chip.CC1120; +import se.sics.mspsim.chip.CC1120.ReceiverListener; +import se.sics.mspsim.chip.ChannelListener; +import se.sics.mspsim.chip.RFListener; +import se.sics.mspsim.chip.Radio802154; + +/** + * @author Fredrik Osterlind + */ +@ClassDescription("TI CC1120") +public class CC1120Radio extends Radio implements CustomDataRadio { + private static Logger logger = Logger.getLogger(CC1120Radio.class); + + /** + * Cross-level: + * Inter-byte delay for delivering cross-level packet bytes. + */ + /* TODO XXX Fix me as well as symbol duration in CC1120.java */ + public static final long DELAY_BETWEEN_BYTES = + (long) (1000.0*Simulation.MILLISECOND/(200000.0/8.0)); /* us. Corresponds to 200kbit/s */ + + private RadioEvent lastEvent = RadioEvent.UNKNOWN; + + private final MspMote mote; + private final CC1120 cc1120; + + private boolean isInterfered = false; + private boolean isTransmitting = false; + private boolean isReceiving = false; + + private byte lastOutgoingByte; + private byte lastIncomingByte; + + private RadioPacket lastOutgoingPacket = null; + private RadioPacket lastIncomingPacket = null; + + public CC1120Radio(Mote m) { + this.mote = (MspMote)m; + Radio802154 r = this.mote.getCPU().getChip(Radio802154.class); + if (r == null || !(r instanceof CC1120)) { + throw new IllegalStateException("Mote is not equipped with an CC1120 radio"); + } + this.cc1120 = (CC1120) r; + + cc1120.addRFListener(new RFListener() { + int len = 0; + int expLen = 0; + byte[] buffer = new byte[256 + 15]; + private boolean gotSynchbyte = false; + public void receivedByte(byte data) { + if (!isTransmitting()) { + /* Start transmission */ + lastEvent = RadioEvent.TRANSMISSION_STARTED; + isTransmitting = true; + len = 0; + gotSynchbyte = false; + /*logger.debug("----- CCC1120 TRANSMISSION STARTED -----");*/ + setChanged(); + notifyObservers(); + } + if (len >= buffer.length) { + /* Bad size packet, too large */ + logger.debug("Error: bad size: " + len + ", dropping outgoing byte: " + data); + return; + } + + /* send this byte to all nodes */ + lastOutgoingByte = data; + lastEvent = RadioEvent.CUSTOM_DATA_TRANSMITTED; + setChanged(); + notifyObservers(); + + /* Await synch byte */ + if (!gotSynchbyte) { + if (lastOutgoingByte == CC1120.SYNCH_BYTE_LAST) { + gotSynchbyte = true; + } + return; + } + + final int HEADERLEN = 1; /* 1x Length byte */ + final int FOOTERLEN = 2; /* TODO Fix CRC in Mspsim's CCC1120.java */ + if (len == 0) { + expLen = (0xff&data) + HEADERLEN + FOOTERLEN; + } + buffer[len++] = data; + + if (len == expLen) { + /*logger.debug("----- CCC1120 CUSTOM DATA TRANSMITTED -----");*/ + + final byte[] buf = new byte[expLen]; + System.arraycopy(buffer, 0, buf, 0, expLen); + lastOutgoingPacket = new RadioPacket() { + public byte[] getPacketData() { + return buf; + } + }; + + lastEvent = RadioEvent.PACKET_TRANSMITTED; + /*logger.debug("----- CCC1120 PACKET TRANSMITTED -----");*/ + setChanged(); + notifyObservers(); + + /*logger.debug("----- CCC1120 TRANSMISSION FINISHED -----");*/ + isTransmitting = false; + lastEvent = RadioEvent.TRANSMISSION_FINISHED; + setChanged(); + notifyObservers(); + len = 0; + } + } + }); + + cc1120.setReceiverListener(new ReceiverListener() { + public void newState(boolean on) { + if (cc1120.isReadyToReceive()) { + lastEvent = RadioEvent.HW_ON; + setChanged(); + notifyObservers(); + } else { + radioOff(); + } + } + }); + + cc1120.addChannelListener(new ChannelListener() { + public void channelChanged(int channel) { + /* XXX Currently assumes zero channel switch time */ + lastEvent = RadioEvent.UNKNOWN; + setChanged(); + notifyObservers(); + } + }); + } + + private void radioOff() { + /* Radio was turned off during transmission. + * May for example happen if watchdog triggers */ + if (isTransmitting()) { + logger.warn("Turning off radio while transmitting, ending packet prematurely"); + + /* Simulate end of packet */ + lastOutgoingPacket = new RadioPacket() { + public byte[] getPacketData() { + return new byte[0]; + } + }; + + lastEvent = RadioEvent.PACKET_TRANSMITTED; + /*logger.debug("----- CCC1120 PACKET TRANSMITTED -----");*/ + setChanged(); + notifyObservers(); + + /* Register that transmission ended in radio medium */ + /*logger.debug("----- CCC1120 TRANSMISSION FINISHED -----");*/ + isTransmitting = false; + lastEvent = RadioEvent.TRANSMISSION_FINISHED; + setChanged(); + notifyObservers(); + } + + lastEvent = RadioEvent.HW_OFF; + setChanged(); + notifyObservers(); + } + + /* Packet radio support */ + public RadioPacket getLastPacketTransmitted() { + return lastOutgoingPacket; + } + + public RadioPacket getLastPacketReceived() { + return lastIncomingPacket; + } + + public void setReceivedPacket(RadioPacket packet) { + lastIncomingPacket = packet; + + /* TODO XXX Need support in CCC1120.java */ + /*if (!radio.isReadyToReceive()) { + logger.warn("Radio receiver not ready, dropping packet data"); + return; + }*/ + + /* Delivering packet bytes with delays */ + byte[] packetData = packet.getPacketData(); + long deliveryTime = getMote().getSimulation().getSimulationTime(); + for (byte b: packetData) { + if (isInterfered()) { + b = (byte) 0xFF; + } + + final byte byteToDeliver = b; + getMote().getSimulation().scheduleEvent(new MspMoteTimeEvent(mote, 0) { + public void execute(long t) { + super.execute(t); + cc1120.receivedByte(byteToDeliver); + mote.requestImmediateWakeup(); + } + }, deliveryTime); + deliveryTime += DELAY_BETWEEN_BYTES; + } + } + + /* Custom data radio support */ + public Object getLastCustomDataTransmitted() { + return lastOutgoingByte; + } + + public Object getLastCustomDataReceived() { + return lastIncomingByte; + } + + public void receiveCustomData(Object data) { + if (!(data instanceof Byte)) { + logger.fatal("Bad custom data: " + data); + return; + } + lastIncomingByte = (Byte) data; + + final byte inputByte; + if (isInterfered()) { + inputByte = (byte)0xFF; + } else { + inputByte = lastIncomingByte; + } + mote.getSimulation().scheduleEvent(new MspMoteTimeEvent(mote, 0) { + public void execute(long t) { + super.execute(t); + cc1120.receivedByte(inputByte); + mote.requestImmediateWakeup(); + } + }, mote.getSimulation().getSimulationTime()); + + } + + /* General radio support */ + public boolean isTransmitting() { + return isTransmitting; + } + + public boolean isReceiving() { + return isReceiving; + } + + public boolean isInterfered() { + return isInterfered; + } + + public int getChannel() { + return cc1120.getActiveChannel()+1000; + } + + public int getFrequency() { + return cc1120.getActiveFrequency(); + } + + public void signalReceptionStart() { + isReceiving = true; + + lastEvent = RadioEvent.RECEPTION_STARTED; + /*logger.debug("----- CCC1120 RECEPTION STARTED -----");*/ + setChanged(); + notifyObservers(); + } + + public void signalReceptionEnd() { + /* Deliver packet data */ + isReceiving = false; + isInterfered = false; + + lastEvent = RadioEvent.RECEPTION_FINISHED; + /*logger.debug("----- CCC1120 RECEPTION FINISHED -----");*/ + setChanged(); + notifyObservers(); + } + + public RadioEvent getLastEvent() { + return lastEvent; + } + + public void interfereAnyReception() { + isInterfered = true; + isReceiving = false; + lastIncomingPacket = null; + + lastEvent = RadioEvent.RECEPTION_INTERFERED; + /*logger.debug("----- CCC1120 RECEPTION INTERFERED -----");*/ + setChanged(); + notifyObservers(); + } + + public double getCurrentOutputPower() { + /* TODO XXX Need support in CCC1120.java */ + return 1; + } + public int getCurrentOutputPowerIndicator() { + /* TODO XXX Need support in CCC1120.java */ + return 10; + } + public int getOutputPowerIndicatorMax() { + /* TODO XXX Need support in CCC1120.java */ + return 10; + } + + + /** + * Last 8 received signal strengths + */ + double currentSignalStrength = 0; + private double[] rssiLast = new double[8]; + private int rssiLastCounter = 0; + + public double getCurrentSignalStrength() { + return currentSignalStrength; + } + + public void setCurrentSignalStrength(final double signalStrength) { + if (signalStrength == currentSignalStrength) { + return; /* ignored */ + } + currentSignalStrength = signalStrength; + if (rssiLastCounter == 0) { + getMote().getSimulation().scheduleEvent(new MspMoteTimeEvent(mote, 0) { + public void execute(long t) { + super.execute(t); + + /* Update average */ + System.arraycopy(rssiLast, 1, rssiLast, 0, 7); + rssiLast[7] = currentSignalStrength; + double avg = 0; + for (double v: rssiLast) { + avg += v; + } + avg /= rssiLast.length; + + cc1120.setRSSI((int) avg); + + rssiLastCounter--; + if (rssiLastCounter > 0) { + mote.getSimulation().scheduleEvent(this, t+DELAY_BETWEEN_BYTES/2); + } + } + }, mote.getSimulation().getSimulationTime()); + } + rssiLastCounter = 8; + } + + public Mote getMote() { + return mote; + } + + public Position getPosition() { + return mote.getInterfaces().getPosition(); + } + + public Collection getConfigXML() { + return null; + } + + public void setConfigXML(Collection configXML, boolean visAvailable) { + } + + public boolean isRadioOn() { + return cc1120.isReadyToReceive(); + } + + public boolean canReceiveFrom(CustomDataRadio radio) { + if (radio.getClass().equals(this.getClass())) { + return true; + } + return false; + } + +} diff --git a/tools/cooja/apps/mspsim/src/org/contikios/cooja/mspmote/interfaces/CC2420RadioPacketConverter.java b/tools/cooja/apps/mspsim/src/org/contikios/cooja/mspmote/interfaces/CC2420RadioPacketConverter.java index fd62da50f..116c3a38a 100644 --- a/tools/cooja/apps/mspsim/src/org/contikios/cooja/mspmote/interfaces/CC2420RadioPacketConverter.java +++ b/tools/cooja/apps/mspsim/src/org/contikios/cooja/mspmote/interfaces/CC2420RadioPacketConverter.java @@ -46,7 +46,7 @@ public class CC2420RadioPacketConverter { public static final boolean WITH_XMAC = false; /* XXX No longer supported. Cross-level requires NULLMAC */ public static final boolean WITH_CHECKSUM = false; /* Contiki checksum. Not CC2420's built-in. */ public static final boolean WITH_TIMESTAMP = false; /* Contiki timestamp */ - public static final boolean WITH_FOOTER = true; /* CC2420's checksum */ + public static final boolean WITH_FOOTER = false; /* CC2420's checksum */ public static byte[] fromCoojaToCC2420(RadioPacket packet) { byte cc2420Data[] = new byte[6+127]; @@ -165,7 +165,7 @@ public class CC2420RadioPacketConverter { } /* 1 byte length */ - len = data[pos]; + len = data[pos] & 0xFF; originalLen = len; pos += 1; @@ -198,7 +198,7 @@ public class CC2420RadioPacketConverter { System.arraycopy(data, 6 /* skipping preamble+synch+len */, originalData, 0, originalLen); if (len < 0) { /*logger.warn("No cross-level conversion available: negative packet length");*/ - return new ConvertedRadioPacket(new byte[0], originalData); + return null; } byte convertedData[] = new byte[len]; System.arraycopy(data, pos, convertedData, 0, len); diff --git a/tools/cooja/apps/mspsim/src/org/contikios/cooja/mspmote/interfaces/CC2520Radio.java b/tools/cooja/apps/mspsim/src/org/contikios/cooja/mspmote/interfaces/CC2520Radio.java index d219f9171..49d86c451 100644 --- a/tools/cooja/apps/mspsim/src/org/contikios/cooja/mspmote/interfaces/CC2520Radio.java +++ b/tools/cooja/apps/mspsim/src/org/contikios/cooja/mspmote/interfaces/CC2520Radio.java @@ -1,378 +1,378 @@ - -package org.contikios.cooja.mspmote.interfaces; - -import java.util.Collection; - -import org.apache.log4j.Logger; -import org.jdom.Element; - -import org.contikios.cooja.ClassDescription; -import org.contikios.cooja.Mote; -import org.contikios.cooja.RadioPacket; -import org.contikios.cooja.Simulation; -import org.contikios.cooja.interfaces.CustomDataRadio; -import org.contikios.cooja.interfaces.Position; -import org.contikios.cooja.interfaces.Radio; -import org.contikios.cooja.mspmote.MspMote; -import org.contikios.cooja.mspmote.MspMoteTimeEvent; -import org.contikios.cooja.mspmote.interfaces.CC2420RadioPacketConverter; -import se.sics.mspsim.chip.CC2520; -import se.sics.mspsim.chip.ChannelListener; -import se.sics.mspsim.chip.RFListener; -import se.sics.mspsim.core.Chip; -import se.sics.mspsim.core.OperatingModeListener; - -/** - * MSPSim CC2520 radio to COOJA wrapper. - * - * @author Fredrik Osterlind - */ -@ClassDescription("IEEE CC2520 Radio") -public class CC2520Radio extends Radio implements CustomDataRadio { - private static Logger logger = Logger.getLogger(CC2520Radio.class); - - /** - * Cross-level: - * Inter-byte delay for delivering cross-level packet bytes. - */ - public static final long DELAY_BETWEEN_BYTES = - (long) (1000.0*Simulation.MILLISECOND/(250000.0/8.0)); /* us. Corresponds to 250kbit/s */ - - private RadioEvent lastEvent = RadioEvent.UNKNOWN; - - private final MspMote mote; - private final CC2520 radio; - - private boolean isInterfered = false; - private boolean isTransmitting = false; - private boolean isReceiving = false; - - private byte lastOutgoingByte; - private byte lastIncomingByte; - - private RadioPacket lastOutgoingPacket = null; - private RadioPacket lastIncomingPacket = null; - - public CC2520Radio(Mote m) { - this.mote = (MspMote)m; - this.radio = this.mote.getCPU().getChip(CC2520.class); - if (radio == null) { - throw new IllegalStateException("Mote is not equipped with an IEEE CC2520 radio"); - } - - radio.addRFListener(new RFListener() { - int len = 0; - int expLen = 0; - byte[] buffer = new byte[127 + 15]; - public void receivedByte(byte data) { - if (!isTransmitting()) { - lastEvent = RadioEvent.TRANSMISSION_STARTED; - isTransmitting = true; - len = 0; - /*logger.debug("----- CC2520 TRANSMISSION STARTED -----");*/ - setChanged(); - notifyObservers(); - } - - if (len >= buffer.length) { - /* Bad size packet, too large */ - logger.debug("Error: bad size: " + len + ", dropping outgoing byte: " + data); - return; - } - - /* send this byte to all nodes */ - lastOutgoingByte = data; - lastEvent = RadioEvent.CUSTOM_DATA_TRANSMITTED; - setChanged(); - notifyObservers(); - - buffer[len++] = data; - - if (len == 6) { -// System.out.println("## CC2520 Packet of length: " + data + " expected..."); - expLen = data + 6; - } - - if (len == expLen) { - /*logger.debug("----- CC2520 CUSTOM DATA TRANSMITTED -----");*/ - len -= 4; /* preamble */ - len -= 1; /* synch */ - len -= radio.getFooterLength(); /* footer */ - final byte[] packetdata = new byte[len]; - System.arraycopy(buffer, 4+1, packetdata, 0, len); - lastOutgoingPacket = new RadioPacket() { - public byte[] getPacketData() { - return packetdata; - } - }; - - /*logger.debug("----- CC2520 PACKET TRANSMITTED -----");*/ - setChanged(); - notifyObservers(); - - /*logger.debug("----- CC2520 TRANSMISSION FINISHED -----");*/ - isTransmitting = false; - lastEvent = RadioEvent.TRANSMISSION_FINISHED; - setChanged(); - notifyObservers(); - len = 0; - } - } - }); - - radio.addOperatingModeListener(new OperatingModeListener() { - public void modeChanged(Chip source, int mode) { - if (radio.isReadyToReceive()) { - lastEvent = RadioEvent.HW_ON; - setChanged(); - notifyObservers(); - } else { - radioOff(); - } - } - }); - - radio.addChannelListener(new ChannelListener() { - public void channelChanged(int channel) { - /* XXX Currently assumes zero channel switch time */ - lastEvent = RadioEvent.UNKNOWN; - setChanged(); - notifyObservers(); - } - }); - } - - private void radioOff() { - /* Radio was turned off during transmission. - * May for example happen if watchdog triggers */ - if (isTransmitting()) { - logger.warn("Turning off radio while transmitting, ending packet prematurely"); - - /* Simulate end of packet */ - lastOutgoingPacket = new RadioPacket() { - public byte[] getPacketData() { - return new byte[0]; - } - }; - - lastEvent = RadioEvent.PACKET_TRANSMITTED; - /*logger.debug("----- CC2520 PACKET TRANSMITTED -----");*/ - setChanged(); - notifyObservers(); - - /* Register that transmission ended in radio medium */ - /*logger.debug("----- CC2520 TRANSMISSION FINISHED -----");*/ - isTransmitting = false; - lastEvent = RadioEvent.TRANSMISSION_FINISHED; - setChanged(); - notifyObservers(); - } - - lastEvent = RadioEvent.HW_OFF; - setChanged(); - notifyObservers(); - } - - /* Packet radio support */ - public RadioPacket getLastPacketTransmitted() { - return lastOutgoingPacket; - } - - public RadioPacket getLastPacketReceived() { - return lastIncomingPacket; - } - - public void setReceivedPacket(RadioPacket packet) { - logger.fatal("TODO Implement me!"); - } - - /* Custom data radio support */ - public Object getLastCustomDataTransmitted() { - return lastOutgoingByte; - } - - public Object getLastCustomDataReceived() { - return lastIncomingByte; - } - - public void receiveCustomData(Object data) { - if (!(data instanceof Byte)) { - logger.fatal("Bad custom data: " + data); - return; - } - lastIncomingByte = (Byte) data; - - final byte inputByte; - if (isInterfered()) { - inputByte = (byte)0xFF; - } else { - inputByte = lastIncomingByte; - } - mote.getSimulation().scheduleEvent(new MspMoteTimeEvent(mote, 0) { - public void execute(long t) { - super.execute(t); - radio.receivedByte(inputByte); - mote.requestImmediateWakeup(); - } - }, mote.getSimulation().getSimulationTime()); - - } - - /* General radio support */ - public boolean isTransmitting() { - return isTransmitting; - } - - public boolean isReceiving() { - return isReceiving; - } - - public boolean isInterfered() { - return isInterfered; - } - - public int getChannel() { - return radio.getActiveChannel(); - } - - public int getFrequency() { - return radio.getActiveFrequency(); - } - - public void signalReceptionStart() { - isReceiving = true; - - lastEvent = RadioEvent.RECEPTION_STARTED; - /*logger.debug("----- CC2520 RECEPTION STARTED -----");*/ - setChanged(); - notifyObservers(); - } - - public void signalReceptionEnd() { - /* Deliver packet data */ - isReceiving = false; - isInterfered = false; - - lastEvent = RadioEvent.RECEPTION_FINISHED; - /*logger.debug("----- CC2520 RECEPTION FINISHED -----");*/ - setChanged(); - notifyObservers(); - } - - public RadioEvent getLastEvent() { - return lastEvent; - } - - public void interfereAnyReception() { - isInterfered = true; - isReceiving = false; - lastIncomingPacket = null; - - lastEvent = RadioEvent.RECEPTION_INTERFERED; - /*logger.debug("----- CC2520 RECEPTION INTERFERED -----");*/ - setChanged(); - notifyObservers(); - } - - public double getCurrentOutputPower() { - return radio.getOutputPower(); - } - - public int getCurrentOutputPowerIndicator() { - return 100; -// return radio.getOutputPowerIndicator(); - } - - public int getOutputPowerIndicatorMax() { - return 100; -// return 31; - } - - double currentSignalStrength = 0; - - /** - * Last 8 received signal strengths - */ - private double[] rssiLast = new double[8]; - private int rssiLastCounter = 0; - - public double getCurrentSignalStrength() { - return currentSignalStrength; - } - - public void setCurrentSignalStrength(final double signalStrength) { - if (signalStrength == currentSignalStrength) { - return; /* ignored */ - } - currentSignalStrength = signalStrength; - if (rssiLastCounter == 0) { - getMote().getSimulation().scheduleEvent(new MspMoteTimeEvent(mote, 0) { - public void execute(long t) { - super.execute(t); - - /* Update average */ - System.arraycopy(rssiLast, 1, rssiLast, 0, 7); - rssiLast[7] = currentSignalStrength; - double avg = 0; - for (double v: rssiLast) { - avg += v; - } - avg /= rssiLast.length; - - radio.setRSSI((int) avg); - - rssiLastCounter--; - if (rssiLastCounter > 0) { - mote.getSimulation().scheduleEvent(this, t+DELAY_BETWEEN_BYTES/2); - } - } - }, mote.getSimulation().getSimulationTime()); - } - rssiLastCounter = 8; - } - - - public void setLQI(int lqi){ - radio.setLQI(lqi); - } - - public int getLQI(){ - return radio.getLQI(); - } - - - public Mote getMote() { - return mote; - } - - public Position getPosition() { - return mote.getInterfaces().getPosition(); - } - - public Collection getConfigXML() { - return null; - } - - public void setConfigXML(Collection configXML, boolean visAvailable) { - } - - public boolean isRadioOn() { - if (radio.isReadyToReceive()) { - return true; - } - if (radio.getMode() == CC2520.MODE_POWER_OFF) { - return false; - } - if (radio.getMode() == CC2520.MODE_TXRX_OFF) { - return false; - } - return true; - } - - public boolean canReceiveFrom(CustomDataRadio radio) { - if (radio.getClass().equals(this.getClass())) { - return true; - } - return false; - } -} + +package org.contikios.cooja.mspmote.interfaces; + +import java.util.Collection; + +import org.apache.log4j.Logger; +import org.jdom.Element; + +import org.contikios.cooja.ClassDescription; +import org.contikios.cooja.Mote; +import org.contikios.cooja.RadioPacket; +import org.contikios.cooja.Simulation; +import org.contikios.cooja.interfaces.CustomDataRadio; +import org.contikios.cooja.interfaces.Position; +import org.contikios.cooja.interfaces.Radio; +import org.contikios.cooja.mspmote.MspMote; +import org.contikios.cooja.mspmote.MspMoteTimeEvent; +import org.contikios.cooja.mspmote.interfaces.CC2420RadioPacketConverter; +import se.sics.mspsim.chip.CC2520; +import se.sics.mspsim.chip.ChannelListener; +import se.sics.mspsim.chip.RFListener; +import se.sics.mspsim.core.Chip; +import se.sics.mspsim.core.OperatingModeListener; + +/** + * MSPSim CC2520 radio to COOJA wrapper. + * + * @author Fredrik Osterlind + */ +@ClassDescription("IEEE CC2520 Radio") +public class CC2520Radio extends Radio implements CustomDataRadio { + private static Logger logger = Logger.getLogger(CC2520Radio.class); + + /** + * Cross-level: + * Inter-byte delay for delivering cross-level packet bytes. + */ + public static final long DELAY_BETWEEN_BYTES = + (long) (1000.0*Simulation.MILLISECOND/(250000.0/8.0)); /* us. Corresponds to 250kbit/s */ + + private RadioEvent lastEvent = RadioEvent.UNKNOWN; + + private final MspMote mote; + private final CC2520 radio; + + private boolean isInterfered = false; + private boolean isTransmitting = false; + private boolean isReceiving = false; + + private byte lastOutgoingByte; + private byte lastIncomingByte; + + private RadioPacket lastOutgoingPacket = null; + private RadioPacket lastIncomingPacket = null; + + public CC2520Radio(Mote m) { + this.mote = (MspMote)m; + this.radio = this.mote.getCPU().getChip(CC2520.class); + if (radio == null) { + throw new IllegalStateException("Mote is not equipped with an IEEE CC2520 radio"); + } + + radio.addRFListener(new RFListener() { + int len = 0; + int expLen = 0; + byte[] buffer = new byte[127 + 15]; + public void receivedByte(byte data) { + if (!isTransmitting()) { + lastEvent = RadioEvent.TRANSMISSION_STARTED; + isTransmitting = true; + len = 0; + /*logger.debug("----- CC2520 TRANSMISSION STARTED -----");*/ + setChanged(); + notifyObservers(); + } + + if (len >= buffer.length) { + /* Bad size packet, too large */ + logger.debug("Error: bad size: " + len + ", dropping outgoing byte: " + data); + return; + } + + /* send this byte to all nodes */ + lastOutgoingByte = data; + lastEvent = RadioEvent.CUSTOM_DATA_TRANSMITTED; + setChanged(); + notifyObservers(); + + buffer[len++] = data; + + if (len == 6) { +// System.out.println("## CC2520 Packet of length: " + data + " expected..."); + expLen = data + 6; + } + + if (len == expLen) { + /*logger.debug("----- CC2520 CUSTOM DATA TRANSMITTED -----");*/ + len -= 4; /* preamble */ + len -= 1; /* synch */ + len -= radio.getFooterLength(); /* footer */ + final byte[] packetdata = new byte[len]; + System.arraycopy(buffer, 4+1, packetdata, 0, len); + lastOutgoingPacket = new RadioPacket() { + public byte[] getPacketData() { + return packetdata; + } + }; + + /*logger.debug("----- CC2520 PACKET TRANSMITTED -----");*/ + setChanged(); + notifyObservers(); + + /*logger.debug("----- CC2520 TRANSMISSION FINISHED -----");*/ + isTransmitting = false; + lastEvent = RadioEvent.TRANSMISSION_FINISHED; + setChanged(); + notifyObservers(); + len = 0; + } + } + }); + + radio.addOperatingModeListener(new OperatingModeListener() { + public void modeChanged(Chip source, int mode) { + if (radio.isReadyToReceive()) { + lastEvent = RadioEvent.HW_ON; + setChanged(); + notifyObservers(); + } else { + radioOff(); + } + } + }); + + radio.addChannelListener(new ChannelListener() { + public void channelChanged(int channel) { + /* XXX Currently assumes zero channel switch time */ + lastEvent = RadioEvent.UNKNOWN; + setChanged(); + notifyObservers(); + } + }); + } + + private void radioOff() { + /* Radio was turned off during transmission. + * May for example happen if watchdog triggers */ + if (isTransmitting()) { + logger.warn("Turning off radio while transmitting, ending packet prematurely"); + + /* Simulate end of packet */ + lastOutgoingPacket = new RadioPacket() { + public byte[] getPacketData() { + return new byte[0]; + } + }; + + lastEvent = RadioEvent.PACKET_TRANSMITTED; + /*logger.debug("----- CC2520 PACKET TRANSMITTED -----");*/ + setChanged(); + notifyObservers(); + + /* Register that transmission ended in radio medium */ + /*logger.debug("----- CC2520 TRANSMISSION FINISHED -----");*/ + isTransmitting = false; + lastEvent = RadioEvent.TRANSMISSION_FINISHED; + setChanged(); + notifyObservers(); + } + + lastEvent = RadioEvent.HW_OFF; + setChanged(); + notifyObservers(); + } + + /* Packet radio support */ + public RadioPacket getLastPacketTransmitted() { + return lastOutgoingPacket; + } + + public RadioPacket getLastPacketReceived() { + return lastIncomingPacket; + } + + public void setReceivedPacket(RadioPacket packet) { + logger.fatal("TODO Implement me!"); + } + + /* Custom data radio support */ + public Object getLastCustomDataTransmitted() { + return lastOutgoingByte; + } + + public Object getLastCustomDataReceived() { + return lastIncomingByte; + } + + public void receiveCustomData(Object data) { + if (!(data instanceof Byte)) { + logger.fatal("Bad custom data: " + data); + return; + } + lastIncomingByte = (Byte) data; + + final byte inputByte; + if (isInterfered()) { + inputByte = (byte)0xFF; + } else { + inputByte = lastIncomingByte; + } + mote.getSimulation().scheduleEvent(new MspMoteTimeEvent(mote, 0) { + public void execute(long t) { + super.execute(t); + radio.receivedByte(inputByte); + mote.requestImmediateWakeup(); + } + }, mote.getSimulation().getSimulationTime()); + + } + + /* General radio support */ + public boolean isTransmitting() { + return isTransmitting; + } + + public boolean isReceiving() { + return isReceiving; + } + + public boolean isInterfered() { + return isInterfered; + } + + public int getChannel() { + return radio.getActiveChannel(); + } + + public int getFrequency() { + return radio.getActiveFrequency(); + } + + public void signalReceptionStart() { + isReceiving = true; + + lastEvent = RadioEvent.RECEPTION_STARTED; + /*logger.debug("----- CC2520 RECEPTION STARTED -----");*/ + setChanged(); + notifyObservers(); + } + + public void signalReceptionEnd() { + /* Deliver packet data */ + isReceiving = false; + isInterfered = false; + + lastEvent = RadioEvent.RECEPTION_FINISHED; + /*logger.debug("----- CC2520 RECEPTION FINISHED -----");*/ + setChanged(); + notifyObservers(); + } + + public RadioEvent getLastEvent() { + return lastEvent; + } + + public void interfereAnyReception() { + isInterfered = true; + isReceiving = false; + lastIncomingPacket = null; + + lastEvent = RadioEvent.RECEPTION_INTERFERED; + /*logger.debug("----- CC2520 RECEPTION INTERFERED -----");*/ + setChanged(); + notifyObservers(); + } + + public double getCurrentOutputPower() { + return radio.getOutputPower(); + } + + public int getCurrentOutputPowerIndicator() { + return 100; +// return radio.getOutputPowerIndicator(); + } + + public int getOutputPowerIndicatorMax() { + return 100; +// return 31; + } + + double currentSignalStrength = 0; + + /** + * Last 8 received signal strengths + */ + private double[] rssiLast = new double[8]; + private int rssiLastCounter = 0; + + public double getCurrentSignalStrength() { + return currentSignalStrength; + } + + public void setCurrentSignalStrength(final double signalStrength) { + if (signalStrength == currentSignalStrength) { + return; /* ignored */ + } + currentSignalStrength = signalStrength; + if (rssiLastCounter == 0) { + getMote().getSimulation().scheduleEvent(new MspMoteTimeEvent(mote, 0) { + public void execute(long t) { + super.execute(t); + + /* Update average */ + System.arraycopy(rssiLast, 1, rssiLast, 0, 7); + rssiLast[7] = currentSignalStrength; + double avg = 0; + for (double v: rssiLast) { + avg += v; + } + avg /= rssiLast.length; + + radio.setRSSI((int) avg); + + rssiLastCounter--; + if (rssiLastCounter > 0) { + mote.getSimulation().scheduleEvent(this, t+DELAY_BETWEEN_BYTES/2); + } + } + }, mote.getSimulation().getSimulationTime()); + } + rssiLastCounter = 8; + } + + + public void setLQI(int lqi){ + radio.setLQI(lqi); + } + + public int getLQI(){ + return radio.getLQI(); + } + + + public Mote getMote() { + return mote; + } + + public Position getPosition() { + return mote.getInterfaces().getPosition(); + } + + public Collection getConfigXML() { + return null; + } + + public void setConfigXML(Collection configXML, boolean visAvailable) { + } + + public boolean isRadioOn() { + if (radio.isReadyToReceive()) { + return true; + } + if (radio.getMode() == CC2520.MODE_POWER_OFF) { + return false; + } + if (radio.getMode() == CC2520.MODE_TXRX_OFF) { + return false; + } + return true; + } + + public boolean canReceiveFrom(CustomDataRadio radio) { + if (radio.getClass().equals(this.getClass())) { + return true; + } + return false; + } +} diff --git a/tools/cooja/apps/mspsim/src/org/contikios/cooja/mspmote/interfaces/CC430Radio.java b/tools/cooja/apps/mspsim/src/org/contikios/cooja/mspmote/interfaces/CC430Radio.java index 692c9996c..68c971e8e 100644 --- a/tools/cooja/apps/mspsim/src/org/contikios/cooja/mspmote/interfaces/CC430Radio.java +++ b/tools/cooja/apps/mspsim/src/org/contikios/cooja/mspmote/interfaces/CC430Radio.java @@ -1,50 +1,50 @@ -/* - * Copyright (c) 2012, Thingsquare. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the Institute nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - */ - -package org.contikios.cooja.mspmote.interfaces; - -import org.apache.log4j.Logger; - -import org.contikios.cooja.ClassDescription; -import org.contikios.cooja.Mote; -import org.contikios.cooja.interfaces.CustomDataRadio; - -/** - * @author Fredrik Osterlind - */ -@ClassDescription("TI CC1101 (CC430)") -public class CC430Radio extends CC1101Radio implements CustomDataRadio { - private static Logger logger = Logger.getLogger(CC1101Radio.class); - - public CC430Radio(Mote m) { - super(m); - } - -} +/* + * Copyright (c) 2012, Thingsquare. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + */ + +package org.contikios.cooja.mspmote.interfaces; + +import org.apache.log4j.Logger; + +import org.contikios.cooja.ClassDescription; +import org.contikios.cooja.Mote; +import org.contikios.cooja.interfaces.CustomDataRadio; + +/** + * @author Fredrik Osterlind + */ +@ClassDescription("TI CC1101 (CC430)") +public class CC430Radio extends CC1101Radio implements CustomDataRadio { + private static Logger logger = Logger.getLogger(CC1101Radio.class); + + public CC430Radio(Mote m) { + super(m); + } + +} diff --git a/tools/cooja/apps/mspsim/src/org/contikios/cooja/mspmote/interfaces/Msp802154Radio.java b/tools/cooja/apps/mspsim/src/org/contikios/cooja/mspmote/interfaces/Msp802154Radio.java index 18dcffb37..31aa30377 100644 --- a/tools/cooja/apps/mspsim/src/org/contikios/cooja/mspmote/interfaces/Msp802154Radio.java +++ b/tools/cooja/apps/mspsim/src/org/contikios/cooja/mspmote/interfaces/Msp802154Radio.java @@ -75,6 +75,7 @@ public class Msp802154Radio extends Radio implements CustomDataRadio { private boolean isInterfered = false; private boolean isTransmitting = false; private boolean isReceiving = false; + private boolean isSynchronized = false; private byte lastOutgoingByte; private byte lastIncomingByte; @@ -91,22 +92,20 @@ public class Msp802154Radio extends Radio implements CustomDataRadio { radio.addRFListener(new RFListener() { int len = 0; - int expLen = 0; - byte[] buffer = new byte[127 + 15]; + int expMpduLen = 0; + byte[] buffer = new byte[127 + 6]; + final private byte[] syncSeq = {0,0,0,0,0x7A}; + public void receivedByte(byte data) { if (!isTransmitting()) { lastEvent = RadioEvent.TRANSMISSION_STARTED; + lastOutgoingPacket = null; isTransmitting = true; len = 0; - /*logger.debug("----- 802.15.4 TRANSMISSION STARTED -----");*/ + expMpduLen = 0; setChanged(); notifyObservers(); - } - - if (len >= buffer.length) { - /* Bad size packet, too large */ - logger.debug("Error: bad size: " + len + ", dropping outgoing byte: " + data); - return; + /*logger.debug("----- 802.15.4 TRANSMISSION STARTED -----");*/ } /* send this byte to all nodes */ @@ -115,31 +114,42 @@ public class Msp802154Radio extends Radio implements CustomDataRadio { setChanged(); notifyObservers(); - buffer[len++] = data; + if (len < buffer.length) + buffer[len] = data; - if (len == 6) { + len ++; + + if (len == 5) { + isSynchronized = true; + for (int i=0; i<5; i++) { + if (buffer[i] != syncSeq[i]) { + // this should never happen, but it happens + logger.error(String.format("Bad outgoing sync sequence %x %x %x %x %x", buffer[0], buffer[1], buffer[2], buffer[3], buffer[4])); + isSynchronized = false; + break; + } + } + } + else if (len == 6) { // System.out.println("## CC2420 Packet of length: " + data + " expected..."); - expLen = data + 6; + expMpduLen = data & 0xFF; + if ((expMpduLen & 0x80) != 0) { + logger.error("Outgoing length field is larger than 127: " + expMpduLen); + } } - if (len == expLen) { - /*logger.debug("----- 802.15.4 CUSTOM DATA TRANSMITTED -----");*/ - + if (((expMpduLen & 0x80) == 0) && len == expMpduLen + 6 && isSynchronized) { lastOutgoingPacket = CC2420RadioPacketConverter.fromCC2420ToCooja(buffer); - lastEvent = RadioEvent.PACKET_TRANSMITTED; - /*logger.debug("----- 802.15.4 PACKET TRANSMITTED -----");*/ - setChanged(); - notifyObservers(); - - /*logger.debug("----- 802.15.4 TRANSMISSION FINISHED -----");*/ - isTransmitting = false; - lastEvent = RadioEvent.TRANSMISSION_FINISHED; - setChanged(); - notifyObservers(); - len = 0; + if (lastOutgoingPacket != null) { + lastEvent = RadioEvent.PACKET_TRANSMITTED; + //logger.debug("----- 802.15.4 PACKET TRANSMITTED -----"); + setChanged(); + notifyObservers(); + } + finishTransmission(); } } - }); + }); /* addRFListener */ radio.addOperatingModeListener(new OperatingModeListener() { public void modeChanged(Chip source, int mode) { @@ -148,7 +158,7 @@ public class Msp802154Radio extends Radio implements CustomDataRadio { setChanged(); notifyObservers(); } else { - radioOff(); + radioOff(); // actually it is a state change, not necessarily to OFF } } }); @@ -163,32 +173,23 @@ public class Msp802154Radio extends Radio implements CustomDataRadio { }); } - private void radioOff() { - /* Radio was turned off during transmission. - * May for example happen if watchdog triggers */ + + private void finishTransmission() + { if (isTransmitting()) { - logger.warn("Turning off radio while transmitting, ending packet prematurely"); - - /* Simulate end of packet */ - lastOutgoingPacket = new RadioPacket() { - public byte[] getPacketData() { - return new byte[0]; - } - }; - - lastEvent = RadioEvent.PACKET_TRANSMITTED; - /*logger.debug("----- 802.15.4 PACKET TRANSMITTED -----");*/ - setChanged(); - notifyObservers(); - - /* Register that transmission ended in radio medium */ - /*logger.debug("----- 802.15.4 TRANSMISSION FINISHED -----");*/ + //logger.debug("----- 802.15.4 TRANSMISSION FINISHED -----"); isTransmitting = false; + isSynchronized = false; lastEvent = RadioEvent.TRANSMISSION_FINISHED; setChanged(); notifyObservers(); } + } + private void radioOff() { + if (isSynchronized) + logger.warn("Turning off radio while transmitting a packet"); + finishTransmission(); lastEvent = RadioEvent.HW_OFF; setChanged(); notifyObservers(); diff --git a/tools/cooja/apps/powertracker/cooja.config b/tools/cooja/apps/powertracker/cooja.config index 70a4f821c..b59c95ad2 100644 --- a/tools/cooja/apps/powertracker/cooja.config +++ b/tools/cooja/apps/powertracker/cooja.config @@ -1,2 +1,2 @@ -org.contikios.cooja.Cooja.PLUGINS = + PowerTracker -org.contikios.cooja.Cooja.JARFILES = + powertracker.jar +org.contikios.cooja.Cooja.PLUGINS = + PowerTracker +org.contikios.cooja.Cooja.JARFILES = + powertracker.jar diff --git a/tools/cooja/config/cooja.html b/tools/cooja/config/cooja.html index b2f44de6f..d51ffc847 100644 --- a/tools/cooja/config/cooja.html +++ b/tools/cooja/config/cooja.html @@ -1,12 +1,12 @@ - - The COOJA Simulator (applet) - - - - - - - - + + The COOJA Simulator (applet) + + + + + + + + diff --git a/tools/cooja/config/cooja.policy b/tools/cooja/config/cooja.policy index 2fd15c8dd..53a9d407d 100644 --- a/tools/cooja/config/cooja.policy +++ b/tools/cooja/config/cooja.policy @@ -1,3 +1,3 @@ -grant { -permission java.security.AllPermission; -}; +grant { +permission java.security.AllPermission; +}; diff --git a/tools/cooja/config/log4j_config.xml b/tools/cooja/config/log4j_config.xml index d3d269bb8..d83b38e0f 100644 --- a/tools/cooja/config/log4j_config.xml +++ b/tools/cooja/config/log4j_config.xml @@ -1,25 +1,25 @@ - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tools/cooja/config/quickhelp.txt b/tools/cooja/config/quickhelp.txt index cc6de2210..a4514c7da 100644 --- a/tools/cooja/config/quickhelp.txt +++ b/tools/cooja/config/quickhelp.txt @@ -1,14 +1,13 @@ -KEYBOARD_SHORTCUTS = \ -Keyboard shortcuts
\ -
Ctrl+N: New simulation\ -
Ctrl+S: Start/pause simulation\ -
Ctrl+R: Reload current simulation. If no simulation exists, the last used simulation config is loaded\ -
Ctrl+Shift+R: Reload current simulation with another random seed\ -
\ -
F1: Toggle quick help - -GETTING_STARTED = \ -Getting started
\ -
\ -
F1: Toggle quick help - +KEYBOARD_SHORTCUTS = \ +Keyboard shortcuts
\ +
Ctrl+N: New simulation\ +
Ctrl+S: Start/pause simulation\ +
Ctrl+R: Reload current simulation. If no simulation exists, the last used simulation config is loaded\ +
Ctrl+Shift+R: Reload current simulation with another random seed\ +
\ +
F1: Toggle quick help + +GETTING_STARTED = \ +Getting started
\ +
\ +
F1: Toggle quick help diff --git a/tools/cooja/config/scripts/basic.js b/tools/cooja/config/scripts/basic.js index ebbacaaca..cd454dea0 100644 --- a/tools/cooja/config/scripts/basic.js +++ b/tools/cooja/config/scripts/basic.js @@ -1,28 +1,28 @@ -/* - * Example Contiki test script (JavaScript). - * A Contiki test script acts on mote output, such as via printf()'s. - * The script may operate on the following variables: - * Mote mote, int id, String msg - */ - -/* Make test automatically fail (timeout) after 100 simulated seconds */ -//TIMEOUT(100000); /* milliseconds. no action at timeout */ -TIMEOUT(100000, log.log("last msg: " + msg + "\n")); /* milliseconds. print last msg at timeout */ - -log.log("first mote output: '" + msg + "'\n"); - -YIELD(); /* wait for another mote output */ - -log.log("second mote output: '" + msg + "'\n"); - -log.log("waiting for hello world output from mote 1\n"); -WAIT_UNTIL(id == 1 && msg.equals("Hello, world")); - -write(mote, "Hello, mote\n"); /* Write to mote serial port */ - -GENERATE_MSG(15000, "continue"); -YIELD_THEN_WAIT_UNTIL(msg.equals("continue")); - -log.log("ok, reporting success now\n"); -log.testOK(); /* Report test success and quit */ -//log.testFailed(); /* Report test failure and quit */ +/* + * Example Contiki test script (JavaScript). + * A Contiki test script acts on mote output, such as via printf()'s. + * The script may operate on the following variables: + * Mote mote, int id, String msg + */ + +/* Make test automatically fail (timeout) after 100 simulated seconds */ +//TIMEOUT(100000); /* milliseconds. no action at timeout */ +TIMEOUT(100000, log.log("last msg: " + msg + "\n")); /* milliseconds. print last msg at timeout */ + +log.log("first mote output: '" + msg + "'\n"); + +YIELD(); /* wait for another mote output */ + +log.log("second mote output: '" + msg + "'\n"); + +log.log("waiting for hello world output from mote 1\n"); +WAIT_UNTIL(id == 1 && msg.equals("Hello, world")); + +write(mote, "Hello, mote\n"); /* Write to mote serial port */ + +GENERATE_MSG(15000, "continue"); +YIELD_THEN_WAIT_UNTIL(msg.equals("continue")); + +log.log("ok, reporting success now\n"); +log.testOK(); /* Report test success and quit */ +//log.testFailed(); /* Report test failure and quit */ diff --git a/tools/cooja/config/scripts/helloworld.js b/tools/cooja/config/scripts/helloworld.js index 5f6f617b5..6d82a7352 100644 --- a/tools/cooja/config/scripts/helloworld.js +++ b/tools/cooja/config/scripts/helloworld.js @@ -1,11 +1,11 @@ -/* - * Example Contiki test script (JavaScript). - * A Contiki test script acts on mote output, such as via printf()'s. - * The script may operate on the following variables: - * Mote mote, int id, String msg - */ - -TIMEOUT(2000, log.log("last message: " + msg + "\n")); - -WAIT_UNTIL(msg.equals('Hello, world')); -log.testOK(); +/* + * Example Contiki test script (JavaScript). + * A Contiki test script acts on mote output, such as via printf()'s. + * The script may operate on the following variables: + * Mote mote, int id, String msg + */ + +TIMEOUT(2000, log.log("last message: " + msg + "\n")); + +WAIT_UNTIL(msg.equals('Hello, world')); +log.testOK(); diff --git a/tools/cooja/config/scripts/log_all.js b/tools/cooja/config/scripts/log_all.js index b0c20069d..d4eb6233f 100644 --- a/tools/cooja/config/scripts/log_all.js +++ b/tools/cooja/config/scripts/log_all.js @@ -1,13 +1,13 @@ -/* - * Example Contiki test script (JavaScript). - * A Contiki test script acts on mote output, such as via printf()'s. - * The script may operate on the following variables: - * Mote mote, int id, String msg - */ - -TIMEOUT(60000); - -while (true) { - log.log(time + ":" + id + ":" + msg + "\n"); - YIELD(); -} +/* + * Example Contiki test script (JavaScript). + * A Contiki test script acts on mote output, such as via printf()'s. + * The script may operate on the following variables: + * Mote mote, int id, String msg + */ + +TIMEOUT(60000); + +while (true) { + log.log(time + ":" + id + ":" + msg + "\n"); + YIELD(); +} diff --git a/tools/cooja/config/scripts/plugins.js b/tools/cooja/config/scripts/plugins.js index 664d14030..4c205aabb 100644 --- a/tools/cooja/config/scripts/plugins.js +++ b/tools/cooja/config/scripts/plugins.js @@ -1,66 +1,66 @@ -/* - * Example showing how to reference and interact with surrounding - * COOJA plugins from a test script. - * The code looks up three common plugins and, if found, performs some - * simple plugin-specific task. - */ - -/* Started plugins are available from the GUI object */ - -TIMEOUT(60000); - -counter=0; -plugins=0; - -timeout_function = function my_fun() { - log.log("Script timed out.\n"); - log.log(plugins + " plugins were referenced\n"); -} - -while (counter<10) { - counter++; - - GENERATE_MSG(1000, "wait"); - YIELD_THEN_WAIT_UNTIL(msg.equals("wait")); - - /* Toggle Log Listener filter */ - plugin = mote.getSimulation().getCooja().getStartedPlugin("org.contikios.cooja.plugins.LogListener"); - if (plugin != null) { - plugins++; - log.log("LogListener: Setting filter: " + plugin.getFilter() + "\n"); - if (plugin.getFilter() == null || !plugin.getFilter().equals("Contiki")) { - plugin.setFilter("Contiki"); - } else { - plugin.setFilter("MAC"); - } - } - - GENERATE_MSG(1000, "wait"); - YIELD_THEN_WAIT_UNTIL(msg.equals("wait")); - - /* Extract PowerTracker statistics */ - plugin = mote.getSimulation().getCooja().getStartedPlugin("PowerTracker"); - if (plugin != null) { - plugins++; - stats = plugin.radioStatistics(); - if (stats.length() > 40) { - /* Stripping */ - stats = stats.substring(0, 40) + "..."; - } - log.log("PowerTracker: Extracted statistics:\n" + stats + "\n"); - } else { - log.log("No PowerTracker plugin\n"); - } - - GENERATE_MSG(1000, "wait"); - YIELD_THEN_WAIT_UNTIL(msg.equals("wait")); - - /* Select time in Radio Logger */ - plugin = mote.getSimulation().getCooja().getStartedPlugin("org.contikios.cooja.plugins.RadioLogger"); - if (plugin != null) { - plugins++; - log.log("RadioLogger: Showing logged radio packet at mid simulation\n"); - plugin.trySelectTime(time/2); - } - -} +/* + * Example showing how to reference and interact with surrounding + * COOJA plugins from a test script. + * The code looks up three common plugins and, if found, performs some + * simple plugin-specific task. + */ + +/* Started plugins are available from the GUI object */ + +TIMEOUT(60000); + +counter=0; +plugins=0; + +timeout_function = function my_fun() { + log.log("Script timed out.\n"); + log.log(plugins + " plugins were referenced\n"); +} + +while (counter<10) { + counter++; + + GENERATE_MSG(1000, "wait"); + YIELD_THEN_WAIT_UNTIL(msg.equals("wait")); + + /* Toggle Log Listener filter */ + plugin = mote.getSimulation().getCooja().getStartedPlugin("org.contikios.cooja.plugins.LogListener"); + if (plugin != null) { + plugins++; + log.log("LogListener: Setting filter: " + plugin.getFilter() + "\n"); + if (plugin.getFilter() == null || !plugin.getFilter().equals("Contiki")) { + plugin.setFilter("Contiki"); + } else { + plugin.setFilter("MAC"); + } + } + + GENERATE_MSG(1000, "wait"); + YIELD_THEN_WAIT_UNTIL(msg.equals("wait")); + + /* Extract PowerTracker statistics */ + plugin = mote.getSimulation().getCooja().getStartedPlugin("PowerTracker"); + if (plugin != null) { + plugins++; + stats = plugin.radioStatistics(); + if (stats.length() > 40) { + /* Stripping */ + stats = stats.substring(0, 40) + "..."; + } + log.log("PowerTracker: Extracted statistics:\n" + stats + "\n"); + } else { + log.log("No PowerTracker plugin\n"); + } + + GENERATE_MSG(1000, "wait"); + YIELD_THEN_WAIT_UNTIL(msg.equals("wait")); + + /* Select time in Radio Logger */ + plugin = mote.getSimulation().getCooja().getStartedPlugin("org.contikios.cooja.plugins.RadioLogger"); + if (plugin != null) { + plugins++; + log.log("RadioLogger: Showing logged radio packet at mid simulation\n"); + plugin.trySelectTime(time/2); + } + +} diff --git a/tools/cooja/config/scripts/shell.js b/tools/cooja/config/scripts/shell.js index 6dc1a8fdb..6590aa481 100644 --- a/tools/cooja/config/scripts/shell.js +++ b/tools/cooja/config/scripts/shell.js @@ -1,27 +1,27 @@ -/* - * Example Contiki test script (JavaScript). - * A Contiki test script acts on mote output, such as via printf()'s. - * The script may operate on the following variables: - * Mote mote, int id, String msg - */ - -/* Wait until node has booted */ -WAIT_UNTIL(msg.startsWith('Starting')); -log.log("Mote started\n"); -mymote = mote; /* store mote reference */ - -/* Wait 3 seconds (3000ms) */ -GENERATE_MSG(3000, "continue"); -YIELD_THEN_WAIT_UNTIL(msg.equals("continue")); - -/* Write command to serial port */ -log.log("Writing 'ls' to mote serial port\n"); -write(mymote, "ls"); - -/* Read replies */ -while (true) { - YIELD(); - if (mote == mymote) { - log.log("Mote replied: " + msg + "\n"); - } +/* + * Example Contiki test script (JavaScript). + * A Contiki test script acts on mote output, such as via printf()'s. + * The script may operate on the following variables: + * Mote mote, int id, String msg + */ + +/* Wait until node has booted */ +WAIT_UNTIL(msg.startsWith('Starting')); +log.log("Mote started\n"); +mymote = mote; /* store mote reference */ + +/* Wait 3 seconds (3000ms) */ +GENERATE_MSG(3000, "continue"); +YIELD_THEN_WAIT_UNTIL(msg.equals("continue")); + +/* Write command to serial port */ +log.log("Writing 'ls' to mote serial port\n"); +write(mymote, "ls"); + +/* Read replies */ +while (true) { + YIELD(); + if (mote == mymote) { + log.log("Mote replied: " + msg + "\n"); + } } \ No newline at end of file diff --git a/tools/cooja/examples/jni_test/README.md b/tools/cooja/examples/jni_test/README.md index 145d789ab..99b542c8f 100644 --- a/tools/cooja/examples/jni_test/README.md +++ b/tools/cooja/examples/jni_test/README.md @@ -1,20 +1,20 @@ -_The JNI tests have been replaced by the Cooja configuration wizard._ - -The JNI tests assisted in configuring Cooja for compiling and linking Java -Native Interface (JNI) enabled Contiki libraries. Such Contiki libraries are -used by Cooja's Contiki Motes: motes simulated at the operating system -abstraction level. - -The new configuration wizard is started from inside Cooja, and exercises the -same functionality as the JNI tests. In contrast, the wizard is directly -connected to the current Cooja configuration, removing the need to migrate the -configuration between JNI tests and Cooja. - -To start the wizard: - - cd tools/cooja - ant run # Start COOJA - -Menu > Settings > Compiler configuration wizard - --- Fredrik Osterlind, fros@sics.se, March 2009 +_The JNI tests have been replaced by the Cooja configuration wizard._ + +The JNI tests assisted in configuring Cooja for compiling and linking Java +Native Interface (JNI) enabled Contiki libraries. Such Contiki libraries are +used by Cooja's Contiki Motes: motes simulated at the operating system +abstraction level. + +The new configuration wizard is started from inside Cooja, and exercises the +same functionality as the JNI tests. In contrast, the wizard is directly +connected to the current Cooja configuration, removing the need to migrate the +configuration between JNI tests and Cooja. + +To start the wizard: + + cd tools/cooja + ant run # Start COOJA + +Menu > Settings > Compiler configuration wizard + +-- Fredrik Osterlind, fros@sics.se, March 2009 diff --git a/tools/cooja/java/org/contikios/cooja/Cooja.java b/tools/cooja/java/org/contikios/cooja/Cooja.java index 0040e7a31..a4c1be53d 100644 --- a/tools/cooja/java/org/contikios/cooja/Cooja.java +++ b/tools/cooja/java/org/contikios/cooja/Cooja.java @@ -3480,7 +3480,9 @@ public class Cooja extends Observable { } XMLOutputter outputter = new XMLOutputter(); - outputter.setFormat(Format.getPrettyFormat()); + Format fmt = Format.getPrettyFormat(); + fmt.setLineSeparator("\n"); + outputter.setFormat(fmt); outputter.output(doc, out); out.close(); diff --git a/tools/cooja/java/org/contikios/cooja/SafeRandom.java b/tools/cooja/java/org/contikios/cooja/SafeRandom.java index 5dee9c1be..07c46ff1e 100644 --- a/tools/cooja/java/org/contikios/cooja/SafeRandom.java +++ b/tools/cooja/java/org/contikios/cooja/SafeRandom.java @@ -36,26 +36,39 @@ import java.util.Random; * This ensures that the functions of the random number generator are * only called by the the thread initializing a simulation or the * simulation thread itself. - * Rationale: By allowing another thread to use the random number - * generator concurrency is intruduced, thus it can not be guaranteed - * that simulations are reproduceable. + * Rationale: By allowing another thread to use the random number + * generator concurrency is introduced, thus it can not be guaranteed + * that simulations are reproducible. * */ public class SafeRandom extends Random { Simulation sim = null; Thread initThread = null; + Boolean simStarted = false; private void assertSimThread() { - // It we are in the simulation thread everything is fine (the default) // sim can be null, because setSeed is called by the super-constructor. - if(sim != null && !sim.isSimulationThread()) { - // The thread initializing the simulation might differ from the simulation thread. - // If they are the same that is ok, too. + if(sim == null) return; + + // If we are in the simulation thread, everything is fine (the default) + if(sim.isSimulationThread()) { + simStarted = true; + return; + } + + // Simulation has not started yet. Allow one initialisation thread. + if(!simStarted) { if(initThread == null) initThread = Thread.currentThread(); if(Thread.currentThread() == initThread ) return; - throw new RuntimeException("A random-function was not called from the simulation thread. This can break things!"); } + + //This is done via the GUI - reproducibility is lost anyway! + if(javax.swing.SwingUtilities.isEventDispatchThread()) return; + + // Some other threads seems to access the PNRG. This must not happen. + throw new RuntimeException("A random-function was not called from the simulation thread. This can break things!"); + } public SafeRandom(Simulation sim) { diff --git a/tools/cooja/java/org/contikios/cooja/contikimote/interfaces/ContikiCFS.java b/tools/cooja/java/org/contikios/cooja/contikimote/interfaces/ContikiCFS.java index 5a8dbb41e..f1985b6cc 100644 --- a/tools/cooja/java/org/contikios/cooja/contikimote/interfaces/ContikiCFS.java +++ b/tools/cooja/java/org/contikios/cooja/contikimote/interfaces/ContikiCFS.java @@ -120,6 +120,7 @@ public class ContikiCFS extends MoteInterface implements ContikiMoteInterface, P } moteMem.setByteArray("simCFSData", data); + moteMem.setIntValueOf("simCFSSize", data.length); return true; } @@ -129,7 +130,8 @@ public class ContikiCFS extends MoteInterface implements ContikiMoteInterface, P * @return Filesystem data */ public byte[] getFilesystemData() { - return moteMem.getByteArray("simCFSData", FILESYSTEM_SIZE); + int size = moteMem.getIntValueOf("simCFSSize"); + return moteMem.getByteArray("simCFSData", size); } /** diff --git a/tools/cooja/java/org/contikios/cooja/contikimote/interfaces/ContikiRadio.java b/tools/cooja/java/org/contikios/cooja/contikimote/interfaces/ContikiRadio.java index 5502b9a8a..bbc4a2abd 100644 --- a/tools/cooja/java/org/contikios/cooja/contikimote/interfaces/ContikiRadio.java +++ b/tools/cooja/java/org/contikios/cooja/contikimote/interfaces/ContikiRadio.java @@ -48,7 +48,7 @@ import org.contikios.cooja.interfaces.Position; import org.contikios.cooja.interfaces.Radio; import org.contikios.cooja.mote.memory.VarMemory; import org.contikios.cooja.radiomediums.UDGM; - +import org.contikios.cooja.util.CCITT_CRC; /** * Packet radio transceiver mote interface. * @@ -200,7 +200,7 @@ public class ContikiRadio extends Radio implements ContikiMoteInterface, PolledA packetToMote = null; myMoteMemory.setIntValueOf("simInSize", 0); } else { - myMoteMemory.setIntValueOf("simInSize", packetToMote.getPacketData().length); + myMoteMemory.setIntValueOf("simInSize", packetToMote.getPacketData().length - 2); myMoteMemory.setByteArray("simInDataBuffer", packetToMote.getPacketData()); } @@ -330,7 +330,7 @@ public class ContikiRadio extends Radio implements ContikiMoteInterface, PolledA /* New transmission */ int size = myMoteMemory.getIntValueOf("simOutSize"); if (!isTransmitting && size > 0) { - packetFromMote = new COOJARadioPacket(myMoteMemory.getByteArray("simOutDataBuffer", size)); + packetFromMote = new COOJARadioPacket(myMoteMemory.getByteArray("simOutDataBuffer", size + 2)); if (packetFromMote.getPacketData() == null || packetFromMote.getPacketData().length == 0) { logger.warn("Skipping zero sized Contiki packet (no buffer)"); @@ -339,6 +339,15 @@ public class ContikiRadio extends Radio implements ContikiMoteInterface, PolledA return; } + byte[] data = packetFromMote.getPacketData(); + CCITT_CRC txCrc = new CCITT_CRC(); + txCrc.setCRC(0); + for (int i = 0; i < size; i++) { + txCrc.addBitrev(data[i]); + } + data[size] = (byte)txCrc.getCRCHi(); + data[size + 1] = (byte)txCrc.getCRCLow(); + isTransmitting = true; /* Calculate transmission duration (us) */ diff --git a/tools/cooja/java/org/contikios/cooja/interfaces/DirectionalAntennaRadio.java b/tools/cooja/java/org/contikios/cooja/interfaces/DirectionalAntennaRadio.java index 59373fc68..207c344f4 100644 --- a/tools/cooja/java/org/contikios/cooja/interfaces/DirectionalAntennaRadio.java +++ b/tools/cooja/java/org/contikios/cooja/interfaces/DirectionalAntennaRadio.java @@ -1,65 +1,65 @@ -/* - * Copyright (c) 2011, Swedish Institute of Computer Science. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. 2. Redistributions in - * binary form must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. 3. Neither the name of the - * Institute nor the names of its contributors may be used to endorse or promote - * products derived from this software without specific prior written - * permission. - * - * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ - -package org.contikios.cooja.interfaces; - -/** - * Directional antenna. - * - * @see MRM - * @author Fredrik Osterlind - */ -public interface DirectionalAntennaRadio { - - /** - * @return Current direction (radians). Typically direction 0 has the maximum - * relative gain. - * - * @see #getRelativeGain(double) - */ - public double getDirection(); - - /** - * Relative gain (dB) as compared to an omnidirectional antenna. - * Note that the given angle is relative to the current direction! - * - * @see #getDirection() - * @param radians Angle relative to current direction - * @param distance Distance from antenna - * @return - */ - public double getRelativeGain(double radians, double distance); - - public void addDirectionChangeListener(DirectionChangeListener l); - public void removeDirectionChangeListener(DirectionChangeListener l); - - public interface DirectionChangeListener { - public void newDirection(DirectionalAntennaRadio radio, double direction); - } - -} +/* + * Copyright (c) 2011, Swedish Institute of Computer Science. All rights + * reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. 2. Redistributions in + * binary form must reproduce the above copyright notice, this list of + * conditions and the following disclaimer in the documentation and/or other + * materials provided with the distribution. 3. Neither the name of the + * Institute nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written + * permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +package org.contikios.cooja.interfaces; + +/** + * Directional antenna. + * + * @see MRM + * @author Fredrik Osterlind + */ +public interface DirectionalAntennaRadio { + + /** + * @return Current direction (radians). Typically direction 0 has the maximum + * relative gain. + * + * @see #getRelativeGain(double) + */ + public double getDirection(); + + /** + * Relative gain (dB) as compared to an omnidirectional antenna. + * Note that the given angle is relative to the current direction! + * + * @see #getDirection() + * @param radians Angle relative to current direction + * @param distance Distance from antenna + * @return + */ + public double getRelativeGain(double radians, double distance); + + public void addDirectionChangeListener(DirectionChangeListener l); + public void removeDirectionChangeListener(DirectionChangeListener l); + + public interface DirectionChangeListener { + public void newDirection(DirectionalAntennaRadio radio, double direction); + } + +} diff --git a/tools/cooja/java/org/contikios/cooja/interfaces/NoiseSourceRadio.java b/tools/cooja/java/org/contikios/cooja/interfaces/NoiseSourceRadio.java index 6ceb35b55..45b7760c4 100644 --- a/tools/cooja/java/org/contikios/cooja/interfaces/NoiseSourceRadio.java +++ b/tools/cooja/java/org/contikios/cooja/interfaces/NoiseSourceRadio.java @@ -1,56 +1,56 @@ -/* - * Copyright (c) 2011, Swedish Institute of Computer Science. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. 2. Redistributions in - * binary form must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. 3. Neither the name of the - * Institute nor the names of its contributors may be used to endorse or promote - * products derived from this software without specific prior written - * permission. - * - * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ - -package org.contikios.cooja.interfaces; - -/** - * The noise source radio is used to simulate ambient background noise or - * point-sources of external interference (e.g. Wifi basestations). - * - * Note that interference generated from these radios are different from - * transmissions; they will not appear in the radio logger but may still - * hinder or interfere with ongoing transmissions. - * - * Noise source radios require significant processing resources in comparison - * to only transmission radios. - * - * COOJA's radio mediums may or may not choose to respect noise source radios. - * - * @see MRM - * @author Fredrik Osterlind - */ -public interface NoiseSourceRadio { - public int getNoiseLevel(); - - public void addNoiseLevelListener(NoiseLevelListener l); - public void removeNoiseLevelListener(NoiseLevelListener l); - - public interface NoiseLevelListener { - public void noiseLevelChanged(NoiseSourceRadio radio, int signal); - } -} +/* + * Copyright (c) 2011, Swedish Institute of Computer Science. All rights + * reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. 2. Redistributions in + * binary form must reproduce the above copyright notice, this list of + * conditions and the following disclaimer in the documentation and/or other + * materials provided with the distribution. 3. Neither the name of the + * Institute nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written + * permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +package org.contikios.cooja.interfaces; + +/** + * The noise source radio is used to simulate ambient background noise or + * point-sources of external interference (e.g. Wifi basestations). + * + * Note that interference generated from these radios are different from + * transmissions; they will not appear in the radio logger but may still + * hinder or interfere with ongoing transmissions. + * + * Noise source radios require significant processing resources in comparison + * to only transmission radios. + * + * COOJA's radio mediums may or may not choose to respect noise source radios. + * + * @see MRM + * @author Fredrik Osterlind + */ +public interface NoiseSourceRadio { + public int getNoiseLevel(); + + public void addNoiseLevelListener(NoiseLevelListener l); + public void removeNoiseLevelListener(NoiseLevelListener l); + + public interface NoiseLevelListener { + public void noiseLevelChanged(NoiseSourceRadio radio, int signal); + } +} diff --git a/tools/cooja/java/org/contikios/cooja/motes/AbstractApplicationMote.java b/tools/cooja/java/org/contikios/cooja/motes/AbstractApplicationMote.java index 98de78327..fd16d37a3 100644 --- a/tools/cooja/java/org/contikios/cooja/motes/AbstractApplicationMote.java +++ b/tools/cooja/java/org/contikios/cooja/motes/AbstractApplicationMote.java @@ -76,7 +76,8 @@ public abstract class AbstractApplicationMote extends AbstractWakeupMote impleme if (radio.getLastPacketReceived() != null) receivedPacket(radio.getLastPacketReceived()); } else if (radio.getLastEvent() == Radio.RadioEvent.TRANSMISSION_FINISHED) { - sentPacket(radio.getLastPacketTransmitted()); + if (radio.getLastPacketTransmitted() != null) + sentPacket(radio.getLastPacketTransmitted()); } } }; diff --git a/tools/cooja/java/org/contikios/cooja/plugins/RadioLogger.java b/tools/cooja/java/org/contikios/cooja/plugins/RadioLogger.java index 84fc41737..713390212 100644 --- a/tools/cooja/java/org/contikios/cooja/plugins/RadioLogger.java +++ b/tools/cooja/java/org/contikios/cooja/plugins/RadioLogger.java @@ -517,10 +517,12 @@ public class RadioLogger extends VisPlugin { return; } final RadioConnectionLog loggedConn = new RadioConnectionLog(); + loggedConn.packet = conn.getSource().getLastPacketTransmitted(); + if (loggedConn.packet == null) + return; loggedConn.startTime = conn.getStartTime(); loggedConn.endTime = simulation.getSimulationTime(); loggedConn.connection = conn; - loggedConn.packet = conn.getSource().getLastPacketTransmitted(); java.awt.EventQueue.invokeLater(new Runnable() { @Override public void run() { diff --git a/tools/cooja/java/org/contikios/cooja/plugins/analyzers/PacketAnalyzer.java b/tools/cooja/java/org/contikios/cooja/plugins/analyzers/PacketAnalyzer.java index 7f4002960..28a548e3c 100644 --- a/tools/cooja/java/org/contikios/cooja/plugins/analyzers/PacketAnalyzer.java +++ b/tools/cooja/java/org/contikios/cooja/plugins/analyzers/PacketAnalyzer.java @@ -27,7 +27,7 @@ public abstract class PacketAnalyzer { public Packet(byte[] data, int level) { this.level = level; - this.data = data; + this.data = data.clone(); this.size = data.length; } diff --git a/tools/cooja/java/org/contikios/cooja/util/CCITT_CRC.java b/tools/cooja/java/org/contikios/cooja/util/CCITT_CRC.java new file mode 100644 index 000000000..3574eb574 --- /dev/null +++ b/tools/cooja/java/org/contikios/cooja/util/CCITT_CRC.java @@ -0,0 +1,88 @@ +/** + * Copyright (c) 2008, Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of MSPSim. + * + * ----------------------------------------------------------------- + * + * Author : Joakim Eriksson + */ + +package org.contikios.cooja.util; + +/* basic CRC-CCITT code */ +public class CCITT_CRC { + int crc; + + public int getCRC() { + return crc; + } + + /* this will only work with zero... */ + public void setCRC(int val) { + crc = val; + } + + public void clr() { + crc = 0xffff; + } + + public void addBitrev(int data) { + add(bitrev(data)); + } + + public int getCRCLow() { + return bitrev(crc & 0xff); + } + + public int getCRCHi() { + return bitrev(crc >> 8); + } + + public int add(int data) { + int newCrc = ((crc >> 8) & 0xff) | (crc << 8) & 0xffff; + newCrc ^= (data & 0xff); + newCrc ^= (newCrc & 0xff) >> 4; + newCrc ^= (newCrc << 12) & 0xffff; + newCrc ^= (newCrc & 0xff) << 5; + crc = newCrc & 0xffff; + return crc; + } + + public int getCRCBitrev() { + return getCRCLow() + (getCRCHi() << 8); + } + + public static final String hex = "0123456789abcdef"; + + private static int bitrev(int data) { + return ((data << 7) & 0x80) | ((data << 5) & 0x40) | + (data << 3) & 0x20 | (data << 1) & 0x10 | + (data >> 7) & 0x01 | (data >> 5) & 0x02 | + (data >> 3) & 0x04 | (data >> 1) & 0x08; + } +} diff --git a/tools/cooja/java/org/contikios/cooja/util/MoteSerialSocketConnection.java b/tools/cooja/java/org/contikios/cooja/util/MoteSerialSocketConnection.java index c86c03769..75e796c48 100644 --- a/tools/cooja/java/org/contikios/cooja/util/MoteSerialSocketConnection.java +++ b/tools/cooja/java/org/contikios/cooja/util/MoteSerialSocketConnection.java @@ -1,190 +1,190 @@ -/* - * Copyright (c) 2011, Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the Institute nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -package org.contikios.cooja.util; - -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; -import java.net.Socket; -import java.util.ArrayList; -import java.util.Observable; -import java.util.Observer; - -import org.apache.log4j.Logger; - -import org.contikios.cooja.Mote; -import org.contikios.cooja.interfaces.SerialPort; - -/** - * Help class for forwarding serial data between a mote and a socket. - * - * @author Fredrik Osterlind - */ -public class MoteSerialSocketConnection { - private static final long serialVersionUID = 1L; - private static Logger logger = Logger.getLogger(MoteSerialSocketConnection.class); - - private boolean isConnected = false; - public int toMote = 0, toSocket = 0; - - private SerialPort motePort; - private Observer moteObserver; - - private Socket socket; - private DataInputStream socketIn; - private DataOutputStream socketOut; - - private ArrayList listeners = null; - - public MoteSerialSocketConnection(Mote mote, String server, int serverPort) - throws IOException { - isConnected = true; - - /* Simulated -> socket */ - motePort = (SerialPort) mote.getInterfaces().getLog(); - motePort.addSerialDataObserver(moteObserver = new Observer() { - public void update(Observable obs, Object obj) { - try { - if (socketOut == null) { - return; - } - socketOut.write(motePort.getLastSerialData()); - socketOut.flush(); - toSocket++; - - if (listeners != null) { - for (MoteSerialSocketConnectionListener dl: listeners) { - dl.dataTransferred(MoteSerialSocketConnection.this, toMote, toSocket, motePort.getLastSerialData()); - } - } - } catch (IOException e) { - e.printStackTrace(); - logger.fatal("Write to socket error: " + e.getMessage(), e); - cleanup(); - } - } - }); - - /* Socket -> simulated */ - socket = new Socket(server, serverPort); - socketIn = new DataInputStream(socket.getInputStream()); - socketOut = new DataOutputStream(socket.getOutputStream()); - socketOut.flush(); - Thread socketThread = new Thread(new Runnable() { - public void run() { - int numRead = 0; - byte[] data = new byte[1024]; - while (true) { - numRead = -1; - try { - numRead = socketIn.read(data); - } catch (IOException e) { - e.printStackTrace(); - return; - } - - if (numRead >= 0) { - for (int i = 0; i < numRead; i++) { - toMote ++; - motePort.writeByte(data[i]); - if (listeners != null) { - for (MoteSerialSocketConnectionListener dl: listeners) { - dl.dataTransferred(MoteSerialSocketConnection.this, toMote, toSocket, data[i]); - } - } - } - - } else { - logger.fatal("Incoming data thread shut down"); - cleanup(); - break; - } - } - } - }); - socketThread.start(); - } - - public boolean isConnected() { - return isConnected; - } - - public void cleanup() { - if (!isConnected) { - return; - } - isConnected = false; - - motePort.deleteSerialDataObserver(moteObserver); - - try { - if (socket != null) { - socket.close(); - socket = null; - } - } catch (IOException e1) { - } - try { - if (socketIn != null) { - socketIn.close(); - socketIn = null; - } - } catch (IOException e) { - } - try { - if (socketOut != null) { - socketOut.close(); - socketOut = null; - } - } catch (IOException e) { - } - - if (listeners != null) { - for (MoteSerialSocketConnectionListener dl: listeners) { - dl.wasDisconnected(MoteSerialSocketConnection.this); - } - listeners = null; - } - } - - public void addListener(MoteSerialSocketConnectionListener l) { - if (listeners == null) { - listeners = new ArrayList(); - } - - listeners.add(l); - } - - public interface MoteSerialSocketConnectionListener { - public void wasDisconnected(MoteSerialSocketConnection s); - public void dataTransferred(MoteSerialSocketConnection s, int toMote, int toSocket, byte data); - } - +/* + * Copyright (c) 2011, Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +package org.contikios.cooja.util; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.net.Socket; +import java.util.ArrayList; +import java.util.Observable; +import java.util.Observer; + +import org.apache.log4j.Logger; + +import org.contikios.cooja.Mote; +import org.contikios.cooja.interfaces.SerialPort; + +/** + * Help class for forwarding serial data between a mote and a socket. + * + * @author Fredrik Osterlind + */ +public class MoteSerialSocketConnection { + private static final long serialVersionUID = 1L; + private static Logger logger = Logger.getLogger(MoteSerialSocketConnection.class); + + private boolean isConnected = false; + public int toMote = 0, toSocket = 0; + + private SerialPort motePort; + private Observer moteObserver; + + private Socket socket; + private DataInputStream socketIn; + private DataOutputStream socketOut; + + private ArrayList listeners = null; + + public MoteSerialSocketConnection(Mote mote, String server, int serverPort) + throws IOException { + isConnected = true; + + /* Simulated -> socket */ + motePort = (SerialPort) mote.getInterfaces().getLog(); + motePort.addSerialDataObserver(moteObserver = new Observer() { + public void update(Observable obs, Object obj) { + try { + if (socketOut == null) { + return; + } + socketOut.write(motePort.getLastSerialData()); + socketOut.flush(); + toSocket++; + + if (listeners != null) { + for (MoteSerialSocketConnectionListener dl: listeners) { + dl.dataTransferred(MoteSerialSocketConnection.this, toMote, toSocket, motePort.getLastSerialData()); + } + } + } catch (IOException e) { + e.printStackTrace(); + logger.fatal("Write to socket error: " + e.getMessage(), e); + cleanup(); + } + } + }); + + /* Socket -> simulated */ + socket = new Socket(server, serverPort); + socketIn = new DataInputStream(socket.getInputStream()); + socketOut = new DataOutputStream(socket.getOutputStream()); + socketOut.flush(); + Thread socketThread = new Thread(new Runnable() { + public void run() { + int numRead = 0; + byte[] data = new byte[1024]; + while (true) { + numRead = -1; + try { + numRead = socketIn.read(data); + } catch (IOException e) { + e.printStackTrace(); + return; + } + + if (numRead >= 0) { + for (int i = 0; i < numRead; i++) { + toMote ++; + motePort.writeByte(data[i]); + if (listeners != null) { + for (MoteSerialSocketConnectionListener dl: listeners) { + dl.dataTransferred(MoteSerialSocketConnection.this, toMote, toSocket, data[i]); + } + } + } + + } else { + logger.fatal("Incoming data thread shut down"); + cleanup(); + break; + } + } + } + }); + socketThread.start(); + } + + public boolean isConnected() { + return isConnected; + } + + public void cleanup() { + if (!isConnected) { + return; + } + isConnected = false; + + motePort.deleteSerialDataObserver(moteObserver); + + try { + if (socket != null) { + socket.close(); + socket = null; + } + } catch (IOException e1) { + } + try { + if (socketIn != null) { + socketIn.close(); + socketIn = null; + } + } catch (IOException e) { + } + try { + if (socketOut != null) { + socketOut.close(); + socketOut = null; + } + } catch (IOException e) { + } + + if (listeners != null) { + for (MoteSerialSocketConnectionListener dl: listeners) { + dl.wasDisconnected(MoteSerialSocketConnection.this); + } + listeners = null; + } + } + + public void addListener(MoteSerialSocketConnectionListener l) { + if (listeners == null) { + listeners = new ArrayList(); + } + + listeners.add(l); + } + + public interface MoteSerialSocketConnectionListener { + public void wasDisconnected(MoteSerialSocketConnection s); + public void dataTransferred(MoteSerialSocketConnection s, int toMote, int toSocket, byte data); + } + } \ No newline at end of file diff --git a/tools/cooja/lib/JSYNTAXPANE_LICENSE b/tools/cooja/lib/JSYNTAXPANE_LICENSE index 01f0c7c35..a3ac59567 100644 --- a/tools/cooja/lib/JSYNTAXPANE_LICENSE +++ b/tools/cooja/lib/JSYNTAXPANE_LICENSE @@ -1,4 +1,4 @@ -Downloaded from http://code.google.com/p/jsyntaxpane/. - -Apache License 2.0: -http://www.apache.org/licenses/LICENSE-2.0 +Downloaded from http://code.google.com/p/jsyntaxpane/. + +Apache License 2.0: +http://www.apache.org/licenses/LICENSE-2.0 diff --git a/tools/jn516x/JennicModuleProgrammer b/tools/jn516x/JennicModuleProgrammer new file mode 100644 index 000000000..eef29c284 Binary files /dev/null and b/tools/jn516x/JennicModuleProgrammer differ diff --git a/tools/jn516x/Makefile b/tools/jn516x/Makefile new file mode 100644 index 000000000..be3caa44b --- /dev/null +++ b/tools/jn516x/Makefile @@ -0,0 +1,25 @@ +ifndef HOST_OS + ifeq ($(OS),Windows_NT) + HOST_OS := Windows + else + HOST_OS := $(shell uname) + endif +endif + +ifeq ($(HOST_OS),Windows) + SERIALDUMP = serialdump-windows +endif + +ifeq ($(HOST_OS),Darwin) + SERIALDUMP = serialdump-macos +endif + +ifndef SERIALDUMP + # Assume Linux + SERIALDUMP = serialdump-linux +endif + +all: $(SERIALDUMP) + +$(SERIALDUMP): serialdump.c + $(CC) -O2 -o $@ $< diff --git a/tools/jn516x/mote-list.py b/tools/jn516x/mote-list.py new file mode 100644 index 000000000..170b04fdb --- /dev/null +++ b/tools/jn516x/mote-list.py @@ -0,0 +1,94 @@ +#!/usr/bin/python + +# Copyright (c) 2015, SICS Swedish ICT +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# 3. Neither the name of the Institute nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +# SUCH DAMAGE. +# +# This file is part of the Contiki operating system. +# + +import sys, os, platform +import multiprocessing + +# detect the operating system +sysname = platform.system() +if "Linux" in sysname: + IS_WINDOWS = False + FLASH_PROGRAMMER_DEFAULT_PATH = "/usr/jn-toolchain/tools/flashprogrammer/JennicModuleProgrammer" + import motelist_lib.linux_motelist_impl as motelist_impl # @UnusedImport + +elif ("Win" in sysname) or ("NT" in sysname): + IS_WINDOWS = True + FLASH_PROGRAMMER_DEFAULT_PATH = 'C:\\NXP\\bstudio_nxp\\sdk\\JN-SW-4163\\Tools\\flashprogrammer\\FlashCLI.exe' + import motelist_lib.windows_motelist_impl as motelist_impl # @Reimport @UnusedImport + +else: + print ("OS ('{}') is not supported".format(os.name)) + + +def main(): + # use the default location + flash_programmer = FLASH_PROGRAMMER_DEFAULT_PATH + if len(sys.argv) > 2: + flash_programmer=sys.argv[1] + + serial_dumper = "" + if len(sys.argv) > 3: + serial_dumper=sys.argv[3] + + motes = motelist_impl.list_motes(flash_programmer) + if motes: + motes.sort() + print 'Found %d JN516X motes at:' %(len(motes)) + motes_str = '' + for m in motes: + motes_str += "%s " %(str(m)) + print motes_str + + firmware_file='#' + if len(sys.argv) > 2: + firmware_file = sys.argv[2] + elif len(sys.argv) > 1: + firmware_file = sys.argv[1] + + if firmware_file[0] == '\\': + firmware_file = firmware_file[1:] + + if firmware_file not in ['#', '!', '?', '%']: + print '\nBatch programming all connected motes...\n' + motelist_impl.program_motes(flash_programmer, motes, firmware_file) + elif firmware_file == '?' or firmware_file == '!': + should_display_mac_list = (firmware_file == '!') + motelist_impl.print_info(flash_programmer, motes, should_display_mac_list) + elif firmware_file == '%': + print '\nLogging from all connected motes...\n' + motelist_impl.serialdump_ports(flash_programmer, serial_dumper, motes) + else: + print '\nNo firmware file specified.\n' + +if __name__ == '__main__': + multiprocessing.freeze_support() + main() diff --git a/tools/jn516x/motelist_lib/__init__.py b/tools/jn516x/motelist_lib/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/tools/jn516x/motelist_lib/linux_motelist_impl.py b/tools/jn516x/motelist_lib/linux_motelist_impl.py new file mode 100644 index 000000000..231c7814f --- /dev/null +++ b/tools/jn516x/motelist_lib/linux_motelist_impl.py @@ -0,0 +1,220 @@ +# Copyright (c) 2015, SICS Swedish ICT +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# 3. Neither the name of the Institute nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +# SUCH DAMAGE. +# +# This file is part of the Contiki operating system. +# +# Author(s): +# Janis Judvaitis +# Atis Elsts + +import os, glob, re +import multiprocessing, subprocess + +FTDI_VENDOR_ID = "0403" +FTDI_PRODUCT_ID = "6001" + +doPrintVendorID = False + +def read_line(filename): + """helper function to read a single line from a file""" + line = "Unknown" + try: + with open(filename) as f: + line = f.readline().strip() + finally: + return line + +# try to extract descriptions from sysfs. this was done by experimenting, +# no guarantee that it works for all devices or in the future... + +def usb_sysfs_hw_string(sysfs_path): + """given a path to a usb device in sysfs, return a string describing it""" + snr = read_line(sysfs_path + '/serial') + if snr: + snr_txt = '%s' % (snr,) + else: + snr_txt = '' + if doPrintVendorID: + return 'USB VID:PID=%s:%s SNR=%s' % ( + read_line(sysfs_path + '/idVendor'), + read_line(sysfs_path + '/idProduct'), + snr_txt + ) + else: + return snr_txt + +def usb_string(sysfs_path): + # Get dir name in /sys/bus/usb/drivers/usb for current usb dev + dev = os.path.basename(os.path.realpath(sysfs_path)) + dev_dir = os.path.join("/sys/bus/usb/drivers/usb", dev) + + try: + # Go to usb dev directory + product = read_line(os.path.join(dev_dir, "product")) + manufacturer = read_line(os.path.join(dev_dir, "manufacturer")) + result = product + " by " + manufacturer + except: + result = "Unknown device" + + return result + +def describe(device): + """ + Get a human readable description. + For USB-Serial devices try to run lsusb to get a human readable description. + For USB-CDC devices read the description from sysfs. + """ + base = os.path.basename(device) + # USB-Serial devices + sys_dev_path = '/sys/class/tty/%s/device/driver/%s' % (base, base) + if os.path.exists(sys_dev_path): + sys_usb = os.path.dirname(os.path.dirname(os.path.realpath(sys_dev_path))) + return usb_string(sys_usb) + + # Arduino wants special handling + sys_dev_path = '/sys/class/tty/%s/device/driver/' % (base) + for x in os.listdir(sys_dev_path): + # Driver directory's name contains device ID in /sys/bus/usb/drivers/usb + temp = x.split(":") + if len(temp) == 2: + # No Arduino adds, need to save space! + return usb_string(temp[0]).replace("(www.arduino.cc)", "").strip() + + # USB-CDC devices + sys_dev_path = '/sys/class/tty/%s/device/interface' % (base,) + if os.path.exists(sys_dev_path): + return read_line(sys_dev_path) + + return base + +def hwinfo(device): + """Try to get a HW identification using sysfs""" + base = os.path.basename(device) + if os.path.exists('/sys/class/tty/%s/device' % (base,)): + # PCI based devices + sys_id_path = '/sys/class/tty/%s/device/id' % (base,) + if os.path.exists(sys_id_path): + return read_line(sys_id_path) + # USB-Serial devices + sys_dev_path = '/sys/class/tty/%s/device/driver/%s' % (base, base) + if os.path.exists(sys_dev_path): + sys_usb = os.path.dirname(os.path.dirname(os.path.realpath(sys_dev_path))) + return usb_sysfs_hw_string(sys_usb) + # USB-CDC devices + if base.startswith('ttyACM'): + sys_dev_path = '/sys/class/tty/%s/device' % (base,) + if os.path.exists(sys_dev_path): + return usb_sysfs_hw_string(sys_dev_path + '/..') + return 'n/a' # XXX directly remove these from the list? + +####################################### + +def is_nxp_mote(device): + base = os.path.basename(device) + # USB-Serial device? + sys_dev_path = '/sys/class/tty/%s/device/driver/%s' % (base, base) + if not os.path.exists(sys_dev_path): + return False + + path_usb = os.path.dirname(os.path.dirname(os.path.realpath(sys_dev_path))) + + dev = os.path.basename(os.path.realpath(path_usb)) + dev_dir = os.path.join("/sys/bus/usb/drivers/usb", dev) + + try: + idProduct = read_line(os.path.join(dev_dir, "idProduct")) + idVendor = read_line(os.path.join(dev_dir, "idVendor")) + if idVendor != FTDI_VENDOR_ID or idProduct != FTDI_PRODUCT_ID: + return False + product = read_line(os.path.join(dev_dir, "product")) + manufacturer = read_line(os.path.join(dev_dir, "manufacturer")) + if manufacturer != "NXP": + return False + except: + return False + return True + + +def list_motes(flash_programmer): + devices = glob.glob('/dev/ttyUSB*')# + glob.glob('/dev/ttyACM*') + return [d for d in devices if is_nxp_mote(d)] + + +def extract_information(port, stdout_value): + mac_str='Unknown' # not supported on Linux + info='' # not properly supported on Linux + is_program_success='' + + info = describe(port) + ", SerialID: " + hwinfo(port) + + res = re.compile('(Success)').search(stdout_value) + if res: + is_program_success = str(res.group(1)) + else: + res = re.compile('(Error .*)\n').search(stdout_value) + if res: + is_program_success = str(res.group(1)) + + return [mac_str, info, is_program_success] + + +def program_motes(flash_programmer, motes, firmware_file): + for m in motes: + cmd = [flash_programmer, '-v', '-s', m, '-I', '38400', '-P', '1000000', '-f', firmware_file] + cmd = " ".join(cmd) + proc = subprocess.Popen(cmd, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE,) + stdout_value, stderr_value = proc.communicate('through stdin to stdout') + [mac_str, info, is_program_success] = extract_information(m, stdout_value) + print m, is_program_success + + errors = (stderr_value) + if errors != '': + print 'Errors:', errors + + +def print_info(flash_programmer, motes, do_mac_only): + if do_mac_only: + print "Listing Mac addresses (not supported on Linux):" + else: + print "Listing mote info:" + + for m in motes: + [mac_str, info, is_program_success] = extract_information(m, '') + if do_mac_only: + print m, mac_str + else: + print m, '\n', info, '\n' + +def serialdump(args): + port_name = args[0] + serial_dumper = args[1] + rv = subprocess.call(serial_dumper + ' -b1000000 ' + port_name, shell=True) + +def serialdump_ports(flash_programmer, serial_dumper, ports): + p = multiprocessing.Pool() + p.map(serialdump, zip(ports, [serial_dumper] * len(ports))) + p.close() diff --git a/tools/jn516x/motelist_lib/windows_motelist_impl.py b/tools/jn516x/motelist_lib/windows_motelist_impl.py new file mode 100644 index 000000000..a4528484b --- /dev/null +++ b/tools/jn516x/motelist_lib/windows_motelist_impl.py @@ -0,0 +1,142 @@ +# Copyright (c) 2015, SICS Swedish ICT +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# 3. Neither the name of the Institute nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +# SUCH DAMAGE. +# +# This file is part of the Contiki operating system. +# +# Author(s): +# Simon Duquennoy +# Atis Elsts + +import os, re, subprocess, multiprocessing + +def list_motes(flash_programmer): + #There is no COM0 in windows. We use this to trigger an error message that lists all valid COM ports + cmd = [flash_programmer, '-c', 'COM0'] + proc = subprocess.Popen(cmd, shell=False, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE,) + stdout_value, stderr_value = proc.communicate('through stdin to stdout') + com_str = (stderr_value) + #print '\tpass through:', repr(stdout_value) + #print '\tstderr :', com_str + + ## Extract COM ports from output: + ## Example com_str: "Available ports: ['COM15', 'COM10']" + res = re.compile('\[((?:\'COM\d+\'.?.?)+)\]').search(com_str) + + ports = [] + if res: + port_str=str(res.group(1)) + ports=port_str.replace('\'', '').replace(',', '').split() + return ports + +def extract_information(port, stdout_value): + mac_str='' + info='' + is_program_success='' + + #print 'output: ', stdout_value + +# res = re.compile('Connecting to device on (COM\d+)').search(stdout_value) +# if res: +# port_str = str(res.group(1)) + + ### extracting the following information + ''' + Devicelabel: JN516x, BL 0x00080006 + FlashLabel: Internal Flash (256K) + Memory: 0x00008000 bytes RAM, 0x00040000 bytes Flash + ChipPartNo: 8 + ChipRevNo: 1 + ROM Version: 0x00080006 + MAC Address: 00:15:8D:00:00:35:DD:FB + ZB License: 0x00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00 + User Data: 00:00:00:00:00:00:00:00 + FlashMID: 0xCC + FlashDID: 0xEE + MacLocation: 0x00000010 + Sector Length: 0x08000 + Bootloader Version: 0x00080006 + ''' + + res = re.compile('(Devicelabel.*\sFlashLabel.*\sMemory.*\sChipPartNo.*\sChipRevNo.*\sROM Version.*\sMAC Address.*\sZB License.*\sUser Data.*\sFlashMID.*\sFlashDID.*\sMacLocation.*\sSector Length.*\sBootloader Version\:\s+0x\w{8})').search(stdout_value) + if res: + info = str(res.group(1)) + + res = re.compile('MAC Address\:\s+((?:\w{2}\:?){8})').search(stdout_value) + if res: + mac_str = str(res.group(1)) + + res = re.compile('(Program\ssuccessfully\swritten\sto\sflash)').search(stdout_value) + if res: + is_program_success = str(res.group(1)) + + return [mac_str, info, is_program_success] + +def program_motes(flash_programmer, motes, firmware_file): + for m in motes: + cmd = [flash_programmer, '-c', m, '-B', '1000000', '-s', '-w', '-f', firmware_file] + proc = subprocess.Popen(cmd, shell=False, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE,) + stdout_value, stderr_value = proc.communicate('through stdin to stdout') + [mac_str, info, is_program_success] = extract_information(m, stdout_value) + print m, mac_str, is_program_success + + errors = (stderr_value) + if errors != '': + print 'Errors:', errors + +def print_info(flash_programmer, motes, do_mac_only): + if do_mac_only: + print "Listing Mac addresses:" + else: + print "Listing mote info:" + for m in motes: + cmd=[flash_programmer, '-c', m, '-B', '1000000'] + proc = subprocess.Popen(cmd, shell=False, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE,) + stdout_value, stderr_value = proc.communicate('through stdin to stdout') + [mac_str, info, is_program_success] = extract_information(m, stdout_value) + + errors = (stderr_value) + + if do_mac_only: + print m, mac_str + else: + print m, '\n', info, '\n' + + if errors != '': + print 'Errors:', errors + +def serialdump(args): + port_name = args[0] + serial_dumper = args[1] + cmd = [serial_dumper, '-b1000000', "/dev/" + port_name.lower()] + if os.name == "posix" or os.name == "cygwin": + cmd = " ".join(cmd) + rv = subprocess.call(cmd, shell=True) + +def serialdump_ports(flash_programmer, serial_dumper, ports): + p = multiprocessing.Pool() + p.map(serialdump, zip(ports, [serial_dumper] * len(ports))) + p.close() diff --git a/tools/jn516x/serialdump.c b/tools/jn516x/serialdump.c new file mode 100644 index 000000000..26b0884e2 --- /dev/null +++ b/tools/jn516x/serialdump.c @@ -0,0 +1,396 @@ +#define _GNU_SOURCE +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define BAUDRATE B115200 +#define BAUDRATE_S "115200" +#ifdef linux +#define MODEMDEVICE "/dev/ttyS0" +#else +#define MODEMDEVICE "/dev/com1" +#endif /* linux */ + +#define SLIP_END 0300 +#define SLIP_ESC 0333 +#define SLIP_ESC_END 0334 +#define SLIP_ESC_ESC 0335 + +#define CSNA_INIT 0x01 + +#define BUFSIZE 40 +#define HCOLS 20 +#define ICOLS 18 + +#define MODE_START_DATE 0 +#define MODE_DATE 1 +#define MODE_START_TEXT 2 +#define MODE_TEXT 3 +#define MODE_INT 4 +#define MODE_HEX 5 +#define MODE_SLIP_AUTO 6 +#define MODE_SLIP 7 +#define MODE_SLIP_HIDE 8 + +static unsigned char rxbuf[2048]; + +static int +usage(int result) +{ + printf("Usage: serialdump [-x] [-s[on]] [-i] [-bSPEED] [SERIALDEVICE]\n"); + printf(" -x for hexadecimal output\n"); + printf(" -i for decimal output\n"); + printf(" -s for automatic SLIP mode\n"); + printf(" -so for SLIP only mode (all data is SLIP packets)\n"); + printf(" -sn to hide SLIP packages\n"); + printf(" -T[format] to add time for each text line\n"); + printf(" (see man page for strftime() for format description)\n"); + return result; +} + +static void +print_hex_line(unsigned char *prefix, unsigned char *outbuf, int index) +{ + int i; + + printf("\r%s", prefix); + for(i = 0; i < index; i++) { + if((i % 4) == 0) { + printf(" "); + } + printf("%02X", outbuf[i] & 0xFF); + } + printf(" "); + for(i = index; i < HCOLS; i++) { + if((i % 4) == 0) { + printf(" "); + } + printf(" "); + } + for(i = 0; i < index; i++) { + if(outbuf[i] < 30 || outbuf[i] > 126) { + printf("."); + } else { + printf("%c", outbuf[i]); + } + } +} + +int +main(int argc, char **argv) +{ + struct termios options; + fd_set mask, smask; + int fd; + speed_t speed = BAUDRATE; + char *speedname = BAUDRATE_S; + char *device = MODEMDEVICE; + char *timeformat = NULL; + unsigned char buf[BUFSIZE], outbuf[HCOLS]; + unsigned char mode = MODE_START_TEXT; + int nfound, flags = 0; + unsigned char lastc = '\0'; + + int index = 1; + while(index < argc) { + if(argv[index][0] == '-') { + switch(argv[index][1]) { + case 'b': + /* set speed */ + if(strcmp(&argv[index][2], "38400") == 0) { + speed = B38400; + speedname = "38400"; + } else if(strcmp(&argv[index][2], "19200") == 0) { + speed = B19200; + speedname = "19200"; + } else if(strcmp(&argv[index][2], "57600") == 0) { + speed = B57600; + speedname = "57600"; + } else if(strcmp(&argv[index][2], "115200") == 0) { + speed = B115200; + speedname = "115200"; + } else if(strcmp(&argv[index][2], "230400") == 0) { + speed = B230400; + speedname = "230400"; + } else if(strcmp(&argv[index][2], "460800") == 0) { + speed = B460800; + speedname = "460800"; + } else if(strcmp(&argv[index][2], "500000") == 0) { + speed = B500000; + speedname = "500000"; + } else if(strcmp(&argv[index][2], "576000") == 0) { + speed = B576000; + speedname = "576000"; + } else if(strcmp(&argv[index][2], "921600") == 0) { + speed = B921600; + speedname = "921600"; + } else if(strcmp(&argv[index][2], "1000000") == 0) { + speed = B1000000; + speedname = "1000000"; + } else { + fprintf(stderr, "unsupported speed: %s\n", &argv[index][2]); + return usage(1); + } + break; + case 'x': + mode = MODE_HEX; + break; + case 'i': + mode = MODE_INT; + break; + case 's': + switch(argv[index][2]) { + case 'n': + mode = MODE_SLIP_HIDE; + break; + case 'o': + mode = MODE_SLIP; + break; + default: + mode = MODE_SLIP_AUTO; + break; + } + break; + case 'T': + if(strlen(&argv[index][2]) == 0) { + timeformat = "%Y-%m-%d %H:%M:%S"; + } else { + timeformat = &argv[index][2]; + } + mode = MODE_START_DATE; + break; + case 'h': + return usage(0); + default: + fprintf(stderr, "unknown option '%c'\n", argv[index][1]); + return usage(1); + } + index++; + } else { + device = argv[index++]; + if(index < argc) { + fprintf(stderr, "too many arguments\n"); + return usage(1); + } + } + } + fprintf(stderr, "connecting to %s (%s)", device, speedname); + +#ifdef O_SYNC + fd = open(device, O_RDWR | O_NOCTTY | O_NDELAY /*| O_DIRECT*/ | O_SYNC); + if(fd < 0 && errno == EINVAL){ // O_SYNC not supported (e.g. raspberian) + fd = open(device, O_RDWR | O_NOCTTY | O_NDELAY | O_DIRECT); + } +#else + fd = open(device, O_RDWR | O_NOCTTY | O_NDELAY | O_SYNC ); +#endif + if(fd < 0) { + fprintf(stderr, "\n"); + perror("open"); + exit(-1); + } + fprintf(stderr, " [OK]\n"); + + if(fcntl(fd, F_SETFL, 0) < 0) { + perror("could not set fcntl"); + exit(-1); + } + + if(tcgetattr(fd, &options) < 0) { + perror("could not get options"); + exit(-1); + } + /* fprintf(stderr, "serial options set\n"); */ + cfsetispeed(&options, speed); + cfsetospeed(&options, speed); + /* Enable the receiver and set local mode */ + options.c_cflag |= (CLOCAL | CREAD); + /* Mask the character size bits and turn off (odd) parity */ + options.c_cflag &= ~(CSIZE | PARENB | PARODD); + /* Select 8 data bits */ + options.c_cflag |= CS8; + + /* Raw input */ + options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG); + /* Raw output */ + options.c_oflag &= ~OPOST; + + if(tcsetattr(fd, TCSANOW, &options) < 0) { + perror("could not set options"); + exit(-1); + } + + /* Make read() return immediately */ + /* if (fcntl(fd, F_SETFL, FNDELAY) < 0) { */ + /* perror("\ncould not set fcntl"); */ + /* exit(-1); */ + /* } */ + + FD_ZERO(&mask); + FD_SET(fd, &mask); + FD_SET(fileno(stdin), &mask); + + index = 0; + for(;;) { + smask = mask; + nfound = select(FD_SETSIZE, &smask, (fd_set *) 0, (fd_set *) 0, (struct timeval *) 0); + if(nfound < 0) { + if(errno == EINTR) { + fprintf(stderr, "interrupted system call\n"); + continue; + } + /* something is very wrong! */ + perror("select"); + exit(1); + } + + if(FD_ISSET(fileno(stdin), &smask)) { + /* data from standard in */ + int n = read(fileno(stdin), buf, sizeof(buf)); + if(n < 0) { + perror("could not read"); + exit(-1); + } else if(n > 0) { + /* because commands might need parameters, lines needs to be + separated which means the terminating LF must be sent */ + /* while(n > 0 && buf[n - 1] < 32) { */ + /* n--; */ + /* } */ + if(n > 0) { + int i; + /* fprintf(stderr, "SEND %d bytes\n", n);*/ + /* write slowly */ + for(i = 0; i < n; i++) { + if(write(fd, &buf[i], 1) <= 0) { + perror("write"); + exit(1); + } else { + fflush(NULL); + usleep(6000); + } + } + } + } else { + /* End of input, exit. */ + exit(0); + } + } + + if(FD_ISSET(fd, &smask)) { + int i, j, n = read(fd, buf, sizeof(buf)); + if(n < 0) { + perror("could not read"); + exit(-1); + } + + for(i = 0; i < n; i++) { + switch(mode) { + case MODE_START_TEXT: + case MODE_TEXT: + printf("%c", buf[i]); + break; + case MODE_START_DATE: { + time_t t; + t = time(&t); + strftime(outbuf, HCOLS, timeformat, localtime(&t)); + printf("%s|", outbuf); + mode = MODE_DATE; + } + /* continue into the MODE_DATE */ + case MODE_DATE: + printf("%c", buf[i]); + if(buf[i] == '\n') { + mode = MODE_START_DATE; + } + break; + case MODE_INT: + printf("%03d ", buf[i]); + if(++index >= ICOLS) { + index = 0; + printf("\n"); + } + break; + case MODE_HEX: + rxbuf[index++] = buf[i]; + if(index >= HCOLS) { + print_hex_line("", rxbuf, index); + index = 0; + printf("\n"); + } + break; + + case MODE_SLIP_AUTO: + case MODE_SLIP_HIDE: + if(!flags && (buf[i] != SLIP_END)) { + /* Not a SLIP packet? */ + printf("%c", buf[i]); + break; + } + /* continue to slip only mode */ + case MODE_SLIP: + switch(buf[i]) { + case SLIP_ESC: + lastc = SLIP_ESC; + break; + + case SLIP_END: + if(index > 0) { + if(flags != 2 && mode != MODE_SLIP_HIDE) { + /* not overflowed: show packet */ + print_hex_line("SLIP: ", rxbuf, index > HCOLS ? HCOLS : index); + printf("\n"); + } + lastc = '\0'; + index = 0; + flags = 0; + } else { + flags = !flags; + } + break; + + default: + if(lastc == SLIP_ESC) { + lastc = '\0'; + + /* Previous read byte was an escape byte, so this byte will be + interpreted differently from others. */ + switch(buf[i]) { + case SLIP_ESC_END: + buf[i] = SLIP_END; + break; + case SLIP_ESC_ESC: + buf[i] = SLIP_ESC; + break; + } + } + + rxbuf[index++] = buf[i]; + if(index >= sizeof(rxbuf)) { + fprintf(stderr, "**** slip overflow\n"); + index = 0; + flags = 2; + } + break; + } + break; + } + } + + /* after processing for some output modes */ + if(index > 0) { + switch(mode) { + case MODE_HEX: + print_hex_line("", rxbuf, index); + break; + } + } + fflush(stdout); + } + } +} diff --git a/tools/mspsim b/tools/mspsim index 58f187351..47ae45cb0 160000 --- a/tools/mspsim +++ b/tools/mspsim @@ -1 +1 @@ -Subproject commit 58f187351f3417814aa2d0d92af9e2bb768d92ee +Subproject commit 47ae45cb0f36337115e32adb2a5ba0bf6e1e4437 diff --git a/tools/release-tools/compile-platforms/Makefile b/tools/release-tools/compile-platforms/Makefile index cd522110f..ba45de930 100644 --- a/tools/release-tools/compile-platforms/Makefile +++ b/tools/release-tools/compile-platforms/Makefile @@ -6,7 +6,7 @@ all: compile: 6502 msp430 native avr arm -6502: c64.platform c128.platform apple2enh.platform atari.platform +6502: c64.platform c128.platform apple2enh.platform atarixl.platform msp430: sky.platform esb.platform z1.platform native: native.platform minimal-net.platform avr: avr-raven.platform diff --git a/tools/sensinode/nano_programmer/README.md b/tools/sensinode/nano_programmer/README.md index a9ce6d81e..f85a6a2aa 100755 --- a/tools/sensinode/nano_programmer/README.md +++ b/tools/sensinode/nano_programmer/README.md @@ -1,38 +1,38 @@ -# Nano Programmer - -Programming tool for the Sensinode Nano series using Dxxx development boards. - -Copyright 2007-2008 Sensinode Ltd. - -## Installation - -### Linux - -No external libraries required. - -### Windows/Cygwin - -See the nano_usb_programmer README file on how to install FTDI library -for nano_usb_programmer. The nano_programmer build system will fetch -the library from there. - -## Usage - -Usage info for the Nano Programmer is available with command - - ./nano_programmer --help - -Note that use might require root/administrator privileges - depending on system configuration. - -## Known problems - -Occasional timing failures resulting in "Reinit failed."-messages do come -up in some PC configurations. If you experience programming failures (the programmer -is not able to recover), please report your system configuration to Sensinode. -On Linux, it is known that the "brltty" program causes problems with the FTDI -serial driver. Uninstalling brltty resolves the problem. - -## Version - -v1.3 2008-01-31 Martti Huttunen Multi-platform build and created instructions +# Nano Programmer + +Programming tool for the Sensinode Nano series using Dxxx development boards. + +Copyright 2007-2008 Sensinode Ltd. + +## Installation + +### Linux + +No external libraries required. + +### Windows/Cygwin + +See the nano_usb_programmer README file on how to install FTDI library +for nano_usb_programmer. The nano_programmer build system will fetch +the library from there. + +## Usage + +Usage info for the Nano Programmer is available with command + + ./nano_programmer --help + +Note that use might require root/administrator privileges + depending on system configuration. + +## Known problems + +Occasional timing failures resulting in "Reinit failed."-messages do come +up in some PC configurations. If you experience programming failures (the programmer +is not able to recover), please report your system configuration to Sensinode. +On Linux, it is known that the "brltty" program causes problems with the FTDI +serial driver. Uninstalling brltty resolves the problem. + +## Version + +v1.3 2008-01-31 Martti Huttunen Multi-platform build and created instructions diff --git a/tools/sensinode/nano_usb_programmer/ftdi_win32/ftd2xx.h b/tools/sensinode/nano_usb_programmer/ftdi_win32/ftd2xx.h index fd15376f8..3ee1da36d 100644 --- a/tools/sensinode/nano_usb_programmer/ftdi_win32/ftd2xx.h +++ b/tools/sensinode/nano_usb_programmer/ftdi_win32/ftd2xx.h @@ -27,897 +27,896 @@ */ -/*++ - -Copyright (c) 2001-2006 Future Technology Devices International Ltd. - -Module Name: - - ftd2xx.h - -Abstract: - - Native USB device driver for FTDI FT8U232/245 - FTD2XX library definitions - -Environment: - - kernel & user mode - -Revision History: - - 13/03/01 awm Created. - 13/01/03 awm Added device information support. - 19/03/03 awm Added FT_W32_CancelIo. - 12/06/03 awm Added FT_StopInTask and FT_RestartInTask. - 18/09/03 awm Added FT_SetResetPipeRetryCount. - 10/10/03 awm Added FT_ResetPort. - 23/01/04 awm Added support for open-by-location. - 16/03/04 awm Added support for FT2232C. - 23/09/04 awm Added support for FT232R. - 20/10/04 awm Added FT_CyclePort. - 18/01/05 awm Added FT_DEVICE_LIST_INFO_NODE type. - 11/02/05 awm Added LocId to FT_DEVICE_LIST_INFO_NODE. - 25/08/05 awm Added FT_SetDeadmanTimeout. - 02/12/05 awm Removed obsolete references. - 05/12/05 awm Added FT_GetVersion, FT_GetVersionEx. - 08/09/06 awm Added FT_W32_GetCommMask. - 11/09/06 awm Added FT_Rescan. - - ---*/ - - -#ifndef FTD2XX_H -#define FTD2XX_H - -// The following ifdef block is the standard way of creating macros -// which make exporting from a DLL simpler. All files within this DLL -// are compiled with the FTD2XX_EXPORTS symbol defined on the command line. -// This symbol should not be defined on any project that uses this DLL. -// This way any other project whose source files include this file see -// FTD2XX_API functions as being imported from a DLL, whereas this DLL -// sees symbols defined with this macro as being exported. - -#ifdef FTD2XX_EXPORTS -#define FTD2XX_API __declspec(dllexport) -#else -#define FTD2XX_API __declspec(dllimport) -#endif - - -typedef PVOID FT_HANDLE; -typedef ULONG FT_STATUS; - -// -// Device status -// -enum { - FT_OK, - FT_INVALID_HANDLE, - FT_DEVICE_NOT_FOUND, - FT_DEVICE_NOT_OPENED, - FT_IO_ERROR, - FT_INSUFFICIENT_RESOURCES, - FT_INVALID_PARAMETER, - FT_INVALID_BAUD_RATE, - - FT_DEVICE_NOT_OPENED_FOR_ERASE, - FT_DEVICE_NOT_OPENED_FOR_WRITE, - FT_FAILED_TO_WRITE_DEVICE, - FT_EEPROM_READ_FAILED, - FT_EEPROM_WRITE_FAILED, - FT_EEPROM_ERASE_FAILED, - FT_EEPROM_NOT_PRESENT, - FT_EEPROM_NOT_PROGRAMMED, - FT_INVALID_ARGS, - FT_NOT_SUPPORTED, - FT_OTHER_ERROR, - FT_DEVICE_LIST_NOT_READY, -}; - - -#define FT_SUCCESS(status) ((status) == FT_OK) - -// -// FT_OpenEx Flags -// - -#define FT_OPEN_BY_SERIAL_NUMBER 1 -#define FT_OPEN_BY_DESCRIPTION 2 -#define FT_OPEN_BY_LOCATION 4 - -// -// FT_ListDevices Flags (used in conjunction with FT_OpenEx Flags -// - -#define FT_LIST_NUMBER_ONLY 0x80000000 -#define FT_LIST_BY_INDEX 0x40000000 -#define FT_LIST_ALL 0x20000000 - -#define FT_LIST_MASK (FT_LIST_NUMBER_ONLY|FT_LIST_BY_INDEX|FT_LIST_ALL) - -// -// Baud Rates -// - -#define FT_BAUD_300 300 -#define FT_BAUD_600 600 -#define FT_BAUD_1200 1200 -#define FT_BAUD_2400 2400 -#define FT_BAUD_4800 4800 -#define FT_BAUD_9600 9600 -#define FT_BAUD_14400 14400 -#define FT_BAUD_19200 19200 -#define FT_BAUD_38400 38400 -#define FT_BAUD_57600 57600 -#define FT_BAUD_115200 115200 -#define FT_BAUD_230400 230400 -#define FT_BAUD_460800 460800 -#define FT_BAUD_921600 921600 - -// -// Word Lengths -// - -#define FT_BITS_8 (UCHAR) 8 -#define FT_BITS_7 (UCHAR) 7 -#define FT_BITS_6 (UCHAR) 6 -#define FT_BITS_5 (UCHAR) 5 - -// -// Stop Bits -// - -#define FT_STOP_BITS_1 (UCHAR) 0 -#define FT_STOP_BITS_1_5 (UCHAR) 1 -#define FT_STOP_BITS_2 (UCHAR) 2 - -// -// Parity -// - -#define FT_PARITY_NONE (UCHAR) 0 -#define FT_PARITY_ODD (UCHAR) 1 -#define FT_PARITY_EVEN (UCHAR) 2 -#define FT_PARITY_MARK (UCHAR) 3 -#define FT_PARITY_SPACE (UCHAR) 4 - -// -// Flow Control -// - -#define FT_FLOW_NONE 0x0000 -#define FT_FLOW_RTS_CTS 0x0100 -#define FT_FLOW_DTR_DSR 0x0200 -#define FT_FLOW_XON_XOFF 0x0400 - -// -// Purge rx and tx buffers -// -#define FT_PURGE_RX 1 -#define FT_PURGE_TX 2 - -// -// Events -// - -typedef void (*PFT_EVENT_HANDLER)(DWORD,DWORD); - -#define FT_EVENT_RXCHAR 1 -#define FT_EVENT_MODEM_STATUS 2 - -// -// Timeouts -// - -#define FT_DEFAULT_RX_TIMEOUT 300 -#define FT_DEFAULT_TX_TIMEOUT 300 - -// -// Device types -// - -typedef ULONG FT_DEVICE; - -enum { - FT_DEVICE_BM, - FT_DEVICE_AM, - FT_DEVICE_100AX, - FT_DEVICE_UNKNOWN, - FT_DEVICE_2232C, - FT_DEVICE_232R -}; - - -#ifdef __cplusplus -extern "C" { -#endif - - -FTD2XX_API -FT_STATUS WINAPI FT_Open( - int deviceNumber, - FT_HANDLE *pHandle - ); - -FTD2XX_API -FT_STATUS WINAPI FT_OpenEx( - PVOID pArg1, - DWORD Flags, - FT_HANDLE *pHandle - ); - -FTD2XX_API -FT_STATUS WINAPI FT_ListDevices( - PVOID pArg1, - PVOID pArg2, - DWORD Flags - ); - -FTD2XX_API -FT_STATUS WINAPI FT_Close( - FT_HANDLE ftHandle - ); - -FTD2XX_API -FT_STATUS WINAPI FT_Read( - FT_HANDLE ftHandle, - LPVOID lpBuffer, - DWORD nBufferSize, - LPDWORD lpBytesReturned - ); - -FTD2XX_API -FT_STATUS WINAPI FT_Write( - FT_HANDLE ftHandle, - LPVOID lpBuffer, - DWORD nBufferSize, - LPDWORD lpBytesWritten - ); - -FTD2XX_API -FT_STATUS WINAPI FT_IoCtl( - FT_HANDLE ftHandle, - DWORD dwIoControlCode, - LPVOID lpInBuf, - DWORD nInBufSize, - LPVOID lpOutBuf, - DWORD nOutBufSize, - LPDWORD lpBytesReturned, - LPOVERLAPPED lpOverlapped - ); - -FTD2XX_API -FT_STATUS WINAPI FT_SetBaudRate( - FT_HANDLE ftHandle, - ULONG BaudRate - ); - -FTD2XX_API -FT_STATUS WINAPI FT_SetDivisor( - FT_HANDLE ftHandle, - USHORT Divisor - ); - -FTD2XX_API -FT_STATUS WINAPI FT_SetDataCharacteristics( - FT_HANDLE ftHandle, - UCHAR WordLength, - UCHAR StopBits, - UCHAR Parity - ); - -FTD2XX_API -FT_STATUS WINAPI FT_SetFlowControl( - FT_HANDLE ftHandle, - USHORT FlowControl, - UCHAR XonChar, - UCHAR XoffChar - ); - -FTD2XX_API -FT_STATUS WINAPI FT_ResetDevice( - FT_HANDLE ftHandle - ); - -FTD2XX_API -FT_STATUS WINAPI FT_SetDtr( - FT_HANDLE ftHandle - ); - -FTD2XX_API -FT_STATUS WINAPI FT_ClrDtr( - FT_HANDLE ftHandle - ); - -FTD2XX_API -FT_STATUS WINAPI FT_SetRts( - FT_HANDLE ftHandle - ); - -FTD2XX_API -FT_STATUS WINAPI FT_ClrRts( - FT_HANDLE ftHandle - ); - -FTD2XX_API -FT_STATUS WINAPI FT_GetModemStatus( - FT_HANDLE ftHandle, - ULONG *pModemStatus - ); - -FTD2XX_API -FT_STATUS WINAPI FT_SetChars( - FT_HANDLE ftHandle, - UCHAR EventChar, - UCHAR EventCharEnabled, - UCHAR ErrorChar, - UCHAR ErrorCharEnabled - ); - -FTD2XX_API -FT_STATUS WINAPI FT_Purge( - FT_HANDLE ftHandle, - ULONG Mask - ); - -FTD2XX_API -FT_STATUS WINAPI FT_SetTimeouts( - FT_HANDLE ftHandle, - ULONG ReadTimeout, - ULONG WriteTimeout - ); - -FTD2XX_API -FT_STATUS WINAPI FT_GetQueueStatus( - FT_HANDLE ftHandle, - DWORD *dwRxBytes - ); - -FTD2XX_API -FT_STATUS WINAPI FT_SetEventNotification( - FT_HANDLE ftHandle, - DWORD Mask, - PVOID Param - ); - -FTD2XX_API -FT_STATUS WINAPI FT_GetStatus( - FT_HANDLE ftHandle, - DWORD *dwRxBytes, - DWORD *dwTxBytes, - DWORD *dwEventDWord - ); - -FTD2XX_API -FT_STATUS WINAPI FT_SetBreakOn( - FT_HANDLE ftHandle - ); - -FTD2XX_API -FT_STATUS WINAPI FT_SetBreakOff( - FT_HANDLE ftHandle - ); - -FTD2XX_API -FT_STATUS WINAPI FT_SetWaitMask( - FT_HANDLE ftHandle, - DWORD Mask - ); - -FTD2XX_API -FT_STATUS WINAPI FT_WaitOnMask( - FT_HANDLE ftHandle, - DWORD *Mask - ); - -FTD2XX_API -FT_STATUS WINAPI FT_GetEventStatus( - FT_HANDLE ftHandle, - DWORD *dwEventDWord - ); - -FTD2XX_API -FT_STATUS WINAPI FT_ReadEE( - FT_HANDLE ftHandle, - DWORD dwWordOffset, - LPWORD lpwValue - ); - -FTD2XX_API -FT_STATUS WINAPI FT_WriteEE( - FT_HANDLE ftHandle, - DWORD dwWordOffset, - WORD wValue - ); - -FTD2XX_API -FT_STATUS WINAPI FT_EraseEE( - FT_HANDLE ftHandle - ); - -// -// structure to hold program data for FT_Program function -// -typedef struct ft_program_data { - - DWORD Signature1; // Header - must be 0x00000000 - DWORD Signature2; // Header - must be 0xffffffff - DWORD Version; // Header - FT_PROGRAM_DATA version - // 0 = original - // 1 = FT2232C extensions - // 2 = FT232R extensions - - WORD VendorId; // 0x0403 - WORD ProductId; // 0x6001 - char *Manufacturer; // "FTDI" - char *ManufacturerId; // "FT" - char *Description; // "USB HS Serial Converter" - char *SerialNumber; // "FT000001" if fixed, or NULL - WORD MaxPower; // 0 < MaxPower <= 500 - WORD PnP; // 0 = disabled, 1 = enabled - WORD SelfPowered; // 0 = bus powered, 1 = self powered - WORD RemoteWakeup; // 0 = not capable, 1 = capable - // - // Rev4 extensions - // - UCHAR Rev4; // non-zero if Rev4 chip, zero otherwise - UCHAR IsoIn; // non-zero if in endpoint is isochronous - UCHAR IsoOut; // non-zero if out endpoint is isochronous - UCHAR PullDownEnable; // non-zero if pull down enabled - UCHAR SerNumEnable; // non-zero if serial number to be used - UCHAR USBVersionEnable; // non-zero if chip uses USBVersion - WORD USBVersion; // BCD (0x0200 => USB2) - // - // FT2232C extensions - // - UCHAR Rev5; // non-zero if Rev5 chip, zero otherwise - UCHAR IsoInA; // non-zero if in endpoint is isochronous - UCHAR IsoInB; // non-zero if in endpoint is isochronous - UCHAR IsoOutA; // non-zero if out endpoint is isochronous - UCHAR IsoOutB; // non-zero if out endpoint is isochronous - UCHAR PullDownEnable5; // non-zero if pull down enabled - UCHAR SerNumEnable5; // non-zero if serial number to be used - UCHAR USBVersionEnable5; // non-zero if chip uses USBVersion - WORD USBVersion5; // BCD (0x0200 => USB2) - UCHAR AIsHighCurrent; // non-zero if interface is high current - UCHAR BIsHighCurrent; // non-zero if interface is high current - UCHAR IFAIsFifo; // non-zero if interface is 245 FIFO - UCHAR IFAIsFifoTar; // non-zero if interface is 245 FIFO CPU target - UCHAR IFAIsFastSer; // non-zero if interface is Fast serial - UCHAR AIsVCP; // non-zero if interface is to use VCP drivers - UCHAR IFBIsFifo; // non-zero if interface is 245 FIFO - UCHAR IFBIsFifoTar; // non-zero if interface is 245 FIFO CPU target - UCHAR IFBIsFastSer; // non-zero if interface is Fast serial - UCHAR BIsVCP; // non-zero if interface is to use VCP drivers - // - // FT232R extensions - // - UCHAR UseExtOsc; // Use External Oscillator - UCHAR HighDriveIOs; // High Drive I/Os - UCHAR EndpointSize; // Endpoint size - - UCHAR PullDownEnableR; // non-zero if pull down enabled - UCHAR SerNumEnableR; // non-zero if serial number to be used - - UCHAR InvertTXD; // non-zero if invert TXD - UCHAR InvertRXD; // non-zero if invert RXD - UCHAR InvertRTS; // non-zero if invert RTS - UCHAR InvertCTS; // non-zero if invert CTS - UCHAR InvertDTR; // non-zero if invert DTR - UCHAR InvertDSR; // non-zero if invert DSR - UCHAR InvertDCD; // non-zero if invert DCD - UCHAR InvertRI; // non-zero if invert RI - - UCHAR Cbus0; // Cbus Mux control - UCHAR Cbus1; // Cbus Mux control - UCHAR Cbus2; // Cbus Mux control - UCHAR Cbus3; // Cbus Mux control - UCHAR Cbus4; // Cbus Mux control - - UCHAR RIsD2XX; // non-zero if using D2XX driver - -} FT_PROGRAM_DATA, *PFT_PROGRAM_DATA; - -FTD2XX_API -FT_STATUS WINAPI FT_EE_Program( - FT_HANDLE ftHandle, - PFT_PROGRAM_DATA pData - ); - -FTD2XX_API -FT_STATUS WINAPI FT_EE_ProgramEx( - FT_HANDLE ftHandle, - PFT_PROGRAM_DATA pData, - char *Manufacturer, - char *ManufacturerId, - char *Description, - char *SerialNumber - ); - -FTD2XX_API -FT_STATUS WINAPI FT_EE_Read( - FT_HANDLE ftHandle, - PFT_PROGRAM_DATA pData - ); - -FTD2XX_API -FT_STATUS WINAPI FT_EE_ReadEx( - FT_HANDLE ftHandle, - PFT_PROGRAM_DATA pData, - char *Manufacturer, - char *ManufacturerId, - char *Description, - char *SerialNumber - ); - -FTD2XX_API -FT_STATUS WINAPI FT_EE_UASize( - FT_HANDLE ftHandle, - LPDWORD lpdwSize - ); - -FTD2XX_API -FT_STATUS WINAPI FT_EE_UAWrite( - FT_HANDLE ftHandle, - PUCHAR pucData, - DWORD dwDataLen - ); - -FTD2XX_API -FT_STATUS WINAPI FT_EE_UARead( - FT_HANDLE ftHandle, - PUCHAR pucData, - DWORD dwDataLen, - LPDWORD lpdwBytesRead - ); - -FTD2XX_API -FT_STATUS WINAPI FT_SetLatencyTimer( - FT_HANDLE ftHandle, - UCHAR ucLatency - ); - -FTD2XX_API -FT_STATUS WINAPI FT_GetLatencyTimer( - FT_HANDLE ftHandle, - PUCHAR pucLatency - ); - -FTD2XX_API -FT_STATUS WINAPI FT_SetBitMode( - FT_HANDLE ftHandle, - UCHAR ucMask, - UCHAR ucEnable - ); - -FTD2XX_API -FT_STATUS WINAPI FT_GetBitMode( - FT_HANDLE ftHandle, - PUCHAR pucMode - ); - -FTD2XX_API -FT_STATUS WINAPI FT_SetUSBParameters( - FT_HANDLE ftHandle, - ULONG ulInTransferSize, - ULONG ulOutTransferSize - ); - -FTD2XX_API -FT_STATUS WINAPI FT_SetDeadmanTimeout( - FT_HANDLE ftHandle, - ULONG ulDeadmanTimeout - ); - -FTD2XX_API -FT_STATUS WINAPI FT_GetDeviceInfo( - FT_HANDLE ftHandle, - FT_DEVICE *lpftDevice, - LPDWORD lpdwID, - PCHAR SerialNumber, - PCHAR Description, - LPVOID Dummy - ); - -FTD2XX_API -FT_STATUS WINAPI FT_StopInTask( - FT_HANDLE ftHandle - ); - -FTD2XX_API -FT_STATUS WINAPI FT_RestartInTask( - FT_HANDLE ftHandle - ); - -FTD2XX_API -FT_STATUS WINAPI FT_SetResetPipeRetryCount( - FT_HANDLE ftHandle, - DWORD dwCount - ); - -FTD2XX_API -FT_STATUS WINAPI FT_ResetPort( - FT_HANDLE ftHandle - ); - -FTD2XX_API -FT_STATUS WINAPI FT_CyclePort( - FT_HANDLE ftHandle - ); - - -// -// Win32-type functions -// - -FTD2XX_API -FT_HANDLE WINAPI FT_W32_CreateFile( - LPCTSTR lpszName, - DWORD dwAccess, - DWORD dwShareMode, - LPSECURITY_ATTRIBUTES lpSecurityAttributes, - DWORD dwCreate, - DWORD dwAttrsAndFlags, - HANDLE hTemplate - ); - -FTD2XX_API -BOOL WINAPI FT_W32_CloseHandle( - FT_HANDLE ftHandle - ); - -FTD2XX_API -BOOL WINAPI FT_W32_ReadFile( - FT_HANDLE ftHandle, - LPVOID lpBuffer, - DWORD nBufferSize, - LPDWORD lpBytesReturned, - LPOVERLAPPED lpOverlapped - ); - -FTD2XX_API -BOOL WINAPI FT_W32_WriteFile( - FT_HANDLE ftHandle, - LPVOID lpBuffer, - DWORD nBufferSize, - LPDWORD lpBytesWritten, - LPOVERLAPPED lpOverlapped - ); - -FTD2XX_API -DWORD WINAPI FT_W32_GetLastError( - FT_HANDLE ftHandle - ); - -FTD2XX_API -BOOL WINAPI FT_W32_GetOverlappedResult( - FT_HANDLE ftHandle, - LPOVERLAPPED lpOverlapped, - LPDWORD lpdwBytesTransferred, - BOOL bWait - ); - -FTD2XX_API -BOOL WINAPI FT_W32_CancelIo( - FT_HANDLE ftHandle - ); - - -// -// Win32 COMM API type functions -// -typedef struct _FTCOMSTAT { - DWORD fCtsHold : 1; - DWORD fDsrHold : 1; - DWORD fRlsdHold : 1; - DWORD fXoffHold : 1; - DWORD fXoffSent : 1; - DWORD fEof : 1; - DWORD fTxim : 1; - DWORD fReserved : 25; - DWORD cbInQue; - DWORD cbOutQue; -} FTCOMSTAT, *LPFTCOMSTAT; - -typedef struct _FTDCB { - DWORD DCBlength; /* sizeof(FTDCB) */ - DWORD BaudRate; /* Baudrate at which running */ - DWORD fBinary: 1; /* Binary Mode (skip EOF check) */ - DWORD fParity: 1; /* Enable parity checking */ - DWORD fOutxCtsFlow:1; /* CTS handshaking on output */ - DWORD fOutxDsrFlow:1; /* DSR handshaking on output */ - DWORD fDtrControl:2; /* DTR Flow control */ - DWORD fDsrSensitivity:1; /* DSR Sensitivity */ - DWORD fTXContinueOnXoff: 1; /* Continue TX when Xoff sent */ - DWORD fOutX: 1; /* Enable output X-ON/X-OFF */ - DWORD fInX: 1; /* Enable input X-ON/X-OFF */ - DWORD fErrorChar: 1; /* Enable Err Replacement */ - DWORD fNull: 1; /* Enable Null stripping */ - DWORD fRtsControl:2; /* Rts Flow control */ - DWORD fAbortOnError:1; /* Abort all reads and writes on Error */ - DWORD fDummy2:17; /* Reserved */ - WORD wReserved; /* Not currently used */ - WORD XonLim; /* Transmit X-ON threshold */ - WORD XoffLim; /* Transmit X-OFF threshold */ - BYTE ByteSize; /* Number of bits/byte, 4-8 */ - BYTE Parity; /* 0-4=None,Odd,Even,Mark,Space */ - BYTE StopBits; /* 0,1,2 = 1, 1.5, 2 */ - char XonChar; /* Tx and Rx X-ON character */ - char XoffChar; /* Tx and Rx X-OFF character */ - char ErrorChar; /* Error replacement char */ - char EofChar; /* End of Input character */ - char EvtChar; /* Received Event character */ - WORD wReserved1; /* Fill for now. */ -} FTDCB, *LPFTDCB; - -typedef struct _FTTIMEOUTS { - DWORD ReadIntervalTimeout; /* Maximum time between read chars. */ - DWORD ReadTotalTimeoutMultiplier; /* Multiplier of characters. */ - DWORD ReadTotalTimeoutConstant; /* Constant in milliseconds. */ - DWORD WriteTotalTimeoutMultiplier; /* Multiplier of characters. */ - DWORD WriteTotalTimeoutConstant; /* Constant in milliseconds. */ -} FTTIMEOUTS,*LPFTTIMEOUTS; - - -FTD2XX_API -BOOL WINAPI FT_W32_ClearCommBreak( - FT_HANDLE ftHandle - ); - -FTD2XX_API -BOOL WINAPI FT_W32_ClearCommError( - FT_HANDLE ftHandle, - LPDWORD lpdwErrors, - LPFTCOMSTAT lpftComstat - ); - -FTD2XX_API -BOOL WINAPI FT_W32_EscapeCommFunction( - FT_HANDLE ftHandle, - DWORD dwFunc - ); - -FTD2XX_API -BOOL WINAPI FT_W32_GetCommModemStatus( - FT_HANDLE ftHandle, - LPDWORD lpdwModemStatus - ); - -FTD2XX_API -BOOL WINAPI FT_W32_GetCommState( - FT_HANDLE ftHandle, - LPFTDCB lpftDcb - ); - -FTD2XX_API -BOOL WINAPI FT_W32_GetCommTimeouts( - FT_HANDLE ftHandle, - FTTIMEOUTS *pTimeouts - ); - -FTD2XX_API -BOOL WINAPI FT_W32_PurgeComm( - FT_HANDLE ftHandle, - DWORD dwMask - ); - -FTD2XX_API -BOOL WINAPI FT_W32_SetCommBreak( - FT_HANDLE ftHandle - ); - -FTD2XX_API -BOOL WINAPI FT_W32_SetCommMask( - FT_HANDLE ftHandle, - ULONG ulEventMask - ); - -FTD2XX_API -BOOL WINAPI FT_W32_GetCommMask( - FT_HANDLE ftHandle, - LPDWORD lpdwEventMask - ); - -FTD2XX_API -BOOL WINAPI FT_W32_SetCommState( - FT_HANDLE ftHandle, - LPFTDCB lpftDcb - ); - -FTD2XX_API -BOOL WINAPI FT_W32_SetCommTimeouts( - FT_HANDLE ftHandle, - FTTIMEOUTS *pTimeouts - ); - -FTD2XX_API -BOOL WINAPI FT_W32_SetupComm( - FT_HANDLE ftHandle, - DWORD dwReadBufferSize, - DWORD dwWriteBufferSize - ); - -FTD2XX_API -BOOL WINAPI FT_W32_WaitCommEvent( - FT_HANDLE ftHandle, - PULONG pulEvent, - LPOVERLAPPED lpOverlapped - ); - - -// -// Device information -// - -typedef struct _ft_device_list_info_node { - ULONG Flags; - ULONG Type; - ULONG ID; - DWORD LocId; - char SerialNumber[16]; - char Description[64]; - FT_HANDLE ftHandle; -} FT_DEVICE_LIST_INFO_NODE; - - -FTD2XX_API -FT_STATUS WINAPI FT_CreateDeviceInfoList( - LPDWORD lpdwNumDevs - ); - -FTD2XX_API -FT_STATUS WINAPI FT_GetDeviceInfoList( - FT_DEVICE_LIST_INFO_NODE *pDest, - LPDWORD lpdwNumDevs - ); - -FTD2XX_API -FT_STATUS WINAPI FT_GetDeviceInfoDetail( - DWORD dwIndex, - LPDWORD lpdwFlags, - LPDWORD lpdwType, - LPDWORD lpdwID, - LPDWORD lpdwLocId, - LPVOID lpSerialNumber, - LPVOID lpDescription, - FT_HANDLE *pftHandle - ); - - -// -// Version information -// - -FTD2XX_API -FT_STATUS WINAPI FT_GetDriverVersion( - FT_HANDLE ftHandle, - LPDWORD lpdwVersion - ); - -FTD2XX_API -FT_STATUS WINAPI FT_GetLibraryVersion( - LPDWORD lpdwVersion - ); - - -FTD2XX_API -FT_STATUS WINAPI FT_Rescan( - void - ); - -FTD2XX_API -FT_STATUS WINAPI FT_Reload( - WORD wVid, - WORD wPid - ); - - -#ifdef __cplusplus -} -#endif - - -#endif /* FTD2XX_H */ - +/*++ + +Copyright (c) 2001-2006 Future Technology Devices International Ltd. + +Module Name: + + ftd2xx.h + +Abstract: + + Native USB device driver for FTDI FT8U232/245 + FTD2XX library definitions + +Environment: + + kernel & user mode + +Revision History: + + 13/03/01 awm Created. + 13/01/03 awm Added device information support. + 19/03/03 awm Added FT_W32_CancelIo. + 12/06/03 awm Added FT_StopInTask and FT_RestartInTask. + 18/09/03 awm Added FT_SetResetPipeRetryCount. + 10/10/03 awm Added FT_ResetPort. + 23/01/04 awm Added support for open-by-location. + 16/03/04 awm Added support for FT2232C. + 23/09/04 awm Added support for FT232R. + 20/10/04 awm Added FT_CyclePort. + 18/01/05 awm Added FT_DEVICE_LIST_INFO_NODE type. + 11/02/05 awm Added LocId to FT_DEVICE_LIST_INFO_NODE. + 25/08/05 awm Added FT_SetDeadmanTimeout. + 02/12/05 awm Removed obsolete references. + 05/12/05 awm Added FT_GetVersion, FT_GetVersionEx. + 08/09/06 awm Added FT_W32_GetCommMask. + 11/09/06 awm Added FT_Rescan. + + +--*/ + + +#ifndef FTD2XX_H +#define FTD2XX_H + +// The following ifdef block is the standard way of creating macros +// which make exporting from a DLL simpler. All files within this DLL +// are compiled with the FTD2XX_EXPORTS symbol defined on the command line. +// This symbol should not be defined on any project that uses this DLL. +// This way any other project whose source files include this file see +// FTD2XX_API functions as being imported from a DLL, whereas this DLL +// sees symbols defined with this macro as being exported. + +#ifdef FTD2XX_EXPORTS +#define FTD2XX_API __declspec(dllexport) +#else +#define FTD2XX_API __declspec(dllimport) +#endif + + +typedef PVOID FT_HANDLE; +typedef ULONG FT_STATUS; + +// +// Device status +// +enum { + FT_OK, + FT_INVALID_HANDLE, + FT_DEVICE_NOT_FOUND, + FT_DEVICE_NOT_OPENED, + FT_IO_ERROR, + FT_INSUFFICIENT_RESOURCES, + FT_INVALID_PARAMETER, + FT_INVALID_BAUD_RATE, + + FT_DEVICE_NOT_OPENED_FOR_ERASE, + FT_DEVICE_NOT_OPENED_FOR_WRITE, + FT_FAILED_TO_WRITE_DEVICE, + FT_EEPROM_READ_FAILED, + FT_EEPROM_WRITE_FAILED, + FT_EEPROM_ERASE_FAILED, + FT_EEPROM_NOT_PRESENT, + FT_EEPROM_NOT_PROGRAMMED, + FT_INVALID_ARGS, + FT_NOT_SUPPORTED, + FT_OTHER_ERROR, + FT_DEVICE_LIST_NOT_READY, +}; + + +#define FT_SUCCESS(status) ((status) == FT_OK) + +// +// FT_OpenEx Flags +// + +#define FT_OPEN_BY_SERIAL_NUMBER 1 +#define FT_OPEN_BY_DESCRIPTION 2 +#define FT_OPEN_BY_LOCATION 4 + +// +// FT_ListDevices Flags (used in conjunction with FT_OpenEx Flags +// + +#define FT_LIST_NUMBER_ONLY 0x80000000 +#define FT_LIST_BY_INDEX 0x40000000 +#define FT_LIST_ALL 0x20000000 + +#define FT_LIST_MASK (FT_LIST_NUMBER_ONLY|FT_LIST_BY_INDEX|FT_LIST_ALL) + +// +// Baud Rates +// + +#define FT_BAUD_300 300 +#define FT_BAUD_600 600 +#define FT_BAUD_1200 1200 +#define FT_BAUD_2400 2400 +#define FT_BAUD_4800 4800 +#define FT_BAUD_9600 9600 +#define FT_BAUD_14400 14400 +#define FT_BAUD_19200 19200 +#define FT_BAUD_38400 38400 +#define FT_BAUD_57600 57600 +#define FT_BAUD_115200 115200 +#define FT_BAUD_230400 230400 +#define FT_BAUD_460800 460800 +#define FT_BAUD_921600 921600 + +// +// Word Lengths +// + +#define FT_BITS_8 (UCHAR) 8 +#define FT_BITS_7 (UCHAR) 7 +#define FT_BITS_6 (UCHAR) 6 +#define FT_BITS_5 (UCHAR) 5 + +// +// Stop Bits +// + +#define FT_STOP_BITS_1 (UCHAR) 0 +#define FT_STOP_BITS_1_5 (UCHAR) 1 +#define FT_STOP_BITS_2 (UCHAR) 2 + +// +// Parity +// + +#define FT_PARITY_NONE (UCHAR) 0 +#define FT_PARITY_ODD (UCHAR) 1 +#define FT_PARITY_EVEN (UCHAR) 2 +#define FT_PARITY_MARK (UCHAR) 3 +#define FT_PARITY_SPACE (UCHAR) 4 + +// +// Flow Control +// + +#define FT_FLOW_NONE 0x0000 +#define FT_FLOW_RTS_CTS 0x0100 +#define FT_FLOW_DTR_DSR 0x0200 +#define FT_FLOW_XON_XOFF 0x0400 + +// +// Purge rx and tx buffers +// +#define FT_PURGE_RX 1 +#define FT_PURGE_TX 2 + +// +// Events +// + +typedef void (*PFT_EVENT_HANDLER)(DWORD,DWORD); + +#define FT_EVENT_RXCHAR 1 +#define FT_EVENT_MODEM_STATUS 2 + +// +// Timeouts +// + +#define FT_DEFAULT_RX_TIMEOUT 300 +#define FT_DEFAULT_TX_TIMEOUT 300 + +// +// Device types +// + +typedef ULONG FT_DEVICE; + +enum { + FT_DEVICE_BM, + FT_DEVICE_AM, + FT_DEVICE_100AX, + FT_DEVICE_UNKNOWN, + FT_DEVICE_2232C, + FT_DEVICE_232R +}; + + +#ifdef __cplusplus +extern "C" { +#endif + + +FTD2XX_API +FT_STATUS WINAPI FT_Open( + int deviceNumber, + FT_HANDLE *pHandle + ); + +FTD2XX_API +FT_STATUS WINAPI FT_OpenEx( + PVOID pArg1, + DWORD Flags, + FT_HANDLE *pHandle + ); + +FTD2XX_API +FT_STATUS WINAPI FT_ListDevices( + PVOID pArg1, + PVOID pArg2, + DWORD Flags + ); + +FTD2XX_API +FT_STATUS WINAPI FT_Close( + FT_HANDLE ftHandle + ); + +FTD2XX_API +FT_STATUS WINAPI FT_Read( + FT_HANDLE ftHandle, + LPVOID lpBuffer, + DWORD nBufferSize, + LPDWORD lpBytesReturned + ); + +FTD2XX_API +FT_STATUS WINAPI FT_Write( + FT_HANDLE ftHandle, + LPVOID lpBuffer, + DWORD nBufferSize, + LPDWORD lpBytesWritten + ); + +FTD2XX_API +FT_STATUS WINAPI FT_IoCtl( + FT_HANDLE ftHandle, + DWORD dwIoControlCode, + LPVOID lpInBuf, + DWORD nInBufSize, + LPVOID lpOutBuf, + DWORD nOutBufSize, + LPDWORD lpBytesReturned, + LPOVERLAPPED lpOverlapped + ); + +FTD2XX_API +FT_STATUS WINAPI FT_SetBaudRate( + FT_HANDLE ftHandle, + ULONG BaudRate + ); + +FTD2XX_API +FT_STATUS WINAPI FT_SetDivisor( + FT_HANDLE ftHandle, + USHORT Divisor + ); + +FTD2XX_API +FT_STATUS WINAPI FT_SetDataCharacteristics( + FT_HANDLE ftHandle, + UCHAR WordLength, + UCHAR StopBits, + UCHAR Parity + ); + +FTD2XX_API +FT_STATUS WINAPI FT_SetFlowControl( + FT_HANDLE ftHandle, + USHORT FlowControl, + UCHAR XonChar, + UCHAR XoffChar + ); + +FTD2XX_API +FT_STATUS WINAPI FT_ResetDevice( + FT_HANDLE ftHandle + ); + +FTD2XX_API +FT_STATUS WINAPI FT_SetDtr( + FT_HANDLE ftHandle + ); + +FTD2XX_API +FT_STATUS WINAPI FT_ClrDtr( + FT_HANDLE ftHandle + ); + +FTD2XX_API +FT_STATUS WINAPI FT_SetRts( + FT_HANDLE ftHandle + ); + +FTD2XX_API +FT_STATUS WINAPI FT_ClrRts( + FT_HANDLE ftHandle + ); + +FTD2XX_API +FT_STATUS WINAPI FT_GetModemStatus( + FT_HANDLE ftHandle, + ULONG *pModemStatus + ); + +FTD2XX_API +FT_STATUS WINAPI FT_SetChars( + FT_HANDLE ftHandle, + UCHAR EventChar, + UCHAR EventCharEnabled, + UCHAR ErrorChar, + UCHAR ErrorCharEnabled + ); + +FTD2XX_API +FT_STATUS WINAPI FT_Purge( + FT_HANDLE ftHandle, + ULONG Mask + ); + +FTD2XX_API +FT_STATUS WINAPI FT_SetTimeouts( + FT_HANDLE ftHandle, + ULONG ReadTimeout, + ULONG WriteTimeout + ); + +FTD2XX_API +FT_STATUS WINAPI FT_GetQueueStatus( + FT_HANDLE ftHandle, + DWORD *dwRxBytes + ); + +FTD2XX_API +FT_STATUS WINAPI FT_SetEventNotification( + FT_HANDLE ftHandle, + DWORD Mask, + PVOID Param + ); + +FTD2XX_API +FT_STATUS WINAPI FT_GetStatus( + FT_HANDLE ftHandle, + DWORD *dwRxBytes, + DWORD *dwTxBytes, + DWORD *dwEventDWord + ); + +FTD2XX_API +FT_STATUS WINAPI FT_SetBreakOn( + FT_HANDLE ftHandle + ); + +FTD2XX_API +FT_STATUS WINAPI FT_SetBreakOff( + FT_HANDLE ftHandle + ); + +FTD2XX_API +FT_STATUS WINAPI FT_SetWaitMask( + FT_HANDLE ftHandle, + DWORD Mask + ); + +FTD2XX_API +FT_STATUS WINAPI FT_WaitOnMask( + FT_HANDLE ftHandle, + DWORD *Mask + ); + +FTD2XX_API +FT_STATUS WINAPI FT_GetEventStatus( + FT_HANDLE ftHandle, + DWORD *dwEventDWord + ); + +FTD2XX_API +FT_STATUS WINAPI FT_ReadEE( + FT_HANDLE ftHandle, + DWORD dwWordOffset, + LPWORD lpwValue + ); + +FTD2XX_API +FT_STATUS WINAPI FT_WriteEE( + FT_HANDLE ftHandle, + DWORD dwWordOffset, + WORD wValue + ); + +FTD2XX_API +FT_STATUS WINAPI FT_EraseEE( + FT_HANDLE ftHandle + ); + +// +// structure to hold program data for FT_Program function +// +typedef struct ft_program_data { + + DWORD Signature1; // Header - must be 0x00000000 + DWORD Signature2; // Header - must be 0xffffffff + DWORD Version; // Header - FT_PROGRAM_DATA version + // 0 = original + // 1 = FT2232C extensions + // 2 = FT232R extensions + + WORD VendorId; // 0x0403 + WORD ProductId; // 0x6001 + char *Manufacturer; // "FTDI" + char *ManufacturerId; // "FT" + char *Description; // "USB HS Serial Converter" + char *SerialNumber; // "FT000001" if fixed, or NULL + WORD MaxPower; // 0 < MaxPower <= 500 + WORD PnP; // 0 = disabled, 1 = enabled + WORD SelfPowered; // 0 = bus powered, 1 = self powered + WORD RemoteWakeup; // 0 = not capable, 1 = capable + // + // Rev4 extensions + // + UCHAR Rev4; // non-zero if Rev4 chip, zero otherwise + UCHAR IsoIn; // non-zero if in endpoint is isochronous + UCHAR IsoOut; // non-zero if out endpoint is isochronous + UCHAR PullDownEnable; // non-zero if pull down enabled + UCHAR SerNumEnable; // non-zero if serial number to be used + UCHAR USBVersionEnable; // non-zero if chip uses USBVersion + WORD USBVersion; // BCD (0x0200 => USB2) + // + // FT2232C extensions + // + UCHAR Rev5; // non-zero if Rev5 chip, zero otherwise + UCHAR IsoInA; // non-zero if in endpoint is isochronous + UCHAR IsoInB; // non-zero if in endpoint is isochronous + UCHAR IsoOutA; // non-zero if out endpoint is isochronous + UCHAR IsoOutB; // non-zero if out endpoint is isochronous + UCHAR PullDownEnable5; // non-zero if pull down enabled + UCHAR SerNumEnable5; // non-zero if serial number to be used + UCHAR USBVersionEnable5; // non-zero if chip uses USBVersion + WORD USBVersion5; // BCD (0x0200 => USB2) + UCHAR AIsHighCurrent; // non-zero if interface is high current + UCHAR BIsHighCurrent; // non-zero if interface is high current + UCHAR IFAIsFifo; // non-zero if interface is 245 FIFO + UCHAR IFAIsFifoTar; // non-zero if interface is 245 FIFO CPU target + UCHAR IFAIsFastSer; // non-zero if interface is Fast serial + UCHAR AIsVCP; // non-zero if interface is to use VCP drivers + UCHAR IFBIsFifo; // non-zero if interface is 245 FIFO + UCHAR IFBIsFifoTar; // non-zero if interface is 245 FIFO CPU target + UCHAR IFBIsFastSer; // non-zero if interface is Fast serial + UCHAR BIsVCP; // non-zero if interface is to use VCP drivers + // + // FT232R extensions + // + UCHAR UseExtOsc; // Use External Oscillator + UCHAR HighDriveIOs; // High Drive I/Os + UCHAR EndpointSize; // Endpoint size + + UCHAR PullDownEnableR; // non-zero if pull down enabled + UCHAR SerNumEnableR; // non-zero if serial number to be used + + UCHAR InvertTXD; // non-zero if invert TXD + UCHAR InvertRXD; // non-zero if invert RXD + UCHAR InvertRTS; // non-zero if invert RTS + UCHAR InvertCTS; // non-zero if invert CTS + UCHAR InvertDTR; // non-zero if invert DTR + UCHAR InvertDSR; // non-zero if invert DSR + UCHAR InvertDCD; // non-zero if invert DCD + UCHAR InvertRI; // non-zero if invert RI + + UCHAR Cbus0; // Cbus Mux control + UCHAR Cbus1; // Cbus Mux control + UCHAR Cbus2; // Cbus Mux control + UCHAR Cbus3; // Cbus Mux control + UCHAR Cbus4; // Cbus Mux control + + UCHAR RIsD2XX; // non-zero if using D2XX driver + +} FT_PROGRAM_DATA, *PFT_PROGRAM_DATA; + +FTD2XX_API +FT_STATUS WINAPI FT_EE_Program( + FT_HANDLE ftHandle, + PFT_PROGRAM_DATA pData + ); + +FTD2XX_API +FT_STATUS WINAPI FT_EE_ProgramEx( + FT_HANDLE ftHandle, + PFT_PROGRAM_DATA pData, + char *Manufacturer, + char *ManufacturerId, + char *Description, + char *SerialNumber + ); + +FTD2XX_API +FT_STATUS WINAPI FT_EE_Read( + FT_HANDLE ftHandle, + PFT_PROGRAM_DATA pData + ); + +FTD2XX_API +FT_STATUS WINAPI FT_EE_ReadEx( + FT_HANDLE ftHandle, + PFT_PROGRAM_DATA pData, + char *Manufacturer, + char *ManufacturerId, + char *Description, + char *SerialNumber + ); + +FTD2XX_API +FT_STATUS WINAPI FT_EE_UASize( + FT_HANDLE ftHandle, + LPDWORD lpdwSize + ); + +FTD2XX_API +FT_STATUS WINAPI FT_EE_UAWrite( + FT_HANDLE ftHandle, + PUCHAR pucData, + DWORD dwDataLen + ); + +FTD2XX_API +FT_STATUS WINAPI FT_EE_UARead( + FT_HANDLE ftHandle, + PUCHAR pucData, + DWORD dwDataLen, + LPDWORD lpdwBytesRead + ); + +FTD2XX_API +FT_STATUS WINAPI FT_SetLatencyTimer( + FT_HANDLE ftHandle, + UCHAR ucLatency + ); + +FTD2XX_API +FT_STATUS WINAPI FT_GetLatencyTimer( + FT_HANDLE ftHandle, + PUCHAR pucLatency + ); + +FTD2XX_API +FT_STATUS WINAPI FT_SetBitMode( + FT_HANDLE ftHandle, + UCHAR ucMask, + UCHAR ucEnable + ); + +FTD2XX_API +FT_STATUS WINAPI FT_GetBitMode( + FT_HANDLE ftHandle, + PUCHAR pucMode + ); + +FTD2XX_API +FT_STATUS WINAPI FT_SetUSBParameters( + FT_HANDLE ftHandle, + ULONG ulInTransferSize, + ULONG ulOutTransferSize + ); + +FTD2XX_API +FT_STATUS WINAPI FT_SetDeadmanTimeout( + FT_HANDLE ftHandle, + ULONG ulDeadmanTimeout + ); + +FTD2XX_API +FT_STATUS WINAPI FT_GetDeviceInfo( + FT_HANDLE ftHandle, + FT_DEVICE *lpftDevice, + LPDWORD lpdwID, + PCHAR SerialNumber, + PCHAR Description, + LPVOID Dummy + ); + +FTD2XX_API +FT_STATUS WINAPI FT_StopInTask( + FT_HANDLE ftHandle + ); + +FTD2XX_API +FT_STATUS WINAPI FT_RestartInTask( + FT_HANDLE ftHandle + ); + +FTD2XX_API +FT_STATUS WINAPI FT_SetResetPipeRetryCount( + FT_HANDLE ftHandle, + DWORD dwCount + ); + +FTD2XX_API +FT_STATUS WINAPI FT_ResetPort( + FT_HANDLE ftHandle + ); + +FTD2XX_API +FT_STATUS WINAPI FT_CyclePort( + FT_HANDLE ftHandle + ); + + +// +// Win32-type functions +// + +FTD2XX_API +FT_HANDLE WINAPI FT_W32_CreateFile( + LPCTSTR lpszName, + DWORD dwAccess, + DWORD dwShareMode, + LPSECURITY_ATTRIBUTES lpSecurityAttributes, + DWORD dwCreate, + DWORD dwAttrsAndFlags, + HANDLE hTemplate + ); + +FTD2XX_API +BOOL WINAPI FT_W32_CloseHandle( + FT_HANDLE ftHandle + ); + +FTD2XX_API +BOOL WINAPI FT_W32_ReadFile( + FT_HANDLE ftHandle, + LPVOID lpBuffer, + DWORD nBufferSize, + LPDWORD lpBytesReturned, + LPOVERLAPPED lpOverlapped + ); + +FTD2XX_API +BOOL WINAPI FT_W32_WriteFile( + FT_HANDLE ftHandle, + LPVOID lpBuffer, + DWORD nBufferSize, + LPDWORD lpBytesWritten, + LPOVERLAPPED lpOverlapped + ); + +FTD2XX_API +DWORD WINAPI FT_W32_GetLastError( + FT_HANDLE ftHandle + ); + +FTD2XX_API +BOOL WINAPI FT_W32_GetOverlappedResult( + FT_HANDLE ftHandle, + LPOVERLAPPED lpOverlapped, + LPDWORD lpdwBytesTransferred, + BOOL bWait + ); + +FTD2XX_API +BOOL WINAPI FT_W32_CancelIo( + FT_HANDLE ftHandle + ); + + +// +// Win32 COMM API type functions +// +typedef struct _FTCOMSTAT { + DWORD fCtsHold : 1; + DWORD fDsrHold : 1; + DWORD fRlsdHold : 1; + DWORD fXoffHold : 1; + DWORD fXoffSent : 1; + DWORD fEof : 1; + DWORD fTxim : 1; + DWORD fReserved : 25; + DWORD cbInQue; + DWORD cbOutQue; +} FTCOMSTAT, *LPFTCOMSTAT; + +typedef struct _FTDCB { + DWORD DCBlength; /* sizeof(FTDCB) */ + DWORD BaudRate; /* Baudrate at which running */ + DWORD fBinary: 1; /* Binary Mode (skip EOF check) */ + DWORD fParity: 1; /* Enable parity checking */ + DWORD fOutxCtsFlow:1; /* CTS handshaking on output */ + DWORD fOutxDsrFlow:1; /* DSR handshaking on output */ + DWORD fDtrControl:2; /* DTR Flow control */ + DWORD fDsrSensitivity:1; /* DSR Sensitivity */ + DWORD fTXContinueOnXoff: 1; /* Continue TX when Xoff sent */ + DWORD fOutX: 1; /* Enable output X-ON/X-OFF */ + DWORD fInX: 1; /* Enable input X-ON/X-OFF */ + DWORD fErrorChar: 1; /* Enable Err Replacement */ + DWORD fNull: 1; /* Enable Null stripping */ + DWORD fRtsControl:2; /* Rts Flow control */ + DWORD fAbortOnError:1; /* Abort all reads and writes on Error */ + DWORD fDummy2:17; /* Reserved */ + WORD wReserved; /* Not currently used */ + WORD XonLim; /* Transmit X-ON threshold */ + WORD XoffLim; /* Transmit X-OFF threshold */ + BYTE ByteSize; /* Number of bits/byte, 4-8 */ + BYTE Parity; /* 0-4=None,Odd,Even,Mark,Space */ + BYTE StopBits; /* 0,1,2 = 1, 1.5, 2 */ + char XonChar; /* Tx and Rx X-ON character */ + char XoffChar; /* Tx and Rx X-OFF character */ + char ErrorChar; /* Error replacement char */ + char EofChar; /* End of Input character */ + char EvtChar; /* Received Event character */ + WORD wReserved1; /* Fill for now. */ +} FTDCB, *LPFTDCB; + +typedef struct _FTTIMEOUTS { + DWORD ReadIntervalTimeout; /* Maximum time between read chars. */ + DWORD ReadTotalTimeoutMultiplier; /* Multiplier of characters. */ + DWORD ReadTotalTimeoutConstant; /* Constant in milliseconds. */ + DWORD WriteTotalTimeoutMultiplier; /* Multiplier of characters. */ + DWORD WriteTotalTimeoutConstant; /* Constant in milliseconds. */ +} FTTIMEOUTS,*LPFTTIMEOUTS; + + +FTD2XX_API +BOOL WINAPI FT_W32_ClearCommBreak( + FT_HANDLE ftHandle + ); + +FTD2XX_API +BOOL WINAPI FT_W32_ClearCommError( + FT_HANDLE ftHandle, + LPDWORD lpdwErrors, + LPFTCOMSTAT lpftComstat + ); + +FTD2XX_API +BOOL WINAPI FT_W32_EscapeCommFunction( + FT_HANDLE ftHandle, + DWORD dwFunc + ); + +FTD2XX_API +BOOL WINAPI FT_W32_GetCommModemStatus( + FT_HANDLE ftHandle, + LPDWORD lpdwModemStatus + ); + +FTD2XX_API +BOOL WINAPI FT_W32_GetCommState( + FT_HANDLE ftHandle, + LPFTDCB lpftDcb + ); + +FTD2XX_API +BOOL WINAPI FT_W32_GetCommTimeouts( + FT_HANDLE ftHandle, + FTTIMEOUTS *pTimeouts + ); + +FTD2XX_API +BOOL WINAPI FT_W32_PurgeComm( + FT_HANDLE ftHandle, + DWORD dwMask + ); + +FTD2XX_API +BOOL WINAPI FT_W32_SetCommBreak( + FT_HANDLE ftHandle + ); + +FTD2XX_API +BOOL WINAPI FT_W32_SetCommMask( + FT_HANDLE ftHandle, + ULONG ulEventMask + ); + +FTD2XX_API +BOOL WINAPI FT_W32_GetCommMask( + FT_HANDLE ftHandle, + LPDWORD lpdwEventMask + ); + +FTD2XX_API +BOOL WINAPI FT_W32_SetCommState( + FT_HANDLE ftHandle, + LPFTDCB lpftDcb + ); + +FTD2XX_API +BOOL WINAPI FT_W32_SetCommTimeouts( + FT_HANDLE ftHandle, + FTTIMEOUTS *pTimeouts + ); + +FTD2XX_API +BOOL WINAPI FT_W32_SetupComm( + FT_HANDLE ftHandle, + DWORD dwReadBufferSize, + DWORD dwWriteBufferSize + ); + +FTD2XX_API +BOOL WINAPI FT_W32_WaitCommEvent( + FT_HANDLE ftHandle, + PULONG pulEvent, + LPOVERLAPPED lpOverlapped + ); + + +// +// Device information +// + +typedef struct _ft_device_list_info_node { + ULONG Flags; + ULONG Type; + ULONG ID; + DWORD LocId; + char SerialNumber[16]; + char Description[64]; + FT_HANDLE ftHandle; +} FT_DEVICE_LIST_INFO_NODE; + + +FTD2XX_API +FT_STATUS WINAPI FT_CreateDeviceInfoList( + LPDWORD lpdwNumDevs + ); + +FTD2XX_API +FT_STATUS WINAPI FT_GetDeviceInfoList( + FT_DEVICE_LIST_INFO_NODE *pDest, + LPDWORD lpdwNumDevs + ); + +FTD2XX_API +FT_STATUS WINAPI FT_GetDeviceInfoDetail( + DWORD dwIndex, + LPDWORD lpdwFlags, + LPDWORD lpdwType, + LPDWORD lpdwID, + LPDWORD lpdwLocId, + LPVOID lpSerialNumber, + LPVOID lpDescription, + FT_HANDLE *pftHandle + ); + + +// +// Version information +// + +FTD2XX_API +FT_STATUS WINAPI FT_GetDriverVersion( + FT_HANDLE ftHandle, + LPDWORD lpdwVersion + ); + +FTD2XX_API +FT_STATUS WINAPI FT_GetLibraryVersion( + LPDWORD lpdwVersion + ); + + +FTD2XX_API +FT_STATUS WINAPI FT_Rescan( + void + ); + +FTD2XX_API +FT_STATUS WINAPI FT_Reload( + WORD wVid, + WORD wPid + ); + + +#ifdef __cplusplus +} +#endif + + +#endif /* FTD2XX_H */ diff --git a/tools/sky/serialdump.c b/tools/sky/serialdump.c index ed324bb5b..12fd0abfc 100644 --- a/tools/sky/serialdump.c +++ b/tools/sky/serialdump.c @@ -55,7 +55,7 @@ usage(int result) } static void -print_hex_line(unsigned char *prefix, unsigned char *outbuf, int index) +print_hex_line(char *prefix, unsigned char *outbuf, int index) { int i; @@ -92,7 +92,8 @@ main(int argc, char **argv) char *speedname = BAUDRATE_S; char *device = MODEMDEVICE; char *timeformat = NULL; - unsigned char buf[BUFSIZE], outbuf[HCOLS]; + unsigned char buf[BUFSIZE]; + char outbuf[HCOLS]; unsigned char mode = MODE_START_TEXT; int nfound, flags = 0; unsigned char lastc = '\0'; @@ -273,7 +274,7 @@ main(int argc, char **argv) } if(FD_ISSET(fd, &smask)) { - int i, j, n = read(fd, buf, sizeof(buf)); + int i, n = read(fd, buf, sizeof(buf)); if(n < 0) { perror("could not read"); exit(-1); diff --git a/tools/sky/uip6-bridge/fakeuip.c b/tools/sky/uip6-bridge/fakeuip.c index 45f22ca11..b636f7752 100644 --- a/tools/sky/uip6-bridge/fakeuip.c +++ b/tools/sky/uip6-bridge/fakeuip.c @@ -55,7 +55,7 @@ uip_ds6_get_link_local(int8_t state) { for(locaddr = uip_ds6_if.addr_list; locaddr < uip_ds6_if.addr_list + UIP_DS6_ADDR_NB; locaddr++) { if((locaddr->isused) && (state == - 1 || locaddr->state == state) - && (uip_is_addr_link_local(&locaddr->ipaddr))) { + && (uip_is_addr_linklocal(&locaddr->ipaddr))) { return locaddr; } } diff --git a/tools/stm32w/uip6_bridge/fakeuip.c b/tools/stm32w/uip6_bridge/fakeuip.c index e356a6469..2ae3285b1 100644 --- a/tools/stm32w/uip6_bridge/fakeuip.c +++ b/tools/stm32w/uip6_bridge/fakeuip.c @@ -55,7 +55,7 @@ uip_ds6_get_link_local(int8_t state) { for(locaddr = uip_ds6_if.addr_list; locaddr < uip_ds6_if.addr_list + UIP_DS6_ADDR_NB; locaddr++) { if((locaddr->isused) && (state == - 1 || locaddr->state == state) - && (uip_is_addr_link_local(&locaddr->ipaddr))) { + && (uip_is_addr_linklocal(&locaddr->ipaddr))) { return locaddr; } } diff --git a/tools/tools-utils.c b/tools/tools-utils.c new file mode 100644 index 000000000..6ad0a9365 --- /dev/null +++ b/tools/tools-utils.c @@ -0,0 +1,161 @@ +/* + * Copyright (c) 2015, SICS Swedish ICT + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the Contiki operating system. + * + */ + +#include "tools-utils.h" + +speed_t +select_baudrate(int baudrate) { + switch(baudrate) { +#ifdef B50 + case 50: + return B50; +#endif +#ifdef B75 + case 75: + return B75; +#endif +#ifdef B110 + case 110: + return B110; +#endif +#ifdef B134 + case 134: + return B134; +#endif +#ifdef B150 + case 150: + return B150; +#endif +#ifdef B200 + case 200: + return B200; +#endif +#ifdef B300 + case 300: + return B300; +#endif +#ifdef B600 + case 600: + return B600; +#endif +#ifdef B1200 + case 1200: + return B1200; +#endif +#ifdef B1800 + case 1800: + return B1800; +#endif +#ifdef B2400 + case 2400: + return B2400; +#endif +#ifdef B4800 + case 4800: + return B4800; +#endif +#ifdef B9600 + case 9600: + return B9600; +#endif +#ifdef B19200 + case 19200: + return B19200; +#endif +#ifdef B38400 + case 38400: + return B38400; +#endif +#ifdef B57600 + case 57600: + return B57600; +#endif +#ifdef B115200 + case 115200: + return B115200; +#endif +#ifdef B230400 + return B230400; +#endif +#ifdef B460800 + case 460800: + return B460800; +#endif +#ifdef B500000 + case 500000: + return B500000; +#endif +#ifdef B576000 + case 576000: + return B576000; +#endif +#ifdef B921600 + case 921600: + return B921600; +#endif +#ifdef B1000000 + case 1000000: + return B1000000; +#endif +#ifdef B1152000 + case 1152000: + return B1152000; +#endif +#ifdef B1500000 + case 1500000: + return B1500000; +#endif +#ifdef B2000000 + case 2000000: + return B2000000; +#endif +#ifdef B2500000 + case 2500000: + return B2500000; +#endif +#ifdef B3000000 + case 3000000: + return B3000000; +#endif +#ifdef B3500000 + case 3500000: + return B3500000; +#endif +#ifdef B4000000 + case 4000000: + return B4000000; +#endif + default: + return 0; + } +} + diff --git a/tools/tools-utils.h b/tools/tools-utils.h new file mode 100644 index 000000000..4b996cc75 --- /dev/null +++ b/tools/tools-utils.h @@ -0,0 +1,79 @@ +/* + * Copyright (c) 2015, SICS Swedish ICT + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the Contiki operating system. + * + */ + +#ifndef TOOLS_UTILS +#define TOOLS_UTILS + +#include + +#if __APPLE__ +#ifndef B460800 +#define B460800 460800 +#endif +#ifndef B500000 +#define B500000 500000 +#endif +#ifndef B576000 +#define B576000 576000 +#endif +#ifndef B921600 +#define B921600 921600 +#endif +#ifndef B1000000 +#define B1000000 1000000 +#endif +#ifndef B1152000 +#define B1152000 1152000 +#endif +#ifndef B1500000 +#define B1500000 1500000 +#endif +#ifndef B2000000 +#define B2000000 2000000 +#endif +#ifndef B2500000 +#define B2500000 2500000 +#endif +#ifndef B3000000 +#define B3000000 3000000 +#endif +#ifndef B3500000 +#define B3500000 3500000 +#endif +#ifndef B4000000 +#define B4000000 4000000 +#endif +#endif + +speed_t select_baudrate(int baudrate); + +#endif /* TOOLS_UTILS */ diff --git a/tools/tunslip6.c b/tools/tunslip6.c index 65e440800..0f10a72bf 100644 --- a/tools/tunslip6.c +++ b/tools/tunslip6.c @@ -34,7 +34,7 @@ /* Below define allows importing saved output into Wireshark as "Raw IP" packet type */ #define WIRESHARK_IMPORT_FORMAT 1 - + #include #include #include @@ -56,13 +56,20 @@ #include +#include "tools-utils.h" + +#ifndef BAUDRATE +#define BAUDRATE B115200 +#endif +speed_t b_rate = BAUDRATE; + int verbose = 1; const char *ipaddr; const char *netmask; int slipfd = 0; uint16_t basedelay=0,delaymsec=0; uint32_t startsec,startmsec,delaystartsec,delaystartmsec; -int timestamp = 0, flowcontrol=0; +int timestamp = 0, flowcontrol=0, showprogress=0, flowcontrol_xonxoff=0; int ssystem(const char *fmt, ...) __attribute__((__format__ (__printf__, 1, 2))); @@ -71,11 +78,14 @@ void write_to_serial(int outfd, void *inbuf, int len); void slip_send(int fd, unsigned char c); void slip_send_char(int fd, unsigned char c); -//#define PROGRESS(s) fprintf(stderr, s) -#define PROGRESS(s) do { } while (0) +#define PROGRESS(s) if(showprogress) fprintf(stderr, s) char tundev[1024] = { "" }; +/* IPv6 required minimum MTU */ +#define MIN_DEVMTU 1500 +int devmtu = MIN_DEVMTU; + int ssystem(const char *fmt, ...) __attribute__((__format__ (__printf__, 1, 2))); @@ -92,11 +102,15 @@ ssystem(const char *fmt, ...) return system(cmd); } -#define SLIP_END 0300 -#define SLIP_ESC 0333 -#define SLIP_ESC_END 0334 -#define SLIP_ESC_ESC 0335 +#define SLIP_END 0300 +#define SLIP_ESC 0333 +#define SLIP_ESC_END 0334 +#define SLIP_ESC_ESC 0335 +#define SLIP_ESC_XON 0336 +#define SLIP_ESC_XOFF 0337 +#define XON 17 +#define XOFF 19 /* get sockaddr, IPv4 or IPv6: */ void * @@ -116,7 +130,7 @@ stamptime(void) time_t t; struct tm *tmp; char timec[20]; - + gettimeofday(&tv, NULL) ; msecs=tv.tv_usec/1000; secs=tv.tv_sec; @@ -187,7 +201,7 @@ serial_to_tun(FILE *inslip, int outfd) clearerr(inslip); return; } - /* fprintf(stderr, ".");*/ + PROGRESS("."); switch(c) { case SLIP_END: if(inbufptr > 0) { @@ -225,8 +239,7 @@ serial_to_tun(FILE *inslip, int outfd) inet_pton(AF_INET6, ipaddr, &addr); if(timestamp) stamptime(); fprintf(stderr,"*** Address:%s => %02x%02x:%02x%02x:%02x%02x:%02x%02x\n", - // printf("*** Address:%s => %02x%02x:%02x%02x:%02x%02x:%02x%02x\n", - ipaddr, + ipaddr, addr.s6_addr[0], addr.s6_addr[1], addr.s6_addr[2], addr.s6_addr[3], addr.s6_addr[4], addr.s6_addr[5], @@ -240,7 +253,7 @@ serial_to_tun(FILE *inslip, int outfd) slip_send(slipfd, SLIP_END); } #define DEBUG_LINE_MARKER '\r' - } else if(uip.inbuf[0] == DEBUG_LINE_MARKER) { + } else if(uip.inbuf[0] == DEBUG_LINE_MARKER) { fwrite(uip.inbuf + 1, inbufptr - 1, 1, stdout); } else if(is_sensible_string(uip.inbuf, inbufptr)) { if(verbose==1) { /* strings already echoed below for verbose>1 */ @@ -289,6 +302,12 @@ serial_to_tun(FILE *inslip, int outfd) case SLIP_ESC_ESC: c = SLIP_ESC; break; + case SLIP_ESC_XON: + c = XON; + break; + case SLIP_ESC_XOFF: + c = XOFF; + break; } /* FALLTHROUGH */ default: @@ -310,7 +329,7 @@ serial_to_tun(FILE *inslip, int outfd) if(c=='\n') if(timestamp) stamptime(); } } - + break; } @@ -332,6 +351,22 @@ slip_send_char(int fd, unsigned char c) slip_send(fd, SLIP_ESC); slip_send(fd, SLIP_ESC_ESC); break; + case XON: + if(flowcontrol_xonxoff) { + slip_send(fd, SLIP_ESC); + slip_send(fd, SLIP_ESC_XON); + } else { + slip_send(fd, c); + } + break; + case XOFF: + if(flowcontrol_xonxoff) { + slip_send(fd, SLIP_ESC); + slip_send(fd, SLIP_ESC_XOFF); + } else { + slip_send(fd, c); + } + break; default: slip_send(fd, c); break; @@ -358,7 +393,7 @@ void slip_flushbuf(int fd) { int n; - + if(slip_empty()) { return; } @@ -417,6 +452,22 @@ write_to_serial(int outfd, void *inbuf, int len) slip_send(outfd, SLIP_ESC); slip_send(outfd, SLIP_ESC_ESC); break; + case XON: + if(flowcontrol_xonxoff) { + slip_send(outfd, SLIP_ESC); + slip_send(outfd, SLIP_ESC_XON); + } else { + slip_send(outfd, p[i]); + } + break; + case XOFF: + if(flowcontrol_xonxoff) { + slip_send(outfd, SLIP_ESC); + slip_send(outfd, SLIP_ESC_XOFF); + } else { + slip_send(outfd, p[i]); + } + break; default: slip_send(outfd, p[i]); break; @@ -444,11 +495,6 @@ tun_to_serial(int infd, int outfd) return size; } -#ifndef BAUDRATE -#define BAUDRATE B115200 -#endif -speed_t b_rate = BAUDRATE; - void stty_telos(int fd) { @@ -469,6 +515,12 @@ stty_telos(int fd) tty.c_cflag |= CRTSCTS; else tty.c_cflag &= ~CRTSCTS; + tty.c_iflag &= ~IXON; + if(flowcontrol_xonxoff) { + tty.c_iflag |= IXOFF | IXANY; + } else { + tty.c_iflag &= ~IXOFF & ~IXANY; + } tty.c_cflag &= ~HUPCL; tty.c_cflag &= ~CLOCAL; @@ -514,6 +566,7 @@ tun_alloc(char *dev, int tap) int fd, err; if( (fd = open("/dev/net/tun", O_RDWR)) < 0 ) { + perror("can not open /dev/net/tun"); return -1; } @@ -530,8 +583,12 @@ tun_alloc(char *dev, int tap) if((err = ioctl(fd, TUNSETIFF, (void *) &ifr)) < 0 ) { close(fd); + fprintf(stderr, "can not tunsetiff to %s (flags=%08x): %s\n", dev, ifr.ifr_flags, + strerror(errno)); return err; } + + /* get resulting tunnel name */ strcpy(dev, ifr.ifr_name); return fd; } @@ -606,7 +663,7 @@ ifconf(const char *tundev, const char *ipaddr) { #ifdef linux if (timestamp) stamptime(); - ssystem("ifconfig %s inet `hostname` up", tundev); + ssystem("ifconfig %s inet `hostname` mtu %d up", tundev, devmtu); if (timestamp) stamptime(); ssystem("ifconfig %s add %s", tundev, ipaddr); @@ -636,7 +693,7 @@ ifconf(const char *tundev, const char *ipaddr) } else { cc=0; digit = c-'0'; - if (digit > 9) + if (digit > 9) digit = 10 + (c & 0xdf) - 'A'; a[ai] = (a[ai] << 4) + digit; } @@ -667,7 +724,7 @@ ifconf(const char *tundev, const char *ipaddr) prefix = "64"; } if (timestamp) stamptime(); - ssystem("ifconfig %s inet6 up", tundev ); + ssystem("ifconfig %s inet6 mtu %d up", tundev, devmtu); if (timestamp) stamptime(); ssystem("ifconfig %s inet6 %s add", tundev, ipaddr ); if (timestamp) stamptime(); @@ -676,7 +733,7 @@ ifconf(const char *tundev, const char *ipaddr) } #else if (timestamp) stamptime(); - ssystem("ifconfig %s inet `hostname` %s up", tundev, ipaddr); + ssystem("ifconfig %s inet `hostname` %s mtu %d up", tundev, ipaddr, devmtu); if (timestamp) stamptime(); ssystem("sysctl -w net.inet.ip.forwarding=1"); #endif /* !linux */ @@ -698,13 +755,14 @@ main(int argc, char **argv) const char *port = NULL; const char *prog; int baudrate = -2; + int ipa_enable = 0; int tap = 0; slipfd = 0; prog = argv[0]; setvbuf(stdout, NULL, _IOLBF, 0); /* Line buffered output. */ - while((c = getopt(argc, argv, "B:HLhs:t:v::d::a:p:T")) != -1) { + while((c = getopt(argc, argv, "B:HILPhXM:s:t:v::d::a:p:T")) != -1) { switch(c) { case 'B': baudrate = atoi(optarg); @@ -713,11 +771,25 @@ main(int argc, char **argv) case 'H': flowcontrol=1; break; - + + case 'X': + flowcontrol_xonxoff=1; + break; + case 'L': timestamp=1; break; + case 'M': + devmtu=atoi(optarg); + if(devmtu < MIN_DEVMTU) { + devmtu = MIN_DEVMTU; + } + + case 'P': + showprogress=1; + break; + case 's': if(strncmp("/dev/", optarg, 5) == 0) { siodev = optarg + 5; @@ -726,6 +798,11 @@ main(int argc, char **argv) } break; + case 'I': + ipa_enable = 1; + fprintf(stderr, "Will inquire about IP address using IPA=\n"); + break; + case 't': if(strncmp("/dev/", optarg, 5) == 0) { strncpy(tundev, optarg + 5, sizeof(tundev)); @@ -755,7 +832,7 @@ main(int argc, char **argv) case 'T': tap = 1; break; - + case '?': case 'h': default: @@ -768,8 +845,11 @@ fprintf(stderr," -B baudrate 9600,19200,38400,57600,115200 (default),230400,4 fprintf(stderr," -B baudrate 9600,19200,38400,57600,115200 (default),230400\n"); #endif fprintf(stderr," -H Hardware CTS/RTS flow control (default disabled)\n"); +fprintf(stderr," -I Inquire IP address\n"); +fprintf(stderr," -X Software XON/XOFF flow control (default disabled)\n"); fprintf(stderr," -L Log output format (adds time stamps)\n"); fprintf(stderr," -s siodev Serial device (default /dev/ttyUSB0)\n"); +fprintf(stderr," -M Interface MTU (default and min: 1280)\n"); fprintf(stderr," -T Make tap interface (default is tun interface)\n"); fprintf(stderr," -t tundev Name of interface (default tap0 or tun0)\n"); fprintf(stderr," -v[level] Verbosity level\n"); @@ -797,38 +877,11 @@ exit(1); } ipaddr = argv[1]; - switch(baudrate) { - case -2: - break; /* Use default. */ - case 9600: - b_rate = B9600; - break; - case 19200: - b_rate = B19200; - break; - case 38400: - b_rate = B38400; - break; - case 57600: - b_rate = B57600; - break; - case 115200: - b_rate = B115200; - break; - case 230400: - b_rate = B230400; - break; -#ifndef __APPLE__ - case 460800: - b_rate = B460800; - break; - case 921600: - b_rate = B921600; - break; -#endif - default: - err(1, "unknown baudrate %d", baudrate); - break; + if(baudrate != -2) { /* -2: use default baudrate */ + b_rate = select_baudrate(baudrate); + if(b_rate == 0) { + err(1, "unknown baudrate %d", baudrate); + } } if(*tundev == '\0') { @@ -916,7 +969,7 @@ exit(1); if(inslip == NULL) err(1, "main: fdopen"); tunfd = tun_alloc(tundev, tap); - if(tunfd == -1) err(1, "main: open"); + if(tunfd == -1) err(1, "main: open /dev/tun"); if (timestamp) stamptime(); fprintf(stderr, "opened %s device ``/dev/%s''\n", tap ? "tap" : "tun", tundev); @@ -933,16 +986,15 @@ exit(1); FD_ZERO(&rset); FD_ZERO(&wset); -/* do not send IPA all the time... - add get MAC later... */ -/* if(got_sigalarm) { */ -/* /\* Send "?IPA". *\/ */ -/* slip_send(slipfd, '?'); */ -/* slip_send(slipfd, 'I'); */ -/* slip_send(slipfd, 'P'); */ -/* slip_send(slipfd, 'A'); */ -/* slip_send(slipfd, SLIP_END); */ -/* got_sigalarm = 0; */ -/* } */ + if(got_sigalarm && ipa_enable) { + /* Send "?IPA". */ + slip_send(slipfd, '?'); + slip_send(slipfd, 'I'); + slip_send(slipfd, 'P'); + slip_send(slipfd, 'A'); + slip_send(slipfd, SLIP_END); + got_sigalarm = 0; + } if(!slip_empty()) { /* Anything to flush? */ FD_SET(slipfd, &wset); @@ -950,7 +1002,7 @@ exit(1); FD_SET(slipfd, &rset); /* Read from slip ASAP! */ if(slipfd > maxfd) maxfd = slipfd; - + /* We only have one packet at a time queued for slip output. */ if(slip_empty()) { FD_SET(tunfd, &rset); @@ -964,12 +1016,12 @@ exit(1); if(FD_ISSET(slipfd, &rset)) { serial_to_tun(inslip, tunfd); } - + if(FD_ISSET(slipfd, &wset)) { slip_flushbuf(slipfd); - sigalarm_reset(); + if(ipa_enable) sigalarm_reset(); } - + /* Optional delay between outgoing packets */ /* Base delay times number of 6lowpan fragments to be sent */ if(delaymsec) { @@ -985,7 +1037,7 @@ exit(1); if(slip_empty() && FD_ISSET(tunfd, &rset)) { size=tun_to_serial(tunfd, slipfd); slip_flushbuf(slipfd); - sigalarm_reset(); + if(ipa_enable) sigalarm_reset(); if(basedelay) { struct timeval tv; gettimeofday(&tv, NULL) ; diff --git a/tools/wpcapslip/tcpdump.c b/tools/wpcapslip/tcpdump.c index 6883cfec3..7ecd7c50a 100644 --- a/tools/wpcapslip/tcpdump.c +++ b/tools/wpcapslip/tcpdump.c @@ -156,7 +156,7 @@ tcpflags(unsigned char flags, char *flagsstr) *flagsstr = 0; } /*---------------------------------------------------------------------------*/ -static char * CC_FASTCALL +static char * n(uint16_t num, char *ptr) { uint16_t d; @@ -179,14 +179,14 @@ n(uint16_t num, char *ptr) return ptr; } /*---------------------------------------------------------------------------*/ -static char * CC_FASTCALL +static char * d(char *ptr) { *ptr = '.'; return ptr + 1; } /*---------------------------------------------------------------------------*/ -static char * CC_FASTCALL +static char * s(char *str, char *ptr) { strcpy(ptr, str); diff --git a/tools/wpcapslip/wpcapstdio.c b/tools/wpcapslip/wpcapstdio.c index 88f1eace4..287ab07a0 100644 --- a/tools/wpcapslip/wpcapstdio.c +++ b/tools/wpcapslip/wpcapstdio.c @@ -1,597 +1,597 @@ -/* - * Copyright (c) 2012, Thingsquare, www.thingsquare.com. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the Institute nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * This file is part of the Contiki operating system. - * - * Author: Fredrik Osterlind - * Based on wpcapslip.c by : Oliver Schmidt - */ - -/* This is a stripped-down version of wpcapslip: Instead of reading from and writing - * to a serial port, this program just reads and writes to stdin/stdout. To - * achieve the same functionality as wpcapslip, this program can hence be connected - * to serialdump. But, in contrast to wpcapslip, this program can easily be connected - * to networked or simulated serial ports. -- Fredrik, 2012 */ - -#include -#include -#include -#ifdef __CYGWIN__ -#include -#else /* __CYGWIN__ */ -#include -#endif /* __CYGWIN__ */ -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include - -#include - -#include -#include - -#define PROGRESS(x) - -void wpcap_start(char *ethifaddr, char *netaddr, char *netmask, int logging); - -void wpcap_send(void *buf, int len); -void raw_send(void *buf, int len); - -uint16_t wpcap_poll(char **buf, int eth); - -#include "net/tcpdump.h" -static int should_print = 0; - -static int send_eth = 0; /* Sends ethernet frames or IP packets */ - -#define IP_HLEN 20 - -/*---------------------------------------------------------------------------*/ -uint16_t -uip_htons(uint16_t val) -{ - return UIP_HTONS(val); -} -/*---------------------------------------------------------------------------*/ -uint32_t -uip_htonl(uint32_t val) -{ - return UIP_HTONL(val); -} -/*---------------------------------------------------------------------------*/ -static void -print_packet(char* prefix, uint8_t *packet, int len) -{ - char buf[2000]; - if(should_print) { - tcpdump_format(packet, len, buf, sizeof(buf)); - fprintf(stderr, "%s: %s\n", prefix, buf); - } -} -/*---------------------------------------------------------------------------*/ -void cleanup(void); -/*---------------------------------------------------------------------------*/ -void -sigcleanup(int signo) -{ - fprintf(stderr, "signal %d\n", signo); - exit(0); /* exit(0) will call cleanup() */ -} -/*---------------------------------------------------------------------------*/ -#define SLIP_END 0300 -#define SLIP_ESC 0333 -#define SLIP_ESC_END 0334 -#define SLIP_ESC_ESC 0335 - -struct ip { - u_int8_t ip_vhl; /* version and header length */ -#define IP_V4 0x40 -#define IP_V 0xf0 -#define IP_HL 0x0f - u_int8_t ip_tos; /* type of service */ - u_int16_t ip_len; /* total length */ - u_int16_t ip_id; /* identification */ - u_int16_t ip_off; /* fragment offset field */ -#define IP_RF 0x8000 /* reserved fragment flag */ -#define IP_DF 0x4000 /* dont fragment flag */ -#define IP_MF 0x2000 /* more fragments flag */ -#define IP_OFFMASK 0x1fff /* mask for fragmenting bits */ - u_int8_t ip_ttl; /* time to live */ - u_int8_t ip_p; /* protocol */ - u_int16_t ip_sum; /* checksum */ - u_int32_t ip_src, ip_dst; /* source and dest address */ - u_int16_t uh_sport; /* source port */ - u_int16_t uh_dport; /* destination port */ - u_int16_t uh_ulen; /* udp length */ - u_int16_t uh_sum; /* udp checksum */ -}; - -static int ip_id, last_id; - -int -ssystem(const char *fmt, ...) __attribute__((__format__ (__printf__, 1, 2))); - -int -ssystem(const char *fmt, ...) -{ - char cmd[128]; - va_list ap; - va_start(ap, fmt); - vsnprintf(cmd, sizeof(cmd), fmt, ap); - va_end(ap); - fprintf(stderr, "%s\n", cmd); - fflush(stderr); - return system(cmd); -} -/*---------------------------------------------------------------------------*/ -int -is_sensible_string(const unsigned char *s, int len) -{ - int i; - for(i = 1; i < len; i++) { - if(s[i] == 0 || s[i] == '\r' || s[i] == '\n' || s[i] == '\t') { - continue; - } else if(s[i] < ' ' || '~' < s[i]) { - return 0; - } - } - return 1; -} -/*---------------------------------------------------------------------------*/ -u_int16_t -ip4sum(u_int16_t sum, const void *_p, u_int16_t len) -{ - u_int16_t t; - const u_int8_t *p = _p; - const u_int8_t *end = p + len; - - while(p < (end - 1)) { - t = (p[0] << 8) + p[1]; - sum += t; - if(sum < t) - sum++; - p += 2; - } - if(p < end) { - t = (p[0] << 8) + 0; - sum += t; - if(sum < t) - sum++; - } - return sum; -} -/*---------------------------------------------------------------------------*/ -static uint16_t -chksum(const void *p, uint16_t len) -{ - uint16_t sum = ip4sum(0, p, len); - return (sum == 0) ? 0xffff : uip_htons(sum); -} -/*---------------------------------------------------------------------------*/ -int -check_ip(const struct ip *ip, unsigned ip_len) -{ - u_int16_t sum, ip_hl; - - if(send_eth) { - return 0; - } - - /* Check IP version and length. */ - if((ip->ip_vhl & IP_V) != IP_V4) { - return -1; - } - - if(uip_ntohs(ip->ip_len) > ip_len) { - return -2; - } - - if(uip_ntohs(ip->ip_len) < ip_len) { - return -3; - } - - /* Check IP header. */ - ip_hl = 4 * (ip->ip_vhl & IP_HL); - sum = ip4sum(0, ip, ip_hl); - if(sum != 0xffff && sum != 0x0) { - return -4; - } - - if(ip->ip_p == 6 || ip->ip_p == 17) { /* Check TCP or UDP header. */ - u_int16_t tcp_len = ip_len - ip_hl; - - /* Sum pseudoheader. */ - sum = ip->ip_p + tcp_len; /* proto and len, no carry */ - sum = ip4sum(sum, &ip->ip_src, 8); /* src and dst */ - - /* Sum TCP/UDP header and data. */ - sum = ip4sum(sum, (u_int8_t*)ip + ip_hl, tcp_len); - - /* Failed checksum test? */ - if(sum != 0xffff && sum != 0x0) { - if(ip->ip_p == 6) { /* TCP == 6 */ - return -5; - } else { /* UDP */ - /* Deal with disabled UDP checksums. */ - if(ip->uh_sum != 0) { - return -6; - } - } - } - } else if(ip->ip_p == 1) { /* ICMP */ - u_int16_t icmp_len = ip_len - ip_hl; - - sum = ip4sum(0, (u_int8_t*)ip + ip_hl, icmp_len); - if(sum != 0xffff && sum != 0x0) { - return -7; - } - } - return 0; -} -/*---------------------------------------------------------------------------*/ -/* - * Read a single character from stdin. When we have a full packet, write it to - * the network interface. - */ -void -serial_to_wpcap(void) -{ - static union { - unsigned char inbuf[2000]; - struct ip iphdr; - } uip; - static int inbufptr = 0; - - int ret; - unsigned char c; - - if(inbufptr >= sizeof(uip.inbuf)) { - inbufptr = 0; - return; - } - ret = read(STDIN_FILENO, &c, 1); - - if(ret <= 0) { - err(1, "serial_to_wpcap: read"); - inbufptr = 0; - return; - } - - switch (c) { - case SLIP_END: - if(inbufptr > 0) { - /* - * Sanity checks. - */ -#define DEBUG_LINE_MARKER '\r' - int ecode; - - ecode = check_ip(&uip.iphdr, inbufptr); - if(ecode < 0 && inbufptr == 8 - && strncmp((const char*)uip.inbuf, "=IPA", 4) == 0) { - static struct in_addr ipa; - - inbufptr = 0; - if(memcmp(&ipa, &uip.inbuf[4], sizeof(ipa)) == 0) { - break; - } - - memcpy(&ipa, &uip.inbuf[4], sizeof(ipa)); - break; - } else if(ecode < 0) { - /* - * If sensible ASCII string, print it as debug info! - */ - /* printf("----------------------------------\n");*/ - if(uip.inbuf[0] == DEBUG_LINE_MARKER) { - fwrite(uip.inbuf + 1, inbufptr - 1, 1, stderr); - } else if(is_sensible_string(uip.inbuf, inbufptr)) { - fwrite(uip.inbuf, inbufptr, 1, stderr); - } else { - fprintf(stderr, "serial_to_wpcap: drop packet len=%d ecode=%d\n", - inbufptr, ecode); - } - inbufptr = 0; - break; - } - PROGRESS("s"); - - if(send_eth) { - raw_send(uip.inbuf, inbufptr); - } else { - /* printf("Sending to wpcap\n");*/ - if(uip.iphdr.ip_id != last_id) { - last_id = uip.iphdr.ip_id; - print_packet("to wpcap: ", uip.inbuf, inbufptr); - wpcap_send(uip.inbuf, inbufptr); - } else { - /*print_packet("IGNORED to wpcap: ", uip.inbuf, inbufptr);*/ - } - } - /* printf("After sending to wpcap\n");*/ - inbufptr = 0; - } - break; - - case SLIP_ESC: - /* TODO We do not actually check that we have another byte incoming, so - * we may block here */ - read(STDIN_FILENO, &c, 1); - - switch (c) { - case SLIP_ESC_END: - c = SLIP_END; - break; - case SLIP_ESC_ESC: - c = SLIP_ESC; - break; - } - - /* FALLTHROUGH */ - default: - uip.inbuf[inbufptr++] = c; - break; - } -} -/*---------------------------------------------------------------------------*/ -unsigned char stdout_buf[2000]; -int stdout_buf_cnt; -/*---------------------------------------------------------------------------*/ -void -stdout_write(unsigned char c) -{ - if(stdout_buf_cnt >= sizeof(stdout_buf)) { - err(1, "stdout_write overflow"); - } - stdout_buf[stdout_buf_cnt] = c; - stdout_buf_cnt++; -} -/*---------------------------------------------------------------------------*/ -int -stdout_buf_empty(void) -{ - return stdout_buf_cnt == 0; -} -/*---------------------------------------------------------------------------*/ -void -stdout_flushbuf(void) -{ - if(stdout_buf_empty()) { - return; - } - - fwrite(stdout_buf, stdout_buf_cnt, 1, stdout); - stdout_buf_cnt = 0; - fflush(stdout); -} -/*---------------------------------------------------------------------------*/ -void -write_slip_stdout(void *inbuf, int len) -{ - u_int8_t *p = inbuf; - int i, ecode; - struct ip *iphdr = inbuf; - - if(!send_eth) { - /* - * Sanity checks. - */ - /*fprintf(stderr, "write_slip_stdout: %d\n", len);*/ - ecode = check_ip(inbuf, len); - if(ecode < 0) { - fprintf(stderr, "write_slip_stdout: drop packet %d\n", ecode); - return; - } - - if(iphdr->ip_id == 0 && iphdr->ip_off & IP_DF) { - uint16_t nid = uip_htons(ip_id++); - iphdr->ip_id = nid; - nid = ~nid; /* negate */ - iphdr->ip_sum += nid; /* add */ - if(iphdr->ip_sum < nid) { /* 1-complement overflow? */ - iphdr->ip_sum++; - } - ecode = check_ip(inbuf, len); - if(ecode < 0) { - fprintf(stderr, "write_slip_stdout: drop packet %d\n", ecode); - return; - } - } - - iphdr->ip_ttl = uip_htons(uip_htons(iphdr->ip_ttl) + 1); - if(iphdr->ip_ttl == 0) { - fprintf(stderr, "Packet with ttl %d dropped\n", iphdr->ip_ttl); - return; - } - iphdr->ip_sum = 0; - iphdr->ip_sum = ~chksum(iphdr, 4 * (iphdr->ip_vhl & IP_HL)); - ecode = check_ip(inbuf, len); - if(ecode < 0) { - fprintf(stderr, "write_slip_stdout: drop packet %d\n", ecode); - return; - } - } - - for(i = 0; i < len; i++) { - switch (p[i]) { - case SLIP_END: - stdout_write(SLIP_ESC); - stdout_write(SLIP_ESC_END); - break; - case SLIP_ESC: - stdout_write(SLIP_ESC); - stdout_write(SLIP_ESC_ESC); - break; - default: - stdout_write(p[i]); - break; - } - } - stdout_write(SLIP_END); - /* printf("slip end\n");*/ - PROGRESS("t"); -} -/*---------------------------------------------------------------------------*/ -/*const char *ipaddr;*/ -/*const char *netmask;*/ -static int got_sigalarm; -void -sigalarm(int signo) -{ - got_sigalarm = 1; - return; -} -/*---------------------------------------------------------------------------*/ -void -sigalarm_reset(void) -{ -#ifdef linux -#define TIMEOUT (997*1000) -#else -#define TIMEOUT (2451*1000) -#endif - ualarm(TIMEOUT, TIMEOUT); - got_sigalarm = 0; -} -/*---------------------------------------------------------------------------*/ -int -main(int argc, char **argv) -{ - int c; - int ret; - char buf[4000]; - int logging = 0; - - ip_id = getpid() * time(NULL); - - while((c = getopt(argc, argv, "E:D:hl:t:T")) != -1) { - switch (c) { - case 'E': - send_eth = 1; - break; - - case 'T': - should_print = 1; - break; - - case 'l': - logging = 1; - break; - - case '?': - case 'h': - default: - err(1, - "usage: wpcapstdio [-E] [-l] [-T] "); - break; - } - } - argc -= (optind - 1); - argv += (optind - 1); - - if(argc != 4) { - err(1, "usage: wpcapstdio [-E] [-T] "); - } - - wpcap_start(argv[1], argv[2], argv[3], logging); - stdout_write(SLIP_END); - - atexit(cleanup); - signal(SIGHUP, sigcleanup); - signal(SIGTERM, sigcleanup); - signal(SIGINT, sigcleanup); - signal(SIGALRM, sigalarm); - - while(1) { - if(got_sigalarm) { - /* Send "?IPA". */ - stdout_write('?'); - stdout_write('I'); - stdout_write('P'); - stdout_write('A'); - stdout_write(SLIP_END); - got_sigalarm = 0; - } - - if(stdout_buf_empty()) { - char *pbuf = buf; - - ret = wpcap_poll(&pbuf, send_eth); - if(ret > 0) { - if(send_eth) { - write_slip_stdout(pbuf, ret); - stdout_flushbuf(); - } else { - struct ip *iphdr = (struct ip *)pbuf; - if(iphdr->ip_id != last_id) { - /*last_id = iphdr->ip_id;*/ - print_packet("to stdout: ", (uint8_t*)pbuf, ret); - write_slip_stdout(pbuf, ret); - stdout_flushbuf(); - } else { - /*print_packet("IGNORED to stdout: ", (uint8_t*)pbuf, ret);*/ - } - } - } - } - - if(!stdout_buf_empty()) { - stdout_flushbuf(); - } - - { - fd_set s_rd; - struct timeval tv; - - tv.tv_sec = 0; - tv.tv_usec = 100; - - do { - FD_ZERO(&s_rd); - FD_SET(fileno(stdin), &s_rd); - select(fileno(stdin) + 1, &s_rd, NULL, NULL, &tv); - if(FD_ISSET(fileno(stdin), &s_rd)) { - serial_to_wpcap(); - } - } while(FD_ISSET(fileno(stdin), &s_rd)); - } - } -} -/*---------------------------------------------------------------------------*/ +/* + * Copyright (c) 2012, Thingsquare, www.thingsquare.com. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the Contiki operating system. + * + * Author: Fredrik Osterlind + * Based on wpcapslip.c by : Oliver Schmidt + */ + +/* This is a stripped-down version of wpcapslip: Instead of reading from and writing + * to a serial port, this program just reads and writes to stdin/stdout. To + * achieve the same functionality as wpcapslip, this program can hence be connected + * to serialdump. But, in contrast to wpcapslip, this program can easily be connected + * to networked or simulated serial ports. -- Fredrik, 2012 */ + +#include +#include +#include +#ifdef __CYGWIN__ +#include +#else /* __CYGWIN__ */ +#include +#endif /* __CYGWIN__ */ +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include + +#include +#include + +#define PROGRESS(x) + +void wpcap_start(char *ethifaddr, char *netaddr, char *netmask, int logging); + +void wpcap_send(void *buf, int len); +void raw_send(void *buf, int len); + +uint16_t wpcap_poll(char **buf, int eth); + +#include "net/tcpdump.h" +static int should_print = 0; + +static int send_eth = 0; /* Sends ethernet frames or IP packets */ + +#define IP_HLEN 20 + +/*---------------------------------------------------------------------------*/ +uint16_t +uip_htons(uint16_t val) +{ + return UIP_HTONS(val); +} +/*---------------------------------------------------------------------------*/ +uint32_t +uip_htonl(uint32_t val) +{ + return UIP_HTONL(val); +} +/*---------------------------------------------------------------------------*/ +static void +print_packet(char* prefix, uint8_t *packet, int len) +{ + char buf[2000]; + if(should_print) { + tcpdump_format(packet, len, buf, sizeof(buf)); + fprintf(stderr, "%s: %s\n", prefix, buf); + } +} +/*---------------------------------------------------------------------------*/ +void cleanup(void); +/*---------------------------------------------------------------------------*/ +void +sigcleanup(int signo) +{ + fprintf(stderr, "signal %d\n", signo); + exit(0); /* exit(0) will call cleanup() */ +} +/*---------------------------------------------------------------------------*/ +#define SLIP_END 0300 +#define SLIP_ESC 0333 +#define SLIP_ESC_END 0334 +#define SLIP_ESC_ESC 0335 + +struct ip { + u_int8_t ip_vhl; /* version and header length */ +#define IP_V4 0x40 +#define IP_V 0xf0 +#define IP_HL 0x0f + u_int8_t ip_tos; /* type of service */ + u_int16_t ip_len; /* total length */ + u_int16_t ip_id; /* identification */ + u_int16_t ip_off; /* fragment offset field */ +#define IP_RF 0x8000 /* reserved fragment flag */ +#define IP_DF 0x4000 /* dont fragment flag */ +#define IP_MF 0x2000 /* more fragments flag */ +#define IP_OFFMASK 0x1fff /* mask for fragmenting bits */ + u_int8_t ip_ttl; /* time to live */ + u_int8_t ip_p; /* protocol */ + u_int16_t ip_sum; /* checksum */ + u_int32_t ip_src, ip_dst; /* source and dest address */ + u_int16_t uh_sport; /* source port */ + u_int16_t uh_dport; /* destination port */ + u_int16_t uh_ulen; /* udp length */ + u_int16_t uh_sum; /* udp checksum */ +}; + +static int ip_id, last_id; + +int +ssystem(const char *fmt, ...) __attribute__((__format__ (__printf__, 1, 2))); + +int +ssystem(const char *fmt, ...) +{ + char cmd[128]; + va_list ap; + va_start(ap, fmt); + vsnprintf(cmd, sizeof(cmd), fmt, ap); + va_end(ap); + fprintf(stderr, "%s\n", cmd); + fflush(stderr); + return system(cmd); +} +/*---------------------------------------------------------------------------*/ +int +is_sensible_string(const unsigned char *s, int len) +{ + int i; + for(i = 1; i < len; i++) { + if(s[i] == 0 || s[i] == '\r' || s[i] == '\n' || s[i] == '\t') { + continue; + } else if(s[i] < ' ' || '~' < s[i]) { + return 0; + } + } + return 1; +} +/*---------------------------------------------------------------------------*/ +u_int16_t +ip4sum(u_int16_t sum, const void *_p, u_int16_t len) +{ + u_int16_t t; + const u_int8_t *p = _p; + const u_int8_t *end = p + len; + + while(p < (end - 1)) { + t = (p[0] << 8) + p[1]; + sum += t; + if(sum < t) + sum++; + p += 2; + } + if(p < end) { + t = (p[0] << 8) + 0; + sum += t; + if(sum < t) + sum++; + } + return sum; +} +/*---------------------------------------------------------------------------*/ +static uint16_t +chksum(const void *p, uint16_t len) +{ + uint16_t sum = ip4sum(0, p, len); + return (sum == 0) ? 0xffff : uip_htons(sum); +} +/*---------------------------------------------------------------------------*/ +int +check_ip(const struct ip *ip, unsigned ip_len) +{ + u_int16_t sum, ip_hl; + + if(send_eth) { + return 0; + } + + /* Check IP version and length. */ + if((ip->ip_vhl & IP_V) != IP_V4) { + return -1; + } + + if(uip_ntohs(ip->ip_len) > ip_len) { + return -2; + } + + if(uip_ntohs(ip->ip_len) < ip_len) { + return -3; + } + + /* Check IP header. */ + ip_hl = 4 * (ip->ip_vhl & IP_HL); + sum = ip4sum(0, ip, ip_hl); + if(sum != 0xffff && sum != 0x0) { + return -4; + } + + if(ip->ip_p == 6 || ip->ip_p == 17) { /* Check TCP or UDP header. */ + u_int16_t tcp_len = ip_len - ip_hl; + + /* Sum pseudoheader. */ + sum = ip->ip_p + tcp_len; /* proto and len, no carry */ + sum = ip4sum(sum, &ip->ip_src, 8); /* src and dst */ + + /* Sum TCP/UDP header and data. */ + sum = ip4sum(sum, (u_int8_t*)ip + ip_hl, tcp_len); + + /* Failed checksum test? */ + if(sum != 0xffff && sum != 0x0) { + if(ip->ip_p == 6) { /* TCP == 6 */ + return -5; + } else { /* UDP */ + /* Deal with disabled UDP checksums. */ + if(ip->uh_sum != 0) { + return -6; + } + } + } + } else if(ip->ip_p == 1) { /* ICMP */ + u_int16_t icmp_len = ip_len - ip_hl; + + sum = ip4sum(0, (u_int8_t*)ip + ip_hl, icmp_len); + if(sum != 0xffff && sum != 0x0) { + return -7; + } + } + return 0; +} +/*---------------------------------------------------------------------------*/ +/* + * Read a single character from stdin. When we have a full packet, write it to + * the network interface. + */ +void +serial_to_wpcap(void) +{ + static union { + unsigned char inbuf[2000]; + struct ip iphdr; + } uip; + static int inbufptr = 0; + + int ret; + unsigned char c; + + if(inbufptr >= sizeof(uip.inbuf)) { + inbufptr = 0; + return; + } + ret = read(STDIN_FILENO, &c, 1); + + if(ret <= 0) { + err(1, "serial_to_wpcap: read"); + inbufptr = 0; + return; + } + + switch (c) { + case SLIP_END: + if(inbufptr > 0) { + /* + * Sanity checks. + */ +#define DEBUG_LINE_MARKER '\r' + int ecode; + + ecode = check_ip(&uip.iphdr, inbufptr); + if(ecode < 0 && inbufptr == 8 + && strncmp((const char*)uip.inbuf, "=IPA", 4) == 0) { + static struct in_addr ipa; + + inbufptr = 0; + if(memcmp(&ipa, &uip.inbuf[4], sizeof(ipa)) == 0) { + break; + } + + memcpy(&ipa, &uip.inbuf[4], sizeof(ipa)); + break; + } else if(ecode < 0) { + /* + * If sensible ASCII string, print it as debug info! + */ + /* printf("----------------------------------\n");*/ + if(uip.inbuf[0] == DEBUG_LINE_MARKER) { + fwrite(uip.inbuf + 1, inbufptr - 1, 1, stderr); + } else if(is_sensible_string(uip.inbuf, inbufptr)) { + fwrite(uip.inbuf, inbufptr, 1, stderr); + } else { + fprintf(stderr, "serial_to_wpcap: drop packet len=%d ecode=%d\n", + inbufptr, ecode); + } + inbufptr = 0; + break; + } + PROGRESS("s"); + + if(send_eth) { + raw_send(uip.inbuf, inbufptr); + } else { + /* printf("Sending to wpcap\n");*/ + if(uip.iphdr.ip_id != last_id) { + last_id = uip.iphdr.ip_id; + print_packet("to wpcap: ", uip.inbuf, inbufptr); + wpcap_send(uip.inbuf, inbufptr); + } else { + /*print_packet("IGNORED to wpcap: ", uip.inbuf, inbufptr);*/ + } + } + /* printf("After sending to wpcap\n");*/ + inbufptr = 0; + } + break; + + case SLIP_ESC: + /* TODO We do not actually check that we have another byte incoming, so + * we may block here */ + read(STDIN_FILENO, &c, 1); + + switch (c) { + case SLIP_ESC_END: + c = SLIP_END; + break; + case SLIP_ESC_ESC: + c = SLIP_ESC; + break; + } + + /* FALLTHROUGH */ + default: + uip.inbuf[inbufptr++] = c; + break; + } +} +/*---------------------------------------------------------------------------*/ +unsigned char stdout_buf[2000]; +int stdout_buf_cnt; +/*---------------------------------------------------------------------------*/ +void +stdout_write(unsigned char c) +{ + if(stdout_buf_cnt >= sizeof(stdout_buf)) { + err(1, "stdout_write overflow"); + } + stdout_buf[stdout_buf_cnt] = c; + stdout_buf_cnt++; +} +/*---------------------------------------------------------------------------*/ +int +stdout_buf_empty(void) +{ + return stdout_buf_cnt == 0; +} +/*---------------------------------------------------------------------------*/ +void +stdout_flushbuf(void) +{ + if(stdout_buf_empty()) { + return; + } + + fwrite(stdout_buf, stdout_buf_cnt, 1, stdout); + stdout_buf_cnt = 0; + fflush(stdout); +} +/*---------------------------------------------------------------------------*/ +void +write_slip_stdout(void *inbuf, int len) +{ + u_int8_t *p = inbuf; + int i, ecode; + struct ip *iphdr = inbuf; + + if(!send_eth) { + /* + * Sanity checks. + */ + /*fprintf(stderr, "write_slip_stdout: %d\n", len);*/ + ecode = check_ip(inbuf, len); + if(ecode < 0) { + fprintf(stderr, "write_slip_stdout: drop packet %d\n", ecode); + return; + } + + if(iphdr->ip_id == 0 && iphdr->ip_off & IP_DF) { + uint16_t nid = uip_htons(ip_id++); + iphdr->ip_id = nid; + nid = ~nid; /* negate */ + iphdr->ip_sum += nid; /* add */ + if(iphdr->ip_sum < nid) { /* 1-complement overflow? */ + iphdr->ip_sum++; + } + ecode = check_ip(inbuf, len); + if(ecode < 0) { + fprintf(stderr, "write_slip_stdout: drop packet %d\n", ecode); + return; + } + } + + iphdr->ip_ttl = uip_htons(uip_htons(iphdr->ip_ttl) + 1); + if(iphdr->ip_ttl == 0) { + fprintf(stderr, "Packet with ttl %d dropped\n", iphdr->ip_ttl); + return; + } + iphdr->ip_sum = 0; + iphdr->ip_sum = ~chksum(iphdr, 4 * (iphdr->ip_vhl & IP_HL)); + ecode = check_ip(inbuf, len); + if(ecode < 0) { + fprintf(stderr, "write_slip_stdout: drop packet %d\n", ecode); + return; + } + } + + for(i = 0; i < len; i++) { + switch (p[i]) { + case SLIP_END: + stdout_write(SLIP_ESC); + stdout_write(SLIP_ESC_END); + break; + case SLIP_ESC: + stdout_write(SLIP_ESC); + stdout_write(SLIP_ESC_ESC); + break; + default: + stdout_write(p[i]); + break; + } + } + stdout_write(SLIP_END); + /* printf("slip end\n");*/ + PROGRESS("t"); +} +/*---------------------------------------------------------------------------*/ +/*const char *ipaddr;*/ +/*const char *netmask;*/ +static int got_sigalarm; +void +sigalarm(int signo) +{ + got_sigalarm = 1; + return; +} +/*---------------------------------------------------------------------------*/ +void +sigalarm_reset(void) +{ +#ifdef linux +#define TIMEOUT (997*1000) +#else +#define TIMEOUT (2451*1000) +#endif + ualarm(TIMEOUT, TIMEOUT); + got_sigalarm = 0; +} +/*---------------------------------------------------------------------------*/ +int +main(int argc, char **argv) +{ + int c; + int ret; + char buf[4000]; + int logging = 0; + + ip_id = getpid() * time(NULL); + + while((c = getopt(argc, argv, "E:D:hl:t:T")) != -1) { + switch (c) { + case 'E': + send_eth = 1; + break; + + case 'T': + should_print = 1; + break; + + case 'l': + logging = 1; + break; + + case '?': + case 'h': + default: + err(1, + "usage: wpcapstdio [-E] [-l] [-T] "); + break; + } + } + argc -= (optind - 1); + argv += (optind - 1); + + if(argc != 4) { + err(1, "usage: wpcapstdio [-E] [-T] "); + } + + wpcap_start(argv[1], argv[2], argv[3], logging); + stdout_write(SLIP_END); + + atexit(cleanup); + signal(SIGHUP, sigcleanup); + signal(SIGTERM, sigcleanup); + signal(SIGINT, sigcleanup); + signal(SIGALRM, sigalarm); + + while(1) { + if(got_sigalarm) { + /* Send "?IPA". */ + stdout_write('?'); + stdout_write('I'); + stdout_write('P'); + stdout_write('A'); + stdout_write(SLIP_END); + got_sigalarm = 0; + } + + if(stdout_buf_empty()) { + char *pbuf = buf; + + ret = wpcap_poll(&pbuf, send_eth); + if(ret > 0) { + if(send_eth) { + write_slip_stdout(pbuf, ret); + stdout_flushbuf(); + } else { + struct ip *iphdr = (struct ip *)pbuf; + if(iphdr->ip_id != last_id) { + /*last_id = iphdr->ip_id;*/ + print_packet("to stdout: ", (uint8_t*)pbuf, ret); + write_slip_stdout(pbuf, ret); + stdout_flushbuf(); + } else { + /*print_packet("IGNORED to stdout: ", (uint8_t*)pbuf, ret);*/ + } + } + } + } + + if(!stdout_buf_empty()) { + stdout_flushbuf(); + } + + { + fd_set s_rd; + struct timeval tv; + + tv.tv_sec = 0; + tv.tv_usec = 100; + + do { + FD_ZERO(&s_rd); + FD_SET(fileno(stdin), &s_rd); + select(fileno(stdin) + 1, &s_rd, NULL, NULL, &tv); + if(FD_ISSET(fileno(stdin), &s_rd)) { + serial_to_wpcap(); + } + } while(FD_ISSET(fileno(stdin), &s_rd)); + } + } +} +/*---------------------------------------------------------------------------*/