def produce_can_h(can_entry):
    """generate code for a can info entry (row of csv file)"""
    field_name = can_entry["Field Name"].lower()
    can_id = can_entry["CAN ID"]
    py_str = "\n"
    py_str += f"// {can_entry['Field Name']}\n"
    py_str += f"// Type: {can_entry['Format']}\n"
    py_str += f"// Sender: {can_entry['Sender']}\n"
    py_str += f"// Receiver: {can_entry['Receiver']}\n"
    if can_entry["Bounds/Range"] != '':
        py_str += f"// Bounds/Range: {can_entry['Bounds/Range']}\n"
    if can_entry["Units"] != '':
        py_str += f"// Units: {can_entry['Units']}\n"
    if can_entry["J1939?"] != '':
        py_str += f"// J1939 compatible: {can_entry['J1939?']}\n"
    else:
        py_str += f"// J1939 compatible: NO\n"
    if can_entry["Field Description"] != '':
        py_str += "//\n"
        py_str += '// ' + can_entry['Field Description'].replace('\n','\n//\t') + "\n"
    py_str += f"#define CAN_ID_{field_name.upper()} {can_id}\n"
    py_str += f"#define BYTE_LENGTH_{field_name.upper()} {can_entry['Byte Length']}\n"
    if can_entry['PGN'] != '':
        py_str += f"#define PGN_{field_name.upper()} {can_entry['PGN']}\n"
    return py_str