From f046a0edd6d8848a652a711f51996cbeb4ed2a70 Mon Sep 17 00:00:00 2001 From: alonewolfx2 Date: Mon, 26 Oct 2015 07:44:48 +0200 Subject: [PATCH 01/54] WDT feed for crash issue WDT feed for crash issue. --- LED_WS2812/app/application.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/LED_WS2812/app/application.cpp b/LED_WS2812/app/application.cpp index 3e82b8e92e..1106402941 100644 --- a/LED_WS2812/app/application.cpp +++ b/LED_WS2812/app/application.cpp @@ -10,7 +10,10 @@ void init() char buffer1[] = "\x40\x00\x00\x00\x40\x00\x00\x00\x40"; ws2812_writergb(LED_PIN, buffer1, sizeof(buffer1)); os_delay_us(500000); - + + //We need to feed WDT. + WDT.alive(); + char buffer2[] = "\x00\x40\x40\x40\x00\x40\x40\x40\x00"; ws2812_writergb(LED_PIN, buffer2, sizeof(buffer2)); os_delay_us(500000); From d61ce10c9e254c9b79d291aeb7f906196159d9d9 Mon Sep 17 00:00:00 2001 From: Hemant Savla Date: Sun, 6 Sep 2015 18:15:00 +0530 Subject: [PATCH 02/54] Resubmitting HW_PWM . It based on ESP8266 SDK PWM api. It uses hardware timer and does not suffer from flickers. Output on LED will be much better. --- Basic_HwPWM/.cproject | 151 ++++ Basic_HwPWM/.project | 28 + .../org.eclipse.cdt.codan.core.prefs | 67 ++ .../.settings/org.eclipse.cdt.core.prefs | 163 ++++ .../.settings/org.eclipse.cdt.ui.prefs | 3 + Basic_HwPWM/Makefile | 20 + Basic_HwPWM/Makefile-user.mk | 30 + Basic_HwPWM/app/application.cpp | 71 ++ Basic_HwPWM/include/user_config.h | 45 ++ Basic_HwPWM/nbproject/configurations.xml | 47 ++ .../CodeAssistancePathMapper.properties | 1 + .../nbproject/private/Default.properties | 0 .../nbproject/private/configurations.xml | 80 ++ .../nbproject/private/launcher.properties | 40 + Basic_HwPWM/nbproject/private/private.xml | 16 + Basic_HwPWM/nbproject/project.xml | 26 + Sming/SmingCore/HW_PWM.cpp | 120 +++ Sming/SmingCore/HW_PWM.h | 47 ++ Sming/nbproject/configurations.xml | 91 +++ .../CodeAssistancePathMapper.properties | 1 + Sming/nbproject/private/Default.properties | 11 + Sming/nbproject/private/configurations.xml | 756 ++++++++++++++++++ Sming/nbproject/private/launcher.properties | 40 + Sming/nbproject/private/private.xml | 17 + Sming/nbproject/project.xml | 26 + Sming/system/include/esp_systemapi.h | 9 + Sming/system/include/espinc/pwm.h | 34 + 27 files changed, 1940 insertions(+) create mode 100644 Basic_HwPWM/.cproject create mode 100644 Basic_HwPWM/.project create mode 100644 Basic_HwPWM/.settings/org.eclipse.cdt.codan.core.prefs create mode 100644 Basic_HwPWM/.settings/org.eclipse.cdt.core.prefs create mode 100644 Basic_HwPWM/.settings/org.eclipse.cdt.ui.prefs create mode 100644 Basic_HwPWM/Makefile create mode 100644 Basic_HwPWM/Makefile-user.mk create mode 100644 Basic_HwPWM/app/application.cpp create mode 100644 Basic_HwPWM/include/user_config.h create mode 100644 Basic_HwPWM/nbproject/configurations.xml create mode 100644 Basic_HwPWM/nbproject/private/CodeAssistancePathMapper.properties create mode 100644 Basic_HwPWM/nbproject/private/Default.properties create mode 100644 Basic_HwPWM/nbproject/private/configurations.xml create mode 100644 Basic_HwPWM/nbproject/private/launcher.properties create mode 100644 Basic_HwPWM/nbproject/private/private.xml create mode 100644 Basic_HwPWM/nbproject/project.xml create mode 100644 Sming/SmingCore/HW_PWM.cpp create mode 100644 Sming/SmingCore/HW_PWM.h create mode 100644 Sming/nbproject/configurations.xml create mode 100644 Sming/nbproject/private/CodeAssistancePathMapper.properties create mode 100644 Sming/nbproject/private/Default.properties create mode 100644 Sming/nbproject/private/configurations.xml create mode 100644 Sming/nbproject/private/launcher.properties create mode 100644 Sming/nbproject/private/private.xml create mode 100644 Sming/nbproject/project.xml create mode 100644 Sming/system/include/espinc/pwm.h diff --git a/Basic_HwPWM/.cproject b/Basic_HwPWM/.cproject new file mode 100644 index 0000000000..8186e42ff8 --- /dev/null +++ b/Basic_HwPWM/.cproject @@ -0,0 +1,151 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + make + -f ${ProjDirPath}/Makefile + all + true + true + true + + + make + -f ${ProjDirPath}/Makefile + clean + true + true + true + + + make + -f ${ProjDirPath}/Makefile + flash + true + true + true + + + make + -f ${ProjDirPath}/Makefile + flashonefile + true + true + true + + + make + -f ${ProjDirPath}/Makefile + flashinit + true + true + true + + + make + -f ${ProjDirPath}/Makefile + flashboot + true + true + true + + + make + -f ${ProjDirPath}/Makefile + rebuild + true + true + true + + + + + + + + + + + + + + + + + + + + diff --git a/Basic_HwPWM/.project b/Basic_HwPWM/.project new file mode 100644 index 0000000000..7ba2554d28 --- /dev/null +++ b/Basic_HwPWM/.project @@ -0,0 +1,28 @@ + + + Basic_HwPWM + + + SmingFramework + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.core.ccnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + diff --git a/Basic_HwPWM/.settings/org.eclipse.cdt.codan.core.prefs b/Basic_HwPWM/.settings/org.eclipse.cdt.codan.core.prefs new file mode 100644 index 0000000000..77386c23cb --- /dev/null +++ b/Basic_HwPWM/.settings/org.eclipse.cdt.codan.core.prefs @@ -0,0 +1,67 @@ +eclipse.preferences.version=1 +org.eclipse.cdt.codan.checkers.errnoreturn=Warning +org.eclipse.cdt.codan.checkers.errnoreturn.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},implicit\=>false} +org.eclipse.cdt.codan.checkers.errreturnvalue=Error +org.eclipse.cdt.codan.checkers.errreturnvalue.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} +org.eclipse.cdt.codan.checkers.noreturn=Error +org.eclipse.cdt.codan.checkers.noreturn.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},implicit\=>false} +org.eclipse.cdt.codan.internal.checkers.AbstractClassCreation=Error +org.eclipse.cdt.codan.internal.checkers.AbstractClassCreation.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} +org.eclipse.cdt.codan.internal.checkers.AmbiguousProblem=Error +org.eclipse.cdt.codan.internal.checkers.AmbiguousProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} +org.eclipse.cdt.codan.internal.checkers.AssignmentInConditionProblem=Warning +org.eclipse.cdt.codan.internal.checkers.AssignmentInConditionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} +org.eclipse.cdt.codan.internal.checkers.AssignmentToItselfProblem=Error +org.eclipse.cdt.codan.internal.checkers.AssignmentToItselfProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} +org.eclipse.cdt.codan.internal.checkers.CaseBreakProblem=Warning +org.eclipse.cdt.codan.internal.checkers.CaseBreakProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},no_break_comment\=>"no break",last_case_param\=>false,empty_case_param\=>false} +org.eclipse.cdt.codan.internal.checkers.CatchByReference=Warning +org.eclipse.cdt.codan.internal.checkers.CatchByReference.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},unknown\=>false,exceptions\=>()} +org.eclipse.cdt.codan.internal.checkers.CircularReferenceProblem=Error +org.eclipse.cdt.codan.internal.checkers.CircularReferenceProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} +org.eclipse.cdt.codan.internal.checkers.ClassMembersInitialization=Warning +org.eclipse.cdt.codan.internal.checkers.ClassMembersInitialization.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},skip\=>true} +org.eclipse.cdt.codan.internal.checkers.FieldResolutionProblem=Error +org.eclipse.cdt.codan.internal.checkers.FieldResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} +org.eclipse.cdt.codan.internal.checkers.FunctionResolutionProblem=Error +org.eclipse.cdt.codan.internal.checkers.FunctionResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} +org.eclipse.cdt.codan.internal.checkers.InvalidArguments=Error +org.eclipse.cdt.codan.internal.checkers.InvalidArguments.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} +org.eclipse.cdt.codan.internal.checkers.InvalidTemplateArgumentsProblem=Error +org.eclipse.cdt.codan.internal.checkers.InvalidTemplateArgumentsProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} +org.eclipse.cdt.codan.internal.checkers.LabelStatementNotFoundProblem=Error +org.eclipse.cdt.codan.internal.checkers.LabelStatementNotFoundProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} +org.eclipse.cdt.codan.internal.checkers.MemberDeclarationNotFoundProblem=Error +org.eclipse.cdt.codan.internal.checkers.MemberDeclarationNotFoundProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} +org.eclipse.cdt.codan.internal.checkers.MethodResolutionProblem=Error +org.eclipse.cdt.codan.internal.checkers.MethodResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} +org.eclipse.cdt.codan.internal.checkers.NamingConventionFunctionChecker=-Info +org.eclipse.cdt.codan.internal.checkers.NamingConventionFunctionChecker.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},pattern\=>"^[a-z]",macro\=>true,exceptions\=>()} +org.eclipse.cdt.codan.internal.checkers.NonVirtualDestructorProblem=Warning +org.eclipse.cdt.codan.internal.checkers.NonVirtualDestructorProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} +org.eclipse.cdt.codan.internal.checkers.OverloadProblem=Error +org.eclipse.cdt.codan.internal.checkers.OverloadProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} +org.eclipse.cdt.codan.internal.checkers.RedeclarationProblem=Error +org.eclipse.cdt.codan.internal.checkers.RedeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} +org.eclipse.cdt.codan.internal.checkers.RedefinitionProblem=Error +org.eclipse.cdt.codan.internal.checkers.RedefinitionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} +org.eclipse.cdt.codan.internal.checkers.ReturnStyleProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.ReturnStyleProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} +org.eclipse.cdt.codan.internal.checkers.ScanfFormatStringSecurityProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.ScanfFormatStringSecurityProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} +org.eclipse.cdt.codan.internal.checkers.StatementHasNoEffectProblem=Warning +org.eclipse.cdt.codan.internal.checkers.StatementHasNoEffectProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},macro\=>true,exceptions\=>()} +org.eclipse.cdt.codan.internal.checkers.SuggestedParenthesisProblem=Warning +org.eclipse.cdt.codan.internal.checkers.SuggestedParenthesisProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},paramNot\=>false} +org.eclipse.cdt.codan.internal.checkers.SuspiciousSemicolonProblem=Warning +org.eclipse.cdt.codan.internal.checkers.SuspiciousSemicolonProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},else\=>false,afterelse\=>false} +org.eclipse.cdt.codan.internal.checkers.TypeResolutionProblem=Error +org.eclipse.cdt.codan.internal.checkers.TypeResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} +org.eclipse.cdt.codan.internal.checkers.UnusedFunctionDeclarationProblem=Warning +org.eclipse.cdt.codan.internal.checkers.UnusedFunctionDeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},macro\=>true} +org.eclipse.cdt.codan.internal.checkers.UnusedStaticFunctionProblem=Warning +org.eclipse.cdt.codan.internal.checkers.UnusedStaticFunctionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},macro\=>true} +org.eclipse.cdt.codan.internal.checkers.UnusedVariableDeclarationProblem=Warning +org.eclipse.cdt.codan.internal.checkers.UnusedVariableDeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},macro\=>true,exceptions\=>("@(\#)","$Id")} +org.eclipse.cdt.codan.internal.checkers.VariableResolutionProblem=Error +org.eclipse.cdt.codan.internal.checkers.VariableResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} diff --git a/Basic_HwPWM/.settings/org.eclipse.cdt.core.prefs b/Basic_HwPWM/.settings/org.eclipse.cdt.core.prefs new file mode 100644 index 0000000000..8d41bca808 --- /dev/null +++ b/Basic_HwPWM/.settings/org.eclipse.cdt.core.prefs @@ -0,0 +1,163 @@ +eclipse.preferences.version=1 +org.eclipse.cdt.core.formatter.alignment_for_arguments_in_method_invocation=16 +org.eclipse.cdt.core.formatter.alignment_for_assignment=16 +org.eclipse.cdt.core.formatter.alignment_for_base_clause_in_type_declaration=80 +org.eclipse.cdt.core.formatter.alignment_for_binary_expression=16 +org.eclipse.cdt.core.formatter.alignment_for_compact_if=16 +org.eclipse.cdt.core.formatter.alignment_for_conditional_expression=34 +org.eclipse.cdt.core.formatter.alignment_for_conditional_expression_chain=18 +org.eclipse.cdt.core.formatter.alignment_for_constructor_initializer_list=0 +org.eclipse.cdt.core.formatter.alignment_for_declarator_list=16 +org.eclipse.cdt.core.formatter.alignment_for_enumerator_list=48 +org.eclipse.cdt.core.formatter.alignment_for_expression_list=0 +org.eclipse.cdt.core.formatter.alignment_for_expressions_in_array_initializer=16 +org.eclipse.cdt.core.formatter.alignment_for_member_access=0 +org.eclipse.cdt.core.formatter.alignment_for_overloaded_left_shift_chain=16 +org.eclipse.cdt.core.formatter.alignment_for_parameters_in_method_declaration=16 +org.eclipse.cdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16 +org.eclipse.cdt.core.formatter.brace_position_for_array_initializer=next_line +org.eclipse.cdt.core.formatter.brace_position_for_block=next_line +org.eclipse.cdt.core.formatter.brace_position_for_block_in_case=next_line +org.eclipse.cdt.core.formatter.brace_position_for_method_declaration=next_line +org.eclipse.cdt.core.formatter.brace_position_for_namespace_declaration=next_line +org.eclipse.cdt.core.formatter.brace_position_for_switch=next_line +org.eclipse.cdt.core.formatter.brace_position_for_type_declaration=next_line +org.eclipse.cdt.core.formatter.comment.min_distance_between_code_and_line_comment=1 +org.eclipse.cdt.core.formatter.comment.never_indent_line_comments_on_first_column=true +org.eclipse.cdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=true +org.eclipse.cdt.core.formatter.compact_else_if=true +org.eclipse.cdt.core.formatter.continuation_indentation=2 +org.eclipse.cdt.core.formatter.continuation_indentation_for_array_initializer=2 +org.eclipse.cdt.core.formatter.format_guardian_clause_on_one_line=false +org.eclipse.cdt.core.formatter.indent_access_specifier_compare_to_type_header=false +org.eclipse.cdt.core.formatter.indent_access_specifier_extra_spaces=0 +org.eclipse.cdt.core.formatter.indent_body_declarations_compare_to_access_specifier=true +org.eclipse.cdt.core.formatter.indent_body_declarations_compare_to_namespace_header=false +org.eclipse.cdt.core.formatter.indent_breaks_compare_to_cases=true +org.eclipse.cdt.core.formatter.indent_declaration_compare_to_template_header=false +org.eclipse.cdt.core.formatter.indent_empty_lines=false +org.eclipse.cdt.core.formatter.indent_statements_compare_to_block=true +org.eclipse.cdt.core.formatter.indent_statements_compare_to_body=true +org.eclipse.cdt.core.formatter.indent_switchstatements_compare_to_cases=true +org.eclipse.cdt.core.formatter.indent_switchstatements_compare_to_switch=false +org.eclipse.cdt.core.formatter.indentation.size=4 +org.eclipse.cdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert +org.eclipse.cdt.core.formatter.insert_new_line_after_template_declaration=do not insert +org.eclipse.cdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert +org.eclipse.cdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert +org.eclipse.cdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert +org.eclipse.cdt.core.formatter.insert_new_line_before_colon_in_constructor_initializer_list=do not insert +org.eclipse.cdt.core.formatter.insert_new_line_before_else_in_if_statement=insert +org.eclipse.cdt.core.formatter.insert_new_line_before_identifier_in_function_declaration=do not insert +org.eclipse.cdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert +org.eclipse.cdt.core.formatter.insert_new_line_in_empty_block=insert +org.eclipse.cdt.core.formatter.insert_space_after_assignment_operator=insert +org.eclipse.cdt.core.formatter.insert_space_after_binary_operator=insert +org.eclipse.cdt.core.formatter.insert_space_after_closing_angle_bracket_in_template_arguments=insert +org.eclipse.cdt.core.formatter.insert_space_after_closing_angle_bracket_in_template_parameters=insert +org.eclipse.cdt.core.formatter.insert_space_after_closing_brace_in_block=insert +org.eclipse.cdt.core.formatter.insert_space_after_closing_paren_in_cast=insert +org.eclipse.cdt.core.formatter.insert_space_after_colon_in_base_clause=insert +org.eclipse.cdt.core.formatter.insert_space_after_colon_in_case=insert +org.eclipse.cdt.core.formatter.insert_space_after_colon_in_conditional=insert +org.eclipse.cdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert +org.eclipse.cdt.core.formatter.insert_space_after_comma_in_array_initializer=insert +org.eclipse.cdt.core.formatter.insert_space_after_comma_in_base_types=insert +org.eclipse.cdt.core.formatter.insert_space_after_comma_in_declarator_list=insert +org.eclipse.cdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert +org.eclipse.cdt.core.formatter.insert_space_after_comma_in_expression_list=insert +org.eclipse.cdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert +org.eclipse.cdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert +org.eclipse.cdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert +org.eclipse.cdt.core.formatter.insert_space_after_comma_in_template_arguments=insert +org.eclipse.cdt.core.formatter.insert_space_after_comma_in_template_parameters=insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_angle_bracket_in_template_arguments=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_angle_bracket_in_template_parameters=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_bracket=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_exception_specification=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_postfix_operator=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_prefix_operator=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_question_in_conditional=insert +org.eclipse.cdt.core.formatter.insert_space_after_semicolon_in_for=insert +org.eclipse.cdt.core.formatter.insert_space_after_unary_operator=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_assignment_operator=insert +org.eclipse.cdt.core.formatter.insert_space_before_binary_operator=insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_angle_bracket_in_template_arguments=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_angle_bracket_in_template_parameters=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_bracket=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_exception_specification=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_colon_in_base_clause=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_colon_in_case=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_colon_in_conditional=insert +org.eclipse.cdt.core.formatter.insert_space_before_colon_in_default=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_comma_in_base_types=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_comma_in_declarator_list=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_comma_in_expression_list=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_comma_in_template_arguments=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_comma_in_template_parameters=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_angle_bracket_in_template_arguments=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_angle_bracket_in_template_parameters=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_block=insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_namespace_declaration=insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_switch=insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_bracket=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_catch=insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_exception_specification=insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_for=insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_if=insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_switch=insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_while=insert +org.eclipse.cdt.core.formatter.insert_space_before_postfix_operator=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_prefix_operator=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_question_in_conditional=insert +org.eclipse.cdt.core.formatter.insert_space_before_semicolon=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_semicolon_in_for=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_unary_operator=do not insert +org.eclipse.cdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert +org.eclipse.cdt.core.formatter.insert_space_between_empty_brackets=do not insert +org.eclipse.cdt.core.formatter.insert_space_between_empty_parens_in_exception_specification=do not insert +org.eclipse.cdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert +org.eclipse.cdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert +org.eclipse.cdt.core.formatter.join_wrapped_lines=true +org.eclipse.cdt.core.formatter.keep_else_statement_on_same_line=false +org.eclipse.cdt.core.formatter.keep_empty_array_initializer_on_one_line=false +org.eclipse.cdt.core.formatter.keep_imple_if_on_one_line=false +org.eclipse.cdt.core.formatter.keep_then_statement_on_same_line=false +org.eclipse.cdt.core.formatter.lineSplit=80 +org.eclipse.cdt.core.formatter.number_of_empty_lines_to_preserve=1 +org.eclipse.cdt.core.formatter.put_empty_statement_on_new_line=true +org.eclipse.cdt.core.formatter.tabulation.char=tab +org.eclipse.cdt.core.formatter.tabulation.size=4 +org.eclipse.cdt.core.formatter.use_tabs_only_for_leading_indentations=false diff --git a/Basic_HwPWM/.settings/org.eclipse.cdt.ui.prefs b/Basic_HwPWM/.settings/org.eclipse.cdt.ui.prefs new file mode 100644 index 0000000000..48a50c7083 --- /dev/null +++ b/Basic_HwPWM/.settings/org.eclipse.cdt.ui.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +formatter_profile=org.eclipse.cdt.ui.default.allman_profile +formatter_settings_version=1 diff --git a/Basic_HwPWM/Makefile b/Basic_HwPWM/Makefile new file mode 100644 index 0000000000..15b9309d06 --- /dev/null +++ b/Basic_HwPWM/Makefile @@ -0,0 +1,20 @@ +##################################################################### +#### Please don't change this file. Use Makefile-user.mk instead #### +##################################################################### +# Including user Makefile. +# Should be used to set project-specific parameters +include ./Makefile-user.mk + +# Important parameters check. +# We need to make sure SMING_HOME and ESP_HOME variables are set. +# You can use Makefile-user.mk in each project or use enviromental variables to set it globally. + +ifndef SMING_HOME +$(error SMING_HOME is not set. Please configure it in Makefile-user.mk) +endif +ifndef ESP_HOME +$(error ESP_HOME is not set. Please configure it in Makefile-user.mk) +endif + +# Include main Sming Makefile +include $(SMING_HOME)/Makefile-project.mk \ No newline at end of file diff --git a/Basic_HwPWM/Makefile-user.mk b/Basic_HwPWM/Makefile-user.mk new file mode 100644 index 0000000000..bc53275f5b --- /dev/null +++ b/Basic_HwPWM/Makefile-user.mk @@ -0,0 +1,30 @@ +## Local build configuration +## Parameters configured here will override default and ENV values. +## Uncomment and change examples: + +#Add your source directories here separated by space +MODULES = app + +## ESP_HOME sets the path where ESP tools and SDK are located. +## Windows: +# ESP_HOME = c:/Espressif + +## MacOS / Linux: +#ESP_HOME = /opt/esp-open-sdk + +## SMING_HOME sets the path where Sming framework is located. +## Windows: +# SMING_HOME = c:/tools/sming/Sming + +# MacOS / Linux +# SMING_HOME = /opt/sming/Sming + +## COM port parameter is reqruied to flash firmware correctly. +## Windows: +# COM_PORT = COM3 + +# MacOS / Linux: +# COM_PORT = /dev/tty.usbserial + +# Com port speed +# COM_SPEED = 115200 \ No newline at end of file diff --git a/Basic_HwPWM/app/application.cpp b/Basic_HwPWM/app/application.cpp new file mode 100644 index 0000000000..50402ef3e3 --- /dev/null +++ b/Basic_HwPWM/app/application.cpp @@ -0,0 +1,71 @@ +/* + * File: Esp SDK Hardware PWM demo + * Author: https://github.com/hrsavla + * + * This HW_PWM library enables Sming framework user to use ESP SDK PWM API + * Period of PWM is fixed to 1000ms / Frequency = 1khz + * Duty at 100% = 22222. Duty at 0% = 0 + * You can use function setPeriod() to change frequency/period. + * Calculate the Duty as per the formulae give in ESP8266 SDK + * Duty = (Period *1000)/45 + * + * PWM can be generated on upto 8 pins (ie All pins except pin 16) + * Created on August 17, 2015, 2:27 PM + */ +#include +#include +#include + +uint8_t pins[8] = { 4, 5, 0, 2, 15, 13, 12, 14 }; // List of pins that you want to connect to pwm +HWPWM HW_pwm(pins, 8); + +Timer procTimer; +uint32 i = 0; +uint32 inc = 100; +bool countUp = true; +void doPWM() +{ + if(countUp == true) + { + i = i+ inc; + if (i >22222) + { + countUp = false; + } + } + else + { + i = i- inc; + if (i < inc) + { + countUp = true; + } + } + HW_pwm.analogWrite(2,i); +} +void init() +{ + Serial.begin(SERIAL_BAUD_RATE); // 115200 by default + Serial.systemDebugOutput(true); // Enable debug output to serial + + // WIFI not needed for demo. So disabling WIFI. + WifiStation.enable(false); + WifiAccessPoint.enable(false); + + // Setting PWM values on 8 different pins + HW_pwm.analogWrite(4, 22222); + HW_pwm.analogWrite(5, 11111); + HW_pwm.analogWrite(0, 22222); + HW_pwm.analogWrite(2, 11111); + HW_pwm.analogWrite(15, 22222); + HW_pwm.analogWrite(13, 11111); + HW_pwm.analogWrite(12, 22222); + HW_pwm.analogWrite(14, 11111); + + debugf("PWM output set on all 8 Pins. Kindly check .."); + debugf("Now Pin 2 will go from 0 to VCC to 0 in cycles."); + procTimer.initializeMs(100, doPWM).start(); +} + + + diff --git a/Basic_HwPWM/include/user_config.h b/Basic_HwPWM/include/user_config.h new file mode 100644 index 0000000000..1c6ac36703 --- /dev/null +++ b/Basic_HwPWM/include/user_config.h @@ -0,0 +1,45 @@ +#ifndef __USER_CONFIG_H__ +#define __USER_CONFIG_H__ + +#ifdef __cplusplus +extern "C" { +#endif + + // UART config + #define SERIAL_BAUD_RATE 115200 + + // ESP SDK config + #define LWIP_OPEN_SRC + #define USE_US_TIMER + + // Default types + #define __CORRECT_ISO_CPP_STDLIB_H_PROTO + #include + #include + + // Override c_types.h include and remove buggy espconn + #define _C_TYPES_H_ + #define _NO_ESPCON_ + + // Updated, compatible version of c_types.h + // Just removed types declared in + #include + + // System API declarations + #include + + // C++ Support + #include + // Extended string conversion for compatibility + #include + // Network base API + #include + + // Beta boards + #define BOARD_ESP01 + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/Basic_HwPWM/nbproject/configurations.xml b/Basic_HwPWM/nbproject/configurations.xml new file mode 100644 index 0000000000..14cc1347f8 --- /dev/null +++ b/Basic_HwPWM/nbproject/configurations.xml @@ -0,0 +1,47 @@ + + + + + + application.cpp + + + + Makefile + + + ^(nbproject)$ + + . + + Makefile + + + + default + false + false + + + + + + . + ${MAKE} -f Makefile + ${MAKE} -f Makefile clean + + + + app + + + + + + + + + diff --git a/Basic_HwPWM/nbproject/private/CodeAssistancePathMapper.properties b/Basic_HwPWM/nbproject/private/CodeAssistancePathMapper.properties new file mode 100644 index 0000000000..7f5ded8feb --- /dev/null +++ b/Basic_HwPWM/nbproject/private/CodeAssistancePathMapper.properties @@ -0,0 +1 @@ +# Automatic path mapper. CRC = 1 diff --git a/Basic_HwPWM/nbproject/private/Default.properties b/Basic_HwPWM/nbproject/private/Default.properties new file mode 100644 index 0000000000..e69de29bb2 diff --git a/Basic_HwPWM/nbproject/private/configurations.xml b/Basic_HwPWM/nbproject/private/configurations.xml new file mode 100644 index 0000000000..9cdbcf42fb --- /dev/null +++ b/Basic_HwPWM/nbproject/private/configurations.xml @@ -0,0 +1,80 @@ + + + + + + application.cpp + + + user_config.h + + + + + + + + + + + + + + + + + + + + + + Makefile + + + + localhost + 3 + + + + . + ${AUTO_FOLDER} + + ${AUTO_FOLDER} + + ${MAKE} ${ITEM_NAME}.o + ${AUTO_COMPILE} + + ${AUTO_COMPILE} + + + + + + + + + + + + + + + gdb + + + + "${OUTPUT_PATH}" + Make flash + + Make flash + . + false + 0 + 0 + + + + + + diff --git a/Basic_HwPWM/nbproject/private/launcher.properties b/Basic_HwPWM/nbproject/private/launcher.properties new file mode 100644 index 0000000000..6cc2127d07 --- /dev/null +++ b/Basic_HwPWM/nbproject/private/launcher.properties @@ -0,0 +1,40 @@ +# Launchers File syntax: +# +# [Must-have property line] +# launcher1.runCommand= +# [Optional extra properties] +# launcher1.displayName= +# launcher1.buildCommand= +# launcher1.runDir= +# launcher1.symbolFiles= +# launcher1.env.= +# (If this value is quoted with ` it is handled as a native command which execution result will become the value) +# [Common launcher properties] +# common.runDir= +# (This value is overwritten by a launcher specific runDir value if the latter exists) +# common.env.= +# (Environment variables from common launcher are merged with launcher specific variables) +# common.symbolFiles= +# (This value is overwritten by a launcher specific symbolFiles value if the latter exists) +# +# In runDir, symbolFiles and env fields you can use these macroses: +# ${PROJECT_DIR} - project directory absolute path +# ${OUTPUT_PATH} - linker output path (relative to project directory path) +# ${OUTPUT_BASENAME}- linker output filename +# ${TESTDIR} - test files directory (relative to project directory path) +# ${OBJECTDIR} - object files directory (relative to project directory path) +# ${CND_DISTDIR} - distribution directory (relative to project directory path) +# ${CND_BUILDDIR} - build directory (relative to project directory path) +# ${CND_PLATFORM} - platform name +# ${CND_CONF} - configuration name +# ${CND_DLIB_EXT} - dynamic library extension +# +# All the project launchers must be listed in the file! +# +# launcher1.runCommand=... +# launcher2.runCommand=... +# ... +# common.runDir=... +# common.env.KEY=VALUE + +# launcher1.runCommand= \ No newline at end of file diff --git a/Basic_HwPWM/nbproject/private/private.xml b/Basic_HwPWM/nbproject/private/private.xml new file mode 100644 index 0000000000..46b1652cab --- /dev/null +++ b/Basic_HwPWM/nbproject/private/private.xml @@ -0,0 +1,16 @@ + + + + true + + + 0 + 0 + + + + + file:/C:/tools/MySming/Basic_HwPWM/app/application.cpp + + + diff --git a/Basic_HwPWM/nbproject/project.xml b/Basic_HwPWM/nbproject/project.xml new file mode 100644 index 0000000000..87cc45835c --- /dev/null +++ b/Basic_HwPWM/nbproject/project.xml @@ -0,0 +1,26 @@ + + + org.netbeans.modules.cnd.makeproject + + + Basic_HwPWM + + cpp + h + UTF-8 + + + . + + + + Default + 0 + + + + false + + + + diff --git a/Sming/SmingCore/HW_PWM.cpp b/Sming/SmingCore/HW_PWM.cpp new file mode 100644 index 0000000000..56be56ee2d --- /dev/null +++ b/Sming/SmingCore/HW_PWM.cpp @@ -0,0 +1,120 @@ +/* + * File: HW_PWM.cpp + * Author: https://github.com/hrsavla + * + * This HW_PWM library enables Sming framework user to use ESP SDK PWM API + * Period of PWM is fixed to 1000ms / Frequency = 1khz + * Duty at 100% = 22222. Duty at 0% = 0 + * You can use function setPeriod() to change frequency/period. + * Calculate the Duty as per the formulae give in ESP8266 SDK + * Duty = (Period *1000)/45 + * + * PWM can be generated on upto 8 pins (ie All pins except pin 16) + * Created on August 17, 2015, 2:27 PM + */ +#include "../SmingCore/HW_PWM.h" +#include "../SmingCore/Clock.h" +#include "../Wiring/WiringFrameworkIncludes.h" + +HWPWM::HWPWM(uint8_t* pins, int no_of_pins) { + if (no_of_pins > 0) { + for (uint8_t i = 0; i < no_of_pins; i++) { + io_info[i][0] = EspDigitalPins[pins[i]].mux; + io_info[i][1] = EspDigitalPins[pins[i]].gpioFunc; + io_info[i][2] = EspDigitalPins[pins[i]].id; + pwm_duty_init[i] = 0; // Start with zero output + channel[i] = pins[i]; + } + pwm_init(1000,pwm_duty_init,no_of_pins,io_info); + pwm_start(); // Lets not start pwm just after init + } +} + +HWPWM::~HWPWM() { + // There are not functions in SDK to stop PWM output. Let's hope they put + // it in future. +} + +/* Function Name: getChannel + * Description: This function is used to get channel number for given pin + * Parameters: pin -Esp8266 pin number + */ +uint8_t HWPWM::getChannel(uint8_t pin) +{ + for(uint8_t i=0;i + + + + + + glcdfont.c + + + hspi.c + + + + + ff.c + + + libemqtt.c + + + spiffs.c + spiffs_cache.c + spiffs_check.c + spiffs_gc.c + spiffs_hydrogen.c + spiffs_nucleus.c + + + + flashmem.c + + + + Makefile + + + ^(nbproject)$ + + . + + Makefile + + + + default + false + false + + + + + + . + ${MAKE} -f Makefile + ${MAKE} -f Makefile clean + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Sming/nbproject/private/CodeAssistancePathMapper.properties b/Sming/nbproject/private/CodeAssistancePathMapper.properties new file mode 100644 index 0000000000..7f5ded8feb --- /dev/null +++ b/Sming/nbproject/private/CodeAssistancePathMapper.properties @@ -0,0 +1 @@ +# Automatic path mapper. CRC = 1 diff --git a/Sming/nbproject/private/Default.properties b/Sming/nbproject/private/Default.properties new file mode 100644 index 0000000000..a6913e6fb6 --- /dev/null +++ b/Sming/nbproject/private/Default.properties @@ -0,0 +1,11 @@ +C:\tools\MySming\Sming\system\flashmem.c=C:\tools\MySming\Sming#CC system/flashmem.c +C:\tools\MySming\Sming\Services\SpifFS\spiffs_check.c=C:\tools\MySming\Sming#CC Services/SpifFS/spiffs_check.c +C:\tools\MySming\Sming\Services\SpifFS\spiffs_cache.c=C:\tools\MySming\Sming#CC Services/SpifFS/spiffs_cache.c +C:\tools\MySming\Sming\Services\SpifFS\spiffs_gc.c=C:\tools\MySming\Sming#CC Services/SpifFS/spiffs_gc.c +C:\tools\MySming\Sming\Services\SpifFS\spiffs_nucleus.c=C:\tools\MySming\Sming#CC Services/SpifFS/spiffs_nucleus.c +C:\tools\MySming\Sming\Services\SpifFS\spiffs.c=C:\tools\MySming\Sming#CC Services/SpifFS/spiffs.c +C:\tools\MySming\Sming\Services\SpifFS\spiffs_hydrogen.c=C:\tools\MySming\Sming#CC Services/SpifFS/spiffs_hydrogen.c +C:\tools\MySming\Sming\Services\libemqtt\libemqtt.c=C:\tools\MySming\Sming#CC Services/libemqtt/libemqtt.c +C:\tools\MySming\Sming\Services\FATFS\ff.c=C:\tools\MySming\Sming#CC Services/FATFS/ff.c +C:\tools\MySming\Sming\Libraries\Adafruit_GFX\glcdfont.c=C:\tools\MySming\Sming#CC Libraries/Adafruit_GFX/glcdfont.c +C:\tools\MySming\Sming\Libraries\Adafruit_ILI9341\hspi.c=C:\tools\MySming\Sming#CC Libraries/Adafruit_ILI9341/hspi.c diff --git a/Sming/nbproject/private/configurations.xml b/Sming/nbproject/private/configurations.xml new file mode 100644 index 0000000000..d8e3afb2f3 --- /dev/null +++ b/Sming/nbproject/private/configurations.xml @@ -0,0 +1,756 @@ + + + + + + user_main.cpp + + + apptest.cpp + + + + + + + + + + + user_config.h + + + + Adafruit_GFX.cpp + Adafruit_GFX.h + glcdfont.c + + + + + + + + + + + + + + + + + Adafruit_ILI9341.cpp + Adafruit_ILI9341.h + hspi.c + hspi.h + spi_register.h + + + + + + + Adafruit_PCD8544.cpp + Adafruit_PCD8544.h + + + + + + + + + + + + + Adafruit_SSD1306.cpp + Adafruit_SSD1306.h + + + + + + + + + BH1750FVI.cpp + BH1750FVI.h + + + + + BMP180.cpp + BMP180.h + + + + + + + + + + + + + + + Bounce.cpp + Bounce.h + + + + + + + CapacitiveSensor.cpp + CapacitiveSensor.h + + + DHT.cpp + DHT.h + + + + + + + HMC5883L.cpp + HMC5883L.h + + + I2Cdev.cpp + I2Cdev.h + + + IRremote.cpp + IRremote.h + IRremoteInt.h + + + + + + + + + + + + + + + + + + + + + + + + + + + + + FastIO.cpp + FastIO.h + I2CIO.cpp + I2CIO.h + LCD.cpp + LCD.h + LiquidCrystal.cpp + LiquidCrystal.h + LiquidCrystal_I2C.cpp + LiquidCrystal_I2C.h + LiquidCrystal_SR.cpp + LiquidCrystal_SR.h + LiquidCrystal_SR2W.cpp + LiquidCrystal_SR2W.h + LiquidCrystal_SR3W.cpp + LiquidCrystal_SR3W.h + + + + + + + + + + + + + + + + + Mirf.cpp + Mirf.h + MirfHardwareSpi85Driver.h + MirfHardwareSpiDriver.h + MirfSpiDriver.h + Mirf_nRF24L01.h + + + + + + + MMA_7455.cpp + MMA_7455.h + + + + + + + + + + + OneWire.cpp + OneWire.h + + + + + printf.h + + + printf.h + + + printf.h + + + printf.h + + + printf.h + + + printf.h + + + main.cpp + + + printf.h + + + printf.h + + + printf.h + + + printf.h + + + + + printf.h + + + printf.h + + + printf.h + + + RF24.cpp + RF24.h + RF24_config.h + nRF24L01.h + + + SDCard.cpp + SDCard.h + + + si4432.cpp + si4432.h + + + + + + + + + + + + + + + TFT_ILI9163C.cpp + TFT_ILI9163C.h + + + + + Ultrasonic.cpp + Ultrasonic.h + + + WS2812.cpp + WS2812.h + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IndentedPrint.hpp + JsonBufferAllocated.hpp + JsonParser.hpp + JsonPrintable.hpp + JsonStringStorage.hpp + JsonVariantContent.hpp + JsonVariantType.hpp + JsonWriter.hpp + List.hpp + ListConstIterator.hpp + ListIterator.hpp + ListNode.hpp + Prettyfier.hpp + QuotedString.hpp + ReferenceType.hpp + StringBuilder.hpp + + DynamicJsonBuffer.hpp + JsonArray.hpp + JsonBuffer.hpp + JsonObject.hpp + JsonPair.hpp + JsonVariant.hpp + StaticJsonBuffer.hpp + + ArduinoJson.h + + + + + + IndentedPrint.cpp + JsonParser.cpp + List.cpp + Prettyfier.cpp + QuotedString.cpp + StringBuilder.cpp + + JsonArray.cpp + JsonBuffer.cpp + JsonObject.cpp + JsonVariant.cpp + + ArduinoJson.cpp + ArduinoJson.h + + + CommandDelegate.cpp + CommandDelegate.h + CommandExecutor.cpp + CommandExecutor.h + CommandHandler.cpp + CommandHandler.h + CommandOutput.cpp + CommandOutput.h + CommandProcessingDependencies.h + CommandProcessingIncludes.h + + + websocket.cpp + websocket.h + + + DateTime.cpp + DateTime.h + + + diskio.h + ff.c + ff.h + ffconf.h + integer.h + + + libemqtt.c + libemqtt.h + + + + + spiffs.c + spiffs.h + spiffs_cache.c + spiffs_check.c + spiffs_config.h + spiffs_gc.c + spiffs_hydrogen.c + spiffs_nucleus.c + spiffs_nucleus.h + + + aw-sha1.h + base64.cpp + base64.h + escape.cpp + escape.h + + + + + FTPServer.cpp + FTPServer.h + FTPServerConnection.cpp + FTPServerConnection.h + HttpClient.cpp + HttpClient.h + HttpFirmwareUpdate.cpp + HttpFirmwareUpdate.h + HttpRequest.cpp + HttpRequest.h + HttpResponse.cpp + HttpResponse.h + HttpServer.cpp + HttpServer.h + HttpServerConnection.cpp + HttpServerConnection.h + MqttClient.cpp + MqttClient.h + NetUtils.cpp + NetUtils.h + NtpClient.cpp + NtpClient.h + TcpClient.cpp + TcpClient.h + TcpConnection.cpp + TcpConnection.h + TcpServer.cpp + TcpServer.h + TelnetServer.cpp + TelnetServer.h + URL.cpp + URL.h + UdpConnection.cpp + UdpConnection.h + WebConstants.h + WebSocket.cpp + WebSocket.h + + + AccessPoint.cpp + AccessPoint.h + RTC.cpp + RTC.h + Station.cpp + Station.h + System.cpp + System.h + WDT.cpp + WDT.h + + Boards.h + Clock.cpp + Clock.h + DataSourceStream.cpp + DataSourceStream.h + Debug.cpp + Debug.h + Delegate.h + Digital.cpp + Digital.h + ESP8266EX.cpp + ESP8266EX.h + FileSystem.cpp + FileSystem.h + HW_PWM.cpp + HW_PWM.h + HardwareSerial.cpp + HardwareSerial.h + Interrupts.cpp + Interrupts.h + PWM.cpp + PWM.h + SPI.cpp + SPI.h + SPISoft.cpp + SPISoft.h + SmingCore.h + SystemClock.cpp + SystemClock.h + Timer.cpp + Timer.h + Wire.cpp + Wire.h + pins_arduino.h + + + + + cc.h + perf.h + sys_arch.h + + + c_types_compatible.h + lwip_includes.h + pwm.h + spi_register.h + uart.h + uart_register.h + + + + dhcpserver.h + espconn.h + espconn_tcp.h + espconn_udp.h + ping.h + + api.h + api_msg.h + arch.h + autoip.h + debug.h + def.h + dhcp.h + dns.h + err.h + icmp.h + igmp.h + inet.h + inet_chksum.h + init.h + ip.h + ip_addr.h + ip_frag.h + mem.h + memp.h + memp_std.h + netbuf.h + netdb.h + netif.h + netifapi.h + opt.h + pbuf.h + raw.h + sio.h + snmp.h + snmp_asn1.h + snmp_msg.h + snmp_structs.h + sockets.h + stats.h + sys.h + tcp.h + tcp_impl.h + tcpip.h + timers.h + udp.h + + esp_cplusplus.h + esp_systemapi.h + lwipopts.h + mem_manager.h + stringconversion.h + + esp_cplusplus.cpp + flashmem.c + flashmem.h + irq_check.s + m_printf.cpp + stringconversion.cpp + + + Arduino.h + Binary.h + BitManipulations.h + Countable.h + Display.h + FIFO.h + FILO.h + FakePgmSpace.cpp + FakePgmSpace.h + I2cMaster.cpp + I2cMaster.h + IPAddress.cpp + IPAddress.h + Print.cpp + Print.h + Printable.h + SplitString.cpp + SplitString.h + Stream.cpp + Stream.h + WCharacter.h + WConstants.h + WHashMap.h + WMath.cpp + WMath.h + WProgram.h + WShift.cpp + WShift.h + WString.cpp + WString.h + WVector.h + WiringFrameworkDependencies.h + WiringFrameworkIncludes.h + wiring_private.h + + + + Makefile + + + + localhost + 3 + + + + . + ${AUTO_FOLDER} + + ${AUTO_FOLDER} + + ${MAKE} ${ITEM_NAME}.o + ${AUTO_COMPILE} + + ${AUTO_COMPILE} + + + + + + + + + + + + + + + gdb + + + + "${OUTPUT_PATH}" + + "${OUTPUT_PATH}" + . + false + 0 + 0 + + + + + + diff --git a/Sming/nbproject/private/launcher.properties b/Sming/nbproject/private/launcher.properties new file mode 100644 index 0000000000..6cc2127d07 --- /dev/null +++ b/Sming/nbproject/private/launcher.properties @@ -0,0 +1,40 @@ +# Launchers File syntax: +# +# [Must-have property line] +# launcher1.runCommand= +# [Optional extra properties] +# launcher1.displayName= +# launcher1.buildCommand= +# launcher1.runDir= +# launcher1.symbolFiles= +# launcher1.env.= +# (If this value is quoted with ` it is handled as a native command which execution result will become the value) +# [Common launcher properties] +# common.runDir= +# (This value is overwritten by a launcher specific runDir value if the latter exists) +# common.env.= +# (Environment variables from common launcher are merged with launcher specific variables) +# common.symbolFiles= +# (This value is overwritten by a launcher specific symbolFiles value if the latter exists) +# +# In runDir, symbolFiles and env fields you can use these macroses: +# ${PROJECT_DIR} - project directory absolute path +# ${OUTPUT_PATH} - linker output path (relative to project directory path) +# ${OUTPUT_BASENAME}- linker output filename +# ${TESTDIR} - test files directory (relative to project directory path) +# ${OBJECTDIR} - object files directory (relative to project directory path) +# ${CND_DISTDIR} - distribution directory (relative to project directory path) +# ${CND_BUILDDIR} - build directory (relative to project directory path) +# ${CND_PLATFORM} - platform name +# ${CND_CONF} - configuration name +# ${CND_DLIB_EXT} - dynamic library extension +# +# All the project launchers must be listed in the file! +# +# launcher1.runCommand=... +# launcher2.runCommand=... +# ... +# common.runDir=... +# common.env.KEY=VALUE + +# launcher1.runCommand= \ No newline at end of file diff --git a/Sming/nbproject/private/private.xml b/Sming/nbproject/private/private.xml new file mode 100644 index 0000000000..3866820ea0 --- /dev/null +++ b/Sming/nbproject/private/private.xml @@ -0,0 +1,17 @@ + + + + true + + + 0 + 0 + + + + + file:/C:/tools/MySming/Sming/SmingCore/HW_PWM.cpp + file:/C:/tools/MySming/Sming/SmingCore/HW_PWM.h + + + diff --git a/Sming/nbproject/project.xml b/Sming/nbproject/project.xml new file mode 100644 index 0000000000..1f5dbc3e74 --- /dev/null +++ b/Sming/nbproject/project.xml @@ -0,0 +1,26 @@ + + + org.netbeans.modules.cnd.makeproject + + + Sming + c + cpp + h,hpp + UTF-8 + + + . + + + + Default + 0 + + + + false + + + + diff --git a/Sming/system/include/esp_systemapi.h b/Sming/system/include/esp_systemapi.h index 499f98f72a..c45b211eb3 100644 --- a/Sming/system/include/esp_systemapi.h +++ b/Sming/system/include/esp_systemapi.h @@ -90,6 +90,15 @@ extern void ets_intr_unlock(); extern void ets_update_cpu_frequency(uint32_t frq); extern uint32_t ets_get_cpu_frequency(); +//SDK Pwm API +extern void pwm_start(void); +extern void pwm_init(uint32 period, uint32 *duty,uint32 pwm_channel_num,uint32 (*pin_info_list)[3]); +extern void pwm_set_duty(uint32 duty, uint8 channel); +extern uint32 pwm_get_duty(uint8 channel); +extern void pwm_set_period(uint32 period); +extern uint32 pwm_get_period(void); +extern uint32 get_pwm_version(void); + typedef signed short file_t; #endif diff --git a/Sming/system/include/espinc/pwm.h b/Sming/system/include/espinc/pwm.h new file mode 100644 index 0000000000..ab41658a28 --- /dev/null +++ b/Sming/system/include/espinc/pwm.h @@ -0,0 +1,34 @@ +#ifndef __PWM_H__ +#define __PWM_H__ + +/*pwm.h: function and macro definition of PWM API , driver level */ +/*user_light.h: user interface for light API, user level*/ +/*user_light_adj: API for color changing and lighting effects, user level*/ + + + /*NOTE!! : DO NOT CHANGE THIS FILE*/ + + /*SUPPORT UP TO 8 PWM CHANNEL*/ +#define PWM_CHANNEL_NUM_MAX 8 + +struct pwm_param { + uint32 period; + uint32 freq; + uint32 duty[PWM_CHANNEL_NUM_MAX]; //PWM_CHANNEL<=8 +}; + + +/* pwm_init should be called only once, for now */ +void pwm_init(uint32 period, uint32 *duty,uint32 pwm_channel_num,uint32 (*pin_info_list)[3]); +void pwm_start(void); + +void pwm_set_duty(uint32 duty, uint8 channel); +uint32 pwm_get_duty(uint8 channel); +void pwm_set_period(uint32 period); +uint32 pwm_get_period(void); + +uint32 get_pwm_version(void); +void set_pwm_debug_en(uint8 print_en); + +#endif + From 5f7c12b03155602dfa585d594891896ea9638503 Mon Sep 17 00:00:00 2001 From: Richard Antony Burton Date: Tue, 27 Oct 2015 19:08:13 +0000 Subject: [PATCH 03/54] rework hw pwm --- .../org.eclipse.cdt.codan.core.prefs | 67 -- .../.settings/org.eclipse.cdt.core.prefs | 163 ---- .../.settings/org.eclipse.cdt.ui.prefs | 3 - Basic_HwPWM/Makefile | 6 +- Basic_HwPWM/Makefile-user.mk | 7 +- Basic_HwPWM/app/application.cpp | 49 +- Basic_HwPWM/nbproject/configurations.xml | 47 -- .../CodeAssistancePathMapper.properties | 1 - .../nbproject/private/Default.properties | 0 .../nbproject/private/configurations.xml | 80 -- .../nbproject/private/launcher.properties | 40 - Basic_HwPWM/nbproject/private/private.xml | 16 - Basic_HwPWM/nbproject/project.xml | 26 - Sming/Makefile-project.mk | 2 +- Sming/Makefile-rboot.mk | 2 +- Sming/SmingCore/HW_PWM.cpp | 120 --- Sming/SmingCore/HW_PWM.h | 47 -- Sming/SmingCore/HardwarePWM.cpp | 110 +++ Sming/SmingCore/HardwarePWM.h | 49 ++ Sming/nbproject/configurations.xml | 91 --- .../CodeAssistancePathMapper.properties | 1 - Sming/nbproject/private/Default.properties | 11 - Sming/nbproject/private/configurations.xml | 756 ------------------ Sming/nbproject/private/launcher.properties | 40 - Sming/nbproject/private/private.xml | 17 - Sming/nbproject/project.xml | 26 - Sming/system/include/esp_systemapi.h | 9 - Sming/system/include/espinc/pwm.h | 34 - 28 files changed, 192 insertions(+), 1628 deletions(-) delete mode 100644 Basic_HwPWM/.settings/org.eclipse.cdt.codan.core.prefs delete mode 100644 Basic_HwPWM/.settings/org.eclipse.cdt.core.prefs delete mode 100644 Basic_HwPWM/.settings/org.eclipse.cdt.ui.prefs delete mode 100644 Basic_HwPWM/nbproject/configurations.xml delete mode 100644 Basic_HwPWM/nbproject/private/CodeAssistancePathMapper.properties delete mode 100644 Basic_HwPWM/nbproject/private/Default.properties delete mode 100644 Basic_HwPWM/nbproject/private/configurations.xml delete mode 100644 Basic_HwPWM/nbproject/private/launcher.properties delete mode 100644 Basic_HwPWM/nbproject/private/private.xml delete mode 100644 Basic_HwPWM/nbproject/project.xml delete mode 100644 Sming/SmingCore/HW_PWM.cpp delete mode 100644 Sming/SmingCore/HW_PWM.h create mode 100644 Sming/SmingCore/HardwarePWM.cpp create mode 100644 Sming/SmingCore/HardwarePWM.h delete mode 100644 Sming/nbproject/configurations.xml delete mode 100644 Sming/nbproject/private/CodeAssistancePathMapper.properties delete mode 100644 Sming/nbproject/private/Default.properties delete mode 100644 Sming/nbproject/private/configurations.xml delete mode 100644 Sming/nbproject/private/launcher.properties delete mode 100644 Sming/nbproject/private/private.xml delete mode 100644 Sming/nbproject/project.xml delete mode 100644 Sming/system/include/espinc/pwm.h diff --git a/Basic_HwPWM/.settings/org.eclipse.cdt.codan.core.prefs b/Basic_HwPWM/.settings/org.eclipse.cdt.codan.core.prefs deleted file mode 100644 index 77386c23cb..0000000000 --- a/Basic_HwPWM/.settings/org.eclipse.cdt.codan.core.prefs +++ /dev/null @@ -1,67 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.cdt.codan.checkers.errnoreturn=Warning -org.eclipse.cdt.codan.checkers.errnoreturn.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},implicit\=>false} -org.eclipse.cdt.codan.checkers.errreturnvalue=Error -org.eclipse.cdt.codan.checkers.errreturnvalue.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} -org.eclipse.cdt.codan.checkers.noreturn=Error -org.eclipse.cdt.codan.checkers.noreturn.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},implicit\=>false} -org.eclipse.cdt.codan.internal.checkers.AbstractClassCreation=Error -org.eclipse.cdt.codan.internal.checkers.AbstractClassCreation.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} -org.eclipse.cdt.codan.internal.checkers.AmbiguousProblem=Error -org.eclipse.cdt.codan.internal.checkers.AmbiguousProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} -org.eclipse.cdt.codan.internal.checkers.AssignmentInConditionProblem=Warning -org.eclipse.cdt.codan.internal.checkers.AssignmentInConditionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} -org.eclipse.cdt.codan.internal.checkers.AssignmentToItselfProblem=Error -org.eclipse.cdt.codan.internal.checkers.AssignmentToItselfProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} -org.eclipse.cdt.codan.internal.checkers.CaseBreakProblem=Warning -org.eclipse.cdt.codan.internal.checkers.CaseBreakProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},no_break_comment\=>"no break",last_case_param\=>false,empty_case_param\=>false} -org.eclipse.cdt.codan.internal.checkers.CatchByReference=Warning -org.eclipse.cdt.codan.internal.checkers.CatchByReference.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},unknown\=>false,exceptions\=>()} -org.eclipse.cdt.codan.internal.checkers.CircularReferenceProblem=Error -org.eclipse.cdt.codan.internal.checkers.CircularReferenceProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} -org.eclipse.cdt.codan.internal.checkers.ClassMembersInitialization=Warning -org.eclipse.cdt.codan.internal.checkers.ClassMembersInitialization.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},skip\=>true} -org.eclipse.cdt.codan.internal.checkers.FieldResolutionProblem=Error -org.eclipse.cdt.codan.internal.checkers.FieldResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} -org.eclipse.cdt.codan.internal.checkers.FunctionResolutionProblem=Error -org.eclipse.cdt.codan.internal.checkers.FunctionResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} -org.eclipse.cdt.codan.internal.checkers.InvalidArguments=Error -org.eclipse.cdt.codan.internal.checkers.InvalidArguments.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} -org.eclipse.cdt.codan.internal.checkers.InvalidTemplateArgumentsProblem=Error -org.eclipse.cdt.codan.internal.checkers.InvalidTemplateArgumentsProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} -org.eclipse.cdt.codan.internal.checkers.LabelStatementNotFoundProblem=Error -org.eclipse.cdt.codan.internal.checkers.LabelStatementNotFoundProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} -org.eclipse.cdt.codan.internal.checkers.MemberDeclarationNotFoundProblem=Error -org.eclipse.cdt.codan.internal.checkers.MemberDeclarationNotFoundProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} -org.eclipse.cdt.codan.internal.checkers.MethodResolutionProblem=Error -org.eclipse.cdt.codan.internal.checkers.MethodResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} -org.eclipse.cdt.codan.internal.checkers.NamingConventionFunctionChecker=-Info -org.eclipse.cdt.codan.internal.checkers.NamingConventionFunctionChecker.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},pattern\=>"^[a-z]",macro\=>true,exceptions\=>()} -org.eclipse.cdt.codan.internal.checkers.NonVirtualDestructorProblem=Warning -org.eclipse.cdt.codan.internal.checkers.NonVirtualDestructorProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} -org.eclipse.cdt.codan.internal.checkers.OverloadProblem=Error -org.eclipse.cdt.codan.internal.checkers.OverloadProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} -org.eclipse.cdt.codan.internal.checkers.RedeclarationProblem=Error -org.eclipse.cdt.codan.internal.checkers.RedeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} -org.eclipse.cdt.codan.internal.checkers.RedefinitionProblem=Error -org.eclipse.cdt.codan.internal.checkers.RedefinitionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} -org.eclipse.cdt.codan.internal.checkers.ReturnStyleProblem=-Warning -org.eclipse.cdt.codan.internal.checkers.ReturnStyleProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} -org.eclipse.cdt.codan.internal.checkers.ScanfFormatStringSecurityProblem=-Warning -org.eclipse.cdt.codan.internal.checkers.ScanfFormatStringSecurityProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} -org.eclipse.cdt.codan.internal.checkers.StatementHasNoEffectProblem=Warning -org.eclipse.cdt.codan.internal.checkers.StatementHasNoEffectProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},macro\=>true,exceptions\=>()} -org.eclipse.cdt.codan.internal.checkers.SuggestedParenthesisProblem=Warning -org.eclipse.cdt.codan.internal.checkers.SuggestedParenthesisProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},paramNot\=>false} -org.eclipse.cdt.codan.internal.checkers.SuspiciousSemicolonProblem=Warning -org.eclipse.cdt.codan.internal.checkers.SuspiciousSemicolonProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},else\=>false,afterelse\=>false} -org.eclipse.cdt.codan.internal.checkers.TypeResolutionProblem=Error -org.eclipse.cdt.codan.internal.checkers.TypeResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} -org.eclipse.cdt.codan.internal.checkers.UnusedFunctionDeclarationProblem=Warning -org.eclipse.cdt.codan.internal.checkers.UnusedFunctionDeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},macro\=>true} -org.eclipse.cdt.codan.internal.checkers.UnusedStaticFunctionProblem=Warning -org.eclipse.cdt.codan.internal.checkers.UnusedStaticFunctionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},macro\=>true} -org.eclipse.cdt.codan.internal.checkers.UnusedVariableDeclarationProblem=Warning -org.eclipse.cdt.codan.internal.checkers.UnusedVariableDeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},macro\=>true,exceptions\=>("@(\#)","$Id")} -org.eclipse.cdt.codan.internal.checkers.VariableResolutionProblem=Error -org.eclipse.cdt.codan.internal.checkers.VariableResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} diff --git a/Basic_HwPWM/.settings/org.eclipse.cdt.core.prefs b/Basic_HwPWM/.settings/org.eclipse.cdt.core.prefs deleted file mode 100644 index 8d41bca808..0000000000 --- a/Basic_HwPWM/.settings/org.eclipse.cdt.core.prefs +++ /dev/null @@ -1,163 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.cdt.core.formatter.alignment_for_arguments_in_method_invocation=16 -org.eclipse.cdt.core.formatter.alignment_for_assignment=16 -org.eclipse.cdt.core.formatter.alignment_for_base_clause_in_type_declaration=80 -org.eclipse.cdt.core.formatter.alignment_for_binary_expression=16 -org.eclipse.cdt.core.formatter.alignment_for_compact_if=16 -org.eclipse.cdt.core.formatter.alignment_for_conditional_expression=34 -org.eclipse.cdt.core.formatter.alignment_for_conditional_expression_chain=18 -org.eclipse.cdt.core.formatter.alignment_for_constructor_initializer_list=0 -org.eclipse.cdt.core.formatter.alignment_for_declarator_list=16 -org.eclipse.cdt.core.formatter.alignment_for_enumerator_list=48 -org.eclipse.cdt.core.formatter.alignment_for_expression_list=0 -org.eclipse.cdt.core.formatter.alignment_for_expressions_in_array_initializer=16 -org.eclipse.cdt.core.formatter.alignment_for_member_access=0 -org.eclipse.cdt.core.formatter.alignment_for_overloaded_left_shift_chain=16 -org.eclipse.cdt.core.formatter.alignment_for_parameters_in_method_declaration=16 -org.eclipse.cdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16 -org.eclipse.cdt.core.formatter.brace_position_for_array_initializer=next_line -org.eclipse.cdt.core.formatter.brace_position_for_block=next_line -org.eclipse.cdt.core.formatter.brace_position_for_block_in_case=next_line -org.eclipse.cdt.core.formatter.brace_position_for_method_declaration=next_line -org.eclipse.cdt.core.formatter.brace_position_for_namespace_declaration=next_line -org.eclipse.cdt.core.formatter.brace_position_for_switch=next_line -org.eclipse.cdt.core.formatter.brace_position_for_type_declaration=next_line -org.eclipse.cdt.core.formatter.comment.min_distance_between_code_and_line_comment=1 -org.eclipse.cdt.core.formatter.comment.never_indent_line_comments_on_first_column=true -org.eclipse.cdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=true -org.eclipse.cdt.core.formatter.compact_else_if=true -org.eclipse.cdt.core.formatter.continuation_indentation=2 -org.eclipse.cdt.core.formatter.continuation_indentation_for_array_initializer=2 -org.eclipse.cdt.core.formatter.format_guardian_clause_on_one_line=false -org.eclipse.cdt.core.formatter.indent_access_specifier_compare_to_type_header=false -org.eclipse.cdt.core.formatter.indent_access_specifier_extra_spaces=0 -org.eclipse.cdt.core.formatter.indent_body_declarations_compare_to_access_specifier=true -org.eclipse.cdt.core.formatter.indent_body_declarations_compare_to_namespace_header=false -org.eclipse.cdt.core.formatter.indent_breaks_compare_to_cases=true -org.eclipse.cdt.core.formatter.indent_declaration_compare_to_template_header=false -org.eclipse.cdt.core.formatter.indent_empty_lines=false -org.eclipse.cdt.core.formatter.indent_statements_compare_to_block=true -org.eclipse.cdt.core.formatter.indent_statements_compare_to_body=true -org.eclipse.cdt.core.formatter.indent_switchstatements_compare_to_cases=true -org.eclipse.cdt.core.formatter.indent_switchstatements_compare_to_switch=false -org.eclipse.cdt.core.formatter.indentation.size=4 -org.eclipse.cdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert -org.eclipse.cdt.core.formatter.insert_new_line_after_template_declaration=do not insert -org.eclipse.cdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert -org.eclipse.cdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert -org.eclipse.cdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert -org.eclipse.cdt.core.formatter.insert_new_line_before_colon_in_constructor_initializer_list=do not insert -org.eclipse.cdt.core.formatter.insert_new_line_before_else_in_if_statement=insert -org.eclipse.cdt.core.formatter.insert_new_line_before_identifier_in_function_declaration=do not insert -org.eclipse.cdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert -org.eclipse.cdt.core.formatter.insert_new_line_in_empty_block=insert -org.eclipse.cdt.core.formatter.insert_space_after_assignment_operator=insert -org.eclipse.cdt.core.formatter.insert_space_after_binary_operator=insert -org.eclipse.cdt.core.formatter.insert_space_after_closing_angle_bracket_in_template_arguments=insert -org.eclipse.cdt.core.formatter.insert_space_after_closing_angle_bracket_in_template_parameters=insert -org.eclipse.cdt.core.formatter.insert_space_after_closing_brace_in_block=insert -org.eclipse.cdt.core.formatter.insert_space_after_closing_paren_in_cast=insert -org.eclipse.cdt.core.formatter.insert_space_after_colon_in_base_clause=insert -org.eclipse.cdt.core.formatter.insert_space_after_colon_in_case=insert -org.eclipse.cdt.core.formatter.insert_space_after_colon_in_conditional=insert -org.eclipse.cdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert -org.eclipse.cdt.core.formatter.insert_space_after_comma_in_array_initializer=insert -org.eclipse.cdt.core.formatter.insert_space_after_comma_in_base_types=insert -org.eclipse.cdt.core.formatter.insert_space_after_comma_in_declarator_list=insert -org.eclipse.cdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert -org.eclipse.cdt.core.formatter.insert_space_after_comma_in_expression_list=insert -org.eclipse.cdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert -org.eclipse.cdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert -org.eclipse.cdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert -org.eclipse.cdt.core.formatter.insert_space_after_comma_in_template_arguments=insert -org.eclipse.cdt.core.formatter.insert_space_after_comma_in_template_parameters=insert -org.eclipse.cdt.core.formatter.insert_space_after_opening_angle_bracket_in_template_arguments=do not insert -org.eclipse.cdt.core.formatter.insert_space_after_opening_angle_bracket_in_template_parameters=do not insert -org.eclipse.cdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert -org.eclipse.cdt.core.formatter.insert_space_after_opening_bracket=do not insert -org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert -org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert -org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_exception_specification=do not insert -org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert -org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert -org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert -org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert -org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert -org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert -org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert -org.eclipse.cdt.core.formatter.insert_space_after_postfix_operator=do not insert -org.eclipse.cdt.core.formatter.insert_space_after_prefix_operator=do not insert -org.eclipse.cdt.core.formatter.insert_space_after_question_in_conditional=insert -org.eclipse.cdt.core.formatter.insert_space_after_semicolon_in_for=insert -org.eclipse.cdt.core.formatter.insert_space_after_unary_operator=do not insert -org.eclipse.cdt.core.formatter.insert_space_before_assignment_operator=insert -org.eclipse.cdt.core.formatter.insert_space_before_binary_operator=insert -org.eclipse.cdt.core.formatter.insert_space_before_closing_angle_bracket_in_template_arguments=do not insert -org.eclipse.cdt.core.formatter.insert_space_before_closing_angle_bracket_in_template_parameters=do not insert -org.eclipse.cdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert -org.eclipse.cdt.core.formatter.insert_space_before_closing_bracket=do not insert -org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert -org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert -org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_exception_specification=do not insert -org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert -org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert -org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert -org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert -org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert -org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert -org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert -org.eclipse.cdt.core.formatter.insert_space_before_colon_in_base_clause=do not insert -org.eclipse.cdt.core.formatter.insert_space_before_colon_in_case=do not insert -org.eclipse.cdt.core.formatter.insert_space_before_colon_in_conditional=insert -org.eclipse.cdt.core.formatter.insert_space_before_colon_in_default=do not insert -org.eclipse.cdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert -org.eclipse.cdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert -org.eclipse.cdt.core.formatter.insert_space_before_comma_in_base_types=do not insert -org.eclipse.cdt.core.formatter.insert_space_before_comma_in_declarator_list=do not insert -org.eclipse.cdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert -org.eclipse.cdt.core.formatter.insert_space_before_comma_in_expression_list=do not insert -org.eclipse.cdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert -org.eclipse.cdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert -org.eclipse.cdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert -org.eclipse.cdt.core.formatter.insert_space_before_comma_in_template_arguments=do not insert -org.eclipse.cdt.core.formatter.insert_space_before_comma_in_template_parameters=do not insert -org.eclipse.cdt.core.formatter.insert_space_before_opening_angle_bracket_in_template_arguments=do not insert -org.eclipse.cdt.core.formatter.insert_space_before_opening_angle_bracket_in_template_parameters=do not insert -org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert -org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_block=insert -org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert -org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_namespace_declaration=insert -org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_switch=insert -org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert -org.eclipse.cdt.core.formatter.insert_space_before_opening_bracket=do not insert -org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_catch=insert -org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_exception_specification=insert -org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_for=insert -org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_if=insert -org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert -org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert -org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert -org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_switch=insert -org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_while=insert -org.eclipse.cdt.core.formatter.insert_space_before_postfix_operator=do not insert -org.eclipse.cdt.core.formatter.insert_space_before_prefix_operator=do not insert -org.eclipse.cdt.core.formatter.insert_space_before_question_in_conditional=insert -org.eclipse.cdt.core.formatter.insert_space_before_semicolon=do not insert -org.eclipse.cdt.core.formatter.insert_space_before_semicolon_in_for=do not insert -org.eclipse.cdt.core.formatter.insert_space_before_unary_operator=do not insert -org.eclipse.cdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert -org.eclipse.cdt.core.formatter.insert_space_between_empty_brackets=do not insert -org.eclipse.cdt.core.formatter.insert_space_between_empty_parens_in_exception_specification=do not insert -org.eclipse.cdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert -org.eclipse.cdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert -org.eclipse.cdt.core.formatter.join_wrapped_lines=true -org.eclipse.cdt.core.formatter.keep_else_statement_on_same_line=false -org.eclipse.cdt.core.formatter.keep_empty_array_initializer_on_one_line=false -org.eclipse.cdt.core.formatter.keep_imple_if_on_one_line=false -org.eclipse.cdt.core.formatter.keep_then_statement_on_same_line=false -org.eclipse.cdt.core.formatter.lineSplit=80 -org.eclipse.cdt.core.formatter.number_of_empty_lines_to_preserve=1 -org.eclipse.cdt.core.formatter.put_empty_statement_on_new_line=true -org.eclipse.cdt.core.formatter.tabulation.char=tab -org.eclipse.cdt.core.formatter.tabulation.size=4 -org.eclipse.cdt.core.formatter.use_tabs_only_for_leading_indentations=false diff --git a/Basic_HwPWM/.settings/org.eclipse.cdt.ui.prefs b/Basic_HwPWM/.settings/org.eclipse.cdt.ui.prefs deleted file mode 100644 index 48a50c7083..0000000000 --- a/Basic_HwPWM/.settings/org.eclipse.cdt.ui.prefs +++ /dev/null @@ -1,3 +0,0 @@ -eclipse.preferences.version=1 -formatter_profile=org.eclipse.cdt.ui.default.allman_profile -formatter_settings_version=1 diff --git a/Basic_HwPWM/Makefile b/Basic_HwPWM/Makefile index 15b9309d06..16d76cd676 100644 --- a/Basic_HwPWM/Makefile +++ b/Basic_HwPWM/Makefile @@ -17,4 +17,8 @@ $(error ESP_HOME is not set. Please configure it in Makefile-user.mk) endif # Include main Sming Makefile -include $(SMING_HOME)/Makefile-project.mk \ No newline at end of file +ifeq ($(RBOOT_ENABLED), 1) +include $(SMING_HOME)/Makefile-rboot.mk +else +include $(SMING_HOME)/Makefile-project.mk +endif diff --git a/Basic_HwPWM/Makefile-user.mk b/Basic_HwPWM/Makefile-user.mk index bc53275f5b..b8a5198954 100644 --- a/Basic_HwPWM/Makefile-user.mk +++ b/Basic_HwPWM/Makefile-user.mk @@ -10,7 +10,7 @@ MODULES = app # ESP_HOME = c:/Espressif ## MacOS / Linux: -#ESP_HOME = /opt/esp-open-sdk +# ESP_HOME = /opt/esp-open-sdk ## SMING_HOME sets the path where Sming framework is located. ## Windows: @@ -27,4 +27,7 @@ MODULES = app # COM_PORT = /dev/tty.usbserial # Com port speed -# COM_SPEED = 115200 \ No newline at end of file +# COM_SPEED = 115200 + +## Configure flash parameters (for ESP12-E and other new boards): +# SPI_MODE = dio \ No newline at end of file diff --git a/Basic_HwPWM/app/application.cpp b/Basic_HwPWM/app/application.cpp index 50402ef3e3..c48c752424 100644 --- a/Basic_HwPWM/app/application.cpp +++ b/Basic_HwPWM/app/application.cpp @@ -1,50 +1,46 @@ /* - * File: Esp SDK Hardware PWM demo - * Author: https://github.com/hrsavla + * File: Esp SDK Hardware PWM demo + * Original Author: https://github.com/hrsavla * - * This HW_PWM library enables Sming framework user to use ESP SDK PWM API + * This HardwarePWM library enables Sming framework user to use ESP SDK PWM API * Period of PWM is fixed to 1000ms / Frequency = 1khz * Duty at 100% = 22222. Duty at 0% = 0 * You can use function setPeriod() to change frequency/period. * Calculate the Duty as per the formulae give in ESP8266 SDK * Duty = (Period *1000)/45 * - * PWM can be generated on upto 8 pins (ie All pins except pin 16) + * PWM can be generated on upto 8 pins (ie All pins except pin 16) * Created on August 17, 2015, 2:27 PM */ #include #include -#include +#include uint8_t pins[8] = { 4, 5, 0, 2, 15, 13, 12, 14 }; // List of pins that you want to connect to pwm -HWPWM HW_pwm(pins, 8); +HardwarePWM HW_pwm(pins, 8); Timer procTimer; -uint32 i = 0; -uint32 inc = 100; +int32 i = 0; +int32 inc = 100; bool countUp = true; -void doPWM() -{ - if(countUp == true) - { - i = i+ inc; - if (i >22222) - { +void doPWM() { + if (countUp == true) { + i += inc; + if (i >= 22222) { + i = 22222; countUp = false; } - } - else - { - i = i- inc; - if (i < inc) - { + } else { + i -= inc; + if (i <= 0) { + i = 0; countUp = true; } } - HW_pwm.analogWrite(2,i); + HW_pwm.analogWrite(2, i); } -void init() -{ + +void init() { Serial.begin(SERIAL_BAUD_RATE); // 115200 by default Serial.systemDebugOutput(true); // Enable debug output to serial @@ -62,10 +58,7 @@ void init() HW_pwm.analogWrite(12, 22222); HW_pwm.analogWrite(14, 11111); - debugf("PWM output set on all 8 Pins. Kindly check .."); + debugf("PWM output set on all 8 Pins. Kindly check..."); debugf("Now Pin 2 will go from 0 to VCC to 0 in cycles."); procTimer.initializeMs(100, doPWM).start(); } - - - diff --git a/Basic_HwPWM/nbproject/configurations.xml b/Basic_HwPWM/nbproject/configurations.xml deleted file mode 100644 index 14cc1347f8..0000000000 --- a/Basic_HwPWM/nbproject/configurations.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - application.cpp - - - - Makefile - - - ^(nbproject)$ - - . - - Makefile - - - - default - false - false - - - - - - . - ${MAKE} -f Makefile - ${MAKE} -f Makefile clean - - - - app - - - - - - - - - diff --git a/Basic_HwPWM/nbproject/private/CodeAssistancePathMapper.properties b/Basic_HwPWM/nbproject/private/CodeAssistancePathMapper.properties deleted file mode 100644 index 7f5ded8feb..0000000000 --- a/Basic_HwPWM/nbproject/private/CodeAssistancePathMapper.properties +++ /dev/null @@ -1 +0,0 @@ -# Automatic path mapper. CRC = 1 diff --git a/Basic_HwPWM/nbproject/private/Default.properties b/Basic_HwPWM/nbproject/private/Default.properties deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/Basic_HwPWM/nbproject/private/configurations.xml b/Basic_HwPWM/nbproject/private/configurations.xml deleted file mode 100644 index 9cdbcf42fb..0000000000 --- a/Basic_HwPWM/nbproject/private/configurations.xml +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - application.cpp - - - user_config.h - - - - - - - - - - - - - - - - - - - - - - Makefile - - - - localhost - 3 - - - - . - ${AUTO_FOLDER} - - ${AUTO_FOLDER} - - ${MAKE} ${ITEM_NAME}.o - ${AUTO_COMPILE} - - ${AUTO_COMPILE} - - - - - - - - - - - - - - - gdb - - - - "${OUTPUT_PATH}" - Make flash - - Make flash - . - false - 0 - 0 - - - - - - diff --git a/Basic_HwPWM/nbproject/private/launcher.properties b/Basic_HwPWM/nbproject/private/launcher.properties deleted file mode 100644 index 6cc2127d07..0000000000 --- a/Basic_HwPWM/nbproject/private/launcher.properties +++ /dev/null @@ -1,40 +0,0 @@ -# Launchers File syntax: -# -# [Must-have property line] -# launcher1.runCommand= -# [Optional extra properties] -# launcher1.displayName= -# launcher1.buildCommand= -# launcher1.runDir= -# launcher1.symbolFiles= -# launcher1.env.= -# (If this value is quoted with ` it is handled as a native command which execution result will become the value) -# [Common launcher properties] -# common.runDir= -# (This value is overwritten by a launcher specific runDir value if the latter exists) -# common.env.= -# (Environment variables from common launcher are merged with launcher specific variables) -# common.symbolFiles= -# (This value is overwritten by a launcher specific symbolFiles value if the latter exists) -# -# In runDir, symbolFiles and env fields you can use these macroses: -# ${PROJECT_DIR} - project directory absolute path -# ${OUTPUT_PATH} - linker output path (relative to project directory path) -# ${OUTPUT_BASENAME}- linker output filename -# ${TESTDIR} - test files directory (relative to project directory path) -# ${OBJECTDIR} - object files directory (relative to project directory path) -# ${CND_DISTDIR} - distribution directory (relative to project directory path) -# ${CND_BUILDDIR} - build directory (relative to project directory path) -# ${CND_PLATFORM} - platform name -# ${CND_CONF} - configuration name -# ${CND_DLIB_EXT} - dynamic library extension -# -# All the project launchers must be listed in the file! -# -# launcher1.runCommand=... -# launcher2.runCommand=... -# ... -# common.runDir=... -# common.env.KEY=VALUE - -# launcher1.runCommand= \ No newline at end of file diff --git a/Basic_HwPWM/nbproject/private/private.xml b/Basic_HwPWM/nbproject/private/private.xml deleted file mode 100644 index 46b1652cab..0000000000 --- a/Basic_HwPWM/nbproject/private/private.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - true - - - 0 - 0 - - - - - file:/C:/tools/MySming/Basic_HwPWM/app/application.cpp - - - diff --git a/Basic_HwPWM/nbproject/project.xml b/Basic_HwPWM/nbproject/project.xml deleted file mode 100644 index 87cc45835c..0000000000 --- a/Basic_HwPWM/nbproject/project.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - org.netbeans.modules.cnd.makeproject - - - Basic_HwPWM - - cpp - h - UTF-8 - - - . - - - - Default - 0 - - - - false - - - - diff --git a/Sming/Makefile-project.mk b/Sming/Makefile-project.mk index 6b68b2ea48..040004e49a 100644 --- a/Sming/Makefile-project.mk +++ b/Sming/Makefile-project.mk @@ -128,7 +128,7 @@ EXTRA_INCDIR ?= include $(SMING_HOME)/include $(SMING_HOME)/ $(SMING_HOME)/sy # libraries used in this project, mainly provided by the SDK USER_LIBDIR = $(SMING_HOME)/compiler/lib/ -LIBS = microc microgcc hal phy pp net80211 lwip wpa main sming $(EXTRA_LIBS) +LIBS = microc microgcc hal phy pp net80211 lwip wpa main sming pwm $(EXTRA_LIBS) # compiler flags using during compilation of source files CFLAGS = -Os -g -Wpointer-arith -Wundef -Werror -Wl,-EL -nostdlib -mlongcalls -mtext-section-literals -finline-functions -fdata-sections -ffunction-sections -D__ets__ -DICACHE_FLASH -DARDUINO=106 diff --git a/Sming/Makefile-rboot.mk b/Sming/Makefile-rboot.mk index 6a576a5272..c079682400 100644 --- a/Sming/Makefile-rboot.mk +++ b/Sming/Makefile-rboot.mk @@ -153,7 +153,7 @@ else endif # libraries used in this project, mainly provided by the SDK USER_LIBDIR = $(SMING_HOME)/compiler/lib/ -LIBS = microc microgcc hal phy pp net80211 lwip wpa $(LIBMAIN) sming $(EXTRA_LIBS) +LIBS = microc microgcc hal phy pp net80211 lwip wpa $(LIBMAIN) sming pwm $(EXTRA_LIBS) # we will use global WiFi settings from Eclipse Environment Variables, if possible WIFI_SSID ?= "" diff --git a/Sming/SmingCore/HW_PWM.cpp b/Sming/SmingCore/HW_PWM.cpp deleted file mode 100644 index 56be56ee2d..0000000000 --- a/Sming/SmingCore/HW_PWM.cpp +++ /dev/null @@ -1,120 +0,0 @@ -/* - * File: HW_PWM.cpp - * Author: https://github.com/hrsavla - * - * This HW_PWM library enables Sming framework user to use ESP SDK PWM API - * Period of PWM is fixed to 1000ms / Frequency = 1khz - * Duty at 100% = 22222. Duty at 0% = 0 - * You can use function setPeriod() to change frequency/period. - * Calculate the Duty as per the formulae give in ESP8266 SDK - * Duty = (Period *1000)/45 - * - * PWM can be generated on upto 8 pins (ie All pins except pin 16) - * Created on August 17, 2015, 2:27 PM - */ -#include "../SmingCore/HW_PWM.h" -#include "../SmingCore/Clock.h" -#include "../Wiring/WiringFrameworkIncludes.h" - -HWPWM::HWPWM(uint8_t* pins, int no_of_pins) { - if (no_of_pins > 0) { - for (uint8_t i = 0; i < no_of_pins; i++) { - io_info[i][0] = EspDigitalPins[pins[i]].mux; - io_info[i][1] = EspDigitalPins[pins[i]].gpioFunc; - io_info[i][2] = EspDigitalPins[pins[i]].id; - pwm_duty_init[i] = 0; // Start with zero output - channel[i] = pins[i]; - } - pwm_init(1000,pwm_duty_init,no_of_pins,io_info); - pwm_start(); // Lets not start pwm just after init - } -} - -HWPWM::~HWPWM() { - // There are not functions in SDK to stop PWM output. Let's hope they put - // it in future. -} - -/* Function Name: getChannel - * Description: This function is used to get channel number for given pin - * Parameters: pin -Esp8266 pin number - */ -uint8_t HWPWM::getChannel(uint8_t pin) -{ - for(uint8_t i=0;i 0) { + uint32 io_info[PWM_CHANNEL_NUM_MAX][3]; // pin information + uint32 pwm_duty_init[PWM_CHANNEL_NUM_MAX]; // pwm duty + for (uint8 i = 0; i < no_of_pins; i++) { + io_info[i][0] = EspDigitalPins[pins[i]].mux; + io_info[i][1] = EspDigitalPins[pins[i]].gpioFunc; + io_info[i][2] = EspDigitalPins[pins[i]].id; + pwm_duty_init[i] = 0; // Start with zero output + channels[i] = pins[i]; + } + pwm_init(1000, pwm_duty_init, no_of_pins, io_info); + pwm_start(); + } +} + +HardwarePWM::~HardwarePWM() { + // There is no function in the SDK to stop PWM output, yet. +} + +/* Function Name: getChannel + * Description: This function is used to get channel number for given pin + * Parameters: pin - Esp8266 pin number + */ +uint8 HardwarePWM::getChannel(uint8 pin) { + for (uint8 i = 0; i < channel_count; i++) { + if (channels[i] == pin) { + //debugf("getChannel %d is %d", pin, i); + return i; + } + } + //debugf("getChannel: can't find pin %d", pin); + return PWM_BAD_CHANNEL; +} + +/* Function Name: analogWrite + * Description: This function is used to set the pwm duty cycle for a given pin + * Parameters: pin - Esp8266 pin number + * duty - duty cycle value (valid values are 0-22222) + * Default frequency is 1khz but can be varied by various function + */ +void HardwarePWM::analogWrite(uint8 pin, uint32 duty) { + setDuty(pin, duty); +} + +/* Function Name: getDuty + * Description: This function is used to get the duty cycle number for a given pin + * Parameters: pin -Esp8266 pin number + */ +uint32 HardwarePWM::getDuty(uint8 pin) { + uint8 chan = getChannel(pin); + if (chan == PWM_BAD_CHANNEL) return 0; + else return pwm_get_duty(chan); +} + +/* Function Name: setDuty + * Description: This function is used to set the pwm duty cycle for a given pin + * Parameters: pin - pin number + * duty - duty cycle value (valid values are 0-22222) + */ +void HardwarePWM::setDuty(uint8 pin, uint32 duty) { + uint8 chan = getChannel(pin); + if (chan == PWM_BAD_CHANNEL) return; + if (duty <= 22222) { + pwm_set_duty(duty, chan); + pwm_start(); + delay(25); // delay is needed otherwise PWM is not set + } else { + debugf("Duty cycle value too high. Should be less than 22222."); + } +} + +/* Function Name: getPeriod + * Description: This function is used to get Period of PWM. + * Period / frequency will remain same for all pins. + * + */ +uint32 HardwarePWM::getPeriod() { + return pwm_get_period(); +} + +/* Function Name: setPeriod + * Description: This function is used to set Period of PWM. + * Period / frequency will remain same for all pins. + */ +void HardwarePWM::setPeriod(uint32 period) { + pwm_set_period(period); + pwm_start(); +} diff --git a/Sming/SmingCore/HardwarePWM.h b/Sming/SmingCore/HardwarePWM.h new file mode 100644 index 0000000000..1b5aa0b948 --- /dev/null +++ b/Sming/SmingCore/HardwarePWM.h @@ -0,0 +1,49 @@ +/* + * File: HardwarePWM.h + * Original Author: https://github.com/hrsavla + * + * This HW_PWM library enables Sming framework user to use ESP SDK PWM API + * Period of PWM is fixed to 1000ms / Frequency = 1khz + * Duty at 100% = 22222. Duty at 0% = 0 + * You can use function setPeriod() to change frequency/period. + * Calculate the Duty as per the formulae give in ESP8266 SDK + * Duty = (Period *1000)/45 + * + * PWM can be generated on upto 8 pins (ie All pins except pin 16) + * Created on August 17, 2015, 2:27 PM + */ + +#ifndef HARDWAREPWM_H +#define HARDWAREPWM_H + +#include "ESP8266EX.h" +#include "../Wiring/WiringFrameworkDependencies.h" + +#ifdef __cplusplus +extern "C" { +#endif +#include +#ifdef __cplusplus +} +#endif + +#define PWM_BAD_CHANNEL 0xff + +class HardwarePWM { +public: + HardwarePWM(uint8 *pins, uint8 no_of_pins); + virtual ~HardwarePWM(); + void analogWrite(uint8 pin, uint32 duty); + void setDuty(uint8 pin, uint32 duty); + uint32 getDuty(uint8 pin); + void setPeriod(uint32 period); + uint32 getPeriod(void); + uint8 getChannel(uint8 pin); +protected: + +private: + uint8 channel_count; + uint8 channels[PWM_CHANNEL_NUM_MAX]; +}; + +#endif /* HARDWAREPWM_H */ diff --git a/Sming/nbproject/configurations.xml b/Sming/nbproject/configurations.xml deleted file mode 100644 index 852380934c..0000000000 --- a/Sming/nbproject/configurations.xml +++ /dev/null @@ -1,91 +0,0 @@ - - - - - - - glcdfont.c - - - hspi.c - - - - - ff.c - - - libemqtt.c - - - spiffs.c - spiffs_cache.c - spiffs_check.c - spiffs_gc.c - spiffs_hydrogen.c - spiffs_nucleus.c - - - - flashmem.c - - - - Makefile - - - ^(nbproject)$ - - . - - Makefile - - - - default - false - false - - - - - - . - ${MAKE} -f Makefile - ${MAKE} -f Makefile clean - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Sming/nbproject/private/CodeAssistancePathMapper.properties b/Sming/nbproject/private/CodeAssistancePathMapper.properties deleted file mode 100644 index 7f5ded8feb..0000000000 --- a/Sming/nbproject/private/CodeAssistancePathMapper.properties +++ /dev/null @@ -1 +0,0 @@ -# Automatic path mapper. CRC = 1 diff --git a/Sming/nbproject/private/Default.properties b/Sming/nbproject/private/Default.properties deleted file mode 100644 index a6913e6fb6..0000000000 --- a/Sming/nbproject/private/Default.properties +++ /dev/null @@ -1,11 +0,0 @@ -C:\tools\MySming\Sming\system\flashmem.c=C:\tools\MySming\Sming#CC system/flashmem.c -C:\tools\MySming\Sming\Services\SpifFS\spiffs_check.c=C:\tools\MySming\Sming#CC Services/SpifFS/spiffs_check.c -C:\tools\MySming\Sming\Services\SpifFS\spiffs_cache.c=C:\tools\MySming\Sming#CC Services/SpifFS/spiffs_cache.c -C:\tools\MySming\Sming\Services\SpifFS\spiffs_gc.c=C:\tools\MySming\Sming#CC Services/SpifFS/spiffs_gc.c -C:\tools\MySming\Sming\Services\SpifFS\spiffs_nucleus.c=C:\tools\MySming\Sming#CC Services/SpifFS/spiffs_nucleus.c -C:\tools\MySming\Sming\Services\SpifFS\spiffs.c=C:\tools\MySming\Sming#CC Services/SpifFS/spiffs.c -C:\tools\MySming\Sming\Services\SpifFS\spiffs_hydrogen.c=C:\tools\MySming\Sming#CC Services/SpifFS/spiffs_hydrogen.c -C:\tools\MySming\Sming\Services\libemqtt\libemqtt.c=C:\tools\MySming\Sming#CC Services/libemqtt/libemqtt.c -C:\tools\MySming\Sming\Services\FATFS\ff.c=C:\tools\MySming\Sming#CC Services/FATFS/ff.c -C:\tools\MySming\Sming\Libraries\Adafruit_GFX\glcdfont.c=C:\tools\MySming\Sming#CC Libraries/Adafruit_GFX/glcdfont.c -C:\tools\MySming\Sming\Libraries\Adafruit_ILI9341\hspi.c=C:\tools\MySming\Sming#CC Libraries/Adafruit_ILI9341/hspi.c diff --git a/Sming/nbproject/private/configurations.xml b/Sming/nbproject/private/configurations.xml deleted file mode 100644 index d8e3afb2f3..0000000000 --- a/Sming/nbproject/private/configurations.xml +++ /dev/null @@ -1,756 +0,0 @@ - - - - - - user_main.cpp - - - apptest.cpp - - - - - - - - - - - user_config.h - - - - Adafruit_GFX.cpp - Adafruit_GFX.h - glcdfont.c - - - - - - - - - - - - - - - - - Adafruit_ILI9341.cpp - Adafruit_ILI9341.h - hspi.c - hspi.h - spi_register.h - - - - - - - Adafruit_PCD8544.cpp - Adafruit_PCD8544.h - - - - - - - - - - - - - Adafruit_SSD1306.cpp - Adafruit_SSD1306.h - - - - - - - - - BH1750FVI.cpp - BH1750FVI.h - - - - - BMP180.cpp - BMP180.h - - - - - - - - - - - - - - - Bounce.cpp - Bounce.h - - - - - - - CapacitiveSensor.cpp - CapacitiveSensor.h - - - DHT.cpp - DHT.h - - - - - - - HMC5883L.cpp - HMC5883L.h - - - I2Cdev.cpp - I2Cdev.h - - - IRremote.cpp - IRremote.h - IRremoteInt.h - - - - - - - - - - - - - - - - - - - - - - - - - - - - - FastIO.cpp - FastIO.h - I2CIO.cpp - I2CIO.h - LCD.cpp - LCD.h - LiquidCrystal.cpp - LiquidCrystal.h - LiquidCrystal_I2C.cpp - LiquidCrystal_I2C.h - LiquidCrystal_SR.cpp - LiquidCrystal_SR.h - LiquidCrystal_SR2W.cpp - LiquidCrystal_SR2W.h - LiquidCrystal_SR3W.cpp - LiquidCrystal_SR3W.h - - - - - - - - - - - - - - - - - Mirf.cpp - Mirf.h - MirfHardwareSpi85Driver.h - MirfHardwareSpiDriver.h - MirfSpiDriver.h - Mirf_nRF24L01.h - - - - - - - MMA_7455.cpp - MMA_7455.h - - - - - - - - - - - OneWire.cpp - OneWire.h - - - - - printf.h - - - printf.h - - - printf.h - - - printf.h - - - printf.h - - - printf.h - - - main.cpp - - - printf.h - - - printf.h - - - printf.h - - - printf.h - - - - - printf.h - - - printf.h - - - printf.h - - - RF24.cpp - RF24.h - RF24_config.h - nRF24L01.h - - - SDCard.cpp - SDCard.h - - - si4432.cpp - si4432.h - - - - - - - - - - - - - - - TFT_ILI9163C.cpp - TFT_ILI9163C.h - - - - - Ultrasonic.cpp - Ultrasonic.h - - - WS2812.cpp - WS2812.h - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - IndentedPrint.hpp - JsonBufferAllocated.hpp - JsonParser.hpp - JsonPrintable.hpp - JsonStringStorage.hpp - JsonVariantContent.hpp - JsonVariantType.hpp - JsonWriter.hpp - List.hpp - ListConstIterator.hpp - ListIterator.hpp - ListNode.hpp - Prettyfier.hpp - QuotedString.hpp - ReferenceType.hpp - StringBuilder.hpp - - DynamicJsonBuffer.hpp - JsonArray.hpp - JsonBuffer.hpp - JsonObject.hpp - JsonPair.hpp - JsonVariant.hpp - StaticJsonBuffer.hpp - - ArduinoJson.h - - - - - - IndentedPrint.cpp - JsonParser.cpp - List.cpp - Prettyfier.cpp - QuotedString.cpp - StringBuilder.cpp - - JsonArray.cpp - JsonBuffer.cpp - JsonObject.cpp - JsonVariant.cpp - - ArduinoJson.cpp - ArduinoJson.h - - - CommandDelegate.cpp - CommandDelegate.h - CommandExecutor.cpp - CommandExecutor.h - CommandHandler.cpp - CommandHandler.h - CommandOutput.cpp - CommandOutput.h - CommandProcessingDependencies.h - CommandProcessingIncludes.h - - - websocket.cpp - websocket.h - - - DateTime.cpp - DateTime.h - - - diskio.h - ff.c - ff.h - ffconf.h - integer.h - - - libemqtt.c - libemqtt.h - - - - - spiffs.c - spiffs.h - spiffs_cache.c - spiffs_check.c - spiffs_config.h - spiffs_gc.c - spiffs_hydrogen.c - spiffs_nucleus.c - spiffs_nucleus.h - - - aw-sha1.h - base64.cpp - base64.h - escape.cpp - escape.h - - - - - FTPServer.cpp - FTPServer.h - FTPServerConnection.cpp - FTPServerConnection.h - HttpClient.cpp - HttpClient.h - HttpFirmwareUpdate.cpp - HttpFirmwareUpdate.h - HttpRequest.cpp - HttpRequest.h - HttpResponse.cpp - HttpResponse.h - HttpServer.cpp - HttpServer.h - HttpServerConnection.cpp - HttpServerConnection.h - MqttClient.cpp - MqttClient.h - NetUtils.cpp - NetUtils.h - NtpClient.cpp - NtpClient.h - TcpClient.cpp - TcpClient.h - TcpConnection.cpp - TcpConnection.h - TcpServer.cpp - TcpServer.h - TelnetServer.cpp - TelnetServer.h - URL.cpp - URL.h - UdpConnection.cpp - UdpConnection.h - WebConstants.h - WebSocket.cpp - WebSocket.h - - - AccessPoint.cpp - AccessPoint.h - RTC.cpp - RTC.h - Station.cpp - Station.h - System.cpp - System.h - WDT.cpp - WDT.h - - Boards.h - Clock.cpp - Clock.h - DataSourceStream.cpp - DataSourceStream.h - Debug.cpp - Debug.h - Delegate.h - Digital.cpp - Digital.h - ESP8266EX.cpp - ESP8266EX.h - FileSystem.cpp - FileSystem.h - HW_PWM.cpp - HW_PWM.h - HardwareSerial.cpp - HardwareSerial.h - Interrupts.cpp - Interrupts.h - PWM.cpp - PWM.h - SPI.cpp - SPI.h - SPISoft.cpp - SPISoft.h - SmingCore.h - SystemClock.cpp - SystemClock.h - Timer.cpp - Timer.h - Wire.cpp - Wire.h - pins_arduino.h - - - - - cc.h - perf.h - sys_arch.h - - - c_types_compatible.h - lwip_includes.h - pwm.h - spi_register.h - uart.h - uart_register.h - - - - dhcpserver.h - espconn.h - espconn_tcp.h - espconn_udp.h - ping.h - - api.h - api_msg.h - arch.h - autoip.h - debug.h - def.h - dhcp.h - dns.h - err.h - icmp.h - igmp.h - inet.h - inet_chksum.h - init.h - ip.h - ip_addr.h - ip_frag.h - mem.h - memp.h - memp_std.h - netbuf.h - netdb.h - netif.h - netifapi.h - opt.h - pbuf.h - raw.h - sio.h - snmp.h - snmp_asn1.h - snmp_msg.h - snmp_structs.h - sockets.h - stats.h - sys.h - tcp.h - tcp_impl.h - tcpip.h - timers.h - udp.h - - esp_cplusplus.h - esp_systemapi.h - lwipopts.h - mem_manager.h - stringconversion.h - - esp_cplusplus.cpp - flashmem.c - flashmem.h - irq_check.s - m_printf.cpp - stringconversion.cpp - - - Arduino.h - Binary.h - BitManipulations.h - Countable.h - Display.h - FIFO.h - FILO.h - FakePgmSpace.cpp - FakePgmSpace.h - I2cMaster.cpp - I2cMaster.h - IPAddress.cpp - IPAddress.h - Print.cpp - Print.h - Printable.h - SplitString.cpp - SplitString.h - Stream.cpp - Stream.h - WCharacter.h - WConstants.h - WHashMap.h - WMath.cpp - WMath.h - WProgram.h - WShift.cpp - WShift.h - WString.cpp - WString.h - WVector.h - WiringFrameworkDependencies.h - WiringFrameworkIncludes.h - wiring_private.h - - - - Makefile - - - - localhost - 3 - - - - . - ${AUTO_FOLDER} - - ${AUTO_FOLDER} - - ${MAKE} ${ITEM_NAME}.o - ${AUTO_COMPILE} - - ${AUTO_COMPILE} - - - - - - - - - - - - - - - gdb - - - - "${OUTPUT_PATH}" - - "${OUTPUT_PATH}" - . - false - 0 - 0 - - - - - - diff --git a/Sming/nbproject/private/launcher.properties b/Sming/nbproject/private/launcher.properties deleted file mode 100644 index 6cc2127d07..0000000000 --- a/Sming/nbproject/private/launcher.properties +++ /dev/null @@ -1,40 +0,0 @@ -# Launchers File syntax: -# -# [Must-have property line] -# launcher1.runCommand= -# [Optional extra properties] -# launcher1.displayName= -# launcher1.buildCommand= -# launcher1.runDir= -# launcher1.symbolFiles= -# launcher1.env.= -# (If this value is quoted with ` it is handled as a native command which execution result will become the value) -# [Common launcher properties] -# common.runDir= -# (This value is overwritten by a launcher specific runDir value if the latter exists) -# common.env.= -# (Environment variables from common launcher are merged with launcher specific variables) -# common.symbolFiles= -# (This value is overwritten by a launcher specific symbolFiles value if the latter exists) -# -# In runDir, symbolFiles and env fields you can use these macroses: -# ${PROJECT_DIR} - project directory absolute path -# ${OUTPUT_PATH} - linker output path (relative to project directory path) -# ${OUTPUT_BASENAME}- linker output filename -# ${TESTDIR} - test files directory (relative to project directory path) -# ${OBJECTDIR} - object files directory (relative to project directory path) -# ${CND_DISTDIR} - distribution directory (relative to project directory path) -# ${CND_BUILDDIR} - build directory (relative to project directory path) -# ${CND_PLATFORM} - platform name -# ${CND_CONF} - configuration name -# ${CND_DLIB_EXT} - dynamic library extension -# -# All the project launchers must be listed in the file! -# -# launcher1.runCommand=... -# launcher2.runCommand=... -# ... -# common.runDir=... -# common.env.KEY=VALUE - -# launcher1.runCommand= \ No newline at end of file diff --git a/Sming/nbproject/private/private.xml b/Sming/nbproject/private/private.xml deleted file mode 100644 index 3866820ea0..0000000000 --- a/Sming/nbproject/private/private.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - true - - - 0 - 0 - - - - - file:/C:/tools/MySming/Sming/SmingCore/HW_PWM.cpp - file:/C:/tools/MySming/Sming/SmingCore/HW_PWM.h - - - diff --git a/Sming/nbproject/project.xml b/Sming/nbproject/project.xml deleted file mode 100644 index 1f5dbc3e74..0000000000 --- a/Sming/nbproject/project.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - org.netbeans.modules.cnd.makeproject - - - Sming - c - cpp - h,hpp - UTF-8 - - - . - - - - Default - 0 - - - - false - - - - diff --git a/Sming/system/include/esp_systemapi.h b/Sming/system/include/esp_systemapi.h index c45b211eb3..499f98f72a 100644 --- a/Sming/system/include/esp_systemapi.h +++ b/Sming/system/include/esp_systemapi.h @@ -90,15 +90,6 @@ extern void ets_intr_unlock(); extern void ets_update_cpu_frequency(uint32_t frq); extern uint32_t ets_get_cpu_frequency(); -//SDK Pwm API -extern void pwm_start(void); -extern void pwm_init(uint32 period, uint32 *duty,uint32 pwm_channel_num,uint32 (*pin_info_list)[3]); -extern void pwm_set_duty(uint32 duty, uint8 channel); -extern uint32 pwm_get_duty(uint8 channel); -extern void pwm_set_period(uint32 period); -extern uint32 pwm_get_period(void); -extern uint32 get_pwm_version(void); - typedef signed short file_t; #endif diff --git a/Sming/system/include/espinc/pwm.h b/Sming/system/include/espinc/pwm.h deleted file mode 100644 index ab41658a28..0000000000 --- a/Sming/system/include/espinc/pwm.h +++ /dev/null @@ -1,34 +0,0 @@ -#ifndef __PWM_H__ -#define __PWM_H__ - -/*pwm.h: function and macro definition of PWM API , driver level */ -/*user_light.h: user interface for light API, user level*/ -/*user_light_adj: API for color changing and lighting effects, user level*/ - - - /*NOTE!! : DO NOT CHANGE THIS FILE*/ - - /*SUPPORT UP TO 8 PWM CHANNEL*/ -#define PWM_CHANNEL_NUM_MAX 8 - -struct pwm_param { - uint32 period; - uint32 freq; - uint32 duty[PWM_CHANNEL_NUM_MAX]; //PWM_CHANNEL<=8 -}; - - -/* pwm_init should be called only once, for now */ -void pwm_init(uint32 period, uint32 *duty,uint32 pwm_channel_num,uint32 (*pin_info_list)[3]); -void pwm_start(void); - -void pwm_set_duty(uint32 duty, uint8 channel); -uint32 pwm_get_duty(uint8 channel); -void pwm_set_period(uint32 period); -uint32 pwm_get_period(void); - -uint32 get_pwm_version(void); -void set_pwm_debug_en(uint8 print_en); - -#endif - From ac573bcdcc905c74c85bdff0072d01d839c498b9 Mon Sep 17 00:00:00 2001 From: Richard Antony Burton Date: Sat, 31 Oct 2015 08:44:24 +0000 Subject: [PATCH 04/54] message fix closes #199 --- Sming/SmingCore/Network/TcpServer.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Sming/SmingCore/Network/TcpServer.cpp b/Sming/SmingCore/Network/TcpServer.cpp index 1ba3ab523b..fc766bd6e1 100644 --- a/Sming/SmingCore/Network/TcpServer.cpp +++ b/Sming/SmingCore/Network/TcpServer.cpp @@ -128,7 +128,7 @@ err_t TcpServer::onAccept(tcp_pcb *clientTcp, err_t err) void TcpServer::onClient(TcpClient *client) { activeClients++; - debugf("TcpServer onClient %s, activeClients = %d\r\n ",client->getRemoteIp().toString().c_str(),activeClients); + debugf("TcpServer onClient: %s\r\n", client->getRemoteIp().toString().c_str()); if (clientConnectDelegate) { clientConnectDelegate(client); @@ -138,7 +138,7 @@ void TcpServer::onClient(TcpClient *client) void TcpServer::onClientComplete(TcpClient& client, bool succesfull) { activeClients--; - debugf("TcpSever onComplete : %s activeClients = %d\r\n",client.getRemoteIp().toString().c_str(),activeClients ); + debugf("TcpSever onComplete: %s\r\n", client.getRemoteIp().toString().c_str()); if (clientCompleteDelegate) { clientCompleteDelegate(client,succesfull); @@ -147,8 +147,8 @@ void TcpServer::onClientComplete(TcpClient& client, bool succesfull) bool TcpServer::onClientReceive (TcpClient& client, char *data, int size) { - debugf("TcpSever onReceive : %s, %d bytes \r\n",client.getRemoteIp().toString().c_str(),size ); - debugf("Data : %s", data); + debugf("TcpSever onReceive: %s, %d bytes\r\n", client.getRemoteIp().toString().c_str(), size); + debugf("Data: %s", data); if (clientReceiveDelegate) { return clientReceiveDelegate(client, data, size); From 0a4404a33159e61e73deef41cb6e350d8da2578a Mon Sep 17 00:00:00 2001 From: Richard Antony Burton Date: Sat, 31 Oct 2015 09:08:34 +0000 Subject: [PATCH 05/54] pass USER_CFLAGS varaible to compiler, for user defines etc --- Sming/Makefile-project.mk | 2 +- Sming/Makefile-rboot.mk | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Sming/Makefile-project.mk b/Sming/Makefile-project.mk index 6b68b2ea48..3e3e3684ea 100644 --- a/Sming/Makefile-project.mk +++ b/Sming/Makefile-project.mk @@ -131,7 +131,7 @@ USER_LIBDIR = $(SMING_HOME)/compiler/lib/ LIBS = microc microgcc hal phy pp net80211 lwip wpa main sming $(EXTRA_LIBS) # compiler flags using during compilation of source files -CFLAGS = -Os -g -Wpointer-arith -Wundef -Werror -Wl,-EL -nostdlib -mlongcalls -mtext-section-literals -finline-functions -fdata-sections -ffunction-sections -D__ets__ -DICACHE_FLASH -DARDUINO=106 +CFLAGS = -Os -g -Wpointer-arith -Wundef -Werror -Wl,-EL -nostdlib -mlongcalls -mtext-section-literals -finline-functions -fdata-sections -ffunction-sections -D__ets__ -DICACHE_FLASH -DARDUINO=106 $(USER_CFLAGS) CXXFLAGS = $(CFLAGS) -fno-rtti -fno-exceptions -std=c++11 -felide-constructors # we will use global WiFi settings from Eclipse Environment Variables, if possible diff --git a/Sming/Makefile-rboot.mk b/Sming/Makefile-rboot.mk index 6a576a5272..7e796cefff 100644 --- a/Sming/Makefile-rboot.mk +++ b/Sming/Makefile-rboot.mk @@ -138,7 +138,7 @@ MODULES += $(SMING_HOME)/rboot/appcode EXTRA_INCDIR ?= include $(SMING_HOME)/include $(SMING_HOME)/ $(SMING_HOME)/system/include $(SMING_HOME)/Wiring $(SMING_HOME)/Libraries $(SMING_HOME)/SmingCore $(SDK_BASE)/../include $(SMING_HOME)/rboot $(SMING_HOME)/rboot/appcode # compiler flags using during compilation of source files -CFLAGS = -Os -g -Wpointer-arith -Wundef -Werror -Wl,-EL -nostdlib -mlongcalls -mtext-section-literals -finline-functions -fdata-sections -ffunction-sections -D__ets__ -DICACHE_FLASH -DARDUINO=106 +CFLAGS = -Os -g -Wpointer-arith -Wundef -Werror -Wl,-EL -nostdlib -mlongcalls -mtext-section-literals -finline-functions -fdata-sections -ffunction-sections -D__ets__ -DICACHE_FLASH -DARDUINO=106 $(USER_CFLAGS) CXXFLAGS = $(CFLAGS) -fno-rtti -fno-exceptions -std=c++11 -felide-constructors # libmain must be modified for rBoot big flash support (just one symbol gets weakened) From 55d644793eaa97e8046de132c8718e72ad927618 Mon Sep 17 00:00:00 2001 From: Richard Antony Burton Date: Sat, 31 Oct 2015 18:27:34 +0000 Subject: [PATCH 06/54] malloc related changes for sdk v1.4 --- Sming/system/include/esp_systemapi.h | 11 +++-------- Sming/system/include/mem_manager.h | 4 ---- 2 files changed, 3 insertions(+), 12 deletions(-) diff --git a/Sming/system/include/esp_systemapi.h b/Sming/system/include/esp_systemapi.h index 499f98f72a..a6cb384883 100644 --- a/Sming/system/include/esp_systemapi.h +++ b/Sming/system/include/esp_systemapi.h @@ -68,17 +68,12 @@ extern int os_printf_plus(const char *format, ...) __attribute__ ((format (prin extern int os_snprintf(char *str, size_t size, const char *format, ...) __attribute__ ((format (printf, 3, 4))); extern int ets_vsnprintf(char * s, size_t n, const char * format, va_list arg) __attribute__ ((format (printf, 3, 0))); -extern void *pvPortMalloc(size_t xWantedSize); -extern void *pvPortZalloc(size_t); +extern void *pvPortMalloc(size_t xWantedSize, char *file, uint32 line); +extern void *pvPortZalloc(size_t xWantedSize, char *file, uint32 line); extern void pvPortFree(void *ptr); -extern void vPortFree(void *ptr); +extern void vPortFree(void *ptr, char *file, uint32 line); extern void *vPortMalloc(size_t xWantedSize); -// Shortcuts for memory functions -#define os_malloc pvPortMalloc -#define os_free vPortFree -#define os_zalloc pvPortZalloc - extern void uart_div_modify(int no, unsigned int freq); extern int ets_uart_printf(const char *fmt, ...); extern void uart_tx_one_char(char ch); diff --git a/Sming/system/include/mem_manager.h b/Sming/system/include/mem_manager.h index fb6eee0b27..6dd2174b40 100644 --- a/Sming/system/include/mem_manager.h +++ b/Sming/system/include/mem_manager.h @@ -69,10 +69,6 @@ static void prvHeapInit( void ) ;//ICACHE_FLASH_ATTR; void vApplicationMallocFailedHook( void ) ;//ICACHE_FLASH_ATTR; -void *pvPortMalloc( size_t xWantedSize ) ;//ICACHE_FLASH_ATTR; - -void vPortFree( void *pv ) ;//ICACHE_FLASH_ATTR; - size_t xPortGetFreeHeapSize( void ) ;//ICACHE_FLASH_ATTR; void vPortInitialiseBlocks( void ) ;//ICACHE_FLASH_ATTR; From c1a5670a7ad3e4747649ca11ceb07ecfe6b5689e Mon Sep 17 00:00:00 2001 From: Richard Antony Burton Date: Sat, 31 Oct 2015 20:15:25 +0000 Subject: [PATCH 07/54] update smartconfig for sdk v1.4, add the wifistation class --- Accelerometer_MMA7455/include/user_config.h | 3 ++ Basic_AirUpdate/include/user_config.h | 3 ++ Basic_Blink/include/user_config.h | 3 ++ Basic_Capsense/include/user_config.h | 3 ++ Basic_Interrupts/include/user_config.h | 3 ++ Basic_PWM/include/user_config.h | 3 ++ Basic_ProgMem/include/user_config.h | 3 ++ Basic_ScannerI2C/include/user_config.h | 3 ++ Basic_Serial/include/user_config.h | 3 ++ Basic_SmartConfig/app/application.cpp | 30 +-------------- Basic_SmartConfig/include/smartconfig.h | 31 ---------------- Basic_SmartConfig/include/user_config.h | 3 +- Basic_WiFi/include/user_config.h | 3 ++ Basic_rBoot/app/application.cpp | 5 +++ Basic_rBoot/include/user_config.h | 7 ++-- Basic_rBoot/readme.txt | 2 +- Compass_HMC5883L/include/user_config.h | 3 ++ FtpServer_Files/include/user_config.h | 3 ++ HttpClient_Instapush/include/user_config.h | 3 ++ HttpClient_ThingSpeak/include/user_config.h | 3 ++ HttpServer_AJAX/include/user_config.h | 3 ++ HttpServer_Bootstrap/include/user_config.h | 3 ++ .../include/user_config.h | 3 ++ HttpServer_WebSockets/include/user_config.h | 3 ++ Humidity_DHT22/include/user_config.h | 3 ++ IR_lib/include/user_config.h | 3 ++ LED_WS2812/include/user_config.h | 3 ++ Light_BH1750/include/user_config.h | 3 ++ LiquidCrystal_44780/include/user_config.h | 3 ++ MeteoControl/include/user_config.h | 3 ++ MqttClient_Hello/include/user_config.h | 3 ++ Pressure_BMP180/include/user_config.h | 3 ++ Radio_nRF24L01/include/user_config.h | 3 ++ Radio_si4432/include/user_config.h | 3 ++ SDCard/include/user_config.h | 3 ++ ScreenLCD_5110/include/user_config.h | 3 ++ ScreenOLED_SSD1306/include/user_config.h | 3 ++ ScreenTFT_ILI9163C/include/user_config.h | 3 ++ .../include/user_config.h | 3 ++ Sming/SmingCore/Platform/Station.cpp | 37 +++++++++++++++++++ Sming/SmingCore/Platform/Station.h | 10 +++++ Sming/include/user_config.h | 7 +++- SystemClock_NTP/include/user_config.h | 3 ++ TcpClient_NarodMon/include/user_config.h | 3 ++ .../include/user_config.h | 5 ++- Temperature_DS1820/include/user_config.h | 3 ++ UdpServer_Echo/include/user_config.h | 3 ++ UdpServer_mDNS/include/user_config.h | 3 ++ Ultrasonic_HCSR04/include/user_config.h | 3 ++ 49 files changed, 186 insertions(+), 68 deletions(-) delete mode 100644 Basic_SmartConfig/include/smartconfig.h diff --git a/Accelerometer_MMA7455/include/user_config.h b/Accelerometer_MMA7455/include/user_config.h index 1c6ac36703..c36378f04e 100644 --- a/Accelerometer_MMA7455/include/user_config.h +++ b/Accelerometer_MMA7455/include/user_config.h @@ -35,6 +35,9 @@ extern "C" { // Network base API #include + // smart config support + #include + // Beta boards #define BOARD_ESP01 diff --git a/Basic_AirUpdate/include/user_config.h b/Basic_AirUpdate/include/user_config.h index 1c6ac36703..c36378f04e 100644 --- a/Basic_AirUpdate/include/user_config.h +++ b/Basic_AirUpdate/include/user_config.h @@ -35,6 +35,9 @@ extern "C" { // Network base API #include + // smart config support + #include + // Beta boards #define BOARD_ESP01 diff --git a/Basic_Blink/include/user_config.h b/Basic_Blink/include/user_config.h index 1c6ac36703..c36378f04e 100644 --- a/Basic_Blink/include/user_config.h +++ b/Basic_Blink/include/user_config.h @@ -35,6 +35,9 @@ extern "C" { // Network base API #include + // smart config support + #include + // Beta boards #define BOARD_ESP01 diff --git a/Basic_Capsense/include/user_config.h b/Basic_Capsense/include/user_config.h index 1c6ac36703..c36378f04e 100644 --- a/Basic_Capsense/include/user_config.h +++ b/Basic_Capsense/include/user_config.h @@ -35,6 +35,9 @@ extern "C" { // Network base API #include + // smart config support + #include + // Beta boards #define BOARD_ESP01 diff --git a/Basic_Interrupts/include/user_config.h b/Basic_Interrupts/include/user_config.h index 1c6ac36703..c36378f04e 100644 --- a/Basic_Interrupts/include/user_config.h +++ b/Basic_Interrupts/include/user_config.h @@ -35,6 +35,9 @@ extern "C" { // Network base API #include + // smart config support + #include + // Beta boards #define BOARD_ESP01 diff --git a/Basic_PWM/include/user_config.h b/Basic_PWM/include/user_config.h index 1c6ac36703..c36378f04e 100644 --- a/Basic_PWM/include/user_config.h +++ b/Basic_PWM/include/user_config.h @@ -35,6 +35,9 @@ extern "C" { // Network base API #include + // smart config support + #include + // Beta boards #define BOARD_ESP01 diff --git a/Basic_ProgMem/include/user_config.h b/Basic_ProgMem/include/user_config.h index 1c6ac36703..c36378f04e 100644 --- a/Basic_ProgMem/include/user_config.h +++ b/Basic_ProgMem/include/user_config.h @@ -35,6 +35,9 @@ extern "C" { // Network base API #include + // smart config support + #include + // Beta boards #define BOARD_ESP01 diff --git a/Basic_ScannerI2C/include/user_config.h b/Basic_ScannerI2C/include/user_config.h index 1c6ac36703..c36378f04e 100644 --- a/Basic_ScannerI2C/include/user_config.h +++ b/Basic_ScannerI2C/include/user_config.h @@ -35,6 +35,9 @@ extern "C" { // Network base API #include + // smart config support + #include + // Beta boards #define BOARD_ESP01 diff --git a/Basic_Serial/include/user_config.h b/Basic_Serial/include/user_config.h index 1c6ac36703..c36378f04e 100644 --- a/Basic_Serial/include/user_config.h +++ b/Basic_Serial/include/user_config.h @@ -35,6 +35,9 @@ extern "C" { // Network base API #include + // smart config support + #include + // Beta boards #define BOARD_ESP01 diff --git a/Basic_SmartConfig/app/application.cpp b/Basic_SmartConfig/app/application.cpp index bd0e8c7d76..36e618b520 100644 --- a/Basic_SmartConfig/app/application.cpp +++ b/Basic_SmartConfig/app/application.cpp @@ -1,34 +1,6 @@ #include #include -void smartconfigDone(sc_status status, void *pdata) -{ - station_config *sta_conf = reinterpret_cast(pdata); - char *ssid = reinterpret_cast(sta_conf->ssid); - char *password = reinterpret_cast(sta_conf->password); - - switch (status) - { - case SC_STATUS_WAIT: - debugf("SC_STATUS_WAIT\n"); - break; - case SC_STATUS_FIND_CHANNEL: - debugf("SC_STATUS_FIND_CHANNEL\n"); - break; - case SC_STATUS_GETTING_SSID_PSWD: - debugf("SC_STATUS_GETTING_SSID_PSWD\n"); - break; - case SC_STATUS_LINK: - debugf("SC_STATUS_LINK\n"); - WifiStation.config(ssid, password); - break; - case SC_STATUS_LINK_OVER: - debugf("SC_STATUS_LINK_OVER\n"); - smartconfig_stop(); - break; - } -} - void init() { Serial.begin(SERIAL_BAUD_RATE); // 115200 by default @@ -36,5 +8,5 @@ void init() WifiAccessPoint.enable(false); WifiStation.enable(true); - smartconfig_start(SC_TYPE_ESPTOUCH, smartconfigDone); + WifiStation.smartConfigStart(SCT_EspTouch); } diff --git a/Basic_SmartConfig/include/smartconfig.h b/Basic_SmartConfig/include/smartconfig.h deleted file mode 100644 index 1e550c90d0..0000000000 --- a/Basic_SmartConfig/include/smartconfig.h +++ /dev/null @@ -1,31 +0,0 @@ -/* - * smartconfig.h - * - * Created on: May 28, 2015 - * Author: slavey - */ - -#ifndef __SMARTCONFIG_H__ -#define __SMARTCONFIG_H__ - -typedef enum { - SC_STATUS_WAIT = 0, - SC_STATUS_FIND_CHANNEL, - SC_STATUS_GETTING_SSID_PSWD, - SC_STATUS_LINK, - SC_STATUS_LINK_OVER, -} sc_status; - -typedef enum { - SC_TYPE_ESPTOUCH = 0, - SC_TYPE_AIRKISS, -} sc_type; - -typedef void (*sc_callback_t)(sc_status status, void *pdata); - -extern const char *smartconfig_get_version(void); -extern bool smartconfig_start(sc_type type, sc_callback_t cb, ...); -extern bool smartconfig_stop(void); - - -#endif /* SMARTCONFIG_H_ */ diff --git a/Basic_SmartConfig/include/user_config.h b/Basic_SmartConfig/include/user_config.h index 578c370646..c36378f04e 100644 --- a/Basic_SmartConfig/include/user_config.h +++ b/Basic_SmartConfig/include/user_config.h @@ -35,7 +35,8 @@ extern "C" { // Network base API #include - #include "smartconfig.h" + // smart config support + #include // Beta boards #define BOARD_ESP01 diff --git a/Basic_WiFi/include/user_config.h b/Basic_WiFi/include/user_config.h index 1c6ac36703..c36378f04e 100644 --- a/Basic_WiFi/include/user_config.h +++ b/Basic_WiFi/include/user_config.h @@ -35,6 +35,9 @@ extern "C" { // Network base API #include + // smart config support + #include + // Beta boards #define BOARD_ESP01 diff --git a/Basic_rBoot/app/application.cpp b/Basic_rBoot/app/application.cpp index 883c097f6b..cf8c09b764 100644 --- a/Basic_rBoot/app/application.cpp +++ b/Basic_rBoot/app/application.cpp @@ -1,6 +1,11 @@ #include #include +// download urls, set appropriately +#define ROM_0_URL "http://192.168.7.5:80/rom0.bin" +#define ROM_1_URL "http://192.168.7.5:80/rom1.bin" +#define SPIFFS_URL "http://192.168.7.5:80/spiff_rom.bin" + // If you want, you can define WiFi settings globally in Eclipse Environment Variables #ifndef WIFI_SSID #define WIFI_SSID "PleaseEnterSSID" // Put you SSID and Password here diff --git a/Basic_rBoot/include/user_config.h b/Basic_rBoot/include/user_config.h index b3487c94bc..c36378f04e 100644 --- a/Basic_rBoot/include/user_config.h +++ b/Basic_rBoot/include/user_config.h @@ -4,10 +4,6 @@ #ifdef __cplusplus extern "C" { #endif - - #define ROM_0_URL "http://192.168.7.5:80/rom0.bin" - #define ROM_1_URL "http://192.168.7.5:80/rom1.bin" - #define SPIFFS_URL "http://192.168.7.5:80/spiff_rom.bin" // UART config #define SERIAL_BAUD_RATE 115200 @@ -39,6 +35,9 @@ extern "C" { // Network base API #include + // smart config support + #include + // Beta boards #define BOARD_ESP01 diff --git a/Basic_rBoot/readme.txt b/Basic_rBoot/readme.txt index bcc8678434..3a923714f1 100644 --- a/Basic_rBoot/readme.txt +++ b/Basic_rBoot/readme.txt @@ -22,7 +22,7 @@ Building 2) Set ESPTOOL2 (env var or in Makefile-user.mk) to point to the esptool2 binary. Source for esptool2 is here: https://github.com/raburton/esp8266 3) Set WIFI_SSID & WIFI_PWD environment variables with your wifi details. - 4) Edit the OTA server details in include/user_config.h + 4) Edit the OTA server details at the top of app/application.cpp 5) Check overridable variables in Makefile-user.mk, or set as env vars. 6) make && make flash 7) Put rom0.bin and spiff_rom.bin in the root of your webserver for OTA. diff --git a/Compass_HMC5883L/include/user_config.h b/Compass_HMC5883L/include/user_config.h index 1c6ac36703..c36378f04e 100644 --- a/Compass_HMC5883L/include/user_config.h +++ b/Compass_HMC5883L/include/user_config.h @@ -35,6 +35,9 @@ extern "C" { // Network base API #include + // smart config support + #include + // Beta boards #define BOARD_ESP01 diff --git a/FtpServer_Files/include/user_config.h b/FtpServer_Files/include/user_config.h index 1c6ac36703..c36378f04e 100644 --- a/FtpServer_Files/include/user_config.h +++ b/FtpServer_Files/include/user_config.h @@ -35,6 +35,9 @@ extern "C" { // Network base API #include + // smart config support + #include + // Beta boards #define BOARD_ESP01 diff --git a/HttpClient_Instapush/include/user_config.h b/HttpClient_Instapush/include/user_config.h index 1c6ac36703..c36378f04e 100644 --- a/HttpClient_Instapush/include/user_config.h +++ b/HttpClient_Instapush/include/user_config.h @@ -35,6 +35,9 @@ extern "C" { // Network base API #include + // smart config support + #include + // Beta boards #define BOARD_ESP01 diff --git a/HttpClient_ThingSpeak/include/user_config.h b/HttpClient_ThingSpeak/include/user_config.h index 1c6ac36703..c36378f04e 100644 --- a/HttpClient_ThingSpeak/include/user_config.h +++ b/HttpClient_ThingSpeak/include/user_config.h @@ -35,6 +35,9 @@ extern "C" { // Network base API #include + // smart config support + #include + // Beta boards #define BOARD_ESP01 diff --git a/HttpServer_AJAX/include/user_config.h b/HttpServer_AJAX/include/user_config.h index 1c6ac36703..c36378f04e 100644 --- a/HttpServer_AJAX/include/user_config.h +++ b/HttpServer_AJAX/include/user_config.h @@ -35,6 +35,9 @@ extern "C" { // Network base API #include + // smart config support + #include + // Beta boards #define BOARD_ESP01 diff --git a/HttpServer_Bootstrap/include/user_config.h b/HttpServer_Bootstrap/include/user_config.h index 1c6ac36703..c36378f04e 100644 --- a/HttpServer_Bootstrap/include/user_config.h +++ b/HttpServer_Bootstrap/include/user_config.h @@ -35,6 +35,9 @@ extern "C" { // Network base API #include + // smart config support + #include + // Beta boards #define BOARD_ESP01 diff --git a/HttpServer_ConfigNetwork/include/user_config.h b/HttpServer_ConfigNetwork/include/user_config.h index 1c6ac36703..c36378f04e 100644 --- a/HttpServer_ConfigNetwork/include/user_config.h +++ b/HttpServer_ConfigNetwork/include/user_config.h @@ -35,6 +35,9 @@ extern "C" { // Network base API #include + // smart config support + #include + // Beta boards #define BOARD_ESP01 diff --git a/HttpServer_WebSockets/include/user_config.h b/HttpServer_WebSockets/include/user_config.h index 1c6ac36703..c36378f04e 100644 --- a/HttpServer_WebSockets/include/user_config.h +++ b/HttpServer_WebSockets/include/user_config.h @@ -35,6 +35,9 @@ extern "C" { // Network base API #include + // smart config support + #include + // Beta boards #define BOARD_ESP01 diff --git a/Humidity_DHT22/include/user_config.h b/Humidity_DHT22/include/user_config.h index 1c6ac36703..c36378f04e 100644 --- a/Humidity_DHT22/include/user_config.h +++ b/Humidity_DHT22/include/user_config.h @@ -35,6 +35,9 @@ extern "C" { // Network base API #include + // smart config support + #include + // Beta boards #define BOARD_ESP01 diff --git a/IR_lib/include/user_config.h b/IR_lib/include/user_config.h index 1c6ac36703..c36378f04e 100644 --- a/IR_lib/include/user_config.h +++ b/IR_lib/include/user_config.h @@ -35,6 +35,9 @@ extern "C" { // Network base API #include + // smart config support + #include + // Beta boards #define BOARD_ESP01 diff --git a/LED_WS2812/include/user_config.h b/LED_WS2812/include/user_config.h index 1c6ac36703..c36378f04e 100644 --- a/LED_WS2812/include/user_config.h +++ b/LED_WS2812/include/user_config.h @@ -35,6 +35,9 @@ extern "C" { // Network base API #include + // smart config support + #include + // Beta boards #define BOARD_ESP01 diff --git a/Light_BH1750/include/user_config.h b/Light_BH1750/include/user_config.h index 1c6ac36703..c36378f04e 100644 --- a/Light_BH1750/include/user_config.h +++ b/Light_BH1750/include/user_config.h @@ -35,6 +35,9 @@ extern "C" { // Network base API #include + // smart config support + #include + // Beta boards #define BOARD_ESP01 diff --git a/LiquidCrystal_44780/include/user_config.h b/LiquidCrystal_44780/include/user_config.h index 1c6ac36703..c36378f04e 100644 --- a/LiquidCrystal_44780/include/user_config.h +++ b/LiquidCrystal_44780/include/user_config.h @@ -35,6 +35,9 @@ extern "C" { // Network base API #include + // smart config support + #include + // Beta boards #define BOARD_ESP01 diff --git a/MeteoControl/include/user_config.h b/MeteoControl/include/user_config.h index 1c6ac36703..c36378f04e 100644 --- a/MeteoControl/include/user_config.h +++ b/MeteoControl/include/user_config.h @@ -35,6 +35,9 @@ extern "C" { // Network base API #include + // smart config support + #include + // Beta boards #define BOARD_ESP01 diff --git a/MqttClient_Hello/include/user_config.h b/MqttClient_Hello/include/user_config.h index 1c6ac36703..c36378f04e 100644 --- a/MqttClient_Hello/include/user_config.h +++ b/MqttClient_Hello/include/user_config.h @@ -35,6 +35,9 @@ extern "C" { // Network base API #include + // smart config support + #include + // Beta boards #define BOARD_ESP01 diff --git a/Pressure_BMP180/include/user_config.h b/Pressure_BMP180/include/user_config.h index 1c6ac36703..c36378f04e 100644 --- a/Pressure_BMP180/include/user_config.h +++ b/Pressure_BMP180/include/user_config.h @@ -35,6 +35,9 @@ extern "C" { // Network base API #include + // smart config support + #include + // Beta boards #define BOARD_ESP01 diff --git a/Radio_nRF24L01/include/user_config.h b/Radio_nRF24L01/include/user_config.h index 1c6ac36703..c36378f04e 100644 --- a/Radio_nRF24L01/include/user_config.h +++ b/Radio_nRF24L01/include/user_config.h @@ -35,6 +35,9 @@ extern "C" { // Network base API #include + // smart config support + #include + // Beta boards #define BOARD_ESP01 diff --git a/Radio_si4432/include/user_config.h b/Radio_si4432/include/user_config.h index 1c6ac36703..c36378f04e 100644 --- a/Radio_si4432/include/user_config.h +++ b/Radio_si4432/include/user_config.h @@ -35,6 +35,9 @@ extern "C" { // Network base API #include + // smart config support + #include + // Beta boards #define BOARD_ESP01 diff --git a/SDCard/include/user_config.h b/SDCard/include/user_config.h index 1c6ac36703..c36378f04e 100644 --- a/SDCard/include/user_config.h +++ b/SDCard/include/user_config.h @@ -35,6 +35,9 @@ extern "C" { // Network base API #include + // smart config support + #include + // Beta boards #define BOARD_ESP01 diff --git a/ScreenLCD_5110/include/user_config.h b/ScreenLCD_5110/include/user_config.h index 1c6ac36703..c36378f04e 100644 --- a/ScreenLCD_5110/include/user_config.h +++ b/ScreenLCD_5110/include/user_config.h @@ -35,6 +35,9 @@ extern "C" { // Network base API #include + // smart config support + #include + // Beta boards #define BOARD_ESP01 diff --git a/ScreenOLED_SSD1306/include/user_config.h b/ScreenOLED_SSD1306/include/user_config.h index 1c6ac36703..c36378f04e 100644 --- a/ScreenOLED_SSD1306/include/user_config.h +++ b/ScreenOLED_SSD1306/include/user_config.h @@ -35,6 +35,9 @@ extern "C" { // Network base API #include + // smart config support + #include + // Beta boards #define BOARD_ESP01 diff --git a/ScreenTFT_ILI9163C/include/user_config.h b/ScreenTFT_ILI9163C/include/user_config.h index 1c6ac36703..c36378f04e 100644 --- a/ScreenTFT_ILI9163C/include/user_config.h +++ b/ScreenTFT_ILI9163C/include/user_config.h @@ -35,6 +35,9 @@ extern "C" { // Network base API #include + // smart config support + #include + // Beta boards #define BOARD_ESP01 diff --git a/ScreenTFT_ILI9340-ILI9341/include/user_config.h b/ScreenTFT_ILI9340-ILI9341/include/user_config.h index 1c6ac36703..c36378f04e 100644 --- a/ScreenTFT_ILI9340-ILI9341/include/user_config.h +++ b/ScreenTFT_ILI9340-ILI9341/include/user_config.h @@ -35,6 +35,9 @@ extern "C" { // Network base API #include + // smart config support + #include + // Beta boards #define BOARD_ESP01 diff --git a/Sming/SmingCore/Platform/Station.cpp b/Sming/SmingCore/Platform/Station.cpp index 661c73e785..5ad1cf2cb3 100644 --- a/Sming/SmingCore/Platform/Station.cpp +++ b/Sming/SmingCore/Platform/Station.cpp @@ -351,6 +351,43 @@ const char* StationClass::getConnectionStatusName() }; } +void smartConfigDone(sc_status status, void *pdata) { + + switch (status) { + case SC_STATUS_WAIT: + debugf("SC_STATUS_WAIT\n"); + break; + case SC_STATUS_FIND_CHANNEL: + debugf("SC_STATUS_FIND_CHANNEL\n"); + break; + case SC_STATUS_GETTING_SSID_PSWD: + debugf("SC_STATUS_GETTING_SSID_PSWD\n"); + break; + case SC_STATUS_LINK: + { + debugf("SC_STATUS_LINK\n"); + station_config *sta_conf = (station_config *)pdata; + char *ssid = (char*)sta_conf->ssid; + char *password = (char*)sta_conf->password; + WifiStation.config(ssid, password); + } + break; + case SC_STATUS_LINK_OVER: + debugf("SC_STATUS_LINK_OVER\n"); + WifiStation.smartConfigStop(); + break; + } +} + +void StationClass::smartConfigStart(SmartConfigType sctype) { + smartconfig_set_type((sc_type)sctype); + smartconfig_start(smartConfigDone); +} + +void StationClass::smartConfigStop() { + smartconfig_stop(); +} + //////////// BssInfo::BssInfo(bss_info* info) diff --git a/Sming/SmingCore/Platform/Station.h b/Sming/SmingCore/Platform/Station.h index b71175d25d..93e5ec0017 100644 --- a/Sming/SmingCore/Platform/Station.h +++ b/Sming/SmingCore/Platform/Station.h @@ -25,6 +25,13 @@ enum EStationConnectionStatus eSCS_GotIP }; +enum SmartConfigType +{ + SCT_EspTouch = SC_TYPE_ESPTOUCH, + SCT_AirKiss = SC_TYPE_AIRKISS, + SCT_EspTouch_AirKiss = SC_TYPE_ESPTOUCH_AIRKISS +}; + class BssInfo; class Timer; @@ -67,6 +74,9 @@ class StationClass : protected ISystemReadyHandler void waitConnection(ConnectionDelegate successfulConnected); void waitConnection(ConnectionDelegate successfulConnected, int secondsTimeOut, ConnectionDelegate connectionNotEstablished); + void smartConfigStart(SmartConfigType sctype); + void smartConfigStop(); + protected: virtual void onSystemReady(); static void staticScanCompleted(void *arg, STATUS status); diff --git a/Sming/include/user_config.h b/Sming/include/user_config.h index db8deaf18d..c36378f04e 100644 --- a/Sming/include/user_config.h +++ b/Sming/include/user_config.h @@ -5,9 +5,11 @@ extern "C" { #endif + // UART config + #define SERIAL_BAUD_RATE 115200 + // ESP SDK config #define LWIP_OPEN_SRC - //#define USE_OPTIMIZE_PRINTF #define USE_US_TIMER // Default types @@ -33,6 +35,9 @@ extern "C" { // Network base API #include + // smart config support + #include + // Beta boards #define BOARD_ESP01 diff --git a/SystemClock_NTP/include/user_config.h b/SystemClock_NTP/include/user_config.h index 1c6ac36703..c36378f04e 100644 --- a/SystemClock_NTP/include/user_config.h +++ b/SystemClock_NTP/include/user_config.h @@ -35,6 +35,9 @@ extern "C" { // Network base API #include + // smart config support + #include + // Beta boards #define BOARD_ESP01 diff --git a/TcpClient_NarodMon/include/user_config.h b/TcpClient_NarodMon/include/user_config.h index 1c6ac36703..c36378f04e 100644 --- a/TcpClient_NarodMon/include/user_config.h +++ b/TcpClient_NarodMon/include/user_config.h @@ -35,6 +35,9 @@ extern "C" { // Network base API #include + // smart config support + #include + // Beta boards #define BOARD_ESP01 diff --git a/Telnet_TCPServer_TCPClient/include/user_config.h b/Telnet_TCPServer_TCPClient/include/user_config.h index 8937500c4e..c36378f04e 100644 --- a/Telnet_TCPServer_TCPClient/include/user_config.h +++ b/Telnet_TCPServer_TCPClient/include/user_config.h @@ -6,7 +6,7 @@ extern "C" { #endif // UART config - #define SERIAL_BAUD_RATE 74880 + #define SERIAL_BAUD_RATE 115200 // ESP SDK config #define LWIP_OPEN_SRC @@ -35,6 +35,9 @@ extern "C" { // Network base API #include + // smart config support + #include + // Beta boards #define BOARD_ESP01 diff --git a/Temperature_DS1820/include/user_config.h b/Temperature_DS1820/include/user_config.h index 1c6ac36703..c36378f04e 100644 --- a/Temperature_DS1820/include/user_config.h +++ b/Temperature_DS1820/include/user_config.h @@ -35,6 +35,9 @@ extern "C" { // Network base API #include + // smart config support + #include + // Beta boards #define BOARD_ESP01 diff --git a/UdpServer_Echo/include/user_config.h b/UdpServer_Echo/include/user_config.h index 1c6ac36703..c36378f04e 100644 --- a/UdpServer_Echo/include/user_config.h +++ b/UdpServer_Echo/include/user_config.h @@ -35,6 +35,9 @@ extern "C" { // Network base API #include + // smart config support + #include + // Beta boards #define BOARD_ESP01 diff --git a/UdpServer_mDNS/include/user_config.h b/UdpServer_mDNS/include/user_config.h index 1c6ac36703..c36378f04e 100644 --- a/UdpServer_mDNS/include/user_config.h +++ b/UdpServer_mDNS/include/user_config.h @@ -35,6 +35,9 @@ extern "C" { // Network base API #include + // smart config support + #include + // Beta boards #define BOARD_ESP01 diff --git a/Ultrasonic_HCSR04/include/user_config.h b/Ultrasonic_HCSR04/include/user_config.h index 1c6ac36703..c36378f04e 100644 --- a/Ultrasonic_HCSR04/include/user_config.h +++ b/Ultrasonic_HCSR04/include/user_config.h @@ -35,6 +35,9 @@ extern "C" { // Network base API #include + // smart config support + #include + // Beta boards #define BOARD_ESP01 From 7cfd0b28601111c6da2b227dd9359dcf53e12aaf Mon Sep 17 00:00:00 2001 From: Richard Antony Burton Date: Sat, 31 Oct 2015 20:19:24 +0000 Subject: [PATCH 08/54] update travis build to sdk v1.4 --- .travis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 7394f6fa4f..55a963670d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,8 +2,8 @@ sudo: false language: cpp install: - mkdir -p $TRAVIS_BUILD_DIR/opt/esp-open-sdk - - wget https://bintray.com/artifact/download/kireevco/generic/esp-open-sdk-1.2-linux-x86_64.tar.gz - - tar -zxf esp-open-sdk-1.2-linux-x86_64.tar.gz -C $TRAVIS_BUILD_DIR/opt/esp-open-sdk + - wget https://bintray.com/artifact/download/kireevco/generic/esp-open-sdk-1.4-linux-x86_64.tar.gz + - tar -zxf esp-open-sdk-1.4-linux-x86_64.tar.gz -C $TRAVIS_BUILD_DIR/opt/esp-open-sdk - export PATH=$PATH:$TRAVIS_BUILD_DIR/opt/esp-open-sdk/sdk:$TRAVIS_BUILD_DIR/opt/esp-open-sdk/xtensa-lx106-elf/bin - export SMING_HOME=$TRAVIS_BUILD_DIR/Sming - export ESP_HOME=$TRAVIS_BUILD_DIR/opt/esp-open-sdk From c6081e174ec07abc56a86bf124ffb167c0035cdc Mon Sep 17 00:00:00 2001 From: Richard Antony Burton Date: Sat, 31 Oct 2015 20:47:25 +0000 Subject: [PATCH 09/54] tweaks to makefile --- Sming/rboot/Makefile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Sming/rboot/Makefile b/Sming/rboot/Makefile index fb32f22c7f..65c6f65244 100644 --- a/Sming/rboot/Makefile +++ b/Sming/rboot/Makefile @@ -56,14 +56,14 @@ $(RBOOT_FW_BASE): $(RBOOT_BUILD_BASE)/rboot-stage2a.o: rboot-stage2a.c rboot-private.h rboot.h @echo "CC $<" - $(CC) $(CFLAGS) $(RBOOT_EXTRA_INCDIR) -c $< -o $@ + @$(CC) $(CFLAGS) $(RBOOT_EXTRA_INCDIR) -c $< -o $@ $(RBOOT_BUILD_BASE)/rboot-stage2a.elf: $(RBOOT_BUILD_BASE)/rboot-stage2a.o @echo "LD $@" @$(LD) -Trboot-stage2a.ld $(LDFLAGS) -Wl,--start-group $^ -Wl,--end-group -o $@ $(RBOOT_BUILD_BASE)/rboot-hex2a.h: $(RBOOT_BUILD_BASE)/rboot-stage2a.elf - @echo "FW $@" + @echo "E2 $@" @$(ESPTOOL2) -quiet -header $< $@ .text $(RBOOT_BUILD_BASE)/rboot.o: rboot.c rboot-private.h rboot.h $(RBOOT_BUILD_BASE)/rboot-hex2a.h @@ -79,7 +79,7 @@ $(RBOOT_BUILD_BASE)/%.elf: $(RBOOT_BUILD_BASE)/%.o @$(LD) -T$(LD_SCRIPT) $(LDFLAGS) -Wl,--start-group $^ -Wl,--end-group -o $@ $(RBOOT_FW_BASE)/%.bin: $(RBOOT_BUILD_BASE)/%.elf - @echo "FW $@" + @echo "E2 $@" @$(ESPTOOL2) $(E2_OPTS) $< $@ .text .rodata clean: From 34fbd5dc7d998beee7da59d3400935584d8a7a5e Mon Sep 17 00:00:00 2001 From: Richard Antony Burton Date: Sat, 31 Oct 2015 21:17:32 +0000 Subject: [PATCH 10/54] rename old software pwm files to DriverPWM (matches class inside) also removed the global pwm object to avoid wasting memory, now if you want it declare an instance of the object yourself --- Sming/SmingCore/{PWM.cpp => DriverPWM.cpp} | 26 +++------------------- Sming/SmingCore/{PWM.h => DriverPWM.h} | 6 ----- Sming/SmingCore/SmingCore.h | 3 ++- 3 files changed, 5 insertions(+), 30 deletions(-) rename Sming/SmingCore/{PWM.cpp => DriverPWM.cpp} (85%) rename Sming/SmingCore/{PWM.h => DriverPWM.h} (89%) diff --git a/Sming/SmingCore/PWM.cpp b/Sming/SmingCore/DriverPWM.cpp similarity index 85% rename from Sming/SmingCore/PWM.cpp rename to Sming/SmingCore/DriverPWM.cpp index 7769e283f2..2b47560064 100644 --- a/Sming/SmingCore/PWM.cpp +++ b/Sming/SmingCore/DriverPWM.cpp @@ -5,12 +5,10 @@ * All files of the Sming Core are provided under the LGPL v3 license. ****/ -#include "../SmingCore/PWM.h" -#include - -#include "../SmingCore/Digital.h" -DriverPWM EspPWM; +#include +#include "DriverPWM.h" +#include "Digital.h" DriverPWM::DriverPWM() : initialized(false) { @@ -129,21 +127,3 @@ void ChannelPWM::processingStatic(void *arg) ChannelPWM *self = (ChannelPWM*)arg; digitalWrite(self->pin, LOW); } - -////////////////////////////////////////////////////////////////////////////////////////// - -void analogWrite(uint8_t pin, int duty) -{ - EspPWM.initialize(); - EspPWM.analogWrite(pin, duty); -} - -void noAnalogWrite(uint8_t pin) -{ - EspPWM.noAnalogWrite(pin); -} - -uint16_t analogRead(uint16_t pin) -{ - return system_adc_read(); -} diff --git a/Sming/SmingCore/PWM.h b/Sming/SmingCore/DriverPWM.h similarity index 89% rename from Sming/SmingCore/PWM.h rename to Sming/SmingCore/DriverPWM.h index 8d70a5e4cc..dc07d9776b 100644 --- a/Sming/SmingCore/PWM.h +++ b/Sming/SmingCore/DriverPWM.h @@ -59,9 +59,3 @@ class ChannelPWM // OOP style extern DriverPWM EspPWM; - -// Arduino like style -void analogWrite(uint8_t pin, int duty); -void noAnalogWrite(uint8_t pin); - -uint16_t analogRead(uint16_t pin); diff --git a/Sming/SmingCore/SmingCore.h b/Sming/SmingCore/SmingCore.h index 9dc5d0d4d9..d41e2d434f 100644 --- a/Sming/SmingCore/SmingCore.h +++ b/Sming/SmingCore/SmingCore.h @@ -21,7 +21,8 @@ #include "FileSystem.h" #include "HardwareSerial.h" #include "Interrupts.h" -#include "PWM.h" +#include "DriverPWM.h" +#include "HardwarePWM.h" #include "Timer.h" #include "Wire.h" #include "SPISoft.h" From a7a2cb39f77c802f5713ca75c1edb7fd45f55b84 Mon Sep 17 00:00:00 2001 From: Richard Antony Burton Date: Sat, 31 Oct 2015 21:29:32 +0000 Subject: [PATCH 11/54] don't hardcode max duty --- Sming/SmingCore/HardwarePWM.cpp | 33 ++++++++++++++++++++++----------- Sming/SmingCore/HardwarePWM.h | 6 ++++-- 2 files changed, 26 insertions(+), 13 deletions(-) diff --git a/Sming/SmingCore/HardwarePWM.cpp b/Sming/SmingCore/HardwarePWM.cpp index dc436d36a0..46300bbcaf 100644 --- a/Sming/SmingCore/HardwarePWM.cpp +++ b/Sming/SmingCore/HardwarePWM.cpp @@ -6,8 +6,8 @@ * Period of PWM is fixed to 1000ms / Frequency = 1khz * Duty at 100% = 22222. Duty at 0% = 0 * You can use function setPeriod() to change frequency/period. - * Calculate the Duty as per the formulae give in ESP8266 SDK - * Duty = (Period *1000)/45 + * Calculate the max duty as per the formulae give in ESP8266 SDK + * Max Duty = (Period * 1000) / 45 * * PWM can be generated on upto 8 pins (ie All pins except pin 16) * Created on August 17, 2015, 2:27 PM @@ -32,6 +32,7 @@ HardwarePWM::HardwarePWM(uint8 *pins, uint8 no_of_pins) { } pwm_init(1000, pwm_duty_init, no_of_pins, io_info); pwm_start(); + maxduty = 22222; // for period of 1000 } } @@ -57,11 +58,11 @@ uint8 HardwarePWM::getChannel(uint8 pin) { /* Function Name: analogWrite * Description: This function is used to set the pwm duty cycle for a given pin * Parameters: pin - Esp8266 pin number - * duty - duty cycle value (valid values are 0-22222) + * duty - duty cycle value * Default frequency is 1khz but can be varied by various function */ -void HardwarePWM::analogWrite(uint8 pin, uint32 duty) { - setDuty(pin, duty); +bool HardwarePWM::analogWrite(uint8 pin, uint32 duty) { + return setDuty(pin, duty); } /* Function Name: getDuty @@ -77,20 +78,29 @@ uint32 HardwarePWM::getDuty(uint8 pin) { /* Function Name: setDuty * Description: This function is used to set the pwm duty cycle for a given pin * Parameters: pin - pin number - * duty - duty cycle value (valid values are 0-22222) + * duty - duty cycle value */ -void HardwarePWM::setDuty(uint8 pin, uint32 duty) { +bool HardwarePWM::setDuty(uint8 pin, uint32 duty) { uint8 chan = getChannel(pin); - if (chan == PWM_BAD_CHANNEL) return; - if (duty <= 22222) { + if (chan == PWM_BAD_CHANNEL) { + return false; + } else if (duty <= maxduty) { pwm_set_duty(duty, chan); pwm_start(); - delay(25); // delay is needed otherwise PWM is not set + return true; } else { - debugf("Duty cycle value too high. Should be less than 22222."); + debugf("Duty cycle value too high for current period."); + return false; } } +/* Function Name: getMaxDuty + * Description: This function is used to get the max duty cycle for the currently set period + */ +uint32 HardwarePWM::getMaxDuty() { + return maxduty; +} + /* Function Name: getPeriod * Description: This function is used to get Period of PWM. * Period / frequency will remain same for all pins. @@ -105,6 +115,7 @@ uint32 HardwarePWM::getPeriod() { * Period / frequency will remain same for all pins. */ void HardwarePWM::setPeriod(uint32 period) { + maxduty = (period * 1000) / 45; pwm_set_period(period); pwm_start(); } diff --git a/Sming/SmingCore/HardwarePWM.h b/Sming/SmingCore/HardwarePWM.h index 1b5aa0b948..801bdcd631 100644 --- a/Sming/SmingCore/HardwarePWM.h +++ b/Sming/SmingCore/HardwarePWM.h @@ -33,17 +33,19 @@ class HardwarePWM { public: HardwarePWM(uint8 *pins, uint8 no_of_pins); virtual ~HardwarePWM(); - void analogWrite(uint8 pin, uint32 duty); - void setDuty(uint8 pin, uint32 duty); + bool analogWrite(uint8 pin, uint32 duty); + bool setDuty(uint8 pin, uint32 duty); uint32 getDuty(uint8 pin); void setPeriod(uint32 period); uint32 getPeriod(void); uint8 getChannel(uint8 pin); + uint32 getMaxDuty(); protected: private: uint8 channel_count; uint8 channels[PWM_CHANNEL_NUM_MAX]; + uint32 maxduty; }; #endif /* HARDWAREPWM_H */ From e8aee1483a380be03db7f4d5b7ba910076466a3f Mon Sep 17 00:00:00 2001 From: Richard Antony Burton Date: Sat, 31 Oct 2015 21:34:13 +0000 Subject: [PATCH 12/54] comment out some unused pwm code in a library --- Sming/Libraries/LiquidCrystal/LiquidCrystal.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Sming/Libraries/LiquidCrystal/LiquidCrystal.cpp b/Sming/Libraries/LiquidCrystal/LiquidCrystal.cpp index 2c2cae1fb1..d6f018ab00 100644 --- a/Sming/Libraries/LiquidCrystal/LiquidCrystal.cpp +++ b/Sming/Libraries/LiquidCrystal/LiquidCrystal.cpp @@ -170,7 +170,7 @@ void LiquidCrystal::setBacklight ( uint8_t value ) { // Check if the pin is associated to a timer, i.e. PWM // --------------------------------------------------- - if(digitalPinToTimer(_backlightPin) != NOT_ON_TIMER) + /*if(digitalPinToTimer(_backlightPin) != NOT_ON_TIMER) { // Check for control polarity inversion // --------------------------------------------------- @@ -186,7 +186,7 @@ void LiquidCrystal::setBacklight ( uint8_t value ) // Not a PWM pin, set the backlight pin for POSI or NEG // polarity // -------------------------------------------------------- - else if (((value > 0) && (_polarity == POSITIVE)) || + else*/ if (((value > 0) && (_polarity == POSITIVE)) || ((value == 0) && (_polarity == NEGATIVE))) { digitalWrite( _backlightPin, HIGH); From b4b3bfb486bcc2410b5b33e32cec490f4090dc5a Mon Sep 17 00:00:00 2001 From: Slavey Karadzhov Date: Mon, 12 Oct 2015 20:47:49 +0000 Subject: [PATCH 13/54] Added code to set Last Will And Testament. The keepAlive can be changed now. The MqttClient can connect to an IP and Port in addition to Host and Port. --- MqttClient_Hello/app/application.cpp | 1 + Sming/Services/libemqtt/libemqtt.c | 33 +++++++++++++++++++++++--- Sming/Services/libemqtt/libemqtt.h | 13 ++++++++++ Sming/SmingCore/Network/MqttClient.cpp | 32 +++++++++++++++++++++---- Sming/SmingCore/Network/MqttClient.h | 7 ++++++ 5 files changed, 79 insertions(+), 7 deletions(-) diff --git a/MqttClient_Hello/app/application.cpp b/MqttClient_Hello/app/application.cpp index 2081520199..353884b4c4 100644 --- a/MqttClient_Hello/app/application.cpp +++ b/MqttClient_Hello/app/application.cpp @@ -38,6 +38,7 @@ void onMessageReceived(String topic, String message) // Run MQTT client void startMqttClient() { + mqtt.setWill("last/will","The connection from this device is lost:(", 1, true); mqtt.connect("esp8266"); mqtt.subscribe("main/status/#"); } diff --git a/Sming/Services/libemqtt/libemqtt.c b/Sming/Services/libemqtt/libemqtt.c index 03d22eb9bd..c0eb749198 100644 --- a/Sming/Services/libemqtt/libemqtt.c +++ b/Sming/Services/libemqtt/libemqtt.c @@ -187,17 +187,18 @@ uint16_t mqtt_parse_pub_msg_ptr(const uint8_t* buf, const uint8_t **msg_ptr) { void mqtt_init(mqtt_broker_handle_t* broker, const char* clientid) { // Connection options broker->alive = 300; // 300 seconds = 5 minutes - broker->seq = 1; // Sequency for message indetifiers + broker->seq = 1; // Sequence for message identifiers // Client options memset(broker->clientid, 0, sizeof(broker->clientid)); memset(broker->username, 0, sizeof(broker->username)); memset(broker->password, 0, sizeof(broker->password)); + memset(broker->will_topic, 0, sizeof(broker->will_topic)); + memset(broker->will_message, 0, sizeof(broker->will_message)); if(clientid) { strncpy(broker->clientid, clientid, sizeof(broker->clientid)); } else { strcpy(broker->clientid, "emqtt"); } - // Will topic broker->clean_session = 1; } @@ -208,6 +209,13 @@ void mqtt_init_auth(mqtt_broker_handle_t* broker, const char* username, const ch strncpy(broker->password, password, sizeof(broker->password)-1); } +void mqtt_set_will(mqtt_broker_handle_t* broker, const char* topic, const char* message, uint8_t qos, uint8_t retain) { + strncpy(broker->will_topic, topic, sizeof(broker->will_topic)-1); + strncpy(broker->will_message, message, sizeof(broker->will_message)-1); + broker->will_qos = qos; + broker->will_retain = retain; +} + void mqtt_set_alive(mqtt_broker_handle_t* broker, uint16_t alive) { broker->alive = alive; } @@ -219,6 +227,7 @@ int mqtt_connect(mqtt_broker_handle_t* broker) uint16_t clientidlen = strlen(broker->clientid); uint16_t usernamelen = strlen(broker->username); uint16_t passwordlen = strlen(broker->password); + uint16_t willtopiclen = strlen(broker->will_topic); uint16_t payload_len = clientidlen + 2; // Preparing the flags @@ -230,6 +239,10 @@ int mqtt_connect(mqtt_broker_handle_t* broker) payload_len += passwordlen + 2; flags |= MQTT_PASSWORD_FLAG; } + if(willtopiclen) { + payload_len += willtopiclen + strlen(broker->will_message) + 4; + flags |= MQTT_WILL_FLAG; + } if(broker->clean_session) { flags |= MQTT_CLEAN_SESSION; } @@ -294,6 +307,20 @@ int mqtt_connect(mqtt_broker_handle_t* broker) offset += passwordlen; } + if(willtopiclen) { + // Add Last Will And Testament + packet[offset++] = willtopiclen>>8; + packet[offset++] = willtopiclen&0xFF; + memcpy(packet+offset, broker->will_topic, willtopiclen); + offset += willtopiclen; + + uint16_t willmessagelen = strlen(broker->will_message); + packet[offset++] = willmessagelen>>8; + packet[offset++] = willmessagelen&0xFF; + memcpy(packet+offset, broker->will_message, willmessagelen); + offset += willmessagelen; + } + // Send the packet if(broker->send(broker->socket_info, packet, sizeof(packet)) < sizeof(packet)) { return -1; @@ -497,4 +524,4 @@ int mqtt_unsubscribe(mqtt_broker_handle_t* broker, const char* topic, uint16_t* } return 1; -} \ No newline at end of file +} diff --git a/Sming/Services/libemqtt/libemqtt.h b/Sming/Services/libemqtt/libemqtt.h index 0a3ace4ffe..9ef379420d 100644 --- a/Sming/Services/libemqtt/libemqtt.h +++ b/Sming/Services/libemqtt/libemqtt.h @@ -168,6 +168,8 @@ typedef struct { // Will topic uint8_t will_retain; uint8_t will_qos; + char* will_topic; + char* will_message; uint8_t clean_session; // Management fields uint16_t seq; @@ -192,6 +194,17 @@ void mqtt_init(mqtt_broker_handle_t* broker, const char* clientid); */ void mqtt_init_auth(mqtt_broker_handle_t* broker, const char* username, const char* password); +/* +* @param broker Data structure that contains the connection information with the broker. +* @param topic The topic to which the last will should be sent +* @param message The message of the last will +* @param qos The Quality of Service for the last will (0,1 or 2) +* @param retain Sets if the last will should be retained +* +* @note Only has effect before to call mqtt_connect +*/ +void mqtt_set_will(mqtt_broker_handle_t* broker, const char* topic, const char* message, uint8_t qos, uint8_t retain); + /** Set the keep alive timer. * @param broker Data structure that contains the connection information with the broker. * @param alive Keep aliver timer value (in seconds). diff --git a/Sming/SmingCore/Network/MqttClient.cpp b/Sming/SmingCore/Network/MqttClient.cpp index 2a94baf863..d887a4b75b 100644 --- a/Sming/SmingCore/Network/MqttClient.cpp +++ b/Sming/SmingCore/Network/MqttClient.cpp @@ -20,10 +20,31 @@ MqttClient::MqttClient(String serverHost, int serverPort, MqttStringSubscription current = NULL; } +MqttClient::MqttClient(IPAddress serverIp, int serverPort, MqttStringSubscriptionCallback callback /* = NULL*/) + : TcpClient((bool)false) +{ + this->serverIp = serverIp; + port = serverPort; + this->callback = callback; + waitingSize = 0; + posHeader = 0; + current = NULL; +} + MqttClient::~MqttClient() { } +void MqttClient::setKeepAlive(int seconds) +{ + keepAlive = seconds; +} + +void MqttClient::setWill(String topic, String message, int QoS, bool retained /* = false*/) +{ + mqtt_set_will(&broker, topic.c_str(), message.c_str(), QoS, retained); +} + bool MqttClient::connect(String clientName) { return MqttClient::connect(clientName, "", ""); @@ -42,11 +63,14 @@ bool MqttClient::connect(String clientName, String username, String password) if (clientName.length() > 0) mqtt_init_auth(&broker, username.c_str(), password.c_str()); - int keepalive = 20; // Seconds - - TcpClient::connect(server, port); + if(server) { + TcpClient::connect(server, port); + } + else { + TcpClient::connect(serverIp, port); + } - mqtt_set_alive(&broker, keepalive); + mqtt_set_alive(&broker, keepAlive); broker.socket_info = (void*)this; broker.send = staticSendPacket; diff --git a/Sming/SmingCore/Network/MqttClient.h b/Sming/SmingCore/Network/MqttClient.h index 1fbf56e4cd..a8fd60b4b2 100644 --- a/Sming/SmingCore/Network/MqttClient.h +++ b/Sming/SmingCore/Network/MqttClient.h @@ -25,8 +25,13 @@ class MqttClient: protected TcpClient { public: MqttClient(String serverHost, int serverPort, MqttStringSubscriptionCallback callback = NULL); + MqttClient(IPAddress serverIp, int serverPort, MqttStringSubscriptionCallback callback = NULL); virtual ~MqttClient(); + void setKeepAlive(int seconds); + // Sets Last Will and Testament + void setWill(String topic, String message, int QoS, bool retained = false); + bool connect(String clientName); bool connect(String clientName, String username, String password); @@ -47,6 +52,7 @@ class MqttClient: protected TcpClient private: String server; + IPAddress serverIp; int port; mqtt_broker_handle_t broker; int waitingSize; @@ -54,6 +60,7 @@ class MqttClient: protected TcpClient uint8_t *current; int posHeader; MqttStringSubscriptionCallback callback; + int keepAlive = 50; }; From 81a395db5b77bbfba3f3de501df7d72a6f3f4d20 Mon Sep 17 00:00:00 2001 From: Slavey Karadzhov Date: Mon, 19 Oct 2015 00:51:33 +0200 Subject: [PATCH 14/54] Reverted the keepalive to 20 seconds. Memory allocation in case the will topic and the message are set. (Thanks to @raburton for noticing this). --- Sming/Services/libemqtt/libemqtt.c | 12 +++++++++--- Sming/SmingCore/Network/MqttClient.h | 2 +- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/Sming/Services/libemqtt/libemqtt.c b/Sming/Services/libemqtt/libemqtt.c index c0eb749198..41ff0e1368 100644 --- a/Sming/Services/libemqtt/libemqtt.c +++ b/Sming/Services/libemqtt/libemqtt.c @@ -27,6 +27,7 @@ #include #include +#include #define MQTT_DUP_FLAG 1<<3 #define MQTT_QOS0_FLAG 0<<1 @@ -192,8 +193,8 @@ void mqtt_init(mqtt_broker_handle_t* broker, const char* clientid) { memset(broker->clientid, 0, sizeof(broker->clientid)); memset(broker->username, 0, sizeof(broker->username)); memset(broker->password, 0, sizeof(broker->password)); - memset(broker->will_topic, 0, sizeof(broker->will_topic)); - memset(broker->will_message, 0, sizeof(broker->will_message)); + broker->will_topic = NULL; + broker->will_message = NULL; if(clientid) { strncpy(broker->clientid, clientid, sizeof(broker->clientid)); } else { @@ -210,6 +211,8 @@ void mqtt_init_auth(mqtt_broker_handle_t* broker, const char* username, const ch } void mqtt_set_will(mqtt_broker_handle_t* broker, const char* topic, const char* message, uint8_t qos, uint8_t retain) { + broker->will_topic = (char *)malloc(sizeof(topic)); + broker->will_message = (char *)malloc(sizeof(message)); strncpy(broker->will_topic, topic, sizeof(broker->will_topic)-1); strncpy(broker->will_message, message, sizeof(broker->will_message)-1); broker->will_qos = qos; @@ -227,7 +230,10 @@ int mqtt_connect(mqtt_broker_handle_t* broker) uint16_t clientidlen = strlen(broker->clientid); uint16_t usernamelen = strlen(broker->username); uint16_t passwordlen = strlen(broker->password); - uint16_t willtopiclen = strlen(broker->will_topic); + uint16_t willtopiclen = 0; + if(broker->will_topic!= NULL) { + willtopiclen = strlen(broker->will_topic); + } uint16_t payload_len = clientidlen + 2; // Preparing the flags diff --git a/Sming/SmingCore/Network/MqttClient.h b/Sming/SmingCore/Network/MqttClient.h index a8fd60b4b2..21fedff5a8 100644 --- a/Sming/SmingCore/Network/MqttClient.h +++ b/Sming/SmingCore/Network/MqttClient.h @@ -60,7 +60,7 @@ class MqttClient: protected TcpClient uint8_t *current; int posHeader; MqttStringSubscriptionCallback callback; - int keepAlive = 50; + int keepAlive = 20; }; From a498f861a5720a32a5ab0ca02468ad9d44907808 Mon Sep 17 00:00:00 2001 From: Slavey Karadzhov Date: Tue, 20 Oct 2015 14:41:22 -0700 Subject: [PATCH 15/54] Slightly better dynamic memory allocation. --- Sming/Services/libemqtt/libemqtt.c | 15 +++++++++++---- Sming/Services/libemqtt/libemqtt.h | 7 +++++++ Sming/SmingCore/Network/MqttClient.cpp | 1 + 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/Sming/Services/libemqtt/libemqtt.c b/Sming/Services/libemqtt/libemqtt.c index 41ff0e1368..f170aa3bc5 100644 --- a/Sming/Services/libemqtt/libemqtt.c +++ b/Sming/Services/libemqtt/libemqtt.c @@ -211,10 +211,10 @@ void mqtt_init_auth(mqtt_broker_handle_t* broker, const char* username, const ch } void mqtt_set_will(mqtt_broker_handle_t* broker, const char* topic, const char* message, uint8_t qos, uint8_t retain) { - broker->will_topic = (char *)malloc(sizeof(topic)); - broker->will_message = (char *)malloc(sizeof(message)); - strncpy(broker->will_topic, topic, sizeof(broker->will_topic)-1); - strncpy(broker->will_message, message, sizeof(broker->will_message)-1); + broker->will_topic = (char *)malloc(strlen(topic)+1); + broker->will_message = (char *)malloc(strlen(message)+1); + strcpy(broker->will_topic, topic); + strcpy(broker->will_message, message); broker->will_qos = qos; broker->will_retain = retain; } @@ -531,3 +531,10 @@ int mqtt_unsubscribe(mqtt_broker_handle_t* broker, const char* topic, uint16_t* return 1; } + +void mqtt_free(mqtt_broker_handle_t* broker) { + if(broker->will_topic != NULL) { + free(broker->will_topic); + free(broker->will_message); + } +} diff --git a/Sming/Services/libemqtt/libemqtt.h b/Sming/Services/libemqtt/libemqtt.h index 9ef379420d..1e3cc12441 100644 --- a/Sming/Services/libemqtt/libemqtt.h +++ b/Sming/Services/libemqtt/libemqtt.h @@ -300,6 +300,13 @@ int mqtt_unsubscribe(mqtt_broker_handle_t* broker, const char* topic, uint16_t* */ int mqtt_ping(mqtt_broker_handle_t* broker); +/** + * Frees dynamically allocated resources + * + * @param broker Data structure that contains the connection information with the broker. + */ +void mqtt_free(mqtt_broker_handle_t* broker); + #ifdef __cplusplus } #endif diff --git a/Sming/SmingCore/Network/MqttClient.cpp b/Sming/SmingCore/Network/MqttClient.cpp index d887a4b75b..e90a7ce0b9 100644 --- a/Sming/SmingCore/Network/MqttClient.cpp +++ b/Sming/SmingCore/Network/MqttClient.cpp @@ -33,6 +33,7 @@ MqttClient::MqttClient(IPAddress serverIp, int serverPort, MqttStringSubscriptio MqttClient::~MqttClient() { + mqtt_free(&broker); } void MqttClient::setKeepAlive(int seconds) From bcfdedd713c13cbecba85e924f4c022baff777fc Mon Sep 17 00:00:00 2001 From: Richard Antony Burton Date: Sat, 31 Oct 2015 22:27:00 +0000 Subject: [PATCH 16/54] few fixes to last will --- Sming/Services/libemqtt/libemqtt.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/Sming/Services/libemqtt/libemqtt.c b/Sming/Services/libemqtt/libemqtt.c index f170aa3bc5..2faab0447b 100644 --- a/Sming/Services/libemqtt/libemqtt.c +++ b/Sming/Services/libemqtt/libemqtt.c @@ -211,7 +211,9 @@ void mqtt_init_auth(mqtt_broker_handle_t* broker, const char* username, const ch } void mqtt_set_will(mqtt_broker_handle_t* broker, const char* topic, const char* message, uint8_t qos, uint8_t retain) { + if(broker->will_topic != NULL) free(broker->will_topic); broker->will_topic = (char *)malloc(strlen(topic)+1); + if(broker->will_message != NULL) free(broker->will_message); broker->will_message = (char *)malloc(strlen(message)+1); strcpy(broker->will_topic, topic); strcpy(broker->will_message, message); @@ -230,10 +232,7 @@ int mqtt_connect(mqtt_broker_handle_t* broker) uint16_t clientidlen = strlen(broker->clientid); uint16_t usernamelen = strlen(broker->username); uint16_t passwordlen = strlen(broker->password); - uint16_t willtopiclen = 0; - if(broker->will_topic!= NULL) { - willtopiclen = strlen(broker->will_topic); - } + uint16_t willtopiclen = (broker->will_topic != NULL) ? strlen(broker->will_topic) : 0; uint16_t payload_len = clientidlen + 2; // Preparing the flags @@ -535,6 +534,10 @@ int mqtt_unsubscribe(mqtt_broker_handle_t* broker, const char* topic, uint16_t* void mqtt_free(mqtt_broker_handle_t* broker) { if(broker->will_topic != NULL) { free(broker->will_topic); + broker->will_topic = NULL; + } + if(broker->will_message != NULL) { free(broker->will_message); + broker->will_message = NULL; } } From 1a8825311ab2b31876f089a07e9578871c2e034e Mon Sep 17 00:00:00 2001 From: Richard Antony Burton Date: Sat, 31 Oct 2015 22:55:32 +0000 Subject: [PATCH 17/54] further malloc related fix for sdk v1.4 --- Sming/system/include/esp_systemapi.h | 6 +++--- Sming/system/include/mem_manager.h | 1 + 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/Sming/system/include/esp_systemapi.h b/Sming/system/include/esp_systemapi.h index a6cb384883..b72aa4b62f 100644 --- a/Sming/system/include/esp_systemapi.h +++ b/Sming/system/include/esp_systemapi.h @@ -68,10 +68,10 @@ extern int os_printf_plus(const char *format, ...) __attribute__ ((format (prin extern int os_snprintf(char *str, size_t size, const char *format, ...) __attribute__ ((format (printf, 3, 4))); extern int ets_vsnprintf(char * s, size_t n, const char * format, va_list arg) __attribute__ ((format (printf, 3, 0))); -extern void *pvPortMalloc(size_t xWantedSize, char *file, uint32 line); -extern void *pvPortZalloc(size_t xWantedSize, char *file, uint32 line); +extern void *pvPortMalloc(size_t xWantedSize, const char *file, uint32 line); +extern void *pvPortZalloc(size_t xWantedSize, const char *file, uint32 line); extern void pvPortFree(void *ptr); -extern void vPortFree(void *ptr, char *file, uint32 line); +extern void vPortFree(void *ptr, const char *file, uint32 line); extern void *vPortMalloc(size_t xWantedSize); extern void uart_div_modify(int no, unsigned int freq); diff --git a/Sming/system/include/mem_manager.h b/Sming/system/include/mem_manager.h index 6dd2174b40..088170874e 100644 --- a/Sming/system/include/mem_manager.h +++ b/Sming/system/include/mem_manager.h @@ -2,6 +2,7 @@ #define __MEM_MANAGER_H__ //#include "c_types.h" +#include /*------------------------±äÁ¿¶¨Òå------------------------*/ From 2b8403aa479fafd8db059c38991605c408609fe8 Mon Sep 17 00:00:00 2001 From: Richard Antony Burton Date: Sat, 31 Oct 2015 22:56:02 +0000 Subject: [PATCH 18/54] remove unused binary openlwip library --- Sming/compiler/lib/libopenlwip.a | Bin 651712 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 Sming/compiler/lib/libopenlwip.a diff --git a/Sming/compiler/lib/libopenlwip.a b/Sming/compiler/lib/libopenlwip.a deleted file mode 100644 index 5c432bd81da8b68ea36520c03868e67251fa0700..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 651712 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ᅔ)!`%Y5et^zIJnMuBve|Q+ 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

