text:
Admission Requirements | Applying for Admission | Notification of Admission | International Students | International Exchange Students
We seek students who will thrive in our classrooms and bring vibrancy to our campus. We review each application individually and take into consideration quality of academic preparation, which includes both difficulty of course work and grades, extracurricular activities, individual talents and character, recommendations, and ACT or SAT/RSAT scores. A campus visit to meet with an admissions counselor is recommended, as it helps complete the picture for both the prospective student and the college. Westminster admits students whose academic records indicate that they possess the skills and maturity necessary for success in college. Students are admitted without discrimination as to race, visa status, color, nationality, creed, sex, physical handicaps, or veteran status.
A standard college preparatory high school academic program is required and some level of advanced work is highly recommended.
Admission to the college does not constitute acceptance into all of its programs. Students applying for admission into the Education and Nursing programs should consult the appropriate sections of this Academic Catalog for additional admission requirements. Music students must audition to be accepted into the major or minor. Students applying to graduate programs should review the appropriate sections in the Graduate Academic Catalog.
Applications for admission are accepted on a continual basis and are processed until the beginning of each academic term. Westminster operates rolling admissions, so it's best to apply as soon as possible. To preserve the faculty-student ratio, class sizes are limited. Westminster College reserves the right to close the class earlier than dates specified if enrollment goals are met before those dates. To accept an offer of admission and reserve a place in the class, an admitted applicant must submit a non-refundable $250 tuition deposit by the National Reply Date, May 1, or within thirty days of admission. For fall semester admission, if an extension is requested in writing, the deadline will be extended depending on circumstances.
Westminster College administers all of its educational programs, related support services, and benefits in a manner that does not discriminate against students or prospective students with regard to race, color, religion, gender, sexual orientation, age, national or ethnic origin, disability, or a person's status as a veteran. Westminster College seeks to provide equal access for people with disabilities to its programs, services, and activities. Please contact Disability Services at 801.832.2272 (TTY 832.2286) if you require admission information in an alternative format or if you need other accommodations.
New First-Year
Individual applications are reviewed on the basis of a student's motivation and potential for success at Westminster. Academic preparation, which includes both coursework and grades, is most important. Other measures, including the personal essay, entrance exams (ACT or SAT/RSAT), and extracurricular activities, are also given strong consideration. A campus visit to meet with an admissions counselor is recommended, as it helps in the decision-making process for both the prospective student and the college.
A student currently enrolled in high school may be accepted for admission on the basis of six semesters of high school work. The college may require additional grade reports during the student's senior year, and will require final official transcripts showing high school graduation.
A student with a cumulative grade point average of 2.75 (B-) or better in academic courses from all previous college work, and who is in good academic standing at his/her previous institution(s) may be considered for admission as a transfer student. Exceptions can be made on a case-by-case basis.
Detailed information regarding Westminster College transfer policies can be found in the Degree Requirements section of this catalog.
Non-degree seeking students are defined as students who are enrolled at the college but have not applied for, or been accepted into, a degree program. Non-degree seeking students, therefore, are those who plan to take courses for "interest only." Non-degree seeking students are subject to the academic regulations of the college. Credit earned while in non-degree seeking student status is not considered toward a degree unless the student applies for admission to, and is accepted by, the college as a degree-seeking student. A maximum of 30 semester hours of coursework taken as a non-degree-seeking student may be considered for credit earned toward a degree. Non-degree seeking students are not eligible to receive institutional or federal financial aid. Those who wish to pursue a degree must complete the admission process as a degree-seeking student. Non-degree seeking students must be admitted as degree-seeking prior to the first day of classes in the semester in which they wish to be considered degree-seeking. Applications for admission as a degree-seeking student will be considered after one or more semesters of coursework.
Readmission of Former Students
Students who wish to register at the college after an absence of three or more academic semesters (not including May or summer terms) must apply for readmission through the Office of Admissions. Re-entering students are subject to the academic requirements in effect at the time of their re-entry. Westminster College makes every effort to honor coursework taken in previous years; however, due to curriculum changes, this cannot be guaranteed. Previous coursework in question must be reviewed by individual academic departments with a final agreement submitted in writing to the Registrar's Office.
Former students who have attended other colleges or universities during their absence must apply for readmission as transfer students and must meet all applicable requirements for admission. Students will be reevaluated for transfer merit scholarships based on all college credits taken, including those from Westminster. It should be noted that students who attend other colleges or universities during a summer session are not required to reapply. Transfer credit for such courses is subject to the college's regular transfer policies as stated in the Degree Requirements section of this catalog.
In accordance with the Higher Education Reauthorization Act, Westminster College will readmit veterans at the same academic status in which they left the institution, provided the veteran notifies the college in advance of their deployments and are not absent from the institution for more than five years, cumulatively. Those students who fail to provide advance notice may re-enroll after providing proof of service.
Qualified high school junior and senior students (grades 11 and 12) may enroll at Westminster, while still attending high school, for a maximum of eight credit hours (per semester) with the permission of the Office of Admissions, the applicant's high school principal or guidance counselor, and parent or legal guardian. Written recommendations from the appropriate individuals and an official transcript (grade point average of 3.00 or higher in academic coursework strongly recommended) must be submitted to the Office of Admissions. Additional credit hours may be requested and must be approved by the student's Westminster academic advisor.
Non-High School Graduates
Students who have not completed high school, or who have graduated from a non-accredited high school, may be admitted to the college on the basis of scores received on the General Educational Development examination (GED). Minimum scores vary depending on the year the GED was taken. Please speak to an admissions counselor for additional information.
Students must submit:
An online application for admission form. The form may also be obtained from the Office of Admissions.
Personal statement or essay.
A transcript of high school credit sent directly to the Office of Admissions (for incoming first-year students only).
Official transcript(s) from each college or university attended (for incoming transfer students) sent directly to the Office of Admissions by each college or university. An official high school transcript may also be required of a transfer applicant who has completed fewer than 30 semester credit hours or 45 quarter credit hours of college or university work at another institution.
ACT or SAT test scores (for incoming first year students only).
Guidance Counselor Recommendation, upon request (for incoming first-year students only).
Incoming first-year students must submit an official final high school transcript documenting a high school graduation date prior to beginning classes. All records submitted to the college become the property of Westminster College as part of each student's permanent record and are not returnable.
High school seniors should apply for admission early in their senior year if they plan to enter the college during the following fall semester. Transfer and international students should apply at least three months prior to the beginning of the semester they plan to attend.
Notification of Admission
Applicants receive a letter notifying them of their eligibility for admission approximately two weeks after the Office of Admissions receives all required materials (application forms, transcripts, and test scores). Transfer students receive a separate summary of transfer credit evaluation, which may come before admission to the college. The summary of transfer credit evaluation does not guarantee admission, rather is provided to the student as a guide of which credits will transfer if admitted to the college.
Once the applicant has been advised of acceptance, a $250 tuition deposit must be submitted to guarantee a place in the entering class. Checks should be made payable to Westminster College and sent to the Office of Admissions. Tuition deposits may also be submitted online at Tuition Deposit.
The tuition deposit should be submitted within 30 days of acceptance/receipt of financial aid award or by the National Reply Date of May 1. Students who need additional time should contact the Office of Admissions. The deposit is credited to the student's account and is deducted from tuition at the beginning of the semester. Students may choose to defer their admission after paying the tuition deposit for one to two years. Extensions may be considered on a case-by-case basis.
Students must abide by the first- and second-year living experience in which students are required to live in campus housing during the fall and spring semesters. Students planning to live in campus housing must submit a housing application and a $200 room deposit*. Residence Life may grant exceptions for students with extenuating circumstances after an exemption form is submitted. Please see Residence Life for all of these forms.
*$150 of housing deposits are refunded in full, pending damages or charges when a student moves out of housing. The other $50 is used as a non-refundable room reservation fee by the college.
The college accepts and enrolls students who are citizens of countries other than the United States. Full-time international students are issued Forms I–20 to enable them to apply for student visas.
To be considered for enrollment at the college, international students must meet the same admissions requirements as domestic students in addition to other specific international requirements. International students must submit the following materials to the Office of Admissions:
Online application for admission.
Official transcripts, academic records, diplomas, national examination results, certificates or degrees received from all secondary, post-secondary, university and/or professional schools and any necessary translations. These transcripts should be submitted directly to an approved professional evaluation service for a course-by-course evaluation (World Education Services or other Westminster approved service). Students who graduate from an American International School are exempt from this requirement. There may be other exceptions granted on a case-by-case basis.
International students who are non-native speakers of English must provide evidence of English language proficiency ; see English Proficiency Policy below for details. Test date must be within two years of application for scores to be valid.
Recommendation letter from high school counselor or teacher, upon request.
After international students are admitted, they will be required to provide evidence of adequate financial support to cover the total cost of attendance for two semesters. This most commonly comes in the form of a certified bank statement or bank letter as well as a Statement of Financial Responsibility as issued by Westminster College.
English proficiency exam results are required for international student applications. Minimum scores for admission are as follows:
English Proficiency Exam Results:
Undergraduate: Test Full Admit English Bridge 2
English Bridge 1
TOEFL IBT 79 66 55 and no subset below 12
IELTS 6.5 6 5.5 and no subset below 5.0
PTE 53 44 39
MTELP 85 76
CEFR B2 B1
Norwegian Upper Secondary School English Course 4
Westminster Level
Associates in Cultural Exchange ACE 6 Full Admit; take WRIT 110
ELS Language Schools 112 Full Admit; take WRIT 110
Selnate International Graduation Certificate Grad Certificate English Bridge 2
Citizens or permanent residents of the following countries are not required to complete an English proficiency exam: Australia, Canada (except Quebec), Ireland, New Zealand, United Kingdom, and/or United States. These students are required to submit results from the ACT or SAT.
High School Education:
Students are not required to complete an English Proficiency Exam under the following conditions:
High school transcripts reflect a minimum of three years English education at American International School, Cambridge affiliated school, or International Baccalaureate (IB) affiliated school with passing grades.
Student attended high school for a minimum of three years in one of the following countries with passing grades: Australia, Canada (except Quebec), Ireland, New Zealand, United Kingdom, and/or United States. These students are required to submit results from the ACT or SAT.
Transfer Students:
Students transferring from an accredited US institution are not required to complete an English Proficiency Exam under the following conditions:
Completed a minimum of 15 college level credits of general education or major requirements with a minimum grade of C-. Credits from ESL and orientation style courses will not be accepted.
If these requirements are not met, the student will be required to complete an English proficiency exam or register for WRIT 110 in their first semester.
Additional Review (Case by Case Basis):
If there are any concerns over the validity of documents verifying English proficiency the following will occur:
In-house English language exam.
Personal Essay:
If a student's personal essay does not indicate a sufficient level of English comprehension, the following will occur:
Essay review by Director of English Language and Writing Support Program.
If necessary, the in-house English language exam or an English proficiency exam may be required.
ACT or SAT Results:
A student who has attended an American International School, Cambridge affiliated school, or International Baccalaureate (IB) affiliated school with passing grades, but attendance was for less than three years; and has already taken (or has already registered for) the ACT or SAT, may submit these results instead of an English proficiency exam. All of the following conditions must be met:
Student has achieved the following scores depending on which exam they have taken:
ACT: 19 minimum score in English and Reading.
SAT: 510 minimum score in Reading and Writing Section and 27 minimum score in Reading Test.
Student completes the in-house English language exam.
Student receives approval from the Director of English Language and Writing Support Program.
All materials submitted to the Office of Admissions become the property of the college and cannot be returned to the student or sent to another school. If the student's school or ministry of education issues only one copy of secondary school grades or examination scores, the Office of Admissions will make a certified copy and return the original to the student; however, in all cases copies must be made from originals. Duplicated copies will not be accepted.
Once all required documentation has been received and the student has been accepted for admission, a Form I–20 will be sent to the student.
The college accepts and enrolls students from our partner institutions who are citizens of countries other than the United States for exchange programs. Full-time international exchange students are issued Forms DS-2019 forms to enable them to apply for student visas.
Exchange students must submit the following materials to the Office of Student International Services:
Exchange student application for admission (application fee is waived)
Nomination letter from an academic advisor, professor, dean or exchange coordinator at the partner institution.
Official transcripts, academic records, diplomas, national examination results, certificates or degrees received from all secondary, post-secondary, university and/or professional schools. All transcripts must be submitted with an official English translation
Evidence of adequate financial support to cover the total cost of attendance for the
duration of the exchange program (one or two semesters). This most commonly comes in the form of a certified bank statement or bank letter.
Statement of Financial Responsibility completed by the student and/or financial guarantor.
Evidence of English language proficiency as described in the International Student Admission requirements above.
Copy of the identification page of the applicant's passport
Once all required documentation has been received and the student has been accepted for admission, a Form DS-2019 will be sent to the student.


