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

📄 msg.c

📁 IEEE1588 Protocol,用于同步局域网各站点时间
💻 C
📖 第 1 页 / 共 3 页
字号:
/* msg.c *//* see spec annex d */#include "../ptpd.h"Boolean msgPeek(void *buf, ssize_t length){  /* not imlpemented yet */  return TRUE;}void msgUnpackHeader(void *buf, MsgHeader *header){  header->versionPTP = flip16(*(UInteger16*)(buf + 0));  header->versionNetwork = flip16(*(UInteger16*)(buf + 2));  DBGV("msgUnpackHeader: versionPTP %d\n", header->versionPTP);  DBGV("msgUnpackHeader: versionNetwork %d\n", header->versionNetwork);    memcpy(header->subdomain, (buf + 4), 16);  DBGV("msgUnpackHeader: subdomain %s\n", header->subdomain);    header->messageType = *(UInteger8*)(buf + 20);  header->sourceCommunicationTechnology = *(UInteger8*)(buf + 21);  DBGV("msgUnpackHeader: messageType %d\n", header->messageType);  DBGV("msgUnpackHeader: sourceCommunicationTechnology %d\n", header->sourceCommunicationTechnology);    memcpy(header->sourceUuid, (buf + 22), 6);  DBGV("msgUnpackHeader: sourceUuid %02hhx:%02hhx:%02hhx:%02hhx:%02hhx:%02hhx\n",    header->sourceUuid[0], header->sourceUuid[1], header->sourceUuid[2],    header->sourceUuid[3], header->sourceUuid[4], header->sourceUuid[5]);    header->sourcePortId = flip16(*(UInteger16*)(buf + 28));  header->sequenceId = flip16(*(UInteger16*)(buf + 30));  DBGV("msgUnpackHeader: sourcePortId %d\n", header->sourcePortId);  DBGV("msgUnpackHeader: sequenceId %d\n", header->sequenceId);    header->control = *(UInteger8*)(buf + 32);  DBGV("msgUnpackHeader: control %d\n", header->control);    memcpy(header->flags, (buf + 34), 2);  DBGV("msgUnpackHeader: flags %02hhx %02hhx\n", header->flags[0], header->flags[1]);}void msgUnpackSync(void *buf, MsgSync *sync){  sync->originTimestamp.seconds = flip32(*(UInteger32*)(buf + 40));  DBGV("msgUnpackSync: originTimestamp.seconds %u\n", sync->originTimestamp.seconds);  sync->originTimestamp.nanoseconds = flip32(*(Integer32*)(buf + 44));  DBGV("msgUnpackSync: originTimestamp.nanoseconds %d\n", sync->originTimestamp.nanoseconds);  sync->epochNumber = flip16(*(UInteger16*)(buf + 48));  DBGV("msgUnpackSync: epochNumber %d\n", sync->epochNumber);  sync->currentUTCOffset = flip16(*(Integer16*)(buf + 50));  DBGV("msgUnpackSync: currentUTCOffset %d\n", sync->currentUTCOffset);  sync->grandmasterCommunicationTechnology = *(UInteger8*)(buf + 53);  DBGV("msgUnpackSync: grandmasterCommunicationTechnology %d\n", sync->grandmasterCommunicationTechnology);  memcpy(sync->grandmasterClockUuid, (buf + 54), 6);  DBGV("msgUnpackSync: grandmasterClockUuid %02hhx:%02hhx:%02hhx:%02hhx:%02hhx:%02hhx\n",    sync->grandmasterClockUuid[0], sync->grandmasterClockUuid[1], sync->grandmasterClockUuid[2],    sync->grandmasterClockUuid[3], sync->grandmasterClockUuid[4], sync->grandmasterClockUuid[5]);  sync->grandmasterPortId = flip16(*(UInteger16*)(buf + 60));  DBGV("msgUnpackSync: grandmasterPortId %d\n", sync->grandmasterPortId);  sync->grandmasterSequenceId = flip16(*(UInteger16*)(buf + 62));  DBGV("msgUnpackSync: grandmasterSequenceId %d\n", sync->grandmasterSequenceId);  sync->grandmasterClockStratum = *(UInteger8*)(buf + 67);  DBGV("msgUnpackSync: grandmasterClockStratum %d\n", sync->grandmasterClockStratum);  memcpy(sync->grandmasterClockIdentifier, (buf + 68), 4);  DBGV("msgUnpackSync: grandmasterClockIdentifier %c%c%c%c\n",    sync->grandmasterClockIdentifier[0], sync->grandmasterClockIdentifier[1],    sync->grandmasterClockIdentifier[2], sync->grandmasterClockIdentifier[3]);  sync->grandmasterClockVariance = flip16(*(Integer16*)(buf + 74));  DBGV("msgUnpackSync: grandmasterClockVariance %d\n", sync->grandmasterClockVariance);  sync->grandmasterPreferred = *(UInteger8*)(buf + 77);  DBGV("msgUnpackSync: grandmasterPreferred %d\n", sync->grandmasterPreferred);  sync->grandmasterIsBoundaryClock = *(UInteger8*)(buf + 79);  DBGV("msgUnpackSync: grandmasterIsBoundaryClock %d\n", sync->grandmasterIsBoundaryClock);  sync->syncInterval = *(Integer8*)(buf + 83);  DBGV("msgUnpackSync: syncInterval %d\n", sync->syncInterval);  sync->localClockVariance = flip16(*(Integer16*)(buf + 86));  DBGV("msgUnpackSync: localClockVariance %d\n", sync->localClockVariance);  sync->localStepsRemoved = flip16(*(UInteger16*)(buf + 90));  DBGV("msgUnpackSync: localStepsRemoved %d\n", sync->localStepsRemoved);  sync->localClockStratum = *(UInteger8*)(buf + 95);  DBGV("msgUnpackSync: localClockStratum %d\n", sync->localClockStratum);  memcpy(sync->localClockIdentifer, (buf + 96), PTP_CODE_STRING_LENGTH);  DBGV("msgUnpackSync: localClockIdentifer %c%c%c%c\n",     sync->localClockIdentifer[0], sync->localClockIdentifer[1],    sync->localClockIdentifer[2], sync->localClockIdentifer[3]);  sync->parentCommunicationTechnology = *(UInteger8*)(buf + 101);  DBGV("msgUnpackSync: parentCommunicationTechnology %d\n", sync->parentCommunicationTechnology);  memcpy(sync->parentUuid, (buf + 102), PTP_UUID_LENGTH);  DBGV("msgUnpackSync: parentUuid %02hhx:%02hhx:%02hhx:%02hhx:%02hhx:%02hhx\n",    sync->parentUuid[0], sync->parentUuid[1], sync->parentUuid[2],    sync->parentUuid[3], sync->parentUuid[4], sync->parentUuid[5]);  sync->parentPortField = flip16(*(UInteger16*)(buf + 110));  DBGV("msgUnpackSync: parentPortField %d\n", sync->parentPortField);  sync->estimatedMasterVariance = flip16(*(Integer16*)(buf + 114));  DBGV("msgUnpackSync: estimatedMasterVariance %d\n", sync->estimatedMasterVariance);  sync->estimatedMasterDrift = flip32(*(Integer32*)(buf + 116));  DBGV("msgUnpackSync: estimatedMasterDrift %d\n", sync->estimatedMasterDrift);  sync->utcReasonable = *(UInteger8*)(buf + 123);  DBGV("msgUnpackSync: utcReasonable %d\n", sync->utcReasonable);}void msgUnpackDelayReq(void *buf, MsgDelayReq *req) {}void msgUnpackFollowUp(void *buf, MsgFollowUp *follow){  follow->associatedSequenceId = flip16(*(UInteger16*)(buf + 42));  DBGV("msgUnpackFollowUp: associatedSequenceId %u\n", follow->associatedSequenceId);  follow->preciseOriginTimestamp.seconds = flip32(*(UInteger32*)(buf + 44));  DBGV("msgUnpackFollowUp: preciseOriginTimestamp.seconds %u\n", follow->preciseOriginTimestamp.seconds);  follow->preciseOriginTimestamp.nanoseconds = flip32(*(Integer32*)(buf + 48));  DBGV("msgUnpackFollowUp: preciseOriginTimestamp.nanoseconds %d\n", follow->preciseOriginTimestamp.nanoseconds);}void msgUnpackDelayResp(void *buf, MsgDelayResp *resp){  resp->delayReceiptTimestamp.seconds = flip32(*(UInteger32*)(buf + 40));  DBGV("msgUnpackDelayResp: delayReceiptTimestamp.seconds %u\n", resp->delayReceiptTimestamp.seconds);  resp->delayReceiptTimestamp.nanoseconds = flip32(*(Integer32*)(buf + 44));  DBGV("msgUnpackDelayResp: delayReceiptTimestamp.nanoseconds %d\n", resp->delayReceiptTimestamp.nanoseconds);  resp->requestingSourceCommunicationTechnology = *(UInteger8*)(buf + 49);  DBGV("msgUnpackDelayResp: requestingSourceCommunicationTechnology %d\n", resp->requestingSourceCommunicationTechnology);  memcpy(resp->requestingSourceUuid, (buf + 50), 6);  DBGV("msgUnpackDelayResp: requestingSourceUuid %02hhx:%02hhx:%02hhx:%02hhx:%02hhx:%02hhx\n",    resp->requestingSourceUuid[0], resp->requestingSourceUuid[1], resp->requestingSourceUuid[2],    resp->requestingSourceUuid[3], resp->requestingSourceUuid[4], resp->requestingSourceUuid[5]);  resp->requestingSourcePortId = flip16(*(UInteger16*)(buf + 56));  DBGV("msgUnpackDelayResp: requestingSourcePortId %d\n", resp->requestingSourcePortId);  resp->requestingSourceSequenceId = flip16(*(UInteger16*)(buf + 58));  DBGV("msgUnpackDelayResp: requestingSourceSequenceId %d\n", resp->requestingSourceSequenceId);}void msgUnpackManagement(void *buf, MsgManagement *manage){  manage->targetCommunicationTechnology = *(UInteger8*)(buf + 41);  DBGV("msgUnpackManagement: targetCommunicationTechnology %d\n", manage->targetCommunicationTechnology);  memcpy(manage->targetUuid, (buf + 42), 6);  DBGV("msgUnpackManagement: targetUuid %02hhx:%02hhx:%02hhx:%02hhx:%02hhx:%02hhx\n",    manage->targetUuid[0], manage->targetUuid[1], manage->targetUuid[2],    manage->targetUuid[3], manage->targetUuid[4], manage->targetUuid[5]);  manage->targetPortId = flip16(*(UInteger16*)(buf + 48));  DBGV("msgUnpackManagement: targetPortId %d\n", manage->targetPortId);  manage->startingBoundaryHops = flip16(*(Integer16*)(buf + 50));  DBGV("msgUnpackManagement: startingBoundaryHops %d\n", manage->startingBoundaryHops);  manage->boundaryHops = flip16(*(Integer16*)(buf + 52));  DBGV("msgUnpackManagement: boundaryHops %d\n", manage->boundaryHops);  manage->managementMessageKey = *(UInteger8*)(buf + 55);  DBGV("msgUnpackManagement: managementMessageKey %d\n", manage->managementMessageKey);  manage->parameterLength = flip16(*(UInteger16*)(buf + 58));  DBGV("msgUnpackManagement: parameterLength %d\n", manage->parameterLength);    if(manage->managementMessageKey == PTP_MM_GET_FOREIGN_DATA_SET)    manage->recordKey = flip16(*(UInteger16*)(buf + 62));}UInteger8 msgUnloadManagement(void *buf, MsgManagement *manage,  PtpClock *ptpClock, RunTimeOpts *rtOpts){  TimeInternal internalTime;  TimeRepresentation externalTime;    switch(manage->managementMessageKey)  {  case PTP_MM_INITIALIZE_CLOCK:    if(ptpClock->initializable)      return PTP_INITIALIZING;    break;      case PTP_MM_GOTO_FAULTY_STATE:    DBG("event FAULT_DETECTED (forced by management message)\n");    return PTP_FAULTY;    break;      case PTP_MM_DISABLE_PORT:    if(manage->targetPortId == 1)    {      DBG("event DESIGNATED_DISABLED\n");      return PTP_DISABLED;    }    break;      case PTP_MM_ENABLE_PORT:    if(manage->targetPortId == 1)    {      DBG("event DESIGNATED_ENABLED\n");      return PTP_INITIALIZING;    }    break;      case PTP_MM_CLEAR_DESIGNATED_PREFERRED_MASTER:    ptpClock->preferred = FALSE;    break;        case PTP_MM_SET_DESIGNATED_PREFERRED_MASTER:    ptpClock->preferred = TRUE;    break;      case PTP_MM_DISABLE_BURST:    break;      case PTP_MM_ENABLE_BURST:    break;      case PTP_MM_SET_SYNC_INTERVAL:    rtOpts->syncInterval = *(Integer8*)(buf + 63);    break;      case PTP_MM_SET_SUBDOMAIN:    memcpy(rtOpts->subdomainName, buf + 60, 16);    DBG("set subdomain to %s\n", rtOpts->subdomainName);    break;      case PTP_MM_SET_TIME:    externalTime.seconds = flip32(*(UInteger32*)(buf + 60));    externalTime.nanoseconds = flip32(*(Integer32*)(buf + 64));    toInternalTime(&internalTime, &externalTime, &ptpClock->halfEpoch);    setTime(&internalTime);    break;

⌨️ 快捷键说明

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