Addendum to my answer above...
The timing is a bit different too. You need to switch the scale factor for the gx3.
in 3dmgx2.h:
static const int TICKS_PER_SEC_GX2 = 19660800;
static const int TICKS_PER_SEC_GX3 = 62500;
in 3dmgx2.cc, extractTime() function:
...
return start_time + (is_gx3 ? (uint64_t)(all_ticks * (1000000000.0 / TICKS_PER_SEC_GX3)) : (uint64_t)(all_ticks * (1000000000.0 / TICKS_PER_SEC_GX2))); // syntax a bit funny because of C++ compiler
Finally, to make the previous change mentioned above more generic:
In 3dmgx2.cc, getDeviceIdentifierString():
...
if( type==ID_DEVICE_NAME ){
is_gx3 = (strstr(id,"GX3") != NULL);
}
is_gx3 should be declared in 3dmgx2.h and set to false in the constructor.
Finally, in stopContinuous:
uint8_t cmd[3];
cmd[0] = CMD_STOP_CONTINUOUS;
cmd[1] = 0x75; // gx3 - confirms user intent
cmd[2] = 0xb4; // gx3 - confirms user intent
send(cmd, is_gx3 ? 3 : 1);