/******************************************************************************* ** ** 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); }
BOOLEAN btsnd_hcic_rem_oob_reply (BD_ADDR bd_addr, UINT8 *p_c, UINT8 *p_r) { BT_HDR *p; UINT8 *pp; if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_REM_OOB_REPLY)) == NULL) return (FALSE); pp = (UINT8 *)(p + 1); p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_REM_OOB_REPLY; p->offset = 0; UINT16_TO_STREAM (pp, HCI_REM_OOB_DATA_REQ_REPLY); UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_REM_OOB_REPLY); BDADDR_TO_STREAM (pp, bd_addr); ARRAY16_TO_STREAM (pp, p_c); ARRAY16_TO_STREAM (pp, p_r); btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); return (TRUE); }
BOOLEAN btsnd_hcic_link_key_req_reply (BD_ADDR bd_addr, LINK_KEY link_key) { BT_HDR *p; UINT8 *pp; if ((p = HCI_GET_CMD_BUF(HCIC_PARAM_SIZE_LINK_KEY_REQ_REPLY)) == NULL) return (FALSE); pp = (UINT8 *)(p + 1); p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_LINK_KEY_REQ_REPLY; p->offset = 0; UINT16_TO_STREAM (pp, HCI_LINK_KEY_REQUEST_REPLY); UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_LINK_KEY_REQ_REPLY); BDADDR_TO_STREAM (pp, bd_addr); ARRAY16_TO_STREAM (pp, link_key); btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); return (TRUE); }