.NET MAUI API

.StartDiscovery

void StartDiscovery()

Starts the Bluetooth Low Energy AND the Wi-Fi discovery scans in the background to find all supported Brady Printers in your area. All device names get stored internally and are retrieved using the "Printers" property. You will pass one of these names into the ConnectToPrinter method to connect to the device.

iOS Only Note: Devices discovered over Wifi will include the string ".local." concatenated to the end of the printer's name.

.StopPrinterDiscovery

void StopPrinterDiscovery()

Stops all discovery scans that are currently running in the background.

.ConnectToPrinterAsync

Task<bool> ConnectToPrinterAsync(DiscoveredPrinterInformation? printer)

Used to make a connection to the DiscoveredPrinterInformation object that was discovered. Passing in "null" will automatically connect to the last printer that was used. The "LastConnectedPrinter" property will be useful when deciding when to intentionally pass in "null". Returns a boolean representing the success of the connection.

DiscoveredPrinterInformation is a custom object that is returned by the PrinterDiscoveredEvent as a callback. You must subscribe to the callback and save all printers that are received. One of these printers will then be passed into this method. This object simply stores the Name, Printer Model, and ConnectionType.

ConnectionType is a custom enum and one of the properties of DiscoveredPrinterInformation. This specifies how this printer was discovered and how it must be connected to. Please note that the same printer can be sent by the PrinterDiscoveredEvent. One could be of the "BLE" ConnectionType and one could be of the "Wifi" ConnectionType. This demonstrates how a user may specify which protocol will be used to connect to a printer.

.ConnectWithManualIpAsync

Task<bool> ConnectWithManualIpAsync(string ipAddress, PrinterModel printer)

Connects to a network printer by explicitly specifying its IPv4 address and model instead of discovering it. Use this method when the printer lives on a different subnet than the mobile device, or when network policies block the multicast traffic that Wi-Fi discovery relies on.

Parameters:

  • ipAddress - The IPv4 address of the printer (e.g., "192.168.1.42"). IPv6 is not supported.
  • printer - The model of the printer located at the specified address. Specifying the wrong model causes the connection to fail.

Returns: true when the printer is connected; false if the address is unreachable, is not a valid IPv4 address, or the printer is a different model than specified.

.DisconnectAsync

Task<PrinterStatus> DisconnectAsync()

Attempts to disconnect from a connected printer and releases ownership if the printer is an M211 or M610. Return a PrinterStatus enum representing the result of the disconnect.

PrinterStatus may be: NoPrinter, Disconnected, Connecting, Connected, Warning, and Error. Refer to the PrinterStatus.swift page for documentation about these values.

.DisconnectWithoutForgetAsync

Task<PrinterStatus> DisconnectWithoutForgetAsync()

Disconnects from the current printer without forgetting it internally or releasing ownership if the printer is an M211 or M610. It is suggested to use this method when the app life cycle is "paused" (backgrounding the app). Calling this immediately before ForgetLastConnectedPrinter() will result in the same functionality as calling the normal "DisconnectAsync" method.

PrinterStatus may be: NoPrinter, Disconnected, Connecting, Connected, Warning, and Error. Refer to the PrinterStatus.swift page for documentation about these values.

.ForgetLastConnectedPrinter

void ForgetLastConnectedPrinter()

Forgets the printer that has been stored internally. This will always be the printer the user most previously connected to successfully. Therefore, calling this method will always result in the LastConnectedPrinter property returning null afterwards until another printer is successfully connected to.

.FeedAsync

Task<bool> FeedAsync()

Attempts to send a "feed" printer operation to the printer. This makes the printer feed exactly one label's worth in length. Calling this will do nothing on an M611 because this operation is available directly on the M611's LED screen.

Only applicable on an M211 or M511

.CutAsync

Task<bool> CutAsync()

Attempts to send a "cut" printer operation to the printer. This makes the printer cut any label that has recently been fed. A noise will be heard from the printer. Calling this will do nothing on an M611 because this operation is available directly on the M611's LED screen.

Only applicable on an M211 or M511

.SetAutomaticShutdownTimeAsync

Task<bool> SetAutomaticShutdownTimeAsync(int minutes)

Attempts to set the "automatic shutdown time" of the connected printer. Returns a boolean representing the success of the operation.

