Bubble Anticheat Reborn
The Anticheat That Everyone Loves, Reborn for 1.8 and Later.
Getting Started:
First off, install Skript and SkUtilities. To get started, visit the install page
Troubleshooting:
- Make sure that you have Skript and SkUtilities installed.
- Make sure you are using PaperSpigot, Spigot or TacoSpigot.
- Make sure bubble.sk is located at plugins/Skript/scripts/bubble.sk


Our company will provide computer based solutions for all your manual inventory management purposes and make your business more efficient
If your company need any online reservation system contact us we will provide solutions for your need.
We will make you data bases which you could store all your data more more accurately and more safely with backups.
With our software solutions you can do your works more efficiently and more accurately.
To help make the businesses more efficient and customer friendly using elegant and reliable strategic business solutions, thereby to lead them towards success.
To provide reliable Business Software Solutions built using Object Oriented Software Design Techniques.
.......................
.......................
.......................
.......................


Before Change
build = functools.partial(
self.run_pants_with_workdir,
command=["binary", test_project],
workdir=os.path.join(buildroot.new_buildroot, ".pants.d"),
config=config,
build_root=buildroot.new_buildroot,
)
After Change
zipsafe_target_tmpl = "python_binary(sources=["main.py"], zip_safe={})"
with self.caching_config() as config, self.temporary_workdir() as workdir, self.temporary_file_content(
test_src, b""
):
build = lambda: self.run_pants_with_workdir(
command=["binary", test_project], config=config, workdir=workdir
)


How to save 2D STF files as 1D STF files
You can transform 2D STF stress input files into 1D STF files via right-clicking on an STF file and selecting
- Save as 1D STF...
from the popup menu as shown in the following figure. Transformation can be
performed by either selecting a stress component (normal-x, normal-y or shear-xy) or by entering a rotation angle
to rotate the stress tensor.


My name is Phil I am in cohort number 3 of Codeups bootcamp.
The pace is amazing and hopefully at the end of this 12 week course they will give me back my brain.
It doesnt matter where you started the race , as long as you finish.
My vehicle is a 2008 Chrysler 300 touring. I am happy with my car and try to maintain
it as best I can.
That means mechanically as well as having it clean and well preserved
in case I decide to sell it and maximize the profit
| Decimal | Hexidecimal |
|---|---|
| 1 | 1 |
| 2 | 2 |
| 3 | 3 |
| 4 | 4 |
| 5 | 5 |
| 6 | 6 |
| 7 | 7 |
| 8 | 8 |
| 9 | 9 |
| 10 | A |
| 11 | B |
| 12 | C |
| 13 | D |
| 14 | E |
| 15 | F |


10,000+ of our users love our products.
We only provide great products combined with excellent customer service. See what our satisfied customers are saying about our services.
★ ★ ★ ★ ★
Rated 5 Stars in Reviews
★ ★ ★ ★ ★
Rated 5 Stars in Report Guru
★ ★ ★ ★ ★
Rated 5 Stars in BestTech
Colton Smith
Verified Buyer
We needed the same printed design as the
one we had ordered a week prior. Not only did
they find the original order, but we also received
it in time. Excellent!
Irene Roberts
Verified Buyer
Customer service is always excellent and very quick
turn around. Completely delighted with the simplicity of the purchase
and the speed of delivery.
Anne Wallace
Verified Buyer
Put on order with this company and can
only praise then for the very high standard. Will definitely
use them again and recommend them to everyone!


