13d0407baSopenharmony_ci/* 23d0407baSopenharmony_ci * Copyright (c) 2022 FuZhou Lockzhiner Electronic Co., Ltd. All rights reserved. 33d0407baSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 43d0407baSopenharmony_ci * you may not use this file except in compliance with the License. 53d0407baSopenharmony_ci * You may obtain a copy of the License at 63d0407baSopenharmony_ci * 73d0407baSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 83d0407baSopenharmony_ci * 93d0407baSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 103d0407baSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 113d0407baSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 123d0407baSopenharmony_ci * See the License for the specific language governing permissions and 133d0407baSopenharmony_ci * limitations under the License. 143d0407baSopenharmony_ci */ 153d0407baSopenharmony_ci 163d0407baSopenharmony_ci/** 173d0407baSopenharmony_ci * @addtogroup Lockzhiner 183d0407baSopenharmony_ci * 193d0407baSopenharmony_ci * @file wait.h 203d0407baSopenharmony_ci * 213d0407baSopenharmony_ci */ 223d0407baSopenharmony_ci 233d0407baSopenharmony_ci#ifndef LZ_HARDWARE_WAIT_H 243d0407baSopenharmony_ci#define LZ_HARDWARE_WAIT_H 253d0407baSopenharmony_ci 263d0407baSopenharmony_ci/** 273d0407baSopenharmony_ci * @brief sleep until a condition gets true or a timeout elapses. 283d0407baSopenharmony_ci * 293d0407baSopenharmony_ci * 303d0407baSopenharmony_ci * 313d0407baSopenharmony_ci * @param condition Indicates a C expression for the event to wait for. 323d0407baSopenharmony_ci * @param timeout Indicates timeout, in ticks. 333d0407baSopenharmony_ci * @return Returns: 343d0407baSopenharmony_ci * 0 if the @condition evaluated to %false after the @timeout elapsed, 353d0407baSopenharmony_ci * 1 if the @condition evaluated to %true after the @timeout elapsed, 363d0407baSopenharmony_ci * or the remaining jiffies (at least 1) if the @condition evaluated 373d0407baSopenharmony_ci * to %true before the @timeout elapsed. 383d0407baSopenharmony_ci */ 393d0407baSopenharmony_ci#define WaitEventTimeout(condition, timeout) \ 403d0407baSopenharmony_ci( { \ 413d0407baSopenharmony_ci int __ret = timeout; \ 423d0407baSopenharmony_ci while (--__ret && !(condition)) { \ 433d0407baSopenharmony_ci ToyMsleep(1); \ 443d0407baSopenharmony_ci } \ 453d0407baSopenharmony_ci if ((__ret == 0) && (condition)) \ 463d0407baSopenharmony_ci __ret = 1; \ 473d0407baSopenharmony_ci __ret; \ 483d0407baSopenharmony_ci}) 493d0407baSopenharmony_ci 503d0407baSopenharmony_ci/** 513d0407baSopenharmony_ci * @brief sleep until a condition gets true. 523d0407baSopenharmony_ci * 533d0407baSopenharmony_ci * 543d0407baSopenharmony_ci * 553d0407baSopenharmony_ci * @param condition Indicates a C expression for the event to wait for. 563d0407baSopenharmony_ci * @return Returns: 573d0407baSopenharmony_ci */ 583d0407baSopenharmony_ci#define WaitEvent(condition) \ 593d0407baSopenharmony_ci( { \ 603d0407baSopenharmony_ci while (!(condition)) { \ 613d0407baSopenharmony_ci ToyMsleep(1); \ 623d0407baSopenharmony_ci } \ 633d0407baSopenharmony_ci}) 643d0407baSopenharmony_ci 653d0407baSopenharmony_ci#endif