The scala API has access to the bitPos and bytePos. If you provide a length, then it has an atEnd predicate. This can be used to determine, whether all the data has been consumed, which is a requirement for many applications of DFDL.
The Java API (JAPI) also needs these same capabilities.