¶ PlayerListCopyright(c) 2016 Stefano Balietti MIT Licensed Handles a collection of Offers methods to update, search and retrieve players. It extends the NDDB class. |
(function(exports, parent) {
"use strict";
|
¶ Global scope |
|
|
Exposing constructor |
exports.PlayerList = PlayerList;
|
|
Setting up global scope variables |
var J = parent.JSUS,
NDDB = parent.NDDB,
GameStage = parent.GameStage;
var stageLevels = parent.constants.stageLevels;
var stateLevels = parent.constants.stateLevels;
|
|
Inheriting from NDDB |
PlayerList.prototype = new NDDB();
PlayerList.prototype.constructor = PlayerList;
|
|
Sync types used by PlayerList.arePlayersSync |
var syncTypes;
|
¶ PlayerList.comparePlayersComparator functions between two players Params
p1
Player
The first player
p2
Player
The second player
Returns
number
The result of the comparison
See
NDDB.globalCompare
|
PlayerList.comparePlayers = function(p1, p2) {
if (p1.id === p2.id) return 0;
if (p1.count < p2.count) return 1;
if (p1.count > p2.count) return -1;
return 0;
};
|
¶ PlayerList constructorCreates an instance of PlayerList The class inherits his prototype from It indexes players by their id. Params
options
object
Optional. Configuration object
db
array
Optional. An initial set of players to import
parent
PlayerList
Optional. A parent object for the instance
See
NDDB.constructor
|
function PlayerList(options, db) {
options = options || {};
options.name = options.name || 'plist';
|
|
Updates indexes on the fly. |
if (!options.update) options.update = {};
if ('undefined' === typeof options.update.indexes) {
options.update.indexes = true;
}
|
|
The internal counter that will be used to assing the |
this.pcounter = 0;
|
|
Invoking NDDB constructor. |
NDDB.call(this, options);
|
|
We check if the index are not existing already because it could be that the constructor is called by the breed function and in such case we would duplicate them. |
if (!this.id) {
this.index('id', function(p) {
return p.id;
});
}
|
|
Importing initial items (should not be done in constructor of NDDB) |
if (db) this.importDB(db);
|
|
Assigns a global comparator function. |
this.globalCompare = PlayerList.comparePlayers;
}
|
¶ PlayerList methods |
|
¶ PlayerList.importDBAdds an array of players to the database at once Overrides NDDB.importDB Params
db
array
The array of player to import at once
|
PlayerList.prototype.importDB = function(db) {
var i, len;
if (!J.isArray(db)) {
throw new TypeError('PlayerList.importDB: db must be array.');
}
i = -1, len = db.length;
for ( ; ++i < len ; ) {
this.add(db[i]);
}
};
|
¶ PlayerList.addAdds a new player to the database Before insertion, objects are checked to be valid The Params
player
Player
The player object to add to the database
updateRules
object
Optional. Update rules overwriting
this.__update
Returns
player
The inserted player
|
PlayerList.prototype.add = function(player, updateRules) {
if (!(player instanceof Player)) {
if ('object' !== typeof player) {
throw new TypeError('PlayerList.add: player must be object. ' +
'Found: ' + player);
}
if ('string' !== typeof player.id) {
throw new TypeError('PlayerList.add: player.id must be ' +
'string. Found: ' + player.id);
}
player = new Player(player);
}
if (this.exist(player.id)) {
throw new Error('PlayerList.add: player already existing: ' +
player.id + '.');
}
this.insert(player, updateRules);
player.count = this.pcounter;
this.pcounter++;
return player;
};
|
|
NEW GET AND REMOVE (no errors are thrown) |
|
|
|
|
OLD GET AND REMOVE: throw errors |
|
¶ PlayerList.getRetrieves a player with the given id Params
id
number
The id of the player to retrieve
Returns
Player
The player with the speficied id
|
PlayerList.prototype.get = function(id) {
var player;
if ('string' !== typeof id) {
throw new TypeError('PlayerList.get: id must be string.');
}
player = this.id.get(id);
if (!player) {
throw new Error('PlayerList.get: Player not found: ' + id + '.');
}
return player;
};
|
¶ PlayerList.removeRemoves the player with the given id Notice: this operation cannot be undone Params
id
number
The id of the player to remove
Returns
object
The removed player object
|
PlayerList.prototype.remove = function(id) {
var player;
if ('string' !== typeof id) {
throw new TypeError('PlayerList.remove: id must be string. ' +
'Found: ' + id);
}
player = this.id.remove(id);
if (!player) {
throw new Error('PlayerList.remove: player not found: ' + id + '.');
}
return player;
};
|
¶ PlayerList.pop@deprecated TODO remove after transition is complete |
PlayerList.prototype.pop = PlayerList.prototype.remove;
|
¶ PlayerList.existChecks whether a player with the given id already exists Params
id
string
The id of the player
Returns
boolean
TRUE, if a player with the specified id is found
|
PlayerList.prototype.exist = function(id) {
return this.id.get(id) ? true : false;
};
|
¶ PlayerList.clearClears the PlayerList and rebuilds the indexes |
PlayerList.prototype.clear = function() {
NDDB.prototype.clear.call(this);
|
|
We need this to recreate the (empty) indexes. |
this.rebuildIndexes();
};
|
¶ PlayerList.updatePlayerUpdates the state of a player Params
id
number
The id of the player
playerState
object
An update with fields to update in the player
Returns
object
The updated player object
|
PlayerList.prototype.updatePlayer = function(id, update) {
var player;
if ('string' !== typeof id) {
throw new TypeError(
'PlayerList.updatePlayer: id must be string. Found: ' + id);
}
if ('object' !== typeof update) {
throw new TypeError(
'PlayerList.updatePlayer: update must be object. Found: ' +
update);
}
if ('undefined' !== typeof update.id) {
throw new Error('PlayerList.updatePlayer: update cannot change ' +
'the player id.');
}
player = this.id.update(id, update);
if (!player) {
throw new Error(
'PlayerList.updatePlayer: player not found: ' + id + '.');
}
return player;
};
|
¶ PlayerList.isStepDoneChecks whether all players have terminated the specified game step A stage is considered DONE if all players that are found playing
that game step have the property
By default, players at other steps are ignored. If no player is found at the desired step, it returns TRUE Params
gameStage
GameStage
The GameStage of reference
type
string
Optional. The type of checking. Default 'EXACT'
checkOutliers
boolean
Optional. If TRUE, players at other
steps are also checked. Default FALSE
Returns
boolean
TRUE, if all checked players have terminated the stage
See
PlayerList.arePlayersSync
|
PlayerList.prototype.isStepDone = function(gameStage, type, checkOutliers) {
return this.arePlayersSync(gameStage, stageLevels.DONE, type,
checkOutliers);
};
|
¶ PlayerList.isStepLoadedChecks whether all players have loaded the specified game step A stage is considered LOADED if all players that are found playing
that game step have the property
By default, players at other steps are ignored. If no player is found at the desired step, it returns TRUE. Params
gameStage
GameStage
The GameStage of reference
Returns
boolean
TRUE, if all checked players have loaded the stage
See
PlayerList.arePlayersSync
|
PlayerList.prototype.isStepLoaded = function(gameStage) {
return this.arePlayersSync(gameStage, stageLevels.LOADED, 'EXACT');
};
|
¶ PlayerList.arePlayersSyncVerifies that all players in the same stage are at the same stageLevel Players at other game steps are ignored, unless the
The
Finally, if TODO: see the checkOutliers param, if it is needed after all. Params
gameStage
GameStage
The GameStage of reference
stageLevel
number
The stageLevel of reference
type
string
Optional. Flag to say what players will be checked
checkOutliers
boolean
Optional. Whether to check for outliers.
Can't be TRUE if type is 'exact'
Returns
boolean
TRUE, if all checked players are sync
|
PlayerList.prototype.arePlayersSync = function(gameStage, stageLevel, type,
checkOutliers) {
var p, i, len, cmp, outlier;
|
|
Cast the gameStage to object. It can throw errors. |
gameStage = new GameStage(gameStage);
if ('undefined' !== typeof stageLevel &&
'number' !== typeof stageLevel) {
throw new TypeError('PlayerList.arePlayersSync: stagelevel must ' +
'be number or undefined.');
}
type = type || 'EXACT';
if ('string' !== typeof type) {
throw new TypeError('PlayerList.arePlayersSync: type must be ' +
'string or undefined.');
}
if ('undefined' === typeof syncTypes[type]) {
throw new Error('PlayerList.arePlayersSync: unknown type: ' +
type + '.');
}
checkOutliers = 'undefined' === typeof checkOutliers ?
true : !!checkOutliers;
if (!checkOutliers && type === 'EXACT') {
throw new Error('PlayerList.arePlayersSync: incompatible options:' +
' type=EXACT and checkOutliers=FALSE.');
}
i = -1, len = this.db.length;
for ( ; ++i < len ; ) {
p = this.db[i];
switch(type) {
case 'EXACT':
|
|
Players in same stage, step and round. |
cmp = GameStage.compare(gameStage, p.stage);
if (cmp !== 0) return false;
break;
case 'STAGE':
if (gameStage.stage !== p.stage.stage) {
outlier = true;
}
break;
case 'STAGE_UPTO':
|
|
Players in current stage up to the reference step. |
cmp = GameStage.compare(gameStage, p.stage);
|
|
Player in another stage or in later step. |
if (gameStage.stage !== p.stage.stage || cmp < 0) {
outlier = true;
break;
}
|
|
Player before given step. |
if (cmp > 0) return false;
break;
}
|
|
If outliers are not allowed returns false if one was found. |
if (checkOutliers && outlier) return false;
|
|
If the stageLevel check is required let's do it! |
if ('undefined' !== typeof stageLevel &&
p.stageLevel !== stageLevel) {
return false;
}
}
return true;
};
|
¶ PlayerList.toStringReturns a string representation of the PlayerList Params
eol
string
Optional. End of line separator between players
Returns
string
out The string representation of the PlayerList
|
PlayerList.prototype.toString = function(eol) {
var out, EOL;
out = '', EOL = eol || '\n';
this.each(function(p) {
var stage;
out += p.id + ': ' + p.name;
stage = new GameStage(p.stage);
out += ': ' + stage + EOL;
});
return out;
};
|
¶ PlayerList.getNGroupsCreates N random groups of players Params
N
number
The number of groups
Returns
array
Array containing N
PlayerList objects
See
JSUS.getNGroups
|
PlayerList.prototype.getNGroups = function(N) {
var groups;
if ('number' !== typeof N || isNaN(N) || N < 1) {
throw new TypeError('PlayerList.getNGroups: N must be a number ' +
'> 0: ' + N + '.');
}
groups = J.getNGroups(this.db, N);
return array2Groups(groups);
};
|
¶ PlayerList.getGroupsSizeNCreates random groups of N players Params
N
number
The number player per group
Returns
array
Array containing N
PlayerList objects
See
JSUS.getGroupsSizeN
|
PlayerList.prototype.getGroupsSizeN = function(N) {
var groups;
if ('number' !== typeof N || isNaN(N) || N < 1) {
throw new TypeError('PlayerList.getNGroups: N must be a number ' +
'> 0: ' + N + '.');
}
groups = J.getGroupsSizeN(this.db, N);
return array2Groups(groups);
};
|
¶ PlayerList.getRandomReturns a set of N random players Params
N
number
The number of players in the random set. Defaults N = 1
Returns
Player
array
A single player object or an array of
|
PlayerList.prototype.getRandom = function(N) {
var shuffled;
if ('undefined' === typeof N) N = 1;
if ('number' !== typeof N || isNaN(N) || N < 1) {
throw new TypeError('PlayerList.getRandom: N must be a number ' +
'> 0 or undefined: ' + N + '.');
}
shuffled = this.shuffle();
return N === 1 ? shuffled.first() : shuffled.limit(N).fetch();
};
|
¶ Helper Methods and Objects |
|
¶ array2GroupsTransforms an array of array (of players) into an array of PlayerList instances and returns it. The original array is modified. Params
array
array
The array to transform
Returns
array
array The array of
PlayerList objects
|
function array2Groups(array) {
var i, len, settings;
settings = this.cloneSettings();
i = -1, len = array.length;
for ( ; ++i < len ; ) {
array[i] = new PlayerList(settings, array[i]);
}
return array;
}
syncTypes = {STAGE: '', STAGE_UPTO: '', EXACT: ''};
|
¶ PlayerWrapper for a number of properties for players
|
|
|
Expose Player constructor |
exports.Player = Player;
|
¶ Player constructorCreates an instance of Player Params
pl
object
The object literal representing the player
|
function Player(player) {
var key;
if ('object' !== typeof player) {
throw new TypeError('Player constructor: player must be object.');
}
if ('string' !== typeof player.id) {
throw new TypeError('Player constructor: id must be string.');
}
|
¶ Default properties |
|
¶ Player.idThe nodeGame session id associate to the player Usually it is the same as the Socket.io id, but in case of reconnections it can change |
this.id = player.id;
|
¶ Player.sidThe session id received from the nodeGame server |
this.sid = player.sid;
|
¶ Player.clientTypeThe client type (e.g. player, admin, bot, ...) |
this.clientType = player.clientType || null;
|
¶ Player.groupThe group to which the player belongs |
this.group = player.group || null;
|
¶ Player.roleThe role of the player |
this.role = player.role || null;
|
¶ Player.partnerThe partner of the player |
this.partner = player.partner || null;
|
this.count = 'undefined' === typeof player.count ? null : player.count;
|
|
¶ Player.adminThe admin status of the client |
this.admin = !!player.admin;
|
¶ Player.disconnectedThe connection status of the client |
this.disconnected = !!player.disconnected;
|
¶ Player.ipThe ip address of the player Note: this can change in mobile networks |
this.ip = player.ip || null;
|
¶ Player.nameAn alphanumeric name associated with the player |
this.name = player.name || null;
|
¶ Player.stageReference to the game-stage the player currently is See
node.game.stage
See
GameStage
|
this.stage = player.stage || new GameStage();
|
this.stageLevel = player.stageLevel || stageLevels.UNINITIALIZED;
|
|
this.stateLevel = player.stateLevel || stateLevels.UNINITIALIZED;
|
|
¶ Player.langThe current language used by the player Default language is English with the default path |
this.lang = {
name: 'English',
shortName: 'en',
nativeName: 'English',
path: 'en/'
};
|
¶ Extra propertiesFor security reasons, they cannot be of type function, and they cannot overwrite any previously defined variable |
for (key in player) {
if (player.hasOwnProperty(key)) {
if ('function' !== typeof player[key]) {
if (!this.hasOwnProperty(key)) {
this[key] = player[key];
}
}
}
}
}
|
¶ Player methods |
|
¶ Player.toStringReturns a string representation of a player Returns
string
The string representation of a player
|
Player.prototype.toString = function() {
return (this.name || '' ) + ' (' + this.id + ') ' +
new GameStage(this.stage);
};
|
¶ Closure |
})(
'undefined' != typeof node ? node : module.exports
, 'undefined' != typeof node ? node : module.parent.exports
);
|


step.js - a JavaScript Promise implementation
Natural Numbers
Square of Natural Numbers
Fibonacci Sequence


{% load static %}
Time spend in game: {{ user.time_spend_in_game }}
Best game time: {{ user.best_game_time }}
Game counter: {{ user.game_counter }}
Win counter: {{ user.win_counter }}


A tutorial has not been created as use of the program should be fairly straight forward.
If you still want one, contact me on the link above to request it.
Yes the program is very small and simply, but installing it makes it easy to associate file extensions
with the program. This means .vplf files will both have a custom icon, and double-clicking on them will allow
you to open the file with the program directly.
The source of this is akin to the answer given to the question below this one. If you are running Windows 8 or 10, and
the message is given by SmartScreen, you can proceed with the installation by clicking More Info at the end of the message
and then choose Run Anyway.
To avoid such warnings require programs to be signed by specific companies, with specific certificates.
This costs money, and since this program is only meant for use in the Pearl I have not wanted to spend money on it.
If you do not feel safe ignoring the warnings, you are welcome to not use the program.
This may be your antivirus blocking the program from executing, as per the lack of safe signing as stated above.
A way to fix this is whitelisting the program's installation folder with your antivirus. This folder is per default
C:\Program Files (x86)\Velvet Pearl\Lottery\. On how to whitelist a file or folder, see the documentation for your antivirus.
The program can be removed by double-clicking the Uninstall shortcut in the program's install folder.
Alternative you can run the installer again and choose 'Remove', or uninstall the program by going to
Programs and Features (also known as Add/remove Programs or Uninstall Programs) in Windows Control Panel.
If you have other questions, design suggestions, or found a bug, you can use the contact link in the top of
this page to contact me on enjin. Either send me a direct message, a private message, or write on my wall.
The version of the installed program can be found by going to Windows Controlpanel, in the Add/Remove Programs section
(also known as Uninstall Programs), and then finding Velvet Pearl Lottry. One of the shown column will have a version number.
Alternatively you can navigate to the program's install folder, right-click on Velvet Pearl Lottery.exe and choose properties.
Under the Details tab in the top of the window there will be an entry for Product version and File version. Either of these are
the version of your installation.
As of version 1.1.0 the program will now automatically check for updates when it is started, if it has access to the internet and velvetpearl.enjin.com is reachable.
If an update is found it will ask you whether you want to download and install the update.
The program saves data in a .vplf file format, and will only accept these. It is, however, plain XML and any
standard word processor or browser will be able to open these files.


