1cd4e3c3eSJouni Malinen /* 2cd4e3c3eSJouni Malinen * Sigma Control API DUT (station/AP/sniffer) 3*9c381f59SAmarnath Hullur Subramanyam * Copyright (c) 2011-2013, 2017, Qualcomm Atheros, Inc. 4cd4e3c3eSJouni Malinen * All Rights Reserved. 5cd4e3c3eSJouni Malinen * Licensed under the Clear BSD license. See README for more details. 6cd4e3c3eSJouni Malinen */ 7cd4e3c3eSJouni Malinen 8cd4e3c3eSJouni Malinen #include "sigma_dut.h" 9*9c381f59SAmarnath Hullur Subramanyam #include "miracast.h" 10cd4e3c3eSJouni Malinen 11cd4e3c3eSJouni Malinen 12cd4e3c3eSJouni Malinen static int cmd_dev_send_frame(struct sigma_dut *dut, struct sigma_conn *conn, 13cd4e3c3eSJouni Malinen struct sigma_cmd *cmd) 14cd4e3c3eSJouni Malinen { 15*9c381f59SAmarnath Hullur Subramanyam #ifdef MIRACAST 16*9c381f59SAmarnath Hullur Subramanyam const char *program = get_param(cmd, "Program"); 17*9c381f59SAmarnath Hullur Subramanyam 18*9c381f59SAmarnath Hullur Subramanyam if (program && (strcasecmp(program, "WFD") == 0 || 19*9c381f59SAmarnath Hullur Subramanyam strcasecmp(program, "DisplayR2") == 0)) 20*9c381f59SAmarnath Hullur Subramanyam return miracast_dev_send_frame(dut, conn, cmd); 21*9c381f59SAmarnath Hullur Subramanyam #endif /* MIRACAST */ 22*9c381f59SAmarnath Hullur Subramanyam 23cd4e3c3eSJouni Malinen if (dut->mode == SIGMA_MODE_STATION || 24cd4e3c3eSJouni Malinen dut->mode == SIGMA_MODE_UNKNOWN) { 25cd4e3c3eSJouni Malinen sigma_dut_print(dut, DUT_MSG_DEBUG, "Convert " 26cd4e3c3eSJouni Malinen "dev_send_frame to sta_send_frame"); 27cd4e3c3eSJouni Malinen return cmd_sta_send_frame(dut, conn, cmd); 28cd4e3c3eSJouni Malinen } 29cd4e3c3eSJouni Malinen 30cd4e3c3eSJouni Malinen if (dut->mode == SIGMA_MODE_AP) { 31cd4e3c3eSJouni Malinen sigma_dut_print(dut, DUT_MSG_DEBUG, "Convert " 32cd4e3c3eSJouni Malinen "dev_send_frame to ap_send_frame"); 33cd4e3c3eSJouni Malinen return cmd_ap_send_frame(dut, conn, cmd); 34cd4e3c3eSJouni Malinen } 35cd4e3c3eSJouni Malinen 36cd4e3c3eSJouni Malinen #ifdef CONFIG_WLANTEST 37cd4e3c3eSJouni Malinen sigma_dut_print(dut, DUT_MSG_DEBUG, "Convert dev_send_frame to " 38cd4e3c3eSJouni Malinen "wlantest_send_frame"); 39cd4e3c3eSJouni Malinen return cmd_wlantest_send_frame(dut, conn, cmd); 40cd4e3c3eSJouni Malinen #else /* CONFIG_WLANTEST */ 41cd4e3c3eSJouni Malinen send_resp(dut, conn, SIGMA_ERROR, 42cd4e3c3eSJouni Malinen "errorCode,Unsupported dev_send_frame"); 43cd4e3c3eSJouni Malinen return 0; 44cd4e3c3eSJouni Malinen #endif /* CONFIG_WLANTEST */ 45cd4e3c3eSJouni Malinen } 46cd4e3c3eSJouni Malinen 47cd4e3c3eSJouni Malinen 48cd4e3c3eSJouni Malinen static int cmd_dev_set_parameter(struct sigma_dut *dut, struct sigma_conn *conn, 49cd4e3c3eSJouni Malinen struct sigma_cmd *cmd) 50cd4e3c3eSJouni Malinen { 51cd4e3c3eSJouni Malinen const char *device = get_param(cmd, "Device"); 52cd4e3c3eSJouni Malinen 53cd4e3c3eSJouni Malinen if (device && strcasecmp(device, "STA") == 0) { 54cd4e3c3eSJouni Malinen sigma_dut_print(dut, DUT_MSG_DEBUG, "Convert " 55cd4e3c3eSJouni Malinen "dev_set_parameter to sta_set_parameter"); 56cd4e3c3eSJouni Malinen return cmd_sta_set_parameter(dut, conn, cmd); 57cd4e3c3eSJouni Malinen } 58cd4e3c3eSJouni Malinen 59cd4e3c3eSJouni Malinen return -1; 60cd4e3c3eSJouni Malinen } 61cd4e3c3eSJouni Malinen 62cd4e3c3eSJouni Malinen 63*9c381f59SAmarnath Hullur Subramanyam static int cmd_dev_exec_action(struct sigma_dut *dut, struct sigma_conn *conn, 64*9c381f59SAmarnath Hullur Subramanyam struct sigma_cmd *cmd) 65*9c381f59SAmarnath Hullur Subramanyam { 66*9c381f59SAmarnath Hullur Subramanyam #ifdef MIRACAST 67*9c381f59SAmarnath Hullur Subramanyam const char *program = get_param(cmd, "Program"); 68*9c381f59SAmarnath Hullur Subramanyam 69*9c381f59SAmarnath Hullur Subramanyam if (program && (strcasecmp(program, "WFD") == 0 || 70*9c381f59SAmarnath Hullur Subramanyam strcasecmp(program, "DisplayR2") == 0)) 71*9c381f59SAmarnath Hullur Subramanyam return miracast_dev_exec_action(dut, conn, cmd); 72*9c381f59SAmarnath Hullur Subramanyam #endif /* MIRACAST */ 73*9c381f59SAmarnath Hullur Subramanyam 74*9c381f59SAmarnath Hullur Subramanyam return -2; 75*9c381f59SAmarnath Hullur Subramanyam } 76*9c381f59SAmarnath Hullur Subramanyam 77*9c381f59SAmarnath Hullur Subramanyam 78cd4e3c3eSJouni Malinen static int req_intf_prog(struct sigma_cmd *cmd) 79cd4e3c3eSJouni Malinen { 80cd4e3c3eSJouni Malinen if (get_param(cmd, "interface") == NULL) 81cd4e3c3eSJouni Malinen return -1; 82cd4e3c3eSJouni Malinen if (get_param(cmd, "program") == NULL) 83cd4e3c3eSJouni Malinen return -1; 84cd4e3c3eSJouni Malinen return 0; 85cd4e3c3eSJouni Malinen } 86cd4e3c3eSJouni Malinen 87cd4e3c3eSJouni Malinen 88cd4e3c3eSJouni Malinen void dev_register_cmds(void) 89cd4e3c3eSJouni Malinen { 90cd4e3c3eSJouni Malinen sigma_dut_reg_cmd("dev_send_frame", req_intf_prog, cmd_dev_send_frame); 91cd4e3c3eSJouni Malinen sigma_dut_reg_cmd("dev_set_parameter", req_intf_prog, 92cd4e3c3eSJouni Malinen cmd_dev_set_parameter); 93*9c381f59SAmarnath Hullur Subramanyam sigma_dut_reg_cmd("dev_exec_action", req_intf_prog, 94*9c381f59SAmarnath Hullur Subramanyam cmd_dev_exec_action); 95cd4e3c3eSJouni Malinen } 96