1 /* 2 * Copyright (C) 2010 NXP Semiconductors 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 /*! 18 * =========================================================================== * 19 * * 20 * * 21 * \file phHciNfc.h * 22 * \brief HCI Header for the Generic HCI Management. * 23 * * 24 * * 25 * Project: NFC-FRI-1.1 * 26 * * 27 * $Date: Mon Apr 5 14:37:06 2010 $ * 28 * $Author: ing04880 $ * 29 * $Revision: 1.39 $ * 30 * $Aliases: NFC_FRI1.1_WK1007_R33_4,NFC_FRI1.1_WK1017_PREP1,NFC_FRI1.1_WK1017_R34_1,NFC_FRI1.1_WK1017_R34_2,NFC_FRI1.1_WK1023_R35_1 $ 31 * * 32 * =========================================================================== * 33 */ 34 35 36 /*@{*/ 37 38 #ifndef PHHCINFC_H 39 #define PHHCINFC_H 40 41 /*@}*/ 42 /** 43 * \name HCI 44 * 45 * File: \ref phHciNfc.h 46 * 47 */ 48 /*@{*/ 49 #define PH_HCINFC_FILEREVISION "$Revision: 1.39 $" /**< \ingroup grp_file_attributes */ 50 #define PH_HCINFC_FILEALIASES "$Aliases: NFC_FRI1.1_WK1007_R33_4,NFC_FRI1.1_WK1017_PREP1,NFC_FRI1.1_WK1017_R34_1,NFC_FRI1.1_WK1017_R34_2,NFC_FRI1.1_WK1023_R35_1 $" /**< \ingroup grp_file_attributes */ 51 /*@}*/ 52 53 /* 54 ################################################################################ 55 ***************************** Header File Inclusion **************************** 56 ################################################################################ 57 */ 58 59 #include <phNfcStatus.h> 60 #include <phNfcInterface.h> 61 #ifdef ANDROID 62 #include <string.h> 63 #endif 64 65 /* 66 ################################################################################ 67 ****************************** Macro Definitions ******************************* 68 ################################################################################ 69 */ 70 71 72 /* 73 ################################################################################ 74 ******************** Enumeration and Structure Definition ********************** 75 ################################################################################ 76 */ 77 78 typedef enum phHciNfc_Init 79 { 80 HCI_SESSION = 0x00, 81 HCI_SELF_TEST, 82 HCI_CUSTOM_INIT 83 }phHciNfc_Init_t; 84 85 /** \ingroup grp_hal_hci 86 * 87 * \if hal 88 * \brief HCI Tag Exchange Information 89 * \else 90 * \brief HCI-Specific 91 * \endif 92 * 93 * The <em> Tag Exchange Info Structure </em> holds the exchange information to 94 * the connected tag . 95 * 96 * \note All members of this structure are in parameters [in]. 97 * 98 */ 99 100 typedef struct phHciNfc_Tag_XchgInfo 101 { 102 /** \internal RF Reader Command Type */ 103 uint8_t cmd_type; 104 /** \internal Address Field required for only Mifare 105 * Family Proprietary Cards. 106 * The Address Size is Valid only upto 255 Blocks limit 107 * i:e for Mifare 4K 108 */ 109 uint8_t addr; 110 }phHciNfc_Tag_XchgInfo_t; 111 112 /** \ingroup grp_hal_hci 113 * 114 * \if hal 115 * \brief HCI NFC-IP Exchange Information 116 * \else 117 * \brief HCI-Specific 118 * \endif 119 * 120 * The <em> NFC-IP Exchange Info Structure </em> holds the exchange information to 121 * the connected NFC-IP target . 122 * 123 * \note All members of this structure are in parameters [in]. 124 * 125 */ 126 127 typedef struct phHciNfc_NfcIP_XchgInfo 128 { 129 /** \internal NFC-IP DEP Meta Chining Information */ 130 uint8_t more_info; 131 132 }phHciNfc_NfcIP_XchgInfo_t; 133 134 /** \ingroup grp_hal_hci 135 * 136 * \if hal 137 * \brief HCI Target Exchange Information 138 * \else 139 * \brief HCI-Specific 140 * \endif 141 * 142 * The <em> Target Exchange Info Structure </em> holds all the exchange information to 143 * the connected target . 144 * 145 * \note All members of this structure are in parameters [in]. 146 * 147 */ 148 149 150 typedef struct phHciNfc_XchgInfo 151 { 152 /** \internal Exchange Data/NFC-IP DEP 153 * Exchange Buffer */ 154 uint8_t *tx_buffer; 155 /** \internal Exchange Data/NFC-IP DEP 156 * Exchange Buffer Length*/ 157 uint16_t tx_length; 158 159 union 160 { 161 phHciNfc_Tag_XchgInfo_t tag_info; 162 phHciNfc_NfcIP_XchgInfo_t nfc_info; 163 }params; 164 165 }phHciNfc_XchgInfo_t; 166 167 168 169 /* 170 ################################################################################ 171 *********************** Function Prototype Declaration ************************* 172 ################################################################################ 173 */ 174 175 /** 176 * \ingroup grp_hci_nfc 177 * 178 * The phHciNfc_Initialise function initialises the HCI context and all other 179 * resources used in the HCI Layer for the corresponding interface link. 180 * 181 * \param[in,out] psHciHandle psHciHandle is the handle or the context 182 * of the HCI Layer. 183 * \param[in] pHwRef pHwRef is the Information of 184 * the Device Interface Link . 185 * \param[in] init_mode init_mode specifies the kind of the 186 * Initialisation for the HCI layer . 187 * \param[in] pHwConfig pHwConfig is the Information required 188 * to configure the parameters of the 189 * NFC Device . 190 * \param[in] pHalNotify Upper layer Notification function 191 * pointer. 192 * \param[in] psContext psContext is the context of 193 * the Upper Layer. 194 * \param[in] psHciLayerCfg Pointer to the HCI Layer configuration 195 * Structure. 196 * 197 * \retval NFCSTATUS_PENDING Initialisation of HCI Layer is in Progress. 198 * \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters 199 * could not be interpreted properly. 200 * \retval Other errors Errors related to the other layers 201 * 202 */ 203 204 extern 205 NFCSTATUS 206 phHciNfc_Initialise ( 207 void *psHciHandle, 208 void *pHwRef, 209 phHciNfc_Init_t init_mode, 210 phHal_sHwConfig_t *pHwConfig, 211 pphNfcIF_Notification_CB_t pHalNotify, 212 void *psContext, 213 phNfcLayer_sCfg_t *psHciLayerCfg 214 ); 215 216 /** 217 * \ingroup grp_hci_nfc 218 * 219 * The phHciNfc_Release function releases all the resources used in the HCI 220 * Layer for the corresponding interface link, described by the HCI handle. 221 * 222 * \param[in] psHciHandle psHciHandle is the handle or the context 223 * of the HCI Layer. 224 * \param[in] pHwRef pHwRef is the Information of 225 * the Device Interface Link . 226 * \param[in] pHalReleaseCB Upper layer release callback function 227 * pointer . 228 * \param[in] psContext psContext is the context of 229 * the Upper Layer. 230 * 231 * \retval NFCSTATUS_PENDING Releasing of HCI Resources are in Progress. 232 * \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters 233 * could not be interpreted properly. 234 * \retval Other errors Errors related to the other layers 235 * 236 */ 237 238 extern 239 NFCSTATUS 240 phHciNfc_Release ( 241 void *psHciHandle, 242 void *pHwRef, 243 pphNfcIF_Notification_CB_t pHalReleaseCB, 244 void *psContext 245 ); 246 247 248 extern 249 NFCSTATUS 250 phHciNfc_Config_Discovery ( 251 void *psHciHandle, 252 void *pHwRef, 253 phHal_sADD_Cfg_t *pPollConfig 254 ); 255 256 257 /** 258 * \ingroup grp_hci_nfc 259 * 260 * The phHciNfc_Restart_Discovery function restarts the Polling Wheel. 261 * 262 * \param[in] psHciHandle psHciHandle is the handle or the context 263 * of the HCI Layer. 264 * \param[in] pHwRef pHwRef is the Information of 265 * the Device Interface Link . 266 * \param[in] re_poll If True: Start re-polling of the target 267 * after the Target Device is de-activated 268 * or else - continue discovery with next 269 * technology. 270 * \retval NFCSTATUS_PENDING The Discovery Wheel retarted. 271 * \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters 272 * could not be interpreted properly. 273 * \retval Other errors Errors related to the other layers 274 * 275 */ 276 277 extern 278 NFCSTATUS 279 phHciNfc_Restart_Discovery ( 280 void *psHciHandle, 281 void *pHwRef, 282 uint8_t repoll 283 ); 284 285 286 /** 287 * \ingroup grp_hci_nfc 288 * 289 * The phHciNfc_Start_Discovery function Starts the Polling Wheel. 290 * 291 * \param[in] psHciHandle psHciHandle is the handle or the context 292 * of the HCI Layer. 293 * \param[in] pHwRef pHwRef is the Information of 294 * the Device Interface Link . 295 * \retval NFCSTATUS_PENDING The Discovery Wheel Started. 296 * \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters 297 * could not be interpreted properly. 298 * \retval Other errors Errors related to the other layers 299 * 300 */ 301 302 extern 303 NFCSTATUS 304 phHciNfc_Start_Discovery ( 305 void *psHciHandle, 306 void *pHwRef 307 ); 308 309 310 /** 311 * \ingroup grp_hci_nfc 312 * 313 * The phHciNfc_Stop_Discovery function Stops the Polling Wheel. 314 * 315 * \param[in] psHciHandle psHciHandle is the handle or the context 316 * of the HCI Layer. 317 * \param[in] pHwRef pHwRef is the Information of 318 * the Device Interface Link . 319 * \retval NFCSTATUS_PENDING The Discovery Wheel Stopped. 320 * \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters 321 * could not be interpreted properly. 322 * \retval Other errors Errors related to the other layers 323 * 324 */ 325 326 extern 327 NFCSTATUS 328 phHciNfc_Stop_Discovery ( 329 void *psHciHandle, 330 void *pHwRef 331 ); 332 333 334 /** 335 * \ingroup grp_hci_nfc 336 * 337 * The phHciNfc_Configure function Configures Configures the Polling Wheel to 338 * select the kind of Tags to be polled. This also allows to enable/disable 339 * the Tag Emulation. This also configures the Secure elements the UICC, WI and 340 * Target to Emulate the Tag or Target. 341 * 342 * 343 * \param[in] psHciHandle psHciHandle is the handle or the context 344 * of the HCI Layer. 345 * \param[in] pHwRef pHwRef is the Information of 346 * the Device Interface Link . 347 * \param[in] config_type config_type specifies the type of the 348 * Parameter configuration. 349 * \param[in] pConfig pConfig is the Information for 350 * Configuring the Device. 351 * \retval NFCSTATUS_PENDING The Emulation configuration pending. 352 * \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters 353 * could not be interpreted properly. 354 * \retval Other errors Errors related to the other layers 355 * 356 */ 357 358 extern 359 NFCSTATUS 360 phHciNfc_Configure ( 361 void *psHciHandle, 362 void *pHwRef, 363 phHal_eConfigType_t config_type, 364 phHal_uConfig_t *pConfig 365 ); 366 367 /** 368 * \ingroup grp_hci_nfc 369 * 370 * The phHciNfc_Switch_SmxMode function Switches the WI(S2C) interface 371 * from Wired/Virtual to vice versa. 372 * 373 * 374 * \param[in] psHciHandle psHciHandle is the handle or the context 375 * of the HCI Layer. 376 * \param[in] pHwRef pHwRef is the Information of 377 * the Device Interface Link . 378 * \param[in] smx_mode smx_mode specifies the type of the switch 379 * configuration. 380 * \param[in] pPollConfig pPollConfig is the Information for 381 * polling the SmartMX Device. 382 * \retval NFCSTATUS_PENDING The SmartMX Mode Switch pending. 383 * \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters 384 * could not be interpreted properly. 385 * \retval Other errors Errors related to the other layers 386 * 387 */ 388 389 NFCSTATUS 390 phHciNfc_Switch_SmxMode ( 391 void *psHciHandle, 392 void *pHwRef, 393 phHal_eSmartMX_Mode_t smx_mode, 394 phHal_sADD_Cfg_t *pPollConfig 395 ); 396 397 398 /** 399 * \ingroup grp_hci_nfc 400 * 401 * The phHciNfc_Switch_SwpMode function Switches the SWP Link 402 * from On/Off to vice versa. 403 * 404 * 405 * \param[in] psHciHandle psHciHandle is the handle or the context 406 * of the HCI Layer. 407 * \param[in] pHwRef pHwRef is the Information of 408 * the Device Interface Link . 409 * \param[in] swp_mode swp_mode specifies to switch on/off the 410 * SWP Link. 411 * \retval NFCSTATUS_PENDING The SWP Mode Switch pending. 412 * \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters 413 * could not be interpreted properly. 414 * \retval Other errors Errors related to the other layers 415 * 416 */ 417 418 NFCSTATUS 419 phHciNfc_Switch_SwpMode ( 420 void *psHciHandle, 421 void *pHwRef, 422 phHal_eSWP_Mode_t swp_mode /* , 423 void *pSwpCfg */ 424 ); 425 426 427 428 /** 429 * \ingroup grp_hci_nfc 430 * 431 * The phHciNfc_Connect function selects the discovered target to 432 * perform the transactions on it. 433 * 434 * 435 * \param[in] psHciHandle psHciHandle is the handle or the context 436 * of the HCI Layer. 437 * \param[in] pHwRef pHwRef is the Information of 438 * the Device Interface Link . 439 * \param[in] p_remote_dev_info p_remote_dev_info is the information 440 * of the Target Device to be connected . 441 * \retval NFCSTATUS_PENDING To select the remote target pending. 442 * \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters 443 * could not be interpreted properly. 444 * \retval Other errors Errors related to the other layers 445 * 446 */ 447 448 extern 449 NFCSTATUS 450 phHciNfc_Connect ( 451 void *psHciHandle, 452 void *pHwRef, 453 phHal_sRemoteDevInformation_t *p_remote_dev_info 454 ); 455 456 457 /** 458 * \ingroup grp_hci_nfc 459 * 460 * The phHciNfc_Reactiavte function reactivates the discovered target to 461 * and selects that target perform the transactions on it. 462 * 463 * 464 * \param[in] psHciHandle psHciHandle is the handle or the context 465 * of the HCI Layer. 466 * \param[in] pHwRef pHwRef is the Information of 467 * the Device Interface Link . 468 * \param[in] p_remote_dev_info p_remote_dev_info is the information 469 * of the Target Device to be reactivated . 470 * \retval NFCSTATUS_PENDING To reactivate the remote target pending. 471 * \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters 472 * could not be interpreted properly. 473 * \retval Other errors Errors related to the other layers 474 * 475 */ 476 477 478 extern 479 NFCSTATUS 480 phHciNfc_Reactivate ( 481 void *psHciHandle, 482 void *pHwRef, 483 phHal_sRemoteDevInformation_t *p_target_info 484 ); 485 486 487 /** 488 * \ingroup grp_hci_nfc 489 * 490 * The phHciNfc_Disconnect function de-selects the selected target and 491 * any ongoing transactions . 492 * 493 * 494 * \param[in] psHciHandle psHciHandle is the handle or the context 495 * of the HCI Layer. 496 * \param[in] pHwRef pHwRef is the Information of 497 * the Device Interface Link . 498 * \param[in] re_poll If True: Start re-polling of the target 499 * after the Target Device is de-activated 500 * or else - continue discovery with next 501 * technology. 502 * 503 * \retval NFCSTATUS_PENDING To De-select the remote target pending. 504 * \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters 505 * could not be interpreted properly. 506 * \retval Other errors Errors related to the other layers 507 * 508 */ 509 510 extern 511 NFCSTATUS 512 phHciNfc_Disconnect ( 513 void *psHciHandle, 514 void *pHwRef, 515 uint8_t re_poll 516 ); 517 518 519 /** 520 * \ingroup grp_hci_nfc 521 * 522 * The phHciNfc_Presence_Check function checks for the presence of the target 523 * selected in the vicinity of the Reader's RF Field . 524 * 525 * 526 * \param[in] psHciHandle psHciHandle is the handle or the context 527 * of the HCI Layer. 528 * \param[in] pHwRef pHwRef is the Information of 529 * the Device Interface Link . 530 * \retval NFCSTATUS_PENDING Presence Check of the remote target 531 * pending. 532 * \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters 533 * could not be interpreted properly. 534 * \retval Other errors Errors related to the other layers 535 * 536 */ 537 538 extern 539 NFCSTATUS 540 phHciNfc_Presence_Check ( 541 void *psHciHandle, 542 void *pHwRef 543 ); 544 545 546 /** 547 * \ingroup grp_hci_nfc 548 * 549 * The phHciNfc_Select_Next_Target function selects and activates the 550 * next target present in the the Reader's RF Field . 551 * 552 * 553 * \param[in] psHciHandle psHciHandle is the handle or the 554 * context of the HCI Layer. 555 * \param[in] pHwRef pHwRef is the Information of 556 * the Device Interface Link . 557 * \retval NFCSTATUS_PENDING selection and activation of the next 558 * remote target pending. 559 * \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters 560 * could not be interpreted properly. 561 * \retval Other errors Errors related to the other layers 562 * 563 */ 564 565 extern 566 NFCSTATUS 567 phHciNfc_Select_Next_Target ( 568 void *psHciHandle, 569 void *pHwRef 570 ); 571 572 573 /** 574 * \ingroup grp_hci_nfc 575 * 576 * The phHciNfc_Exchange_Data function exchanges the data 577 * to/from the selected remote target device. 578 * 579 * 580 * \param[in] psHciHandle psHciHandle is the handle or the context 581 * of the HCI Layer. 582 * \param[in] pHwRef pHwRef is the Information of 583 * the Device Interface Link . 584 * \param[in] p_remote_dev_info p_remote_dev_info is the information of the 585 * selected target to which data 586 * should be sent. 587 * \param[in] p_xchg_info The exchange info contains the command type, 588 * addr and data to be sent to the connected 589 * remote target device. 590 * \retval NFCSTATUS_PENDING Data to remote target pending. 591 * \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters 592 * could not be interpreted properly. 593 * \retval Other errors Errors related to the other layers 594 * 595 */ 596 597 extern 598 NFCSTATUS 599 phHciNfc_Exchange_Data ( 600 void *psHciHandle, 601 void *pHwRef, 602 phHal_sRemoteDevInformation_t *p_remote_dev_info, 603 phHciNfc_XchgInfo_t *p_xchg_info 604 ); 605 606 /** 607 * \ingroup grp_hci_nfc 608 * 609 * The phHciNfc_Send_Data function Sends the data provided 610 * to the appropriate remote target device. 611 * 612 * 613 * \param[in] psHciHandle psHciHandle is the handle or the context 614 * of the HCI Layer. 615 * \param[in] pHwRef pHwRef is the Information of 616 * the Device Interface Link . 617 * \param[in] p_remote_dev_info p_remote_dev_info is the information 618 * of the selected target to which data 619 * should be sent. 620 * \param[in] p_send_param The send param contains the 621 * data to be sent to the 622 * remote device. 623 * \retval NFCSTATUS_PENDING Data to remote device pending. 624 * \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters 625 * could not be interpreted properly. 626 * \retval Other errors Errors related to the other layers 627 * 628 */ 629 630 extern 631 NFCSTATUS 632 phHciNfc_Send_Data ( 633 void *psHciHandle, 634 void *pHwRef, 635 phHal_sRemoteDevInformation_t *p_remote_dev_info, 636 phHciNfc_XchgInfo_t *p_send_param 637 ); 638 639 /** 640 * \ingroup grp_hci_nfc 641 * 642 * The phHciNfc_System_Test function performs the System Management Tests 643 * provided by the NFC Peripheral device. 644 * 645 * \param[in] psContext psContext is the pointer to HCI Layer 646 * context Structure. 647 * \param[in] pHwRef pHwRef is the Information of 648 * the Device Interface Link . 649 * \param[in] test_type test_type is the type of the Self Test 650 * that needs to be performed on the device. 651 * \param[in] test_param test_param is the parameter for the Self Test 652 * that needs to be performed on the device. 653 * 654 * 655 * \retval NFCSTATUS_PENDING System Test on the System Management 656 * is pending. 657 * \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters 658 * could not be interpreted properly. 659 * \retval Other errors Errors related to the other layers 660 * 661 */ 662 663 extern 664 NFCSTATUS 665 phHciNfc_System_Test( 666 void *psContext, 667 void *pHwRef, 668 uint32_t test_type, 669 phNfc_sData_t *test_param 670 ); 671 672 /** 673 * \ingroup grp_hci_nfc 674 * 675 * The phHciNfc_System_Configure function performs the System Management 676 * Configuration with the value provided. 677 * 678 * \param[in] psContext psContext is the pointer to HCI Layer 679 * context Structure. 680 * \param[in] pHwRef pHwRef is the Information of 681 * the Device Interface Link . 682 * \param[in] config_type config_type is the type of the configuration 683 * that needs to be performed on the device. 684 * \param[in] config_value config_value is the value for the configuring 685 * that needs to be performed on the device. 686 * 687 * 688 * \retval NFCSTATUS_PENDING Configuration of the provided information to 689 * the is pending. 690 * \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters 691 * could not be interpreted properly. 692 * \retval Other errors Errors related to the other layers 693 * 694 */ 695 extern 696 NFCSTATUS 697 phHciNfc_System_Configure ( 698 void *psHciHandle, 699 void *pHwRef, 700 uint32_t config_type, 701 uint8_t config_value 702 ); 703 704 /** 705 * \ingroup grp_hci_nfc 706 * 707 * The phHciNfc_System_Get_Info function obtains the System Management 708 * information from the address provided. 709 * 710 * \param[in] psContext psContext is the pointer to HCI Layer 711 * context Structure. 712 * \param[in] pHwRef pHwRef is the Information of 713 * the Device Interface Link . 714 * \param[in] info_type info_type is the type of the Information 715 * that needs to be obtained from the device. 716 * \param[in,out] p_val p_val is the pointer to which the 717 * information need to be updated. 718 * 719 * 720 * \retval NFCSTATUS_PENDING Get information from the NFC Device 721 * is pending. 722 * \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters 723 * could not be interpreted properly. 724 * \retval Other errors Errors related to the other layers 725 * 726 */ 727 extern 728 NFCSTATUS 729 phHciNfc_System_Get_Info( 730 void *psHciHandle, 731 void *pHwRef, 732 uint32_t info_type, 733 uint8_t *p_val 734 ); 735 736 extern 737 NFCSTATUS 738 phHciNfc_PRBS_Test ( 739 void *psHciHandle, 740 void *pHwRef, 741 uint32_t test_type, 742 phNfc_sData_t *test_param 743 ); 744 745 #if 0 746 extern 747 NFCSTATUS 748 phHciNfc_Receive_Data ( 749 void *psHciHandle, 750 void *pHwRef, 751 uint8_t *p_data, 752 uint8_t length 753 ); 754 755 #endif 756 757 758 #endif 759 760