Exemple #1
0
 static void drawLines(JNIEnv* env, jobject jcanvas, jfloatArray jptsArray,
                        jint offset, jint count, jobject jpaint) {
     doPoints(env, jcanvas, jptsArray, offset, count, jpaint,
              SkCanvas::kLines_PointMode);
 }
int main(int argc, char **argv) {

    int serialFd;
    int outFd;

    GR_SCREEN_INFO info;
    GR_WINDOW_ID calWindow;
    GR_EVENT event;

    /* Open up the graphics */

    if (GrOpen() == -1) {
        fprintf(stderr, "Error!  Unable to open the graphics engine\n");
        return(-1);
    }

    /* Now open the serial port */

    serialFd = calInitSerial("/dev/ttyS1");
    if (serialFd == -1) {
        fprintf(stderr, "Error!  Unable to open the touchscreen device\n");
        return(-1);
    }

    GrGetScreenInfo(&info);

    /* Decide which points we are going to touch */

    dataPoints[0].scrX = 10;
    dataPoints[0].scrY = 10;

    dataPoints[1].scrX = 10;
    dataPoints[1].scrY = info.rows - 10;

    dataPoints[2].scrX = info.cols - 10;
    dataPoints[2].scrY = info.rows - 10;

    dataPoints[3].scrX = info.cols - 10;
    dataPoints[3].scrY = 10;

    /* Now, create a window that spans the entire size of the screen */
    calWindow = GrNewWindow(GR_ROOT_WINDOW_ID, 0, 0, info.cols, info.rows, 0, BGCOLOR, FGCOLOR);
    GrSelectEvents(calWindow, GR_EVENT_MASK_EXPOSURE);
    GrMapWindow(calWindow);
    /* Wait for exposure */
    while(GrPeekEvent(&event) != GR_EVENT_TYPE_EXPOSURE);

    /* Ok, now that we have been exposed, draw the instructions */
    drawText(calWindow, instructions, 4);

    if (!doPoints(calWindow, serialFd)) {

        double scrXDelta, rawXDelta;
        double scrYDelta, rawYDelta;

        double deltaX, deltaY;

        scrXDelta = (double) dataPoints[2].scrX - dataPoints[0].scrX;
        rawXDelta = (double) dataPoints[2].rawX - dataPoints[0].rawX;

        scrYDelta = (double) dataPoints[1].scrY - dataPoints[0].scrY;
        rawYDelta = (double) dataPoints[1].rawY - dataPoints[0].rawY;

        /* We can now extrapolate and discover the extreme edges of the screen */

        /* First, the low values */

        deltaX = abs( (rawXDelta / scrXDelta) * ((double) dataPoints[0].scrX));
        deltaY = abs( (rawYDelta / scrYDelta) * ((double) dataPoints[0].scrY));

        /*
        deltaX = abs((double) dataPoints[0].scrX * rawXDelta) / scrXDelta);
        deltaY = abs((double) (dataPoints[0].scrY * rawYDelta) / scrYDelta);
        */

        /* Print out the raw values, accounting for possible inversion */

        if (dataPoints[0].rawX > dataPoints[2].rawX) {
            printf("%d ", (int) (dataPoints[0].rawX + deltaX));
            printf("%d ", (int) (dataPoints[2].rawX - deltaX));
        }
        else {
            printf("%d ", (int) (dataPoints[0].rawX - deltaX));
            printf("%d ", (int) (dataPoints[2].rawX + deltaX));
        }

        if (dataPoints[0].rawY >dataPoints[1].rawY) {
            printf("%d ", (int) (dataPoints[0].rawY + deltaY));
            printf("%d\n", (int) (dataPoints[1].rawY - deltaY));
        }
        else {
            printf("%d ", (int) (dataPoints[0].rawY - deltaY));
            printf("%d\n", (int) (dataPoints[1].rawY + deltaY));
        }
    }
    else {
        fprintf(stderr, "Error - Unable to read the touchscreen\n");
    }

    /* Close everything down */
    calCloseSerial(serialFd);
    GrClose();

    /* Byebye! */
    return(0);
}