Knight KE / Mbed OS Game_Master
Committer:
WFKnight
Date:
Thu Jun 21 13:51:43 2018 +0000
Revision:
0:9b3d4731edbb
UART, RTOS, LED

Who changed what in which revision?

UserRevisionLine numberNew contents of line
WFKnight 0:9b3d4731edbb 1 # mbed SDK
WFKnight 0:9b3d4731edbb 2 # Copyright (c) 2011-2013 ARM Limited
WFKnight 0:9b3d4731edbb 3 #
WFKnight 0:9b3d4731edbb 4 # Licensed under the Apache License, Version 2.0 (the "License");
WFKnight 0:9b3d4731edbb 5 # you may not use this file except in compliance with the License.
WFKnight 0:9b3d4731edbb 6 # You may obtain a copy of the License at
WFKnight 0:9b3d4731edbb 7 #
WFKnight 0:9b3d4731edbb 8 # http://www.apache.org/licenses/LICENSE-2.0
WFKnight 0:9b3d4731edbb 9 #
WFKnight 0:9b3d4731edbb 10 # Unless required by applicable law or agreed to in writing, software
WFKnight 0:9b3d4731edbb 11 # distributed under the License is distributed on an "AS IS" BASIS,
WFKnight 0:9b3d4731edbb 12 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
WFKnight 0:9b3d4731edbb 13 # See the License for the specific language governing permissions and
WFKnight 0:9b3d4731edbb 14 # limitations under the License.
WFKnight 0:9b3d4731edbb 15
WFKnight 0:9b3d4731edbb 16 from __future__ import print_function, division, absolute_import
WFKnight 0:9b3d4731edbb 17
WFKnight 0:9b3d4731edbb 18 from abc import ABCMeta, abstractmethod
WFKnight 0:9b3d4731edbb 19
WFKnight 0:9b3d4731edbb 20
WFKnight 0:9b3d4731edbb 21 class Notifier(object):
WFKnight 0:9b3d4731edbb 22 """
WFKnight 0:9b3d4731edbb 23 Notifiers send build system events to a front end or may implement a front
WFKnight 0:9b3d4731edbb 24 end themselves, displaying warnings and errors for a user.
WFKnight 0:9b3d4731edbb 25
WFKnight 0:9b3d4731edbb 26 This is different from a logger in a few ways:
WFKnight 0:9b3d4731edbb 27 * The structure of the events are defined by this interface.
WFKnight 0:9b3d4731edbb 28 * A "progress" level is included allowing signaling completion status to
WFKnight 0:9b3d4731edbb 29 users.
WFKnight 0:9b3d4731edbb 30 * It's tailored to providing events from a build system.
WFKnight 0:9b3d4731edbb 31
WFKnight 0:9b3d4731edbb 32 The structure of a message is a dict with a 'type' key. The type key
WFKnight 0:9b3d4731edbb 33 determines the remaining keys as follows:
WFKnight 0:9b3d4731edbb 34 type | description and remaining keys
WFKnight 0:9b3d4731edbb 35 ---------- | ------------------------------
WFKnight 0:9b3d4731edbb 36 info | A simple message. The 'message' key contains the message
WFKnight 0:9b3d4731edbb 37 debug | Another simple message; this one is less useful when compiles
WFKnight 0:9b3d4731edbb 38 | are working. Again, the 'message' key contains the message
WFKnight 0:9b3d4731edbb 39 progress | A progress indicator, which may include progress as a
WFKnight 0:9b3d4731edbb 40 | percentage. The action key includes what action was taken to
WFKnight 0:9b3d4731edbb 41 | make this progress, the file key what file was used to make
WFKnight 0:9b3d4731edbb 42 | this progress, and the percent key, when present, indicates
WFKnight 0:9b3d4731edbb 43 | how far along the build is.
WFKnight 0:9b3d4731edbb 44 tool_error | When a compile fails, this contains the entire output of the
WFKnight 0:9b3d4731edbb 45 | compiler.
WFKnight 0:9b3d4731edbb 46 var | Provides a key, in the 'key' key, and a value, in the 'value'
WFKnight 0:9b3d4731edbb 47 | key, for use in a UI. At the time of writing it's used to
WFKnight 0:9b3d4731edbb 48 | communicate the binary location to the online IDE.
WFKnight 0:9b3d4731edbb 49 """
WFKnight 0:9b3d4731edbb 50
WFKnight 0:9b3d4731edbb 51 __metaclass__ = ABCMeta
WFKnight 0:9b3d4731edbb 52
WFKnight 0:9b3d4731edbb 53 @abstractmethod
WFKnight 0:9b3d4731edbb 54 def notify(self, event):
WFKnight 0:9b3d4731edbb 55 """
WFKnight 0:9b3d4731edbb 56 Send the user a notification specified in the event.
WFKnight 0:9b3d4731edbb 57 """
WFKnight 0:9b3d4731edbb 58 raise NotImplemented
WFKnight 0:9b3d4731edbb 59
WFKnight 0:9b3d4731edbb 60 def info(self, message):
WFKnight 0:9b3d4731edbb 61 """
WFKnight 0:9b3d4731edbb 62 Send the user a simple message.
WFKnight 0:9b3d4731edbb 63 """
WFKnight 0:9b3d4731edbb 64 self.notify({'type': 'info', 'message': message})
WFKnight 0:9b3d4731edbb 65
WFKnight 0:9b3d4731edbb 66 def debug(self, message):
WFKnight 0:9b3d4731edbb 67 """
WFKnight 0:9b3d4731edbb 68 Send a debug message to the user.
WFKnight 0:9b3d4731edbb 69 """
WFKnight 0:9b3d4731edbb 70 if isinstance(message, list):
WFKnight 0:9b3d4731edbb 71 message = ' '.join(message)
WFKnight 0:9b3d4731edbb 72 self.notify({'type': 'debug', 'message': message})
WFKnight 0:9b3d4731edbb 73
WFKnight 0:9b3d4731edbb 74 def cc_info(self, info=None):
WFKnight 0:9b3d4731edbb 75 if info is not None:
WFKnight 0:9b3d4731edbb 76 info['type'] = 'cc'
WFKnight 0:9b3d4731edbb 77 self.notify(info)
WFKnight 0:9b3d4731edbb 78
WFKnight 0:9b3d4731edbb 79 def cc_verbose(self, message, file=""):
WFKnight 0:9b3d4731edbb 80 self.notify({
WFKnight 0:9b3d4731edbb 81 'type': 'cc',
WFKnight 0:9b3d4731edbb 82 'severity': 'verbose',
WFKnight 0:9b3d4731edbb 83 'file': file,
WFKnight 0:9b3d4731edbb 84 'message': message
WFKnight 0:9b3d4731edbb 85 })
WFKnight 0:9b3d4731edbb 86
WFKnight 0:9b3d4731edbb 87 def progress(self, action, file, percent=None):
WFKnight 0:9b3d4731edbb 88 """
WFKnight 0:9b3d4731edbb 89 Indicate compilation progress to a user.
WFKnight 0:9b3d4731edbb 90 """
WFKnight 0:9b3d4731edbb 91 msg = {'type': 'progress', 'action': action, 'file': file}
WFKnight 0:9b3d4731edbb 92 if percent:
WFKnight 0:9b3d4731edbb 93 msg['percent'] = percent
WFKnight 0:9b3d4731edbb 94 self.notify(msg)
WFKnight 0:9b3d4731edbb 95
WFKnight 0:9b3d4731edbb 96 def tool_error(self, message):
WFKnight 0:9b3d4731edbb 97 """
WFKnight 0:9b3d4731edbb 98 Communicate a full fatal error to a user.
WFKnight 0:9b3d4731edbb 99 """
WFKnight 0:9b3d4731edbb 100 self.notify({'type': 'tool_error', 'message': message})
WFKnight 0:9b3d4731edbb 101
WFKnight 0:9b3d4731edbb 102 def var(self, key, value):
WFKnight 0:9b3d4731edbb 103 """
WFKnight 0:9b3d4731edbb 104 Update a UI with a key, value pair
WFKnight 0:9b3d4731edbb 105 """
WFKnight 0:9b3d4731edbb 106 self.notify({'type': 'var', 'key': key, 'val': value})