hc
2024-02-20 e636c8d336489bf3eed5878299e6cc045bbad077
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
/*
 *  MCube mc3230 acceleration sensor driver
 *
 *  Copyright (C) 2011 MCube Inc.,
 *
 *  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.
 *
 * *****************************************************************************/
 
#ifndef MC3230_H
#define MC3230_H
 
#include <linux/ioctl.h>
 
#define MC3230_REG_CHIP_ID         0x18
#define MC3230_REG_X_OUT            0x0 //RO
#define MC3230_REG_Y_OUT            0x1 //RO
#define MC3230_REG_Z_OUT            0x2 //RO
#define MC3230_REG_STAT             0x04
#define MC3230_REG_SLEEP_COUNTER 0x05
#define MC3230_REG_INTMOD            0x06
#define MC3230_REG_SYSMOD            0x07
#define MC3230_REG_RATE_SAMP         0x08
 
#define MC32X0_XOUT_EX_L_REG                0x0d
 
#define MC3230_REG_RBM_DATA        0x0D
#define MC3230_REG_PRODUCT_CODE    0x3b
 
 
 
 
 
#define MCIO                0xA1
 
#define RBUFF_SIZE        12    /* Rx buffer size */
/* IOCTLs for MC3230 library */
#define MC_IOCTL_INIT                  _IO(MCIO, 0x01)
#define MC_IOCTL_RESET                    _IO(MCIO, 0x04)
#define MC_IOCTL_CLOSE                   _IO(MCIO, 0x02)
#define MC_IOCTL_START                     _IO(MCIO, 0x03)
#define MC_IOCTL_GETDATA               _IOR(MCIO, 0x08, char[RBUFF_SIZE+1])
 
/* IOCTLs for APPs */
#define MC_IOCTL_APP_SET_RATE        _IOW(MCIO, 0x10, char)
 
#if 0
/*wake mode rate Samples/Second (0~2)*/
#define MC3230_RATE_128          0
#define MC3230_RATE_64          1
#define MC3230_RATE_32         2
#define MC3230_RATE_16         3
#define MC3230_RATE_8             4
#define MC3230_RATE_4         5
#define MC3230_RATE_2         6
#define MC3230_RATE_1         7
#endif
 
/*sniffr mode rate Samples/Second (3~4)*/
#define MC3230_SNIFFR_RATE_32        0
#define MC3230_SNIFFR_RATE_16        1
#define MC3230_SNIFFR_RATE_8        2
#define MC3230_SNIFFR_RATE_1        3
#define MC3230_SNIFFR_RATE_SHIFT    3
 
//#define ACTIVE_MASK                1
//#define FREAD_MASK                2
 
 
/*status*/
#define MC3230_OPEN           1
#define MC3230_CLOSE          0
 
#define MC3230_RANGE        1500000
#define MC3230_IIC_ADDR       0x4c 
#define MC3230_PRECISION       8 //8bit data
#define MC3230_BOUNDARY        (0x1 << (MC3230_PRECISION - 1))
#define MC3230_GRAVITY_STEP   MC3230_RANGE/MC3230_BOUNDARY //110 //2g full scale range
 
 
struct mc3230_axis {
   int x;
   int y;
   int z;
};
 
//#define  GSENSOR_DEV_PATH    "/dev/mma8452_daemon"
 
 
 
//add accel calibrate IO
typedef struct {
   unsigned short    x;        /**< X axis */
   unsigned short    y;        /**< Y axis */
   unsigned short    z;        /**< Z axis */
} GSENSOR_VECTOR3D;
 
typedef struct{
   int x;
   int y;
   int z;
}SENSOR_DATA;
//=========================================add by guanj============================
struct mc3230_platform_data {
   u16     model;
   u16     swap_xy;
   u16     swap_xyz;
   signed char orientation[9];
   int     (*get_pendown_state)(void);
   int     (*init_platform_hw)(void);
   int     (*mc3230_platform_sleep)(void);
   int     (*mc3230_platform_wakeup)(void);
   void    (*exit_platform_hw)(void);
};
 