2$2Z^n}7`kgin< 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 nbkw2#jl9k=*W4)QIvbg5Yh Date: Mon, 2 Nov 2015 17:13:16 +0000 Subject: [PATCH 19/54] smartconfig callback --- Accelerometer_MMA7455/include/user_config.h | 3 -- Basic_AirUpdate/include/user_config.h | 3 -- Basic_Blink/include/user_config.h | 3 -- Basic_Capsense/include/user_config.h | 3 -- Basic_Interrupts/include/user_config.h | 3 -- Basic_PWM/include/user_config.h | 3 -- Basic_ProgMem/include/user_config.h | 3 -- Basic_ScannerI2C/include/user_config.h | 3 -- Basic_Serial/include/user_config.h | 3 -- Basic_SmartConfig/app/application.cpp | 33 ++++++++++++++++++- Basic_SmartConfig/include/user_config.h | 3 -- Basic_WiFi/include/user_config.h | 3 -- Basic_rBoot/include/user_config.h | 3 -- Compass_HMC5883L/include/user_config.h | 3 -- FtpServer_Files/include/user_config.h | 3 -- HttpClient_Instapush/include/user_config.h | 3 -- HttpClient_ThingSpeak/include/user_config.h | 3 -- HttpServer_AJAX/include/user_config.h | 3 -- HttpServer_Bootstrap/include/user_config.h | 3 -- .../include/user_config.h | 3 -- HttpServer_WebSockets/include/user_config.h | 3 -- Humidity_DHT22/include/user_config.h | 3 -- IR_lib/include/user_config.h | 3 -- LED_WS2812/include/user_config.h | 3 -- Light_BH1750/include/user_config.h | 3 -- LiquidCrystal_44780/include/user_config.h | 3 -- MeteoControl/include/user_config.h | 3 -- MqttClient_Hello/include/user_config.h | 3 -- Pressure_BMP180/include/user_config.h | 3 -- Radio_nRF24L01/include/user_config.h | 3 -- Radio_si4432/include/user_config.h | 3 -- SDCard/include/user_config.h | 3 -- ScreenLCD_5110/include/user_config.h | 3 -- ScreenOLED_SSD1306/include/user_config.h | 3 -- ScreenTFT_ILI9163C/include/user_config.h | 3 -- .../include/user_config.h | 3 -- Sming/SmingCore/Platform/Station.cpp | 18 ++++++++-- Sming/SmingCore/Platform/Station.h | 22 +++++++++++-- Sming/include/user_config.h | 3 -- SystemClock_NTP/include/user_config.h | 3 -- TcpClient_NarodMon/include/user_config.h | 3 -- .../include/user_config.h | 3 -- Temperature_DS1820/include/user_config.h | 3 -- UdpServer_Echo/include/user_config.h | 3 -- UdpServer_mDNS/include/user_config.h | 3 -- Ultrasonic_HCSR04/include/user_config.h | 3 -- 46 files changed, 66 insertions(+), 136 deletions(-) diff --git a/Accelerometer_MMA7455/include/user_config.h b/Accelerometer_MMA7455/include/user_config.h index c36378f04e..1c6ac36703 100644 --- a/Accelerometer_MMA7455/include/user_config.h +++ b/Accelerometer_MMA7455/include/user_config.h @@ -35,9 +35,6 @@ extern "C" { // Network base API #include - // smart config support - #include - // Beta boards #define BOARD_ESP01 diff --git a/Basic_AirUpdate/include/user_config.h b/Basic_AirUpdate/include/user_config.h index c36378f04e..1c6ac36703 100644 --- a/Basic_AirUpdate/include/user_config.h +++ b/Basic_AirUpdate/include/user_config.h @@ -35,9 +35,6 @@ extern "C" { // Network base API #include - // smart config support - #include - // Beta boards #define BOARD_ESP01 diff --git a/Basic_Blink/include/user_config.h b/Basic_Blink/include/user_config.h index c36378f04e..1c6ac36703 100644 --- a/Basic_Blink/include/user_config.h +++ b/Basic_Blink/include/user_config.h @@ -35,9 +35,6 @@ extern "C" { // Network base API #include - // smart config support - #include - // Beta boards #define BOARD_ESP01 diff --git a/Basic_Capsense/include/user_config.h b/Basic_Capsense/include/user_config.h index c36378f04e..1c6ac36703 100644 --- a/Basic_Capsense/include/user_config.h +++ b/Basic_Capsense/include/user_config.h @@ -35,9 +35,6 @@ extern "C" { // Network base API #include - // smart config support - #include - // Beta boards #define BOARD_ESP01 diff --git a/Basic_Interrupts/include/user_config.h b/Basic_Interrupts/include/user_config.h index c36378f04e..1c6ac36703 100644 --- a/Basic_Interrupts/include/user_config.h +++ b/Basic_Interrupts/include/user_config.h @@ -35,9 +35,6 @@ extern "C" { // Network base API #include - // smart config support - #include - // Beta boards #define BOARD_ESP01 diff --git a/Basic_PWM/include/user_config.h b/Basic_PWM/include/user_config.h index c36378f04e..1c6ac36703 100644 --- a/Basic_PWM/include/user_config.h +++ b/Basic_PWM/include/user_config.h @@ -35,9 +35,6 @@ extern "C" { // Network base API #include - // smart config support - #include - // Beta boards #define BOARD_ESP01 diff --git a/Basic_ProgMem/include/user_config.h b/Basic_ProgMem/include/user_config.h index c36378f04e..1c6ac36703 100644 --- a/Basic_ProgMem/include/user_config.h +++ b/Basic_ProgMem/include/user_config.h @@ -35,9 +35,6 @@ extern "C" { // Network base API #include - // smart config support - #include - // Beta boards #define BOARD_ESP01 diff --git a/Basic_ScannerI2C/include/user_config.h b/Basic_ScannerI2C/include/user_config.h index c36378f04e..1c6ac36703 100644 --- a/Basic_ScannerI2C/include/user_config.h +++ b/Basic_ScannerI2C/include/user_config.h @@ -35,9 +35,6 @@ extern "C" { // Network base API #include - // smart config support - #include - // Beta boards #define BOARD_ESP01 diff --git a/Basic_Serial/include/user_config.h b/Basic_Serial/include/user_config.h index c36378f04e..1c6ac36703 100644 --- a/Basic_Serial/include/user_config.h +++ b/Basic_Serial/include/user_config.h @@ -35,9 +35,6 @@ extern "C" { // Network base API #include - // smart config support - #include - // Beta boards #define BOARD_ESP01 diff --git a/Basic_SmartConfig/app/application.cpp b/Basic_SmartConfig/app/application.cpp index 36e618b520..05bc6a9e31 100644 --- a/Basic_SmartConfig/app/application.cpp +++ b/Basic_SmartConfig/app/application.cpp @@ -1,6 +1,34 @@ #include #include +void smartConfigCallback(sc_status status, void *pdata) { + + switch (status) { + case SC_STATUS_WAIT: + debugf("SC_STATUS_WAIT\n"); + break; + case SC_STATUS_FIND_CHANNEL: + debugf("SC_STATUS_FIND_CHANNEL\n"); + break; + case SC_STATUS_GETTING_SSID_PSWD: + debugf("SC_STATUS_GETTING_SSID_PSWD\n"); + break; + case SC_STATUS_LINK: + { + debugf("SC_STATUS_LINK\n"); + station_config *sta_conf = (station_config *)pdata; + char *ssid = (char*)sta_conf->ssid; + char *password = (char*)sta_conf->password; + WifiStation.config(ssid, password); + } + break; + case SC_STATUS_LINK_OVER: + debugf("SC_STATUS_LINK_OVER\n"); + WifiStation.smartConfigStop(); + break; + } +} + void init() { Serial.begin(SERIAL_BAUD_RATE); // 115200 by default @@ -8,5 +36,8 @@ void init() WifiAccessPoint.enable(false); WifiStation.enable(true); - WifiStation.smartConfigStart(SCT_EspTouch); + // autmoatic (acts as the sample callback above) + //WifiStation.smartConfigStart(SCT_EspTouch); + // manual, use callback above + WifiStation.smartConfigStart(SCT_EspTouch, smartConfigCallback); } diff --git a/Basic_SmartConfig/include/user_config.h b/Basic_SmartConfig/include/user_config.h index c36378f04e..1c6ac36703 100644 --- a/Basic_SmartConfig/include/user_config.h +++ b/Basic_SmartConfig/include/user_config.h @@ -35,9 +35,6 @@ extern "C" { // Network base API #include - // smart config support - #include - // Beta boards #define BOARD_ESP01 diff --git a/Basic_WiFi/include/user_config.h b/Basic_WiFi/include/user_config.h index c36378f04e..1c6ac36703 100644 --- a/Basic_WiFi/include/user_config.h +++ b/Basic_WiFi/include/user_config.h @@ -35,9 +35,6 @@ extern "C" { // Network base API #include - // smart config support - #include - // Beta boards #define BOARD_ESP01 diff --git a/Basic_rBoot/include/user_config.h b/Basic_rBoot/include/user_config.h index c36378f04e..1c6ac36703 100644 --- a/Basic_rBoot/include/user_config.h +++ b/Basic_rBoot/include/user_config.h @@ -35,9 +35,6 @@ extern "C" { // Network base API #include - // smart config support - #include - // Beta boards #define BOARD_ESP01 diff --git a/Compass_HMC5883L/include/user_config.h b/Compass_HMC5883L/include/user_config.h index c36378f04e..1c6ac36703 100644 --- a/Compass_HMC5883L/include/user_config.h +++ b/Compass_HMC5883L/include/user_config.h @@ -35,9 +35,6 @@ extern "C" { // Network base API #include - // smart config support - #include - // Beta boards #define BOARD_ESP01 diff --git a/FtpServer_Files/include/user_config.h b/FtpServer_Files/include/user_config.h index c36378f04e..1c6ac36703 100644 --- a/FtpServer_Files/include/user_config.h +++ b/FtpServer_Files/include/user_config.h @@ -35,9 +35,6 @@ extern "C" { // Network base API #include - // smart config support - #include - // Beta boards #define BOARD_ESP01 diff --git a/HttpClient_Instapush/include/user_config.h b/HttpClient_Instapush/include/user_config.h index c36378f04e..1c6ac36703 100644 --- a/HttpClient_Instapush/include/user_config.h +++ b/HttpClient_Instapush/include/user_config.h @@ -35,9 +35,6 @@ extern "C" { // Network base API #include - // smart config support - #include - // Beta boards #define BOARD_ESP01 diff --git a/HttpClient_ThingSpeak/include/user_config.h b/HttpClient_ThingSpeak/include/user_config.h index c36378f04e..1c6ac36703 100644 --- a/HttpClient_ThingSpeak/include/user_config.h +++ b/HttpClient_ThingSpeak/include/user_config.h @@ -35,9 +35,6 @@ extern "C" { // Network base API #include - // smart config support - #include - // Beta boards #define BOARD_ESP01 diff --git a/HttpServer_AJAX/include/user_config.h b/HttpServer_AJAX/include/user_config.h index c36378f04e..1c6ac36703 100644 --- a/HttpServer_AJAX/include/user_config.h +++ b/HttpServer_AJAX/include/user_config.h @@ -35,9 +35,6 @@ extern "C" { // Network base API #include - // smart config support - #include - // Beta boards #define BOARD_ESP01 diff --git a/HttpServer_Bootstrap/include/user_config.h b/HttpServer_Bootstrap/include/user_config.h index c36378f04e..1c6ac36703 100644 --- a/HttpServer_Bootstrap/include/user_config.h +++ b/HttpServer_Bootstrap/include/user_config.h @@ -35,9 +35,6 @@ extern "C" { // Network base API #include - // smart config support - #include - // Beta boards #define BOARD_ESP01 diff --git a/HttpServer_ConfigNetwork/include/user_config.h b/HttpServer_ConfigNetwork/include/user_config.h index c36378f04e..1c6ac36703 100644 --- a/HttpServer_ConfigNetwork/include/user_config.h +++ b/HttpServer_ConfigNetwork/include/user_config.h @@ -35,9 +35,6 @@ extern "C" { // Network base API #include - // smart config support - #include - // Beta boards #define BOARD_ESP01 diff --git a/HttpServer_WebSockets/include/user_config.h b/HttpServer_WebSockets/include/user_config.h index c36378f04e..1c6ac36703 100644 --- a/HttpServer_WebSockets/include/user_config.h +++ b/HttpServer_WebSockets/include/user_config.h @@ -35,9 +35,6 @@ extern "C" { // Network base API #include - // smart config support - #include - // Beta boards #define BOARD_ESP01 diff --git a/Humidity_DHT22/include/user_config.h b/Humidity_DHT22/include/user_config.h index c36378f04e..1c6ac36703 100644 --- a/Humidity_DHT22/include/user_config.h +++ b/Humidity_DHT22/include/user_config.h @@ -35,9 +35,6 @@ extern "C" { // Network base API #include - // smart config support - #include - // Beta boards #define BOARD_ESP01 diff --git a/IR_lib/include/user_config.h b/IR_lib/include/user_config.h index c36378f04e..1c6ac36703 100644 --- a/IR_lib/include/user_config.h +++ b/IR_lib/include/user_config.h @@ -35,9 +35,6 @@ extern "C" { // Network base API #include - // smart config support - #include - // Beta boards #define BOARD_ESP01 diff --git a/LED_WS2812/include/user_config.h b/LED_WS2812/include/user_config.h index c36378f04e..1c6ac36703 100644 --- a/LED_WS2812/include/user_config.h +++ b/LED_WS2812/include/user_config.h @@ -35,9 +35,6 @@ extern "C" { // Network base API #include - // smart config support - #include - // Beta boards #define BOARD_ESP01 diff --git a/Light_BH1750/include/user_config.h b/Light_BH1750/include/user_config.h index c36378f04e..1c6ac36703 100644 --- a/Light_BH1750/include/user_config.h +++ b/Light_BH1750/include/user_config.h @@ -35,9 +35,6 @@ extern "C" { // Network base API #include - // smart config support - #include - // Beta boards #define BOARD_ESP01 diff --git a/LiquidCrystal_44780/include/user_config.h b/LiquidCrystal_44780/include/user_config.h index c36378f04e..1c6ac36703 100644 --- a/LiquidCrystal_44780/include/user_config.h +++ b/LiquidCrystal_44780/include/user_config.h @@ -35,9 +35,6 @@ extern "C" { // Network base API #include - // smart config support - #include - // Beta boards #define BOARD_ESP01 diff --git a/MeteoControl/include/user_config.h b/MeteoControl/include/user_config.h index c36378f04e..1c6ac36703 100644 --- a/MeteoControl/include/user_config.h +++ b/MeteoControl/include/user_config.h @@ -35,9 +35,6 @@ extern "C" { // Network base API #include - // smart config support - #include - // Beta boards #define BOARD_ESP01 diff --git a/MqttClient_Hello/include/user_config.h b/MqttClient_Hello/include/user_config.h index c36378f04e..1c6ac36703 100644 --- a/MqttClient_Hello/include/user_config.h +++ b/MqttClient_Hello/include/user_config.h @@ -35,9 +35,6 @@ extern "C" { // Network base API #include - // smart config support - #include - // Beta boards #define BOARD_ESP01 diff --git a/Pressure_BMP180/include/user_config.h b/Pressure_BMP180/include/user_config.h index c36378f04e..1c6ac36703 100644 --- a/Pressure_BMP180/include/user_config.h +++ b/Pressure_BMP180/include/user_config.h @@ -35,9 +35,6 @@ extern "C" { // Network base API #include - // smart config support - #include - // Beta boards #define BOARD_ESP01 diff --git a/Radio_nRF24L01/include/user_config.h b/Radio_nRF24L01/include/user_config.h index c36378f04e..1c6ac36703 100644 --- a/Radio_nRF24L01/include/user_config.h +++ b/Radio_nRF24L01/include/user_config.h @@ -35,9 +35,6 @@ extern "C" { // Network base API #include - // smart config support - #include - // Beta boards #define BOARD_ESP01 diff --git a/Radio_si4432/include/user_config.h b/Radio_si4432/include/user_config.h index c36378f04e..1c6ac36703 100644 --- a/Radio_si4432/include/user_config.h +++ b/Radio_si4432/include/user_config.h @@ -35,9 +35,6 @@ extern "C" { // Network base API #include - // smart config support - #include - // Beta boards #define BOARD_ESP01 diff --git a/SDCard/include/user_config.h b/SDCard/include/user_config.h index c36378f04e..1c6ac36703 100644 --- a/SDCard/include/user_config.h +++ b/SDCard/include/user_config.h @@ -35,9 +35,6 @@ extern "C" { // Network base API #include - // smart config support - #include - // Beta boards #define BOARD_ESP01 diff --git a/ScreenLCD_5110/include/user_config.h b/ScreenLCD_5110/include/user_config.h index c36378f04e..1c6ac36703 100644 --- a/ScreenLCD_5110/include/user_config.h +++ b/ScreenLCD_5110/include/user_config.h @@ -35,9 +35,6 @@ extern "C" { // Network base API #include - // smart config support - #include - // Beta boards #define BOARD_ESP01 diff --git a/ScreenOLED_SSD1306/include/user_config.h b/ScreenOLED_SSD1306/include/user_config.h index c36378f04e..1c6ac36703 100644 --- a/ScreenOLED_SSD1306/include/user_config.h +++ b/ScreenOLED_SSD1306/include/user_config.h @@ -35,9 +35,6 @@ extern "C" { // Network base API #include - // smart config support - #include - // Beta boards #define BOARD_ESP01 diff --git a/ScreenTFT_ILI9163C/include/user_config.h b/ScreenTFT_ILI9163C/include/user_config.h index c36378f04e..1c6ac36703 100644 --- a/ScreenTFT_ILI9163C/include/user_config.h +++ b/ScreenTFT_ILI9163C/include/user_config.h @@ -35,9 +35,6 @@ extern "C" { // Network base API #include - // smart config support - #include - // Beta boards #define BOARD_ESP01 diff --git a/ScreenTFT_ILI9340-ILI9341/include/user_config.h b/ScreenTFT_ILI9340-ILI9341/include/user_config.h index c36378f04e..1c6ac36703 100644 --- a/ScreenTFT_ILI9340-ILI9341/include/user_config.h +++ b/ScreenTFT_ILI9340-ILI9341/include/user_config.h @@ -35,9 +35,6 @@ extern "C" { // Network base API #include - // smart config support - #include - // Beta boards #define BOARD_ESP01 diff --git a/Sming/SmingCore/Platform/Station.cpp b/Sming/SmingCore/Platform/Station.cpp index 5ad1cf2cb3..0cdeeb1d23 100644 --- a/Sming/SmingCore/Platform/Station.cpp +++ b/Sming/SmingCore/Platform/Station.cpp @@ -351,7 +351,18 @@ const char* StationClass::getConnectionStatusName() }; } -void smartConfigDone(sc_status status, void *pdata) { +bool StationClass::callSmartConfigCallback(sc_status status, void *pdata) { + if (smartConfigCallback) { + smartConfigCallback(status, pdata); + return true; + } else { + return false; + } +} + +void smartConfigDefaultCallback(sc_status status, void *pdata) { + + if (WifiStation.callSmartConfigCallback(status, pdata)) return; switch (status) { case SC_STATUS_WAIT: @@ -379,9 +390,10 @@ void smartConfigDone(sc_status status, void *pdata) { } } -void StationClass::smartConfigStart(SmartConfigType sctype) { +void StationClass::smartConfigStart(SmartConfigType sctype, SmartConfigDelegate callback) { + smartConfigCallback = callback; smartconfig_set_type((sc_type)sctype); - smartconfig_start(smartConfigDone); + smartconfig_start(smartConfigDefaultCallback); } void StationClass::smartConfigStop() { diff --git a/Sming/SmingCore/Platform/Station.h b/Sming/SmingCore/Platform/Station.h index 93e5ec0017..02aaf73bf3 100644 --- a/Sming/SmingCore/Platform/Station.h +++ b/Sming/SmingCore/Platform/Station.h @@ -15,9 +15,13 @@ #include "../../Wiring/WVector.h" #include "../../Wiring/IPAddress.h" +extern "C" { + #include +} + enum EStationConnectionStatus { - eSCS_Idle = 0, + eSCS_Idle = 0, eSCS_Connecting, eSCS_WrongPassword, eSCS_AccessPointNotFound, @@ -27,17 +31,27 @@ enum EStationConnectionStatus enum SmartConfigType { - SCT_EspTouch = SC_TYPE_ESPTOUCH, + SCT_EspTouch = SC_TYPE_ESPTOUCH, SCT_AirKiss = SC_TYPE_AIRKISS, SCT_EspTouch_AirKiss = SC_TYPE_ESPTOUCH_AIRKISS }; +enum SmartConfigEvent +{ + SCE_Wait = SC_STATUS_WAIT, + SCE_FindChannel = SC_STATUS_FIND_CHANNEL, + SCE_GotSsid = SC_STATUS_GETTING_SSID_PSWD, + SEC_Link = SC_STATUS_LINK, + SEC_LinkOver = SC_STATUS_LINK_OVER +}; + class BssInfo; class Timer; typedef Vector BssList; typedef Delegate ScanCompletedDelegate; typedef Delegate ConnectionDelegate; +typedef Delegate SmartConfigDelegate; class StationClass : protected ISystemReadyHandler { @@ -74,8 +88,9 @@ class StationClass : protected ISystemReadyHandler void waitConnection(ConnectionDelegate successfulConnected); void waitConnection(ConnectionDelegate successfulConnected, int secondsTimeOut, ConnectionDelegate connectionNotEstablished); - void smartConfigStart(SmartConfigType sctype); + void smartConfigStart(SmartConfigType sctype, SmartConfigDelegate callback = NULL); void smartConfigStop(); + bool callSmartConfigCallback(sc_status status, void *pdata); protected: virtual void onSystemReady(); @@ -86,6 +101,7 @@ class StationClass : protected ISystemReadyHandler private: ScanCompletedDelegate scanCompletedCallback; + SmartConfigDelegate smartConfigCallback; bool runScan; ConnectionDelegate onConnectOk; diff --git a/Sming/include/user_config.h b/Sming/include/user_config.h index c36378f04e..1c6ac36703 100644 --- a/Sming/include/user_config.h +++ b/Sming/include/user_config.h @@ -35,9 +35,6 @@ extern "C" { // Network base API #include - // smart config support - #include - // Beta boards #define BOARD_ESP01 diff --git a/SystemClock_NTP/include/user_config.h b/SystemClock_NTP/include/user_config.h index c36378f04e..1c6ac36703 100644 --- a/SystemClock_NTP/include/user_config.h +++ b/SystemClock_NTP/include/user_config.h @@ -35,9 +35,6 @@ extern "C" { // Network base API #include - // smart config support - #include - // Beta boards #define BOARD_ESP01 diff --git a/TcpClient_NarodMon/include/user_config.h b/TcpClient_NarodMon/include/user_config.h index c36378f04e..1c6ac36703 100644 --- a/TcpClient_NarodMon/include/user_config.h +++ b/TcpClient_NarodMon/include/user_config.h @@ -35,9 +35,6 @@ extern "C" { // Network base API #include - // smart config support - #include - // Beta boards #define BOARD_ESP01 diff --git a/Telnet_TCPServer_TCPClient/include/user_config.h b/Telnet_TCPServer_TCPClient/include/user_config.h index c36378f04e..1c6ac36703 100644 --- a/Telnet_TCPServer_TCPClient/include/user_config.h +++ b/Telnet_TCPServer_TCPClient/include/user_config.h @@ -35,9 +35,6 @@ extern "C" { // Network base API #include - // smart config support - #include - // Beta boards #define BOARD_ESP01 diff --git a/Temperature_DS1820/include/user_config.h b/Temperature_DS1820/include/user_config.h index c36378f04e..1c6ac36703 100644 --- a/Temperature_DS1820/include/user_config.h +++ b/Temperature_DS1820/include/user_config.h @@ -35,9 +35,6 @@ extern "C" { // Network base API #include - // smart config support - #include - // Beta boards #define BOARD_ESP01 diff --git a/UdpServer_Echo/include/user_config.h b/UdpServer_Echo/include/user_config.h index c36378f04e..1c6ac36703 100644 --- a/UdpServer_Echo/include/user_config.h +++ b/UdpServer_Echo/include/user_config.h @@ -35,9 +35,6 @@ extern "C" { // Network base API #include - // smart config support - #include - // Beta boards #define BOARD_ESP01 diff --git a/UdpServer_mDNS/include/user_config.h b/UdpServer_mDNS/include/user_config.h index c36378f04e..1c6ac36703 100644 --- a/UdpServer_mDNS/include/user_config.h +++ b/UdpServer_mDNS/include/user_config.h @@ -35,9 +35,6 @@ extern "C" { // Network base API #include - // smart config support - #include - // Beta boards #define BOARD_ESP01 diff --git a/Ultrasonic_HCSR04/include/user_config.h b/Ultrasonic_HCSR04/include/user_config.h index c36378f04e..1c6ac36703 100644 --- a/Ultrasonic_HCSR04/include/user_config.h +++ b/Ultrasonic_HCSR04/include/user_config.h @@ -35,9 +35,6 @@ extern "C" { // Network base API #include - // smart config support - #include - // Beta boards #define BOARD_ESP01 From 6d26f299b3b70dd08672776752b821ca1449ba92 Mon Sep 17 00:00:00 2001 From: Richard Antony Burton Date: Mon, 2 Nov 2015 18:08:40 +0000 Subject: [PATCH 20/54] reduce default spiffs size for 512k flash, closes #387 --- Sming/Makefile-project.mk | 54 ++++++++++++++------------------------ Sming/Makefile-rboot.mk | 55 ++++++++++++++------------------------- 2 files changed, 40 insertions(+), 69 deletions(-) diff --git a/Sming/Makefile-project.mk b/Sming/Makefile-project.mk index 9fd3fe8052..d328bafb38 100644 --- a/Sming/Makefile-project.mk +++ b/Sming/Makefile-project.mk @@ -156,54 +156,40 @@ LD_SCRIPT = $(LD_PATH)eagle.app.v6.cpp.ld ifeq ($(SPI_SPEED), 26) flashimageoptions = -ff 26m +else ifeq ($(SPI_SPEED), 20) + flashimageoptions = -ff 20m +else ifeq ($(SPI_SPEED), 80) + flashimageoptions = -ff 80m else - ifeq ($(SPI_SPEED), 20) - flashimageoptions = -ff 20m - else - ifeq ($(SPI_SPEED), 80) - flashimageoptions = -ff 80m - else - flashimageoptions = -ff 40m - endif - endif + flashimageoptions = -ff 40m endif ifeq ($(SPI_MODE), qout) flashimageoptions += -fm qout -else - ifeq ($(SPI_MODE), dio) +else ifeq ($(SPI_MODE), dio) flashimageoptions += -fm dio - else - ifeq ($(SPI_MODE), dout) - flashimageoptions += -fm dout - else - flashimageoptions += -fm qio - endif - endif +else ifeq ($(SPI_MODE), dout) + flashimageoptions += -fm dout +else + flashimageoptions += -fm qio endif # flash larger than 1024KB only use 1024KB to storage user1.bin and user2.bin ifeq ($(SPI_SIZE), 256K) flashimageoptions += -fs 2m SPIFF_SIZE ?= 131072 #128K -else - ifeq ($(SPI_SIZE), 1M) +else ifeq ($(SPI_SIZE), 1M) flashimageoptions += -fs 8m SPIFF_SIZE ?= 524288 #512K - else - ifeq ($(SPI_SIZE), 2M) - flashimageoptions += -fs 16m - SPIFF_SIZE ?= 524288 #512K - else - ifeq ($(SPI_SIZE), 4M) - flashimageoptions += -fs 32m - SPIFF_SIZE ?= 524288 #512K - else - flashimageoptions += -fs 4m - SPIFF_SIZE ?= 262144 #256K - endif - endif - endif +else ifeq ($(SPI_SIZE), 2M) + flashimageoptions += -fs 16m + SPIFF_SIZE ?= 524288 #512K +else ifeq ($(SPI_SIZE), 4M) + flashimageoptions += -fs 32m + SPIFF_SIZE ?= 524288 #512K +else + flashimageoptions += -fs 4m + SPIFF_SIZE ?= 196608 #192K endif # various paths from the SDK used in this project diff --git a/Sming/Makefile-rboot.mk b/Sming/Makefile-rboot.mk index efdb99929c..7604c22e9f 100644 --- a/Sming/Makefile-rboot.mk +++ b/Sming/Makefile-rboot.mk @@ -173,54 +173,39 @@ LDFLAGS = -nostdlib -u call_user_start -u Cache_Read_Enable_New -Wl,-static -Wl ifeq ($(SPI_SPEED), 26) flashimageoptions = -ff 26m +else ifeq ($(SPI_SPEED), 20) + flashimageoptions = -ff 20m +else ifeq ($(SPI_SPEED), 80) + flashimageoptions = -ff 80m else - ifeq ($(SPI_SPEED), 20) - flashimageoptions = -ff 20m - else - ifeq ($(SPI_SPEED), 80) - flashimageoptions = -ff 80m - else - flashimageoptions = -ff 40m - endif - endif + flashimageoptions = -ff 40m endif ifeq ($(SPI_MODE), qout) flashimageoptions += -fm qout -else - ifeq ($(SPI_MODE), dio) +else ifeq ($(SPI_MODE), dio) flashimageoptions += -fm dio - else - ifeq ($(SPI_MODE), dout) - flashimageoptions += -fm dout - else - flashimageoptions += -fm qio - endif - endif +else ifeq ($(SPI_MODE), dout) + flashimageoptions += -fm dout +else + flashimageoptions += -fm qio endif -# flash larger than 1024KB only use 1024KB to storage user1.bin and user2.bin ifeq ($(SPI_SIZE), 256K) flashimageoptions += -fs 2m SPIFF_SIZE ?= 131072 #128K -else - ifeq ($(SPI_SIZE), 1M) +else ifeq ($(SPI_SIZE), 1M) flashimageoptions += -fs 8m SPIFF_SIZE ?= 524288 #512K - else - ifeq ($(SPI_SIZE), 2M) - flashimageoptions += -fs 16m - SPIFF_SIZE ?= 524288 #512K - else - ifeq ($(SPI_SIZE), 4M) - flashimageoptions += -fs 32m - SPIFF_SIZE ?= 524288 #512K - else - flashimageoptions += -fs 4m - SPIFF_SIZE ?= 262144 #256K - endif - endif - endif +else ifeq ($(SPI_SIZE), 2M) + flashimageoptions += -fs 16m + SPIFF_SIZE ?= 524288 #512K +else ifeq ($(SPI_SIZE), 4M) + flashimageoptions += -fs 32m + SPIFF_SIZE ?= 524288 #512K +else + flashimageoptions += -fs 4m + SPIFF_SIZE ?= 196608 #192K endif CFLAGS += -DSPIFF_SIZE=$(SPIFF_SIZE) CFLAGS += -DRBOOT_SPIFFS_0=$(RBOOT_SPIFFS_0) From 4875dcce9e153efc919af9b6faf1017703b8b8d4 Mon Sep 17 00:00:00 2001 From: hreintke Date: Fri, 17 Jul 2015 10:40:58 +0200 Subject: [PATCH 21/54] Websockets CommandHandler implementation --- CommandProcessing_Debug/.cproject | 151 ++++++++++++++++ CommandProcessing_Debug/.project | 28 +++ .../org.eclipse.cdt.codan.core.prefs | 67 +++++++ .../.settings/org.eclipse.cdt.core.prefs | 163 ++++++++++++++++++ .../.settings/org.eclipse.cdt.ui.prefs | 3 + CommandProcessing_Debug/Makefile | 20 +++ CommandProcessing_Debug/Makefile-user.mk | 30 ++++ CommandProcessing_Debug/app/application.cpp | 128 ++++++++++++++ CommandProcessing_Debug/files/index.html | 122 +++++++++++++ CommandProcessing_Debug/files/sockettest.html | 122 +++++++++++++ CommandProcessing_Debug/include/user_config.h | 45 +++++ .../web/build/bootstrap.css.gz | Bin 0 -> 15615 bytes CommandProcessing_Debug/web/build/index.html | 96 +++++++++++ .../web/build/jquery.js.gz | Bin 0 -> 30153 bytes CommandProcessing_Debug/web/dev/bootstrap.css | 2 + CommandProcessing_Debug/web/dev/index.html | 96 +++++++++++ CommandProcessing_Debug/web/dev/jquery.js | 4 + .../CommandProcessing/CommandExecutor.cpp | 57 ++++-- .../CommandProcessing/CommandExecutor.h | 5 +- .../CommandProcessing/CommandHandler.cpp | 95 ++++++++++ .../CommandProcessing/CommandHandler.h | 16 +- .../CommandProcessing/CommandOutput.cpp | 20 ++- .../CommandProcessing/CommandOutput.h | 4 + Sming/SmingCore/Network/HttpServer.cpp | 23 ++- Sming/SmingCore/Network/HttpServer.h | 5 + Sming/SmingCore/Network/TelnetServer.cpp | 20 ++- Sming/SmingCore/Network/TelnetServer.h | 4 +- Sming/SmingCore/Network/WebSocket.cpp | 16 ++ Sming/SmingCore/Network/WebSocket.h | 7 +- Sming/Wiring/WVector.h | 10 ++ commandHandler.md | 52 ++++++ 31 files changed, 1378 insertions(+), 33 deletions(-) create mode 100644 CommandProcessing_Debug/.cproject create mode 100644 CommandProcessing_Debug/.project create mode 100644 CommandProcessing_Debug/.settings/org.eclipse.cdt.codan.core.prefs create mode 100644 CommandProcessing_Debug/.settings/org.eclipse.cdt.core.prefs create mode 100644 CommandProcessing_Debug/.settings/org.eclipse.cdt.ui.prefs create mode 100644 CommandProcessing_Debug/Makefile create mode 100644 CommandProcessing_Debug/Makefile-user.mk create mode 100644 CommandProcessing_Debug/app/application.cpp create mode 100644 CommandProcessing_Debug/files/index.html create mode 100644 CommandProcessing_Debug/files/sockettest.html create mode 100644 CommandProcessing_Debug/include/user_config.h create mode 100644 CommandProcessing_Debug/web/build/bootstrap.css.gz create mode 100644 CommandProcessing_Debug/web/build/index.html create mode 100644 CommandProcessing_Debug/web/build/jquery.js.gz create mode 100644 CommandProcessing_Debug/web/dev/bootstrap.css create mode 100644 CommandProcessing_Debug/web/dev/index.html create mode 100644 CommandProcessing_Debug/web/dev/jquery.js create mode 100644 commandHandler.md diff --git a/CommandProcessing_Debug/.cproject b/CommandProcessing_Debug/.cproject new file mode 100644 index 0000000000..b3cd7e9a01 --- /dev/null +++ b/CommandProcessing_Debug/.cproject @@ -0,0 +1,151 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + make + -f ${ProjDirPath}/Makefile + all + true + true + true + + + make + -f ${ProjDirPath}/Makefile + clean + true + true + true + + + make + -f ${ProjDirPath}/Makefile + flash + true + true + true + + + make + -f ${ProjDirPath}/Makefile + flashonefile + true + true + true + + + make + -f ${ProjDirPath}/Makefile + flashinit + true + true + true + + + make + -f ${ProjDirPath}/Makefile + flashboot + true + true + true + + + make + -f ${ProjDirPath}/Makefile + rebuild + true + true + true + + + + + + + + + + + + + + + + + + + + diff --git a/CommandProcessing_Debug/.project b/CommandProcessing_Debug/.project new file mode 100644 index 0000000000..f550083103 --- /dev/null +++ b/CommandProcessing_Debug/.project @@ -0,0 +1,28 @@ + + + CommandProcessing_Debug + + + SmingFramework + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.core.ccnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + diff --git a/CommandProcessing_Debug/.settings/org.eclipse.cdt.codan.core.prefs b/CommandProcessing_Debug/.settings/org.eclipse.cdt.codan.core.prefs new file mode 100644 index 0000000000..77386c23cb --- /dev/null +++ b/CommandProcessing_Debug/.settings/org.eclipse.cdt.codan.core.prefs @@ -0,0 +1,67 @@ +eclipse.preferences.version=1 +org.eclipse.cdt.codan.checkers.errnoreturn=Warning +org.eclipse.cdt.codan.checkers.errnoreturn.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},implicit\=>false} +org.eclipse.cdt.codan.checkers.errreturnvalue=Error +org.eclipse.cdt.codan.checkers.errreturnvalue.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} +org.eclipse.cdt.codan.checkers.noreturn=Error +org.eclipse.cdt.codan.checkers.noreturn.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},implicit\=>false} +org.eclipse.cdt.codan.internal.checkers.AbstractClassCreation=Error +org.eclipse.cdt.codan.internal.checkers.AbstractClassCreation.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} +org.eclipse.cdt.codan.internal.checkers.AmbiguousProblem=Error +org.eclipse.cdt.codan.internal.checkers.AmbiguousProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} +org.eclipse.cdt.codan.internal.checkers.AssignmentInConditionProblem=Warning +org.eclipse.cdt.codan.internal.checkers.AssignmentInConditionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} +org.eclipse.cdt.codan.internal.checkers.AssignmentToItselfProblem=Error +org.eclipse.cdt.codan.internal.checkers.AssignmentToItselfProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} +org.eclipse.cdt.codan.internal.checkers.CaseBreakProblem=Warning +org.eclipse.cdt.codan.internal.checkers.CaseBreakProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},no_break_comment\=>"no break",last_case_param\=>false,empty_case_param\=>false} +org.eclipse.cdt.codan.internal.checkers.CatchByReference=Warning +org.eclipse.cdt.codan.internal.checkers.CatchByReference.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},unknown\=>false,exceptions\=>()} +org.eclipse.cdt.codan.internal.checkers.CircularReferenceProblem=Error +org.eclipse.cdt.codan.internal.checkers.CircularReferenceProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} +org.eclipse.cdt.codan.internal.checkers.ClassMembersInitialization=Warning +org.eclipse.cdt.codan.internal.checkers.ClassMembersInitialization.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},skip\=>true} +org.eclipse.cdt.codan.internal.checkers.FieldResolutionProblem=Error +org.eclipse.cdt.codan.internal.checkers.FieldResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} +org.eclipse.cdt.codan.internal.checkers.FunctionResolutionProblem=Error +org.eclipse.cdt.codan.internal.checkers.FunctionResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} +org.eclipse.cdt.codan.internal.checkers.InvalidArguments=Error +org.eclipse.cdt.codan.internal.checkers.InvalidArguments.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} +org.eclipse.cdt.codan.internal.checkers.InvalidTemplateArgumentsProblem=Error +org.eclipse.cdt.codan.internal.checkers.InvalidTemplateArgumentsProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} +org.eclipse.cdt.codan.internal.checkers.LabelStatementNotFoundProblem=Error +org.eclipse.cdt.codan.internal.checkers.LabelStatementNotFoundProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} +org.eclipse.cdt.codan.internal.checkers.MemberDeclarationNotFoundProblem=Error +org.eclipse.cdt.codan.internal.checkers.MemberDeclarationNotFoundProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} +org.eclipse.cdt.codan.internal.checkers.MethodResolutionProblem=Error +org.eclipse.cdt.codan.internal.checkers.MethodResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} +org.eclipse.cdt.codan.internal.checkers.NamingConventionFunctionChecker=-Info +org.eclipse.cdt.codan.internal.checkers.NamingConventionFunctionChecker.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},pattern\=>"^[a-z]",macro\=>true,exceptions\=>()} +org.eclipse.cdt.codan.internal.checkers.NonVirtualDestructorProblem=Warning +org.eclipse.cdt.codan.internal.checkers.NonVirtualDestructorProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} +org.eclipse.cdt.codan.internal.checkers.OverloadProblem=Error +org.eclipse.cdt.codan.internal.checkers.OverloadProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} +org.eclipse.cdt.codan.internal.checkers.RedeclarationProblem=Error +org.eclipse.cdt.codan.internal.checkers.RedeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} +org.eclipse.cdt.codan.internal.checkers.RedefinitionProblem=Error +org.eclipse.cdt.codan.internal.checkers.RedefinitionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} +org.eclipse.cdt.codan.internal.checkers.ReturnStyleProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.ReturnStyleProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} +org.eclipse.cdt.codan.internal.checkers.ScanfFormatStringSecurityProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.ScanfFormatStringSecurityProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} +org.eclipse.cdt.codan.internal.checkers.StatementHasNoEffectProblem=Warning +org.eclipse.cdt.codan.internal.checkers.StatementHasNoEffectProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},macro\=>true,exceptions\=>()} +org.eclipse.cdt.codan.internal.checkers.SuggestedParenthesisProblem=Warning +org.eclipse.cdt.codan.internal.checkers.SuggestedParenthesisProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},paramNot\=>false} +org.eclipse.cdt.codan.internal.checkers.SuspiciousSemicolonProblem=Warning +org.eclipse.cdt.codan.internal.checkers.SuspiciousSemicolonProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},else\=>false,afterelse\=>false} +org.eclipse.cdt.codan.internal.checkers.TypeResolutionProblem=Error +org.eclipse.cdt.codan.internal.checkers.TypeResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} +org.eclipse.cdt.codan.internal.checkers.UnusedFunctionDeclarationProblem=Warning +org.eclipse.cdt.codan.internal.checkers.UnusedFunctionDeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},macro\=>true} +org.eclipse.cdt.codan.internal.checkers.UnusedStaticFunctionProblem=Warning +org.eclipse.cdt.codan.internal.checkers.UnusedStaticFunctionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},macro\=>true} +org.eclipse.cdt.codan.internal.checkers.UnusedVariableDeclarationProblem=Warning +org.eclipse.cdt.codan.internal.checkers.UnusedVariableDeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},macro\=>true,exceptions\=>("@(\#)","$Id")} +org.eclipse.cdt.codan.internal.checkers.VariableResolutionProblem=Error +org.eclipse.cdt.codan.internal.checkers.VariableResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} diff --git a/CommandProcessing_Debug/.settings/org.eclipse.cdt.core.prefs b/CommandProcessing_Debug/.settings/org.eclipse.cdt.core.prefs new file mode 100644 index 0000000000..8d41bca808 --- /dev/null +++ b/CommandProcessing_Debug/.settings/org.eclipse.cdt.core.prefs @@ -0,0 +1,163 @@ +eclipse.preferences.version=1 +org.eclipse.cdt.core.formatter.alignment_for_arguments_in_method_invocation=16 +org.eclipse.cdt.core.formatter.alignment_for_assignment=16 +org.eclipse.cdt.core.formatter.alignment_for_base_clause_in_type_declaration=80 +org.eclipse.cdt.core.formatter.alignment_for_binary_expression=16 +org.eclipse.cdt.core.formatter.alignment_for_compact_if=16 +org.eclipse.cdt.core.formatter.alignment_for_conditional_expression=34 +org.eclipse.cdt.core.formatter.alignment_for_conditional_expression_chain=18 +org.eclipse.cdt.core.formatter.alignment_for_constructor_initializer_list=0 +org.eclipse.cdt.core.formatter.alignment_for_declarator_list=16 +org.eclipse.cdt.core.formatter.alignment_for_enumerator_list=48 +org.eclipse.cdt.core.formatter.alignment_for_expression_list=0 +org.eclipse.cdt.core.formatter.alignment_for_expressions_in_array_initializer=16 +org.eclipse.cdt.core.formatter.alignment_for_member_access=0 +org.eclipse.cdt.core.formatter.alignment_for_overloaded_left_shift_chain=16 +org.eclipse.cdt.core.formatter.alignment_for_parameters_in_method_declaration=16 +org.eclipse.cdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16 +org.eclipse.cdt.core.formatter.brace_position_for_array_initializer=next_line +org.eclipse.cdt.core.formatter.brace_position_for_block=next_line +org.eclipse.cdt.core.formatter.brace_position_for_block_in_case=next_line +org.eclipse.cdt.core.formatter.brace_position_for_method_declaration=next_line +org.eclipse.cdt.core.formatter.brace_position_for_namespace_declaration=next_line +org.eclipse.cdt.core.formatter.brace_position_for_switch=next_line +org.eclipse.cdt.core.formatter.brace_position_for_type_declaration=next_line +org.eclipse.cdt.core.formatter.comment.min_distance_between_code_and_line_comment=1 +org.eclipse.cdt.core.formatter.comment.never_indent_line_comments_on_first_column=true +org.eclipse.cdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=true +org.eclipse.cdt.core.formatter.compact_else_if=true +org.eclipse.cdt.core.formatter.continuation_indentation=2 +org.eclipse.cdt.core.formatter.continuation_indentation_for_array_initializer=2 +org.eclipse.cdt.core.formatter.format_guardian_clause_on_one_line=false +org.eclipse.cdt.core.formatter.indent_access_specifier_compare_to_type_header=false +org.eclipse.cdt.core.formatter.indent_access_specifier_extra_spaces=0 +org.eclipse.cdt.core.formatter.indent_body_declarations_compare_to_access_specifier=true +org.eclipse.cdt.core.formatter.indent_body_declarations_compare_to_namespace_header=false +org.eclipse.cdt.core.formatter.indent_breaks_compare_to_cases=true +org.eclipse.cdt.core.formatter.indent_declaration_compare_to_template_header=false +org.eclipse.cdt.core.formatter.indent_empty_lines=false +org.eclipse.cdt.core.formatter.indent_statements_compare_to_block=true +org.eclipse.cdt.core.formatter.indent_statements_compare_to_body=true +org.eclipse.cdt.core.formatter.indent_switchstatements_compare_to_cases=true +org.eclipse.cdt.core.formatter.indent_switchstatements_compare_to_switch=false +org.eclipse.cdt.core.formatter.indentation.size=4 +org.eclipse.cdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert +org.eclipse.cdt.core.formatter.insert_new_line_after_template_declaration=do not insert +org.eclipse.cdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert +org.eclipse.cdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert +org.eclipse.cdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert +org.eclipse.cdt.core.formatter.insert_new_line_before_colon_in_constructor_initializer_list=do not insert +org.eclipse.cdt.core.formatter.insert_new_line_before_else_in_if_statement=insert +org.eclipse.cdt.core.formatter.insert_new_line_before_identifier_in_function_declaration=do not insert +org.eclipse.cdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert +org.eclipse.cdt.core.formatter.insert_new_line_in_empty_block=insert +org.eclipse.cdt.core.formatter.insert_space_after_assignment_operator=insert +org.eclipse.cdt.core.formatter.insert_space_after_binary_operator=insert +org.eclipse.cdt.core.formatter.insert_space_after_closing_angle_bracket_in_template_arguments=insert +org.eclipse.cdt.core.formatter.insert_space_after_closing_angle_bracket_in_template_parameters=insert +org.eclipse.cdt.core.formatter.insert_space_after_closing_brace_in_block=insert +org.eclipse.cdt.core.formatter.insert_space_after_closing_paren_in_cast=insert +org.eclipse.cdt.core.formatter.insert_space_after_colon_in_base_clause=insert +org.eclipse.cdt.core.formatter.insert_space_after_colon_in_case=insert +org.eclipse.cdt.core.formatter.insert_space_after_colon_in_conditional=insert +org.eclipse.cdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert +org.eclipse.cdt.core.formatter.insert_space_after_comma_in_array_initializer=insert +org.eclipse.cdt.core.formatter.insert_space_after_comma_in_base_types=insert +org.eclipse.cdt.core.formatter.insert_space_after_comma_in_declarator_list=insert +org.eclipse.cdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert +org.eclipse.cdt.core.formatter.insert_space_after_comma_in_expression_list=insert +org.eclipse.cdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert +org.eclipse.cdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert +org.eclipse.cdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert +org.eclipse.cdt.core.formatter.insert_space_after_comma_in_template_arguments=insert +org.eclipse.cdt.core.formatter.insert_space_after_comma_in_template_parameters=insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_angle_bracket_in_template_arguments=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_angle_bracket_in_template_parameters=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_bracket=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_exception_specification=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_postfix_operator=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_prefix_operator=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_question_in_conditional=insert +org.eclipse.cdt.core.formatter.insert_space_after_semicolon_in_for=insert +org.eclipse.cdt.core.formatter.insert_space_after_unary_operator=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_assignment_operator=insert +org.eclipse.cdt.core.formatter.insert_space_before_binary_operator=insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_angle_bracket_in_template_arguments=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_angle_bracket_in_template_parameters=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_bracket=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_exception_specification=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_colon_in_base_clause=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_colon_in_case=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_colon_in_conditional=insert +org.eclipse.cdt.core.formatter.insert_space_before_colon_in_default=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_comma_in_base_types=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_comma_in_declarator_list=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_comma_in_expression_list=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_comma_in_template_arguments=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_comma_in_template_parameters=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_angle_bracket_in_template_arguments=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_angle_bracket_in_template_parameters=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_block=insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_namespace_declaration=insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_switch=insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_bracket=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_catch=insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_exception_specification=insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_for=insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_if=insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_switch=insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_while=insert +org.eclipse.cdt.core.formatter.insert_space_before_postfix_operator=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_prefix_operator=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_question_in_conditional=insert +org.eclipse.cdt.core.formatter.insert_space_before_semicolon=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_semicolon_in_for=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_unary_operator=do not insert +org.eclipse.cdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert +org.eclipse.cdt.core.formatter.insert_space_between_empty_brackets=do not insert +org.eclipse.cdt.core.formatter.insert_space_between_empty_parens_in_exception_specification=do not insert +org.eclipse.cdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert +org.eclipse.cdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert +org.eclipse.cdt.core.formatter.join_wrapped_lines=true +org.eclipse.cdt.core.formatter.keep_else_statement_on_same_line=false +org.eclipse.cdt.core.formatter.keep_empty_array_initializer_on_one_line=false +org.eclipse.cdt.core.formatter.keep_imple_if_on_one_line=false +org.eclipse.cdt.core.formatter.keep_then_statement_on_same_line=false +org.eclipse.cdt.core.formatter.lineSplit=80 +org.eclipse.cdt.core.formatter.number_of_empty_lines_to_preserve=1 +org.eclipse.cdt.core.formatter.put_empty_statement_on_new_line=true +org.eclipse.cdt.core.formatter.tabulation.char=tab +org.eclipse.cdt.core.formatter.tabulation.size=4 +org.eclipse.cdt.core.formatter.use_tabs_only_for_leading_indentations=false diff --git a/CommandProcessing_Debug/.settings/org.eclipse.cdt.ui.prefs b/CommandProcessing_Debug/.settings/org.eclipse.cdt.ui.prefs new file mode 100644 index 0000000000..48a50c7083 --- /dev/null +++ b/CommandProcessing_Debug/.settings/org.eclipse.cdt.ui.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +formatter_profile=org.eclipse.cdt.ui.default.allman_profile +formatter_settings_version=1 diff --git a/CommandProcessing_Debug/Makefile b/CommandProcessing_Debug/Makefile new file mode 100644 index 0000000000..15b9309d06 --- /dev/null +++ b/CommandProcessing_Debug/Makefile @@ -0,0 +1,20 @@ +##################################################################### +#### Please don't change this file. Use Makefile-user.mk instead #### +##################################################################### +# Including user Makefile. +# Should be used to set project-specific parameters +include ./Makefile-user.mk + +# Important parameters check. +# We need to make sure SMING_HOME and ESP_HOME variables are set. +# You can use Makefile-user.mk in each project or use enviromental variables to set it globally. + +ifndef SMING_HOME +$(error SMING_HOME is not set. Please configure it in Makefile-user.mk) +endif +ifndef ESP_HOME +$(error ESP_HOME is not set. Please configure it in Makefile-user.mk) +endif + +# Include main Sming Makefile +include $(SMING_HOME)/Makefile-project.mk \ No newline at end of file diff --git a/CommandProcessing_Debug/Makefile-user.mk b/CommandProcessing_Debug/Makefile-user.mk new file mode 100644 index 0000000000..bc53275f5b --- /dev/null +++ b/CommandProcessing_Debug/Makefile-user.mk @@ -0,0 +1,30 @@ +## Local build configuration +## Parameters configured here will override default and ENV values. +## Uncomment and change examples: + +#Add your source directories here separated by space +MODULES = app + +## ESP_HOME sets the path where ESP tools and SDK are located. +## Windows: +# ESP_HOME = c:/Espressif + +## MacOS / Linux: +#ESP_HOME = /opt/esp-open-sdk + +## SMING_HOME sets the path where Sming framework is located. +## Windows: +# SMING_HOME = c:/tools/sming/Sming + +# MacOS / Linux +# SMING_HOME = /opt/sming/Sming + +## COM port parameter is reqruied to flash firmware correctly. +## Windows: +# COM_PORT = COM3 + +# MacOS / Linux: +# COM_PORT = /dev/tty.usbserial + +# Com port speed +# COM_SPEED = 115200 \ No newline at end of file diff --git a/CommandProcessing_Debug/app/application.cpp b/CommandProcessing_Debug/app/application.cpp new file mode 100644 index 0000000000..6cc1b6ae21 --- /dev/null +++ b/CommandProcessing_Debug/app/application.cpp @@ -0,0 +1,128 @@ +#include +#include +#include +#include + + +// If you want, you can define WiFi settings globally in Eclipse Environment Variables +#ifndef WIFI_SSID + #define WIFI_SSID "PleaseEnterSSID" // Put you SSID and Password here + #define WIFI_PWD "PleaseEnterPass" +#endif + +HttpServer server; + +FTPServer ftp; +Timer msgTimer; +TelnetServer telnet; + + + +void onIndex(HttpRequest &request, HttpResponse &response) +{ + TemplateFileStream *tmpl = new TemplateFileStream("index.html"); + auto &vars = tmpl->variables(); + //vars["counter"] = String(counter); + response.sendTemplate(tmpl); // this template object will be deleted automatically +} + +void onFile(HttpRequest &request, HttpResponse &response) +{ + String file = request.getPath(); + if (file[0] == '/') + file = file.substring(1); + + if (file[0] == '.') + response.forbidden(); + else + { + response.setCache(86400, true); // It's important to use cache for better performance. + response.sendFile(file); + } +} + +int msgCount = 0; + +void wsConnected(WebSocket& socket) +{ + Serial.printf("Socket connected\r\n"); +} + +void wsMessageReceived(WebSocket& socket, const String& message) +{ + Serial.printf("WebSocket message received:\r\n%s\r\n", message.c_str()); + String response = "Echo: " + message; + socket.sendString(response); +} + +void wsBinaryReceived(WebSocket& socket, uint8_t* data, size_t size) +{ + Serial.printf("Websocket binary data recieved, size: %d\r\n", size); +} + +void wsDisconnected(WebSocket& socket) +{ + +} + +void StartServers() +{ + server.listen(80); + server.addPath("/", onIndex); + server.setDefaultHandler(onFile); + + // Web Sockets configuration + server.enableWebSockets(true); + server.commandProcessing(true,"command"); + + server.setWebSocketConnectionHandler(wsConnected); + server.setWebSocketMessageHandler(wsMessageReceived); + server.setWebSocketBinaryHandler(wsBinaryReceived); + server.setWebSocketDisconnectionHandler(wsDisconnected); + + Serial.println("\r\n=== WEB SERVER STARTED ==="); + Serial.println(WifiStation.getIP()); + Serial.println("==============================\r\n"); + + // Start FTP server + ftp.listen(21); + ftp.addUser("me", "123"); // FTP account + + Serial.println("\r\n=== FTP SERVER STARTED ==="); + Serial.println("==============================\r\n"); + + telnet.listen(23); + telnet.enableDebug(true); + + Serial.println("\r\n=== TelnetServer SERVER STARTED ==="); + Serial.println("==============================\r\n"); +} + + +// Will be called when WiFi station was connected to AP +void connectOk() +{ + Serial.println("I'm CONNECTED"); + + StartServers(); +} + +void init() +{ + Serial.begin(74880); // 115200 by default + + commandHandler.registerSystemCommands(); + Debug.setDebug(Serial); + + Serial.systemDebugOutput(true); // Enable debug output to serial + Serial.commandProcessing(true); + + + + WifiStation.enable(true); + WifiStation.config(WIFI_SSID, WIFI_PWD); + WifiAccessPoint.enable(false); + + // Run our method when station was connected to AP + WifiStation.waitConnection(connectOk); +} diff --git a/CommandProcessing_Debug/files/index.html b/CommandProcessing_Debug/files/index.html new file mode 100644 index 0000000000..1ec2d602b1 --- /dev/null +++ b/CommandProcessing_Debug/files/index.html @@ -0,0 +1,122 @@ + + + + +WebSocket Command Test + + + + + +

WebSocket Command Test

+ + + + +
+
+ + + + + + +
+
+ + + + + + + +
+
+ +
\ No newline at end of file diff --git a/CommandProcessing_Debug/files/sockettest.html b/CommandProcessing_Debug/files/sockettest.html new file mode 100644 index 0000000000..37297e6e2c --- /dev/null +++ b/CommandProcessing_Debug/files/sockettest.html @@ -0,0 +1,122 @@ + + + + +WebSocket Command Test + + + + + +

WebSocket Command Test

+ + + + +
+
+ + + + + + +
+
+ + + + + + + +
+
+ +
\ No newline at end of file diff --git a/CommandProcessing_Debug/include/user_config.h b/CommandProcessing_Debug/include/user_config.h new file mode 100644 index 0000000000..1c6ac36703 --- /dev/null +++ b/CommandProcessing_Debug/include/user_config.h @@ -0,0 +1,45 @@ +#ifndef __USER_CONFIG_H__ +#define __USER_CONFIG_H__ + +#ifdef __cplusplus +extern "C" { +#endif + + // UART config + #define SERIAL_BAUD_RATE 115200 + + // ESP SDK config + #define LWIP_OPEN_SRC + #define USE_US_TIMER + + // Default types + #define __CORRECT_ISO_CPP_STDLIB_H_PROTO + #include + #include + + // Override c_types.h include and remove buggy espconn + #define _C_TYPES_H_ + #define _NO_ESPCON_ + + // Updated, compatible version of c_types.h + // Just removed types declared in + #include + + // System API declarations + #include + + // C++ Support + #include + // Extended string conversion for compatibility + #include + // Network base API + #include + + // Beta boards + #define BOARD_ESP01 + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/CommandProcessing_Debug/web/build/bootstrap.css.gz b/CommandProcessing_Debug/web/build/bootstrap.css.gz new file mode 100644 index 0000000000000000000000000000000000000000..55569c476553212b24dc3ce546bebe5ac8ab480d GIT binary patch literal 15615 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
xUJv1gU! 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 literal 0 HcmV?d00001 diff --git a/CommandProcessing_Debug/web/build/index.html b/CommandProcessing_Debug/web/build/index.html new file mode 100644 index 0000000000..1fab1be6ed --- /dev/null +++ b/CommandProcessing_Debug/web/build/index.html @@ -0,0 +1,96 @@ + + + + + + + + + + + + Sming Framework with Bootstrap best friends + + + + + + + + + + + + +
+
+ +

Sming Framework

+
+ +
+

Sming AJAX Example

+

Sming: Let's do smart things! +

+
+ +
+
+

Reading Input value

+

GPIO0 +

GPIO2 +

+ +
+

Send AJAX Command

+

Switch CPU frequency

+ + +

  +

Current frequency:

+
N/A
+
+ +
+ +
+

© Company 2014

+
+ +
+ + diff --git a/CommandProcessing_Debug/web/build/jquery.js.gz b/CommandProcessing_Debug/web/build/jquery.js.gz new file mode 100644 index 0000000000000000000000000000000000000000..54fb84cab838898640767850e8fa436129f1feb6 GIT binary patch literal 30153 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,.thumbnail a>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out;display:inline-block;max-width:100%;height:auto}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small,.h1 small,.h2 small,.h3 small,.h4 small,.h5 small,.h6 small,h1 .small,h2 .small,h3 .small,h4 .small,h5 .small,h6 .small,.h1 .small,.h2 .small,.h3 .small,.h4 .small,.h5 .small,.h6 .small{font-weight:normal;line-height:1;color:#777}h1,.h1,h2,.h2,h3,.h3{margin-top:20px;margin-bottom:10px}h1 small,.h1 small,h2 small,.h2 small,h3 small,.h3 small,h1 .small,.h1 .small,h2 .small,.h2 .small,h3 .small,.h3 .small{font-size:65%}h4,.h4,h5,.h5,h6,.h6{margin-top:10px;margin-bottom:10px}h4 small,.h4 small,h5 small,.h5 small,h6 small,.h6 small,h4 .small,.h4 .small,h5 .small,.h5 .small,h6 .small,.h6 .small{font-size:75%}h1,.h1{font-size:36px}h2,.h2{font-size:30px}h3,.h3{font-size:24px}h4,.h4{font-size:18px}h5,.h5{font-size:14px}h6,.h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}small,.small{font-size:85%}mark,.mark{background-color:#fcf8e3;padding:.2em}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ul,ol{margin-top:0;margin-bottom:10px}ul ul,ol ul,ul ol,ol ol{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none;margin-left:-5px}.list-inline>li{display:inline-block;padding-left:5px;padding-right:5px}dl{margin-top:0;margin-bottom:20px}dt,dd{line-height:1.42857143}dt{font-weight:bold}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:0}blockquote footer,blockquote small,blockquote .small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote footer:before,blockquote small:before,blockquote .small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0;text-align:right}.blockquote-reverse footer:before,blockquote.pull-right footer:before,.blockquote-reverse small:before,blockquote.pull-right small:before,.blockquote-reverse .small:before,blockquote.pull-right .small:before{content:''}.blockquote-reverse footer:after,blockquote.pull-right footer:after,.blockquote-reverse small:after,blockquote.pull-right small:after,.blockquote-reverse .small:after,blockquote.pull-right .small:after{content:'\00A0 \2014'}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.25)}kbd kbd{padding:0;font-size:100%;font-weight:bold;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;word-break:break-all;word-wrap:break-word;color:#333;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.row{margin-left:-15px;margin-right:-15px}.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12{position:relative;min-height:1px;padding-left:15px;padding-right:15px}.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>thead>tr>th,.table>tbody>tr>th,.table>tfoot>tr>th,.table>thead>tr>td,.table>tbody>tr>td,.table>tfoot>tr>td{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>th,.table>caption+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>td,.table>thead:first-child>tr:first-child>td{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>thead>tr>th,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>tbody>tr>td,.table-condensed>tfoot>tr>td{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>td{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}table col[class*="col-"]{position:static;float:none;display:table-column}table td[class*="col-"],table th[class*="col-"]{position:static;float:none;display:table-cell}.table>thead>tr>td.active,.table>tbody>tr>td.active,.table>tfoot>tr>td.active,.table>thead>tr>th.active,.table>tbody>tr>th.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>tbody>tr.active>td,.table>tfoot>tr.active>td,.table>thead>tr.active>th,.table>tbody>tr.active>th,.table>tfoot>tr.active>th{background-color:#f5f5f5}.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover,.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr.active:hover>th{background-color:#e8e8e8}.table>thead>tr>td.success,.table>tbody>tr>td.success,.table>tfoot>tr>td.success,.table>thead>tr>th.success,.table>tbody>tr>th.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>tbody>tr.success>td,.table>tfoot>tr.success>td,.table>thead>tr.success>th,.table>tbody>tr.success>th,.table>tfoot>tr.success>th{background-color:#dff0d8}.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover,.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr.success:hover>th{background-color:#d0e9c6}.table>thead>tr>td.info,.table>tbody>tr>td.info,.table>tfoot>tr>td.info,.table>thead>tr>th.info,.table>tbody>tr>th.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>tbody>tr.info>td,.table>tfoot>tr.info>td,.table>thead>tr.info>th,.table>tbody>tr.info>th,.table>tfoot>tr.info>th{background-color:#d9edf7}.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover,.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr.info:hover>th{background-color:#c4e3f3}.table>thead>tr>td.warning,.table>tbody>tr>td.warning,.table>tfoot>tr>td.warning,.table>thead>tr>th.warning,.table>tbody>tr>th.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>tbody>tr.warning>td,.table>tfoot>tr.warning>td,.table>thead>tr.warning>th,.table>tbody>tr.warning>th,.table>tfoot>tr.warning>th{background-color:#fcf8e3}.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover,.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr.warning:hover>th{background-color:#faf2cc}.table>thead>tr>td.danger,.table>tbody>tr>td.danger,.table>tfoot>tr>td.danger,.table>thead>tr>th.danger,.table>tbody>tr>th.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>tbody>tr.danger>td,.table>tfoot>tr.danger>td,.table>thead>tr.danger>th,.table>tbody>tr.danger>th,.table>tfoot>tr.danger>th{background-color:#f2dede}.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover,.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr.danger:hover>th{background-color:#ebcccc}.table-responsive{overflow-x:auto;min-height:0.01%}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>thead>tr>th,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tfoot>tr>td{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>thead>tr>th:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.table-responsive>.table-bordered>thead>tr>th:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>th,.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}}fieldset{padding:0;margin:0;border:0;min-width:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:bold}input[type="search"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type="file"]{display:block}input[type="range"]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s, box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s, box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{cursor:not-allowed;background-color:#eee;opacity:1}textarea.form-control{height:auto}input[type="search"]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio:0){input[type="date"],input[type="time"],input[type="datetime-local"],input[type="month"]{line-height:34px}input[type="date"].input-sm,input[type="time"].input-sm,input[type="datetime-local"].input-sm,input[type="month"].input-sm,.input-group-sm input[type="date"],.input-group-sm input[type="time"],.input-group-sm input[type="datetime-local"],.input-group-sm input[type="month"]{line-height:30px}input[type="date"].input-lg,input[type="time"].input-lg,input[type="datetime-local"].input-lg,input[type="month"].input-lg,.input-group-lg input[type="date"],.input-group-lg input[type="time"],.input-group-lg input[type="datetime-local"],.input-group-lg input[type="month"]{line-height:46px}}.form-group{margin-bottom:15px}.radio,.checkbox{position:relative;display:block;margin-top:10px;margin-bottom:10px}.radio label,.checkbox label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:normal;cursor:pointer}.radio input[type="radio"],.radio-inline input[type="radio"],.checkbox input[type="checkbox"],.checkbox-inline input[type="checkbox"]{position:absolute;margin-left:-20px;margin-top:4px \9}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:normal;cursor:pointer}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}input[type="radio"][disabled],input[type="checkbox"][disabled],input[type="radio"].disabled,input[type="checkbox"].disabled,fieldset[disabled] input[type="radio"],fieldset[disabled] input[type="checkbox"]{cursor:not-allowed}.radio-inline.disabled,.checkbox-inline.disabled,fieldset[disabled] .radio-inline,fieldset[disabled] .checkbox-inline{cursor:not-allowed}.radio.disabled label,.checkbox.disabled label,fieldset[disabled] .radio label,fieldset[disabled] .checkbox label{cursor:not-allowed}.form-control-static{padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-left:0;padding-right:0}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}textarea.input-sm,select[multiple].input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.form-group-sm .form-control{height:30px;line-height:30px}textarea.form-group-sm .form-control,select[multiple].form-group-sm .form-control{height:auto}.form-group-sm .form-control-static{height:30px;padding:5px 10px;font-size:12px;line-height:1.5}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-lg{height:46px;line-height:46px}textarea.input-lg,select[multiple].input-lg{height:auto}.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.form-group-lg .form-control{height:46px;line-height:46px}textarea.form-group-lg .form-control,select[multiple].form-group-lg .form-control{height:auto}.form-group-lg .form-control-static{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline,.has-success.radio label,.has-success.checkbox label,.has-success.radio-inline label,.has-success.checkbox-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;border-color:#3c763d;background-color:#dff0d8}.has-success .form-control-feedback{color:#3c763d}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline,.has-warning.radio label,.has-warning.checkbox label,.has-warning.radio-inline label,.has-warning.checkbox-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;border-color:#8a6d3b;background-color:#fcf8e3}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline,.has-error.radio label,.has-error.checkbox label,.has-error.radio-inline label,.has-error.checkbox-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;border-color:#a94442;background-color:#f2dede}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn,.form-inline .input-group .form-control{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .radio,.form-inline .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .radio label,.form-inline .checkbox label{padding-left:0}.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{margin-top:0;margin-bottom:0;padding-top:7px}.form-horizontal .radio,.form-horizontal .checkbox{min-height:27px}.form-horizontal .form-group{margin-left:-15px;margin-right:-15px}@media (min-width:768px){.form-horizontal .control-label{text-align:right;margin-bottom:0;padding-top:7px}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:14.333333px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px}}.btn{display:inline-block;margin-bottom:0;font-weight:normal;text-align:center;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;background-image:none;border:1px solid transparent;white-space:nowrap;padding:6px 12px;font-size:14px;line-height:1.42857143;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.btn:focus,.btn:active:focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn.active.focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus,.btn.focus{color:#333;text-decoration:none}.btn:active,.btn.active{outline:0;background-image:none;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;pointer-events:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default:hover,.btn-default:focus,.btn-default.focus,.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled,.btn-default[disabled],fieldset[disabled] .btn-default,.btn-default.disabled:hover,.btn-default[disabled]:hover,fieldset[disabled] .btn-default:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,fieldset[disabled] .btn-default:focus,.btn-default.disabled.focus,.btn-default[disabled].focus,fieldset[disabled] .btn-default.focus,.btn-default.disabled:active,.btn-default[disabled]:active,fieldset[disabled] .btn-default:active,.btn-default.disabled.active,.btn-default[disabled].active,fieldset[disabled] .btn-default.active{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary:hover,.btn-primary:focus,.btn-primary.focus,.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary[disabled],fieldset[disabled] .btn-primary,.btn-primary.disabled:hover,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary:hover,.btn-primary.disabled:focus,.btn-primary[disabled]:focus,fieldset[disabled] .btn-primary:focus,.btn-primary.disabled.focus,.btn-primary[disabled].focus,fieldset[disabled] .btn-primary.focus,.btn-primary.disabled:active,.btn-primary[disabled]:active,fieldset[disabled] .btn-primary:active,.btn-primary.disabled.active,.btn-primary[disabled].active,fieldset[disabled] .btn-primary.active{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success:hover,.btn-success:focus,.btn-success.focus,.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success[disabled],fieldset[disabled] .btn-success,.btn-success.disabled:hover,.btn-success[disabled]:hover,fieldset[disabled] .btn-success:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,fieldset[disabled] .btn-success:focus,.btn-success.disabled.focus,.btn-success[disabled].focus,fieldset[disabled] .btn-success.focus,.btn-success.disabled:active,.btn-success[disabled]:active,fieldset[disabled] .btn-success:active,.btn-success.disabled.active,.btn-success[disabled].active,fieldset[disabled] .btn-success.active{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info:hover,.btn-info:focus,.btn-info.focus,.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled,.btn-info[disabled],fieldset[disabled] .btn-info,.btn-info.disabled:hover,.btn-info[disabled]:hover,fieldset[disabled] .btn-info:hover,.btn-info.disabled:focus,.btn-info[disabled]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled.focus,.btn-info[disabled].focus,fieldset[disabled] .btn-info.focus,.btn-info.disabled:active,.btn-info[disabled]:active,fieldset[disabled] .btn-info:active,.btn-info.disabled.active,.btn-info[disabled].active,fieldset[disabled] .btn-info.active{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning:hover,.btn-warning:focus,.btn-warning.focus,.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-warning,.btn-warning.disabled:hover,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,fieldset[disabled] .btn-warning:focus,.btn-warning.disabled.focus,.btn-warning[disabled].focus,fieldset[disabled] .btn-warning.focus,.btn-warning.disabled:active,.btn-warning[disabled]:active,fieldset[disabled] .btn-warning:active,.btn-warning.disabled.active,.btn-warning[disabled].active,fieldset[disabled] .btn-warning.active{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger:hover,.btn-danger:focus,.btn-danger.focus,.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled,.btn-danger[disabled],fieldset[disabled] .btn-danger,.btn-danger.disabled:hover,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,fieldset[disabled] .btn-danger:focus,.btn-danger.disabled.focus,.btn-danger[disabled].focus,fieldset[disabled] .btn-danger.focus,.btn-danger.disabled:active,.btn-danger[disabled]:active,fieldset[disabled] .btn-danger:active,.btn-danger.disabled.active,.btn-danger[disabled].active,fieldset[disabled] .btn-danger.active{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{color:#337ab7;font-weight:normal;border-radius:0}.btn-link,.btn-link:active,.btn-link.active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,fieldset[disabled] .btn-link:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:focus{color:#777;text-decoration:none}.btn-lg,.btn-group-lg>.btn{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-sm,.btn-group-sm>.btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-xs,.btn-group-xs>.btn{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;float:left}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover,.btn-group>.btn:focus,.btn-group-vertical>.btn:focus,.btn-group>.btn:active,.btn-group-vertical>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn.active{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-left:8px;padding-right:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-left:12px;padding-right:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-bottom-left-radius:4px;border-top-right-radius:0;border-top-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-right-radius:0;border-top-left-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{float:none;display:table-cell;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle="buttons"]>.btn input[type="radio"],[data-toggle="buttons"]>.btn-group>.btn input[type="radio"],[data-toggle="buttons"]>.btn input[type="checkbox"],[data-toggle="buttons"]>.btn-group>.btn input[type="checkbox"]{position:absolute;clip:rect(0, 0, 0, 0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*="col-"]{float:none;padding-left:0;padding-right:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn,select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn,select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn{height:auto}.input-group-addon,.input-group-btn,.input-group .form-control{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:normal;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type="radio"],.input-group-addon input[type="checkbox"]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group-btn:last-child>.btn-group:not(:last-child)>.btn{border-bottom-right-radius:0;border-top-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:first-child>.btn-group:not(:first-child)>.btn{border-bottom-left-radius:0;border-top-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:hover,.input-group-btn>.btn:focus,.input-group-btn>.btn:active{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{margin-left:-1px}.nav{margin-bottom:0;padding-left:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#777;text-decoration:none;background-color:transparent;cursor:not-allowed}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:hover,.nav-tabs>li.active>a:focus{color:#555;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent;cursor:default}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{color:#fff;background-color:#337ab7}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none;visibility:hidden}.tab-content>.active{display:block;visibility:visible}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{overflow-x:visible;padding-right:15px;padding-left:15px;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1);-webkit-overflow-scrolling:touch}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block !important;visibility:visible !important;height:auto !important;padding-bottom:0;overflow:visible !important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{padding-left:0;padding-right:0}}.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:200px}}.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;padding:15px 15px;font-size:18px;line-height:20px;height:50px}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;margin-right:15px;padding:9px 10px;margin-top:8px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu>li>a,.navbar-nav .open .dropdown-menu .dropdown-header{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:hover,.navbar-nav .open .dropdown-menu>li>a:focus{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{margin-left:-15px;margin-right:-15px;padding:10px 15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);margin-top:8px;margin-bottom:8px}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn,.navbar-form .input-group .form-control{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .radio,.navbar-form .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .radio label,.navbar-form .checkbox label{padding-left:0}.navbar-form .radio input[type="radio"],.navbar-form .checkbox input[type="checkbox"]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;border:0;margin-left:0;margin-right:0;padding-top:0;padding-bottom:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-right-radius:0;border-top-left-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-right-radius:4px;border-top-left-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-left:15px;margin-right:15px}}@media (min-width:768px){.navbar-left{float:left !important}.navbar-right{float:right !important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:hover,.navbar-default .navbar-nav>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:hover,.navbar-default .navbar-nav>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:hover,.navbar-default .navbar-nav>.disabled>a:focus{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:hover,.navbar-default .navbar-nav>.open>a:focus{background-color:#e7e7e7;color:#555}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:hover,.navbar-default .btn-link:focus{color:#333}.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:hover,.navbar-default .btn-link[disabled]:focus,fieldset[disabled] .navbar-default .btn-link:focus{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:hover,.navbar-inverse .navbar-nav>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:hover,.navbar-inverse .navbar-nav>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:hover,.navbar-inverse .navbar-nav>.disabled>a:focus{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:hover,.navbar-inverse .navbar-nav>.open>a:focus{background-color:#080808;color:#fff}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:hover,.navbar-inverse .btn-link:focus{color:#fff}.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:hover,.navbar-inverse .btn-link[disabled]:focus,fieldset[disabled] .navbar-inverse .btn-link:focus{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{content:"/\00a0";padding:0 5px;color:#ccc}.breadcrumb>.active{color:#777}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:bold;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:hover,a.label:focus{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:hover,.label-default[href]:focus{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:hover,.label-success[href]:focus{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:hover,.label-info[href]:focus{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:hover,.label-warning[href]:focus{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:hover,.label-danger[href]:focus{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:bold;color:#fff;line-height:1;vertical-align:baseline;white-space:nowrap;text-align:center;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-xs .badge{top:0;padding:1px 5px}a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding:30px 15px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron h1,.jumbotron .h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding:48px 0}.container .jumbotron,.container-fluid .jumbotron{padding-left:60px;padding-right:60px}.jumbotron h1,.jumbotron .h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail>img,.thumbnail a>img{margin-left:auto;margin-right:auto}a.thumbnail:hover,a.thumbnail:focus,a.thumbnail.active{border-color:#337ab7}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:bold}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{background-color:#dff0d8;border-color:#d6e9c6;color:#3c763d}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{background-color:#d9edf7;border-color:#bce8f1;color:#31708f}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{background-color:#fcf8e3;border-color:#faebcc;color:#8a6d3b}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{background-color:#f2dede;border-color:#ebccd1;color:#a94442}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{overflow:hidden;height:20px;margin-bottom:20px;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1)}.progress-bar{float:left;width:0%;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-striped .progress-bar,.progress-bar-striped{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress.active .progress-bar,.progress-bar.active{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.list-group{margin-bottom:20px;padding-left:0}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-right-radius:4px;border-top-left-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item{color:#555}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item:hover,a.list-group-item:focus{text-decoration:none;color:#555;background-color:#f5f5f5}.list-group-item.disabled,.list-group-item.disabled:hover,.list-group-item.disabled:focus{background-color:#eee;color:#777;cursor:not-allowed}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>.small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:hover .list-group-item-text,.list-group-item.active:focus .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:hover,a.list-group-item-success:focus{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:hover,a.list-group-item-success.active:focus{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:hover,a.list-group-item-info:focus{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:hover,a.list-group-item-info.active:focus{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:hover,a.list-group-item-warning:focus{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:hover,a.list-group-item-warning.active:focus{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:hover,a.list-group-item-danger:focus{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:hover,a.list-group-item-danger.active:focus{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.05);box-shadow:0 1px 1px rgba(0,0,0,0.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-right-radius:3px;border-top-left-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>a,.panel-title>small,.panel-title>.small,.panel-title>small>a,.panel-title>.small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-right-radius:3px;border-top-left-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.table,.panel>.table-responsive>.table,.panel>.panel-collapse>.table{margin-bottom:0}.panel>.table caption,.panel>.table-responsive>.table caption,.panel>.panel-collapse>.table caption{padding-left:15px;padding-right:15px}.panel>.table:first-child,.panel>.table-responsive:first-child>.table:first-child{border-top-right-radius:3px;border-top-left-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table:last-child,.panel>.table-responsive:last-child>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-left-radius:3px;border-bottom-right-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child th,.panel>.table>tbody:first-child>tr:first-child td{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{border:0;margin-bottom:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.panel-body,.panel-group .panel-heading+.panel-collapse>.list-group{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);box-shadow:inset 0 1px 1px rgba(0,0,0,0.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,0.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:bold;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;opacity:.5;filter:alpha(opacity=50)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.clearfix:before,.clearfix:after,.dl-horizontal dd:before,.dl-horizontal dd:after,.container:before,.container:after,.container-fluid:before,.container-fluid:after,.row:before,.row:after,.form-horizontal .form-group:before,.form-horizontal .form-group:after,.btn-toolbar:before,.btn-toolbar:after,.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after,.nav:before,.nav:after,.navbar:before,.navbar:after,.navbar-header:before,.navbar-header:after,.navbar-collapse:before,.navbar-collapse:after,.panel-body:before,.panel-body:after{content:" ";display:table}.clearfix:after,.dl-horizontal dd:after,.container:after,.container-fluid:after,.row:after,.form-horizontal .form-group:after,.btn-toolbar:after,.btn-group-vertical>.btn-group:after,.nav:after,.navbar:after,.navbar-header:after,.navbar-collapse:after,.panel-body:after{clear:both}.center-block{display:block;margin-left:auto;margin-right:auto}.pull-right{float:right !important}.pull-left{float:left !important}.hide{display:none !important}.show{display:block !important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none !important;visibility:hidden !important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-xs,.visible-sm,.visible-md,.visible-lg{display:none !important}.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block{display:none !important}@media (max-width:767px){.visible-xs{display:block !important}table.visible-xs{display:table}tr.visible-xs{display:table-row !important}th.visible-xs,td.visible-xs{display:table-cell !important}}@media (max-width:767px){.visible-xs-block{display:block !important}}@media (max-width:767px){.visible-xs-inline{display:inline !important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block !important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block !important}table.visible-sm{display:table}tr.visible-sm{display:table-row !important}th.visible-sm,td.visible-sm{display:table-cell !important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block !important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline !important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block !important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block !important}table.visible-md{display:table}tr.visible-md{display:table-row !important}th.visible-md,td.visible-md{display:table-cell !important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block !important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline !important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block !important}}@media (min-width:1200px){.visible-lg{display:block !important}table.visible-lg{display:table}tr.visible-lg{display:table-row !important}th.visible-lg,td.visible-lg{display:table-cell !important}}@media (min-width:1200px){.visible-lg-block{display:block !important}}@media (min-width:1200px){.visible-lg-inline{display:inline !important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block !important}}@media (max-width:767px){.hidden-xs{display:none !important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none !important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none !important}}@media (min-width:1200px){.hidden-lg{display:none !important}}.visible-print{display:none !important}@media print{.visible-print{display:block !important}table.visible-print{display:table}tr.visible-print{display:table-row !important}th.visible-print,td.visible-print{display:table-cell !important}}.visible-print-block{display:none !important}@media print{.visible-print-block{display:block !important}}.visible-print-inline{display:none !important}@media print{.visible-print-inline{display:inline !important}}.visible-print-inline-block{display:none !important}@media print{.visible-print-inline-block{display:inline-block !important}}@media print{.hidden-print{display:none !important}} +.btn-default,.btn-primary,.btn-success,.btn-info,.btn-warning,.btn-danger{text-shadow:0 -1px 0 rgba(0,0,0,0.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.15),0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 0 rgba(255,255,255,0.15),0 1px 1px rgba(0,0,0,0.075)}.btn-default:active,.btn-primary:active,.btn-success:active,.btn-info:active,.btn-warning:active,.btn-danger:active,.btn-default.active,.btn-primary.active,.btn-success.active,.btn-info.active,.btn-warning.active,.btn-danger.active{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn-default .badge,.btn-primary .badge,.btn-success .badge,.btn-info .badge,.btn-warning .badge,.btn-danger .badge{text-shadow:none}.btn:active,.btn.active{background-image:none}.btn-default{background-image:-webkit-linear-gradient(top, #fff 0, #e0e0e0 100%);background-image:-o-linear-gradient(top, #fff 0, #e0e0e0 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #fff), to(#e0e0e0));background-image:linear-gradient(to bottom, #fff 0, #e0e0e0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background-repeat:repeat-x;border-color:#dbdbdb;text-shadow:0 1px 0 #fff;border-color:#ccc}.btn-default:hover,.btn-default:focus{background-color:#e0e0e0;background-position:0 -15px}.btn-default:active,.btn-default.active{background-color:#e0e0e0;border-color:#dbdbdb}.btn-default.disabled,.btn-default:disabled,.btn-default[disabled]{background-color:#e0e0e0;background-image:none}.btn-primary{background-image:-webkit-linear-gradient(top, #337ab7 0, #265a88 100%);background-image:-o-linear-gradient(top, #337ab7 0, #265a88 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #337ab7), to(#265a88));background-image:linear-gradient(to bottom, #337ab7 0, #265a88 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background-repeat:repeat-x;border-color:#245580}.btn-primary:hover,.btn-primary:focus{background-color:#265a88;background-position:0 -15px}.btn-primary:active,.btn-primary.active{background-color:#265a88;border-color:#245580}.btn-primary.disabled,.btn-primary:disabled,.btn-primary[disabled]{background-color:#265a88;background-image:none}.btn-success{background-image:-webkit-linear-gradient(top, #5cb85c 0, #419641 100%);background-image:-o-linear-gradient(top, #5cb85c 0, #419641 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #5cb85c), to(#419641));background-image:linear-gradient(to bottom, #5cb85c 0, #419641 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background-repeat:repeat-x;border-color:#3e8f3e}.btn-success:hover,.btn-success:focus{background-color:#419641;background-position:0 -15px}.btn-success:active,.btn-success.active{background-color:#419641;border-color:#3e8f3e}.btn-success.disabled,.btn-success:disabled,.btn-success[disabled]{background-color:#419641;background-image:none}.btn-info{background-image:-webkit-linear-gradient(top, #5bc0de 0, #2aabd2 100%);background-image:-o-linear-gradient(top, #5bc0de 0, #2aabd2 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #5bc0de), to(#2aabd2));background-image:linear-gradient(to bottom, #5bc0de 0, #2aabd2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background-repeat:repeat-x;border-color:#28a4c9}.btn-info:hover,.btn-info:focus{background-color:#2aabd2;background-position:0 -15px}.btn-info:active,.btn-info.active{background-color:#2aabd2;border-color:#28a4c9}.btn-info.disabled,.btn-info:disabled,.btn-info[disabled]{background-color:#2aabd2;background-image:none}.btn-warning{background-image:-webkit-linear-gradient(top, #f0ad4e 0, #eb9316 100%);background-image:-o-linear-gradient(top, #f0ad4e 0, #eb9316 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #f0ad4e), to(#eb9316));background-image:linear-gradient(to bottom, #f0ad4e 0, #eb9316 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background-repeat:repeat-x;border-color:#e38d13}.btn-warning:hover,.btn-warning:focus{background-color:#eb9316;background-position:0 -15px}.btn-warning:active,.btn-warning.active{background-color:#eb9316;border-color:#e38d13}.btn-warning.disabled,.btn-warning:disabled,.btn-warning[disabled]{background-color:#eb9316;background-image:none}.btn-danger{background-image:-webkit-linear-gradient(top, #d9534f 0, #c12e2a 100%);background-image:-o-linear-gradient(top, #d9534f 0, #c12e2a 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #d9534f), to(#c12e2a));background-image:linear-gradient(to bottom, #d9534f 0, #c12e2a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background-repeat:repeat-x;border-color:#b92c28}.btn-danger:hover,.btn-danger:focus{background-color:#c12e2a;background-position:0 -15px}.btn-danger:active,.btn-danger.active{background-color:#c12e2a;border-color:#b92c28}.btn-danger.disabled,.btn-danger:disabled,.btn-danger[disabled]{background-color:#c12e2a;background-image:none}.thumbnail,.img-thumbnail{-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.075);box-shadow:0 1px 2px rgba(0,0,0,0.075)}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{background-image:-webkit-linear-gradient(top, #f5f5f5 0, #e8e8e8 100%);background-image:-o-linear-gradient(top, #f5f5f5 0, #e8e8e8 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #f5f5f5), to(#e8e8e8));background-image:linear-gradient(to bottom, #f5f5f5 0, #e8e8e8 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-color:#e8e8e8}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{background-image:-webkit-linear-gradient(top, #337ab7 0, #2e6da4 100%);background-image:-o-linear-gradient(top, #337ab7 0, #2e6da4 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #337ab7), to(#2e6da4));background-image:linear-gradient(to bottom, #337ab7 0, #2e6da4 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-color:#2e6da4}.navbar-default{background-image:-webkit-linear-gradient(top, #fff 0, #f8f8f8 100%);background-image:-o-linear-gradient(top, #fff 0, #f8f8f8 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #fff), to(#f8f8f8));background-image:linear-gradient(to bottom, #fff 0, #f8f8f8 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);border-radius:4px;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.15),0 1px 5px rgba(0,0,0,0.075);box-shadow:inset 0 1px 0 rgba(255,255,255,0.15),0 1px 5px rgba(0,0,0,0.075)}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.active>a{background-image:-webkit-linear-gradient(top, #dbdbdb 0, #e2e2e2 100%);background-image:-o-linear-gradient(top, #dbdbdb 0, #e2e2e2 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #dbdbdb), to(#e2e2e2));background-image:linear-gradient(to bottom, #dbdbdb 0, #e2e2e2 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,0.075);box-shadow:inset 0 3px 9px rgba(0,0,0,0.075)}.navbar-brand,.navbar-nav>li>a{text-shadow:0 1px 0 rgba(255,255,255,0.25)}.navbar-inverse{background-image:-webkit-linear-gradient(top, #3c3c3c 0, #222 100%);background-image:-o-linear-gradient(top, #3c3c3c 0, #222 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #3c3c3c), to(#222));background-image:linear-gradient(to bottom, #3c3c3c 0, #222 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false)}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.active>a{background-image:-webkit-linear-gradient(top, #080808 0, #0f0f0f 100%);background-image:-o-linear-gradient(top, #080808 0, #0f0f0f 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #080808), to(#0f0f0f));background-image:linear-gradient(to bottom, #080808 0, #0f0f0f 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,0.25);box-shadow:inset 0 3px 9px rgba(0,0,0,0.25)}.navbar-inverse .navbar-brand,.navbar-inverse .navbar-nav>li>a{text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.navbar-static-top,.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}@media (max-width:767px){.navbar .navbar-nav .open .dropdown-menu>.active>a,.navbar .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar .navbar-nav .open .dropdown-menu>.active>a:focus{color:#fff;background-image:-webkit-linear-gradient(top, #337ab7 0, #2e6da4 100%);background-image:-o-linear-gradient(top, #337ab7 0, #2e6da4 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #337ab7), to(#2e6da4));background-image:linear-gradient(to bottom, #337ab7 0, #2e6da4 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0)}}.alert{text-shadow:0 1px 0 rgba(255,255,255,0.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.25),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 1px 0 rgba(255,255,255,0.25),0 1px 2px rgba(0,0,0,0.05)}.alert-success{background-image:-webkit-linear-gradient(top, #dff0d8 0, #c8e5bc 100%);background-image:-o-linear-gradient(top, #dff0d8 0, #c8e5bc 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #dff0d8), to(#c8e5bc));background-image:linear-gradient(to bottom, #dff0d8 0, #c8e5bc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);border-color:#b2dba1}.alert-info{background-image:-webkit-linear-gradient(top, #d9edf7 0, #b9def0 100%);background-image:-o-linear-gradient(top, #d9edf7 0, #b9def0 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #d9edf7), to(#b9def0));background-image:linear-gradient(to bottom, #d9edf7 0, #b9def0 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);border-color:#9acfea}.alert-warning{background-image:-webkit-linear-gradient(top, #fcf8e3 0, #f8efc0 100%);background-image:-o-linear-gradient(top, #fcf8e3 0, #f8efc0 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #fcf8e3), to(#f8efc0));background-image:linear-gradient(to bottom, #fcf8e3 0, #f8efc0 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);border-color:#f5e79e}.alert-danger{background-image:-webkit-linear-gradient(top, #f2dede 0, #e7c3c3 100%);background-image:-o-linear-gradient(top, #f2dede 0, #e7c3c3 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #f2dede), to(#e7c3c3));background-image:linear-gradient(to bottom, #f2dede 0, #e7c3c3 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);border-color:#dca7a7}.progress{background-image:-webkit-linear-gradient(top, #ebebeb 0, #f5f5f5 100%);background-image:-o-linear-gradient(top, #ebebeb 0, #f5f5f5 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #ebebeb), to(#f5f5f5));background-image:linear-gradient(to bottom, #ebebeb 0, #f5f5f5 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0)}.progress-bar{background-image:-webkit-linear-gradient(top, #337ab7 0, #286090 100%);background-image:-o-linear-gradient(top, #337ab7 0, #286090 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #337ab7), to(#286090));background-image:linear-gradient(to bottom, #337ab7 0, #286090 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0)}.progress-bar-success{background-image:-webkit-linear-gradient(top, #5cb85c 0, #449d44 100%);background-image:-o-linear-gradient(top, #5cb85c 0, #449d44 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #5cb85c), to(#449d44));background-image:linear-gradient(to bottom, #5cb85c 0, #449d44 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0)}.progress-bar-info{background-image:-webkit-linear-gradient(top, #5bc0de 0, #31b0d5 100%);background-image:-o-linear-gradient(top, #5bc0de 0, #31b0d5 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #5bc0de), to(#31b0d5));background-image:linear-gradient(to bottom, #5bc0de 0, #31b0d5 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0)}.progress-bar-warning{background-image:-webkit-linear-gradient(top, #f0ad4e 0, #ec971f 100%);background-image:-o-linear-gradient(top, #f0ad4e 0, #ec971f 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #f0ad4e), to(#ec971f));background-image:linear-gradient(to bottom, #f0ad4e 0, #ec971f 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0)}.progress-bar-danger{background-image:-webkit-linear-gradient(top, #d9534f 0, #c9302c 100%);background-image:-o-linear-gradient(top, #d9534f 0, #c9302c 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #d9534f), to(#c9302c));background-image:linear-gradient(to bottom, #d9534f 0, #c9302c 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0)}.progress-bar-striped{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.list-group{border-radius:4px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.075);box-shadow:0 1px 2px rgba(0,0,0,0.075)}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{text-shadow:0 -1px 0 #286090;background-image:-webkit-linear-gradient(top, #337ab7 0, #2b669a 100%);background-image:-o-linear-gradient(top, #337ab7 0, #2b669a 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #337ab7), to(#2b669a));background-image:linear-gradient(to bottom, #337ab7 0, #2b669a 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);border-color:#2b669a}.list-group-item.active .badge,.list-group-item.active:hover .badge,.list-group-item.active:focus .badge{text-shadow:none}.panel{-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.05);box-shadow:0 1px 2px rgba(0,0,0,0.05)}.panel-default>.panel-heading{background-image:-webkit-linear-gradient(top, #f5f5f5 0, #e8e8e8 100%);background-image:-o-linear-gradient(top, #f5f5f5 0, #e8e8e8 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #f5f5f5), to(#e8e8e8));background-image:linear-gradient(to bottom, #f5f5f5 0, #e8e8e8 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0)}.panel-primary>.panel-heading{background-image:-webkit-linear-gradient(top, #337ab7 0, #2e6da4 100%);background-image:-o-linear-gradient(top, #337ab7 0, #2e6da4 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #337ab7), to(#2e6da4));background-image:linear-gradient(to bottom, #337ab7 0, #2e6da4 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0)}.panel-success>.panel-heading{background-image:-webkit-linear-gradient(top, #dff0d8 0, #d0e9c6 100%);background-image:-o-linear-gradient(top, #dff0d8 0, #d0e9c6 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #dff0d8), to(#d0e9c6));background-image:linear-gradient(to bottom, #dff0d8 0, #d0e9c6 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0)}.panel-info>.panel-heading{background-image:-webkit-linear-gradient(top, #d9edf7 0, #c4e3f3 100%);background-image:-o-linear-gradient(top, #d9edf7 0, #c4e3f3 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #d9edf7), to(#c4e3f3));background-image:linear-gradient(to bottom, #d9edf7 0, #c4e3f3 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0)}.panel-warning>.panel-heading{background-image:-webkit-linear-gradient(top, #fcf8e3 0, #faf2cc 100%);background-image:-o-linear-gradient(top, #fcf8e3 0, #faf2cc 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #fcf8e3), to(#faf2cc));background-image:linear-gradient(to bottom, #fcf8e3 0, #faf2cc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0)}.panel-danger>.panel-heading{background-image:-webkit-linear-gradient(top, #f2dede 0, #ebcccc 100%);background-image:-o-linear-gradient(top, #f2dede 0, #ebcccc 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #f2dede), to(#ebcccc));background-image:linear-gradient(to bottom, #f2dede 0, #ebcccc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0)}.well{background-image:-webkit-linear-gradient(top, #e8e8e8 0, #f5f5f5 100%);background-image:-o-linear-gradient(top, #e8e8e8 0, #f5f5f5 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #e8e8e8), to(#f5f5f5));background-image:linear-gradient(to bottom, #e8e8e8 0, #f5f5f5 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);border-color:#dcdcdc;-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,0.05),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 3px rgba(0,0,0,0.05),0 1px 0 rgba(255,255,255,0.1)} \ No newline at end of file diff --git a/CommandProcessing_Debug/web/dev/index.html b/CommandProcessing_Debug/web/dev/index.html new file mode 100644 index 0000000000..1fab1be6ed --- /dev/null +++ b/CommandProcessing_Debug/web/dev/index.html @@ -0,0 +1,96 @@ + + + + + + + + + + + + Sming Framework with Bootstrap best friends + + + + + + + + + + + + +
+
+ +

Sming Framework

+
+ +
+

Sming AJAX Example

+

Sming: Let's do smart things! +

+
+ +
+
+

Reading Input value

+

GPIO0 +

GPIO2 +

+ +
+

Send AJAX Command

+

Switch CPU frequency

+ + +

  +

Current frequency:

+
N/A
+
+ +
+ +
+

© Company 2014

+
+ +
+ + diff --git a/CommandProcessing_Debug/web/dev/jquery.js b/CommandProcessing_Debug/web/dev/jquery.js new file mode 100644 index 0000000000..051d9890ba --- /dev/null +++ b/CommandProcessing_Debug/web/dev/jquery.js @@ -0,0 +1,4 @@ +!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l=a.document,m="2.1.3",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return n.each(this,a,b)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(n.isPlainObject(d)||(e=n.isArray(d)))?(e?(e=!1,f=c&&n.isArray(c)?c:[]):f=c&&n.isPlainObject(c)?c:{},g[b]=n.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray,isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){return!n.isArray(a)&&a-parseFloat(a)+1>=0},isPlainObject:function(a){return"object"!==n.type(a)||a.nodeType||n.isWindow(a)?!1:a.constructor&&!j.call(a.constructor.prototype,"isPrototypeOf")?!1:!0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(a){var b,c=eval;a=n.trim(a),a&&(1===a.indexOf("use strict")?(b=l.createElement("script"),b.text=a,l.head.appendChild(b).parentNode.removeChild(b)):c(a))},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=s(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:g.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;c>d;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=s(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(c=a[b],b=a,a=c),n.isFunction(a)?(e=d.call(arguments,2),f=function(){return a.apply(b||this,e.concat(d.call(arguments)))},f.guid=a.guid=a.guid||n.guid++,f):void 0},now:Date.now,support:k}),n.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=hb(),z=hb(),A=hb(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N=M.replace("w","w#"),O="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+N+"))|)"+L+"*\\]",P=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+O+")*)|.*)\\)|)",Q=new RegExp(L+"+","g"),R=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),S=new RegExp("^"+L+"*,"+L+"*"),T=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),U=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),V=new RegExp(P),W=new RegExp("^"+N+"$"),X={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M.replace("w","w*")+")"),ATTR:new RegExp("^"+O),PSEUDO:new RegExp("^"+P),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ab=/[+~]/,bb=/'|\\/g,cb=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),db=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},eb=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(fb){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function gb(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],k=b.nodeType,"string"!=typeof a||!a||1!==k&&9!==k&&11!==k)return d;if(!e&&p){if(11!==k&&(f=_.exec(a)))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return H.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName)return H.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=1!==k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(bb,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+rb(o[l]);w=ab.test(a)&&pb(b.parentNode)||b,x=o.join(",")}if(x)try{return H.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function hb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ib(a){return a[u]=!0,a}function jb(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function kb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function lb(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function mb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function nb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function ob(a){return ib(function(b){return b=+b,ib(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function pb(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=gb.support={},f=gb.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=gb.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=g.documentElement,e=g.defaultView,e&&e!==e.top&&(e.addEventListener?e.addEventListener("unload",eb,!1):e.attachEvent&&e.attachEvent("onunload",eb)),p=!f(g),c.attributes=jb(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=jb(function(a){return a.appendChild(g.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(g.getElementsByClassName),c.getById=jb(function(a){return o.appendChild(a).id=u,!g.getElementsByName||!g.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(g.querySelectorAll))&&(jb(function(a){o.appendChild(a).innerHTML="",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),jb(function(a){var b=g.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&jb(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",P)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===g||a.ownerDocument===v&&t(v,a)?-1:b===g||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,h=[a],i=[b];if(!e||!f)return a===g?-1:b===g?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return lb(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?lb(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},g):n},gb.matches=function(a,b){return gb(a,null,null,b)},gb.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return gb(b,n,null,[a]).length>0},gb.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},gb.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},gb.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},gb.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=gb.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=gb.selectors={cacheLength:50,createPseudo:ib,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(cb,db),a[3]=(a[3]||a[4]||a[5]||"").replace(cb,db),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||gb.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&gb.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(cb,db).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=gb.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(Q," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||gb.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ib(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ib(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?ib(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ib(function(a){return function(b){return gb(a,b).length>0}}),contains:ib(function(a){return a=a.replace(cb,db),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ib(function(a){return W.test(a||"")||gb.error("unsupported lang: "+a),a=a.replace(cb,db).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:ob(function(){return[0]}),last:ob(function(a,b){return[b-1]}),eq:ob(function(a,b,c){return[0>c?c+b:c]}),even:ob(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:ob(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:ob(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:ob(function(a,b,c){for(var d=0>c?c+b:c;++db;b++)d+=a[b].value;return d}function sb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function tb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ub(a,b,c){for(var d=0,e=b.length;e>d;d++)gb(a,b[d],c);return c}function vb(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function wb(a,b,c,d,e,f){return d&&!d[u]&&(d=wb(d)),e&&!e[u]&&(e=wb(e,f)),ib(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ub(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:vb(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=vb(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=vb(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function xb(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=sb(function(a){return a===b},h,!0),l=sb(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[sb(tb(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return wb(i>1&&tb(m),i>1&&rb(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&xb(a.slice(i,e)),f>e&&xb(a=a.slice(e)),f>e&&rb(a))}m.push(c)}return tb(m)}function yb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=F.call(i));s=vb(s)}H.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&gb.uniqueSort(i)}return k&&(w=v,j=t),r};return c?ib(f):f}return h=gb.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=xb(b[c]),f[u]?d.push(f):e.push(f);f=A(a,yb(e,d)),f.selector=a}return f},i=gb.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(cb,db),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(cb,db),ab.test(j[0].type)&&pb(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&rb(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,ab.test(a)&&pb(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=jb(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),jb(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||kb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&jb(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||kb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),jb(function(a){return null==a.getAttribute("disabled")})||kb(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),gb}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=n.expr.match.needsContext,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^.[^:#\[\.,]*$/;function x(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(w.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return g.call(b,a)>=0!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=this.length,d=[],e=this;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;c>b;b++)if(n.contains(e[b],this))return!0}));for(b=0;c>b;b++)n.find(a,e[b],d);return d=this.pushStack(c>1?n.unique(d):d),d.selector=this.selector?this.selector+" "+a:a,d},filter:function(a){return this.pushStack(x(this,a||[],!1))},not:function(a){return this.pushStack(x(this,a||[],!0))},is:function(a){return!!x(this,"string"==typeof a&&u.test(a)?n(a):a||[],!1).length}});var y,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=n.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||y).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:l,!0)),v.test(c[1])&&n.isPlainObject(b))for(c in b)n.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}return d=l.getElementById(c[2]),d&&d.parentNode&&(this.length=1,this[0]=d),this.context=l,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof y.ready?y.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};A.prototype=n.fn,y=n(l);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};n.extend({dir:function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),n.fn.extend({has:function(a){var b=n(a,this),c=b.length;return this.filter(function(){for(var a=0;c>a;a++)if(n.contains(this,b[a]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=u.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.unique(f):f)},index:function(a){return a?"string"==typeof a?g.call(n(a),this[0]):g.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.unique(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){while((a=a[b])&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return n.dir(a,"parentNode")},parentsUntil:function(a,b,c){return n.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return n.dir(a,"nextSibling")},prevAll:function(a){return n.dir(a,"previousSibling")},nextUntil:function(a,b,c){return n.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return n.dir(a,"previousSibling",c)},siblings:function(a){return n.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return n.sibling(a.firstChild)},contents:function(a){return a.contentDocument||n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(C[a]||n.unique(e),B.test(a)&&e.reverse()),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return n.each(a.match(E)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):n.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(b=a.memory&&l,c=!0,g=e||0,e=0,f=h.length,d=!0;h&&f>g;g++)if(h[g].apply(l[0],l[1])===!1&&a.stopOnFalse){b=!1;break}d=!1,h&&(i?i.length&&j(i.shift()):b?h=[]:k.disable())},k={add:function(){if(h){var c=h.length;!function g(b){n.each(b,function(b,c){var d=n.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&g(c)})}(arguments),d?f=h.length:b&&(e=c,j(b))}return this},remove:function(){return h&&n.each(arguments,function(a,b){var c;while((c=n.inArray(b,h,c))>-1)h.splice(c,1),d&&(f>=c&&f--,g>=c&&g--)}),this},has:function(a){return a?n.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],f=0,this},disable:function(){return h=i=b=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,b||k.disable(),this},locked:function(){return!i},fireWith:function(a,b){return!h||c&&!i||(b=b||[],b=[a,b.slice?b.slice():b],d?i.push(b):j(b)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!c}};return k},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&n.isFunction(a.promise)?e:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(H.resolveWith(l,[n]),n.fn.triggerHandler&&(n(l).triggerHandler("ready"),n(l).off("ready"))))}});function I(){l.removeEventListener("DOMContentLoaded",I,!1),a.removeEventListener("load",I,!1),n.ready()}n.ready.promise=function(b){return H||(H=n.Deferred(),"complete"===l.readyState?setTimeout(n.ready):(l.addEventListener("DOMContentLoaded",I,!1),a.addEventListener("load",I,!1))),H.promise(b)},n.ready.promise();var J=n.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===n.type(c)){e=!0;for(h in c)n.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f};n.acceptData=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function K(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=n.expando+K.uid++}K.uid=1,K.accepts=n.acceptData,K.prototype={key:function(a){if(!K.accepts(a))return 0;var b={},c=a[this.expando];if(!c){c=K.uid++;try{b[this.expando]={value:c},Object.defineProperties(a,b)}catch(d){b[this.expando]=c,n.extend(a,b)}}return this.cache[c]||(this.cache[c]={}),c},set:function(a,b,c){var d,e=this.key(a),f=this.cache[e];if("string"==typeof b)f[b]=c;else if(n.isEmptyObject(f))n.extend(this.cache[e],b);else for(d in b)f[d]=b[d];return f},get:function(a,b){var c=this.cache[this.key(a)];return void 0===b?c:c[b]},access:function(a,b,c){var d;return void 0===b||b&&"string"==typeof b&&void 0===c?(d=this.get(a,b),void 0!==d?d:this.get(a,n.camelCase(b))):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d,e,f=this.key(a),g=this.cache[f];if(void 0===b)this.cache[f]={};else{n.isArray(b)?d=b.concat(b.map(n.camelCase)):(e=n.camelCase(b),b in g?d=[b,e]:(d=e,d=d in g?[d]:d.match(E)||[])),c=d.length;while(c--)delete g[d[c]]}},hasData:function(a){return!n.isEmptyObject(this.cache[a[this.expando]]||{})},discard:function(a){a[this.expando]&&delete this.cache[a[this.expando]]}};var L=new K,M=new K,N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(O,"-$1").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}M.set(a,b,c)}else c=void 0;return c}n.extend({hasData:function(a){return M.hasData(a)||L.hasData(a)},data:function(a,b,c){return M.access(a,b,c) +},removeData:function(a,b){M.remove(a,b)},_data:function(a,b,c){return L.access(a,b,c)},_removeData:function(a,b){L.remove(a,b)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=M.get(f),1===f.nodeType&&!L.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d])));L.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){M.set(this,a)}):J(this,function(b){var c,d=n.camelCase(a);if(f&&void 0===b){if(c=M.get(f,a),void 0!==c)return c;if(c=M.get(f,d),void 0!==c)return c;if(c=P(f,d,void 0),void 0!==c)return c}else this.each(function(){var c=M.get(this,d);M.set(this,d,b),-1!==a.indexOf("-")&&void 0!==c&&M.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){M.remove(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=L.get(a,b),c&&(!d||n.isArray(c)?d=L.access(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return L.get(a,c)||L.access(a,c,{empty:n.Callbacks("once memory").add(function(){L.remove(a,[b+"queue",c])})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.lengthx",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var U="undefined";k.focusinBubbles="onfocusin"in a;var V=/^key/,W=/^(?:mouse|pointer|contextmenu)|click/,X=/^(?:focusinfocus|focusoutblur)$/,Y=/^([^.]*)(?:\.(.+)|)$/;function Z(){return!0}function $(){return!1}function _(){try{return l.activeElement}catch(a){}}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.get(a);if(r){c.handler&&(f=c,c=f.handler,e=f.selector),c.guid||(c.guid=n.guid++),(i=r.events)||(i=r.events={}),(g=r.handle)||(g=r.handle=function(b){return typeof n!==U&&n.event.triggered!==b.type?n.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(E)||[""],j=b.length;while(j--)h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o&&(l=n.event.special[o]||{},o=(e?l.delegateType:l.bindType)||o,l=n.event.special[o]||{},k=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},f),(m=i[o])||(m=i[o]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,p,g)!==!1||a.addEventListener&&a.addEventListener(o,g,!1)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),n.event.global[o]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.hasData(a)&&L.get(a);if(r&&(i=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=i[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&q!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete i[o])}else for(o in i)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(i)&&(delete r.handle,L.remove(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,m,o,p=[d||l],q=j.call(b,"type")?b.type:b,r=j.call(b,"namespace")?b.namespace.split("."):[];if(g=h=d=d||l,3!==d.nodeType&&8!==d.nodeType&&!X.test(q+n.event.triggered)&&(q.indexOf(".")>=0&&(r=q.split("."),q=r.shift(),r.sort()),k=q.indexOf(":")<0&&"on"+q,b=b[n.expando]?b:new n.Event(q,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=r.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+r.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:n.makeArray(c,[b]),o=n.event.special[q]||{},e||!o.trigger||o.trigger.apply(d,c)!==!1)){if(!e&&!o.noBubble&&!n.isWindow(d)){for(i=o.delegateType||q,X.test(i+q)||(g=g.parentNode);g;g=g.parentNode)p.push(g),h=g;h===(d.ownerDocument||l)&&p.push(h.defaultView||h.parentWindow||a)}f=0;while((g=p[f++])&&!b.isPropagationStopped())b.type=f>1?i:o.bindType||q,m=(L.get(g,"events")||{})[b.type]&&L.get(g,"handle"),m&&m.apply(g,c),m=k&&g[k],m&&m.apply&&n.acceptData(g)&&(b.result=m.apply(g,c),b.result===!1&&b.preventDefault());return b.type=q,e||b.isDefaultPrevented()||o._default&&o._default.apply(p.pop(),c)!==!1||!n.acceptData(d)||k&&n.isFunction(d[q])&&!n.isWindow(d)&&(h=d[k],h&&(d[k]=null),n.event.triggered=q,d[q](),n.event.triggered=void 0,h&&(d[k]=h)),b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(L.get(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(g.namespace))&&(a.handleObj=g,a.data=g.data,e=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==e&&(a.result=e)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!==this;i=i.parentNode||this)if(i.disabled!==!0||"click"!==a.type){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>=0:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h]*)\/>/gi,bb=/<([\w:]+)/,cb=/<|&#?\w+;/,db=/<(?:script|style|link)/i,eb=/checked\s*(?:[^=]|=\s*.checked.)/i,fb=/^$|\/(?:java|ecma)script/i,gb=/^true\/(.*)/,hb=/^\s*\s*$/g,ib={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};ib.optgroup=ib.option,ib.tbody=ib.tfoot=ib.colgroup=ib.caption=ib.thead,ib.th=ib.td;function jb(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function kb(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function lb(a){var b=gb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function mb(a,b){for(var c=0,d=a.length;d>c;c++)L.set(a[c],"globalEval",!b||L.get(b[c],"globalEval"))}function nb(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(L.hasData(a)&&(f=L.access(a),g=L.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;d>c;c++)n.event.add(b,e,j[e][c])}M.hasData(a)&&(h=M.access(a),i=n.extend({},h),M.set(b,i))}}function ob(a,b){var c=a.getElementsByTagName?a.getElementsByTagName(b||"*"):a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&n.nodeName(a,b)?n.merge([a],c):c}function pb(a,b){var c=b.nodeName.toLowerCase();"input"===c&&T.test(a.type)?b.checked=a.checked:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}n.extend({clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=n.contains(a.ownerDocument,a);if(!(k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(g=ob(h),f=ob(a),d=0,e=f.length;e>d;d++)pb(f[d],g[d]);if(b)if(c)for(f=f||ob(a),g=g||ob(h),d=0,e=f.length;e>d;d++)nb(f[d],g[d]);else nb(a,h);return g=ob(h,"script"),g.length>0&&mb(g,!i&&ob(a,"script")),h},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,k=b.createDocumentFragment(),l=[],m=0,o=a.length;o>m;m++)if(e=a[m],e||0===e)if("object"===n.type(e))n.merge(l,e.nodeType?[e]:e);else if(cb.test(e)){f=f||k.appendChild(b.createElement("div")),g=(bb.exec(e)||["",""])[1].toLowerCase(),h=ib[g]||ib._default,f.innerHTML=h[1]+e.replace(ab,"<$1>")+h[2],j=h[0];while(j--)f=f.lastChild;n.merge(l,f.childNodes),f=k.firstChild,f.textContent=""}else l.push(b.createTextNode(e));k.textContent="",m=0;while(e=l[m++])if((!d||-1===n.inArray(e,d))&&(i=n.contains(e.ownerDocument,e),f=ob(k.appendChild(e),"script"),i&&mb(f),c)){j=0;while(e=f[j++])fb.test(e.type||"")&&c.push(e)}return k},cleanData:function(a){for(var b,c,d,e,f=n.event.special,g=0;void 0!==(c=a[g]);g++){if(n.acceptData(c)&&(e=c[L.expando],e&&(b=L.cache[e]))){if(b.events)for(d in b.events)f[d]?n.event.remove(c,d):n.removeEvent(c,d,b.handle);L.cache[e]&&delete L.cache[e]}delete M.cache[c[M.expando]]}}}),n.fn.extend({text:function(a){return J(this,function(a){return void 0===a?n.text(this):this.empty().each(function(){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&(this.textContent=a)})},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?n.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||n.cleanData(ob(c)),c.parentNode&&(b&&n.contains(c.ownerDocument,c)&&mb(ob(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(n.cleanData(ob(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return J(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!db.test(a)&&!ib[(bb.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(ab,"<$1>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(ob(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,n.cleanData(ob(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,m=this,o=l-1,p=a[0],q=n.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&eb.test(p))return this.each(function(c){var d=m.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(c=n.buildFragment(a,this[0].ownerDocument,!1,this),d=c.firstChild,1===c.childNodes.length&&(c=d),d)){for(f=n.map(ob(c,"script"),kb),g=f.length;l>j;j++)h=c,j!==o&&(h=n.clone(h,!0,!0),g&&n.merge(f,ob(h,"script"))),b.call(this[j],h,j);if(g)for(i=f[f.length-1].ownerDocument,n.map(f,lb),j=0;g>j;j++)h=f[j],fb.test(h.type||"")&&!L.access(h,"globalEval")&&n.contains(i,h)&&(h.src?n._evalUrl&&n._evalUrl(h.src):n.globalEval(h.textContent.replace(hb,"")))}return this}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=[],e=n(a),g=e.length-1,h=0;g>=h;h++)c=h===g?this:this.clone(!0),n(e[h])[b](c),f.apply(d,c.get());return this.pushStack(d)}});var qb,rb={};function sb(b,c){var d,e=n(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:n.css(e[0],"display");return e.detach(),f}function tb(a){var b=l,c=rb[a];return c||(c=sb(a,b),"none"!==c&&c||(qb=(qb||n("