runtime/eRPCServer.py
changeset 3885 22a009561502
parent 3884 34da877021d5
child 3887 2df45e4bd500
equal deleted inserted replaced
3884:34da877021d5 3885:22a009561502
    10 from inspect import getmembers, isfunction
    10 from inspect import getmembers, isfunction
    11 
    11 
    12 import erpc
    12 import erpc
    13 
    13 
    14 # eRPC service code
    14 # eRPC service code
    15 from erpc_interface.erpc_PLCObject.common import PSKID, PLCstatus, TraceVariables, trace_sample, PLCstatus_enum, log_message
    15 from erpc_interface.erpc_PLCObject.common import PSKID, PLCstatus, TraceVariables, trace_sample, PLCstatus_enum, log_message, IECtype_enum
    16 from erpc_interface.erpc_PLCObject.interface import IBeremizPLCObjectService
    16 from erpc_interface.erpc_PLCObject.interface import IBeremizPLCObjectService
    17 from erpc_interface.erpc_PLCObject.server import BeremizPLCObjectServiceService
    17 from erpc_interface.erpc_PLCObject.server import BeremizPLCObjectServiceService
    18 
    18 
    19 from runtime import GetPLCObjectSingleton as PLC
    19 from runtime import GetPLCObjectSingleton as PLC
    20 from runtime.loglevels import LogLevelsDict
    20 from runtime.loglevels import LogLevelsDict
    21 from runtime.ServicePublisher import ServicePublisher
    21 from runtime.ServicePublisher import ServicePublisher
    22 
    22 
    23 
    23 
    24 CRITICAL_LOG_LEVEL = LogLevelsDict["CRITICAL"]
    24 CRITICAL_LOG_LEVEL = LogLevelsDict["CRITICAL"]
       
    25 
       
    26 enum_to_IECtype = dict(map(lambda t:(t[1],t[0]),getmembers(IECtype_enum, lambda x:type(x)==int)))
    25 
    27 
    26 def ReturnAsLastOutput(method, args_wrapper, *args):
    28 def ReturnAsLastOutput(method, args_wrapper, *args):
    27     args[-1].value = method(*args_wrapper(*args[:-1]))
    29     args[-1].value = method(*args_wrapper(*args[:-1]))
    28     return 0
    30     return 0
    29 
    31 
    41     "GetPLCID":TranslatedReturnAsLastOutput(
    43     "GetPLCID":TranslatedReturnAsLastOutput(
    42         lambda res:PSKID(*res)),
    44         lambda res:PSKID(*res)),
    43     "GetPLCstatus":TranslatedReturnAsLastOutput(
    45     "GetPLCstatus":TranslatedReturnAsLastOutput(
    44         lambda res:PLCstatus(getattr(PLCstatus_enum, res[0]),res[1])),
    46         lambda res:PLCstatus(getattr(PLCstatus_enum, res[0]),res[1])),
    45     "GetTraceVariables":TranslatedReturnAsLastOutput(
    47     "GetTraceVariables":TranslatedReturnAsLastOutput(
    46         lambda res:TraceVariables(res[0],[trace_sample(*sample) for sample in res[1]])),
    48         lambda res:TraceVariables(getattr(PLCstatus_enum, res[0]),[trace_sample(*sample) for sample in res[1]])),
    47     "MatchMD5":ReturnAsLastOutput,
    49     "MatchMD5":ReturnAsLastOutput,
    48     "NewPLC":ReturnAsLastOutput,
    50     "NewPLC":ReturnAsLastOutput,
    49     "SeedBlob":ReturnAsLastOutput,
    51     "SeedBlob":ReturnAsLastOutput,
       
    52     "SetTraceVariablesList": ReturnAsLastOutput,
       
    53     "StopPLC":ReturnAsLastOutput,
    50 }
    54 }
    51 
    55 
    52 ArgsWrappers = {
    56 ArgsWrappers = {
    53     "AppendChunkToBlob":
    57     "AppendChunkToBlob":
    54         lambda data, blobID:(data, bytes(blobID)),
    58         lambda data, blobID:(data, bytes(blobID)),
    55     "NewPLC":
    59     "NewPLC":
    56         lambda md5sum, plcObjectBlobID, extrafiles: (
    60         lambda md5sum, plcObjectBlobID, extrafiles: (
    57             md5sum, bytes(plcObjectBlobID), [(f.fname, bytes(f.blobID)) for f in extrafiles]),
    61             md5sum, bytes(plcObjectBlobID), [(f.fname, bytes(f.blobID)) for f in extrafiles]),
    58     "SetTraceVariablesList": 
    62     "SetTraceVariablesList": 
    59         lambda orders : ([(order.idx, order.iectype, order.force) for order in orders],)
    63         lambda orders : ([(order.idx, enum_to_IECtype[order.iectype], None if len(order.force)==0 else order.force) for order in orders],)
    60 }
    64 }
    61 
    65 
    62 def rpc_wrapper(method_name):
    66 def rpc_wrapper(method_name):
    63     PLCobj = PLC()
    67     PLCobj = PLC()
    64     method=getattr(PLCobj, method_name)
    68     method=getattr(PLCobj, method_name)