package Crazyflie_Software public with Crazyflie_Types; process nRF51822_Firmware features Syslink_Packet_TX: out data port Crazyflie_Types::Syslink_Packet; Syslink_Packet_RX: in data port Crazyflie_Types::Syslink_Packet; flows f1 : flow source syslink_Packet_TX{ latency => 1 ms .. 2 ms; }; end nRF51822_Firmware; process STM32F405_Firmware features Syslink_Packet_Rx : in data port Crazyflie_Types::Syslink_Packet; Syslink_Packet_Tx : out data port Crazyflie_Types::Syslink_Packet; DOFs : in data port Crazyflie_Types::Six_Axis.impl; Rate_1 : out data port Crazyflie_Types::PWM_Rate; Rate_2 : out data port Crazyflie_Types::PWM_Rate; Rate_3 : out data port Crazyflie_Types::PWM_Rate; Rate_4 : out data port Crazyflie_Types::PWM_Rate; flows f1 : flow path Syslink_Packet_Rx -> Rate_1; f2 : flow path DOFs -> Rate_1; annex EMV2 {** use types Crazyflie_Errors; use behavior Crazyflie_Errors::simple; error propagations Rate_1 : out propagation{ValueErroneous}; DOFs: in propagation{ValueErroneous}; Syslink_Packet_RX: in propagation{ValueErroneous}; processor : in propagation{Lost, ValueErroneous}; flows f1 : error path Syslink_Packet_RX -> Rate_1; f2 : error path DOFs{ValueErroneous} -> Rate_1{ValueErroneous}; f3 : error path processor{lost, ValueErroneous} -> Rate_1{ValueErroneous}; end propagations; component error behavior transitions t1 : Operational -[ DOFs{ValueErroneous} or -- processor{ValueErroneous} or processor{Lost} ]-> Failed; propagations Failed -[]-> Rate_1{ValueErroneous}; -- XXX end component; **}; end STM32F405_Firmware; process implementation STM32F405_Firmware.impl subcomponents CRTP_Tx_Task : thread CRTP_Tx_Task; CRTP_Rx_Task : thread CRTP_Rx_Task; Power_Management : thread Power_Management; Main_Loop : thread Main_Loop; connections C1 : port CRTP_Tx_Task.Msg -> Syslink_Packet_Tx; C8 : port Main_Loop.Syslink_Packet_Tx -> CRTP_Tx_Task.SysLink_Packet; C2 : port Syslink_Packet_Rx -> CRTP_Rx_Task.Msg; C7 : port CRTP_Rx_Task.SysLink_Packet -> Main_Loop.Syslink_Packet_Rx; C3 : port Main_Loop.Rate_1 -> Rate_1; C4 : port Main_Loop.Rate_2 -> Rate_2; C5 : port Main_Loop.Rate_3 -> Rate_3; C6 : port Main_Loop.Rate_4 -> Rate_4; C9 : port DOFs -> Main_Loop.DOFs; flows f1 : flow path Syslink_Packet_Rx -> C2 -> CRTP_Rx_Task.fs1 -> C7 -> Main_Loop.fs1 -> C3 -> Rate_1; f2 : flow path DOFs -> C9 -> Main_Loop.fs2 -> C3 -> Rate_1; end STM32F405_Firmware.impl; thread CRTP_Tx_Task features Msg : out data port Crazyflie_Types::Syslink_Packet; Syslink_Packet : in data port Crazyflie_Types::Syslink_Packet; properties Priority => 2; Dispatch_Protocol => Sporadic; Period => 1000 us; Compute_Execution_Time => 10 us .. 50 us; end CRTP_Tx_Task; thread CRTP_Rx_Task features Msg : in data port Crazyflie_Types::Syslink_Packet; Syslink_Packet : out data port Crazyflie_Types::Syslink_Packet; flows fs1 : flow path Msg -> Syslink_Packet; properties Priority => 2; Dispatch_Protocol => Sporadic; Period => 1000 us; Compute_Execution_Time => 10 us .. 50 us; end CRTP_Rx_Task; thread Power_Management properties Priority => 2; Dispatch_Protocol => Periodic; Period => 500 us; Compute_Execution_Time => 10 us .. 20 us; end Power_Management; thread Main_Loop features DOFs : in data port Crazyflie_Types::Six_Axis.impl; Syslink_Packet_Rx : in data port Crazyflie_Types::Syslink_Packet; Syslink_Packet_Tx : out data port Crazyflie_Types::Syslink_Packet; Rate_1 : out data port Crazyflie_Types::PWM_Rate; Rate_2 : out data port Crazyflie_Types::PWM_Rate; Rate_3 : out data port Crazyflie_Types::PWM_Rate; Rate_4 : out data port Crazyflie_Types::PWM_Rate; flows fs1 : flow path Syslink_Packet_Rx -> Rate_1; fs2 : flow path DOFs -> Rate_1; properties Priority => 3; Dispatch_Protocol => Periodic; Period => 2000 us; Compute_Execution_Time => 100 us .. 200 us; end Main_Loop; end Crazyflie_Software;