Only applicable on an M211 or M511

.SetTemplateWithFilePath

void SetTemplateWithFilePath(string filePath)

Sets a BWT file or bitmap as the current item to print. This string must be a valid path to a MAUI Asset in order to be successful. To successfully set a valid BWT template, it must be embedded inside the MAUI Resource>>Raw folder and the Build Action must be set to "MauiAsset".

.SetTemplateWithBase64

void SetTemplateWithBase64(string base64Template, bool isTemplate)

Sets a single BWT file or bitmap as the current item to print. The "base64Template" parameter must be a Base64 string of an image or BWT file (see example below). The "isTemplate" parameter specifies if the passed-in Base64 string is derived from a template or an image file (.png, .jpg, .jpeg, .webp, or .svg).

string path = @"my_template.BWT";
byte[] byteData = File.ReadAllBytes(path);
string base64 = Convert.ToBase64String(byteData);
theSdk.SetTemplateWithBase64(base64, true);

Note: Placeholder values can only be set when "isTemplate" is true; a bitmap is printed exactly as supplied, maintaining its aspect ratio while being scaled to fill the first printable zone of the installed supply.

.SetTemplatesWithBase64

void SetTemplatesWithBase64(List<string> base64Templates, bool isTemplate)

Loads several templates or images from base64-encoded strings and makes them the current print job. Each entry in the list becomes one label in the print job, which makes the collation flag of the print methods meaningful.

Parameters:

  • base64Templates - The base64-encoded template or image contents, in the order in which they should be printed.
  • isTemplate - true when the list contains Brady Workstation templates; false when it contains images that should be printed as bitmaps.

Note: Collated printing produces the order 1,2,1,2 while uncollated printing produces 1,1,2,2. All entries must be of the same kind, because "isTemplate" applies to the whole list.

.SetPlaceholderValue

void SetPlaceholderValue(string placeholderName, string placeholderValue)

Sets a value to the desired placeholder of the current template. You may find the names of all valid placeholders by using the "TemplateDataNames" property.

.GetPreview

string? GetPreview(int elementSize)

Retrieves a print preview image in the form of a base64 string. Must pass-in the desired image size.

.PrintAsync (Bitmaps & Templates)

Task<PrintingStatus> PrintAsync(int copies, CutOption cutOption, bool isCollated, bool printTrailer)

Attempts to print the previous template or bitmap that was set using the "Template" property. Returns a the PrintingStatus enumeration representing the success or failure of the print. Please reference the "PrintingOptions.swift" page for further documentation about copies, cutAfterEachLabel, isCollated, and printTrailer.

CutOption can be: EndOfJob, EndOfLabel, CutAfterRow, UsePrinterSettings, Never. Refer to the "CutOptions.swift" page for documentation on these values.

.PrintAsync (Bitmaps & Templates w/ Custom Sizing)

Task<PrintingStatus> PrintAsync(double bitmapWidth, double labelLength, int copies, CutOption cutOption, bool isCollated, bool printTrailer)

Prints the loaded template or bitmap using explicit label dimensions instead of the printer's defaults. Returns the PrintingStatus enumeration representing the success or failure of the print.

Parameters:

  • bitmapWidth - The width in millimeters that the rendered template or bitmap should occupy. Decrease this value when the image does not fit fully on the label.
  • labelLength - The length in millimeters of the label to print on. Increase this value on continuous supply to give a non-square image more room and reduce wasted space.
  • copies - The number of copies of the whole job to print. Must be one or greater.
  • cutOption - When the printer performs a cut during the job. CutAfterRow is only supported on M611, S3700, i5300, and i7500.
  • isCollated - true to print in order 1,2,1,2; false to print in order 1,1,2,2.
  • printTrailer - true to feed trailing white space after the last label; false to suppress it. Only honored by M211.

Note: Use this overload to control how the artwork is laid out on the label. The physical supply width cannot be changed, so bitmapWidth may only shrink the artwork relative to the supply reported by SupplyWidth; labelLength only takes effect on continuous supply.

.PrintAsync (RFID with Default Sizing)

Task<PrintingStatus> PrintAsync(RfidOperation[][] rfidOperations, int copies, CutOption cutOption, bool isCollated, bool printTrailer)

