summaryrefslogtreecommitdiffstats
path: root/positioning/server/src/Sensor/GpsInt.cpp
blob: a23cc3eb131d6289addd0afc9c5cd1c23ea6c4b1 (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
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
/*
 * @copyright Copyright (c) 2016-2019 TOYOTA MOTOR CORPORATION.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

/*******************************************************************************
 *  File name        :GpsInt.cpp
 *  System name        :PastModel002
 *  Subsystem name    :GPS interrupt thread
 ******************************************************************************/

/*******************************************************************************
* Include File
*******************************************************************************/
#include <vehicle_service/positioning_base_library.h>
#include "POS_private.h"
#include "GpsInt.h"

#define RD_REG32(reg) \
            (*(volatile ULONG * const)(reg))

#define     COMREGMSK_OR    1
#define     ALLINTMASK      0x0f

#ifdef __cplusplus
extern "C" {
#endif
void    com_regmsk_dword(ULONG *, ULONG, UCHAR, UCHAR);    // NOLINT(readability/nolint)
#ifdef __cplusplus
}
#endif

/*******************************************************************************
* Define
*******************************************************************************/
#define GPS_INT_THREAD_DEBUG_SWITCH                    0    /* 0:OFF 1:ON */

/*******************************************************************************
* Global Parameter
*******************************************************************************/
GPS_INT_DATA    g_gps_int_data;

/*******************************************************************************
* Module
*******************************************************************************/
/*******************************************************************************
 * MODULE    : DEVGpsIntUnMapDevice
 * ABSTRACT  : Register mapping release processing
 * FUNCTION  : Release the register mapping
 * ARGUMENT  : None
 * NOTE      :
 * RETURN    : None
 ******************************************************************************/
void DEVGpsIntUnMapDevice(void) {
    /* Release GPIO Register Mapping */
    if ((g_gps_int_data.irq_status_reg        != 0)
        || (g_gps_int_data.irq_status_set_reg  != 0)
        || (g_gps_int_data.rising_detect_reg  != 0)) {
        /* When GPIO registers are mapped */
        /* #QAC confirmation Rule11.3 Data Size Equivalent (4Byte),No problem due to unsigned relation */
        MunMapDeviceIo((HANDLE)g_gps_int_data.irq_status_reg, sizeof(g_gps_int_data.irq_status_reg));
        /* #QAC confirmation Rule11.3 Data Size Equivalent (4Byte),No problem due to unsigned relation */
        MunMapDeviceIo((HANDLE)g_gps_int_data.irq_status_set_reg, sizeof(g_gps_int_data.irq_status_set_reg));
        /* #QAC confirmation Rule11.3 Data Size Equivalent (4Byte),No problem due to unsigned relation */
        MunMapDeviceIo((HANDLE)g_gps_int_data.rising_detect_reg, sizeof(g_gps_int_data.rising_detect_reg));

        g_gps_int_data.irq_status_reg        = 0;
        g_gps_int_data.irq_status_set_reg    = 0;
        g_gps_int_data.rising_detect_reg    = 0;
    }
}

/*******************************************************************************
 * MODULE    : DEVGpsIntSetInterupt
 * ABSTRACT  : GPS interrupt setting
 * FUNCTION  : Setting GPS Interrupt
 * ARGUMENT  : None
 * NOTE      :
 * RETURN    : TRUE        : Interrupt setting success
 *           : FALSE    : Interrupt setting failure
 ******************************************************************************/
void DEVGpsIntSetInterupt(void) {
#if GPS_INT_THREAD_DEBUG_SWITCH
    /* Dummy read */
    itr_ret = RD_REG32(g_gps_int_data.irq_status_set_reg);

    FRAMEWORKUNIFIEDLOG(ZONE_INFO, __FUNCTION__, "GpsInt.cpp, IRQSTATUS_SET reg value(before) = 0x%08X ", itr_ret);
#endif

    /* GPS interrupt Enable setting */
    /* Dummy read */
    /* #QAC confirmation Rule11.3 Data Size Equivalent (4Byte),No problem due to unsigned relation */
    (void)RD_REG32(g_gps_int_data.irq_status_set_reg);

#if GPS_INT_THREAD_DEBUG_SWITCH
    FRAMEWORKUNIFIEDLOG(ZONE_INFO, __FUNCTION__, "GpsInt.cpp, IRQSTATUS_SET reg value(after) = 0x%08X ", itr_ret);
#endif



#if GPS_INT_THREAD_DEBUG_SWITCH
    /* Dummy read */
    itr_ret = RD_REG32(g_gps_int_data.rising_detect_reg);

    FRAMEWORKUNIFIEDLOG(ZONE_INFO, __FUNCTION__, "GpsInt.cpp, RISINGDETECT reg value(before) = 0x%08X ", itr_ret);
#endif

    /* GPS Interrupt Detection Method Setting */
    /* #QAC confirmation Rule11.3 Data Size Equivalent (4Byte),No problem due to unsigned relation */
    com_regmsk_dword(reinterpret_cast<ULONG *>(g_gps_int_data.rising_detect_reg), \
        GPS_MASK_6BIT, COMREGMSK_OR, ALLINTMASK);

    /* Dummy read */
    /* #QAC confirmation Rule11.3 Data Size Equivalent (4Byte),No problem due to unsigned relation */
    (void)RD_REG32(g_gps_int_data.rising_detect_reg);

#if GPS_INT_THREAD_DEBUG_SWITCH
    FRAMEWORKUNIFIEDLOG(ZONE_INFO, __FUNCTION__, "GpsInt.cpp, RISINGDETECT reg value(after)  = 0x%08X ", itr_ret);
#endif
}

/*******************************************************************************
 * MODULE    : DEVGpsIntIntRegClear
 * ABSTRACT  : Interrupt cause register clear processing
 * FUNCTION  : Clear the interrupt cause register
 * ARGUMENT  : None
 * NOTE      :
 * RETURN    : None
 ******************************************************************************/
void DEVGpsIntIntRegClear(void) {
#if GPS_INT_THREAD_DEBUG_SWITCH
    /* Dummy read */
    itr_ret = RD_REG32(g_gps_int_data.irq_status_reg);

    FRAMEWORKUNIFIEDLOG(ZONE_INFO, __FUNCTION__, "GpsInt.cpp, IRQSTATUS reg value(before) = 0x%08X ", itr_ret);
#endif

    /* Clear Interrupt Source Register */
    /* Dummy read */
    /* #QAC confirmation Rule11.3 Data Size Equivalent (4Byte),No problem due to unsigned relation */
    (void)RD_REG32(g_gps_int_data.irq_status_reg);

#if GPS_INT_THREAD_DEBUG_SWITCH
    FRAMEWORKUNIFIEDLOG(ZONE_INFO, __FUNCTION__, "GpsInt.cpp, IRQSTATUS reg value(after)  = 0x%08X ", itr_ret);
#endif
}

/*******************************************************************************
 * MODULE    : DEVGpsIntSndMsg
 * ABSTRACT  : Send GPS interrupt occurrence notification
 * FUNCTION  : Notify GPS communication management that an interrupt has occurred.
 * ARGUMENT  : None
 * NOTE      :
 * RETURN    : RET_NORMAL    : Normal completion
 *           : Other than the above        : Processing error
 ******************************************************************************/
RET_API DEVGpsIntSndMsg(void) {
    return RET_NORMAL;
}