char loop(struct rtimer* t, void *ptr){ PT_BEGIN(&pt); uint8_t packet[TIMESTAMP_BIT]; int packet_len = 0; sclock_init(&sclk, TYPE_CLOCK); ntp_init(&ntp, &sclk); static struct timestamp second; timestamp_init(&second); second.sec = 1; while(1) { sclock_etimer_set(&sclk, &et, &second); PT_YIELD_UNTIL(&pt,etimer_expired(&et)); leds_invert(LEDS_RED); #if REQUEST packet_len = ntp_make_request(&ntp, packet); packetbuf_copyfrom(packet, packet_len); abc_send(&abc); #endif } PT_END(&pt); }
/*---------------------------------------------------------------------------*/ int broadcast_send(struct broadcast_conn *c) { PRINTF("%d.%d: broadcast_send\n", rimeaddr_node_addr.u8[0],rimeaddr_node_addr.u8[1]); packetbuf_set_addr(PACKETBUF_ADDR_SENDER, &rimeaddr_node_addr); return abc_send(&c->c); }
/*---------------------------------------------------------------------------*/ static void ntp_recv_packet(struct abc_conn *c) { uint8_t* recv = (uint8_t *)packetbuf_dataptr(); #if REQUEST ntp_handle_ack(&ntp, recv); #else uint8_t send[NTP_ACK_LEN]; int send_len; send_len = ntp_make_ack(&ntp, send, recv); packetbuf_copyfrom(send,send_len); abc_send(&abc); #endif }
/*---------------------------------------------------------------------------*/ static void send(void *ptr) { struct polite_conn *c = ptr; if(c->q != NULL) { queuebuf_to_packetbuf(c->q); queuebuf_free(c->q); c->q = NULL; abc_send(&c->c); if(c->cb->sent) { c->cb->sent(c); } } }
/*---------------------------------------------------------------------------*/ static void do_sending(void) { int i; cc2420_set_channel(11); cc2420_set_txpower(1); for(i = 0;i < send_amount; i++) { packetbuf_copyfrom(send_string, send_length); mac->on(); abc_send(&abc); mac->off(0); } cc2420_set_txpower(31); cc2420_set_channel(RF_CHANNEL); }
static void bacast_signed_message() { msg_header_t* header; uint8_t* data; packetbuf_clear(); header = ( msg_header_t* ) ( packetbuf_dataptr() ); data = ( uint8_t* ) ( header + 1 ); random_data ( data, MSG_LEN ); hton_uint16 ( &header->data_len, MSG_LEN ); static struct etimer nrg; energest_flush(); ENERGEST_ON ( ENERGEST_TYPE_LPM ); ENERGEST_ON ( ENERGEST_TYPE_TRANSMIT ); ENERGEST_ON ( ENERGEST_TYPE_LISTEN ); ENERGEST_ON ( ENERGEST_TYPE_CPU ); last.cpu = energest_type_time ( ENERGEST_TYPE_CPU )/RTIMER_SECOND; ENERGEST_OFF ( ENERGEST_TYPE_CPU ); last.lpm = energest_type_time ( ENERGEST_TYPE_LPM ); last.transmit = energest_type_time ( ENERGEST_TYPE_TRANSMIT ); last.listen = energest_type_time ( ENERGEST_TYPE_LISTEN ); ENERGEST_ON ( ENERGEST_TYPE_CPU ); ecdsa_sign ( data, MSG_LEN, header->r, header->s, prKey_alice ); diff.cpu = energest_type_time ( ENERGEST_TYPE_CPU ) - last.cpu; diff.lpm = energest_type_time ( ENERGEST_TYPE_LPM ) - last.lpm; diff.transmit = energest_type_time ( ENERGEST_TYPE_TRANSMIT ) - last.transmit; diff.listen = energest_type_time ( ENERGEST_TYPE_LISTEN ) - last.listen; ENERGEST_OFF ( ENERGEST_TYPE_CPU ); ENERGEST_OFF ( ENERGEST_TYPE_LPM ); ENERGEST_OFF ( ENERGEST_TYPE_TRANSMIT ); ENERGEST_OFF ( ENERGEST_TYPE_LISTEN ); packetbuf_set_datalen ( sizeof ( msg_header_t ) + MSG_LEN ); abc_send ( &abc ); printf ( "Clock ticks recorded by\nCPU = %ld \nLPM = %ld \nTRANSMITTER = %ld\nRECEIVER = %ld\n",diff.cpu, diff.lpm, diff.transmit, diff.listen ); }
/*---------------------------------------------------------------------------*/ int p_broadcast_send(struct p_broadcast_conn *c, const void *data, size_t length) { PRINTF("[pbroadcast.c] Sending message of size %d\n", (int)length); if (length > MAX_BROADCAST_PAYLOAD_SIZE) { PRINTF("[pbroadcast.c] ^ Error: Broadcast packet is too long.\n"); return 0; } if (c == NULL) { PRINTF("[pbroadcast.c] ^ Error: Broadcast Connection is NULL\n"); return 0; } packetbuf_clear(); packetbuf_set_addr(PACKETBUF_ADDR_SENDER, &linkaddr_node_addr); packetbuf_set_datalen(length + sizeof(uint16_t)); // copy payload into packet memcpy(packetbuf_dataptr(), data, length); // copy hash to end of packet uint16_t hash = packet_hash(data, length); memcpy(packetbuf_dataptr() + (uintptr_t)length, &hash, sizeof(uint16_t)); PRINTF("[pbroadcast.c] ^ Hash: %02X Datalen: %d\n", hash, packetbuf_datalen()); PRINTF("[pbroadcast.c] ^ Data: "); DEBUG_DUMP_DATA(packetbuf_dataptr(), packetbuf_datalen()); PRINTF("\n"); int status = abc_send(&(c->abc)); if (status == 0) { PRINTF("[pbroadcast.c] Broadcast could not be sent.\n"); } return status; }