Exemplo n.º 1
0
        public void TestMerge()
        {
            var p = new ArtiProject();

            p.AddSource(@"ADifferent.arti", Helpers.ReadTestFile("ADifferent.arti"));
            p.AddSource(@"OS.arti", Helpers.ReadTestFile("OS.arti"));
            p.AddSource(@"AModule.arti", Helpers.ReadTestFile("AModule.arti"));
            var content = p.SaveToProjectFile(pretty: false);

            Assert.That(content, Does.Contain("\"FileNames\":[\"ADifferent.arti\",\"OS.arti\",\"AModule.arti\"]"));
            Assert.That(content, Does.Contain("\"ActiveStates\":[]"));
            Assert.That(content, Does.Contain("\"ActiveEvents\":[]"));

            var os      = p.GetDescriptionFor("OS.arti");
            var ar_core = os.Classes.Find(x => x.Name == "AR_CORE");

            var current_app = ar_core.States.Find(x => x.Name == "CURRENTAPPLICATION");

            current_app.Selected = true;

            var err = ar_core.Events.Find(x => x.Name == "ERROR");

            err.Selected = true;

            var merge = p.CreateMergedOutputString("TestGenerator");

            //Console.Write(merge);

            Assert.That(merge, Does.Contain("{\r\n  \"$Meta\": {\r\n    \"schema\": \"URL_to_schema_version\",\r\n    \"description\": \"Merged ARTI\",\r\n    \"generator\": \"TestGenerator\",\r\n    \"date\":"));
            Assert.That(merge, Does.Contain("\"merge_sources\": [\r\n      {\r\n        \"schema\": \"URL_to_schema_version\",\r\n        \"description\": \"ARTI description for project \'Hello World\'\",\r\n        \"generator\": \"ADifferent version 0.0.0\",\r\n        \"date\": \"Mon Feb 06 14:12:44 +0000 2017\",\r\n        \"includes\": [\r\n          \"ADifferent.h\"\r\n        ],\r\n        \"arxml_sources\": [],\r\n        \"code_sources\": [],\r\n        \"origin\": \"ADifferent.arti\"\r\n      },\r\n      {\r\n        \"schema\": \"URL_to_schema_version\",\r\n        \"description\": \"ARTI description generated from \'HelloWorld\'\",\r\n        \"generator\": \"os_artigen version 0.0.1 for RTA-OS\",\r\n        \"date\": \"Mon Feb 06 14:12:44 +0000 2017\",\r\n        \"includes\": [\r\n          \"Os_Arti.h\"\r\n        ],\r\n        \"origin\": \"OS.arti\"\r\n      },\r\n      {\r\n        \"schema\": \"URL_to_schema_version\",\r\n        \"description\": \"ARTI description for project \'Hello World\'\",\r\n        \"generator\": \"AModule version 0.0.0\",\r\n        \"date\": \"Mon Feb 06 14:12:44 +0000 2017\",\r\n        \"includes\": [\r\n          \"AModule.h\"\r\n        ],\r\n        \"arxml_sources\": [],\r\n        \"code_sources\": [],\r\n        \"origin\": \"AModule.arti\"\r\n      }\r\n    ]\r\n  },\r\n  \"$Classes\": {\r\n    \"ADIFFERENT\": {\r\n      \"states\": {\r\n        \"RUNNINGBLOB\": {\r\n          \"description\": \"Running Blob\",\r\n          \"type\": \"map\",\r\n          \"values\": {\r\n            \"0\": \"NO_BLOB\",\r\n            \"10\": \"A_BLOB\",\r\n            \"20\": \"B_BLOB\"\r\n          }\r\n        }\r\n      },\r\n      \"events\": {\r\n        \"BLOB_START\": {\r\n          \"description\": \"Blob start\",\r\n          \"type\": \"map\",\r\n          \"values\": {\r\n            \"0\": \"A_BLOB\",\r\n            \"1\": \"B_BLOB\"\r\n          },\r\n          \"active\": \"false\"\r\n        },\r\n        \"BLOB_STOP\": {\r\n          \"description\": \"Blob completion\",\r\n          \"type\": \"map\",\r\n          \"values\": {\r\n            \"0\": \"A_BLOB\",\r\n            \"1\": \"B_BLOB\"\r\n          },\r\n          \"active\": \"false\"\r\n        }\r\n      },\r\n      \"constants\": {},\r\n      \"description\": \"\"\r\n    },\r\n    \"AR_OS\": {\r\n      \"states\": {\r\n        \"CURRENTAPPMODE\": {\r\n          \"description\": \"AppMode\",\r\n          \"type\": \"map\",\r\n          \"values\": {\r\n            \"1\": \"OSDEFAULTAPPMODE\",\r\n            \"0\": \"NO_APPMODE\"\r\n          }\r\n        }\r\n      },\r\n      \"events\": {},\r\n      \"constants\": {\r\n        \"NumberOfCores\": {\r\n          \"description\": \"Number of cores used by OS\",\r\n          \"type\": \"unsigned integer\"\r\n        }\r\n      },\r\n      \"description\": \"This is (will be) the class specified by AUTOSAR to describe an AUTOSAR OS.\\nThere will normally be one OS per ECU, but the OS will manage one or more AR_COREs.\\n\"\r\n    },\r\n    \"AR_CORE\": {\r\n      \"states\": {\r\n        \"CURRENTAPPLICATION\": {\r\n          \"description\": \"Application\",\r\n          \"type\": \"map\",\r\n          \"values\": {\r\n            \"1\": \"Application0\",\r\n            \"2\": \"Application1\",\r\n            \"0\": \"NO_APPLICATION\"\r\n          }\r\n        },\r\n        \"LASTERROR\": {\r\n          \"description\": \"Application\",\r\n          \"type\": \"map\",\r\n          \"values\": {\r\n            \"1\": \"E_OS_ACCESS\",\r\n            \"2\": \"E_OS_CALLEVEL\",\r\n            \"3\": \"E_OS_ID\",\r\n            \"4\": \"E_OS_LIMIT\",\r\n            \"5\": \"E_OS_NOFUNC\",\r\n            \"6\": \"E_OS_RESOURCE\",\r\n            \"7\": \"E_OS_STATE\",\r\n            \"8\": \"E_OS_VALUE\",\r\n            \"9\": \"E_OS_SERVICEID\",\r\n            \"10\": \"E_OS_ILLEGAL_ADDRESS\",\r\n            \"11\": \"E_OS_MISSINGEND\",\r\n            \"12\": \"E_OS_DISABLEDINT\",\r\n            \"13\": \"E_OS_STACKFAULT\",\r\n            \"14\": \"E_OS_PROTECTION_MEMORY\",\r\n            \"15\": \"E_OS_PROTECTION_TIME\",\r\n            \"16\": \"E_OS_PROTECTION_ARRIVAL\",\r\n            \"17\": \"E_OS_PROTECTION_LOCKED\",\r\n            \"18\": \"E_OS_PROTECTION_EXCEPTION\",\r\n            \"19\": \"E_OS_CORE\",\r\n            \"20\": \"E_OS_SPINLOCK\",\r\n            \"21\": \"E_OS_INTERFERENCE_DEADLOCK\",\r\n            \"22\": \"E_OS_NESTING_DEADLOCK\",\r\n            \"23\": \"E_OS_SYS_NO_RESTART\",\r\n            \"24\": \"E_OS_SYS_RESTART\",\r\n            \"25\": \"E_OS_SYS_OVERRUN\",\r\n            \"26\": \"E_OS_XCORE_QFULL\",\r\n            \"0\": \"E_OK\"\r\n          }\r\n        },\r\n        \"RUNNINGTASK\": {\r\n          \"description\": \"Running Task\",\r\n          \"type\": \"map\",\r\n          \"values\": {\r\n            \"Os_const_tasks[0]\": \"LowPriority\",\r\n            \"Os_const_tasks[1]\": \"HighPriority\",\r\n            \"0\": \"idle\"\r\n          }\r\n        },\r\n        \"RUNNINGTASKPRIORITY\": {\r\n          \"description\": \"Task priority\",\r\n          \"type\": \"map\",\r\n          \"values\": {\r\n            \"1\": \"TPL 1\",\r\n            \"0\": \"idle\"\r\n          }\r\n        },\r\n        \"RUNNINGISR2\": {\r\n          \"description\": \"Running Cat 2 ISR\",\r\n          \"type\": \"map\",\r\n          \"values\": {\r\n            \"&Os_const_isrs[0]\": \"Millisecond\",\r\n            \"0\": \"NO_ISR\"\r\n          }\r\n        }\r\n      },\r\n      \"events\": {\r\n        \"APPLICATION\": {\r\n          \"description\": \"AUTOSAR OS Application change\",\r\n          \"values\": {\r\n            \"1\": \"Application0\",\r\n            \"2\": \"Application1\",\r\n            \"0\": \"NO_APPLICATION\"\r\n          },\r\n          \"active\": \"false\"\r\n        },\r\n        \"ERROR\": {\r\n          \"description\": \"AUTOSAR Error code raised\",\r\n          \"values\": {\r\n            \"1\": \"E_OS_ACCESS\",\r\n            \"2\": \"E_OS_CALLEVEL\",\r\n            \"3\": \"E_OS_ID\",\r\n            \"4\": \"E_OS_LIMIT\",\r\n            \"5\": \"E_OS_NOFUNC\",\r\n            \"6\": \"E_OS_RESOURCE\",\r\n            \"7\": \"E_OS_STATE\",\r\n            \"8\": \"E_OS_VALUE\",\r\n            \"9\": \"E_OS_SERVICEID\",\r\n            \"10\": \"E_OS_ILLEGAL_ADDRESS\",\r\n            \"11\": \"E_OS_MISSINGEND\",\r\n            \"12\": \"E_OS_DISABLEDINT\",\r\n            \"13\": \"E_OS_STACKFAULT\",\r\n            \"14\": \"E_OS_PROTECTION_MEMORY\",\r\n            \"15\": \"E_OS_PROTECTION_TIME\",\r\n            \"16\": \"E_OS_PROTECTION_ARRIVAL\",\r\n            \"17\": \"E_OS_PROTECTION_LOCKED\",\r\n            \"18\": \"E_OS_PROTECTION_EXCEPTION\",\r\n            \"19\": \"E_OS_CORE\",\r\n            \"20\": \"E_OS_SPINLOCK\",\r\n            \"21\": \"E_OS_INTERFERENCE_DEADLOCK\",\r\n            \"22\": \"E_OS_NESTING_DEADLOCK\",\r\n            \"23\": \"E_OS_SYS_NO_RESTART\",\r\n            \"24\": \"E_OS_SYS_RESTART\",\r\n            \"25\": \"E_OS_SYS_OVERRUN\",\r\n            \"26\": \"E_OS_XCORE_QFULL\",\r\n            \"0\": \"E_OK\"\r\n          },\r\n          \"active\": \"true\"\r\n        },\r\n        \"TRUSTED_FUNCTION_START\": {\r\n          \"description\": \"Start of a trusted function\",\r\n          \"values\": {\r\n            \"0\": \"TODO\"\r\n          },\r\n          \"active\": \"false\"\r\n        },\r\n        \"TRUSTED_FUNCTION_STOP\": {\r\n          \"description\": \"Stop of a trusted function\",\r\n          \"values\": {\r\n            \"0\": \"TODO\"\r\n          },\r\n          \"active\": \"false\"\r\n        },\r\n        \"TASK_ACTIVATE\": {\r\n          \"description\": \"AUTOSAR Task activate\",\r\n          \"values\": {\r\n            \"0\": \"LowPriority\",\r\n            \"1\": \"HighPriority\"\r\n          },\r\n          \"active\": \"false\"\r\n        },\r\n        \"TASK_START\": {\r\n          \"description\": \"AUTOSAR Task start\",\r\n          \"values\": {\r\n            \"0\": \"LowPriority\",\r\n            \"1\": \"HighPriority\"\r\n          },\r\n          \"active\": \"false\"\r\n        },\r\n        \"TASK_WAIT\": {\r\n          \"description\": \"AUTOSAR Task wait\",\r\n          \"values\": {\r\n            \"0\": \"LowPriority\",\r\n            \"1\": \"HighPriority\"\r\n          },\r\n          \"active\": \"false\"\r\n        },\r\n        \"TASK_RESUME\": {\r\n          \"description\": \"AUTOSAR Task resume from wait\",\r\n          \"values\": {\r\n            \"0\": \"LowPriority\",\r\n            \"1\": \"HighPriority\"\r\n          },\r\n          \"active\": \"false\"\r\n        },\r\n        \"TASK_STOP\": {\r\n          \"description\": \"AUTOSAR Task completion\",\r\n          \"values\": {\r\n            \"0\": \"LowPriority\",\r\n            \"1\": \"HighPriority\"\r\n          },\r\n          \"active\": \"false\"\r\n        },\r\n        \"ISR2_START\": {\r\n          \"description\": \"AUTOSAR Category 2 start\",\r\n          \"values\": {\r\n            \"0\": \"Millisecond\"\r\n          },\r\n          \"active\": \"false\"\r\n        },\r\n        \"ISR2_STOP\": {\r\n          \"description\": \"AUTOSAR Category 2 completion\",\r\n          \"values\": {\r\n            \"0\": \"Millisecond\"\r\n          },\r\n          \"active\": \"false\"\r\n        }\r\n      },\r\n      \"constants\": {\r\n        \"PhysicalCore\": {\r\n          \"description\": \"Core number\",\r\n          \"type\": \"string\"\r\n        }\r\n      },\r\n      \"description\": \"This is (will be) the class specified by AUTOSAR to describe a single core managed by an AUTOSAR OS.\\nThere will normally be one or more AR_COREs. Non-AUTOSAR cores that are started be the AUTOSAR OS can be described using classes that are relevant to themselves.\\n\"\r\n    },\r\n    \"RTAOS_CORE\": {\r\n      \"states\": {\r\n        \"RUNNINGISR1\": {\r\n          \"description\": \"Running Cat 1 ISR\",\r\n          \"type\": \"map\",\r\n          \"values\": {\r\n            \"0\": \"NO_ISR\"\r\n          }\r\n        }\r\n      },\r\n      \"events\": {\r\n        \"ISR1_START\": {\r\n          \"description\": \"AUTOSAR Category 1 start\",\r\n          \"values\": {},\r\n          \"active\": \"false\"\r\n        },\r\n        \"ISR1_STOP\": {\r\n          \"description\": \"AUTOSAR Category 1 completion\",\r\n          \"values\": {},\r\n          \"active\": \"false\"\r\n        }\r\n      },\r\n      \"constants\": {},\r\n      \"description\": \"This class describes the RTA-OS extensions to AR_CORE.\\n\"\r\n    },\r\n    \"AR_TASK\": {\r\n      \"states\": {\r\n        \"ACTIVATIONS\": {\r\n          \"description\": \"Number of activations\",\r\n          \"type\": \"unsigned char\"\r\n        },\r\n        \"STATE\": {\r\n          \"description\": \"Task State\",\r\n          \"type\": \"map\",\r\n          \"values\": {\r\n            \"0\": \"SUSPENDED\",\r\n            \"1\": \"RUNNING\",\r\n            \"2\": \"READY\",\r\n            \"3\": \"RUNNING\",\r\n            \"4\": \"WAITING\",\r\n            \"5\": \"RUNNING\",\r\n            \"6\": \"READY\",\r\n            \"7\": \"RUNNING\"\r\n          }\r\n        }\r\n      },\r\n      \"events\": {},\r\n      \"constants\": {\r\n        \"Priority\": {\r\n          \"description\": \"Task Dispatch Priority\",\r\n          \"type\": \"string\"\r\n        },\r\n        \"PhysicalCore\": {\r\n          \"description\": \"Core Task runs on\",\r\n          \"type\": \"string\"\r\n        }\r\n      },\r\n      \"description\": \"This is (will be) the class specified by AUTOSAR to describe a TASK.\\nEvents that are task-related at attached to the OS, because it is the OS that does the scheduling.\\n\"\r\n    },\r\n    \"RTAOS_TASK\": {\r\n      \"states\": {\r\n        \"Stack0Max\": {\r\n          \"description\": \"Max usage on stack 0\",\r\n          \"type\": \"unsigned\"\r\n        },\r\n        \"Stack1Max\": {\r\n          \"description\": \"Max usage on stack 1\",\r\n          \"type\": \"unsigned\"\r\n        }\r\n      },\r\n      \"events\": {},\r\n      \"constants\": {\r\n        \"BasePriority\": {\r\n          \"description\": \"Task Base Priority\",\r\n          \"type\": \"string\"\r\n        },\r\n        \"PhysicalCore\": {\r\n          \"description\": \"Core Task runs on\",\r\n          \"type\": \"string\"\r\n        }\r\n      },\r\n      \"description\": \"This describes the RTA-OS extensions to an AR_TASK.\\n\"\r\n    },\r\n    \"AR_ISR2\": {\r\n      \"states\": {},\r\n      \"events\": {},\r\n      \"constants\": {\r\n        \"PhysicalCore\": {\r\n          \"description\": \"Core ISR2 runs on\",\r\n          \"type\": \"string\"\r\n        }\r\n      },\r\n      \"description\": \"This is (will be) the class specified by AUTOSAR to describe a Category 2 ISR.\\n\"\r\n    },\r\n    \"RTAOS_ISR2\": {\r\n      \"states\": {\r\n        \"Stack0Max\": {\r\n          \"description\": \"Max usage on stack 0\",\r\n          \"type\": \"unsigned integer\"\r\n        },\r\n        \"Stack1Max\": {\r\n          \"description\": \"Max usage on stack 1\",\r\n          \"type\": \"unsigned integer\"\r\n        }\r\n      },\r\n      \"events\": {},\r\n      \"constants\": {\r\n        \"Priority\": {\r\n          \"description\": \"ISR2 Dispatch Priority\",\r\n          \"type\": \"unsigned integer\"\r\n        },\r\n        \"BasePriority\": {\r\n          \"description\": \"ISR2 Base Priority\",\r\n          \"type\": \"text\"\r\n        }\r\n      },\r\n      \"description\": \"This describes the RTA-OS extensions to an AR_ISR2.\\n\"\r\n    },\r\n    \"RTAOS_ISR1\": {\r\n      \"states\": {},\r\n      \"events\": {},\r\n      \"constants\": {\r\n        \"Priority\": {\r\n          \"description\": \"ISR1 Dispatch Priority\",\r\n          \"type\": \"unsigned integer\"\r\n        },\r\n        \"BasePriority\": {\r\n          \"description\": \"ISR1 Base Priority\",\r\n          \"type\": \"text\"\r\n        },\r\n        \"PhysicalCore\": {\r\n          \"description\": \"Core ISR1 runs on\",\r\n          \"type\": \"string\"\r\n        }\r\n      },\r\n      \"description\": \"This describes the RTA-OS Category 1 ISR.\\n\"\r\n    },\r\n    \"AR_ALARM\": {\r\n      \"states\": {\r\n        \"STATE\": {\r\n          \"description\": \"Alarm state\",\r\n          \"type\": \"map\",\r\n          \"values\": {\r\n            \"0\": \"STOPPED\",\r\n            \"1\": \"RUNNING\"\r\n          }\r\n        },\r\n        \"ALARMTIME\": {\r\n          \"description\": \"Alarm Time\",\r\n          \"type\": \"unsigned integer\"\r\n        },\r\n        \"CYCLETIME\": {\r\n          \"description\": \"Cycle Time\",\r\n          \"type\": \"unsigned integer\"\r\n        }\r\n      },\r\n      \"events\": {\r\n        \"FIRE\": {\r\n          \"description\": \"AUTOSAR ALARM occurs\",\r\n          \"values\": {\r\n            \"0\": \"Alarm25ms\",\r\n            \"1\": \"Alarm50ms\"\r\n          },\r\n          \"active\": \"false\"\r\n        }\r\n      },\r\n      \"constants\": {\r\n        \"COUNTER\": {\r\n          \"description\": \"Alarm counter\",\r\n          \"type\": \"map\",\r\n          \"values\": {}\r\n        },\r\n        \"ACTION\": {\r\n          \"description\": \"Action taken by alarm\",\r\n          \"type\": \"string\"\r\n        },\r\n        \"PhysicalCore\": {\r\n          \"description\": \"Core Task runs on\",\r\n          \"type\": \"string\"\r\n        }\r\n      },\r\n      \"description\": \"This is (will be) the class specified by AUTOSAR to describe an ALARM.\\n\"\r\n    },\r\n    \"AR_SCHEDULETABLE\": {\r\n      \"states\": {\r\n        \"STATE\": {\r\n          \"description\": \"ScheduleTable state\",\r\n          \"type\": \"map\",\r\n          \"values\": {\r\n            \"0\": \"STOPPED\",\r\n            \"1\": \"NEXT\",\r\n            \"2\": \"WAITING\",\r\n            \"3\": \"RUNNING\",\r\n            \"4\": \"RUNNING_AND_SYNCHRONOUS\"\r\n          }\r\n        },\r\n        \"EXPIRYTIME\": {\r\n          \"description\": \"Expiry time\",\r\n          \"type\": \"unsigned\"\r\n        },\r\n        \"NEXT\": {\r\n          \"description\": \"Next ScheduleTable\",\r\n          \"type\": \"map\",\r\n          \"values\": {\r\n            \"0\": \"none\"\r\n          }\r\n        }\r\n      },\r\n      \"events\": {\r\n        \"FIRE\": {\r\n          \"description\": \"AUTOSAR ScheduleTable event occurs\",\r\n          \"values\": {\r\n            \"0\": \"TODO\"\r\n          },\r\n          \"active\": \"false\"\r\n        }\r\n      },\r\n      \"constants\": {\r\n        \"COUNTER\": {\r\n          \"description\": \"ScheduleTable counter\",\r\n          \"type\": \"map\",\r\n          \"values\": {}\r\n        },\r\n        \"PhysicalCore\": {\r\n          \"description\": \"Core Task runs on\",\r\n          \"type\": \"string\"\r\n        }\r\n      },\r\n      \"description\": \"This is (will be) the class specified by AUTOSAR to describe an AUTOSAR ScheduleTable.\\n\"\r\n    },\r\n    \"AR_RESOURCE\": {\r\n      \"states\": {\r\n        \"STATE\": {\r\n          \"description\": \"Resource state\",\r\n          \"type\": \"map\",\r\n          \"values\": {\r\n            \"0\": \"LOCKED\",\r\n            \"1\": \"UNLOCKED\"\r\n          }\r\n        },\r\n        \"LOCKER\": {\r\n          \"description\": \"Locker of the resource\",\r\n          \"type\": \"map\",\r\n          \"values\": {\r\n            \"Os_const_tasks[0]\": \"LowPriority\",\r\n            \"Os_const_tasks[1]\": \"HighPriority\",\r\n            \"&Os_const_isrs[0]\": \"Millisecond\",\r\n            \"0\": \"none\"\r\n          }\r\n        }\r\n      },\r\n      \"events\": {},\r\n      \"constants\": {\r\n        \"Priority\": {\r\n          \"description\": \"Ceiling priority\",\r\n          \"type\": \"string\"\r\n        },\r\n        \"PhysicalCore\": {\r\n          \"description\": \"Core Task runs on\",\r\n          \"type\": \"string\"\r\n        }\r\n      },\r\n      \"description\": \"This is (will be) the class specified by AUTOSAR to describe an AUTOSAR Resource.\\n\"\r\n    },\r\n    \"AR_SPINLOCK\": {\r\n      \"states\": {\r\n        \"STATE\": {\r\n          \"description\": \"Spinlock state\",\r\n          \"type\": \"map\",\r\n          \"values\": {\r\n            \"0\": \"UNLOCKED\",\r\n            \"1\": \"LOCKED\"\r\n          }\r\n        },\r\n        \"CORE\": {\r\n          \"description\": \"Core locking the spinlock\",\r\n          \"type\": \"map\",\r\n          \"values\": {\r\n            \"0\": \"None\",\r\n            \"&Os_ControlledCoreInfo[0U]\": \"0\",\r\n            \"&Os_ControlledCoreInfo[1U]\": \"1\"\r\n          }\r\n        }\r\n      },\r\n      \"events\": {},\r\n      \"constants\": {},\r\n      \"description\": \"This is (will be) the class specified by AUTOSAR to describe an AUTOSAR Spinlock.\\n\"\r\n    },\r\n    \"AMODULE\": {\r\n      \"states\": {\r\n        \"RUNNINGTHING\": {\r\n          \"description\": \"Running Thing\",\r\n          \"type\": \"map\",\r\n          \"values\": {\r\n            \"0\": \"NO_THING\",\r\n            \"1\": \"A_THING\",\r\n            \"2\": \"ANOTHER_THING\"\r\n          }\r\n        }\r\n      },\r\n      \"events\": {\r\n        \"THING_START\": {\r\n          \"description\": \"Thing start\",\r\n          \"type\": \"map\",\r\n          \"values\": {\r\n            \"1\": \"A_THING\",\r\n            \"2\": \"ANOTHER_THING\"\r\n          },\r\n          \"active\": \"false\"\r\n        }\r\n      },\r\n      \"constants\": {},\r\n      \"description\": \"\"\r\n    }\r\n  },\r\n  \"$Instances\": {\r\n    \"ADifferent\": {\r\n      \"classes\": [\r\n        \"ADIFFERENT\"\r\n      ],\r\n      \"states\": {\r\n        \"RUNNINGBLOB\": {\r\n          \"evaluate\": \"Os_RunningBlob\"\r\n        }\r\n      },\r\n      \"events\": {\r\n        \"BLOB_START\": {\r\n          \"active\": \"false\"\r\n        },\r\n        \"BLOB_STOP\": {\r\n          \"active\": \"false\"\r\n        }\r\n      },\r\n      \"constants\": {}\r\n    },\r\n    \"HelloWorld\": {\r\n      \"classes\": [\r\n        \"AR_OS\"\r\n      ],\r\n      \"states\": {\r\n        \"CURRENTAPPMODE\": {\r\n          \"evaluate\": \"Os_CurrentAppMode\"\r\n        }\r\n      },\r\n      \"events\": {},\r\n      \"constants\": {\r\n        \"NumberOfCores\": \"2\"\r\n      }\r\n    },\r\n    \"Core0_HelloWorld\": {\r\n      \"classes\": [\r\n        \"AR_CORE\",\r\n        \"RTAOS_CORE\"\r\n      ],\r\n      \"states\": {\r\n        \"CURRENTAPPLICATION\": {\r\n          \"evaluate\": \"(((0 != Os_ControlledCoreInfo[0U].RunningISR) ? Os_ControlledCoreInfo[0U].RunningISR->application : ((0 != Os_ControlledCoreInfo[0U].RunningTask) ? Os_ControlledCoreInfo[0U].RunningTask->application : 0) ))\"\r\n        },\r\n        \"LASTERROR\": {\r\n          \"evaluate\": \"Os_AnyCoreInfo[0].OrtiLastError\"\r\n        },\r\n        \"RUNNINGTASK\": {\r\n          \"evaluate\": \"Os_ControlledCoreInfo[0U].RunningTask\"\r\n        },\r\n        \"RUNNINGTASKPRIORITY\": {\r\n          \"evaluate\": \"Os_ControlledCoreInfo[0U].RunningTPMask.t0\"\r\n        },\r\n        \"RUNNINGISR1\": {\r\n          \"evaluate\": \"Os_RunningCat1ISR0\"\r\n        },\r\n        \"RUNNINGISR2\": {\r\n          \"evaluate\": \"Os_ControlledCoreInfo[0U].RunningISR\"\r\n        }\r\n      },\r\n      \"events\": {\r\n        \"APPLICATION\": {\r\n          \"active\": \"false\"\r\n        },\r\n        \"ERROR\": {\r\n          \"active\": \"true\"\r\n        },\r\n        \"TRUSTED_FUNCTION_START\": {\r\n          \"active\": \"false\"\r\n        },\r\n        \"TRUSTED_FUNCTION_STOP\": {\r\n          \"active\": \"false\"\r\n        },\r\n        \"TASK_ACTIVATE\": {\r\n          \"active\": \"false\"\r\n        },\r\n        \"TASK_START\": {\r\n          \"active\": \"false\"\r\n        },\r\n        \"TASK_WAIT\": {\r\n          \"active\": \"false\"\r\n        },\r\n        \"TASK_RESUME\": {\r\n          \"active\": \"false\"\r\n        },\r\n        \"TASK_STOP\": {\r\n          \"active\": \"false\"\r\n        },\r\n        \"ISR2_START\": {\r\n          \"active\": \"false\"\r\n        },\r\n        \"ISR2_STOP\": {\r\n          \"active\": \"false\"\r\n        },\r\n        \"ISR1_START\": {\r\n          \"active\": \"false\"\r\n        },\r\n        \"ISR1_STOP\": {\r\n          \"active\": \"false\"\r\n        }\r\n      },\r\n      \"constants\": {\r\n        \"PhysicalCore\": \"0\"\r\n      }\r\n    },\r\n    \"Core1_HelloWorld\": {\r\n      \"classes\": [\r\n        \"AR_CORE\",\r\n        \"RTAOS_CORE\"\r\n      ],\r\n      \"states\": {\r\n        \"CURRENTAPPLICATION\": {\r\n          \"evaluate\": \"(((0 != Os_ControlledCoreInfo[1U].RunningISR) ? Os_ControlledCoreInfo[1U].RunningISR->application : ((0 != Os_ControlledCoreInfo[1U].RunningTask) ? Os_ControlledCoreInfo[1U].RunningTask->application : 0) ))\"\r\n        },\r\n        \"LASTERROR\": {\r\n          \"evaluate\": \"Os_AnyCoreInfo[1].OrtiLastError\"\r\n        },\r\n        \"RUNNINGTASK\": {\r\n          \"evaluate\": \"Os_ControlledCoreInfo[1U].RunningTask\"\r\n        },\r\n        \"RUNNINGTASKPRIORITY\": {\r\n          \"evaluate\": \"Os_ControlledCoreInfo[1U].RunningTPMask.t1\"\r\n        },\r\n        \"RUNNINGISR1\": {\r\n          \"evaluate\": \"Os_RunningCat1ISR1\"\r\n        },\r\n        \"RUNNINGISR2\": {\r\n          \"evaluate\": \"Os_ControlledCoreInfo[1U].RunningISR\"\r\n        }\r\n      },\r\n      \"events\": {\r\n        \"APPLICATION\": {\r\n          \"active\": \"false\"\r\n        },\r\n        \"ERROR\": {\r\n          \"active\": \"true\"\r\n        },\r\n        \"TRUSTED_FUNCTION_START\": {\r\n          \"active\": \"false\"\r\n        },\r\n        \"TRUSTED_FUNCTION_STOP\": {\r\n          \"active\": \"false\"\r\n        },\r\n        \"TASK_ACTIVATE\": {\r\n          \"active\": \"false\"\r\n        },\r\n        \"TASK_START\": {\r\n          \"active\": \"false\"\r\n        },\r\n        \"TASK_WAIT\": {\r\n          \"active\": \"false\"\r\n        },\r\n        \"TASK_RESUME\": {\r\n          \"active\": \"false\"\r\n        },\r\n        \"TASK_STOP\": {\r\n          \"active\": \"false\"\r\n        },\r\n        \"ISR2_START\": {\r\n          \"active\": \"false\"\r\n        },\r\n        \"ISR2_STOP\": {\r\n          \"active\": \"false\"\r\n        },\r\n        \"ISR1_START\": {\r\n          \"active\": \"false\"\r\n        },\r\n        \"ISR1_STOP\": {\r\n          \"active\": \"false\"\r\n        }\r\n      },\r\n      \"constants\": {\r\n        \"PhysicalCore\": \"1\"\r\n      }\r\n    },\r\n    \"LowPriority\": {\r\n      \"classes\": [\r\n        \"AR_TASK\",\r\n        \"RTAOS_TASK\"\r\n      ],\r\n      \"states\": {\r\n        \"ACTIVATIONS\": {\r\n          \"evaluate\": \"((Os_ControlledCoreInfo[0U].ReadyTasks.p0 & 0x1) << 1) >> 1\"\r\n        },\r\n        \"STATE\": {\r\n          \"evaluate\": \"(((Os_ControlledCoreInfo[0U].RunningTask == Os_const_tasks[0]) * 1) & 1) + ((Os_ControlledCoreInfo[0U].ReadyTasks.p0 & 0x1) << 1)\"\r\n        },\r\n        \"Stack0Max\": {\r\n          \"evaluate\": \"Os_dyn_tasks[0].meter.stackmax.sp\"\r\n        },\r\n        \"Stack1Max\": {\r\n          \"evaluate\": \"Os_dyn_tasks[0].meter.stackmax.ctx\"\r\n        }\r\n      },\r\n      \"events\": {},\r\n      \"constants\": {\r\n        \"BasePriority\": \"1\",\r\n        \"Priority\": \"1\",\r\n        \"PhysicalCore\": \"0\"\r\n      }\r\n    },\r\n    \"HighPriority\": {\r\n      \"classes\": [\r\n        \"AR_TASK\",\r\n        \"RTAOS_TASK\"\r\n      ],\r\n      \"states\": {\r\n        \"ACTIVATIONS\": {\r\n          \"evaluate\": \"((Os_ControlledCoreInfo[1U].ReadyTasks.p1 & 0x1) << 1) >> 1\"\r\n        },\r\n        \"STATE\": {\r\n          \"evaluate\": \"(((Os_ControlledCoreInfo[1U].RunningTask == Os_const_tasks[1]) * 1) & 1) + ((Os_ControlledCoreInfo[1U].ReadyTasks.p1 & 0x1) << 1)\"\r\n        },\r\n        \"Stack0Max\": {\r\n          \"evaluate\": \"Os_dyn_tasks[1].meter.stackmax.sp\"\r\n        },\r\n        \"Stack1Max\": {\r\n          \"evaluate\": \"Os_dyn_tasks[1].meter.stackmax.ctx\"\r\n        }\r\n      },\r\n      \"events\": {},\r\n      \"constants\": {\r\n        \"BasePriority\": \"2\",\r\n        \"Priority\": \"1\",\r\n        \"PhysicalCore\": \"1\"\r\n      }\r\n    },\r\n    \"Millisecond\": {\r\n      \"classes\": [\r\n        \"AR_ISR2\",\r\n        \"RTAOS_ISR2\"\r\n      ],\r\n      \"states\": {\r\n        \"Stack0Max\": {\r\n          \"evaluate\": \"Os_dyn_isrs[0].meter.stackmax.sp\"\r\n        },\r\n        \"Stack1Max\": {\r\n          \"evaluate\": \"Os_dyn_isrs[0].meter.stackmax.ctx\"\r\n        }\r\n      },\r\n      \"events\": {},\r\n      \"constants\": {\r\n        \"BasePriority\": \"1\",\r\n        \"Priority\": \"1\",\r\n        \"PhysicalCore\": \"0\"\r\n      }\r\n    },\r\n    \"Alarm25ms\": {\r\n      \"classes\": [\r\n        \"AR_ALARM\"\r\n      ],\r\n      \"states\": {\r\n        \"STATE\": {\r\n          \"evaluate\": \"Os_dyn_alarms[0].running\"\r\n        },\r\n        \"ALARMTIME\": {\r\n          \"evaluate\": \"Os_dyn_alarms[0].match\"\r\n        },\r\n        \"CYCLETIME\": {\r\n          \"evaluate\": \"Os_dyn_alarms[0].period\"\r\n        }\r\n      },\r\n      \"events\": {\r\n        \"FIRE\": {\r\n          \"active\": \"false\"\r\n        }\r\n      },\r\n      \"constants\": {\r\n        \"COUNTER\": \"MillisecondCounter\",\r\n        \"ACTION\": \"Activate LowPriority\",\r\n        \"PhysicalCore\": \"0\"\r\n      }\r\n    },\r\n    \"Alarm50ms\": {\r\n      \"classes\": [\r\n        \"AR_ALARM\"\r\n      ],\r\n      \"states\": {\r\n        \"STATE\": {\r\n          \"evaluate\": \"Os_dyn_alarms[1].running\"\r\n        },\r\n        \"ALARMTIME\": {\r\n          \"evaluate\": \"Os_dyn_alarms[1].match\"\r\n        },\r\n        \"CYCLETIME\": {\r\n          \"evaluate\": \"Os_dyn_alarms[1].period\"\r\n        }\r\n      },\r\n      \"events\": {\r\n        \"FIRE\": {\r\n          \"active\": \"false\"\r\n        }\r\n      },\r\n      \"constants\": {\r\n        \"COUNTER\": \"MillisecondCounter\",\r\n        \"ACTION\": \"Activate HighPriority\",\r\n        \"PhysicalCore\": \"0\"\r\n      }\r\n    },\r\n    \"Serializer\": {\r\n      \"classes\": [\r\n        \"AR_SPINLOCK\"\r\n      ],\r\n      \"states\": {\r\n        \"STATE\": {\r\n          \"evaluate\": \"Os_dyn_spinlocks[0].lock\"\r\n        },\r\n        \"CORE\": {\r\n          \"evaluate\": \"Os_dyn_spinlocks[0].core\"\r\n        }\r\n      },\r\n      \"events\": {},\r\n      \"constants\": {}\r\n    },\r\n    \"AModule1\": {\r\n      \"classes\": [\r\n        \"AMODULE\"\r\n      ],\r\n      \"states\": {\r\n        \"RUNNINGTHING\": {\r\n          \"evaluate\": \"First_RunningThing\"\r\n        }\r\n      },\r\n      \"events\": {\r\n        \"THING_START\": {\r\n          \"active\": \"false\"\r\n        }\r\n      },\r\n      \"constants\": {}\r\n    },\r\n    \"AModule2\": {\r\n      \"classes\": [\r\n        \"AMODULE\"\r\n      ],\r\n      \"states\": {\r\n        \"RUNNINGTHING\": {\r\n          \"evaluate\": \"Second_RunningThing\"\r\n        }\r\n      },\r\n      \"events\": {\r\n        \"THING_START\": {\r\n          \"active\": \"false\"\r\n        }\r\n      },\r\n      \"constants\": {}\r\n    }\r\n  }\r\n}"));
        }
