{"id":20563368,"url":"https://github.com/pilotak/ubxgpsi2c","last_synced_at":"2026-03-14T00:02:57.088Z","repository":{"id":91903488,"uuid":"140620677","full_name":"pilotak/UbxGpsI2C","owner":"pilotak","description":"Ublox GPS I2C async library for mbed","archived":false,"fork":false,"pushed_at":"2023-12-22T08:56:53.000Z","size":109,"stargazers_count":6,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-28T03:41:21.030Z","etag":null,"topics":["async","gps","gps-coordinates","i2c","library","mbed","mbed-os","ublox","ublox-gps","ubx","ubx-gps-library"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pilotak.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-07-11T19:40:19.000Z","updated_at":"2024-07-28T04:26:14.000Z","dependencies_parsed_at":"2023-12-22T10:00:48.681Z","dependency_job_id":"e846d929-8268-4c52-ae59-d30d4af2e82d","html_url":"https://github.com/pilotak/UbxGpsI2C","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pilotak%2FUbxGpsI2C","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pilotak%2FUbxGpsI2C/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pilotak%2FUbxGpsI2C/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pilotak%2FUbxGpsI2C/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pilotak","download_url":"https://codeload.github.com/pilotak/UbxGpsI2C/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248898686,"owners_count":21179823,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["async","gps","gps-coordinates","i2c","library","mbed","mbed-os","ublox","ublox-gps","ubx","ubx-gps-library"],"created_at":"2024-11-16T04:17:52.587Z","updated_at":"2026-03-14T00:02:56.908Z","avatar_url":"https://github.com/pilotak.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# UbxGpsI2C\n[![Framework Badge mbed](https://img.shields.io/badge/framework-mbed-008fbe.svg)](https://os.mbed.com/)\n\nUblox GPS I2C async library for mbed.\n\n## Example\n```cpp\n#include \"mbed.h\"\n#include \"UbxGpsI2C.h\"\n\n#define GPS_READ_INTERVAL 1s\n\nUbxGpsI2C gps(GPS_SDA, GPS_SCL);\nTicker ticker;\n\nvolatile bool poll_gps = true;\nvolatile bool read_gps = false;\n\nstruct gps_data_t {\n    uint32_t itow;\n    uint16_t year;\n    uint8_t month;\n    uint8_t day;\n    uint8_t hour;\n    uint8_t min;\n    uint8_t sec;\n    uint8_t valid;\n    uint32_t tAcc;\n    int32_t nano;\n    uint8_t fixType;\n    uint8_t flags;\n    uint8_t flags2;\n    uint8_t numSv;\n    int32_t lon;\n    int32_t lat;\n    int32_t height;\n    int32_t hMSL;\n    uint32_t hAcc;\n    uint32_t vAcc;\n    int32_t velN;\n    int32_t velE;\n    int32_t velD;\n    int32_t gSpeed;\n    int32_t headMot;\n    uint32_t sAcc;\n    uint32_t headAcc;\n    uint16_t pDOP;\n    uint8_t reserved1[6];\n    int32_t headVeh;\n    uint8_t reserved2[4];\n} gps_data;\n\nstruct odo_data_t {\n    uint8_t version;\n    uint8_t reserved1[3];\n    uint32_t iTOW;\n    uint32_t distance;\n    uint32_t totalDistance;\n    uint32_t distanceStd;\n} odo_data;\n\nvoid gpsPVT() {\n    memcpy(\u0026gps_data, gps.msg.data.get(), sizeof(gps_data_t));\n    printf(\"fix: %u lat: %li lon: %li\\n\", gps_data.fixType, gps_data.lat, gps_data.lon);\n}\n\nvoid gpsOdo() {\n    memcpy(\u0026odo_data, gps.msg.data.get(), sizeof(odo_data_t));\n    printf(\"Odo: %lu\\n\", odo_data.distance);\n}\n\nvoid pollGps() { // ISR\n    poll_gps = true;\n}\n\nvoid readGps() {  // ISR\n    read_gps = true;\n}\n\nint main() {\n    while (!gps.init(readGps)) {\n        ThisThread::sleep_for(1s);\n    }\n\n    if (!gps.set_output_rate(GPS_READ_INTERVAL)) {\n        printf(\"PVT rate FAILED\\n\");\n        return 0;\n    }\n\n    if (!gps.set_odometer(true, UbxGpsI2C::ODO_RUNNING)) {\n        printf(\"Odo FAILED\\n\");\n        return 0;\n    }\n\n    if (!gps.auto_send(UbxGpsI2C::UBX_NAV, UBX_NAV_PVT, 1, gpsPVT)) {\n        printf(\"Auto pvt FAILED\\n\");\n        return 0;\n    }\n\n    if (!gps.auto_send(UbxGpsI2C::UBX_NAV, UBX_NAV_ODO, 1, gpsOdo)) {\n        printf(\"Auto odo FAILED\\n\");\n        return 0;\n    }\n\n    UbxGpsI2C::cfg_sbas_t cfg_sbas = {\n        .mode = 1,       // enable\n        .usage = 0b111,  // integrity, diffCorr, range\n        .maxSBAS = 3,\n        .scanmode2 = 0,\n        .scanmode1 = 0b100001011001  // EGNOS: PRN131, PRN126, PRN124, PRN123, PRN120\n    };\n\n    if (!gps.send_ack(UbxGpsI2C::UBX_CFG, UBX_CFG_SBAS, \u0026cfg_sbas, sizeof(UbxGpsI2C::cfg_sbas_t))) {\n        printf(\"SBAS FAILED\\n\");\n        return 0;\n    }\n\n    ticker.attach(\u0026pollGps, GPS_READ_INTERVAL);\n\n    printf(\"GPS OK\\n\");\n\n    while (1) {\n        if (read_gps) {\n            read_gps = false;\n            gps.process();\n            poll_gps = true;  // check for rest of the data\n        }\n\n        if (poll_gps) {\n            poll_gps = false;\n\n            if (!gps.poll()) {\n                printf(\"Request failed\\n\");\n            }\n        }\n    }\n\n    MBED_ASSERT(false);\n}\n```\n\n## Example with enabled debug\n`mbed_app.json`\n```json\n{\n    \"config\": {\n        \"trace-level\": {\n            \"help\": \"Options are TRACE_LEVEL_ERROR,TRACE_LEVEL_WARN,TRACE_LEVEL_INFO,TRACE_LEVEL_DEBUG\",\n            \"macro_name\": \"MBED_TRACE_MAX_LEVEL\",\n            \"value\": \"TRACE_LEVEL_DEBUG\"\n        }\n    },\n    \"target_overrides\": {\n        \"*\": {\n            \"mbed-trace.enable\": true,\n            \"ubxgps.debug\": true\n        }\n    }\n}\n```\n\n```cpp\n#include \"mbed.h\"\n#include \"UbxGpsI2C.h\"\n\n#if MBED_CONF_MBED_TRACE_ENABLE\n#include \"mbed-trace/mbed_trace.h\"\nstatic Mutex trace_mutex;\n\nstatic void trace_wait() {\n    trace_mutex.lock();\n}\n\nstatic void trace_release() {\n    trace_mutex.unlock();\n}\n\nvoid trace_init() {\n    mbed_trace_init();\n    // mbed_trace_exclude_filters_set(const_cast\u003cchar*\u003e(\"UBX \"));\n\n    mbed_trace_mutex_wait_function_set(trace_wait);\n    mbed_trace_mutex_release_function_set(trace_release);\n}\n#endif\n\nint main() {\n#if MBED_CONF_MBED_TRACE_ENABLE\n    trace_init();\n#endif\n\n  \n    while (!gps.init(readGps)) {\n        ThisThread::sleep_for(1s);\n    }\n\n    ...\n}\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpilotak%2Fubxgpsi2c","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpilotak%2Fubxgpsi2c","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpilotak%2Fubxgpsi2c/lists"}