⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 receiver.c

📁 MANTIS是由科罗拉多大学开发的传感器网络嵌入式操作系统。 这是mantis的0.9.5版本的源码。
💻 C
字号:
//  This file is part of MANTIS OS, Operating System//  See http://mantis.cs.colorado.edu/////  Copyright (C) 2003,2004,2005 University of Colorado, Boulder////  This program is free software; you can redistribute it and/or//  modify it under the terms of the mos license (see file LICENSE)/** * File:     receiver.c       * Author:   Charles Gruenwald III - gruenwal@colorado.edu * Date:     12-14-2003 * * Description: receiver will sit in a tight while loop looking for * values received over the radio. Any value it receives it will then * show on the leds and send over the serial line using the uart. It is * to be used with compatable hardware (nymph/mica2). *  */#include <inttypes.h>#include "led.h"#include "msched.h"#include "printf.h"#include "com.h"#include "command_daemon.h"#include "dev.h"#if defined(PLATFORM_MICA2) || defined(PLATFORM_MICA2DOT)#include "cc1000.h"#endif#define PACKETS_PER_CYCLE 250#ifdef RADIO_USE_FECextern uint16_t cc1000_fec_error_count;#endif#define SIZE_INDEX 0x100#define DATA_INDEX 0x102static uint16_t num_samples;comBuf send_pkt;void receiver(void){   uint16_t total_pkts = 0;   uint32_t total_packet_count;   uint16_t total_packets_dropped;   float packet_percent;   uint16_t packet_int;   uint16_t packet_frac;   uint16_t num_pkts_dropped = 0;   uint16_t fec_errs;   uint16_t last_seq = 0;   uint16_t seq;   comBuf *recv_pkt;   bool first_run = true;      printf("Radio tester initialized....\n");   com_mode(IFACE_RADIO,IF_LISTEN);   //use this instead of printf for efficiency   send_pkt.size = 2;   send_pkt.data[1] = '\0';      //dev_open(DEV_AVR_EEPROM);      //init eeprom logging with this   //dev_ioctl(DEV_AVR_EEPROM, DEV_SEEK, SIZE_INDEX);   //dev_write(DEV_AVR_EEPROM, &num_samples, sizeof(num_samples));      //dev_ioctl(DEV_AVR_EEPROM, DEV_SEEK, SIZE_INDEX);   //dev_read(DEV_AVR_EEPROM, &num_samples, sizeof(num_samples));   /* if(num_samples != 0) { *//*       printf("Got some old data:\n"); *//*       uint16_t i; *//*       dev_ioctl(DEV_AVR_EEPROM, DEV_SEEK, DATA_INDEX); *//*       for(i = 0; i < num_samples; i++) { *//* 	 uint16_t num, frac; *//* 	 dev_read(DEV_AVR_EEPROM, &num, sizeof(num)); *//* 	 dev_read(DEV_AVR_EEPROM, &frac, sizeof(frac)); *//* 	 printf("  %d.%d\n", num, frac); *//*       } *//*    } */   //num_samples = 0;   //dev_ioctl(DEV_AVR_EEPROM, DEV_SEEK, SIZE_INDEX);   //dev_write(DEV_AVR_EEPROM, &num_samples, sizeof(num_samples));      while(1) {           mos_led_toggle(2);      //printf("about to recv\n");      recv_pkt = com_recv(IFACE_RADIO);      total_pkts++;          seq = *(uint16_t *)(&recv_pkt->data[0]);            if(first_run == true) {	 first_run = false;	 last_seq = seq;      } else {	 if(seq != last_seq + 1) {	    uint16_t dropped;	    if(seq > last_seq)	       dropped = seq - last_seq - 1;	    else	       dropped = 0xffff - last_seq + seq;	    //printf("dropped: %d, seq: %d, last_seq: %d\n", dropped, seq, last_seq);	    	    num_pkts_dropped += dropped;	    total_pkts += dropped;	    send_pkt.data[0] = 'm';	    com_send(IFACE_SERIAL, &send_pkt);	 } else {#if defined(PLATFORM_MICA2) || defined(PLATFORM_MICA2DOT)#ifdef RADIO_USE_FEC	    if(fec_errs != cc1000_fec_error_count) { //a new fec error	       //printf("%s", "f");	       fec_errs = cc1000_fec_error_count;	    }#endif#endif	    send_pkt.data[0] = '.';	    com_send(IFACE_SERIAL, &send_pkt);	 }	 last_seq = seq;      }            com_free_buf(recv_pkt);      //printf("buf freed\n");            if(total_pkts >= PACKETS_PER_CYCLE) {	 total_packet_count += total_pkts;	 total_packets_dropped += num_pkts_dropped;	 packet_percent = (float)num_pkts_dropped / (float)total_pkts;	 packet_int = (uint16_t)(packet_percent * 1000.0);	 packet_frac = packet_int % 10;	 packet_int /= 10;	 	 printf("Dropped: %d, Total: %d, Percent: %d.%d\n", num_pkts_dropped,		total_pkts, packet_int, packet_frac);	 //eeprom logging	 /* 	 dev_ioctl(DEV_AVR_EEPROM, DEV_SEEK, DATA_INDEX + num_samples * *//* 		   sizeof(num_samples) * 2); *//* 	 dev_write(DEV_AVR_EEPROM, &packet_int, sizeof(packet_int)); *//* 	 dev_write(DEV_AVR_EEPROM, &packet_frac, sizeof(packet_frac)); *//* 	 num_samples++; *//* 	 dev_ioctl(DEV_AVR_EEPROM, DEV_SEEK, SIZE_INDEX); *//* 	 dev_write(DEV_AVR_EEPROM, &num_samples, sizeof(num_samples)); */	 #if defined(PLATFORM_MICA2) || defined(PLATFORM_MICA2DOT)	 printf("crc errs: %d ",cc1000_crc_error_count);#ifdef RADIO_USE_FEC	 printf("fec errs: %d ",cc1000_fec_error_count);#endif	 printf ("size errs: %d ", cc1000_size_error_count);	 printf ("mem errs: %d ", cc1000_mem_error_count);	 printf("sync errs: %d \n",cc1000_sync_error_count);#endif	 	 num_pkts_dropped = 0;	 total_pkts = 0;      }         }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -