美文网首页
TinyOS·基本接收

TinyOS·基本接收

作者: JokerAIF | 来源:发表于2016-03-12 09:38 被阅读0次

    接上篇TinyOS·基本发送来写这篇TinyOS的基本接收。

    • 1、头文件,申明要用到的头文件、常量,定义数据包的格式等
    // msg.h
    #ifndef MSG_H
    #define MSG_H
    
    #include <Timer.h> // 时间方法相关的头文件
    #include <printf.h> // 打印输出相关的头文件,可以串口输出
    
    enum {
        AM_CONNECT = 6, //组号为6,发送与接收的组号、信道号必须一致
        TIMER_PERIOD_MILLI = 100 // 发送时间间隔100ms
    };
    
    typedef nx_struct msgDefind {
        nx_uint16_t ID; // 数据包内容,节点ID
    }msgDefind;
    
    #endif
    
    • 2、配置组件文件,说明提供关系
    // ReceiverAppC.nc
    #include "msg.h"
    //
    configuration ReceiverAppC {}
    //
    implementation {
        components MainC;
        components LedsC;
        components ReceiverC as App;
        components ActiveMessageC;
        components new AMReceiverC(AM_CONNECT);
        
        App.Boot->MainC;
        App.Leds->LedsC;
        // 接收组件
        App.Receive->AMReceiverC;
        App.AMControl->ActiveMessageC;
    }
    
    • 3、模块文件,实现方法及方法的使用
    // ReceiverC.nc
    #include "msg.h"
    //
    module ReceiverC {
        uses {
            interface Boot;
            interface Leds;
            interface Receive;
            interface SplitControl as AMControl;
        }
    }
    //
    implementation {
        message_t pkt;
        bool busy = FALSE;
    //    
        event void Boot.booted() {
            call AMControl.start();
        }
        
        event void AMControl.startDone(error_t err) {
            if(SUCCESS == err) {
                call Leds.led2Toggle();
            } else {
                call AMControl.start();
            }
        }
        
        event void AMControl.stopDone(error_t err) {}
        
        event message_t* Receive.receive(message_t* msg, void* payload, uint8_t len) {
            // 数据包长度校验
            if(len == sizeof(msgDefind)) {
                msgDefind* btrpkt = (msgDefind*) payload; // 得到数据包内容
                printf("receive id is %d\n", btrpkt -> ID);
                
                printfflush();
            }
            
            return msg;
        }
    //      
    }
    
    • 4、Makefile
    #Makefile
    COMPONENT=ReceiverAppC
    CFLAGS += -DCC2420_DEF_CHANNEL=14 # 通信信道
    CFLAGS += -DCC2420_DEF_RFPOWER=1 # 工作功率
    CFLAGS += -I$(TOSDIR)/lib/printf # 加入printf 库
    include $(MAKERULES)
    

    接收的主要方法是:

    event message_t* Receive.receive(message_t* msg, void* payload, uint8_t len)
    

    message_t 是指向数据包的指针,void* payload是指向数据包负载的指针,uint8_t len 是负载长度,一般可以通过这个来对数据包进行简单的校验。

    相关文章

      网友评论

          本文标题:TinyOS·基本接收

          本文链接:https://www.haomeiwen.com/subject/ybsxlttx.html