summaryrefslogtreecommitdiffstats
path: root/ucs2-lib/src/ucs_dec.c
blob: b8aef2f8cc9fa8e8a0819228599346f7fb97fab8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
/*------------------------------------------------------------------------------------------------*/
/* UNICENS V2.1.0-3491                                                                            */
/* Copyright (c) 2017 Microchip Technology Germany II GmbH & Co. KG.                              */
/*                                                                                                */
/* This program is free software: you can redistribute it and/or modify                           */
/* it under the terms of the GNU General Public License as published by                           */
/* the Free Software Foundation, either version 2 of the License, or                              */
/* (at your option) any later version.                                                            */
/*                                                                                                */
/* This program is distributed in the hope that it will be useful,                                */
/* but WITHOUT ANY WARRANTY; without even the implied warranty of                                 */
/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                                  */
/* GNU General Public License for more details.                                                   */
/*                                                                                                */
/* You should have received a copy of the GNU General Public License                              */
/* along with this program.  If not, see <http://www.gnu.org/licenses/>.                          */
/*                                                                                                */
/* You may also obtain this software under a propriety license from Microchip.                    */
/* Please contact Microchip for further information.                                              */
/*------------------------------------------------------------------------------------------------*/

/*!
 * \file
 * \brief Implementation of the Command Interpreter Module.
 *
 * \cond UCS_INTERNAL_DOC
 * \addtogroup G_DEC_INT
 * @{
 */

/*------------------------------------------------------------------------------------------------*/
/* Includes                                                                                       */
/*------------------------------------------------------------------------------------------------*/
#include "ucs_dec.h"
#include "ucs_misc.h"
#include "ucs_ret_pb.h"

/*------------------------------------------------------------------------------------------------*/
/* Implementation                                                                                 */
/*------------------------------------------------------------------------------------------------*/
/*! \brief  Search in a FktOp table for matching FktID and OPType. This function is used for
 *          incoming ICM messages.
 *  \param   list            FktOp table
 *  \param   index_ptr       Reference to array index of the matching array element
 *  \param   function_id     FktID
 *  \param   op_type         OPType
 *  \return  DEC_RET_SUCCESS                 Decoding was successful
 *           DEC_RET_FKTID_NOT_FOUND         FktID/OPType not found
 */
Dec_Return_t Dec_SearchFktOpIcm(Dec_FktOpIcm_t const list[], uint16_t *index_ptr, 
                                uint16_t function_id, Ucs_OpType_t op_type)
{
    uint16_t     fktop;
    uint16_t     i       = 0U;
    Dec_Return_t ret_val = DEC_RET_FKTID_NOT_FOUND;
    bool         loop    = true;

    fktop = DEC_FKTOP(function_id, op_type);
    *index_ptr = 0U;

    while ((list[i].handler_function_ptr != NULL)  && (loop != false))
    {
        if(list[i].fkt_op == fktop)
        {
            ret_val = DEC_RET_SUCCESS;
            *index_ptr = i;
            loop = false;
        }
        else if (list[i].fkt_op > fktop)
        {
            loop = false;
        }
        else
        {
            i++;
        }
    }

    return ret_val;
}

/*! \brief  Search in a FktOp table for matching FktID and OPType. This function is used for
 *          MCM messages coming from FBlocks inside the INIC.
 *  \param   list            FktOp table
 *  \param   index_ptr       Reference to array index of the matching array element
 *  \param   function_id     FktID
 *  \param   op_type         OPType
 *  \return  DEC_RET_SUCCESS                 Decoding was successful
 *           DEC_RET_FKTID_NOT_FOUND         FktID/OPType not found
 */
Dec_Return_t Dec_SearchFktOpIsh(Dec_FktOpIsh_t const list[], uint16_t *index_ptr, 
                                uint16_t function_id, Ucs_OpType_t op_type)
{
    uint16_t     fktop;
    uint16_t     i       = 0U;
    Dec_Return_t ret_val = DEC_RET_FKTID_NOT_FOUND;
    bool         loop    = true;

    fktop = DEC_FKTOP(function_id, op_type);
    *index_ptr = 0U;

    while ((list[i].handler_function_ptr != NULL)  && (loop != false))
    {
        if(list[i].fkt_op == fktop)
        {
            ret_val = DEC_RET_SUCCESS;
            *index_ptr = i;
            loop = false;
        }
        else if (list[i].fkt_op > fktop)
        {
            loop = false;
        }
        else
        {
            i++;
        }
    }

    return ret_val;
}

/*!
 * @}
 * \endcond
 */

/*------------------------------------------------------------------------------------------------*/
/* End of file                                                                                    */
/*------------------------------------------------------------------------------------------------*/