Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
CellularUtil.h
00001 /* 00002 * Copyright (c) 2017, Arm Limited and affiliates. 00003 * SPDX-License-Identifier: Apache-2.0 00004 * 00005 * Licensed under the Apache License, Version 2.0 (the "License"); 00006 * you may not use this file except in compliance with the License. 00007 * You may obtain a copy of the License at 00008 * 00009 * http://www.apache.org/licenses/LICENSE-2.0 00010 * 00011 * Unless required by applicable law or agreed to in writing, software 00012 * distributed under the License is distributed on an "AS IS" BASIS, 00013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 00014 * See the License for the specific language governing permissions and 00015 * limitations under the License. 00016 */ 00017 00018 #ifndef CELLULAR_UTIL_H_ 00019 #define CELLULAR_UTIL_H_ 00020 00021 #include <stddef.h> 00022 #include <inttypes.h> 00023 00024 namespace mbed_cellular_util { 00025 00026 // some helper macros 00027 #define EMPTY_CHECK(val) (val ## 1) 00028 #define EMPTY(val) (EMPTY_CHECK(val) == 1) 00029 #define _CELLULAR_STRINGIFY(a) #a 00030 #define CELLULAR_STRINGIFY(a) _CELLULAR_STRINGIFY(a) 00031 00032 static const char hex_values[] = "0123456789ABCDEF"; 00033 00034 /** Converts the given IP address to proper IPv6 address if needed. 00035 * Conversion is done only if it's NOT IPv4 and separated with colons. 00036 * AT command +CGPADDR can give IP address in format of a1.a2.a3.a4.a5.a6.a7.a8.a9.a10.a11.a12.a13.a14.a15.a16 for IPv6 00037 * where ax are in decimal format. In this case, function converts decimals to hex with separated with colons. 00038 * 00039 * @param ip IP address that can be IPv4 or IPv6 in different formats from AT command +CGPADDR. Converted result uses same buffer. 00040 */ 00041 void convert_ipv6(char* ip); 00042 00043 /** Separates IP addresses from the given 'orig' string. 'orig' may contain zero, one or two IP addresses in various formats. 00044 * See AT command +CGPIAF from 3GPP TS 27.007 for details. Does also needed conversions for IPv6 addresses. 00045 * 00046 * @param orig original string that contains zero, one or two IP addressees in various formats 00047 * @param ip preallocated buffer that might contain IP address after return 00048 * @param ip_size size of preallocated buffer IP 00049 * @param ip2 preallocated buffer that might contain IP address after return 00050 * @param ip2_size size of preallocated buffer ip2 00051 * 00052 */ 00053 void separate_ip_addresses(char* orig, char* ip, size_t ip_size, char* ip2, size_t ip2_size); 00054 00055 /** Swaps the arrays if param IP does not contain IPv6 address but param ip2 does. 00056 * 00057 * @param ip IP address 00058 * @param ip_size size of buffer ip 00059 * @param ip2 IP address 00060 * @param ip2_size size of buffer ip2 00061 */ 00062 void prefer_ipv6(char* ip, size_t ip_size, char* ip2, size_t ip2_size); 00063 00064 /** Converts the given int to two hex characters 00065 * 00066 * @param num number to be converted to hex string 00067 * @param buf preallocated buffer that will contain 2 char length hex value 00068 */ 00069 void int_to_hex_str(uint8_t num, char* buf); 00070 00071 /** Converts the given buffer 'str' to hex buffer 'buf. First 'len' char's are converted to two hex bytes. 00072 * 00073 * @param str char buffer that is to be converted to hex 00074 * @param len how many chars from str are to be converted 00075 * @param buf destination buffer for hex converted chars. Buffer should be double the size of str to fit hex-encoded string. 00076 * @param omit_leading_zero if true then possible leading zeroes are omitted 00077 */ 00078 int char_str_to_hex_str(const char* str, uint16_t len, char *buf, bool omit_leading_zero = false); 00079 00080 /** Converts the given hex string to integer 00081 * 00082 * @param hex_string hex string from where chars are converted to int 00083 * @param hex_string_length length of the param hex_string 00084 * @return hex_string converted to int 00085 */ 00086 int hex_str_to_int(const char *hex_string, int hex_string_length); 00087 00088 /** Converts the given hex string str to char string to buf 00089 * 00090 * @param str hex string that is converted to char string to buf 00091 * @param len length of the param str/how many hex are converted 00092 * @param buf preallocated buffer where result conversion is stored 00093 * @return length of the buf 00094 */ 00095 int hex_str_to_char_str(const char* str, uint16_t len, char *buf); 00096 00097 /** Converts the given uint to binary string. Fills the given str starting from [0] with the number of bits defined by bit_cnt 00098 * For example uint_to_binary_string(9, str, 10) would fill str "0000001001" 00099 * For example uint_to_binary_string(9, str, 3) would fill str "001" 00100 * 00101 * @param num uint to converts to binary string 00102 * @param str buffer for converted binary string 00103 * @param str_size size of the str buffer 00104 * @param bit_cnt defines how many bits are filled to buffer started from lsb 00105 */ 00106 void uint_to_binary_str(uint32_t num, char* str, int str_size, int bit_cnt); 00107 00108 /** Get dynamic port for socket 00109 * 00110 * @return next port number above 49152 00111 */ 00112 uint16_t get_dynamic_ip_port(); 00113 00114 } // namespace mbed_cellular_util 00115 00116 #endif
Generated on Tue Jul 12 2022 14:23:30 by
