AudioScience HPI Version_4.24.1
|
/****************************************************************************** $Header: /home/eliot/asi/repo/cvsrepo/Repository/apps/microtests/subsysconfig/subsysconfig.c,v 1.17 2011/01/05 15:11:13 as-age Exp $ Test Hardware Programming Interface (HPI) using HPI functions. Currently tests HPIUDP configuration. Usage: subsysconfig --help note to cleanup this file, use "astyle --style = linux -s4 subsysconfig.c" ******************************************************************************/ #define SECONDS (1000/POLL_INTERVAL) #define MINUTES (60*SECONDS) #include <stdio.h> #include <stdlib.h> #include <math.h> #include <string.h> #include <ctype.h> #ifndef _MSC_VER #include <unistd.h> #include <arpa/inet.h> #endif #include <getopt.h> #include <hpi.h> #include <hpidebug.h> #define verbose_printf if (verbose) printf // local protos static void HandleError(hpi_err_t err); // global /* Option variables */ static uint32_t broadcast = 0; static uint32_t unicast = 0; static uint32_t dump = 0; static char *netif_ip = NULL; static int verbose = 0; static struct option long_options[] = { {"address", required_argument, 0, 'a'}, {"broadcast", required_argument, 0, 'b'}, {"unicast", required_argument, 0, 'u'}, {"net", required_argument, 0, 'n'}, {"mask", required_argument, 0, 'm'}, {"dump", no_argument, 0, 'd'}, {"verbose", no_argument, 0, 'v'}, {"help", no_argument, 0, 'h'}, {0, 0, 0, 0} }; static const char *short_options = "a:b:u:n:m:dvh?"; static const char *option_help[] = { "remote IP address to add to HPIUDP sub-system (can be repeated).", "[0|1] Broadcast discovery method enabled for HPIUDP subsystem.", "[0|1] Unicast discovery method enabled for HPIUDP subsystem.", "Network interface to use (IP addr).", "Mask for network interface.", "Dump config entity.", "Verbose mode.", "Show this text.", 0 }; static void help(void) { int i = 0; printf("\nSUBSYSCONFIG - HPI SubSystem Configuration Test"); printf("\nUsage - subsysconfig [options]\n"); while (long_options[i].name != 0) { printf("--%s -%c %s\n", long_options[i].name, (char)(long_options[i].val), option_help[i]); i++; } printf("\nExample usage\n"); printf("\nsubsysconfig -u1 -n192.168.1.24 -a192.168.1.1 -a192.168.1.2\n"); exit(0); } static void parse_options( int argc, char *argv[] ) { hpi_err_t err; hpi_handle_t h; struct in_addr ip_adr; int c; /*********** Parse the command line options ***************/ while (1) { // int this_option_optind = optind ? optind : 1; int option_index = 0; c = getopt_long(argc, argv, short_options, long_options, &option_index); if (c == -1) break; switch (c) { case 0: printf("option %s", long_options[option_index].name); if (optarg) printf(" with arg %s", optarg); printf("\n"); break; case 'a': ip_adr.s_addr = inet_addr(optarg); err = HPI_Object_UriToHandle( "hpi://subsystem/network/ip/adapter_address_add", &h); HandleError(err); if( !err ) { err = HPI_Object_SetValue(h, entity_type_ip4_address, 1, &ip_adr.s_addr, sizeof(ip_adr.s_addr)); HandleError(err); verbose_printf("hpiconfig_ipaddress_add(%s)\n", optarg); } //count++; break; case 'n': // configuration - network interface to use netif_ip = optarg; ip_adr.s_addr = inet_addr(optarg); err = HPI_Object_UriToHandle( "hpi://subsystem/network/ip/address", &h); HandleError(err); if( !err ) { err = HPI_Object_SetValue(h, entity_type_ip4_address, 1, &ip_adr.s_addr, sizeof(ip_adr.s_addr)); HandleError(err); verbose_printf("subsystem/network/ip/address(%s)\n", optarg); } break; case 'm': // configuration - network interface mask to use ip_adr.s_addr = inet_addr(optarg); err = HPI_Object_UriToHandle( "hpi://subsystem/network/ip/mask", &h); HandleError(err); if( !err ) { err = HPI_Object_SetValue(h, entity_type_ip4_address, 1, &ip_adr.s_addr, sizeof(ip_adr.s_addr)); HandleError(err); verbose_printf("subsystem/network/ip/mask(%s)\n", optarg); } break; case 'b': broadcast = atoi(optarg); // configuration - broadcast err = HPI_Object_UriToHandle( "hpi://subsystem/network/ip/udp/broadcast_enabled", &h); HandleError(err); if( !err ) { err = HPI_Object_SetValue(h, entity_type_int, 1, &broadcast, sizeof(broadcast)); HandleError(err); verbose_printf("subsystem/network/ip/udp/broadcast_enabled(%d)\n", broadcast); } break; case 'u': unicast = atoi(optarg); // configuration - unicast err = HPI_Object_UriToHandle( "hpi://subsystem/network/ip/udp/unicast_enabled", &h); HandleError(err); if( !err ) { err = HPI_Object_SetValue(h, entity_type_int, 1, &unicast, sizeof(unicast)); HandleError(err); verbose_printf("subsystem/network/ip/udp/unicast_enabled(%d)\n", unicast); } break; case 'd': dump = 1; break; case 'v': verbose = 1; break; case '?': case 'h': help(); break; default: printf("?? getopt returned character code 0%o ??\n", c); } } if (optind < argc) { // printf ("non-option ARGV-elements: "); } } /************************************** MAIN ***********************/ int main(int argc, char *argv[]) { const struct hpi_hsubsys *ss; hpi_err_t err = 0; hpi_handle_t h; int num_adapters = 0; uint16_t wVersion; uint32_t dwSerialNumber; uint16_t wType; uint16_t wNumOutStreams; uint16_t wNumInStreams; int enable = 1; int i = 0; printf("***********************************************\n"); printf("Test HPI subsys configuration \n"); printf("***********************************************\n"); // open subsystem and set configuration ss = HPI_SubSysCreate(); if (!ss) { printf("HPI_SubSysCreate failed\n"); exit(1); } parse_options(argc, argv); // Start UDP running err = HPI_Object_UriToHandle("hpi://subsystem/network/enabled", &h); HandleError(err); err = HPI_Object_SetValue(h, entity_type_int, 1, &enable, sizeof(enable)); HandleError(err); // test adapters have been found err = HPI_SubSysGetNumAdapters(ss, &num_adapters); HandleError(err); verbose_printf("HPI_SubSysGetNumAdapters returned %d \n", num_adapters); // iterate over the adapters for (i = 0; i < num_adapters; i++) { uint32_t index; uint16_t type; uint16_t wIPmsb, wIPlsb; err = HPI_SubSysGetAdapter(ss, i, &index, &type); HandleError(err); verbose_printf("\nHPI_SubSysGetAdapter(iter %d)\n", i); // get the IP address err = HPI_AdapterGetProperty(ss, index, HPI_ADAPTER_PROPERTY_IP_ADDRESS, &wIPmsb, &wIPlsb); if (!err) { HandleError(err); verbose_printf("HPI_AdapterGetProperty(ip address)\n"); printf("Checking adapter[%d] with IP address : %u.%u.%u.%u \n", index, (wIPmsb>>8) & 0xff, wIPmsb & 0xff, (wIPlsb>>8) & 0xff, wIPlsb & 0xff); } // read back the adapter info err = HPI_AdapterGetInfo(ss, index, &wNumOutStreams, &wNumInStreams, &wVersion, &dwSerialNumber, &wType); HandleError(err); verbose_printf("HPI_AdapterGetInfo[%d]\n",index); printf("Adapter ID = %4X Index = %d NumOutStreams = %d NumInStreams = %d S/N = %d\n" "Hw Version %c%d DSP code version %03d\n", wType, index, wNumOutStreams, wNumInStreams, dwSerialNumber, ((wVersion >> 3) & 0xf) + 'A', // Hw version major wVersion & 0x7, // Hw version minor ((wVersion >> 13) * 100) + ((wVersion >> 7) & 0x3f) // DSP code version ); } HPI_SubSysFree(ss); return 0; } /****************************** HandleError **********************/ static int getch(void) { return getchar(); } static void HandleError(hpi_err_t err) { char szError[256]; char nK = 0; if (err) { HPI_GetErrorText(err, szError); printf("ERROR %d %s\n", err, szError); if (0) { printf("press Enter to continue, (q,Enter) to exit...\n"); nK = getch(); if (nK == 'q') exit(0); } } } /* END_OF_CODE */