mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-11-02 06:11:37 +08:00
Simplify and tidy the handling of page buffer selection on the readout path.
This commit is contained in:
+46
-16
@@ -370,10 +370,17 @@ registers_set_one(uint8_t page, uint8_t offset, uint16_t value)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint8_t last_page;
|
||||||
|
uint8_t last_offset;
|
||||||
|
|
||||||
int
|
int
|
||||||
registers_get(uint8_t page, uint8_t offset, uint16_t **values, unsigned *num_values)
|
registers_get(uint8_t page, uint8_t offset, uint16_t **values, unsigned *num_values)
|
||||||
{
|
{
|
||||||
#define SELECT_PAGE(_page_name) { *values = (uint16_t *)_page_name; *num_values = sizeof(_page_name) / sizeof(_page_name[0]); }
|
#define SELECT_PAGE(_page_name) \
|
||||||
|
do { \
|
||||||
|
*values = &_page_name[0]; \
|
||||||
|
*num_values = sizeof(_page_name) / sizeof(_page_name[0]); \
|
||||||
|
} while(0)
|
||||||
|
|
||||||
switch (page) {
|
switch (page) {
|
||||||
|
|
||||||
@@ -448,35 +455,58 @@ registers_get(uint8_t page, uint8_t offset, uint16_t **values, unsigned *num_val
|
|||||||
/*
|
/*
|
||||||
* Pages that are just a straight read of the register state.
|
* Pages that are just a straight read of the register state.
|
||||||
*/
|
*/
|
||||||
#define COPY_PAGE(_page_name, _page) case _page_name: SELECT_PAGE(_page); break
|
|
||||||
|
|
||||||
/* status pages */
|
/* status pages */
|
||||||
COPY_PAGE(PX4IO_PAGE_CONFIG, r_page_config);
|
case PX4IO_PAGE_CONFIG:
|
||||||
COPY_PAGE(PX4IO_PAGE_ACTUATORS, r_page_actuators);
|
SELECT_PAGE(r_page_config);
|
||||||
COPY_PAGE(PX4IO_PAGE_SERVOS, r_page_servos);
|
break;
|
||||||
COPY_PAGE(PX4IO_PAGE_RAW_RC_INPUT, r_page_raw_rc_input);
|
case PX4IO_PAGE_ACTUATORS:
|
||||||
COPY_PAGE(PX4IO_PAGE_RC_INPUT, r_page_rc_input);
|
SELECT_PAGE(r_page_actuators);
|
||||||
|
break;
|
||||||
|
case PX4IO_PAGE_SERVOS:
|
||||||
|
SELECT_PAGE(r_page_servos);
|
||||||
|
break;
|
||||||
|
case PX4IO_PAGE_RAW_RC_INPUT:
|
||||||
|
SELECT_PAGE(r_page_raw_rc_input);
|
||||||
|
break;
|
||||||
|
case PX4IO_PAGE_RC_INPUT:
|
||||||
|
SELECT_PAGE(r_page_rc_input);
|
||||||
|
break;
|
||||||
|
|
||||||
/* readback of input pages */
|
/* readback of input pages */
|
||||||
COPY_PAGE(PX4IO_PAGE_SETUP, r_page_setup);
|
case PX4IO_PAGE_SETUP:
|
||||||
COPY_PAGE(PX4IO_PAGE_CONTROLS, r_page_controls);
|
SELECT_PAGE(r_page_setup);
|
||||||
COPY_PAGE(PX4IO_PAGE_RC_CONFIG, r_page_rc_input_config);
|
break;
|
||||||
COPY_PAGE(PX4IO_PAGE_DIRECT_PWM, r_page_servos);
|
case PX4IO_PAGE_CONTROLS:
|
||||||
COPY_PAGE(PX4IO_PAGE_FAILSAFE_PWM, r_page_servo_failsafe);
|
SELECT_PAGE(r_page_controls);
|
||||||
|
break;
|
||||||
|
case PX4IO_PAGE_RC_CONFIG:
|
||||||
|
SELECT_PAGE(r_page_rc_input_config);
|
||||||
|
break;
|
||||||
|
case PX4IO_PAGE_DIRECT_PWM:
|
||||||
|
SELECT_PAGE(r_page_servos);
|
||||||
|
break;
|
||||||
|
case PX4IO_PAGE_FAILSAFE_PWM:
|
||||||
|
SELECT_PAGE(r_page_servo_failsafe);
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
#undef SELECT_PAGE
|
#undef SELECT_PAGE
|
||||||
|
#undef COPY_PAGE
|
||||||
|
|
||||||
/* if the offset is beyond the end of the page, we have no data */
|
last_page = page;
|
||||||
if (*num_values <= offset)
|
last_offset = offset;
|
||||||
|
|
||||||
|
/* if the offset is at or beyond the end of the page, we have no data */
|
||||||
|
if (offset >= *num_values)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
/* adjust value count and pointer for the page offset */
|
/* correct the data pointer and count for the offset */
|
||||||
*num_values -= offset;
|
|
||||||
*values += offset;
|
*values += offset;
|
||||||
|
*num_values -= offset;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user