Re: [cups-devel] how to get supported media information for a particular printer
Michael Sweet <[email protected]> Tue, 03 Oct 2017 10:18:12 -0400
| Newsgroups | gmane.comp.printing.cups.devel |
|---|---|
| Message-ID | <[email protected]> |
Some versions of CUPS did not support CUPS_HTTP_DEFAULT for the connection argument to the media APIs (bug). After you call cupsGetNamedDest, call cupsConnectDest to get a http_t for the destination and then cupsCopyDestInfo, etc. > On Oct 3, 2017, at 6:03 AM, My Sadhukhan <[email protected]> wrote: > > As told, it seems we need to use media-specific APIs like cupsGetDestMediaCount to find out how many media-size the printer supports. > I tried in that route following the example described in https://www.cups.org/doc/cupspm.html#cupsGetDestMediaCount, but still finding a problem in ubuntu16.04. > It returns supported media count as 0 and when I tried to see if there is any error, it says "Invalid argument" for cupsGetDestMediaCount. Any idea why? > > > 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()); > } > int count = cupsGetDestMediaCount(CUPS_HTTP_DEFAULT, dest, info, CUPS_MEDIA_FLAGS_READY); > printf("media count %d %s\n", count, cupsLastErrorString()); > cups_size_t size; > for (int i = 0; i < count; i++) { > if (cupsGetDestMediaByIndex(CUPS_HTTP_DEFAULT, dest, info, > i, CUPS_MEDIA_FLAGS_READY, > &size)) > { > printf("%s:\n", size.media); > printf(" Width: %.2fin\n", size.width / 2540.0); > printf(" Length: %.2fin\n", size.length / 2540.0); > printf(" Bottom: %.2fin\n", size.bottom / 2540.0); > printf(" Left: %.2fin\n", size.left / 2540.0); > printf(" Right: %.2fin\n", size.right / 2540.0); > printf(" Top: %.2fin\n", size.top / 2540.0); > } > } > } > > int main(void) > { > getMedia("Ricoh-Aficio-MP-5002"); > } > > Regards > Prasanta > On Sun, Aug 20, 2017 at 11:45 PM, Philip Race <[email protected]> wrote: > 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 > _________________________________________________________ Michael Sweet, Senior Printing System Engineer