brk_*
functionsbrk_equally
for symmetry
maybe tab_equally
, tab_n
(!) and tab_quantiles
for the same reason
breaks
objects directly into chop()
chop_dates
rather than trying to do OObrk_days()
, brk_weeks()
etc.? Equivalent to all lubridate’s days()
etc. classes?chop
function, with appropriate breaks, might already “almost work” b/c it just uses arithmetic comparisonschop_cleanly
- set drop = FALSE
, extend = FALSE/TRUE
?
brk_mean_se
is called?FALSE
is more precise for programmingx
is weird. x
is data. But if e.g. breaks
are weird, we can error out.
x
is the wrong class or type.brk_left()
, brk_manual()
with extend
set.brk_evenly()
we don’t need to make such a guarantee.Do we need drop
?
forcats()
exists suggesting that factors aren’t yet seen as worthless!output = c("factor", "character", "numeric")
switchdrop
should probably work even for numeric i.e. integer data by moving it down to start at 1extend = NULL
do exactly?
tidyr::chop()
kut()
. So on the REPL, people can just use kut()
if they load santoku first. If they load santoku second, they’ll have to use tidyr::chop()
, but reading the documentation, I suspect this will be rare.extend = NULL
); should always extend to Inf, -Inf so that these break labels are not data-dependentTension between wanting something predictable in your new data, vs. something readable in tab_*
. E.g.
should surely return labels a, b, c. But this means we aren’t always extending.
labels
to be longer than necessary?
chop(rnorm(100), -2:2, LETTERS)
brk_mean_sd
: if we aren’t sure whether data gets extended, then how do we know what the labels should be?
x
?extend
breaks
objects include suggested labels which the user can override. That way they always have the info necessary.brk_*
functions always return break numbers; then labels decide how to format them?breaks = c(1, 2, 2, 2, 3)
?
brk_quantiles
, brk_width
, the data may not work well e.g. if it is all NA. What is an empty set of breaks?hist_xxx
functions for histograms/barplots? (how to treat singletons?)grp_xxx
for group_by? Hmmm…lbl_sequence
: lbl_style("1."), lbl_style("(i)"), lbl_style("A")
etc.?extend
which adds complexity and just have only()
or extend()
as new breaks functions?


This is my take on Isotype visualization. It is not really a consistent translation of the infographic style developed by Otto Neurath, Gerd Arntz and others at the 'Gesellschafts- und Wirtschaftsmuseum' in Wien. I just used pictograms by Gerd Arntz to polish some standard d3 example. Orginally, I intended also to use icons for Income and people, but turned it down because I like the visual appeal of circles. In a second iteration icons may come. To ackknowledge, this is only an experiment and not real piece of information visualization. It does not hold all standards how to present data in a meaningful way. The data comes from www.census.gov and basically shows the distribution of income among graduates in their first jobs (categorized by degrees). But for the rest let the data speak!


Games
|
Cheese Shooter
Ready for some cheese shooting action? Shoot bouncy pieces of cheese at the hungry mouse but be careful since you have only limited amounts of cheese and the cheese pieces break easily. Avoid obstacles and enemies as you try to collect coins using the minimum number of bounces possible. FEATURES:
|


Python Social Auth is an easy to setup social authentication/registration mechanism with support for several frameworks and auth providers.
Crafted using base code from django-social-auth, implements a common interface to define new authentication providers from third parties. And to bring support for more frameworks and ORMs.
The lib supports a few frameworks at the moment with Django, Flask, Pyramid, Webpy, CherryPy and Tornado and more to come. The frameworks API should ease the implementation to increase the number of frameworks supported.
Ported from django-social-auth, the application brings plenty of authentication providers, many from popular services like Google, Facebook, Twitter and GitHub. The backends API have some implementation details on how to implement your own backends.
There are multiple ORM python libraries around, some frameworks has their own built-in version too. python-social-auth tries to support the different interfaces available, at the moment SQLAlchemy, Django ORM and Mongoengine are supported, but with the Storage API it should be easy to add more support.
The code is available on GitHub, report any
issue if you find any. Pull requests are
always welcome. There's a mailing list
and IRC channel #python-social-auth
on Freenode network.


Colorado's Population and Economic Trends Story Map
Data by Topic
{% include _menu_pop_idx.html %}
{% include _menu_coc_idx.html %}
{% include _menu_housing_idx.html %}
{% include _menu_econ_idx.html %}
{% include _menu_census_idx.html %}
GIS Data and Resources
Data by Geography
{% include _menu_state_idx.html %}
{% include _menu_county_idx.html %}
{% include _menu_muni_idx.html %}