Exemplo n.º 2
0
 private void CloseProjectClick(object sender, EventArgs e)
 {
     if (DoClosed())
     {
         _m_project = new ArtiProject();
         RefreshViewOfSources();
     }
     CheckDirty();
 }
Exemplo n.º 3
0
        public void TestEmptyProject()
        {
            var p       = new ArtiProject();
            var content = p.SaveToProjectFile();

            Assert.That(content, Does.Contain("\"FileNames\": []"));
            Assert.That(content, Does.Contain("\"ActiveStates\": []"));
            Assert.That(content, Does.Contain("\"ActiveEvents\": []"));
        }
Exemplo n.º 4
0
        public void TestNonEmptyProject()
        {
            var p = new ArtiProject();

            p.AddSource(@"\filename\one.arti", "{}");
            p.AddSource(@"/filename/two.arti", "{}");
            var content = p.SaveToProjectFile(pretty: false);

            Assert.That(content, Does.Contain("\"FileNames\":[\"\\\\filename\\\\one.arti\",\"/filename/two.arti\"]"));
            Assert.That(content, Does.Contain("\"ActiveStates\":[]"));
            Assert.That(content, Does.Contain("\"ActiveEvents\":[]"));
        }
Exemplo n.º 5
0
 private void OpenProjectClick(object sender, EventArgs e)
 {
     if (DoClosed())
     {
         if (dlgOpenProject.ShowDialog() == DialogResult.OK)
         {
             SetProjectFile(dlgOpenProject.FileName);
             _m_project = new ArtiProject();
             _m_project.LoadFromProjectFile(File.ReadAllText(_m_project_name));
             RefreshViewOfSources();
         }
     }
     CheckDirty();
 }