Prints the loaded template or bitmap(s) using the printer's default label sizing and performs RFID encoding on each label as it prints.

Parameters:

  • rfidOperations - The RFID operations to perform. The outer array holds one entry per label in the job and each inner array holds the operations to run against that label's tag.
  • copies - The number of copies of the whole job to print. Must be one or greater.
  • cutOption - When the printer performs a cut during the job.
  • isCollated - true to print labels in order 1,2,1,2; false to print in order 1,1,2,2.
  • printTrailer - true to feed trailing white space; false to suppress it. Only honored by M211.

Returns: PrintingStatus.PrintingSucceeded when the job and all encoding operations finished, or PrintingStatus.PrintingFailed if any failed.

Note: Requires an RFID-capable printer and RFID supply. The number of entries in rfidOperations must match the number of labels in the loaded job. A tag that cannot be read or written fails the job even when the label itself printed correctly.

.PrintAsync (RFID with Custom Sizing)

Task<PrintingStatus> PrintAsync(RfidOperation[][] rfidOperations, double bitmapWidth, double labelLength, int copies, CutOption cutOption, bool isCollated, bool printTrailer)

Prints the loaded template or bitmap(s) using explicit label dimensions and performs RFID encoding on each label as it prints.

Parameters:

  • rfidOperations - The RFID operations to perform, where the outer array holds one entry per label in the job and each inner array holds the operations to run against that label's tag.
  • bitmapWidth - The width in millimeters that the rendered template or bitmap should occupy.
  • labelLength - The length in millimeters of the label to print on.
  • copies - The number of copies of the whole job to print. Must be one or greater.
  • cutOption - When the printer performs a cut during the job.
  • isCollated - true to print labels in order 1,2,1,2; false to print in order 1,1,2,2.
  • printTrailer - true to feed trailing white space; false to suppress it. Only honored by M211.

Returns: PrintingStatus.PrintingSucceeded when the job and all encoding operations finished, or PrintingStatus.PrintingFailed when any of them did not.

Note: Combines the sizing behavior of the dimension-based print with RFID encoding, and therefore carries the restrictions of both: continuous supply is required for labelLength to apply, and the printer and supply must support RFID.

.PrintPDFAsync

Task<PrintingStatus> PrintPDFAsync(string pdfFilePath, int rotationDegrees, int copies, CutOption cutOption, bool isCollated, bool printTrailer)

Prints a PDF document from the device's file system.

Parameters:

  • pdfFilePath - The absolute path of the PDF file to print.
  • rotationDegrees - The clockwise rotation to apply to each page before printing. Only 0, 90, 180, and 270 are valid; use it to match a landscape document to a portrait supply.
  • copies - The number of copies of the whole document to print. Must be one or greater.
  • cutOption - When the printer performs a cut during the job.
  • isCollated - true to print pages in order 1,2,1,2; false to print in order 1,1,2,2.
  • printTrailer - true to feed trailing white space after the last page; false to suppress it. Only honored by M211.

Returns: PrintingStatus.PrintingSucceeded when the document finished printing, or PrintingStatus.PrintingFailed when it did not.

Note: Each page is rasterized into one label, keeping its aspect ratio while being scaled to fill the printable zone of the installed supply. Printing a PDF replaces the currently loaded template or bitmap job.

.SetSupplyDatabaseAsync

Task<bool> SetSupplyDatabaseAsync(Stream stream)

Updates the printer's supply database with an XML document describing supported supplies and their properties.

Parameters:

  • stream - A readable stream over the supply database XML. The caller owns the stream and is responsible for disposing it.

Returns: true when the printer accepted and stored the database; false otherwise.

Note: Use this when a newly released supply is not yet recognized by the printer's firmware, which otherwise reports the installed part as invalid through IsSupplyValid. The transfer can take several seconds and the printer must not be printing at the time. After a successful update the printer reports the new database through LabelLibraryVersion.

.CheckForSupplyMismatch

bool CheckForSupplyMismatch()

Determines whether the loaded template requires a different supply than the one installed in the printer.

Returns: true when the template's part and the installed part differ; false when they match or when the comparison cannot be made because no printer is connected or no template is loaded.

