Техническое примечание TN2144

Обнаружение низких уровней чернил принтера

Введение
Пользовательские инструменты предоставления
Требуемые ключи
Дополнительные ключи
Тестирование Вашего инструмента
Демонстрационный запрос SNMP
Связь с Вашим принтером
История версии документа

Введение

Начиная с Mac OS X 10.4, принтеры IP могут обнаружить уровни запасов принтера при помощи встроенного инструмента командной строки snmpInk. Этот инструмент выполняется по умолчанию для определения уровней чернил принтера. Инструмент расположен в /System/Library/Printers/Libraries/ и может быть выполнен на командной строке с отдельным аргументом, очередь печати ID.

/System/Library/Printers/Libraries/snmpInk <queue_id>

Этот инструмент возвратит отформатированные данные XML, полученные с помощью SNMP, тогда использующегося для создания уровня запасов Print Dialog Extension (PDE), которое может быть выведено на экран пользователю для указания уровней чернил. Вот пример области «Supply Levels» в Диалоговом окне Печати:

<ИЗОБРАЖЕНИЕ>

Пользовательские инструменты предоставления

Драйвер принтера может обеспечить инструмент пользователя, который может обнаружить уровни запасов принтера. Этот инструмент переопределит значение по умолчанию snmpInk инструмент используется для принтеров IP. Драйвер указывает надлежащий инструмент через строку в PPD принтера или запись в информационном билете принтера. Когда система печати будет хотеть запросить принтер для уровней запасов, это выполнит передачу инструмента в ID очереди (имя очереди печати) как первый параметр.

Если бы у Вас есть драйвер CUPS, и требуется переопределить инструмент по умолчанию с инструментом пользователя, необходимо добавить *APPrinterLowInkTool ключ к Вашему файлу PPD с полным путем к Вашему инструменту.

*APPrinterLowInkTool: "/Library/Printers/Foo/Utility/MySupplyTool"

Если у Вас есть драйвер Тиога (10.0 - 10,1 базируемых драйверов), необходимо включать APPrinterLowInkTool в Вашем файле Info.plist как дочерний элемент корневого узла.

Когда выполняется, инструмент должен записать в stdout форму XML CF или NSDictionary. Словарь описывает каждый расходный материал в принтере и предоставляет информацию о ее текущем состоянии.

Ваш инструмент должен также быть в состоянии закончиться корректно при получении сигнала TERM. Если пользователь должен был переключить принтеры в диалоговое окно печати, сигнал TERM отправляется в Ваш инструмент. Поэтому Вашему инструменту, возможно, понадобится сигнальный обработчик для корректного завершения работу его диалогового окна с принтером.

Требуемые ключи

В настоящее время существует единственный определенный ключ для словаря верхнего уровня. Этот ключ prtMarkerSuppliesTable. Значение для prtMarkerSuppliesTable ключ является массивом словарей. Каждый элемент в массиве описывает расходный материал через серию пар ключ/значение. Определенные ключи и их значения упоминаются ниже. Посмотрите RFC 3805 для получения дополнительной информации об этих ключах.

При создании инструмента пользователя необходимо поддерживать четыре ключа.

Таблица 1  требуемые ключи

Требуемые ключи

Ввести

Значение

prtMarkerSuppliesClass

CFNumber представление целого числа

1 = другие 3 = supplyThatIsConsumed 4 = supplyThatIsFilled

prtMarkerSuppliesDescription

CFString

Локализованное описание предоставления. Это описание должно быть максимально универсальным. Например, «Черные чернила». prtMarkerPartNumber словарная статья может использоваться для предоставления более точной информации о предоставлении.

prtMarkerSuppliesMaxCapacity

CFNumber представление целого числа

Максимальная способность этого контейнера/колодки предоставления выражена в prtMarkerSuppliesSupplyUnit. Значение (-1) средние значения другой и в частности указывают, что субблок не устанавливает ограничений для этого параметра. Значение (-2) неизвестные средние значения.

prtMarkerSuppliesLevel

CFNumber представление целого числа

Текущий уровень, если это предоставление является контейнером; остающееся пространство, если это предоставление является колодкой. Значение (-2) неизвестные средние значения. Значение (-3) средние значения, что принтер знает, что максимальная способность не была достигнута, но точный уровень, неизвестно. Если устройство может только сигнализировать, установлен ли уровень предоставлений «низко» тогда это значение в 5% 'prtMarkerSuppliesMaxCapacity'.

Дополнительные ключи

Таблица 2  дополнительные ключи

Дополнительные ключи

Ввести

Значение

prtMarkerSuppliesType

CFNumber представление целого числа

1 = другие 2 = неизвестные 3 - тонер 4 = wasteToner 5 = чернила 6 = inkCartridge 7 = красящая лента 8 = wasteInk 9 = opc 10 = разработчик 11 = fuserOil 12 = solidWax 13 = ribbonWax 14 = wasteWax 15 = термофиксатор 16 = провод коронирования 17 = fuserOilWick 18 = cleanerUnit 19 = fuserCleaningPad 20 = transferUnit 21 = tonerCartridge 22 = fuserOiler 23 = вода 24 = сточные воды 25 = glueWaterAdditive 26 = макулатура 27 = bindingSupply 28 = bandingSupply 29 = stitchingWire 30 = запаковывает 31 = paperWrap 32 =, главные продукты 33 = вставляют 34 = покрытия

prtMarkerSuppliesSupplyUnit

CFString представление целого числа

1 = другие 2 = неизвестные 3 = tenThousandthsOfInches 4 = микрометры 7 = впечатления 8 = покрывают 11 = часы 12 = thousandthsOfOunces 13 = tenthsOfGrams 14 = hundrethsOfFluidOunces 15 = tenthsOfMilliliters 16 = футы 17 = метры 18 = элементы 19 = процент

prtMarkerSRGBRepresentation

CFArray, содержащий три CFNumbers

Красные, зеленые, и синие значения sRGB для представления на дисплее цвета этого предоставления.

prtMarkerPartNumber

CFString содержание номера детали предоставления.

Определенный поставщик

Тестирование Вашего инструмента

При тестировании пользовательского инструмента предоставления можно выполнить инструмент на командной строке и получить вывод в консоли.

<tool> <queue_id>

значения по умолчанию пишут 'YES' com.apple.print verboseInk

Демонстрационный запрос SNMP

Вот демонстрационный вывод для цветного лазерного принтера. Эта выборка была сгенерирована через запросы SNMP принтера.

  Демонстрационный запрос SNMP перечисления 1

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN"
                              "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
        <key>prtMarkerSuppliesTable</key>
        <array>
                <dict>
                        <key>prtMarkerSuppliesClass</key>
                        <integer>3</integer>
                        <key>prtMarkerSuppliesDescription</key>
                        <string>Black Print Cartridge</string>
                        <key>prtMarkerSuppliesLevel</key>
                        <integer>20500</integer>
                        <key>prtMarkerSuppliesMaxCapacity</key>
                        <integer>25000</integer>
                        <key>prtMarkerSuppliesSupplyUnit</key>
                        <integer>7</integer>
                        <key>prtMarkerSuppliesType</key>
                        <integer>3</integer>
                        <key>prtMarkerPartNumber</key>
                        <string>HP C8550A</string>
                </dict>
                <dict>
                        <key>prtMarkerSuppliesClass</key>
                        <integer>3</integer>
                        <key>prtMarkerSuppliesDescription</key>
                        <string>Cyan Print Cartridge</string>
                        <key>prtMarkerSuppliesLevel</key>
                        <integer>11750</integer>
                        <key>prtMarkerSuppliesMaxCapacity</key>
                        <integer>25000</integer>
                        <key>prtMarkerSuppliesSupplyUnit</key>
                        <integer>7</integer>
                        <key>prtMarkerSuppliesType</key>
                        <integer>3</integer>
                        <key>prtMarkerPartNumber</key>
                        <string>HP C8551A</string>
                </dict>
                <dict>
                        <key>prtMarkerSuppliesClass</key>
                        <integer>3</integer>
                        <key>prtMarkerSuppliesDescription</key>
                        <string>Magenta Print Cartridge</string>
                        <key>prtMarkerSuppliesLevel</key>
                        <integer>12500</integer>
                        <key>prtMarkerSuppliesMaxCapacity</key>
                        <integer>25000</integer>
                        <key>prtMarkerSuppliesSupplyUnit</key>
                        <integer>7</integer>
                        <key>prtMarkerSuppliesType</key>
                        <integer>3</integer>
                        <key>prtMarkerPartNumber</key>
                        <string>HP C8553A</string>
                </dict>
                <dict>
                        <key>prtMarkerSuppliesClass</key>
                        <integer>3</integer>
                        <key>prtMarkerSuppliesDescription</key>
                        <string>Yellow Print Cartridge</string>
                        <key>prtMarkerSuppliesLevel</key>
                        <integer>11500</integer>
                        <key>prtMarkerSuppliesMaxCapacity</key>
                        <integer>25000</integer>
                        <key>prtMarkerSuppliesSupplyUnit</key>
                        <integer>7</integer>
                        <key>prtMarkerSuppliesType</key>
                        <integer>3</integer>
                        <key>prtMarkerPartNumber</key>
                        <string>HP C8552A</string>
                </dict>
                <dict>
                        <key>prtMarkerSuppliesClass</key>
                        <integer>3</integer>
                        <key>prtMarkerSuppliesDescription</key>
                        <string>Black Image Drum</string>
                        <key>prtMarkerSuppliesLevel</key>
                        <integer>38800</integer>
                        <key>prtMarkerSuppliesMaxCapacity</key>
                        <integer>40000</integer>
                        <key>prtMarkerSuppliesSupplyUnit</key>
                        <integer>7</integer>
                        <key>prtMarkerSuppliesType</key>
                        <integer>9</integer>
                        <key>prtMarkerPartNumber</key>
                        <string>HP C8560A</string>
                </dict>
                <dict>
                        <key>prtMarkerSuppliesClass</key>
                        <integer>3</integer>
                        <key>prtMarkerSuppliesDescription</key>
                        <string>Cyan Image Drum</string>
                        <key>prtMarkerSuppliesLevel</key>
                        <integer>14400</integer>
                        <key>prtMarkerSuppliesMaxCapacity</key>
                        <integer>40000</integer>
                        <key>prtMarkerSuppliesSupplyUnit</key>
                        <integer>7</integer>
                        <key>prtMarkerSuppliesType</key>
                        <integer>9</integer>
                        <key>prtMarkerPartNumber</key>
                        <string>HP C8561A</string>
                </dict>
                <dict>
                        <key>prtMarkerSuppliesClass</key>
                        <integer>3</integer>
                        <key>prtMarkerSuppliesDescription</key>
                        <string>Magenta Image Drum</string>
                        <key>prtMarkerSuppliesLevel</key>
                        <integer>14800</integer>
                        <key>prtMarkerSuppliesMaxCapacity</key>
                        <integer>40000</integer>
                        <key>prtMarkerSuppliesSupplyUnit</key>
                        <integer>7</integer>
                        <key>prtMarkerSuppliesType</key>
                        <integer>9</integer>
                        <key>prtMarkerPartNumber</key>
                        <string>HP C8563A</string>
                </dict>
                <dict>
                        <key>prtMarkerSuppliesClass</key>
                        <integer>3</integer>
                        <key>prtMarkerSuppliesDescription</key>
                        <string>Yellow Image Drum</string>
                        <key>prtMarkerSuppliesLevel</key>
                        <integer>14800</integer>
                        <key>prtMarkerSuppliesMaxCapacity</key>
                        <integer>40000</integer>
                        <key>prtMarkerSuppliesSupplyUnit</key>
                        <integer>7</integer>
                        <key>prtMarkerSuppliesType</key>
                        <integer>9</integer>
                        <key>prtMarkerPartNumber</key>
                        <string>HP C8562A</string>
                </dict>
                <dict>
                        <key>prtMarkerSuppliesClass</key>
                        <integer>3</integer>
                        <key>prtMarkerSuppliesDescription</key>
                        <string>Image Transfer Kit</string>
                        <key>prtMarkerSuppliesLevel</key>
                        <integer>162822</integer>
                        <key>prtMarkerSuppliesMaxCapacity</key>
                        <integer>200000</integer>
                        <key>prtMarkerSuppliesSupplyUnit</key>
                        <integer>7</integer>
                        <key>prtMarkerSuppliesType</key>
                        <integer>20</integer>
                        <key>prtMarkerPartNumber</key>
                        <string>HP C8555A</string>
                </dict>
                <dict>
                        <key>prtMarkerSuppliesClass</key>
                        <integer>3</integer>
                        <key>prtMarkerSuppliesDescription</key>
                        <string>Image Cleaning Kit</string>
                        <key>prtMarkerSuppliesLevel</key>
                        <integer>45388</integer>
                        <key>prtMarkerSuppliesMaxCapacity</key>
                        <integer>50000</integer>
                        <key>prtMarkerSuppliesSupplyUnit</key>
                        <integer>7</integer>
                        <key>prtMarkerSuppliesType</key>
                        <integer>18</integer>
                        <key>prtMarkerPartNumber</key>
                        <string>HP C8554A</string>
                </dict>
                <dict>
                        <key>prtMarkerSuppliesClass</key>
                        <integer>3</integer>
                        <key>prtMarkerSuppliesDescription</key>
                        <string>Image Fuser Kit</string>
                        <key>prtMarkerSuppliesLevel</key>
                        <integer>62819</integer>
                        <key>prtMarkerSuppliesMaxCapacity</key>
                        <integer>100000</integer>
                        <key>prtMarkerSuppliesSupplyUnit</key>
                        <integer>7</integer>
                        <key>prtMarkerSuppliesType</key>
                        <integer>15</integer>
                        <key>prtMarkerPartNumber</key>
                        <string>HP C8556A </string>
                </dict>
        </array>
</dict>
</plist>

Связь с Вашим принтером

Для передачи с принтером необходимо будет определить тип соединения принтеров. Можно использовать PMPrinter APIs для определения типа соединения от очереди ID.

Перечисление 2  Определяет Ваш тип соединения принтеров от очереди ID

 //argv[1] = Queue name

    CFStringRef queueID = CFStringCreateWithCString(kCFAllocatorDefault,argv[1],kCFStringEncodingUTF8);
    PMPrinter printer = PMPrinterCreateFromPrinterID(queueID);

    CFURLRef deviceURI;
    PMPrinterCopyDeviceURI(printer, (CFURLRef *)&deviceURI);

        //connection type : ipp, lpd ...
    CFURLRef scheme = CFURLCopyScheme(deviceURI);


История версии документа


ДатаПримечания
29.06.2005

Новый документ это, как обнаружить уровни запасов принтера с помощью низкого инструмента чернил