亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? frame.c

?? 主要用于無線傳感網絡的編寫的書籍.對于初學者有著很大的用處
?? C
字號:
#include <stdio.h>#include "frame.h"#include "../physical/serial_connect.h"#include "../../debug/debug.h"#include <stdio.h>   /* Standard input/output definitions */#include <string.h>  /* String function definitions */#include <unistd.h>  /* UNIX standard function definitions */#include <fcntl.h>   /* File control definitions */#include <errno.h>   /* Error number definitions */#include <termios.h> /* POSIX terminal control definitions */int computeCRC(uint8_t packet_type, uint8_t *bytes, int numbytes) {  short crc = 0;  int i = 0;  int j = 0;  unsigned char cur_byte = 0;  for (i=-1; i<numbytes; i++) {    if (i == -1)      cur_byte = packet_type;    else      cur_byte = bytes[i];          crc = crc ^ cur_byte << 8;    for (j=8; j>0; j--) {      if ((crc & 0x8000) == 0x8000)        crc = crc << 1 ^ 0x1021;      else        crc = crc << 1;    }  }  return crc & 0xFFFF;}void printFrame(int dbg_type, int dbg_level, frame *f) {  int i=0;  dbg(dbg_type, dbg_level, "Frame: type = %02x\n", f->type);  dbg(dbg_type, dbg_level, "       data = ");  for (i=0; i<f->data_size; i++) {    dbg(dbg_type, dbg_level, "%02x ", f->data[i]);  }  dbg(dbg_type, dbg_level, "\n");  dbg(dbg_type, dbg_level, "        crc = %04x\n", f->crc);}int readFrame(int serial_port_fd, frame *f) {  int insync = 0;  int numbytes = 0;  int numrealbytes = 0;  char temp = '\0';  int escaped = 0;  if (serial_port_fd == -1) {    dbg(DBG_LINK, CRITICAL, "ERROR: the serial port passed to readFrame was invalid!\n");    return FAILURE;  }  dbg(DBG_LINK, FRIVOLOUS, "into readFrame\n");  while (1) {    flushInputPort(serial_port_fd);    while (1) {      if (insync == FALSE) {        dbg(DBG_LINK, AVERAGE, "not insync, resyncronizing\n");        if (read(serial_port_fd, &temp, 1) != 1) {          continue;        }        temp &= 0xFF;        if (temp == SYNC_BYTE) {           dbg(DBG_LINK, FRIVOLOUS, "now we're in sync, on with the show\n");          insync = TRUE;          numbytes = 0;          escaped = FALSE;        }      }      // now we should be insync, unless we actually read the trailing sync byte of a packet first      // in which case the too-short-packet check will suffice as a check      if (numrealbytes >= MTU) { // packet too long, drop and resyncronize        dbg(DBG_LINK, AVERAGE, "numbytes >= MTU, readFrame resyncronizes\n");        insync = FALSE;        continue;      }      if (read(serial_port_fd, &temp, 1) == 1) {        temp &= 0xFF;        numbytes++;                  if (escaped) {          if (temp == SYNC_BYTE) { // can't have SYNC_BYTE after escape character            dbg(DBG_LINK, AVERAGE, "SYNC_BYTE after ESCAPE_BYTE: readFrame resyncronizes\n");            insync = FALSE;            continue;          }          dbg(DBG_LINK, FRIVOLOUS, "we are escaped, escaping (%02x) into (%02x)\n", temp, temp ^ 0x20);          temp ^= 0x20;          escaped = FALSE;        }        else if (temp == ESCAPE_BYTE) {          dbg(DBG_LINK, FRIVOLOUS, "found escape byte, escaping next byte...\n");          escaped = TRUE;          continue;        }        else if (temp == SYNC_BYTE) {          if (numbytes < MINIMUM_FRAME_SIZE) { // sync byte that makes frame too small (i.e. if we caught            insync = FALSE;                    // the trailing sync byte on resyncronization            break;                                    }          dbg(DBG_LINK, FRIVOLOUS, "found end sync byte, done with packet\n");          break; // reached the end of this packet        }        else if (numbytes == 1) { // first byte is packet type          dbg(DBG_LINK, FRIVOLOUS, "setting frame type to %02x\n", temp);          // DO NOT UPDATE numrealbytes HERE SINCE MTU DOES NOT TAKE IT INTO ACCOUNT          f->type = temp;          continue;        }        f->data[numrealbytes] = temp;        numrealbytes++;      }      else { // error reading byte from serial port, resyncronize        dbg(DBG_LINK, AVERAGE, "error reading byte: readFrame resyncronizes\n");        insync = FALSE;      }    }    // if we got here, we read an entire frame    f->data_size = numrealbytes - 2; // the "- 2" is to make up for the CRC being copied into the                                      // data array, when the next level up will see it in f->crc    f->crc = 0;    f->crc =  (f->data[numrealbytes-1] & 0xFF) << 8;    f->crc |=  f->data[numrealbytes-2] & 0xFF;    f->crc &= 0xFFFF;    dbg(DBG_LINK, AVERAGE, "setting f->crc....%04x\n", f->crc);    return SUCCESS;  }  return FAILURE;}int handleFrame(frame *f) {  if (!f) return FAILURE;/*  if (f->crc != computeCRC(f->type, f->data, f->data_size)) {    dbg(DBG_LINK, CRITICAL, "computed CRC (%0x) does not match f->crc (%0x) in handleFrame \n", computeCRC(f->type, f->data, f->data_size), f->crc);    return DROPPACKET;  } */  if (f->type == P_UNKNOWN) {    dbg(DBG_LINK, AVERAGE, "f->type == P_UNKNOWN, returning DROPPACKET from handleFrame\n");    return DROPPACKET;  }  if (f->type == P_PACKET_NO_ACK) {    dbg(DBG_LINK, AVERAGE, "f->type == P_PACKET_NO_ACK, returning GOODPACKET from handleFrame\n");    return GOODPACKET;  }  if (f->type == P_ACK) {    dbg(DBG_LINK, AVERAGE, "f->type == P_ACK, returning DROPPACKET from handleFrame\n");    return DROPPACKET;  }  if (f->type == P_PACKET_ACK) {    dbg(DBG_LINK, AVERAGE, "f->type == P_PACKET_ACK, returning GOODPACKET from handleFrame\n");    return GOODPACKET; // note: when I move to threads, we'll need to handle ACK packets here  }  dbg(DBG_LINK, AVERAGE, "unknown packet type (%d): returning DROPPACKET from handleFrame\n", f->type);  return DROPPACKET;}int readGoodFrame(int serial_port_fd, frame *f) {  int cur_try = 0;  if (!f) return FAILURE;  if (serial_port_fd == -1) return FAILURE;  while (cur_try++ < GOODFRAME_MAXTRIES) {    if (readFrame(serial_port_fd, f) == FAILURE) {      return FAILURE;    }    if (handleFrame(f) != GOODPACKET) {      dbg(DBG_LINK, AVERAGE, "WARNING: dropping packet in readGoodFrame...\n");      printFrame(DBG_LINK, AVERAGE, f);      continue;    }    else {      return SUCCESS;    }  }  return FAILURE;}int writeFrame(int sfd, uint8_t *data, int data_size) {  int i;  uint8_t d;  int crc;  if (!data) {    dbg(DBG_LINK, CRITICAL, "ERROR: data is null in writeFrame!\n");    return FAILURE;  }  if (data_size > MTU) {    dbg(DBG_LINK, CRITICAL, "ERROR: data size too big (> %d) in writeFrame!\n", MTU);    return FAILURE;  }  flushOutputPort(sfd);  // first, write sync byte  d = SYNC_BYTE;  if (write(sfd, &d, 1) < 0) {    dbg(DBG_LINK, AVERAGE, "ERROR: could not write SYNC_BYTE\n");    return FAILURE;  }  // next, write type byte  d = P_PACKET_NO_ACK;  if (write(sfd, &d, 1) < 0) {    dbg(DBG_LINK, AVERAGE, "ERROR: could not write type byte\n");    return FAILURE;  }  // now, write the data, remembering to escape SYNC_BYTE and ESCAPE_BYTE  for (i=0; i<data_size; i++) {    if (data[i] == SYNC_BYTE || data[i] == ESCAPE_BYTE) {      d = ESCAPE_BYTE;      if (write(sfd, &d, 1) < 0) {        dbg(DBG_LINK, AVERAGE, "ERROR: could not write ESCAPE_BYTE before SYNC_BYTE in data in writeFrame\n");        return FAILURE;      }      d = data[i] ^ 0x20;    }    else {      d = data[i];    }    if (write(sfd, &d, 1) < 0) {      dbg(DBG_LINK, AVERAGE, "ERROR: could not write data[%d] (0x%02x) in writeFrame\n", i, data[i]);      return FAILURE;    }  }  // now send CRC (remember, little endian format)  crc = computeCRC(P_PACKET_NO_ACK, data, data_size);  d = crc & 0xFF;  if (write(sfd, &d, 1) < 0) {    dbg(DBG_LINK, AVERAGE, "ERROR: could not write least significant byte of crc in writeFrame\n");    return FAILURE;  }  d = ((crc & 0xFF00) >> 8) & 0xFF;  if (write(sfd, &d, 1) < 0) {    dbg(DBG_LINK, AVERAGE, "ERROR: could not write most significant byte of crc in writeFrame\n");    return FAILURE;  }  // finish up with a final SYNC_BYTE  d = SYNC_BYTE;  if (write(sfd, &d, 1) < 0) {    dbg(DBG_LINK, AVERAGE, "ERROR: could not write final SYNC_BYTE in writeFrame\n");    return FAILURE;  }  return SUCCESS;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91精品免费观看| 天天操天天色综合| 亚洲h在线观看| 国产精品夜夜嗨| 3751色影院一区二区三区| 亚洲国产岛国毛片在线| 蜜臀av一区二区在线观看| 91在线国产福利| 国产女人18水真多18精品一级做| 亚洲午夜久久久久久久久久久 | 日韩欧美色综合| 亚洲欧美福利一区二区| 国产麻豆午夜三级精品| 日韩一卡二卡三卡| 日韩精品电影在线观看| 欧美性生活久久| 亚洲精品免费在线| av色综合久久天堂av综合| 国产亚洲一本大道中文在线| 蜜桃一区二区三区四区| 欧美日韩国产经典色站一区二区三区| 亚洲天堂中文字幕| 色综合久久久久久久久久久| 中文字幕在线一区二区三区| 风间由美一区二区av101| 国产肉丝袜一区二区| 国产老女人精品毛片久久| 日韩女优av电影| 国产一区二区在线看| 久久综合九色综合久久久精品综合 | 久久这里只有精品6| 秋霞成人午夜伦在线观看| 91精品国产91久久久久久最新毛片 | 91精品国产麻豆国产自产在线 | 99视频一区二区| 中文字幕欧美一| 91视频www| 亚洲一卡二卡三卡四卡 | 成人18视频日本| 中文字幕一区日韩精品欧美| 色哟哟一区二区在线观看| 亚洲一区精品在线| 欧美日韩国产经典色站一区二区三区 | 日韩欧美亚洲另类制服综合在线| 日本三级亚洲精品| 久久久亚洲高清| 成人精品免费看| 亚洲综合成人在线| 7777精品久久久大香线蕉| 免费在线看一区| 日本一区二区三区在线不卡| a级精品国产片在线观看| 亚洲综合久久久| 欧美一级一级性生活免费录像| 韩国av一区二区三区| 国产精品麻豆网站| 欧美精品电影在线播放| 精品一区二区久久| 亚洲精品视频免费看| 7777精品伊人久久久大香线蕉经典版下载| 蜜臀91精品一区二区三区| 日本一区二区三区免费乱视频| 99精品久久99久久久久| 日日夜夜免费精品| 国产欧美一区二区精品婷婷| 91在线观看视频| 麻豆国产精品777777在线| 亚洲视频免费在线观看| 日韩欧美电影一二三| 99视频在线精品| 九九久久精品视频| 亚洲精品高清视频在线观看| 日韩一级免费一区| 99re66热这里只有精品3直播| 免费观看久久久4p| 亚洲日本va在线观看| 精品国产亚洲一区二区三区在线观看| gogogo免费视频观看亚洲一| 免费在线观看日韩欧美| 日韩理论在线观看| 久久久久久久综合日本| 欧美色偷偷大香| 成人精品免费看| 国产综合色在线| 亚洲成人激情社区| 中文字幕日韩av资源站| www国产成人| 欧美群妇大交群的观看方式| 波波电影院一区二区三区| 久久激情五月激情| 性欧美疯狂xxxxbbbb| 中文字幕亚洲视频| 欧美国产综合色视频| 久久综合久久综合久久| 欧美一区午夜精品| 欧美高清你懂得| 欧美在线视频不卡| 91视频观看视频| 99re在线精品| 99国产精品久久久久久久久久久| 国产一区二区不卡| 激情文学综合网| 久久精品99国产国产精| 日日夜夜免费精品视频| 亚洲成a人v欧美综合天堂| 亚洲欧美日韩国产综合在线| 国产精品理论在线观看| 国产精品美日韩| 国产精品视频一区二区三区不卡| 久久久久久久久久久电影| 日韩欧美黄色影院| 日韩欧美国产综合一区| 日韩欧美一级精品久久| 精品99一区二区| 精品国产一区二区在线观看| 精品99一区二区| 国产视频在线观看一区二区三区| 久久夜色精品国产欧美乱极品| 日韩美女视频在线| 欧美电影免费提供在线观看| 精品乱人伦小说| 久久久国产综合精品女国产盗摄| 日韩精品资源二区在线| 久久久久久久久久久久久女国产乱| 久久色视频免费观看| 国产午夜久久久久| 国产精品国产三级国产普通话蜜臀| 国产偷国产偷亚洲高清人白洁| 国产亚洲精品福利| 亚洲色图制服丝袜| 亚洲国产精品一区二区www| 日本亚洲最大的色成网站www| 免费xxxx性欧美18vr| 国产一本一道久久香蕉| 波多野结衣中文一区| 欧美唯美清纯偷拍| 26uuu精品一区二区三区四区在线 26uuu精品一区二区在线观看 | 久久亚洲精品小早川怜子| 中文一区一区三区高中清不卡| 亚洲欧美国产高清| 美女一区二区久久| 成人综合日日夜夜| 欧美日韩一卡二卡三卡| 亚洲精品一区二区三区福利| 综合久久国产九一剧情麻豆| 午夜激情一区二区| 国产精品一二一区| 欧美日韩精品欧美日韩精品| 久久人人超碰精品| 亚洲午夜久久久久久久久久久| 久久99久久99精品免视看婷婷| 99re在线精品| 久久亚洲精品小早川怜子| 伊人色综合久久天天人手人婷| 免费在线观看成人| 色88888久久久久久影院野外| 日韩视频一区二区三区在线播放| 国产精品剧情在线亚洲| 日产国产高清一区二区三区| 白白色 亚洲乱淫| 欧美videos大乳护士334| 一区二区三区国产精华| 国内精品免费在线观看| 欧美猛男超大videosgay| 中文字幕中文字幕中文字幕亚洲无线| 午夜精品一区二区三区电影天堂 | 国产一区二区三区电影在线观看 | 久久综合色8888| 天天操天天色综合| 不卡区在线中文字幕| 精品国产乱子伦一区| 午夜精品久久久久久久久| av电影天堂一区二区在线| 久久青草国产手机看片福利盒子| 偷窥少妇高潮呻吟av久久免费| av在线不卡观看免费观看| 26uuu精品一区二区在线观看| 亚洲图片欧美色图| 99久久99久久精品免费观看| 精品国产露脸精彩对白| 日韩专区欧美专区| 欧美天堂亚洲电影院在线播放| 国产精品理论片| 成人听书哪个软件好| 国产无人区一区二区三区| 久88久久88久久久| 欧美岛国在线观看| 男男gaygay亚洲| 欧美一级夜夜爽| 日本成人中文字幕| 欧美精品 日韩| 天天色天天操综合| 777欧美精品| 麻豆成人久久精品二区三区红 | 国产夫妻精品视频| 久久影院视频免费| 国产精品一区在线观看乱码| 精品免费国产一区二区三区四区| 久久爱www久久做| 久久久久综合网|