Real Flight numbers are 16-bit unsigned values, but APIs using them
pass values that areoverloaded to also represent broken log slots
using negative numbers. This means that these APIs need to be able to
represent all 65535 possible flight numbers *and* all possible log
slots as negative values. Switch the variables holding only flight
numbers to uint16_t and those holding either a flight number or log
slot to int32_t.
Signed-off-by: Keith Packard <keithp@keithp.com>
uint32_t ao_log_start_pos;
uint8_t ao_log_running;
enum ao_flight_state ao_log_state;
uint32_t ao_log_start_pos;
uint8_t ao_log_running;
enum ao_flight_state ao_log_state;
-int16_t ao_flight_number;
+uint16_t ao_flight_number;
if (pos == 0) {
uint8_t i;
for (i = 1; i < LOG_MAX_ERASE; i++) {
if (pos == 0) {
uint8_t i;
for (i = 1; i < LOG_MAX_ERASE; i++) {
- erase.mark = ~LOG_ERASE_MARK;
+ erase.mark = (uint8_t) ~LOG_ERASE_MARK;
erase.flight = 0;
ao_config_write(ao_log_erase_pos(i), &erase, sizeof (erase));
}
erase.flight = 0;
ao_config_write(ao_log_erase_pos(i), &erase, sizeof (erase));
}
ao_log_flight(uint8_t slot)
{
if (ao_storage_is_erased(ao_log_pos_block_start(slot)))
ao_log_flight(uint8_t slot)
{
if (ao_storage_is_erased(ao_log_pos_block_start(slot)))
if (!ao_storage_read(ao_log_pos(slot),
&ao_log_data,
sizeof (ao_log_type)))
if (!ao_storage_read(ao_log_pos(slot),
&ao_log_data,
sizeof (ao_log_type)))
- return -(int16_t) (slot + 1);
+ return -(int32_t) (slot + 1);
if (!ao_log_check_data() || ao_log_data.type != AO_LOG_FLIGHT)
if (!ao_log_check_data() || ao_log_data.type != AO_LOG_FLIGHT)
- return -(int16_t) (slot + 1);
+ return -(int32_t) (slot + 1);
- return ao_log_data.u.flight.flight;
+ return (int32_t) ao_log_data.u.flight.flight;
return (uint8_t) (ao_storage_log_max / ao_config.flight_log_max);
}
return (uint8_t) (ao_storage_log_max / ao_config.flight_log_max);
}
ao_log_max_flight(void)
{
uint8_t log_slot;
uint8_t log_slots;
ao_log_max_flight(void)
{
uint8_t log_slot;
uint8_t log_slots;
- int16_t log_flight;
- int16_t max_flight = 0;
+ int32_t log_flight;
+ uint16_t max_flight = 0;
/* Scan the log space looking for the biggest flight number */
log_slots = ao_log_slots();
/* Scan the log space looking for the biggest flight number */
log_slots = ao_log_slots();
if (log_flight <= 0)
continue;
if (max_flight == 0 || log_flight > max_flight)
if (log_flight <= 0)
continue;
if (max_flight == 0 || log_flight > max_flight)
- max_flight = log_flight;
+ max_flight = (uint16_t) log_flight;
/* Find a log slot for the next flight, if available */
ao_log_current_pos = ao_log_end_pos = 0;
log_slots = ao_log_slots();
/* Find a log slot for the next flight, if available */
ao_log_current_pos = ao_log_end_pos = 0;
log_slots = ao_log_slots();
- log_want = (ao_flight_number - 1) % log_slots;
+ log_want = (uint8_t) ((ao_flight_number - 1) % log_slots);
log_slot = log_want;
do {
if (ao_log_flight(log_slot) == 0) {
log_slot = log_want;
do {
if (ao_log_flight(log_slot) == 0) {
{
uint8_t slot;
uint8_t slots;
{
uint8_t slot;
uint8_t slots;
slots = ao_log_slots();
for (slot = 0; slot < slots; slot++)
{
flight = ao_log_flight(slot);
if (flight)
slots = ao_log_slots();
for (slot = 0; slot < slots; slot++)
{
flight = ao_log_flight(slot);
if (flight)
- printf ("flight %d start %x end %x\n",
+ printf ("flight %ld start %x end %x\n",
flight,
(uint16_t) (ao_log_pos(slot) >> 8),
(uint16_t) (ao_log_pos_block_end(slot) >> 8));
flight,
(uint16_t) (ao_log_pos(slot) >> 8),
(uint16_t) (ao_log_pos_block_end(slot) >> 8));
{
uint8_t slot;
uint8_t slots;
{
uint8_t slot;
uint8_t slots;
- int16_t cmd_flight = 1;
+ int32_t cmd_flight = 1;
ao_cmd_white();
if (ao_cmd_lex_c == '-') {
cmd_flight = -1;
ao_cmd_lex();
}
ao_cmd_white();
if (ao_cmd_lex_c == '-') {
cmd_flight = -1;
ao_cmd_lex();
}
- cmd_flight *= ao_cmd_decimal();
+ cmd_flight *= (int32_t) ao_cmd_decimal();
if (ao_cmd_status != ao_cmd_success)
return;
if (ao_cmd_status != ao_cmd_success)
return;
- printf("No such flight: %d\n", cmd_flight);
+ printf("No such flight: %ld\n", cmd_flight);
}
const struct ao_cmds ao_log_cmds[] = {
}
const struct ao_cmds ao_log_cmds[] = {
* the log. Tasks may wait for this to be initialized
* by sleeping on this variable.
*/
* the log. Tasks may wait for this to be initialized
* by sleeping on this variable.
*/
-extern int16_t ao_flight_number;
+extern uint16_t ao_flight_number;
extern uint8_t ao_log_mutex;
extern uint32_t ao_log_current_pos;
extern uint32_t ao_log_end_pos;
extern uint8_t ao_log_mutex;
extern uint32_t ao_log_current_pos;
extern uint32_t ao_log_end_pos;
/* Return the flight number from the given log slot, 0 if none, -slot on failure */
/* Return the flight number from the given log slot, 0 if none, -slot on failure */
ao_log_flight(uint8_t slot);
/* Checksum the loaded log record */
ao_log_flight(uint8_t slot);
/* Checksum the loaded log record */
struct {
uint16_t flight; /* 4 */
int16_t ground_accel; /* 6 */
struct {
uint16_t flight; /* 4 */
int16_t ground_accel; /* 6 */
- uint32_t ground_pres; /* 8 */
+ int32_t ground_pres; /* 8 */
int16_t ground_accel_along; /* 12 */
int16_t ground_accel_across; /* 14 */
int16_t ground_accel_through; /* 16 */
int16_t ground_accel_along; /* 12 */
int16_t ground_accel_across; /* 14 */
int16_t ground_accel_through; /* 16 */
struct {
uint16_t flight; /* 4 */
int16_t ground_accel; /* 6 */
struct {
uint16_t flight; /* 4 */
int16_t ground_accel; /* 6 */
- uint32_t ground_pres; /* 8 */
+ int32_t ground_pres; /* 8 */
int16_t ground_accel_along; /* 12 */
int16_t ground_accel_across; /* 14 */
int16_t ground_accel_through; /* 16 */
int16_t ground_accel_along; /* 12 */
int16_t ground_accel_across; /* 14 */
int16_t ground_accel_through; /* 16 */
struct {
uint16_t flight; /* 4 */
int16_t ground_accel; /* 6 */
struct {
uint16_t flight; /* 4 */
int16_t ground_accel; /* 6 */
- uint32_t ground_pres; /* 8 */
+ int32_t ground_pres; /* 8 */
uint32_t ground_temp; /* 12 */
} flight; /* 16 */
/* AO_LOG_STATE */
uint32_t ground_temp; /* 12 */
} flight; /* 16 */
/* AO_LOG_STATE */
struct {
uint16_t flight; /* 4 */
uint16_t r6;
struct {
uint16_t flight; /* 4 */
uint16_t r6;
- uint32_t ground_pres; /* 8 */
+ int32_t ground_pres; /* 8 */
} flight;
/* AO_LOG_STATE */
struct {
} flight;
/* AO_LOG_STATE */
struct {
}; /* 16 */
#define ao_log_pack24(dst,value) do { \
}; /* 16 */
#define ao_log_pack24(dst,value) do { \
- (dst)[0] = (value); \
- (dst)[1] = (value) >> 8; \
- (dst)[2] = (value) >> 16; \
+ (dst)[0] = (uint8_t) (value); \
+ (dst)[1] = (uint8_t) ((value) >> 8); \
+ (dst)[2] = (uint8_t) ((value) >> 16); \
} while (0)
struct ao_log_gps {
} while (0)
struct ao_log_gps {
static uint8_t erasing_current;
void
static uint8_t erasing_current;
void
-ao_tracker_erase_start(uint16_t flight)
+ao_tracker_erase_start(int32_t flight)
- erasing_current = flight == ao_flight_number;
+ erasing_current = flight == (int32_t) ao_flight_number;
if (erasing_current) {
ao_mutex_get(&tracker_mutex);
ao_log_stop();
if (erasing_current) {
ao_mutex_get(&tracker_mutex);
ao_log_stop();
ao_tracker_init(void);
void
ao_tracker_init(void);
void
-ao_tracker_erase_start(uint16_t flight);
+ao_tracker_erase_start(int32_t flight);
void
ao_tracker_erase_end(void);
void
ao_tracker_erase_end(void);