vlx lib
common_driver.cpp@0:bc9f26b5dadf, 2015-02-08 (annotated)
- Committer:
- vijaynvr
- Date:
- Sun Feb 08 14:26:51 2015 +0000
- Revision:
- 0:bc9f26b5dadf
working
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
vijaynvr | 0:bc9f26b5dadf | 1 | /******************************************************************************* |
vijaynvr | 0:bc9f26b5dadf | 2 | ################################################################################ |
vijaynvr | 0:bc9f26b5dadf | 3 | # (C) STMicroelectronics 2014 |
vijaynvr | 0:bc9f26b5dadf | 4 | # |
vijaynvr | 0:bc9f26b5dadf | 5 | # This program is free software; you can redistribute it and/or modify it under |
vijaynvr | 0:bc9f26b5dadf | 6 | # the terms of the GNU General Public License version 2 and only version 2 as |
vijaynvr | 0:bc9f26b5dadf | 7 | # published by the Free Software Foundation. |
vijaynvr | 0:bc9f26b5dadf | 8 | # |
vijaynvr | 0:bc9f26b5dadf | 9 | # This program is distributed in the hope that it will be useful, but WITHOUT |
vijaynvr | 0:bc9f26b5dadf | 10 | # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS |
vijaynvr | 0:bc9f26b5dadf | 11 | # FOR A PARTICULAR PURPOSE. See the GNU General Public License for more |
vijaynvr | 0:bc9f26b5dadf | 12 | # details. |
vijaynvr | 0:bc9f26b5dadf | 13 | # |
vijaynvr | 0:bc9f26b5dadf | 14 | # You should have received a copy of the GNU General Public License along with |
vijaynvr | 0:bc9f26b5dadf | 15 | # this program; if not, write to the Free Software Foundation, Inc., |
vijaynvr | 0:bc9f26b5dadf | 16 | # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. |
vijaynvr | 0:bc9f26b5dadf | 17 | # |
vijaynvr | 0:bc9f26b5dadf | 18 | #------------------------------------------------------------------------------ |
vijaynvr | 0:bc9f26b5dadf | 19 | # Imaging Division |
vijaynvr | 0:bc9f26b5dadf | 20 | ################################################################################ |
vijaynvr | 0:bc9f26b5dadf | 21 | ********************************************************************************/ |
vijaynvr | 0:bc9f26b5dadf | 22 | |
vijaynvr | 0:bc9f26b5dadf | 23 | /* |
vijaynvr | 0:bc9f26b5dadf | 24 | ''' |
vijaynvr | 0:bc9f26b5dadf | 25 | Application-level methods used for generic, system or identification operations. |
vijaynvr | 0:bc9f26b5dadf | 26 | ''' |
vijaynvr | 0:bc9f26b5dadf | 27 | */ |
vijaynvr | 0:bc9f26b5dadf | 28 | |
vijaynvr | 0:bc9f26b5dadf | 29 | //----------------------------------------------------------------------------- |
vijaynvr | 0:bc9f26b5dadf | 30 | // module imports |
vijaynvr | 0:bc9f26b5dadf | 31 | //----------------------------------------------------------------------------- |
vijaynvr | 0:bc9f26b5dadf | 32 | #include "debug.h" |
vijaynvr | 0:bc9f26b5dadf | 33 | #include "common_driver.h" |
vijaynvr | 0:bc9f26b5dadf | 34 | #include "ranging_driver.h" |
vijaynvr | 0:bc9f26b5dadf | 35 | |
vijaynvr | 0:bc9f26b5dadf | 36 | //----------------------------------------------------------------------------- |
vijaynvr | 0:bc9f26b5dadf | 37 | // global variable declarations |
vijaynvr | 0:bc9f26b5dadf | 38 | //----------------------------------------------------------------------------- |
vijaynvr | 0:bc9f26b5dadf | 39 | |
vijaynvr | 0:bc9f26b5dadf | 40 | //----------------------------------------------------------------------------- |
vijaynvr | 0:bc9f26b5dadf | 41 | // method definitions |
vijaynvr | 0:bc9f26b5dadf | 42 | //----------------------------------------------------------------------------- |
vijaynvr | 0:bc9f26b5dadf | 43 | |
vijaynvr | 0:bc9f26b5dadf | 44 | sensor_error common_initialise(uint8_t device_base_address) |
vijaynvr | 0:bc9f26b5dadf | 45 | { |
vijaynvr | 0:bc9f26b5dadf | 46 | |
vijaynvr | 0:bc9f26b5dadf | 47 | LOG_FUNCTION_START((void*)&device_base_address); |
vijaynvr | 0:bc9f26b5dadf | 48 | |
vijaynvr | 0:bc9f26b5dadf | 49 | i2c_initialise(device_base_address); |
vijaynvr | 0:bc9f26b5dadf | 50 | |
vijaynvr | 0:bc9f26b5dadf | 51 | LOG_FUNCTION_END(NULL); |
vijaynvr | 0:bc9f26b5dadf | 52 | |
vijaynvr | 0:bc9f26b5dadf | 53 | return SENSOR_ERROR_NONE; |
vijaynvr | 0:bc9f26b5dadf | 54 | } |
vijaynvr | 0:bc9f26b5dadf | 55 | |
vijaynvr | 0:bc9f26b5dadf | 56 | sensor_error common_set_static_config(uint8_t device_base_address) |
vijaynvr | 0:bc9f26b5dadf | 57 | { |
vijaynvr | 0:bc9f26b5dadf | 58 | int8_t reset; |
vijaynvr | 0:bc9f26b5dadf | 59 | |
vijaynvr | 0:bc9f26b5dadf | 60 | LOG_FUNCTION_START((void*)&device_base_address); |
vijaynvr | 0:bc9f26b5dadf | 61 | reset = i2c_read_byte(0x016, device_base_address); |
vijaynvr | 0:bc9f26b5dadf | 62 | if (reset==1) |
vijaynvr | 0:bc9f26b5dadf | 63 | { |
vijaynvr | 0:bc9f26b5dadf | 64 | // check to see has it be Initialised already |
vijaynvr | 0:bc9f26b5dadf | 65 | //REGISTER_TUNING_SR03_270514_CustomerView.txt |
vijaynvr | 0:bc9f26b5dadf | 66 | |
vijaynvr | 0:bc9f26b5dadf | 67 | // Mandatory : private registers |
vijaynvr | 0:bc9f26b5dadf | 68 | i2c_write_byte(0x0207, 0x01, device_base_address); |
vijaynvr | 0:bc9f26b5dadf | 69 | i2c_write_byte(0x0208, 0x01, device_base_address); |
vijaynvr | 0:bc9f26b5dadf | 70 | i2c_write_byte(0x0096, 0x00, device_base_address); |
vijaynvr | 0:bc9f26b5dadf | 71 | i2c_write_byte(0x0097, 0xfd, device_base_address); |
vijaynvr | 0:bc9f26b5dadf | 72 | i2c_write_byte(0x00e3, 0x00, device_base_address); |
vijaynvr | 0:bc9f26b5dadf | 73 | i2c_write_byte(0x00e4, 0x04, device_base_address); |
vijaynvr | 0:bc9f26b5dadf | 74 | i2c_write_byte(0x00e5, 0x02, device_base_address); |
vijaynvr | 0:bc9f26b5dadf | 75 | i2c_write_byte(0x00e6, 0x01, device_base_address); |
vijaynvr | 0:bc9f26b5dadf | 76 | i2c_write_byte(0x00e7, 0x03, device_base_address); |
vijaynvr | 0:bc9f26b5dadf | 77 | i2c_write_byte(0x00f5, 0x02, device_base_address); |
vijaynvr | 0:bc9f26b5dadf | 78 | i2c_write_byte(0x00d9, 0x05, device_base_address); |
vijaynvr | 0:bc9f26b5dadf | 79 | i2c_write_byte(0x00db, 0xce, device_base_address); |
vijaynvr | 0:bc9f26b5dadf | 80 | i2c_write_byte(0x00dc, 0x03, device_base_address); |
vijaynvr | 0:bc9f26b5dadf | 81 | i2c_write_byte(0x00dd, 0xf8, device_base_address); |
vijaynvr | 0:bc9f26b5dadf | 82 | i2c_write_byte(0x009f, 0x00, device_base_address); |
vijaynvr | 0:bc9f26b5dadf | 83 | i2c_write_byte(0x00a3, 0x3c, device_base_address); |
vijaynvr | 0:bc9f26b5dadf | 84 | i2c_write_byte(0x00b7, 0x00, device_base_address); |
vijaynvr | 0:bc9f26b5dadf | 85 | i2c_write_byte(0x00bb, 0x3c, device_base_address); |
vijaynvr | 0:bc9f26b5dadf | 86 | i2c_write_byte(0x00b2, 0x09, device_base_address); |
vijaynvr | 0:bc9f26b5dadf | 87 | i2c_write_byte(0x00ca, 0x09, device_base_address); |
vijaynvr | 0:bc9f26b5dadf | 88 | i2c_write_byte(0x0198, 0x01, device_base_address); |
vijaynvr | 0:bc9f26b5dadf | 89 | i2c_write_byte(0x01b0, 0x17, device_base_address); |
vijaynvr | 0:bc9f26b5dadf | 90 | i2c_write_byte(0x01ad, 0x00, device_base_address); |
vijaynvr | 0:bc9f26b5dadf | 91 | i2c_write_byte(0x00ff, 0x05, device_base_address); |
vijaynvr | 0:bc9f26b5dadf | 92 | i2c_write_byte(0x0100, 0x05, device_base_address); |
vijaynvr | 0:bc9f26b5dadf | 93 | i2c_write_byte(0x0199, 0x05, device_base_address); |
vijaynvr | 0:bc9f26b5dadf | 94 | i2c_write_byte(0x01a6, 0x1b, device_base_address); |
vijaynvr | 0:bc9f26b5dadf | 95 | i2c_write_byte(0x01ac, 0x3e, device_base_address); |
vijaynvr | 0:bc9f26b5dadf | 96 | i2c_write_byte(0x01a7, 0x1f, device_base_address); |
vijaynvr | 0:bc9f26b5dadf | 97 | i2c_write_byte(0x0030, 0x00, device_base_address); |
vijaynvr | 0:bc9f26b5dadf | 98 | |
vijaynvr | 0:bc9f26b5dadf | 99 | // Recommended : Public registers - See data sheet for more detail |
vijaynvr | 0:bc9f26b5dadf | 100 | i2c_write_byte(0x0011, 0x10, device_base_address); // Enables polling for ¡®New Sample ready¡¯ when measurement completes |
vijaynvr | 0:bc9f26b5dadf | 101 | i2c_write_byte(0x010a, 0x30, device_base_address); // Set the averaging sample period (compromise between lower noise and increased execution time) |
vijaynvr | 0:bc9f26b5dadf | 102 | i2c_write_byte(0x003f, 0x46, device_base_address); // Sets the light and dark gain (upper nibble). Dark gain should not be changed. |
vijaynvr | 0:bc9f26b5dadf | 103 | i2c_write_byte(0x0031, 0xFF, device_base_address); // sets the # of range measurements after which auto calibration of system is performed |
vijaynvr | 0:bc9f26b5dadf | 104 | i2c_write_byte(0x0040, 0x63, device_base_address); // Set ALS integration time to 100ms |
vijaynvr | 0:bc9f26b5dadf | 105 | i2c_write_byte(0x002e, 0x01, device_base_address); // perform a single temperature calibration of the ranging sensor |
vijaynvr | 0:bc9f26b5dadf | 106 | |
vijaynvr | 0:bc9f26b5dadf | 107 | // Optional: Public registers - See data sheet for more detail |
vijaynvr | 0:bc9f26b5dadf | 108 | i2c_write_byte(0x001b, 0x09, device_base_address); // Set default ranging inter-measurement period to 100ms |
vijaynvr | 0:bc9f26b5dadf | 109 | i2c_write_byte(0x003e, 0x31, device_base_address); // Set default ALS inter-measurement period to 500ms |
vijaynvr | 0:bc9f26b5dadf | 110 | i2c_write_byte(0x0014, 0x24, device_base_address); // Configures interrupt on ¡®New sample ready¡¯ |
vijaynvr | 0:bc9f26b5dadf | 111 | |
vijaynvr | 0:bc9f26b5dadf | 112 | // extra stuff |
vijaynvr | 0:bc9f26b5dadf | 113 | i2c_write_byte(0x016, 0x00, device_base_address); // change fresh out of set status to 0 |
vijaynvr | 0:bc9f26b5dadf | 114 | |
vijaynvr | 0:bc9f26b5dadf | 115 | } |
vijaynvr | 0:bc9f26b5dadf | 116 | |
vijaynvr | 0:bc9f26b5dadf | 117 | // VHV automatically run on parts that are NVM-programmed, ie customer parts! |
vijaynvr | 0:bc9f26b5dadf | 118 | |
vijaynvr | 0:bc9f26b5dadf | 119 | range_set_max_convergence_time(device_base_address, 50); // Calculate ece value on initialisation (use max conv) |
vijaynvr | 0:bc9f26b5dadf | 120 | LOG_FUNCTION_END(NULL); |
vijaynvr | 0:bc9f26b5dadf | 121 | |
vijaynvr | 0:bc9f26b5dadf | 122 | return SENSOR_ERROR_NONE; |
vijaynvr | 0:bc9f26b5dadf | 123 | } |
vijaynvr | 0:bc9f26b5dadf | 124 | |
vijaynvr | 0:bc9f26b5dadf | 125 | sensor_error common_get_identification(uint8_t device_base_address) |
vijaynvr | 0:bc9f26b5dadf | 126 | { |
vijaynvr | 0:bc9f26b5dadf | 127 | /* |
vijaynvr | 0:bc9f26b5dadf | 128 | return_list = [] |
vijaynvr | 0:bc9f26b5dadf | 129 | |
vijaynvr | 0:bc9f26b5dadf | 130 | # I2C base address is 8-bit indexing |
vijaynvr | 0:bc9f26b5dadf | 131 | I2C_base_address = I2C_ReadReg_CCI(I2C_SLAVE_DEVICE_ADDRESS, I2C_ADDR); |
vijaynvr | 0:bc9f26b5dadf | 132 | I2C_base_address *= 2 # convert from 7-bit to 8-bit address |
vijaynvr | 0:bc9f26b5dadf | 133 | |
vijaynvr | 0:bc9f26b5dadf | 134 | # reading from indices 0x00-0x0B |
vijaynvr | 0:bc9f26b5dadf | 135 | regs = Utilities.device.comms['read'](I2C_base_address, 0x00, 0x0C) |
vijaynvr | 0:bc9f26b5dadf | 136 | |
vijaynvr | 0:bc9f26b5dadf | 137 | identification_model_id = regs[0x00] |
vijaynvr | 0:bc9f26b5dadf | 138 | identification_model_rev_major = regs[0x01] |
vijaynvr | 0:bc9f26b5dadf | 139 | identification_model_rev_minor = regs[0x02] |
vijaynvr | 0:bc9f26b5dadf | 140 | identification_module_rev_major = regs[0x03] |
vijaynvr | 0:bc9f26b5dadf | 141 | identification_module_rev_minor = regs[0x04] |
vijaynvr | 0:bc9f26b5dadf | 142 | identification_nvm_revision_id = regs[0x05] & 0x0F |
vijaynvr | 0:bc9f26b5dadf | 143 | identification_mask_revision_id = (regs[0x05] & 0xF0) >> 4 |
vijaynvr | 0:bc9f26b5dadf | 144 | identification_month = regs[0x06] & 0x0F |
vijaynvr | 0:bc9f26b5dadf | 145 | identification_year = (regs[0x06] & 0xF0) >> 4 |
vijaynvr | 0:bc9f26b5dadf | 146 | identification_phase = regs[0x07] & 0x0F |
vijaynvr | 0:bc9f26b5dadf | 147 | identification_day = (regs[0x07] & 0xF0) >> 4 |
vijaynvr | 0:bc9f26b5dadf | 148 | identification_time = (regs[0x08] << 8) + regs[0x09] |
vijaynvr | 0:bc9f26b5dadf | 149 | identification_code = regs[0x0A] |
vijaynvr | 0:bc9f26b5dadf | 150 | firmware_revision_id = regs[0x0B] |
vijaynvr | 0:bc9f26b5dadf | 151 | |
vijaynvr | 0:bc9f26b5dadf | 152 | return_list.append( identification_model_id ) |
vijaynvr | 0:bc9f26b5dadf | 153 | return_list.append( identification_model_rev_major ) |
vijaynvr | 0:bc9f26b5dadf | 154 | return_list.append( identification_model_rev_minor ) |
vijaynvr | 0:bc9f26b5dadf | 155 | return_list.append( identification_module_rev_major ) |
vijaynvr | 0:bc9f26b5dadf | 156 | return_list.append( identification_module_rev_minor ) |
vijaynvr | 0:bc9f26b5dadf | 157 | return_list.append( identification_nvm_revision_id ) |
vijaynvr | 0:bc9f26b5dadf | 158 | return_list.append( identification_mask_revision_id ) |
vijaynvr | 0:bc9f26b5dadf | 159 | return_list.append( identification_month ) |
vijaynvr | 0:bc9f26b5dadf | 160 | return_list.append( identification_year ) |
vijaynvr | 0:bc9f26b5dadf | 161 | return_list.append( identification_phase ) |
vijaynvr | 0:bc9f26b5dadf | 162 | return_list.append( identification_day ) |
vijaynvr | 0:bc9f26b5dadf | 163 | return_list.append( identification_time ) |
vijaynvr | 0:bc9f26b5dadf | 164 | return_list.append( identification_code ) |
vijaynvr | 0:bc9f26b5dadf | 165 | return_list.append( firmware_revision_id ) |
vijaynvr | 0:bc9f26b5dadf | 166 | return return_list |
vijaynvr | 0:bc9f26b5dadf | 167 | */ |
vijaynvr | 0:bc9f26b5dadf | 168 | return SENSOR_ERROR_NONE; |
vijaynvr | 0:bc9f26b5dadf | 169 | } |
vijaynvr | 0:bc9f26b5dadf | 170 | |
vijaynvr | 0:bc9f26b5dadf | 171 | |
vijaynvr | 0:bc9f26b5dadf | 172 | sensor_error common_set_i2c_base_address(uint8_t device_base_address, uint32_t new_i2c_base_address) |
vijaynvr | 0:bc9f26b5dadf | 173 | { |
vijaynvr | 0:bc9f26b5dadf | 174 | //# reduce 8-bit address to a 7-bit address |
vijaynvr | 0:bc9f26b5dadf | 175 | LOG_FUNCTION_START((void*)&device_base_address,(void*)&new_i2c_base_address); |
vijaynvr | 0:bc9f26b5dadf | 176 | |
vijaynvr | 0:bc9f26b5dadf | 177 | i2c_write_byte(I2C_SLAVE_DEVICE_ADDRESS, (new_i2c_base_address >> 1), device_base_address); |
vijaynvr | 0:bc9f26b5dadf | 178 | |
vijaynvr | 0:bc9f26b5dadf | 179 | LOG_FUNCTION_END(NULL); |
vijaynvr | 0:bc9f26b5dadf | 180 | |
vijaynvr | 0:bc9f26b5dadf | 181 | return SENSOR_ERROR_NONE; |
vijaynvr | 0:bc9f26b5dadf | 182 | } |
vijaynvr | 0:bc9f26b5dadf | 183 | |
vijaynvr | 0:bc9f26b5dadf | 184 | sensor_error common_set_i2c_pad_voltage(uint8_t device_base_address, uint8_t pad_voltage) |
vijaynvr | 0:bc9f26b5dadf | 185 | { |
vijaynvr | 0:bc9f26b5dadf | 186 | uint8_t padConfigReg; |
vijaynvr | 0:bc9f26b5dadf | 187 | |
vijaynvr | 0:bc9f26b5dadf | 188 | LOG_FUNCTION_START((void*)&device_base_address,(void*)&pad_voltage); |
vijaynvr | 0:bc9f26b5dadf | 189 | |
vijaynvr | 0:bc9f26b5dadf | 190 | padConfigReg = i2c_read_byte(PAD_I2C_CONFIG, device_base_address); |
vijaynvr | 0:bc9f26b5dadf | 191 | if (pad_voltage == I2C_1v2_PAD_VOLTAGE) |
vijaynvr | 0:bc9f26b5dadf | 192 | { |
vijaynvr | 0:bc9f26b5dadf | 193 | i2c_write_byte(PAD_I2C_CONFIG, (padConfigReg & 0xFE), device_base_address); // clear bit 0 |
vijaynvr | 0:bc9f26b5dadf | 194 | } |
vijaynvr | 0:bc9f26b5dadf | 195 | |
vijaynvr | 0:bc9f26b5dadf | 196 | if (pad_voltage == I2C_2v8_PAD_VOLTAGE) |
vijaynvr | 0:bc9f26b5dadf | 197 | { |
vijaynvr | 0:bc9f26b5dadf | 198 | i2c_write_byte(PAD_I2C_CONFIG, (padConfigReg & 0x01), device_base_address); // set bit 0 |
vijaynvr | 0:bc9f26b5dadf | 199 | } |
vijaynvr | 0:bc9f26b5dadf | 200 | |
vijaynvr | 0:bc9f26b5dadf | 201 | LOG_FUNCTION_END(NULL); |
vijaynvr | 0:bc9f26b5dadf | 202 | |
vijaynvr | 0:bc9f26b5dadf | 203 | return SENSOR_ERROR_NONE; |
vijaynvr | 0:bc9f26b5dadf | 204 | } |
vijaynvr | 0:bc9f26b5dadf | 205 | |
vijaynvr | 0:bc9f26b5dadf | 206 | uint8_t common_get_i2c_pad_voltage(uint8_t device_base_address) |
vijaynvr | 0:bc9f26b5dadf | 207 | { |
vijaynvr | 0:bc9f26b5dadf | 208 | uint8_t ret=0; |
vijaynvr | 0:bc9f26b5dadf | 209 | |
vijaynvr | 0:bc9f26b5dadf | 210 | LOG_FUNCTION_START((void*)&device_base_address); |
vijaynvr | 0:bc9f26b5dadf | 211 | |
vijaynvr | 0:bc9f26b5dadf | 212 | if (!(i2c_read_byte(PAD_I2C_CONFIG, device_base_address) & 0xFE)) // test that bit 0 is clear! |
vijaynvr | 0:bc9f26b5dadf | 213 | { |
vijaynvr | 0:bc9f26b5dadf | 214 | ret = I2C_1v2_PAD_VOLTAGE; |
vijaynvr | 0:bc9f26b5dadf | 215 | } |
vijaynvr | 0:bc9f26b5dadf | 216 | else if (i2c_read_byte(PAD_I2C_CONFIG, device_base_address) & 0x01) // test that bit 0 is set! |
vijaynvr | 0:bc9f26b5dadf | 217 | { |
vijaynvr | 0:bc9f26b5dadf | 218 | ret = I2C_2v8_PAD_VOLTAGE; |
vijaynvr | 0:bc9f26b5dadf | 219 | } |
vijaynvr | 0:bc9f26b5dadf | 220 | |
vijaynvr | 0:bc9f26b5dadf | 221 | LOG_FUNCTION_END(ret); |
vijaynvr | 0:bc9f26b5dadf | 222 | |
vijaynvr | 0:bc9f26b5dadf | 223 | return ret; |
vijaynvr | 0:bc9f26b5dadf | 224 | } |
vijaynvr | 0:bc9f26b5dadf | 225 | |
vijaynvr | 0:bc9f26b5dadf | 226 | sensor_error common_set_system_mode_gpio0(uint8_t device_base_address, uint8_t mode, uint8_t select, uint8_t polarity) |
vijaynvr | 0:bc9f26b5dadf | 227 | { |
vijaynvr | 0:bc9f26b5dadf | 228 | uint8_t gpioModeReg; |
vijaynvr | 0:bc9f26b5dadf | 229 | uint8_t gpio_select; |
vijaynvr | 0:bc9f26b5dadf | 230 | sensor_error ret = SENSOR_ERROR_NONE; |
vijaynvr | 0:bc9f26b5dadf | 231 | |
vijaynvr | 0:bc9f26b5dadf | 232 | LOG_FUNCTION_START((void*)&device_base_address,(void*)&mode, (void*)&select, (void*)&polarity); |
vijaynvr | 0:bc9f26b5dadf | 233 | |
vijaynvr | 0:bc9f26b5dadf | 234 | switch (select) |
vijaynvr | 0:bc9f26b5dadf | 235 | { |
vijaynvr | 0:bc9f26b5dadf | 236 | case GPIOx_SELECT_OFF : |
vijaynvr | 0:bc9f26b5dadf | 237 | case GPIOx_SELECT_MEASURE_READY : |
vijaynvr | 0:bc9f26b5dadf | 238 | case GPIOx_SELECT_DISABLED : |
vijaynvr | 0:bc9f26b5dadf | 239 | case GPIOx_SELECT_GPIO_INTERRUPT_OUTPUT : |
vijaynvr | 0:bc9f26b5dadf | 240 | gpioModeReg = i2c_read_byte(SYSTEM_MODE_GPIO0, device_base_address); |
vijaynvr | 0:bc9f26b5dadf | 241 | gpioModeReg = gpioModeReg & 0x21; // preserve only the mode & polarity bits from the register contents! |
vijaynvr | 0:bc9f26b5dadf | 242 | gpio_select = select << 1; // move up 1 bit, to make mask for bits 1-4 |
vijaynvr | 0:bc9f26b5dadf | 243 | |
vijaynvr | 0:bc9f26b5dadf | 244 | i2c_write_byte(SYSTEM_MODE_GPIO0, |
vijaynvr | 0:bc9f26b5dadf | 245 | (gpioModeReg | gpio_select), |
vijaynvr | 0:bc9f26b5dadf | 246 | device_base_address); |
vijaynvr | 0:bc9f26b5dadf | 247 | break; |
vijaynvr | 0:bc9f26b5dadf | 248 | default : |
vijaynvr | 0:bc9f26b5dadf | 249 | ret = COMMON_INVALID_PARAMS; |
vijaynvr | 0:bc9f26b5dadf | 250 | break; |
vijaynvr | 0:bc9f26b5dadf | 251 | } |
vijaynvr | 0:bc9f26b5dadf | 252 | |
vijaynvr | 0:bc9f26b5dadf | 253 | if ((mode == GPIOx_MODE_SELECT_RANGING) || (mode == GPIOx_MODE_SELECT_ALS)) |
vijaynvr | 0:bc9f26b5dadf | 254 | { |
vijaynvr | 0:bc9f26b5dadf | 255 | gpioModeReg = i2c_read_byte(SYSTEM_MODE_GPIO0, device_base_address); |
vijaynvr | 0:bc9f26b5dadf | 256 | i2c_write_byte(SYSTEM_MODE_GPIO0, |
vijaynvr | 0:bc9f26b5dadf | 257 | (gpioModeReg | mode), |
vijaynvr | 0:bc9f26b5dadf | 258 | device_base_address); |
vijaynvr | 0:bc9f26b5dadf | 259 | } |
vijaynvr | 0:bc9f26b5dadf | 260 | else |
vijaynvr | 0:bc9f26b5dadf | 261 | { |
vijaynvr | 0:bc9f26b5dadf | 262 | ret = COMMON_INVALID_PARAMS; |
vijaynvr | 0:bc9f26b5dadf | 263 | } |
vijaynvr | 0:bc9f26b5dadf | 264 | |
vijaynvr | 0:bc9f26b5dadf | 265 | gpioModeReg = i2c_read_byte(SYSTEM_MODE_GPIO0, device_base_address); |
vijaynvr | 0:bc9f26b5dadf | 266 | if (polarity == GPIOx_POLARITY_SELECT_OFF) |
vijaynvr | 0:bc9f26b5dadf | 267 | { |
vijaynvr | 0:bc9f26b5dadf | 268 | i2c_write_byte(SYSTEM_MODE_GPIO0, |
vijaynvr | 0:bc9f26b5dadf | 269 | (gpioModeReg & GPIOx_POLARITY_SELECT_CLEARED), |
vijaynvr | 0:bc9f26b5dadf | 270 | device_base_address); |
vijaynvr | 0:bc9f26b5dadf | 271 | } |
vijaynvr | 0:bc9f26b5dadf | 272 | else if (polarity == GPIOx_POLARITY_SELECT_ON) |
vijaynvr | 0:bc9f26b5dadf | 273 | { |
vijaynvr | 0:bc9f26b5dadf | 274 | i2c_write_byte(SYSTEM_MODE_GPIO0, |
vijaynvr | 0:bc9f26b5dadf | 275 | (gpioModeReg | GPIOx_POLARITY_SELECT), |
vijaynvr | 0:bc9f26b5dadf | 276 | device_base_address); |
vijaynvr | 0:bc9f26b5dadf | 277 | } |
vijaynvr | 0:bc9f26b5dadf | 278 | |
vijaynvr | 0:bc9f26b5dadf | 279 | LOG_FUNCTION_END(ret); |
vijaynvr | 0:bc9f26b5dadf | 280 | |
vijaynvr | 0:bc9f26b5dadf | 281 | return ret; |
vijaynvr | 0:bc9f26b5dadf | 282 | } |
vijaynvr | 0:bc9f26b5dadf | 283 | |
vijaynvr | 0:bc9f26b5dadf | 284 | sensor_error common_set_gpio0_mode(uint8_t device_base_address, uint8_t mode) |
vijaynvr | 0:bc9f26b5dadf | 285 | { |
vijaynvr | 0:bc9f26b5dadf | 286 | uint8_t gpioModeReg; |
vijaynvr | 0:bc9f26b5dadf | 287 | sensor_error ret = SENSOR_ERROR_NONE; |
vijaynvr | 0:bc9f26b5dadf | 288 | |
vijaynvr | 0:bc9f26b5dadf | 289 | LOG_FUNCTION_START((void*)&device_base_address,(void*)&mode); |
vijaynvr | 0:bc9f26b5dadf | 290 | |
vijaynvr | 0:bc9f26b5dadf | 291 | gpioModeReg = i2c_read_byte(SYSTEM_MODE_GPIO0, device_base_address); |
vijaynvr | 0:bc9f26b5dadf | 292 | if ((mode == GPIOx_MODE_SELECT_RANGING) || (mode == GPIOx_MODE_SELECT_ALS)) |
vijaynvr | 0:bc9f26b5dadf | 293 | { |
vijaynvr | 0:bc9f26b5dadf | 294 | i2c_write_byte(SYSTEM_MODE_GPIO0, (gpioModeReg | mode), device_base_address); |
vijaynvr | 0:bc9f26b5dadf | 295 | } |
vijaynvr | 0:bc9f26b5dadf | 296 | else |
vijaynvr | 0:bc9f26b5dadf | 297 | { |
vijaynvr | 0:bc9f26b5dadf | 298 | ret = COMMON_INVALID_PARAMS; |
vijaynvr | 0:bc9f26b5dadf | 299 | } |
vijaynvr | 0:bc9f26b5dadf | 300 | |
vijaynvr | 0:bc9f26b5dadf | 301 | LOG_FUNCTION_END(ret); |
vijaynvr | 0:bc9f26b5dadf | 302 | |
vijaynvr | 0:bc9f26b5dadf | 303 | return ret; |
vijaynvr | 0:bc9f26b5dadf | 304 | } |
vijaynvr | 0:bc9f26b5dadf | 305 | |
vijaynvr | 0:bc9f26b5dadf | 306 | uint8_t common_get_gpio0_mode(uint8_t device_base_address) |
vijaynvr | 0:bc9f26b5dadf | 307 | { |
vijaynvr | 0:bc9f26b5dadf | 308 | uint8_t ret=0; |
vijaynvr | 0:bc9f26b5dadf | 309 | |
vijaynvr | 0:bc9f26b5dadf | 310 | LOG_FUNCTION_START((void*)&device_base_address); |
vijaynvr | 0:bc9f26b5dadf | 311 | |
vijaynvr | 0:bc9f26b5dadf | 312 | if (i2c_read_byte(SYSTEM_MODE_GPIO0, device_base_address) & GPIOx_MODE_SELECT) |
vijaynvr | 0:bc9f26b5dadf | 313 | { |
vijaynvr | 0:bc9f26b5dadf | 314 | ret = 1; |
vijaynvr | 0:bc9f26b5dadf | 315 | } |
vijaynvr | 0:bc9f26b5dadf | 316 | else |
vijaynvr | 0:bc9f26b5dadf | 317 | { |
vijaynvr | 0:bc9f26b5dadf | 318 | ret = 0; |
vijaynvr | 0:bc9f26b5dadf | 319 | } |
vijaynvr | 0:bc9f26b5dadf | 320 | |
vijaynvr | 0:bc9f26b5dadf | 321 | LOG_FUNCTION_END(ret); |
vijaynvr | 0:bc9f26b5dadf | 322 | |
vijaynvr | 0:bc9f26b5dadf | 323 | return ret; |
vijaynvr | 0:bc9f26b5dadf | 324 | } |
vijaynvr | 0:bc9f26b5dadf | 325 | |
vijaynvr | 0:bc9f26b5dadf | 326 | sensor_error common_set_gpio0_select(uint8_t device_base_address, uint8_t select) |
vijaynvr | 0:bc9f26b5dadf | 327 | { |
vijaynvr | 0:bc9f26b5dadf | 328 | uint8_t gpio_select; |
vijaynvr | 0:bc9f26b5dadf | 329 | uint8_t gpioModeReg; |
vijaynvr | 0:bc9f26b5dadf | 330 | sensor_error ret = SENSOR_ERROR_NONE; |
vijaynvr | 0:bc9f26b5dadf | 331 | |
vijaynvr | 0:bc9f26b5dadf | 332 | LOG_FUNCTION_START((void*)&device_base_address,(void*)&select); |
vijaynvr | 0:bc9f26b5dadf | 333 | |
vijaynvr | 0:bc9f26b5dadf | 334 | switch (select) |
vijaynvr | 0:bc9f26b5dadf | 335 | { |
vijaynvr | 0:bc9f26b5dadf | 336 | case GPIOx_SELECT_OFF: |
vijaynvr | 0:bc9f26b5dadf | 337 | case GPIOx_SELECT_MEASURE_READY: |
vijaynvr | 0:bc9f26b5dadf | 338 | case GPIOx_SELECT_THRESHOLD_OUTPUT: |
vijaynvr | 0:bc9f26b5dadf | 339 | case GPIOx_SELECT_BLANK_IN: |
vijaynvr | 0:bc9f26b5dadf | 340 | case GPIOx_SELECT_BLANK_OUT: |
vijaynvr | 0:bc9f26b5dadf | 341 | case GPIOx_SELECT_START_STOP: |
vijaynvr | 0:bc9f26b5dadf | 342 | case GPIOx_SELECT_DISABLED: |
vijaynvr | 0:bc9f26b5dadf | 343 | case GPIOx_SELECT_COMBINED_THRESHOLD_OUTPUT: |
vijaynvr | 0:bc9f26b5dadf | 344 | case GPIOx_SELECT_GPIO_INTERRUPT_OUTPUT: |
vijaynvr | 0:bc9f26b5dadf | 345 | gpioModeReg = i2c_read_byte(SYSTEM_MODE_GPIO0, device_base_address); |
vijaynvr | 0:bc9f26b5dadf | 346 | gpio_select = select << 1; // move up 1 bit, to make mask for bits 1-4 |
vijaynvr | 0:bc9f26b5dadf | 347 | i2c_write_byte(SYSTEM_MODE_GPIO0, (gpioModeReg | gpio_select), device_base_address); |
vijaynvr | 0:bc9f26b5dadf | 348 | break; |
vijaynvr | 0:bc9f26b5dadf | 349 | default : |
vijaynvr | 0:bc9f26b5dadf | 350 | ret = COMMON_INVALID_PARAMS; |
vijaynvr | 0:bc9f26b5dadf | 351 | break; |
vijaynvr | 0:bc9f26b5dadf | 352 | } |
vijaynvr | 0:bc9f26b5dadf | 353 | |
vijaynvr | 0:bc9f26b5dadf | 354 | LOG_FUNCTION_END(ret); |
vijaynvr | 0:bc9f26b5dadf | 355 | |
vijaynvr | 0:bc9f26b5dadf | 356 | return ret; |
vijaynvr | 0:bc9f26b5dadf | 357 | } |
vijaynvr | 0:bc9f26b5dadf | 358 | |
vijaynvr | 0:bc9f26b5dadf | 359 | uint8_t common_get_gpio0_select(uint8_t device_base_address) |
vijaynvr | 0:bc9f26b5dadf | 360 | { |
vijaynvr | 0:bc9f26b5dadf | 361 | uint8_t gpioModeReg; |
vijaynvr | 0:bc9f26b5dadf | 362 | uint8_t gpio_select; |
vijaynvr | 0:bc9f26b5dadf | 363 | uint8_t ret=0; |
vijaynvr | 0:bc9f26b5dadf | 364 | |
vijaynvr | 0:bc9f26b5dadf | 365 | LOG_FUNCTION_START((void*)&device_base_address); |
vijaynvr | 0:bc9f26b5dadf | 366 | |
vijaynvr | 0:bc9f26b5dadf | 367 | gpioModeReg = i2c_read_byte(SYSTEM_MODE_GPIO0, device_base_address); |
vijaynvr | 0:bc9f26b5dadf | 368 | gpio_select = (gpioModeReg & 0x1E) >> 1; // mask only bits 1-4 |
vijaynvr | 0:bc9f26b5dadf | 369 | switch (gpio_select) |
vijaynvr | 0:bc9f26b5dadf | 370 | { |
vijaynvr | 0:bc9f26b5dadf | 371 | case GPIOx_SELECT_OFF: |
vijaynvr | 0:bc9f26b5dadf | 372 | ret = GPIOx_SELECT_OFF; |
vijaynvr | 0:bc9f26b5dadf | 373 | break; |
vijaynvr | 0:bc9f26b5dadf | 374 | case GPIOx_SELECT_MEASURE_READY: |
vijaynvr | 0:bc9f26b5dadf | 375 | ret = GPIOx_SELECT_MEASURE_READY; |
vijaynvr | 0:bc9f26b5dadf | 376 | break; |
vijaynvr | 0:bc9f26b5dadf | 377 | case GPIOx_SELECT_THRESHOLD_OUTPUT: |
vijaynvr | 0:bc9f26b5dadf | 378 | ret = GPIOx_SELECT_THRESHOLD_OUTPUT; |
vijaynvr | 0:bc9f26b5dadf | 379 | break; |
vijaynvr | 0:bc9f26b5dadf | 380 | case GPIOx_SELECT_BLANK_IN: |
vijaynvr | 0:bc9f26b5dadf | 381 | ret = GPIOx_SELECT_BLANK_IN; |
vijaynvr | 0:bc9f26b5dadf | 382 | break; |
vijaynvr | 0:bc9f26b5dadf | 383 | case GPIOx_SELECT_BLANK_OUT: |
vijaynvr | 0:bc9f26b5dadf | 384 | ret = GPIOx_SELECT_BLANK_OUT; |
vijaynvr | 0:bc9f26b5dadf | 385 | break; |
vijaynvr | 0:bc9f26b5dadf | 386 | case GPIOx_SELECT_START_STOP: |
vijaynvr | 0:bc9f26b5dadf | 387 | ret = GPIOx_SELECT_START_STOP; |
vijaynvr | 0:bc9f26b5dadf | 388 | break; |
vijaynvr | 0:bc9f26b5dadf | 389 | case GPIOx_SELECT_DISABLED: |
vijaynvr | 0:bc9f26b5dadf | 390 | ret = GPIOx_SELECT_DISABLED; |
vijaynvr | 0:bc9f26b5dadf | 391 | break; |
vijaynvr | 0:bc9f26b5dadf | 392 | case GPIOx_SELECT_COMBINED_THRESHOLD_OUTPUT: |
vijaynvr | 0:bc9f26b5dadf | 393 | ret = GPIOx_SELECT_COMBINED_THRESHOLD_OUTPUT; |
vijaynvr | 0:bc9f26b5dadf | 394 | break; |
vijaynvr | 0:bc9f26b5dadf | 395 | case GPIOx_SELECT_GPIO_INTERRUPT_OUTPUT: |
vijaynvr | 0:bc9f26b5dadf | 396 | ret = GPIOx_SELECT_GPIO_INTERRUPT_OUTPUT; |
vijaynvr | 0:bc9f26b5dadf | 397 | break; |
vijaynvr | 0:bc9f26b5dadf | 398 | } |
vijaynvr | 0:bc9f26b5dadf | 399 | |
vijaynvr | 0:bc9f26b5dadf | 400 | LOG_FUNCTION_END(ret); |
vijaynvr | 0:bc9f26b5dadf | 401 | |
vijaynvr | 0:bc9f26b5dadf | 402 | return ret; |
vijaynvr | 0:bc9f26b5dadf | 403 | } |
vijaynvr | 0:bc9f26b5dadf | 404 | |
vijaynvr | 0:bc9f26b5dadf | 405 | sensor_error common_set_gpio0_polarity(uint8_t device_base_address, uint8_t polarity) |
vijaynvr | 0:bc9f26b5dadf | 406 | { |
vijaynvr | 0:bc9f26b5dadf | 407 | uint8_t gpioModeReg; |
vijaynvr | 0:bc9f26b5dadf | 408 | sensor_error ret = SENSOR_ERROR_NONE; |
vijaynvr | 0:bc9f26b5dadf | 409 | |
vijaynvr | 0:bc9f26b5dadf | 410 | LOG_FUNCTION_START((void*)&device_base_address,(void*) &polarity); |
vijaynvr | 0:bc9f26b5dadf | 411 | |
vijaynvr | 0:bc9f26b5dadf | 412 | gpioModeReg = i2c_read_byte(SYSTEM_MODE_GPIO0, device_base_address); |
vijaynvr | 0:bc9f26b5dadf | 413 | if (polarity == GPIOx_POLARITY_SELECT_OFF) |
vijaynvr | 0:bc9f26b5dadf | 414 | { |
vijaynvr | 0:bc9f26b5dadf | 415 | i2c_write_byte(SYSTEM_MODE_GPIO0, |
vijaynvr | 0:bc9f26b5dadf | 416 | (gpioModeReg & GPIOx_POLARITY_SELECT_CLEARED), |
vijaynvr | 0:bc9f26b5dadf | 417 | device_base_address); |
vijaynvr | 0:bc9f26b5dadf | 418 | } |
vijaynvr | 0:bc9f26b5dadf | 419 | else if (polarity == GPIOx_POLARITY_SELECT_ON) |
vijaynvr | 0:bc9f26b5dadf | 420 | i2c_write_byte(SYSTEM_MODE_GPIO0, (gpioModeReg | GPIOx_POLARITY_SELECT), device_base_address); |
vijaynvr | 0:bc9f26b5dadf | 421 | else |
vijaynvr | 0:bc9f26b5dadf | 422 | ret = COMMON_INVALID_PARAMS; |
vijaynvr | 0:bc9f26b5dadf | 423 | |
vijaynvr | 0:bc9f26b5dadf | 424 | LOG_FUNCTION_END(ret); |
vijaynvr | 0:bc9f26b5dadf | 425 | |
vijaynvr | 0:bc9f26b5dadf | 426 | return ret; |
vijaynvr | 0:bc9f26b5dadf | 427 | } |
vijaynvr | 0:bc9f26b5dadf | 428 | |
vijaynvr | 0:bc9f26b5dadf | 429 | bool_t common_get_gpio0_polarity(uint8_t device_base_address) |
vijaynvr | 0:bc9f26b5dadf | 430 | { |
vijaynvr | 0:bc9f26b5dadf | 431 | bool_t ret=FALSE; |
vijaynvr | 0:bc9f26b5dadf | 432 | |
vijaynvr | 0:bc9f26b5dadf | 433 | LOG_FUNCTION_START((void*)&device_base_address); |
vijaynvr | 0:bc9f26b5dadf | 434 | |
vijaynvr | 0:bc9f26b5dadf | 435 | if (i2c_read_byte(SYSTEM_MODE_GPIO0, device_base_address) & GPIOx_POLARITY_SELECT) |
vijaynvr | 0:bc9f26b5dadf | 436 | ret = TRUE; |
vijaynvr | 0:bc9f26b5dadf | 437 | |
vijaynvr | 0:bc9f26b5dadf | 438 | LOG_FUNCTION_END(ret); |
vijaynvr | 0:bc9f26b5dadf | 439 | |
vijaynvr | 0:bc9f26b5dadf | 440 | return ret; |
vijaynvr | 0:bc9f26b5dadf | 441 | } |
vijaynvr | 0:bc9f26b5dadf | 442 | |
vijaynvr | 0:bc9f26b5dadf | 443 | sensor_error common_set_system_mode_gpio1(uint8_t device_base_address, uint8_t mode, uint8_t select, uint8_t polarity) |
vijaynvr | 0:bc9f26b5dadf | 444 | { |
vijaynvr | 0:bc9f26b5dadf | 445 | uint8_t gpioModeReg; |
vijaynvr | 0:bc9f26b5dadf | 446 | uint8_t gpio_select; |
vijaynvr | 0:bc9f26b5dadf | 447 | sensor_error ret = SENSOR_ERROR_NONE; |
vijaynvr | 0:bc9f26b5dadf | 448 | |
vijaynvr | 0:bc9f26b5dadf | 449 | LOG_FUNCTION_START((void*)&device_base_address,(void*)&mode,(void*)&select,(void*)&polarity); |
vijaynvr | 0:bc9f26b5dadf | 450 | |
vijaynvr | 0:bc9f26b5dadf | 451 | switch (select) |
vijaynvr | 0:bc9f26b5dadf | 452 | { |
vijaynvr | 0:bc9f26b5dadf | 453 | case GPIOx_SELECT_OFF : |
vijaynvr | 0:bc9f26b5dadf | 454 | case GPIOx_SELECT_MEASURE_READY : |
vijaynvr | 0:bc9f26b5dadf | 455 | case GPIOx_SELECT_DISABLED : |
vijaynvr | 0:bc9f26b5dadf | 456 | case GPIOx_SELECT_GPIO_INTERRUPT_OUTPUT : |
vijaynvr | 0:bc9f26b5dadf | 457 | gpioModeReg = i2c_read_byte(SYSTEM_MODE_GPIO1, device_base_address); |
vijaynvr | 0:bc9f26b5dadf | 458 | gpioModeReg = gpioModeReg & 0x21; // preserve only the mode & polarity bits from the register contents! |
vijaynvr | 0:bc9f26b5dadf | 459 | gpio_select = select << 1; // move up 1 bit, to make mask for bits 1-4 |
vijaynvr | 0:bc9f26b5dadf | 460 | i2c_write_byte(SYSTEM_MODE_GPIO1, (gpioModeReg | gpio_select), device_base_address); |
vijaynvr | 0:bc9f26b5dadf | 461 | break; |
vijaynvr | 0:bc9f26b5dadf | 462 | default : |
vijaynvr | 0:bc9f26b5dadf | 463 | ret = COMMON_INVALID_PARAMS; |
vijaynvr | 0:bc9f26b5dadf | 464 | break; |
vijaynvr | 0:bc9f26b5dadf | 465 | } |
vijaynvr | 0:bc9f26b5dadf | 466 | |
vijaynvr | 0:bc9f26b5dadf | 467 | if ((mode == GPIOx_MODE_SELECT_RANGING) || (mode == GPIOx_MODE_SELECT_ALS)) |
vijaynvr | 0:bc9f26b5dadf | 468 | { |
vijaynvr | 0:bc9f26b5dadf | 469 | gpioModeReg = i2c_read_byte(SYSTEM_MODE_GPIO1, device_base_address); |
vijaynvr | 0:bc9f26b5dadf | 470 | i2c_write_byte(SYSTEM_MODE_GPIO1, |
vijaynvr | 0:bc9f26b5dadf | 471 | (gpioModeReg | mode), |
vijaynvr | 0:bc9f26b5dadf | 472 | device_base_address); |
vijaynvr | 0:bc9f26b5dadf | 473 | } |
vijaynvr | 0:bc9f26b5dadf | 474 | else |
vijaynvr | 0:bc9f26b5dadf | 475 | { |
vijaynvr | 0:bc9f26b5dadf | 476 | ret = COMMON_INVALID_PARAMS; |
vijaynvr | 0:bc9f26b5dadf | 477 | } |
vijaynvr | 0:bc9f26b5dadf | 478 | |
vijaynvr | 0:bc9f26b5dadf | 479 | gpioModeReg = i2c_read_byte(SYSTEM_MODE_GPIO1, device_base_address); |
vijaynvr | 0:bc9f26b5dadf | 480 | |
vijaynvr | 0:bc9f26b5dadf | 481 | if (polarity == GPIOx_POLARITY_SELECT_OFF) |
vijaynvr | 0:bc9f26b5dadf | 482 | { |
vijaynvr | 0:bc9f26b5dadf | 483 | i2c_write_byte(SYSTEM_MODE_GPIO1, |
vijaynvr | 0:bc9f26b5dadf | 484 | (gpioModeReg & GPIOx_POLARITY_SELECT_CLEARED), |
vijaynvr | 0:bc9f26b5dadf | 485 | device_base_address); |
vijaynvr | 0:bc9f26b5dadf | 486 | } |
vijaynvr | 0:bc9f26b5dadf | 487 | |
vijaynvr | 0:bc9f26b5dadf | 488 | if (polarity == GPIOx_POLARITY_SELECT_ON) |
vijaynvr | 0:bc9f26b5dadf | 489 | { |
vijaynvr | 0:bc9f26b5dadf | 490 | i2c_write_byte(SYSTEM_MODE_GPIO1, |
vijaynvr | 0:bc9f26b5dadf | 491 | (gpioModeReg | GPIOx_POLARITY_SELECT), |
vijaynvr | 0:bc9f26b5dadf | 492 | device_base_address); |
vijaynvr | 0:bc9f26b5dadf | 493 | } |
vijaynvr | 0:bc9f26b5dadf | 494 | |
vijaynvr | 0:bc9f26b5dadf | 495 | LOG_FUNCTION_END(ret); |
vijaynvr | 0:bc9f26b5dadf | 496 | |
vijaynvr | 0:bc9f26b5dadf | 497 | return ret; |
vijaynvr | 0:bc9f26b5dadf | 498 | } |
vijaynvr | 0:bc9f26b5dadf | 499 | |
vijaynvr | 0:bc9f26b5dadf | 500 | sensor_error common_set_gpio1_mode(uint8_t device_base_address, uint8_t mode) |
vijaynvr | 0:bc9f26b5dadf | 501 | { |
vijaynvr | 0:bc9f26b5dadf | 502 | uint8_t gpioModeReg; |
vijaynvr | 0:bc9f26b5dadf | 503 | sensor_error ret = COMMON_INVALID_PARAMS; |
vijaynvr | 0:bc9f26b5dadf | 504 | |
vijaynvr | 0:bc9f26b5dadf | 505 | LOG_FUNCTION_START((void*)&device_base_address,(void*)&mode); |
vijaynvr | 0:bc9f26b5dadf | 506 | |
vijaynvr | 0:bc9f26b5dadf | 507 | gpioModeReg = i2c_read_byte(SYSTEM_MODE_GPIO1, device_base_address); |
vijaynvr | 0:bc9f26b5dadf | 508 | |
vijaynvr | 0:bc9f26b5dadf | 509 | if ((mode == GPIOx_MODE_SELECT_RANGING) || (mode == GPIOx_MODE_SELECT_ALS)) |
vijaynvr | 0:bc9f26b5dadf | 510 | { |
vijaynvr | 0:bc9f26b5dadf | 511 | i2c_write_byte(SYSTEM_MODE_GPIO1, |
vijaynvr | 0:bc9f26b5dadf | 512 | (gpioModeReg | mode), |
vijaynvr | 0:bc9f26b5dadf | 513 | device_base_address); |
vijaynvr | 0:bc9f26b5dadf | 514 | ret = SENSOR_ERROR_NONE; |
vijaynvr | 0:bc9f26b5dadf | 515 | } |
vijaynvr | 0:bc9f26b5dadf | 516 | |
vijaynvr | 0:bc9f26b5dadf | 517 | LOG_FUNCTION_END(ret); |
vijaynvr | 0:bc9f26b5dadf | 518 | |
vijaynvr | 0:bc9f26b5dadf | 519 | return ret; |
vijaynvr | 0:bc9f26b5dadf | 520 | } |
vijaynvr | 0:bc9f26b5dadf | 521 | |
vijaynvr | 0:bc9f26b5dadf | 522 | uint8_t common_get_gpio1_mode(uint8_t device_base_address) |
vijaynvr | 0:bc9f26b5dadf | 523 | { |
vijaynvr | 0:bc9f26b5dadf | 524 | uint8_t ret = 0; |
vijaynvr | 0:bc9f26b5dadf | 525 | |
vijaynvr | 0:bc9f26b5dadf | 526 | LOG_FUNCTION_START((void*)&device_base_address); |
vijaynvr | 0:bc9f26b5dadf | 527 | |
vijaynvr | 0:bc9f26b5dadf | 528 | if (i2c_read_byte(SYSTEM_MODE_GPIO1, device_base_address) & GPIOx_MODE_SELECT) |
vijaynvr | 0:bc9f26b5dadf | 529 | { |
vijaynvr | 0:bc9f26b5dadf | 530 | ret = 1; |
vijaynvr | 0:bc9f26b5dadf | 531 | } |
vijaynvr | 0:bc9f26b5dadf | 532 | |
vijaynvr | 0:bc9f26b5dadf | 533 | LOG_FUNCTION_END(ret); |
vijaynvr | 0:bc9f26b5dadf | 534 | |
vijaynvr | 0:bc9f26b5dadf | 535 | return ret; |
vijaynvr | 0:bc9f26b5dadf | 536 | } |
vijaynvr | 0:bc9f26b5dadf | 537 | |
vijaynvr | 0:bc9f26b5dadf | 538 | sensor_error common_set_gpio1_select(uint8_t device_base_address, uint8_t select) |
vijaynvr | 0:bc9f26b5dadf | 539 | { |
vijaynvr | 0:bc9f26b5dadf | 540 | uint8_t gpio_select; |
vijaynvr | 0:bc9f26b5dadf | 541 | uint8_t gpioModeReg; |
vijaynvr | 0:bc9f26b5dadf | 542 | sensor_error ret = SENSOR_ERROR_NONE; |
vijaynvr | 0:bc9f26b5dadf | 543 | |
vijaynvr | 0:bc9f26b5dadf | 544 | LOG_FUNCTION_START((void*)&device_base_address,(void*)&select); |
vijaynvr | 0:bc9f26b5dadf | 545 | |
vijaynvr | 0:bc9f26b5dadf | 546 | switch (select) |
vijaynvr | 0:bc9f26b5dadf | 547 | { |
vijaynvr | 0:bc9f26b5dadf | 548 | case GPIOx_SELECT_OFF: |
vijaynvr | 0:bc9f26b5dadf | 549 | case GPIOx_SELECT_MEASURE_READY: |
vijaynvr | 0:bc9f26b5dadf | 550 | case GPIOx_SELECT_THRESHOLD_OUTPUT: |
vijaynvr | 0:bc9f26b5dadf | 551 | case GPIOx_SELECT_BLANK_IN: |
vijaynvr | 0:bc9f26b5dadf | 552 | case GPIOx_SELECT_BLANK_OUT: |
vijaynvr | 0:bc9f26b5dadf | 553 | case GPIOx_SELECT_START_STOP: |
vijaynvr | 0:bc9f26b5dadf | 554 | case GPIOx_SELECT_DISABLED: |
vijaynvr | 0:bc9f26b5dadf | 555 | case GPIOx_SELECT_COMBINED_THRESHOLD_OUTPUT: |
vijaynvr | 0:bc9f26b5dadf | 556 | case GPIOx_SELECT_GPIO_INTERRUPT_OUTPUT: |
vijaynvr | 0:bc9f26b5dadf | 557 | gpioModeReg = i2c_read_byte(SYSTEM_MODE_GPIO1, device_base_address); |
vijaynvr | 0:bc9f26b5dadf | 558 | gpio_select = select << 1; // move up 1 bit, to make mask for bits 1-4 |
vijaynvr | 0:bc9f26b5dadf | 559 | i2c_write_byte(SYSTEM_MODE_GPIO1, |
vijaynvr | 0:bc9f26b5dadf | 560 | (gpioModeReg | gpio_select), |
vijaynvr | 0:bc9f26b5dadf | 561 | device_base_address); |
vijaynvr | 0:bc9f26b5dadf | 562 | break; |
vijaynvr | 0:bc9f26b5dadf | 563 | default: |
vijaynvr | 0:bc9f26b5dadf | 564 | ret = COMMON_INVALID_PARAMS; |
vijaynvr | 0:bc9f26b5dadf | 565 | break; |
vijaynvr | 0:bc9f26b5dadf | 566 | } |
vijaynvr | 0:bc9f26b5dadf | 567 | |
vijaynvr | 0:bc9f26b5dadf | 568 | LOG_FUNCTION_END(ret); |
vijaynvr | 0:bc9f26b5dadf | 569 | |
vijaynvr | 0:bc9f26b5dadf | 570 | return ret; |
vijaynvr | 0:bc9f26b5dadf | 571 | } |
vijaynvr | 0:bc9f26b5dadf | 572 | |
vijaynvr | 0:bc9f26b5dadf | 573 | uint8_t common_get_gpio1_select(uint8_t device_base_address) |
vijaynvr | 0:bc9f26b5dadf | 574 | { |
vijaynvr | 0:bc9f26b5dadf | 575 | uint8_t gpio_select; |
vijaynvr | 0:bc9f26b5dadf | 576 | uint8_t gpioModeReg; |
vijaynvr | 0:bc9f26b5dadf | 577 | uint8_t ret=0; |
vijaynvr | 0:bc9f26b5dadf | 578 | |
vijaynvr | 0:bc9f26b5dadf | 579 | LOG_FUNCTION_START((void*)&device_base_address); |
vijaynvr | 0:bc9f26b5dadf | 580 | |
vijaynvr | 0:bc9f26b5dadf | 581 | gpioModeReg = i2c_read_byte(SYSTEM_MODE_GPIO1, device_base_address); |
vijaynvr | 0:bc9f26b5dadf | 582 | |
vijaynvr | 0:bc9f26b5dadf | 583 | gpio_select = (gpioModeReg & 0x1E) >> 1; // mask only bits 1-4 |
vijaynvr | 0:bc9f26b5dadf | 584 | |
vijaynvr | 0:bc9f26b5dadf | 585 | switch (gpio_select) |
vijaynvr | 0:bc9f26b5dadf | 586 | { |
vijaynvr | 0:bc9f26b5dadf | 587 | case GPIOx_SELECT_OFF: |
vijaynvr | 0:bc9f26b5dadf | 588 | ret = GPIOx_SELECT_OFF; |
vijaynvr | 0:bc9f26b5dadf | 589 | break; |
vijaynvr | 0:bc9f26b5dadf | 590 | case GPIOx_SELECT_MEASURE_READY: |
vijaynvr | 0:bc9f26b5dadf | 591 | ret = GPIOx_SELECT_MEASURE_READY; |
vijaynvr | 0:bc9f26b5dadf | 592 | break; |
vijaynvr | 0:bc9f26b5dadf | 593 | case GPIOx_SELECT_THRESHOLD_OUTPUT: |
vijaynvr | 0:bc9f26b5dadf | 594 | ret = GPIOx_SELECT_THRESHOLD_OUTPUT; |
vijaynvr | 0:bc9f26b5dadf | 595 | break; |
vijaynvr | 0:bc9f26b5dadf | 596 | case GPIOx_SELECT_BLANK_IN: |
vijaynvr | 0:bc9f26b5dadf | 597 | ret = GPIOx_SELECT_BLANK_IN; |
vijaynvr | 0:bc9f26b5dadf | 598 | break; |
vijaynvr | 0:bc9f26b5dadf | 599 | case GPIOx_SELECT_BLANK_OUT: |
vijaynvr | 0:bc9f26b5dadf | 600 | ret = GPIOx_SELECT_BLANK_OUT; |
vijaynvr | 0:bc9f26b5dadf | 601 | break; |
vijaynvr | 0:bc9f26b5dadf | 602 | case GPIOx_SELECT_START_STOP: |
vijaynvr | 0:bc9f26b5dadf | 603 | ret = GPIOx_SELECT_START_STOP; |
vijaynvr | 0:bc9f26b5dadf | 604 | break; |
vijaynvr | 0:bc9f26b5dadf | 605 | case GPIOx_SELECT_DISABLED: |
vijaynvr | 0:bc9f26b5dadf | 606 | ret = GPIOx_SELECT_DISABLED; |
vijaynvr | 0:bc9f26b5dadf | 607 | break; |
vijaynvr | 0:bc9f26b5dadf | 608 | case GPIOx_SELECT_COMBINED_THRESHOLD_OUTPUT: |
vijaynvr | 0:bc9f26b5dadf | 609 | ret = GPIOx_SELECT_COMBINED_THRESHOLD_OUTPUT; |
vijaynvr | 0:bc9f26b5dadf | 610 | break; |
vijaynvr | 0:bc9f26b5dadf | 611 | case GPIOx_SELECT_GPIO_INTERRUPT_OUTPUT: |
vijaynvr | 0:bc9f26b5dadf | 612 | ret = GPIOx_SELECT_GPIO_INTERRUPT_OUTPUT; |
vijaynvr | 0:bc9f26b5dadf | 613 | break; |
vijaynvr | 0:bc9f26b5dadf | 614 | } |
vijaynvr | 0:bc9f26b5dadf | 615 | |
vijaynvr | 0:bc9f26b5dadf | 616 | LOG_FUNCTION_END(ret); |
vijaynvr | 0:bc9f26b5dadf | 617 | |
vijaynvr | 0:bc9f26b5dadf | 618 | return ret; |
vijaynvr | 0:bc9f26b5dadf | 619 | } |
vijaynvr | 0:bc9f26b5dadf | 620 | |
vijaynvr | 0:bc9f26b5dadf | 621 | sensor_error common_set_gpio1_polarity(uint8_t device_base_address, uint8_t polarity) |
vijaynvr | 0:bc9f26b5dadf | 622 | { |
vijaynvr | 0:bc9f26b5dadf | 623 | uint8_t gpioModeReg; |
vijaynvr | 0:bc9f26b5dadf | 624 | sensor_error ret = SENSOR_ERROR_NONE; |
vijaynvr | 0:bc9f26b5dadf | 625 | |
vijaynvr | 0:bc9f26b5dadf | 626 | LOG_FUNCTION_START((void*)&device_base_address,(void*)&polarity); |
vijaynvr | 0:bc9f26b5dadf | 627 | |
vijaynvr | 0:bc9f26b5dadf | 628 | gpioModeReg = i2c_read_byte(SYSTEM_MODE_GPIO1, device_base_address); |
vijaynvr | 0:bc9f26b5dadf | 629 | |
vijaynvr | 0:bc9f26b5dadf | 630 | if (polarity == GPIOx_POLARITY_SELECT_OFF) |
vijaynvr | 0:bc9f26b5dadf | 631 | { |
vijaynvr | 0:bc9f26b5dadf | 632 | i2c_write_byte(SYSTEM_MODE_GPIO1, |
vijaynvr | 0:bc9f26b5dadf | 633 | (gpioModeReg & GPIOx_POLARITY_SELECT_CLEARED), |
vijaynvr | 0:bc9f26b5dadf | 634 | device_base_address); |
vijaynvr | 0:bc9f26b5dadf | 635 | } |
vijaynvr | 0:bc9f26b5dadf | 636 | else if (polarity == GPIOx_POLARITY_SELECT_ON) |
vijaynvr | 0:bc9f26b5dadf | 637 | { |
vijaynvr | 0:bc9f26b5dadf | 638 | i2c_write_byte(SYSTEM_MODE_GPIO1, |
vijaynvr | 0:bc9f26b5dadf | 639 | (gpioModeReg | GPIOx_POLARITY_SELECT), |
vijaynvr | 0:bc9f26b5dadf | 640 | device_base_address); |
vijaynvr | 0:bc9f26b5dadf | 641 | } |
vijaynvr | 0:bc9f26b5dadf | 642 | else |
vijaynvr | 0:bc9f26b5dadf | 643 | { |
vijaynvr | 0:bc9f26b5dadf | 644 | ret = COMMON_INVALID_PARAMS; |
vijaynvr | 0:bc9f26b5dadf | 645 | } |
vijaynvr | 0:bc9f26b5dadf | 646 | |
vijaynvr | 0:bc9f26b5dadf | 647 | LOG_FUNCTION_END(ret); |
vijaynvr | 0:bc9f26b5dadf | 648 | |
vijaynvr | 0:bc9f26b5dadf | 649 | return ret; |
vijaynvr | 0:bc9f26b5dadf | 650 | } |
vijaynvr | 0:bc9f26b5dadf | 651 | |
vijaynvr | 0:bc9f26b5dadf | 652 | bool_t common_get_gpio1_polarity(uint8_t device_base_address) |
vijaynvr | 0:bc9f26b5dadf | 653 | { |
vijaynvr | 0:bc9f26b5dadf | 654 | bool_t ret= FALSE; |
vijaynvr | 0:bc9f26b5dadf | 655 | |
vijaynvr | 0:bc9f26b5dadf | 656 | LOG_FUNCTION_START((void*)&device_base_address); |
vijaynvr | 0:bc9f26b5dadf | 657 | |
vijaynvr | 0:bc9f26b5dadf | 658 | if (i2c_read_byte(SYSTEM_MODE_GPIO1, device_base_address) & GPIOx_POLARITY_SELECT) |
vijaynvr | 0:bc9f26b5dadf | 659 | { |
vijaynvr | 0:bc9f26b5dadf | 660 | ret = TRUE; |
vijaynvr | 0:bc9f26b5dadf | 661 | } |
vijaynvr | 0:bc9f26b5dadf | 662 | |
vijaynvr | 0:bc9f26b5dadf | 663 | LOG_FUNCTION_END(ret); |
vijaynvr | 0:bc9f26b5dadf | 664 | |
vijaynvr | 0:bc9f26b5dadf | 665 | return ret; |
vijaynvr | 0:bc9f26b5dadf | 666 | } |
vijaynvr | 0:bc9f26b5dadf | 667 | |
vijaynvr | 0:bc9f26b5dadf | 668 | sensor_error common_set_history_buffer_enable(uint8_t device_base_address, uint8_t history_buffer_enable) |
vijaynvr | 0:bc9f26b5dadf | 669 | { |
vijaynvr | 0:bc9f26b5dadf | 670 | uint8_t mode; |
vijaynvr | 0:bc9f26b5dadf | 671 | sensor_error ret= COMMON_INVALID_PARAMS; |
vijaynvr | 0:bc9f26b5dadf | 672 | |
vijaynvr | 0:bc9f26b5dadf | 673 | LOG_FUNCTION_START((void*)&device_base_address,(void*)&history_buffer_enable); |
vijaynvr | 0:bc9f26b5dadf | 674 | |
vijaynvr | 0:bc9f26b5dadf | 675 | if ((history_buffer_enable == HISTORY_BUFFER_DISABLE) || |
vijaynvr | 0:bc9f26b5dadf | 676 | (history_buffer_enable == HISTORY_BUFFER_ENABLE)) |
vijaynvr | 0:bc9f26b5dadf | 677 | { |
vijaynvr | 0:bc9f26b5dadf | 678 | mode = i2c_read_byte(SYSTEM_HISTORY_CTRL, device_base_address); |
vijaynvr | 0:bc9f26b5dadf | 679 | i2c_write_byte(SYSTEM_HISTORY_CTRL, |
vijaynvr | 0:bc9f26b5dadf | 680 | (mode | history_buffer_enable), |
vijaynvr | 0:bc9f26b5dadf | 681 | device_base_address); |
vijaynvr | 0:bc9f26b5dadf | 682 | ret = SENSOR_ERROR_NONE; |
vijaynvr | 0:bc9f26b5dadf | 683 | } |
vijaynvr | 0:bc9f26b5dadf | 684 | |
vijaynvr | 0:bc9f26b5dadf | 685 | LOG_FUNCTION_END(ret); |
vijaynvr | 0:bc9f26b5dadf | 686 | |
vijaynvr | 0:bc9f26b5dadf | 687 | return ret; |
vijaynvr | 0:bc9f26b5dadf | 688 | } |
vijaynvr | 0:bc9f26b5dadf | 689 | |
vijaynvr | 0:bc9f26b5dadf | 690 | bool_t common_get_history_buffer_enable(uint8_t device_base_address) |
vijaynvr | 0:bc9f26b5dadf | 691 | { |
vijaynvr | 0:bc9f26b5dadf | 692 | bool_t ret = FALSE; |
vijaynvr | 0:bc9f26b5dadf | 693 | |
vijaynvr | 0:bc9f26b5dadf | 694 | LOG_FUNCTION_START((void*)&device_base_address); |
vijaynvr | 0:bc9f26b5dadf | 695 | |
vijaynvr | 0:bc9f26b5dadf | 696 | if (i2c_read_byte(SYSTEM_HISTORY_CTRL, device_base_address) & HISTORY_BUFFER_ENABLED) |
vijaynvr | 0:bc9f26b5dadf | 697 | { |
vijaynvr | 0:bc9f26b5dadf | 698 | ret = TRUE; |
vijaynvr | 0:bc9f26b5dadf | 699 | } |
vijaynvr | 0:bc9f26b5dadf | 700 | |
vijaynvr | 0:bc9f26b5dadf | 701 | LOG_FUNCTION_END(ret); |
vijaynvr | 0:bc9f26b5dadf | 702 | |
vijaynvr | 0:bc9f26b5dadf | 703 | return ret; |
vijaynvr | 0:bc9f26b5dadf | 704 | } |
vijaynvr | 0:bc9f26b5dadf | 705 | |
vijaynvr | 0:bc9f26b5dadf | 706 | sensor_error common_set_history_buffer_mode(uint8_t device_base_address, uint8_t history_buffer_mode) |
vijaynvr | 0:bc9f26b5dadf | 707 | { |
vijaynvr | 0:bc9f26b5dadf | 708 | uint8_t historyRegVal; |
vijaynvr | 0:bc9f26b5dadf | 709 | uint8_t mode=0; |
vijaynvr | 0:bc9f26b5dadf | 710 | sensor_error ret= SENSOR_ERROR_NONE; |
vijaynvr | 0:bc9f26b5dadf | 711 | |
vijaynvr | 0:bc9f26b5dadf | 712 | LOG_FUNCTION_START((void*)&device_base_address,(void*)&history_buffer_mode); |
vijaynvr | 0:bc9f26b5dadf | 713 | |
vijaynvr | 0:bc9f26b5dadf | 714 | historyRegVal = i2c_read_byte(SYSTEM_HISTORY_CTRL, device_base_address); |
vijaynvr | 0:bc9f26b5dadf | 715 | |
vijaynvr | 0:bc9f26b5dadf | 716 | if (history_buffer_mode & HISTORY_BUFFER_ALS_MODE) |
vijaynvr | 0:bc9f26b5dadf | 717 | { |
vijaynvr | 0:bc9f26b5dadf | 718 | mode = historyRegVal | 0x02; // set bit 1 to enable ALS mode |
vijaynvr | 0:bc9f26b5dadf | 719 | } |
vijaynvr | 0:bc9f26b5dadf | 720 | else if (history_buffer_mode & HISTORY_BUFFER_RANGING_MODE) |
vijaynvr | 0:bc9f26b5dadf | 721 | { |
vijaynvr | 0:bc9f26b5dadf | 722 | mode = historyRegVal & 0xFD; // clear bit 1 |
vijaynvr | 0:bc9f26b5dadf | 723 | } |
vijaynvr | 0:bc9f26b5dadf | 724 | else |
vijaynvr | 0:bc9f26b5dadf | 725 | { |
vijaynvr | 0:bc9f26b5dadf | 726 | ret = COMMON_INVALID_PARAMS; |
vijaynvr | 0:bc9f26b5dadf | 727 | } |
vijaynvr | 0:bc9f26b5dadf | 728 | i2c_write_byte(SYSTEM_HISTORY_CTRL, mode, device_base_address); |
vijaynvr | 0:bc9f26b5dadf | 729 | |
vijaynvr | 0:bc9f26b5dadf | 730 | LOG_FUNCTION_END(ret); |
vijaynvr | 0:bc9f26b5dadf | 731 | |
vijaynvr | 0:bc9f26b5dadf | 732 | return ret; |
vijaynvr | 0:bc9f26b5dadf | 733 | } |
vijaynvr | 0:bc9f26b5dadf | 734 | |
vijaynvr | 0:bc9f26b5dadf | 735 | uint8_t common_get_history_buffer_mode(uint8_t device_base_address) |
vijaynvr | 0:bc9f26b5dadf | 736 | { |
vijaynvr | 0:bc9f26b5dadf | 737 | int32_t ret = HISTORY_BUFFER_RANGING_MODE; |
vijaynvr | 0:bc9f26b5dadf | 738 | |
vijaynvr | 0:bc9f26b5dadf | 739 | LOG_FUNCTION_START((void*)&device_base_address); |
vijaynvr | 0:bc9f26b5dadf | 740 | |
vijaynvr | 0:bc9f26b5dadf | 741 | if (i2c_read_byte(SYSTEM_HISTORY_CTRL, device_base_address) & HISTORY_BUFFER_MODE) |
vijaynvr | 0:bc9f26b5dadf | 742 | { |
vijaynvr | 0:bc9f26b5dadf | 743 | ret = HISTORY_BUFFER_ALS_MODE; |
vijaynvr | 0:bc9f26b5dadf | 744 | } |
vijaynvr | 0:bc9f26b5dadf | 745 | |
vijaynvr | 0:bc9f26b5dadf | 746 | LOG_FUNCTION_END(ret); |
vijaynvr | 0:bc9f26b5dadf | 747 | |
vijaynvr | 0:bc9f26b5dadf | 748 | return ret; |
vijaynvr | 0:bc9f26b5dadf | 749 | } |
vijaynvr | 0:bc9f26b5dadf | 750 | |
vijaynvr | 0:bc9f26b5dadf | 751 | sensor_error common_set_history_buffer_clear(uint8_t device_base_address) |
vijaynvr | 0:bc9f26b5dadf | 752 | { |
vijaynvr | 0:bc9f26b5dadf | 753 | uint8_t mode; |
vijaynvr | 0:bc9f26b5dadf | 754 | |
vijaynvr | 0:bc9f26b5dadf | 755 | LOG_FUNCTION_START((void*)&device_base_address); |
vijaynvr | 0:bc9f26b5dadf | 756 | |
vijaynvr | 0:bc9f26b5dadf | 757 | mode = i2c_read_byte(SYSTEM_HISTORY_CTRL, device_base_address); |
vijaynvr | 0:bc9f26b5dadf | 758 | mode = mode | 0x04; // set bit 2 to 1 to clear history buffer |
vijaynvr | 0:bc9f26b5dadf | 759 | i2c_write_byte(SYSTEM_HISTORY_CTRL, mode, device_base_address); |
vijaynvr | 0:bc9f26b5dadf | 760 | |
vijaynvr | 0:bc9f26b5dadf | 761 | LOG_FUNCTION_END(NULL); |
vijaynvr | 0:bc9f26b5dadf | 762 | |
vijaynvr | 0:bc9f26b5dadf | 763 | return SENSOR_ERROR_NONE; |
vijaynvr | 0:bc9f26b5dadf | 764 | } |
vijaynvr | 0:bc9f26b5dadf | 765 | |
vijaynvr | 0:bc9f26b5dadf | 766 | bool_t common_get_history_buffer_clear(uint8_t device_base_address) |
vijaynvr | 0:bc9f26b5dadf | 767 | { |
vijaynvr | 0:bc9f26b5dadf | 768 | bool_t ret = FALSE; |
vijaynvr | 0:bc9f26b5dadf | 769 | |
vijaynvr | 0:bc9f26b5dadf | 770 | LOG_FUNCTION_START((void*)&device_base_address); |
vijaynvr | 0:bc9f26b5dadf | 771 | if (i2c_read_byte(SYSTEM_HISTORY_CTRL, device_base_address) & HISTORY_BUFFER_CLEARED) |
vijaynvr | 0:bc9f26b5dadf | 772 | { |
vijaynvr | 0:bc9f26b5dadf | 773 | ret= TRUE; |
vijaynvr | 0:bc9f26b5dadf | 774 | } |
vijaynvr | 0:bc9f26b5dadf | 775 | LOG_FUNCTION_END(ret); |
vijaynvr | 0:bc9f26b5dadf | 776 | |
vijaynvr | 0:bc9f26b5dadf | 777 | return ret; |
vijaynvr | 0:bc9f26b5dadf | 778 | } |
vijaynvr | 0:bc9f26b5dadf | 779 | |
vijaynvr | 0:bc9f26b5dadf | 780 | sensor_error common_set_system_interrupt_clear_error(uint8_t device_base_address) |
vijaynvr | 0:bc9f26b5dadf | 781 | { |
vijaynvr | 0:bc9f26b5dadf | 782 | |
vijaynvr | 0:bc9f26b5dadf | 783 | LOG_FUNCTION_START((void*)&device_base_address); |
vijaynvr | 0:bc9f26b5dadf | 784 | |
vijaynvr | 0:bc9f26b5dadf | 785 | i2c_write_byte(SYSTEM_INTERRUPT_CLEAR, INTERRUPT_CLEAR_ERROR, device_base_address); |
vijaynvr | 0:bc9f26b5dadf | 786 | |
vijaynvr | 0:bc9f26b5dadf | 787 | LOG_FUNCTION_END(NULL); |
vijaynvr | 0:bc9f26b5dadf | 788 | |
vijaynvr | 0:bc9f26b5dadf | 789 | return SENSOR_ERROR_NONE; |
vijaynvr | 0:bc9f26b5dadf | 790 | } |
vijaynvr | 0:bc9f26b5dadf | 791 | |
vijaynvr | 0:bc9f26b5dadf | 792 | uint8_t common_get_error_result_interrupt_status_gpio(uint8_t device_base_address) |
vijaynvr | 0:bc9f26b5dadf | 793 | { |
vijaynvr | 0:bc9f26b5dadf | 794 | uint8_t ret = 0; |
vijaynvr | 0:bc9f26b5dadf | 795 | |
vijaynvr | 0:bc9f26b5dadf | 796 | LOG_FUNCTION_START((void*)&device_base_address); |
vijaynvr | 0:bc9f26b5dadf | 797 | |
vijaynvr | 0:bc9f26b5dadf | 798 | ret = ( (i2c_read_byte(RESULT_INTERRUPT_STATUS_GPIO, device_base_address) & 0xC0) >> 6 ); |
vijaynvr | 0:bc9f26b5dadf | 799 | |
vijaynvr | 0:bc9f26b5dadf | 800 | LOG_FUNCTION_END(ret); |
vijaynvr | 0:bc9f26b5dadf | 801 | |
vijaynvr | 0:bc9f26b5dadf | 802 | return ret; |
vijaynvr | 0:bc9f26b5dadf | 803 | } |
vijaynvr | 0:bc9f26b5dadf | 804 | |
vijaynvr | 0:bc9f26b5dadf | 805 | sensor_error common_clear_system_fresh_out_of_reset(uint8_t device_base_address) |
vijaynvr | 0:bc9f26b5dadf | 806 | { |
vijaynvr | 0:bc9f26b5dadf | 807 | |
vijaynvr | 0:bc9f26b5dadf | 808 | LOG_FUNCTION_START((void*)&device_base_address); |
vijaynvr | 0:bc9f26b5dadf | 809 | |
vijaynvr | 0:bc9f26b5dadf | 810 | i2c_write_byte(SYSTEM_FRESH_OUT_OF_RESET, 0x00, device_base_address); |
vijaynvr | 0:bc9f26b5dadf | 811 | |
vijaynvr | 0:bc9f26b5dadf | 812 | LOG_FUNCTION_END(NULL); |
vijaynvr | 0:bc9f26b5dadf | 813 | |
vijaynvr | 0:bc9f26b5dadf | 814 | return SENSOR_ERROR_NONE; |
vijaynvr | 0:bc9f26b5dadf | 815 | } |
vijaynvr | 0:bc9f26b5dadf | 816 | |
vijaynvr | 0:bc9f26b5dadf | 817 | bool_t common_get_system_fresh_out_of_reset(uint8_t device_base_address) |
vijaynvr | 0:bc9f26b5dadf | 818 | { |
vijaynvr | 0:bc9f26b5dadf | 819 | uint8_t cFreshOutOfReset = 0x01; |
vijaynvr | 0:bc9f26b5dadf | 820 | bool_t ret= FALSE; |
vijaynvr | 0:bc9f26b5dadf | 821 | |
vijaynvr | 0:bc9f26b5dadf | 822 | LOG_FUNCTION_START((void*)&device_base_address); |
vijaynvr | 0:bc9f26b5dadf | 823 | |
vijaynvr | 0:bc9f26b5dadf | 824 | if (i2c_read_byte(SYSTEM_FRESH_OUT_OF_RESET, device_base_address) & cFreshOutOfReset) |
vijaynvr | 0:bc9f26b5dadf | 825 | { |
vijaynvr | 0:bc9f26b5dadf | 826 | ret = TRUE; |
vijaynvr | 0:bc9f26b5dadf | 827 | } |
vijaynvr | 0:bc9f26b5dadf | 828 | |
vijaynvr | 0:bc9f26b5dadf | 829 | LOG_FUNCTION_END(ret); |
vijaynvr | 0:bc9f26b5dadf | 830 | |
vijaynvr | 0:bc9f26b5dadf | 831 | return ret; |
vijaynvr | 0:bc9f26b5dadf | 832 | } |
vijaynvr | 0:bc9f26b5dadf | 833 | |
vijaynvr | 0:bc9f26b5dadf | 834 | sensor_error common_set_system_group_parameter_hold(uint8_t device_base_address) |
vijaynvr | 0:bc9f26b5dadf | 835 | { |
vijaynvr | 0:bc9f26b5dadf | 836 | |
vijaynvr | 0:bc9f26b5dadf | 837 | LOG_FUNCTION_START((void*)&device_base_address); |
vijaynvr | 0:bc9f26b5dadf | 838 | |
vijaynvr | 0:bc9f26b5dadf | 839 | i2c_write_byte(SYSTEM_GROUPED_PARAMETER_HOLD, 0x01, device_base_address); |
vijaynvr | 0:bc9f26b5dadf | 840 | |
vijaynvr | 0:bc9f26b5dadf | 841 | LOG_FUNCTION_END(NULL); |
vijaynvr | 0:bc9f26b5dadf | 842 | |
vijaynvr | 0:bc9f26b5dadf | 843 | return SENSOR_ERROR_NONE; |
vijaynvr | 0:bc9f26b5dadf | 844 | } |
vijaynvr | 0:bc9f26b5dadf | 845 | |
vijaynvr | 0:bc9f26b5dadf | 846 | sensor_error common_clear_system_group_parameter_hold(uint8_t device_base_address) |
vijaynvr | 0:bc9f26b5dadf | 847 | { |
vijaynvr | 0:bc9f26b5dadf | 848 | |
vijaynvr | 0:bc9f26b5dadf | 849 | LOG_FUNCTION_START((void*)&device_base_address); |
vijaynvr | 0:bc9f26b5dadf | 850 | |
vijaynvr | 0:bc9f26b5dadf | 851 | i2c_write_byte(SYSTEM_GROUPED_PARAMETER_HOLD, 0x00, device_base_address); |
vijaynvr | 0:bc9f26b5dadf | 852 | |
vijaynvr | 0:bc9f26b5dadf | 853 | LOG_FUNCTION_END(NULL); |
vijaynvr | 0:bc9f26b5dadf | 854 | |
vijaynvr | 0:bc9f26b5dadf | 855 | return SENSOR_ERROR_NONE; |
vijaynvr | 0:bc9f26b5dadf | 856 | } |
vijaynvr | 0:bc9f26b5dadf | 857 | |
vijaynvr | 0:bc9f26b5dadf | 858 | uint8_t common_get_system_fatal_error_code(uint8_t device_base_address) |
vijaynvr | 0:bc9f26b5dadf | 859 | { |
vijaynvr | 0:bc9f26b5dadf | 860 | uint8_t ret = 0; |
vijaynvr | 0:bc9f26b5dadf | 861 | |
vijaynvr | 0:bc9f26b5dadf | 862 | LOG_FUNCTION_START((void*)&device_base_address); |
vijaynvr | 0:bc9f26b5dadf | 863 | |
vijaynvr | 0:bc9f26b5dadf | 864 | ret = i2c_read_byte(SYSTEM_FATAL_ERROR_CODE, device_base_address); |
vijaynvr | 0:bc9f26b5dadf | 865 | |
vijaynvr | 0:bc9f26b5dadf | 866 | LOG_FUNCTION_END(ret); |
vijaynvr | 0:bc9f26b5dadf | 867 | |
vijaynvr | 0:bc9f26b5dadf | 868 | return ret; |
vijaynvr | 0:bc9f26b5dadf | 869 | } |
vijaynvr | 0:bc9f26b5dadf | 870 | |
vijaynvr | 0:bc9f26b5dadf | 871 | uint8_t common_get_system_fatal_error_status(uint8_t device_base_address) |
vijaynvr | 0:bc9f26b5dadf | 872 | { |
vijaynvr | 0:bc9f26b5dadf | 873 | uint8_t ret = 0; |
vijaynvr | 0:bc9f26b5dadf | 874 | |
vijaynvr | 0:bc9f26b5dadf | 875 | LOG_FUNCTION_START((void*)&device_base_address); |
vijaynvr | 0:bc9f26b5dadf | 876 | |
vijaynvr | 0:bc9f26b5dadf | 877 | ret = i2c_read_byte(SYSTEM_FATAL_ERROR_STATUS, device_base_address); |
vijaynvr | 0:bc9f26b5dadf | 878 | |
vijaynvr | 0:bc9f26b5dadf | 879 | LOG_FUNCTION_END(ret); |
vijaynvr | 0:bc9f26b5dadf | 880 | |
vijaynvr | 0:bc9f26b5dadf | 881 | return ret; |
vijaynvr | 0:bc9f26b5dadf | 882 | } |
vijaynvr | 0:bc9f26b5dadf | 883 | |
vijaynvr | 0:bc9f26b5dadf | 884 | // ?? |
vijaynvr | 0:bc9f26b5dadf | 885 | uint8_t common_get_system_health_check(uint8_t device_base_address) |
vijaynvr | 0:bc9f26b5dadf | 886 | { |
vijaynvr | 0:bc9f26b5dadf | 887 | // return threshold |
vijaynvr | 0:bc9f26b5dadf | 888 | return 1; // temp only, will stub is here! |
vijaynvr | 0:bc9f26b5dadf | 889 | } |
vijaynvr | 0:bc9f26b5dadf | 890 |