ove shower base attractive shower base your house decor shop decors white acrylic shower base ove shower base drain location.
ove shower base sliding door shower with base chrome ove reversible shower base 60 x 32.
ove shower base shower base reversible shower base shower base dimensions shower base ove shower base hidden drain.
ove shower base view larger ove shower base reviews.
ove shower base large size of tubs walk in showers shower base corner shower pan ove reversible shower base 60 x 32.
ove shower base rectangle center drain ove shower base costco.
ove shower base shower kit in satin ove shower base drain location.
ove shower base shower base x shower base x shower details about acrylic shower base with seat x shower base ove shower base lowes.
ove shower base inch shower base medium size of inch shower base image concept cast iron bases pans inch shower base ove shower base costco.
ove shower base ch shower base ove shower base 48x32.
ove shower base shower base with hidden drain ove shower base costco.
ove shower base slimline x double threshold shower base ove shower base costco.
ove shower base shower base shower base ove shower base dimensions.
ove shower base shower doors launching sliding shop decors in h x w glass panel at better to 5 ove shower base hidden drain.
ove shower base decors inch glass shower door with acrylic base within shower doors ideas ove shower base installation instructions.
ove shower base ch ove shower base dimensions.
ove shower base shower base x shower pan medium size of alluring photo design with seat x shower shower base ove shower base dimensions.
ove shower base corner shower base awesome in l x w white acrylic round for 2 ove shower base installation instructions.
ove shower base x shower base ove shower base dimensions.
ove shower base shower ove shower base lowes.
ove shower base shop decors in w x in h brushed nickel rectangle 5 piece corner shower kit at find our selection of shower stalls at ove shower base hidden drain.
ove shower base shop decors white acrylic inch square shower base free shipping today rstockcom ove shower base lowes.
ove shower base decors sierra tub door shower base x ove reversible shower base 60 x 32.
ove shower base decors homepage shower base ove shower base costco.
ove shower base shower installation you ove shower base lowes.
ove shower base shower kit with reversible ove shower base drain location.
ove shower base shower shower base review ove shower base dimensions.
ove shower base shower base medium size of shower base installation general guidelines unusual images design shower shower base ove shower base costco.
ove shower base shower base acrylic hidden drain ove shower base dimensions.
ove shower base in w x in l white acrylic shower base ove shower base reviews.
ove shower base shower base x shower base shower cast iron shower pan x k salient x shower pan shower base ove shower base dimensions.
ove shower base ove shower base 60 x 32.
ove shower base medium size of tubs walk in showers shower pan with seat shower ove shower base drain location.
ove shower base shower door shower door installation lea in w x in h pivot shower door shower ove shower base costco.
ove shower base reversible shower base ove shower base installation instructions.
ove shower base decors inch shower home depot ove reversible shower base 60 x 32.
ove shower base shower base x ove shower base 48x32.
ove shower base breeze premium x round sliding shower enclosure with base included ove shower base costco.


text:
Q: Why Use FTP to copy files? I have a requirement to move large files from server to server in VB code, like in a Windows Service. My initial response was we need to use FTP classes in .NET because why would there be tools like Filezilla or CuteFTP if a simple file copy would do the trick.  But the more I think of it, I can't really come up with why FTP really is so important. Yet everyone seems to use it. What am I missing?

A: You can't file copy over all TCP networks.  FTP provides file transfer capability over any TCP network and implements error handling, retries, checkpoints, etc. that you would otherwise have to implement yourself.
If you implement your solution using Microsoft Windows Network or Active Directory as a dependency, Murphy demands that sooner or later you will have to use it to copy files between two servers that can't talk this way.  Use FTP ;-)

A:
But the more I think of it, I can't really come up with why FTP really is so important.

FTP is a nearly universal file transfer protocol that allows the copying of files from one computer to a different computer on an internal network or on an external network like the Internet.
Copying David's comment. If you mean that you can copy the file to something like a network share them yes, FTP probably isn't necessary.
Adding my thought. If you have computers with different operating systems on a network, then FTP would be required.

redpajama_set_name: RedPajamaStackExchange


text:
Also Published In…
Reviews And Analysis
Bad Shakespeare
"There is nothing either good nor bad, but thinking makes it so."
Mission: Impossible – Fallout Review
Posted on 7 Aug 2018 7 Aug 2018 by Michael Hock Posted in Reviews And AnalysisTagged Mission Impossible, recommended, Summer Movie Season, Tom Cruise
by Michael B. Hock
Sequels are interesting. It used to be a rule that sequels were rarely better than the original, and that there would be a series of diminishing returns – sure Batman Returns was good, but there was a marked decline in quality. This seemed to be true of any sequel that wasn't an even numbered Star Trek movie or The Empire Strikes Back.
I use this to preface the fact that Mission: Impossible – Fallout… the sixth movie in a 20 year old franchise.. didn't have to be as good as it was. And yet somehow, it manages to be one of the best action movies of the year.
Mission: Impossible – Fallout continues the adventures of Ethan Hunt, who presumably has not left the IMF team even after the many times he's been disavowed. These movies are never extremely complex: There's a mission, it goes wrong, then after having gone wrong a steam works to make things right. After a disastrous mission in which he loses plutonium to a terrorist group known as the Apostles, Hunt is teamed up with a mustachioed CIA Agent August Walker to recover it. Along the way Hunt, Walker, and his team meet up with some old faces, including Hunt's ex-wife. Also, Henry Cavill has this cool part where he resets his arms to go into fight, it's in all the trailers, and it's really, really cool. Honestly there's a lot in those few sentences – this is a very long movie – but there are a lot of twists and turns. Honestly I'm the first person who rails against spoilers, but this is not something you should go into knowing anything other than the trailers.
It's impossible to know where to start with a movie like this one, especially ones with a few twists that you see coming, and a few that only fall into place later. Tom Cruise is comfortable in his role as Ethan Hunt, a part he's played off and on for the past 20 years. Ving Rhames and Simon Pegg remain wonderful as the two people who keep Ethan grounded and as out of trouble as they can. Rebecca Ferguson has some great moments as Ilsa Faust And Henry Cavill brings some new life into the team as the CIA Agent that isn't played by Jeremy Renner.
Oh, and his mustache really is that powerful. Maybe not "destroy the Justice League" powerful, but it's pretty powerful.
The latest Mission Impossible doesn't upend the system or try to remake the franchise – it continues a story that began a few years ago when the franchise was softly rebooted and dropped the numbers from the title. The movie franchise, while becoming more and more entertaining as time goes on, more closely resembles a television show: There's a teaser, opening credits, and even "guest stars." That may sound a bit like an insult, but it's not meant to: after a few false starts – John Woo is a fantastic director but Mission: Impossible II is a little rough – the Mission: Impossible movies have fallen into a good pattern that manages to still manages to keep the audience surprised.
What makes this one so great is the way it manages to play into audience expectations while still subverting them. A twist is given off pretty early, but still manages to be surprising with the way it plays with the information, teasing it out just right and adding the right layers to it. The revelation, while hardly a surprise, takes on new meaning to the rest of the movie and what has been presented so far. It's a rare balance that not many movies have been able to achieve: if played too seriously then it takes away from the seriousness of the movie. If it's played off too much like a joke, then it delves into parody. This is one movie series that, even while finding new and exciting ways to go over the top, manages to stay grounded in the world it created with the very first movie.
Well, as grounded as possible for a movie that works this hard to bring in over the top stunts. There's a halo jump over Paris, there's a helicopter battle sequence, and a fight on a mountain that left me breathless despite the fact that it involved Tom Cruise and every rational thought in my head was "he's not going to fall, he's the star of the movie." In terms of action, Mission: Impossible still manages to find new ways to top itself.
The only real flaw of the movie is the fact that it does tend to drag in places. At times, it seems as if it's more concerned with getting to the next big set piece. Granted, that set piece is extraordinary, so in retrospect, they're worth it. Yes, these missions are supposed to be difficult. But watching them fail and cope with their failure is usually the least interesting parts of these movies, especially ones that feature great moments. We need the build up, but at the same time, the lows don't have to be quite so low. It does take away a little bit from some of the movie, but not a lot, as these moments are few.
Obviously, this is a fun movie. I'm sure the next twelve will be equally fun, and I'm sure it will involve a fair amount of Tom Cruise running.
Hamlet T. Wondercat Says
out of Five
Hamlet T. Wondercat's SDCC Wrap-Up
Captain Marvel Review

redpajama_set_name: RedPajamaCommonCrawl


text:
Sandrine Berges
Liberty in thy name!
The Philosophy of Domesticity
The Home: A Philosophical Project
Women Philosophers Calendars
Public Philosophy
Wollstonecraft at Bilkent
Bridging the Gender Gap Through Time
Wollapalooza
Wollapalooza II
Historical zombies and other fiction
Crafts and things
Feminist History of Philosophy
Liberty in their Names
Get the Free Calendar
Order the book!
Lady of the Manor: Manon Roland and the Great Fear
Although she was born and bred in Paris, Manon Roland spent the first three years of the Revolution in Lyon at her husband's country home of Le Clos, living a simple, retired life. There she received visitors who played an important role in the revolution and corresponded with others, notably Brissot, who printed several of her letters in his paper Le Patriote François.
Madame Roland prided herself on fully taking part of the country life, picking grapes during the vendanges, and mixing with her peasant neighbors on equal and easy terms (or so she thought, anyway).
In July 1789, within six days of the fall of the Bastille, a rumor spread through France that brigands, or perhaps the English, were sacking the country. People everywhere panicked, and soon, the peasants who'd armed themselves to fight this fictitious enemy began to revolt, sometimes violently, setting fire to the homes of the rich and murdering their inhabitants.
People were advised to leave the countryside and come to Paris, where they would be safer. Madame Roland responded in a letter published anonymously by Brissot:
Every one tells me to move to the city—I will not. I have not hurt any body in the country, I have no land nor title, I have only done good to my neighbors. Were they to become ungrateful, so what? I will pay the interest of the advantages that my position gave me over them. But I will not do them the injury of believing it before the event, and even if I were to fall victim to a few bandits, I would not despair of the res publica, as do the cowards who call for a counter-revolution because a few houses were burnt down.
The Rolands eventually did come up to Paris in 1791, not out of fear, but because they wanted to participate in the political events that were taking place in the Capital. Unfortunately, this did little to increase their safety as they both died in 1793.
This is where I live blog about my new book project, an intellectual biography of three French Revolutionary women philosophers.
Abolitionism
Bonheur Primitif
Brissot
Cabanis
Champ De Mars Massacre
Declaration Of The Rights Of Man
Germaine De Stael
Hannah Mather Crocker
Helvetius
Les Trois Urnes
Letters On Sympathy
Louise Keralio
Macaualy
Manon Roland
Saint-Domingue
September Massacres
Sieyes
Sophie De Grouchy
The Great Fear
Theroigne De Mericourt
Wollstonecraft


Portland, CT- At its state meeting at the Portland Public Library, the state leaders of the Green Party of Connecticut voted last night to challenge the new Campaign Finance Reform law provision that sets discriminatory signature petition drive requirements ONLY for third party and other independent candidates to qualify for state public financing, and met with Cliff Thornton about a possible run for Governor.
Tim McKee, Green Party National Committee person said "We are now looking at suing over these unfair provisions of the new law, which punish Independents and the Green Party candidates with having to collect over 200,000 additional signatures or 20% of the state voting lists to qualify for public funding of campaigns for state offices. We voted to talk to lawyers and discuss our options, including working with campaign finance reform advocates to persuade the General Assembly to change this punitive and discriminatory signature provision in this upcoming short G. A. session before we have to go to court."
Also Greens met with Cliff Thornton, founder of the drug reform group "Efficacy", about a possible first and historic race for Governor. Thornton, who has spoken to New Haven and New London Greens about running for Governor and his views on reforming the destructive drug war, asked about gaining the Green nomination and running with the support of the CT Libertarian Party and other state "third parties" in a coalition.
When asked about why he might run for Governor, Thornton said he wanted to push many issues not talked about by the other candidates. One example, Thornton explained, was the huge state costs of the drug war. He said "We must change or end big government programs that don't work. Treatment reduces drug abuse better than imprisonment, and covers 6 recovering patients for the annual cost of 1 recidivist prisoner."
Mike DeRosa, CT. Greens Co-Chair said "If Cliff Thornton runs, it would be historic race. The first African- American running for Governor in Connecticut history, and The Greens first state-wide race, if he runs."
Green officials said the Governor nomination and other state office nominations would decided at a state convention later this year.


