lora sensnode
Dependencies: libmDot mbed-rtos mbed
Fork of mDot_LoRa_Sensornode by
app/SI1143.cpp@1:e67174cc4953, 2016-08-10 (annotated)
- Committer:
- socie123
- Date:
- Wed Aug 10 12:54:10 2016 +0000
- Revision:
- 1:e67174cc4953
- Parent:
- 0:f2815503561f
lora sensnode
Who changed what in which revision?
User | Revision | Line number | New 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 |