otError Joiner::Start(const char * aPSKd, const char * aProvisioningUrl, const char * aVendorName, const char * aVendorModel, const char * aVendorSwVersion, const char * aVendorData, otJoinerCallback aCallback, void * aContext) { ThreadNetif & netif = GetNetif(); otError error; Mac::ExtAddress joinerId; Crc16 ccitt(Crc16::kCcitt); Crc16 ansi(Crc16::kAnsi); VerifyOrExit(mState == OT_JOINER_STATE_IDLE, error = OT_ERROR_BUSY); GetNotifier().Signal(OT_CHANGED_JOINER_STATE); // use extended address based on factory-assigned IEEE EUI-64 GetJoinerId(joinerId); netif.GetMac().SetExtAddress(joinerId); netif.GetMle().UpdateLinkLocalAddress(); for (size_t i = 0; i < sizeof(joinerId); i++) { ccitt.Update(joinerId.m8[i]); ansi.Update(joinerId.m8[i]); } mCcitt = ccitt.Get(); mAnsi = ansi.Get(); error = netif.GetCoapSecure().Start(OPENTHREAD_CONFIG_JOINER_UDP_PORT); SuccessOrExit(error); error = netif.GetCoapSecure().SetPsk(reinterpret_cast<const uint8_t *>(aPSKd), static_cast<uint8_t>(strlen(aPSKd))); SuccessOrExit(error); error = netif.GetCoapSecure().GetDtls().mProvisioningUrl.SetProvisioningUrl(aProvisioningUrl); SuccessOrExit(error); memset(mJoinerRouters, 0, sizeof(mJoinerRouters)); SuccessOrExit(error = netif.GetMle().Discover(0, netif.GetMac().GetPanId(), true, false, HandleDiscoverResult, this)); mVendorName = aVendorName; mVendorModel = aVendorModel; mVendorSwVersion = aVendorSwVersion; mVendorData = aVendorData; mCallback = aCallback; mContext = aContext; mState = OT_JOINER_STATE_DISCOVER; exit: return error; }
void SteeringDataTlv::ComputeBloomFilter(const otExtAddress &aJoinerId) { Crc16 ccitt(Crc16::kCcitt); Crc16 ansi(Crc16::kAnsi); for (size_t j = 0; j < sizeof(otExtAddress); j++) { uint8_t byte = aJoinerId.m8[j]; ccitt.Update(byte); ansi.Update(byte); } SetBit(ccitt.Get() % GetNumBits()); SetBit(ansi.Get() % GetNumBits()); }
u16 calculacrc(FILE *fp) { BYTE buf[BUF_SZ]; size_t nbytes; u16 crc=0xFFFF; rewind(fp); while (!feof(fp)) { nbytes=fread(buf, 1, BUF_SZ, fp); if (ferror(fp)) { perror("fread: calculacrc()"); exit(1); } crc=ccitt(crc, nbytes, buf); } return crc; }