Note: The comparison is made between TemplateSupplyName and SupplyName. Call this before printing and warn the user, because printing a template on the wrong part produces labels with incorrect dimensions and wastes supply.

.CleanPrintheadAsync

Task<bool> CleanPrintheadAsync()

Runs the printer's printhead cleaning routine.

Returns: true when the routine ran to completion; false otherwise.

Note: Only supported on printers with a maintenance station. Check IsCleanPrintheadMaintenanceRecommended to decide when to prompt the user, and CleanPrintheadSuccessful for the outcome the printer reported afterwards. The routine consumes ink and takes time to complete, so it should not be run on every connection.

.SetMaintenanceStationPropertyAsync

Task<bool> SetMaintenanceStationPropertyAsync(MaintenanceStation maintenanceStation)

Dismisses or restores the printer's maintenance station notifications.

Parameters:

  • maintenanceStation - The notification action to apply to the maintenance station.

Returns: true when the printer accepted the change; false otherwise.

Note: Use this to acknowledge a maintenance station warning or error from the application's own UI. The resulting state is reflected by MaintenanceStationWarningAway and MaintenanceStationErrorAway.

.PrintAlignmentLabelAsync

Task<bool> PrintAlignmentLabelAsync()

Prints a diagnostic label used to verify the printhead alignment offset.

Returns: true when the alignment label printed; false otherwise.

Note: Print the label, read the offset indicated on it, and apply that value with SetAlignmentOffsetAsync. The routine consumes one label of the installed supply and replaces nothing in the currently loaded template.

.SetAlignmentOffsetAsync

Task<bool> SetAlignmentOffsetAsync(int offset)

Sets the printhead alignment offset that the printer applies to every subsequent print job.

Parameters:

  • offset - The offset to apply, as read from the label produced by PrintAlignmentLabelAsync. The valid range is defined by the printer's firmware.

Returns: true when the printer accepted the offset; false otherwise.

Note: The applied value is reported by AlignmentOffset. The setting persists on the printer across connections, so it only needs to be configured when the alignment label shows a drift.

.SetPrinterQualityModeAsync

Task<bool> SetPrinterQualityModeAsync(PrintMode printMode)

Sets the print quality mode that the printer uses for subsequent print jobs.

Parameters:

  • printMode - The quality mode to apply.

Returns: true when the printer accepted the mode; false otherwise.

Note: Not every printer supports every mode; inspect AvailablePrintQualityModes and only offer the modes it lists, because an unsupported mode is rejected by the printer. Higher quality modes generally print more slowly.

.GetPrinterDetails

string GetPrinterDetails()

Returns a formatted string of all printer details and their values. This is convenient to use instead of handling all printer details properties separately.

Note: This is a convenience for diagnostics and support screens; it aggregates the same values that are exposed individually as properties on this interface. Do not parse the result, because its format is not guaranteed to remain stable.


Printer Properties


.AutomaticShutdownTime

int? AutomaticShutdownTime { get; }

Gets the automatic shutdown time value for the printer in minutes. Will return "null" if the connected printer is not an M211 or M511.

.LastConnectedPrinterName

string? LastConnectedPrinterName { get; }

Returns the printer name of the last printer that was successfully connected to. The printer's other information is stored internally and will only be cleared after calling "DisconnectAsync()" or "ForgetLastConnectedPrinter()". Even when closing the application, this information will always be retrievable. This is used for automatic connection capabilities.

Automatic Connection Example:

  • If "LastConnectedPrinterName" returns a printer name, you may simply pass in "null" to the "ConnectToPrinterAsync" method.

  • If "LastConnectedPrinterName" is null, you must start discovery to connect to an available printer. This will take longer than the option above.

.HasOwnership

bool? HasOwnership { get; }

This method is only applicable when using an M211 and M610. Returns true if your mobile device has claimed ownership of the M211. This DOES NOT necessarily mean you are connected. The blue light on the printer should turn solid blue when you gain ownership regardless if you are connected or not. This light will stay solid blue only until the Disconnect method is called. Even when the app is closed and the printer disconnects, the light should stay solid blue.

.Printers

List<DiscoveredPrinterInformation> Printers { get; }

Gets the list of printers discovered during the last discovery session.

.PrinterStatus

