/* ** Copyright 2024, The Android Open Source Project ** ** Licensed under the Apache License, Version 2.0 (the "License"); ** you may not use this file except in compliance with the License. ** You may obtain a copy of the License at ** ** http://www.apache.org/licenses/LICENSE-2.0 ** ** Unless required by applicable law or agreed to in writing, software ** distributed under the License is distributed on an "AS IS" BASIS, ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ** See the License for the specific language governing permissions and ** limitations under the License. */ #define LOG_TAG "touch_gti_ical" #include #include #include #include #ifdef __ANDROID__ #include #include #else #define property_set #define property_get #define ALOGI printf #define ALOGW printf #endif int main(int argc, char *argv[]) { char *line = NULL; size_t len = 0; FILE *ical_fd; const char *ical_state_prop[2] = { [0] = "vendor.touch.gti0.ical.state", [1] = "vendor.touch.gti1.ical.state", }; const char *ical_result_prop[2] = { [0] = "vendor.touch.gti0.ical.result", [1] = "vendor.touch.gti1.ical.result", }; const char *ical_sysfs[2] = { [0] = "/sys/devices/virtual/goog_touch_interface/gti.0/interactive_calibrate", [1] = "/sys/devices/virtual/goog_touch_interface/gti.1/interactive_calibrate", }; const char *ical_state_prop_path = ical_state_prop[0]; const char *ical_result_prop_path = ical_result_prop[0]; const char *ical_sysfs_path = ical_sysfs[0]; if (argc < 3) { ALOGW("No target dev or command for interactive_calibrate sysfs.\n"); property_set(ical_state_prop[0], "done"); property_set(ical_state_prop[1], "done"); return 0; } if (strncmp(argv[1], "1", strlen(argv[1])) == 0 || strncmp(argv[1], "gti1", strlen(argv[1])) == 0 || strncmp(argv[1], "gti.1", strlen(argv[1])) == 0) { ical_state_prop_path = ical_state_prop[1]; ical_result_prop_path = ical_result_prop[1]; ical_sysfs_path = ical_sysfs[1]; } property_set(ical_result_prop_path, "na"); property_set(ical_state_prop_path, "running"); if (access(ical_sysfs_path, F_OK | R_OK | W_OK)) { ALOGW("Can't access %s\n", ical_sysfs_path); property_set(ical_state_prop_path, "done"); return 0; } ical_fd = fopen(ical_sysfs_path, "r+"); if (ical_fd == NULL) { ALOGW("Can't fopen %s\n", ical_sysfs_path); property_set(ical_state_prop_path, "done"); return 0; } if (strncmp(argv[2], "read", strlen(argv[2])) == 0) { getline(&line, &len, ical_fd); if (line != NULL) { property_set(ical_state_prop_path, "read"); property_set(ical_result_prop_path, line); ALOGI("read: %s => %s", ical_sysfs_path, line); free(line); } } else { property_set(ical_state_prop_path, argv[2]); fwrite(argv[2], 1, strlen(argv[2]), ical_fd); ALOGI("write: %s => %s\n", argv[2], ical_sysfs_path); } property_set(ical_state_prop_path, "done"); fclose(ical_fd); return 0; }