Skip to content

Commit

Permalink
Fix MAVLink reporting of Firmware version, implement dev / release ve…
Browse files Browse the repository at this point in the history
…rsion reporting
  • Loading branch information
LorenzMeier committed Jul 2, 2016
1 parent 2a72902 commit 972a6f7
Show file tree
Hide file tree
Showing 3 changed files with 57 additions and 12 deletions.
4 changes: 2 additions & 2 deletions src/modules/mavlink/mavlink_main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1222,8 +1222,8 @@ void Mavlink::send_autopilot_capabilites()
msg.capabilities |= MAV_PROTOCOL_CAPABILITY_SET_ATTITUDE_TARGET;
msg.capabilities |= MAV_PROTOCOL_CAPABILITY_SET_POSITION_TARGET_LOCAL_NED;
msg.capabilities |= MAV_PROTOCOL_CAPABILITY_SET_ACTUATOR_TARGET;
msg.flight_sw_version = version_tag_to_number(px4_git_version);
msg.middleware_sw_version = version_tag_to_number(px4_git_version);
msg.flight_sw_version = version_tag_to_number(px4_git_tag);
msg.middleware_sw_version = version_tag_to_number(px4_git_tag);
msg.os_sw_version = version_tag_to_number(os_git_tag);
msg.board_version = px4_board_version;
memcpy(&msg.flight_custom_version, &px4_git_version_binary, sizeof(msg.flight_custom_version));
Expand Down
3 changes: 2 additions & 1 deletion src/modules/systemlib/battery_params.c
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,7 @@ PARAM_DEFINE_FLOAT(BAT_V_LOAD_DROP, 0.3f);
*
* @group Battery Calibration
* @unit S
* @value 0 Unconfigured
* @value 2 2S Battery
* @value 3 3S Battery
* @value 4 4S Battery
Expand All @@ -141,7 +142,7 @@ PARAM_DEFINE_FLOAT(BAT_V_LOAD_DROP, 0.3f);
* @value 15 15S Battery
* @value 16 16S Battery
*/
PARAM_DEFINE_INT32(BAT_N_CELLS, 3);
PARAM_DEFINE_INT32(BAT_N_CELLS, 0);

/**
* Battery capacity.
Expand Down
62 changes: 53 additions & 9 deletions src/systemcmds/ver/ver.c
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,19 @@ __EXPORT const char *os_git_tag = "";
__EXPORT const uint32_t px4_board_version = 1;
#endif

// dev >= 0
// alpha >= 64
// beta >= 128
// release candidate >= 192
// release == 255
enum FIRMWARE_TYPE {
FIRMWARE_TYPE_DEV = 0,
FIRMWARE_TYPE_ALPHA = 64,
FIRMWARE_TYPE_BETA = 128,
FIRMWARE_TYPE_RC = 192,
FIRMWARE_TYPE_RELEASE = 255
};

/**
* Convert a version tag string to a number
*/
Expand All @@ -78,9 +91,16 @@ uint32_t version_tag_to_number(const char *tag)
uint32_t ver = 0;
unsigned len = strlen(tag);
unsigned mag = 0;
int32_t type = -1;
bool dotparsed = false;
unsigned dashcount = 0;

for (int i = len - 1; i >= 0; i--) {

if (tag[i] == '-') {
dashcount++;
}

if (tag[i] >= '0' && tag[i] <= '9') {
unsigned number = tag[i] - '0';

Expand All @@ -94,6 +114,29 @@ uint32_t version_tag_to_number(const char *tag)
/* this is a full version and we have enough digits */
return ver;

} else if (tag[i] == '-' && i > 3 && type == -1) {
/* scan until the first number */
const char *curr = &tag[i - 1];

// dev: v1.4.0rc3-7-g7e282f57

while (curr >= &tag[0] && (*curr <= '0' || *curr >= '9')) {
if (*curr == 'd') {
type = FIRMWARE_TYPE_DEV;
break;
} else if (*curr == 'a') {
type = FIRMWARE_TYPE_ALPHA;
break;
} else if (*curr == 'b') {
type = FIRMWARE_TYPE_BETA;
break;
} else if (*curr == 'r') {
type = FIRMWARE_TYPE_BETA;
break;
}
curr--;
}

} else if (tag[i] != 'v') {
/* reset, because we don't have a full tag but
* are seeing non-numeric characters again
Expand All @@ -103,15 +146,16 @@ uint32_t version_tag_to_number(const char *tag)
}
}

// XXX not reporting patch version yet
// dev > 0
// alpha > 64
// beta > 128
// release candidate > 192
// release > 255
/* if the type is still uninitialized, check if there is a single dash in git describe */
if (type == -1 && dashcount == 1) {
type = FIRMWARE_TYPE_RELEASE;
} else if (type == -1) {
type = FIRMWARE_TYPE_DEV;
}

ver = (ver << 8);

return ver;
return ver | type;
}

static void usage(const char *reason)
Expand Down Expand Up @@ -167,8 +211,8 @@ int ver_main(int argc, char *argv[])
unsigned minor = (fwver >> (8 * 2)) & 0xFF;
unsigned patch = (fwver >> (8 * 1)) & 0xFF;
unsigned type = (fwver >> (8 * 0)) & 0xFF;
printf("FW version: %s (%u.%u.%u %s)\n", px4_git_tag, major, minor, patch,
(type == 0) ? "dev" : "stable");
printf("FW version: %s (%u.%u.%u %u), %u\n", px4_git_tag, major, minor, patch,
type, fwver);
/* middleware is currently the same thing as firmware, so not printing yet */
printf("OS version: %s (%u)\n", os_git_tag, version_tag_to_number(os_git_tag));
ret = 0;
Expand Down

0 comments on commit 972a6f7

Please sign in to comment.