PrinterStatus PrinterStatus { get; }

Returns the PrinterStatus enumeration that describes the state of the printer's connection.

.PrinterStatusMessage

string? PrinterStatusMessage { get; }

Returns a String that represents the body of a printer error message.

.PrinterStatusMessageTitle

string? PrinterStatusMessageTitle { get; }

Returns a String that represents the title of the printer error.

.PrinterStatusRemedyExplanationMessage

string? PrinterStatusRemedyExplanationMessage { get; }

Returns a String that represents the remedy to a printer error.

.PrinterStatusErrorSeverity

string? PrinterStatusErrorSeverity { get; }

Returns a String that represents the printer error severity. Could be "Warning", "Error", or "Information".

.FirmwareVersion

string? FirmwareVersion { get; }

Gets the firmware version running on the connected printer. Returns null when no printer is connected. Useful when diagnosing behavior that differs between firmware releases of the same model.

.BluetoothVersion

string? BluetoothVersion { get; }

Gets the version of the Bluetooth module in the connected printer. Returns null when no printer is connected or the model has no Bluetooth radio.

.WifiVersion

string? WifiVersion { get; }

Gets the version of the Wi-Fi module in the connected printer. Returns null when no printer is connected or the model has no Wi-Fi radio.

.LabelLibraryVersion

string? LabelLibraryVersion { get; }

Gets the version of the label library (Yb file) stored on the connected printer. Returns null when no printer is connected or the model does not report one. The label library defines the parts the printer recognizes. A printer with an outdated library may report a newly released supply as invalid until it is updated through SetSupplyDatabaseAsync.

.PrinterName

string? PrinterName { get; }

Returns a String that represents the name of the connected printer.

.PrinterModel

PrinterModel? PrinterModel { get; }

Returns a PrinterModel enumeration value that represents the model of the connected printer.

PrinterModel is a custom enumeration whose values represent the supported printers. These values are M211, M511, M611, M610, M710, S3700, i5300, i7500.

.ConnectionType

ConnectionType? ConnectionType { get; }

Returns a ConnectionType enumeration value that represents the protocol the current printer was connected with. Can be "BLE", "Wifi", or "Bluetooth".

ConnectionType is a custom enum and one of the properties of DiscoveredPrinterInformation. This specifies how this printer was discovered and how it must be connected to. Please note that the same printer can be sent by the PrinterDiscoveredEvent. One could be of the "BLE" ConnectionType and one could be of the "Wifi" ConnectionType. This demonstrates how a user may specify which protocol will be used to connect to a printer.

.BatteryLevelPercentage

int? BatteryLevelPercentage { get; }

Returns an Integer that represents roughly the battery life percentage of the printer.

.isAcConnected

bool? isAcConnected { get; }

Returns a Boolean that represents whether this printer is plugged into an outlet and on AC power.

.SupplyName

string? SupplyName { get; }

Returns a String that represents the full name of the part loaded in the connected printer.

.SupplyRemainingPercentage

string? SupplyRemainingPercentage { get; }

Returns an Integer that represents the percentage of remaining supply in the connected printer.

.SupplyWidth

double? SupplyWidth { get; }

Returns a Double that represents the Width in inches of the supply installed in the printer

.SupplyHeight

double? SupplyHeight { get; }

Returns a Double that represents the Height in inches of the supply installed in the printer.

.SupplyColor

Color? SupplyColor { get; }

Returns a Color object that represents the color of the supply installed in the connected printer.

.RibbonColor

Color? RibbonColor { get; }

Returns a Color object that represents the color of the ribbon installed in the connected printer.

.IsSupplyPreSized

bool? IsSupplyPreSized { get; }

Returns a Boolean that represents if the installed part in the connected printer is a pre-sized part (die-cut into labels). If false, the part is continuous supply. Returns null when no printer is connected. Label length can only be customized at print time on continuous supply.

.IsSupplyDirectThermal

bool? IsSupplyDirectThermal { get; }

Returns a Boolean that represents if the installed part in the connected printer is a direct thermal part (prints without a ribbon). Returns false when a ribbon is required, and null when no printer is connected. These only exist for the i7500 printer at the moment. When this is true, the ribbon properties on this interface are not populated.

.DotsPerInch

