This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

ADC interfacing with http-server

Other Parts Discussed in Thread: EK-TM4C1294XL

Hello everyone, i want access adc value through writing CGI using http server, i am getting "0" value on cgi through html browser when accesses either i am not formatting data properly or what  is wrong with my code here is my code attached

/*
 * Copyright (c) 2015, Texas Instruments Incorporated
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 * *  Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 *
 * *  Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 *
 * *  Neither the name of Texas Instruments Incorporated nor the names of
 *    its contributors may be used to endorse or promote products derived
 *    from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

/*
 *  ======== empty.c ========
 */
/* XDCtools Header files */
#include <xdc/std.h>
#include <xdc/runtime/System.h>
#include<stdio.h>
#include <stdbool.h>
#include "inc/hw_ints.h"
#include "inc/hw_memmap.h"
#include "inc/hw_pwm.h"
#include "inc/hw_types.h"
#include "driverlib/gpio.h"
#include "driverlib/pwm.h"
#include "driverlib/sysctl.h"
#include "driverlib/adc.h"
/* BIOS Header files */
#include <ti/sysbios/BIOS.h>
#include <ti/sysbios/knl/Task.h>
    #include <ti/ndk/inc/netmain.h>
  #include "index.h"
#include"greetings.h"
#include"chip.h"
//#include"getLEDSTATUS.h"
/* TI-RTOS Header files */
 #include <ti/drivers/EMAC.h>
#include <ti/drivers/GPIO.h>
// #include <ti/drivers/I2C.h>
// #include <ti/drivers/SDSPI.h>
// #include <ti/drivers/SPI.h>
// #include <ti/drivers/UART.h>
// #include <ti/drivers/USBMSCHFatFs.h>
// #include <ti/drivers/Watchdog.h>
// #include <ti/drivers/WiFi.h>

/* Board Header file */
#include "Board.h"

#define TASKSTACKSIZE   512

Task_Struct task0Struct;
Char task0Stack[TASKSTACKSIZE];


		 uint32_t adc_value[4];

char bufer[4];
	 //volatile float signal_ch0,signal_ch1,signal_ch2,signal_ch3;


/*
 *  ======== heartBeatFxn ========
 *  Toggle the Board_LED0. The Task_sleep is determined by arg0 which
 *  is configured for the heartBeat Task instance.
 */
Void heartBeatFxn(UArg arg0, UArg arg1)
{
    while (1) {
        Task_sleep((unsigned int)arg0);
        GPIO_toggle(Board_LED0);
    }
}

/*
 *  ======== main ========
 */

   Int getTime(SOCKET s, int length)
   {
       Char buf[200];
       //static UInt scalar = 0;


       httpSendStatusLine(s, HTTP_OK, CONTENT_TYPE_HTML);
       httpSendClientStr(s, CRLF);
       httpSendClientStr(s,
           "<html><head><title>DATA ACQUSITIONS "\
   	"Time</title></head><body><h1>ADC CHANNEL</h1>\n");

       System_sprintf(buf,"%d",adc_value[0]);
                   httpSendClientStr(s, buf);

            System_sprintf(buf,"%d",adc_value[1]);
            httpSendClientStr(s, buf);

       httpSendClientStr(s, "</table></body></html>");
       return (1);
   }
   Void AddWebFiles(Void)
      {
          //Note: both INDEX_SIZE and INDEX are defined in index.h
          efs_createfile("index.html", INDEX_SIZE, (UINT8 *)INDEX);
          efs_createfile("getTime.cgi", 0, (UINT8 *)&getTime);
          efs_createfile("chip.jpg", CHIP_SIZE,(UINT8 *)CHIP);
          efs_createfile("greetings.html", GREETINGS_SIZE,(UINT8 *)GREETINGS);
      }

      Void RemoveWebFiles(Void)

      {
          efs_destroyfile("index.html");
          efs_destroyfile("getTime.cgi");
          efs_destroyfile("chip.jpg");
          efs_destroyfile("greetings.html");
      }

int main(void)
{
    Task_Params taskParams;
    /* Call board init f
     *
     *
     *unctions */
    Board_initGeneral();
     Board_initEMAC();
    Board_initGPIO();
    // Board_initI2C();
    // Board_initSDSPI();
    // Board_initSPI();
    // Board_initUART();
    // Board_initUSB(Board_USBDEVICE);
    // Board_initUSBMSCHFatFs();
    // Board_initWatchdog();
    // Board_initWiFi();

    /* Construct heartBeat Task  thread */
    Task_Params_init(&taskParams);
    taskParams.arg0 = 1000;
    taskParams.stackSize = TASKSTACKSIZE;
    taskParams.stack = &task0Stack;
    Task_construct(&task0Struct, (Task_FuncPtr)heartBeatFxn, &taskParams, NULL);

     /* Turn on user LED */
    GPIO_write(Board_LED0, Board_LED_ON);

    	uint32_t adc_value[4];
    		 volatile uint32_t adc0,adc1,adc2,adc3;
    GPIOPinTypeADC(GPIO_PORTE_BASE,GPIO_PIN_4);
    GPIOPinTypeADC(GPIO_PORTE_BASE,GPIO_PIN_5);
    GPIOPinTypeADC(GPIO_PORTB_BASE,GPIO_PIN_4);
    GPIOPinTypeADC(GPIO_PORTB_BASE,GPIO_PIN_5);

    SysCtlPeripheralEnable(SYSCTL_PERIPH_ADC0);



    ADCSequenceConfigure(ADC0_BASE,2,ADC_TRIGGER_PROCESSOR,0);  //CONFIGURE THE ADC SAMPLE SEQUENCER THAT U WANA USE

    ADCSequenceStepConfigure(ADC0_BASE,2,0, ADC_CTL_CH9 );		//CONFIGURE THE STEPS OF SAMPLE SEQUENCER

    ADCSequenceStepConfigure(ADC0_BASE,2,1, ADC_CTL_CH8 );		//

    ADCSequenceStepConfigure(ADC0_BASE,2,2, ADC_CTL_CH10 );		//

    ADCSequenceStepConfigure(ADC0_BASE,2,3, ADC_CTL_CH11|ADC_CTL_IE|ADC_CTL_END );

    ADCSequenceEnable(ADC0_BASE, 2);

    ADCProcessorTrigger(ADC0_BASE,2);

    while(!ADCIntStatus(ADC0_BASE, 2, false))
    {
    }


    ADCIntClear(ADC0_BASE,2);
    ADCSequenceDataGet(ADC0_BASE,2,adc_value);



GPIO_write(Board_LED0, Board_LED_ON);




    System_printf("Starting the example\nSystem provider is set to SysMin. "
                  "Halt the target to view any SysMin contents in ROV.\n");
    /* SysMin will only print to the console when you call flush or exit */
    System_flush();

    /* Start BIOS */
    BIOS_start();

    return (0);
}

  • Hi Haroon,
    Can you confirm by setting a breakpoint in CCS that the value of adc_value[0] is not 0? Your code looks ok as far as I can tell.
    Thanks,
    Janet
  • Thanks for help out,

    I have spotted my error as i declare the vaiable adc_value[4] twice in code as you can see it on line number 76 and 186 declared in main fucntion as well as globally on the top, after removal of code i have got my code working.


    My second Question is this how can display data on webpage without CGI and SSI as you know that it is not currently supported by TI_RTOS feature ?

    My third question is that Where can i find the nice tutorial for building GUI for touch screen LCD interface to be used in Data Acquisition System based on TM4C1294XL. Does QT or what framework is best to opt for GUI development for paractical application development .


    Regards

    Haroon

  • Hi Haroon,
    I don't think there is any other way to display the data without CGI as in the example code you have above. The NDK's http server is very simple.
    Best regards,
    Janet
  • Thanks for replying.
    Can i use the java script with html to display data of tm4c device webpage. i have one example based tm4c1294, i wanna confirm that can i do this kind of work with RTOS-http server using CGI ,here is the sample code :







    Skip to content
    Personal
    Open source
    Business
    Explore
    Pricing
    Blog
    Support
    This repository

    19
    45

    67

    yuvadm/tiva-c
    Code
    Issues 1
    Pull requests 0
    Pulse
    Graphs
    tiva-c/boards/ek-tm4c1294xl/enet_io/fs/javascript.js
    ac4fd8e on Mar 16, 2014
    @yuvadm yuvadm Add ek-tm4c1294xl example projects
    192 lines (174 sloc) 4.35 KB
    <!-- Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. -->

    window.onload = function()
    {
    document.getElementById('about').onclick = loadAbout;
    document.getElementById('overview').onclick = loadOverview;
    document.getElementById('block').onclick = loadBlock;
    document.getElementById('io_http').onclick = loadIOHttp;
    }

    function loadAbout()
    {
    loadPage("about.htm");
    return false;
    }

    function loadOverview()
    {
    loadPage("overview.htm");
    return false;
    }

    function loadBlock()
    {
    loadPage("block.htm");
    return false;
    }

    function loadIOHttp()
    {
    loadPage("io_http.htm");
    ledstateGet();
    speedGet();
    return false;
    }

    function SetFormDefaults()
    {
    document.iocontrol.LEDOn.checked = ls;
    document.iocontrol.speed_percent.value = sp;
    }

    function toggle_led()
    {
    var req = false;

    function ToggleComplete()
    {
    if(req.readyState == 4)
    {
    if(req.status == 200)
    {
    document.getElementById("ledstate").innerHTML = "<div>" +
    req.responseText + "</div>";
    }
    }
    }

    if(window.XMLHttpRequest)
    {
    req = new XMLHttpRequest();
    }
    else if(window.ActiveXObject)
    {
    req = new ActiveXObject("Microsoft.XMLHTTP");
    }
    if(req)
    {
    req.open("GET", "/cgi-bin/toggle_led?id" + Math.random(), true);
    req.onreadystatechange = ToggleComplete;
    req.send(null);
    }
    }

    function speedSet()
    {
    var req = false;
    var speed_txt = document.getElementById("speed_percent");
    function speedComplete()
    {
    if(req.readyState == 4)
    {
    if(req.status == 200)
    {
    document.getElementById("current_speed").innerHTML =
    "<div>" + req.responseText + "</div>";
    }
    }
    }
    if(window.XMLHttpRequest)
    {
    req = new XMLHttpRequest();
    }
    else if(window.ActiveXObject)
    {
    req = new ActiveXObject("Microsoft.XMLHTTP");
    }
    if(req)
    {
    req.open("GET", "/cgi-bin/set_speed?percent=" + speed_txt.value +
    "&id" + Math.random(), true);
    req.onreadystatechange = speedComplete;
    req.send(null);
    }
    }

    function ledstateGet()
    {
    var led = false;
    function ledComplete()
    {
    if(led.readyState == 4)
    {
    if(led.status == 200)
    {
    document.getElementById("ledstate").innerHTML = "<div>" +
    led.responseText + "</div>";
    }
    }
    }

    if(window.XMLHttpRequest)
    {
    led = new XMLHttpRequest();
    }
    else if(window.ActiveXObject)
    {
    led = new ActiveXObject("Microsoft.XMLHTTP");
    }
    if(led)
    {
    led.open("GET", "/ledstate?id=" + Math.random(), true);
    led.onreadystatechange = ledComplete;
    led.send(null);
    }
    }

    function speedGet()
    {
    var req = false;
    function speedReturned()
    {
    if(req.readyState == 4)
    {
    if(req.status == 200)
    {
    document.getElementById("current_speed").innerHTML = "<div>" + req.responseText + "</div>";
    }
    }
    }

    if(window.XMLHttpRequest)
    {
    req = new XMLHttpRequest();
    }
    else if(window.ActiveXObject)
    {
    req = new ActiveXObject("Microsoft.XMLHTTP");
    }
    if(req)
    {
    req.open("GET", "/get_speed?id=" + Math.random(), true);
    req.onreadystatechange = speedReturned;
    req.send(null);
    }
    }

    function loadPage(page)
    {
    if(window.XMLHttpRequest)
    {
    xmlhttp = new XMLHttpRequest();
    }
    else
    {
    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }

    xmlhttp.open("GET", page, true);
    xmlhttp.setRequestHeader("Content-type",
    "application/x-www-form-urlencoded");
    xmlhttp.send();

    xmlhttp.onreadystatechange = function ()
    {
    if((xmlhttp.readyState == 4) && (xmlhttp.status == 200))
    {
    document.getElementById("content").innerHTML = xmlhttp.responseText;
    }
    }
    }

    Contact GitHub API Training Shop Blog About

    © 2016 GitHub, Inc. Terms Privacy Security Status Help

    Regards
    Haroon
  • Hi Haroon,
    I can't tell from the code whether or not this will work, so I think you'll just have to try it out.
    Best regards,
    Janet
  • Haroon,
    that JavaScript code runs in a browser, so the HTTP server only sees GET requests that are being sent. But, it's up to you to implement the CGI code referenced in these requests. The example from which you got that code is for a HTTP server which is not built for TI-RTOS, and if you wanted to use that server you would have to port it to SYS/BIOS. There are older posts on the forum where users asked about porting that server, but I am not aware of anyone who actually did it -  .

    Another option is that you just add whatever CGI code you need to the existing TI-RTOS HTTP server. I already posted a link in one of your threads.