mirror of
https://github.com/subsurface/subsurface.git
synced 2025-01-19 14:25:27 +00:00
core: use int16_t for sensor-id
The sensor-id in the sample struct was a uint8_t, with all the known problems of unsigned integers. In the rest of the code cylinder ids are signed integers. To avoid confusion, make it a signed int. int8_t should be enough (max. 127 cylinders). To allow for degenerate cases, use an int16_t. 16k cylinders should be enough for everyone. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
This commit is contained in:
parent
8ac0519a99
commit
0c84f369c3
2 changed files with 9 additions and 9 deletions
|
@ -700,7 +700,7 @@ static void try_to_match_autogroup(const char *name, char *buf)
|
||||||
nonmatch("autogroup", name, buf);
|
nonmatch("autogroup", name, buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void get_cylinderindex(char *buffer, uint8_t *i, struct parser_state *state)
|
static void get_cylinderindex(char *buffer, int16_t *i, struct parser_state *state)
|
||||||
{
|
{
|
||||||
*i = atoi(buffer);
|
*i = atoi(buffer);
|
||||||
if (state->lastcylinderindex != *i) {
|
if (state->lastcylinderindex != *i) {
|
||||||
|
@ -709,7 +709,7 @@ static void get_cylinderindex(char *buffer, uint8_t *i, struct parser_state *sta
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void get_sensor(char *buffer, uint8_t *i)
|
static void get_sensor(char *buffer, int16_t *i)
|
||||||
{
|
{
|
||||||
*i = atoi(buffer);
|
*i = atoi(buffer);
|
||||||
}
|
}
|
||||||
|
@ -839,7 +839,7 @@ static void try_to_fill_dc(struct divecomputer *dc, const char *name, char *buf,
|
||||||
return;
|
return;
|
||||||
if (MATCH("dctype", get_dc_type, &dc->divemode))
|
if (MATCH("dctype", get_dc_type, &dc->divemode))
|
||||||
return;
|
return;
|
||||||
if (MATCH("no_o2sensors", get_sensor, &dc->no_o2sensors))
|
if (MATCH("no_o2sensors", get_uint8, &dc->no_o2sensors))
|
||||||
return;
|
return;
|
||||||
if (match_dc_data_fields(dc, name, buf, state))
|
if (match_dc_data_fields(dc, name, buf, state))
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -9,7 +9,7 @@ extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define MAX_SENSORS 2
|
#define MAX_SENSORS 2
|
||||||
#define NO_SENSOR ((uint8_t)-1)
|
#define NO_SENSOR -1
|
||||||
|
|
||||||
struct sample // BASE TYPE BYTES UNITS RANGE DESCRIPTION
|
struct sample // BASE TYPE BYTES UNITS RANGE DESCRIPTION
|
||||||
{ // --------- ----- ----- ----- -----------
|
{ // --------- ----- ----- ----- -----------
|
||||||
|
@ -21,18 +21,18 @@ struct sample // BASE TYPE BYTES UNITS RANGE
|
||||||
depth_t depth; // int32_t 4 mm (0-2000 km) dive depth of this sample
|
depth_t depth; // int32_t 4 mm (0-2000 km) dive depth of this sample
|
||||||
depth_t stopdepth; // int32_t 4 mm (0-2000 km) depth of next deco stop
|
depth_t stopdepth; // int32_t 4 mm (0-2000 km) depth of next deco stop
|
||||||
temperature_t temperature; // uint32_t 4 mK (0-4 MK) ambient temperature
|
temperature_t temperature; // uint32_t 4 mK (0-4 MK) ambient temperature
|
||||||
pressure_t pressure[MAX_SENSORS]; // int32_t 4 mbar (0-2 Mbar) cylinder pressures (main and CCR o2)
|
pressure_t pressure[MAX_SENSORS]; // int32_t 2x4 mbar (0-2 Mbar) cylinder pressures (main and CCR o2)
|
||||||
o2pressure_t setpoint; // uint16_t 2 mbar (0-65 bar) O2 partial pressure (will be setpoint)
|
o2pressure_t setpoint; // uint16_t 2 mbar (0-65 bar) O2 partial pressure (will be setpoint)
|
||||||
o2pressure_t o2sensor[3]; // uint16_t 6 mbar (0-65 bar) Up to 3 PO2 sensor values (rebreather)
|
o2pressure_t o2sensor[3]; // uint16_t 3x2 mbar (0-65 bar) Up to 3 PO2 sensor values (rebreather)
|
||||||
bearing_t bearing; // int16_t 2 degrees (-1 no val, 0-360 deg) compass bearing
|
bearing_t bearing; // int16_t 2 degrees (-1 no val, 0-360 deg) compass bearing
|
||||||
uint8_t sensor[MAX_SENSORS]; // uint8_t 1 sensorID (0-254) ID of cylinder pressure sensor
|
int16_t sensor[MAX_SENSORS]; // int16_t 2x2 sensorID (0-16k) ID of cylinder pressure sensor
|
||||||
uint16_t cns; // uint16_t 1 % (0-64k %) cns% accumulated
|
uint16_t cns; // uint16_t 2 % (0-64k %) cns% accumulated
|
||||||
uint8_t heartbeat; // uint8_t 1 beats/m (0-255) heart rate measurement
|
uint8_t heartbeat; // uint8_t 1 beats/m (0-255) heart rate measurement
|
||||||
volume_t sac; // 4 ml/min predefined SAC
|
volume_t sac; // 4 ml/min predefined SAC
|
||||||
bool in_deco; // bool 1 y/n y/n this sample is part of deco
|
bool in_deco; // bool 1 y/n y/n this sample is part of deco
|
||||||
bool manually_entered; // bool 1 y/n y/n this sample was entered by the user,
|
bool manually_entered; // bool 1 y/n y/n this sample was entered by the user,
|
||||||
// not calculated when planning a dive
|
// not calculated when planning a dive
|
||||||
}; // Total size of structure: 57 bytes, excluding padding at end
|
}; // Total size of structure: 63 bytes, excluding padding at end
|
||||||
|
|
||||||
extern void add_sample_pressure(struct sample *sample, int sensor, int mbar);
|
extern void add_sample_pressure(struct sample *sample, int sensor, int mbar);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue