Coverage for d7a/alp/regular_action.py: 100%

18 statements  

« prev     ^ index     » next       coverage.py v7.5.0, created at 2024-05-24 08:03 +0200

1# 

2# Copyright (c) 2015-2021 University of Antwerp, Aloxy NV. 

3# 

4# This file is part of pyd7a. 

5# See https://github.com/Sub-IoT/pyd7a for further info. 

6# 

7# Licensed under the Apache License, Version 2.0 (the "License"); 

8# you may not use this file except in compliance with the License. 

9# You may obtain a copy of the License at 

10# 

11# http://www.apache.org/licenses/LICENSE-2.0 

12# 

13# Unless required by applicable law or agreed to in writing, software 

14# distributed under the License is distributed on an "AS IS" BASIS, 

15# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 

16# See the License for the specific language governing permissions and 

17# limitations under the License. 

18# 

19from d7a.alp.action import Action 

20from d7a.alp.operations.nop import NoOperation 

21from d7a.alp.operations.operation import Operation 

22from d7a.support.schema import Types 

23 

24__author__ = 'glenn' 

25 

26 

27class RegularAction(Action): 

28 SCHEMA = [{ 

29 "group" : Types.BOOLEAN(), 

30 "resp" : Types.BOOLEAN(), 

31 "op" : Types.BITS(6), 

32 "operation": Types.OBJECT(Operation), 

33 "operand" : Types.OBJECT(nullable=True) # there is no Operand base-class 

34 }] 

35 

36 def __init__(self, group=False, resp=False, operation=NoOperation()): 

37 self.group = group 

38 self.resp = resp 

39 super(RegularAction, self).__init__(operation) 

40 

41 def __iter__(self): 

42 byte = 0 

43 if self.group: byte |= 1 << 7 

44 if self.resp: byte |= 1 << 6 

45 byte += self.op 

46 yield byte 

47 

48 for byte in self.operation: yield byte