text:
#include "nsconfig.h"
#include <string.h>
#include "ns_types.h"
#include "ns_trace.h"
#include "nsdynmemLIB.h"
#include "platform/arm_hal_interrupt.h"
#include "mac_api.h"
#include "sw_mac.h"
#include "mac_common_defines.h"
#include "common_functions.h"
#include "MAC/IEEE802_15_4/mac_defines.h"
#include "MAC/IEEE802_15_4/mac_security_mib.h"

#define TRACE_GROUP "mMIB"
/**
 * Allocate device description table based on size
 */
static mlme_device_descriptor_t *mac_sec_mib_device_description_table_allocate(uint8_t table_size)
{
    mlme_device_descriptor_t *table_ptr = ns_dyn_mem_alloc(sizeof(mlme_device_descriptor_t) * table_size);
    if (table_ptr) {
        memset(table_ptr, 0xff, (sizeof(mlme_device_descriptor_t) * table_size));
    }
    return table_ptr;
}

static mlme_key_descriptor_t *mac_sec_mib_key_description_table_allocate(uint8_t table_size)
{
    mlme_key_descriptor_t *table_ptr = ns_dyn_mem_alloc(sizeof(mlme_key_descriptor_t) * table_size);
    if (table_ptr) {
        memset(table_ptr, 0, (sizeof(mlme_key_descriptor_t) * table_size));
    }
    return table_ptr;
}

static mlme_key_device_descriptor_t *mac_sec_mib_key_device_description_table_allocate(uint16_t list_size)
{
    mlme_key_device_descriptor_t *table_ptr = ns_dyn_mem_alloc(sizeof(mlme_key_device_descriptor_t) * list_size);
    if (table_ptr) {
        memset(table_ptr, 0, (sizeof(mlme_key_device_descriptor_t) * list_size));
    }
    return table_ptr;
}

static mlme_key_usage_descriptor_t *mac_sec_mib_key_usage_table_allocate(uint16_t list_size)
{

    mlme_key_usage_descriptor_t *table_ptr = ns_dyn_mem_alloc(sizeof(mlme_key_usage_descriptor_t) * list_size);
    if (table_ptr) {
        memset(table_ptr, 0, (sizeof(mlme_key_usage_descriptor_t) * list_size));
    }
    return table_ptr;
}

static mlme_key_id_lookup_descriptor_t *mac_sec_mib_key_lookup_table_allocate(uint16_t list_size)
{

    mlme_key_id_lookup_descriptor_t *table_ptr = ns_dyn_mem_alloc(sizeof(mlme_key_id_lookup_descriptor_t) * list_size);
    if (table_ptr) {
        memset(table_ptr, 0, (sizeof(mlme_key_id_lookup_descriptor_t) * list_size));
    }
    return table_ptr;
}

static int mac_sec_mib_frame_counter_key_buffer_allocate(protocol_interface_rf_mac_setup_s *rf_mac_setup, uint16_t list_size, uint16_t device_count)
{
    rf_mac_setup->key_device_frame_counter_list_buffer = ns_dyn_mem_alloc(sizeof(uint32_t) * list_size * device_count);
    if (!rf_mac_setup->key_device_frame_counter_list_buffer) {
        return -1;
    }
    memset(rf_mac_setup->key_device_frame_counter_list_buffer, 0, (sizeof(uint32_t) * list_size * device_count));
    rf_mac_setup->secFrameCounterPerKey = true;
    mlme_key_descriptor_t *key_descriptor_list = rf_mac_setup->key_description_table;
    uint32_t *frame_counter_pointer = rf_mac_setup->key_device_frame_counter_list_buffer;
    for (uint8_t i = 0; i < rf_mac_setup->key_description_table_size; i++) {
        key_descriptor_list->KeyDeviceFrameCounterList = frame_counter_pointer;
        key_descriptor_list->KeyFrameCounterPerKey = true;
        key_descriptor_list->KeyFrameCounter = 0;
        //Update Pointers
        key_descriptor_list++;
        frame_counter_pointer += device_count;
    }

    return 0;
}

static void mac_sec_mib_frame_counter_key_buffer_free(protocol_interface_rf_mac_setup_s *rf_mac_setup)
{
    mlme_key_descriptor_t *key_descriptor_list = rf_mac_setup->key_description_table;
    for (uint8_t i = 0; i < rf_mac_setup->key_description_table_size; i++) {
        key_descriptor_list->KeyDeviceFrameCounterList = NULL;
        key_descriptor_list->KeyFrameCounterPerKey = false;
        //Update Pointers
        key_descriptor_list++;
    }
    ns_dyn_mem_free(rf_mac_setup->key_device_frame_counter_list_buffer);
    rf_mac_setup->key_device_frame_counter_list_buffer = NULL;
    rf_mac_setup->secFrameCounterPerKey = false;
}

static mlme_device_descriptor_t *mac_sec_mib_device_description_get_by_mac16(protocol_interface_rf_mac_setup_s *rf_mac_setup, uint16_t mac16, uint16_t pan_id)
{

    mlme_device_descriptor_t *device_table = rf_mac_setup->device_description_table;
    if (!device_table) {
        return NULL;
    }

    for (int i = 0; i < rf_mac_setup->device_description_table_size; i++) {
        if ((pan_id == 0xffff || device_table->PANId == pan_id) && device_table->ShortAddress == mac16) {
            return device_table;
        }
        device_table++;
    }

    return NULL;
}

static mlme_device_descriptor_t *mac_sec_mib_device_description_get_by_mac64(protocol_interface_rf_mac_setup_s *rf_mac_setup, const uint8_t *mac64, uint16_t pan_id)
{

    mlme_device_descriptor_t *device_table = rf_mac_setup->device_description_table;
    if (!device_table) {
        return NULL;
    }

    for (int i = 0; i < rf_mac_setup->device_description_table_size; i++) {
        if ((pan_id == 0xffff || device_table->PANId == pan_id)) {
            if (memcmp(device_table->ExtAddress, mac64, 8) == 0) {
                return device_table;
            }
        }
        device_table++;
    }
    return NULL;
}

//Remove entry from the list
static void mac_sec_mib_key_device_description_remove_from_list(mlme_key_descriptor_t *key_descpription_table, uint8_t device_descriptor_handle)
{
    bool removed_entry = false;
    mlme_key_device_descriptor_t *cur, *prev;
    prev = NULL;
    cur = key_descpription_table->KeyDeviceList;
    for (uint8_t i = 0; i < key_descpription_table->KeyDeviceListEntries; i++) {
        if (removed_entry) {
            //copy current to last one
            *prev = *cur;
        } else if (cur->DeviceDescriptorHandle == device_descriptor_handle) {
            removed_entry = true;
            //tr_debug("Remove user %u from key", device_descriptor_handle);
        }
        prev = cur;
        cur++;
    }

    if (removed_entry) {
        key_descpription_table->KeyDeviceListEntries--;
        //Clear Also frame counter per key if it its enabled
        if (key_descpription_table->KeyFrameCounterPerKey) {
            //SET frame counter to 0
            mac_sec_mib_key_device_frame_counter_set(key_descpription_table, NULL, 0, device_descriptor_handle);
        }
    }
}

static void mac_sec_mib_device_description_remove(protocol_interface_rf_mac_setup_s *rf_mac_setup, uint8_t device_handle)
{
    for (uint8_t i = 0; i < rf_mac_setup->key_description_table_size; i++) {
        mac_sec_mib_key_device_description_remove_from_list(&rf_mac_setup->key_description_table[i], device_handle);
    }
}

static int8_t  mac_sec_mib_device_description_table_deinit(protocol_interface_rf_mac_setup_s *rf_mac_setup)
{
    ns_dyn_mem_free(rf_mac_setup->device_description_table);
    rf_mac_setup->device_description_table = NULL;
    rf_mac_setup->device_description_table_size = 0;
    return 0;
}

static void mac_sec_mib_security_material_free(protocol_interface_rf_mac_setup_s *rf_mac_setup)
{
    ns_dyn_mem_free(rf_mac_setup->key_description_table);
    ns_dyn_mem_free(rf_mac_setup->key_device_desc_buffer);
    ns_dyn_mem_free(rf_mac_setup->key_usage_list_buffer);
    ns_dyn_mem_free(rf_mac_setup->key_lookup_buffer);
    rf_mac_setup->key_usage_list_buffer = NULL;
    rf_mac_setup->key_description_table = NULL;
    rf_mac_setup->key_lookup_buffer = NULL;
    rf_mac_setup->key_device_desc_buffer = NULL;
    rf_mac_setup->key_description_table_size = 0;
    rf_mac_setup->key_lookup_list_size = 0;
    rf_mac_setup->key_usage_list_size = 0;
}

static int8_t  mac_sec_mib_key_description_table_deinit(protocol_interface_rf_mac_setup_s *rf_mac_setup)
{
    mac_sec_mib_security_material_free(rf_mac_setup);
    return 0;
}

static int8_t  mac_sec_mib_device_description_table_init(protocol_interface_rf_mac_setup_s *rf_mac_setup, uint8_t table_size)
{

    rf_mac_setup->device_description_table = mac_sec_mib_device_description_table_allocate(table_size);
    if (!rf_mac_setup->device_description_table) {
        return -1;
    }

    rf_mac_setup->device_description_table_size = table_size;
    return 0;
}

static int8_t mac_sec_mib_key_description_table_init(protocol_interface_rf_mac_setup_s *rf_mac_setup, uint8_t table_size, uint8_t device_decription_size, uint8_t key_lookup_size, uint8_t key_usage_size)
{

    rf_mac_setup->key_description_table = mac_sec_mib_key_description_table_allocate(table_size);
    rf_mac_setup->key_device_desc_buffer = mac_sec_mib_key_device_description_table_allocate(device_decription_size * table_size);
    rf_mac_setup->key_usage_list_buffer = mac_sec_mib_key_usage_table_allocate(key_usage_size * table_size);
    rf_mac_setup->key_lookup_buffer = mac_sec_mib_key_lookup_table_allocate(key_lookup_size * table_size);

    if (!rf_mac_setup->key_lookup_buffer || !rf_mac_setup->key_description_table || !rf_mac_setup->key_device_desc_buffer || !rf_mac_setup->key_usage_list_buffer) {
        mac_sec_mib_security_material_free(rf_mac_setup);
        return -1;
    }

    //SET description buffer sizes
    rf_mac_setup->key_description_table_size = table_size;
    rf_mac_setup->key_lookup_list_size = key_lookup_size;
    rf_mac_setup->key_usage_list_size = key_usage_size;

    mlme_key_descriptor_t *key_descriptor_list = rf_mac_setup->key_description_table;
    mlme_key_device_descriptor_t *key_device_decription = rf_mac_setup->key_device_desc_buffer;
    mlme_key_usage_descriptor_t *key_usage_ptr = rf_mac_setup->key_usage_list_buffer;
    mlme_key_id_lookup_descriptor_t *key_lookup = rf_mac_setup->key_lookup_buffer;

    for (uint8_t i = 0; i < rf_mac_setup->key_description_table_size; i++) {

        //Update Pointer values after first init
        if (i) {
            key_device_decription += device_decription_size;
            key_usage_ptr += key_usage_size;
            key_lookup += key_lookup_size;
            key_descriptor_list++;
        }
        key_descriptor_list->KeyDeviceListSize = device_decription_size;
        key_descriptor_list->KeyDeviceList = key_device_decription;
        key_descriptor_list->KeyUsageList = key_usage_ptr;
        key_descriptor_list->KeyIdLookupList = key_lookup;
    }

    return 0;

}

