Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: max77650_charger_sample BufferedSerial SX1276GenericLib Adafruit-MotorShield NEO-6m-GPS MAX17055_EZconfig Adafruit_GFX USBDeviceHT Adafruit-PWM-Servo-Driver
GridEye/GridEye.h
- Committer:
- walterluu
- Date:
- 2021-12-29
- Revision:
- 44:8be011a3fba0
- Parent:
- 40:6f8744c366c2
File content as of revision 44:8be011a3fba0:
/**********************************************************************
* Copyright (C) 2016 Maxim Integrated Products, Inc., All Rights Reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included
* in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
* OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
* OTHER DEALINGS IN THE SOFTWARE.
*
* Except as contained in this notice, the name of Maxim Integrated
* Products, Inc. shall not be used except as stated in the Maxim Integrated
* Products, Inc. Branding Policy.
*
* The mere transfer of this software does not imply any licenses
* of trade secrets, proprietary technology, copyrights, patents,
* trademarks, maskwork rights, or any other form of intellectual
* property whatsoever. Maxim Integrated Products, Inc. retains all
* ownership rights.
**********************************************************************/
#ifndef GRIDEYE_H
#define GRIDEYE_H
#include "mbed.h"
#define I2C_WR_SUCCESS 0
#define I2C_WR_ERROR -1
/**
* @brief Object for interfacing to MAXREFDES131#
*
* @details MAXREFDES131# combines the DS28E17 1-wire to I2C bridge
* with the Panasonic AMG8833 GridEye sensor. The reference design also
* includes a DS2413 2ch open drain switch for controlling the MAX4717
* dual SPDT analog switch. The DS28E17 and AMG8833 are connected to
* the 1-wire bus via COM2 of the MAX4717 and COM1 is used for
* daisy-chaining additional modules. Disconnecting the DS28E17/AMG8833
* from the main 1-wire branch puts both devices to sleep and reduces current
* consumption from 10mA to a couple hundred uA.
*/
class GridEye
{
private:
I2C &m_i2cBus;
static const uint8_t I2C_ADRS = 0x68;
static const uint8_t I2C_W_ADRS_GRIDEYE = (uint8_t)((I2C_ADRS)<<1);
static const uint8_t I2C_R_ADRS_GRIDEYE = (uint8_t)((I2C_ADRS)<<1)+1;
public:
/**
* @brief GridEye operating modes
*/
enum OperatingMode
{
NormalMode = 0x00,
SleepMode = 0x10,
StandBy60sec = 0x20,
StandBy10sec = 0x21
};
/**
* @brief GridEye operating modes
*/
enum FrameRate
{
TenFPS = 0x00,
OneFPS = 0x01
};
/**
* @brief AMG8833 register map
*/
enum GridEyeRegister
{
OPERATING_MODE,
RESET,
FRAME_RATE,
INT_CONTROL,
STATUS,
STATUS_CLEAR,
AVERAGE = 7,
INT_LEVEL_1,
INT_LEVEL_2,
INT_LEVEL_3,
INT_LEVEL_4,
INT_LEVEL_5,
INT_LEVEL_6,
THERMISTOR_LOW,
THERMISTOR_HI,
INT_1,
INT_2,
INT_3,
INT_4,
INT_5,
INT_6,
INT_7,
INT_8,
PIXEL_BASE_ADRS = 0x80
};
/* static const uint8_t DS2413_FAMILY_CODE = 0x3A;
static const uint8_t DS28E17_FAMILY_CODE = 0x19;
*/
/**
* @brief GridEye Constructor
*
* @details setI2CBridge() by passing in I2C parameter
*
* @param[in] selector - MultidropRomIterator object that
* encapsulates ROM fxs of 1-wire protocol
*/
GridEye(I2C &i2c);
/**
* @brief gridEyeWriteReg
*
* @details Provides read/write access to the AMG8833
*
* On Entry:
* @param[in] regAdrs - AMG8833 register to start reading/writting
* from/to
* @param[in] numBytes - Number of bytes of data to write
* @param[in] dataBuf - Pointer to data buffer for storing data in
* on read, or data to be written on write
*
* On Exit:
*
* @return CmdResult - return 0 if the operation was sucessful, return -1 if unsucessful
*/
int8_t gridEyeWriteReg(GridEyeRegister reg_addr, int num_bytes, char * data_buf);
/**
* @brief gridEyeReadReg
*
* @details Provides read/write access to the AMG8833
*
* On Entry:
* @param[in] regAdrs - AMG8833 register to start reading/writting
* from/to
* @param[in] numBytes - Number of bytes to read
* @param[in] dataBuf - Pointer to data buffer for storing data in
* on read, or data to be written on write
*
* On Exit:
* @param[out] dataBuf - Read data on read operation
*
* @return CmdResult - return 0 if the operation was sucessful, return -1 if unsucessful
*/
int8_t gridEyeReadReg(GridEyeRegister reg_addr, int num_bytes, char * data_buf);
/**
* @brief getThermistorTemperature
*
* @details Gets internal thermistor temperature
*
* On Entry:
* @param[in] thermTemp - reference to int16_t var that will be overwritten
* with thermistor data
*
* On Exit:
* @param[out] thermTemp - thermistor data
*
* @return CmdResult - result of operation
*/
int8_t getThermistorTemperature(int16_t & therm_temp);
/**
* @brief getPixelTemperature
*
* @details Gets individual pixel temperature
*
* On Entry:
* @param[in] pixelAdrs - address of pixel to read
* @param[in] pixelTemp - reference to int16_t var that will be overwritten
* with thermistor data
*
* On Exit:
* @param[out] pixelTemp - pixel data
*
* @return CmdResult - result of operation
*/
int8_t getPixelTemperature(uint8_t pixel_addr, int16_t & pixel_temp);
/**
* @brief getRaw8x8FrameData
*
* @details Gets pixel frame(64 pixels in 128 bytes) temperature
*
* On Entry:
* @param[in] raw_frame_data - buffer to hold 2 bytes data per pixel
*
* On Exit:
* @param[out] raw_frame_data - pixel data not yet formatted
*
* @return int8_t - result of operation, 0 on success, -1 on failure
*/
int8_t getRaw8x8FrameData(char * raw_frame_data);
/**
* @brief softwareReset
*
* @details Makes the Grid Eye device perform a software restart with Initial conditions
*
* @return int8_t - result of operation, 0 on success, -1 on failure
*/
int8_t softwareReset();
/**
* @brief setOperatingMode
*
* @details Sets the mode of operation for the Grid Eye device
*
* On Entry:
* @param[in] mode - Choose power operating mode from struct
*
* @return int8_t - result of operation, 0 on success, -1 on failure
*/
int8_t setOperatingMode(GridEye::OperatingMode mode);
/**
* @brief setFrameRate
*
* @details Sets the frames per second that the grid eye device resolves
*
* On Entry:
* @param[in] mode - Choose option from either 10 fps or 1 fps
*
* @return int8_t - result of operation, 0 on success, -1 on failure
*/
int8_t setFrameRate(GridEye::FrameRate rate);
};
void convRaw8x8Data2Int(char * data, int16_t * frame_temp);
void convRaw8x8Data2Point25degC(char * data, int16_t * frame_temp);
void convSingleRawTempData2Int(char * data, int16_t & pixel_temp);
#endif /*GridEye_H*/