Segment LCD module used to control/manipulate attached LCD display. More...
Data Structures | |
| struct | LCD_F_initParam |
Typedefs | |
| typedef struct LCD_F_initParam | LCD_F_Config |
Functions | |
| void | LCD_F_initModule (LCD_F_Config *initParams) |
| Initializes the LCD_F Module. More... | |
| void | LCD_F_turnOn (void) |
| Turns on the LCD_F module. More... | |
| void | LCD_F_turnOff (void) |
| Turns the LCD_F off. More... | |
| void | LCD_F_clearAllMemory (void) |
| Clears all LCD_F memory registers. More... | |
| void | LCD_F_clearAllBlinkingMemory (void) |
| Clears all LCD_F blinking memory registers. More... | |
| void | LCD_F_selectDisplayMemory (uint_fast16_t displayMemory) |
| Selects display memory. More... | |
| void | LCD_F_setBlinkingControl (uint_fast16_t clockPrescalar, uint_fast16_t divider, uint_fast16_t mode) |
| Sets the blinking control register. More... | |
| void | LCD_F_setAnimationControl (uint_fast16_t clockPrescalar, uint_fast16_t divider, uint_fast16_t frames) |
| Sets the animation control register. More... | |
| void | LCD_F_enableAnimation (void) |
| Enables animation on the LCD_F controller. More... | |
| void | LCD_F_disableAnimation (void) |
| Enables animation on the LCD_F controller. More... | |
| void | LCD_F_clearAllAnimationMemory (void) |
| Clears all LCD_F animation memory registers. More... | |
| void | LCD_F_setPinAsLCDFunction (uint_fast8_t pin) |
| Sets the LCD_F pins as LCD function pin. More... | |
| void | LCD_F_setPinAsPortFunction (uint_fast8_t pin) |
| Sets the LCD_F pins as port function pin. More... | |
| void | LCD_F_setPinsAsLCDFunction (uint_fast8_t startPin, uint8_t endPin) |
| Sets the LCD_F pins as LCD function pin. More... | |
| void | LCD_F_setPinAsCOM (uint8_t pin, uint_fast8_t com) |
| Sets the LCD_F pin as a common line. More... | |
| void | LCD_F_setPinAsSEG (uint_fast8_t pin) |
| Sets the LCD_F pin as a segment line. More... | |
| void | LCD_F_selectBias (uint_fast16_t bias) |
| Selects the bias level. More... | |
| void | LCD_F_setVLCDSource (uint_fast16_t v2v3v4Source, uint_fast16_t v5Source) |
| Sets the voltage source for V2/V3/V4 and V5. More... | |
| void | LCD_F_clearInterrupt (uint32_t mask) |
| Clears the LCD_F selected interrupt flags. More... | |
| uint32_t | LCD_F_getInterruptStatus (void) |
| Returns the status of the selected interrupt flags. More... | |
| uint32_t | LCD_F_getEnabledInterruptStatus (void) |
| Returns the status of the selected interrupt flags masked with the currently enabled interrupts. More... | |
| void | LCD_F_enableInterrupt (uint32_t mask) |
| Enables the LCD_F selected interrupts. More... | |
| void | LCD_F_disableInterrupt (uint32_t mask) |
| Disables the LCD_F selected interrupts. More... | |
| void | LCD_F_registerInterrupt (void(*intHandler)(void)) |
| void | LCD_F_unregisterInterrupt (void) |
Segment LCD module used to control/manipulate attached LCD display.
| #define LCD_F_CLOCKSOURCE_ACLK (LCD_F_CTL_SSEL_0) |
| #define LCD_F_CLOCKSOURCE_VLOCLK (LCD_F_CTL_SSEL_1) |
| #define LCD_F_CLOCKSOURCE_REFOCLK (LCD_F_CTL_SSEL_2) |
| #define LCD_F_CLOCKSOURCE_LFXT (LCD_F_CTL_SSEL_3) |
| #define LCD_F_CLOCKDIVIDER_1 0x0 |
| #define LCD_F_CLOCKDIVIDER_2 0x800 |
| #define LCD_F_CLOCKDIVIDER_3 0x1000 |
| #define LCD_F_CLOCKDIVIDER_4 0x1800 |
| #define LCD_F_CLOCKDIVIDER_5 0x2000 |
| #define LCD_F_CLOCKDIVIDER_6 0x2800 |
| #define LCD_F_CLOCKDIVIDER_7 0x3000 |
| #define LCD_F_CLOCKDIVIDER_8 0x3800 |
| #define LCD_F_CLOCKDIVIDER_9 0x4000 |
| #define LCD_F_CLOCKDIVIDER_10 0x4800 |
| #define LCD_F_CLOCKDIVIDER_11 0x5000 |
| #define LCD_F_CLOCKDIVIDER_12 0x5800 |
| #define LCD_F_CLOCKDIVIDER_13 0x6000 |
| #define LCD_F_CLOCKDIVIDER_14 0x6800 |
| #define LCD_F_CLOCKDIVIDER_15 0x7000 |
| #define LCD_F_CLOCKDIVIDER_16 0x7800 |
| #define LCD_F_CLOCKDIVIDER_17 0x8000 |
| #define LCD_F_CLOCKDIVIDER_18 0x8800 |
| #define LCD_F_CLOCKDIVIDER_19 0x9000 |
| #define LCD_F_CLOCKDIVIDER_20 0x9800 |
| #define LCD_F_CLOCKDIVIDER_21 0xa000 |
| #define LCD_F_CLOCKDIVIDER_22 0xa800 |
| #define LCD_F_CLOCKDIVIDER_23 0xb000 |
| #define LCD_F_CLOCKDIVIDER_24 0xb800 |
| #define LCD_F_CLOCKDIVIDER_25 0xc000 |
| #define LCD_F_CLOCKDIVIDER_26 0xc800 |
| #define LCD_F_CLOCKDIVIDER_27 0xd000 |
| #define LCD_F_CLOCKDIVIDER_28 0xd800 |
| #define LCD_F_CLOCKDIVIDER_29 0xe000 |
| #define LCD_F_CLOCKDIVIDER_30 0xe800 |
| #define LCD_F_CLOCKDIVIDER_31 0xf000 |
| #define LCD_F_CLOCKDIVIDER_32 0xf800 |
| #define LCD_F_CLOCKPRESCALER_1 (LCD_F_CTL_PRE_0) |
| #define LCD_F_CLOCKPRESCALER_2 (LCD_F_CTL_PRE_1) |
| #define LCD_F_CLOCKPRESCALER_4 (LCD_F_CTL_PRE_2) |
| #define LCD_F_CLOCKPRESCALER_8 (LCD_F_CTL_PRE_3) |
| #define LCD_F_CLOCKPRESCALER_16 (LCD_F_CTL_PRE_4) |
| #define LCD_F_CLOCKPRESCALER_32 (LCD_F_CTL_PRE_5) |
| #define LCD_F_STATIC (LCD_F_CTL_MX_0) |
| #define LCD_F_2_MUX (LCD_F_CTL_MX_1) |
| #define LCD_F_3_MUX (LCD_F_CTL_MX_2) |
| #define LCD_F_4_MUX (LCD_F_CTL_MX_3) |
| #define LCD_F_5_MUX (LCD_F_CTL_MX_4) |
| #define LCD_F_6_MUX (LCD_F_CTL_MX_5) |
| #define LCD_F_7_MUX (LCD_F_CTL_MX_6) |
| #define LCD_F_8_MUX (LCD_F_CTL_MX_7) |
| #define LCD_F_V2V3V4_GENERATED_INTERNALLY_NOT_SWITCHED_TO_PINS (0x0) |
| #define LCD_F_V2V3V4_GENERATED_INTERNALLY_SWITCHED_TO_PINS (LCD_F_VCTL_REXT) |
| #define LCD_F_V2V3V4_SOURCED_EXTERNALLY (LCD_F_VCTL_EXTBIAS) |
| #define LCD_F_V5_VSS (0x0) |
| #define LCD_F_V5_SOURCED_FROM_R03 (LCD_F_VCTL_R03EXT) |
| #define LCD_F_STANDARD_WAVEFORMS (0x0) |
| #define LCD_F_LOW_POWER_WAVEFORMS (LCD_F_CTL_LP) |
| #define LCD_F_SEGMENTS_DISABLED (0x0) |
| #define LCD_F_SEGMENTS_ENABLED (LCD_F_CTL_SON) |
| #define LCD_F_BLINKING_SEGMENTS_ON_INTERRUPT (LCD_F_IE_BLKONIE) |
| #define LCD_F_BLINKING_SEGMENTS_OFF_INTERRUPT (LCD_F_IE_BLKOFFIE) |
| #define LCD_F_FRAME_INTERRUPT (LCD_F_IE_FRMIE) |
| #define LCD_F_ANIMATION_LOOP_INTERRUPT (LCD_F_IE_ANMLOOPIE) |
| #define LCD_F_ANIMATION_STEP_INTERRUPT (LCD_F_IE_ANMSTPIE) |
| #define LCD_F_DISPLAYSOURCE_MEMORY (0x0) |
| #define LCD_F_DISPLAYSOURCE_BLINKINGMEMORY (0x1) |
| #define LCD_F_BLINK_FREQ_CLOCK_PRESCALAR_512 LCD_F_BMCTL_BLKPRE_0 |
| #define LCD_F_BLINK_FREQ_CLOCK_PRESCALAR_1024 LCD_F_BMCTL_BLKPRE_1 |
| #define LCD_F_BLINK_FREQ_CLOCK_PRESCALAR_2048 LCD_F_BMCTL_BLKPRE_2 |
| #define LCD_F_BLINK_FREQ_CLOCK_PRESCALAR_4096 LCD_F_BMCTL_BLKPRE_3 |
| #define LCD_F_BLINK_FREQ_CLOCK_PRESCALAR_8162 LCD_F_BMCTL_BLKPRE_4 |
| #define LCD_F_BLINK_FREQ_CLOCK_PRESCALAR_16384 LCD_F_BMCTL_BLKPRE_5 |
| #define LCD_F_BLINK_FREQ_CLOCK_PRESCALAR_32768 LCD_F_BMCTL_BLKPRE_6 |
| #define LCD_F_BLINK_FREQ_CLOCK_PRESCALAR_65536 LCD_F_BMCTL_BLKPRE_7 |
| #define LCD_F_BLINK_FREQ_CLOCK_DIVIDER_1 LCD_F_BMCTL_BLKDIV_0 |
| #define LCD_F_BLINK_FREQ_CLOCK_DIVIDER_2 LCD_F_BMCTL_BLKDIV_1 |
| #define LCD_F_BLINK_FREQ_CLOCK_DIVIDER_3 LCD_F_BMCTL_BLKDIV_2 |
| #define LCD_F_BLINK_FREQ_CLOCK_DIVIDER_4 LCD_F_BMCTL_BLKDIV_3 |
| #define LCD_F_BLINK_FREQ_CLOCK_DIVIDER_5 LCD_F_BMCTL_BLKDIV_4 |
| #define LCD_F_BLINK_FREQ_CLOCK_DIVIDER_6 LCD_F_BMCTL_BLKDIV_5 |
| #define LCD_F_BLINK_FREQ_CLOCK_DIVIDER_7 LCD_F_BMCTL_BLKDIV_6 |
| #define LCD_F_BLINK_FREQ_CLOCK_DIVIDER_8 LCD_F_BMCTL_BLKDIV_7 |
| #define LCD_F_BLINK_MODE_DISABLED (LCD_F_BMCTL_BLKMOD_0) |
| #define LCD_F_BLINK_MODE_INDIVIDUAL_SEGMENTS (LCD_F_BMCTL_BLKMOD_1) |
| #define LCD_F_BLINK_MODE_ALL_SEGMENTS (LCD_F_BMCTL_BLKMOD_2) |
| #define LCD_F_BLINK_MODE_SWITCHING_BETWEEN_DISPLAY_CONTENTS (LCD_F_BMCTL_BLKMOD_3) |
| #define LCD_F_ANIMATION_FREQ_CLOCK_PRESCALAR_512 LCD_F_ANMCTL_ANMPRE_0 |
| #define LCD_F_ANIMATION_FREQ_CLOCK_PRESCALAR_1024 LCD_F_ANMCTL_ANMPRE_1 |
| #define LCD_F_ANIMATION_FREQ_CLOCK_PRESCALAR_2048 LCD_F_ANMCTL_ANMPRE_2 |
| #define LCD_F_ANIMATION_FREQ_CLOCK_PRESCALAR_4096 LCD_F_ANMCTL_ANMPRE_3 |
| #define LCD_F_ANIMATION_FREQ_CLOCK_PRESCALAR_8162 LCD_F_ANMCTL_ANMPRE_4 |
| #define LCD_F_ANIMATION_FREQ_CLOCK_PRESCALAR_16384 LCD_F_ANMCTL_ANMPRE_5 |
| #define LCD_F_ANIMATION_FREQ_CLOCK_PRESCALAR_32768 LCD_F_ANMCTL_ANMPRE_6 |
| #define LCD_F_ANIMATION_FREQ_CLOCK_PRESCALAR_65536 LCD_F_ANMCTL_ANMPRE_7 |
| #define LCD_F_ANIMATION_FREQ_CLOCK_DIVIDER_1 LCD_F_ANMCTL_ANMDIV_0 |
| #define LCD_F_ANIMATION_FREQ_CLOCK_DIVIDER_2 LCD_F_ANMCTL_ANMDIV_1 |
| #define LCD_F_ANIMATION_FREQ_CLOCK_DIVIDER_3 LCD_F_ANMCTL_ANMDIV_2 |
| #define LCD_F_ANIMATION_FREQ_CLOCK_DIVIDER_4 LCD_F_ANMCTL_ANMDIV_3 |
| #define LCD_F_ANIMATION_FREQ_CLOCK_DIVIDER_5 LCD_F_ANMCTL_ANMDIV_4 |
| #define LCD_F_ANIMATION_FREQ_CLOCK_DIVIDER_6 LCD_F_ANMCTL_ANMDIV_5 |
| #define LCD_F_ANIMATION_FREQ_CLOCK_DIVIDER_7 LCD_F_ANMCTL_ANMDIV_6 |
| #define LCD_F_ANIMATION_FREQ_CLOCK_DIVIDER_8 LCD_F_ANMCTL_ANMDIV_7 |
| #define LCD_F_ANIMATION_FRAMES_T0_TO_T7 LCD_F_ANMCTL_ANMSTP_7 |
| #define LCD_F_ANIMATION_FRAMES_T0_TO_T6 LCD_F_ANMCTL_ANMSTP_6 |
| #define LCD_F_ANIMATION_FRAMES_T0_TO_T5 LCD_F_ANMCTL_ANMSTP_5 |
| #define LCD_F_ANIMATION_FRAMES_T0_TO_T4 LCD_F_ANMCTL_ANMSTP_4 |
| #define LCD_F_ANIMATION_FRAMES_T0_TO_T3 LCD_F_ANMCTL_ANMSTP_3 |
| #define LCD_F_ANIMATION_FRAMES_T0_TO_T2 LCD_F_ANMCTL_ANMSTP_2 |
| #define LCD_F_ANIMATION_FRAMES_T0_TO_T1 LCD_F_ANMCTL_ANMSTP_1 |
| #define LCD_F_ANIMATION_FRAMES_T0 LCD_F_ANMCTL_ANMSTP_0 |
| #define LCD_F_SEGMENT_LINE_0 (0) |
| #define LCD_F_SEGMENT_LINE_1 (1) |
| #define LCD_F_SEGMENT_LINE_2 (2) |
| #define LCD_F_SEGMENT_LINE_3 (3) |
| #define LCD_F_SEGMENT_LINE_4 (4) |
| #define LCD_F_SEGMENT_LINE_5 (5) |
| #define LCD_F_SEGMENT_LINE_6 (6) |
| #define LCD_F_SEGMENT_LINE_7 (7) |
| #define LCD_F_SEGMENT_LINE_8 (8) |
| #define LCD_F_SEGMENT_LINE_9 (9) |
| #define LCD_F_SEGMENT_LINE_10 (10) |
| #define LCD_F_SEGMENT_LINE_11 (11) |
| #define LCD_F_SEGMENT_LINE_12 (12) |
| #define LCD_F_SEGMENT_LINE_13 (13) |
| #define LCD_F_SEGMENT_LINE_14 (14) |
| #define LCD_F_SEGMENT_LINE_15 (15) |
| #define LCD_F_SEGMENT_LINE_16 (16) |
| #define LCD_F_SEGMENT_LINE_17 (17) |
| #define LCD_F_SEGMENT_LINE_18 (18) |
| #define LCD_F_SEGMENT_LINE_19 (19) |
| #define LCD_F_SEGMENT_LINE_20 (20) |
| #define LCD_F_SEGMENT_LINE_21 (21) |
| #define LCD_F_SEGMENT_LINE_22 (22) |
| #define LCD_F_SEGMENT_LINE_23 (23) |
| #define LCD_F_SEGMENT_LINE_24 (24) |
| #define LCD_F_SEGMENT_LINE_25 (25) |
| #define LCD_F_SEGMENT_LINE_26 (26) |
| #define LCD_F_SEGMENT_LINE_27 (27) |
| #define LCD_F_SEGMENT_LINE_28 (28) |
| #define LCD_F_SEGMENT_LINE_29 (29) |
| #define LCD_F_SEGMENT_LINE_30 (30) |
| #define LCD_F_SEGMENT_LINE_31 (31) |
| #define LCD_F_SEGMENT_LINE_32 (32) |
| #define LCD_F_SEGMENT_LINE_33 (33) |
| #define LCD_F_SEGMENT_LINE_34 (34) |
| #define LCD_F_SEGMENT_LINE_35 (35) |
| #define LCD_F_SEGMENT_LINE_36 (36) |
| #define LCD_F_SEGMENT_LINE_37 (37) |
| #define LCD_F_SEGMENT_LINE_38 (38) |
| #define LCD_F_SEGMENT_LINE_39 (39) |
| #define LCD_F_SEGMENT_LINE_40 (40) |
| #define LCD_F_SEGMENT_LINE_41 (41) |
| #define LCD_F_SEGMENT_LINE_42 (42) |
| #define LCD_F_SEGMENT_LINE_43 (43) |
| #define LCD_F_SEGMENT_LINE_44 (44) |
| #define LCD_F_SEGMENT_LINE_45 (45) |
| #define LCD_F_SEGMENT_LINE_46 (46) |
| #define LCD_F_SEGMENT_LINE_47 (47) |
| #define LCD_F_MEMORY_COM0 (0x01) |
| #define LCD_F_MEMORY_COM1 (0x02) |
| #define LCD_F_MEMORY_COM2 (0x04) |
| #define LCD_F_MEMORY_COM3 (0x08) |
| #define LCD_F_MEMORY_COM4 (0x10) |
| #define LCD_F_MEMORY_COM5 (0x20) |
| #define LCD_F_MEMORY_COM6 (0x40) |
| #define LCD_F_MEMORY_COM7 (0x80) |
| #define LCD_F_BIAS_1_3 (0x0) |
| #define LCD_F_BIAS_1_2 (LCD_F_VCTL_LCD2B) |
| #define LCD_F_BIAS_1_4 (LCD_F_VCTL_LCD2B) |
| #define OFS_LCDM0W 0x120 |
Referenced by LCD_F_setPinAsCOM().
| #define OFS_LCDBM0W 0x160 |
Referenced by LCD_F_setPinAsCOM().
| typedef struct LCD_F_initParam LCD_F_Config |
| void LCD_F_initModule | ( | LCD_F_Config * | initParams | ) |
Initializes the LCD_F Module.
This function initializes the LCD_F but without turning on. It bascially setup the clock source, clock divider, mux rate, low-power waveform and segments on/off. After calling this function, user can enable/disable internal reference voltage or pin SEG/COM configurations.
| initParams | is the pointer to LCD_F_Config structure. |
References LCD_F_initParam::clockDivider, LCD_F_initParam::clockPrescaler, LCD_F_initParam::clockSource, LCD_F_initParam::muxRate, LCD_F_initParam::segments, and LCD_F_initParam::waveforms.
| void LCD_F_turnOn | ( | void | ) |
Turns on the LCD_F module.
This function turns the LCD_F on.
| void LCD_F_turnOff | ( | void | ) |
Turns the LCD_F off.
This function turns the LCD_F off.
| void LCD_F_clearAllMemory | ( | void | ) |
Clears all LCD_F memory registers.
This function clears all LCD_F memory registers.
| void LCD_F_clearAllBlinkingMemory | ( | void | ) |
Clears all LCD_F blinking memory registers.
This function clears all LCD_F blinking memory registers.
| void LCD_F_selectDisplayMemory | ( | uint_fast16_t | displayMemory | ) |
Selects display memory.
This function selects display memory either from memory or blinking memory. Please note if the blinking mode is selected as LCD_F_BLINKMODE_INDIVIDUALSEGMENTS or LCD_F_BLINKMODE_ALLSEGMENTS or mux rate >=5, display memory can not be changed. If LCD_F_BLINKMODE_SWITCHDISPLAYCONTENTS is selected, display memory bit reflects current displayed memory.
| displayMemory | is the desired displayed memory. Valid values are:
|
| void LCD_F_setBlinkingControl | ( | uint_fast16_t | clockPrescalar, |
| uint_fast16_t | divider, | ||
| uint_fast16_t | mode | ||
| ) |
Sets the blinking control register.
This function sets the blink control related parameter, including blink clock frequency prescalar and blink mode.
| clockPrescalar | is the clock pre-scalar for blinking frequency. Valid values are:
|
| clockDivider | is the clock divider for blinking frequency. Valid values are:
|
| mode | is the select for blinking mode. Valid values are:
|
| void LCD_F_setAnimationControl | ( | uint_fast16_t | clockPrescalar, |
| uint_fast16_t | divider, | ||
| uint_fast16_t | frames | ||
| ) |
Sets the animation control register.
This function sets the animation control related parameter, including animation clock frequency prescalar, divider, and frame settings
| clockPrescalar | is the clock pre-scalar for animation frequency. Valid values are:
|
| clockDivider | is the clock divider for animation frequency. Valid values are:
|
| frames | is number of animations frames to be repeated Valid values are:
|
| void LCD_F_enableAnimation | ( | void | ) |
Enables animation on the LCD_F controller.
This function turns on animation for the LCD_F controller.
| void LCD_F_disableAnimation | ( | void | ) |
Enables animation on the LCD_F controller.
This function turns on animation for the LCD_F controller.
| void LCD_F_clearAllAnimationMemory | ( | void | ) |
Clears all LCD_F animation memory registers.
This function clears all LCD_F animation memory registers.
| void LCD_F_setPinAsLCDFunction | ( | uint_fast8_t | pin | ) |
Sets the LCD_F pins as LCD function pin.
This function sets the LCD_F pins as LCD function pin.
| pin | is the select pin set as LCD function. Valid values are:
|
| void LCD_F_setPinAsPortFunction | ( | uint_fast8_t | pin | ) |
Sets the LCD_F pins as port function pin.
| baseAddress | is the base address of the LCD_F module. |
| pin | is the select pin set as Port function. Valid values are:
|
| void LCD_F_setPinsAsLCDFunction | ( | uint_fast8_t | startPin, |
| uint8_t | endPin | ||
| ) |
Sets the LCD_F pins as LCD function pin.
This function sets the LCD_F pins as LCD function pin. Instead of passing the all the possible pins, it just requires the start pin and the end pin.
| startPin | is the starting pin to be configured as LCD function pin. Valid values are:
|
| endPin | is the ending pin to be configured as LCD function pin. Valid values are:
|
| void LCD_F_setPinAsCOM | ( | uint8_t | pin, |
| uint_fast8_t | com | ||
| ) |
Sets the LCD_F pin as a common line.
This function sets the LCD_F pin as a common line and assigns the corresponding memory pin to a specific COM line.
| pin | is the selected pin to be configured as common line. Valid values are:
|
| com | is the selected COM number for the common line. Valid values are:
|
References HWREG8, OFS_LCDBM0W, and OFS_LCDM0W.
| void LCD_F_setPinAsSEG | ( | uint_fast8_t | pin | ) |
Sets the LCD_F pin as a segment line.
This function sets the LCD_F pin as segment line.
| pin | is the selected pin to be configed as segment line. Valid values are:
|
| void LCD_F_selectBias | ( | uint_fast16_t | bias | ) |
Selects the bias level.
| bias | is the select for bias level. Valid values are:
|
| void LCD_F_setVLCDSource | ( | uint_fast16_t | v2v3v4Source, |
| uint_fast16_t | v5Source | ||
| ) |
Sets the voltage source for V2/V3/V4 and V5.
| v2v3v4Source | is the V2/V3/V4 source select. Valid values are:
|
| v5Source | is the V5 source select. Valid values are:
|
| void LCD_F_clearInterrupt | ( | uint32_t | mask | ) |
Clears the LCD_F selected interrupt flags.
This function clears the specified interrupt flags.
| mask | is the masked interrupt flag to be cleared. Mask value is the logical OR of any of the following:
|
| uint32_t LCD_F_getInterruptStatus | ( | void | ) |
Returns the status of the selected interrupt flags.
This function returns the status of the selected interrupt flags.
| uint32_t LCD_F_getEnabledInterruptStatus | ( | void | ) |
Returns the status of the selected interrupt flags masked with the currently enabled interrupts.
| void LCD_F_enableInterrupt | ( | uint32_t | mask | ) |
Enables the LCD_F selected interrupts.
This function enables the specified interrupts
| mask | is the variable containing interrupt flags to be enabled. Mask value is the logical OR of any of the following:
|
| void LCD_F_disableInterrupt | ( | uint32_t | mask | ) |
Disables the LCD_F selected interrupts.
This function disables the specified interrupts.
| mask | is the variable containing interrupt flags to be disabled Mask value is the logical OR of any of the following:
|
| void LCD_F_registerInterrupt | ( | void(*)(void) | intHandler | ) |
Registers an interrupt handler for LCD_F interrupt.
| intHandler | is a pointer to the function to be called when the LCD_F interrupt occurs. |
This function registers the handler to be called when a LCD_F interrupt occurs. This function enables the global interrupt in the interrupt controller; specific LCD_F interrupts must be enabled via LCD_F_enableInterrupt(). It is the interrupt handler's responsibility to clear the interrupt source through LCD_F_clearInterruptFlag().
References INT_LCD_F, Interrupt_enableInterrupt(), and Interrupt_registerInterrupt().
| void LCD_F_unregisterInterrupt | ( | void | ) |
Unregisters the interrupt handler for the LCD_F interrupt
This function unregisters the handler to be called when LCD_F interrupt occurs. This function also masks off the interrupt in the interrupt controller so that the interrupt handler no longer is called.
References INT_LCD_F, Interrupt_disableInterrupt(), and Interrupt_unregisterInterrupt().