int8_t mac_sec_mib_device_description_set(uint8_t atribute_index, mlme_device_descriptor_t *device_descriptor, protocol_interface_rf_mac_setup_s *rf_mac_setup)
{

    //validate index to list size
    if (!rf_mac_setup || !device_descriptor || atribute_index >= rf_mac_setup->device_description_table_size) {
        return -1;
    }

    platform_enter_critical();
    mlme_device_descriptor_t *device_ptr = rf_mac_setup->device_description_table + atribute_index;

    //Copy description
    if (memcmp(device_ptr->ExtAddress, device_descriptor->ExtAddress, 8)) {
        //Remove last handles key user's
        mac_sec_mib_device_description_remove(rf_mac_setup, atribute_index);
        //tr_debug("Over write %u, mac16 %x mac64: %s, %"PRIu32, atribute_index, device_ptr->ShortAddress, trace_array(device_ptr->ExtAddress, 8), device_ptr->FrameCounter);
    }

    //tr_debug("Set %u, mac16 %x mac64: %s, %"PRIu32, atribute_index, device_descriptor->ShortAddress, trace_array(device_descriptor->ExtAddress, 8), device_descriptor->FrameCounter);

    *device_ptr = *device_descriptor;

    platform_exit_critical();

    return 0;
}

int8_t mac_sec_mib_key_description_set(uint8_t atribute_index, mlme_key_descriptor_entry_t *key_descriptor, protocol_interface_rf_mac_setup_s *rf_mac_setup)
{

    //validate index to list size
    if (!rf_mac_setup || !key_descriptor || atribute_index >= rf_mac_setup->key_description_table_size) {
        return -1;
    }

    if (key_descriptor->KeyDeviceListEntries > rf_mac_setup->key_description_table_size || (key_descriptor->KeyDeviceListEntries && !key_descriptor->KeyDeviceList)) {
        return -1;
    }

    if (key_descriptor->KeyIdLookupListEntries > rf_mac_setup->key_lookup_list_size || (key_descriptor->KeyIdLookupListEntries && !key_descriptor->KeyIdLookupList)) {
        return -1;
    }

    if (key_descriptor->KeyUsageListEntries > rf_mac_setup->key_usage_list_size || (key_descriptor->KeyUsageListEntries && !key_descriptor->KeyUsageList)) {
        return -1;
    }

    mlme_key_descriptor_t *key_ptr = rf_mac_setup->key_description_table + atribute_index;

    //Copy description
    tr_debug("Set key %"PRIu8, atribute_index);

    memcpy(key_ptr->Key, key_descriptor->Key, 16);
    key_ptr->KeyDeviceListEntries = key_descriptor->KeyDeviceListEntries;
    key_ptr->unique_key_descriptor = false;

    if (key_ptr->KeyDeviceListEntries) {
        memcpy(key_ptr->KeyDeviceList, key_descriptor->KeyDeviceList, sizeof(mlme_key_device_descriptor_t) * key_ptr->KeyDeviceListEntries);
        //Check unique key
        if (key_ptr->KeyDeviceListEntries == 1) {
            key_ptr->unique_key_descriptor = key_descriptor->KeyDeviceList->UniqueDevice;
        }
    }

    key_ptr->KeyIdLookupListEntries = key_descriptor->KeyIdLookupListEntries;

    if (key_ptr->KeyIdLookupListEntries) {
        memcpy(key_ptr->KeyIdLookupList, key_descriptor->KeyIdLookupList, sizeof(mlme_key_id_lookup_descriptor_t) * key_ptr->KeyIdLookupListEntries);
    }

    key_ptr->KeyUsageListEntries = key_descriptor->KeyUsageListEntries;

    if (key_ptr->KeyUsageListEntries) {
        memcpy(key_ptr->KeyUsageList, key_descriptor->KeyUsageList, sizeof(mlme_key_usage_descriptor_t) * key_ptr->KeyUsageListEntries);
    }

    if (key_ptr->KeyFrameCounterPerKey) {
        key_ptr->KeyFrameCounter = 0;
        if (key_ptr->KeyDeviceListEntries == 0) {
            //Clear all frame counters from old possible user's
            uint32_t *counter_ptr = key_ptr->KeyDeviceFrameCounterList;
            for (int i = 0; i < rf_mac_setup->device_description_table_size; i++) {
                *counter_ptr++ = 0;
            }
        }
    }

    return 0;
}

mlme_device_descriptor_t *mac_sec_mib_device_description_get_attribute_index(protocol_interface_rf_mac_setup_s *rf_mac_setup, uint8_t attribute_index)
{
    if (!rf_mac_setup || attribute_index >= rf_mac_setup->device_description_table_size) {
        return NULL;
    }
    return rf_mac_setup->device_description_table + attribute_index;
}

void mac_sec_mib_device_description_pan_update(protocol_interface_rf_mac_setup_s *rf_mac_setup, uint16_t pan_id)
{
    mlme_device_descriptor_t *device_table = rf_mac_setup->device_description_table;
    if (!device_table) {
        return;
    }

    for (int i = 0; i < rf_mac_setup->device_description_table_size; i++) {

        device_table->PANId = pan_id;
        device_table++;
    }

}

mlme_device_descriptor_t *mac_sec_mib_device_description_get(protocol_interface_rf_mac_setup_s *rf_mac_setup, const uint8_t *address, uint8_t type, uint16_t pan_id)
{
    if (rf_mac_setup) {
        if (type == MAC_ADDR_MODE_16_BIT) {
            uint16_t short_id = common_read_16_bit(address);
            return  mac_sec_mib_device_description_get_by_mac16(rf_mac_setup, short_id, pan_id);
        } else if (type == MAC_ADDR_MODE_64_BIT) {
            return mac_sec_mib_device_description_get_by_mac64(rf_mac_setup, address, pan_id);
        }
    }

    return NULL;
}

uint8_t mac_mib_device_descption_attribute_get_by_descriptor(protocol_interface_rf_mac_setup_s *rf_mac_setup, mlme_device_descriptor_t *descriptor)
{
    if (!rf_mac_setup || !descriptor) {
        return 0xff;
    }
    mlme_device_descriptor_t *device_table = rf_mac_setup->device_description_table;
    for (uint8_t i = 0; i < rf_mac_setup->device_description_table_size; i++) {
        if (device_table == descriptor) {
            return i;
        }
        device_table++;
    }
    return 0xff;
}

static bool mac_sec_key_description_lookup_validate(mlme_key_descriptor_t *key_description, uint8_t *lookupdata)
{
    uint8_t lookup_length;
    mlme_key_id_lookup_descriptor_t *cur_lookup_ptr = key_description->KeyIdLookupList;

    for (uint8_t i = 0; i < key_description->KeyIdLookupListEntries; i++) {
        if (cur_lookup_ptr->LookupDataSize) {
            lookup_length = 9;
        } else {
            lookup_length = 5;
        }

        if (memcmp(cur_lookup_ptr->LookupData, lookupdata, lookup_length) == 0) {
            return true;
        }
        cur_lookup_ptr++;
    }
    return false;
}

mlme_key_descriptor_t *mac_sec_key_description_get(protocol_interface_rf_mac_setup_s *rf_mac_setup, mlme_security_t *key_source, uint8_t address_mode, uint8_t *address_ptr, uint16_t pan_id)
{
    if (!rf_mac_setup || !key_source) {
        return NULL;
    }

    mlme_key_descriptor_t *key_description;
    uint8_t lookup_data[9];
    memset(lookup_data, 0, 9);

    switch (key_source->KeyIdMode) {
        case MAC_KEY_ID_MODE_IMPLICIT:
            if (address_mode == MAC_ADDR_MODE_64_BIT) {
                memcpy(lookup_data, address_ptr, 8);
            } else if (address_mode == MAC_ADDR_MODE_16_BIT) {
                common_write_16_bit(pan_id, lookup_data);
                memcpy(&lookup_data[2], address_ptr, 2);
            } else {
                return NULL; //Not supported this yet
            }
            break;
        case MAC_KEY_ID_MODE_IDX:
            //SET Default keysource
            memcpy(lookup_data, rf_mac_setup->mac_default_key_source, 8);
            lookup_data[8] = key_source->KeyIndex;
            break;

        case MAC_KEY_ID_MODE_SRC4_IDX:
            memcpy(lookup_data, key_source->Keysource, 4);
            lookup_data[4] = key_source->KeyIndex;
            break;

        case MAC_KEY_ID_MODE_SRC8_IDX:
            memcpy(lookup_data, key_source->Keysource, 8);
            lookup_data[8] = key_source->KeyIndex;
            break;
    }
    key_description = rf_mac_setup->key_description_table;
    for (uint8_t i = 0; i < rf_mac_setup->key_description_table_size; i++) {

        if (mac_sec_key_description_lookup_validate(key_description, lookup_data)) {
            return key_description;
        }
        key_description++;
    }

    //tr_debug("LookuPdata search fail %s", trace_array(lookup_data, 9));

    return NULL;
}

mlme_key_descriptor_t *mac_sec_key_description_get_by_attribute(protocol_interface_rf_mac_setup_s *rf_mac_setup, uint8_t atribute_index)
{
    //validate index to list size
    if (atribute_index >= rf_mac_setup->key_description_table_size) {
        return NULL;
    }

    return rf_mac_setup->key_description_table + atribute_index;
}

int8_t mac_sec_mib_init(protocol_interface_rf_mac_setup_s *rf_mac_setup, mac_description_storage_size_t *storage_sizes)
{

    if (!rf_mac_setup || !storage_sizes) {
        return -1;
    }

    mac_sec_mib_deinit(rf_mac_setup);
    if (mac_sec_mib_device_description_table_init(rf_mac_setup, storage_sizes->device_decription_table_size) != 0) {
        return -1;
    }

    if (mac_sec_mib_key_description_table_init(rf_mac_setup, storage_sizes->key_description_table_size, storage_sizes->device_decription_table_size, storage_sizes->key_lookup_size, storage_sizes->key_usage_size)) {
        mac_sec_mib_deinit(rf_mac_setup);
        return -1;
    }

    return 0;
}

int8_t mac_sec_mib_frame_counter_per_key_set(protocol_interface_rf_mac_setup_s *rf_mac_setup, bool enabled)
{
    if (enabled) {
        if (rf_mac_setup->key_device_frame_counter_list_buffer) {
            return 0;
        }
        return mac_sec_mib_frame_counter_key_buffer_allocate(rf_mac_setup, rf_mac_setup->key_description_table_size, rf_mac_setup->device_description_table_size);
    }

    //Clear Key Descriptors

    //Free current list
    mac_sec_mib_frame_counter_key_buffer_free(rf_mac_setup);
    return 0;
}

void mac_sec_mib_deinit(protocol_interface_rf_mac_setup_s *rf_mac_setup)
{
    if (!rf_mac_setup) {
        return;
    }
    mac_sec_mib_frame_counter_key_buffer_free(rf_mac_setup);
    mac_sec_mib_device_description_table_deinit(rf_mac_setup);
    mac_sec_mib_key_description_table_deinit(rf_mac_setup);

}

uint32_t mac_sec_mib_key_outgoing_frame_counter_get(protocol_interface_rf_mac_setup_s *rf_mac_setup, mlme_key_descriptor_t *key_descpription)
{
    uint32_t value;
    platform_enter_critical();
    if (key_descpription && key_descpription->KeyFrameCounterPerKey) {
        value = key_descpription->KeyFrameCounter;
    } else {
        value = rf_mac_setup->security_frame_counter;
    }
    platform_exit_critical();
    return value;
}

void mac_sec_mib_key_outgoing_frame_counter_set(protocol_interface_rf_mac_setup_s *rf_mac_setup, mlme_key_descriptor_t *key_descpription, uint32_t value)
{
    platform_enter_critical();
    if (key_descpription && key_descpription->KeyFrameCounterPerKey) {
        key_descpription->KeyFrameCounter = value;
    } else {
        rf_mac_setup->security_frame_counter = value;
    }
    platform_exit_critical();
}

void mac_sec_mib_key_outgoing_frame_counter_increment(struct protocol_interface_rf_mac_setup *rf_mac_setup, mlme_key_descriptor_t *key_descpription)
{
    platform_enter_critical();
    if (key_descpription && key_descpription->KeyFrameCounterPerKey) {
        key_descpription->KeyFrameCounter++;
    } else {
        rf_mac_setup->security_frame_counter++;
    }
    platform_exit_critical();
}

void mac_sec_mib_key_outgoing_frame_counter_decrement(struct protocol_interface_rf_mac_setup *rf_mac_setup, mlme_key_descriptor_t *key_descpription)
{
    platform_enter_critical();
    if (key_descpription && key_descpription->KeyFrameCounterPerKey) {
        key_descpription->KeyFrameCounter--;
    } else {
        rf_mac_setup->security_frame_counter--;
    }
    platform_exit_critical();
}

