int DECL2 daveWriteS5Bytes(daveConnection * dc, uc area, uc BlockN, int offset, int count, void * buf)
{
int res,datastart;
daveS5AreaInfo ai;
uc b1[daveMaxRawLen];
// if (_daveIsS5DBlockArea(area)==0) {
if (area==daveDB) {
// LOG1("_daveIsS5DBlockArea\n");
res=_daveReadS5BlockAddress(dc,area,BlockN,&ai);
if (res<0) {
LOG2("%s *** Error in WriteS5Bytes.BlockAddr request.\n", dc->iface->name);
return res-50;
}
datastart=ai.address;
} else {
switch (area) {
case daveRawMemoryS5: datastart=0; break;
case daveInputs: datastart=dc->cache->PAE; break;
case daveOutputs: datastart=dc->cache->PAA; break;
case daveFlags: datastart=dc->cache->flags; break;
case daveTimer: datastart=dc->cache->timers; break;
case daveCounter: datastart=dc->cache->counters; break;
case daveSysDataS5: datastart=dc->cache->systemData; break;
default:
LOG2("%s *** Unknown area in WriteS5Bytes request.\n", dc->iface->name);
return -1;
}
}
if ((count>daveMaxRawLen)||(offset+count>ai.len)) {
LOG2("%s writeS5Bytes *** Requested data is out-of-range.\n", dc->iface->name);
return -1;
}
....
}