int? DotsPerInch { get; }

Returns an integer that represents the dots per inch capability of the connected printer. Returns null when no printer is connected. This determines how finely artwork is rasterized, and therefore the smallest legible barcode and text sizes. Most printers default to 300 DPI, but the M211 uses 203 DPI.

.PostPrintAccessoryType

PostPrintAccessoryType PostPrintAccessoryType { get; }

Gets the post-print accessory installed on the connected printer. Returns PostPrintAccessoryType.None when nothing is installed, when no printer is connected, or when the model does not support accessories. Only the i7500 reports a meaningful value. When a peeler or perforation cutter is installed, the printer controls cutting itself and the effective cut option is CutOption.UsePrinterSettings.

.SuppliesMatch

bool? SuppliesMatch { get; }

Gets a value indicating whether the installed supply satisfies the loaded template's requirements. Returns true when the parts match; false when they do not; null when no printer is connected or no template is loaded. This is the property form of CheckForSupplyMismatch and is refreshed by printer updates.

.IsSupplyValid

bool? IsSupplyValid { get; }

Gets a value indicating whether the printer recognizes the installed supply as usable. Returns true when the supply is valid; false when it is missing, damaged, or unknown to the printer; null when no printer is connected. Printing fails while this is false. A newly released part that the printer does not yet recognize can be made valid by updating the supply database with SetSupplyDatabaseAsync.

.IsPreprintedSupply

bool? IsPreprintedSupply { get; }

Gets a value indicating whether the installed supply already carries preprinted artwork. Returns true for preprinted supply; false for blank supply; null when no printer is connected. Templates designed for preprinted parts position their objects around the existing artwork, which is another reason to verify the part with CheckForSupplyMismatch.

.YNumber

string? YNumber { get; }

Returns a string representing the installed supply's unique Y Number.

.RibbonName

string? RibbonName { get; }

Returns a string representing the name of the installed ribbon. Will always return an empty string for printers that are not applicable (M211 and M511).

.IsRibbonValid

bool? IsRibbonValid { get; }

Gets a value indicating whether the installed ribbon in the connected printer is valid for printing.

.RibbonRemainingPercentage

int? RibbonRemainingPercentage { get; }

Returns an int representing the percentage of ribbon remaining inside the connected printer.

.SupplyDimensions

string? SupplyDimensions { get; }

Gets a display-ready description of the installed supply's dimensions. Returns null when no printer is connected or no supply is installed. Intended for display only; use SupplyWidth and SupplyHeight when the values are needed for calculations.

.SupplyLeftOffset

double? SupplyLeftOffset { get; }

Gets the horizontal offset, in millimeters, between the edge of the supply and its printable area. Returns null when no printer is connected or no supply is installed. Reported by the printer so that artwork can be positioned within the printable zone.

.SupplyVerticalOffset

double? SupplyVerticalOffset { get; }

Gets the vertical offset, in millimeters, between the leading edge of the supply and its printable area. Returns null when no printer is connected or no supply is installed.

.InkRemainingPercentage

int? InkRemainingPercentage { get; }

Gets how much ink is left in the connected printer. Returns a value from 0 to 100 percent, or null when no printer is connected or the model does not use ink cartridges.

.OutOfInkCmy

bool? OutOfInkCmy { get; }

Gets a value indicating whether the printer has run out of cyan, magenta, or yellow ink. Returns true when at least one color is empty; false when all colors are available; null when no printer is connected or the model does not use color ink. Color jobs fail while this is true, even though monochrome printing may still be possible.

.IsInkSupplyValid

bool? IsInkSupplyValid { get; }

Gets a value indicating whether the printer recognizes the installed ink supply as usable. Returns true when the ink supply is valid; false when it is missing, empty, or unknown to the printer; null when no printer is connected or the model does not use ink.

.IsPrintheadInstalled

bool? IsPrintheadInstalled { get; }

Gets a value indicating whether a printhead is installed in the connected printer. Returns true when a printhead is present; false when it is missing or not seated; null when no printer is connected or the model does not report it. Printing fails while this is false; prompt the user to reseat or install the printhead.

.IsCleanPrintheadMaintenanceRecommended

bool? IsCleanPrintheadMaintenanceRecommended { get; }