void mac_sec_mib_key_device_frame_counter_set(mlme_key_descriptor_t *key_descpription_table, mlme_device_descriptor_t *device_info, uint32_t frame_counter, uint8_t attribute_index)
{
    if (key_descpription_table->KeyFrameCounterPerKey) {
        uint32_t *counter_ptr = key_descpription_table->KeyDeviceFrameCounterList + attribute_index;
        *counter_ptr = frame_counter;
    } else if (device_info) {
        device_info->FrameCounter = frame_counter;
    }
}

uint32_t mac_mib_key_device_frame_counter_get(mlme_key_descriptor_t *key_descpription_table, mlme_device_descriptor_t *device_info, uint8_t attribute_index)
{
    if (key_descpription_table->KeyFrameCounterPerKey) {
        uint32_t *counter_ptr = key_descpription_table->KeyDeviceFrameCounterList + attribute_index;
        return *counter_ptr;
    }
    return device_info->FrameCounter;
}

//allocate new entry and update entries size
mlme_key_device_descriptor_t *mac_sec_mib_key_device_description_list_update(mlme_key_descriptor_t *key_descpription_table)
{
    if (!key_descpription_table || key_descpription_table->KeyDeviceListEntries == key_descpription_table->KeyDeviceListSize) {
        return NULL;
    }
    mlme_key_device_descriptor_t *new_entry = key_descpription_table->KeyDeviceList;
    new_entry += key_descpription_table->KeyDeviceListEntries++;
    new_entry->Blacklisted = false;
    new_entry->UniqueDevice = false;
    return new_entry;
}

//Discover device entry from the list
mlme_key_device_descriptor_t *mac_sec_mib_key_device_description_discover_from_list(mlme_key_descriptor_t *key_description_table, uint8_t device_descriptor_handle)
{
    if (key_description_table) {
        mlme_key_device_descriptor_t *entry = key_description_table->KeyDeviceList;
        for (uint8_t i = 0; i < key_description_table->KeyDeviceListEntries; i++) {
            if (entry->DeviceDescriptorHandle == device_descriptor_handle) {
                return entry;
            }
            entry++;
        }
    }

    return NULL;
}

//Black list device from key descriptior list

void mac_sec_mib_device_description_blacklist(protocol_interface_rf_mac_setup_s *rf_mac_setup, uint8_t device_handle)
{
    if (!rf_mac_setup) {
        return;
    }
    mlme_key_device_descriptor_t *descriptor;
    for (uint8_t i = 0; i < rf_mac_setup->key_description_table_size; i++) {
        descriptor = mac_sec_mib_key_device_description_discover_from_list(&rf_mac_setup->key_description_table[i], device_handle);
        if (descriptor) {
            descriptor->Blacklisted = true;
        }

    }
}

redpajama_set_name: RedPajamaGithub


