static long initMbbi(mbbiRecord *pr)
{
    devPvt *pPvt;
    int status;

    status = initCommon((dbCommon *)pr,&pr->inp,
        processCallbackInput,interruptCallbackInput, interruptCallbackEnumMbbi,
        MAX_ENUM_STATES, (char*)&pr->zrst, (int*)&pr->zrvl, &pr->zrsv);
    if (status != INIT_OK) return status;
    pPvt = pr->dpvt;
    pr->mask = pPvt->mask;
    pr->shft = computeShift(pPvt->mask);
    return INIT_OK;
}
static long initMbbo(mbboRecord *pr)
{
    devPvt *pPvt;
    int status;
    epicsUInt32 value;

    status = initCommon((dbCommon *)pr,&pr->out,
        processCallbackOutput,interruptCallbackOutput, interruptCallbackEnumMbbo,
        MAX_ENUM_STATES, (char*)&pr->zrst, (int*)&pr->zrvl, &pr->zrsv);
    if (status != INIT_OK) return status;
    pPvt = pr->dpvt;
    pr->mask = pPvt->mask;
    pr->shft = computeShift(pPvt->mask);
    /* Read the current value from the device */
    status = pasynUInt32DigitalSyncIO->read(pPvt->pasynUserSync,
                      &value, pPvt->mask, pPvt->pasynUser->timeout);
    if (status == asynSuccess) {
        pr->rval = value & pr->mask;
        return INIT_OK;
    }
    return INIT_DO_NOT_CONVERT;
}
void AbstractPixelFlow::computeShift(unsigned int *sum, unsigned int *sum_old, int length, int &shift, unsigned int &badness)
{
	computeShift(sum,sum_old,length,shift,badness,maxShift,0);
}