void Meta_Touch_OP(Touch_REQ *req, char *peer_buff, unsigned short peer_len) { Touch_CNF TouchMetaReturn; int ret, fd = -1; int status = 0; memset(&TouchMetaReturn, 0, sizeof(TouchMetaReturn)); TouchMetaReturn.header.id=req->header.id+1; TouchMetaReturn.header.token = req->header.token; TouchMetaReturn.status=META_FAILED; /* open file */ fd = open(FILENAME,O_RDWR, 0); if (fd < 0) { TOUCH_LOG("Open %s : ERROR \n", FILENAME); TOUCH_LOG("Open %s : ERROR \n", FILENAME); goto Touch_Finish; } ret = read(fd, &status, sizeof(int)); if((status & 0X0ff) == '1') TouchMetaReturn.status=META_SUCCESS; TOUCH_LOG("Cap touch status:%d\n", status); close(fd); Touch_Finish: if (false == WriteDataToPC(&TouchMetaReturn,sizeof(Touch_CNF),NULL,0)) { TOUCH_LOG("%s : WriteDataToPC() fail 2\n", __FUNCTION__); } TOUCH_LOG("%s : Finish !\n", __FUNCTION__); }
/* Compare Report type #23 data against test limits*/ int CompareRT78(char *buf) { bool result = true; int i, j = 0; //us10_porting outbuf += snprintf(f54_wlog_buf+outbuf, sizeof(f54_wlog_buf)-outbuf,"%s"," "); for (i = 0; i < F12_2DRxCount; i++) { outbuf += snprintf(f54_wlog_buf+outbuf, sizeof(f54_wlog_buf)-outbuf,"%4d ",i); } outbuf += snprintf(f54_wlog_buf+outbuf, sizeof(f54_wlog_buf)-outbuf, "\n-----------------------------------------" "-------------------------------------------------" "-------------------------------------------------" "--------------------------\n"); for (i = 0; i < (unsigned int)F12_2DTxCount; i++) { outbuf += snprintf(f54_wlog_buf+outbuf, sizeof(f54_wlog_buf)-outbuf,"%4d: ",i); for (j = 0; j < (unsigned int)F12_2DRxCount; j++) { if ((RT78Data[i][j] < RT78FullRawCapUpperLimit[i][j]) &&(RT78Data[i][j] > RT78FullRawCapLowerLimit[i][j])) { //TOUCH_INFO_MSG("TX[%d]RX[%d] passed value: %d\n", // i, j, RT78Data[i][j]); //result = true; outbuf += snprintf(f54_wlog_buf+outbuf, sizeof(f54_wlog_buf)-outbuf, "%4s ", " ,");//us10_porting } else { TOUCH_LOG("TX[%d]RX[%d] failed value: %d\n", i, j, RT78Data[i][j]); outbuf += snprintf(f54_wlog_buf+outbuf, sizeof(f54_wlog_buf)-outbuf, "%4s ", "X,");//us10_porting result = false; } } outbuf += snprintf(f54_wlog_buf+outbuf, sizeof(f54_wlog_buf)-outbuf, "\n"); //us10_porting } outbuf += snprintf(f54_wlog_buf+outbuf, sizeof(f54_wlog_buf)-outbuf, "-----------------------------------------" "-------------------------------------------------" "-------------------------------------------------" "--------------------------\n"); if (result) { TOUCH_LOG("RT78 Test Passed.\n"); outbuf += snprintf(f54_wlog_buf+outbuf, sizeof(f54_wlog_buf)-outbuf, "RT78 Test passed.\n\n"); } else { TOUCH_LOG("RT78 Test Failed.\n"); outbuf += snprintf(f54_wlog_buf+outbuf, sizeof(f54_wlog_buf)-outbuf, "RT78 Test failed.\n\n"); } write_log(NULL, f54_wlog_buf); //us10_porting //outbuf += snprintf(buf+outbuf,PAGE_SIZE-outbuf ,f54_wlog_buf); return (result) ? 1 : 0; }
int CompareElectodeShortRT78(char *buf) { bool result = true; int i, j = 0; outbuf += snprintf(f54_wlog_buf+outbuf, sizeof(f54_wlog_buf)-outbuf,"%s"," "); for (i = 0; i < F12_2DRxCount; i++) { outbuf += snprintf(f54_wlog_buf+outbuf, sizeof(f54_wlog_buf)-outbuf,"%4d ",i); } outbuf += snprintf(f54_wlog_buf+outbuf, sizeof(f54_wlog_buf)-outbuf, "\n-----------------------------------------" "-------------------------------------------------" "-------------------------------------------------" "--------------------------\n"); for (i = 0; i < (unsigned int)F12_2DTxCount; i++) { outbuf += snprintf(f54_wlog_buf+outbuf, sizeof(f54_wlog_buf)-outbuf,"%4d: ",i); for (j = 0; j < (unsigned int)F12_2DRxCount; j++) { if ((RT78Data[i][j] < RT78ElectrodeShortUpper[i][j]) &&(RT78Data[i][j] > RT78ElectrodeShortLower[i][j])) { outbuf += snprintf(f54_wlog_buf+outbuf, sizeof(f54_wlog_buf)-outbuf, "%4s ", " ,"); } else { TOUCH_LOG("TX[%d]RX[%d] failed value: %d\n", i, j, RT78Data[i][j]); outbuf += snprintf(f54_wlog_buf+outbuf, sizeof(f54_wlog_buf)-outbuf, "%4s ", "X,"); result = false; } } outbuf += snprintf(f54_wlog_buf+outbuf, sizeof(f54_wlog_buf)-outbuf, "\n"); } outbuf += snprintf(f54_wlog_buf+outbuf, sizeof(f54_wlog_buf)-outbuf, "-----------------------------------------" "-------------------------------------------------" "-------------------------------------------------" "--------------------------\n"); if (result) { TOUCH_LOG("Electode Short Test Passed.\n"); outbuf += snprintf(f54_wlog_buf+outbuf, sizeof(f54_wlog_buf)-outbuf, "Electode Short Test passed.\n\n"); } else { TOUCH_LOG("Electode Short Test Failed.\n"); outbuf += snprintf(f54_wlog_buf+outbuf, sizeof(f54_wlog_buf)-outbuf, "Electode Short Test failed.\n\n"); } write_log(NULL, f54_wlog_buf); return (result) ? 1 : 0; }
static int Dummy_UpdateFirmware(struct i2c_client *client, char *pFilename) { int ret = 0; const struct firmware *fw = NULL; u8 *pBin = NULL; char *pFwFilename = NULL; TOUCH_FUNC(); if( pFilename == NULL ) { pFwFilename = (char *)defaultFirmware; } else { pFwFilename = pFilename; } TOUCH_LOG("Firmware filename = %s\n", pFwFilename); /* Get firmware image buffer pointer from file */ ret = request_firmware(&fw, pFilename, &client->dev); if( ret ) { TOUCH_ERR("failed at request_firmware() ( error = %d )\n", ret); return TOUCH_FAIL; } pBin = (u8 *)(fw->data); /* IMPLEMENT : firmware update function */ /* Free firmware image buffer */ release_firmware(fw); return TOUCH_SUCCESS; }
/* Function to handle report reads based on user input*/ int ReadReport(unsigned char input, char *buf) { int ret = 0; unsigned char data; /*Set the GetReport bit to run the AutoScan*/ data = 0x01; DO_SAFE(Write8BitRegisters(F54CommandBase, &data, 1), error); count = 0; do { DO_SAFE(Read8BitRegisters(F54CommandBase, &data, 1), error); msleep(1); count++; } while (data != 0x00 && (count < DefaultTimeout)); if (count >= DefaultTimeout) { TOUCH_LOG("Timeout - Not supported Report Type in FW\n"); Reset(); return -EAGAIN; } do_gettimeofday(&t_interval[ENDTIME]); TOUCH_LOG("Takes %lu ticks\n", get_time_interval(t_interval[ENDTIME].tv_sec, t_interval[STARTTIME].tv_sec)); switch (input) { case 'p': ret = ReadRT78(buf); break; case 'q': ret = GetImageRT78(buf); break; case 'r': ret = ReadElectodeShortRT78(buf); break; default: break; } return ret; error: TOUCH_ERR("[%s] ReadReport fail\n", __func__); return -EAGAIN; }
static void Dummy_Reset(struct i2c_client *client) { TouchResetCtrl(0); msleep(10); TouchResetCtrl(1); msleep(200); TOUCH_LOG("Device was reset\n"); }
int ReadRT78(char *buf) { int i,j,k= 0; int ret = 0; unsigned short temp = 0; TOUCH_LOG("@@@ %s : F12_TxCount = %d F12_RxCount = %d @@@",__func__, F12_2DTxCount, F12_2DRxCount); Read8BitRegisters((F54DataBase + REPORT_DATA_OFFEST), &Data[0], (F12_2DRxCount * F12_2DTxCount * 2)); //us10_porting outbuf += snprintf(f54_wlog_buf+outbuf, sizeof(f54_wlog_buf)-outbuf,"%s"," "); for (i = 0; i < F12_2DRxCount; i++) { outbuf += snprintf(f54_wlog_buf+outbuf, sizeof(f54_wlog_buf)-outbuf,"%4d ",i); } outbuf += snprintf(f54_wlog_buf+outbuf, sizeof(f54_wlog_buf)-outbuf, "\n-----------------------------------------" "-------------------------------------------------" "-------------------------------------------------" "--------------------------\n"); for (i = 0; i < F12_2DTxCount; i++) { //us10_porting outbuf += snprintf(f54_wlog_buf+outbuf, sizeof(f54_wlog_buf)-outbuf,"%4d: ",i); for (j = 0; j < F12_2DRxCount; j++, k += 2) { temp = Data[k] | (Data[k+1] << 8); RT78Data[i][j] = temp; outbuf += snprintf(f54_wlog_buf+outbuf, sizeof(f54_wlog_buf)-outbuf, "%4d ", RT78Data[i][j]);//us10_porting } outbuf += snprintf(f54_wlog_buf+outbuf, sizeof(f54_wlog_buf)-outbuf, "\n"); //us10_porting } outbuf += snprintf(f54_wlog_buf+outbuf, sizeof(f54_wlog_buf)-outbuf, "-----------------------------------------" "-------------------------------------------------" "-------------------------------------------------" "--------------------------\n"); TOUCH_LOG("\n"); ret = CompareRT78(buf); return ret; }
/* Function to switch beteen register pages.*/ bool switchPage(int page) { unsigned char values[1] = {0}; unsigned char data = 0; pageNum = values[0] = page; count = 0; do { Write8BitRegisters(0xFF, values, 1); msleep(1); Read8BitRegisters(0xFF, &data, 1); count++; } while ((int)data != page && (count < DefaultTimeout)); if (count >= DefaultTimeout) { TOUCH_LOG("Timeout -- Page switch fail !\n"); return -EAGAIN; } return true; }
static int Dummy_GetBinFirmwareInfo(struct i2c_client *client, char *pFilename, TouchFirmwareInfo *pFwInfo) { int ret = 0; const struct firmware *fw = NULL; u8 *pBin = NULL; char *pFwFilename = NULL; TOUCH_FUNC(); if( pFilename == NULL ) { pFwFilename = (char *)defaultFirmware; } else { pFwFilename = pFilename; } TOUCH_LOG("Firmware filename = %s\n", pFwFilename); /* Get firmware image buffer pointer from file */ ret = request_firmware(&fw, pFilename, &client->dev); if( ret ) { TOUCH_ERR("failed at request_firmware() ( error = %d )\n", ret); return TOUCH_FAIL; } pBin = (u8 *)(fw->data); /* IMPLEMENT : parse and get firmware information function */ pFwInfo->moduleMakerID = 0; pFwInfo->moduleVersion = 0; pFwInfo->modelID = 0; pFwInfo->isOfficial = 0; pFwInfo->version = 0; /* Free firmware image buffer */ release_firmware(fw); return TOUCH_SUCCESS; }
int ReadElectodeShortRT78(char *buf) { int i,j,k= 0; int ret = 0; unsigned short temp = 0; TOUCH_LOG("@@@ %s : F12_TxCount = %d F12_RxCount = %d @@@",__func__, F12_2DTxCount, F12_2DRxCount); Read8BitRegisters((F54DataBase + REPORT_DATA_OFFEST), &Data[0], (F12_2DRxCount * F12_2DTxCount * 2)); for (i = 0; i < F12_2DTxCount; i++) { for (j = 0; j < F12_2DRxCount; j++, k += 2) { temp = Data[k] | (Data[k+1] << 8); RT78Data[i][j] = temp; } } ret = CompareElectodeShortRT78(buf); return ret; }
/* Examples of reading query registers. Real applications often do not need to read query registers at all. */ void RunQueries(void) { unsigned short cAddr = 0xEE; unsigned char cFunc = 0; int rxCount = 0; int txCount = 0; int offset = 0; int query_offset = 0; int i, j = 0; /* Scan Page Description Table (PDT) to find all RMI functions presented by this device. The Table starts at $00EE. This and every sixth register (decrementing) is a function number except when this "function number" is $00, meaning end of PDT. In an actual use case this scan might be done only once on first run or before compile. */ do { Read8BitRegisters(cAddr, &cFunc, 1); if (cFunc == 0) break; switch (cFunc) { case 0x01: if (!bHaveF01) { Read8BitRegisters((cAddr - 3), &F01ControlBase, 1); Read8BitRegisters((cAddr - 4), &F01CommandBase, 1); } break; case 0x12: if (!bHaveF12) { Read8BitRegisters((cAddr - 3), &F12ControlBase, 1); Read8BitRegisters((cAddr - 5), &F12QueryBase, 1); Read8BitRegisters((F12QueryBase), &F12Support, 1); if ((F12Support | 0x00) == 0) { TOUCH_LOG( "Device not support F12.\n"); break; } Read8BitRegisters((F12QueryBase + 5), Data, 2); mask = 0x01; for (j = 0; j < 8; j++) { if ((Data[1] & mask) == 1) offset++; Data[1] >>= 1; } Read8BitRegisters((F12ControlBase + offset), Data, 14); F12_2DRxCount = Data[12]; F12_2DTxCount = Data[13]; if (TRX_max <= F12_2DRxCount) F12_2DRxCount = TRX_max; if (TRX_max <= F12_2DTxCount) F12_2DTxCount = TRX_max; offset = 0; } break; case 0x54: if (!bHaveF54) { Read8BitRegisters((cAddr - 2), &F54DataBase, 1); Read8BitRegisters((cAddr - 3), &F54ControlBase, 1); Read8BitRegisters((cAddr - 4), &F54CommandBase, 1); Read8BitRegisters((cAddr - 5), &F54QueryBase, 1); Read8BitRegisters(F54QueryBase, &RxChannelCount, 1); Read8BitRegisters((F54QueryBase + 1), &TxChannelCount, 1); if (TRX_max <= RxChannelCount) RxChannelCount = TRX_max; if (TRX_max <= TxChannelCount) TxChannelCount = 16; MaxArrayLength = (int)RxChannelCount * (int)TxChannelCount * 2; Read8BitRegisters(F54QueryBase, Data, 24); TouchControllerFamily = Data[5]; offset++; /*Ctrl 00*/ if (TouchControllerFamily == 0x0 || TouchControllerFamily == 0x01) offset++; /*Ctrl 01*/ offset += 2; /*Ctrl 02*/ bHavePixelTouchThresholdTuning = ((Data[6] & 0x01) == 0x01); if (bHavePixelTouchThresholdTuning) offset++; /*Ctrl 03;*/ if (TouchControllerFamily == 0x0 || TouchControllerFamily == 0x01) offset += 3; /*Ctrl 04/05/06*/ if (TouchControllerFamily == 0x01) { F54Ctrl07Offset = offset; offset++; /*Ctrl 07;*/ bHaveF54Ctrl07 = true; } /*Ctrl 08*/ if (TouchControllerFamily == 0x0 || TouchControllerFamily == 0x01) offset += 2; /*Ctrl 09*/ if (TouchControllerFamily == 0x0 || TouchControllerFamily == 0x01) offset++; bHaveInterferenceMetric = ((Data[7] & 0x02) == 0x02); /* Ctrl 10*/ if (bHaveInterferenceMetric) offset++; bHaveCtrl11 = ((Data[7] & 0x10) == 0x10); /*Ctrl 11*/ if (bHaveCtrl11) offset += 2; bHaveRelaxationControl = ((Data[7] & 0x80) == 0x80); /*Ctrl 12/13*/ if (bHaveRelaxationControl) offset += 2; bHaveSensorAssignment = ((Data[7] & 0x01) == 0x01); /*Ctrl 14*/ if (bHaveSensorAssignment) offset++; /*Ctrl 15*/ if (bHaveSensorAssignment) offset += RxChannelCount; /*Ctrl 16*/ if (bHaveSensorAssignment) offset += TxChannelCount; bHaveSenseFrequencyControl = ((Data[7] & 0x04) == 0x04); NumberOfSensingFrequencies = (Data[13] & 0x0F); /*Ctrl 17/18/19*/ if (bHaveSenseFrequencyControl) offset += (3 * (int)NumberOfSensingFrequencies); offset++; /*Ctrl 20*/ if (bHaveSenseFrequencyControl) offset += 2; /*Ctrl 21*/ bHaveFirmwareNoiseMitigation = ((Data[7] & 0x08) == 0x08); if (bHaveFirmwareNoiseMitigation) offset++; /*Ctrl 22*/ if (bHaveFirmwareNoiseMitigation) offset += 2; /*Ctrl 23*/ if (bHaveFirmwareNoiseMitigation) offset += 2; /*Ctrl 24*/ if (bHaveFirmwareNoiseMitigation) offset++; /*Ctrl 25*/ if (bHaveFirmwareNoiseMitigation) offset++; /*Ctrl 26*/ bHaveIIRFilter = ((Data[9] & 0x02) == 0x02); if (bHaveIIRFilter) offset++; /*Ctrl 27*/ if (bHaveFirmwareNoiseMitigation) offset += 2; /*Ctrl 28*/ bHaveCmnRemoval = ((Data[9] & 0x04) == 0x04); bHaveCmnMaximum = ((Data[9] & 0x08) == 0x08); if (bHaveCmnRemoval) offset++; /*Ctrl 29*/ if (bHaveCmnMaximum) offset++; /*Ctrl 30*/ bHaveTouchHysteresis = ((Data[9] & 0x10) == 0x10); if (bHaveTouchHysteresis) offset++; /*Ctrl 31*/ bHaveEdgeCompensation = ((Data[9] & 0x20) == 0x20); if (bHaveEdgeCompensation) offset += 2; /*Ctrl 32*/ if (bHaveEdgeCompensation) offset += 2; /*Ctrl 33*/ if (bHaveEdgeCompensation) offset += 2; /*Ctrl 34*/ if (bHaveEdgeCompensation) offset += 2; /*Ctrl 35*/ CurveCompensationMode = (Data[8] & 0x03); if (CurveCompensationMode == 0x02) { offset += (int)RxChannelCount; } else if (CurveCompensationMode == 0x01) { offset += ((int)RxChannelCount > (int)TxChannelCount) ? (int)RxChannelCount : (int)TxChannelCount; } /*Ctrl 36*/ if (CurveCompensationMode == 0x02) { /*Ctrl 37*/ offset += (int)TxChannelCount; } bHavePerFrequencyNoiseControl = ((Data[9] & 0x40) == 0x40); /*Ctrl 38/39/40*/ if (bHavePerFrequencyNoiseControl) offset += (3 * (int)NumberOfSensingFrequencies); bHaveSignalClarity = ((Data[10] & 0x04) == 0x04); if (bHaveSignalClarity) { F54Ctrl41Offset = offset; offset++; /*Ctrl 41*/ bHaveF54Ctrl41 = true; } bHaveMultiMetricStateMachine = ((Data[10] & 0x02) == 0x02); bHaveVarianceMetric = ((Data[10] & 0x08) == 0x08); if (bHaveVarianceMetric) offset += 2; /*Ctr 42*/ if (bHaveMultiMetricStateMachine) offset += 2; /*Ctrl 43*/ /*Ctrl 44/45/46/47/48/49/50/51/52/53/54*/ if (bHaveMultiMetricStateMachine) offset += 11; bHave0DRelaxationControl = ((Data[10] & 0x10) == 0x10); bHave0DAcquisitionControl = ((Data[10] & 0x20) == 0x20); if (bHave0DRelaxationControl) offset += 2; /*Ctrl 55/56*/ if (bHave0DAcquisitionControl) { F54Ctrl57Offset = offset; offset++; /*Ctrl 57;*/ bHaveF54Ctrl57 = true; } if (bHave0DAcquisitionControl) offset += 1; /*Ctrl 58*/ bHaveSlewMetric = ((Data[10] & 0x80) == 0x80); bHaveHBlank = ((Data[11] & 0x01) == 0x01); bHaveVBlank = ((Data[11] & 0x02) == 0x02); bHaveLongHBlank = ((Data[11] & 0x04) == 0x04); bHaveNoiseMitigation2 = ((Data[11] & 0x20) == 0x20); bHaveSlewOption = ((Data[12] & 0x02) == 0x02); if (bHaveHBlank) offset += 1; /*Ctrl 59*/ if (bHaveHBlank || bHaveVBlank || bHaveLongHBlank) offset += 3; /*Ctrl 60/61/62*/ if (bHaveSlewMetric || bHaveHBlank || bHaveVBlank || bHaveLongHBlank || bHaveNoiseMitigation2 || bHaveSlewOption) offset += 1; /*Ctrl 63*/ if (bHaveHBlank) offset += 28; /*Ctrl 64/65/66/67*/ else if (bHaveVBlank || bHaveLongHBlank) offset += 4; /*Ctrl 64/65/66/67*/ if (bHaveHBlank || bHaveVBlank || bHaveLongHBlank) offset += 8; /*Ctrl 68/69/70/71/72/73*/ if (bHaveSlewMetric) offset += 2; /*Ctrl 74*/ bHaveEnhancedStretch = ((Data[9] & 0x80) == 0x80); /*Ctrl 75*/ if (bHaveEnhancedStretch) offset += (int)NumberOfSensingFrequencies; bHaveStartupFastRelaxation = ((Data[11] & 0x08) == 0x08); if (bHaveStartupFastRelaxation) offset += 1; /*Ctrl 76*/ bHaveESDControl = ((Data[11] & 0x10) == 0x10); if (bHaveESDControl) offset += 2; /*Ctrl 77/78*/ if (bHaveNoiseMitigation2) offset += 5; /*Ctrl 79/80/81/82/83*/ bHaveEnergyRatioRelaxation = ((Data[11] & 0x80) == 0x80); if (bHaveEnergyRatioRelaxation) offset += 2; /*Ctrl 84/85*/ bHaveF54Query13 = ((Data[12] & 0x08) == 0x08); if (bHaveSenseFrequencyControl) { query_offset = 13; NumberOfSensingFrequencies = (Data[13] & 0x0F); } else query_offset = 12; if (bHaveF54Query13) query_offset++; bHaveCtrl86 = (bHaveF54Query13 && ((Data[13] & 0x01) == 0x01)); bHaveCtrl87 = (bHaveF54Query13 && ((Data[13] & 0x02) == 0x02)); bHaveCtrl88 = ((Data[12] & 0x40) == 0x40); if (bHaveCtrl86) offset += 1; /*Ctrl 86*/ if (bHaveCtrl87) offset += 1; /*Ctrl 87*/ if (bHaveCtrl88) { F54Ctrl88Offset = offset; offset++; /*Ctrl 88;*/ } bHaveCtrl89 = ((Data[query_offset] & 0x20) == 0x20); if (bHaveCtrl89) offset++; bHaveF54Query15 = ((Data[12] & 0x80) == 0x80); if (bHaveF54Query15) query_offset++; /*query_offset = 14*/ bHaveCtrl90 = (bHaveF54Query15 && ((Data[query_offset] & 0x01) == 0x01)); if (bHaveCtrl90) offset++; bHaveF54Query16 = ((Data[query_offset] & 0x8) == 0x8); bHaveF54Query22 = ((Data[query_offset] & 0x40) == 0x40); bHaveF54Query25 = ((Data[query_offset] & 0x80) == 0x80); if (bHaveF54Query16) query_offset++; /*query_offset = 15*/ bHaveF54Query17 = ((Data[query_offset] & 0x1) == 0x1); bHaveCtrl92 = ((Data[query_offset] & 0x4) == 0x4); bHaveCtrl93 = ((Data[query_offset] & 0x8) == 0x8); bHaveCtrl94 = ((Data[query_offset] & 0x10) == 0x10); bHaveF54Query18 = bHaveCtrl94; bHaveCtrl95 = ((Data[query_offset] & 0x20) == 0x20); bHaveF54Query19 = bHaveCtrl95; bHaveCtrl99 = ((Data[query_offset] & 0x40) == 0x40); bHaveCtrl100 = ((Data[query_offset] & 0x80) == 0x80); if (bHaveF54Query17) query_offset++; /*query_offset = 16*/ if (bHaveF54Query18) query_offset++; /*query_offset = 17*/ if (bHaveF54Query19) query_offset++; /*query_offset = 18*/ /*query 20, 21 query_offset = 20*/ query_offset = query_offset + 2; bHaveCtrl91 = ((Data[query_offset] & 0x4) == 0x4); bHaveCtrl96 = ((Data[query_offset] & 0x8) == 0x8); bHaveCtrl97 = ((Data[query_offset] & 0x10) == 0x10); bHaveCtrl98 = ((Data[query_offset] & 0x20) == 0x20); if (bHaveF54Query22) query_offset++; /*query_offset = 21*/ bHaveCtrl101 = ((Data[query_offset] & 0x2) == 0x2); bHaveF54Query23 = ((Data[query_offset] & 0x8) == 0x8); if (bHaveF54Query23) { query_offset++; /*query_offset = 22*/ bHaveCtrl102 = ((Data[query_offset] & 0x01) == 0x01); } else bHaveCtrl102 = false; if (bHaveCtrl91) offset++; if (bHaveCtrl92) offset++; if (bHaveCtrl93) offset++; if (bHaveCtrl94) offset++; if (bHaveCtrl95) offset++; if (bHaveCtrl96) offset++; if (bHaveCtrl97) offset++; if (bHaveCtrl98) { F54Ctrl98Offset = offset; offset++; } if (bHaveCtrl99) offset++; if (bHaveCtrl100) offset++; if (bHaveCtrl101) offset++; } break; case 0x55: if (!bHaveF55) { Read8BitRegisters((cAddr - 3), &F55ControlBase, 1); Read8BitRegisters((cAddr - 5), &F55QueryBase, 1); Read8BitRegisters(F55QueryBase, &RxChannelCount, 1); Read8BitRegisters((F55QueryBase+1), &TxChannelCount, 1); rxCount = 0; txCount = 0; /*Read Sensor Mapping*/ Read8BitRegisters((F55ControlBase + 1), Data, (int)RxChannelCount); for (i = 0; i < (int)RxChannelCount; i++) { if (Data[i] != 0xFF) { rxCount++; TRxPhysical[i] = Data[i]; } else break; } Read8BitRegisters((F55ControlBase + 2), Data, (int)TxChannelCount); for (i = 0; i < (int)TxChannelCount; i++) { if (Data[i] != 0xFF) { TRxPhysical[rxCount + i] = Data[i]; txCount++; } else break; } for (i = (rxCount + txCount); i < (TRX_mapping_max); i++) { TRxPhysical[i] = 0xFF; } RxChannelCount = rxCount; TxChannelCount = txCount; if (TRX_max <= RxChannelCount) RxChannelCount = TRX_max; if (TRX_max <= TxChannelCount) TxChannelCount = 16; MaxArrayLength = (int)RxChannelCount * (int)TxChannelCount * 2; if (((int)TxChannelCount - F12_2DTxCount == 0) && ButtonCount > 0) { ButtonShared = true; } } break; default: /* Any other function*/ break; } cAddr -= 6; } while (true);
void TouchGetModelConfig(TouchDriverData *pDriverData) { TouchModelConfig *pConfig = &pDriverData->mConfig; #if defined ( TOUCH_MODEL_LION_3G ) pConfig->button_support = 0; pConfig->number_of_button = 0; pConfig->protocol_type = MT_PROTOCOL_B; pConfig->max_x = 720; pConfig->max_y = 1280; pConfig->max_pressure = 0xff; pConfig->max_width = 15; pConfig->max_orientation = 1; pConfig->max_id = 10; #elif defined ( TOUCH_MODEL_C30 ) pConfig->button_support = 1; pConfig->number_of_button = 3; pConfig->button_name[0] = 158; pConfig->button_name[1] = 172; pConfig->button_name[2] = 139; pConfig->button_name[3] = 0; pConfig->max_x = 480; pConfig->max_y = 800; pConfig->max_pressure = 0xff; pConfig->max_width = 15; pConfig->max_orientation = 1; pConfig->max_id = 2; pConfig->protocol_type = MT_PROTOCOL_B; #elif defined ( TOUCH_MODEL_Y30 ) pConfig->button_support = 1; pConfig->number_of_button = 4; pConfig->button_name[0] = 158; pConfig->button_name[1] = 172; pConfig->button_name[2] = 139; pConfig->button_name[3] = 249; pConfig->max_x = 480; pConfig->max_y = 800; pConfig->max_pressure = 0xff; pConfig->max_width = 15; pConfig->max_orientation = 1; pConfig->max_id = 10; pConfig->protocol_type = MT_PROTOCOL_B; #elif defined ( TOUCH_MODEL_C70 ) || defined ( TOUCH_MODEL_C90 ) || defined ( TOUCH_MODEL_Y90 ) || defined ( TOUCH_MODEL_Y70 ) || defined ( TOUCH_MODEL_C90NAS) || defined ( TOUCH_MODEL_P1C) || defined ( TOUCH_MODEL_YG ) pConfig->button_support = 0; pConfig->number_of_button = 0; pConfig->button_name[0] = 0; pConfig->button_name[1] = 0; pConfig->button_name[2] = 0; pConfig->button_name[3] = 0; pConfig->max_x = 720; pConfig->max_y = 1280; pConfig->max_pressure = 0xff; pConfig->max_width = 15; pConfig->max_orientation = 1; pConfig->max_id = 10; pConfig->protocol_type = MT_PROTOCOL_B; #elif defined ( TOUCH_MODEL_C50 ) pConfig->button_support = 0; pConfig->number_of_button = 0; pConfig->button_name[0] = 0; pConfig->button_name[1] = 0; pConfig->button_name[2] = 0; pConfig->button_name[3] = 0; pConfig->max_x = 480; pConfig->max_y = 854; pConfig->max_pressure = 0xff; pConfig->max_width = 30; pConfig->max_orientation = 1; pConfig->max_id = 10; pConfig->protocol_type = MT_PROTOCOL_B; #elif defined ( TOUCH_MODEL_P1B ) pConfig->button_support = 0; pConfig->number_of_button = 0; pConfig->button_name[0] = 0; pConfig->button_name[1] = 0; pConfig->button_name[2] = 0; pConfig->button_name[3] = 0; pConfig->max_x = 1080; pConfig->max_y = 1920; pConfig->max_pressure = 0xff; pConfig->max_width = 15; pConfig->max_orientation = 1; pConfig->max_id = 10; pConfig->protocol_type = MT_PROTOCOL_B; #else #error "Model should be defined" #endif TOUCH_LOG("======== Model Configuration ( Begin ) ========\n"); TOUCH_LOG("button_support=%d\n", pConfig->button_support); TOUCH_LOG("number_of_button=%d\n", pConfig->number_of_button); TOUCH_LOG("button_name[0]=%d\n", pConfig->button_name[0]); TOUCH_LOG("button_name[1]=%d\n", pConfig->button_name[1]); TOUCH_LOG("button_name[2]=%d\n", pConfig->button_name[2]); TOUCH_LOG("button_name[3]=%d\n", pConfig->button_name[3]); TOUCH_LOG("max_x=%d\n", pConfig->max_x); TOUCH_LOG("max_y=%d\n", pConfig->max_y); TOUCH_LOG("max_pressure=%d\n", pConfig->max_pressure); TOUCH_LOG("max_width=%d\n", pConfig->max_width); TOUCH_LOG("max_orientation=%d\n", pConfig->max_orientation); TOUCH_LOG("max_id=%d\n", pConfig->max_id); TOUCH_LOG("protocol_type=%s", ( pConfig->protocol_type == MT_PROTOCOL_A ) ? "MT_PROTOCOL_A\n" : "MT_PROTOCOL_B\n"); TOUCH_LOG("======== Model Configuration ( End ) ========\n"); return; }