csma_0
来源:互联网 发布:linux grep 完全匹配 编辑:程序博客网 时间:2024/05/18 02:32
节点模型 lmz_cct_csma_tx
进程模型 bbbccc_csma_tx
SV
TV
char node_name [128]; char module_name [128]; int namelength;int i;int i_temp;
HB
/* Input stream from ideal generator module */#define IN_STRM 0#define ACK_STRM 1/* Output stream to bus transmitter module */#define OUT_STRM 0/* Input statistic indices */#define CH_BUSY_STAT 0/* Conditional macros */#define STRM_INTRPT ((op_intrpt_type() == OPC_INTRPT_STRM) && (op_intrpt_strm() == IN_STRM) && beacon == 1)#define STAT_INTRPT (op_intrpt_type() == OPC_INTRPT_STAT && beacon == 1)#define INTRPT_ROB ((op_intrpt_type() == OPC_INTRPT_SELF) && (op_intrpt_code() == ROB_INIT) && beacon == 1)#define INTRPT_DATA ((op_intrpt_type() == OPC_INTRPT_SELF) && (op_intrpt_code() == DATA_INIT) && beacon == 1)#define INTRPT_TIMEOUT ((op_intrpt_type() == OPC_INTRPT_SELF) && (op_intrpt_code() == TIMEOUT_INIT) && beacon == 1)#define INTRPT_ACK ((op_intrpt_type() == OPC_INTRPT_STRM) && (op_intrpt_strm() == ACK_STRM) )/* Global Variable */extern int subm_pkts;extern int sending;extern int sended;//extern int beacon;#define FREE (op_stat_local_read (CH_BUSY_STAT) == 0.0)#define PKTS_QUEUED (!op_subq_empty (0))#define ROB_INIT 0#define DATA_INIT 1#define TIMEOUT_INIT 2#include <string.h>#include <math.h>
init
my_id = op_id_self ();p_id = op_topo_parent(my_id);op_ima_obj_attr_get (p_id, "name", node_name); op_ima_obj_attr_get (my_id, "name", module_name); printf("%s ",node_name);printf("%s ",module_name);printf("initing...\n");namelength = strlen(node_name);nodenum = 0;i_temp = 0;for(i=5;i<=namelength - 1;i++){i_temp = node_name[i] - '0';nodenum = 10*nodenum + i_temp;}printf("node number is %d\n",nodenum);node_busy = 0;difs = 0.01;rob = -1;aSlotTime = 0.02;cw_current = 0;cw_num = 2;retry_num = 0;beacon = 0;sending = 0;sended = 0;
src_arvl
Packet* data_pkt;data_pkt = op_pk_get(IN_STRM);//op_pk_nfd_set (data_pkt, "src", nodenum);//op_pk_print (data_pkt);op_subq_pk_insert (0, data_pkt, OPC_QPOS_TAIL);if (FREE && node_busy == 0){ rob_event = op_intrpt_schedule_self (op_sim_time() + difs, ROB_INIT); node_busy = 1;}
sense
if(!FREE){printf("one\n");if(op_ev_valid(rob_event) == OPC_TRUE) { op_ev_cancel(rob_event); node_busy = 0; printf("two\n"); }}if (FREE && node_busy == 0 && PKTS_QUEUED){ rob_event = op_intrpt_schedule_self (op_sim_time() + difs, ROB_INIT); node_busy = 1; printf("three\n");}printf("four\n");
ROB
cw_current = pow(2,cw_num)-1;rob = aSlotTime*(int)op_dist_uniform(cw_current);printf("rob time is %f\n",rob);printf("cw_num is %f\n",cw_num);printf("cw_current is %f\n",cw_current);cw_num++;data_event = op_intrpt_schedule_self (op_sim_time() + rob, DATA_INIT);
DATA
Packet* data_pkt;timeout_event = op_intrpt_schedule_self (op_sim_time() + 0.018, TIMEOUT_INIT);printf("time out event scheduling...\n");data_pkt = op_pk_create_fmt ("aaa_csma_ca_data");op_pk_nfd_set (data_pkt, "src", nodenum);op_pk_nfd_set (data_pkt, "time", op_pk_creation_time_get (op_subq_pk_access (0, 0) ));op_pk_print (data_pkt);op_pk_send(data_pkt,OUT_STRM);printf("data sending...\n");
TIME_OUT
if (retry_num <= 10){ retry_num++; //cw_current = 2^cw_num-1; cw_current = pow(2,cw_num)-1; rob = aSlotTime*(int)op_dist_uniform(cw_current); printf("rob time is %f\n",rob); printf("cw_num is %f\n",cw_num); printf("cw_current is %f\n",cw_current); printf("retry num is %d\n",retry_num); ++cw_num; data_event = op_intrpt_schedule_self (op_sim_time() + 0.002 +rob, DATA_INIT);}else{op_subq_pk_remove (0, 0);node_busy = 0;cw_num = 2;retry_num = 0;cw_current = 0;if(beacon == 1) { sended++; if(sended == sending) { Packet* beacon_pkt; beacon_pkt = op_pk_create_fmt ("aaa_packet_beacon_on"); op_pk_nfd_set (beacon_pkt, "on", 0); op_pk_print (beacon_pkt); op_pk_send(beacon_pkt,OUT_STRM); sended = 0; sending = 0; } }}
ACK
Packet* pkptr;int node_flag;int node_src;int node_on;pkptr = op_pk_get(ACK_STRM);op_pk_nfd_get_int32 (pkptr, "flag", &node_flag);//ack packetif (node_flag == 1) { op_pk_nfd_get_int32 (pkptr, "dest", &node_src); if(node_src == nodenum) { printf("ack packet received!\n"); node_busy = 0; cw_num = 2; retry_num = 0; cw_current = 0; if(beacon == 1) { sended++; if(sended == sending) { Packet* beacon_pkt; beacon_pkt = op_pk_create_fmt ("aaa_packet_beacon_on"); op_pk_nfd_set (beacon_pkt, "on", 0); op_pk_print (beacon_pkt); op_pk_send(beacon_pkt,OUT_STRM); sended = 0; sending = 0; } } if(op_ev_valid(timeout_event) == OPC_TRUE) { op_ev_cancel(timeout_event); printf("timeout_event canceled\n"); } op_pk_destroy(pkptr); op_subq_pk_remove (0, 0); if (op_subq_empty (0) == OPC_TRUE) { printf("subqueue is empty!\n"); } } else { op_pk_destroy(pkptr); } }//csma data packetif (node_flag == 0) { printf("data packet received!"); op_pk_destroy(pkptr); }//beacon packetif (node_flag == 3){op_pk_nfd_get_int32 (pkptr, "on", &node_on);if(node_on == 1) { beacon = 1; if (!op_subq_empty (0) == OPC_TRUE) { sending++; } }else { beacon = 0; }printf("beacon packet received!\n");printf("beacon status is %d\n",beacon);op_pk_destroy(pkptr);}///////////////////////////////////////////if (node_flag == 4) { op_pk_destroy(pkptr); }///////////////////////////////////////////if (node_flag == 5) { op_pk_destroy(pkptr); }
0 0
- csma_0
- maven常见异常总结
- Python开发环境安装指南Edit
- Android 调用webService+回调接口+线程池工具类封装(支持json格式接口和xml格式接口)
- 常用的系统存储过程
- adb devices offline solution for Window Batch CMD
- csma_0
- 目前较为理想的视频格式是什么?
- LoRaWAN协议中文版_第5章 MAC命令
- Django(八)下:Model操作和Form操作、序列化操作
- leetcode -16 3Sum Closest
- QQ第三方登录-非官方应用-请到官方网站下载正版应用-100044错误码
- Java学习笔记(3)
- 官网不提供直接下载spring的jar提倡通过maven等jar管理工具下载
- Linux学习总结(23)——SSH协议详解