diff --git a/scan/sane/bb_ledm.c b/scan/sane/bb_ledm.c index bf2c093..318ea5c 100644 --- a/scan/sane/bb_ledm.c +++ b/scan/sane/bb_ledm.c @@ -189,7 +189,7 @@ Keep-Alive: 20\r\nProxy-Connection: keep-alive\r\nCookie: AccessCounter=new\r\n0 %d\ %d\ %s\ -15\ +0\ %s\ %d\ %s\ @@ -234,6 +234,38 @@ Keep-Alive: 300\r\nProxy-Connection: keep-alive\r\nCookie: AccessCounter=new\r\n # define JOBSTATE_COMPLETED "Completed" # define PRESCANPAGE "" +static int parse_status_elements(const char *payload, int size, struct wscn_create_scan_job_response *resp) +{ + char tag[512]; + char value[128]; + char *tail=(char *)payload; + + while (1) + { + get_tag(tail, size-(tail-payload), tag, sizeof(tag), &tail); + + if (!tag[0]) + break; + + if (strncmp(tag, "ImageWidth", 10) == 0) + { + get_element(tail, size-(tail-payload), value, sizeof(value), &tail); + resp->pixels_per_line = strtol(value, NULL, 10); + } + else if (strncmp(tag, "ImageHeight", 11) == 0) + { + get_element(tail, size-(tail-payload), value, sizeof(value), &tail); + resp->lines = strtol(value, NULL, 10); + } + else if (strncmp(tag, "BytesPerLine", 12) == 0) + { + get_element(tail, size-(tail-payload), value, sizeof(value), &tail); + resp->bytes_per_line = strtol(value, NULL, 10); + } + } + return 0; +} + static int parse_scan_elements(const char *payload, int size, struct wscn_scan_elements *elements) { char tag[512]; @@ -762,8 +794,7 @@ int bb_get_parameters(struct ledm_session *ps, SANE_Parameters *pp, int option) if (ps->currentCompression == SF_RAW && ps->currentScanMode != CE_GRAY8) { /* Set scan parameters based on scan job response values */ - //pp->lines = pbb->job.lines; - pp->lines = (int)(SANE_UNFIX(ps->effectiveBry - ps->effectiveTly)/MM_PER_INCH*ps->currentResolution); + pp->lines = pbb->job.lines; pp->pixels_per_line = pbb->job.pixels_per_line; pp->bytes_per_line = pbb->job.bytes_per_line; } @@ -784,8 +815,8 @@ int bb_get_parameters(struct ledm_session *ps, SANE_Parameters *pp, int option) break; case SPO_BEST_GUESS: /* called by xsane & sane_start */ /* Set scan parameters based on best guess. */ - pp->lines = (int)round(SANE_UNFIX(ps->effectiveBry - ps->effectiveTly)/MM_PER_INCH*ps->currentResolution); - pp->pixels_per_line = (int)round(SANE_UNFIX(ps->effectiveBrx -ps->effectiveTlx)/MM_PER_INCH*ps->currentResolution); + pp->lines = (int)(SANE_UNFIX(ps->effectiveBry - ps->effectiveTly)/MM_PER_INCH*ps->currentResolution); + pp->pixels_per_line = ps->image_traits.iPixelsPerRow; pp->bytes_per_line = BYTES_PER_LINE(pp->pixels_per_line, pp->depth * factor); break; default: @@ -889,7 +920,7 @@ SANE_Status bb_start_scan(struct ledm_session *ps) (int) ((ps->currentBrx / 5548.7133) - (ps->currentTlx / 5548.7133)),// (int) (ps->currentTly / 5548.7133),// (int) ((ps->currentBry / 5548.7133) - (ps->currentTly / 5548.7133)),// - "Jpeg",// + (ps->currentCompression == SF_RAW) ? "Raw" : "Jpeg", // (! strcmp(ce_element[ps->currentScanMode], "Color8")) ? "Color" : (! strcmp(ce_element[ps->currentScanMode], "Gray8")) ? "Gray" : "Gray",// ((! strcmp(ce_element[ps->currentScanMode], "Color8")) || (! strcmp(ce_element[ps->currentScanMode], "Gray8"))) ? 8: 8,// ps->currentInputSource == IS_PLATEN ? is_element[1] : is_element[2],// @@ -987,6 +1018,7 @@ SANE_Status bb_start_scan(struct ledm_session *ps) _DBG("bb_start_scan() read_http_payload FAILED len=%d buf=%s\n", len, buf); break; } + //For a new scan, buf must contain . if (NULL == strstr(buf,PRESCANPAGE)) { //i.e Paper is not present in Scanner @@ -1005,6 +1037,9 @@ SANE_Status bb_start_scan(struct ledm_session *ps) stat = SANE_STATUS_GOOD; goto bugout; } + // Parse buf here + parse_status_elements(buf, len, &pbb->job); + usleep(500000);//0.5 sec delay }//end while() diff --git a/scan/sane/ledm.c b/scan/sane/ledm.c index af86bff..65a7447 100644 --- a/scan/sane/ledm.c +++ b/scan/sane/ledm.c @@ -170,11 +170,11 @@ static int set_scan_mode_side_effects(struct ledm_session *ps, enum COLOR_ENTRY case CE_GRAY8: case CE_COLOR8: default: -// ps->compressionList[j] = STR_COMPRESSION_NONE; -// ps->compressionMap[j++] = SF_RAW; + ps->compressionList[j] = STR_COMPRESSION_NONE; + ps->compressionMap[j++] = SF_RAW; ps->compressionList[j] = STR_COMPRESSION_JPEG; ps->compressionMap[j++] = SF_JPEG; - ps->currentCompression = SF_JPEG; + ps->currentCompression = SF_RAW; ps->option[LEDM_OPTION_JPEG_QUALITY].cap |= SANE_CAP_SOFT_SELECT; /* enable jpeg quality */ break; } @@ -679,7 +679,7 @@ SANE_Status ledm_control_option(SANE_Handle handle, SANE_Int option, SANE_Action } else { /* Set default. */ - ps->currentCompression = SF_JPEG; + ps->currentCompression = SF_RAW; stat = SANE_STATUS_GOOD; } break; @@ -984,7 +984,9 @@ SANE_Status ledm_start(SANE_Handle handle) } } else - ipGetImageTraits(ps->ip_handle, NULL, &ps->image_traits); /* get valid image traits */ + { + ipGetOutputTraits(ps->ip_handle, &ps->image_traits); /* get valid image traits */ + } stat = SANE_STATUS_GOOD;