#define GSENSOR                               0x85
//#define GSENSOR_IOCTL_INIT                  _IO(GSENSOR,  0x01)
#define GSENSOR_IOCTL_READ_CHIPINFO         _IOR(GSENSOR, 0x02, int)
#define GSENSOR_IOCTL_READ_SENSORDATA       _IOR(GSENSOR, 0x03, int)
#define GSENSOR_IOCTL_READ_OFFSET            _IOR(GSENSOR, 0x04, GSENSOR_VECTOR3D)
#define GSENSOR_IOCTL_READ_GAIN                _IOR(GSENSOR, 0x05, GSENSOR_VECTOR3D)
#define GSENSOR_IOCTL_READ_RAW_DATA            _IOR(GSENSOR, 0x06, int)
#define GSENSOR_IOCTL_SET_CALI                _IOW(GSENSOR, 0x06, SENSOR_DATA)
#define GSENSOR_IOCTL_GET_CALI                _IOW(GSENSOR, 0x07, SENSOR_DATA)
#define GSENSOR_IOCTL_CLR_CALI                _IO(GSENSOR, 0x08)
#define GSENSOR_MCUBE_IOCTL_READ_RBM_DATA        _IOR(GSENSOR, 0x09, SENSOR_DATA)
#define GSENSOR_MCUBE_IOCTL_SET_RBM_MODE        _IO(GSENSOR, 0x0a)
#define GSENSOR_MCUBE_IOCTL_CLEAR_RBM_MODE        _IO(GSENSOR, 0x0b)
#define GSENSOR_MCUBE_IOCTL_SET_CALI            _IOW(GSENSOR, 0x0c, SENSOR_DATA)
#define GSENSOR_MCUBE_IOCTL_REGISTER_MAP        _IO(GSENSOR, 0x0d)
#define GSENSOR_IOCTL_SET_CALI_MODE               _IOW(GSENSOR, 0x0e,int)
 
 
 
 
/* IOCTLs for Msensor misc. device library */
#define MSENSOR                           0x83
#define MSENSOR_IOCTL_INIT                    _IO(MSENSOR, 0x01)
#define MSENSOR_IOCTL_READ_CHIPINFO            _IOR(MSENSOR, 0x02, int)
#define MSENSOR_IOCTL_READ_SENSORDATA        _IOR(MSENSOR, 0x03, int)
#define MSENSOR_IOCTL_READ_POSTUREDATA        _IOR(MSENSOR, 0x04, int)
#define MSENSOR_IOCTL_READ_CALIDATA            _IOR(MSENSOR, 0x05, int)
#define MSENSOR_IOCTL_READ_CONTROL            _IOR(MSENSOR, 0x06, int)
#define MSENSOR_IOCTL_SET_CONTROL            _IOW(MSENSOR, 0x07, int)
#define MSENSOR_IOCTL_SET_MODE               _IOW(MSENSOR, 0x08, int)
#define MSENSOR_IOCTL_SET_POSTURE            _IOW(MSENSOR, 0x09, int)
#define MSENSOR_IOCTL_SET_CALIDATA               _IOW(MSENSOR, 0x0a, int)
#define MSENSOR_IOCTL_SENSOR_ENABLE         _IOW(MSENSOR, 0x51, int)
#define MSENSOR_IOCTL_READ_FACTORY_SENSORDATA  _IOW(MSENSOR, 0x52, int)
 
 
#if 0
/* IOCTLs for AKM library */
#define ECS_IOCTL_WRITE                 _IOW(MSENSOR, 0x0b, char*)
#define ECS_IOCTL_READ                  _IOWR(MSENSOR, 0x0c, char*)
#define ECS_IOCTL_RESET                  _IO(MSENSOR, 0x0d) /* NOT used in AK8975 */
#define ECS_IOCTL_SET_MODE              _IOW(MSENSOR, 0x0e, short)
#define ECS_IOCTL_GETDATA               _IOR(MSENSOR, 0x0f, char[SENSOR_DATA_SIZE])
#define ECS_IOCTL_SET_YPR               _IOW(MSENSOR, 0x10, short[12])
#define ECS_IOCTL_GET_OPEN_STATUS       _IOR(MSENSOR, 0x11, int)
#define ECS_IOCTL_GET_CLOSE_STATUS      _IOR(MSENSOR, 0x12, int)
#define ECS_IOCTL_GET_OSENSOR_STATUS    _IOR(MSENSOR, 0x13, int)
#define ECS_IOCTL_GET_DELAY             _IOR(MSENSOR, 0x14, short)
#define ECS_IOCTL_GET_PROJECT_NAME      _IOR(MSENSOR, 0x15, char[64])
#define ECS_IOCTL_GET_MATRIX            _IOR(MSENSOR, 0x16, short [4][3][3])
#define    ECS_IOCTL_GET_LAYOUT            _IOR(MSENSOR, 0x17, int[3])
#endif
#define ECS_IOCTL_GET_OUTBIT            _IOR(MSENSOR, 0x23, char)
#define ECS_IOCTL_GET_ACCEL             _IOR(MSENSOR, 0x24, short[3])
#define MMC31XX_IOC_RM                    _IO(MSENSOR, 0x25)
#define MMC31XX_IOC_RRM                    _IO(MSENSOR, 0x26)
 
 
 
/* IOCTLs for MMC31XX device */
#define MMC31XX_IOC_TM                    _IO(MSENSOR, 0x18)
#define MMC31XX_IOC_SET                    _IO(MSENSOR, 0x19)
#define MMC31XX_IOC_RESET                _IO(MSENSOR, 0x1a)
#define MMC31XX_IOC_READ                _IOR(MSENSOR, 0x1b, int[3])
#define MMC31XX_IOC_READXYZ                _IOR(MSENSOR, 0x1c, int[3])
 
#define ECOMPASS_IOC_GET_DELAY            _IOR(MSENSOR, 0x1d, int)
#define ECOMPASS_IOC_GET_MFLAG            _IOR(MSENSOR, 0x1e, short)
#define    ECOMPASS_IOC_GET_OFLAG            _IOR(MSENSOR, 0x1f, short)
#define ECOMPASS_IOC_GET_OPEN_STATUS    _IOR(MSENSOR, 0x20, int)
#define ECOMPASS_IOC_SET_YPR            _IOW(MSENSOR, 0x21, int[12])
#define ECOMPASS_IOC_GET_LAYOUT            _IOR(MSENSOR, 0X22, int)
 
 
 
 
#define ALSPS                            0X84
#define ALSPS_SET_PS_MODE                    _IOW(ALSPS, 0x01, int)
#define ALSPS_GET_PS_MODE                    _IOR(ALSPS, 0x02, int)
#define ALSPS_GET_PS_DATA                    _IOR(ALSPS, 0x03, int)
#define ALSPS_GET_PS_RAW_DATA                _IOR(ALSPS, 0x04, int)
#define ALSPS_SET_ALS_MODE                    _IOW(ALSPS, 0x05, int)
#define ALSPS_GET_ALS_MODE                    _IOR(ALSPS, 0x06, int)
#define ALSPS_GET_ALS_DATA                    _IOR(ALSPS, 0x07, int)
#define ALSPS_GET_ALS_RAW_DATA               _IOR(ALSPS, 0x08, int)
 
#define GYROSCOPE                            0X86
#define GYROSCOPE_IOCTL_INIT                    _IO(GYROSCOPE, 0x01)
#define GYROSCOPE_IOCTL_SMT_DATA            _IOR(GYROSCOPE, 0x02, int)
#define GYROSCOPE_IOCTL_READ_SENSORDATA        _IOR(GYROSCOPE, 0x03, int)
#define GYROSCOPE_IOCTL_SET_CALI            _IOW(GYROSCOPE, 0x04, SENSOR_DATA)
#define GYROSCOPE_IOCTL_GET_CALI            _IOW(GYROSCOPE, 0x05, SENSOR_DATA)
#define GYROSCOPE_IOCTL_CLR_CALI            _IO(GYROSCOPE, 0x06)
 
#define BROMETER                            0X87
#define BAROMETER_IOCTL_INIT                _IO(BROMETER, 0x01)
#define BAROMETER_GET_PRESS_DATA            _IOR(BROMETER, 0x02, int)
#define BAROMETER_GET_TEMP_DATA                _IOR(BROMETER, 0x03, int)
#define BAROMETER_IOCTL_READ_CHIPINFO        _IOR(BROMETER, 0x04, int)
 
extern long mc3230_ioctl( struct file *file, unsigned int cmd,unsigned long arg,struct i2c_client *client);
#endif