ftdipp_mpsse: mpsse_store: simplify and improve method
This commit is contained in:
parent
9912628c44
commit
b10f9c4e15
|
|
@ -249,27 +249,36 @@ int FTDIpp_MPSSE::mpsse_store(unsigned char c)
|
||||||
int FTDIpp_MPSSE::mpsse_store(unsigned char *buff, int len)
|
int FTDIpp_MPSSE::mpsse_store(unsigned char *buff, int len)
|
||||||
{
|
{
|
||||||
unsigned char *ptr = buff;
|
unsigned char *ptr = buff;
|
||||||
/* this case theorically never happen */
|
int store_size;
|
||||||
if (len > _buffer_size) {
|
/* check if _buffer as space to store all */
|
||||||
mpsse_write();
|
if (_num + len > _buffer_size) {
|
||||||
for (; len > _buffer_size; len -= _buffer_size) {
|
/* flush buffer if already full */
|
||||||
memcpy(_buffer, ptr, _buffer_size);
|
if (_num == _buffer_size)
|
||||||
mpsse_write();
|
mpsse_write();
|
||||||
ptr += _buffer_size;
|
/* loop until loop < _buffer_size */
|
||||||
|
while (_num + len > _buffer_size) {
|
||||||
|
/* we now have len enough to fill
|
||||||
|
* buffer -> just complete buffer
|
||||||
|
*/
|
||||||
|
store_size = _buffer_size - _num;
|
||||||
|
memcpy(_buffer + _num, ptr, store_size);
|
||||||
|
_num += store_size;
|
||||||
|
if (mpsse_write() < 0) {
|
||||||
|
cout << "write_data error in " << __func__ << endl;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
ptr += store_size;
|
||||||
|
len -= store_size;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (_num + len + 1 >= _buffer_size) {
|
|
||||||
if (mpsse_write() < 0) {
|
|
||||||
cout << "write_data error in " << __func__ << endl;
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
display("%s %d %d\n", __func__, _num, len);
|
display("%s %d %d\n", __func__, _num, len);
|
||||||
#endif
|
#endif
|
||||||
memcpy(_buffer + _num, ptr, len);
|
if (len > 0) {
|
||||||
_num += len;
|
memcpy(_buffer + _num, ptr, len);
|
||||||
|
_num += len;
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue