mirror of
				https://github.com/RangeNetworks/openbts.git
				synced 2025-10-28 10:33:36 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			213 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			213 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /* -*- c++ -*- */
 | |
| /*
 | |
|  * USRP - Universal Software Radio Peripheral
 | |
|  *
 | |
|  * Copyright (C) 2003, 2004, 2009 Free Software Foundation, Inc.
 | |
|  * Copyright 2014 Range Networks, Inc.
 | |
|  *
 | |
|  * This program is free software; you can redistribute it and/or modify
 | |
|  * it under the terms of the GNU General Public License as published by
 | |
|  * the Free Software Foundation; either version 3 of the License, or
 | |
|  * (at your option) any later version.
 | |
|  *
 | |
|  * This program is distributed in the hope that it will be useful,
 | |
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | |
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | |
|  * GNU General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU General Public License
 | |
|  * along with this program; if not, write to the Free Software
 | |
|  * Foundation, Inc., 51 Franklin Street, Boston, MA  02110-1301  USA
 | |
|  */
 | |
| 
 | |
| #ifdef HAVE_CONFIG_H
 | |
| #include "config.h"
 | |
| #endif
 | |
| 
 | |
| #include <stdio.h>
 | |
| #include <stdlib.h>
 | |
| #include <string.h>
 | |
| #include <unistd.h>
 | |
| #include <getopt.h>
 | |
| #include <assert.h>
 | |
| #include <errno.h>
 | |
| 
 | |
| #include <Logger.h>
 | |
| #include <Configuration.h>
 | |
| 
 | |
| ConfigurationTable gConfig;
 | |
| 
 | |
| using namespace std;
 | |
| 
 | |
| #include "rnrad1Core.h"
 | |
| 
 | |
| char *prog_name;
 | |
| 
 | |
| static void
 | |
| set_progname (char *path)
 | |
| {
 | |
|   char *p = strrchr (path, '/');
 | |
|   if (p != 0)
 | |
|     prog_name = p+1;
 | |
|   else
 | |
|     prog_name = path;
 | |
| }
 | |
| 
 | |
| static void
 | |
| usage ()
 | |
| {
 | |
|   fprintf (stderr, "usage: \n");
 | |
|   fprintf (stderr, "  %s [-v] [-w <which_board>] [-x] serialnumber\n", prog_name);
 | |
|   exit (1);
 | |
| }
 | |
| 
 | |
| #if 0
 | |
| static void
 | |
| die (const char *msg)
 | |
| {
 | |
|   fprintf (stderr, "%s (die): %s\n", prog_name, msg);
 | |
|   exit (1);
 | |
| }
 | |
| #endif
 | |
| 
 | |
| static int 
 | |
| hexval (char ch)
 | |
| {
 | |
|   if ('0' <= ch && ch <= '9')
 | |
|     return ch - '0';
 | |
| 
 | |
|   if ('a' <= ch && ch <= 'f')
 | |
|     return ch - 'a' + 10;
 | |
| 
 | |
|   if ('A' <= ch && ch <= 'F')
 | |
|     return ch - 'A' + 10;
 | |
| 
 | |
|   return -1;
 | |
| }
 | |
| 
 | |
| static unsigned char *
 | |
| hex_string_to_binary (const char *string, int *lenptr)
 | |
| {
 | |
|   int	sl = strlen (string);
 | |
|   if (sl & 0x01){
 | |
|     fprintf (stderr, "%s: odd number of chars in <hex-string>\n", prog_name);
 | |
|     return 0;
 | |
|   }
 | |
| 
 | |
|   int len = sl / 2;
 | |
|   *lenptr = len;
 | |
|   unsigned char *buf = new unsigned char [len];
 | |
| 
 | |
|   for (int i = 0; i < len; i++){
 | |
|     int hi = hexval (string[2 * i]);
 | |
|     int lo = hexval (string[2 * i + 1]);
 | |
|     if (hi < 0 || lo < 0){
 | |
|       fprintf (stderr, "%s: invalid char in <hex-string>\n", prog_name);
 | |
|       delete [] buf;
 | |
|       return 0;
 | |
|     }
 | |
|     buf[i] = (hi << 4) | lo;
 | |
|   }
 | |
|   return buf;
 | |
| }
 | |
| 
 | |
| static void
 | |
| print_hex (FILE *fp, unsigned char *buf, int len)
 | |
| {
 | |
|   for (int i = 0; i < len; i++){
 | |
|     fprintf (fp, "%02x", buf[i]);
 | |
|   }
 | |
|   fprintf (fp, "\n");
 | |
| }
 | |
| 
 | |
| static void
 | |
| chk_result (bool ok)
 | |
| {
 | |
|   if (!ok){
 | |
|     fprintf (stderr, "%s: failed\n", prog_name);
 | |
|     exit (1);
 | |
|   }
 | |
| }
 | |
| 
 | |
| static bool
 | |
| get_on_off (const char *s)
 | |
| {
 | |
|   if (strcmp (s, "on") == 0)
 | |
|     return true;
 | |
| 
 | |
|   if (strcmp (s, "off") == 0)
 | |
|     return false;
 | |
| 
 | |
|   usage ();			// no return
 | |
|   return false;
 | |
| }
 | |
| 
 | |
| 
 | |
| int
 | |
| main (int argc, char **argv)
 | |
| {
 | |
|   int		ch;
 | |
|   bool		verbose = false;
 | |
|   int		which_board = 0;
 | |
|   bool		fx2_ok_p = false;
 | |
|   
 | |
|   set_progname (argv[0]);
 | |
|   
 | |
|   while ((ch = getopt (argc, argv, "vw:x")) != EOF){
 | |
|     switch (ch){
 | |
| 
 | |
|     case 'v':
 | |
|       verbose = true;
 | |
|       break;
 | |
|       
 | |
|     case 'w':
 | |
|       which_board = strtol (optarg, 0, 0);
 | |
|       break;
 | |
|       
 | |
|     case 'x':
 | |
|       fx2_ok_p = true;
 | |
|       break;
 | |
|       
 | |
|     default:
 | |
|       fprintf(stderr,"Bad option: %c\n",ch);
 | |
|       usage ();
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   int nopts = argc - optind;
 | |
| 
 | |
|   fprintf(stderr,"nopts: %d",nopts);
 | |
| 
 | |
|   if (nopts < 1)
 | |
|     usage ();
 | |
| 
 | |
|   gLogInit("openbts",argv[1],LOG_LOCAL7);
 | |
| 
 | |
|   rnrad1Core *core = new rnrad1Core(which_board,
 | |
| 				    RAD1_CMD_INTERFACE,
 | |
| 				    RAD1_CMD_ALTINTERFACE,
 | |
| 				    "","",true);
 | |
| 
 | |
|   if (nopts != 1) usage ();
 | |
| 
 | |
|   else {
 | |
|     char *hex_string  = argv[optind];
 | |
|     int len;
 | |
|     unsigned char *buf = (unsigned char *) hex_string;
 | |
|     len = 8;
 | |
|     //hex_string_to_binary (hex_string, &len);
 | |
|     if (buf == 0)
 | |
|       chk_result (0);
 | |
|     
 | |
|     std::string bufStr;
 | |
|     bufStr.assign((const char*) buf,len);
 | |
| 
 | |
|     bool result = core->writeEeprom(0x50, 248, bufStr);
 | |
|     chk_result (result);
 | |
| 
 | |
|     return 0;
 | |
|   }
 | |
|  
 | |
|   delete core;
 | |
| }
 |