File:  [ELWIX - Embedded LightWeight unIX -] / embedtools / src / athctl.c
Revision 1.1.2.2: download - view: text, annotated - select for diffs - revision graph
Sat Oct 23 01:50:49 2010 UTC (13 years, 8 months ago) by misho
Branches: tools1_0

added 1st modes

    1: /*************************************************************************
    2:  * (C) 2010 AITNET - Sofia/Bulgaria - <office@aitbg.com>
    3:  *  by Michael Pounov <misho@aitbg.com>
    4:  *
    5:  * $Author: misho $
    6:  * $Id: athctl.c,v 1.1.2.2 2010/10/23 01:50:49 misho Exp $
    7:  *
    8:  *************************************************************************/
    9: #include "global.h"
   10: #include "athctl.h"
   11: 
   12: 
   13: int Verbose;
   14: extern char compiled[], compiledby[], compilehost[];
   15: 
   16: 
   17: static void
   18: Usage()
   19: {
   20: 	printf(	"athCtl is tool for Atheros WiFi cards managment \n"
   21: 		"=== %s === %s@%s ===\n\n"
   22: 		"  Syntax: athctl [options] [exec_file]\n\n"
   23: 		"\t-v\t\tVerbose ...\n"
   24: 		"\t-t\t\tGet current Atheros maximum range in meters\n"
   25: 		"\t-i <iface_no>\tApply to this Atheros interface number (like ath0 == 0)\n"
   26: 		"\t-d <distance>\tMode distance, meters to target\n"
   27: 		"\t-c <timeout>\tMode distance, mS timeouts correction\n"
   28: 		"\n", compiled, compiledby, compilehost);
   29: }
   30: 
   31: static int
   32: calcDistance(int ifid, int dist, int cor)
   33: {
   34: 	int slottime[2], timeout[2];
   35: 	size_t len;
   36: 	char szStr[STRSIZ];
   37: 
   38: 	slottime[0] = 9 + (dist / 300) + (dist % 300 ? 1 : 0);
   39: 	timeout[0] = slottime[0] * 2 + 3 + cor;
   40: 	VERB(3) printf("Info:: slottime=%d timeout=%d\n", slottime[0], timeout[0]);
   41: 
   42: 	memset(szStr, 0, STRSIZ);
   43: 	snprintf(szStr, STRSIZ, SC_SLOTTIME, ifid);
   44: 	if (sysctlbyname(szStr, NULL, &len, NULL, 0) == -1) {
   45: 		printf("Error:: get sysctl %s #%d - %s\n", szStr, errno, strerror(errno));
   46: 		return -1;
   47: 	} else if (sysctlbyname(szStr, &slottime[1], &len, NULL, 0) == -1) {
   48: 		printf("Error:: get sysctl %s #%d - %s\n", szStr, errno, strerror(errno));
   49: 		return -1;
   50: 	} else if (sysctlbyname(szStr, NULL, NULL, &slottime[0], sizeof slottime[0]) == -1) {
   51: 		printf("Error:: set sysctl %s from %d #%d - %s\n", szStr, slottime[1], 
   52: 				errno, strerror(errno));
   53: 		return -1;
   54: 	} else
   55: 		VERB(1) printf("Info:: set slottime(%d) from %d to %d ... OK!\n", len, 
   56: 				slottime[1], slottime[0]);
   57: 
   58: 	memset(szStr, 0, STRSIZ);
   59: 	snprintf(szStr, STRSIZ, SC_ACKTIMEOUT, ifid);
   60: 	if (sysctlbyname(szStr, NULL, &len, NULL, 0) == -1) {
   61: 		printf("Error:: get sysctl %s #%d - %s\n", szStr, errno, strerror(errno));
   62: 		return -1;
   63: 	} else if (sysctlbyname(szStr, &timeout[1], &len, NULL, 0) == -1) {
   64: 		printf("Error:: get sysctl %s #%d - %s\n", szStr, errno, strerror(errno));
   65: 		return -1;
   66: 	} else if (sysctlbyname(szStr, NULL, NULL, &timeout[0], sizeof timeout[0]) == -1) {
   67: 		printf("Error:: set sysctl %s from %d #%d - %s\n", szStr, timeout[1], 
   68: 				errno, strerror(errno));
   69: 		return -1;
   70: 	} else
   71: 		VERB(1) printf("Info:: set acktimeout(%d) from %d to %d ... OK!\n", len, 
   72: 				timeout[1], timeout[0]);
   73: 
   74: 	memset(szStr, 0, STRSIZ);
   75: 	snprintf(szStr, STRSIZ, SC_CTSTIMEOUT, ifid);
   76: 	if (sysctlbyname(szStr, NULL, &len, NULL, 0) == -1) {
   77: 		printf("Error:: get sysctl %s #%d - %s\n", szStr, errno, strerror(errno));
   78: 		return -1;
   79: 	} else if (sysctlbyname(szStr, &timeout[1], &len, NULL, 0) == -1) {
   80: 		printf("Error:: get sysctl %s #%d - %s\n", szStr, errno, strerror(errno));
   81: 		return -1;
   82: 	} else if (sysctlbyname(szStr, NULL, NULL, &timeout[0], sizeof timeout[0]) == -1) {
   83: 		printf("Error:: set sysctl %s from %d #%d - %s\n", szStr, timeout[1], 
   84: 				errno, strerror(errno));
   85: 		return -1;
   86: 	} else
   87: 		VERB(1) printf("Info:: set ctstimeout(%d) from %d to %d ... OK!\n", len, 
   88: 				timeout[1], timeout[0]);
   89: 
   90: 	return timeout[0];
   91: }
   92: 
   93: 
   94: static int
   95: calcTimeout(int ifid, int cor)
   96: {
   97: 	int slottime[2], timeout[2];
   98: 	size_t len;
   99: 	char szStr[STRSIZ];
  100: 
  101: 	memset(szStr, 0, STRSIZ);
  102: 	snprintf(szStr, STRSIZ, SC_SLOTTIME, ifid);
  103: 	if (sysctlbyname(szStr, NULL, &len, NULL, 0) == -1) {
  104: 		printf("Error:: get sysctl %s #%d - %s\n", szStr, errno, strerror(errno));
  105: 		return -1;
  106: 	} else if (sysctlbyname(szStr, &slottime[1], &len, NULL, 0) == -1) {
  107: 		printf("Error:: get sysctl %s #%d - %s\n", szStr, errno, strerror(errno));
  108: 		return -1;
  109: 	} else
  110: 		VERB(1) printf("Info:: get slottime(%d) %d ... OK!\n", len, slottime[1]);
  111: 
  112: 	memset(szStr, 0, STRSIZ);
  113: 	snprintf(szStr, STRSIZ, SC_ACKTIMEOUT, ifid);
  114: 	if (sysctlbyname(szStr, NULL, &len, NULL, 0) == -1) {
  115: 		printf("Error:: get sysctl %s #%d - %s\n", szStr, errno, strerror(errno));
  116: 		return -1;
  117: 	} else if (sysctlbyname(szStr, &timeout[1], &len, NULL, 0) == -1) {
  118: 		printf("Error:: get sysctl %s #%d - %s\n", szStr, errno, strerror(errno));
  119: 		return -1;
  120: 	} else
  121: 		VERB(1) printf("Info:: get acktimeout(%d) %d ... OK!\n", len, timeout[1]);
  122: 
  123: 	slottime[0] = (timeout[1] - 3 - cor) / 2;
  124: 	VERB(3) printf("Info:: calculated slottime=%d\n", slottime[0]);
  125: 	timeout[0] = (slottime[0] - 10) * 300;
  126: 	VERB(3) printf("Info:: calculated timeout=%d\n", timeout[0]);
  127: 
  128: 	return timeout[0];
  129: }
  130: // ----------------------------------------------------
  131: 
  132: int
  133: main(int argc, char **argv)
  134: {
  135: 	char ch, mode = 0;
  136: 	int ret = 0, dist = 0, cor = 0, ino = 0;
  137: 
  138: 	while ((ch = getopt(argc, argv, "hvti:d:c:")) != -1)
  139: 		switch (ch) {
  140: 			case 'v':
  141: 				Verbose++;
  142: 				break;
  143: 			case 't':
  144: 				mode |= 2;
  145: 				break;
  146: 			case 'i':
  147: 				ino = strtol(optarg, NULL, 0);
  148: 				if (ino < 0) {
  149: 					printf("Error:: in interface number %d\n", ino);
  150: 					return 1;
  151: 				}
  152: 				break;
  153: 			case 'd':
  154: 				mode |= 1;
  155: 				dist = strtol(optarg, NULL, 0);
  156: 				if (dist < 1) {
  157: 					printf("Error:: in distance meters %d\n", dist);
  158: 					return 1;
  159: 				}
  160: 				break;
  161: 			case 'c':
  162: 				mode |= 1;
  163: 				cor = strtol(optarg, NULL, 0);
  164: 				break;
  165: 			case 'h':
  166: 			default:
  167: 				Usage();
  168: 				return 1;
  169: 		}
  170: 	argc -= optind;
  171: 	argv += optind;
  172: 	if (!mode) {
  173: 		printf("Error:: not selected mode for operation ...\n");
  174: 		return 1;
  175: 	}
  176: 
  177: 	if (mode & 1)
  178: 		if ((ret = calcDistance(ino, dist, cor)) < 1)
  179: 			return 2;
  180: 	if (mode & 2) {
  181: 		if ((ret = calcTimeout(ino, cor)) < 1)
  182: 			return 2;
  183: 		else {
  184: 			VERB(1)
  185: 				printf("Maximum approximate distance ~%d meters\n", ret);
  186: 			else
  187: 				printf("~%d\n", ret);
  188: 		}
  189: 	}
  190: 
  191: 	return 0;
  192: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>