Promotion of location.lnx.1.0-00008.
CRs Change ID Subject -------------------------------------------------------------------------------------------------------------- 881265 I3c895adc2ce1cef36032a25e3c6fd63e70350607 encode field separator characters 923601 Ib6bf917f84d1224e296e91b4fb33b41d6e2c2531 Add support for dynamic TBF updating 935146 I9c3f970aa0f0ca0805fdc2e04aa809329b6a2676 Xtra client always reports carrier as 'unknown' 951144 I9bac4caa26e87741e5e82e16a8047af20ac8012b Sub milli sec part in the relevant NMEA Strings Change-Id: Iddadd149330bf1bebcdae8fb3a65d8aca93278b4 CRs-Fixed: 923601, 935146, 881265, 951144
This commit is contained in:
commit
5652401066
3 changed files with 64 additions and 8 deletions
|
@ -416,6 +416,7 @@ typedef enum loc_api_adapter_msg_to_check_supported {
|
|||
LOC_API_ADAPTER_MESSAGE_DISTANCE_BASE_TRACKING, // DBT 2.0
|
||||
LOC_API_ADAPTER_MESSAGE_ADAPTIVE_LOCATION_BATCHING, // Batching 1.5
|
||||
LOC_API_ADAPTER_MESSAGE_DISTANCE_BASE_LOCATION_BATCHING, // Batching 2.0
|
||||
LOC_API_ADAPTER_MESSAGE_UPDATE_TBF_ON_THE_FLY, // Updating Tracking TBF On The Fly
|
||||
|
||||
LOC_API_ADAPTER_MESSAGE_MAX
|
||||
} LocCheckingMessagesID;
|
||||
|
|
|
@ -101,7 +101,6 @@ void LocEngAdapter::setXtraUserAgent() {
|
|||
char release[PROPERTY_VALUE_MAX];
|
||||
char manufacture[PROPERTY_VALUE_MAX];
|
||||
char model[PROPERTY_VALUE_MAX];
|
||||
char carrier[PROPERTY_VALUE_MAX];
|
||||
char board[PROPERTY_VALUE_MAX];
|
||||
char brand[PROPERTY_VALUE_MAX];
|
||||
char chipsetsn[CHIPSET_SERIAL_NUMBER_MAX_LEN];
|
||||
|
@ -111,13 +110,18 @@ void LocEngAdapter::setXtraUserAgent() {
|
|||
property_get("ro.build.version.release", release, defVal);
|
||||
property_get("ro.product.manufacturer", manufacture, defVal);
|
||||
property_get("ro.product.model", model, defVal);
|
||||
property_get("ro.carrier", carrier, defVal);
|
||||
property_get("ro.product.board", board, defVal);
|
||||
property_get("ro.product.brand", brand, defVal);
|
||||
getChipsetSerialNo(chipsetsn, sizeof(chipsetsn), defVal);
|
||||
|
||||
snprintf(userAgent, sizeof(userAgent), "A/%s/%s/%s/%s/%s/QCX3/s%u/-/%s/-/%s/-/-/-",
|
||||
release, manufacture, model, board, carrier,
|
||||
encodeInPlace(release, PROPERTY_VALUE_MAX);
|
||||
encodeInPlace(manufacture, PROPERTY_VALUE_MAX);
|
||||
encodeInPlace(model, PROPERTY_VALUE_MAX);
|
||||
encodeInPlace(board, PROPERTY_VALUE_MAX);
|
||||
encodeInPlace(brand, PROPERTY_VALUE_MAX);
|
||||
|
||||
snprintf(userAgent, sizeof(userAgent), "A/%s/%s/%s/%s/-/QCX3/s%u/-/%s/-/%s/-/-/-",
|
||||
release, manufacture, model, board,
|
||||
mContext->getIzatDevId(), chipsetsn, brand);
|
||||
|
||||
for (int i = 0; i < sizeof(userAgent) && userAgent[i]; i++) {
|
||||
|
@ -199,6 +203,56 @@ void LocEngAdapter::setXtraUserAgent() {
|
|||
return;
|
||||
}
|
||||
|
||||
/**
|
||||
* encode the given string value such that all separator characters ('/','+','|','%')
|
||||
* in the string are repaced by their corresponding encodings (%2F","%2B","%7C", "%25")
|
||||
*/
|
||||
static void encodeInPlace(char value[], const int size) {
|
||||
char buffer[size];
|
||||
|
||||
struct ENCODE {
|
||||
const char ch;
|
||||
const char *code;
|
||||
};
|
||||
|
||||
const ENCODE encodings[] = { {'/', "%2F"}, {'+', "%2B"}, {'|', "%7C",}, {'%', "%25"} };
|
||||
const int nencodings = (int)sizeof(encodings) / sizeof(encodings[0]);
|
||||
|
||||
int inpos = 0, outpos = 0;
|
||||
while(value[inpos] != '\0' && outpos < size - 1) {
|
||||
// check if escaped character
|
||||
int escchar = 0;
|
||||
while(escchar < nencodings && encodings[escchar].ch != value[inpos]) {
|
||||
escchar++;
|
||||
}
|
||||
|
||||
if (escchar == nencodings) {
|
||||
// non escaped character
|
||||
buffer[outpos++] = value[inpos++];
|
||||
continue;
|
||||
}
|
||||
|
||||
// escaped character
|
||||
int codepos = 0;
|
||||
#define NUM_CHARS_IN_CODE 3
|
||||
|
||||
if (outpos + NUM_CHARS_IN_CODE >= size) {
|
||||
// skip last character if there is insufficient space
|
||||
break;
|
||||
}
|
||||
|
||||
while(outpos < size - 1 && codepos < NUM_CHARS_IN_CODE) {
|
||||
buffer[outpos++] = encodings[escchar].code[codepos++];
|
||||
}
|
||||
inpos++;
|
||||
}
|
||||
|
||||
// copy to ouput
|
||||
value[outpos] = '\0';
|
||||
while(--outpos >= 0) {
|
||||
value[outpos] = buffer[outpos];
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
sendMsg(new LocSetXtraUserAgent(mContext));
|
||||
|
|
|
@ -136,6 +136,7 @@ void loc_eng_nmea_generate_pos(loc_eng_data_s_type *loc_eng_data_p,
|
|||
int utcHours = pTm->tm_hour;
|
||||
int utcMinutes = pTm->tm_min;
|
||||
int utcSeconds = pTm->tm_sec;
|
||||
int utcMSeconds = (location.gpsLocation.timestamp)%1000;
|
||||
|
||||
if (generate_nmea) {
|
||||
// ------------------
|
||||
|
@ -281,8 +282,8 @@ void loc_eng_nmea_generate_pos(loc_eng_data_s_type *loc_eng_data_p,
|
|||
pMarker = sentence;
|
||||
lengthRemaining = sizeof(sentence);
|
||||
|
||||
length = snprintf(pMarker, lengthRemaining, "$GPRMC,%02d%02d%02d,A," ,
|
||||
utcHours, utcMinutes, utcSeconds);
|
||||
length = snprintf(pMarker, lengthRemaining, "$GPRMC,%02d%02d%02d.%02d,A," ,
|
||||
utcHours, utcMinutes, utcSeconds,utcMSeconds/10);
|
||||
|
||||
if (length < 0 || length >= lengthRemaining)
|
||||
{
|
||||
|
@ -434,8 +435,8 @@ void loc_eng_nmea_generate_pos(loc_eng_data_s_type *loc_eng_data_p,
|
|||
pMarker = sentence;
|
||||
lengthRemaining = sizeof(sentence);
|
||||
|
||||
length = snprintf(pMarker, lengthRemaining, "$GPGGA,%02d%02d%02d," ,
|
||||
utcHours, utcMinutes, utcSeconds);
|
||||
length = snprintf(pMarker, lengthRemaining, "$GPGGA,%02d%02d%02d.%02d," ,
|
||||
utcHours, utcMinutes, utcSeconds, utcMSeconds/10);
|
||||
|
||||
if (length < 0 || length >= lengthRemaining)
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue