Re: [cups-devel] how to get supported media information for a particular printer
Philip Race <[email protected]> Sun, 20 Aug 2017 11:15:18 -0700
| Newsgroups | gmane.comp.printing.cups.devel |
|---|---|
| Organization | Oracle Corporation |
| Message-ID | <[email protected]> |
It seems that the problem with cupsCheckDestSupported was a long standing bug that was fixed just 2 months ago .. not supporting a NULL value ! https://github.com/apple/cups/commit/49b6c6af7674e4d37d5cb14385c19618d9c1b668 .. What would be the recommended way to workaround that in shipping versions of 2.X found on current OSes like Ubuntu 16.10 ? -phil [1] https://www.cups.org/doc/cupspm.html#cupsCheckDestSupported On 8/2/17, 11:18 PM, My Sadhukhan wrote: > I also tried with cups 2.2.0 with ubuntu16.10 and there also the > cupsCheckDestSupported returns false for all options. > > On Thu, Aug 3, 2017 at 11:41 AM, My Sadhukhan<[email protected]> wrote: > >> I am using cups 2.1.3 that comes with ubuntu16.04. It should support the >> non-ppd APIs, I guess, as that was deprecated from 1.6 onwards. >> Please let me know if this version has any problem regarding the APIs I am >> using. >> >> Regards >> Prasanta >> >> On Wed, Aug 2, 2017 at 6:45 PM, Michael Sweet<[email protected]> wrote: >> >>> What version of CUPS are you using? >>> >>> (there have been a number of bug fixes over the years...) >>> >>>> On Aug 2, 2017, at 1:17 AM, My Sadhukhan<[email protected]> wrote: >>>> >>>> I checked cupsCheckDestSupported() before calling >>> cupsFIndDestSupported() >>>> for options like CUPS_COPIES,CUPS_FINISHINGS,CU >>> PS_MEDIA,CUPS_ORIENTATION, >>>> CUPS_SIDES etc and all of them return false, >>>> although the printer being queried is a MFP and supports duplex, >>>> orientation etc and I can print a test-page out of it. >>>> Is it a bug in cups or am I missing calling/initialising something? >>>> >>>> Regards >>>> Prasanta >>>> >>>> On Tue, Aug 1, 2017 at 10:56 AM, My Sadhukhan<[email protected]> >>> wrote: >>>>> Thanks Michael. >>>>> I used cupsGetNamedDest to initialise cups_dest_t but it still fails in >>>>> cupsFindDestSupported(). >>>>> ---------- >>>>> void getMedia(char *name) >>>>> { >>>>> cups_dest_t *dest = cupsGetNamedDest(CUPS_HTTP_DEFAULT, name, >>> NULL); >>>>> if (dest == NULL) { >>>>> printf("cupsGetNamedDest failed %s\n", cupsLastErrorString()); >>>>> return; >>>>> } else { >>>>> printf("dest name %s\n", dest->name); >>>>> } >>>>> cups_dinfo_t *info = cupsCopyDestInfo(CUPS_HTTP_DEFAULT, dest); >>>>> if (info == NULL) { >>>>> printf("CopyDestInfo Request failed %s\n", >>> cupsLastErrorString()); >>>>> } >>>>> ipp_attribute_t *media = cupsFindDestSupported(CUPS_HTTP_DEFAULT, >>>>> dest, info, CUPS_MEDIA); >>>>> if (media != NULL) { >>>>> int i, count = ippGetCount(media); >>>>> printf("count %d\n", count); >>>>> for (i = 0; i< count; i++) >>>>> printf(" %s\n", ippGetString(media, i, NULL)); >>>>> } else { >>>>> printf("FindDestSupported Request failed %s\n", >>>>> cupsLastErrorString()); >>>>> } >>>>> } >>>>> >>>>> ----------------------------citing---------- >>>>> dest name Ricoh-Aficio-MP-5002 >>>>> CopyDestInfo Request failed successful-ok >>>>> FindDestSupported Request failed Invalid argument >>>>> ---------------- >>>>> I am not sure if cupsCopyDestInfo() failed or not . The manual does not >>>>> say the return value if there is error. cupsGetLastErrorString() >>> conveys >>>>> there is no error yet "info" is NULL. >>>>> >>>>> Could you please suggest as to what else is going wrong? >>>>> I could not find "_cups_dinfo_s" structure definition in >>>>> https://www.cups.org/doc/cupspm.html#cups_dinfo_t. >>>>> Also, cupsFindDestSupported() manual shows "Find the default value(s) >>> for >>>>> the given option." which is same as cupsFindDestDefault(). I think the >>>>> former should be texted as "Find supported value(s) for the given >>> option". >>>>> Regards >>>>> Prasanta >>>>> >>>>> On Mon, Jul 31, 2017 at 7:11 PM, Michael Sweet<[email protected]> >>> wrote: >>>>>> You can't initialize a cups_dest_t structure directly like that and >>> have >>>>>> it work. >>>>>> >>>>>> Use: >>>>>> >>>>>> cups_dest_t *dest = cupsGetNamedDest(CUPS_HTTP_DEFAULT, name, >>> NULL); >>>>>> Then cupsCopyDestInfo will have the information it needs to get the >>>>>> supported media for you... >>>>>> >>>>>> >>>>>>> On Jul 31, 2017, at 6:01 AM, My Sadhukhan<[email protected]> >>> wrote: >>>>>>> Hi All, >>>>>>> >>>>>>> I was trying to find the supported media for a particular printer >>> using >>>>>>> non-ppd based API but am encountering a problem. >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> *void getMedia(char *name){ cups_dest_t dest; dest.name >>>>>>> <http://dest.name> = name; dest.instance = name; >>> dest.is_default >>>>>> = >>>>>>> 0; cups_dinfo_t *info = cupsCopyDestInfo(CUPS_HTTP_DEFAULT, >>> &dest);; >>>>>>> if (info == NULL) { printf("CopyDestInfo Request failed %s\n", >>>>>>> cupsLastErrorString()); } ipp_attribute_t *media = >>>>>>> cupsFindDestSupported(CUPS_HTTP_DEFAULT, >>>>>>> &dest, info, CUPS_MEDIA); if (media != NULL) { int i, >>> count = >>>>>>> ippGetCount(media); printf("count %d\n", count); for >>> (i = >>>>>> 0; >>>>>>> i< count; i++) printf(" %s\n", ippGetString(media, i, >>>>>>> NULL)); } else { printf("FindDestSupported Request failed >>>>>> %s\n", >>>>>>> cupsLastErrorString()); }}int main(void){ >>>>>>> getMedia("Ricoh-Aficio-MP-5002");* >>>>>>> *}* >>>>>>> >>>>>>> I am getting >>>>>>> ----------- >>>>>>> CopyDestInfo Request failed (null) >>>>>>> FindDestSupported Request failed Invalid argument >>>>>>> ----------- >>>>>>> >>>>>>> Earlier, I was using >>>>>>> char filename = cupsGetPPD("Ricoh-Aficio-MP-5002"); >>>>>>> ppd_file_t *ppd = ppdOpenFile(filename); >>>>>>> ppd_option_t *optionPage = ppdFindOption(ppd, "PageSize") and get >>>>>>> optionPage->choices->text >>>>>>> to get the below supported media size information obtained from that >>>>>>> printer ppd. >>>>>>> That is, in* /etc/cups/ppd/Ricoh-Aficio-MP-5002.ppd*, >>>>>>> I have this and I am interested in getting "A3", "A4", "A5", "A6", >>> "B4", >>>>>>> "B5"..."EngQuatro.FullBleed" etc. >>>>>>> >>>>>>> but now, since ppd API is deprecated, I want to use the new IPP-based >>>>>> api. >>>>>>> Could anyone suggest what I need to use in above code? >>>>>>> >>>>>>> *%========== Information About Media Sizes ========== >>>>>>> >>>>>>> *DefaultImageableArea: A4 >>>>>>> *ImageableArea A3/A3: "12 12 830 1179" >>>>>>> *ImageableArea A4/A4: "12 12 583 830" >>>>>>> *ImageableArea A5/A5: "12 12 408 583" >>>>>>> *ImageableArea A6/A6: "12 12 285 408" >>>>>>> *ImageableArea B4/B4 (JIS): "12 12 717 1020" >>>>>>> *ImageableArea B5/B5 (JIS): "12 12 504 717" >>>>>>> *ImageableArea B6/B6 (JIS): "12 12 351 504" >>>>>>> *ImageableArea Legal/Legal: "12 12 600 996" >>>>>>> *ImageableArea GovernmentLG/8.25x14: "12 12 582 996" >>>>>>> *ImageableArea EngQuatro/8x10: "12 12 564 708" >>>>>>> *ImageableArea GLT/8x10.5: "12 12 564 744" >>>>>>> *ImageableArea Letter/Letter: "12 12 600 780" >>>>>>> *ImageableArea Statement/5.5x8.5: "12 12 384 600" >>>>>>> *ImageableArea F/8x13: "12 12 564 924" >>>>>>> *ImageableArea Folio/8.25x13: "12 12 583 923" >>>>>>> *ImageableArea FanFoldGermanLegal/8.5x13: "12 12 600 924" >>>>>>> *ImageableArea Tabloid/11x17: "12 12 780 1212" >>>>>>> *ImageableArea 12x18/12x18: "12 12 852 1284" >>>>>>> *ImageableArea 11x15/11x15: "12 12 780 1068" >>>>>>> *ImageableArea 10x14/10x14: "12 12 708 996" >>>>>>> *ImageableArea 10x15/10x15: "12 12 708 1068" >>>>>>> *ImageableArea 11x14/11x14: "12 12 780 996" >>>>>>> *ImageableArea Executive/Executive: "12 12 510 744" >>>>>>> *ImageableArea Env10/Com10 Env.: "12 12 285 672" >>>>>>> *ImageableArea EnvMonarch/Monarch Env.: "12 12 267 528" >>>>>>> *ImageableArea EnvC5/C5 Env.: "12 12 447 637" >>>>>>> *ImageableArea EnvC6/C6 Env.: "12 12 311 447" >>>>>>> *ImageableArea DLEnv/DL Env.: "12 12 299 611" >>>>>>> *ImageableArea 8Kai/8K: "12 12 745 1094" >>>>>>> *ImageableArea 16Kai/16K: "12 12 541 745" >>>>>>> *ImageableArea A3.FullBleed/A3 (Full Bleed): "0 0 842 1190" >>>>>>> *ImageableArea A4.FullBleed/A4 (Full Bleed): "0 0 595 841" >>>>>>> *ImageableArea A5.FullBleed/A5 (Full Bleed): "0 0 420 594" >>>>>>> *ImageableArea A6.FullBleed/A6 (Full Bleed): "0 0 297 419" >>>>>>> *ImageableArea B4.FullBleed/B4 (JIS) (Full Bleed): "0 0 729 1031" >>>>>>> *ImageableArea B5.FullBleed/B5 (JIS) (Full Bleed): "0 0 516 728" >>>>>>> *ImageableArea B6.FullBleed/B6 (JIS) (Full Bleed): "0 0 363 515" >>>>>>> *ImageableArea Legal.FullBleed/Legal (Full Bleed): "0 0 612 1007" >>>>>>> *ImageableArea GovernmentLG.FullBleed/8.25x14 (Full Bleed): "0 0 594 >>>>>> 1007" >>>>>>> *ImageableArea EngQuatro.FullBleed/8x10 (Full Bleed): "0 0 576 719" >>>>>>> ... >>>>>>> .. >>>>>>> >>>>>>> Thanks& Regards >>>>>>> Prasanta >>>>>>> _______________________________________________ >>>>>>> cups-devel mailing list >>>>>>> [email protected] >>>>>>> https://lists.cups.org/mailman/listinfo/cups-devel >>>>>> _________________________________________________________ >>>>>> Michael Sweet, Senior Printing System Engineer >>>>>> >>>>>> _______________________________________________ >>>>>> cups-devel mailing list >>>>>> [email protected] >>>>>> https://lists.cups.org/mailman/listinfo/cups-devel >>>>>> >>>>> >>>> _______________________________________________ >>>> cups-devel mailing list >>>> [email protected] >>>> https://lists.cups.org/mailman/listinfo/cups-devel >>> _________________________________________________________ >>> Michael Sweet, Senior Printing System Engineer >>> >>> _______________________________________________ >>> cups-devel mailing list >>> [email protected] >>> https://lists.cups.org/mailman/listinfo/cups-devel >>> >> > _______________________________________________ > cups-devel mailing list > [email protected] > https://lists.cups.org/mailman/listinfo/cups-devel