bmp280: support getting temperature via ioctl()

This commit is contained in:
Matias Nitsche 2020-06-15 12:29:52 -03:00 committed by Abdelatif Guettouche
parent 7ce175b614
commit 6c333d7cbf
2 changed files with 37 additions and 0 deletions

View File

@ -548,6 +548,33 @@ static uint32_t bmp280_getpressure(FAR struct bmp280_dev_s *priv)
return press;
}
/****************************************************************************
* Name: bmp280_gettemp
*
* Description:
* Read temperature only
*
****************************************************************************/
static uint32_t bmp280_gettemp(FAR struct bmp280_dev_s *priv)
{
uint8_t buf[3];
int32_t temp;
bmp280_getregs(priv, BMP280_TEMP_MSB, buf, 3);
temp = COMBINE(buf);
sninfo("temp = %d\n", temp);
if (priv->compensated == ENABLE_COMPENSATED)
{
temp = bmp280_compensate_temp(priv, temp);
}
return temp;
}
/****************************************************************************
* Name: bmp280_open
*
@ -641,6 +668,9 @@ static int bmp280_ioctl(FAR struct file *filep, int cmd, unsigned long arg)
ret = bmp280_set_standby(priv, arg);
break;
case SNIOC_GET_TEMP:
*(uint32_t*)arg = bmp280_gettemp(priv);
default:
snerr("Unrecognized cmd: %d\n", cmd);
ret = - ENOTTY;

View File

@ -112,6 +112,13 @@ extern "C"
#define SNIOC_SETSTB _SNIOC(0x0003)
/* Get temperature value
*
* Arg: Pointer to uint32_t (raw value)
*/
#define SNIOC_GET_TEMP _SNIOC(0x0004)
struct bmp280_press_adj_s
{
uint16_t dig_p1; /* calibration P1 data */