def dict_from_payload()

in transform_binary_payload/src-payload-decoders/python/globalsat_lt100.py [0:0]


def dict_from_payload(base64_input: str, fport: int = None):
    decoded = base64.b64decode(base64_input)

    if DEBUG_OUTPUT:
        print(f"Input: {decoded.hex().upper()}")

    # Get device type from byte 0
    device_type = decoded[0]

    # Get gps fix from byte 1, bit 6-7
    gps_fix_flag = (decoded[1] & 0b11000000) >> 6
    gps_fix = "unknown"
    if gps_fix_flag == 0b00:
        gps_fix = "not fix"
    elif gps_fix_flag == 0b01:
        gps_fix = "2D"
    elif gps_fix_flag == 0b10:
        gps_fix = "3D"

    # Get report type from byte 1, bit 0-5
    report_type_flag = (decoded[1] & 0b00111111)
    report_type = "unknown"
    if report_type_flag == 2:
        report_type = "Periodic mode report"
    elif report_type_flag == 4:
        report_type = "Motion mode static report"
    elif report_type_flag == 5:
        report_type = "Motion mode moving report"
    elif report_type_flag == 6:
        report_type = "Motion mode static to motion report"
    elif report_type_flag == 7:
        report_type = "Motion mode moving to static report"
    elif report_type_flag == 14:
        report_type = "SOS alarm report"
    elif report_type_flag == 15:
        report_type = "Low battery alarm report"
    elif report_type_flag == 17:
        report_type = "Power on (temperature)"
    elif report_type_flag == 19:
        report_type = "Power off (low battery)"
    elif report_type_flag == 20:
        report_type = "Power off (temperature)"

    # Get battery capacity from byte 2
    battery_capacity = int(decoded[2])

    # Get latitude from byte 3-6
    lat = ((decoded[3] << 24) | (decoded[4] << 16) |
           (decoded[5] << 8) | (decoded[6]))
    lat = helpers.bin32dec(lat) / 1000000

    # Get longitude from byte 7-10
    long = ((decoded[7] << 24) | (decoded[8] << 16) |
            (decoded[9] << 8) | (decoded[10]))
    long = helpers.bin32dec(long) / 1000000

    # Output
    result = {
        "deviceType": device_type,
        "gpsFix": gps_fix,
        "reportType": report_type,
        "batteryCapacity": battery_capacity,
        "lat": lat,
        "long": long
    }

    if DEBUG_OUTPUT:
        print(f"Output: {json.dumps(result,indent=2)}")

    return result