Exportable version of WizziLab's modem driver.
include/kal_codec.h@41:6f83174ffed4, 2018-11-26 (annotated)
- Committer:
- Jeej
- Date:
- Mon Nov 26 16:42:16 2018 +0000
- Revision:
- 41:6f83174ffed4
v5.3.90
Who changed what in which revision?
User | Revision | Line number | New 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 |