/* * Copyright (C) 2023 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #![allow(missing_docs)] use crate::config::*; use std::ffi::CString; extern "C" { fn SetParameterEx(key: *const libc::c_char, val: *const libc::c_char) -> libc::c_int; fn GetParameterEx( key: *const libc::c_char, def: *const libc::c_char, val: *mut libc::c_char, len: libc::c_uint, ) -> libc::c_int; #[allow(dead_code)] fn WaitParameterEx( key: *const libc::c_char, val: *const libc::c_char, timeout: libc::c_int, ) -> libc::c_int; } pub fn set_dev_item(key: &str, val: &str) -> bool { let ckey = match CString::new(key) { Ok(v) => v, Err(_) => return false, }; let cval = match CString::new(val) { Ok(v) => v, Err(_) => return false, }; unsafe { let ret = SetParameterEx(ckey.as_ptr(), cval.as_ptr()); ret == 0 } } pub fn get_dev_item(key: &str, def: &str) -> (bool, String) { let ckey = match CString::new(key) { Ok(v) => v, Err(_) => return (false, String::new()), }; let cdef = match CString::new(def) { Ok(v) => v, Err(_) => return (false, String::new()), }; let mut out: [u8; HDC_PARAMETER_VALUE_MAX_LEN] = [0; HDC_PARAMETER_VALUE_MAX_LEN]; unsafe { let bytes = GetParameterEx( ckey.as_ptr(), cdef.as_ptr(), out.as_mut_ptr() as *mut libc::c_char, 512, ); let output = match String::from_utf8(out.to_vec()) { Ok(v) => v.trim().to_string(), Err(_) => return (false, String::new()), }; let (val, _) = output.split_at(bytes as usize); (bytes >= 0, val.to_string()) } } #[allow(dead_code)] pub fn wait_dev_item(key: &str, val: &str, timeout: i32) -> bool { let ckey = match CString::new(key) { Ok(v) => v, Err(_) => return false, }; let cval = match CString::new(val) { Ok(v) => v, Err(_) => return false, }; unsafe { WaitParameterEx(ckey.as_ptr(), cval.as_ptr(), timeout) == 0 } }