1cc290419Sopenharmony_ci/* 2cc290419Sopenharmony_ci * Copyright (C) 2023 Huawei Device Co., Ltd. 3cc290419Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4cc290419Sopenharmony_ci * you may not use this file except in compliance with the License. 5cc290419Sopenharmony_ci * You may obtain a copy of the License at 6cc290419Sopenharmony_ci * 7cc290419Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8cc290419Sopenharmony_ci * 9cc290419Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10cc290419Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11cc290419Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12cc290419Sopenharmony_ci * See the License for the specific language governing permissions and 13cc290419Sopenharmony_ci * limitations under the License. 14cc290419Sopenharmony_ci */ 15cc290419Sopenharmony_ci//! utils 16cc290419Sopenharmony_ci#![allow(missing_docs)] 17cc290419Sopenharmony_ci 18cc290419Sopenharmony_ciuse crate::config::{SHELL_PROG, WIN_CMD_PROG}; 19cc290419Sopenharmony_ci 20cc290419Sopenharmony_ciuse std::future::Future; 21cc290419Sopenharmony_ciuse std::io::{self, Error, ErrorKind}; 22cc290419Sopenharmony_ciuse std::process::Command; 23cc290419Sopenharmony_ciuse std::time::{SystemTime, UNIX_EPOCH}; 24cc290419Sopenharmony_ci 25cc290419Sopenharmony_ci#[cfg(feature = "host")] 26cc290419Sopenharmony_ciextern crate ylong_runtime_static as ylong_runtime; 27cc290419Sopenharmony_ciuse ylong_runtime::io::AsyncWriteExt; 28cc290419Sopenharmony_ci 29cc290419Sopenharmony_cipub fn get_pseudo_random_u32() -> u32 { 30cc290419Sopenharmony_ci (SystemTime::now() 31cc290419Sopenharmony_ci .duration_since(UNIX_EPOCH) 32cc290419Sopenharmony_ci .unwrap() 33cc290419Sopenharmony_ci .as_nanos() 34cc290419Sopenharmony_ci & 0xffffffff) as u32 35cc290419Sopenharmony_ci} 36cc290419Sopenharmony_ci 37cc290419Sopenharmony_cipub fn get_current_time() -> u64 { 38cc290419Sopenharmony_ci SystemTime::now() 39cc290419Sopenharmony_ci .duration_since(UNIX_EPOCH) 40cc290419Sopenharmony_ci .unwrap() 41cc290419Sopenharmony_ci .as_millis() as u64 42cc290419Sopenharmony_ci} 43cc290419Sopenharmony_ci 44cc290419Sopenharmony_cipub async fn print_msg(buf: Vec<u8>) -> io::Result<()> { 45cc290419Sopenharmony_ci let mut stdout = ylong_runtime::io::stdout(); 46cc290419Sopenharmony_ci let _ = stdout.write(&buf).await; 47cc290419Sopenharmony_ci let _ = stdout.flush().await; 48cc290419Sopenharmony_ci Ok(()) 49cc290419Sopenharmony_ci} 50cc290419Sopenharmony_ci 51cc290419Sopenharmony_cipub fn execute_cmd(cmd: String) -> Result<std::process::Output, Error> { 52cc290419Sopenharmony_ci let arg_sign = if cfg!(target_os = "windows") { 53cc290419Sopenharmony_ci "/c" 54cc290419Sopenharmony_ci } else { 55cc290419Sopenharmony_ci "-c" 56cc290419Sopenharmony_ci }; 57cc290419Sopenharmony_ci 58cc290419Sopenharmony_ci let programe = if cfg!(target_os = "windows") { 59cc290419Sopenharmony_ci WIN_CMD_PROG 60cc290419Sopenharmony_ci } else { 61cc290419Sopenharmony_ci SHELL_PROG 62cc290419Sopenharmony_ci }; 63cc290419Sopenharmony_ci 64cc290419Sopenharmony_ci Command::new(programe).args([arg_sign, &cmd]).output() 65cc290419Sopenharmony_ci} 66cc290419Sopenharmony_ci 67cc290419Sopenharmony_cipub fn error_other(msg: String) -> Error { 68cc290419Sopenharmony_ci Error::new(ErrorKind::Other, msg) 69cc290419Sopenharmony_ci} 70cc290419Sopenharmony_ci 71cc290419Sopenharmony_cipub fn bytes_to_string(message: Vec<u8>) -> String { 72cc290419Sopenharmony_ci let msg = String::from_utf8(message); 73cc290419Sopenharmony_ci match msg { 74cc290419Sopenharmony_ci Ok(str) => str, 75cc290419Sopenharmony_ci Err(_e) => "".to_string(), 76cc290419Sopenharmony_ci } 77cc290419Sopenharmony_ci} 78cc290419Sopenharmony_ci 79cc290419Sopenharmony_ci#[allow(missing_docs)] 80cc290419Sopenharmony_cipub fn spawn<T>(fun : T) -> ylong_runtime::task::JoinHandle<()> 81cc290419Sopenharmony_ciwhere 82cc290419Sopenharmony_ci T : Future<Output = ()>, 83cc290419Sopenharmony_ci T : Send + 'static, 84cc290419Sopenharmony_ci T : Sync 85cc290419Sopenharmony_ci{ 86cc290419Sopenharmony_ci ylong_runtime::spawn(Box::into_pin(Box::new(fun) as Box<dyn Future<Output = ()> + Send + Sync>)) 87cc290419Sopenharmony_ci} 88cc290419Sopenharmony_ci 89cc290419Sopenharmony_cipub mod hdc_log { 90cc290419Sopenharmony_ci #[cfg(not(feature = "host"))] 91cc290419Sopenharmony_ci pub use hilog_rust::{hilog, HiLogLabel, LogType}; 92cc290419Sopenharmony_ci #[cfg(not(feature = "host"))] 93cc290419Sopenharmony_ci pub use std::ffi::{c_char, CString}; 94cc290419Sopenharmony_ci 95cc290419Sopenharmony_ci #[cfg(not(feature = "host"))] 96cc290419Sopenharmony_ci pub const LOG_LABEL: HiLogLabel = HiLogLabel { 97cc290419Sopenharmony_ci log_type: LogType::LogCore, 98cc290419Sopenharmony_ci domain: 0xD002D13, 99cc290419Sopenharmony_ci tag: "HDC_LOG", 100cc290419Sopenharmony_ci }; 101cc290419Sopenharmony_ci 102cc290419Sopenharmony_ci #[cfg(not(feature = "host"))] 103cc290419Sopenharmony_ci #[inline(never)] 104cc290419Sopenharmony_ci pub fn get_file_name(path: &str) -> &str { 105cc290419Sopenharmony_ci path.split('/').last().unwrap_or(path) 106cc290419Sopenharmony_ci } 107cc290419Sopenharmony_ci 108cc290419Sopenharmony_ci #[cfg(not(feature = "host"))] 109cc290419Sopenharmony_ci #[macro_export] 110cc290419Sopenharmony_ci macro_rules! trace { 111cc290419Sopenharmony_ci ($($arg:tt)+) => { 112cc290419Sopenharmony_ci hilog_rust::debug!(LOG_LABEL, "{}:{} {}", @public(get_file_name(file!())), @public(line!()), @public(format!($($arg)+))); 113cc290419Sopenharmony_ci log::trace!($($arg)+); 114cc290419Sopenharmony_ci }; 115cc290419Sopenharmony_ci } 116cc290419Sopenharmony_ci 117cc290419Sopenharmony_ci #[cfg(feature = "host")] 118cc290419Sopenharmony_ci #[macro_export] 119cc290419Sopenharmony_ci macro_rules! trace { 120cc290419Sopenharmony_ci ($($arg:tt)+) => { 121cc290419Sopenharmony_ci log::trace!($($arg)+); 122cc290419Sopenharmony_ci }; 123cc290419Sopenharmony_ci } 124cc290419Sopenharmony_ci 125cc290419Sopenharmony_ci #[cfg(not(feature = "host"))] 126cc290419Sopenharmony_ci #[macro_export] 127cc290419Sopenharmony_ci macro_rules! debug { 128cc290419Sopenharmony_ci ($($arg:tt)+) => { 129cc290419Sopenharmony_ci hilog_rust::debug!(LOG_LABEL, "{}:{} {}", @public(get_file_name(file!())), @public(line!()), @public(format!($($arg)+))); 130cc290419Sopenharmony_ci log::debug!($($arg)+); 131cc290419Sopenharmony_ci }; 132cc290419Sopenharmony_ci } 133cc290419Sopenharmony_ci 134cc290419Sopenharmony_ci #[cfg(feature = "host")] 135cc290419Sopenharmony_ci #[macro_export] 136cc290419Sopenharmony_ci macro_rules! debug { 137cc290419Sopenharmony_ci ($($arg:tt)+) => { 138cc290419Sopenharmony_ci log::debug!($($arg)+); 139cc290419Sopenharmony_ci }; 140cc290419Sopenharmony_ci } 141cc290419Sopenharmony_ci 142cc290419Sopenharmony_ci #[cfg(not(feature = "host"))] 143cc290419Sopenharmony_ci #[macro_export] 144cc290419Sopenharmony_ci macro_rules! info { 145cc290419Sopenharmony_ci ($($arg:tt)+) => { 146cc290419Sopenharmony_ci hilog_rust::info!(LOG_LABEL, "{}:{} {}", @public(get_file_name(file!())), @public(line!()), @public(format!($($arg)+))); 147cc290419Sopenharmony_ci log::info!($($arg)+); 148cc290419Sopenharmony_ci }; 149cc290419Sopenharmony_ci } 150cc290419Sopenharmony_ci 151cc290419Sopenharmony_ci #[cfg(feature = "host")] 152cc290419Sopenharmony_ci #[macro_export] 153cc290419Sopenharmony_ci macro_rules! info { 154cc290419Sopenharmony_ci ($($arg:tt)+) => { 155cc290419Sopenharmony_ci log::info!($($arg)+); 156cc290419Sopenharmony_ci }; 157cc290419Sopenharmony_ci } 158cc290419Sopenharmony_ci 159cc290419Sopenharmony_ci #[cfg(not(feature = "host"))] 160cc290419Sopenharmony_ci #[macro_export] 161cc290419Sopenharmony_ci macro_rules! warn { 162cc290419Sopenharmony_ci ($($arg:tt)+) => { 163cc290419Sopenharmony_ci hilog_rust::warn!(LOG_LABEL, "{}:{} {}", @public(get_file_name(file!())), @public(line!()), @public(format!($($arg)+))); 164cc290419Sopenharmony_ci log::warn!($($arg)+); 165cc290419Sopenharmony_ci }; 166cc290419Sopenharmony_ci } 167cc290419Sopenharmony_ci 168cc290419Sopenharmony_ci #[cfg(feature = "host")] 169cc290419Sopenharmony_ci #[macro_export] 170cc290419Sopenharmony_ci macro_rules! warn { 171cc290419Sopenharmony_ci ($($arg:tt)+) => { 172cc290419Sopenharmony_ci log::warn!($($arg)+); 173cc290419Sopenharmony_ci }; 174cc290419Sopenharmony_ci } 175cc290419Sopenharmony_ci 176cc290419Sopenharmony_ci #[cfg(not(feature = "host"))] 177cc290419Sopenharmony_ci #[macro_export] 178cc290419Sopenharmony_ci macro_rules! error { 179cc290419Sopenharmony_ci ($($arg:tt)+) => { 180cc290419Sopenharmony_ci hilog_rust::error!(LOG_LABEL, "{}:{} {}", @public(get_file_name(file!())), @public(line!()), @public(format!($($arg)+))); 181cc290419Sopenharmony_ci log::error!($($arg)+); 182cc290419Sopenharmony_ci }; 183cc290419Sopenharmony_ci } 184cc290419Sopenharmony_ci 185cc290419Sopenharmony_ci #[cfg(feature = "host")] 186cc290419Sopenharmony_ci #[macro_export] 187cc290419Sopenharmony_ci macro_rules! error { 188cc290419Sopenharmony_ci ($($arg:tt)+) => { 189cc290419Sopenharmony_ci log::error!($($arg)+); 190cc290419Sopenharmony_ci }; 191cc290419Sopenharmony_ci } 192cc290419Sopenharmony_ci 193cc290419Sopenharmony_ci #[cfg(not(feature = "host"))] 194cc290419Sopenharmony_ci #[macro_export] 195cc290419Sopenharmony_ci macro_rules! fatal { 196cc290419Sopenharmony_ci ($($arg:tt)+) => { 197cc290419Sopenharmony_ci hilog_rust::fatal!(LOG_LABEL, "{}:{} {}", @public(get_file_name(file!())), @public(line!()), @public(format!($($arg)+))); 198cc290419Sopenharmony_ci log::fatal!($($arg)+); 199cc290419Sopenharmony_ci }; 200cc290419Sopenharmony_ci } 201cc290419Sopenharmony_ci 202cc290419Sopenharmony_ci #[cfg(feature = "host")] 203cc290419Sopenharmony_ci #[macro_export] 204cc290419Sopenharmony_ci macro_rules! fatal { 205cc290419Sopenharmony_ci ($($arg:tt)+) => { 206cc290419Sopenharmony_ci log::fatal!($($arg)+); 207cc290419Sopenharmony_ci }; 208cc290419Sopenharmony_ci } 209cc290419Sopenharmony_ci 210cc290419Sopenharmony_ci // pub use crate::{trace, debug, info, warn, error, fatal}; 211cc290419Sopenharmony_ci} 212