ArtCenter offers undergraduate and graduate degrees in creative disciplines taught by a faculty of practicing artists and designers. The colors in the paintings have nearly always portrayed the true emotions of the subject, the event, or the mood of the artists. Dominated by a massive sliced and tagged Greek pillar, the immersive installation features ten new paintings, nine sculptures, and an outdoor monument to the local graffiti scene.
The famous 'Indus Valley' or 'Harappa,' 'Greek,' and 'Egyptian' civilizations, especially had prolific artistry, including sculpture, architecture, paintings, engravings, and metal art. I became acquainted with digital art through the Society of Digital Artists , and the first thought that came to mind was, I could never draw like that." But then I gradually drew things like leaves.
How this work – when you enter coins or swipe card in the panel, the panel shows you some of the art work for a few minutes and then gets closed and if you want to see it again or explore more, further you need to swipe your card or add coins into it. This is how artists are using technology.
Jean Paul Richter In Hoyt's New Cyclopedia Of Practical Quotations (1922), p. 43-45. To better understand the relationship between contemporary artists and new methods and tools for creating art, I've interviewed Max Kostenko and Pino Lamanna. Jan Willem Wennekes: Now, one can wonder whether digital art is a distinct art form.
It is also the finest of swan songs for its curator, Kathy Halbreich, MoMA's former associate director, who did so much to revive the museum's engagement with the art of today.
Art Start nurtures the voices, hearts and minds of New York City's underserved youth through consistent creative workshops inside homeless shelters, alternative to incarceration programs, and partnering youth agencies. It affects me personally because art culture is something so important to me; art affects me and it means so much to me whether it be music, literature, fashion, design, fine art — it's all so important, I think it's really what, at least for me, it's what life is about, it's what's important, it's what's moving, it's what inspires you, it's what life is about.
Annie Besant 's book where she put forward the idea that theosophical mystical energies could be portrayed as colours or abstract shapes was practically the invention of abstract art A lot of artists rushed out and read it and suddenly thought, 'oh God you could, you could portray love as a colour, or depression as a colour" All of a sudden abstract art happens, a flowering out of occultism.
Banksy is a pseudo-name for a well-known British graffiti artist. Johann Wolfgang von Goethe , Wilhelm Meister's Travels, Chapter XIV (Chapter III, 128 of Carlyle's Ed.). In Hoyt's New Cyclopedia Of Practical Quotations (1922), p. 43-45. While the definition of art has changed over the years, the field of art history has developed to allow us to categorize changes in art over time and to better understand how art shapes and is shaped by the creative impulses of artists.
Some of the professional digital artists are earning a lot of bucks by selling their art work. Winston Churchill , To Royal Academy of Arts, Time (11 May 1953). The artists wanted to recreate the accidental and often concealed discovery of graffiti or street art in real life.
For several years artist Kevin Peterson ( previously ) has created paintings that occupy the same fictionalized world. The world's only museum dedicated to the collection, preservation, exhibition, and celebration of bad art in all its forms. Two excellent shows timed to the Soviet Union's centenary have explored the dreams and nightmares of Jewish artists of the left, and what became of their utopianism after 1918.
Creativity adopted the sects of 'Art Movement' to depict the realities of a contemporary society, vis-Ã -vis, its stable fabric, regularly changing aspects, and even revolutions.
Art has always been a reflection of the emotions, personal struggle, and the path breaking events of a contemporary society. I remember some artists who said this world isn't worth anything, that it is a pigsty, that we are going nowhere, that God is dead, and all those things. The 20th century was a turning point in our conception of art, which is mainly why contemporary artists frequently reach for new concepts, break with tradition and reject classic notions of beauty.
Banksy is a pseudo-name for a well-known British graffiti artist. The theater's owners are steeped in the arts as well, from actors to set designers to welders—it's no wonder they fill Bootleg's calendar with such varied and quality shows. Los Angeles artist Amy Bessone presents two large-scale triptych paintings. The museum's website is a showcase for a century's worth of incredible recovered Russian photography, dedicated to the representation of modern art related to new multimedia technologies.
It is not the mission of art to wallow in filth for filth's sake, to paint the human being only in a state of putrefaction, to draw cretins as symbols of motherhood, or to present deformed idiots as representatives of manly strength. When I got started creating a presence online, I came up with a plan by looking at the networks that successful artists who I admired were involved in, and I tried to do something similar.
Most of my work is highly influenced by graffiti and street art, old-school cartoons and the music I listen to. My aim is to create stylish, unique and useful designs with an urban twist. Most digital art of the early-21st century is designed to be viewed on low-resolution devices.
In this Chinese artist's video installation Asia One," a wrenching tragedy of love and economics at the Guggenheim last summer, we meet the two last humans in an automated factory — ostensibly from the future," but filmed at a real Shanghai factory where workers are already unnecessary.
The paintings were therefore, an evidence of their culture, which helped historians derive information about the life, culture, and the civilization of this era.
Art Start nurtures the voices, hearts and minds of New York City's underserved youth through consistent creative workshops inside homeless shelters, alternative to incarceration programs, and partnering youth agencies. Finally, I interviewed Bob Flynn, Alex Dukal, Jayme McGowan, Chris Piascik and Irma Gruenholz, asking their opinion of the challenges that artists face when promoting themselves and their work in the new Web, trying to capture their experience with social media and online art communities.
It was Mobile Worlds ," Roger M. Buergel's delirious rethinking of applied arts, which mined the Museum für Kunst und Gewerbe for Afro-Brazilian fabrics, Chinese porcelain with Arabic inscriptions, and other transcultural objects that evade the logic of imperial classification.
Art Start nurtures the voices, hearts and minds of New York City's underserved youth through consistent creative workshops inside homeless shelters, alternative to incarceration programs, and partnering youth agencies. In 2004 Miller was a New York Foundation for the arts painting fellow. John Mason Good , The Book of Nature, Series 1, Lecture LX In Hoyt's New Cyclopedia Of Practical Quotations (1922), p. 43-45. Artists see things in a totally different way, they challenge the boundaries of rules, society and imagination yet also keep us in touch with the past.
After hearing this story, researching the painting led Bowyer to Jon Corbino's daughter, Lee Corbino of Lee Corbino Galleries, who informed him the painting had been stolen from the Fine Arts Society's collection in 1991. The artist records history for future generations, art reaches out & touches people around the world, it can lift people when they are down or create controversy, art is a very important part of society.
Steve Miller is a multi-media artist, who makes paintings, screenprints, artist books, and sculptures. Technology not only brings changes in education, medical field, industry and business but also brings a huge change in the art work and the artists as well.
Seeing advantage in the renewed liveliness of figure painting, the couple chose a well-known painter, Kehinde Wiley (for Mr. Obama's portrait), and a lesser-known artist, Amy Sherald (for Mrs.
As we all know no one is born a talented artist. For several years artist Kevin Peterson ( previously ) has created paintings that occupy the same fictionalized world. The world's only museum dedicated to the collection, preservation, exhibition, and celebration of bad art in all its forms. Two excellent shows timed to the Soviet Union's centenary have explored the dreams and nightmares of Jewish artists of the left, and what became of their utopianism after 1918.


Kunkle, G.A., 2018, Evaluation of the Radar Stage Sensor Manufactured by Forest Technology Systems, Incorporated—Results of Laboratory and Field Testing: U.S. Geological Survey data release, https://doi.org/10.5066/F71C1VSR.
Two identical Radar Stage Sensors from Forest Technology Systems, were evaluated to determine if they are suitable for U.S. Geological Survey (USGS) hydrologic data collection. The sensors were evaluated in laboratory conditions to evaluate the distance accuracy of the sensor over the manufacturer's specified operating temperatures and distance to water ranges. Laboratory results were compared to the manufacturer's accuracy specification of ±0.007 foot (ft) and the USGS Office of Surface Water (OSW) policy requirement that water level sensors have a measurement uncertainty of no more than 0.01 ft or 0.20 percent of the indicated reading. Both of the sensors tested were within the OSW policy requirement in both laboratory tests and within the manufacturer's specification in the distance to water test over tested distances from 3 to 15 ft. In the temperature chamber test, both sensors were within the manufacturer's specification for more than 90 percent of the data points collected over a temperature range of –40 to +60 °C at a fixed distance of 8 ft. One sensor was subjected to an SDI-12 communication test, which it passed. A field test was conducted on one sensor at a USGS field site near Landon, Mississippi, from February 5 to March 29, 2016. Water level measurements made by the radar during the field test were in agreement with those made by the Sutron Accubar Constant Flow Bubble Gauge.
All initial testing was performed with RSS firmware version 1.05. A second temperature chamber test was performed on a single RSS in 2016 to verify performance with a newly released firmware version 1.09. Test results confirmed the results of the first temperature test.
Data were obtained as part of an instrument evaluation of the FTS Radar Stage Sensor. This data set was used to evaluate whether the sensor met USGS Office of Surface Water accuracy requirements over its full operating temperature range. Instrument and equipment evaluations are done primarily to determine if particular devices would be suitable for use by USGS personnel for hydrologic data collection. Results presented herein were obtained with the instrument model and firmware used at the time of testing, and may or may not represent results obtained from software updates and instrument model improvements. The instrument evaluation results presented are not indicative of an endorsement by the USGS of the tested instrument.


We have worked with WWE for the last few years, and each year are asked to return to provide programming and pre-visualization services for Wrestlemania. This is one of the largest live TV and sporting events in the world, hosting 70,000+ fans in the stadium and millions more live online and on-demand. Controlling a multitude of HD outputs of Hippotizer V4 Boreals run by MA Lighting grandMA2 consoles, we were tasked with making sure each piece of the show looked its best on the many LED surfaces.


text:
package eta.runtime.message;

import eta.runtime.stg.Capability;

public class MessageShutdown extends Message {

    public static final MessageShutdown INSTANCE = new MessageShutdown();

    public static final ThreadDeath THREAD_DEATH_EXCEPTION = new ThreadDeath();

    private MessageShutdown() {}

    public static MessageShutdown getInstance() {
        return INSTANCE;
    }

    @Override
    public void execute(Capability cap) {
        throw THREAD_DEATH_EXCEPTION;
    }

    @Override
    public String toString() {
        return "MessageShutdown";
    }
}


text:
/**
 * @brief Driver for UART on ARM CMSDK APB UART.
 *
 * UART has two wires for RX and TX, and does not provide CTS or RTS.
 */

#include <kernel.h>
#include <arch/cpu.h>
#include <clock_control/arm_clock_control.h>
#include <misc/__assert.h>
#include <init.h>
#include <uart.h>
#include <linker/sections.h>

/* UART registers struct */
struct uart_cmsdk_apb {
	/* offset: 0x000 (r/w) data register    */
	volatile u32_t  data;
	/* offset: 0x004 (r/w) status register  */
	volatile u32_t  state;
	/* offset: 0x008 (r/w) control register */
	volatile u32_t  ctrl;
	union {
		/* offset: 0x00c (r/ ) interrupt status register */
		volatile u32_t  intstatus;
		/* offset: 0x00c ( /w) interrupt clear register  */
		volatile u32_t  intclear;
	};
	/* offset: 0x010 (r/w) baudrate divider register */
	volatile u32_t  bauddiv;
};

/* UART Bits */
/* CTRL Register */
#define UART_TX_EN	(1 << 0)
#define UART_RX_EN	(1 << 1)
#define UART_TX_IN_EN	(1 << 2)
#define UART_RX_IN_EN	(1 << 3)
#define UART_TX_OV_EN	(1 << 4)
#define UART_RX_OV_EN	(1 << 5)
#define UART_HS_TM_TX	(1 << 6)

/* STATE Register */
#define UART_TX_BF	(1 << 0)
#define UART_RX_BF	(1 << 1)
#define UART_TX_B_OV	(1 << 2)
#define UART_RX_B_OV	(1 << 3)

/* INTSTATUS Register */
#define UART_TX_IN	(1 << 0)
#define UART_RX_IN	(1 << 1)
#define UART_TX_OV_IN	(1 << 2)
#define UART_RX_OV_IN	(1 << 3)

/* Device data structure */
struct uart_cmsdk_apb_dev_data {
	u32_t baud_rate;	/* Baud rate */
#ifdef CONFIG_UART_INTERRUPT_DRIVEN
	uart_irq_callback_user_data_t irq_cb;
	void *irq_cb_data;
#endif
	/* UART Clock control in Active State */
	const struct arm_clock_control_t uart_cc_as;
	/* UART Clock control in Sleep State */
	const struct arm_clock_control_t uart_cc_ss;
	/* UART Clock control in Deep Sleep State */
	const struct arm_clock_control_t uart_cc_dss;
};

/* convenience defines */
#define DEV_CFG(dev) \
	((const struct uart_device_config * const)(dev)->config->config_info)
#define DEV_DATA(dev) \
	((struct uart_cmsdk_apb_dev_data * const)(dev)->driver_data)
#define UART_STRUCT(dev) \
	((volatile struct uart_cmsdk_apb *)(DEV_CFG(dev))->base)

static const struct uart_driver_api uart_cmsdk_apb_driver_api;
static void uart_cmsdk_apb_isr(void *arg);

/**
 * @brief Set the baud rate
 *
 * This routine set the given baud rate for the UART.
 *
 * @param dev UART device struct
 *
 * @return N/A
 */
static void baudrate_set(struct device *dev)
{
	volatile struct uart_cmsdk_apb *uart = UART_STRUCT(dev);
	const struct uart_device_config * const dev_cfg = DEV_CFG(dev);
	struct uart_cmsdk_apb_dev_data *const dev_data = DEV_DATA(dev);
	/*
	 * If baudrate and/or sys_clk_freq are 0 the configuration remains
	 * unchanged. It can be useful in case that Zephyr it is run via
	 * a bootloader that brings up the serial and sets the baudrate.
	 */
	if ((dev_data->baud_rate != 0U) && (dev_cfg->sys_clk_freq != 0U)) {
		/* calculate baud rate divisor */
		uart->bauddiv = (dev_cfg->sys_clk_freq / dev_data->baud_rate);
	}
}

/**
 * @brief Initialize UART channel
 *
 * This routine is called to reset the chip in a quiescent state.
 * It is assumed that this function is called only once per UART.
 *
 * @param dev UART device struct
 *
 * @return 0
 */
static int uart_cmsdk_apb_init(struct device *dev)
{
	volatile struct uart_cmsdk_apb *uart = UART_STRUCT(dev);
#ifdef CONFIG_UART_INTERRUPT_DRIVEN
	const struct uart_device_config * const dev_cfg = DEV_CFG(dev);
#endif

#ifdef CONFIG_CLOCK_CONTROL
	/* Enable clock for subsystem */
	struct device *clk =
		device_get_binding(CONFIG_ARM_CLOCK_CONTROL_DEV_NAME);

	struct uart_cmsdk_apb_dev_data * const data = DEV_DATA(dev);

#ifdef CONFIG_SOC_SERIES_BEETLE
	clock_control_on(clk, (clock_control_subsys_t *) &data->uart_cc_as);
	clock_control_on(clk, (clock_control_subsys_t *) &data->uart_cc_ss);
	clock_control_on(clk, (clock_control_subsys_t *) &data->uart_cc_dss);
#endif /* CONFIG_SOC_SERIES_BEETLE */
#endif /* CONFIG_CLOCK_CONTROL */

	/* Set baud rate */
	baudrate_set(dev);

	/* Enable receiver and transmitter */
	uart->ctrl = UART_RX_EN | UART_TX_EN;

#ifdef CONFIG_UART_INTERRUPT_DRIVEN
	dev_cfg->irq_config_func(dev);
#endif

	return 0;
}

/**
 * @brief Poll the device for input.
 *
 * @param dev UART device struct
 * @param c Pointer to character
 *
 * @return 0 if a character arrived, -1 if the input buffer if empty.
 */

static int uart_cmsdk_apb_poll_in(struct device *dev, unsigned char *c)
{
	volatile struct uart_cmsdk_apb *uart = UART_STRUCT(dev);

	/* If the receiver is not ready returns -1 */
	if (!(uart->state & UART_RX_BF)) {
		return -1;
	}

	/* got a character */
	*c = (unsigned char)uart->data;

	return 0;
}

/**
 * @brief Output a character in polled mode.
 *
 * Checks if the transmitter is empty. If empty, a character is written to
 * the data register.
 *
 * @param dev UART device struct
 * @param c Character to send
 */
static void uart_cmsdk_apb_poll_out(struct device *dev,
					     unsigned char c)
{
	volatile struct uart_cmsdk_apb *uart = UART_STRUCT(dev);

	/* Wait for transmitter to be ready */
	while (uart->state & UART_TX_BF) {
		; /* Wait */
	}

	/* Send a character */
	uart->data = (u32_t)c;
}

#ifdef CONFIG_UART_INTERRUPT_DRIVEN
/**
 * @brief Fill FIFO with data
 *
 * @param dev UART device struct
 * @param tx_data Data to transmit
 * @param len Number of bytes to send
 *
 * @return the number of characters that have been read
 */
static int uart_cmsdk_apb_fifo_fill(struct device *dev,
				    const u8_t *tx_data, int len)
{
	volatile struct uart_cmsdk_apb *uart = UART_STRUCT(dev);

	/* No hardware FIFO present */
	if (len && !(uart->state & UART_TX_BF)) {
		uart->data = *tx_data;
		return 1;
	}

	return 0;
}

/**
 * @brief Read data from FIFO
 *
 * @param dev UART device struct
 * @param rx_data Pointer to data container
 * @param size Container size in bytes
 *
 * @return the number of characters that have been read
 */
static int uart_cmsdk_apb_fifo_read(struct device *dev,
				    u8_t *rx_data, const int size)
{
	volatile struct uart_cmsdk_apb *uart = UART_STRUCT(dev);

	/* No hardware FIFO present */
	if (size && uart->state & UART_RX_BF) {
		*rx_data = (unsigned char)uart->data;
		return 1;
	}

	return 0;
}

/**
 * @brief Enable TX interrupt
 *
 * @param dev UART device struct
 *
 * @return N/A
 */
static void uart_cmsdk_apb_irq_tx_enable(struct device *dev)
{
	unsigned int key;

	UART_STRUCT(dev)->ctrl |= UART_TX_IN_EN;
	/* The expectation is that TX is a level interrupt, active for as
	 * long as TX buffer is empty. But in CMSDK UART, it appears to be
	 * edge interrupt, firing on a state change of TX buffer. So, we
	 * need to "prime" it here by calling ISR directly, to get interrupt
	 * processing going.
	 */
	key = irq_lock();
	uart_cmsdk_apb_isr(dev);
	irq_unlock(key);
}

/**
 * @brief Disable TX interrupt
 *
 * @param dev UART device struct
 *
 * @return N/A
 */
static void uart_cmsdk_apb_irq_tx_disable(struct device *dev)
{
	UART_STRUCT(dev)->ctrl &= ~UART_TX_IN_EN;
}

/**
 * @brief Verify if Tx interrupt has been raised
 *
 * @param dev UART device struct
 *
 * @return 1 if an interrupt is ready, 0 otherwise
 */
static int uart_cmsdk_apb_irq_tx_ready(struct device *dev)
{
	return !(UART_STRUCT(dev)->state & UART_TX_BF);
}

/**
 * @brief Enable RX interrupt
 *
 * @param dev UART device struct
 *
 * @return N/A
 */
static void uart_cmsdk_apb_irq_rx_enable(struct device *dev)
{
	UART_STRUCT(dev)->ctrl |= UART_RX_IN_EN;
}

/**
 * @brief Disable RX interrupt
 *
 * @param dev UART device struct
 *
 * @return N/A
 */
static void uart_cmsdk_apb_irq_rx_disable(struct device *dev)
{
	UART_STRUCT(dev)->ctrl &= ~UART_RX_IN_EN;
}

/**
 * @brief Verify if Tx complete interrupt has been raised
 *
 * @param dev UART device struct
 *
 * @return 1 if an interrupt is ready, 0 otherwise
 */
static int uart_cmsdk_apb_irq_tx_complete(struct device *dev)
{
	return uart_cmsdk_apb_irq_tx_ready(dev);
}

/**
 * @brief Verify if Rx interrupt has been raised
 *
 * @param dev UART device struct
 *
 * @return 1 if an interrupt is ready, 0 otherwise
 */
static int uart_cmsdk_apb_irq_rx_ready(struct device *dev)
{
	return UART_STRUCT(dev)->state & UART_RX_BF;
}

/**
 * @brief Enable error interrupt
 *
 * @param dev UART device struct
 *
 * @return N/A
 */
static void uart_cmsdk_apb_irq_err_enable(struct device *dev)
{
	ARG_UNUSED(dev);
}

/**
 * @brief Disable error interrupt
 *
 * @param dev UART device struct
 *
 * @return N/A
 */
static void uart_cmsdk_apb_irq_err_disable(struct device *dev)
{
	ARG_UNUSED(dev);
}

/**
 * @brief Verify if Tx or Rx interrupt is pending
 *
 * @param dev UART device struct
 *
 * @return 1 if Tx or Rx interrupt is pending, 0 otherwise
 */
static int uart_cmsdk_apb_irq_is_pending(struct device *dev)
{
	/* Return true if rx buffer full or tx buffer empty */
	return (UART_STRUCT(dev)->state & (UART_RX_BF | UART_TX_BF))
					!= UART_TX_BF;
}

/**
 * @brief Update the interrupt status
 *
 * @param dev UART device struct
 *
 * @return always 1
 */
static int uart_cmsdk_apb_irq_update(struct device *dev)
{
	return 1;
}

/**
 * @brief Set the callback function pointer for an Interrupt.
 *
 * @param dev UART device structure
 * @param cb Callback function pointer.
 *
 * @return N/A
 */
static void uart_cmsdk_apb_irq_callback_set(struct device *dev,
					    uart_irq_callback_user_data_t cb,
					    void *cb_data)
{
	DEV_DATA(dev)->irq_cb = cb;
	DEV_DATA(dev)->irq_cb_data = cb_data;
}

/**
 * @brief Interrupt service routine.
 *
 * Calls the callback function, if exists.
 *
 * @param arg argument to interrupt service routine.
 *
 * @return N/A
 */
void uart_cmsdk_apb_isr(void *arg)
{
	struct device *dev = arg;
	volatile struct uart_cmsdk_apb *uart = UART_STRUCT(dev);
	struct uart_cmsdk_apb_dev_data *data = DEV_DATA(dev);

	/* Clear pending interrupts */
	uart->intclear = UART_RX_IN | UART_TX_IN;

	/* Verify if the callback has been registered */
	if (data->irq_cb) {
		data->irq_cb(data->irq_cb_data);
	}
}

#endif /* CONFIG_UART_INTERRUPT_DRIVEN */

static const struct uart_driver_api uart_cmsdk_apb_driver_api = {
	.poll_in = uart_cmsdk_apb_poll_in,
	.poll_out = uart_cmsdk_apb_poll_out,
#ifdef CONFIG_UART_INTERRUPT_DRIVEN
	.fifo_fill = uart_cmsdk_apb_fifo_fill,
	.fifo_read = uart_cmsdk_apb_fifo_read,
	.irq_tx_enable = uart_cmsdk_apb_irq_tx_enable,
	.irq_tx_disable = uart_cmsdk_apb_irq_tx_disable,
	.irq_tx_ready = uart_cmsdk_apb_irq_tx_ready,
	.irq_rx_enable = uart_cmsdk_apb_irq_rx_enable,
	.irq_rx_disable = uart_cmsdk_apb_irq_rx_disable,
	.irq_tx_complete = uart_cmsdk_apb_irq_tx_complete,
	.irq_rx_ready = uart_cmsdk_apb_irq_rx_ready,
	.irq_err_enable = uart_cmsdk_apb_irq_err_enable,
	.irq_err_disable = uart_cmsdk_apb_irq_err_disable,
	.irq_is_pending = uart_cmsdk_apb_irq_is_pending,
	.irq_update = uart_cmsdk_apb_irq_update,
	.irq_callback_set = uart_cmsdk_apb_irq_callback_set,
#endif /* CONFIG_UART_INTERRUPT_DRIVEN */
};

#ifdef DT_ARM_CMSDK_UART_0

#ifdef CONFIG_UART_INTERRUPT_DRIVEN
static void uart_cmsdk_apb_irq_config_func_0(struct device *dev);
#endif

static const struct uart_device_config uart_cmsdk_apb_dev_cfg_0 = {
	.base = (u8_t *)DT_INST_0_ARM_CMSDK_UART_BASE_ADDRESS,
	.sys_clk_freq = CONFIG_SYS_CLOCK_HW_CYCLES_PER_SEC,
#ifdef CONFIG_UART_INTERRUPT_DRIVEN
	.irq_config_func = uart_cmsdk_apb_irq_config_func_0,
#endif
};

static struct uart_cmsdk_apb_dev_data uart_cmsdk_apb_dev_data_0 = {
	.baud_rate = DT_INST_0_ARM_CMSDK_UART_CURRENT_SPEED,
	.uart_cc_as = {.bus = CMSDK_APB, .state = SOC_ACTIVE,
		       .device = DT_INST_0_ARM_CMSDK_UART_BASE_ADDRESS,},
	.uart_cc_ss = {.bus = CMSDK_APB, .state = SOC_SLEEP,
		       .device = DT_INST_0_ARM_CMSDK_UART_BASE_ADDRESS,},
	.uart_cc_dss = {.bus = CMSDK_APB, .state = SOC_DEEPSLEEP,
			.device = DT_INST_0_ARM_CMSDK_UART_BASE_ADDRESS,},
};

DEVICE_AND_API_INIT(uart_cmsdk_apb_0,
		    DT_INST_0_ARM_CMSDK_UART_LABEL,
		    &uart_cmsdk_apb_init,
		    &uart_cmsdk_apb_dev_data_0,
		    &uart_cmsdk_apb_dev_cfg_0, PRE_KERNEL_1,
		    CONFIG_KERNEL_INIT_PRIORITY_DEVICE,
		    &uart_cmsdk_apb_driver_api);

#ifdef CONFIG_UART_INTERRUPT_DRIVEN
#ifdef DT_INST_0_ARM_CMSDK_UART_IRQ_0
static void uart_cmsdk_apb_irq_config_func_0(struct device *dev)
{
	IRQ_CONNECT(DT_INST_0_ARM_CMSDK_UART_IRQ_0,
		    DT_INST_0_ARM_CMSDK_UART_IRQ_0_PRIORITY,
		    uart_cmsdk_apb_isr,
		    DEVICE_GET(uart_cmsdk_apb_0),
		    0);
	irq_enable(DT_INST_0_ARM_CMSDK_UART_IRQ_0);
}
#else
static void uart_cmsdk_apb_irq_config_func_0(struct device *dev)
{
	IRQ_CONNECT(DT_INST_0_ARM_CMSDK_UART_IRQ_TX,
		    DT_INST_0_ARM_CMSDK_UART_IRQ_TX_PRIORITY,
		    uart_cmsdk_apb_isr,
		    DEVICE_GET(uart_cmsdk_apb_0),
		    0);
	irq_enable(DT_INST_0_ARM_CMSDK_UART_IRQ_TX);

	IRQ_CONNECT(DT_INST_0_ARM_CMSDK_UART_IRQ_RX,
		    DT_INST_0_ARM_CMSDK_UART_IRQ_RX_PRIORITY,
		    uart_cmsdk_apb_isr,
		    DEVICE_GET(uart_cmsdk_apb_0),
		    0);
	irq_enable(DT_INST_0_ARM_CMSDK_UART_IRQ_RX);
}
#endif
#endif

#endif /* DT_ARM_CMSDK_UART_0 */

#ifdef DT_ARM_CMSDK_UART_1

#ifdef CONFIG_UART_INTERRUPT_DRIVEN
static void uart_cmsdk_apb_irq_config_func_1(struct device *dev);
#endif

static const struct uart_device_config uart_cmsdk_apb_dev_cfg_1 = {
	.base = (u8_t *)DT_INST_1_ARM_CMSDK_UART_BASE_ADDRESS,
	.sys_clk_freq = CONFIG_SYS_CLOCK_HW_CYCLES_PER_SEC,
#ifdef CONFIG_UART_INTERRUPT_DRIVEN
	.irq_config_func = uart_cmsdk_apb_irq_config_func_1,
#endif
};

static struct uart_cmsdk_apb_dev_data uart_cmsdk_apb_dev_data_1 = {
	.baud_rate = DT_INST_1_ARM_CMSDK_UART_CURRENT_SPEED,
	.uart_cc_as = {.bus = CMSDK_APB, .state = SOC_ACTIVE,
		       .device = DT_INST_1_ARM_CMSDK_UART_BASE_ADDRESS,},
	.uart_cc_ss = {.bus = CMSDK_APB, .state = SOC_SLEEP,
		       .device = DT_INST_1_ARM_CMSDK_UART_BASE_ADDRESS,},
	.uart_cc_dss = {.bus = CMSDK_APB, .state = SOC_DEEPSLEEP,
			.device = DT_INST_1_ARM_CMSDK_UART_BASE_ADDRESS,},
};

DEVICE_AND_API_INIT(uart_cmsdk_apb_1,
		    DT_INST_1_ARM_CMSDK_UART_LABEL,
		    &uart_cmsdk_apb_init,
		    &uart_cmsdk_apb_dev_data_1,
		    &uart_cmsdk_apb_dev_cfg_1, PRE_KERNEL_1,
		    CONFIG_KERNEL_INIT_PRIORITY_DEVICE,
		    &uart_cmsdk_apb_driver_api);

#ifdef CONFIG_UART_INTERRUPT_DRIVEN
#ifdef DT_INST_1_ARM_CMSDK_UART_IRQ_0
static void uart_cmsdk_apb_irq_config_func_1(struct device *dev)
{
	IRQ_CONNECT(DT_INST_1_ARM_CMSDK_UART_IRQ_0,
		    DT_INST_1_ARM_CMSDK_UART_IRQ_0_PRIORITY,
		    uart_cmsdk_apb_isr,
		    DEVICE_GET(uart_cmsdk_apb_1),
		    0);
	irq_enable(DT_INST_1_ARM_CMSDK_UART_IRQ_0);
}
#else
static void uart_cmsdk_apb_irq_config_func_1(struct device *dev)
{
	IRQ_CONNECT(DT_INST_1_ARM_CMSDK_UART_IRQ_TX,
		    DT_INST_1_ARM_CMSDK_UART_IRQ_TX_PRIORITY,
		    uart_cmsdk_apb_isr,
		    DEVICE_GET(uart_cmsdk_apb_1),
		    0);
	irq_enable(DT_INST_1_ARM_CMSDK_UART_IRQ_TX);

	IRQ_CONNECT(DT_INST_1_ARM_CMSDK_UART_IRQ_RX,
		    DT_INST_1_ARM_CMSDK_UART_IRQ_RX_PRIORITY,
		    uart_cmsdk_apb_isr,
		    DEVICE_GET(uart_cmsdk_apb_1),
		    0);
	irq_enable(DT_INST_1_ARM_CMSDK_UART_IRQ_RX);
}
#endif
#endif

#endif /* DT_ARM_CMSDK_UART_1 */

#ifdef DT_ARM_CMSDK_UART_2

#ifdef CONFIG_UART_INTERRUPT_DRIVEN
static void uart_cmsdk_apb_irq_config_func_2(struct device *dev);
#endif

static const struct uart_device_config uart_cmsdk_apb_dev_cfg_2 = {
	.base = (u8_t *)DT_INST_2_ARM_CMSDK_UART_BASE_ADDRESS,
	.sys_clk_freq = CONFIG_SYS_CLOCK_HW_CYCLES_PER_SEC,
#ifdef CONFIG_UART_INTERRUPT_DRIVEN
	.irq_config_func = uart_cmsdk_apb_irq_config_func_2,
#endif
};

static struct uart_cmsdk_apb_dev_data uart_cmsdk_apb_dev_data_2 = {
	.baud_rate = DT_INST_2_ARM_CMSDK_UART_CURRENT_SPEED,
	.uart_cc_as = {.bus = CMSDK_APB, .state = SOC_ACTIVE,
		       .device = DT_INST_2_ARM_CMSDK_UART_BASE_ADDRESS,},
	.uart_cc_ss = {.bus = CMSDK_APB, .state = SOC_SLEEP,
		       .device = DT_INST_2_ARM_CMSDK_UART_BASE_ADDRESS,},
	.uart_cc_dss = {.bus = CMSDK_APB, .state = SOC_DEEPSLEEP,
			.device = DT_INST_2_ARM_CMSDK_UART_BASE_ADDRESS,},
};

DEVICE_AND_API_INIT(uart_cmsdk_apb_2,
		    DT_INST_2_ARM_CMSDK_UART_LABEL,
		    &uart_cmsdk_apb_init,
		    &uart_cmsdk_apb_dev_data_2,
		    &uart_cmsdk_apb_dev_cfg_2, PRE_KERNEL_1,
		    CONFIG_KERNEL_INIT_PRIORITY_DEVICE,
		    &uart_cmsdk_apb_driver_api);

#ifdef CONFIG_UART_INTERRUPT_DRIVEN
#ifdef CMSDK_APB_UART_2_IRQ
static void uart_cmsdk_apb_irq_config_func_2(struct device *dev)
{
	IRQ_CONNECT(CMSDK_APB_UART_2_IRQ,
		    DT_ARM_CMSDK_UART_2_IRQ_PRIORITY,
		    uart_cmsdk_apb_isr,
		    DEVICE_GET(uart_cmsdk_apb_2),
		    0);
	irq_enable(CMSDK_APB_UART_2_IRQ);
}
#else
static void uart_cmsdk_apb_irq_config_func_2(struct device *dev)
{
	IRQ_CONNECT(DT_INST_2_ARM_CMSDK_UART_IRQ_TX,
		    DT_INST_2_ARM_CMSDK_UART_IRQ_TX_PRIORITY,
		    uart_cmsdk_apb_isr,
		    DEVICE_GET(uart_cmsdk_apb_2),
		    0);
	irq_enable(DT_INST_2_ARM_CMSDK_UART_IRQ_TX);

	IRQ_CONNECT(DT_INST_2_ARM_CMSDK_UART_IRQ_RX,
		    DT_INST_2_ARM_CMSDK_UART_IRQ_RX_PRIORITY,
		    uart_cmsdk_apb_isr,
		    DEVICE_GET(uart_cmsdk_apb_2),
		    0);
	irq_enable(DT_INST_2_ARM_CMSDK_UART_IRQ_RX);
}
#endif
#endif

#endif /* DT_ARM_CMSDK_UART_2 */

#ifdef DT_ARM_CMSDK_UART_3

#ifdef CONFIG_UART_INTERRUPT_DRIVEN
static void uart_cmsdk_apb_irq_config_func_3(struct device *dev);
#endif

static const struct uart_device_config uart_cmsdk_apb_dev_cfg_3 = {
	.base = (u8_t *)DT_INST_3_ARM_CMSDK_UART_BASE_ADDRESS,
	.sys_clk_freq = CONFIG_SYS_CLOCK_HW_CYCLES_PER_SEC,
#ifdef CONFIG_UART_INTERRUPT_DRIVEN
	.irq_config_func = uart_cmsdk_apb_irq_config_func_3,
#endif
};

static struct uart_cmsdk_apb_dev_data uart_cmsdk_apb_dev_data_3 = {
	.baud_rate = DT_INST_3_ARM_CMSDK_UART_CURRENT_SPEED,
	.uart_cc_as = {.bus = CMSDK_APB, .state = SOC_ACTIVE,
		       .device = DT_INST_3_ARM_CMSDK_UART_BASE_ADDRESS,},
	.uart_cc_ss = {.bus = CMSDK_APB, .state = SOC_SLEEP,
		       .device = DT_INST_3_ARM_CMSDK_UART_BASE_ADDRESS,},
	.uart_cc_dss = {.bus = CMSDK_APB, .state = SOC_DEEPSLEEP,
			.device = DT_INST_3_ARM_CMSDK_UART_BASE_ADDRESS,},
};

DEVICE_AND_API_INIT(uart_cmsdk_apb_3,
		    DT_INST_3_ARM_CMSDK_UART_LABEL,
		    &uart_cmsdk_apb_init,
		    &uart_cmsdk_apb_dev_data_3,
		    &uart_cmsdk_apb_dev_cfg_3, PRE_KERNEL_1,
		    CONFIG_KERNEL_INIT_PRIORITY_DEVICE,
		    &uart_cmsdk_apb_driver_api);

#ifdef CONFIG_UART_INTERRUPT_DRIVEN
#ifdef CMSDK_APB_UART_3_IRQ
static void uart_cmsdk_apb_irq_config_func_3(struct device *dev)
{
	IRQ_CONNECT(CMSDK_APB_UART_3_IRQ,
		    DT_ARM_CMSDK_UART_3_IRQ_PRIORITY,
		    uart_cmsdk_apb_isr,
		    DEVICE_GET(uart_cmsdk_apb_3),
		    0);
	irq_enable(CMSDK_APB_UART_3_IRQ);
}
#else
static void uart_cmsdk_apb_irq_config_func_3(struct device *dev)
{
	IRQ_CONNECT(DT_INST_3_ARM_CMSDK_UART_IRQ_TX,
		    DT_INST_3_ARM_CMSDK_UART_IRQ_TX_PRIORITY,
		    uart_cmsdk_apb_isr,
		    DEVICE_GET(uart_cmsdk_apb_3),
		    0);
	irq_enable(DT_INST_3_ARM_CMSDK_UART_IRQ_TX);

	IRQ_CONNECT(DT_INST_3_ARM_CMSDK_UART_IRQ_RX,
		    DT_INST_3_ARM_CMSDK_UART_IRQ_RX_PRIORITY,
		    uart_cmsdk_apb_isr,
		    DEVICE_GET(uart_cmsdk_apb_3),
		    0);
	irq_enable(DT_INST_3_ARM_CMSDK_UART_IRQ_RX);
}
#endif
#endif

#endif /* DT_ARM_CMSDK_UART_3 */

#ifdef DT_ARM_CMSDK_UART_4

#ifdef CONFIG_UART_INTERRUPT_DRIVEN
static void uart_cmsdk_apb_irq_config_func_4(struct device *dev);
#endif

static const struct uart_device_config uart_cmsdk_apb_dev_cfg_4 = {
	.base = (u8_t *)DT_INST_4_ARM_CMSDK_UART_BASE_ADDRESS,
	.sys_clk_freq = CONFIG_SYS_CLOCK_HW_CYCLES_PER_SEC,
#ifdef CONFIG_UART_INTERRUPT_DRIVEN
	.irq_config_func = uart_cmsdk_apb_irq_config_func_4,
#endif
};

static struct uart_cmsdk_apb_dev_data uart_cmsdk_apb_dev_data_4 = {
	.baud_rate = DT_INST_4_ARM_CMSDK_UART_CURRENT_SPEED,
	.uart_cc_as = {.bus = CMSDK_APB, .state = SOC_ACTIVE,
		       .device = DT_INST_4_ARM_CMSDK_UART_BASE_ADDRESS,},
	.uart_cc_ss = {.bus = CMSDK_APB, .state = SOC_SLEEP,
		       .device = DT_INST_4_ARM_CMSDK_UART_BASE_ADDRESS,},
	.uart_cc_dss = {.bus = CMSDK_APB, .state = SOC_DEEPSLEEP,
			.device = DT_INST_4_ARM_CMSDK_UART_BASE_ADDRESS,},
};

DEVICE_AND_API_INIT(uart_cmsdk_apb_4,
		    DT_INST_4_ARM_CMSDK_UART_LABEL,
		    &uart_cmsdk_apb_init,
		    &uart_cmsdk_apb_dev_data_4,
		    &uart_cmsdk_apb_dev_cfg_4, PRE_KERNEL_1,
		    CONFIG_KERNEL_INIT_PRIORITY_DEVICE,
		    &uart_cmsdk_apb_driver_api);

#ifdef CONFIG_UART_INTERRUPT_DRIVEN
#ifdef CMSDK_APB_UART_4_IRQ
static void uart_cmsdk_apb_irq_config_func_4(struct device *dev)
{
	IRQ_CONNECT(CMSDK_APB_UART_4_IRQ,
		    DT_ARM_CMSDK_UART_4_IRQ_PRIORITY,
		    uart_cmsdk_apb_isr,
		    DEVICE_GET(uart_cmsdk_apb_4),
		    0);
	irq_enable(CMSDK_APB_UART_4_IRQ);
}
#else
static void uart_cmsdk_apb_irq_config_func_4(struct device *dev)
{
	IRQ_CONNECT(DT_INST_4_ARM_CMSDK_UART_IRQ_TX,
		    DT_INST_4_ARM_CMSDK_UART_IRQ_TX_PRIORITY,
		    uart_cmsdk_apb_isr,
		    DEVICE_GET(uart_cmsdk_apb_4),
		    0);
	irq_enable(DT_INST_4_ARM_CMSDK_UART_IRQ_TX);

	IRQ_CONNECT(DT_INST_4_ARM_CMSDK_UART_IRQ_RX,
		    DT_INST_4_ARM_CMSDK_UART_IRQ_RX_PRIORITY,
		    uart_cmsdk_apb_isr,
		    DEVICE_GET(uart_cmsdk_apb_4),
		    0);
	irq_enable(DT_INST_4_ARM_CMSDK_UART_IRQ_RX);
}
#endif
#endif

#endif /* DT_ARM_CMSDK_UART_4 */


Make CIFS share available offline in Windows?
I've mapped up an Alfresco share as a network drive in Windows 7. I've tried to make it available offline, but when I select "Always available offline" in the right-click menu nothing happens. The Sync Center shows "Sync pending", but nothing happens.
I've tried the same thing with a Samba share and it works as expected, so it seems to be Alfresco-related. Has anyone else seen this issue?


I recently joined and attended the Kite Trade Association International (aka: Kites, Toys, and Innovations) [KTAI] in Las Vegas. My main desire was to determine once and for all whether I should open a store front or continue similar to how I have been running my business, i.e. selling out of my van at festivals and events, doing kite making workshops, and producing kites to be sold. Several people told me to stick with what I was doing but invest my time more in the same areas. So, I intend to make more kites to sell which will allow me to set up a booth at craft fairs, seek out places and pursue selling kites in the surrounding areas around Chattanooga, and push kite making workshops at schools, retirement centers, and churches.
In addition, I purchased more kites to sell. I am now the proud dealer of Revolution Kites, the remarkable 4-line kite that created a revolution in the kiting world when they came out in the late 1980's. I'll have entry level kites which can move the flier into more expert skills. There is also a "club" they can join online consisting of lessons, tutorials, feedback, and rewards to help a Rev pilot get better. Check out their website at https://revkites.com.
I also will be ordering more kites from Premier Kites, HQ Kites, and In the Breeze Kites. These orders will include windsocks and whirligigs. Keep a lookout for an improved website too!
So long for now. Go fly a Kite!


Buying for your BFF | Things Engraved Inc.
My BFF is hard to buy for. She's the kind of person who, when she wants something, she buys it for herself. Not that that's a bad thing; good for her. It just makes it hard to buy gift for her. I often have to think outside the box to find her something good.
Because my BFF is already a spa girl (who goes regularly for her mani's and pedi's) and she's already got her home decked-out just the way she wants it. Because she has no problem buying herself nice clothes with all the matching accessories; my best bet is often buying her a sentimental gift. Does this apply to you?
If so, here are some sentimental gift ideas to let your BFF know that she's your BFF this holiday season.
This pink (or black) leather bracelet includes a charm which you can engrave with her name (and yours if you want). Click to buy.
Remind her why she's such a special friend. Big charm reads "Wherever you are, it is your friends that make your world." Add her name to second charm. Click to buy.
Engrave your BBF's name onto this heart shaped friend tree ornament. Click to buy.
Yup, more jewelry. This classic friendship bracelet is blinged out with crystals. Click to buy.
Is your BFF a guy? No problem! We've got you covered.
Stainless Steel Gun Metal Money Clip & Cuff Links. Engrave his name/initials. Click to buy.
Flex Folding Knife with Carabineer to engrave as you like. Click to buy.
This Men's Woven Black Leather ID Bracelet is ready for your BFF's name to be engraved. Click to buy.
Ten useful tools are packed into this tiny, lightweight tool. Ready to be engraved for a personalized touch. Click to buy.
What are some of YOUR gift giving ideas for that hard-to-buy-for person? Please share your tips with us on facebook.


text:
Celebrate the birthday of the Sony Walkman
By Marcus Michau 2014-07-01T17:30:55.181Z
Sony launched the first Walkman in 1979, and this is this week the tech breakthrough is celebrating its 35th birthday.
Nowadays there are iPhones, devices that one can use as a phone, a computer and a music player. Before that, there were just iPods that enabled people to put their favourite music all onto one device and create playlists to fit their mood or preference. However, what many younger kids today won't know is that what started this whole process and changed the way we listened to music entirely was the introduction of the Walkman.
It was revolutionary. The idea that someone could listen to the music of their choice without disturbing anyone else really changed the impact music had on society, as it meant people could discover their own unique genre of music and just put on some headphones to listen to a whole tape of it really was something special.
Many features that the iPod now has originated from the Walkman like the small headphones that truly were different at the time but now are extremely popular with millions of people using them daily and thousands of different designs and types.
The Sony Walkman certainly did affect all areas, such as exercise due people were able to create their own music to exercise to which actually caused a boom in exercise. It also was used a lot during travel; in fact, the reason the Walkman made headphones was due the co-chairman of Sony wanting something that meant he could listen to his opera music while travelling on long journeys and that of course has led to the mass use of headphones and iPods being used today on a very regular basis.
So even though in this day and age we see the Walkman as a chunky, old fashioned MP3 player, it actually was the main and maybe only reason that iPods and other handheld MP3 were even thought of so for that reason and many others, it was and still is brilliant.
portable media player
How the GDPR has given rise to subject access requests (SARs) – and what this means for businesses, large and small
Top three business benefits of remote work
The future of CSPs - this year and beyond
Three tools financial organisations can use to fight fraud in 2020