Exemplo n.º 6
0
        public FMain()
        {
            _m_project = new ArtiProject(); // Default empty project
            InitializeComponent();

            _m_sources   = new SourceFiles(listOfFiles);
            _m_metadata  = new ArtiMetaData(InfoGrid);
            _events_view = new SelectView(TraceItemDescription, TraceTree);
            _states_view = new SelectView(DebugItemDescription, DebugTree);
            _poi_view    = new POIView(tvPOI, tbPOI);

            var args = Environment.GetCommandLineArgs();

            if (args.Length > 1)
            {
                var proposed_file = args[1];
                if (File.Exists(proposed_file))
                {
                    var cwd = Path.GetDirectoryName(proposed_file);
                    if (!string.IsNullOrEmpty(cwd))
                    {
                        Directory.SetCurrentDirectory(cwd);
                    }
                    _m_project_name = args[1];
                    try {
                        _m_project.LoadFromProjectFile(File.ReadAllText(_m_project_name));
                    }
                    catch (Exception e) {
                        MessageBox.Show($"Error reading project file: {_m_project_name} ({e.Message})", "Invalid project file", MessageBoxButtons.OK, MessageBoxIcon.Stop);
                        Environment.Exit(1);
                    }
                }

                if (args.Length > 2)
                {
                    _m_output_name = args[2];
                    SaveMergedText();
                }
            }
        }