| 154 |
|
|
| 155 |
if (length > GEMPCTWIN_MAXBUF-3) |
if (length > GEMPCTWIN_MAXBUF-3) |
| 156 |
{ |
{ |
| 157 |
DEBUG_CRITICAL3("WriteSerial: command too long: %d for max %d", |
DEBUG_CRITICAL3("command too long: %d for max %d", |
| 158 |
length, GEMPCTWIN_MAXBUF-3); |
length, GEMPCTWIN_MAXBUF-3); |
| 159 |
return STATUS_UNSUCCESSFUL; |
return STATUS_UNSUCCESSFUL; |
| 160 |
} |
} |
| 179 |
if (write(serialDevice[LunToReaderIndex(lun)].fd, low_level_buffer, |
if (write(serialDevice[LunToReaderIndex(lun)].fd, low_level_buffer, |
| 180 |
length+3) != length+3) |
length+3) != length+3) |
| 181 |
{ |
{ |
| 182 |
DEBUG_CRITICAL2("WriteSerial: write error: %s", strerror(errno)); |
DEBUG_CRITICAL2("write error: %s", strerror(errno)); |
| 183 |
return STATUS_UNSUCCESSFUL; |
return STATUS_UNSUCCESSFUL; |
| 184 |
} |
} |
| 185 |
|
|
| 316 |
int offset = serialDevice[LunToReaderIndex(lun)].buffer_offset; |
int offset = serialDevice[LunToReaderIndex(lun)].buffer_offset; |
| 317 |
int offset_last = serialDevice[LunToReaderIndex(lun)].buffer_offset_last; |
int offset_last = serialDevice[LunToReaderIndex(lun)].buffer_offset_last; |
| 318 |
|
|
| 319 |
DEBUG_COMM3("get_bytes: available: %d, needed: %d", offset_last-offset, |
DEBUG_COMM3("available: %d, needed: %d", offset_last-offset, |
| 320 |
length); |
length); |
| 321 |
/* enough data are available */ |
/* enough data are available */ |
| 322 |
if (offset + length <= offset_last) |
if (offset + length <= offset_last) |
| 323 |
{ |
{ |
| 324 |
DEBUG_COMM("get_bytes: data available"); |
DEBUG_COMM("data available"); |
| 325 |
memcpy(buffer, serialDevice[LunToReaderIndex(lun)].buffer + offset, length); |
memcpy(buffer, serialDevice[LunToReaderIndex(lun)].buffer + offset, length); |
| 326 |
serialDevice[LunToReaderIndex(lun)].buffer_offset += length; |
serialDevice[LunToReaderIndex(lun)].buffer_offset += length; |
| 327 |
} |
} |
| 334 |
|
|
| 335 |
if (present > 0) |
if (present > 0) |
| 336 |
{ |
{ |
| 337 |
DEBUG_COMM2("get_bytes: some data available: %d", present); |
DEBUG_COMM2("some data available: %d", present); |
| 338 |
memcpy(buffer, serialDevice[LunToReaderIndex(lun)].buffer + offset, |
memcpy(buffer, serialDevice[LunToReaderIndex(lun)].buffer + offset, |
| 339 |
present); |
present); |
| 340 |
} |
} |
| 341 |
|
|
| 342 |
/* get fresh data */ |
/* get fresh data */ |
| 343 |
DEBUG_COMM2("get_bytes: get more data: %d", length - present); |
DEBUG_COMM2("get more data: %d", length - present); |
| 344 |
rv = ReadChunk(lun, serialDevice[LunToReaderIndex(lun)].buffer, sizeof(serialDevice[LunToReaderIndex(lun)].buffer), length - present); |
rv = ReadChunk(lun, serialDevice[LunToReaderIndex(lun)].buffer, sizeof(serialDevice[LunToReaderIndex(lun)].buffer), length - present); |
| 345 |
if (rv < 0) |
if (rv < 0) |
| 346 |
return STATUS_COMM_ERROR; |
return STATUS_COMM_ERROR; |
| 350 |
length - present); |
length - present); |
| 351 |
serialDevice[LunToReaderIndex(lun)].buffer_offset = length - present; |
serialDevice[LunToReaderIndex(lun)].buffer_offset = length - present; |
| 352 |
serialDevice[LunToReaderIndex(lun)].buffer_offset_last = rv; |
serialDevice[LunToReaderIndex(lun)].buffer_offset_last = rv; |
| 353 |
DEBUG_COMM3("get_bytes: offset: %d, last_offset: %d", |
DEBUG_COMM3("offset: %d, last_offset: %d", |
| 354 |
serialDevice[LunToReaderIndex(lun)].buffer_offset, |
serialDevice[LunToReaderIndex(lun)].buffer_offset, |
| 355 |
serialDevice[LunToReaderIndex(lun)].buffer_offset_last); |
serialDevice[LunToReaderIndex(lun)].buffer_offset_last); |
| 356 |
} |
} |
| 411 |
#endif |
#endif |
| 412 |
|
|
| 413 |
already_read += rv; |
already_read += rv; |
| 414 |
DEBUG_COMM3("ReadChunk, read: %d, to read: %d", already_read, |
DEBUG_COMM3("read: %d, to read: %d", already_read, |
| 415 |
min_length); |
min_length); |
| 416 |
} |
} |
| 417 |
|
|
| 431 |
int i; |
int i; |
| 432 |
int reader = LunToReaderIndex(lun); |
int reader = LunToReaderIndex(lun); |
| 433 |
|
|
| 434 |
DEBUG_COMM3("OpenSerial: Lun: %X, Channel: %d", lun, channel); |
DEBUG_COMM3("Lun: %X, Channel: %d", lun, channel); |
| 435 |
|
|
| 436 |
/* |
/* |
| 437 |
* Conversion of old-style ifd-hanler 1.0 CHANNELID |
* Conversion of old-style ifd-hanler 1.0 CHANNELID |