Essentials
- Installation
- Introduction
- The Vue Instance
- Template Syntax
- Computed Properties and Watchers
- Class and Style Bindings
- Conditional Rendering
- List Rendering
- Event Handling
- Form Input Bindings
- Components
Advanced
- Reactivity in Depth
- Transition Effects
- Transitioning State
- Render Functions
- Custom Directives
- Mixins
- Plugins
- Single File Components
- Production Deployment Tips
- Routing
- State Management
- Unit Testing
- Server-Side Rendering
- TypeScript Support
Migrating
- Migration from Vue 1.x
- Migration from Vue Router 0.7.x
- Migration from Vuex 0.6.x to 1.0
Meta
- Comparison with Other Frameworks
- Join the Vue.js Community!
Installation
Compatibility Note
Vue does not support IE8 and below, because it uses ECMAScript 5 features that are un-shimmable in IE8. However it supports all ECMAScript 5 compliant browsers.
Release Notes
Detailed release notes for each version are available on GitHub.
Direct <script>
Include
Simply download and include with a script tag. Vue
will be registered as a global variable.
Don’t use the minified version during development. You will miss out on all the nice warnings for common mistakes!
Development VersionWith full warnings and debug mode
Production VersionWarnings stripped, 26.87kb min+gzip
CDN
Recommended: https://unpkg.com/vue, which will reflect the latest version as soon as it is published to npm. You can also browse the source of the npm package at https://unpkg.com/vue/.
Also available on jsDelivr or cdnjs, but these two services take some time to sync so the latest release may not be available yet.
NPM
NPM is the recommended installation method when building large scale applications with Vue. It pairs nicely with module bundlers such as Webpack or Browserify. Vue also provides accompanying tools for authoring Single File Components.
|
CLI
Vue.js provides an official CLI for quickly scaffolding ambitious Single Page Applications. It provides batteries-included build setups for a modern frontend workflow. It takes only a few minutes to get up and running with hot-reload, lint-on-save, and production-ready builds:
|
The CLI assumes prior knowledge of Node.js and the associated build tools. If you are new to Vue or front-end build tools, we strongly suggest going through the guide without any build tools before using the CLI.
Explanation of Different Builds
In the dist/
directory of the NPM package you will find many different builds of Vue.js. Here’s an overview of the difference between them:
| UMD | CommonJS | ES Module | |
|---|---|---|---|
| Full | vue.js | vue.common.js | vue.esm.js |
| Runtime-only | vue.runtime.js | vue.runtime.common.js | vue.runtime.esm.js |
| Full (production) | vue.min.js | - | - |
| Runtime-only (production) | vue.runtime.min.js | - | - |
Terms
Full: builds that contains both the compiler and the runtime.
Compiler: code that is responsible for compiling template strings into JavaScript render functions.
Runtime: code that is responsible for creating Vue instances, rendering and patching virtual DOM, etc. Basically everything minus the compiler.
UMD: UMD builds can be used directly in the browser via a
<script>
tag. The default file from Unpkg CDN at https://unpkg.com/vue is the Runtime + Compiler UMD build (vue.js
).CommonJS: CommonJS builds are intended for use with older bundlers like browserify or webpack 1. The default file for these bundlers (
pkg.main
) is the Runtime only CommonJS build (vue.runtime.common.js
).ES Module: ES module builds are intended for use with modern bundlers like webpack 2 or rollup. The default file for these bundlers (
pkg.module
) is the Runtime only ES Module build (vue.runtime.esm.js
).
Runtime + Compiler vs. Runtime-only
If you need to compile templates on the fly (e.g. passing a string to the template
option, or mounting to an element using its in-DOM HTML as the template), you will need the compiler and thus the full build:
|
When using vue-loader
or vueify
, templates inside *.vue
files are pre-compiled into JavaScript at build time. You don’t really need the compiler in the final bundle, and can therefore use the runtime-only build.
Since the runtime-only builds are roughly 30% lighter-weight than their full-build counterparts, you should use it whenever you can. If you still wish to use the full build instead, you need to configure an alias in your bundler:
Webpack
|
Rollup
|
Browserify
Add to your project’s package.json
:
|
Development vs. Production Mode
Development/production modes are hard-coded for the UMD builds: the un-minified files are for development, and the minified files are for production.
CommonJS and ES Module builds are intended for bundlers, therefore we don’t provide minified versions for them. You will be responsible for minifying the final bundle yourself.
CommonJS and ES Module builds also preserve raw checks for process.env.NODE_ENV
to determine the mode they should run in. You should use appropriate bundler configurations to replace these environment variables in order to control which mode Vue will run in. Replacing process.env.NODE_ENV
with string literals also allows minifiers like UglifyJS to completely drop the development-only code blocks, reducing final file size.
Webpack
Use Webpack’s DefinePlugin:
|
Rollup
|
Browserify
Apply a global envify transform to your bundle.
|
Also see Production Deployment Tips.
CSP environments
Some environments, such as Google Chrome Apps, enforce Content Security Policy (CSP), which prohibits the use of new Function()
for evaluating expressions. The standalone build depends on this feature to compile templates, so is unusable in these environments.
On the other hand, the runtime-only build is fully CSP-compliant. When using the runtime-only build with Webpack + vue-loader or Browserify + vueify, your templates will be precompiled into render
functions which work perfectly in CSP environments.
Dev Build
Important: the built files in GitHub’s /dist
folder are only checked-in during releases. To use Vue from the latest source code on GitHub, you will have to build it yourself!
|
Bower
Only UMD builds are available from Bower.
|
AMD Module Loaders
All UMD builds can be used directly as an AMD module.


