import PULS_20160108
[GitHub/mt8127/android_kernel_alcatel_ttab.git] / drivers / input / touchscreen / mediatek / synaptics_3528 / RefCode_F54_FullRawCap.c
diff --git a/drivers/input/touchscreen/mediatek/synaptics_3528/RefCode_F54_FullRawCap.c b/drivers/input/touchscreen/mediatek/synaptics_3528/RefCode_F54_FullRawCap.c
new file mode 100644 (file)
index 0000000..f0c227e
--- /dev/null
@@ -0,0 +1,694 @@
+/*
+   +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+   Copyright (c) 2011 Synaptics, Inc.
+
+   Permission is hereby granted, free of charge, to any person obtaining a copy of
+   this software and associated documentation files (the "Software"), to deal in
+   the Software without restriction, including without limitation the rights to use,
+   copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
+   Software, and to permit persons to whom the Software is furnished to do so,
+   subject to the following conditions:
+
+   The above copyright notice and this permission notice shall be included in all
+   copies or substantial portions of the Software.
+
+   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+   IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+   FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+   AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+   LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+   OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+   SOFTWARE.
+ */
+
+#include "RefCode.h"
+#include "RefCode_PDTScan.h"
+
+#ifdef _F54_TEST_
+#include "RefCode_F54_FullRawCapLimit.h"
+
+#ifdef F54_Porting
+static unsigned char ImageBuffer[CFG_F54_TXCOUNT*CFG_F54_RXCOUNT*2];
+static signed ImageArray[CFG_F54_TXCOUNT] [CFG_F54_RXCOUNT];
+
+static char buf[6000] = {0};
+static unsigned char call_cnt = 0;
+static int LimitBack[30][46*2];
+#endif
+
+unsigned char F54_FullRawCap(int mode)
+// mode - 0:For sensor, 1:For FPC, 2:CheckTSPConnection, 3:Baseline, 4:Delta image
+{
+   signed short temp=0;
+   int Result = 0;
+#ifdef F54_Porting
+    int ret = 0;
+    unsigned char product_id[11];
+#endif
+    int TSPCheckLimit=700;
+    short Flex_LowerLimit = -100;
+    short Flex_UpperLimit = 500;
+
+    int i, j, k;
+    unsigned short length;
+
+    unsigned char command;
+
+    length = numberOfTx * numberOfRx* 2;
+
+    //check product id to set basecap array
+    readRMI(F01_Query_Base+11, &product_id[0], sizeof(product_id));
+
+    if(!strncmp(product_id, "PLG245", 6)) {
+        printk("set limit array to PLG245 value.\n");
+        //memcpy(Limit, Limit_PLG245, sizeof(Limit_PLG245));
+    } else if(!strncmp(product_id, "PLG260", 6)) {
+        printk("set limit array to PLG260 value.\n");
+        //memcpy(Limit, Limit_PLG260, sizeof(Limit_PLG260));
+    } else {
+        printk("set limit array to LGIT value.\n");
+    }
+
+    //set limit array
+    if(call_cnt == 0){
+        printk("Backup Limit to LimitBack array\n");
+        memset(LimitBack, 0, sizeof(LimitBack));
+//        memcpy(LimitBack, Limit, sizeof(LimitBack));
+#if defined(LGE_USE_DOME_KEY)
+        memcpy(LimitBack, Limit_PLG260, sizeof(LimitBack));
+#else
+        memcpy(LimitBack, Limit_PLG245, sizeof(LimitBack));
+#endif
+    }
+    if(get_limit(numberOfTx, numberOfRx) > 0) {
+        printk("Get limit from file success!!Use Limit array from file data.\n");
+//        memcpy(Limit, LimitFile, sizeof(Limit));
+#if defined(LGE_USE_DOME_KEY)
+        memcpy(Limit_PLG260, LimitFile, sizeof(Limit_PLG260));
+#else
+        memcpy(Limit_PLG245, LimitFile, sizeof(Limit_PLG260));
+#endif
+    } else {
+        printk("Get limit from file fail!!Use Limit array from image data\n");
+        //memcpy(Limit, LimitBack, sizeof(Limit));
+#if defined(LGE_USE_DOME_KEY)
+        memcpy(Limit_PLG260, LimitBack, sizeof(Limit_PLG260));
+#else
+        memcpy(Limit_PLG245, LimitBack, sizeof(Limit_PLG245));
+#endif
+
+    }
+    call_cnt++;
+    if(call_cnt > 0) call_cnt = 1;
+
+    if(mode == 3 || mode == 4)
+    {
+/*        // Disable CBC
+        command = 0x00;
+        writeRMI(F54_CBCSettings, &command, 1);
+        writeRMI(F54_CBCPolarity, &command, 1);
+*/    }
+
+    // No sleep
+    command = 0x04;
+    writeRMI(F01_Ctrl_Base, &command, 1);
+
+    // Set report mode to to run the AutoScan
+    if(mode >= 0 && mode < 4)    command = 0x03;
+    if(mode == 4)                command = 0x02;
+    writeRMI(F54_Data_Base, &command, 1);
+
+    if(mode == 3 || mode == 4)
+    {
+/*        //NoCDM4
+        command = 0x01;
+        writeRMI(NoiseMitigation, &command, 1);
+*/    }
+
+    if(mode != 3 && mode != 4)
+    {
+        // Force update & Force cal
+        command = 0x06;
+        writeRMI(F54_Command_Base, &command, 1);
+
+        do {
+            delayMS(1); //wait 1ms
+            readRMI(F54_Command_Base, &command, 1);
+        } while (command != 0x00);
+    }
+
+    // Enabling only the analog image reporting interrupt, and turn off the rest
+    command = 0x08;
+    writeRMI(F01_Cmd_Base+1, &command, 1);
+
+    command = 0x00;
+    writeRMI(F54_Data_LowIndex, &command, 1);
+    writeRMI(F54_Data_HighIndex, &command, 1);
+
+    // Set the GetReport bit to run the AutoScan
+    command = 0x01;
+    writeRMI(F54_Command_Base, &command, 1);
+
+    // Wait until the command is completed
+    do {
+     delayMS(1); //wait 1ms
+        readRMI(F54_Command_Base, &command, 1);
+   } while (command != 0x00);
+
+    //readRMI(F54_Data_Buffer, &ImageBuffer[0], length);
+    longReadRMI(F54_Data_Buffer, &ImageBuffer[0], length);
+
+    if( (numberOfTx > 29) || (numberOfRx > 45) ) {
+        printk("Limit Index overflow. Test result: Fail\n");
+        return 0;
+    }
+
+    switch(mode)
+    {
+        case 0:
+        case 1:
+#ifdef F54_Porting
+            memset(buf, 0, sizeof(buf));
+            ret = sprintf(buf, "#ofTx\t%d\n", numberOfTx);
+            ret += sprintf(buf+ret, "#ofRx\t%d\n", numberOfRx);
+
+            ret += sprintf(buf+ret, "\n#3.03    Full raw capacitance Test\n");
+#else
+            printk("#ofTx\t%d\n", numberOfTx);
+            printk("#ofRx\t%d\n", numberOfRx);
+
+            printk("\n#3.03    Full raw capacitance Test\n");
+#endif
+            k = 0;
+            for (i = 0; i < numberOfTx; i++)
+            {
+#ifdef F54_Porting
+                ret += sprintf(buf+ret, "%d\t", i);
+#else
+                printk("%d\t", i);
+#endif
+                for (j = 0; j < numberOfRx; j++)
+                {
+                        temp = (short)(ImageBuffer[k] | (ImageBuffer[k+1] << 8));
+                        if(CheckButton[i][j] != 1)
+                        {
+                            if(mode==0)
+                            {
+#ifdef F54_Porting
+                                //if ((temp >= Limit[i][j*2]) && (temp <= Limit[i][j*2+1]))
+#if defined(LGE_USE_DOME_KEY)
+                                if ((temp >= Limit_PLG260[i][j*2]) && (temp <= Limit_PLG260[i][j*2+1]))
+#else
+                                if ((temp >= Limit_PLG245[i][j*2]) && (temp <= Limit_PLG245[i][j*2+1]))
+#endif
+#else
+                                if ((temp >= Limit[i][j*2]*1000) && (temp <= Limit[i][j*2+1]*1000))
+#endif
+                                {
+                                    Result++;
+#ifdef F54_Porting
+                                    ret += sprintf(buf+ret, "%d\t", temp); //It's for getting log for limit set
+#else
+                                    printk("%d\t", temp); //It's for getting log for limit set
+#endif
+                                }
+                                else {
+#ifdef F54_Porting
+                                    ret += sprintf(buf+ret, "%d\t", temp); //It's for getting log for limit set
+#else
+                                    printk("%d\t", temp); //It's for getting log for limit set
+#endif
+                                }
+                            }
+                            else
+                            {
+                                if ((temp >= Flex_LowerLimit) && (temp <= Flex_UpperLimit))
+                                {
+                                    Result++;
+#ifdef F54_Porting
+                                    ret += sprintf(buf+ret, "%d\t", temp); //It's for getting log for limit set
+#else
+                                    printk("%d\t", temp); //It's for getting log for limit set
+#endif
+                                }
+                                else {
+#ifdef F54_Porting
+                                    ret += sprintf(buf+ret, "%d\t", temp); //It's for getting log for limit set
+#else
+                                    printk("%d\t", temp); //It's for getting log for limit set
+#endif
+                                }
+                            }
+                        }
+                        else
+                        {
+                            Result++;
+#ifdef F54_Porting
+                            ret += sprintf(buf+ret, "%d\t", temp); //It's for getting log for limit set
+#else
+                            printk("%d\t", temp); //It's for getting log for limit set
+#endif
+                        }
+                  k = k + 2;
+                }
+#ifdef F54_Porting
+                ret += sprintf(buf+ret, "\n");
+#else
+                printk("\n"); //It's for getting log for limit set
+#endif
+            }
+
+#ifdef F54_Porting
+            ret += sprintf(buf+ret, "#3.04    Full raw capacitance Test END\n");
+            ret += sprintf(buf+ret, "\n#3.01    Full raw capacitance Test Limit\n");
+
+            // Print Capacitance Imgae for getting log for Excel format
+            ret += sprintf(buf+ret, "\t");
+#else
+            printk("#3.04    Full raw capacitance Test END\n");
+
+            printk("\n#3.01    Full raw capacitance Test Limit\n");
+            // Print Capacitance Imgae for getting log for Excel format
+            printk("\t");
+#endif
+            for (j = 0; j < numberOfRx; j++) {
+#ifdef F54_Porting
+                ret += sprintf(buf+ret, "%d-Min\t%d-Max\t", j, j);
+#else
+                printk("%d-Min\t%d-Max\t", j, j);
+#endif
+            }
+
+#ifdef F54_Porting
+            ret += sprintf(buf+ret, "\n");
+#else
+            printk("\n");
+#endif
+
+            for (i = 0; i < numberOfTx; i++)
+            {
+#ifdef F54_Porting
+                ret += sprintf(buf+ret, "%d\t", i);
+#else
+                printk("%d\t", i);
+#endif
+                for (j = 0; j < numberOfRx; j++)
+                {
+                    if(mode==0) {
+#ifdef F54_Porting
+#if defined(LGE_USE_DOME_KEY)
+                        //printk("%d\t%d\t", Limit[i][j*2], Limit[i][j*2+1]);
+                        //ret += sprintf(buf+ret, "%d\t%d\t", Limit[i][j*2], Limit[i][j*2+1]);
+                        ret += sprintf(buf+ret, "%d\t%d\t", Limit_PLG260[i][j*2], Limit_PLG260[i][j*2+1]);
+#else
+                        ret += sprintf(buf+ret, "%d\t%d\t", Limit_PLG245[i][j*2], Limit_PLG245[i][j*2+1]);
+#endif
+#else
+                        printk("%d\t%d\t", Limit[i][j*2]*1000, Limit[i][j*2+1]*1000);
+#endif
+                    } else {
+#ifdef F54_Porting
+                        ret += sprintf(buf+ret, "%d\t%d\t", Flex_LowerLimit, Flex_UpperLimit);
+#else
+                        printk("%d\t%d\t", Flex_LowerLimit, Flex_UpperLimit);
+#endif
+                    }
+                }
+#ifdef F54_Porting
+                ret += sprintf(buf+ret, "\n");
+#else
+                printk("\n");
+#endif
+            }
+#ifdef F54_Porting
+            ret += sprintf(buf+ret, "#3.02    Full raw cap Limit END\n");
+#else
+            printk("#3.02    Full raw cap Limit END\n");
+#endif
+            break;
+
+        case 2:
+            k = 0;
+            for (i = 0; i < numberOfTx; i++)
+            {
+                for (j = 0; j < numberOfRx; j++)
+                {
+                        temp = (short)(ImageBuffer[k] | (ImageBuffer[k+1] << 8));
+                           if (temp > TSPCheckLimit)
+                           Result++;
+                  k = k + 2;
+                }
+            }
+            break;
+
+        case 3:
+        case 4:
+            k = 0;
+            for (i = 0; i < numberOfTx; i++)
+            {
+                for (j = 0; j < numberOfRx; j++)
+                {
+                        ImageArray[i][j] = (short)(ImageBuffer[k] | (ImageBuffer[k+1] << 8));
+                  k = k + 2;
+                }
+            }
+#ifdef F54_Porting
+                 // Print Capacitance Imgae for getting log for Excel format
+                 ret += sprintf(ret+buf, "\n\t");
+#else
+                 // Print Capacitance Imgae for getting log for Excel format
+                 printk("\n\t");
+#endif
+                 for (j = 0; j < numberOfRx; j++) {
+#ifdef F54_Porting
+                    ret += sprintf(ret+buf, "RX%d\t", RxChannelUsed[j]);
+#else
+                     printk("RX%d\t", RxChannelUsed[j]);
+#endif
+                 }
+
+#ifdef F54_Porting
+                 ret += sprintf(buf+ret, "\n");
+#else
+                 printk("\n");
+#endif
+
+                 for (i = 0; i < numberOfTx; i++)
+                 {
+#ifdef F54_Porting
+                     ret += sprintf(buf+ret, "TX%d\t", TxChannelUsed[i]);
+#else
+                     printk("TX%d\t", TxChannelUsed[i]);
+#endif
+                     for (j = 0; j < numberOfRx; j++)
+                     {
+#ifdef F54_Porting
+                        if(mode == 3)        ret += sprintf(buf+ret, "%d\t", (ImageArray[i][j]) / 1000);
+                        else if(mode == 4)    ret += sprintf(buf+ret, "%d\t", ImageArray[i][j]);
+#else
+                        if(mode == 3)       printk("%d\t", (ImageArray[i][j]) / 1000);
+                        else if(mode == 4) printk("%d\t", ImageArray[i][j]);
+                        //if(mode == 3)       printk("%1.3f\t", (float)(ImageArray[i][j]) / 1000);
+                        //else if(mode == 4) printk("%d\t", ImageArray[i][j]);
+#endif
+
+                      }
+#ifdef F54_Porting
+                  ret += sprintf(ret+buf, "\n");
+#else
+                  printk("\n");
+#endif
+                 }
+            break;
+
+        default:
+            break;
+    }
+
+    if(mode != 3 && mode != 4)
+    {
+        //Reset
+        command= 0x01;
+        writeRMI(F01_Cmd_Base, &command, 1);
+        delayMS(200);
+        readRMI(F01_Data_Base+1, &command, 1); //Read Interrupt status register to Interrupt line goes to high
+    }
+
+    if(mode >= 0 && mode < 2)
+    {
+        if(Result == numberOfTx * numberOfRx)
+        {
+#ifdef F54_Porting
+            ret += sprintf(buf+ret, "Test Result: Pass\n");
+            write_log(buf);
+#else
+            printk("Test Result: Pass\n");
+#endif
+            return 1; //Pass
+        }
+        else
+        {
+#ifdef F54_Porting
+            ret += sprintf(buf+ret, "Test Result: Fail\n");
+            write_log(buf);
+#else
+            printk("Test Result: Fail\n");
+#endif
+            return 0; //Fail
+        }
+    }
+    else if(mode == 2)
+    {
+        if(Result == 0) return 0; //TSP Not connected
+        else return 1; //TSP connected
+     }
+    else
+    {
+#ifdef F54_Porting
+        write_log(buf);
+#endif
+        return 0;
+    }
+}
+
+// mode - 0:For sensor, 1:For FPC, 2:CheckTSPConnection, 3:Baseline, 4:Delta image
+int F54_GetFullRawCap(int mode, char *buf) {
+    signed short temp=0;
+    //int Result = 0;
+    int ret = 0;
+    unsigned char product_id[11];
+    int TSPCheckLimit=700;
+    // short Flex_LowerLimit = -100;
+    // short Flex_UpperLimit = 500;
+
+    int i, j, k;
+    unsigned short length;
+
+    unsigned char command;
+
+    int waitcount;
+
+    if (mode < 0 && mode > 4)
+        return ret;
+
+    length = numberOfTx * numberOfRx * 2;
+
+    //check product id to set basecap array
+    readRMI(F01_Query_Base + 11, &product_id[0], sizeof(product_id));
+
+    if(!strncmp(product_id, "PLG245", 6)) {
+        pr_info("set limit array to PLG245 value.\n");
+        //memcpy(Limit, Limit_PLG245, sizeof(Limit_PLG245));
+    } else if(!strncmp(product_id, "PLG260", 6)) {
+        pr_info("set limit array to PLG260 value.\n");
+        //memcpy(Limit, Limit_PLG260, sizeof(Limit_PLG260));
+    } else {
+        pr_info("set limit array to LGIT value.\n");
+    }
+
+    //set limit array
+    if (call_cnt == 0)
+    {
+        pr_info("Backup Limit to LimitBack array\n");
+        memset(LimitBack, 0, sizeof(LimitBack));
+//        memcpy(LimitBack, Limit, sizeof(LimitBack));
+#if defined(LGE_USE_DOME_KEY)
+        memcpy(LimitBack, Limit_PLG260, sizeof(LimitBack));
+#else
+        memcpy(LimitBack, Limit_PLG245, sizeof(LimitBack));
+#endif
+    }
+
+    if (get_limit(numberOfTx, numberOfRx) > 0) {
+        pr_info("Get limit from file success!!Use Limit array from file data.\n");
+//        memcpy(Limit, LimitFile, sizeof(Limit));
+#if defined(LGE_USE_DOME_KEY)
+        memcpy(Limit_PLG260, LimitFile, sizeof(Limit_PLG260));
+#else
+        memcpy(Limit_PLG245, LimitFile, sizeof(Limit_PLG245));
+#endif
+    } else {
+        pr_info("Get limit from file fail!!Use Limit array from image data\n");
+//        memcpy(Limit, LimitBack, sizeof(Limit));
+#if defined(LGE_USE_DOME_KEY)
+        memcpy(Limit_PLG260, LimitBack, sizeof(Limit_PLG260));
+#else
+        memcpy(Limit_PLG245, LimitBack, sizeof(Limit_PLG245));
+#endif
+    }
+
+    call_cnt++;
+
+    if (call_cnt > 0)
+        call_cnt = 1;
+
+    // No sleep
+    command = 0x04;
+    writeRMI(F01_Ctrl_Base, &command, 1);
+
+    // Set report mode to to run the AutoScan
+    command = (mode == 4) ? 0x02 : 0x03;
+    writeRMI(F54_Data_Base, &command, 1);
+
+#if 0
+    if (mode == 3 || mode == 4) {
+        /*        //NoCDM4
+                command = 0x01;
+                writeRMI(NoiseMitigation, &command, 1);
+         */
+    }
+
+
+    if (mode != 3 && mode != 4) {
+        // Force update & Force cal
+        command = 0x06;
+        writeRMI(F54_Command_Base, &command, 1);
+
+        waitcount = 0;
+        do {
+            if (++waitcount > 100) {
+                pr_info("%s[%d], command = %d\n", __func__, __LINE__, command);
+                break;
+            }
+            delayMS(1); //wait 1ms
+            readRMI(F54_Command_Base, &command, 1);
+        } while (command != 0x00);
+    }
+#endif
+
+    // Enabling only the analog image reporting interrupt, and turn off the rest
+    readRMI(F01_Cmd_Base+1, &command, 1);
+    command |= 0x08;
+    writeRMI(F01_Cmd_Base+1, &command, 1);
+
+    command = 0x00;
+    writeRMI(F54_Data_LowIndex, &command, 1);
+    writeRMI(F54_Data_HighIndex, &command, 1);
+
+    // Set the GetReport bit to run the AutoScan
+    command = 0x01;
+    writeRMI(F54_Command_Base, &command, 1);
+
+    // Wait until the command is completed
+    waitcount = 0;
+    do {
+        if (++waitcount > 100) {
+            pr_info("%s[%d], command = %d\n", __func__, __LINE__, command);
+            break;
+        }
+        delayMS(1); //wait 1ms
+        readRMI(F54_Command_Base, &command, 1);
+    } while (command != 0x00);
+
+    //readRMI(F54_Data_Buffer, &ImageBuffer[0], length);
+    longReadRMI(F54_Data_Buffer, &ImageBuffer[0], length);
+
+    readRMI(F01_Cmd_Base+1, &command, 1);
+    command &= ~0x08;
+    writeRMI(F01_Cmd_Base+1, &command, 1);
+
+    if ( (numberOfTx > 29) || (numberOfRx > 45) ) {
+        ret = sprintf(buf, "ERROR: Limit Index overflow. Test result: Fail\n");
+        return ret;
+    }
+
+    *buf = 0;
+
+    ret = sprintf(buf, "Info: Tx=%d Rx=%d\n", numberOfTx, numberOfRx);
+
+    switch(mode) {
+    case 0:
+    case 1:
+        //ret += sprintf(buf+ret, "Full raw capacitance Test\n");
+        k = 0;
+        for (i = 0; i < numberOfTx; i++) {
+            // ret += sprintf(buf+ret, "%d\t", i);
+            for (j = 0; j < numberOfRx; j++) {
+                temp = (short)(ImageBuffer[k] | (ImageBuffer[k+1] << 8));
+                /*
+                if(CheckButton[i][j] != 1) {
+                    if(mode==0) {
+                        if ((temp >= Limit[i][j*2]) && (temp <= Limit[i][j*2+1]))
+                            Result++;
+                    } else {
+                        if ((temp >= Flex_LowerLimit) && (temp <= Flex_UpperLimit))
+                            Result++;
+                    }
+                } else {
+                    Result++;
+                }
+                */
+                ret += sprintf(buf+ret, "%d", temp); //It's for getting log for limit set
+
+                if(j < (numberOfRx-1))
+                    ret += sprintf(buf+ret, " ");
+
+                k = k + 2;
+            }
+            ret += sprintf(buf+ret, "\n");
+        }
+        break;
+
+    case 2:
+        k = 0;
+        for (i = 0; i < numberOfTx; i++) {
+            for (j = 0; j < numberOfRx; j++) {
+                temp = (short)(ImageBuffer[k] | (ImageBuffer[k+1] << 8));
+
+                if (temp > TSPCheckLimit) {
+                    ret += sprintf(buf+ret, "1");
+                    //Result++;
+                } else {
+                    ret += sprintf(buf+ret, "0");
+                }
+
+                if(j < (numberOfRx-1))
+                    ret += sprintf(buf+ret, " ");
+
+                k = k + 2;
+            }
+            ret += sprintf(ret+buf, "\n");
+        }
+        break;
+
+    case 3:
+    case 4:
+        k = 0;
+
+        for (i = 0; i < numberOfTx; i++) {
+            for (j = 0; j < numberOfRx; j++) {
+                ImageArray[i][j] = (short)(ImageBuffer[k] | (ImageBuffer[k+1] << 8));
+                k = k + 2;
+            }
+        }
+
+        for (i = 0; i < numberOfTx; i++) {
+            //ret += sprintf(buf+ret, "TX%d\t", TxChannelUsed[i]);
+            for (j = 0; j < numberOfRx; j++) {
+                ret += sprintf(buf+ret, "%d", ((mode == 3) ? (ImageArray[i][j] / 1000) : (ImageArray[i][j])));
+
+                if(j < (numberOfRx - 1))
+                    ret += sprintf(buf+ret, " ");
+            }
+            ret += sprintf(ret+buf, "\n");
+        }
+        break;
+
+    default:
+        break;
+    }
+    //if (mode < 3)
+    /*
+    {
+        //Reset
+        command = 0x01;
+        writeRMI(F01_Cmd_Base, &command, 1);
+        //delayMS(200);
+        delayMS(1);
+        readRMI(F01_Data_Base+1, &command, 1); //Read Interrupt status register to Interrupt line goes to high
+    }
+    */
+    return ret;
+}
+#endif
+