SRK Version of mDot LoRa_Sensormode_SRK

Dependencies:   libmDot mbed-rtos mbed

Fork of mDot_LoRa_Sensornode by Adrian Mitevski

Committer:
skramer
Date:
Mon Aug 15 18:57:35 2016 +0000
Revision:
6:e2ae47490f60
Parent:
0:f2815503561f
Uptodate with last changes

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mitea1 0:f2815503561f 1 /*
mitea1 0:f2815503561f 2 * SI1143.cpp
mitea1 0:f2815503561f 3 *
mitea1 0:f2815503561f 4 * Created on: Jun 2, 2016
mitea1 0:f2815503561f 5 * Author: Adrian
mitea1 0:f2815503561f 6 */
mitea1 0:f2815503561f 7
mitea1 0:f2815503561f 8 #include "SI1143.h"
mitea1 0:f2815503561f 9
mitea1 0:f2815503561f 10 SI1143::SI1143(I2C_RT* i2c)
mitea1 0:f2815503561f 11 {
mitea1 0:f2815503561f 12 this->i2c = i2c;
mitea1 0:f2815503561f 13 this->config = new SI1143Config();
mitea1 0:f2815503561f 14 }
mitea1 0:f2815503561f 15
mitea1 0:f2815503561f 16 void SI1143::init(SI1143_MODE desiredMode){
mitea1 0:f2815503561f 17 config->build(desiredMode);
mitea1 0:f2815503561f 18 restart();
mitea1 0:f2815503561f 19 }
mitea1 0:f2815503561f 20
mitea1 0:f2815503561f 21 void SI1143::restart()
mitea1 0:f2815503561f 22 {
mitea1 0:f2815503561f 23 command(SI1143_RESET);
mitea1 0:f2815503561f 24 osDelay(30);
mitea1 0:f2815503561f 25 uint8_t writeValue;
mitea1 0:f2815503561f 26
mitea1 0:f2815503561f 27 // Setting up LED Power to full
mitea1 0:f2815503561f 28 writeValue = SI1143_HW_KEY_VAL0;
mitea1 0:f2815503561f 29 i2c->write_RT((SI1143_IR_ADDRESS<<1),SI1143_HW_KEY,false,&writeValue,1);
mitea1 0:f2815503561f 30 writeValue = config->getLed1Voltage();
mitea1 0:f2815503561f 31 i2c->write_RT((SI1143_IR_ADDRESS<<1),SI1143_PS_LED21,false,&writeValue,1);
mitea1 0:f2815503561f 32 writeValue = 0x0A;
mitea1 0:f2815503561f 33 i2c->write_RT((SI1143_IR_ADDRESS<<1),SI1143_PS_LED3,false,&writeValue,1);
mitea1 0:f2815503561f 34 writeValue = SI1143_ALS_IR_TASK + SI1143_ALS_VIS_TASK + SI1143_PS1_TASK +
mitea1 0:f2815503561f 35 SI1143_PS2_TASK + SI1143_PS3_TASK;
mitea1 0:f2815503561f 36 i2c->write_RT((SI1143_IR_ADDRESS<<1),SI1143_PARAM_WR,false,&writeValue,1);
mitea1 0:f2815503561f 37 command(SI1143_PARAM_SET + (SI1143_CHLIST & 0x1F));
mitea1 0:f2815503561f 38 writeValue = 0x04;
mitea1 0:f2815503561f 39 i2c->write_RT((SI1143_IR_ADDRESS<<1),SI1143_PARAM_WR,false,&writeValue,1);
mitea1 0:f2815503561f 40 command(SI1143_PARAM_SET + (SI1143_PS_ADC_MISC & 0x1F));
mitea1 0:f2815503561f 41
mitea1 0:f2815503561f 42 i2c->write_RT((SI1143_IR_ADDRESS<<1),SI1143_INT_CFG,false,0,1);
mitea1 0:f2815503561f 43 i2c->write_RT((SI1143_IR_ADDRESS<<1),SI1143_IRQ_ENABLE,false,0,1);
mitea1 0:f2815503561f 44 i2c->write_RT((SI1143_IR_ADDRESS<<1),SI1143_IRQ_MODE1,false,0,1);
mitea1 0:f2815503561f 45 i2c->write_RT((SI1143_IR_ADDRESS<<1),SI1143_IRQ_MODE2,false,0,1);
mitea1 0:f2815503561f 46 }
mitea1 0:f2815503561f 47 //
mitea1 0:f2815503561f 48 void SI1143::command(uint8_t cmd)
mitea1 0:f2815503561f 49 {
mitea1 0:f2815503561f 50 uint8_t val;
mitea1 0:f2815503561f 51
mitea1 0:f2815503561f 52 i2c->read_RT((SI1143_IR_ADDRESS<<1),SI1143_RESPONSE,false,&val,1);
mitea1 0:f2815503561f 53 osDelay(100);
mitea1 0:f2815503561f 54 while(val!=0)
mitea1 0:f2815503561f 55 {
mitea1 0:f2815503561f 56 i2c->write_RT((SI1143_IR_ADDRESS<<1),SI1143_COMMAND,false,SI1143_NOP,1);
mitea1 0:f2815503561f 57 osDelay(10);
mitea1 0:f2815503561f 58 i2c->read_RT((SI1143_IR_ADDRESS<<1),SI1143_RESPONSE,false,&val,1);
mitea1 0:f2815503561f 59 }
mitea1 0:f2815503561f 60 do{
mitea1 0:f2815503561f 61 i2c->write_RT((SI1143_IR_ADDRESS<<1),SI1143_COMMAND,false,&cmd,1);
mitea1 0:f2815503561f 62 osDelay(10);
mitea1 0:f2815503561f 63 if(cmd==SI1143_RESET){
mitea1 0:f2815503561f 64 break;
mitea1 0:f2815503561f 65 }
mitea1 0:f2815503561f 66 osDelay(10);
mitea1 0:f2815503561f 67 i2c->read_RT((SI1143_IR_ADDRESS<<1),SI1143_RESPONSE,false,&val,1);
mitea1 0:f2815503561f 68
mitea1 0:f2815503561f 69 }while(val==0);
mitea1 0:f2815503561f 70 }
mitea1 0:f2815503561f 71
mitea1 0:f2815503561f 72 int SI1143::getProximity(int numberOfMeasurements) // Read the data for the first LED
mitea1 0:f2815503561f 73 {
mitea1 0:f2815503561f 74 uint8_t lowByte;
mitea1 0:f2815503561f 75 uint8_t highByte;
mitea1 0:f2815503561f 76 int stack = 0;
mitea1 0:f2815503561f 77 int proximity = 0;
mitea1 0:f2815503561f 78
mitea1 0:f2815503561f 79 command(SI1143_PSALS_FORCE);
mitea1 0:f2815503561f 80
mitea1 0:f2815503561f 81 for(int r=numberOfMeasurements; r>0; r=r-1)
mitea1 0:f2815503561f 82 {
mitea1 0:f2815503561f 83 i2c->read_RT((SI1143_IR_ADDRESS<<1),SI1143_PS1_DATA0,false,&lowByte,1);
mitea1 0:f2815503561f 84 i2c->read_RT((SI1143_IR_ADDRESS<<1),SI1143_PS1_DATA1,false,&highByte,1);
mitea1 0:f2815503561f 85 stack = stack + (highByte * 256) + lowByte;
mitea1 0:f2815503561f 86 }
mitea1 0:f2815503561f 87 proximity = stack / numberOfMeasurements;
mitea1 0:f2815503561f 88
mitea1 0:f2815503561f 89 return proximity;
mitea1 0:f2815503561f 90 }
mitea1 0:f2815503561f 91
mitea1 0:f2815503561f 92 int SI1143::getAmbientLight(int numberOfMeasurements) // Read the data for ambient light
mitea1 0:f2815503561f 93 {
mitea1 0:f2815503561f 94
mitea1 0:f2815503561f 95 uint8_t lowByte;
mitea1 0:f2815503561f 96 uint8_t highByte;
mitea1 0:f2815503561f 97 int stack = 0;
mitea1 0:f2815503561f 98 int ambientLight = 0;
mitea1 0:f2815503561f 99
mitea1 0:f2815503561f 100 command(SI1143_PSALS_FORCE);
mitea1 0:f2815503561f 101
mitea1 0:f2815503561f 102 for(int r=numberOfMeasurements; r>0; r=r-1)
mitea1 0:f2815503561f 103 {
mitea1 0:f2815503561f 104 i2c->read_RT((SI1143_IR_ADDRESS<<1),SI1143_ALS_VIS_DATA0,false,&lowByte,1);
mitea1 0:f2815503561f 105 i2c->read_RT((SI1143_IR_ADDRESS<<1),SI1143_ALS_VIS_DATA1,false,&highByte,1);
mitea1 0:f2815503561f 106 stack = stack + (highByte * 256) + lowByte;
mitea1 0:f2815503561f 107 }
mitea1 0:f2815503561f 108 ambientLight = stack / numberOfMeasurements;
mitea1 0:f2815503561f 109
mitea1 0:f2815503561f 110 return ambientLight;
mitea1 0:f2815503561f 111 }
mitea1 0:f2815503561f 112
mitea1 0:f2815503561f 113 int SI1143::getInfraRedLight(int numberOfMeasurements) // Read the data for infrared light
mitea1 0:f2815503561f 114 {
mitea1 0:f2815503561f 115 uint8_t lowByte;
mitea1 0:f2815503561f 116 uint8_t highByte;
mitea1 0:f2815503561f 117 int stack = 0;
mitea1 0:f2815503561f 118 int infraRedLight = 0;
mitea1 0:f2815503561f 119
mitea1 0:f2815503561f 120 command(SI1143_PSALS_FORCE);
mitea1 0:f2815503561f 121
mitea1 0:f2815503561f 122 for(int r=numberOfMeasurements; r>0; r=r-1)
mitea1 0:f2815503561f 123 {
mitea1 0:f2815503561f 124 i2c->read_RT((SI1143_IR_ADDRESS<<1),SI1143_ALS_IR_DATA0,false,&lowByte,1);
mitea1 0:f2815503561f 125 i2c->read_RT((SI1143_IR_ADDRESS<<1),SI1143_ALS_IR_DATA1,false,&highByte,1);
mitea1 0:f2815503561f 126 stack = stack + (highByte * 256) + lowByte;
mitea1 0:f2815503561f 127 }
mitea1 0:f2815503561f 128 infraRedLight = stack / numberOfMeasurements;
mitea1 0:f2815503561f 129
mitea1 0:f2815503561f 130 return infraRedLight;
mitea1 0:f2815503561f 131 }
mitea1 0:f2815503561f 132
mitea1 0:f2815503561f 133 void SI1143::configureInterrupts(){
mitea1 0:f2815503561f 134 uint8_t interruptEnableValue = config->getInterruptEnable();
mitea1 0:f2815503561f 135
mitea1 0:f2815503561f 136 i2c->write_RT((SI1143_IR_ADDRESS<<1),SI1143_IRQ_ENABLE,false,0,1);
mitea1 0:f2815503561f 137 }
mitea1 0:f2815503561f 138
mitea1 0:f2815503561f 139 void SI1143::setProximitySensing1Threshold(){
mitea1 0:f2815503561f 140 uint8_t thresholdLowByte = (config->getProximitySensing1Threshold()) & 0xFF;
mitea1 0:f2815503561f 141 uint8_t thresholdHighByte = (config->getProximitySensing1Threshold()) >> 8;
mitea1 0:f2815503561f 142
mitea1 0:f2815503561f 143 i2c->write_RT((SI1143_IR_ADDRESS<<1),SI1143_PS1_TH0,false,&thresholdLowByte,1);
mitea1 0:f2815503561f 144 i2c->write_RT((SI1143_IR_ADDRESS<<1),SI1143_PS1_TH1,false,&thresholdHighByte,1);
mitea1 0:f2815503561f 145
mitea1 0:f2815503561f 146 }
mitea1 0:f2815503561f 147
mitea1 0:f2815503561f 148