uint32_t NDEFPushProtocol::pushPayload(uint8_t *NDEFMessage, uint32_t length) { NPP_MESSAGE *nppMessage = (NPP_MESSAGE *) ALLOCATE_HEADER_SPACE(NDEFMessage, NPP_MESSAGE_HDR_LEN); nppMessage->version = NPP_SUPPORTED_VERSION; nppMessage->numNDEFEntries = MODIFY_ENDIAN((uint32_t)0x00000001); nppMessage->actionCode = NPP_ACTION_CODE; nppMessage->NDEFLength = MODIFY_ENDIAN(length); /*uint8_t *buf = (uint8_t *) nppMessage; Serial.println(F("NPP + NDEF Message")); for (uint16_t i = 0; i < length + NPP_MESSAGE_HDR_LEN; ++i) { Serial.print(F("0x")); Serial.print(buf[i], HEX); Serial.print(F(" ")); }*/ uint32_t result = _linkLayer->openNPPClientLink(); if(RESULT_OK(result)) //if connection is error-free { result = _linkLayer->clientLinkTxData((uint8_t *)nppMessage, length + NPP_MESSAGE_HDR_LEN); } return result; }
uint32_t NDEFPushProtocol::rxNDEFPayload(uint8_t *&data) { uint32_t result = _linkLayer->openNPPServerLink(); if(RESULT_OK(result)) //if connection is error-free { //Serial.println(F("CONNECTED.")); result = _linkLayer->serverLinkRxData(data); if (RESULT_OK(result)) { NPP_MESSAGE *nppMessage = (NPP_MESSAGE *)data; nppMessage->numNDEFEntries = MODIFY_ENDIAN(nppMessage->numNDEFEntries); nppMessage->NDEFLength = MODIFY_ENDIAN(nppMessage->NDEFLength); if (nppMessage->version != NPP_SUPPORTED_VERSION) { Serial.println(F("Recieved an NPP message of an unsupported version.")); return NPP_UNSUPPORTED_VERSION; } else if (nppMessage->numNDEFEntries != 1) { Serial.println(F("Invalid number of NDEF entries")); return NPP_INVALID_NUM_ENTRIES; } else if (nppMessage->actionCode != NPP_ACTION_CODE) { Serial.println(F("Invalid Action Code")); return NPP_INVALID_ACTION_CODE; } _linkLayer->closeNPPServerLink(); //Serial.println(F("Returning NPP Message")); //Serial.print(F("Length: ")); //Serial.println(nppMessage->NDEFLength, HEX); data = nppMessage->NDEFMessage; return nppMessage->NDEFLength; } } return result; }
uint32_t SNEP::pushPayload(uint8_t *NDEFMessage, uint32_t length) { SNEP_MESSAGE *snepMessage = (SNEP_MESSAGE *) ALLOCATE_HEADER_SPACE(NDEFMessage, SNEP_MESSAGE_HDR_LEN); snepMessage->version = 0x10; snepMessage->action = 0x02; snepMessage->length = MODIFY_ENDIAN(length); uint32_t result = _linkLayer->openSNEPClientLink(); if(RESULT_OK(result)) //if connection is error-free { result = _linkLayer->clientLinkTxData((uint8_t *)snepMessage, length + SNEP_MESSAGE_HDR_LEN); } return result; }