123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340 |
- /* Copyright (c) 2014, 2020 - 2021 The Linux Foundation. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following
- * disclaimer in the documentation and/or other materials provided
- * with the distribution.
- * * Neither the name of The Linux Foundation, nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
- * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
- * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- */
- #ifndef _LOC_MISC_UTILS_H_
- #define _LOC_MISC_UTILS_H_
- #include <stdint.h>
- #include <ios>
- #include <string>
- #include <sstream>
- #ifdef __cplusplus
- extern "C" {
- #endif
- #include <stddef.h>
- #include <stdint.h>
- /*===========================================================================
- FUNCTION loc_split_string
- DESCRIPTION:
- This function is used to split a delimiter separated string into
- sub-strings. This function does not allocate new memory to store the split
- strings. Instead, it places '\0' in places of delimiters and assings the
- starting address of the substring within the raw string as the string address
- The input raw_string no longer remains to be a collection of sub-strings
- after this function is executed.
- Please make a copy of the input string before calling this function if
- necessary
- PARAMETERS:
- char *raw_string: is the original string with delimiter separated substrings
- char **split_strings_ptr: is the arraw of pointers which will hold the addresses
- of individual substrings
- int max_num_substrings: is the maximum number of substrings that are expected
- by the caller. The array of pointers in the above parameter
- is usually this long
- char delimiter: is the delimiter that separates the substrings. Examples: ' ', ';'
- DEPENDENCIES
- N/A
- RETURN VALUE
- int Number of split strings
- SIDE EFFECTS
- The input raw_string no longer remains a delimiter separated single string.
- EXAMPLE
- delimiter = ' ' //space
- raw_string = "hello new user" //delimiter is space ' '
- addresses = 0123456789abcd
- split_strings_ptr[0] = &raw_string[0]; //split_strings_ptr[0] contains "hello"
- split_strings_ptr[1] = &raw_string[6]; //split_strings_ptr[1] contains "new"
- split_strings_ptr[2] = &raw_string[a]; //split_strings_ptr[2] contains "user"
- ===========================================================================*/
- int loc_util_split_string(char *raw_string, char **split_strings_ptr, int max_num_substrings,
- char delimiter);
- /*===========================================================================
- FUNCTION trim_space
- DESCRIPTION
- Removes leading and trailing spaces of the string
- DEPENDENCIES
- N/A
- RETURN VALUE
- None
- SIDE EFFECTS
- N/A
- ===========================================================================*/
- void loc_util_trim_space(char *org_string);
- /*===========================================================================
- FUNCTION dlGetSymFromLib
- DESCRIPTION
- Handy function to get a pointer to a symbol from a library.
- If libHandle is not null, it will be used as the handle to the library. In
- that case libName wll not be used;
- libHandle is an in / out parameter.
- If libHandle is null, libName will be used to dlopen.
- Either libHandle or libName must not be nullptr.
- symName must not be null.
- DEPENDENCIES
- N/A
- RETURN VALUE
- pointer to symName. Could be nullptr if
- Parameters are incorrect; or
- libName can not be opened; or
- symName can not be found.
- SIDE EFFECTS
- N/A
- ===========================================================================*/
- void* dlGetSymFromLib(void*& libHandle, const char* libName, const char* symName);
- /*===========================================================================
- FUNCTION getQTimerTickCount
- DESCRIPTION
- This function is used to read the QTimer ticks count. This value is globally maintained and
- must be the same across all processors on a target.
- DEPENDENCIES
- N/A
- RETURN VALUE
- uint64_t QTimer tick count
- SIDE EFFECTS
- N/A
- ===========================================================================*/
- uint64_t getQTimerTickCount();
- /*===========================================================================
- FUNCTION getQTimerDeltaNanos
- DESCRIPTION
- This function is used to read the the difference in nanoseconds between
- Qtimer on AP side and Qtimer on MP side for dual-SoC architectures such as Kona
- DEPENDENCIES
- N/A
- RETURN VALUE
- uint64_t QTimer difference in nanoseconds
- SIDE EFFECTS
- N/A
- ===========================================================================*/
- uint64_t getQTimerDeltaNanos();
- /*===========================================================================
- FUNCTION getQTimerFreq
- DESCRIPTION
- This function is used to read the QTimer frequency in hz. This value is globally maintained and
- must be the same across all processors on a target.
- DEPENDENCIES
- N/A
- RETURN VALUE
- uint64_t QTimer frequency
- SIDE EFFECTS
- N/A
- ===========================================================================*/
- uint64_t getQTimerFreq();
- /*===========================================================================
- FUNCTION getBootTimeMilliSec
- DESCRIPTION
- This function is used to get boot time in milliseconds.
- DEPENDENCIES
- N/A
- RETURN VALUE
- uint64_t boot time in milliseconds
- SIDE EFFECTS
- N/A
- ===========================================================================*/
- uint64_t getBootTimeMilliSec();
- #ifdef __cplusplus
- }
- #endif
- using std::hex;
- using std::string;
- using std::stringstream;
- /*===========================================================================
- FUNCTION to_string_hex
- DESCRIPTION
- This function works similar to std::to_string, but puts only in hex format.
- DEPENDENCIES
- N/A
- RETURN VALUE
- string, of input val in hex format
- SIDE EFFECTS
- N/A
- ===========================================================================*/
- template <typename T>
- string to_string_hex(T val) {
- stringstream ss;
- if (val < 0) {
- val = -val;
- ss << "-";
- }
- ss << hex << "0x" << val;
- return ss.str();
- }
- /*===========================================================================
- FUNCTION loc_prim_arr_to_string
- DESCRIPTION
- This function puts out primitive array in DEC or EHX format.
- DEPENDENCIES
- N/A
- RETURN VALUE
- string, space separated string of values in the input array, either
- in decimal or hex format, depending on the value of decIfTrue
- SIDE EFFECTS
- N/A
- ===========================================================================*/
- template <typename T>
- static string loc_prim_arr_to_string(T* arr, uint32_t size, bool decIfTrue = true) {
- stringstream ss;
- for (uint32_t i = 0; i < size; i++) {
- ss << (decIfTrue ? to_string(arr[i]) : to_string_hex(arr[i]));
- if (i != size - 1) {
- ss << " ";
- }
- }
- return ss.str();
- }
- /*===========================================================================
- FUNCTION qTimerTicksToNanos
- DESCRIPTION
- Transform from ticks to nanoseconds, clock is 19.2 MHz
- so the formula would be qtimer(ns) = (ticks * 1000000000) / 19200000
- or simplified qtimer(ns) = (ticks * 10000) / 192.
- DEPENDENCIES
- N/A
- RETURN VALUE
- Qtimer value in nanoseconds
- SIDE EFFECTS
- N/A
- ===========================================================================*/
- inline uint64_t qTimerTicksToNanos(double qTimer) {
- return (uint64_t((qTimer * double(10000ull)) / (double)192ull));
- }
- /*===========================================================================
- FUNCTION loc_convert_lla_gnss_to_vrp
- DESCRIPTION
- This function converts lat/long/altitude from GNSS antenna based
- to vehicle reference point based.
- DEPENDENCIES
- N/A
- RETURN VALUE
- The converted lat/long/altitude will be stored in the parameter of llaInfo.
- SIDE EFFECTS
- N/A
- ===========================================================================*/
- void loc_convert_lla_gnss_to_vrp(double lla[3], float rollPitchYaw[3],
- float leverArm[3]);
- /*===========================================================================
- FUNCTION loc_convert_velocity_gnss_to_vrp
- DESCRIPTION
- This function converts east/north/up velocity from GNSS antenna based
- to vehicle reference point based.
- DEPENDENCIES
- N/A
- RETURN VALUE
- The converted east/north/up velocity will be stored in the parameter of
- enuVelocity.
- SIDE EFFECTS
- N/A
- ===========================================================================*/
- void loc_convert_velocity_gnss_to_vrp(float enuVelocity[3], float rollPitchYaw[3],
- float rollPitchYawRate[3], float leverArm[3]);
- /*===========================================================================
- FUNCTION locUtilWaitForDir
- DESCRIPTION
- This function will block until the directory specified in
- dirName has been created
- DEPENDENCIES
- N/A
- RETURN VALUE
- N/A
- SIDE EFFECTS
- N/A
- ===========================================================================*/
- void locUtilWaitForDir(const char* dirName);
- #endif //_LOC_MISC_UTILS_H_
|