nips nips2004 nips2004-18 nips2004-18-reference knowledge-graph by maker-knowledge-mining
Source: pdf
Author: Amnon Shashua, Tamir Hazan
Abstract: This paper presents a general family of algebraic positive deﬁnite similarity functions over spaces of matrices with varying column rank. The columns can represent local regions in an image (whereby images have varying number of local parts), images of an image sequence, motion trajectories in a multibody motion, and so forth. The family of set kernels we derive is based on a group invariant tensor product lifting with parameters that can be naturally tuned to provide a cook-book of sorts covering the possible ”wish lists” from similarity measures over sets of varying cardinality. We highlight the strengths of our approach by demonstrating the set kernels for visual recognition of pedestrians using local parts representations. 1
[1] A.C. Aitken. Determinants and Matrices. Interscience Publishers Inc., 4th edition, 1946.
[2] G.H. Golub and C.F. Van Loan. Matrix computations. John Hopkins University Press, 1989.
[3] L. Gurvits. Classical deterministic complexity of edmonds’ problem and quantum entanglement. In ACM Symp. on Theory of Computing, 2003.
[4] R. Kondor and T. Jebara. A kernel between sets of vectors. In International Conference on Machine Learning, ICML, 2003.
[5] D.G. Lowe. Distinctive image features from scale-invariant keypoints. International Journal of Computer Vision, 2004.
[6] C. Schmidt and R. Mohr. Local grey-value invariants for image retrieval. IEEE Transactions on Pattern Analysis and Machine Intelligence, 19(5):530–535, 1997.
[7] A. Shashua, Y. Gdalyahu, G. Hayun and L. Mann. “Pedestrian Detection for Driving Assistance Systems”. IEEE Intelligent Vehicles Symposium (IV2004), June. 2004, Parma Italy.
[8] B. Sch¨ lkopf and A.J. Smola. Learning with Kernels. MIT Press, Cambridge, MA, 2002. o
[9] G. Shakhnarovich, J.W. Fisher, and T. Darrell. Face recognition from long-term observations. In Proceedings of the European Conference on Computer Vision, 2002.
[10] S. Ullman, M. Vidal-Naquet, and E. Sali. Visual features of intermediate complexity and their use in classiﬁcation. Nature Neuroscience, 5(7):1–6, 2002.
[11] V.N. Vapnik. The nature of statistical learning. Springer, 2nd edition, 1998.
[12] N. Vasconcelos, P. Ho, and P. Moreno. The kullback-leibler kernel as a framework for discriminant and localized representations for visual recognition. In Proceedings of the European Conference on Computer Vision, pages 430–441, Prague, Czech Republic, May 2004.
[13] C. Wallraven, B. Caputo, and A. Graf. Recognition with local features: the kernel recipe. In Proceedings of the International Conference on Computer Vision, 2003.
[14] L. Wolf and A. Shashua. Learning over sets using kernel principal angles. Journal of Machine Learning Research (JMLR), 4(10):913–931, 2003.


--- title: Team description: We've built an amazing team of developers, marketers, designers and sales people. image: https://source.unsplash.com/BcoGknSqlDc/2000x1322?a=.png ---
Co-President - Thomas Tran
Co-President - Soham Upadhyay
Executive Assistant Internal - Celia Dang
Executive Assistant External - Ahmed El-Gaaly
VP Finance - Grace Lin
VP Corporate Relations - Jasmine Tabuzo
Director of Corporate Relations - Charis Ikiriko
Executive Assistant Internal - Arnel San Jose
BizTek Lead - Luke de la Torre
BizTek Logistics Coord - Luke Lampman
BizTek Logistics Coord - Denith Wijesinghe
BizTek Volunteer - Raymond Arvesu
VP Events & IT - Skyler Sun
Director of Academic Events - Steven Katanywa
Director of Academic Events - Synclaire Ocici
IT Assistant - Angela Nadal
VP Art - Jenna Li
Director of Art - Daniel Tran
Director of Art - Raven Carencia
BizTek Art Coordinator - Aura Jara
VP Marketing - Emmanuel Okogwu
Executive Assistant External - Ahmed El-Gaaly
Ext Strategy Coord - Isham Behl
Social Media Coordinator - Jenna Li
Ext Emails Coord - Ace Zhao
Ext Co-Lead Special Projects Coord - Angela Nadal
Ext Co-Lead Special Projects Coord - Arnel San Jose
Ext Labour & Schedule Coord - Jared Desjarlais
Ext Co-Lead Special Projects Coord - Arnel San Jose
Boothing Assistant - Kazi Yasin Newaz
Poster & Boothing Assistantd - Reed Smith
Poster & Boothing Assistant - Bonaventura Jan Raditya
Classroom Talks Coord - Ahmed El-Gaaly
WebDev Lead - Farfama Hargaaya
WebDev - Kevin Kim
WebDev - Isham Behl
WebDev - Raven Carencia
VP CCD - Ace Zhao
Executive Assistant Internal - Kevin Lai
Director of Career Dev - TonyEu
Career Dev Assistant - Bonaventura Jan Raditya
Director of Community Dev - Ace Zhao
Case Comp Lead - Mac Pham
Case Comp Coordinator - Kevin Lai
Comp Sci Stu Advisor - Isham Behl
Comp Sci Stu Advisor - Jennifer Tran
Engineering Stu Advisor - Edison Guillermo
Recreation Management Advisor - Alex Wolowiec


