1 /* Copyright (c) 2011, Code Aurora Forum. All rights reserved. 2 * 3 * Redistribution and use in source and binary forms, with or without 4 * modification, are permitted provided that the following conditions are 5 * met: 6 * * Redistributions of source code must retain the above copyright 7 * notice, this list of conditions and the following disclaimer. 8 * * Redistributions in binary form must reproduce the above 9 * copyright notice, this list of conditions and the following 10 * disclaimer in the documentation and/or other materials provided 11 * with the distribution. 12 * * Neither the name of Code Aurora Forum, Inc. nor the names of its 13 * contributors may be used to endorse or promote products derived 14 * from this software without specific prior written permission. 15 * 16 * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED 17 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 18 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT 19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS 20 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 23 * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 24 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 25 * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 26 * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 * 28 */ 29 #ifndef LOC_ENG_MSG_H 30 #define LOC_ENG_MSG_H 31 32 33 #include <hardware/gps.h> 34 #include <stdlib.h> 35 #include <string.h> 36 #include "log_util.h" 37 #include "loc.h" 38 #include "loc_eng_log.h" 39 #include "loc_eng_msg_id.h" 40 41 42 #ifdef __cplusplus 43 extern "C" { 44 #endif /* __cplusplus */ 45 46 struct loc_eng_msg { 47 const void* owner; 48 const int msgid; loc_eng_msgloc_eng_msg49 inline loc_eng_msg(void* instance, int id) : 50 owner(instance), msgid(id) 51 { 52 LOC_LOGV("creating msg %s", loc_get_msg_name(msgid)); 53 } ~loc_eng_msgloc_eng_msg54 virtual ~loc_eng_msg() 55 { 56 LOC_LOGV("deleting msg %s", loc_get_msg_name(msgid)); 57 } 58 }; 59 60 struct loc_eng_msg_suple_version : public loc_eng_msg { 61 const int supl_version; loc_eng_msg_suple_versionloc_eng_msg_suple_version62 inline loc_eng_msg_suple_version(void* instance, int version) : 63 loc_eng_msg(instance, LOC_ENG_MSG_SUPL_VERSION), 64 supl_version(version) 65 { 66 LOC_LOGV("SUPL Version: %d", version); 67 } 68 }; 69 70 struct loc_eng_msg_sensor_control_config : public loc_eng_msg { 71 const int sensorsDisabled; loc_eng_msg_sensor_control_configloc_eng_msg_sensor_control_config72 inline loc_eng_msg_sensor_control_config(void* instance, int disabled) : 73 loc_eng_msg(instance, LOC_ENG_MSG_SET_SENSOR_CONTROL_CONFIG), 74 sensorsDisabled(disabled) 75 { 76 LOC_LOGV("Sensors Disabled: %d", disabled); 77 } 78 }; 79 80 struct loc_eng_msg_sensor_properties : public loc_eng_msg { 81 const float gyroBiasVarianceRandomWalk; loc_eng_msg_sensor_propertiesloc_eng_msg_sensor_properties82 inline loc_eng_msg_sensor_properties(void* instance, float gyroBiasRandomWalk) : 83 loc_eng_msg(instance, LOC_ENG_MSG_SET_SENSOR_PROPERTIES), 84 gyroBiasVarianceRandomWalk(gyroBiasRandomWalk) 85 { 86 LOC_LOGV("Gyro Bias Random Walk: %f", gyroBiasRandomWalk); 87 } 88 }; 89 90 struct loc_eng_msg_sensor_perf_control_config : public loc_eng_msg { 91 const int controlMode; 92 const int accelSamplesPerBatch; 93 const int accelBatchesPerSec; 94 const int gyroSamplesPerBatch; 95 const int gyroBatchesPerSec; loc_eng_msg_sensor_perf_control_configloc_eng_msg_sensor_perf_control_config96 inline loc_eng_msg_sensor_perf_control_config(void* instance, int controlMode, 97 int accelSamplesPerBatch, int accelBatchesPerSec, 98 int gyroSamplesPerBatch, int gyroBatchesPerSec) : 99 loc_eng_msg(instance, LOC_ENG_MSG_SET_SENSOR_PERF_CONTROL_CONFIG), 100 controlMode(controlMode), 101 accelSamplesPerBatch(accelSamplesPerBatch), 102 accelBatchesPerSec(accelBatchesPerSec), 103 gyroSamplesPerBatch(gyroSamplesPerBatch), 104 gyroBatchesPerSec(gyroBatchesPerSec) 105 { 106 LOC_LOGV("Sensor Perf Control Config (performanceControlMode)(%u) " 107 "accel(#smp,#batches) (%u,%u) gyro(#smp,#batches) (%u,%u)\n", 108 controlMode, 109 accelSamplesPerBatch, 110 accelBatchesPerSec, 111 gyroSamplesPerBatch, 112 gyroBatchesPerSec 113 ); 114 } 115 }; 116 117 118 struct loc_eng_msg_position_mode : public loc_eng_msg { 119 const LocPositionMode pMode; 120 const GpsPositionRecurrence pRecurrence; 121 const uint32_t minInterval; 122 const uint32_t preferredAccuracy; 123 const uint32_t preferredTime; loc_eng_msg_position_modeloc_eng_msg_position_mode124 inline loc_eng_msg_position_mode() : 125 loc_eng_msg(NULL, LOC_ENG_MSG_SET_POSITION_MODE), 126 pMode(LOC_POSITION_MODE_STANDALONE), 127 pRecurrence(0), minInterval(0), 128 preferredAccuracy(0), preferredTime(0) {} loc_eng_msg_position_modeloc_eng_msg_position_mode129 inline loc_eng_msg_position_mode(void* instance, 130 LocPositionMode mode, 131 GpsPositionRecurrence recurrence, 132 uint32_t min_interval, 133 uint32_t preferred_accuracy, 134 uint32_t preferred_time) : 135 loc_eng_msg(instance, LOC_ENG_MSG_SET_POSITION_MODE), 136 pMode(mode), pRecurrence(recurrence), minInterval(min_interval), 137 preferredAccuracy(preferred_accuracy), preferredTime(preferred_time) 138 { 139 LOC_LOGV("Position mode: %s\n Position recurrence: %s\n min interval: %d\n preferred accuracy: %d\n preferred time: %d", 140 loc_get_position_mode_name(pMode), 141 loc_get_position_recurrence_name(pRecurrence), 142 minInterval, 143 preferredAccuracy, 144 preferredTime); 145 } 146 }; 147 148 struct loc_eng_msg_set_time : public loc_eng_msg { 149 const GpsUtcTime time; 150 const int64_t timeReference; 151 const int uncertainty; loc_eng_msg_set_timeloc_eng_msg_set_time152 inline loc_eng_msg_set_time(void* instance, 153 GpsUtcTime t, 154 int64_t tf, 155 int unc) : 156 loc_eng_msg(instance, LOC_ENG_MSG_SET_TIME), 157 time(t), timeReference(tf), uncertainty(unc) 158 { 159 LOC_LOGV("time: %lld\n timeReference: %lld\n uncertainty: %d", 160 time, timeReference, uncertainty); 161 } 162 }; 163 164 struct loc_eng_msg_inject_location : public loc_eng_msg { 165 const double latitude; 166 const double longitude; 167 const float accuracy; loc_eng_msg_inject_locationloc_eng_msg_inject_location168 inline loc_eng_msg_inject_location(void* instance, double lat, 169 double longi, float accur) : 170 loc_eng_msg(instance, LOC_ENG_MSG_INJECT_LOCATION), 171 latitude(lat), longitude(longi), accuracy(accur) 172 { 173 LOC_LOGV("latitude: %f\n longitude: %f\n accuracy: %f", 174 latitude, longitude, accuracy); 175 } 176 }; 177 178 struct loc_eng_msg_delete_aiding_data : public loc_eng_msg { 179 const GpsAidingData type; loc_eng_msg_delete_aiding_dataloc_eng_msg_delete_aiding_data180 inline loc_eng_msg_delete_aiding_data(void* instance, GpsAidingData data) : 181 loc_eng_msg(instance, LOC_ENG_MSG_DELETE_AIDING_DATA), type(data) 182 { 183 LOC_LOGV("aiding data msak %d", type); 184 } 185 }; 186 187 struct loc_eng_msg_report_position : public loc_eng_msg { 188 const GpsLocation location; 189 const void* locationExt; 190 const enum loc_sess_status status; loc_eng_msg_report_positionloc_eng_msg_report_position191 inline loc_eng_msg_report_position(void* instance, GpsLocation &loc, void* locExt, 192 enum loc_sess_status st) : 193 loc_eng_msg(instance, LOC_ENG_MSG_REPORT_POSITION), 194 location(loc), locationExt(locExt), status(st) 195 { 196 #ifdef QCOM_FEATURE_ULP 197 LOC_LOGV("flags: %d\n source: %d\n latitude: %f\n longitude: %f\n altitude: %f\n speed: %f\n bearing: %f\n accuracy: %f\n timestamp: %lld\n rawDataSize: %d\n rawData: %p\n Session status: %s", 198 location.flags, location.position_source, location.latitude, location.longitude, 199 location.altitude, location.speed, location.bearing, location.accuracy, 200 location.timestamp, location.rawDataSize, location.rawData, 201 loc_get_position_sess_status_name(status)); 202 #else 203 LOC_LOGV("flags: %d\n latitude: %f\n longitude: %f\n altitude: %f\n speed: %f\n bearing: %f\n accuracy: %f\n timestamp: %lld\n Session status: %s", 204 location.flags, location.latitude, location.longitude, 205 location.altitude, location.speed, location.bearing, location.accuracy, 206 location.timestamp, loc_get_position_sess_status_name(status)); 207 #endif 208 } 209 }; 210 211 struct loc_eng_msg_report_sv : public loc_eng_msg { 212 const GpsSvStatus svStatus; 213 const void* svExt; loc_eng_msg_report_svloc_eng_msg_report_sv214 inline loc_eng_msg_report_sv(void* instance, GpsSvStatus &sv, void* ext) : 215 loc_eng_msg(instance, LOC_ENG_MSG_REPORT_SV), svStatus(sv), svExt(ext) 216 { 217 LOC_LOGV("num sv: %d\n ephemeris mask: %dxn almanac mask: %x\n used in fix mask: %x\n sv: prn snr elevation azimuth", 218 svStatus.num_svs, svStatus.ephemeris_mask, svStatus.almanac_mask, svStatus.used_in_fix_mask); 219 for (int i = 0; i < svStatus.num_svs && i < GPS_MAX_SVS; i++) { 220 LOC_LOGV(" %d: %d %f %f %f\n ", 221 i, 222 svStatus.sv_list[i].prn, 223 svStatus.sv_list[i].snr, 224 svStatus.sv_list[i].elevation, 225 svStatus.sv_list[i].azimuth); 226 } 227 } 228 }; 229 230 struct loc_eng_msg_report_status : public loc_eng_msg { 231 const GpsStatusValue status; loc_eng_msg_report_statusloc_eng_msg_report_status232 inline loc_eng_msg_report_status(void* instance, GpsStatusValue engineStatus) : 233 loc_eng_msg(instance, LOC_ENG_MSG_REPORT_STATUS), status(engineStatus) 234 { 235 LOC_LOGV("status: %s", loc_get_gps_status_name(status)); 236 } 237 }; 238 239 struct loc_eng_msg_report_nmea : public loc_eng_msg { 240 char* const nmea; 241 const int length; loc_eng_msg_report_nmealoc_eng_msg_report_nmea242 inline loc_eng_msg_report_nmea(void* instance, 243 const char* data, 244 int len) : 245 loc_eng_msg(instance, LOC_ENG_MSG_REPORT_NMEA), 246 nmea(new char[len]), length(len) 247 { 248 memcpy((void*)nmea, (void*)data, len); 249 LOC_LOGV("length: %d\n nmea: %p - %c%c%c", 250 length, nmea, nmea[3], nmea[4], nmea[5]); 251 } ~loc_eng_msg_report_nmealoc_eng_msg_report_nmea252 inline ~loc_eng_msg_report_nmea() 253 { 254 delete[] nmea; 255 } 256 }; 257 258 struct loc_eng_msg_request_bit : public loc_eng_msg { 259 const unsigned int isSupl; 260 const int ipv4Addr; 261 char* const ipv6Addr; loc_eng_msg_request_bitloc_eng_msg_request_bit262 inline loc_eng_msg_request_bit(void* instance, 263 unsigned int is_supl, 264 int ipv4, 265 char* ipv6) : 266 loc_eng_msg(instance, LOC_ENG_MSG_REQUEST_BIT), 267 isSupl(is_supl), ipv4Addr(ipv4), 268 ipv6Addr(NULL == ipv6 ? NULL : new char[16]) 269 { 270 if (NULL != ipv6Addr) 271 memcpy(ipv6Addr, ipv6, 16); 272 LOC_LOGV("isSupl: %d, ipv4: %d.%d.%d.%d, ipv6: %s", isSupl, 273 (unsigned char)ipv4>>24, 274 (unsigned char)ipv4>>16, 275 (unsigned char)ipv4>>8, 276 (unsigned char)ipv4, 277 NULL != ipv6Addr ? ipv6Addr : ""); 278 } 279 ~loc_eng_msg_request_bitloc_eng_msg_request_bit280 inline ~loc_eng_msg_request_bit() 281 { 282 if (NULL != ipv6Addr) { 283 delete[] ipv6Addr; 284 } 285 } 286 }; 287 288 struct loc_eng_msg_release_bit : public loc_eng_msg { 289 const unsigned int isSupl; 290 const int ipv4Addr; 291 char* const ipv6Addr; loc_eng_msg_release_bitloc_eng_msg_release_bit292 inline loc_eng_msg_release_bit(void* instance, 293 unsigned int is_supl, 294 int ipv4, 295 char* ipv6) : 296 loc_eng_msg(instance, LOC_ENG_MSG_RELEASE_BIT), 297 isSupl(is_supl), ipv4Addr(ipv4), 298 ipv6Addr(NULL == ipv6 ? NULL : new char[16]) 299 { 300 if (NULL != ipv6Addr) 301 memcpy(ipv6Addr, ipv6, 16); 302 LOC_LOGV("isSupl: %d, ipv4: %d.%d.%d.%d, ipv6: %s", isSupl, 303 (unsigned char)ipv4>>24, 304 (unsigned char)ipv4>>16, 305 (unsigned char)ipv4>>8, 306 (unsigned char)ipv4, 307 NULL != ipv6Addr ? ipv6Addr : ""); 308 } 309 ~loc_eng_msg_release_bitloc_eng_msg_release_bit310 inline ~loc_eng_msg_release_bit() 311 { 312 if (NULL != ipv6Addr) { 313 delete[] ipv6Addr; 314 } 315 } 316 }; 317 318 struct loc_eng_msg_request_atl : public loc_eng_msg { 319 const int handle; 320 const AGpsType type; loc_eng_msg_request_atlloc_eng_msg_request_atl321 inline loc_eng_msg_request_atl(void* instance, int hndl, 322 AGpsType agps_type) : 323 loc_eng_msg(instance, LOC_ENG_MSG_REQUEST_ATL), 324 handle(hndl), type(agps_type) 325 { 326 LOC_LOGV("handle: %d\n agps type: %s", 327 handle, 328 loc_get_agps_type_name(type)); 329 } 330 }; 331 332 struct loc_eng_msg_release_atl : public loc_eng_msg { 333 const int handle; loc_eng_msg_release_atlloc_eng_msg_release_atl334 inline loc_eng_msg_release_atl(void* instance, int hndl) : 335 loc_eng_msg(instance, LOC_ENG_MSG_RELEASE_ATL), handle(hndl) 336 { 337 LOC_LOGV("handle: %d", handle); 338 } 339 }; 340 341 struct loc_eng_msg_request_ni : public loc_eng_msg { 342 const GpsNiNotification notify; 343 const void *passThroughData; loc_eng_msg_request_niloc_eng_msg_request_ni344 inline loc_eng_msg_request_ni(void* instance, 345 GpsNiNotification ¬if, const void* data) : 346 loc_eng_msg(instance, LOC_ENG_MSG_REQUEST_NI), 347 notify(notif), passThroughData(data) 348 { 349 LOC_LOGV("id: %d\n type: %s\n flags: %d\n time out: %d\n default response: %s\n requestor id encoding: %s\n text encoding: %s\n passThroughData: %p", 350 notify.notification_id, 351 loc_get_ni_type_name(notify.ni_type), 352 notify.notify_flags, 353 notify.timeout, 354 loc_get_ni_response_name(notify.default_response), 355 loc_get_ni_encoding_name(notify.requestor_id_encoding), 356 loc_get_ni_encoding_name(notify.text_encoding), 357 passThroughData); 358 } 359 }; 360 361 struct loc_eng_msg_inform_ni_response : public loc_eng_msg { 362 const GpsUserResponseType response; 363 const void *passThroughData; loc_eng_msg_inform_ni_responseloc_eng_msg_inform_ni_response364 inline loc_eng_msg_inform_ni_response(void* instance, 365 GpsUserResponseType resp, 366 const void* data) : 367 loc_eng_msg(instance, LOC_ENG_MSG_INFORM_NI_RESPONSE), 368 response(resp), passThroughData(data) 369 { 370 LOC_LOGV("response: %s\n passThroughData: %p", 371 loc_get_ni_response_name(response), 372 passThroughData); 373 } ~loc_eng_msg_inform_ni_responseloc_eng_msg_inform_ni_response374 inline ~loc_eng_msg_inform_ni_response() 375 { 376 // this is a bit weird since passThroughData is not 377 // allocated by this class. But there is no better way. 378 // passThroughData actually won't be NULL here. 379 // But better safer than sorry. 380 if (NULL != passThroughData) { 381 free((void*)passThroughData); 382 } 383 } 384 }; 385 386 struct loc_eng_msg_set_apn : public loc_eng_msg { 387 char* const apn; loc_eng_msg_set_apnloc_eng_msg_set_apn388 inline loc_eng_msg_set_apn(void* instance, const char* name, int len) : 389 loc_eng_msg(instance, LOC_ENG_MSG_SET_APN), 390 apn(new char[len+1]) 391 { 392 memcpy((void*)apn, (void*)name, len); 393 apn[len] = 0; 394 LOC_LOGV("apn: %s", apn); 395 } ~loc_eng_msg_set_apnloc_eng_msg_set_apn396 inline ~loc_eng_msg_set_apn() 397 { 398 delete[] apn; 399 } 400 }; 401 402 403 404 struct loc_eng_msg_set_server_ipv4 : public loc_eng_msg { 405 const unsigned int nl_addr; 406 const int port; 407 const LocServerType serverType; loc_eng_msg_set_server_ipv4loc_eng_msg_set_server_ipv4408 inline loc_eng_msg_set_server_ipv4(void* instance, 409 unsigned int ip, 410 int p, 411 LocServerType type) : 412 loc_eng_msg(instance, LOC_ENG_MSG_SET_SERVER_IPV4), 413 nl_addr(ip), port(p), serverType(type) 414 { 415 LOC_LOGV("addr: %x\n , port: %d\n type: %s", nl_addr, port, loc_get_server_type_name(serverType)); 416 } 417 }; 418 419 420 struct loc_eng_msg_set_server_url : public loc_eng_msg { 421 const int len; 422 char* const url; loc_eng_msg_set_server_urlloc_eng_msg_set_server_url423 inline loc_eng_msg_set_server_url(void* instance, 424 const char* urlString, 425 int url_len) : 426 loc_eng_msg(instance, LOC_ENG_MSG_SET_SERVER_URL), 427 len(url_len), url(new char[len+1]) 428 { 429 memcpy((void*)url, (void*)urlString, url_len); 430 url[len] = 0; 431 LOC_LOGV("url: %s", url); 432 } ~loc_eng_msg_set_server_urlloc_eng_msg_set_server_url433 inline ~loc_eng_msg_set_server_url() 434 { 435 delete[] url; 436 } 437 }; 438 439 struct loc_eng_msg_inject_xtra_data : public loc_eng_msg { 440 char* const data; 441 const int length; loc_eng_msg_inject_xtra_dataloc_eng_msg_inject_xtra_data442 inline loc_eng_msg_inject_xtra_data(void* instance, char* d, int l) : 443 loc_eng_msg(instance, LOC_ENG_MSG_INJECT_XTRA_DATA), 444 data(new char[l]), length(l) 445 { 446 memcpy((void*)data, (void*)d, l); 447 LOC_LOGV("length: %d\n data: %p", length, data); 448 } ~loc_eng_msg_inject_xtra_dataloc_eng_msg_inject_xtra_data449 inline ~loc_eng_msg_inject_xtra_data() 450 { 451 delete[] data; 452 } 453 }; 454 455 #ifdef QCOM_FEATURE_IPV6 456 struct loc_eng_msg_atl_open_success : public loc_eng_msg { 457 const AGpsStatusValue agpsType; 458 const int length; 459 char* const apn; 460 const AGpsBearerType bearerType; loc_eng_msg_atl_open_successloc_eng_msg_atl_open_success461 inline loc_eng_msg_atl_open_success(void* instance, 462 AGpsStatusValue atype, 463 const char* name, 464 int len, 465 AGpsBearerType btype) : 466 loc_eng_msg(instance, LOC_ENG_MSG_ATL_OPEN_SUCCESS), 467 agpsType(atype), length(len), 468 apn(new char[len+1]), bearerType(btype) 469 { 470 memcpy((void*)apn, (void*)name, len); 471 apn[len] = 0; 472 LOC_LOGV("agps type: %s\n apn: %s\n bearer type: %s", 473 loc_get_agps_type_name(agpsType), 474 apn, 475 loc_get_agps_bear_name(bearerType)); 476 } ~loc_eng_msg_atl_open_successloc_eng_msg_atl_open_success477 inline ~loc_eng_msg_atl_open_success() 478 { 479 delete[] apn; 480 } 481 }; 482 #else 483 struct loc_eng_msg_atl_open_success : public loc_eng_msg { 484 const int length; 485 char* const apn; loc_eng_msg_atl_open_successloc_eng_msg_atl_open_success486 inline loc_eng_msg_atl_open_success(void* instance, 487 const char* name, 488 int len) : 489 loc_eng_msg(instance, LOC_ENG_MSG_ATL_OPEN_SUCCESS), 490 length(len), 491 apn(new char[len+1]) 492 { 493 memcpy((void*)apn, (void*)name, len); 494 apn[len] = 0; 495 LOC_LOGV("apn: %s\n", 496 apn); 497 } ~loc_eng_msg_atl_open_successloc_eng_msg_atl_open_success498 inline ~loc_eng_msg_atl_open_success() 499 { 500 delete[] apn; 501 } 502 }; 503 #endif 504 505 #ifdef QCOM_FEATURE_IPV6 506 struct loc_eng_msg_atl_open_failed : public loc_eng_msg { 507 const AGpsStatusValue agpsType; loc_eng_msg_atl_open_failedloc_eng_msg_atl_open_failed508 inline loc_eng_msg_atl_open_failed(void* instance, 509 AGpsStatusValue atype) : 510 loc_eng_msg(instance, LOC_ENG_MSG_ATL_OPEN_FAILED), 511 agpsType(atype) 512 { 513 LOC_LOGV("agps type %s", 514 loc_get_agps_type_name(agpsType)); 515 } 516 }; 517 #else 518 struct loc_eng_msg_atl_open_failed : public loc_eng_msg { loc_eng_msg_atl_open_failedloc_eng_msg_atl_open_failed519 inline loc_eng_msg_atl_open_failed(void* instance) : 520 loc_eng_msg(instance, LOC_ENG_MSG_ATL_OPEN_FAILED) 521 { 522 LOC_LOGV(""); 523 } 524 }; 525 #endif 526 527 #ifdef QCOM_FEATURE_IPV6 528 struct loc_eng_msg_atl_closed : public loc_eng_msg { 529 const AGpsStatusValue agpsType; loc_eng_msg_atl_closedloc_eng_msg_atl_closed530 inline loc_eng_msg_atl_closed(void* instance, 531 AGpsStatusValue atype) : 532 loc_eng_msg(instance, LOC_ENG_MSG_ATL_CLOSED), 533 agpsType(atype) 534 { 535 LOC_LOGV("agps type %s", 536 loc_get_agps_type_name(agpsType)); 537 } 538 }; 539 #else 540 struct loc_eng_msg_atl_closed : public loc_eng_msg { loc_eng_msg_atl_closedloc_eng_msg_atl_closed541 inline loc_eng_msg_atl_closed(void* instance) : 542 loc_eng_msg(instance, LOC_ENG_MSG_ATL_CLOSED) 543 { 544 LOC_LOGV(""); 545 } 546 }; 547 #endif 548 549 struct loc_eng_msg_set_data_enable : public loc_eng_msg { 550 const int enable; 551 char* const apn; 552 const int length; loc_eng_msg_set_data_enableloc_eng_msg_set_data_enable553 inline loc_eng_msg_set_data_enable(void* instance, 554 const char* name, 555 int len, 556 int yes) : 557 loc_eng_msg(instance, LOC_ENG_MSG_ENABLE_DATA), 558 enable(yes), apn(new char[len+1]), length(len) 559 { 560 memcpy((void*)apn, (void*)name, len); 561 apn[len] = 0; 562 LOC_LOGV("apn: %s\n enable: %d", apn, enable); 563 } ~loc_eng_msg_set_data_enableloc_eng_msg_set_data_enable564 inline ~loc_eng_msg_set_data_enable() 565 { 566 delete[] apn; 567 } 568 }; 569 570 void loc_eng_msg_sender(void* loc_eng_data_p, void* msg); 571 int loc_eng_msgget(int * p_req_msgq); 572 int loc_eng_msgremove(int req_msgq); 573 int loc_eng_msgsnd(int msgqid, void * msgp); 574 int loc_eng_msgrcv(int msgqid, void ** msgp); 575 int loc_eng_msgsnd_raw(int msgqid, void * msgp, unsigned int msgsz); 576 int loc_eng_msgrcv_raw(int msgqid, void *msgp, unsigned int msgsz); 577 int loc_eng_msgflush(int msgqid); 578 int loc_eng_msgunblock(int msgqid); 579 580 #ifdef __cplusplus 581 } 582 #endif /* __cplusplus */ 583 584 #endif /* LOC_ENG_MSG_H */ 585