#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include"stereopsis.h"
#include"device.h"
#include"sys_time.h"
void search_stereopsis(int *gpio_num)
{
FILE *fp;
char buffer[2][80];
char delims[] = "/";
char *result = NULL;
char *path_res = NULL;
int i, j = 0;
gpio_num[0] = 0;
gpio_num[1] = 0;
fp = popen("grep -rn '2207' /sys/bus/usb/devices/*/idVendor", "r");
if(!fp)
{
debug(DEBUG_TAG" popen failed!!\n");
return -1;
}
while(fgets(buffer[i], sizeof(buffer[i]), fp) != NULL )
{
i += 1;
}
pclose(fp);
for(j = 0; j < i; j++)
{
if(strlen(buffer[j]) == 0)
{
debug(DEBUG_TAG" buffer len is 0!!\n");
return -1;
}
result = strtok(buffer[j], delims);
if(result == NULL)
return -1;
while(result != NULL)
{
if(result[1] == '-')
{
path_res = result;
}
if(strlen(result) <= 2)
{
return -1;
}
result = strtok(NULL, delims);
}
if(path_res == NULL)
return -1;
if (!strncmp(path_res, "1-1.1", strlen(path_res)))
gpio_num[j] = POWER_GPIO_USB2_2;
else if (!strncmp(path_res, "1-1.2", strlen(path_res)))
gpio_num[j] = POWER_GPIO_USB2_1;
else if (path_res[4] == '4')
gpio_num[j] = POWER_GPIO_USB3_4;
else if (path_res[4] == '3')
gpio_num[j] = POWER_GPIO_USB3_3;
else if (path_res[4] == '2')
gpio_num[j] = 42;
else if (path_res[4] == '1')
gpio_num[j] = 41;
}
}
int gpio_power_operation(int file_echo_cmd, int gpio)
{
char cmd[60];
int ret;
if (file_echo_cmd == CMD_GPIO_EXPORT)
{
sprintf(cmd, "find /sys/class/gpio/gpio%d >/dev/null 2>&1", gpio);
if(!system(cmd))
{
return 0;
}
sprintf(cmd, "echo %d >/sys/class/gpio/export", gpio);
ret = system(cmd);
}
else if (file_echo_cmd == CMD_GPIO_DIRECTION)
{
sprintf(cmd, "echo out >/sys/class/gpio/gpio%d/direction", gpio);
system(cmd);
}
else if (file_echo_cmd == CMD_GPIO_VALUE)
{
sprintf(cmd, "echo 0 >/sys/class/gpio/gpio%d/value", gpio);
system(cmd);
sleep(2);
sprintf(cmd, "echo 1 >/sys/class/gpio/gpio%d/value", gpio);
system(cmd);
}
return 0;
}
int stereopsis_power_up(int gpio_num)
{
#if DBG_EN == 1
debug(DEBUG_TAG" the usb-gpio %d of stereopsis power up!!!\n", gpio_num);
#endif
gpio_power_operation(CMD_GPIO_EXPORT, gpio_num);
gpio_power_operation(CMD_GPIO_VALUE, gpio_num);
#if DBG_EN == 1
debug(DEBUG_TAG" usb-gpio power up over\n");
#endif
}
void check_stereopsis_loop(int* stereopsis_gpios, int* devices_gpio_list, int* stereopsis_gpio_save)
{
int i, first_flag = 0;
int flag_is_print = 0;
#if DBG_EN == 1
debug(DEBUG_TAG" start looking for stereopsis devices\n");
#endif
while(1)
{
sleep(1);
search_stereopsis(stereopsis_gpios);
if(flag_is_print == 0)
{
#if DBG_EN == 1
debug(DEBUG_TAG" stereopsis_gpios[0] = %d stereopsis_gpios[1] = %d \n", stereopsis_gpios[0], stereopsis_gpios[1]);
#endif
}
modify_stereopsis_gpios(stereopsis_gpios[0], devices_gpio_list);
modify_stereopsis_gpios(stereopsis_gpios[1], devices_gpio_list);
if(stereopsis_gpios[0] > 0 && stereopsis_gpios[1] > 0)
{
if(flag_is_print != 1)
debug("two stereopsis is online\n");
flag_is_print = 1;
if(first_flag == 1)
{
sleep(10);
continue;
}
else
{
first_flag = 1;
stereopsis_gpio_save[0] = stereopsis_gpios[0];
stereopsis_gpio_save[1] = stereopsis_gpios[1];
sleep(10);
continue;
}
}
else
{
if(flag_is_print != 0)
debug("stereopsis is offline\n");
flag_is_print = 0;
if(stereopsis_gpio_save[0] > 0 && stereopsis_gpio_save[1] > 0)
{
for(i=0; i<STEREOPSIS_DEVICE_TOTAL_NUM; i++)
{
if(stereopsis_gpios[0]==0 && stereopsis_gpios[1]==0)
{
stereopsis_power_up(stereopsis_gpio_save[0]);
stereopsis_power_up(stereopsis_gpio_save[1]);
break;
}
else if(stereopsis_gpios[i] == stereopsis_gpio_save[0])
{
stereopsis_power_up(stereopsis_gpio_save[1]);
}
else if(stereopsis_gpios[i] == stereopsis_gpio_save[1])
{
stereopsis_power_up(stereopsis_gpio_save[0]);
}
}
sleep(15);
continue;
}
power_all_gpio(devices_gpio_list);
sleep(10);
}
}
}
/*modify_dev_gpios_list()
mark the power gpio that it is used*/
void modify_dev_gpios_list(int dev_num, int* list) //list is two-dimension array
{
int gpio = 0;
int i = 0;
if(dev_num >= 0)
{
gpio = get_power_gpio_for_dev(dev_num);
}
for(i = 0; i < USB_NUM; i++)
{
if(gpio == list[i])
{
list[USB_NUM+i] = 1;
}
}
}
/*modify_stereopsis_gpios()
mark the power gpio of stereopsis that it is used*/
void modify_stereopsis_gpios(int gpio, int* list) //list is two-dimension array
{
int i = 0;
if(gpio <= 0)
return;
for (i = 0; i < USB_NUM; i++)
{
if(gpio == list[i])
{
list[USB_NUM+i] = 1;
}
}
}
void action_usb_ip(char *current_ip, char *udhcpc_ip, char *ip_route, int num);
void check_stereopsis_loop_nano()
{
char cmd[64];
int ret=0;
FILE *fp;
char buffer[2][80];
char buffer_udhcpc[2][80];
char buffer_route[2][80];
while(1)
{
int i=0;
sleep(1);
buffer[0][0]="\0";
//dev up
ifconfig_usb_up();
//get current ip of usb0 and usb1
fp = popen("echo -n `ifconfig usb0|grep inet|grep -v 127.0.0.1|grep 10.11.|grep -v inet6|awk '{print $2}'|tr -d \"addr:\"`", "r");
if(!fp)
{
debug(DEBUG_TAG" popen failed!!\n");
return -1;
}
while(fgets(buffer[0], sizeof(buffer[0]), fp) != NULL )
{
i += 1;
}
pclose(fp);
fp = popen("echo -n `ifconfig usb1|grep inet|grep -v 127.0.0.1|grep 10.11.|grep -v inet6|awk '{print $2}'|tr -d \"addr:\"`", "r");
if(!fp)
{
debug(DEBUG_TAG" popen failed!!\n");
return -1;
}
while(fgets(buffer[1], sizeof(buffer[1]), fp) != NULL )
{
i += 1;
}
pclose(fp);
//get udhcpc ip of usb0 and usb1
fp = popen("echo -n `busybox udhcpc -i usb0|grep Lease|awk '{print $3}'`", "r");
if(!fp)
{
debug(DEBUG_TAG" popen failed!!\n");
return -1;
}
while(fgets(buffer_udhcpc[0], sizeof(buffer_udhcpc[0]), fp) != NULL )
{
i += 1;
}
pclose(fp);
fp = popen("echo -n `busybox udhcpc -i usb1|grep Lease|awk '{print $3}'`", "r");
if(!fp)
{
debug(DEBUG_TAG" popen failed!!\n");
return -1;
}
while(fgets(buffer_udhcpc[1], sizeof(buffer_udhcpc[1]), fp) != NULL )
{
i += 1;
}
pclose(fp);
//get ip route
i=0;
fp = popen("echo -n `ip route|grep usb0|grep -v 10.0.0.0|awk '{print $1}'`", "r");
if(!fp)
{
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
usb_scan_nanopc.zip (35个子文件)
usb_scan_nanopc
sys_time.h 323B
transportcrc.c 8KB
serial.h 579B
serial.c 3KB
sys_time.c 2KB
lidar.h 189B
uart_transport.h 683B
sys_time.o 21KB
transportcrc.o 27KB
usb_scan 161KB
lidar.c 2KB
Makefile 800B
utils.o 15KB
lidar.o 20KB
usb_scan.h 417B
stereopsis.c 11KB
usb_scan.o 22KB
device.c 11KB
usb_scan.c 4KB
uart_transport.c 1KB
serial.o 18KB
stereopsis.h 660B
uart_transport.o 9KB
utils.c 1KB
device.h 2KB
transportcrc.h 649B
main.o 18KB
label.h 407B
device.o 53KB
label.o 8KB
main.c 2KB
stereopsis.o 79KB
utils.h 193B
transport.h 1002B
label.c 878B
共 35 条
- 1
资源评论
LJ-SEU
- 粉丝: 110
- 资源: 24
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功