Chong: Sugar supply liberalisation will benefit consumers in the long run
KUCHING, Dec 9 — The liberalisation policy on sugar supply in Sarawak will not result in an immediate effect to the price of the commodity but will definitely benefit consumers in the long term, Domestic Trade and Consumer Affairs Deputy Minister Chong Chieng Jen said today.
He said the policy, however, broke up the monopolies held by certain companies which dictated the supply and price of sugar in the state in the past, thus lowering the costs of business and reducing inflation in the long run.
“The main difference between the present PH government and the past BN (Barisan Nasional) government is that the BN government creates monopolies, thereby increases the cost of business which ultimately leads to prices of goods increases,” he said in a statement.
The statement came following the revelation of 11 companies which had been given the permit to import sugar to the state recently through the liberalisation of supply policy.
“The Ministry of Domestic Trade and Consumer Affairs will continue with its liberalisation of sugar policy and open to applications by any F&B (food and beverages) manufacturers in Sarawak, (whether) big or small, and we don’t need connection like it used to be during BN’s time,” he added. — Bernama


Humane Quotient is a volunteer based service started by a young group of friends. With an aim to tackle the problem of laziness and ignorance towards donation, we provide service to pick up the donation from doorstep and make sure it reaches to the people who are in need the most or to the right organization who can take care of distributing it.
We are an ever growing group of people who want to change the world for better by extending a helping hand and bringing the joy of giving to the people.
The idea is simple. You can donate items like clothes, blankets, stationery, utensils or other such items of daily use and necessity by simply filling up the donation form on our website. We will get in touch with you to schedule a pick up of the donation from your doorstep over the weekends.
You can also volunteer for a couple of hours on your weekend to be a part of this amazing initiative by filling up the volunteer form.


Inspiration
I love to take inspiration from the community of bullet journalists all over the web. Here are some of my favorite sources of inspiration:
reddit.com/r/bulletjournal - Great community and discussion of bullet journaling.
Pinterest
Pinterest is my favorite place to collect inspiration for my bullet journal. So many beautiful images aggregated and saved to one place. Here are some boards I follow:
Pinterest has a feed dedicated solely to bullet journaling here!
And of course, my own pinterest:
Blogs - These blogs write primarily about journaling. They are actually the reason I got into Bullet journaling in the first place!
Boho Berry - One of my favorite blogs for bullet journaling, bohoberry hosts monthly journaling challenges and has beautiful spreads.
Tiny Ray of Sunshine - Also another host of many journaling challenges, I love this blog for beautiful minimalist layout inspiration.
Pretty Prints and Paper - Lots of great spread ideas here.
YouTube - see journaling happen in real time!
- A Dude’s Bullet Journal Walkthrough - Matthew Kent
- My Bullet Journal Setup - Planner Holics
- The official Bullet Journal YouTube Channel


