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
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
|
/******************************************************************************
* LEGAL NOTICE *
* *
* USE OF THIS SOFTWARE (including any copy or compiled version thereof) AND *
* DOCUMENTATION IS SUBJECT TO THE SOFTWARE LICENSE AND RESTRICTIONS AND THE *
* WARRANTY DISLCAIMER SET FORTH IN LEGAL_NOTICE.TXT FILE. IF YOU DO NOT *
* FULLY ACCEPT THE TERMS, YOU MAY NOT INSTALL OR OTHERWISE USE THE SOFTWARE *
* OR DOCUMENTATION. *
* NOTWITHSTANDING ANYTHING TO THE CONTRARY IN THIS NOTICE, INSTALLING OR *
* OTHERISE USING THE SOFTWARE OR DOCUMENTATION INDICATES YOUR ACCEPTANCE OF *
* THE LICENSE TERMS AS STATED. *
* *
******************************************************************************/
/* Version: 1.8.9\3686 */
/* Build : 13 */
/* Date : 12/08/2012 */
/**
\file
\brief CellGuide CGX5900 driver core prototypes (non-OS depended)
\attention This file should not be modified.
If you think something is wrong here, please contact CellGuide
*/
#ifndef CGX_DRIVR_CORE_H
#define CGX_DRIVR_CORE_H
#include "CgReturnCodes.h"
#include "CgxDriverApi.h"
#define CG_CG_CORE_REG_BASE_ADDRESS (0)
/**
Stop driver.
The function is called as a result of GPSenseEngine CGX_IOCTL_STOP request.
Stop the driver current operations, destroy all memory structures and release system resources.
this function is the counterpart of CgxDriverConstruct.
\note Generic function : Not required to be ported
\param[in] pDriver Global driver structure pointer
\return System wide return code (see CgReturnCodes.h)
\retval ECgOk if data ready is 0 (low active)
*/
TCgReturnCode CgxDriverDestroy(
void *pDriver);
/**
Setup driver structure
\param[in] pDriver Global driver structure pointer
\param[in] pState Driver state structure pointer
\return System wide return code (see CgReturnCodes.h)
\retval ECgOk if data ready is 0 (low active)
*/
TCgReturnCode CgxDriverConstruct(
void *pDriver,
TCgxDriverState *pState);
/**
Execute request
\param[in] pDriver Global driver structure pointer
\param[in] pState Driver state structure pointer
\param[in] aRequest
\param[in] pControl
\param[in] pResults
\return System wide return code (see CgReturnCodes.h)
\retval ECgOk if data ready is 0 (low active)
*/
TCgReturnCode CgxDriverExecute(
void *pDriver,
TCgxDriverState *pState,
U32 aRequest,
TCgDriverControl *pControl,
TCgDriverStatus *pResults);
/**
Execute request, specific to IP/Core
\param[in] pDriver Global driver structure pointer
\param[in] pState Driver state structure pointer
\param[in] aRequest
\param[in] pControl
\param[in] pResults
\return System wide return code (see CgReturnCodes.h)
\retval ECgOk if data ready is 0 (low active)
*/
TCgReturnCode CgxDriverExecuteSpecific(
void *pDriver,
TCgxDriverState *pState,
U32 aRequest,
TCgDriverControl *pControl,
TCgDriverStatus *pResults);
/**
Check if request canceled
\param[in] pState Driver state structure pointer
\return System wide return code (see CgReturnCodes.h)
\retval ECgOk if data ready is 0 (low active)
*/
TCgReturnCode CgxDriverIsReadCanceled(TCgxDriverState *pState);
/**
Handle GPS interrupt
\param[in] pDriver Global driver structure pointer
\param[in] pState Driver state structure pointer
\return System wide return code (see CgReturnCodes.h)
\retval ECgOk if data ready is 0 (low active)
*/
TCgReturnCode CgxDriverGpsInterruptHandler(
void *pDriver,
TCgxDriverState *pState);
/**
Handle DMA interrupt
\param[in] pDriver Global driver structure pointer
\param[in] pState Driver state structure pointer
\return System wide return code (see CgReturnCodes.h)
\retval ECgOk if data ready is 0 (low active)
*/
TCgReturnCode CgxDriverDataReadyInterruptHandler(
void *pDriver,
TCgxDriverState *pState);
TCgReturnCode CgxDriverHardwareReset(unsigned long aResetLevel);
/**
Move chip to power down mode
\return System wide return code (see CgReturnCodes.h)
\retval ECgOk if chip finished power-down
*/
TCgReturnCode CgxDriverPowerDown(void);
/**
Move chip to power up mode
\return System wide return code (see CgReturnCodes.h)
\retval ECgOk if chip finished power-down
*/
TCgReturnCode CgxDriverPowerUp(void);
/**
Cut power from the CellGuide device
\return System wide return code (see CgReturnCodes.h)
\retval ECgOk if chip finished power-down
*/
TCgReturnCode CgxDriverPowerOn(void);
/**
Connect power to the CellGuide device
\return System wide return code (see CgReturnCodes.h)
\retval ECgOk if chip finished power-down
*/
TCgReturnCode CgxDriverPowerOff(void);
/**
Move RF chip to power down mode
\return System wide return code (see CgReturnCodes.h)
\retval ECgOk if RF chip finished power-down
*/
TCgReturnCode CgxDriverRFPowerDown(void);
/**
Move RF chip to power down mode
\return System wide return code (see CgReturnCodes.h)
\retval ECgOk if RF chip finished power-up
*/
TCgReturnCode CgxDriverRFPowerUp(void);
/**
Set output of CGsnap's GPO aGpioPin, to aVal
\return System wide return code (see CgReturnCodes.h)
*/
TCgReturnCode CgCGCoreGpioSet(U32 aGpioPin, U32 aVal);
#if 0
//gaole add
void CgCoreReleaseRes(void);
void CgGpsReset(void);
#endif
#ifndef MIN
#define MIN(__a__, __b__) ((__a__) < (__b__) ? (__a__) : (__b__))
#endif
//#define CGCORE_ACCESS_VIA_SPI
extern bool flag_power_up;
extern void gps_gpio_request(void);
#ifdef CGCORE_ACCESS_VIA_SPI
extern int gps_spi_sysreg_write_bytes (u32 len, u32 addr, u32 data);
extern int gps_spi_sysreg_read_bytes (u32 len, u32 addr, u32 * data);
extern int gps_spi_write_bytes( unsigned int len, unsigned int addr,unsigned int data);
#define CGCORE_WRITE_REG(addr,val) \
gps_spi_write_bytes(1,(U32)addr,val)
extern int gps_spi_read_bytes( unsigned int len,unsigned int addr,unsigned int *data);
#define CGCORE_READ_REG(addr,val) \
gps_spi_read_bytes(1,(U32)addr,(unsigned int *)val)
#else
#define CGCORE_WRITE_REG(addr,val) CgxCpuWriteMemory((U32)CG_DRIVER_CGCORE_BASE_VA, (U32)addr, val);
#define CGCORE_READ_REG(addr,val) CgxCpuReadMemory((U32)CG_DRIVER_CGCORE_BASE_VA, (U32)addr, val);
#endif
#endif
|