Make ponsim_olt work for asfvolt16_olt adapter.

This is the first commit where olt activate is tested.

Change-Id: Ifa3967d8650741db8feeeff1a271618408ea4da1
diff --git a/ponsim/main.py b/ponsim/main.py
index 3140afd..63b47f6 100755
--- a/ponsim/main.py
+++ b/ponsim/main.py
@@ -28,16 +28,21 @@
 
 from common.structlog_setup import setup_logging
 from grpc_server import GrpcServer
-from ponsim import PonSim
 from realio import RealIo
-
+from voltha.protos.ponsim_pb2 import add_PonSimServicer_to_server
+from voltha.protos.ponsim_pb2 import add_XPonSimServicer_to_server
+from voltha.adapters.asfvolt16_olt.protos.bal_pb2 import add_BalServicer_to_server
+import ponsim_servicer
+import bal_servicer
+from ponsim import PonSim
 from ponsim import XPonSim
 
 defs = dict(
     config=os.environ.get('CONFIG', './ponsim.yml'),
     grpc_port=int(os.environ.get('GRPC_PORT', 50060)),
     name=os.environ.get('NAME', 'pon1'),
-    onus=int(os.environ.get("ONUS", 1))
+    onus=int(os.environ.get("ONUS", 1)),
+    device_type='ponsim'
 )
 
 
@@ -139,6 +144,14 @@
                         default=False,
                         help=_help)
 
+    _help = ('device type - ponsim or bal'
+             ' (default: %s)' % defs['device_type'])
+    parser.add_argument('-d', '--device_type',
+                        dest='device_type',
+                        action='store',
+                        default=defs['device_type'],
+                        help=_help)
+
     args = parser.parse_args()
 
     return args
@@ -169,13 +182,19 @@
         if not args.no_banner:
             print_banner(self.log)
 
-        self.startup_components()
+        if args.device_type == 'ponsim':
+            grpc_services =  [(add_PonSimServicer_to_server, ponsim_servicer.FlowUpdateHandler)]
+        elif args.device_type == 'bal':
+            grpc_services =  [(add_BalServicer_to_server, bal_servicer.BalHandler)]
+        grpc_services.append((add_XPonSimServicer_to_server, ponsim_servicer.XPonHandler))
+
+        self.startup_components(grpc_services)
 
     def start(self):
         self.start_reactor()  # will not return except Keyboard interrupt
 
     @inlineCallbacks
-    def startup_components(self):
+    def startup_components(self, grpc_services):
         try:
             self.log.info('starting-internal-components')
 
@@ -188,7 +207,7 @@
             self.x_pon_sim = XPonSim()
 
             self.grpc_server = GrpcServer(self.args.grpc_port, self.ponsim, self.x_pon_sim)
-            yield self.grpc_server.start()
+            yield self.grpc_server.start(grpc_services)
 
             self.log.info('started-internal-services')