发 帖  
原厂入驻New
【宇外星空调试日志】boa服务器上利用cgic方式控制开发板led灯
2020-3-27 16:31:20  347
分享
前面我已经发贴讲述了如何控制LED的方法。这里只是多加了一层boa服务器上cgic的方法,cgic的方式其实还是由点击浏览器产生的动作调用cgic的应用程序,而这个应用程序再去操作led。先更新开发板的index.html,代码如下:
  1. <html>
  2. <head>
  3. <title> zynq boa server demo</title>
  4. </head>
  5.   <body>
  6.    <h1>jonas~~ this is a boa server on zynq platform.</h1>      
  7.    LED <a href=/cgi-bin/cgic_led.cgi> here </a>
  8.    <br>
  9.    CGITEST DEMO <a href=/cgi-bin/cgictest.cgi> here </a>
  10.    <br>
  11.   </body>
  12. </html>
复制代码
LED <a href=/cgi-bin/cgic_led.cgi> here </a>这句话产生一个链接,点击此链接就可以调用cgic_led.cgi这个应用程序。接下来编写cgic_led.c
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <sys/types.h>
  4. #include <sys/stat.h>
  5. #include <fcntl.h>
  6. #define MAX_BUF 64
  7. #define NAME_MAX_LENGTH                64

  8. #define    INPUT_EVENT    "/dev/input/event1"
  9. void led_settrigger()
  10. {
  11.         int ret;
  12.         int fd;
  13.         int fd1;
  14.        
  15.         fd = open("/sys/class/leds/usr_led1/brightness",O_WRONLY);
  16.         char tri[NAME_MAX_LENGTH] = "none";
  17.         printf("set trigger to none\n");
  18.         IF (fd < 0) {
  19.                 printf("Can't open this led\n");
  20.                
  21.         }
  22.         ret = write(fd, "none", strlen(tri));
  23.         if (ret != strlen(tri)) {
  24.                 printf("Can't wright\n");
  25.                 close(fd);
  26.                
  27.         }

  28.         close(fd);
  29. }

  30. void led_bright(int brightness)
  31. {
  32.         int ret;
  33.         int fd = open("/sys/class/leds/usr_led1/brightness", O_WRONLY);
  34.         char br_str[2] = {0};
  35.        
  36.         br_str[0] = '0' + brightness;
  37.        
  38.         if (fd < 0) {
  39.                 printf("Can't open this led\n");
  40.                 //return -1;
  41.         }
  42.        
  43.         ret = write(fd, br_str, sizeof(br_str));
  44.         if (ret != sizeof(br_str)) {
  45.                 printf("Can't open this led\n");
  46.                 //return -1;
  47.         }
  48.         close(fd);

  49. }
  50.                                                
  51. int testleds(void)
  52. {
  53.      int fd = -1;
  54.         unsigned char i=0;
  55.         unsigned char buf;
  56.                 led_bright(1);
  57.         return 0;            
  58. }


  59. int main(void)
  60. {
  61.         led_settrigger();
  62.        
  63.    printf("Content-Type:text/html;charset=gb2312 \n\n");
  64.    printf("\n");
  65.    printf("\n");
  66.    printf(" \n");
  67.    printf("\n");
  68.    printf("\n");
  69.    printf("调用 LED 设备");
  70.    printf("LED 点亮。");
  71.    testleds();
  72.    printf("\n");
  73.    printf("\n");
  74.    printf("\n");
  75.    return (0);
  76. }
复制代码

在写好cgic_led.c的调用程序后,可以在cgic目录下使用下面的命令进行编译
ARM-xilinx-linux-gnueabi-gcc  -o cgic_led.cgi cgic_led.c
编译完成的cgic_led.cgi拷贝到tftp准备烧入开发板。
然后将开发板的index.html(路径)和cgic_led.cgi(路径在var/www/cgi-bin中)
更新即可.
然后点击192.168.1.10(IP地址可以自己定),然后点击led后面的here链接,即实现跳转,同时开发板的led灯点亮。
引申问题:
1、开发板的信息如何上报服务器。
2、浏览器如何传参数给cgic应用程序。
3、在开发板别的C程序如何获得浏览器传递给cgic应用程序的变量呢?


0
2020-3-27 16:31:20   评论 分享淘帖
1 个讨论
不管是什么cgi,都要有html的触发,这个触发可以是超链接触发也可以是form表的action触发。只要触发了,就执行这个cgi文件。而cgi文件可以执行各种嵌入式板子的操作,最后如果想反馈回页面只需使用cigout指令打印相应的html语言。
2020-4-10 11:26:49 评论

举报

只有小组成员才能发言,加入小组>>

78个成员聚集在这个小组

加入小组

创建小组步骤

关闭

站长推荐 上一条 /7 下一条

快速回复 返回顶部 返回列表