Wiselib
wiselib.testing/algorithms/cluster/modules/jd/moca_jd.h
Go to the documentation of this file.
00001 #ifndef _MOCA_JD_H
00002 #define  _MOCA_JD_H
00003 
00004 namespace wiselib {
00005 
00011     template<typename OsModel_P>
00012 
00013     class MocaJoinDecision {
00014     public:
00015 
00016         //TYPEDEFS
00017         typedef OsModel_P OsModel;
00018         typedef typename OsModel::Radio Radio;
00019         typedef typename OsModel::Debug Debug;
00020 
00021 
00022         // data types
00023         typedef typename Radio::node_id_t node_id_t;
00024         typedef typename Radio::block_data_t block_data_t;
00025         typedef node_id_t cluster_id_t;
00026 
00027         /*
00028          * Constructor
00029          * */
00030         MocaJoinDecision() :
00031         id_(0),
00032         maxhops_(0) {
00033         };
00034 
00035         /*
00036          * Destructor
00037          * */
00038         ~MocaJoinDecision() {
00039         };
00040 
00041         /*
00042          * INIT
00043          * initializes the values of radio and debug
00044          */
00045         void init(Radio& radio, Debug& debug) {
00046             radio_ = &radio;
00047             debug_ = &debug;
00048         };
00049 
00050 
00051         /* SET functions */
00052 
00053         //set the id
00054 
00055         void set_id(node_id_t id) {
00056             id_ = id;
00057         };
00058 
00059         void set_maxhops(int maxhops){
00060             maxhops_ = maxhops;
00061         }
00062 
00063         
00064         /* GET functions */
00065 
00066         //get the CH_ADVERTISE payload
00067         
00068         void get_join_request_payload(block_data_t * mess) {
00069 
00070             //block_data_t ret[ get_payload_length(JOIN) ];
00071 
00072             uint8_t type = JOIN;
00073             memcpy(mess,&type,sizeof(uint8_t));
00074 //            ret[0] = JOIN; // type of message
00075 
00076             memcpy(mess+sizeof(uint8_t),&id_,sizeof(cluster_id_t));
00077 //            ret[1] = cluster_id_ % 256; // cluster_id
00078 //            ret[2] = cluster_id_ / 256;
00079 
00080 //            ret[3] = hops_ + 1; // hops
00081             uint8_t now_hops = 1;
00082             memcpy(mess+sizeof(uint8_t)+sizeof(cluster_id_t),&now_hops,sizeof(uint8_t));
00083 
00084             //memcpy(mess, ret, get_payload_length(JOIN));
00085         };
00086 
00087         size_t get_payload_length(int type) {
00088             if (type == JOIN)
00089                 return 1+sizeof(cluster_id_t)+1;
00090             else
00091                 return 0;
00092         };
00093 
00094 
00095         /*
00096          * JOIN
00097          * respond to an JOIN message received
00098          * either join to a cluster or not
00099          * */
00100         bool join(uint8_t *payload, uint8_t length) {
00101             //copy message to local memory
00102 
00103             uint8_t hops;
00104             memcpy(&hops, payload+1+sizeof(cluster_id_t),sizeof(uint8_t));          
00105 
00106             //if cluser is close
00107             if (hops <= maxhops_) {
00108                 //join the cluster
00109                 //return true
00110                 return true;
00111             }//if cluster is away
00112             else {
00113                 //return false
00114                 return false;
00115             }
00116         };
00117 
00118         /*
00119          * ENABLE
00120          * enables the module
00121          * initializes values
00122          * */
00123         void enable() {
00124             id_ = -1;
00125             maxhops_ = 0;
00126         };
00127 
00128         /*
00129          * DISABLE
00130          * disables this bfsclustering module
00131          * unregisters callbacks
00132          * */
00133         void disable() {
00134         };
00135 
00136 
00137     private:
00138         node_id_t id_; //the node's id
00139         int maxhops_; //hops from cluster head
00140 
00141         Radio * radio_; //radio module
00142         Debug * debug_; //debug module
00143 
00144         Radio& radio() {
00145             return *radio_;
00146         }
00147 
00148         Debug& debug() {
00149             return *debug_;
00150         }
00151 
00152     };
00153 }
00154 
00155 
00156 #endif
00157 
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines