示例#1
0
文件: debug.c 项目: 0xBADCA7/lk
/* Ideally this would be generic, but different platforms have varying manners of handling gpio
 * numbers / banks etc. Nvidia uses A-F, ST uses # and ports, Xilinx uses #s and banks. Etc.
 */
static int cmd_gpio(int argc, const cmd_args *argv)
{
    if (argc == 4 && !strcmp(argv[1].str,"set")) {
        unsigned int gpio = argv[2].u;
        unsigned int value = argv[3].u;

        gpio_set(gpio, value);
    } else if (argc == 3 && !strcmp(argv[1].str,"get")) {
        unsigned int gpio = argv[2].u;

        printf("gpio %u: %d\n", gpio, gpio_get(gpio));
    } else if (argc >= 3 && !strcmp(argv[1].str,"cfg")) {
        unsigned int gpio = argv[2].u;
        unsigned int flags = 0;

        for (int i = 3; i < argc; i++) {
            flags |= get_flag_value(argv[i].str);
        }

        gpio_config(gpio, flags);
    } else {
        printf("gpio set <gpio #> <value>\n");
        printf("gpio get <gpio #>\n");
        printf("gpio cfg <gpio #> [flags: ");
        for (unsigned int i = 0; i < countof(gpio_flag_labels); i++) {
            printf("%s ", gpio_flag_labels[i].label);
        }
        putchar(']');
        putchar('\n');
    }

    return 0;
}
static int ulinker_check_cdc_rndis_status(void)
{
	int ret = 1;

	bdbg_rndis_check(stderr, "\n[%s] checking...\n", __FUNC__, ret);

	ret = get_flag_value(ULINKER_CDC_RNDIS_STATUS_FLAG);

	bdbg_rndis_check(stderr, "[%s] rndis status[%d]\n", __FUNC__, ret);

	return ret;
}
static int ulinker_get_decided_mode()
{
	int mode;
	int auto_wan;
	apmib_get(MIB_ULINKER_AUTO, (void *)&auto_wan);

	if (auto_wan == 1)
		mode = get_flag_value(ULINKER_MODE_FLAG);
	else {
	#if 0
		int op_mode, wan_mode, dhcp_mode, wlan_mode;
		apmib_get(MIB_OP_MODE, (void *)&op_mode);
		apmib_get(MIB_WAN_DHCP, (void *)&wan_mode);
		apmib_get(MIB_DHCP, (void *)&dhcp_mode);
		apmib_get(MIB_WLAN_MODE, (void *)&wlan_mode);

		if (op_mode == 0) {
			mode = ULINKER_RT_DHCP_MODE:
			mode = ULINKER_RT_PPPOE_MODE:
		}
		else if (op_mode == 1) {
static int dhcps_discover(int val)
{
	int dhcps_exist = 0;
	int round = val;
	int mode;
	int ping_ok;

	int op_ori, wan_ori, dhcp_ori, wlan_ori;
	int op_mode, wan_mode, dhcp_mode, wlan_mode;

	bdbg_dhcps_discover(stderr, "\n[%s] dhcp server discovering...\n", __FUNC__);

	system("brctl delif br0 eth1 >/dev/null 2>&1");

	/* backup current mode */
	apmib_get(MIB_OP_MODE, (void *)&op_ori);
	apmib_get(MIB_WAN_DHCP, (void *)&wan_ori);
	apmib_get(MIB_DHCP, (void *)&dhcp_ori);
	apmib_get(MIB_WLAN_MODE, (void *)&wlan_ori);

	/* set dut to gateway mode for execute dhcp server discover*/
	op_mode   = GATEWAY_MODE;
	wan_mode  = DHCP_CLIENT;
	dhcp_mode = DHCP_SERVER;
	wlan_mode = AP_MODE;

	apmib_set(MIB_OP_MODE, (void *)&op_mode);
	apmib_set(MIB_WAN_DHCP, (void *)&wan_mode);
	apmib_set(MIB_DHCP, (void *)&dhcp_mode);
	apmib_set(MIB_WLAN_MODE, (void *)&wlan_mode);

	clean_dhcps_discover();
	set_eth1_mac();
	eth1_up();

	while (round > 0) {
		stop_dhcpc();
		system("udhcpc -d 2 -i eth1 -p /etc/udhcpc/udhcpc-eth1.pid -s /usr/share/udhcpc/br0.bound >/dev/null 2>&1");
		dhcps_exist = get_flag_value(ULINKER_DHCPS_DISCOVER_FLAG);
		round--;
		if (dhcps_exist == 3) {
			dhcps_exist = 1;
			break;
		}
		else {
			dhcps_exist = 0;
		}
	}

	/* restore mode */
	apmib_set(MIB_OP_MODE, (void *)&op_ori);
	apmib_set(MIB_WAN_DHCP, (void *)&wan_ori);
	apmib_set(MIB_DHCP, (void *)&dhcp_ori);
	apmib_set(MIB_WLAN_MODE, (void *)&wlan_ori);

	stop_dhcpc();
	//eth1_down();
	clean_dhcps_discover();

	bdbg_dhcps_discover(stderr, "[%s] dhcp server result[%d]\n", __FUNC__, dhcps_exist);

	return dhcps_exist;
}