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); }