{#- This file was automatically generated - do not edit -#} {% extends "main.html" %} {% block content %}
Click the edit button in the upper right corner of the original document to fix the invalid link and become a contributor.
You can also:
Submit an issue about the invalid link.
Return to the previous page.
Return to the home page.
{% endblock %} {% block disqus %}{% endblock %}


-
Interfaces Interface Description org.smooks.engine.delivery.sax.ng.org.apache.xml.serialize.DOMSerializer This class was deprecated in Xerces 2.9.0. It is recommended that new applications use the DOM Level 3 LSSerializer or JAXP's Transformation API for XML (TrAX) for serializing XML. See the Xerces documentation for more information.org.smooks.engine.delivery.sax.ng.org.apache.xml.serialize.Serializer This class was deprecated in Xerces 2.9.0. It is recommended that new applications use the DOM Level 3 LSSerializer or JAXP's Transformation API for XML (TrAX) for serializing XML and HTML. See the Xerces documentation for more information.
-
Classes Class Description org.smooks.engine.delivery.sax.ng.org.apache.xml.serialize.BaseMarkupSerializer This class was deprecated in Xerces 2.9.0. It is recommended that new applications use the DOM Level 3 LSSerializer or JAXP's Transformation API for XML (TrAX) for serializing XML. See the Xerces documentation for more information.org.smooks.engine.delivery.sax.ng.org.apache.xml.serialize.DOMSerializerImpl Replaced by org.apache.xml.serializer.dom3.LSSerializerImpl in Xerces 2.9.0.org.smooks.engine.delivery.sax.ng.org.apache.xml.serialize.ElementState This class was deprecated in Xerces 2.9.0. It is recommended that new applications use the DOM Level 3 LSSerializer or JAXP's Transformation API for XML (TrAX) for serializing XML. See the Xerces documentation for more information.org.smooks.engine.delivery.sax.ng.org.apache.xml.serialize.EncodingInfo This class was deprecated in Xerces 2.9.0. It is recommended that new applications use the DOM Level 3 LSSerializer or JAXP's Transformation API for XML (TrAX) for serializing XML. See the Xerces documentation for more information.org.smooks.engine.delivery.sax.ng.org.apache.xml.serialize.Encodings This class was deprecated in Xerces 2.9.0. It is recommended that new applications use the DOM Level 3 LSSerializer or JAXP's Transformation API for XML (TrAX) for serializing XML. See the Xerces documentation for more information.org.smooks.engine.delivery.sax.ng.org.apache.xml.serialize.HTMLdtd This class was deprecated in Xerces 2.9.0. It is recommended that new applications use JAXP's Transformation API for XML (TrAX) for serializing HTML. See the Xerces documentation for more information.org.smooks.engine.delivery.sax.ng.org.apache.xml.serialize.HTMLSerializer This class was deprecated in Xerces 2.6.2. It is recommended that new applications use JAXP's Transformation API for XML (TrAX) for serializing HTML. See the Xerces documentation for more information.org.smooks.engine.delivery.sax.ng.org.apache.xml.serialize.IndentPrinter This class was deprecated in Xerces 2.9.0. It is recommended that new applications use the DOM Level 3 LSSerializer or JAXP's Transformation API for XML (TrAX) for serializing XML. See the Xerces documentation for more information.org.smooks.engine.delivery.sax.ng.org.apache.xml.serialize.LineSeparator This class was deprecated in Xerces 2.9.0. It is recommended that new applications use the DOM Level 3 LSSerializer or JAXP's Transformation API for XML (TrAX) for serializing XML. See the Xerces documentation for more information.org.smooks.engine.delivery.sax.ng.org.apache.xml.serialize.Method This class was deprecated in Xerces 2.9.0. It is recommended that new applications use the DOM Level 3 LSSerializer or JAXP's Transformation API for XML (TrAX) for serializing XML. See the Xerces documentation for more information.org.smooks.engine.delivery.sax.ng.org.apache.xml.serialize.OutputFormat This class was deprecated in Xerces 2.9.0. It is recommended that new applications use the DOM Level 3 LSSerializer or JAXP's Transformation API for XML (TrAX) for serializing XML and HTML. See the Xerces documentation for more information.org.smooks.engine.delivery.sax.ng.org.apache.xml.serialize.OutputFormat.Defaults This class was deprecated in Xerces 2.9.0. It is recommended that new applications use the DOM Level 3 LSSerializer or JAXP's Transformation API for XML (TrAX) for serializing XML and HTML. See the Xerces documentation for more information.org.smooks.engine.delivery.sax.ng.org.apache.xml.serialize.OutputFormat.DTD This class was deprecated in Xerces 2.9.0. It is recommended that new applications use the DOM Level 3 LSSerializer or JAXP's Transformation API for XML (TrAX) for serializing XML and HTML. See the Xerces documentation for more information.org.smooks.engine.delivery.sax.ng.org.apache.xml.serialize.Printer This class was deprecated in Xerces 2.9.0. It is recommended that new applications use the DOM Level 3 LSSerializer or JAXP's Transformation API for XML (TrAX) for serializing XML. See the Xerces documentation for more information.org.smooks.engine.delivery.sax.ng.org.apache.xml.serialize.SerializerFactory This class was deprecated in Xerces 2.9.0. It is recommended that new applications use the DOM Level 3 LSSerializer or JAXP's Transformation API for XML (TrAX) for serializing XML and HTML. See the Xerces documentation for more information.org.smooks.engine.delivery.sax.ng.org.apache.xml.serialize.TextSerializer This class was deprecated in Xerces 2.9.0. It is recommended that new applications use the DOM Level 3 LSSerializer or JAXP's Transformation API for XML (TrAX) for serializing XML and HTML. See the Xerces documentation for more information.org.smooks.engine.delivery.sax.ng.org.apache.xml.serialize.XHTMLSerializer This class was deprecated in Xerces 2.6.2. It is recommended that new applications use JAXP's Transformation API for XML (TrAX) for serializing XHTML. See the Xerces documentation for more information.org.smooks.engine.delivery.sax.ng.org.apache.xml.serialize.XML11Serializer This class was deprecated in Xerces 2.9.0. It is recommended that new applications use the DOM Level 3 LSSerializer or JAXP's Transformation API for XML (TrAX) for serializing XML. See the Xerces documentation for more information.org.smooks.engine.delivery.sax.ng.org.apache.xml.serialize.XMLSerializer This class was deprecated in Xerces 2.9.0. It is recommended that new applications use the DOM Level 3 LSSerializer or JAXP's Transformation API for XML (TrAX) for serializing XML. See the Xerces documentation for more information.org.smooks.engine.resource.config.xpath.PatternParser will be removed in Jaxen 2.0
-
Fields Field Description org.smooks.engine.delivery.sax.ng.org.apache.xerces.impl.Version.fVersion getVersion() should be used instead.org.smooks.engine.resource.config.XMLConfigDigester.XSD_V12 org.smooks.engine.resource.config.xpath.AbstractSelectorPath.namespaceURI


HTML
.
Hello everyone!
We're using two lines now!
Inline
or
block?
Bold
inline = break emphasis img "block" paragraph


Bonnie Wong
Hello and welcome to my application to Founders and Coders.
Click below to specific section or scroll down to read more!
About Me
Hello, my name is Bonnie. I grew up in both Hong Kong and New Zealand. Now I reside in the UK and worked in Finance as a qualified accountant for the last 6 years.
I am someone who is constantly looking for ways to expand my skills outside of work. Over the years, I found myself at various events and stumbed into the tech community. There was something quite empowering about the tech community and the people around it that really interested me and led me to explore further in this space. I attended many informative tech events, but one in particular, Ada Lovelace Day event, left a mark on me and I thought to myself, what if I could be like those people in the community knowledgeable and empower others?
At the end of last year, I took a leap of faith and resigned from my stable job to pursue coding. Since then I've been learning and have been very fortunate to meet many talented people who have generously helped me with my journey. I'd love to have the opportunity to join Founders and Coders's spring cohort 2021, be part of the community that supports and enables others along the way.
I enjoy...
Hover over the image to reveal...


Open vSwitch (OVS) is intended to be easily ported to new software and hardware platforms. This document describes the types of changes that are most likely to be necessary in porting OVS to Unix-like platforms. (Porting OVS to other kinds of platforms is likely to be more difficult.)
For historical reasons, different words are used for essentially the same concept in different areas of the Open vSwitch source tree. Here is a concordance, indexed by the area of the source tree:
datapath/ vport ---
vswitchd/ iface port
ofproto/ port bundle
ofproto/bond.c slave bond
lib/lacp.c slave lacp
lib/netdev.c netdev ---
database Interface Port
The following diagram shows the very high-level architecture of Open vSwitch from a porter's perspective.
+-------------------+
| ovs-vswitchd |<-->ovsdb-server
+-------------------+
| ofproto |<-->OpenFlow controllers
+--------+-+--------+
| netdev | | ofproto|
+--------+ |provider|
| netdev | +--------+
|provider|
+--------+
Some of the components are generic. Modulo bugs or inadequacies, these components should not need to be modified as part of a port:
"ovs-vswitchd" is the main Open vSwitch userspace program, in vswitchd/. It reads the desired Open vSwitch configuration from the ovsdb-server program over an IPC channel and passes this configuration down to the "ofproto" library. It also passes certain status and statistical information from ofproto back into the database.
"ofproto" is the Open vSwitch library, in ofproto/, that implements an OpenFlow switch. It talks to OpenFlow controllers over the network and to switch hardware or software through an "ofproto provider", explained further below.
"netdev" is the Open vSwitch library, in lib/netdev.c, that abstracts interacting with network devices, that is, Ethernet interfaces. The netdev library is a thin layer over "netdev provider" code, explained further below.
The other components may need attention during a port. You will almost certainly have to implement a "netdev provider". Depending on the type of port you are doing and the desired performance, you may also have to implement an "ofproto provider" or a lower-level component called a "dpif" provider.
The following sections talk about these components in more detail.
A "netdev provider" implements an operating system and hardware specific interface to "network devices", e.g. eth0 on Linux. Open vSwitch must be able to open each port on a switch as a netdev, so you will need to implement a "netdev provider" that works with your switch hardware and software.
struct netdev_class, in lib/netdev-provider.h, defines the interfaces required to implement a netdev. That structure contains many function pointers, each of which has a comment that is meant to describe its behavior in detail. If the requirements are unclear, please report this as a bug.
The netdev interface can be divided into a few rough categories:
Functions required to properly implement OpenFlow features. For example, OpenFlow requires the ability to report the Ethernet hardware address of a port. These functions must be implemented for minimally correct operation.
Functions required to implement optional Open vSwitch features. For example, the Open vSwitch support for in-band control requires netdev support for inspecting the TCP/IP stack's ARP table. These functions must be implemented if the corresponding OVS features are to work, but may be omitted initially.
Functions needed in some implementations but not in others. For example, most kinds of ports (see below) do not need functionality to receive packets from a network device.
The existing netdev implementations may serve as useful examples during a port:
lib/netdev-linux.c implements netdev functionality for Linux network devices, using Linux kernel calls. It may be a good place to start for full-featured netdev implementations.
lib/netdev-vport.c provides support for "virtual ports" implemented by the Open vSwitch datapath module for the Linux kernel. This may serve as a model for minimal netdev implementations.
lib/netdev-dummy.c is a fake netdev implementation useful only for testing.
After a netdev provider has been implemented for a system's network devices, you may choose among three basic porting strategies.
The lowest-effort strategy is to use the "userspace switch" implementation built into Open vSwitch. This ought to work, without writing any more code, as long as the netdev provider that you implemented supports receiving packets. It yields poor performance, however, because every packet passes through the ovs-vswitchd process. See [INSTALL.userspace.md] for instructions on how to configure a userspace switch.
If the userspace switch is not the right choice for your port, then you will have to write more code. You may implement either an "ofproto provider" or a "dpif provider". Which you should choose depends on a few different factors:
Only an ofproto provider can take full advantage of hardware with built-in support for wildcards (e.g. an ACL table or a TCAM).
A dpif provider can take advantage of the Open vSwitch built-in implementations of bonding, LACP, 802.1ag, 802.1Q VLANs, and other features. An ofproto provider has to provide its own implementations, if the hardware can support them at all.
A dpif provider is usually easier to implement, but most appropriate for software switching. It "explodes" wildcard rules into exact-match entries (with an optional wildcard mask). This allows fast hash lookups in software, but makes inefficient use of TCAMs in hardware that support wildcarding.
The following sections describe how to implement each kind of port.
An "ofproto provider" is what ofproto uses to directly monitor and control an OpenFlow-capable switch. struct ofproto_class, in ofproto/ofproto-provider.h, defines the interfaces to implement an ofproto provider for new hardware or software. That structure contains many function pointers, each of which has a comment that is meant to describe its behavior in detail. If the requirements are unclear, please report this as a bug.
The ofproto provider interface is preliminary. Please let us know if it seems unsuitable for your purpose. We will try to improve it.
Open vSwitch has a built-in ofproto provider named "ofproto-dpif", which is built on top of a library for manipulating datapaths, called "dpif". A "datapath" is a simple flow table, one that is only required to support exact-match flows, that is, flows without wildcards. When a packet arrives on a network device, the datapath looks for it in this table. If there is a match, then it performs the associated actions. If there is no match, the datapath passes the packet up to ofproto-dpif, which maintains the full OpenFlow flow table. If the packet matches in this flow table, then ofproto-dpif executes its actions and inserts a new entry into the dpif flow table. (Otherwise, ofproto-dpif passes the packet up to ofproto to send the packet to the OpenFlow controller, if one is configured.)
When calculating the dpif flow, ofproto-dpif generates an exact-match flow that describes the missed packet. It makes an effort to figure out what fields can be wildcarded based on the switch's configuration and OpenFlow flow table. The dpif is free to ignore the suggested wildcards and only support the exact-match entry. However, if the dpif supports wildcarding, then it can use the masks to match multiple flows with fewer entries and potentially significantly reduce the number of flow misses handled by ofproto-dpif.
The "dpif" library in turn delegates much of its functionality to a "dpif provider". The following diagram shows how dpif providers fit into the Open vSwitch architecture:
_
| +-------------------+
| | ovs-vswitchd |<-->ovsdb-server
| +-------------------+
| | ofproto |<-->OpenFlow controllers
| +--------+-+--------+ _
| | netdev | |ofproto-| |
userspace | +--------+ | dpif | |
| | netdev | +--------+ |
| |provider| | dpif | |
| +---||---+ +--------+ |
| || | dpif | | implementation of
| || |provider| | ofproto provider
|_ || +---||---+ |
|| || |
_ +---||-----+---||---+ |
| | |datapath| |
kernel | | +--------+ _|
| | |
|_ +--------||---------+
||
physical
NIC
struct dpif_class, in lib/dpif-provider.h, defines the interfaces required to implement a dpif provider for new hardware or software. That structure contains many function pointers, each of which has a comment that is meant to describe its behavior in detail. If the requirements are unclear, please report this as a bug.
There are two existing dpif implementations that may serve as useful examples during a port:
lib/dpif-netlink.c is a Linux-specific dpif implementation that talks to an Open vSwitch-specific kernel module (whose sources are in the "datapath" directory). The kernel module performs all of the switching work, passing packets that do not match any flow table entry up to userspace. This dpif implementation is essentially a wrapper around calls into the kernel module.
lib/dpif-netdev.c is a generic dpif implementation that performs all switching internally. This is how the Open vSwitch userspace switch is implemented.
Open vSwitch source code uses uint16t, uint32t, and uint64t as fixed-width types in host byte order, and ovsbe16, ovsbe32, and ovsbe64 as fixed-width types in network byte order. Each of the latter is equivalent to the one of the former, but the difference in name makes the intended use obvious.
The default "fail-mode" for Open vSwitch bridges is "standalone", meaning that, when the OpenFlow controllers cannot be contacted, Open vSwitch acts as a regular MAC-learning switch. This works well in virtualization environments where there is normally just one uplink (either a single physical interface or a bond). In a more general environment, it can create loops. So, if you are porting to a general-purpose switch platform, you should consider changing the default "fail-mode" to "secure", which does not behave this way. See documentation for the "fail-mode" column in the Bridge table in ovs-vswitchd.conf.db(5) for more information.
lib/entropy.c assumes that it can obtain high-quality random number seeds at startup by reading from /dev/urandom. You will need to modify it if this is not true on your platform.
vswitchd/system-stats.c only knows how to obtain some statistics on Linux. Optionally you may implement them for your platform as well.
The "Porting Strategies" section above describes the "ofproto provider" and "dpif provider" porting strategies. Only an ofproto provider can take advantage of hardware TCAM support, and only a dpif provider can take advantage of the OVS built-in implementations of various features. It is therefore tempting to suggest a hybrid approach that shares the advantages of both strategies.
However, Open vSwitch does not support a hybrid approach. Doing so may be possible, with a significant amount of extra development work, but it does not yet seem worthwhile, for the reasons explained below.
First, user surprise is likely when a switch supports a feature only with a high performance penalty. For example, one user questioned why adding a particular OpenFlow action to a flow caused a 1,058x slowdown on a hardware OpenFlow implementation [1]. The action required the flow to be implemented in software.
Given that implementing a flow in software on the slow management CPU of a hardware switch causes a major slowdown, software-implemented flows would only make sense for very low-volume traffic. But many of the features built into the OVS software switch implementation would need to apply to every flow to be useful. There is no value, for example, in applying bonding or 802.1Q VLAN support only to low-volume traffic.
Besides supporting features of OpenFlow actions, a hybrid approach could also support forms of matching not supported by particular switching hardware, by sending all packets that might match a rule to software. But again this can cause an unacceptable slowdown by forcing bulk traffic through software in the hardware switch's slow management CPU. Consider, for example, a hardware switch that can match on the IPv6 Ethernet type but not on fields in IPv6 headers. An OpenFlow table that matched on the IPv6 Ethernet type would perform well, but adding a rule that matched only UDPv6 would force every IPv6 packet to software, slowing down not just UDPv6 but all IPv6 processing.
[1] Aaron Rosen, "Modify packet fields extremely slow", openflow-discuss mailing list, June 26, 2011, archived at https://mailman.stanford.edu/pipermail/openflow-discuss/2011-June/002386.html.
Please direct porting questions to<EMAIL_ADDRESS>We will try to use questions to improve this porting guide.