MAX20361 Demo Firmware
Dependencies: SX1276GenericLib USBDevice
Fork of PICO_LoRa_Module_developing by
MAX44009/MAX44009_lib.h@5:9e751733a6f3, 2020-10-13 (annotated)
- Committer:
- walterluu
- Date:
- Tue Oct 13 00:45:46 2020 +0000
- Revision:
- 5:9e751733a6f3
- Parent:
- 3:85fc843a9d7d
Firmware Master and Slave in functional stage
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
walterluu | 3:85fc843a9d7d | 1 | #include "mbed.h" |
walterluu | 3:85fc843a9d7d | 2 | |
walterluu | 3:85fc843a9d7d | 3 | //MAX44009 Registers |
walterluu | 3:85fc843a9d7d | 4 | #define MAX44009_INT_STATUS 0x00 // MAX44009 interrupt status regiter |
walterluu | 3:85fc843a9d7d | 5 | #define MAX44009_INT_EN 0x01 // MAX44009 Interrupt Enable |
walterluu | 3:85fc843a9d7d | 6 | #define MAX44009_CONFIG 0x02 // MAX44009 Configuration Register |
walterluu | 3:85fc843a9d7d | 7 | #define MAX44009_LUX_HI 0x03 // MAX44009 Lux High Byte |
walterluu | 3:85fc843a9d7d | 8 | #define MAX44009_LUX_LO 0x04 // MAX44009 Lux Low Byte |
walterluu | 3:85fc843a9d7d | 9 | #define MAX44009_THR_HI 0x05 // MAX44009 Upper Threshold High Byte |
walterluu | 3:85fc843a9d7d | 10 | #define MAX44009_THR_LO 0x06 // MAX44009 Lower Threshold High Byte |
walterluu | 3:85fc843a9d7d | 11 | #define MAX44009_THR_TM 0x07 // MAX44009 Threshold Timer |
walterluu | 3:85fc843a9d7d | 12 | |
walterluu | 3:85fc843a9d7d | 13 | #define DEVICE_ACK 0 |
walterluu | 3:85fc843a9d7d | 14 | #define DEVICE_NACK 1 |
walterluu | 3:85fc843a9d7d | 15 | #define DEVICE_BAD_RESP 2 |
walterluu | 3:85fc843a9d7d | 16 | |
walterluu | 3:85fc843a9d7d | 17 | #define MAX_DEVICES 64 // Maximum number of rom devices allowed |
walterluu | 3:85fc843a9d7d | 18 | #define ID_LENGTH 6 // Rom ID length in bytes |
walterluu | 3:85fc843a9d7d | 19 | |
walterluu | 3:85fc843a9d7d | 20 | struct MAX44009_struct { |
walterluu | 3:85fc843a9d7d | 21 | char rom_id[ID_LENGTH]; // device ROM ID |
walterluu | 3:85fc843a9d7d | 22 | char I2C_address; // I2C addess, based on GPIO0 and GPIO1 at power up |
walterluu | 3:85fc843a9d7d | 23 | // Why char? |
walterluu | 3:85fc843a9d7d | 24 | }; |
walterluu | 3:85fc843a9d7d | 25 | |
walterluu | 3:85fc843a9d7d | 26 | struct LuxResponse { |
walterluu | 3:85fc843a9d7d | 27 | double luxValue; // Light level in lux |
walterluu | 3:85fc843a9d7d | 28 | int status; // Status of Lux read. 0 for success, 1 for error |
walterluu | 3:85fc843a9d7d | 29 | }; |
walterluu | 3:85fc843a9d7d | 30 | |
walterluu | 3:85fc843a9d7d | 31 | // ***************************************************************************** |
walterluu | 3:85fc843a9d7d | 32 | // MAX44009_write_register(char, char, char) writes single byte to MAX44009 |
walterluu | 3:85fc843a9d7d | 33 | // char I2C address |
walterluu | 3:85fc843a9d7d | 34 | // char MAX44009 register address |
walterluu | 3:85fc843a9d7d | 35 | // char data byte to be writen |
walterluu | 3:85fc843a9d7d | 36 | // returns 0 on success ACK, 1 on NACK |
walterluu | 3:85fc843a9d7d | 37 | // ***************************************************************************** |
walterluu | 3:85fc843a9d7d | 38 | int MAX44009_write_register(I2C *i2c, char I2C_add, char reg_add, char byte); |
walterluu | 3:85fc843a9d7d | 39 | |
walterluu | 3:85fc843a9d7d | 40 | /// **************************************************************************** |
walterluu | 3:85fc843a9d7d | 41 | // MAX44009_write_register(char, char, char *, int) writes multiple bytes to MAX44009 |
walterluu | 3:85fc843a9d7d | 42 | // char I2C address |
walterluu | 3:85fc843a9d7d | 43 | // char MAX44009 register address |
walterluu | 3:85fc843a9d7d | 44 | // char * data vector of bytes to be written |
walterluu | 3:85fc843a9d7d | 45 | // int number of bytes to write |
walterluu | 3:85fc843a9d7d | 46 | // returns 0 on success ACK, 1 on NACK |
walterluu | 3:85fc843a9d7d | 47 | // ***************************************************************************** |
walterluu | 3:85fc843a9d7d | 48 | int MAX44009_write_register(I2C *i2c, char I2C_add, char reg_add, char *bytes, int n); |
walterluu | 3:85fc843a9d7d | 49 | |
walterluu | 3:85fc843a9d7d | 50 | // ***************************************************************************** |
walterluu | 3:85fc843a9d7d | 51 | // MAX44009_read_register(char, char, char *, int) reads single byte from MAX44009 |
walterluu | 3:85fc843a9d7d | 52 | // char I2C address |
walterluu | 3:85fc843a9d7d | 53 | // char MAX44009 register address |
walterluu | 3:85fc843a9d7d | 54 | // char * data vector for read bytes to be stored in |
walterluu | 3:85fc843a9d7d | 55 | // returns 0 on success, 1 on fail |
walterluu | 3:85fc843a9d7d | 56 | // ***************************************************************************** |
walterluu | 3:85fc843a9d7d | 57 | int MAX44009_read_register(I2C *i2c, char I2C_add, char reg_add, char *bytes); |
walterluu | 3:85fc843a9d7d | 58 | |
walterluu | 3:85fc843a9d7d | 59 | // ***************************************************************************** |
walterluu | 3:85fc843a9d7d | 60 | // MAX44009_read_lux_register(char, char, char *, int) reads lux value bytes from MAX44009 |
walterluu | 3:85fc843a9d7d | 61 | // char I2C address |
walterluu | 3:85fc843a9d7d | 62 | // char MAX44009 register address |
walterluu | 3:85fc843a9d7d | 63 | // char * data vector for read bytes to be stored in |
walterluu | 3:85fc843a9d7d | 64 | // returns 0 on success, 1 on fail |
walterluu | 3:85fc843a9d7d | 65 | // ***************************************************************************** |
walterluu | 3:85fc843a9d7d | 66 | int MAX44009_read_lux_register(I2C *i2c, char I2C_add, char reg_add, char *bytes); |
walterluu | 3:85fc843a9d7d | 67 | |
walterluu | 3:85fc843a9d7d | 68 | // ***************************************************************************** |
walterluu | 3:85fc843a9d7d | 69 | // convert_temperature(char) sends convert command to MAX44009 device |
walterluu | 3:85fc843a9d7d | 70 | // char I2C address |
walterluu | 3:85fc843a9d7d | 71 | // ***************************************************************************** |
walterluu | 3:85fc843a9d7d | 72 | //void convert_temperature(I2C *i2c, char I2C_add); |
walterluu | 3:85fc843a9d7d | 73 | |
walterluu | 3:85fc843a9d7d | 74 | //****************************************************************************** |
walterluu | 3:85fc843a9d7d | 75 | // get_luxvalue(char) read lux value from MAX44009 device register |
walterluu | 3:85fc843a9d7d | 76 | // char I2C address |
walterluu | 3:85fc843a9d7d | 77 | // returns LuxResponse luxValue = light intensity in lux |
walterluu | 3:85fc843a9d7d | 78 | // status = register read result |
walterluu | 3:85fc843a9d7d | 79 | //****************************************************************************** |
walterluu | 5:9e751733a6f3 | 80 | LuxResponse get_luxvalue(I2C *i2c, char I2C_add); |
walterluu | 5:9e751733a6f3 | 81 | |
walterluu | 5:9e751733a6f3 | 82 | double calc_lux(char *data); |