xref: /wlan-dirver/utils/sigma-dut/dev.c (revision 9c381f5922d50eb325775639b37ba9e38238102d)
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