1 /* 2 * Copyright 2021 NXP 3 * All rights reserved. 4 * 5 * 6 * SPDX-License-Identifier: BSD-3-Clause 7 */ 8 9 #ifndef __FSL_ADAPTER_RFIMU_H__ 10 #define __FSL_ADAPTER_RFIMU_H__ 11 12 #include "fsl_adapter_rfcommon.h" 13 #include "fsl_adapter_rpmsg.h" 14 15 /*! 16 * @addtogroup IMU_Adapter 17 * @{ 18 */ 19 20 /******************************************************************************* 21 * Definitions 22 ******************************************************************************/ 23 24 #ifndef IMU_TASK_PRIORITY 25 #if defined(__ZEPHYR__) 26 #define IMU_TASK_PRIORITY (3U) 27 #elif defined(CPU2) 28 #define IMU_TASK_PRIORITY (2U) 29 #else 30 #define IMU_TASK_PRIORITY \ 31 (6U) /* makesure the calculated priority of HAL_ImuMainCpu13 task is the same with tcp/ip task(priority 2), \ 32 otherwise the throughput of udp rx will be very low */ 33 #endif 34 #endif 35 36 #ifndef IMU_TASK_STACK_SIZE 37 #define IMU_TASK_STACK_SIZE (2048U) 38 #endif 39 40 #define IMU_MAX_MSG_CNT_LONG (16U) 41 #define IMU_MAX_MSG_CNT_SHORT (2U) 42 #define IMU_SYNC_MAGIC_PATTERN (0xABCDEF89U) 43 #define IMU_TXQ_BUFSIZE (32U) /*! must be power of 2 */ 44 #define IMU_TXQ_BUFSIZE_THRESHOLD (8U) 45 #define IMU_TXQ_ENTRY_MASK (IMU_TXQ_BUFSIZE - 1U) 46 #define IMU_EVENT_TRIGGERS ((1U << kIMU_LinkMax) - 1U) 47 /*! @brief IMU message payload size. */ 48 #define IMU_PAYLOAD_SIZE (8U) 49 50 #define RPMSG_EVENT_ENDPOINT_QUERY_RSP (1U << 0U) 51 52 #ifndef RPMSG_TXQ13_BUFSIZE 53 #define RPMSG_TXQ13_BUFSIZE (8U) 54 #endif 55 56 #ifndef RPMSG_TXQ23_BUFSIZE 57 #define RPMSG_TXQ23_BUFSIZE (16U) 58 #endif 59 60 #ifndef RPMSG_TXQ13_BUFLENGTH 61 #define RPMSG_TXQ13_BUFLENGTH (512U) 62 #endif 63 64 #ifndef RPMSG_TXQ23_BUFLENGTH 65 #define RPMSG_TXQ23_BUFLENGTH (264U) 66 #endif 67 68 #define RPMSG_TXQ13_ENTRY_MASK (RPMSG_TXQ13_BUFSIZE - 1U) 69 #define RPMSG_TXQ23_ENTRY_MASK (RPMSG_TXQ23_BUFSIZE - 1U) 70 71 #ifdef CONFIG_IMU_GDMA 72 #define IMU_GDMA_ENABLE (1U) 73 #else 74 #define IMU_GDMA_ENABLE (0U) 75 #endif 76 /*! @brief IMU initialization state. */ 77 enum imu_init_state_t 78 { 79 IMU_UNINITIALIZED, 80 IMU_INITIALIZING, 81 IMU_INITIALIZED 82 }; 83 84 /*! @brief RPMSG type. */ 85 typedef enum _imu_msg_type_t 86 { 87 IMU_MSG_CONTROL, 88 IMU_MSG_COMMAND, 89 IMU_MSG_COMMAND_RESPONSE, 90 IMU_MSG_EVENT, 91 IMU_MSG_TX_DATA, 92 IMU_MSG_RX_DATA, 93 IMU_MSG_MULTI_TX_DATA, 94 IMU_MSG_MULTI_RX_DATA, 95 IMU_MSG_RPMSG, 96 IMU_MSG_MAX, 97 /* The header is 8 bits hence max types =255 */ 98 } imu_msg_type_t; 99 100 /*! @brief RPMSG control message subtype. */ 101 typedef enum _imu_ctrl_msg_subtype_t 102 { 103 IMU_MSG_CONTROL_DEFAULT, 104 IMU_MSG_CONTROL_SYNC, 105 IMU_MSG_CONTROL_SYNC_ACK, 106 IMU_MSG_CONTROL_ACK_FOR_UNLOCK, 107 IMU_MSG_CONTROL_ERROR, 108 IMU_MSG_CONTROL_SHUTDOWN, 109 IMU_MSG_CONTROL_CMD_BUF_ADDR, 110 IMU_MSG_CONTROL_EVT_ACK, 111 IMU_MSG_CONTROL_COMMAND_RSP_ACK, 112 IMU_MSG_CONTROL_TX_BUF_ADDR, 113 IMU_MSG_CONTROL_FREE_RX_BUF, 114 IMU_MSG_CONTROL_RPMSG_EPT_QUIRY, 115 IMU_MSG_CONTROL_RPMSG_EPT_QUIRY_RSP, 116 IMU_MSG_CONTROL_RPMSG_BUF_FREE, 117 IMU_MSG_CONTROL_EVT_DUMP, 118 IMU_MSG_CONTROL_MAX, 119 /* The header is 8 bits hence max types =255 */ 120 } imu_ctrl_msg_subtype_t; 121 122 /*! @brief IMU message header structure. */ 123 typedef struct IMU_Hdr_t_ 124 { 125 volatile uint8_t type; 126 volatile uint8_t sub_type; // user of icc module needs to define own msg sub_types 127 volatile uint8_t seq_num; // may be used by user of icc module for own purpose 128 volatile uint8_t length; // length of Payload in bytes 129 } IMU_Hdr_t; 130 131 /*! @brief IMU message structure. */ 132 typedef struct IMU_Msg_t_ 133 { 134 IMU_Hdr_t Hdr; 135 volatile uint32_t PayloadPtr[IMU_PAYLOAD_SIZE]; 136 } IMU_Msg_t; 137 138 /*! @brief IMU message wrapper 1. */ 139 typedef struct IMU_Msg_Wrapper_long_t_ 140 { 141 volatile uint32_t magic[2]; 142 IMU_Msg_t msgQ[2][IMU_MAX_MSG_CNT_LONG]; 143 } IMU_Msg_Wrapper_long_t; 144 145 /*! @brief IMU message wrapper 2. */ 146 typedef struct IMU_Msg_Wrapper_short_t_ 147 { 148 volatile uint32_t magic[2]; 149 IMU_Msg_t msgQ[2][IMU_MAX_MSG_CNT_SHORT]; 150 } IMU_Msg_Wrapper_short_t; 151 152 /* rpmsg_std_hdr contains a reserved field, 153 * this implementation of RPMSG uses this reserved 154 * field to hold the idx and totlen of the buffer 155 * not being returned to the vring in the receive 156 * callback function. This way, the no-copy API 157 * can use this field to return the buffer later. 158 */ 159 struct rpmsg_hdr_reserved 160 { 161 uint16_t rfu; /* reserved for future usage */ 162 uint16_t idx; 163 }; 164 165 /*! 166 * Common header for all rpmsg messages. 167 * Every message sent/received on the rpmsg bus begins with this header. 168 */ 169 struct rpmsg_std_hdr 170 { 171 uint32_t src; /*!< source endpoint address */ 172 uint32_t dst; /*!< destination endpoint address */ 173 struct rpmsg_hdr_reserved reserved; /*!< reserved for future use */ 174 uint16_t len; /*!< length of payload (in bytes) */ 175 uint16_t flags; /*!< message flags */ 176 }; 177 178 /*! 179 * Common message structure. 180 * Contains the header and the payload. 181 */ 182 struct rpmsg_std_msg 183 { 184 struct rpmsg_std_hdr hdr; /*!< RPMsg message header */ 185 uint32_t data; /*!< bytes of message payload data */ 186 }; 187 188 typedef hal_rpmsg_status_t (*imu_callback_t)(IMU_Msg_t *pImuMsg, uint32_t length); 189 190 /*! @brief IMU interrupt callback */ 191 typedef void (*imu_irq_callback_t)(void); 192 193 /*! @brief Checks whether a tx buffer queue is empty */ 194 #define IS_WLAN_TXBQ_EMPTY(q) ((q)->writeIndex == (q)->readIndex) 195 196 /*! @brief Checks whether a tx buffer queue is full */ 197 #define IS_WLAN_TXBQ_FULL(q) \ 198 ((((q)->writeIndex & (1UL << 31U)) != ((q)->readIndex & (1UL << 31U))) && \ 199 (((q)->writeIndex & IMU_TXQ_ENTRY_MASK) == ((q)->readIndex & IMU_TXQ_ENTRY_MASK))) 200 201 /*! @brief Increments write pointer*/ 202 #define INCR_WLAN_TXBQ_WR_INDEX(q, n) \ 203 { \ 204 unsigned int wrapBit = (q)->writeIndex & (1UL << 31U); \ 205 unsigned int val = (q)->writeIndex & IMU_TXQ_ENTRY_MASK; \ 206 unsigned int newVal = (val + (n)) & IMU_TXQ_ENTRY_MASK; \ 207 if ((n) > 0U) \ 208 { \ 209 if (newVal <= val) \ 210 { \ 211 (q)->writeIndex = newVal | (wrapBit ^ (1UL << 31U)); \ 212 } \ 213 else \ 214 { \ 215 (q)->writeIndex = newVal | wrapBit; \ 216 } \ 217 } \ 218 } 219 220 /*! @brief Increments read pointer */ 221 #define INCR_WLAN_TXBQ_RD_INDEX(q, n) \ 222 { \ 223 unsigned int wrapBit = (q)->readIndex & (1UL << 31U); \ 224 unsigned int val = (q)->readIndex & IMU_TXQ_ENTRY_MASK; \ 225 unsigned int newVal = (val + (n)) & IMU_TXQ_ENTRY_MASK; \ 226 if ((n) > 0U) \ 227 { \ 228 if (newVal <= val) \ 229 { \ 230 (q)->readIndex = newVal | (wrapBit ^ (1UL << 31U)); \ 231 } \ 232 else \ 233 { \ 234 (q)->readIndex = newVal | wrapBit; \ 235 } \ 236 } \ 237 } 238 239 /*! @brief Checks whether a tx buffer queue is empty */ 240 #define IS_RPMSG_TXBQ13_EMPTY(q) ((q)->writeIndex == (q)->readIndex) 241 #define IS_RPMSG_TXBQ23_EMPTY(q) ((q)->writeIndex == (q)->readIndex) 242 243 /*! @brief Checks whether a tx buffer queue is full */ 244 #define IS_RPMSG_TXBQ13_FULL(q) \ 245 ((((q)->writeIndex & (1UL << 31U)) != ((q)->readIndex & (1UL << 31U))) && \ 246 (((q)->writeIndex & RPMSG_TXQ13_ENTRY_MASK) == ((q)->readIndex & RPMSG_TXQ13_ENTRY_MASK))) 247 #define IS_RPMSG_TXBQ23_FULL(q) \ 248 ((((q)->writeIndex & (1UL << 31U)) != ((q)->readIndex & (1UL << 31U))) && \ 249 (((q)->writeIndex & RPMSG_TXQ23_ENTRY_MASK) == ((q)->readIndex & RPMSG_TXQ23_ENTRY_MASK))) 250 251 /*! @brief Increments write pointer*/ 252 #define INCR_RPMSG_TXBQ13_WR_INDEX(q, n) \ 253 { \ 254 unsigned int wrapBit = (q)->writeIndex & (1UL << 31U); \ 255 unsigned int val = (q)->writeIndex & RPMSG_TXQ13_ENTRY_MASK; \ 256 unsigned int newVal = (val + (n)) & RPMSG_TXQ13_ENTRY_MASK; \ 257 if ((n) > 0U) \ 258 { \ 259 if (newVal <= val) \ 260 { \ 261 (q)->writeIndex = newVal | (wrapBit ^ (1UL << 31U)); \ 262 } \ 263 else \ 264 { \ 265 (q)->writeIndex = newVal | wrapBit; \ 266 } \ 267 } \ 268 } 269 270 #define INCR_RPMSG_TXBQ23_WR_INDEX(q, n) \ 271 { \ 272 unsigned int wrapBit = (q)->writeIndex & (1UL << 31U); \ 273 unsigned int val = (q)->writeIndex & RPMSG_TXQ23_ENTRY_MASK; \ 274 unsigned int newVal = (val + (n)) & RPMSG_TXQ23_ENTRY_MASK; \ 275 if ((n) > 0U) \ 276 { \ 277 if (newVal <= val) \ 278 { \ 279 (q)->writeIndex = newVal | (wrapBit ^ (1UL << 31U)); \ 280 } \ 281 else \ 282 { \ 283 (q)->writeIndex = newVal | wrapBit; \ 284 } \ 285 } \ 286 } 287 288 /*! @brief Increments read pointer */ 289 #define INCR_RPMSG_TXBQ13_RD_INDEX(q, n) \ 290 { \ 291 unsigned int wrapBit = (q)->readIndex & (1UL << 31U); \ 292 unsigned int val = (q)->readIndex & RPMSG_TXQ13_ENTRY_MASK; \ 293 unsigned int newVal = (val + (n)) & RPMSG_TXQ13_ENTRY_MASK; \ 294 if ((n) > 0U) \ 295 { \ 296 if (newVal <= val) \ 297 { \ 298 (q)->readIndex = newVal | (wrapBit ^ (1UL << 31U)); \ 299 } \ 300 else \ 301 { \ 302 (q)->readIndex = newVal | wrapBit; \ 303 } \ 304 } \ 305 } 306 307 #define INCR_RPMSG_TXBQ23_RD_INDEX(q, n) \ 308 { \ 309 unsigned int wrapBit = (q)->readIndex & (1UL << 31U); \ 310 unsigned int val = (q)->readIndex & RPMSG_TXQ23_ENTRY_MASK; \ 311 unsigned int newVal = (val + (n)) & RPMSG_TXQ23_ENTRY_MASK; \ 312 if ((n) > 0U) \ 313 { \ 314 if (newVal <= val) \ 315 { \ 316 (q)->readIndex = newVal | (wrapBit ^ (1UL << 31U)); \ 317 } \ 318 else \ 319 { \ 320 (q)->readIndex = newVal | wrapBit; \ 321 } \ 322 } \ 323 } 324 325 typedef struct _hal_rpmsg_rx_state 326 { 327 rpmsg_rx_callback_t callback; 328 void *param; 329 } hal_rpmsg_rx_state_t; 330 331 /*! @brief rpmsg state structure. */ 332 typedef struct _hal_rpmsg_state 333 { 334 LIST_ELEM_st eptLink; 335 uint32_t local_addr; 336 uint32_t remote_addr; 337 uint8_t imuLink; 338 bool eptLinkIsReady; 339 hal_rpmsg_rx_state_t rx; 340 } hal_rpmsg_state_t; 341 342 /*! @brief rpmsg ept buf structure. */ 343 typedef struct _hal_rpmsg_ept_uf 344 { 345 LIST_ELEM_st eptLink; 346 uint32_t addr; 347 } hal_rpmsg_ept_buf_t; 348 349 /*! @brief IMU WLAN Tx buffer control structure */ 350 typedef struct IMU_WLAN_TXQ_CTRL_st 351 { 352 uint32_t writeIndex; 353 uint32_t readIndex; 354 uint32_t txBufQue[IMU_TXQ_BUFSIZE]; 355 } IMU_WLAN_TXQ_CTRL_st; 356 357 /*! @brief RPMSG Tx buffer control structure */ 358 typedef struct RPMSG_TXQ_CTRL_st 359 { 360 uint32_t writeIndex; 361 uint32_t readIndex; 362 uint32_t txBufQue[RPMSG_TXQ23_BUFSIZE]; 363 } RPMSG_TXQ_CTRL_st; 364 365 /*! @brief imu handle structure. */ 366 typedef struct _hal_imu_handle_t 367 { 368 /*! Word 0 */ 369 uint8_t imuLink; 370 uint8_t imuSyncState; /*! 0:Link Off, 1:Link Ongoing, 2: Link Up */ 371 uint8_t freeTxMportBufCnt; 372 uint8_t imuMsgBufIdx; 373 /*! Word 1 */ 374 bool cmd_buffer_available; 375 bool cmd_response_buffer_available; 376 bool rsvdbool1; 377 bool rsvdbool2; 378 /*! Word 2 */ 379 uint32_t *cmd_buffer; 380 /*! Word 3 */ 381 IMU_WLAN_TXQ_CTRL_st wlanTxqCtl; 382 /*! Word 37 */ 383 uint32_t imuMsgBuf[IMU_PAYLOAD_SIZE]; 384 /*! Word 45 */ 385 LIST_ELEM_st eptList; 386 /*! Word 47 */ 387 RPMSG_TXQ_CTRL_st rpmsgTxqCtl; 388 /*! Word 57 */ 389 imu_callback_t imuHandler[IMU_MSG_MAX]; 390 } hal_imu_handle_t; 391 392 /******************************************************************************* 393 * API 394 ******************************************************************************/ 395 396 #if defined(__cplusplus) 397 extern "C" { 398 #endif /* _cplusplus */ 399 400 /*! 401 * @brief Add wlan Tx packet for sending multiple Tx packets within one message. 402 * 403 * This function is used to add a wlan Tx packet for IMU_MSG_MULTI_TX_DATA. 404 * 405 * @param imuLink IMU link ID. 406 * @param txBuf Tx buffer to be sent. 407 * @param length Length of Tx data. 408 * @retval kStatus_HAL_RpmsgSuccess or kStatus_HAL_RpmsgError. 409 */ 410 hal_rpmsg_status_t HAL_ImuAddWlanTxPacket(uint8_t imuLink, uint8_t *txBuf, uint32_t length); 411 412 /*! 413 * @brief Add wlan Tx packet for sending multiple Tx packets within one message. 414 * 415 * This function is used to add a wlan Tx packet with callback function for IMU_MSG_MULTI_TX_DATA. 416 * 417 * @param imuLink IMU link ID. 418 * @param txBuf Tx buffer to be sent. 419 * @param length Length of Tx data. 420 * @param cb Callback function to add packet. 421 * @retval kStatus_HAL_RpmsgSuccess or kStatus_HAL_RpmsgError. 422 */ 423 hal_rpmsg_status_t HAL_ImuAddWlanTxPacketExt(uint8_t imuLink, 424 uint8_t *txBuf, 425 uint32_t length, 426 void (*cb)(void *destAddr, void *srcAddr, uint32_t len)); 427 428 /*! 429 * @brief Install wlan callback. 430 * 431 * This function is used to imstall wlan callback 432 * 433 * @param imuLink IMU link ID. 434 * @param callback Callback to be installed. 435 * @param type Callback type. 436 * @retval kStatus_HAL_RpmsgSuccess or kStatus_HAL_RpmsgError. 437 */ 438 hal_rpmsg_status_t HAL_ImuInstallCallback(uint8_t imuLink, imu_callback_t callback, uint8_t type); 439 440 /*! 441 * @brief Install imu interrupt callback. 442 * 443 * This function is used to install imu interrupt callback 444 * 445 * @param imuLink IMU link ID. 446 * @param callback Callback to be installed. 447 * @retval kStatus_HAL_RpmsgSuccess or kStatus_HAL_RpmsgError. 448 */ 449 hal_rpmsg_status_t HAL_ImuInstallIrqCallback(uint8_t imuLink, imu_irq_callback_t callback); 450 451 /*! 452 * @brief Send wlan command packet. 453 * 454 * This function is used to send wlan command packet 455 * 456 * @param imuLink IMU link ID. 457 * @param cmdBuf Command buffer to be sent. 458 * @param length Length of command data. 459 * @retval kStatus_HAL_RpmsgSuccess or kStatus_HAL_RpmsgError. 460 */ 461 hal_rpmsg_status_t HAL_ImuSendCommand(uint8_t imuLink, uint8_t *cmdBuf, uint32_t length); 462 463 /*! 464 * @brief Add wlan Tx packet for sending one Tx packet within one message. 465 * 466 * This function is used to send a wlan Tx packet. 467 * 468 * @param imuLink IMU link ID. 469 * @param txBuf Tx buffer to be sent. 470 * @param length Length of Tx data. 471 * @retval kStatus_HAL_RpmsgSuccess or kStatus_HAL_RpmsgError. 472 */ 473 hal_rpmsg_status_t HAL_ImuSendTxData(uint8_t imuLink, uint8_t *txBuf, uint32_t length); 474 475 /*! 476 * @brief Send multiple Tx packets within one message. 477 * 478 * This function is used to send multiple wlan Tx packets within one IMU message, 479 * which have been added by HAL_ImuAddWlanTxPacket already. 480 * 481 * @param imuLink IMU link ID. 482 * @retval kStatus_HAL_RpmsgSuccess or kStatus_HAL_RpmsgError. 483 */ 484 hal_rpmsg_status_t HAL_ImuSendMultiTxData(uint8_t imuLink); 485 486 /*! 487 * @brief Check if IMU link is up. 488 * 489 * This function is used to check if IMU link is up. 490 * 491 * @param imuLink IMU link ID. 492 * @retval kStatus_HAL_RpmsgSuccess for IMU link up or kStatus_HAL_RpmsgError for IMU link not up. 493 */ 494 hal_rpmsg_status_t HAL_ImuLinkIsUp(uint8_t imuLink); 495 496 /*! 497 * @brief Start IMU link 498 * 499 * This function is used to start specified IMU link. 500 * 501 * @param imuLink IMU link ID. 502 * @retval kStatus_HAL_RpmsgSuccess or kStatus_HAL_RpmsgError. 503 */ 504 hal_rpmsg_status_t HAL_ImuInit(imu_link_t link); 505 506 /*! 507 * @brief Stop IMU link 508 * 509 * This function is used to stop specified IMU link. 510 * 511 * @param imuLink IMU link ID. 512 * @param flag flag with bits to control. 513 * flag bit0: control if need send imu msg to fw (imu tx return /imu shutdown) 514 * flag bit1: control if need destroy ImuTask and ImuQFlagsRef 515 * @retval kStatus_HAL_RpmsgSuccess or kStatus_HAL_RpmsgError. 516 */ 517 hal_rpmsg_status_t HAL_ImuDeinit(imu_link_t link, uint32_t flag); 518 519 /*! 520 * @brief Return all tx buffer. 521 * 522 * This function is used to return all tx buffer to CPU1. 523 * 524 * @param imuLink IMU link ID. 525 * @retval kStatus_HAL_RpmsgSuccess or kStatus_HAL_RpmsgError. 526 */ 527 hal_rpmsg_status_t HAL_ImuReturnAllTxBuf(imu_link_t link); 528 529 /*! 530 * @brief Receive IMU message. 531 * 532 * This function is used to receive and process IMU message 533 * 534 * @param imuLink IMU link ID. 535 * @retval kStatus_HAL_RpmsgSuccess or kStatus_HAL_RpmsgError. 536 */ 537 hal_rpmsg_status_t HAL_ImuReceive(uint8_t imuLink); 538 539 /*! 540 * @brief Check if tx buffer queue empty. 541 * 542 * This function is used to check if tx buffer queue empty 543 * 544 * @param imuLink IMU link ID. 545 * @retval TRUE or FALSE. 546 */ 547 bool HAL_ImuIsTxBufQueueEmpty(uint8_t imuLink); 548 549 #if defined(IMU_GDMA_ENABLE) && (IMU_GDMA_ENABLE == 1) 550 /*! 551 * @brief Copy data by GDMA. 552 * 553 * This function is used to copy data by GDMA between shared memory and local memory. 554 * 555 * @param destAddr Source address of data. 556 * @param srcAddr Destination address of data. 557 * @param len Data Length. 558 */ 559 void HAL_ImuGdmaCopyData(void *destAddr, void *srcAddr, uint32_t len); 560 561 /*! @}*/ 562 #endif 563 564 #ifdef CONFIG_FW_DUMP_EVENT 565 /*! 566 * @brief Send fw dump event ack. 567 * 568 * This function is used to Send fw dump event ack to fw, When the event data process is completed. 569 * 570 * @param imuLink IMU link ID. 571 * @param rxBuf Rx buffer to be sent. 572 * @param length Length of Rx buffer 573 * @retval kStatus_HAL_RpmsgSuccess or kStatus_HAL_RpmsgError. 574 */ 575 hal_rpmsg_status_t HAL_ImuSendEventDumpAck(imu_link_t link, uint8_t *rxBuf, uint8_t length); 576 #endif 577 578 /*! 579 * @brief Create imu task mutex. 580 * 581 * This function creates a imu task mutex. 582 * 583 * @retval kStatus_HAL_RpmsgSuccess or kStatus_HAL_RpmsgError. 584 */ 585 hal_rpmsg_status_t HAL_ImuCreateTaskLock(void); 586 587 /*! 588 * @brief Delete imu task mutex. 589 * 590 * This function deletes the imu task mutex. 591 */ 592 void HAL_ImuDeleteTaskLock(void); 593 594 /*! 595 * @brief Acquire imu task mutex. 596 * 597 * This function acquires the imu task mutex. Only one thread can acquire the mutex at any 598 * given time. 599 * 600 * @retval kStatus_HAL_RpmsgSuccess or kStatus_HAL_RpmsgError. 601 */ 602 hal_rpmsg_status_t HAL_ImuGetTaskLock(void); 603 604 /*! 605 * @brief Release imu task mutex. 606 * 607 * This function releases the imu task mutex. 608 * 609 * @retval kStatus_HAL_RpmsgSuccess or kStatus_HAL_RpmsgError. 610 */ 611 hal_rpmsg_status_t HAL_ImuPutTaskLock(void); 612 613 /*! 614 * @brief Reset imu readIndex and writeIndex to 0. 615 * 616 * This function reset the imu txq. 617 */ 618 void HAL_ImuResetWlanTxq(uint8_t imuLink); 619 620 #if defined(__cplusplus) 621 } 622 #endif 623 /*! @}*/ 624 #endif /* __FSL_ADAPTER_RFIMU_H__ */ 625