Gets a value indicating whether the printer recommends running the printhead cleaning routine. Returns true when cleaning is recommended; false when it is not; null when no printer is connected or the model has no maintenance station. Prompt the user and run CleanPrintheadAsync when this becomes true.

.CleanPrintheadSuccessful

bool? CleanPrintheadSuccessful { get; }

Gets a value indicating whether the most recent printhead cleaning routine completed successfully. Returns true when the last routine succeeded; false when it failed; null when no routine has run on this connection or the model has no maintenance station. Reported by the printer after CleanPrintheadAsync finishes.

.MaintenanceStationWarningAway

bool? MaintenanceStationWarningAway { get; }

Gets a value indicating whether the maintenance station warning has been dismissed. Returns true when the warning is dismissed; false when it is still active; null when no printer is connected or the model has no maintenance station. Change the state with SetMaintenanceStationPropertyAsync.

.MaintenanceStationErrorAway

bool? MaintenanceStationErrorAway { get; }

Gets a value indicating whether the maintenance station error has been dismissed. Returns true when the error is dismissed; false when it is still active; null when no printer is connected or the model has no maintenance station. Change the state with SetMaintenanceStationPropertyAsync.

.AlignmentOffset

int? AlignmentOffset { get; }

Gets the printhead alignment offset currently applied by the connected printer. Returns null when no printer is connected or the model does not support alignment. Set a new value with SetAlignmentOffsetAsync after inspecting an alignment label.

.AvailablePrintQualityModes

List<string>? AvailablePrintQualityModes { get; }

Gets the print quality modes that the connected printer supports. Returns the supported mode names, or null when no printer is connected or the model exposes no quality modes. Restrict the choices offered to the user to this list, because SetPrinterQualityModeAsync fails for a mode the printer does not support.

.TemplateSupplyName

string? TemplateSupplyName { get; }

Returns a string that represents information about the part that was selected when designing the current template.

.TemplateDataNames

Dictionary<string, string>? TemplateDataNames { get; }

Returns a Dictionary where the keys represent the object names on the currently set template and where the values represent the type of object they are. Use the keys to build a data entry UI and to supply valid names to SetPlaceholderValue. Static objects such as shapes and non-placeholder text are not included, because their values cannot be changed.

.PrinterDiscoveredEvent

event EventHandler<DiscoveredPrinterInformation>? PrinterDiscoveredEvent

Must subscribe to this event for it to trigger. For example: bradySdk.PrinterDiscoveredEvent += HandlePrinterDiscovery; where "HandlePrinterDiscovery" is a function defined like "private void HandlePrinterDiscovery(object? sender, DiscoveredPrinterInformation printer){}"

This callback will trigger and provide a new DiscoveredPrinterInformation object whenever the Brady Print SDK discovers a printer. It is suggested to save each of these objects to a local list.

.PrinterRemovedEvent

event EventHandler<DiscoveredPrinterInformation>? PrinterRemovedEvent

Must subscribe to this event for it to trigger. For example: bradySdk.PrinterRemovedEvent += HandlePrinterRemoval; where "HandlePrinterRemoval" is a function defined like "private void HandlePrinterRemoval(object? sender, DiscoveredPrinterInformation printer){}"

This callback will trigger and provide a DiscoveredPrinterInformation object whenever the Brady Print SDK "loses sight" of a discovered printer. Internally, if the SDK no longer discovers a past printer for 30 seconds, this callback will trigger. It is suggested to remove this object from the local "discovered printers" list (read PrinterDiscoveredEvent docs above).

.PrinterUpdateEvent

event EventHandler<IEnumerable<PrinterProperties>>? PrinterUpdateEvent

Must subscribe to this event for it to trigger. For example: bradySdk.PrinterUpdateEvent += HandlePrinterUpdates; where "HandlePrinterUpdates" is a function defined like "private void HandlePrinterUpdates(object? sender, IEnumerable<PrinterProperties> updates){}"

This callback will trigger and provide PrinterProperties whenever a change occurs with the connected printer. It is suggested to iterate through this IEnumerable and save the value of the property with the same name.

For example, if an item in the returned IEnumerable is "PrinterStatus", the IBradySdk.PrinterStatus should be called because the SDK is notifying the app that this value has changed.