INT32 nativeNdef_readText( UINT8*ndefBuff, UINT32 ndefBuffLen, char * outText, UINT32 textLen) { int langCodeLen; UINT8 *payload; UINT32 payloadLength; UINT8 ndef_tnf; UINT8 *ndef_type; UINT8 ndef_typeLength; nfc_friendly_type_t friendly_type; ndef_type = NDEF_RecGetType((UINT8*)ndefBuff, &ndef_tnf, &ndef_typeLength); friendly_type = nativeNdef_getFriendlyType(ndef_tnf, ndef_type, ndef_typeLength); if (friendly_type != NDEF_FRIENDLY_TYPE_TEXT) { return -1; } payload = NDEF_RecGetPayload((UINT8*)ndefBuff, &payloadLength); if (payload == NULL) { return -1; } langCodeLen = payload[0]; memcpy(outText, payload + langCodeLen + 1, payloadLength - langCodeLen - 1); outText[payloadLength - langCodeLen - 1] = '\0'; return 0; }
INT32 nativeNdef_readUrl(UINT8*ndefBuff, UINT32 ndefBuffLen, char * outUrl, UINT32 urlBufferLen) { UINT32 prefixIdx; UINT32 prefixLen; UINT8 *payload; UINT32 payloadLength; UINT8 ndef_tnf; UINT8 *ndef_type; UINT8 ndef_typeLength; nfc_friendly_type_t friendly_type; ndef_type = NDEF_RecGetType((UINT8*)ndefBuff, &ndef_tnf, &ndef_typeLength); friendly_type = nativeNdef_getFriendlyType(ndef_tnf, ndef_type, ndef_typeLength); if (friendly_type != NDEF_FRIENDLY_TYPE_URL) { return -1; } payload = NDEF_RecGetPayload((UINT8*)ndefBuff, &payloadLength); if (payload == NULL) { return -1; } prefixIdx = payload[0]; prefixLen = strlen(URI_PREFIX_MAP[prefixIdx]); if (urlBufferLen >= payloadLength + prefixLen) { memcpy(outUrl, URI_PREFIX_MAP[prefixIdx], prefixLen); memcpy(outUrl + prefixLen, payload + 1, payloadLength - 1); outUrl[prefixLen + payloadLength - 1] = '\0'; } return 0; }
static tNFA_STATUS getDeviceCps(UINT8 *record, UINT8 *ref_name, UINT8 ref_len, nfc_handover_cps_t *power) { UINT8 *p_ac_record, *p_ac_payload; UINT32 ac_payload_len; UINT8 cps = HANDOVER_CPS_UNKNOWN; UINT8 carrier_ref_name_len; NXPLOG_API_D ("%s: enter\n", __FUNCTION__); p_ac_record = NDEF_MsgGetFirstRecByType (record, NDEF_TNF_WELLKNOWN, RTD_Ac, sizeof(RTD_Ac)); while ((p_ac_record)) { NXPLOG_API_D ("%s: find ac record\n", __FUNCTION__); /* get payload */ p_ac_payload = NDEF_RecGetPayload (p_ac_record, &ac_payload_len); if ((!p_ac_payload) || (ac_payload_len < 3)) { NXPLOG_API_E ("%s: Failed to get ac payload", __FUNCTION__); return NFA_STATUS_FAILED; } /* Carrier Power State */ cps = *p_ac_payload++; /* Carrier Data Reference Length and Characters */ carrier_ref_name_len = *p_ac_payload++; ac_payload_len -= 2; /* remaining must have carrier data ref and Auxiliary Data Reference Count at least */ if (ac_payload_len > carrier_ref_name_len) { if (carrier_ref_name_len > NFA_CHO_MAX_REF_NAME_LEN) { NXPLOG_API_E ("%s: Too many bytes for carrier_ref_name, len = %d", __FUNCTION__, carrier_ref_name_len); return NFA_STATUS_FAILED; } } else { NXPLOG_API_E ("%s: Failed to parse carrier_ref_name", __FUNCTION__); return NFA_STATUS_FAILED; } if ((carrier_ref_name_len == ref_len) && (memcmp(p_ac_payload, ref_name, ref_len) == 0)) { *power = (nfc_handover_cps_t)cps; return NFA_STATUS_OK; } /* get next Alternative Carrier record */ p_ac_record = NDEF_MsgGetNextRecByType (p_ac_record, NDEF_TNF_WELLKNOWN, RTD_Ac, sizeof(RTD_Ac)); } return NFA_STATUS_FAILED; }
/******************************************************************************* ** ** Function NDEF_MsgAppendMediaBtOobName ** ** Description This function appends Bluetooth Local Name EIR data ** at the end of BT OOB Record. ** ** Returns NDEF_OK if all OK ** *******************************************************************************/ tNDEF_STATUS NDEF_MsgAppendMediaBtOobName (UINT8 *p_msg, UINT32 max_size, UINT32 *p_cur_size, char *p_id_str, BOOLEAN is_complete, UINT8 name_len, UINT8 *p_name) { tNDEF_STATUS status; UINT8 *p_rec; UINT8 eir_data[256]; UINT8 *p; UINT8 eir_data_len; UINT32 oob_data_len; /* find record by Payload ID */ p_rec = ndef_get_bt_oob_record (p_msg, max_size, p_cur_size, p_id_str); if (!p_rec) return (NDEF_REC_NOT_FOUND); /* create EIR data format for COD */ p = eir_data; UINT8_TO_STREAM (p, name_len + 1); if (is_complete) { UINT8_TO_STREAM (p, BT_EIR_COMPLETE_LOCAL_NAME_TYPE); } else { UINT8_TO_STREAM (p, BT_EIR_SHORTENED_LOCAL_NAME_TYPE); } ARRAY_TO_STREAM (p, p_name, name_len); eir_data_len = name_len + 2; /* append EIR data at the end of record */ status = NDEF_MsgAppendPayload(p_msg, max_size, p_cur_size, p_rec, eir_data, eir_data_len); /* update BT OOB data length, if success */ if (status == NDEF_OK) { /* payload length is the same as BT OOB data length */ p = NDEF_RecGetPayload (p_rec, &oob_data_len); /* Get a pointer to the payload or NULL (for none) which is valid */ if (p) { UINT16_TO_STREAM (p, oob_data_len); } } return (status); }
/******************************************************************************* ** ** Function NDEF_MsgAppendMediaBtOobHashCRandR ** ** Description This function appends Hash C and Rand R at the end of BT OOB Record. ** ** Returns NDEF_OK if all OK ** *******************************************************************************/ tNDEF_STATUS NDEF_MsgAppendMediaBtOobHashCRandR (UINT8 *p_msg, UINT32 max_size, UINT32 *p_cur_size, char *p_id_str, UINT8 *p_hash_c, UINT8 *p_rand_r) { tNDEF_STATUS status; UINT8 *p_rec; UINT8 eir_data[BT_OOB_HASH_C_SIZE + BT_OOB_RAND_R_SIZE + 4]; UINT8 *p; UINT8 eir_data_len; UINT32 oob_data_len; /* find record by Payload ID */ p_rec = ndef_get_bt_oob_record (p_msg, max_size, p_cur_size, p_id_str); if (!p_rec) return (NDEF_REC_NOT_FOUND); /* create EIR data format */ p = eir_data; UINT8_TO_STREAM (p, BT_OOB_HASH_C_SIZE + 1); UINT8_TO_STREAM (p, BT_EIR_OOB_SSP_HASH_C_TYPE); ARRAY16_TO_STREAM (p, p_hash_c); UINT8_TO_STREAM (p, BT_OOB_RAND_R_SIZE + 1); UINT8_TO_STREAM (p, BT_EIR_OOB_SSP_RAND_R_TYPE); ARRAY16_TO_STREAM (p, p_rand_r); eir_data_len = BT_OOB_HASH_C_SIZE + BT_OOB_RAND_R_SIZE + 4; /* append EIR data at the end of record */ status = NDEF_MsgAppendPayload(p_msg, max_size, p_cur_size, p_rec, eir_data, eir_data_len); /* update BT OOB data length, if success */ if (status == NDEF_OK) { /* payload length is the same as BT OOB data length */ p = NDEF_RecGetPayload (p_rec, &oob_data_len); /* Get a pointer to the payload or NULL (for none) which is valid */ if (p) { UINT16_TO_STREAM (p, oob_data_len); } } return (status); }
/******************************************************************************* ** ** Function NDEF_MsgAppendMediaBtOobEirData ** ** Description This function appends EIR Data at the end of BT OOB Record. ** ** Returns NDEF_OK if all OK ** *******************************************************************************/ tNDEF_STATUS NDEF_MsgAppendMediaBtOobEirData (UINT8 *p_msg, UINT32 max_size, UINT32 *p_cur_size, char *p_id_str, UINT8 eir_type, UINT8 data_len, UINT8 *p_data) { tNDEF_STATUS status; UINT8 *p_rec; UINT8 eir_data[256]; UINT8 *p; UINT8 eir_data_len; UINT32 oob_data_len; /* find record by Payload ID */ p_rec = ndef_get_bt_oob_record (p_msg, max_size, p_cur_size, p_id_str); if (!p_rec) return (NDEF_REC_NOT_FOUND); /* create EIR data format */ p = eir_data; UINT8_TO_STREAM (p, data_len + 1); UINT8_TO_STREAM (p, eir_type); ARRAY_TO_STREAM (p, p_data, data_len); eir_data_len = data_len + 2; /* append EIR data at the end of record */ status = NDEF_MsgAppendPayload(p_msg, max_size, p_cur_size, p_rec, eir_data, eir_data_len); /* update BT OOB data length, if success */ if (status == NDEF_OK) { /* payload length is the same as BT OOB data length */ p = NDEF_RecGetPayload (p_rec, &oob_data_len); /* Get a pointer to the payload or NULL (for none) which is valid */ if (p) { UINT16_TO_STREAM (p, oob_data_len); } } return (status); }
/******************************************************************************* ** ** Function NDEF_MsgAppendMediaBtOobCod ** ** Description This function appends COD EIR data at the end of BT OOB Record. ** ** Returns NDEF_OK if all OK ** *******************************************************************************/ tNDEF_STATUS NDEF_MsgAppendMediaBtOobCod (UINT8 *p_msg, UINT32 max_size, UINT32 *p_cur_size, char *p_id_str, DEV_CLASS cod) { tNDEF_STATUS status; UINT8 *p_rec; UINT8 eir_data[BT_OOB_COD_SIZE + 2]; UINT8 *p; UINT8 eir_data_len; UINT32 oob_data_len; /* find record by Payload ID */ p_rec = ndef_get_bt_oob_record (p_msg, max_size, p_cur_size, p_id_str); if (!p_rec) return (NDEF_REC_NOT_FOUND); /* create EIR data format for COD */ p = eir_data; UINT8_TO_STREAM (p, BT_OOB_COD_SIZE + 1); UINT8_TO_STREAM (p, BT_EIR_OOB_COD_TYPE); DEVCLASS_TO_STREAM (p, cod); eir_data_len = BT_OOB_COD_SIZE + 2; /* append EIR data at the end of record */ status = NDEF_MsgAppendPayload(p_msg, max_size, p_cur_size, p_rec, eir_data, eir_data_len); /* update BT OOB data length, if success */ if (status == NDEF_OK) { /* payload length is the same as BT OOB data length */ p = NDEF_RecGetPayload (p_rec, &oob_data_len); /* Get a pointer to the payload or NULL (for none) which is valid */ if (p) { UINT16_TO_STREAM (p, oob_data_len); } } return (status); }
INT32 nativeNdef_readHs(UINT8*ndefBuff, UINT32 ndefBuffLen, nfc_handover_select_t *hsInfo) { UINT8 *p_hs_record; UINT8 *p_hs_payload; UINT32 hs_payload_len = 0; UINT8 *p_record; UINT8 *p_payload; UINT32 record_payload_len; UINT8 *p_id; UINT8 id_len; UINT8 version = 0; UINT32 index; UINT8 bt_len; UINT8 bt_type; UINT16 wifi_len; UINT16 wifi_type; UINT8 status = -1; (void)ndefBuffLen; if (hsInfo == NULL) { return -1; } memset(hsInfo, 0, sizeof(nfc_handover_select_t)); /* get Handover Request record */ p_hs_record = NDEF_MsgGetFirstRecByType (ndefBuff, NDEF_TNF_WELLKNOWN, (UINT8*)RTD_Hs, sizeof(RTD_Hs)); if (p_hs_record) { p_hs_payload = NDEF_RecGetPayload (p_hs_record, &hs_payload_len); if ((!p_hs_payload) || (hs_payload_len < 7)) { NXPLOG_API_E ("%s: Failed to get Hs payload (version, cr/ac record)", __FUNCTION__); return -1; } /* Version */ if (NFC_FORUM_HANDOVER_VERSION != p_hs_payload[0]) { NXPLOG_API_E ("%s: Version (0x%02x) not matched", __FUNCTION__, p_hs_payload[0]); return -1; } p_hs_payload += 1; hs_payload_len--; /* NDEF message for Collision Resolution record and Alternative Carrier records */ if (NDEF_OK != NDEF_MsgValidate (p_hs_payload, hs_payload_len, FALSE)) { NXPLOG_API_E ("%s: Failed to validate NDEF message for cr/ac records", __FUNCTION__); return -1; } } else { NXPLOG_API_E ("%s: Hs record not found", __FUNCTION__); return -1; } p_record = NDEF_MsgGetFirstRecByType (ndefBuff, NDEF_TNF_MEDIA, BT_OOB_REC_TYPE, BT_OOB_REC_TYPE_LEN); if (p_record) { status = 0; NXPLOG_API_D ("%s: Found BT OOB record"); if (p_hs_record) { p_id = NDEF_RecGetId(p_record, &id_len); if (p_id == NULL || id_len == 0) { NXPLOG_API_E ("%s: Failed to retreive NDEF ID", __FUNCTION__); return -1; } if (getDeviceCps(p_hs_payload, p_id, id_len, &hsInfo->bluetooth.power_state)!=NFA_STATUS_OK) { hsInfo->bluetooth.power_state = HANDOVER_CPS_UNKNOWN; } } p_payload = NDEF_RecGetPayload(p_record, &record_payload_len); if (p_payload == NULL) { NXPLOG_API_E ("%s: Failed to retreive NDEF payload", __FUNCTION__); return -1; } hsInfo->bluetooth.type = HANDOVER_TYPE_BT; hsInfo->bluetooth.ndef = p_record; hsInfo->bluetooth.ndef_length = record_payload_len; index = 2; if (parseBluetoothAddress(&p_payload[index] , record_payload_len - index, hsInfo->bluetooth.address)!= 0) { NXPLOG_API_E ("%s: Failed to retreive device address", __FUNCTION__); return -1; } index += BLUETOOTH_ADDRESS_LENGTH; while(index < record_payload_len) { bt_len = p_payload[index++]; bt_type = p_payload[index++]; switch (bt_type) { case BT_HANDOVER_TYPE_SHORT_LOCAL_NAME: hsInfo->bluetooth.device_name = &p_payload[index]; hsInfo->bluetooth.device_name_length = bt_len-1; break; case BT_HANDOVER_TYPE_LONG_LOCAL_NAME: if (hsInfo->bluetooth.device_name) { break; // prefer short name } hsInfo->bluetooth.device_name = &p_payload[index]; hsInfo->bluetooth.device_name_length = bt_len-1; break; default: break; } } } else { p_record = NDEF_MsgGetFirstRecByType (ndefBuff, NDEF_TNF_MEDIA, BLE_OOB_REC_TYPE, BT_OOB_REC_TYPE_LEN); if (p_record) { status = 0; NXPLOG_API_D ("%s: Found BLE OOB record", __FUNCTION__); if (p_hs_record) { p_id = NDEF_RecGetId(p_record, &id_len); if (p_id == NULL || id_len == 0) { NXPLOG_API_E ("%s: Failed to retreive NDEF ID", __FUNCTION__); return -1; } if (getDeviceCps(p_hs_payload, p_id, id_len, &hsInfo->bluetooth.power_state)!=NFA_STATUS_OK) { hsInfo->bluetooth.power_state = HANDOVER_CPS_UNKNOWN; } } p_payload = NDEF_RecGetPayload(p_record, &record_payload_len); if (p_payload == NULL) { NXPLOG_API_E ("%s: Failed to retreive NDEF payload", __FUNCTION__); return -1; } hsInfo->bluetooth.type = HANDOVER_TYPE_BLE; hsInfo->bluetooth.ndef = p_record; hsInfo->bluetooth.ndef_length = record_payload_len; index = 0; while(index < record_payload_len) { bt_len = p_payload[index++]; bt_type = p_payload[index++]; switch (bt_type) { case BT_HANDOVER_TYPE_MAC: parseBluetoothAddress(&p_payload[index] , record_payload_len - index, hsInfo->bluetooth.address); break; case BT_HANDOVER_TYPE_SHORT_LOCAL_NAME: hsInfo->bluetooth.device_name = &p_payload[index]; hsInfo->bluetooth.device_name_length = bt_len-1; break; case BT_HANDOVER_TYPE_LONG_LOCAL_NAME: if (hsInfo->bluetooth.device_name) { break; // prefer short name } hsInfo->bluetooth.device_name = &p_payload[index]; hsInfo->bluetooth.device_name_length = bt_len-1; break; default: break; } } } } p_record = NDEF_MsgGetFirstRecByType (ndefBuff, NDEF_TNF_MEDIA, WIFI_WSC_REC_TYPE, WIFI_WSC_REC_TYPE_LEN); if (p_record) { status = 0; NXPLOG_API_D ("%s: Found WiFi record", __FUNCTION__); if (p_hs_record) { p_id = NDEF_RecGetId(p_record, &id_len); if (p_id == NULL || id_len == 0) { NXPLOG_API_E ("%s: Failed to retreive NDEF ID", __FUNCTION__); return -1; } if (getDeviceCps(p_hs_payload, p_id, id_len, &hsInfo->wifi.power_state)!=NFA_STATUS_OK) { hsInfo->wifi.power_state = HANDOVER_CPS_UNKNOWN; } } p_payload = NDEF_RecGetPayload(p_record, &record_payload_len); if (p_payload == NULL) { NXPLOG_API_E ("%s: Failed to retreive NDEF payload", __FUNCTION__); return -1; } hsInfo->wifi.ndef = p_record; hsInfo->wifi.ndef_length = record_payload_len; index = 0; while(index < record_payload_len) { /* wifi type is a 2 byte field*/ wifi_type = p_payload[index++]; wifi_type = wifi_type << 8; wifi_type += p_payload[index++]; /* wifi len is a 2 byte field */ wifi_len = p_payload[index++]; wifi_len = wifi_len << 8; wifi_len += p_payload[index++]; switch (wifi_type) { case WIFI_HANDOVER_SSID_ID: hsInfo->wifi.ssid_length = wifi_len; hsInfo->wifi.ssid = &p_payload[index]; index += hsInfo->wifi.ssid_length; break; case WIFI_HANDOVER_NETWORK_KEY_ID: hsInfo->wifi.key_length = wifi_len; hsInfo->wifi.key = &p_payload[index]; index += hsInfo->wifi.key_length; break; default: break; } } } return status; }
INT32 nativeNdef_readHr(UINT8*ndefBuff, UINT32 ndefBuffLen, nfc_handover_request_t *hrInfo) { UINT8 *p_hr_record; UINT8 *p_hr_payload; UINT32 hr_payload_len = 0; UINT8 *p_record; UINT8 *p_payload; UINT32 record_payload_len; UINT8 *p_id; UINT8 id_len; UINT8 version = 0; UINT32 index; UINT8 len; UINT8 type; (void)ndefBuffLen; if (hrInfo == NULL) { return -1; } memset(hrInfo, 0, sizeof(nfc_handover_request_t)); NXPLOG_API_D ("%s: enter", __FUNCTION__); /* get Handover Request record */ p_hr_record = NDEF_MsgGetFirstRecByType (ndefBuff, NDEF_TNF_WELLKNOWN, (UINT8*)RTD_Hr, sizeof(RTD_Hr)); if (p_hr_record) { NXPLOG_API_E ("%s: Find Hr record", __FUNCTION__); p_hr_payload = NDEF_RecGetPayload (p_hr_record, &hr_payload_len); if ((!p_hr_payload) || (hr_payload_len < 7)) { NXPLOG_API_E ("%s: Failed to get Hr payload (version, cr/ac record)", __FUNCTION__); return -1; } /* Version */ if (NFC_FORUM_HANDOVER_VERSION != p_hr_payload[0]) { NXPLOG_API_E ("%s: Version (0x%02x) not matched", __FUNCTION__, p_hr_payload[0]); return -1; } p_hr_payload += 1; hr_payload_len--; /* NDEF message for Collision Resolution record and Alternative Carrier records */ if (NDEF_OK != NDEF_MsgValidate (p_hr_payload, hr_payload_len, FALSE)) { NXPLOG_API_E ("%s: Failed to validate NDEF message for cr/ac records", __FUNCTION__); return -1; } } p_record = NDEF_MsgGetFirstRecByType (ndefBuff, NDEF_TNF_MEDIA, BT_OOB_REC_TYPE, BT_OOB_REC_TYPE_LEN); if (p_record) { NXPLOG_API_D ("%s: Found BT OOB record", __FUNCTION__); if (p_hr_record) { p_id = NDEF_RecGetId(p_record, &id_len); if (p_id == NULL || id_len == 0) { NXPLOG_API_E ("%s: Failed to retreive NDEF ID", __FUNCTION__); return -1; } if (getDeviceCps(p_hr_payload, p_id, id_len, &hrInfo->bluetooth.power_state)!=NFA_STATUS_OK) { hrInfo->bluetooth.power_state = HANDOVER_CPS_UNKNOWN; } } p_payload = NDEF_RecGetPayload(p_record, &record_payload_len); if (p_payload == NULL) { NXPLOG_API_E ("%s: Failed to retreive NDEF payload", __FUNCTION__); return -1; } hrInfo->bluetooth.type = HANDOVER_TYPE_BT; hrInfo->bluetooth.ndef = p_record; hrInfo->bluetooth.ndef_length = record_payload_len; index = 2; if (parseBluetoothAddress(&p_payload[index] , record_payload_len - index, hrInfo->bluetooth.address)!= 0) { NXPLOG_API_E ("%s: Failed to retreive device address", __FUNCTION__); return -1; } index += BLUETOOTH_ADDRESS_LENGTH; while(index < record_payload_len) { len = p_payload[index++]; type = p_payload[index++]; switch (type) { case BT_HANDOVER_TYPE_SHORT_LOCAL_NAME: hrInfo->bluetooth.device_name = p_payload; hrInfo->bluetooth.device_name_length = len; break; case BT_HANDOVER_TYPE_LONG_LOCAL_NAME: if (hrInfo->bluetooth.device_name) { break; // prefer short name } hrInfo->bluetooth.device_name = p_payload; hrInfo->bluetooth.device_name_length = len; break; default: index += (len - 1); break; } } } else { p_record = NDEF_MsgGetFirstRecByType (ndefBuff, NDEF_TNF_MEDIA, BLE_OOB_REC_TYPE, BT_OOB_REC_TYPE_LEN); if (p_record) { NXPLOG_API_D ("%s: Found BLE OOB record", __FUNCTION__); if (p_hr_record) { p_id = NDEF_RecGetId(p_record, &id_len); if (p_id == NULL || id_len == 0) { NXPLOG_API_E ("%s: Failed to retreive NDEF ID", __FUNCTION__); return -1; } if (getDeviceCps(p_hr_payload, p_id, id_len, &hrInfo->bluetooth.power_state)!=NFA_STATUS_OK) { hrInfo->bluetooth.power_state = HANDOVER_CPS_UNKNOWN; } } p_payload = NDEF_RecGetPayload(p_record, &record_payload_len); if (p_payload == NULL) { NXPLOG_API_E ("%s: Failed to retreive NDEF payload", __FUNCTION__); return -1; } hrInfo->bluetooth.type = HANDOVER_TYPE_BLE; hrInfo->bluetooth.ndef = p_record; hrInfo->bluetooth.ndef_length = record_payload_len; index = 0; while(index < record_payload_len) { len = p_payload[index++]; type = p_payload[index++]; switch (type) { case BT_HANDOVER_TYPE_MAC: parseBluetoothAddress(&p_payload[index] , record_payload_len - index, hrInfo->bluetooth.address); break; case BT_HANDOVER_TYPE_SHORT_LOCAL_NAME: hrInfo->bluetooth.device_name = p_payload; hrInfo->bluetooth.device_name_length = len; break; case BT_HANDOVER_TYPE_LONG_LOCAL_NAME: if (hrInfo->bluetooth.device_name) { break; // prefer short name } hrInfo->bluetooth.device_name = p_payload; hrInfo->bluetooth.device_name_length = len; break; default: index += (len - 1); break; } } } } p_record = NDEF_MsgGetFirstRecByType (ndefBuff, NDEF_TNF_MEDIA, WIFI_WSC_REC_TYPE, WIFI_WSC_REC_TYPE_LEN); if (p_record) { NXPLOG_API_D ("%s: Found WiFi record", __FUNCTION__); hrInfo->wifi.has_wifi = TRUE; hrInfo->wifi.ndef = p_record; hrInfo->wifi.ndef_length = record_payload_len; } return 0; }
/******************************************************************************* ** ** Function NDEF_MsgAddWktAc ** ** Description This function adds Alternative Carrier Record. ** ** Returns NDEF_OK if all OK ** *******************************************************************************/ tNDEF_STATUS NDEF_MsgAddWktAc (UINT8 *p_msg, UINT32 max_size, UINT32 *p_cur_size, UINT8 cps, char *p_carrier_data_ref_str, UINT8 aux_data_ref_count, char *p_aux_data_ref_str[]) { tNDEF_STATUS status; UINT32 payload_len; UINT8 ref_str_len, xx; UINT8 *p_rec, *p; /* get payload length first */ /* CPS, length of carrier data ref, carrier data ref, Aux data reference count */ payload_len = 3 + (UINT8)strlen (p_carrier_data_ref_str); for (xx = 0; xx < aux_data_ref_count; xx++) { /* Aux Data Reference length (1 byte) */ payload_len += 1 + (UINT8)strlen (p_aux_data_ref_str[xx]); } /* reserve memory for payload */ status = NDEF_MsgAddRec (p_msg, max_size, p_cur_size, NDEF_TNF_WKT, ac_rec_type, AC_REC_TYPE_LEN, NULL, 0, NULL, payload_len); if (status == NDEF_OK) { /* get AC record added at the end */ p_rec = NDEF_MsgGetLastRecInMsg (p_msg); /* get start pointer of reserved payload */ p = NDEF_RecGetPayload (p_rec, &payload_len); /* Get a pointer to the payload or NULL (for none) which is valid */ if (p) { /* Add Carrier Power State */ UINT8_TO_BE_STREAM (p, cps); /* Carrier Data Reference length */ ref_str_len = (UINT8)strlen (p_carrier_data_ref_str); UINT8_TO_BE_STREAM (p, ref_str_len); /* Carrier Data Reference */ ARRAY_TO_BE_STREAM (p, p_carrier_data_ref_str, ref_str_len); /* Aux Data Reference Count */ UINT8_TO_BE_STREAM (p, aux_data_ref_count); for (xx = 0; xx < aux_data_ref_count; xx++) { /* Aux Data Reference length (1 byte) */ ref_str_len = (UINT8)strlen (p_aux_data_ref_str[xx]); UINT8_TO_BE_STREAM (p, ref_str_len); /* Aux Data Reference */ ARRAY_TO_BE_STREAM (p, p_aux_data_ref_str[xx], ref_str_len); } } } return (status); }