Exportable version of WizziLab's modem driver.

Dependents:   modem_ref_helper

Committer:
Jeej
Date:
Wed Jul 31 16:48:48 2019 +0000
Revision:
46:9b83866cef2c
Parent:
41:6f83174ffed4
Updated for mbed-os 5.13

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Jeej 41:6f83174ffed4 1 /// @copyright
Jeej 41:6f83174ffed4 2 /// ========================================================================={{{
Jeej 41:6f83174ffed4 3 /// Copyright (c) 20XX /
Jeej 41:6f83174ffed4 4 /// All rights reserved /
Jeej 41:6f83174ffed4 5 /// /
Jeej 41:6f83174ffed4 6 /// IMPORTANT: This Software may not be modified, copied or distributed unless /
Jeej 41:6f83174ffed4 7 /// embedded on a WizziLab product. Other than for the foregoing purpose, this /
Jeej 41:6f83174ffed4 8 /// Software and/or its documentation may not be used, reproduced, copied, /
Jeej 41:6f83174ffed4 9 /// prepared derivative works of, modified, performed, distributed, displayed /
Jeej 41:6f83174ffed4 10 /// or sold for any purpose. For the sole purpose of embedding this Software /
Jeej 41:6f83174ffed4 11 /// on a WizziLab product, copy, modification and distribution of this /
Jeej 41:6f83174ffed4 12 /// Software is granted provided that the following conditions are respected: /
Jeej 41:6f83174ffed4 13 /// /
Jeej 41:6f83174ffed4 14 /// * Redistributions of source code must retain the above copyright notice, /
Jeej 41:6f83174ffed4 15 /// this list of conditions and the following disclaimer /
Jeej 41:6f83174ffed4 16 /// /
Jeej 41:6f83174ffed4 17 /// * Redistributions in binary form must reproduce the above copyright /
Jeej 41:6f83174ffed4 18 /// notice, this list of conditions and the following disclaimer in the /
Jeej 41:6f83174ffed4 19 /// documentation and/or other materials provided with the distribution. /
Jeej 41:6f83174ffed4 20 /// /
Jeej 41:6f83174ffed4 21 /// * The name of WizziLab can not be used to endorse or promote products /
Jeej 41:6f83174ffed4 22 /// derived from this software without specific prior written permission. /
Jeej 41:6f83174ffed4 23 /// /
Jeej 41:6f83174ffed4 24 /// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS /
Jeej 41:6f83174ffed4 25 /// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED /
Jeej 41:6f83174ffed4 26 /// TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR /
Jeej 41:6f83174ffed4 27 /// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR /
Jeej 41:6f83174ffed4 28 /// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, /
Jeej 41:6f83174ffed4 29 /// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, /
Jeej 41:6f83174ffed4 30 /// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, /
Jeej 41:6f83174ffed4 31 /// OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY /
Jeej 41:6f83174ffed4 32 /// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING /
Jeej 41:6f83174ffed4 33 /// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS /
Jeej 41:6f83174ffed4 34 /// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /
Jeej 41:6f83174ffed4 35 /// WIZZILAB HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, /
Jeej 41:6f83174ffed4 36 /// ENHANCEMENTS OR MODIFICATIONS. /
Jeej 41:6f83174ffed4 37 /// /
Jeej 41:6f83174ffed4 38 /// Should you have any questions regarding your right to use this Software, /
Jeej 41:6f83174ffed4 39 /// contact WizziLab at www.wizzilab.com. /
Jeej 41:6f83174ffed4 40 /// /
Jeej 41:6f83174ffed4 41 /// =========================================================================}}}
Jeej 41:6f83174ffed4 42 /// @endcopyright
Jeej 41:6f83174ffed4 43
Jeej 41:6f83174ffed4 44 // =======================================================================
Jeej 41:6f83174ffed4 45 /// @file kal_codec.h
Jeej 41:6f83174ffed4 46 /// @brief KAL utilities s
Jeej 41:6f83174ffed4 47 // =======================================================================
Jeej 41:6f83174ffed4 48
Jeej 41:6f83174ffed4 49 #ifndef _KAL_CODEC_H_
Jeej 41:6f83174ffed4 50 #define _KAL_CODEC_H_
Jeej 41:6f83174ffed4 51
Jeej 41:6f83174ffed4 52 #include "hal_types.h"
Jeej 41:6f83174ffed4 53
Jeej 41:6f83174ffed4 54 // ======================================================================
Jeej 41:6f83174ffed4 55 //
Jeej 41:6f83174ffed4 56 //
Jeej 41:6f83174ffed4 57 // ASCII to Binary Codec Toolkits
Jeej 41:6f83174ffed4 58 //
Jeej 41:6f83174ffed4 59 //
Jeej 41:6f83174ffed4 60 // ======================================================================
Jeej 41:6f83174ffed4 61
Jeej 41:6f83174ffed4 62 //======================================================================
Jeej 41:6f83174ffed4 63 // hex2ascii
Jeej 41:6f83174ffed4 64 //----------------------------------------------------------------------
Jeej 41:6f83174ffed4 65 /// @brief Convert hexadecimal number to ascii
Jeej 41:6f83174ffed4 66 /// @param char* in input buffer (hex)
Jeej 41:6f83174ffed4 67 /// @param char* out output buffer (ascii)
Jeej 41:6f83174ffed4 68 /// @param u16 len length of inoput buffer in bytes
Jeej 41:6f83174ffed4 69 //======================================================================
Jeej 41:6f83174ffed4 70 void hex2ascii( char* in, char* out, u16 length);
Jeej 41:6f83174ffed4 71
Jeej 41:6f83174ffed4 72 //======================================================================
Jeej 41:6f83174ffed4 73 // itoa
Jeej 41:6f83174ffed4 74 //----------------------------------------------------------------------
Jeej 41:6f83174ffed4 75 /// @brief Converts an integer value to a null-terminated string using the specified base and stores the result
Jeej 41:6f83174ffed4 76 /// in the array given by result parameter.
Jeej 41:6f83174ffed4 77 /// @param int value integer to convert
Jeej 41:6f83174ffed4 78 /// @param char* result converted string
Jeej 41:6f83174ffed4 79 /// @param int base base used for conversion 2, 8, 10, 16
Jeej 41:6f83174ffed4 80 /// @return A pointer to the resulting null-terminated string, same as parameter result
Jeej 41:6f83174ffed4 81 //======================================================================
Jeej 41:6f83174ffed4 82 char* itoa(int value, char* result, int base);
Jeej 41:6f83174ffed4 83
Jeej 41:6f83174ffed4 84 //======================================================================
Jeej 41:6f83174ffed4 85 // atoitok
Jeej 41:6f83174ffed4 86 //----------------------------------------------------------------------
Jeej 41:6f83174ffed4 87 /// @brief Extracts from a ASCII string a value (decimal or hex) and
Jeej 41:6f83174ffed4 88 /// convert it to an integer value.
Jeej 41:6f83174ffed4 89 /// - Blank characters are skipped
Jeej 41:6f83174ffed4 90 /// - hexa values must begin with '0x' or '0X'
Jeej 41:6f83174ffed4 91 /// - '-' sign is handled
Jeej 41:6f83174ffed4 92 /// - returns after one value has been parsed or null character
Jeej 41:6f83174ffed4 93 /// or CR character has been found.
Jeej 41:6f83174ffed4 94 /// @param p pointer to pointer to the string to be parsed. The pointer
Jeej 41:6f83174ffed4 95 /// to string is modified: at the end of the call it points to
Jeej 41:6f83174ffed4 96 /// the character following the last parsed one.
Jeej 41:6f83174ffed4 97 //======================================================================
Jeej 41:6f83174ffed4 98 int atoitok(u8 **p);
Jeej 41:6f83174ffed4 99
Jeej 41:6f83174ffed4 100 //======================================================================
Jeej 41:6f83174ffed4 101 // kal_atoi
Jeej 41:6f83174ffed4 102 //----------------------------------------------------------------------
Jeej 41:6f83174ffed4 103 /// @brief Extracts from a ASCII string a decimal value and
Jeej 41:6f83174ffed4 104 /// convert it to an integer value.
Jeej 41:6f83174ffed4 105 /// '-' sign is handled
Jeej 41:6f83174ffed4 106 /// @param s char* string to convert
Jeej 41:6f83174ffed4 107 /// @retval s32 integer value
Jeej 41:6f83174ffed4 108 //======================================================================
Jeej 41:6f83174ffed4 109 s32 kal_atoi(u8* s);
Jeej 41:6f83174ffed4 110
Jeej 41:6f83174ffed4 111 //======================================================================
Jeej 41:6f83174ffed4 112 // kal_atoi_float
Jeej 41:6f83174ffed4 113 //----------------------------------------------------------------------
Jeej 41:6f83174ffed4 114 /// @brief Extracts from a ASCII string a float value and
Jeej 41:6f83174ffed4 115 /// convert it to an integer value * 10^number_of_decimals.
Jeej 41:6f83174ffed4 116 /// '-' and '+' signs are handled
Jeej 41:6f83174ffed4 117 /// @param s char* string to convert
Jeej 41:6f83174ffed4 118 /// @param d u8 Number of decimals
Jeej 41:6f83174ffed4 119 /// @retval s32 integer value
Jeej 41:6f83174ffed4 120 //======================================================================
Jeej 41:6f83174ffed4 121 s32 kal_atoi_float(u8* s, u8 d);
Jeej 41:6f83174ffed4 122
Jeej 41:6f83174ffed4 123 //======================================================================
Jeej 41:6f83174ffed4 124 // kal_atoi_hex
Jeej 41:6f83174ffed4 125 //----------------------------------------------------------------------
Jeej 41:6f83174ffed4 126 /// @brief Extracts from a ASCII string a hex value and
Jeej 41:6f83174ffed4 127 /// convert it to an integer value.
Jeej 41:6f83174ffed4 128 /// @param s char* string to convert
Jeej 41:6f83174ffed4 129 /// @retval u32 integer value
Jeej 41:6f83174ffed4 130 //======================================================================
Jeej 41:6f83174ffed4 131 u32 kal_atoi_hex(u8* s);
Jeej 41:6f83174ffed4 132
Jeej 41:6f83174ffed4 133 /// Length of the Base64-encoded string based on the input binary length.
Jeej 41:6f83174ffed4 134 #define KAL_BASE64_ENCODE_LEN(l) (((((l) + 2) / 3) * 4) + 1)
Jeej 41:6f83174ffed4 135
Jeej 41:6f83174ffed4 136 /// Length of the binary based on the real Base64-encoded string length.
Jeej 41:6f83174ffed4 137 #define KAL_BASE64_DECODE_LEN(l) ((l) * 3 / 4)
Jeej 41:6f83174ffed4 138
Jeej 41:6f83174ffed4 139 //======================================================================
Jeej 41:6f83174ffed4 140 // kal_base64_strlen
Jeej 41:6f83174ffed4 141 //----------------------------------------------------------------------
Jeej 41:6f83174ffed4 142 /// @brief Real length (excluding padding) of Base64-encoded string
Jeej 41:6f83174ffed4 143 /// Note : the input string always has 4x chars, if not return 0
Jeej 41:6f83174ffed4 144 /// @param in char* string to decode
Jeej 41:6f83174ffed4 145 /// @retval u16 string length
Jeej 41:6f83174ffed4 146 //======================================================================
Jeej 41:6f83174ffed4 147 u16 kal_base64_strlen(const char* in);
Jeej 41:6f83174ffed4 148
Jeej 41:6f83174ffed4 149 //======================================================================
Jeej 41:6f83174ffed4 150 // kal_base64_encode
Jeej 41:6f83174ffed4 151 //----------------------------------------------------------------------
Jeej 41:6f83174ffed4 152 /// @brief Encode Base64-encoded buffer. The output buffer is supposed to have enough space
Jeej 41:6f83174ffed4 153 /// Beware, the stream encoding is Big Endian.
Jeej 41:6f83174ffed4 154 /// @param out char* string result
Jeej 41:6f83174ffed4 155 /// @param in u8* binary buffer to encode
Jeej 41:6f83174ffed4 156 /// @param len u16 length of the binary buffer in bytes
Jeej 41:6f83174ffed4 157 /// @retval void
Jeej 41:6f83174ffed4 158 //======================================================================
Jeej 41:6f83174ffed4 159 void kal_base64_encode(char *out, u8* in, u16 len);
Jeej 41:6f83174ffed4 160
Jeej 41:6f83174ffed4 161 //======================================================================
Jeej 41:6f83174ffed4 162 // kal_base64_decode
Jeej 41:6f83174ffed4 163 //----------------------------------------------------------------------
Jeej 41:6f83174ffed4 164 /// @brief Decode Base64-encoded buffer. The output buffer is supposed to have enough space
Jeej 41:6f83174ffed4 165 /// @param out u8* binary buffer result
Jeej 41:6f83174ffed4 166 /// @param in char* string to decode
Jeej 41:6f83174ffed4 167 /// @param len u16 string length, excluding padding
Jeej 41:6f83174ffed4 168 /// @retval void
Jeej 41:6f83174ffed4 169 //======================================================================
Jeej 41:6f83174ffed4 170 void kal_base64_decode(u8 *out, const char* in, u16 len);
Jeej 41:6f83174ffed4 171
Jeej 41:6f83174ffed4 172 //======================================================================
Jeej 41:6f83174ffed4 173 // kal_tolower
Jeej 41:6f83174ffed4 174 //----------------------------------------------------------------------
Jeej 41:6f83174ffed4 175 /// @brief Changes inplace to lower character a non-constant string
Jeej 41:6f83174ffed4 176 /// @param s u8* String to transform
Jeej 41:6f83174ffed4 177 /// @retval void
Jeej 41:6f83174ffed4 178 //======================================================================
Jeej 41:6f83174ffed4 179 void kal_tolower(u8* s);
Jeej 41:6f83174ffed4 180
Jeej 41:6f83174ffed4 181 //======================================================================
Jeej 41:6f83174ffed4 182 // kal_toupper
Jeej 41:6f83174ffed4 183 //----------------------------------------------------------------------
Jeej 41:6f83174ffed4 184 /// @brief Changes inplace to upper character a non-constant string
Jeej 41:6f83174ffed4 185 /// @param s u8* String to transform
Jeej 41:6f83174ffed4 186 /// @retval void
Jeej 41:6f83174ffed4 187 //======================================================================
Jeej 41:6f83174ffed4 188 void kal_toupper(u8* s);
Jeej 41:6f83174ffed4 189
Jeej 41:6f83174ffed4 190 //======================================================================
Jeej 41:6f83174ffed4 191 // kal_crc8
Jeej 41:6f83174ffed4 192 //----------------------------------------------------------------------
Jeej 41:6f83174ffed4 193 /// @brief Generate crc8
Jeej 41:6f83174ffed4 194 /// @param in u8* input buffer
Jeej 41:6f83174ffed4 195 /// @param len u32 input buffer length in bytes
Jeej 41:6f83174ffed4 196 /// @retval void
Jeej 41:6f83174ffed4 197 //======================================================================
Jeej 41:6f83174ffed4 198 u8 kal_crc8(u8* in, u32 len);
Jeej 41:6f83174ffed4 199
Jeej 41:6f83174ffed4 200 // =======================================================================
Jeej 41:6f83174ffed4 201 // kal_ctf_t
Jeej 41:6f83174ffed4 202 // -----------------------------------------------------------------------
Jeej 41:6f83174ffed4 203 /// D7A compressed time format
Jeej 41:6f83174ffed4 204 // =======================================================================
Jeej 41:6f83174ffed4 205 typedef union
Jeej 41:6f83174ffed4 206 {
Jeej 41:6f83174ffed4 207 // bit access fields
Jeej 41:6f83174ffed4 208 struct {
Jeej 41:6f83174ffed4 209 /// Mantissa
Jeej 41:6f83174ffed4 210 u8 mant : 5;
Jeej 41:6f83174ffed4 211 /// Exponent
Jeej 41:6f83174ffed4 212 u8 exp : 3;
Jeej 41:6f83174ffed4 213 } bf;
Jeej 41:6f83174ffed4 214
Jeej 41:6f83174ffed4 215 // byte access
Jeej 41:6f83174ffed4 216 u8 byte;
Jeej 41:6f83174ffed4 217
Jeej 41:6f83174ffed4 218 } kal_ctf_t;
Jeej 41:6f83174ffed4 219
Jeej 41:6f83174ffed4 220 //======================================================================
Jeej 41:6f83174ffed4 221 // kal_ctf_encode
Jeej 41:6f83174ffed4 222 //----------------------------------------------------------------------
Jeej 41:6f83174ffed4 223 /// @brief Compress u32 to D7A Compressed Time format (CTF).
Jeej 41:6f83174ffed4 224 /// The ceil flag is used to define rounding, so that
Jeej 41:6f83174ffed4 225 /// kal_ctf_decode(kal_ctf_encode(val, FALSE) <= val (floor)
Jeej 41:6f83174ffed4 226 /// kal_ctf_decode(kal_ctf_encode(val, TRUE) >= val (ceiling)
Jeej 41:6f83174ffed4 227 /// @param val u32 value to encode
Jeej 41:6f83174ffed4 228 /// @param ceil u8 ceil value when TRUE
Jeej 41:6f83174ffed4 229 /// @retval kal_ctf_t compressed value
Jeej 41:6f83174ffed4 230 //======================================================================
Jeej 41:6f83174ffed4 231 kal_ctf_t kal_ctf_encode(u32 val, u8 ceil);
Jeej 41:6f83174ffed4 232
Jeej 41:6f83174ffed4 233 // =======================================================================
Jeej 41:6f83174ffed4 234 // kal_ctf_decode
Jeej 41:6f83174ffed4 235 // -----------------------------------------------------------------------
Jeej 41:6f83174ffed4 236 /// @brief Decompress from Compressed Time Format to u32
Jeej 41:6f83174ffed4 237 /// @param ctf kal_ctf_t compressed value in CTF
Jeej 41:6f83174ffed4 238 /// @retval u32 decode result
Jeej 41:6f83174ffed4 239 // =======================================================================
Jeej 41:6f83174ffed4 240 u32 kal_ctf_decode(kal_ctf_t ctf);
Jeej 41:6f83174ffed4 241
Jeej 41:6f83174ffed4 242 #endif // _KAL_CODEC_H_
Jeej 41:6f83174ffed4 243