From 4dcaf2a66a69eff4afeb24bccda039561a0028bc Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Fri, 23 Oct 2015 16:52:00 +0200 Subject: Set --- Remote-Operations-Generic-ROS-PDUs.erl | 952 ++++++++++++++++++++------------- Remote-Operations-Generic-ROS-PDUs.hrl | 14 +- 2 files changed, 584 insertions(+), 382 deletions(-) diff --git a/Remote-Operations-Generic-ROS-PDUs.erl b/Remote-Operations-Generic-ROS-PDUs.erl index 1e8eb90..81944d0 100644 --- a/Remote-Operations-Generic-ROS-PDUs.erl +++ b/Remote-Operations-Generic-ROS-PDUs.erl @@ -17,37 +17,55 @@ legacy_erlang_types/0]). -export(['dialyzer-suppressions'/1]). -export([ -'enc_ROS'/2, -'enc_Invoke'/2, -'enc_ReturnResult'/2, -'enc_ReturnError'/2, -'enc_Reject'/2, -'enc_GeneralProblem'/2, -'enc_InvokeProblem'/2, -'enc_ReturnResultProblem'/2, -'enc_ReturnErrorProblem'/2, +'enc_Priority'/2, +'enc_Code'/2, +'enc_InvokeId'/2, 'enc_RejectProblem'/2, -'enc_InvokeId'/2 +'enc_ReturnErrorProblem'/2, +'enc_ReturnResultProblem'/2, +'enc_InvokeProblem'/2, +'enc_GeneralProblem'/2, +'enc_Reject'/2, +'enc_ReturnError'/2, +'enc_ReturnResult'/2, +'enc_Invoke'/2, +'enc_ROS'/2 ]). -export([ -'dec_ROS'/2, -'dec_Invoke'/2, -'dec_ReturnResult'/2, -'dec_ReturnError'/2, -'dec_Reject'/2, -'dec_GeneralProblem'/2, -'dec_InvokeProblem'/2, -'dec_ReturnResultProblem'/2, -'dec_ReturnErrorProblem'/2, +'dec_Priority'/2, +'dec_Code'/2, +'dec_InvokeId'/2, 'dec_RejectProblem'/2, -'dec_InvokeId'/2 +'dec_ReturnErrorProblem'/2, +'dec_ReturnResultProblem'/2, +'dec_InvokeProblem'/2, +'dec_GeneralProblem'/2, +'dec_Reject'/2, +'dec_ReturnError'/2, +'dec_ReturnResult'/2, +'dec_Invoke'/2, +'dec_ROS'/2 ]). -export([ 'noInvokeId'/0 ]). +-export([ +'enc_no-op'/3, +'enc_refuse'/3, +'enc_emptyUnbind'/3, +'enc_emptyBind'/3 +]). + +-export([ +'dec_no-op'/3, +'dec_refuse'/3, +'dec_emptyUnbind'/3, +'dec_emptyBind'/3 +]). + -export([info/0]). @@ -87,31 +105,35 @@ try decode_disp(Type, element(1, ber_decode_nif(Data))) of end end. -encode_disp('ROS',Data) -> 'enc_ROS'(Data); -encode_disp('Invoke',Data) -> 'enc_Invoke'(Data); -encode_disp('ReturnResult',Data) -> 'enc_ReturnResult'(Data); -encode_disp('ReturnError',Data) -> 'enc_ReturnError'(Data); -encode_disp('Reject',Data) -> 'enc_Reject'(Data); -encode_disp('GeneralProblem',Data) -> 'enc_GeneralProblem'(Data); -encode_disp('InvokeProblem',Data) -> 'enc_InvokeProblem'(Data); -encode_disp('ReturnResultProblem',Data) -> 'enc_ReturnResultProblem'(Data); -encode_disp('ReturnErrorProblem',Data) -> 'enc_ReturnErrorProblem'(Data); -encode_disp('RejectProblem',Data) -> 'enc_RejectProblem'(Data); +encode_disp('Priority',Data) -> 'enc_Priority'(Data); +encode_disp('Code',Data) -> 'enc_Code'(Data); encode_disp('InvokeId',Data) -> 'enc_InvokeId'(Data); +encode_disp('RejectProblem',Data) -> 'enc_RejectProblem'(Data); +encode_disp('ReturnErrorProblem',Data) -> 'enc_ReturnErrorProblem'(Data); +encode_disp('ReturnResultProblem',Data) -> 'enc_ReturnResultProblem'(Data); +encode_disp('InvokeProblem',Data) -> 'enc_InvokeProblem'(Data); +encode_disp('GeneralProblem',Data) -> 'enc_GeneralProblem'(Data); +encode_disp('Reject',Data) -> 'enc_Reject'(Data); +encode_disp('ReturnError',Data) -> 'enc_ReturnError'(Data); +encode_disp('ReturnResult',Data) -> 'enc_ReturnResult'(Data); +encode_disp('Invoke',Data) -> 'enc_Invoke'(Data); +encode_disp('ROS',Data) -> 'enc_ROS'(Data); encode_disp(Type,_Data) -> exit({error,{asn1,{undefined_type,Type}}}). -decode_disp('ROS',Data) -> 'dec_ROS'(Data); -decode_disp('Invoke',Data) -> 'dec_Invoke'(Data); -decode_disp('ReturnResult',Data) -> 'dec_ReturnResult'(Data); -decode_disp('ReturnError',Data) -> 'dec_ReturnError'(Data); -decode_disp('Reject',Data) -> 'dec_Reject'(Data); -decode_disp('GeneralProblem',Data) -> 'dec_GeneralProblem'(Data); -decode_disp('InvokeProblem',Data) -> 'dec_InvokeProblem'(Data); -decode_disp('ReturnResultProblem',Data) -> 'dec_ReturnResultProblem'(Data); -decode_disp('ReturnErrorProblem',Data) -> 'dec_ReturnErrorProblem'(Data); -decode_disp('RejectProblem',Data) -> 'dec_RejectProblem'(Data); +decode_disp('Priority',Data) -> 'dec_Priority'(Data); +decode_disp('Code',Data) -> 'dec_Code'(Data); decode_disp('InvokeId',Data) -> 'dec_InvokeId'(Data); +decode_disp('RejectProblem',Data) -> 'dec_RejectProblem'(Data); +decode_disp('ReturnErrorProblem',Data) -> 'dec_ReturnErrorProblem'(Data); +decode_disp('ReturnResultProblem',Data) -> 'dec_ReturnResultProblem'(Data); +decode_disp('InvokeProblem',Data) -> 'dec_InvokeProblem'(Data); +decode_disp('GeneralProblem',Data) -> 'dec_GeneralProblem'(Data); +decode_disp('Reject',Data) -> 'dec_Reject'(Data); +decode_disp('ReturnError',Data) -> 'dec_ReturnError'(Data); +decode_disp('ReturnResult',Data) -> 'dec_ReturnResult'(Data); +decode_disp('Invoke',Data) -> 'dec_Invoke'(Data); +decode_disp('ROS',Data) -> 'dec_ROS'(Data); decode_disp(Type,_Data) -> exit({error,{asn1,{undefined_type,Type}}}). @@ -132,21 +154,264 @@ info() -> %%================================ -%% ROS +%% Priority %%================================ -'enc_ROS'(Val) -> - 'enc_ROS'(Val, []). +'enc_Priority'(Val) -> + 'enc_Priority'(Val, [<<2>>]). + +'enc_Priority'(Val, TagIn) -> +encode_integer(Val, TagIn). + + +'dec_Priority'(Tlv) -> + 'dec_Priority'(Tlv, [2]). + +'dec_Priority'(Tlv, TagIn) -> +begin +Val1 = decode_integer(Tlv, TagIn), +if 0 =< Val1, Val1 =< 'MAX' -> +Val1; +true -> +exit({error,{asn1,bad_range}}) +end +end. + + + +%%================================ +%% Code +%%================================ +'enc_Code'(Val) -> + 'enc_Code'(Val, []). + +'enc_Code'(Val, TagIn) -> + {EncBytes,EncLen} = case element(1,Val) of + local -> + encode_integer(element(2,Val), [<<2>>]); + global -> + encode_object_identifier(element(2,Val), [<<6>>]); + Else -> + exit({error,{asn1,{invalid_choice_type,Else}}}) + end, + +encode_tags(TagIn, EncBytes, EncLen). + + + + +'dec_Code'(Tlv) -> + 'dec_Code'(Tlv, []). + +'dec_Code'(Tlv, TagIn) -> +Tlv1 = match_tags(Tlv, TagIn), +case (case Tlv1 of [CtempTlv1] -> CtempTlv1; _ -> Tlv1 end) of + +%% 'local' + {2, V1} -> + {local, decode_integer(V1, [])}; + + +%% 'global' + {6, V1} -> + {global, decode_object_identifier(V1, [])}; + + Else -> + exit({error,{asn1,{invalid_choice_tag,Else}}}) + end +. + + +%%================================ +%% InvokeId +%%================================ +'enc_InvokeId'(Val) -> + 'enc_InvokeId'(Val, []). + +'enc_InvokeId'(Val, TagIn) -> + {EncBytes,EncLen} = case element(1,Val) of + present -> + encode_integer(element(2,Val), [<<2>>]); + absent -> + encode_null(element(2,Val), [<<5>>]); + Else -> + exit({error,{asn1,{invalid_choice_type,Else}}}) + end, + +encode_tags(TagIn, EncBytes, EncLen). + + + + +'dec_InvokeId'(Tlv) -> + 'dec_InvokeId'(Tlv, []). + +'dec_InvokeId'(Tlv, TagIn) -> +Tlv1 = match_tags(Tlv, TagIn), +case (case Tlv1 of [CtempTlv1] -> CtempTlv1; _ -> Tlv1 end) of + +%% 'present' + {2, V1} -> + {present, decode_integer(V1, [])}; + + +%% 'absent' + {5, V1} -> + {absent, decode_null(V1, [])}; + + Else -> + exit({error,{asn1,{invalid_choice_tag,Else}}}) + end +. + + +%%================================ +%% RejectProblem +%%================================ +'enc_RejectProblem'(Val) -> + 'enc_RejectProblem'(Val, [<<2>>]). + +'enc_RejectProblem'(Val, TagIn) -> +encode_integer(Val, [{'general-unrecognisedPDU',0},{'general-mistypedPDU',1},{'general-badlyStructuredPDU',2},{'invoke-duplicateInvocation',10},{'invoke-unrecognisedOperation',11},{'invoke-mistypedArgument',12},{'invoke-resourceLimitation',13},{'invoke-releaseInProgress',14},{'invoke-unrecognisedLinkedId',15},{'invoke-linkedResponseUnexpected',16},{'invoke-unexpectedLinkedOperation',17},{'returnResult-unrecognisedInvocation',20},{'returnResult-resultResponseUnexpected',21},{'returnResult-mistypedResult',22},{'returnError-unrecognisedInvocation',30},{'returnError-errorResponseUnexpected',31},{'returnError-unrecognisedError',32},{'returnError-unexpectedError',33},{'returnError-mistypedParameter',34}], TagIn). + + +'dec_RejectProblem'(Tlv) -> + 'dec_RejectProblem'(Tlv, [2]). + +'dec_RejectProblem'(Tlv, TagIn) -> +begin +Val1 = decode_integer(Tlv, TagIn), +number2name(Val1, [{'general-unrecognisedPDU',0},{'general-mistypedPDU',1},{'general-badlyStructuredPDU',2},{'invoke-duplicateInvocation',10},{'invoke-unrecognisedOperation',11},{'invoke-mistypedArgument',12},{'invoke-resourceLimitation',13},{'invoke-releaseInProgress',14},{'invoke-unrecognisedLinkedId',15},{'invoke-linkedResponseUnexpected',16},{'invoke-unexpectedLinkedOperation',17},{'returnResult-unrecognisedInvocation',20},{'returnResult-resultResponseUnexpected',21},{'returnResult-mistypedResult',22},{'returnError-unrecognisedInvocation',30},{'returnError-errorResponseUnexpected',31},{'returnError-unrecognisedError',32},{'returnError-unexpectedError',33},{'returnError-mistypedParameter',34}]) +end +. + + + +%%================================ +%% ReturnErrorProblem +%%================================ +'enc_ReturnErrorProblem'(Val) -> + 'enc_ReturnErrorProblem'(Val, [<<2>>]). + +'enc_ReturnErrorProblem'(Val, TagIn) -> +encode_integer(Val, [{unrecognisedInvocation,0},{errorResponseUnexpected,1},{unrecognisedError,2},{unexpectedError,3},{mistypedParameter,4}], TagIn). + + +'dec_ReturnErrorProblem'(Tlv) -> + 'dec_ReturnErrorProblem'(Tlv, [2]). + +'dec_ReturnErrorProblem'(Tlv, TagIn) -> +begin +Val1 = decode_integer(Tlv, TagIn), +number2name(Val1, [{unrecognisedInvocation,0},{errorResponseUnexpected,1},{unrecognisedError,2},{unexpectedError,3},{mistypedParameter,4}]) +end +. + + + +%%================================ +%% ReturnResultProblem +%%================================ +'enc_ReturnResultProblem'(Val) -> + 'enc_ReturnResultProblem'(Val, [<<2>>]). + +'enc_ReturnResultProblem'(Val, TagIn) -> +encode_integer(Val, [{unrecognisedInvocation,0},{resultResponseUnexpected,1},{mistypedResult,2}], TagIn). + + +'dec_ReturnResultProblem'(Tlv) -> + 'dec_ReturnResultProblem'(Tlv, [2]). + +'dec_ReturnResultProblem'(Tlv, TagIn) -> +begin +Val1 = decode_integer(Tlv, TagIn), +number2name(Val1, [{unrecognisedInvocation,0},{resultResponseUnexpected,1},{mistypedResult,2}]) +end +. + + + +%%================================ +%% InvokeProblem +%%================================ +'enc_InvokeProblem'(Val) -> + 'enc_InvokeProblem'(Val, [<<2>>]). + +'enc_InvokeProblem'(Val, TagIn) -> +encode_integer(Val, [{duplicateInvocation,0},{unrecognisedOperation,1},{mistypedArgument,2},{resourceLimitation,3},{releaseInProgress,4},{unrecognisedLinkedId,5},{linkedResponseUnexpected,6},{unexpectedLinkedOperation,7}], TagIn). + + +'dec_InvokeProblem'(Tlv) -> + 'dec_InvokeProblem'(Tlv, [2]). + +'dec_InvokeProblem'(Tlv, TagIn) -> +begin +Val1 = decode_integer(Tlv, TagIn), +number2name(Val1, [{duplicateInvocation,0},{unrecognisedOperation,1},{mistypedArgument,2},{resourceLimitation,3},{releaseInProgress,4},{unrecognisedLinkedId,5},{linkedResponseUnexpected,6},{unexpectedLinkedOperation,7}]) +end +. + + + +%%================================ +%% GeneralProblem +%%================================ +'enc_GeneralProblem'(Val) -> + 'enc_GeneralProblem'(Val, [<<2>>]). + +'enc_GeneralProblem'(Val, TagIn) -> +encode_integer(Val, [{unrecognisedPDU,0},{mistypedPDU,1},{badlyStructuredPDU,2}], TagIn). + + +'dec_GeneralProblem'(Tlv) -> + 'dec_GeneralProblem'(Tlv, [2]). + +'dec_GeneralProblem'(Tlv, TagIn) -> +begin +Val1 = decode_integer(Tlv, TagIn), +number2name(Val1, [{unrecognisedPDU,0},{mistypedPDU,1},{badlyStructuredPDU,2}]) +end +. + + + +%%================================ +%% Reject +%%================================ +'enc_Reject'(Val) -> + 'enc_Reject'(Val, [<<48>>]). + +'enc_Reject'(Val, TagIn) -> +{_,Cindex1, Cindex2} = Val, + +%%------------------------------------------------- +%% attribute invokeId(1) External Remote-Operations-Generic-ROS-PDUs:InvokeId +%%------------------------------------------------- + {EncBytes1,EncLen1} = 'enc_InvokeId'(Cindex1, []), + +%%------------------------------------------------- +%% attribute problem(2) with type CHOICE +%%------------------------------------------------- + {EncBytes2,EncLen2} = 'enc_Reject_problem'(Cindex2, []), + + BytesSoFar = [EncBytes1, EncBytes2], +LenSoFar = EncLen1 + EncLen2, +encode_tags(TagIn, BytesSoFar, LenSoFar). + -'enc_ROS'(Val, TagIn) -> - {EncBytes,EncLen} = case element(1,Val) of + +%%================================ +%% Reject_problem +%%================================ +'enc_Reject_problem'(Val, TagIn) -> + {EncBytes,EncLen} = case element(1,Val) of + general -> + encode_integer(element(2,Val), [{unrecognisedPDU,0},{mistypedPDU,1},{badlyStructuredPDU,2}], [<<128>>]); invoke -> - 'enc_Invoke'(element(2,Val), [<<161>>]); + encode_integer(element(2,Val), [{duplicateInvocation,0},{unrecognisedOperation,1},{mistypedArgument,2},{resourceLimitation,3},{releaseInProgress,4},{unrecognisedLinkedId,5},{linkedResponseUnexpected,6},{unexpectedLinkedOperation,7}], [<<129>>]); returnResult -> - 'enc_ReturnResult'(element(2,Val), [<<162>>]); + encode_integer(element(2,Val), [{unrecognisedInvocation,0},{resultResponseUnexpected,1},{mistypedResult,2}], [<<130>>]); returnError -> - 'enc_ReturnError'(element(2,Val), [<<163>>]); - reject -> - 'enc_Reject'(element(2,Val), [<<164>>]); + encode_integer(element(2,Val), [{unrecognisedInvocation,0},{errorResponseUnexpected,1},{unrecognisedError,2},{unexpectedError,3},{mistypedParameter,4}], [<<131>>]); Else -> exit({error,{asn1,{invalid_choice_type,Else}}}) end, @@ -156,31 +421,70 @@ encode_tags(TagIn, EncBytes, EncLen). -'dec_ROS'(Tlv) -> - 'dec_ROS'(Tlv, []). +'dec_Reject'(Tlv) -> + 'dec_Reject'(Tlv, [16]). -'dec_ROS'(Tlv, TagIn) -> +'dec_Reject'(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), + +%%------------------------------------------------- +%% attribute invokeId(1) External Remote-Operations-Generic-ROS-PDUs:InvokeId +%%------------------------------------------------- +[V1|Tlv2] = Tlv1, +Term1 = 'dec_InvokeId'(V1, []), + +%%------------------------------------------------- +%% attribute problem(2) with type CHOICE +%%------------------------------------------------- +[V2|Tlv3] = Tlv2, +Term2 = 'dec_Reject_problem'(V2, []), + +case Tlv3 of +[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv3}}}) % extra fields not allowed +end, + {'Reject', Term1, Term2}. + +'dec_Reject_problem'(Tlv, TagIn) -> Tlv1 = match_tags(Tlv, TagIn), case (case Tlv1 of [CtempTlv1] -> CtempTlv1; _ -> Tlv1 end) of +%% 'general' + {131072, V1} -> + {general, begin +Val1 = decode_integer(V1, []), +number2name(Val1, [{unrecognisedPDU,0},{mistypedPDU,1},{badlyStructuredPDU,2}]) +end +}; + + %% 'invoke' {131073, V1} -> - {invoke, 'dec_Invoke'(V1, [])}; + {invoke, begin +Val2 = decode_integer(V1, []), +number2name(Val2, [{duplicateInvocation,0},{unrecognisedOperation,1},{mistypedArgument,2},{resourceLimitation,3},{releaseInProgress,4},{unrecognisedLinkedId,5},{linkedResponseUnexpected,6},{unexpectedLinkedOperation,7}]) +end +}; %% 'returnResult' {131074, V1} -> - {returnResult, 'dec_ReturnResult'(V1, [])}; + {returnResult, begin +Val3 = decode_integer(V1, []), +number2name(Val3, [{unrecognisedInvocation,0},{resultResponseUnexpected,1},{mistypedResult,2}]) +end +}; %% 'returnError' {131075, V1} -> - {returnError, 'dec_ReturnError'(V1, [])}; - - -%% 'reject' - {131076, V1} -> - {reject, 'dec_Reject'(V1, [])}; + {returnError, begin +Val4 = decode_integer(V1, []), +number2name(Val4, [{unrecognisedInvocation,0},{errorResponseUnexpected,1},{unrecognisedError,2},{unexpectedError,3},{mistypedParameter,4}]) +end +}; Else -> exit({error,{asn1,{invalid_choice_tag,Else}}}) @@ -189,13 +493,13 @@ case (case Tlv1 of [CtempTlv1] -> CtempTlv1; _ -> Tlv1 end) of %%================================ -%% Invoke +%% ReturnError %%================================ -'enc_Invoke'(Val) -> - 'enc_Invoke'(Val, [<<48>>]). +'enc_ReturnError'(Val) -> + 'enc_ReturnError'(Val, [<<48>>]). -'enc_Invoke'(Val, TagIn) -> -{_,Cindex1, Cindex2, Cindex3, Cindex4} = Val, +'enc_ReturnError'(Val, TagIn) -> +{_,Cindex1, Cindex2, Cindex3} = Val, %%------------------------------------------------- %% attribute invokeId(1) External Remote-Operations-Generic-ROS-PDUs:InvokeId @@ -203,56 +507,28 @@ case (case Tlv1 of [CtempTlv1] -> CtempTlv1; _ -> Tlv1 end) of {EncBytes1,EncLen1} = 'enc_InvokeId'(Cindex1, []), %%------------------------------------------------- -%% attribute linkedId(2) with type CHOICE OPTIONAL -%%------------------------------------------------- - {EncBytes2,EncLen2} = case Cindex2 of - asn1_NOVALUE -> {<<>>,0}; - _ -> - 'enc_Invoke_linkedId'(Cindex2, []) - end, - -%%------------------------------------------------- -%% attribute opcode(3) External Remote-Operations-Information-Objects:Code +%% attribute errcode(2) External Remote-Operations-Generic-ROS-PDUs:Code %%------------------------------------------------- - {EncBytes3,EncLen3} = 'Remote-Operations-Information-Objects':'enc_Code'(Cindex3, []), + {EncBytes2,EncLen2} = 'enc_Code'(Cindex2, []), %%------------------------------------------------- -%% attribute argument(4) with type ASN1_OPEN_TYPE OPTIONAL +%% attribute parameter(3) with type ASN1_OPEN_TYPE OPTIONAL %%------------------------------------------------- - {EncBytes4,EncLen4} = case Cindex4 of + {EncBytes3,EncLen3} = case Cindex3 of asn1_NOVALUE -> {<<>>,0}; _ -> - encode_open_type(Cindex4, []) + encode_open_type(Cindex3, []) end, - BytesSoFar = [EncBytes1, EncBytes2, EncBytes3, EncBytes4], -LenSoFar = EncLen1 + EncLen2 + EncLen3 + EncLen4, + BytesSoFar = [EncBytes1, EncBytes2, EncBytes3], +LenSoFar = EncLen1 + EncLen2 + EncLen3, encode_tags(TagIn, BytesSoFar, LenSoFar). +'dec_ReturnError'(Tlv) -> + 'dec_ReturnError'(Tlv, [16]). -%%================================ -%% Invoke_linkedId -%%================================ -'enc_Invoke_linkedId'(Val, TagIn) -> - {EncBytes,EncLen} = case element(1,Val) of - present -> - encode_integer(element(2,Val), [<<128>>]); - absent -> - encode_null(element(2,Val), [<<129>>]); - Else -> - exit({error,{asn1,{invalid_choice_type,Else}}}) - end, - -encode_tags(TagIn, EncBytes, EncLen). - - - - -'dec_Invoke'(Tlv) -> - 'dec_Invoke'(Tlv, [16]). - -'dec_Invoke'(Tlv, TagIn) -> +'dec_ReturnError'(Tlv, TagIn) -> %%------------------------------------------------- %% decode tag and length %%------------------------------------------------- @@ -265,55 +541,26 @@ Tlv1 = match_tags(Tlv, TagIn), Term1 = 'dec_InvokeId'(V1, []), %%------------------------------------------------- -%% attribute linkedId(2) with type CHOICE OPTIONAL -%%------------------------------------------------- -{Term2,Tlv3} = case Tlv2 of -[V2 = {131072,_}|TempTlv3] -> - {'dec_Invoke_linkedId'(V2, []), TempTlv3}; -[V2 = {131073,_}|TempTlv3] -> - {'dec_Invoke_linkedId'(V2, []), TempTlv3}; - _ -> - { asn1_NOVALUE, Tlv2} -end, - -%%------------------------------------------------- -%% attribute opcode(3) External Remote-Operations-Information-Objects:Code +%% attribute errcode(2) External Remote-Operations-Generic-ROS-PDUs:Code %%------------------------------------------------- -[V3|Tlv4] = Tlv3, -Term3 = 'Remote-Operations-Information-Objects':'dec_Code'(V3, []), +[V2|Tlv3] = Tlv2, +Term2 = 'dec_Code'(V2, []), %%------------------------------------------------- -%% attribute argument(4) with type ASN1_OPEN_TYPE OPTIONAL +%% attribute parameter(3) with type ASN1_OPEN_TYPE OPTIONAL %%------------------------------------------------- -{Term4,Tlv5} = case Tlv4 of -[V4|TempTlv5] -> - {decode_open_type_as_binary(V4, []), TempTlv5}; +{Term3,Tlv4} = case Tlv3 of +[V3|TempTlv4] -> + {decode_open_type_as_binary(V3, []), TempTlv4}; _ -> - { asn1_NOVALUE, Tlv4} + { asn1_NOVALUE, Tlv3} end, -case Tlv5 of -[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv5}}}) % extra fields not allowed +case Tlv4 of +[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv4}}}) % extra fields not allowed end, - {'Invoke', Term1, Term2, Term3, Term4}. - -'dec_Invoke_linkedId'(Tlv, TagIn) -> -Tlv1 = match_tags(Tlv, TagIn), -case (case Tlv1 of [CtempTlv1] -> CtempTlv1; _ -> Tlv1 end) of - -%% 'present' - {131072, V1} -> - {present, decode_integer(V1, [])}; - - -%% 'absent' - {131073, V1} -> - {absent, decode_null(V1, [])}; + {'ReturnError', Term1, Term2, Term3}. - Else -> - exit({error,{asn1,{invalid_choice_tag,Else}}}) - end -. %%================================ @@ -352,9 +599,9 @@ encode_tags(TagIn, BytesSoFar, LenSoFar). {_,Cindex1, Cindex2} = Val, %%------------------------------------------------- -%% attribute opcode(1) External Remote-Operations-Information-Objects:Code +%% attribute opcode(1) External Remote-Operations-Generic-ROS-PDUs:Code %%------------------------------------------------- - {EncBytes1,EncLen1} = 'Remote-Operations-Information-Objects':'enc_Code'(Cindex1, []), + {EncBytes1,EncLen1} = 'enc_Code'(Cindex1, []), %%------------------------------------------------- %% attribute result(2) with type ASN1_OPEN_TYPE @@ -403,10 +650,10 @@ end, Tlv1 = match_tags(Tlv, TagIn), %%------------------------------------------------- -%% attribute opcode(1) External Remote-Operations-Information-Objects:Code +%% attribute opcode(1) External Remote-Operations-Generic-ROS-PDUs:Code %%------------------------------------------------- [V1|Tlv2] = Tlv1, -Term1 = 'Remote-Operations-Information-Objects':'dec_Code'(V1, []), +Term1 = 'dec_Code'(V1, []), %%------------------------------------------------- %% attribute result(2) with type ASN1_OPEN_TYPE @@ -422,13 +669,13 @@ end, %%================================ -%% ReturnError +%% Invoke %%================================ -'enc_ReturnError'(Val) -> - 'enc_ReturnError'(Val, [<<48>>]). +'enc_Invoke'(Val) -> + 'enc_Invoke'(Val, [<<48>>]). -'enc_ReturnError'(Val, TagIn) -> -{_,Cindex1, Cindex2, Cindex3} = Val, +'enc_Invoke'(Val, TagIn) -> +{_,Cindex1, Cindex2, Cindex3, Cindex4} = Val, %%------------------------------------------------- %% attribute invokeId(1) External Remote-Operations-Generic-ROS-PDUs:InvokeId @@ -436,100 +683,43 @@ end, {EncBytes1,EncLen1} = 'enc_InvokeId'(Cindex1, []), %%------------------------------------------------- -%% attribute errcode(2) External Remote-Operations-Information-Objects:Code -%%------------------------------------------------- - {EncBytes2,EncLen2} = 'Remote-Operations-Information-Objects':'enc_Code'(Cindex2, []), - -%%------------------------------------------------- -%% attribute parameter(3) with type ASN1_OPEN_TYPE OPTIONAL +%% attribute linkedId(2) with type CHOICE OPTIONAL %%------------------------------------------------- - {EncBytes3,EncLen3} = case Cindex3 of + {EncBytes2,EncLen2} = case Cindex2 of asn1_NOVALUE -> {<<>>,0}; _ -> - encode_open_type(Cindex3, []) + 'enc_Invoke_linkedId'(Cindex2, []) end, - BytesSoFar = [EncBytes1, EncBytes2, EncBytes3], -LenSoFar = EncLen1 + EncLen2 + EncLen3, -encode_tags(TagIn, BytesSoFar, LenSoFar). - - -'dec_ReturnError'(Tlv) -> - 'dec_ReturnError'(Tlv, [16]). - -'dec_ReturnError'(Tlv, TagIn) -> - %%------------------------------------------------- - %% decode tag and length - %%------------------------------------------------- -Tlv1 = match_tags(Tlv, TagIn), - -%%------------------------------------------------- -%% attribute invokeId(1) External Remote-Operations-Generic-ROS-PDUs:InvokeId -%%------------------------------------------------- -[V1|Tlv2] = Tlv1, -Term1 = 'dec_InvokeId'(V1, []), - -%%------------------------------------------------- -%% attribute errcode(2) External Remote-Operations-Information-Objects:Code -%%------------------------------------------------- -[V2|Tlv3] = Tlv2, -Term2 = 'Remote-Operations-Information-Objects':'dec_Code'(V2, []), - -%%------------------------------------------------- -%% attribute parameter(3) with type ASN1_OPEN_TYPE OPTIONAL -%%------------------------------------------------- -{Term3,Tlv4} = case Tlv3 of -[V3|TempTlv4] -> - {decode_open_type_as_binary(V3, []), TempTlv4}; - _ -> - { asn1_NOVALUE, Tlv3} -end, - -case Tlv4 of -[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv4}}}) % extra fields not allowed -end, - {'ReturnError', Term1, Term2, Term3}. - - - -%%================================ -%% Reject -%%================================ -'enc_Reject'(Val) -> - 'enc_Reject'(Val, [<<48>>]). - -'enc_Reject'(Val, TagIn) -> -{_,Cindex1, Cindex2} = Val, - %%------------------------------------------------- -%% attribute invokeId(1) External Remote-Operations-Generic-ROS-PDUs:InvokeId +%% attribute opcode(3) External Remote-Operations-Generic-ROS-PDUs:Code %%------------------------------------------------- - {EncBytes1,EncLen1} = 'enc_InvokeId'(Cindex1, []), + {EncBytes3,EncLen3} = 'enc_Code'(Cindex3, []), %%------------------------------------------------- -%% attribute problem(2) with type CHOICE +%% attribute argument(4) with type ASN1_OPEN_TYPE OPTIONAL %%------------------------------------------------- - {EncBytes2,EncLen2} = 'enc_Reject_problem'(Cindex2, []), + {EncBytes4,EncLen4} = case Cindex4 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + encode_open_type(Cindex4, []) + end, - BytesSoFar = [EncBytes1, EncBytes2], -LenSoFar = EncLen1 + EncLen2, + BytesSoFar = [EncBytes1, EncBytes2, EncBytes3, EncBytes4], +LenSoFar = EncLen1 + EncLen2 + EncLen3 + EncLen4, encode_tags(TagIn, BytesSoFar, LenSoFar). %%================================ -%% Reject_problem +%% Invoke_linkedId %%================================ -'enc_Reject_problem'(Val, TagIn) -> +'enc_Invoke_linkedId'(Val, TagIn) -> {EncBytes,EncLen} = case element(1,Val) of - general -> - encode_integer(element(2,Val), [{unrecognisedPDU,0},{mistypedPDU,1},{badlyStructuredPDU,2}], [<<128>>]); - invoke -> - encode_integer(element(2,Val), [{duplicateInvocation,0},{unrecognisedOperation,1},{mistypedArgument,2},{resourceLimitation,3},{releaseInProgress,4},{unrecognisedLinkedId,5},{linkedResponseUnexpected,6},{unexpectedLinkedOperation,7}], [<<129>>]); - returnResult -> - encode_integer(element(2,Val), [{unrecognisedInvocation,0},{resultResponseUnexpected,1},{mistypedResult,2}], [<<130>>]); - returnError -> - encode_integer(element(2,Val), [{unrecognisedInvocation,0},{errorResponseUnexpected,1},{unrecognisedError,2},{unexpectedError,3},{mistypedParameter,4}], [<<131>>]); + present -> + encode_integer(element(2,Val), [<<128>>]); + absent -> + encode_null(element(2,Val), [<<129>>]); Else -> exit({error,{asn1,{invalid_choice_type,Else}}}) end, @@ -539,10 +729,10 @@ encode_tags(TagIn, EncBytes, EncLen). -'dec_Reject'(Tlv) -> - 'dec_Reject'(Tlv, [16]). +'dec_Invoke'(Tlv) -> + 'dec_Invoke'(Tlv, [16]). -'dec_Reject'(Tlv, TagIn) -> +'dec_Invoke'(Tlv, TagIn) -> %%------------------------------------------------- %% decode tag and length %%------------------------------------------------- @@ -555,54 +745,50 @@ Tlv1 = match_tags(Tlv, TagIn), Term1 = 'dec_InvokeId'(V1, []), %%------------------------------------------------- -%% attribute problem(2) with type CHOICE +%% attribute linkedId(2) with type CHOICE OPTIONAL %%------------------------------------------------- -[V2|Tlv3] = Tlv2, -Term2 = 'dec_Reject_problem'(V2, []), +{Term2,Tlv3} = case Tlv2 of +[V2 = {131072,_}|TempTlv3] -> + {'dec_Invoke_linkedId'(V2, []), TempTlv3}; +[V2 = {131073,_}|TempTlv3] -> + {'dec_Invoke_linkedId'(V2, []), TempTlv3}; + _ -> + { asn1_NOVALUE, Tlv2} +end, -case Tlv3 of -[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv3}}}) % extra fields not allowed +%%------------------------------------------------- +%% attribute opcode(3) External Remote-Operations-Generic-ROS-PDUs:Code +%%------------------------------------------------- +[V3|Tlv4] = Tlv3, +Term3 = 'dec_Code'(V3, []), + +%%------------------------------------------------- +%% attribute argument(4) with type ASN1_OPEN_TYPE OPTIONAL +%%------------------------------------------------- +{Term4,Tlv5} = case Tlv4 of +[V4|TempTlv5] -> + {decode_open_type_as_binary(V4, []), TempTlv5}; + _ -> + { asn1_NOVALUE, Tlv4} end, - {'Reject', Term1, Term2}. -'dec_Reject_problem'(Tlv, TagIn) -> +case Tlv5 of +[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv5}}}) % extra fields not allowed +end, + {'Invoke', Term1, Term2, Term3, Term4}. + +'dec_Invoke_linkedId'(Tlv, TagIn) -> Tlv1 = match_tags(Tlv, TagIn), case (case Tlv1 of [CtempTlv1] -> CtempTlv1; _ -> Tlv1 end) of -%% 'general' +%% 'present' {131072, V1} -> - {general, begin -Val1 = decode_integer(V1, []), -number2name(Val1, [{unrecognisedPDU,0},{mistypedPDU,1},{badlyStructuredPDU,2}]) -end -}; + {present, decode_integer(V1, [])}; -%% 'invoke' +%% 'absent' {131073, V1} -> - {invoke, begin -Val2 = decode_integer(V1, []), -number2name(Val2, [{duplicateInvocation,0},{unrecognisedOperation,1},{mistypedArgument,2},{resourceLimitation,3},{releaseInProgress,4},{unrecognisedLinkedId,5},{linkedResponseUnexpected,6},{unexpectedLinkedOperation,7}]) -end -}; - - -%% 'returnResult' - {131074, V1} -> - {returnResult, begin -Val3 = decode_integer(V1, []), -number2name(Val3, [{unrecognisedInvocation,0},{resultResponseUnexpected,1},{mistypedResult,2}]) -end -}; - - -%% 'returnError' - {131075, V1} -> - {returnError, begin -Val4 = decode_integer(V1, []), -number2name(Val4, [{unrecognisedInvocation,0},{errorResponseUnexpected,1},{unrecognisedError,2},{unexpectedError,3},{mistypedParameter,4}]) -end -}; + {absent, decode_null(V1, [])}; Else -> exit({error,{asn1,{invalid_choice_tag,Else}}}) @@ -611,158 +797,126 @@ end %%================================ -%% GeneralProblem +%% ROS %%================================ -'enc_GeneralProblem'(Val) -> - 'enc_GeneralProblem'(Val, [<<2>>]). - -'enc_GeneralProblem'(Val, TagIn) -> -encode_integer(Val, [{unrecognisedPDU,0},{mistypedPDU,1},{badlyStructuredPDU,2}], TagIn). - - -'dec_GeneralProblem'(Tlv) -> - 'dec_GeneralProblem'(Tlv, [2]). +'enc_ROS'(Val) -> + 'enc_ROS'(Val, []). -'dec_GeneralProblem'(Tlv, TagIn) -> -begin -Val1 = decode_integer(Tlv, TagIn), -number2name(Val1, [{unrecognisedPDU,0},{mistypedPDU,1},{badlyStructuredPDU,2}]) -end -. +'enc_ROS'(Val, TagIn) -> + {EncBytes,EncLen} = case element(1,Val) of + invoke -> + 'enc_Invoke'(element(2,Val), [<<161>>]); + returnResult -> + 'enc_ReturnResult'(element(2,Val), [<<162>>]); + returnError -> + 'enc_ReturnError'(element(2,Val), [<<163>>]); + reject -> + 'enc_Reject'(element(2,Val), [<<164>>]); + Else -> + exit({error,{asn1,{invalid_choice_type,Else}}}) + end, +encode_tags(TagIn, EncBytes, EncLen). -%%================================ -%% InvokeProblem -%%================================ -'enc_InvokeProblem'(Val) -> - 'enc_InvokeProblem'(Val, [<<2>>]). -'enc_InvokeProblem'(Val, TagIn) -> -encode_integer(Val, [{duplicateInvocation,0},{unrecognisedOperation,1},{mistypedArgument,2},{resourceLimitation,3},{releaseInProgress,4},{unrecognisedLinkedId,5},{linkedResponseUnexpected,6},{unexpectedLinkedOperation,7}], TagIn). +'dec_ROS'(Tlv) -> + 'dec_ROS'(Tlv, []). -'dec_InvokeProblem'(Tlv) -> - 'dec_InvokeProblem'(Tlv, [2]). +'dec_ROS'(Tlv, TagIn) -> +Tlv1 = match_tags(Tlv, TagIn), +case (case Tlv1 of [CtempTlv1] -> CtempTlv1; _ -> Tlv1 end) of -'dec_InvokeProblem'(Tlv, TagIn) -> -begin -Val1 = decode_integer(Tlv, TagIn), -number2name(Val1, [{duplicateInvocation,0},{unrecognisedOperation,1},{mistypedArgument,2},{resourceLimitation,3},{releaseInProgress,4},{unrecognisedLinkedId,5},{linkedResponseUnexpected,6},{unexpectedLinkedOperation,7}]) -end -. +%% 'invoke' + {131073, V1} -> + {invoke, 'dec_Invoke'(V1, [])}; +%% 'returnResult' + {131074, V1} -> + {returnResult, 'dec_ReturnResult'(V1, [])}; -%%================================ -%% ReturnResultProblem -%%================================ -'enc_ReturnResultProblem'(Val) -> - 'enc_ReturnResultProblem'(Val, [<<2>>]). -'enc_ReturnResultProblem'(Val, TagIn) -> -encode_integer(Val, [{unrecognisedInvocation,0},{resultResponseUnexpected,1},{mistypedResult,2}], TagIn). +%% 'returnError' + {131075, V1} -> + {returnError, 'dec_ReturnError'(V1, [])}; -'dec_ReturnResultProblem'(Tlv) -> - 'dec_ReturnResultProblem'(Tlv, [2]). +%% 'reject' + {131076, V1} -> + {reject, 'dec_Reject'(V1, [])}; -'dec_ReturnResultProblem'(Tlv, TagIn) -> -begin -Val1 = decode_integer(Tlv, TagIn), -number2name(Val1, [{unrecognisedInvocation,0},{resultResponseUnexpected,1},{mistypedResult,2}]) -end + Else -> + exit({error,{asn1,{invalid_choice_tag,Else}}}) + end . +'noInvokeId'() -> +{absent,'NULL'}. + %%================================ -%% ReturnErrorProblem +%% no-op %%================================ -'enc_ReturnErrorProblem'(Val) -> - 'enc_ReturnErrorProblem'(Val, [<<2>>]). - -'enc_ReturnErrorProblem'(Val, TagIn) -> -encode_integer(Val, [{unrecognisedInvocation,0},{errorResponseUnexpected,1},{unrecognisedError,2},{unexpectedError,3},{mistypedParameter,4}], TagIn). +'enc_no-op'('ArgumentType', Val, _RestPrimFieldName) -> + {Val,0}; +'enc_no-op'('ResultType', Val, _RestPrimFieldName) -> + {Val,0}. -'dec_ReturnErrorProblem'(Tlv) -> - 'dec_ReturnErrorProblem'(Tlv, [2]). +'dec_no-op'('ArgumentType', Bytes,_) -> + Bytes; +'dec_no-op'('ResultType', Bytes,_) -> + Bytes. -'dec_ReturnErrorProblem'(Tlv, TagIn) -> -begin -Val1 = decode_integer(Tlv, TagIn), -number2name(Val1, [{unrecognisedInvocation,0},{errorResponseUnexpected,1},{unrecognisedError,2},{unexpectedError,3},{mistypedParameter,4}]) -end -. %%================================ -%% RejectProblem +%% refuse %%================================ -'enc_RejectProblem'(Val) -> - 'enc_RejectProblem'(Val, [<<2>>]). - -'enc_RejectProblem'(Val, TagIn) -> -encode_integer(Val, [{'general-unrecognisedPDU',0},{'general-mistypedPDU',1},{'general-badlyStructuredPDU',2},{'invoke-duplicateInvocation',10},{'invoke-unrecognisedOperation',11},{'invoke-mistypedArgument',12},{'invoke-resourceLimitation',13},{'invoke-releaseInProgress',14},{'invoke-unrecognisedLinkedId',15},{'invoke-linkedResponseUnexpected',16},{'invoke-unexpectedLinkedOperation',17},{'returnResult-unrecognisedInvocation',20},{'returnResult-resultResponseUnexpected',21},{'returnResult-mistypedResult',22},{'returnError-unrecognisedInvocation',30},{'returnError-errorResponseUnexpected',31},{'returnError-unrecognisedError',32},{'returnError-unexpectedError',33},{'returnError-mistypedParameter',34}], TagIn). +'enc_refuse'('ParameterType', Val, _RestPrimFieldName) -> + {Val,0}. -'dec_RejectProblem'(Tlv) -> - 'dec_RejectProblem'(Tlv, [2]). +'dec_refuse'('ParameterType', Bytes,_) -> + Bytes. -'dec_RejectProblem'(Tlv, TagIn) -> -begin -Val1 = decode_integer(Tlv, TagIn), -number2name(Val1, [{'general-unrecognisedPDU',0},{'general-mistypedPDU',1},{'general-badlyStructuredPDU',2},{'invoke-duplicateInvocation',10},{'invoke-unrecognisedOperation',11},{'invoke-mistypedArgument',12},{'invoke-resourceLimitation',13},{'invoke-releaseInProgress',14},{'invoke-unrecognisedLinkedId',15},{'invoke-linkedResponseUnexpected',16},{'invoke-unexpectedLinkedOperation',17},{'returnResult-unrecognisedInvocation',20},{'returnResult-resultResponseUnexpected',21},{'returnResult-mistypedResult',22},{'returnError-unrecognisedInvocation',30},{'returnError-errorResponseUnexpected',31},{'returnError-unrecognisedError',32},{'returnError-unexpectedError',33},{'returnError-mistypedParameter',34}]) -end -. %%================================ -%% InvokeId +%% emptyUnbind %%================================ -'enc_InvokeId'(Val) -> - 'enc_InvokeId'(Val, []). - -'enc_InvokeId'(Val, TagIn) -> - {EncBytes,EncLen} = case element(1,Val) of - present -> - encode_integer(element(2,Val), [<<2>>]); - absent -> - encode_null(element(2,Val), [<<5>>]); - Else -> - exit({error,{asn1,{invalid_choice_type,Else}}}) - end, - -encode_tags(TagIn, EncBytes, EncLen). - +'enc_emptyUnbind'('ArgumentType', Val, _RestPrimFieldName) -> + {Val,0}; +'enc_emptyUnbind'('ResultType', Val, _RestPrimFieldName) -> + {Val,0}. +'dec_emptyUnbind'('ArgumentType', Bytes,_) -> + Bytes; +'dec_emptyUnbind'('ResultType', Bytes,_) -> + Bytes. -'dec_InvokeId'(Tlv) -> - 'dec_InvokeId'(Tlv, []). -'dec_InvokeId'(Tlv, TagIn) -> -Tlv1 = match_tags(Tlv, TagIn), -case (case Tlv1 of [CtempTlv1] -> CtempTlv1; _ -> Tlv1 end) of -%% 'present' - {2, V1} -> - {present, decode_integer(V1, [])}; +%%================================ +%% emptyBind +%%================================ +'enc_emptyBind'('ArgumentType', Val, _RestPrimFieldName) -> + {Val,0}; +'enc_emptyBind'('ResultType', Val, _RestPrimFieldName) -> + {Val,0}. -%% 'absent' - {5, V1} -> - {absent, decode_null(V1, [])}; - Else -> - exit({error,{asn1,{invalid_choice_tag,Else}}}) - end -. -'noInvokeId'() -> -{absent,'NULL'}. +'dec_emptyBind'('ArgumentType', Bytes,_) -> + Bytes; +'dec_emptyBind'('ResultType', Bytes,_) -> + Bytes. %%% @@ -782,6 +936,13 @@ ber_encode(Tlv) when is_binary(Tlv) -> ber_encode(Tlv) -> asn1rt_nif:encode_ber_tlv(Tlv). +dec_subidentifiers(<<>>, _Av, Al) -> + lists:reverse(Al); +dec_subidentifiers(<<1:1,H:7,T/binary>>, Av, Al) -> + dec_subidentifiers(T, Av bsl 7 + H, Al); +dec_subidentifiers(<>, Av, Al) -> + dec_subidentifiers(T, 0, [Av bsl 7 + H|Al]). + decode_integer(Tlv, TagIn) -> Bin = match_tags(Tlv, TagIn), Len = byte_size(Bin), @@ -797,9 +958,37 @@ decode_null(Tlv, Tags) -> exit({error,{asn1,{decode_null,Val}}}) end. +decode_object_identifier(Tlv, Tags) -> + Val = match_tags(Tlv, Tags), + [AddedObjVal|ObjVals] = dec_subidentifiers(Val, 0, []), + {Val1,Val2} = + if + AddedObjVal < 40 -> + {0,AddedObjVal}; + AddedObjVal < 80 -> + {1,AddedObjVal - 40}; + true -> + {2,AddedObjVal - 80} + end, + list_to_tuple([Val1,Val2|ObjVals]). + decode_open_type_as_binary(Tlv, TagIn) -> ber_encode(match_tags(Tlv, TagIn)). +e_object_identifier({'OBJECT IDENTIFIER',V}) -> + e_object_identifier(V); +e_object_identifier(V) when is_tuple(V) -> + e_object_identifier(tuple_to_list(V)); +e_object_identifier([E1,E2|Tail]) -> + Head = 40 * E1 + E2, + {H,Lh} = mk_object_val(Head), + {R,Lr} = lists:mapfoldl(fun enc_obj_id_tail/2, 0, Tail), + {[H|R],Lh + Lr}. + +enc_obj_id_tail(H, Len) -> + {B,L} = mk_object_val(H), + {B,Len + L}. + encode_integer(Val) -> Bytes = if @@ -850,6 +1039,9 @@ encode_length(L) -> encode_null(_Val, TagIn) -> encode_tags(TagIn, [], 0). +encode_object_identifier(Val, TagIn) -> + encode_tags(TagIn, e_object_identifier(Val)). + encode_open_type(Val, T) when is_list(Val) -> encode_open_type(list_to_binary(Val), T); encode_open_type(Val, Tag) -> @@ -887,6 +1079,16 @@ minimum_octets(Val, Acc) -> minimum_octets(Val) -> minimum_octets(Val, []). +mk_object_val(0, Ack, Len) -> + {Ack,Len}; +mk_object_val(Val, Ack, Len) -> + mk_object_val(Val bsr 7, [Val band 127 bor 128|Ack], Len + 1). + +mk_object_val(Val) when Val =< 127 -> + {[255 band Val],1}; +mk_object_val(Val) -> + mk_object_val(Val bsr 7, [Val band 127], 1). + number2name(Int, NamedNumberList) -> case lists:keyfind(Int, 2, NamedNumberList) of {NamedVal,_} -> diff --git a/Remote-Operations-Generic-ROS-PDUs.hrl b/Remote-Operations-Generic-ROS-PDUs.hrl index 318d27f..a77fb1f 100644 --- a/Remote-Operations-Generic-ROS-PDUs.hrl +++ b/Remote-Operations-Generic-ROS-PDUs.hrl @@ -8,8 +8,11 @@ -ifndef(_REMOTE_OPERATIONS_GENERIC_ROS_PDUS_HRL_). -define(_REMOTE_OPERATIONS_GENERIC_ROS_PDUS_HRL_, true). --record('Invoke',{ -invokeId, linkedId = asn1_NOVALUE, opcode, argument = asn1_NOVALUE}). +-record('Reject',{ +invokeId, problem}). + +-record('ReturnError',{ +invokeId, errcode, parameter = asn1_NOVALUE}). -record('ReturnResult',{ invokeId, result = asn1_NOVALUE}). @@ -17,11 +20,8 @@ invokeId, result = asn1_NOVALUE}). -record('ReturnResult_result',{ opcode, result}). --record('ReturnError',{ -invokeId, errcode, parameter = asn1_NOVALUE}). - --record('Reject',{ -invokeId, problem}). +-record('Invoke',{ +invokeId, linkedId = asn1_NOVALUE, opcode, argument = asn1_NOVALUE}). -define('noInvokeId', {absent,'NULL'}). -endif. %% _REMOTE_OPERATIONS_GENERIC_ROS_PDUS_HRL_ -- cgit v1.2.3