private void writeI2C56(int in[]) throws Exception {

        monitor.beginTransmission(this);

        int length = in.length;
        int rbuf[] = null;

        int remain = length;
        int pointerInArray = 0;
        int partLength = 0;
        boolean first = true;

        while (remain > 0) {
            int flags = 0;
            if (length > 62) {
                partLength = 62;
                remain = remain - 62;
                length = length - 62;
                if (first) {
                    flags = flags + GENERATE_START;
                    first = false;
                }
                if (remain == 0) {
                    flags = flags + GENERATE_STOP;
                }
                flags = flags + partLength;
            } else { //gleich oder kleiner 62
                partLength = length;
                remain = remain - length;
                if (first) {
                    flags = flags + GENERATE_START;
                }
                flags = flags + GENERATE_STOP + partLength;
            }

            int wbuf[] = new int[AbstractIowDevice.IOW56_SMF_REPORT_LENGTH];
            wbuf[0] = 2;
            wbuf[1] = flags;

            for (int t = 0; t < partLength; t++) {
                wbuf[t + 2] = in[pointerInArray++];
            }

            long ret = iow.writeReport(1, wbuf);
            /*deb*/
            debug("\nwriteI2C56[" + monitor.getCurrentDevice() + "]: write " + ret + " byte(s)");

            rbuf = (int[]) writeAckQueue.dequeue();
            if (rbuf.length == 0) {
                monitor.abortTransmission(this);
                throw new Exception("Error in writeI2C56[" + this + "]: Read acknowledge (" + this + ") failed!");
            }
            /*deb*/
            debug("\twriteI2C56[" + this + "]: read " + rbuf.length + " byte(s)");
            flags = rbuf[1];
            if ((flags & 0x80) == 0x80) {
                /*deb*/
                debug("\twriteI2C56[" + this + "]: acknowledge read failed");
                monitor.abortTransmission(this);
                throw new Exception("Error in writeI2C56[" + this + "]: Error bit set!");
            }

            if ((flags & 0x007F) != partLength) {
                /*deb*/
                debug("\twriteI2C56[" + this + "]: not all bytes acknowledged!");
                throw new Exception("Error in writeI2C56[" + this + "]: Not all bytes acknowledged!");
            }
        }
        /*deb*/
        debug("\twriteI2C56 read acknowledgement ok");
        monitor.endTransmission(this);
    }