You can subscribe to this list here.
2009 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(13) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2010 |
Jan
(50) |
Feb
(137) |
Mar
(84) |
Apr
(36) |
May
(100) |
Jun
(5) |
Jul
|
Aug
(4) |
Sep
(13) |
Oct
(1) |
Nov
(4) |
Dec
(22) |
2011 |
Jan
(4) |
Feb
(9) |
Mar
(113) |
Apr
(76) |
May
(31) |
Jun
(19) |
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2012 |
Jan
(4) |
Feb
|
Mar
(2) |
Apr
(6) |
May
(19) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(4) |
Nov
|
Dec
|
2013 |
Jan
|
Feb
|
Mar
(2) |
Apr
(22) |
May
(6) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(1) |
Nov
|
Dec
|
2014 |
Jan
|
Feb
|
Mar
|
Apr
|
May
(1) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: Jérémie D. <Ba...@us...> - 2010-05-08 16:12:34
|
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "krobot". The branch, master has been updated via 294ca665eabaf8f25572fd67b3910a1a48b25bf4 (commit) from 1a24a20f6a0f0c2dfec057e5c2ae18aa9327a042 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 294ca665eabaf8f25572fd67b3910a1a48b25bf4 Author: Jérémie Dimino <je...@di...> Date: Sat May 8 18:02:01 2010 +0200 Add command for the infrared sensors ----------------------------------------------------------------------- Changes: diff --git a/info/control/protocol/commands.ml b/info/control/protocol/commands.ml index 7ac884c..59577e1 100644 --- a/info/control/protocol/commands.ml +++ b/info/control/protocol/commands.ml @@ -1004,5 +1004,22 @@ struct } end +module Infrared = +struct + let () = make_interface "Infrared" + + let get_state = + register { + name = "GetState"; + response = true; + command = PcInterface.cmd_get; + request = Some PcInterface.get_rangefinder_state; + send = arg0; + recv = (arg1 + ("states", array 2 uint32)); + section = ""; + } +end + (* Remove references *) let commands = List.map (fun (name, members) -> (name, !members)) !commands hooks/post-receive -- krobot |
From: Olivier B. <Ba...@us...> - 2010-05-08 16:03:40
|
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "krobot". The branch, master has been updated via 1a24a20f6a0f0c2dfec057e5c2ae18aa9327a042 (commit) from 81aee3dc8f70d9a20150f107216b1fbde85b52bb (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 1a24a20f6a0f0c2dfec057e5c2ae18aa9327a042 Author: Olivier BICHLER <oli...@cr...> Date: Sat May 8 18:03:10 2010 +0200 Added infrared rangefinders interface ----------------------------------------------------------------------- Changes: diff --git a/elec/boards/Interface_Robot/Firmware/HardwareProfile.h b/elec/boards/Interface_Robot/Firmware/HardwareProfile.h index 75aed2b..8e82be1 100644 --- a/elec/boards/Interface_Robot/Firmware/HardwareProfile.h +++ b/elec/boards/Interface_Robot/Firmware/HardwareProfile.h @@ -50,6 +50,8 @@ #ifndef HARDWARE_PROFILE_H #define HARDWARE_PROFILE_H + #define KROBOT_2010 + /*******************************************************************/ /******** USB stack hardware selection options *********************/ /*******************************************************************/ diff --git a/elec/boards/Interface_Robot/Firmware/Robot_Interface.mcp b/elec/boards/Interface_Robot/Firmware/Robot_Interface.mcp index ed967e2..f92b9b9 100644 --- a/elec/boards/Interface_Robot/Firmware/Robot_Interface.mcp +++ b/elec/boards/Interface_Robot/Firmware/Robot_Interface.mcp @@ -39,22 +39,24 @@ file_011=. file_012=. file_013=. file_014=. -file_015=Common +file_015=. file_016=Common -file_017=USB Stack +file_017=Common file_018=USB Stack file_019=USB Stack file_020=USB Stack file_021=USB Stack file_022=USB Stack file_023=USB Stack -file_024=. +file_024=USB Stack file_025=. file_026=. file_027=. file_028=. file_029=. file_030=. +file_031=. +file_032=. [GENERATED_FILES] file_000=no file_001=no @@ -87,6 +89,8 @@ file_027=no file_028=no file_029=no file_030=no +file_031=no +file_032=no [OTHER_FILES] file_000=no file_001=no @@ -119,6 +123,8 @@ file_027=no file_028=no file_029=no file_030=no +file_031=no +file_032=no [FILE_INFO] file_000=usb_descriptors.c file_001=main.c @@ -131,26 +137,28 @@ file_007=servo.c file_008=mcc.c file_009=adjd-s371.c file_010=lcd.c -file_011=HardwareProfile.h -file_012=usb_config.h -file_013=eeprom.h -file_014=PcInterface.h -file_015=Include\Compiler.h -file_016=Include\GenericTypeDefs.h -file_017=Include\Usb\usb.h -file_018=Include\Usb\usb_ch9.h -file_019=Include\Usb\usb_common.h -file_020=Include\Usb\usb_device.h -file_021=Include\Usb\usb_function_hid.h -file_022=Include\Usb\usb_hal.h -file_023=Include\Usb\usb_hal_pic18.h -file_024=ax12.h -file_025=error.h -file_026=servo.h -file_027=mcc.h -file_028=adjd-s371.h -file_029=lcd.h -file_030=rm18f4550.lkr +file_011=infrared.c +file_012=HardwareProfile.h +file_013=usb_config.h +file_014=eeprom.h +file_015=PcInterface.h +file_016=Include\Compiler.h +file_017=Include\GenericTypeDefs.h +file_018=Include\Usb\usb.h +file_019=Include\Usb\usb_ch9.h +file_020=Include\Usb\usb_common.h +file_021=Include\Usb\usb_device.h +file_022=Include\Usb\usb_function_hid.h +file_023=Include\Usb\usb_hal.h +file_024=Include\Usb\usb_hal_pic18.h +file_025=ax12.h +file_026=error.h +file_027=servo.h +file_028=mcc.h +file_029=adjd-s371.h +file_030=lcd.h +file_031=infrared.h +file_032=rm18f4550.lkr [SUITE_INFO] suite_guid={5B7D72DD-9861-47BD-9F60-2BE967BF8416} suite_state= diff --git a/elec/boards/Interface_Robot/Firmware/Robot_Interface.mcs b/elec/boards/Interface_Robot/Firmware/Robot_Interface.mcs index a53f261..445f9f6 100644 --- a/elec/boards/Interface_Robot/Firmware/Robot_Interface.mcs +++ b/elec/boards/Interface_Robot/Firmware/Robot_Interface.mcs @@ -2,183 +2,196 @@ MagicCookie={0b13fe8c-dfe0-40eb-8900-6712719559a7} Version=1.0 [File000] -Location=C:\krobot\USB_Module\Robot_Interface\Firmware\output\usb_descriptors.o +Location=C:\krobot\elec\boards\Interface_Robot\Firmware\output\usb_descriptors.o Folder=Intermediary DeviceName=PIC18F4550 LanguageToolSuiteID={5B7D72DD-9861-47BD-9F60-2BE967BF8416} LanguageToolID={E56A1C86-9D32-4DF6-8C34-FE0388B1B644} LanguageToolLocation=C:\MCC18\bin\mcc18.exe PPAD=$(BINDIR)|output||$(TMPDIR)|output||$(AINDIR)||$(INCDIR)|.;Include||$(LIBDIR)|C:\mcc18\lib||$(LKRDIR)|| -SOLK=<src>|usb_descriptors.c|main.c|eeprom.c|usb_device.c|usb_function_hid.c|ax12.c|error.c|servo.c|mcc.c|adjd-s371.c|lcd.c||<obj>||<lib>||<lkr>|rm18f4550.lkr|| +SOLK=<src>|usb_descriptors.c|main.c|eeprom.c|usb_device.c|usb_function_hid.c|ax12.c|error.c|servo.c|mcc.c|adjd-s371.c|lcd.c|infrared.c||<obj>||<lib>||<lkr>|rm18f4550.lkr|| SuiteArgsString= ToolArgsString= TraceCmdString= DebugOptions= [File001] -Location=C:\krobot\USB_Module\Robot_Interface\Firmware\output\main.o +Location=C:\krobot\elec\boards\Interface_Robot\Firmware\output\main.o Folder=Intermediary DeviceName=PIC18F4550 LanguageToolSuiteID={5B7D72DD-9861-47BD-9F60-2BE967BF8416} LanguageToolID={E56A1C86-9D32-4DF6-8C34-FE0388B1B644} LanguageToolLocation=C:\MCC18\bin\mcc18.exe PPAD=$(BINDIR)|output||$(TMPDIR)|output||$(AINDIR)||$(INCDIR)|.;Include||$(LIBDIR)|C:\mcc18\lib||$(LKRDIR)|| -SOLK=<src>|usb_descriptors.c|main.c|eeprom.c|usb_device.c|usb_function_hid.c|ax12.c|error.c|servo.c|mcc.c|adjd-s371.c|lcd.c||<obj>||<lib>||<lkr>|rm18f4550.lkr|| +SOLK=<src>|usb_descriptors.c|main.c|eeprom.c|usb_device.c|usb_function_hid.c|ax12.c|error.c|servo.c|mcc.c|adjd-s371.c|lcd.c|infrared.c||<obj>||<lib>||<lkr>|rm18f4550.lkr|| SuiteArgsString= ToolArgsString= TraceCmdString= DebugOptions= [File002] -Location=C:\krobot\USB_Module\Robot_Interface\Firmware\output\eeprom.o +Location=C:\krobot\elec\boards\Interface_Robot\Firmware\output\eeprom.o Folder=Intermediary DeviceName=PIC18F4550 LanguageToolSuiteID={5B7D72DD-9861-47BD-9F60-2BE967BF8416} LanguageToolID={E56A1C86-9D32-4DF6-8C34-FE0388B1B644} LanguageToolLocation=C:\MCC18\bin\mcc18.exe PPAD=$(BINDIR)|output||$(TMPDIR)|output||$(AINDIR)||$(INCDIR)|.;Include||$(LIBDIR)|C:\mcc18\lib||$(LKRDIR)|| -SOLK=<src>|usb_descriptors.c|main.c|eeprom.c|usb_device.c|usb_function_hid.c|ax12.c|error.c|servo.c|mcc.c|adjd-s371.c|lcd.c||<obj>||<lib>||<lkr>|rm18f4550.lkr|| +SOLK=<src>|usb_descriptors.c|main.c|eeprom.c|usb_device.c|usb_function_hid.c|ax12.c|error.c|servo.c|mcc.c|adjd-s371.c|lcd.c|infrared.c||<obj>||<lib>||<lkr>|rm18f4550.lkr|| SuiteArgsString= ToolArgsString= TraceCmdString= DebugOptions= [File003] -Location=C:\krobot\USB_Module\Robot_Interface\Firmware\output\usb_device.o +Location=C:\krobot\elec\boards\Interface_Robot\Firmware\output\usb_device.o Folder=Intermediary DeviceName=PIC18F4550 LanguageToolSuiteID={5B7D72DD-9861-47BD-9F60-2BE967BF8416} LanguageToolID={E56A1C86-9D32-4DF6-8C34-FE0388B1B644} LanguageToolLocation=C:\MCC18\bin\mcc18.exe PPAD=$(BINDIR)|output||$(TMPDIR)|output||$(AINDIR)||$(INCDIR)|.;Include||$(LIBDIR)|C:\mcc18\lib||$(LKRDIR)|| -SOLK=<src>|usb_descriptors.c|main.c|eeprom.c|usb_device.c|usb_function_hid.c|ax12.c|error.c|servo.c|mcc.c|adjd-s371.c|lcd.c||<obj>||<lib>||<lkr>|rm18f4550.lkr|| +SOLK=<src>|usb_descriptors.c|main.c|eeprom.c|usb_device.c|usb_function_hid.c|ax12.c|error.c|servo.c|mcc.c|adjd-s371.c|lcd.c|infrared.c||<obj>||<lib>||<lkr>|rm18f4550.lkr|| SuiteArgsString= ToolArgsString= TraceCmdString= DebugOptions= [File004] -Location=C:\krobot\USB_Module\Robot_Interface\Firmware\output\usb_function_hid.o +Location=C:\krobot\elec\boards\Interface_Robot\Firmware\output\usb_function_hid.o Folder=Intermediary DeviceName=PIC18F4550 LanguageToolSuiteID={5B7D72DD-9861-47BD-9F60-2BE967BF8416} LanguageToolID={E56A1C86-9D32-4DF6-8C34-FE0388B1B644} LanguageToolLocation=C:\MCC18\bin\mcc18.exe PPAD=$(BINDIR)|output||$(TMPDIR)|output||$(AINDIR)||$(INCDIR)|.;Include||$(LIBDIR)|C:\mcc18\lib||$(LKRDIR)|| -SOLK=<src>|usb_descriptors.c|main.c|eeprom.c|usb_device.c|usb_function_hid.c|ax12.c|error.c|servo.c|mcc.c|adjd-s371.c|lcd.c||<obj>||<lib>||<lkr>|rm18f4550.lkr|| +SOLK=<src>|usb_descriptors.c|main.c|eeprom.c|usb_device.c|usb_function_hid.c|ax12.c|error.c|servo.c|mcc.c|adjd-s371.c|lcd.c|infrared.c||<obj>||<lib>||<lkr>|rm18f4550.lkr|| SuiteArgsString= ToolArgsString= TraceCmdString= DebugOptions= [File005] -Location=C:\krobot\USB_Module\Robot_Interface\Firmware\output\ax12.o +Location=C:\krobot\elec\boards\Interface_Robot\Firmware\output\ax12.o Folder=Intermediary DeviceName=PIC18F4550 LanguageToolSuiteID={5B7D72DD-9861-47BD-9F60-2BE967BF8416} LanguageToolID={E56A1C86-9D32-4DF6-8C34-FE0388B1B644} LanguageToolLocation=C:\MCC18\bin\mcc18.exe PPAD=$(BINDIR)|output||$(TMPDIR)|output||$(AINDIR)||$(INCDIR)|.;Include||$(LIBDIR)|C:\mcc18\lib||$(LKRDIR)|| -SOLK=<src>|usb_descriptors.c|main.c|eeprom.c|usb_device.c|usb_function_hid.c|ax12.c|error.c|servo.c|mcc.c|adjd-s371.c|lcd.c||<obj>||<lib>||<lkr>|rm18f4550.lkr|| +SOLK=<src>|usb_descriptors.c|main.c|eeprom.c|usb_device.c|usb_function_hid.c|ax12.c|error.c|servo.c|mcc.c|adjd-s371.c|lcd.c|infrared.c||<obj>||<lib>||<lkr>|rm18f4550.lkr|| SuiteArgsString= ToolArgsString= TraceCmdString= DebugOptions= [File006] -Location=C:\krobot\USB_Module\Robot_Interface\Firmware\output\error.o +Location=C:\krobot\elec\boards\Interface_Robot\Firmware\output\error.o Folder=Intermediary DeviceName=PIC18F4550 LanguageToolSuiteID={5B7D72DD-9861-47BD-9F60-2BE967BF8416} LanguageToolID={E56A1C86-9D32-4DF6-8C34-FE0388B1B644} LanguageToolLocation=C:\MCC18\bin\mcc18.exe PPAD=$(BINDIR)|output||$(TMPDIR)|output||$(AINDIR)||$(INCDIR)|.;Include||$(LIBDIR)|C:\mcc18\lib||$(LKRDIR)|| -SOLK=<src>|usb_descriptors.c|main.c|eeprom.c|usb_device.c|usb_function_hid.c|ax12.c|error.c|servo.c|mcc.c|adjd-s371.c|lcd.c||<obj>||<lib>||<lkr>|rm18f4550.lkr|| +SOLK=<src>|usb_descriptors.c|main.c|eeprom.c|usb_device.c|usb_function_hid.c|ax12.c|error.c|servo.c|mcc.c|adjd-s371.c|lcd.c|infrared.c||<obj>||<lib>||<lkr>|rm18f4550.lkr|| SuiteArgsString= ToolArgsString= TraceCmdString= DebugOptions= [File007] -Location=C:\krobot\USB_Module\Robot_Interface\Firmware\output\servo.o +Location=C:\krobot\elec\boards\Interface_Robot\Firmware\output\servo.o Folder=Intermediary DeviceName=PIC18F4550 LanguageToolSuiteID={5B7D72DD-9861-47BD-9F60-2BE967BF8416} LanguageToolID={E56A1C86-9D32-4DF6-8C34-FE0388B1B644} LanguageToolLocation=C:\MCC18\bin\mcc18.exe PPAD=$(BINDIR)|output||$(TMPDIR)|output||$(AINDIR)||$(INCDIR)|.;Include||$(LIBDIR)|C:\mcc18\lib||$(LKRDIR)|| -SOLK=<src>|usb_descriptors.c|main.c|eeprom.c|usb_device.c|usb_function_hid.c|ax12.c|error.c|servo.c|mcc.c|adjd-s371.c|lcd.c||<obj>||<lib>||<lkr>|rm18f4550.lkr|| +SOLK=<src>|usb_descriptors.c|main.c|eeprom.c|usb_device.c|usb_function_hid.c|ax12.c|error.c|servo.c|mcc.c|adjd-s371.c|lcd.c|infrared.c||<obj>||<lib>||<lkr>|rm18f4550.lkr|| SuiteArgsString= ToolArgsString= TraceCmdString= DebugOptions= [File008] -Location=C:\krobot\USB_Module\Robot_Interface\Firmware\output\mcc.o +Location=C:\krobot\elec\boards\Interface_Robot\Firmware\output\mcc.o Folder=Intermediary DeviceName=PIC18F4550 LanguageToolSuiteID={5B7D72DD-9861-47BD-9F60-2BE967BF8416} LanguageToolID={E56A1C86-9D32-4DF6-8C34-FE0388B1B644} LanguageToolLocation=C:\MCC18\bin\mcc18.exe PPAD=$(BINDIR)|output||$(TMPDIR)|output||$(AINDIR)||$(INCDIR)|.;Include||$(LIBDIR)|C:\mcc18\lib||$(LKRDIR)|| -SOLK=<src>|usb_descriptors.c|main.c|eeprom.c|usb_device.c|usb_function_hid.c|ax12.c|error.c|servo.c|mcc.c|adjd-s371.c|lcd.c||<obj>||<lib>||<lkr>|rm18f4550.lkr|| +SOLK=<src>|usb_descriptors.c|main.c|eeprom.c|usb_device.c|usb_function_hid.c|ax12.c|error.c|servo.c|mcc.c|adjd-s371.c|lcd.c|infrared.c||<obj>||<lib>||<lkr>|rm18f4550.lkr|| SuiteArgsString= ToolArgsString= TraceCmdString= DebugOptions= [File009] -Location=C:\krobot\USB_Module\Robot_Interface\Firmware\output\adjd-s371.o +Location=C:\krobot\elec\boards\Interface_Robot\Firmware\output\adjd-s371.o Folder=Intermediary DeviceName=PIC18F4550 LanguageToolSuiteID={5B7D72DD-9861-47BD-9F60-2BE967BF8416} LanguageToolID={E56A1C86-9D32-4DF6-8C34-FE0388B1B644} LanguageToolLocation=C:\MCC18\bin\mcc18.exe PPAD=$(BINDIR)|output||$(TMPDIR)|output||$(AINDIR)||$(INCDIR)|.;Include||$(LIBDIR)|C:\mcc18\lib||$(LKRDIR)|| -SOLK=<src>|usb_descriptors.c|main.c|eeprom.c|usb_device.c|usb_function_hid.c|ax12.c|error.c|servo.c|mcc.c|adjd-s371.c|lcd.c||<obj>||<lib>||<lkr>|rm18f4550.lkr|| +SOLK=<src>|usb_descriptors.c|main.c|eeprom.c|usb_device.c|usb_function_hid.c|ax12.c|error.c|servo.c|mcc.c|adjd-s371.c|lcd.c|infrared.c||<obj>||<lib>||<lkr>|rm18f4550.lkr|| SuiteArgsString= ToolArgsString= TraceCmdString= DebugOptions= [File010] -Location=C:\krobot\USB_Module\Robot_Interface\Firmware\output\lcd.o +Location=C:\krobot\elec\boards\Interface_Robot\Firmware\output\lcd.o Folder=Intermediary DeviceName=PIC18F4550 LanguageToolSuiteID={5B7D72DD-9861-47BD-9F60-2BE967BF8416} LanguageToolID={E56A1C86-9D32-4DF6-8C34-FE0388B1B644} LanguageToolLocation=C:\MCC18\bin\mcc18.exe PPAD=$(BINDIR)|output||$(TMPDIR)|output||$(AINDIR)||$(INCDIR)|.;Include||$(LIBDIR)|C:\mcc18\lib||$(LKRDIR)|| -SOLK=<src>|usb_descriptors.c|main.c|eeprom.c|usb_device.c|usb_function_hid.c|ax12.c|error.c|servo.c|mcc.c|adjd-s371.c|lcd.c||<obj>||<lib>||<lkr>|rm18f4550.lkr|| +SOLK=<src>|usb_descriptors.c|main.c|eeprom.c|usb_device.c|usb_function_hid.c|ax12.c|error.c|servo.c|mcc.c|adjd-s371.c|lcd.c|infrared.c||<obj>||<lib>||<lkr>|rm18f4550.lkr|| SuiteArgsString= ToolArgsString= TraceCmdString= DebugOptions= [File011] -Location=C:\krobot\USB_Module\Robot_Interface\Firmware\output\Robot_Interface.cof +Location=C:\krobot\elec\boards\Interface_Robot\Firmware\output\infrared.o +Folder=Intermediary +DeviceName=PIC18F4550 +LanguageToolSuiteID={5B7D72DD-9861-47BD-9F60-2BE967BF8416} +LanguageToolID={E56A1C86-9D32-4DF6-8C34-FE0388B1B644} +LanguageToolLocation=C:\MCC18\bin\mcc18.exe +PPAD=$(BINDIR)|output||$(TMPDIR)|output||$(AINDIR)||$(INCDIR)|.;Include||$(LIBDIR)|C:\mcc18\lib||$(LKRDIR)|| +SOLK=<src>|usb_descriptors.c|main.c|eeprom.c|usb_device.c|usb_function_hid.c|ax12.c|error.c|servo.c|mcc.c|adjd-s371.c|lcd.c|infrared.c||<obj>||<lib>||<lkr>|rm18f4550.lkr|| +SuiteArgsString= +ToolArgsString= +TraceCmdString= +DebugOptions= +[File012] +Location=C:\krobot\elec\boards\Interface_Robot\Firmware\output\Robot_Interface.cof Folder=Output DeviceName=PIC18F4550 LanguageToolSuiteID={5B7D72DD-9861-47BD-9F60-2BE967BF8416} LanguageToolID={96C98149-AA1B-4CF9-B967-FAE79CAB663C} LanguageToolLocation=C:\MCC18\bin\mplink.exe PPAD=$(BINDIR)|output||$(TMPDIR)|output||$(AINDIR)||$(INCDIR)|.;Include||$(LIBDIR)|C:\mcc18\lib||$(LKRDIR)|| -SOLK=<src>|usb_descriptors.c|main.c|eeprom.c|usb_device.c|usb_function_hid.c|ax12.c|error.c|servo.c|mcc.c|adjd-s371.c|lcd.c||<obj>||<lib>||<lkr>|rm18f4550.lkr|| +SOLK=<src>|usb_descriptors.c|main.c|eeprom.c|usb_device.c|usb_function_hid.c|ax12.c|error.c|servo.c|mcc.c|adjd-s371.c|lcd.c|infrared.c||<obj>||<lib>||<lkr>|rm18f4550.lkr|| SuiteArgsString= ToolArgsString=/m"$(BINDIR_)$(TARGETBASE).map" /w /o"$(BINDIR_)$(TARGETBASE).cof" TraceCmdString= DebugOptions= -[File012] -Location=C:\krobot\USB_Module\Robot_Interface\Firmware\output\Robot_Interface.hex +[File013] +Location=C:\krobot\elec\boards\Interface_Robot\Firmware\output\Robot_Interface.hex Folder=Output DeviceName=PIC18F4550 LanguageToolSuiteID={5B7D72DD-9861-47BD-9F60-2BE967BF8416} LanguageToolID={96C98149-AA1B-4CF9-B967-FAE79CAB663C} LanguageToolLocation=C:\MCC18\bin\mplink.exe PPAD=$(BINDIR)|output||$(TMPDIR)|output||$(AINDIR)||$(INCDIR)|.;Include||$(LIBDIR)|C:\mcc18\lib||$(LKRDIR)|| -SOLK=<src>|usb_descriptors.c|main.c|eeprom.c|usb_device.c|usb_function_hid.c|ax12.c|error.c|servo.c|mcc.c|adjd-s371.c|lcd.c||<obj>||<lib>||<lkr>|rm18f4550.lkr|| +SOLK=<src>|usb_descriptors.c|main.c|eeprom.c|usb_device.c|usb_function_hid.c|ax12.c|error.c|servo.c|mcc.c|adjd-s371.c|lcd.c|infrared.c||<obj>||<lib>||<lkr>|rm18f4550.lkr|| SuiteArgsString= ToolArgsString=/m"$(BINDIR_)$(TARGETBASE).map" /w /o"$(BINDIR_)$(TARGETBASE).cof" TraceCmdString= DebugOptions= -[File013] -Location=C:\krobot\USB_Module\Robot_Interface\Firmware\output\Robot_Interface.map +[File014] +Location=C:\krobot\elec\boards\Interface_Robot\Firmware\output\Robot_Interface.map Folder=Output DeviceName=PIC18F4550 LanguageToolSuiteID={5B7D72DD-9861-47BD-9F60-2BE967BF8416} LanguageToolID={96C98149-AA1B-4CF9-B967-FAE79CAB663C} LanguageToolLocation=C:\MCC18\bin\mplink.exe PPAD=$(BINDIR)|output||$(TMPDIR)|output||$(AINDIR)||$(INCDIR)|.;Include||$(LIBDIR)|C:\mcc18\lib||$(LKRDIR)|| -SOLK=<src>|usb_descriptors.c|main.c|eeprom.c|usb_device.c|usb_function_hid.c|ax12.c|error.c|servo.c|mcc.c|adjd-s371.c|lcd.c||<obj>||<lib>||<lkr>|rm18f4550.lkr|| +SOLK=<src>|usb_descriptors.c|main.c|eeprom.c|usb_device.c|usb_function_hid.c|ax12.c|error.c|servo.c|mcc.c|adjd-s371.c|lcd.c|infrared.c||<obj>||<lib>||<lkr>|rm18f4550.lkr|| SuiteArgsString= ToolArgsString=/m"$(BINDIR_)$(TARGETBASE).map" /w /o"$(BINDIR_)$(TARGETBASE).cof" TraceCmdString= diff --git a/elec/boards/Interface_Robot/Firmware/infrared.c b/elec/boards/Interface_Robot/Firmware/infrared.c new file mode 100644 index 0000000..8eda7e5 --- /dev/null +++ b/elec/boards/Interface_Robot/Firmware/infrared.c @@ -0,0 +1,119 @@ +#ifndef INFRARED_C +#define INFRARED_C + +#include "infrared.h" + +volatile long IF1range[IF_AVR1]; +volatile long IF2range[IF_AVR1]; + +void initIF() { + /* Initialisation des PINs */ + TRISD&= 0b11111100; /* OPTOSW1, OPTOSW2 */ + + OPTOSW1 = 0; + OPTOSW2 = 0; + + OpenADC(ADC_FOSC_64 /* A/D clock source (forcnt Fosc / 64 car PIC 8 MHz) */ + & ADC_RIGHT_JUST /* A/D result justification */ + & ADC_0_TAD, /* A/D acquisition time select (pas la peine d'attendre avant le */ + /* dt de la conversion car l'acquisition a largement eu le */ + /* temps de se faire entre chaque interruption, toutes les 1 ms) */ + ADC_INT_OFF /* A/D Interrupts */ + & ADC_REF_VDD_VSS, /* A/D voltage configuration */ + ADC_2ANA + ); +} + +void interruptIF(void) { + static char state = 0; + static char IF1_idx = 0; + static char IF2_idx = 0; + static long IF1range_0[IF_AVR0]; + static long IF2range_0[IF_AVR0]; + + char i; + + switch (state) { + case 0: + OPTOSW1 = 1; + + // Drre la convertion sur RA0 + SelChanConvADC(ADC_CH0); + state = 1; + break; + + case 1: + // Rp le rltat de la conversion + if (!BusyADC()) { + IF1range_0[IF1_idx] = ReadADC(); + state = 2; + } + break; + + case 2: + OPTOSW1 = 0; + OPTOSW2 = 1; + + // Drre la convertion sur RA1 + SelChanConvADC(ADC_CH1); + state = 3; + break; + + case 3: + // Rp le rltat de la conversion + if (!BusyADC()) { + IF2range_0[IF1_idx] = ReadADC(); + state = 4; + } + break; + + case 4: + OPTOSW2 = 0; + + // Traitement des rltats + IF1_idx++; + + if (IF1_idx >= IF_AVR0) { + IF1_idx = 0; + IF1range[IF2_idx] = 0; + IF2range[IF2_idx] = 0; + + for (i = 0; i < IF_AVR0; i++) { + IF1range[IF2_idx]+= IF1range_0[i]; + IF2range[IF2_idx]+= IF2range_0[i]; + } + + IF2_idx++; + + if (IF2_idx >= IF_AVR1) + IF2_idx = 0; + } + + state = 0; + break; + + default: + state = 0; + } +} + +long getIFRange(char sensor) { + char i; + long IFrange = 0; + + if (sensor == 0) { + for (i = 0; i < IF_AVR1; i++) + IFrange+= IF1range[i]; + } + else if (sensor == 1) { + for (i = 0; i < IF_AVR1; i++) + IFrange+= IF2range[i]; + } + else { + return 0; + } + + return (long) (((float) IFrange / IF_AVR0 / IF_AVR1) * 5.0 / 1023.0); +} + +#endif diff --git a/elec/boards/Interface_Robot/Firmware/infrared.h b/elec/boards/Interface_Robot/Firmware/infrared.h new file mode 100644 index 0000000..11dadae --- /dev/null +++ b/elec/boards/Interface_Robot/Firmware/infrared.h @@ -0,0 +1,23 @@ +#ifndef INFRARED_H +#define INFRARED_H + +#include <adc.h> +#include "GenericTypeDefs.h" +#include "Compiler.h" +#include "HardwareProfile.h" +#include "PcInterface.h" +#include "error.h" + +// Parames graux +#define IF_AVR0 10 +#define IF_AVR1 10 + +// Entr / sorties +#define OPTOSW1 PORTDbits.RD0 +#define OPTOSW2 PORTDbits.RD1 + +void initIF(void); +void interruptIF(void); +long getIFRange(char sensor); + +#endif diff --git a/elec/boards/Interface_Robot/Firmware/lcd.h b/elec/boards/Interface_Robot/Firmware/lcd.h index 0e459d8..7db17a1 100644 --- a/elec/boards/Interface_Robot/Firmware/lcd.h +++ b/elec/boards/Interface_Robot/Firmware/lcd.h @@ -11,6 +11,8 @@ #include "HardwareProfile.h" #include <i2c.h> +#define ADD_LCD 0x07 + // Commandes de l'afficheur LCD #define CMD_HEAD 0x1B #define CMD_CLEAR 0x43 @@ -31,4 +33,4 @@ void lcd_write(BYTE address, unsigned char* msg); void lcd_write_line(BYTE address, BYTE line, unsigned char *msg); -#endif \ No newline at end of file +#endif diff --git a/elec/boards/Interface_Robot/Firmware/main.c b/elec/boards/Interface_Robot/Firmware/main.c index 78620d2..f42183b 100644 --- a/elec/boards/Interface_Robot/Firmware/main.c +++ b/elec/boards/Interface_Robot/Firmware/main.c @@ -92,9 +92,7 @@ #include "mcc.h" #include "adjd-s371.h" #include "lcd.h" - - -#define ADD_LCD 0x07 +#include "infrared.h" /* VARIABLES ******************************************************/ #pragma udata @@ -246,7 +244,11 @@ char ResetSource(void); PIR1bits.RCIF = 0; } - #ifdef MODE_INAB + #ifdef KROBOT_2010 + interruptIF(); + #endif + + #ifdef KROBOT_2010 // Interruption par le timer0 if (INTCONbits.TMR0IF) { interruptMotor1(); @@ -256,7 +258,7 @@ char ResetSource(void); } #endif - #ifdef MODE_SENS + #ifndef KROBOT_2010 // Interruption par le timer1 if (PIR1bits.TMR1IF) { interruptMotor2(); @@ -280,7 +282,7 @@ char ResetSource(void); sProdL = PRODL; sProdH = PRODH; - #ifdef MODE_SENS + #ifndef KROBOT_2010 // Interruption par le timer0 if (INTCONbits.TMR0IF) { interruptMotor1(); @@ -583,6 +585,7 @@ void UserInit(void) initServos(); initMCC(0); initAdjd(); + initIF(); }//end UserInit @@ -808,6 +811,16 @@ void ProcessIO(void) { */ break; + case GET_RANGEFINDER_STATE: + for (i = 0; i < 2; i++) { + dword.Val = getIFRange(i); + ToSendDataBuffer.DATA[4*i] = dword.byte.MB; + ToSendDataBuffer.DATA[4*i + 1] = dword.byte.UB; + ToSendDataBuffer.DATA[4*i + 2] = dword.byte.HB; + ToSendDataBuffer.DATA[4*i + 3] = dword.byte.LB; + } + break; + default: ToSendDataBuffer.ERR = ERR_UNKNOWN_GET; } diff --git a/elec/boards/Interface_Robot/Firmware/mcc.c b/elec/boards/Interface_Robot/Firmware/mcc.c index 2f8194b..ff0119f 100644 --- a/elec/boards/Interface_Robot/Firmware/mcc.c +++ b/elec/boards/Interface_Robot/Firmware/mcc.c @@ -15,7 +15,7 @@ volatile unsigned long durationMotor2 = 0; void initMCC(char withEncoder) { /* Initialisation des PINs */ - #ifdef MODE_SENS + #ifndef KROBOT_2010 TRISA&= 0b11111110; /* M1_SENS */ TRISB&= 0b11000011; /* M1_EN, M2_PWM, M2_SENS, M2_EN */ TRISC&= 0b11111011; /* M1_PWM */ @@ -51,7 +51,7 @@ void initMCC(char withEncoder) { ); } - #ifdef MODE_SENS + #ifndef KROBOT_2010 INTCON2bits.TMR0IP = 0; // Low priority interrupt for timer0 // Configuration du timer1 @@ -78,7 +78,7 @@ void initMCC(char withEncoder) { #endif /* Initialisation de l't des PINs */ - #ifdef MODE_SENS + #ifndef KROBOT_2010 M1_EN = 0; M2_EN = 0; M1_PWM = 0; @@ -104,7 +104,7 @@ void interruptMotor1() { CCP1CON = 0; M1_PWM = 0; - #ifdef MODE_INAB + #ifdef KROBOT_2010 M1_INA = 0; M1_INB = 0; #endif @@ -112,7 +112,7 @@ void interruptMotor1() { } } -#ifdef MODE_SENS +#ifndef KROBOT_2010 void interruptMotor2() { WriteTimer1(5536); // 2^16 - 60 000 : la prochaine interruption a lieu dans 60 000 cycles * 8 = 40 ms @@ -140,7 +140,7 @@ void interruptMotor1() { * #MOTOR_BOTH les 2 moteurs */ void enableMotor(char axis) { - #ifdef MODE_SENS + #ifndef KROBOT_2010 if (axis & MOTOR_RIGHT) M1_EN = 1; @@ -162,7 +162,7 @@ void enableMotor(char axis) { * #MOTOR_BOTH les 2 moteurs */ void disableMotor(char axis) { - #ifdef MODE_SENS + #ifndef KROBOT_2010 if (axis & MOTOR_RIGHT) M1_EN = 0; @@ -185,7 +185,7 @@ void disableMotor(char axis) { * @param duration durd'activation, en ms (0 = rotation continue) */ void move(char axis, char sens, BYTE speed, unsigned long duration) { - #ifdef MODE_SENS + #ifndef KROBOT_2010 if (axis & MOTOR_RIGHT) { durationMotor1 = duration / 40; WriteTimer0(5536); @@ -233,7 +233,7 @@ BOOL checkTOR(void) { // M1_SENS == 0 : up (IN3 = RD7 = TOR2) // M1_SENS == 1 : down (IN2 = RD6 = TOR1) - #ifdef MODE_SENS + #ifndef KROBOT_2010 if ((M1_SENS == 1 && !TOR1) || (M1_SENS == 0 && !TOR2)) { //ClosePWM1(); CCP1CON = 0; diff --git a/elec/boards/Interface_Robot/Firmware/mcc.h b/elec/boards/Interface_Robot/Firmware/mcc.h index bb7c985..b2b81e7 100644 --- a/elec/boards/Interface_Robot/Firmware/mcc.h +++ b/elec/boards/Interface_Robot/Firmware/mcc.h @@ -18,25 +18,28 @@ #define H_BRIDGE_VOLTAGE 24.0 #define MOTOR1_VOLTAGE 15.0 #define MOTOR2_VOLTAGE 15.0 -//#define MODE_SENS -#define MODE_INAB // Entr / sorties -#define ENC1_A PORTAbits.RA4 -#define ENC1_B PORTAbits.RA5 -#define ENC1_NI PORTEbits.RE0 -#define M1_EN PORTBbits.RB2 -#define M1_PWM PORTCbits.RC2 -#define M1_SENS PORTAbits.RA0 -#define M1_INA PORTAbits.RA0 -#define M1_INB PORTBbits.RB4 // Only available if M2 is not used (mode MODE_INAB) - -#define ENC2_A PORTCbits.RC0 -#define ENC2_B PORTAbits.RA2 -#define ENC2_NI PORTAbits.RA3 -#define M2_EN PORTBbits.RB5 -#define M2_PWM PORTBbits.RB3 -#define M2_SENS PORTBbits.RB4 +#ifndef KROBOT_2010 + #define ENC1_A PORTAbits.RA4 + #define ENC1_B PORTAbits.RA5 + #define ENC1_NI PORTEbits.RE0 + #define M1_EN PORTBbits.RB2 + #define M1_PWM PORTCbits.RC2 + #define M1_SENS PORTAbits.RA0 + + #define ENC2_A PORTCbits.RC0 + #define ENC2_B PORTAbits.RA2 + #define ENC2_NI PORTAbits.RA3 + #define M2_EN PORTBbits.RB5 + #define M2_PWM PORTBbits.RB3 + #define M2_SENS PORTBbits.RB4 +#else + #define M1_EN PORTBbits.RB2 + #define M1_PWM PORTCbits.RC2 + #define M1_INA PORTBbits.RB5 + #define M1_INB PORTBbits.RB4 +#endif #define TOR1 PORTDbits.RD6 #define TOR2 PORTDbits.RD7 diff --git a/elec/boards/Interface_Robot/Firmware/output/Robot_Interface.cof b/elec/boards/Interface_Robot/Firmware/output/Robot_Interface.cof index 9685c05..825d379 100644 Binary files a/elec/boards/Interface_Robot/Firmware/output/Robot_Interface.cof and b/elec/boards/Interface_Robot/Firmware/output/Robot_Interface.cof differ diff --git a/elec/boards/Interface_Robot/Firmware/output/Robot_Interface.hex b/elec/boards/Interface_Robot/Firmware/output/Robot_Interface.hex index bae90d2..994e1fc 100644 --- a/elec/boards/Interface_Robot/Firmware/output/Robot_Interface.hex +++ b/elec/boards/Interface_Robot/Firmware/output/Robot_Interface.hex @@ -1,933 +1,1028 @@ :020000040000FA -:0600000071EF1FF0120079 +:060000004FEF22F0120098 :0600080004EF04F01200F9 :060018000CEF04F01200E1 -:0608000071EF1FF0120071 -:0608080034EF04F01200C1 -:0608180094EF04F0120051 -:06082A000500793F00000B -:100830008600000024000000583F0000CB000000AC -:10084000210000004F3F00001301000009000000DC -:100850003F3F0000EC00000010000000363F0000A9 -:080860000A010000090000007C -:08086800DACFE4FFE2CFDAFF72 -:10087000E9CFE4FFEACFE4FFF6CFE4FFF7CFE4FFF0 -:10088000F5CFE4FFF3CFE4FFF4CFE4FFFACFE4FFCA -:1008900000EE22F0140EE80403E3EECFE4FFFBD7F2 -:1008A00000EE00F0220EE80403E3EECFE4FFFBD7F6 -:1008B0001EEC0DF0A1A203D087EC18F0A1929EAA25 -:1008C00003D039EC13F09E9AF2A403D0C9EC19F0CE -:1008D000F29431EC0DF002E2E16AE5522FEC0DF0FA -:1008E000E55200EE21F0220EE80403E3E5CFEDFF30 -:1008F000FBD700EE35F0140EE80403E3E5CFEDFF7F -:10090000FBD7E5CFFAFFE5CFF4FFE5CFF3FFE5CF67 -:10091000F5FFE5CFF7FFE5CFF6FFE5CFEAFFE5CF3F -:10092000E9FFE5CFDAFF1100D8CFE4FFE0CFE4FF25 -:10093000E46EDACFE4FFE2CFDAFFF3CFE4FFF4CFE7 -:10094000E4FF1EEC0DF031EC0DF002E2E16AE5523D -:100950002FEC0DF0E552E5CFF4FFE5CFF3FFE5CF47 -:10096000DAFFE550E5CFE0FFE5CFD8FF100004D86F -:10097000C4EC0DF059D8FCD70F0EC11202D88EEF7F -:100980000DF069EC0DF0E652A5EC0CF00001FC6FE7 -:10099000070EFC5D10E1E66A9FEC1DF0E552DF6E8C -:1009A000000EDF8039EC0DF0E66A43EC1FF0E552F3 -:1009B000DF7039EC0DF093809382948C948ED08EFE -:1009C000F28EF28C770EC86E070EE66E4FEC1BF0BF -:1009D000E5523F0E8A1693160101136B146B156BCB -:1009E000166B010E176F34EC13F0E30E951692920E -:1009F0009492A082FD0EE66E08EC1EF0E552000E09 -:100A0000E66EE66A86EC1EF0E552E5528394839624 -:100A1000839880928292E66AA3EC19F0E552BBECCF -:100A20001AF0E5527AEF0DF0D9CFE6FFE1CFD9FF0A -:100A3000170EE126160EDB6A0101175102E099EC50 -:100A40000BF0200E0001605D03E36D50020B02E02D -:100A50008FEF0BF0160EDB5036E091EC1AF0000928 -:100A600032E001011551161102E1000E08D015C146 -:100A7000E9FF16C1EAFFEF50800B01E0010E00090B -:100A800022E10501406B01011851182B0501416F4E -:100A900005010C0E426F0501436B400EE66E400EE1 -:100AA000E66E050EE66E010EE66E010EE66EDFECFA -:100AB00011F0006E050EE15E0050F3CF15F1F4CF9A -:100AC00016F1160EDB6A01011551161102E1000E36 -:100AD00008D015C1E9FF16C1EAFFEF50800B01E015 -:100AE000010E00093DE101011951EA6ACB0FE96EDF -:100AF000000EEA22EF5034E00501406B010118516D -:100B0000182B0501416F0501040E426F01011951B7 -:100B1000EA6ACB0FE96E000EEA22EFCF43F5400EF2 -:100B2000E66E400EE66E050EE66E010EE66E010EF6 -:100B3000E66EDFEC11F0006E050EE15E0050F3CFC3 -:100B400015F1F4CF16F101011951EA6ACB0FE96EE4 -:100B5000000EEA22EF6A010119291F0B0101196F2A -:100B600001011351141102E1000E08D013C1E9FF75 -:100B700014C1EAFFEF50800B01E0010E000902E012 -:100B80008FEF0BF005010251070A02E1F5EF0AF0C1 -:100B9000020A02E1C7EF0AF00E0A02E16EEF0AF064 -:100BA000060A02E1F3EF09F0040A01E110D20F0A8C -:100BB00001E165D1040A1AE0030A07E0010A02E034 -:100BC0004EEF0BF0FF008FEF0BF0E66A9FEC1DF08D -:100BD000E552DF6E000EDB80DFCFE6FFE66A7FECDA -:100BE0001DF0E552E552FF008FEF0BF001011551AA -:100BF000161102E1000E08D015C1E9FF16C1EAFF87 -:100C0000EF50800B01E0010E000901E036D100C574 -:100C100040F50501416B0501030E426F0501436B71 -:100C2000050108510A0A01E17ED00E0A71E0070AA7 -:100C300064E0010A20E0030A06E0010A01E0F3D0C3 -:100C4000FCC048F5F3D00501486BE70E006E3C0E82 -:100C5000016E026A00C0E6FF01C0E6FF02C0E6FFC7 -:100C6000480EE66E050EE66E63EC1DF0036E050E93 -:100C7000E15E0350DBD00501486BDB0E006E3C0EDD -:100C8000016E026A00C0E6FF01C0E6FF02C0E6FF97 -:100C9000480EE66E050EE66E63EC1DF0036E050E63 -:100CA000E15E0350D90E006E3C0E016E026A00C078 -:100CB000E6FF01C0E6FF02C0E6FF480EE66E050E45 -:100CC000E66E63EC1DF0036E050EE15E0350D00E80 -:100CD000006E3C0E016E026A00C0E6FF01C0E6FF36 -:100CE00002C0E6FF480EE66E050EE66E63EC1DF0F0 -:100CF000036E050EE15E035099D092CF48F593CF75 -:100D000049F594CF4AF595CF4BF596CF4CF58ED05B -:100D100080CF48F581CF49F582CF4AF583CF4BF597 -:100D200084CF4CF583D0800EE66E080EE66EF5ECAF -:100D30001EF0E552E552C5808AEC1FF0C00EE66E4B -:100D40004AEC1EF0E552E66A4AEC1EF0E552C58216 -:100D50008AEC1FF0C10EE66E4AEC1EF0E552010E61 -:100D6000DB6A020EDB6A010EDBCF00F0020EDBCF86 -:100D700001F0040E005C000E01584FE2010EF36E0C -:100D8000150EF3CFDBFFC586130EDB6A140EDB6A8C -:100D9000130EDBCF00F0140EDBCF01F0E80E005C89 -:100DA000030E015817E2C7A00FD0010EDBCFE9FFF9 -:100DB000020EDBCFEAFF480EE926050EEA22C9CF74 -:100DC000EFFF150EDB6A06D0130EDB2A140E01E3CB -:100DD000DB2ADED7150EDB5008E00501080E436F55 -:100DE000C58AC5888AEC1FF018D0010EDBCF00F051 -:100DF000020EDBCF01F0030E005C000E015803E28F -:100E0000C59AC58802D0C58AC5888AEC1FF0010E34 -:100E1000DB2A020E01E3DB2AA6D7C5848AEC1FF089 -:100E200098EC1FF003D00501020E436F400EE66EF2 -:100E3000400EE66E050EE66E010EE66E010EE66EE3 -:100E4000DFEC11F0006E050EE15E0050F3CF15F1FE -:100E5000F4CF16F1400EE66E000EE66E050EE66E5D -:100E6000E66A010EE66EDFEC11F0006E050EE15E43 -:100E70000050F3CF13F1F4CF14F18FEF0BF0050115 -:100E80000851050A54E0010A49E0070A37E0010A5F -:100E900025E0030A13E0010A01E080D005010951B1 -:100EA000921205010A51931205010B51941205018A -:100EB0000C51951205010D51961275D00501091DB1 -:100EC000921605010A1D931605010B1D94160501C6 -:100ED0000C1D951605010D1D961665D00501091D01 -:100EE000891605010A1D8A1605010B1D8B160501C1 -:100EF0000C1D8C1605010D1D8D1655D005010951CF -:100F0000891205010A518A1205010B518B12050144 -:100F10000C518C1205010D518D1245D0050109515E -:100F200001010F1B05010A5101010F133CD00501FE -:100F300009A107D00AC5E6FFE66A1FEC19F0E552E1 -:100F4000E552050109A308D00BC5E6FF010EE66EC8 -:100F50001FEC19F0E552E552050109A508D00CC5B2 -:100F6000E6FF020EE66E1FEC19F0E552E5520501B0 -:100F700009A708D00DC5E6FF030EE66E1FEC19F0B9 -:100F8000E552E552050109A908D00EC5E6FF040E99 -:100F9000E66E1FEC19F0E552E55205D0030EE66E41 -:100FA00010EC1FF0E552400EE66E000EE66E050EE8 -:100FB000E66EE66A010EE66EDFEC11F0006E050EDD -:100FC000E15E0050F3CF13F1F4CF14F1A8D3010187 -:100FD0001551161102E1000E08D015C1E9FF16C126 -:100FE000EAFFEF50800B01E0010E000901E0FAD1A9 -:100FF00000C540F50501416B0501030E426F050177 -:10100000436B050108510F0A01E1BCD1010A01E15E -:10101000B3D1030A01E1AAD1010A01E190D1070A83 -:1010200001E181D1010A01E1E1D0030A01E1C3D06C -:10103000010A01E1A8D00F0A01E18DD0010A68E0A0 -:10104000030A4FE0010A41E0070A24E0010A11E027 -:10105000030A01E09DD105010A51E66EE66A09C561 -:10106000E6FF4CEC14F0E552E552E5520501486FFD -:1010700092D105010C51E66EE66A0AC5E6FF09C584 -:10108000E6FFA6EC14F0E552E552E552E552050103 -:10109000486F81D105010C51E66EE66A0AC5E6FF8C -:1010A00009C5E6FF09EC15F0E552E552E552E552B7 -:1010B0000F0EF3CFDBFF100EF4CFDBFF100EDBCFF4 -:1010C00048F50F0EDBCF49F566D10CC5E6FF0AC522 -:1010D000E6FF09C5E6FF9BEC14F0E552E552E55248 -:1010E0005AD1100E0CC5DBFF0F0E0DC5DBFF0F0E26 -:1010F000DBCFE6FF100EDBCFE6FF0AC5E6FF09C532 -:10110000E6FF9FEC14F0E552E552E552E55243D17B -:10111000100E0AC5DBFF0F0E0BC5DBFF120E0CC550 -:10112000DBFF110E0DC5DBFF0EC5E6FF110EDBCF99 -:10113000E6FF120EDBCFE6FF0F0EDBCFE6FF100E51 -:10114000DBCFE6FF09C5E6FF8AEC15F0006E060E60 -:10115000E15E005020D105010A51E66EE66A09C53C -:10116000E6FFADEC15F0E552E552E5520F0EF3CF78 -:10117000DBFF100EF4CFDBFF100EDBCF48F50F0EB8 -:10118000DBCF49F508D105010A51E66EE66A09C5CB -:10119000E6FFB0EC15F0E552E552E5520F0EF3CF45 -:1011A000DBFF100EF4CFDBFF100EDBCF48F50F0E88 -:1011B000DBCF49F5F0D005010A51E66EE66A280E4C -:1011C000E66E09C5E6FF09EC15F0E552E552E55279 -:1011D000E5520F0EF3CFDBFF100EF4CFDBFF100E46 -:1011E000DBCF48F50F0EDBCF49F5D5D005010A510D -:1011F000E66EE66A09C5E6FFADEC15F0E552E5528C -:10120000E5520F0EF3CFDBFF100EF4CFDBFF100E15 -:10121000DBCF48F50F0EDBCF49F505010A51E66E2D -:10122000E66A09C5E6FFB0EC15F0E552E552E55275 -:101230000F0EF3CFDBFF100EF4CFDBFF100EDBCF72 -:101240004AF50F0EDBCF4BF505010A51E66EE66A53 -:10125000280EE66E09C5E6FF09EC15F0E552E552E9 -:10126000E552E5520F0EF3CFDBFF100EF4CFDBFF9C -:10127000100EDBCF4CF50F0EDBCF4DF505010A51FB -:10128000E66EE66A2A0EE66E09C5E6FFA6EC14F0E5 -:10129000E552E552E552E55205014E6F05010A514E -:1012A000E66EE66A2B0EE66E09C5E6FFA6EC14F0C4 -:1012B000E552E552E552E55205014F6F05010A512D -:1012C000E66EE66A060EE66E09C5E6FF09EC15F065 -:1012D000E552E552E552E5520F0EF3CFDBFF100E5B -:1012E000F4CFDBFF100EDBCF50F50F0EDBCF51F547 -:1012F00005010A51E66EE66A080EE66E09C5E6FFCC -:1013000009EC15F0E552E552E552E5520F0EF3CF28 -:10131000DBFF100EF4CFDBFF100EDBCF52F50F0E0C -:10132000DBCF53F538D00CC5E6FF0AC5E6FF09C58B -:10133000E6FF79EC15F0E552E552E5522CD0100E9F -:101340000CC5DBFF0F0E0DC5DBFF0F0EDBCFE6FF7D -:10135000100EDBCFE6FF0AC5E6FF09C5E6FF7DEC10 -:1013600015F0E552E552E552E55215D009C5E6FF04 -:1013700085EC15F0E5520FD009C5E6FF96EC14F0A8 -:10138000E55209D009C5E6FF3AEC14F0E55203D066 -:101390000501010E436F400EE66E400EE66E050E2F -:1013A000E66E010EE66E010EE66EDFEC11F0006EE9 -:1013B000050EE15E0050F3CF15F1F4CF16F1400EAB -:1013C000E66E000EE66E050EE66EE66A010EE66E4D -:1013D000DFEC11F0006E050EE15E0050F3CF13F16B -:1013E000F4CF14F19CD105010851070A4FE0010A1E -:1013F00041E0030A33E0010A29E0070A1EE0010A7E -:1014000014E0030A09E0010A01E04FD0070EE66E7E -:1014100056EC1BF0E5524ED0010EE66E070EE66E5E -:1014200059EC1BF0E552E55245D0E66A070EE66E30 -:1014300059EC1BF0E552E5523DD0010EE66E070E69 -:10144000E66E61EC1BF0E552E55234D0E66A070E19 -:10145000E66E61EC1BF0E552E5522CD00AC5E6FFC2 -:1014600009C5E6FF070EE66E6CEC1BF0E552E5528F -:10147000E55220D0090EE66E050EE66E070EE66E0A -:1014800079EC1BF0E552E552E55214D00A0EE66EF7 -:10149000050EE66E09C5E6FF070EE66E7FEC1BF053 -:1014A000E552E552E552E55205D0010EE66E10EC2C -:1014B0001FF0E552400EE66E000EE66E050EE66E7B -:1014C000E66A010EE66EDFEC11F0006E050EE15EDD -:1014D0000050F3CF13F1F4CF14F121D105010851DD -:1014E000030A11E0010A09E0030A01E037D009C547 -:1014F000E6FFE4EC19F0E55236D009C5E6FFE8EC6A -:1015000019F0E55230D00E0E0CC5DBFF0D0E0DC5E7 -:10151000DBFF0C0E0EC5DBFF0B0E0FC5DBFFD9503A -:101520000B0FE96EDACFEAFFEECFE6FFEECFE6FF74 -:10153000EECFE6FFEFCFE6FF0BC5E6FF0AC5E6FFFD -:1015400009C5E6FFECEC19F0006E070EE15E0050F5 -:10155000010EF36E160EF3CFDBFF05D0010EE66E23 -:1015600010EC1FF0E552400EE66E000EE66E050E22 -:10157000E66EE66A010EE66EDFEC11F0006E050E17 -:10158000E15E0050F3CF13F1F4CF14F1C8D0800E18 -:10159000E66E080EE66EF5EC1EF0E552E552C580EB -:1015A0008AEC1FF0E66A4AEC1EF0E552080EE66E81 -:1015B000050EE66E0EEC1DF0E552E552C58498EC82 -:1015C0001FF0400EE66E000EE66E050EE66EE66A51 -:1015D000010EE66EDFEC11F0006E050EE15E0050CC -:1015E000F3CF13F1F4CF14F19AD04F0EAB16AC9A9F -:1015F000CF0E9D16020EE66EE66A7C0EE66EC9EC14 -:101600001CF0E552E552E552040EE66EE66A2EEC59 -:1016100014F0E552E552100EE66E010EE66E2EEC69 -:1016200014F0E552E552020EE66E030EE66E010E70 -:10163000E66EA9EC13F0E552E552E552040EE66EB3 -:10164000E66A2EEC14F0E552E552100EE66E010E3D -:10165000E66E2EEC14F0E552E552020EE66E030E35 -:10166000E66E010EE66EA9EC13F0E552E552E55286 -:1016700034EC13F0400EE66E000EE66E050EE66EDC -:10168000E66A010EE66EDFEC11F0006E050EE15E1B -:101690000050F3CF13F1F4CF14F141D001011551F3 -:1016A000161102E1000E08D015C1E9FF16C1EAFFCC -:1016B000EF50800B01E0010E000931E100C540F55B -:1016C0000501416B0501030E426F0501010E436FD9 -:1016D000400EE66E400EE66E050EE66E010EE66EFC -:1016E000010EE66EDFEC11F0006E050EE15E0050BB -:1016F000F3CF15F1F4CF16F1400EE66E000EE66E54 -:10170000050EE66EE66A010EE66EDFEC11F0006E85 -:10171000050EE15E0050F3CF13F1F4CF14F1170E74 -:10172000E15C02E2E16AE552E16EE552E7CFD9FF02 -:10173000120001011A511B1104E1100E1A6F270E3D -:101740001B6F1A07000E1B5B6DA207D01A511B11ED -:101750002EE18A7C8ABC13D027D00001605102E1BF -:101760008A9C22D0600502E18A8C09D0020E605D5D -:1017700002E18A8C19D0040E605D03E18A9C8A8E96 -:101780001200100E605D06E101011A511B110FE1FC -:101790008A7C0AD0200E605D0AE101011A511B11FA -:1017A00006E18A7C8AAC02D08A9E12008A8E1200E0 -:1017B00010D9210E9BD9500E82D9A9D9630E48D9D0 -:1017C000630EEE6E740EEE6E690EEE6E760EEE6EBB -:1017D000690EEE6E740E64D981D924D926D951D9F7 -:1017E000E66AD9D802E2E16AE5522FEF0DF0F1D8AE -:1017F0002D0E7CD9430E2CD9780EEE6E690EEE6E4E -:101800006F0EEE6E6E0EEE6E200E59D9740E7BD9F1 -:10181000620EEE6E6C0EEE6E690E42D9EE6E5ED901 -:10182000EE6E71D9760E4BD9630EEE6E200EEE6E13 -:101830006C0E69D9200EEE6EF8D8070EE66E56ECE7 -:101840001BF0E5521ED9010EE66EA5D802E2E16A50 -:10185000E5522FEF0DF012001200BBEF1BF012004B -:101860001E0EE66E010EE66EADEC11F0E552E5528D -:10187000400EE66E000EE66E050EE66EE66A010E9E -:10188000E66EDFEC11F0006E050EE15E0050F3CF66 -:1018900013F1F4CF14F112006D840001080EFD6FF6 -:1018A000070EFE6FFD07000EFE5BFD51FE11FAE113 -:1018B0006D941200D9CFE6FFE1CFD9FFFD0EDBCF4B -:1018C0002AF0FE0EDBCF2BF0010E2A1801E12B507F -:1018D00033E0E8682A1802E1E8682B182BE0030ED1 -:1018E0002A1801E12B5024E0040E2A1801E12B50A4 -:1018F0001DE0020E2A1801E12B5016E0170E2A18DF -:1019000001E12B500FE0160E2A1801E12B5008E0E0 -:10191000150E2A1801E12B5001E010D0A1DF0FD0E5 -:101920009EDF0DD09ADF0BD096DF09D041DF07D0C4 -:101930005EDF05D091DF03D0000001D000D0010EA2 -:1019400000D0E552E7CFD9FF1200C3D8E652D0B29B -:1019500002D0010E15D0D0B802D0020E11D0D0B0F6 -:1019600002D0030E0DD0D0B602D0040E09D0FCAECA -:1019700002D0050E05D0FCAC02D0060E01D0070E39 -:10198000DF6ED088D086D084D082D080FC9EFC9C34 -:10199000DF50E552AFD0070EE66E61EC1BF0E5526A -:1019A000E552D9CFE6FFDACFE6FF010E7ED8D95057 -:1019B000150FA4D8020E79D8D9502A0F9FD8030E3C -:1019C00074D8D9503F0F9AD8040E6FD8540EE15CEA -:1019D00012007FD8540EE126D9CFE9FFDACFEAFF13 -:1019E0005B0EEE6E4B0EEE6E720EEE6E6F0EEE6EC8 -:1019F0005D0EEE6E620EEE6E6F0EEE6E740EEE6E9D -:101A0000200E61D8EE6EEE6E570E7DD86C0EEE6E27 -:101A1000EE6E790EEE6EEE6AD950150FE96EDACFE2 -:101A2000EAFF120050D863EF0DF0630E6CD86FD848 -:101A30006D0E45D8720E43D8EE6A1200E65249D8B0 -:101A4000020EE126F350DF6E010EF4CFDBFF120031 -:101A5000EE6E6F0EEE6E6E0EEE6E5FEF0DF0E16EDF -:101A600049D0DF50F36E010EDB50F46E020EE15CE4 -:101A70001200DFCFE6FFE66A7FEC1DF0E552E5528B -:101A80001200E66A070EE66E59EC1BF0E552E552CD -:101A90001200EE6AD9502A0FE96EDACFEAFF12007F -:101AA0000ED8200EEE6EEE6E1200E66E070EE66E9B -:101AB0007FEC1BF0E552E552E552E5521200EE6E66 -:101AC000650EEE6E1200EE6EEE6EEE6EEE6EEE6E69 -:101AD0001200D9CFE6FFE1CFD9FF1200EE6AD9504C -:101AE0003F0FE96EDACFEAFF200E12009BDF9ADF8C -:101AF00049EF0DF0E552E7CFD9FF1200E66E000E78 -:101B0000DA20E66E1200EE6E610EEE6E1200720EBC -:0C1B1000EE6E740ED4DF200EEE6E12009C -:041B1C0086EC12F051 -:101B20006A6A686AB9EC12F06D8C6E6A69EC12F040 -:101B30006D9CDF6A9AEC12F010E2DF50040DF3CFD7 -:101B4000E9FFF4CFEAFF000EE926040EEA22EE6A6E -:101B5000EE6AEE6AEE6ADF2AEDD7160E706E68A6A0 -:101B600004D0030E2FEC12F0FAD70001736B786BE0 -:101B7000796B7A6B6D98080E6B6F040E6C6F616BEE -:101B8000606BE55244EF12F086EC12F000016051F8 -:101B90000BE16D6A696AB9EC12F06DB602D06D8620 -:101BA000FCD70001010E606F600508E16DBA06D038 -:101BB000686A696A69806988020E606F6850040B00 -:101BC00007E06950040B04E0020E2FEC12F089D8F4 -:101BD0006DB247D06850010B14E06950010B11E061 -:101BE0009DDF0001040E606F0401200E026F040EE1 -:101BF000036F080E016F006B8C0E0013E66AF8ECA1 -:101C000012F06850100B07E06950100B04E060D828 -:101C1000040E2FEC12F06850400B0BE06950400BA3 -:101C200008E0C0EC12F0020E37EC12F0060E2FECBA -:101C300012F06850200B04E06950200B01E035D809 -:101C40006850020B0AE06950020B07E0C0EC12F08A -:101C5000E668E66818EC13F06A6A040E0001605D3D -:101C600002E2A19A1FD069A61CD0DF6A040EDF5CD5 -:101C700018E268A616D06CCF80F0030E2FEC12F09D -:101C8000780E0001801502E138D809D0000EE66E0A -:101C9000E66A800EE66E000EE66E010EE8DBDF2AD5 -:101CA000E5D7A19AE55244EF12F070A00ED052ECA5 -:101CB00012F0EF50800808E1D5DBEF50840804E112 -:101CC00052EC12F08C0EEF6E7090050E2FEF12F0AA -:101CD0006984040EC4DB6D8272EC12F0040E37EFDF -:101CE00012F072EC12F0030EC2DB6D92699468A4DC -:101CF00003D0020EB4DBFBD7120086EC12F0FD0E0F -:101D0000000180153DE17E0E8015E8407F0B040D3B -:101D1000F3CF63F0F4CF64F0000E6327040E642366 -:101D200063C065F064C066F06575BCDBEF503C0BCA -:101D3000E842E8420D0822E1B5DBEFEC12F0EECF0D -:101D400000F0EFCF01F0280E001816E1040E011884 -:101D500013E129EC13F0DF6AEDDB0EE2DF50A2ECB9 -:101D600012F0DF50EA6A200FE96E040EEA22E55213 -:101D7000E750EF6EDF2AF0D70AD807D01AD805D07F -:101D8000FD0E8015040801E122D8E5527DD36ADBFF -:101D9000EF50800B02E066DBEF6A00016F6B706B47 -:101DA000746B756B736B64D89DDB170E60DB6DEF26 -:101DB00010F0020E0001705D02E1FAEF10F034D86D -:101DC0000001815102E1F4EF12F0816B12009EDB01 -:101DD00049DBEF50400B01E0010EDF6E00016B7537 -:101DE000080E605D09E122C46EFF6E50000802E239 -:101DF000100E01D0040E606F700513E12DEC13F08E -:101E0000A6D9020E00016F5D03E12CDB840E07D022 -:101E1000DF5003E127DBC80E02D024DB880EEF6E13 -:101E200001D002D8E55230D32BDB0001706B1ADBF6 -:101E3000EF6A040E6B19006E6CC001F0DE6E6CC0B0 -:101E4000DDFF19DBEF6A78AF0CD07B517C1107E026 -:101E500005D07CC0FAFF00017B51F96EFADF00016A -:101E6000789F020EE15C02E2E16AE552E16E0CD37A -:101E700004012051600BE842E842E842E842E842AF -:101E8000000901E0120021510C0A45E00B0A3FE075 -:101E90000C0A31E0010A22E00B0A1EE0020A1CE0F3 -:101EA000030A18E0080A10E0010A0CE00F0A08E033 -:101EB000030A01E012000001738F080E606F120028 -:101EC000EDEF0FF056EF11F00001610E716F000E93 -:101ED000726F0CD02EEF10F08CEF0FF02451000138 -:101EE000716F726B620E7127000E72237381010E87 -:101EF000746F738F12000001738F04012451EA6A1A -:101F0000620FE96E000EEA2222C4EFFF1200EADA45 -:101F1000160E37EF12F012007EDB040EE1260401EC -:101F2000220510E120511F0B00090CE10001738F05 -:101F3000030E0401215D04E10001010E7F6F02D058 -:101F400000017F6B0401225141E120511F0B020867 -:101F50003DE124510F0B000939E00001738F0401AA -:101F600024BF05D0A4DA670EE926000E04D09FDA5C -:101F70006B0EE926000ED2DA030E215D03E17BDA57 -:101F8000840E23D024510F0B016A700F006E0F0EC8 -:101F90000122020E00C0DBFF030E01C0DBFF020EB8 -:101FA000DBCFE9FF030EDBCFEAFFEE90ED5224AF6B -:101FB00006D061DAEF6ADF745EDA400E06D05BDAD3 -:101FC000880EEF6EDF7457DAC80EEF6E040EE15C18 -:101FD00002E2E16AE552E16E57D2800E0401205D13 -:101FE0003CE10001C00E736F04012351030A1EE09F -:101FF000010A09E0030A2FE10001440E716F380E57 -:10200000726F120E22D0C3DAEC0EF626380EA2DA68 -:10201000020E0001F76A7125F66E7251F72209006F -:10202000F5CF74F00A00F5CF75F01200030E225DB3 -:102030000FE2ADDAEE0EF626380E8CDA71C0F6FF3E -:1020400072C0F7FF0800F5500001746F756B120045 -:102050000001736B12000001736B120011DA0401AE -:10206000286B296B20511F0B020A11E0030A0CE0B8 -:10207000010A22E10001738F0401288100017F051C -:102080001BE10401288318D00001738F15D00001D3 -:10209000738F040124BF05D00ADA670EE926000E0B -:1020A00004D005DA6B0EE926000E38DAE4D9EF50D9 -:1020B000040B02E0010E286F000173AF07D0280E59 -:1020C000716F040E726F7381020E746F020EE15C09 -:1020D00002E2E16AE552E16ED7D16D98000173BF6B -:1020E00008D078AF02D061DA2AD07EDABBD9840E6C -:1020F00027D078BF2BD0040120AF24D00001745129 -:102100000401265D000175510401275904E226C42B -:1021100074F027C475F01BD80001010E706FA1DAAE -:10212000800EEF6E816BBED9EE52080EEF6E91DA23 -:10213000B9D9840EEF6E010E816F8FDA93D9C80E74 -:10214000EF6E1200000131DAC80EEF6E120098D95E -:102150000001080E745D000E75590DE274C0DEFFBB -:1021600075C0DDFF6F5102E1010E03D06F0506E17E -:10217000020E6F6F03D0080EDE6EDD6A73D9EF9228 -:1021800071D9EF906FD9010EDB50EF126BD9EE527F -:10219000DFCFEFFF000EDB50745F010EDB50755B8D -:1021A000280E7D6F040E7E6F73B10FD0F7D91BE040 -:1021B00071C0F6FF72C0F7FF712B000E722308008A -:1021C000F55096D9F3E2DB06F1D7E8D90CE071C0FF -:1021D000E9FF72C0EAFF712B000E7223EF5088D91D -:1021E000F4E2DB06F2D7020EE15C02E2E16AE552BC -:1021F000E16E4AD145D956D9EE52EFCFDFFFDFCF9E -:1022000000F000500001795D000E7A5903E279C0B8 -:10221000DFFF09D0DF50006E016AE850795D796F09 -:1022200001507A597A6F010EDB6ADF50F36E010EAE -:10223000DBCFF4FFF350F45C10E2010EDB5082D9E7 -:1022400076C0E9FF77C0EAFF762B000E7723E552D0 -:10225000E750EF6E010EDB2AE8D7000ED8807955E3 -:10226000000E7A550DE2F4D854D91CD9EF50400B2A -:1022700003E1EAD9C80E02D0E7D9880EEF6E0FD07D -:10228000F0D9840EEF6E7B517C1107E005D07CC045 -:10229000FAFF00017B51F96EFADF0001789F020E10 -:1022A000E15C02E2E16AE552E16EEED00001738F7B -:1022B00010D9010EE66EE66AE66A620EE66E000E60 -:1022C000AFD922C461F00401225104E10001100ED3 -:1022D000606F12000001200E606F04D9150E37EFF9 -:1022E00012F0CED8000EDE6E040EDD6EE8D8040DBE -:1022F000F350006E016A020E0F0B05E0D890013218 -:102300000032E806FBE1D89000360136D89000365E -:102310000136D9CFE9FFDACFEAFF0050EE260150AF -:10232000ED22A9D8EF9EFD0EDB5002E16AD901D063 -:102330006DD9EA22DECFEEFFDDCFEDFF9CD8EF9C1A -:102340009AD8040EE926000EEA22EF8C020EE15C18 -:1023500002E2E16AE552E16E97D092D8FE0EDB50C0 -:10236000016A700F006E0F0EDFD885D8FD0EDBCF2F -:10237000EFFFDBA402D0E66AF5D8FD0EDBA203D0A6 -:10238000010EE66EEFD8020EE15C02E2E16AE55270 -:10239000E16E7AD075D8FE0EDB5005E125D962D802 -:1023A000840EEF6E05D08BD80CD989D8010F09D9CE -:1023B000020EE15C02E2E16AE552E16E65D060D8AE -:1023C000FD0EDB5002E022D901D01BD9A7D853D88B -:1023D00006D9FB0EDBCFEEFFFC0EDBCFEDFF4BD8BB -:1023E000EE52FA0EDBCFEFFF400E45D8E850EF1665 -:1023F000880E41D8E850EF12FD0EDB5002E006D9FE -:1024000001D0FFD8EA22EF74DECF00F0DDCF01F07B -:1024100000C0F3FF01C0F4FF020EE15C02E2E16ADA -:10242000E552E16E31D0F7D8010EF36EFC0EDB50B1 -:1024300004E0D890F336E806FCE1F31C006EFD0ED4 -:10244000DBCFE9FFFE0EDBCFEAFF0050EF161CD01A -:10245000FBD8EE52080EEF6EF7D8EFEF12F0E66EF3 -:10246000F8EF12F06BC0E9FF6CC0EAFF1200E66EF5 -:10247000E66A18EF13F0DECFE9FFDDCFEAFF1200C6 -:10248000CAD8020EE1261200E552E7CFD9FF1200AA -:10249000D6D824EF13F0FE0EEA6ADB34FE0BEA36E0 -:1024A000E96E120063C0E9FF64C0EAFF1200245124 -:1024B0000F0BE96EEA6AD890E936EA361200FD0E93 -:1024C000DB50E824026EFE0EDB50040DF3500224B4 -:1024D0001200000EE66EE66AE66A710EE66E0F0EF8 -:1024E00010EF13F0000EE66EE66AE66EE66A120082 -:1024F000E66E7DC0E9FF7EC0EAFF7D2B000E7E23E5 -:10250000E552E750EF6EDF06010E120084D8E65266 -:102510001200280EEE6E040EED6E1200EA22EECFCF -:10252000DEFFEDCFDDFF1200012200C0DEFF01C0A3 -:10253000DDFF1200DF50006E016A080E005C000E25 -:1025400001581200EA6A280FE96E040EEA22EF50E1 -:10255000E66E1200F7220900F5CF71F00A00F5CF00 -:1025600072F01200FE0EDBCFE6FFBBDEE552E55255 -:102570001200160E6F6E9F0E6B6E7B0E696E120050 -:10258000010EE66EE66A000EE66EE66A1200225161 -:10259000F66EF76AD890F636F7361200D9CFE9FF13 -:1025A000DACFEAFFEE50ED101200020E706F5ADF24 -:1025B000EE52EF6A57DFC80EEF6E4ADFAADF24EF54 -:1025C00013F0040DF3CF00F0F4CF01F0000E00265D -:1025D000040EAADF840E4FDFE850EF121200020E45 -:1025E000E926000EEA2212003CD88C0EEF6E120093 -:1025F000680EE66E0F0EE66E16DFE552E552E55206 -:10260000120049DF670EE926000E120044DF6B0E50 -:10261000E926000E1200D9CFE6FFE1CFD9FF120064 -:10262000E66E49EC1DF0006E050EE15E00501200F2 -:102630005AEC0CF0006E060EE15E00501200200E07 -:10264000EE6E040EED6E120065C0E9FF66C0EAFF93 -:10265000120028DFC4DF1FEF13F004DFC0DF89EFB3 -:0826600012F0F6DE48EF12F063 -:08266800959A838A190EDBEF3D -:1026700015F0CFDA030EE126ACA2FED72BEC1EF04C -:10268000DF6E0001A85104E1865102E1010EA96F3D -:10269000A90558E1A851A8DADFCFEFFF020EA85D27 -:1026A00008E2FF0EDF5C05E0050EABDA0001A96B66 -:1026B000A86B030EA85D04E1030EDF240001CA6FBE -:1026C000030E0001A85D3DE30001CA510001A85DB1 -:1026D00038E1010EDB6A020EDB6E0001CA51F36EB7 -:1026E000020EDBCFF4FFF350F45C0EE2020EDB507F -:1026F0007BDA010EDBCFE7FFEF50E726010EE7CFD5 -:10270000DBFF020EDB2AE9D7CA516EDAEFCF00F009 -:10271000010EDB1C005C05E0070E73DA0001866B1E -:102720000DD000018B5102E0060E6BDA8BC0E6FF84 -:1027300010EC1FF0E5520001010E866FA96BA86B2B -:1027400001D0A82B030EE15C02E2E16AE552E16EE2 -:1027500024D25FDA220EE126010EDB68020EDB686E -:10276000FE0EDB50E76E030EE7CFDBFFFC0EDB5007 -:10277000020FE76E040EE7CFDBFFFD0EDB50E76EC6 -:10278000050EE7CFDBFFDF6AFC0EDB50DF5C13E2F8 -:10279000DF50EA6AAA0FE96E000EEA22EF50E66EF9 -:1027A000D950010F006E050EDF2410DAE552E75014 -:1027B000EF6EDF2AE9D7210EDB6A020EDF6EFC0E18 -:1027C000DB50050FDF5C0FE2D950010F006EDF50C8 -:1027D000FDD9210EDBCFE7FFEF50E726210EE7CF33 -:1027E000DBFFDF2AECD7210EDB1CE66ED950010F90 -:1027F000006EFC0EDB50050FE9D9E552E750EF6E95 -:10280000839ADF6AFC0EDB50060FDF5C11E2ACA29C -:10281000FED7D950010F006EDACF01F0DF500F0163 -:10282000D5D9EF50E66E5AEC1FF0E552DF2AEAD711 -:10283000ACA2FED7838A0001866B220EE15C02E225 -:10284000E16AE552E16EA9D1000186511200000152 -:10285000A751120000018651FDE01200DAD9FE0EE8 -:10286000DB50EA6AAA0FE96E000EEA22FD0EDBCF0A -:10287000EFFF93D1CED9020E9ED9A4D9A3D988D97E -:1028800087D9190E98D984D983D987D10001865167 -:1028900002E08B511200000CD9CFE6FFE1CFD9FF47 -:1028A000020EE126E66A010EE66EFE0EDBCFE6FFC3 -:1028B00050DFE552E552E552DE6ADD6ADECF00F018 -:1028C000DDCF01F0FC0EDBCF02F0FD0EDBCF03F01D -:1028D0000250005C0350015818E20001865104E0E8 -:1028E0000001A76B010E16D00000000000000000E0 -:1028F00000000000000000000000000000000000D8 -:10290000DF2A010E01E3DB2AD9D70001010EA76FF0 -:10291000000E00D0006E020EE15C02E2E16AE552B8 -:10292000E16E0050E552E7CFD9FF120072D9E66A96 -:10293000060E19D932D135D9030E15D92ED119D990 -:1029400082D902E2E16AE552E16E27D1D9CFE6FFF2 -:10295000E1CFD9FF020EE126FD0EDBCFE6FFE66AEE -:102960007DDFE552E552010EE66E010EE66E76DF82 -:10297000E552E552020EE66E020EE66EFE0EDBCF6B -:10298000E6FFE7DEE552E552E552DE6ADD6ADECFBC -:1029900000F0DDCF01F00A0E2A6E2B6AFB0EDBCFB2 -:1029A0002FF0FC0EDBCF30F0B4EC17F028C002F0B3 -:1029B00029C003F00250005C0350015819E20001E5 -:1029C000865105E00001A76B00018C5116D0000074 -:1029D00000000000000000000000000000000000F7 -:1029E000000000000000DF2A010E01E3DB2ACFD740 -:1029F0000001010EA76F000E00D0006E020EE15C18 -:102A000002E2E16AE552E16E0050E552E7CFD9FFFC -:102A10001200D9CFE6FFE1CFD9FF040EE126FD0E6B -:102A2000DBCFE6FFE66A1ADFE552E552020EE66EFC -:102A3000010EE66E13DFE552E552020EE66E020E5F -:102A4000E66EFE0EDBCFE6FF84DEE552E552E55290 -:102A5000DE6ADD6ADECF00F0DDCF01F00A0E2A6EFD -:102A60002B6AFB0EDBCF2FF0FC0EDBCF30F0B4EC8B -:102A700017F028C002F029C003F00250005C035098 -:102A8000015827E20001865113E00001A76B030EF5 -:102A90008DC0DBFF020E8CC0DBFF020EDBCF00F02F -:102AA000030EDBCF01F000C0F3FF01C0F4FF17D02D -:102AB0000000000000000000000000000000000016 -:102AC0000000000000000000DF2A010E01E3DB2A05 -:102AD000C1D70001010EA76FF36AF46A00D0040E9B -:102AE000E15C02E2E16AE552E16EE552E7CFD9FF2F -:102AF000120057D8040E37D850D03BD8040EA3D8B4 -:102B000002E2E16AE552E16E48D083D8E66A050E3A -:102B10002AD843D07ED8020EE1261E0EE66EE66A63 -:102B20009ED8FC0E67D893D8FA0E64D8030E6ED8E0 -:102B3000010EDBCFE6FF040E69D8F90EDB5004E18D -:102B4000050EE66E030E03D0050EE66E040E7BD86E -:102B500002E2E16AE552E16E20D03ED8240E5ED05A -:102B60003BD8260E5BD0E66EFE0EDBCFE6FFF1DD36 -:102B70007AD04FD8020EE126FB0EDBCFDEFFDBCF93 -:102B8000DDFF5BD8DFCFE6FF62D8030EE66E1200F2 -:102B9000FE0EDBCFE6FF030E4BD0E552E7CFD9FFA9 -:102BA000120037D84AD8FC0EDBCFE6FF010E2ED834 -:102BB000020EE66E1200E66EE66A7C0EE66EC9EC68 -:102BC0001CF051D0100EE66E040E32D00024E96ED7 -:102BD000000EDA20EA6E12001CD8FC0EDBCFE6FFF6 -:102BE000FD0EDBCFE6FF1200EA6A870FE96E000EEA -:102BF000EA221200DBCFDEFFDBCFDDFFDFCFE6FF17 -:102C00001200E66E10EC1FF0E5521200E66E2FEF98 -:102C100016F0D9CFE6FFE1CFD9FF1200E66EFE0E27 -:102C2000DBCFE6FFF6DEE552E552E552E552B5D7D9 -:102C3000E66EFE0EE66E7FDE16D0FD0EDBCFE6FF03 -:102C4000E66A2FEF16F08FDF020EE15C1200010E34 -:102C5000DDDF010EDBCFE6FF020E06EF16F0FEDD34 -:0E2C6000E552E5521200E552E552E55212002F -:022C6E00239EA3 -:102C700005D0239E2BAE02D02B6C238E2BC025F0CB -:102C8000246A356A346A860E266E276A1DEF18F0AC -:102C9000239E08D0239E2BAE05D02A6C2B1EE86AFB -:102CA0002B22238E2BC025F02AC024F0356A346AEB -:102CB0008E0E266E276A1DEF18F0317E236A59ECBE -:102CC00018F071EC18F023B601EF18F023A20AD027 -:102CD00023AA03D023BE01EF18F023A40DEF18F0B0 -:102CE0000AEF18F023AA05D023AC0DEF18F00AEF75 -:102CF00018F023A00AD023A808D023BE04D023A410 -:102D000002D016EF18F01AEF18F0346A276A315023 -:102D10002C5C336E10E329C035F02AC024F02BC0A0 -:102D200025F02CC032F02EC029F02FC02AF030C080 -:102D30002BF0233A09D02EC035F02FC024F030C03C -:102D400025F031C032F0336C239E23BC238E32C079 -:102D500026F023B049EF18F01A0E336049EF18F04F -:102D6000266A2C6A23A408D0296C2A1E2B1E2C1E2E -:102D7000E86A2A222B222C2223AC08D0356C241E90 -:102D8000251E261EE86A242225222622286A33527E -:102D900007E02C342B322A3229322832332EF9D74D -:102DA000295035262A5024222B5025222C50262209 -:102DB00028C034F0239E26AE0BD0346C351E241E62 -:102DC000251E261EE86A3522242225222622238E4D -:102DD00026A006D0D8802532243235323432322A29 -:102DE00032C026F01DEF18F0236A59EC18F071EC90 -:102DF00018F023B601EF18F023A205D023BA01EF93 -:102E000018F008EF18F023BA14EF18F023A005D03B -:102E100023B801EF18F014EF18F023B808EF18F0FA -:102E2000276A7F0E2C24266EE86A27223150265E00 -:102E3000E86A275A1A0E326E2C6A346A356A246A96 -:102E4000256A2E50295E2F502A5A30502B5A000ED8 -:102E50002C5A09E72E5029262F502A2230502B2297 -:102E6000000E2C2201D0348AD89029362A362B36EF -:102E70002C36D8903436353624362536322EE1D7E6 -:102E80002B502A102910D8A4348A1DEF18F0236A79 -:102E900059EC18F071EC18F023B601EF18F023A2EA -:102EA00005D023B801EF18F008EF18F023AA05D0D9 -:102EB00023B001EF18F008EF18F023B002D023A8D8 -:102EC00002D014EF18F0276A31502C24266EE86ADD -:102ED00027227E0E265EE86A275A346A356A246AFB -:102EE000256A30502B02F4CF25F0F3CF24F02F5079 -:102EF0002B02F3503526F4502422000E25223050A8 -:102F00002A02F3503526F4502422000E25222E509A -:102F10002B02F3503426F4503522000E24222522B1 -:102F20002F502A02F3503426F4503522000E24226A -:102F3000252230502902F3503426F4503522000E59 -:102F4000242225222E502A02F4503426000E352247 -:102F5000242225222F502902F4503426000E352237 -:102F6000242225221DEF18F02AC034F02A502F0207 -:102F7000F4CF29F0F3CF28F02B503002F4CF2BF010 -:102F8000F3CF2AF02F02F3502926F4502A22E86AC0 -:102F90002B2234503002F3502926F4502A22E86ABA -:102FA0002B22000C236A59EC18F023B6DCEF17F043 -:102FB00023A20ED023B405D07F0E2B6EFF0E2A6EF7 -:102FC0001FD0800E2B6E2A6A1BD02B6A2A6A18D05B -:102FD00023B0FBD78F0E2C60EDD77E0E2C64F5D777 -:102FE0008E0E2C5C05E0D8902B322A322C2AF8D792 -:102FF00023A406D02A6C2B1EE86A2B222BAEE5D721 -:1030000012007F0E2C6EFF0E2B6E2A6E296E1200A0 -:103010007F0E23BEFF0E2C6E02D07F0E2C6E800E14 -:103020002B6E2A6A296AF3D723AE04D0800E2C6E49 -:103030002B6AF7D72C6A2B6AF4D725502410351049 -:103040003410F8E027BEF0D725BE0CD0265027104C -:10305000EBE0D89034363536243625362606D8A00F -:103060002706F2D72750D4E12628D2E034AE11D07B -:103070007F0E341402E135A00CD0352AE86A2422F0 -:10308000252207E3D880253224323532262A262805 -:10309000BFE02650C9E035C029F024C02AF025340D -:1030A0002B6E26302C6E2B322C9E23BE2C8E07EFDF -:1030B00018F02B362C3602E32384237E06E123808E -:1030C0002C6A2B6A2A6A296A12002C2803E0D8800D -:1030D0002B321200D8902B3202E123821200238679 -:1030E00012003036313602E3238C237E06E123883A -:1030F000316A306A2F6A2E6A1200312803E0D880C4 -:0E31000030321200D8903032EAE1238A1200F9 -:02310E008394A8 -:103110008396839880928292050E0101105D0EE2E3 -:10312000010E10C1E7FFE75204E0E846FE0BE70698 -:10313000FCE101010F1502E1102BEED7050E105D29 -:1031400060E21051040A10E0070A0CE0010A08E0EE -:10315000030A04E0010A09E1838407D0838605D0CD -:10316000838803D0808201D082821051D9D8EFCFDA -:1031700002F0036A02BE03680A0E2A6E2B6A02C0BE -:103180002FF003C030F0B4EC17F028C... [truncated message content] |
From: Olivier B. <Ba...@us...> - 2010-05-04 19:33:46
|
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "krobot". The branch, master has been updated via bd6878291dc5c6c07da358ead8d20c1ab939b870 (commit) from 7df7531102e874356a44f95e5182d05061e28bb8 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit bd6878291dc5c6c07da358ead8d20c1ab939b870 Author: unknown <Olivier@.(none)> Date: Tue May 4 21:33:23 2010 +0200 Bug fix on buzzer ----------------------------------------------------------------------- Changes: diff --git a/elec/boards/Monitoring_Battery/Firmware/main.c b/elec/boards/Monitoring_Battery/Firmware/main.c index e4e5270..250c26c 100644 --- a/elec/boards/Monitoring_Battery/Firmware/main.c +++ b/elec/boards/Monitoring_Battery/Firmware/main.c @@ -239,6 +239,8 @@ char ResetSource(void); if (buzzer_on) interruptBuzzer(); + else + BUZZER = 0; // On rtorise l'interruption PIR1bits.TMR1IF = 0; diff --git a/elec/boards/Monitoring_Battery/Firmware/output/Battery_Monitoring.cof b/elec/boards/Monitoring_Battery/Firmware/output/Battery_Monitoring.cof index 137a5dd..35accfe 100644 Binary files a/elec/boards/Monitoring_Battery/Firmware/output/Battery_Monitoring.cof and b/elec/boards/Monitoring_Battery/Firmware/output/Battery_Monitoring.cof differ diff --git a/elec/boards/Monitoring_Battery/Firmware/output/Battery_Monitoring.hex b/elec/boards/Monitoring_Battery/Firmware/output/Battery_Monitoring.hex index 1b99fe8..ccc23e2 100644 --- a/elec/boards/Monitoring_Battery/Firmware/output/Battery_Monitoring.hex +++ b/elec/boards/Monitoring_Battery/Firmware/output/Battery_Monitoring.hex @@ -1,13 +1,13 @@ :020000040000FA -:06000000D6EF14F012001F +:06000000D8EF14F012001D :0600080004EF04F01200F9 :060018000CEF04F01200E1 -:06080000D6EF14F0120017 +:06080000D8EF14F0120015 :06080800D5EF09F012001B -:0608180042EF0AF012009D -:06082A000300312A00006A -:100830008600000021000000202A0000BD0000000A -:10084000110000000A2A0000A700000016000000A6 +:0608180044EF0AF012009B +:06082A000300352A000066 +:100830008600000021000000242A0000BD00000006 +:10084000110000000E2A0000A700000016000000A2 :1008500027EC09F06A6A686A5AEC09F06D8C6E6AD6 :100860000AEC09F06D9CDF6A3BEC09F010E2DF5006 :10087000040DF3CFE9FFF4CFEAFF000EE926040EE2 @@ -86,11 +86,11 @@ :100D00005BDA880EEF6EDF7457DAC80EEF6E040EF2 :100D1000E15C02E2E16AE552E16E57D2800E040125 :100D2000205D3CE10001C00E736F04012351030AF2 -:100D30001EE0010A09E0030A2FE10001C60E716FEF -:100D4000250E726F120E22D0C3DA740EF626260E0E +:100D30001EE0010A09E0030A2FE10001CA0E716FEB +:100D4000250E726F120E22D0C3DA780EF626260E0A :100D5000A2DA020E0001F76A7125F66E7251F722CF :100D60000900F5CF74F00A00F5CF75F01200030EFC -:100D7000225D0FE2ADDA760EF626260E8CDA71C011 +:100D7000225D0FE2ADDA7A0EF626260E8CDA71C00D :100D8000F6FF72C0F7FF0800F5500001746F756B35 :100D900012000001736B12000001736B120011DA74 :100DA0000401286B296B20511F0B020A11E0030A72 @@ -185,8 +185,8 @@ :101330001200680EE66E0F0EE66E16DFE552E552FD :10134000E552120049DF670EE926000E120044DF65 :101350006B0EE926000E1200D9CFE6FFE1CFD9FFD0 -:101360001200E66EC4EC13F0146E050EE15E14502C -:101370001200EBEC0DF0146E060EE15E145012003C +:101360001200E66EC6EC13F0146E050EE15E14502A +:101370001200EDEC0DF0146E060EE15E145012003A :10138000200EEE6E040EED6E120065C0E9FF66C021 :10139000EAFF120028DFC4DFC0EF09F004DFC0DF7E :0A13A0002AEF09F0F6DEE9EF08F08D @@ -195,382 +195,384 @@ :1013C000E4FFF5CFE4FFF3CFE4FFF4CFE4FFFACF7F :1013D000E4FF00EE00F0140EE80403E3EECFE4FFB8 :1013E000FBD700EE14F0140EE80403E3EECFE4FFA5 -:1013F000FBD75FEC0EF09EA018D069EC0EF00A0E41 +:1013F000FBD761EC0EF09EA01AD06BEC0EF00A0E3B :101400000001C327000EC423E80EC35D030EC459B8 -:1014100005E3C36BC46BC52B000EC6230CEC11F0A7 -:101420000001C75101E050DB9E9072EC0EF002E229 -:10143000E16AE552E16EE552E7CFD9FFE55200EEF1 -:1014400027F0140EE80403E3E5CFEDFFFBD700EE31 -:1014500013F0140EE80403E3E5CFEDFFFBD7E5CF6F -:10146000FAFFE5CFF4FFE5CFF3FFE5CFF5FFE5CFDA -:10147000F7FFE5CFF6FFE5CFEAFFE5CFE9FFE5CFE0 -:10148000DAFF1100D8CFE4FFE0CFE4FFE46EDACF5B -:10149000E4FFE2CFDAFFF3CFE4FFF4CFE4FF5FEC49 -:1014A0000EF072EC0EF002E2E16AE552E16EE552F6 -:1014B000E7CFD9FFE552E5CFF4FFE5CFF3FFE5CF66 -:1014C000DAFFE550E5CFE0FFE5CFD8FF100004D804 -:1014D0005EEC04F04BD8FCD70F0EC112958602D8F3 -:1014E00028EF04F082EC0EF0E652C0DB0001D86F6A -:1014F000070ED85D10E1E66A1AEC14F0E552DF6ED3 -:10150000000EDF807AEC0EF0E66ABFEC14F0E552D4 -:10151000DF707AEC0EF0D08EF28EF28C9D80F50E9C -:10152000E66E30EC14F0E552D4DBFC0E8B1694160C -:101530000001BD6BBE6BBF6BC06B010EC16F61EC78 -:1015400011F0010EE66E1AEC14F0E552010B0001E9 -:10155000C76FC75105E08284E66ABFEC14F0E5521C -:101560008294E552E552E7CFD9FF1200D9CFE6FFCA -:10157000E1CFD9FF090EE1260001C15101E0BBDA3C -:10158000200E0001605D03E36D50020B01E092D27A -:101590000001BF51C01102E1000E08D0BFC0E9FF39 -:1015A000C0C0EAFFEF50800B01E0010E000947E1E7 -:1015B0000001A651EA6A860FE96E000EEA22EF509A -:1015C00000083DE20501406B0001C251C22B05013C -:1015D000416F0501040E426F0001A651EA6A860FB1 -:1015E000E96E000EEA22EFCF43F5400EE66E400EA4 -:1015F000E66E050EE66E010EE66E010EE66E80ECFE -:1016000008F0146E050EE15E1450F3CFBFF0F4CF76 -:10161000C0F00001A651EA6A860FE96E000EEA22C8 -:10162000EF6A0001A651000803E20001A60707D0F7 -:101630000001A551000803E200011F0EA66F000182 -:10164000BD51BE1102E1000E08D0BDC0E9FFBEC011 -:10165000EAFFEF50800B01E0010E000901E02AD201 -:1016600005010251060A01E164D1040A17E0030AE8 -:1016700005E0010A01E0DDD1FF001CD2E66A1AECA8 -:1016800014F0E552DF6E000EDB80DFCFE6FFE66A86 -:10169000FAEC13F0E552E552FF000CD20001BF5105 -:1016A000C01102E1000E08D0BFC0E9FFC0C0EAFFD0 -:1016B000EF50800B01E0010E000901E039D100C5B7 -:1016C00040F50501416B0501030E426F0501436BB7 -:1016D000050108510E0A01E1FCD0030A01E1F4D032 -:1016E000010A01E1D6D0070A01E17ED00F0A71E0BC -:1016F000070A64E0010A20E0030A06E0010A01E0AB -:10170000EDD0D8C048F5EDD00501486BB90E146E88 -:10171000280E156E166A14C0E6FF15C0E6FF16C047 -:10172000E6FF480EE66E050EE66EDEEC13F0176E71 -:10173000050EE15E1750D5D00501486BAD0E146E55 -:10174000280E156E166A14C0E6FF15C0E6FF16C017 -:10175000E6FF480EE66E050EE66EDEEC13F0176E41 -:10176000050EE15E1750AB0E146E280E156E166A4C -:1017700014C0E6FF15C0E6FF16C0E6FF480EE66E91 -:10178000050EE66EDEEC13F0176E050EE15E1750E7 -:10179000A20E146E280E156E166A14C0E6FF15C050 -:1017A000E6FF16C0E6FF480EE66E050EE66EDEECBE -:1017B00013F0176E050EE15E175093D092CF48F5E7 -:1017C00093CF49F594CF4AF595CF4BF596CF4CF58D -:1017D00088D080CF48F581CF49F582CF4AF583CFB5 -:1017E0004BF584CF4CF57DD0070EDB6A080EDB6A23 -:1017F000070EDBCF14F0080EDBCF15F0D890155094 -:1018000004E6080E145C000E155842E2070EDBCF0A -:10181000E6FF6FEC11F0E552DE52F3CFDEFFF4CFBE -:10182000DDFFDD52020E086E096A070EDBCF0DF0F8 -:10183000080EDBCF0EF0F3EC0FF006C0E9FF07C097 -:10184000EAFF480EE926050EEA22020EDBCFEFFF83 -:10185000020E086E096A070EDBCF0DF0080EDBCF13 -:101860000EF0F3EC0FF006C0E9FF07C0EAFF010E2F -:10187000E926000EEA22480EE926050EEA22010EAC -:10188000DBCFEFFF070EDB2A080E01E3DB2AB0D720 -:1018900028D0A9EC11F0030E06C0DBFF040E07C030 -:1018A000DBFF050E08C0DBFF060E09C0DBFF060EDE -:1018B000DBCF48F5050EDBCF49F5040EDBCF4AF54B -:1018C000030EDBCF4BF50DD0ECEC11F00501486FAA -:1018D00008D0F6EC11F00501486F03D00501020EA7 -:1018E000436F400EE66E400EE66E050EE66E010E8C -:1018F000E66E010EE66E80EC08F0146E050EE15EF9 -:101900001450F3CFBFF0F4CFC0F0400EE66E000EDF -:10191000E66E050EE66EE66A010EE66E80EC08F0F5 -:10192000146E050EE15E1450F3CFBDF0F4CFBEF09F -:10193000C1D005010851060A49E0050A37E0010A4D -:1019400025E0030A13E0010A01E05AD0050109511C -:10195000921205010A51931205010B5194120501CF -:101960000C51951205010D5196124FD00501091D1C -:10197000921605010A1D931605010B1D941605010B -:101980000C1D951605010D1D96163FD00501091D6C -:10199000891605010A1D8A1605010B1D8B16050106 -:1019A0000C1D8C1605010D1D8D162FD0050109513A -:1019B000891205010A518A1205010B518B1205018A -:1019C0000C518C1205010D518D121FD0010EE66EC7 -:1019D0001AEC14F0E552DF6E0501095103E0000E28 -:1019E000DB8001D0DF70DFCFE6FF010EE66EFAECA0 -:1019F00013F0E552E552010EDF140001C76F05D068 -:101A0000030EE66E8CEC14F0E552400EE66E000E0E -:101A1000E66E050EE66EE66A010EE66E80EC08F0F4 -:101A2000146E050EE15E1450F3CFBDF0F4CFBEF09E -:101A300041D00001BF51C01102E1000E08D0BFC06B -:101A4000E9FFC0C0EAFFEF50800B01E0010E000982 -:101A500031E100C540F50501416B0501030E426F00 -:101A60000501010E436F400EE66E400EE66E050E58 -:101A7000E66E010EE66E010EE66E80EC08F0146E66 -:101A8000050EE15E1450F3CFBFF0F4CFC0F0400E6E -:101A9000E66E000EE66E050EE66EE66A010EE66E76 -:101AA00080EC08F0146E050EE15E1450F3CFBDF02B -:101AB000F4CFBEF0090EE15C02E2E16AE552E16EAC -:101AC000E552E7CFD9FF12000001CA51CB110FE157 -:101AD000F6EC11F0010A04E0010A04E1827403D07B -:101AE000828401D08294320E0001CA6FCB6BCA0788 -:101AF000000ECB5B12000001CC51CD1104E1100EA1 -:101B0000CC6F270ECD6FCC07000ECD5B6DA207D03A -:101B1000CC51CD112EE18B728BB213D027D00001A6 -:101B2000605102E18B9222D0600502E18B8209D0E4 -:101B3000020E605D02E18B8219D0040E605D03E14C -:101B40008B928B801200100E605D06E10001CC517B -:101B5000CD110FE18B720AD0200E605D0AE1000109 -:101B6000CC51CD1106E18B728BA202D08B9012006A -:101B70008B80120012001200120012007CEF12F093 -:101B800012001E0EE66E010EE66E4EEC08F0E552F7 -:101B9000E552400EE66E000EE66E050EE66EE66A53 -:101BA000010EE66E80EC08F0146E050EE15E145036 -:101BB000F3CFBDF0F4CFBEF012006D840001080E2B -:101BC000D96F070EDA6FD907000EDA5BD951DA1137 -:101BD000FAE16D941200D9CFE6FFE1CFD9FFFD0EF7 -:101BE000DBCF08F0FE0EDBCF09F0010E081801E193 -:101BF000095033E0E868081802E1E86809182BE0AA -:101C0000030E081801E1095024E0040E081801E150 -:101C100009501DE0020E081801E1095016E0170EE8 -:101C2000081801E109500FE0160E081801E10950EB -:101C300008E0150E081801E1095001E010D0A1DFFD -:101C40000FD09EDF0DD09ADF0BD096DF09D092DF48 -:101C500007D091DF05D091DF03D0000001D000D084 -:101C6000010E00D0E552E7CFD9FF12004BD8E65263 -:101C7000D0B202D0010E15D0D0B802D0020E11D0D1 -:101C8000D0B002D0030E0DD0D0B602D0040E09D0D1 -:101C9000FCAE02D0050E05D0FCAC02D0060E01D081 -:101CA000070EDF6ED088D086D084D082D080FC9E94 -:101CB000FC9CDF50E552E552E7CFD9FF1200E65217 -:101CC00021D8020EE126F350DF6E010EF4CFDBFFC8 -:101CD0001200F00EE66ED80EE66E70EC14F0E552CF -:101CE000E5521200DF50F36E010EDB50F46E020E6F -:101CF000E15C1200DFCFE6FFE66AFAEC13F0E55292 -:0E1D0000E5521200D9CFE6FFE1CFD9FF120065 -:021D0E00019E34 -:101D100008D0019E09AE05D0086C091EE86A0922A8 -:101D2000018E09C003F008C002F0136A126A8E0E19 -:101D3000046E056AA2EF10F0016ADEEC10F0F6EC1A -:101D400010F001B686EF10F001A205D001BA86EFBF -:101D500010F08DEF10F001BA99EF10F001A005D04E -:101D600001B886EF10F099EF10F001B88DEF10F088 -:101D7000056A7F0E0A24046EE86A05220F50045E8D -:101D8000E86A055A1A0E106E0A6A126A136A026A23 -:101D9000036A0C50075E0D50085A0E50095A000E87 -:101DA0000A5A09E70C5007260D5008220E50092246 -:101DB000000E0A2201D0128AD8900736083609365A -:101DC0000A36D8901236133602360336102EE1D773 -:101DD000095008100710D8A4128AA2EF10F0016A67 -:101DE000DEEC10F0F6EC10F001B686EF10F001A278 -:101DF00005D001B886EF10F08DEF10F001AA05D0E4 -:101E000001B086EF10F08DEF10F001B002D001A804 -:101E100002D099EF10F0056A0F500A24046EE86AA8 -:101E200005227E0E045EE86A055A126A136A026A87 -:101E3000036A0E500902F4CF03F0F3CF02F00D5005 -:101E40000902F3501326F4500222000E03220E5012 -:101E50000802F3501326F4500222000E03220C5005 -:101E60000902F3501226F4501322000E022203221C -:101E70000D500802F3501226F4501322000E0222D5 -:101E800003220E500702F3501226F4501322000EC4 -:101E9000022203220C500802F4501226000E1322D4 -:101EA000022203220D500702F4501226000E1322C4 -:101EB00002220322A2EF10F00F7E016ADEEC10F086 -:101EC000F6EC10F001B686EF10F001A20AD001AADC -:101ED00003D001BE86EF10F001A492EF10F08FEF57 -:101EE00010F001AA05D001AC92EF10F08FEF10F0C6 -:101EF00001A00AD001A808D001BE04D001A402D0DC -:101F00009BEF10F09FEF10F0126A056A0F500A5C09 -:101F1000116E10E307C013F008C002F009C003F00F -:101F20000AC010F00CC007F00DC008F00EC009F098 -:101F3000013A09D00CC013F00DC002F00EC003F03E -:101F40000FC010F0116C019E01BC018E10C004F096 -:101F500001B0CEEF10F01A0E1160CEEF10F0046A4F -:101F60000A6A01A408D0076C081E091E0A1EE86A46 -:101F7000082209220A2201AC08D0136C021E031E9B -:101F8000041EE86A022203220422066A115207E0B4 -:101F90000A340932083207320632112EF9D70750B7 -:101FA000132608500222095003220A50042206C0B8 -:101FB00012F0019E04AE0BD0126C131E021E031E03 -:101FC000041EE86A1322022203220422018E04A0C6 -:101FD00006D0D8800332023213321232102A10C0D7 -:101FE00004F0A2EF10F009C013F008C012F008507E -:101FF0000D02F4CF07F0F3CF06F009500E02F4CF34 -:1020000009F0F3CF08F00D02F3500726F450082230 -:10201000E86A092212500E02F3500726F4500822F3 -:10202000E86A09220EAE19EF10F01250085E135044 -:10203000095A13AE000C0D50085E0E50095A000CE0 -:10204000016ADEEC10F001B62AEF10F001A20ED00A -:1020500001B405D07F0E096EFF0E086E1FD0800EF2 -:10206000096E086A1BD0096A086A18D001B0FBD74C -:102070008F0E0A60EDD77E0E0A64F5D78E0E0A5CCD -:1020800005E0D890093208320A2AF8D701A406D010 -:10209000086C091EE86A092209AEE5D71200016A38 -:1020A000DEEC10F001B659EF10F001A20FD001B430 -:1020B00007D07F0E096EFF0E086E076E066E25D0E4 -:1020C000800E096E01D0096A000EF6D701B0FBD769 -:1020D000066A9F0E0A60EBD77E0E0A64F4D79E0E46 -:1020E0000A5C07E0D89009320832073206320A2A21 -:1020F000F6D701A40AD0066C071E081E091EE86A5E -:1021000007220822092209AEDED712007F0E0A6ECE -:10211000FF0E096E086E076E12007F0E01BEFF0EE5 -:102120000A6E02D07F0E0A6E800E096E086A076A78 -:10213000F3D701AE04D0800E0A6E096AF7D70A6A97 -:10214000096AF4D70350021013101210F8E005BE0C -:10215000F0D703BE0CD004500510EBE0D890123637 -:102160001336023603360406D8A00506F2D705500A -:10217000D4E10428D2E012AE11D07F0E121402E195 -:1021800013A00CD0132AE86A0222032207E3D880A6 -:10219000033202321332042A0428BFE00450C9E09B -:1021A00013C007F002C008F00334096E04300A6E51 -:1021B00009320A9E01BE0A8E8CEF10F009360A36EB -:1021C00002E30184017E06E101800A6A096A086A65 -:1021D000076A12000A2803E0D88009321200D8905A -:1021E000093202E101821200018612000E360F361A -:1021F00002E3018C017E06E101880F6A0E6A0D6A16 -:102200000C6A12000F2803E0D8800E321200D8901A -:082210000E32EAE1018A12001E -:082218000001BB51010A32E094 -:10222000010A4DE1BC51090A24E0010A20E00F0A2D -:102230001CE0010A18E0030A14E0010A10E0070A92 -:102240000CE0010A08E0030A04E0010A17E1870E26 -:1022500011D08F0E0FD0970E0DD09F0E0BD0A70E62 -:1022600009D0AF0E07D0B70E05D0BF0E03D0C70EF2 -:1022700001D0CF0EE66EA7EC14F0E5520001010E7E -:10228000BB6F1200FFEC14F000091AE1EFEC14F040 -:10229000F3CF14F0F4CF15F0BCC0E9FFEA6AE9BE51 -:1022A000EA681DD914C0EEFF15C0EDFF090E00014C -:1022B000BC5D02E1BC6B01D0BC2BBB6B1200BB6BE5 -:1022C000120094948294050EE66E7C0EE66EEF0E7C -:1022D000E66E8DEC13F0E552E552E5521200D9CFCF -:1022E000E6FFE1CFD9FFFE0EDBCFE9FFEA6AE9BEE8 -:1022F000EA68F5D8EECF22F0EFCF23F022C008F045 -:1023000023C009F089EC0EF007C01EF008C01FF0D2 -:1023100009C020F00AC021F0D2D807C01AF008C0C6 -:102320001BF009C01CF00AC01DF0C0D807C016F091 -:1023300008C017F009C018F00AC019F0C8D820EC7E -:1023400010F008C0F3FF09C0F4FFE552E7CFD9FF52 -:102350001200B7C008F0B8C009F089EC0EF007C051 -:1023600024F008C025F009C026F00AC027F0A7D83D -:1023700007C020F008C021F009C022F00AC023F0F5 -:1023800095D807C01CF008C01DF009C01EF00AC097 -:102390001FF00C6A0D6A200E0E6E400E0F6E5CEC84 -:1023A0000FF007C018F008C019F009C01AF00AC0F1 -:1023B0001BF08DD807C014F008C015F009C016F046 -:1023C0000AC017F0550E0C6E0D6E0E6E410E0F6E9C -:1023D000EFEC0EF04FEF10F00001BA3504E2B95106 -:1023E0009008010EBA5501E3000C010CD9CFE6FFAD -:1023F000E1CFD9FF050EE126030E79D8DE6ADD6A4A -:10240000DECF14F0DDCF15F0D890155004E6080E9D -:10241000145C000E155833E2DFCFE6FF60DFE552B3 -:10242000020EF3CFDBFF030EF4CFDBFF36D804E65A -:10243000E40E145C0C0E155806E2040EDB50020884 -:1024400002E2020E54D829D804E6F00E145C0A0EFB -:10245000155806E2040EDB50010802E2010E47D8CF -:102460001CD804E6640E145C000E155803E2040E3A -:10247000DB6A05D0DF2A010EC3E3DB2AC1D7040ED5 -:10248000DB50146E050EE15C02E2E16AE552E16E9A -:102490001450E552E7CFD9FF1200020EDBCF14F043 -:1024A000030EDBCF15F0D890155012000C6AC00E49 -:1024B0000D6E7F0E0E6E440E0F6E9CEF0EF00C6ACA -:1024C0000D6AA00E0E6E400E0F6EEFEF0EF00C6A4E -:1024D0000D6A7A0E0E6E440E0F6EEFEF0EF0D8906E -:1024E000E936EA36A70EE926000EEA221200F36E5C -:0824F000040EF3CFDBFF120024 -:0824F800040120511F0B010833 -:1025000001E01200245101E01200060E215D21E1DC -:102510002351230A1BE0010A0CE0030A1AE100011F -:10252000610517E10001EA0E716F250E726F090E49 -:1025300009D0000161050DE10001570E716F260EF3 -:10254000726F1D0E746F756BC00E02D00001800E8D -:10255000736F04012051600BE842E842E842E84210 -:10256000E842010801E0120021510B0A26E0080AA6 -:1025700019E0090A11E0080A05E00B0A23E0080A3D -:1025800021E012000001DB0E716F000E726F010E70 -:10259000746F756BC10E0FD00001800E736F23C472 -:1025A000DBF012000001DC0E716F000E726F010E85 -:1025B000746F756B810E736F12000001800E736F64 -:0625C00022C4DCF0120051 -:0A25C6001201000200000008D80412 -:1025D000050002000102000109022900010100C0FA -:1025E000320904000002030000000921110100016A -:1025F000221D00070581034000010705010340007B -:1026000001040309042C034D006F00620069006C93 -:10261000006500200052006F0062006F007400200F -:102620000050006C006100740066006F0072006D65 -:102630000026034200610074007400650072007996 -:102640000020004D006F006E00690074006F007282 -:102650000069006E0067000600FF0901A101190171 -:102660002940150026FF00750895408100190129B1 -:0C267000409100C0D82501260526312627 -:04267C002A0EF66EBE -:10268000080EF76E000EF86E00010900F550D36FCA -:102690000900F550D46F03E1D36701D03DD00900A4 -:1026A000F550CE6F0900F550CF6F0900F550D06F8F -:1026B00009000900F550E96E0900F550EA6E0900BD -:1026C00009000900F550D16F0900F550D26F0900DB -:1026D0000900F6CFD5F0F7CFD6F0F8CFD7F0CEC0BF -:1026E000F6FFCFC0F7FFD0C0F8FF0001D15302E1E1 -:1026F000D25307E00900F550EE6ED107F8E2D20799 -:10270000F9D7D5C0F6FFD6C0F7FFD7C0F8FF000154 -:0A271000D307000ED45BBFD7120000 -:06271A00D9CFE6FFDACF83 -:10272000E6FFE1CFD9FFE2CFDAFFC26AC06AFC0E52 -:10273000DB407F0B3C0BC26EFB0EDBCFE6FFFC0EDB -:10274000DB38F00B300BE552E710C16EFD0EDB50AD -:10275000040DF350380B156EFD0EDB380F0B070B15 -:10276000146EFD0EDB50800B14101510C06EFC0EA5 -:10277000DBAE03D09E9C9D8CF28CC280E552E5CFEF -:08278000DAFFE7CFD9FF1200D8 -:08278800FE0EE3CFE9FFFF0E96 -:10279000E3CFEAFFE9CFF3FFEACFF4FFFB0EE3500C -:1027A00003E1FC0EE35009E0FB0EE30602E2FC0E3F -:1027B000E306FD0EE350EE6EF1D71200FB0EE3CF01 -:1027C000F6FFFC0EE3CFF7FFFD0EE3CFF8FFFE0EA2 -:1027D000E3CFE9FFFF0EE3CFEAFFE9CFF3FFEACF54 -:1027E000F4FFEE66FED7ED520900F5CFEFFFEE667F -:0427F000FBD7120001 -:0C27F4002DD8FD0EDB50A86EA69EA69C02 -:10280000A684F250800B01E0010E0001DD6FF29E04 -:10281000550EA76EAA0EA76EA682DD51E8B0F28E05 -:10282000E8A0F29EA6B2FED7A198A694E552E7CF03 -:10283000D9FF12000DD8A69EA69CA680020EE66EB9 -:10284000E4EC14F0E552A850E552E7CFD9FF1200AE -:10285000D9CFE6FFE1CFD9FFFE0EDB50A96E120003 -:10286000D9CFE6FFDACFE6FFE1CFD9FFE2CFDAFF3B -:10287000FD0EDB507E0BCD6EFD0EDBAC02D0CD8E9F -:1028800001D0CD9ECF6ACE6A9E90DBAE02D09D80F5 -:1028900001D09D90CD80E552E5CFDAFFE7CFD9FF9B -:0228A000120024 -:0E28A20031393A30363A34310020004D617938 -:1028B00020303420323031300042617474657279D6 -:1028C000204D6F6E69746F72696E6720312E300A09 -:1028D0004F6C697669657220424943484C45520005 -:1028E000D9CFE6FFDACFE6FFE1CFD9FFE2CFDAFFBB -:1028F000E652E652FC0EDBCFDEFFDBCFDDFF010E42 -:10290000DB50CF6EDF50CE6EE552E552E552E5CF9B -:08291000DAFFE7CFD9FF120046 -:08291800D9CFE6FFE1CFD9FFA2 -:1029200000010ED8EF50000803E2A6291F0BA66F86 -:1029300007D8FE0EDBCFEFFFE552E7CFD9FF12003D -:0E294000A651EA6A860FE96E000EEA22120026 -:02294E00D9CFDF -:10295000E6FFDACFE6FFE1CFD9FFE2CFDAFFFD0EE7 -:10296000DB407F0B3C0B146EC30EC2141410C26EFE -:0E297000C282E552E5CFDAFFE7CFD9FF1200B1 -:02297E00FF0E4A -:10298000E350296EEF0E01D0F30EE76EE72EC6EF8F -:1029900014F00C0E286EE76AE72ECCEF14F0282E08 -:0C29A000CBEF14F0292EC4EF14F012004D -:0429AC0013EE00F036 -:1029B00023EE00F0F86A019C3EEC13F004EC15F0F5 -:0829C00067EC0AF0FBD71200DE -:0829C800FF0EE350E84E12007F -:0E29D000000000D000D000D0E82EFAD7120090 -:0229DE00C450E3 -:1029E000176E166AC3501610F36E17C0F4FF12006C -:0E29F00000EE00F00F0EEE6AEA62FDD7120054 -:0229FE00C250C5 -:082A0000020B01E0010E1200BF -:022A08001200BA -:062A0A00000000000000C6 +:1014100005E3C36BC46BC52B000EC6230EEC11F0A5 +:101420000001C75102E052DB01D082949E9074EC1F +:101430000EF002E2E16AE552E16EE552E7CFD9FF34 +:10144000E55200EE27F0140EE80403E3E5CFEDFFCC +:10145000FBD700EE13F0140EE80403E3E5CFEDFF35 +:10146000FBD7E5CFFAFFE5CFF4FFE5CFF3FFE5CFFC +:10147000F5FFE5CFF7FFE5CFF6FFE5CFEAFFE5CFD4 +:10148000E9FFE5CFDAFF1100D8CFE4FFE0CFE4FFBA +:10149000E46EDACFE4FFE2CFDAFFF3CFE4FFF4CF7C +:1014A000E4FF61EC0EF074EC0EF002E2E16AE5524A +:1014B000E16EE552E7CFD9FFE552E5CFF4FFE5CF86 +:1014C000F3FFE5CFDAFFE550E5CFE0FFE5CFD8FF4A +:1014D000100004D85EEC04F04BD8FCD70F0EC112FC +:1014E000958602D828EF04F084EC0EF0E652C0DBBB +:1014F0000001D86F070ED85D10E1E66A1CEC14F00D +:10150000E552DF6E000EDF807CEC0EF0E66AC1EC87 +:1015100014F0E552DF707CEC0EF0D08EF28EF28C7F +:101520009D80F50EE66E32EC14F0E552D4DBFC0E35 +:101530008B1694160001BD6BBE6BBF6BC06B010EAA +:10154000C16F63EC11F0010EE66E1CEC14F0E55275 +:10155000010B0001C76FC75105E08284E66AC1EC48 +:1015600014F0E5528294E552E552E7CFD9FF12001C +:10157000D9CFE6FFE1CFD9FF090EE1260001C15125 +:1015800001E0BBDA200E0001605D03E36D50020B49 +:1015900001E092D20001BF51C01102E1000E08D05B +:1015A000BFC0E9FFC0C0EAFFEF50800B01E0010EB1 +:1015B000000947E10001A651EA6A860FE96E000EB4 +:1015C000EA22EF5000083DE20501406B0001C251E4 +:1015D000C22B0501416F0501040E426F0001A651A7 +:1015E000EA6A860FE96E000EEA22EFCF43F5400E5D +:1015F000E66E400EE66E050EE66E010EE66E010E1C +:10160000E66E80EC08F0146E050EE15E1450F3CF28 +:10161000BFF0F4CFC0F00001A651EA6A860FE96E70 +:10162000000EEA22EF6A0001A651000803E2000161 +:10163000A60707D00001A551000803E200011F0E14 +:10164000A66F0001BD51BE1102E1000E08D0BDC061 +:10165000E9FFBEC0EAFFEF50800B01E0010E000978 +:1016600001E02AD205010251060A01E164D1040A0F +:1016700017E0030A05E0010A01E0DDD1FF001CD2FA +:10168000E66A1CEC14F0E552DF6E000EDB80DFCF63 +:10169000E6FFE66AFCEC13F0E552E552FF000CD2DF +:1016A0000001BF51C01102E1000E08D0BFC0E9FF28 +:1016B000C0C0EAFFEF50800B01E0010E000901E01D +:1016C00039D100C540F50501416B0501030E426F9C +:1016D0000501436B050108510E0A01E1FCD0030A24 +:1016E00001E1F4D0010A01E1D6D0070A01E17ED080 +:1016F0000F0A71E0070A64E0010A20E0030A06E02D +:10170000010A01E0EDD0D8C048F5EDD00501486BE5 +:10171000BD0E146E280E156E166A14C0E6FF15C0B5 +:10172000E6FF16C0E6FF480EE66E050EE66EE0EC3C +:1017300013F0176E050EE15E1750D5D00501486B0A +:10174000B10E146E280E156E166A14C0E6FF15C091 +:10175000E6FF16C0E6FF480EE66E050EE66EE0EC0C +:1017600013F0176E050EE15E1750AF0E146E280EC3 +:10177000156E166A14C0E6FF15C0E6FF16C0E6FF38 +:10178000480EE66E050EE66EE0EC13F0176E050EE1 +:10179000E15E1750A60E146E280E156E166A14C060 +:1017A000E6FF15C0E6FF16C0E6FF480EE66E050E22 +:1017B000E66EE0EC13F0176E050EE15E175093D065 +:1017C00092CF48F593CF49F594CF4AF595CF4BF595 +:1017D00096CF4CF588D080CF48F581CF49F582CFA0 +:1017E0004AF583CF4BF584CF4CF57DD0070EDB6AED +:1017F000080EDB6A070EDBCF14F0080EDBCF15F006 +:10180000D890155004E6080E145C000E155842E2FC +:10181000070EDBCFE6FF71EC11F0E552DE52F3CF9D +:10182000DEFFF4CFDDFFDD52020E086E096A070EFF +:10183000DBCF0DF0080EDBCF0EF0F5EC0FF006C09D +:10184000E9FF07C0EAFF480EE926050EEA22020E6C +:10185000DBCFEFFF020E086E096A070EDBCF0DF03B +:10186000080EDBCF0EF0F5EC0FF006C0E9FF07C065 +:10187000EAFF010EE926000EEA22480EE926050ECF +:10188000EA22010EDBCFEFFF070EDB2A080E01E391 +:10189000DB2AB0D728D0ABEC11F0030E06C0DBFF7B +:1018A000040E07C0DBFF050E08C0DBFF060E09C0F3 +:1018B000DBFF060EDBCF48F5050EDBCF49F5040E46 +:1018C000DBCF4AF5030EDBCF4BF50DD0EEEC11F07C +:1018D0000501486F08D0F8EC11F00501486F03D0FE +:1018E0000501020E436F400EE66E400EE66E050ED9 +:1018F000E66E010EE66E010EE66E80EC08F0146EE8 +:10190000050EE15E1450F3CFBFF0F4CFC0F0400EEF +:10191000E66E000EE66E050EE66EE66A010EE66EF7 +:1019200080EC08F0146E050EE15E1450F3CFBDF0AC +:10193000F4CFBEF0C1D005010851060A49E0050AFE +:1019400037E0010A25E0030A13E0010A01E05AD05A +:1019500005010951921205010A51931205010B511B +:10196000941205010C51951205010D5196124FD09C +:101970000501091D921605010A1D931605010B1D8F +:10198000941605010C1D951605010D1D96163FD0E8 +:101990000501091D891605010A1D8A1605010B1D81 +:1019A0008B1605010C1D8C1605010D1D8D162FD0F3 +:1019B00005010951891205010A518A1205010B51CD +:1019C0008B1205010C518C1205010D518D121FD087 +:1019D000010EE66E1CEC14F0E552DF6E05010951B4 +:1019E00003E0000EDB8001D0DF70DFCFE6FF010EE9 +:1019F000E66EFCEC13F0E552E552010EDF14000137 +:101A0000C76F05D0030EE66E8EEC14F0E552400E63 +:101A1000E66E000EE66E050EE66EE66A010EE66EF6 +:101A200080EC08F0146E050EE15E1450F3CFBDF0AB +:101A3000F4CFBEF041D00001BF51C01102E1000E51 +:101A400008D0BFC0E9FFC0C0EAFFEF50800B01E043 +:101A5000010E000931E100C540F50501416B0501AA +:101A6000030E426F0501010E436F400EE66E400EFD +:101A7000E66E050EE66E010EE66E010EE66E80EC79 +:101A800008F0146E050EE15E1450F3CFBFF0F4CFF2 +:101A9000C0F0400EE66E000EE66E050EE66EE66ADB +:101AA000010EE66E80EC08F0146E050EE15E145037 +:101AB000F3CFBDF0F4CFBEF0090EE15C02E2E16AC3 +:101AC000E552E16EE552E7CFD9FF12000001CA519D +:101AD000CB110FE1F8EC11F0010A04E0010A04E176 +:101AE000827403D0828401D08294320E0001CA6FC6 +:101AF000CB6BCA07000ECB5B12000001CC51CD119D +:101B000004E1100ECC6F270ECD6FCC07000ECD5B1D +:101B10006DA207D0CC51CD112EE18B728BB213D0B8 +:101B200027D00001605102E18B9222D0600502E1D2 +:101B30008B8209D0020E605D02E18B8219D0040E07 +:101B4000605D03E18B928B801200100E605D06E1F8 +:101B50000001CC51CD110FE18B720AD0200E605DD7 +:101B60000AE10001CC51CD1106E18B728BA202D0AB +:101B70008B9012008B8012001200120012001200D3 +:101B80007EEF12F012001E0EE66E010EE66E4EECB7 +:101B900008F0E552E552400EE66E000EE66E050EC8 +:101BA000E66EE66A010EE66E80EC08F0146E050E35 +:101BB000E15E1450F3CFBDF0F4CFBEF012006D849F +:101BC0000001080ED96F070EDA6FD907000EDA5B35 +:101BD000D951DA11FAE16D941200D9CFE6FFE1CFC5 +:101BE000D9FFFD0EDBCF08F0FE0EDBCF09F0010EB2 +:101BF000081801E1095033E0E868081802E1E868D4 +:101C000009182BE0030E081801E1095024E0040E26 +:101C1000081801E109501DE0020E081801E1095001 +:101C200016E0170E081801E109500FE0160E08180B +:101C300001E1095008E0150E081801E1095001E022 +:101C400010D0A1DF0FD09EDF0DD09ADF0BD096DF32 +:101C500009D092DF07D091DF05D091DF03D00000DB +:101C600001D000D0010E00D0E552E7CFD9FF12001D +:101C70004BD8E652D0B202D0010E15D0D0B802D067 +:101C8000020E11D0D0B002D0030E0DD0D0B602D0CB +:101C9000040E09D0FCAE02D0050E05D0FCAC02D07B +:101CA000060E01D0070EDF6ED088D086D084D08299 +:101CB000D080FC9EFC9CDF50E552E552E7CFD9FF77 +:101CC0001200E65221D8020EE126F350DF6E010E1B +:101CD000F4CFDBFF1200F00EE66ED80EE66E72EC6B +:101CE00014F0E552E5521200DF50F36E010EDB50A6 +:101CF000F46E020EE15C1200DFCFE6FFE66AFCEC58 +:101D000013F0E552E5521200D9CFE6FFE1CFD9FF3B +:021D10001200BF +:0E1D1200019E08D0019E09AE05D0086C091E86 +:101D2000E86A0922018E09C003F008C002F0136AB4 +:101D3000126A8E0E046E056AA4EF10F0016AE0ECE0 +:101D400010F0F8EC10F001B688EF10F001A205D009 +:101D500001BA88EF10F08FEF10F001BA9BEF10F08E +:101D600001A005D001B888EF10F09BEF10F001B88A +:101D70008FEF10F0056A7F0E0A24046EE86A0522D0 +:101D80000F50045EE86A055A1A0E106E0A6A126A4B +:101D9000136A026A036A0C50075E0D50085A0E500F +:101DA000095A000E0A5A09E70C5007260D5008225E +:101DB0000E500922000E0A2201D0128AD89007364E +:101DC000083609360A36D8901236133602360336EC +:101DD000102EE1D7095008100710D8A4128AA4EFDA +:101DE00010F0016AE0EC10F0F8EC10F001B688EFAA +:101DF00010F001A205D001B888EF10F08FEF10F0BD +:101E000001AA05D001B088EF10F08FEF10F001B0FB +:101E100002D001A802D09BEF10F0056A0F500A24EF +:101E2000046EE86A05227E0E045EE86A055A126AAC +:101E3000136A026A036A0E500902F4CF03F0F3CF6B +:101E400002F00D500902F3501326F4500222000E46 +:101E500003220E500802F3501326F4500222000E03 +:101E600003220C500902F3501226F4501322000EE4 +:101E7000022203220D500802F3501226F4501322BE +:101E8000000E022203220E500702F3501226F450D5 +:101E90001322000E022203220C500802F4501226D4 +:101EA000000E1322022203220D500702F4501226C4 +:101EB000000E132202220322A4EF10F00F7E016A0B +:101EC000E0EC10F0F8EC10F001B688EF10F001A291 +:101ED0000AD001AA03D001BE88EF10F001A494EF4C +:101EE00010F091EF10F001AA05D001AC94EF10F0C2 +:101EF00091EF10F001A00AD001A808D001BE04D0D3 +:101F000001A402D09DEF10F0A1EF10F0126A056A53 +:101F10000F500A5C116E10E307C013F008C002F006 +:101F200009C003F00AC010F00CC007F00DC008F0A3 +:101F30000EC009F0013A09D00CC013F00DC002F038 +:101F40000EC003F00FC010F0116C019E01BC018E99 +:101F500010C004F001B0D0EF10F01A0E1160D0EFF5 +:101F600010F0046A0A6A01A408D0076C081E091E52 +:101F70000A1EE86A082209220A2201AC08D0136C62 +:101F8000021E031E041EE86A022203220422066ABD +:101F9000115207E00A340932083207320632112E94 +:101FA000F9D70750132608500222095003220A507D +:101FB000042206C012F0019E04AE0BD0126C131E58 +:101FC000021E031E041EE86A1322022203220422B8 +:101FD000018E04A006D0D8800332023213321232AE +:101FE000102A10C004F0A4EF10F009C013F008C0CC +:101FF00012F008500D02F4CF07F0F3CF06F00950AD +:102000000E02F4CF09F0F3CF08F00D02F3500726CB +:10201000F4500822E86A092212500E02F3500726F3 +:10202000F4500822E86A09220EAE1BEF10F012509D +:10203000085E1350095A13AE000C0D50085E0E5086 +:10204000095A000C016AE0EC10F001B62CEF10F018 +:1020500001A20ED001B405D07F0E096EFF0E086EEE +:102060001FD0800E096E086A1BD0096A086A18D052 +:1020700001B0FBD78F0E0A60EDD77E0E0A64F5D74C +:102080008E0E0A5C05E0D890093208320A2AF8D789 +:1020900001A406D0086C091EE86A092209AEE5D73A +:1020A0001200016AE0EC10F001B65BEF10F001A243 +:1020B0000FD001B407D07F0E096EFF0E086E076EB9 +:1020C000066E25D0800E096E01D0096A000EF6D783 +:1020D00001B0FBD7066A9F0E0A60EBD77E0E0A643A +:1020E000F4D79E0E0A5C07E0D89009320832073216 +:1020F00006320A2AF6D701A40AD0066C071E081E6B +:10210000091EE86A07220822092209AEDED712005A +:102110007F0E0A6EFF0E096E086E076E12007F0EAC +:1021200001BEFF0E0A6E02D07F0E0A6E800E096E8F +:10213000086A076AF3D701AE04D0800E0A6E096AF6 +:10214000F7D70A6A096AF4D7035002101310121065 +:10215000F8E005BEF0D703BE0CD004500510EBE04C +:10216000D89012361336023603360406D8A0050678 +:10217000F2D70550D4E10428D2E012AE11D07F0E80 +:10218000121402E113A00CD0132AE86A02220322DF +:1021900007E3D880033202321332042A0428BFE056 +:1021A0000450C9E013C007F002C008F00334096E00 +:1021B00004300A6E09320A9E01BE0A8E8EEF10F0BC +:1021C00009360A3602E30184017E06E101800A6ACB +:1021D000096A086A076A12000A2803E0D8800932EF +:1021E0001200D890093202E1018212000186120029 +:1021F0000E360F3602E3018C017E06E101880F6A7C +:102200000E6A0D6A0C6A12000F2803E0D8800E32A5 +:0C2210001200D8900E32EAE1018A1200A0 +:04221C000001BB51B1 +:10222000010A32E0010A4DE1BC51090A24E0010A29 +:1022300020E00F0A1CE0010A18E0030A14E0010A7A +:1022400010E0070A0CE0010A08E0030A04E0010AB2 +:1022500017E1870E11D08F0E0FD0970E0DD09F0E65 +:102260000BD0A70E09D0AF0E07D0B70E05D0BF0E0A +:1022700003D0C70E01D0CF0EE66EA9EC14F0E552E4 +:102280000001010EBB6F120001EC15F000091AE10C +:10229000F1EC14F0F3CF14F0F4CF15F0BCC0E9FF6B +:1022A000EA6AE9BEEA681DD914C0EEFF15C0EDFF69 +:1022B000090E0001BC5D02E1BC6B01D0BC2BBB6B05 +:1022C0001200BB6B120094948294050EE66E7C0E95 +:1022D000E66EEF0EE66E8FEC13F0E552E552E55236 +:1022E0001200D9CFE6FFE1CFD9FFFE0EDBCFE9FF29 +:1022F000EA6AE9BEEA68F5D8EECF22F0EFCF23F024 +:1023000022C008F023C009F08BEC0EF007C01EF0CD +:1023100008C01FF009C020F00AC021F0D2D807C0C1 +:102320001AF008C01BF009C01CF00AC01DF0C0D88C +:1023300007C016F008C017F009C018F00AC019F05D +:10234000C8D822EC10F008C0F3FF09C0F4FFE55232 +:10235000E7CFD9FF1200B7C008F0B8C009F08BEC86 +:102360000EF007C024F008C025F009C026F00AC00E +:1023700027F0A7D807C020F008C021F009C022F03C +:102380000AC023F095D807C01CF008C01DF009C092 +:102390001EF00AC01FF00C6A0D6A200E0E6E400E71 +:1023A0000F6E5EEC0FF007C018F008C019F009C0FE +:1023B0001AF00AC01BF08DD807C014F008C015F041 +:1023C00009C016F00AC017F0550E0C6E0D6E0E6E99 +:1023D000410E0F6EF1EC0EF051EF10F00001BA3526 +:1023E00004E2B9519008010EBA5501E3000C010C4A +:1023F000D9CFE6FFE1CFD9FF050EE126030E79D84C +:10240000DE6ADD6ADECF14F0DDCF15F0D89015500E +:1024100004E6080E145C000E155833E2DFCFE6FF29 +:1024200060DFE552020EF3CFDBFF030EF4CFDBFFDC +:1024300036D804E6E40E145C0C0E155806E2040EC1 +:10244000DB50020802E2020E54D829D804E6F00E4E +:10245000145C0A0E155806E2040EDB50010802E275 +:10246000010E47D81CD804E6640E145C000E155803 +:1024700003E2040EDB6A05D0DF2A010EC3E3DB2A88 +:10248000C1D7040EDB50146E050EE15C02E2E16A76 +:10249000E552E16E1450E552E7CFD9FF1200020E6B +:1024A000DBCF14F0030EDBCF15F0D89015501200DF +:1024B0000C6AC00E0D6E7F0E0E6E440E0F6E9EEFF8 +:1024C0000EF00C6A0D6AA00E0E6E400E0F6EF1EF4C +:1024D0000EF00C6A0D6A7A0E0E6E440E0F6EF1EF5E +:1024E0000EF0D890E936EA36A70EE926000EEA2269 +:0C24F0001200F36E040EF3CFDBFF1200AD +:0424FC000401205166 +:102500001F0B010801E01200245101E01200060E29 +:10251000215D21E12351230A1BE0010A0CE0030A9B +:102520001AE10001610517E10001EE0E716F250E41 +:10253000726F090E09D0000161050DE100015B0E0B +:10254000716F260E726F1D0E746F756BC00E02D008 +:102550000001800E736F04012051600BE842E842D5 +:10256000E842E842E842010801E0120021510B0A6A +:1025700026E0080A19E0090A11E0080A05E00B0A3A +:1025800023E0080A21E012000001DB0E716F000E4B +:10259000726F010E746F756BC10E0FD00001800E4B +:1025A000736F23C4DBF012000001DC0E716F000EAC +:1025B000726F010E746F756B810E736F12000001E4 +:0A25C000800E736F22C4DCF01200DD +:0625CA00120100020000F6 +:1025D0000008D804050002000102000109022900D8 +:1025E000010100C0320904000002030000000921BB +:1025F00011010001221D00070581034000010705AC +:102600000103400001040309042C034D006F006224 +:102610000069006C006500200052006F0062006FCE +:10262000007400200050006C006100740066006FB0 +:102630000072006D002603420061007400740065A2 +:10264000007200790020004D006F006E0069007478 +:10265000006F00720069006E0067000600FF09014C +:10266000A10119012940150026FF00750895408138 +:1026700000190129409100C0DC25052609263526D0 +:102680002A0EF66E080EF76E000EF86E00010900B5 +:10269000F550D36F0900F550D46F03E1D36701D033 +:1026A0003DD00900F550CE6F0900F550CF6F0900FD +:1026B000F550D06F09000900F550E96E0900F5509A +:1026C000EA6E090009000900F550D16F0900F550C4 +:1026D000D26F09000900F6CFD5F0F7CFD6F0F8CFCA +:1026E000D7F0CEC0F6FFCFC0F7FFD0C0F8FF000193 +:1026F000D15302E1D25307E00900F550EE6ED10745 +:10270000F8E2D207F9D7D5C0F6FFD6C0F7FFD7C099 +:0E271000F8FF0001D307000ED45BBFD7120004 +:02271E00D9CF11 +:10272000E6FFDACFE6FFE1CFD9FFE2CFDAFFC26AF8 +:10273000C06AFC0EDB407F0B3C0BC26EFB0EDBCF96 +:10274000E6FFFC0EDB38F00B300BE552E710C16EF4 +:10275000FD0EDB50040DF350380B156EFD0EDB380B +:102760000F0B070B146EFD0EDB50800B14101510B1 +:10277000C06EFC0EDBAE03D09E9C9D8CF28CC280A2 +:0C278000E552E5CFDAFFE7CFD9FF1200E9 +:04278C00FE0EE3CF8B +:10279000E9FFFF0EE3CFEAFFE9CFF3FFEACFF4FF53 +:1027A000FB0EE35003E1FC0EE35009E0FB0EE306F1 +:1027B00002E2FC0EE306FD0EE350EE6EF1D71200CE +:1027C000FB0EE3CFF6FFFC0EE3CFF7FFFD0EE3CFEA +:1027D000F8FFFE0EE3CFE9FFFF0EE3CFEAFFE9CFFC +:1027E000F3FFEACFF4FFEE66FED7ED520900F5CF16 +:0827F000EFFFEE66FBD71200BB +:0827F8002DD8FD0EDB50A86E88 +:10280000A69EA69CA684F250800B01E0010E00015A +:10281000DD6FF29E550EA76EAA0EA76EA682DD5141 +:10282000E8B0F28EE8A0F29EA6B2FED7A198A694D8 +:10283000E552E7CFD9FF12000DD8A69EA69CA68030 +:10284000020EE66EE6EC14F0E552A850E552E7CF32 +:10285000D9FF1200D9CFE6FFE1CFD9FFFE0EDB5042 +:04286000A96E12004B +:0C286400D9CFE6FFDACFE6FFE1CFD9FFC5 +:10287000E2CFDAFFFD0EDB507E0BCD6EFD0EDBAC42 +:1028800002D0CD8E01D0CD9ECF6ACE6A9E90DBAEB7 +:1028900002D09D8001D09D90CD80E552E5CFDAFF3A +:0628A000E7CFD9FF120092 +:0A28A60032313A33323A313000206B +:1028B000004D617920303420323031300042617473 +:1028C00074657279204D6F6E69746F72696E6720DE +:1028D000312E300A4F6C697669657220424943484F +:0428E0004C45520011 +:0C28E400D9CFE6FFDACFE6FFE1CFD9FF45 +:1028F000E2CFDAFFE652E652FC0EDBCFDEFFDBCFA3 +:10290000DDFF010EDB50CF6EDF50CE6EE552E5529B +:0C291000E552E5CFDAFFE7CFD9FF120057 +:04291C00D9CFE6FF2A +:10292000E1CFD9FF00010ED8EF50000803E2A6293D +:102930001F0BA66F07D8FE0EDBCFEFFFE552E7CFE8 +:10294000D9FF1200A651EA6A860FE96E000EEA224C +:02295000120073 +:0E295200D9CFE6FFDACFE6FFE1CFD9FFE2CF23 +:10296000DAFFFD0EDB407F0B3C0B146EC30EC2146E +:102970001410C26EC282E552E5CFDAFFE7CFD9FF6D +:02298000120043 +:0E298200FF0EE350296EEF0E01D0F30EE76E4C +:10299000E72EC8EF14F00C0E286EE76AE72ECEEF94 +:1029A00014F0282ECDEF14F0292EC6EF14F01200EB +:1029B00013EE00F023EE00F0F86A019C40EC13F0F7 +:0C29C00006EC15F069EC0AF0FBD71200E1 +:0429CC00FF0EE350C7 +:1029D000E84E1200000000D000D000D0E82EFAD758 +:0229E0001200E3 +:0E29E200C450176E166AC3501610F36E17C05D +:0429F000F4FF1200DE +:0C29F40000EE00F00F0EEE6AEA62FDD764 +:022A00001200C2 +:0A2A0200C250020B01E0010E1200A9 +:022A0C001200B6 +:022A0E000000C6 :102A100000000000000000000000000000000000B6 -:102A200000000000010000000000010000000000A4 -:012A300000A5 -:0F2A310000000000000000000000000000000096 +:042A200000000000B2 +:0C2A2400000000000100000000000100A4 +:052A30000000000000A1 +:0B2A3500000000000000000000000096 :102A40000000000000000000000000000000000086 -:022A5000000084 +:062A500000000000000080 :00000001FF diff --git a/elec/boards/Monitoring_Battery/Firmware/output/Battery_Monitoring.map b/elec/boards/Monitoring_Battery/Firmware/output/Battery_Monitoring.map index 6cec904..d2d3165 100644 --- a/elec/boards/Monitoring_Battery/Firmware/output/Battery_Monitoring.map +++ b/elec/boards/Monitoring_Battery/Firmware/output/Battery_Monitoring.map @@ -1,5 +1,5 @@ MPLINK 4.21, Linker -Linker Map File - Created Tue May 04 19:06:44 2010 +Linker Map File - Created Tue May 04 21:32:13 2010 Section Info Section Type Address Location Size(Bytes) @@ -12,58 +12,58 @@ REMAPPED_HIGH_INTERRUPT_VECTOR code 0x000808 program 0x000006 REMAPPED_LOW_INTERRUPT_VECTOR code 0x000818 program 0x000006 .cinit romdata 0x00082a program 0x000026 .code_usb_device.o code 0x000850 program 0x000b5a - .code_main.o code 0x0013aa program 0x000964 - PROG code 0x001d0e program 0x00050a - .code_monitor.o code 0x002218 program 0x0002e0 - .code_usb_function_hid.o code 0x0024f8 program 0x0000ce -.romdata_usb_descriptors.o romdata 0x0025c6 program 0x0000b6 - _cinit_scn code 0x00267c program 0x00009e - .code_adcopen.o code 0x00271a program 0x00006e - STRING code 0x002788 program 0x00006c - .code_eeprom.o code 0x0027f4 program 0x00006c - .code_t1open.o code 0x002860 program 0x000042 - .stringtable romdata 0x0028a2 program 0x00003e - .code_t1write.o code 0x0028e0 program 0x000038 - .code_error.o code 0x002918 program 0x000036 - .code_adcselchconv.o code 0x00294e program 0x000030 - D10KTCYXCODE code 0x00297e program 0x00002e - _startup_scn code 0x0029ac program 0x00001c - D10TCYXCODE code 0x0029c8 program 0x000016 - .code_adcread.o code 0x0029de program 0x000012 - .code code 0x0029f0 program 0x00000e - .code_adcbusy.o code 0x0029fe program 0x00000a - .code___init.o code 0x002a08 program 0x000002 - .romdata_adcread.o romdata 0x002a0a program 0x000000 - .romdata_adcselchconv.o romdata 0x002a0a program 0x000000 - .romdata_t1open.o romdata 0x002a0a program 0x000000 - .idata_t1write.o_i romdata 0x002a0a program 0x000000 - .idata_t1open.o_i romdata 0x002a0a program 0x000000 - .romdata_t1write.o romdata 0x002a0a program 0x000000 - .romdata___init.o romdata 0x002a0a program 0x000000 - .romdata_adcopen.o romdata 0x002a0a program 0x000000 - .romdata_c018i.o romdata 0x002a0a program 0x000000 -.idata_usb_descriptors.o_i romdata 0x002a0a program 0x000000 - .romdata_main.o romdata 0x002a0a program 0x000000 - .romdata_eeprom.o romdata 0x002a0a program 0x000000 - .idata_usb_device.o_i romdata 0x002a0a program 0x000000 - .romdata_usb_device.o romdata 0x002a0a program 0x000000 -.idata_usb_function_hid.o_i romdata 0x002a0a program 0x000000 -.romdata_usb_function_hid.o romdata 0x002a0a program 0x000000 - .romdata_error.o romdata 0x002a0a program 0x000000 - .idata_monitor.o_i romdata 0x002a0a program 0x000016 - .romdata_monitor.o romdata 0x002a0a program 0x000000 - .romdata_adcbusy.o romdata 0x002a0a program 0x000000 - .idata_main.o_i romdata 0x002a20 program 0x000011 - .idata_error.o_i romdata 0x002a31 program 0x000021 - .idata_adcread.o_i romdata 0x002a52 program 0x000000 - .idata_adcselchconv.o_i romdata 0x002a52 program 0x000000 - .idata_adcopen.o_i romdata 0x002a52 program 0x000000 - .idata_eeprom.o_i romdata 0x002a52 program 0x000000 - .code_usb_descriptors.o code 0x002a52 program 0x000000 - .idata___init.o_i romdata 0x002a52 program 0x000000 - .idata_adcbusy.o_i romdata 0x002a52 program 0x000000 - .code_c018i.o code 0x002a52 program 0x000000 - .idata_c018i.o_i romdata 0x002a52 program 0x000000 + .code_main.o code 0x0013aa program 0x000968 + PROG code 0x001d12 program 0x00050a + .code_monitor.o code 0x00221c program 0x0002e0 + .code_usb_function_hid.o code 0x0024fc program 0x0000ce +.romdata_usb_descriptors.o romdata 0x0025ca program 0x0000b6 + _cinit_scn code 0x002680 program 0x00009e + .code_adcopen.o code 0x00271e program 0x00006e + STRING code 0x00278c program 0x00006c + .code_eeprom.o code 0x0027f8 program 0x00006c + .code_t1open.o code 0x002864 program 0x000042 + .stringtable romdata 0x0028a6 program 0x00003e + .code_t1write.o code 0x0028e4 program 0x000038 + .code_error.o code 0x00291c program 0x000036 + .code_adcselchconv.o code 0x002952 program 0x000030 + D10KTCYXCODE code 0x002982 program 0x00002e + _startup_scn code 0x0029b0 program 0x00001c + D10TCYXCODE code 0x0029cc program 0x000016 + .code_adcread.o code 0x0029e2 program 0x000012 + .code code 0x0029f4 program 0x00000e + .code_adcbusy.o code 0x002a02 program 0x00000a + .code___init.o code 0x002a0c program 0x000002 + .romdata_adcread.o romdata 0x002a0e program 0x000000 + .romdata_adcselchconv.o romdata 0x002a0e program 0x000000 + .romdata_t1open.o romdata 0x002a0e program 0x000000 + .idata_t1write.o_i romdata 0x002a0e program 0x000000 + .idata_t1open.o_i romdata 0x002a0e program 0x000000 + .romdata_t1write.o romdata 0x002a0e program 0x000000 + .romdata___init.o romdata 0x002a0e program 0x000000 + .romdata_adcopen.o romdata 0x002a0e program 0x000000 + .romdata_c018i.o romdata 0x002a0e program 0x000000 +.idata_usb_descriptors.o_i romdata 0x002a0e program 0x000000 + .romdata_main.o romdata 0x002a0e program 0x000000 + .romdata_eeprom.o romdata 0x002a0e program 0x000000 + .idata_usb_device.o_i romdata 0x002a0e program 0x000000 + .romdata_usb_device.o romdata 0x002a0e program 0x000000 +.idata_usb_function_hid.o_i romdata 0x002a0e program 0x000000 +.romdata_usb_function_hid.o romdata 0x002a0e program 0x000000 + .romdata_error.o romdata 0x002a0e program 0x000000 + .idata_monitor.o_i romdata 0x002a0e program 0x000016 + .romdata_monitor.o romdata 0x002a0e program 0x000000 + .romdata_adcbusy.o romdata 0x002a0e program 0x000000 + .idata_main.o_i romdata 0x002a24 program 0x000011 + .idata_error.o_i romdata 0x002a35 program 0x000021 + .idata_adcread.o_i romdata 0x002a56 program 0x000000 + .idata_adcselchconv.o_i romdata 0x002a56 program 0x000000 + .idata_adcopen.o_i romdata 0x002a56 program 0x000000 + .idata_eeprom.o_i romdata 0x002a56 program 0x000000 + .code_usb_descriptors.o code 0x002a56 program 0x000000 + .idata___init.o_i romdata 0x002a56 program 0x000000 + .idata_adcbusy.o_i romdata 0x002a56 program 0x000000 + .code_c018i.o code 0x002a56 program 0x000000 + .idata_c018i.o_i romdata 0x002a56 program 0x000000 MATH_DATA udata 0x000000 data 0x000014 .tmpdata udata 0x000014 data 0x000014 DELAYDAT2 udata 0x000028 data 0x000001 @@ -114,54 +114,54 @@ REMAPPED_LOW_INTERRUPT_VECTOR code 0x000818 program 0x000006 0x000800 0x000805 0x000808 0x00080d 0x000818 0x00081d - 0x00082a 0x002a51 - 8780 out of 33048 program addresses used, program memory utilization is 26% + 0x00082a 0x002a55 + 8784 out of 33048 program addresses used, program memory utilization is 26% Symbols - Sorted by Name Name Address Location Storage File --------- --------- --------- --------- --------- - BlinkUSBStatus 0x001af6 program extern C:\krobot\elec\boards\Monitoring_Battery\Firmware\main.c - BusyADC 0x0029fe program extern C:\MCC18\src\pmc_common\ADC\adcbusy.c - D10K_1 0x00298a program static C:\MCC18\src\traditional\delays\d10ktcyx.asm - D10Kl 0x002996 program static C:\MCC18\src\traditional\delays\d10ktcyx.asm - D10Kx 0x002988 program static C:\MCC18\src\traditional\delays\d10ktcyx.asm - D10_1 0x0029d8 program static C:\MCC18\src\traditional\delays\d10tcyx.asm - D10x 0x0029d0 program static C:\MCC18\src\traditional\delays\d10tcyx.asm - Delay10KTCYx 0x00297e program extern C:\MCC18\src\traditional\delays\d10ktcyx.asm - Delay10TCYx 0x0029c8 program extern C:\MCC18\src\traditional\delays\d10tcyx.asm - FLO1632S 0x001d12 program extern C:\MCC18\src\traditional\math\cast16FP.asm - FLO1632U 0x001d0e program extern C:\MCC18\src\traditional\math\cast16FP.asm - FPA32 0x001eba program extern C:\MCC18\src\traditional\math\addFP.asm - FPD32 0x001d38 program extern C:\MCC18\src\traditional\math\divFP.asm - FPM32 0x001dde program extern C:\MCC18\src\traditional\math\mulFP.asm - FPS32 0x001eb8 program extern C:\MCC18\src\traditional\math\addFP.asm - FXM1616S 0x001fe6 program extern C:\MCC18\src\traditional\math\fxm1616s.asm + BlinkUSBStatus 0x001afa program extern C:\krobot\elec\boards\Monitoring_Battery\Firmware\main.c + BusyADC 0x002a02 program extern C:\MCC18\src\pmc_common\ADC\adcbusy.c + D10K_1 0x00298e program static C:\MCC18\src\traditional\delays\d10ktcyx.asm + D10Kl 0x00299a program static C:\MCC18\src\traditional\delays\d10ktcyx.asm + D10Kx 0x00298c program static C:\MCC18\src\traditional\delays\d10ktcyx.asm + D10_1 0x0029dc program static C:\MCC18\src\traditional\delays\d10tcyx.asm + D10x 0x0029d4 program static C:\MCC18\src\traditional\delays\d10tcyx.asm + Delay10KTCYx 0x002982 program extern C:\MCC18\src\traditional\delays\d10ktcyx.asm + Delay10TCYx 0x0029cc program extern C:\MCC18\src\traditional\delays\d10tcyx.asm + FLO1632S 0x001d16 program extern C:\MCC18\src\traditional\math\cast16FP.asm + FLO1632U 0x001d12 program extern C:\MCC18\src\traditional\math\cast16FP.asm + FPA32 0x001ebe program extern C:\MCC18\src\traditional\math\addFP.asm + FPD32 0x001d3c program extern C:\MCC18\src\traditional\math\divFP.asm + FPM32 0x001de2 program extern C:\MCC18\src\traditional\math\mulFP.asm + FPS32 0x001ebc program extern C:\MCC18\src\traditional\math\addFP.asm + FXM1616S 0x001fea program extern C:\MCC18\src\traditional\math\fxm1616s.asm High_ISR 0x000008 program extern C:\krobot\elec\boards\Monitoring_Battery\Firmware\main.c - INT3216 0x002040 program extern C:\MCC18\src\traditional\math\castFP16.asm - INT3232 0x00209e program extern C:\MCC18\src\traditional\math\castFP32.asm - InitializeSystem 0x0014d8 program static C:\krobot\elec\boards\Monitoring_Battery\Firmware\main.c + INT3216 0x002044 program extern C:\MCC18\src\traditional\math\castFP16.asm + INT3232 0x0020a2 program extern C:\MCC18\src\traditional\math\castFP32.asm + InitializeSystem 0x0014dc program static C:\krobot\elec\boards\Monitoring_Battery\Firmware\main.c Low_ISR 0x000018 program extern C:\krobot\elec\boards\Monitoring_Battery\Firmware\main.c - OpenADC 0x00271a program extern C:\MCC18\src\pmc_common\ADC\adcopen.c - OpenTimer1 0x002860 program extern C:\MCC18\src\pmc_common\Timers\t1open.c - ProcessIO 0x00156c program extern C:\krobot\elec\boards\Monitoring_Battery\Firmware\main.c - ReadADC 0x0029de program extern C:\MCC18\src\pmc_common\ADC\adcread.c - ReadEEPROM 0x002834 program extern C:\krobot\elec\boards\Monitoring_Battery\Firmware\eeprom.c + OpenADC 0x00271e program extern C:\MCC18\src\pmc_common\ADC\adcopen.c + OpenTimer1 0x002864 program extern C:\MCC18\src\pmc_common\Timers\t1open.c + ProcessIO 0x001570 program extern C:\krobot\elec\boards\Monitoring_Battery\Firmware\main.c + ReadADC 0x0029e2 program extern C:\MCC18\src\pmc_common\ADC\adcread.c + ReadEEPROM 0x002838 program extern C:\krobot\elec\boards\Monitoring_Battery\Firmware\eeprom.c Remapped_High_ISR 0x000808 program extern C:\krobot\elec\boards\Monitoring_Battery\Firmware\main.c Remapped_Low_ISR 0x000818 program extern C:\krobot\elec\boards\Monitoring_Battery\Firmware\main.c - ResetSource 0x001c6c program extern C:\krobot\elec\boards\Monitoring_Battery\Firmware\main.c - SelChanConvADC 0x00294e program extern C:\MCC18\src\pmc_common\ADC\adcselchconv.c - TSIGN1616A 0x002032 program static C:\MCC18\src\traditional\math\fxm1616s.asm - USBCBCheckOtherReq 0x001b7c program extern C:\krobot\elec\boards\Monitoring_Battery\Firmware\main.c - USBCBErrorHandler 0x001b7a program extern C:\krobot\elec\boards\Monitoring_Battery\Firmware\main.c - USBCBInitEP 0x001b82 program extern C:\krobot\elec\boards\Monitoring_Battery\Firmware\main.c - USBCBSendResume 0x001bba program extern C:\krobot\elec\boards\Monitoring_Battery\Firmware\main.c - USBCBStdSetDscHandler 0x001b80 program extern C:\krobot\elec\boards\Monitoring_Battery\Firmware\main.c - USBCBSuspend 0x001b74 program extern C:\krobot\elec\boards\Monitoring_Battery\Firmware\main.c - USBCBWakeFromSuspend 0x001b76 program extern C:\krobot\elec\boards\Monitoring_Battery\Firmware\main.c - USBCB_SOF_Handler 0x001b78 program extern C:\krobot\elec\boards\Monitoring_Battery\Firmware\main.c - USBCheckHIDRequest 0x0024f8 program extern C:\krobot\elec\boards\Monitoring_Battery\Firmware\usb_function_hid.c + ResetSource 0x001c70 program extern C:\krobot\elec\boards\Monitoring_Battery\Firmware\main.c + SelChanConvADC 0x002952 program extern C:\MCC18\src\pmc_common\ADC\adcselchconv.c + TSIGN1616A 0x002036 program static C:\MCC18\src\traditional\math\fxm1616s.asm + USBCBCheckOtherReq 0x001b80 program extern C:\krobot\elec\boards\Monitoring_Battery\Firmware\main.c + USBCBErrorHandler 0x001b7e program extern C:\krobot\elec\boards\Monitoring_Battery\Firmware\main.c + USBCBInitEP 0x001b86 program extern C:\krobot\elec\boards\Monitoring_Battery\Firmware\main.c + USBCBSendResume 0x001bbe program extern C:\krobot\elec\boards\Monitoring_Battery\Firmware\main.c + USBCBStdSetDscHandler 0x001b84 program extern C:\krobot\elec\boards\Monitoring_Battery\Firmware\main.c + USBCBSuspend 0x001b78 program extern C:\krobot\elec\boards\Monitoring_Battery\Firmware\main.c + USBCBWakeFromSuspend 0x001b7a program extern C:\krobot\elec\boards\Monitoring_Battery\Firmware\main.c + USBCB_SOF_Handler 0x001b7c program extern C:\krobot\elec\boards\Monitoring_Battery\Firmware\main.c + USBCheckHIDRequest 0x0024fc program extern C:\krobot\elec\boards\Monitoring_Battery\Firmware\usb_function_hid.c USBCheckStdRequest 0x000bb2 program extern C:\krobot\elec\boards\Monitoring_Battery\Firmware\usb_device.c USBClearInterruptFlag 0x001168 program extern C:\krobot\elec\boards\Monitoring_Battery\Firmware\usb_device.c USBConfigureEndpoint 0x001024 program extern C:\krobot\elec\boards\Monitoring_Battery\Firmware\usb_device.c @@ -185,108 +185,108 @@ USBPrepareForNextSetupTrf 0x000b6a program extern C:\krobot\elec\boards USBSuspend 0x000a12 program extern C:\krobot\elec\boards\Monitoring_Battery\Firmware\usb_device.c USBTransferOnePacket 0x001100 program extern C:\krobot\elec\boards\Monitoring_Battery\Firmware\usb_device.c USBWakeFromSuspend 0x000a24 program extern C:\krobot\elec\boards\Monitoring_Battery\Firmware\usb_device.c - USB_CD_Ptr 0x002674 program extern C:\krobot\elec\boards\Monitoring_Battery\Firmware\usb_descriptors.c - USB_SD_Ptr 0x002676 program extern C:\krobot\elec\boards\Monitoring_Battery\Firmware\usb_descriptors.c -USER_USB_CALLBACK_EVENT_HANDLER 0x001bd6 program extern C:\krobot\elec\boards\Monitoring_Battery\Firmware\main.c - UserInit 0x0014e4 program extern C:\krobot\elec\boards\Monitoring_Battery\Firmware\main.c - WriteEEPROM 0x0027f4 program extern C:\krobot\elec\boards\Monitoring_Battery\Firmware\eeprom.c - WriteTimer1 0x0028e0 program extern C:\MCC18\src\pmc_common\Timers\t1write.c + USB_CD_Ptr 0x002678 program extern C:\krobot\elec\boards\Monitoring_Battery\Firmware\usb_descriptors.c + USB_SD_Ptr 0x00267a program extern C:\krobot\elec\boards\Monitoring_Battery\Firmware\usb_descriptors.c +USER_USB_CALLBACK_EVENT_HANDLER 0x001bda program extern C:\krobot\elec\boards\Monitoring_Battery\Firmware\main.c + UserInit 0x0014e8 program extern C:\krobot\elec\boards\Monitoring_Battery\Firmware\main.c + WriteEEPROM 0x0027f8 program extern C:\krobot\elec\boards\Monitoring_Battery\Firmware\eeprom.c + WriteTimer1 0x0028e4 program extern C:\MCC18\src\pmc_common\Timers\t1write.c YourHighPriorityISRCode 0x0013aa program extern C:\krobot\elec\boards\Monitoring_Battery\Firmware\main.c - YourLowPriorityISRCode 0x001484 program extern C:\krobot\elec\boards\Monitoring_Battery\Firmware\main.c - _2jContinue 0x0027a8 program static C:\MCC18\src\traditional\stdclib\memset.asm - _3jEnd 0x0027b2 program static C:\MCC18\src\traditional\stdclib\memset.asm - _D10KTCYXCODE_0010 0x00298e program static C:\MCC18\src\traditional\delays\d10ktcyx.asm - _D10KTCYXCODE_001C 0x00299a program static C:\MCC18\src\traditional\delays\d10ktcyx.asm - _D10TCYXCODE_000A 0x0029d2 program static C:\MCC18\src\traditional\delays\d10tcyx.asm - _D10TCYXCODE_000C 0x0029d4 program static C:\MCC18\src\traditional\delays\d10tcyx.asm - _D10TCYXCODE_000E 0x0029d6 program static C:\MCC18\src\traditional\delays\d10tcyx.asm - __FpExit 0x002118 program extern C:\MCC18\src\traditional\math\packFP.asm - __FpPack 0x002144 program extern C:\MCC18\src\traditional\math\packFP.asm - __FpReturnNaN 0x00210c program extern C:\MCC18\src\traditional\math\packFP.asm - __FpReturnNegInf 0x00211e program extern C:\MCC18\src\traditional\math\packFP.asm - __FpReturnNegZero 0x002136 program extern C:\MCC18\src\traditional\math\packFP.asm - __FpReturnPosInf 0x002124 program extern C:\MCC18\src\traditional\math\packFP.asm - __FpReturnPosZero 0x00213e program extern C:\MCC18\src\traditional\math\packFP.asm - __FpReturnSignInf 0x00211a program extern C:\MCC18\src\traditional\math\packFP.asm - __FpReturnSignZero 0x002132 program extern C:\MCC18\src\traditional\math\packFP.asm - __FpReturnW 0x00219c program extern C:\MCC18\src\traditional\math\packFP.asm - __FpUnPackA 0x0021bc program extern C:\MCC18\src\traditional\math\UnpackFP.asm - __FpUnPackB 0x0021ec program extern C:\MCC18\src\traditional\math\UnpackFP.asm - ___?:_lbl00021 0x0015ac program static - ___?:_lbl00022 0x00159c program static - ___?:_lbl00028 0x00165a program static - ___?:_lbl00029 0x00164a program static - ___?:_lbl00033 0x0016b8 program static - ___?:_lbl00034 0x0016a8 program static - ___?:_lbl00061 0x001a4e program static - ___?:_lbl00062 0x001a3e program static - ___case_-1_lbl00113 0x001c56 program static - ___case_0_lbl00031 0x001678 program static - ___case_0_lbl00036 0x001702 program static - ___case_0_lbl00052 0x00194c program static - ___case_11_lbl00044 0x0017e8 program static ... [truncated message content] |
From: Jérémie D. <Ba...@us...> - 2010-05-04 18:06:48
|
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "krobot". The branch, master has been updated via 7df7531102e874356a44f95e5182d05061e28bb8 (commit) from c136e6eb26e07f884568bca2368d6bd6c48f7e38 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 7df7531102e874356a44f95e5182d05061e28bb8 Author: Jérémie Dimino <je...@di...> Date: Tue May 4 20:06:15 2010 +0200 add commands to mute/unmute the buzzer ----------------------------------------------------------------------- Changes: diff --git a/info/control/clients/script.ml b/info/control/clients/script.ml index a537b04..4b33ebe 100644 --- a/info/control/clients/script.ml +++ b/info/control/clients/script.ml @@ -528,7 +528,15 @@ let () = Krobot.Gate.hold_closed krobot); register ~path:["gate"] "stop" f0 (fun logger krobot -> - Krobot.Gate.stop krobot) + Krobot.Gate.stop krobot); + + (* +---------------------------------------------------------------+ + | Power | + +---------------------------------------------------------------+ *) + + register ~path:["power"] "set-buzzer-state" (f1 (keyword "state" [("true", true); ("false", false)])) + (fun logger krobot state -> + Krobot.set_buzzer_state krobot state) (* +-----------------------------------------------------------------+ | Unsafe commands | diff --git a/info/control/driver/driver.ml b/info/control/driver/driver.ml index 3816b39..b445714 100644 --- a/info/control/driver/driver.ml +++ b/info/control/driver/driver.ml @@ -134,6 +134,22 @@ end module Power = struct include Service(struct let name = "Power" end) + + open Krobot_interfaces.Fr_krobot_Device_Power + + let set_buzzer_state state = + USBCard.call Commands.Power.set_buzzer_state (get_card card) state + + let () = + OBus_object.add_interfaces obus + [make ~notify_mode + { + m_SetBuzzerState = ( + fun ctx obj state -> + lwt () = set_buzzer_state state in + return () + ); + }] end (* +-----------------------------------------------------------------+ diff --git a/info/control/lib-krobot/krobot.ml b/info/control/lib-krobot/krobot.ml index e41006e..74a4b18 100644 --- a/info/control/lib-krobot/krobot.ml +++ b/info/control/lib-krobot/krobot.ml @@ -74,6 +74,15 @@ let jack krobot = *) (* +-----------------------------------------------------------------+ + | Power | + +-----------------------------------------------------------------+ *) + +open Krobot_interfaces.Fr_krobot_Device_Power + +let set_buzzer_state krobot state = + OBus_method.call m_SetBuzzerState (device krobot "Power") state + +(* +-----------------------------------------------------------------+ | Gate | +-----------------------------------------------------------------+ *) diff --git a/info/control/lib-krobot/krobot.mli b/info/control/lib-krobot/krobot.mli index 70157cd..7bff545 100644 --- a/info/control/lib-krobot/krobot.mli +++ b/info/control/lib-krobot/krobot.mli @@ -47,6 +47,10 @@ type devices_status = { val devices_status : t -> devices_status OBus_property.r (** List of services with their status *) +(** {6 Power} *) + +val set_buzzer_state : t -> bool -> unit Lwt.t + (** {6 Gate} *) module Gate : sig diff --git a/info/control/protocol/commands.ml b/info/control/protocol/commands.ml index cef550b..1eda7b1 100644 --- a/info/control/protocol/commands.ml +++ b/info/control/protocol/commands.ml @@ -940,6 +940,18 @@ struct ("battery-state", uint8)); section = ""; } + + let set_buzzer_state = + register { + name = "SetBuzzerState"; + response = false; + command = PcInterface.cmd_set; + request = Some PcInterface.set_buzzer_state; + send = (arg1 + ("state", boolean)); + recv = arg0; + section = ""; + } end module Gate = diff --git a/info/control/protocol/krobot.obus b/info/control/protocol/krobot.obus index e10f3f3..12ca50c 100644 --- a/info/control/protocol/krobot.obus +++ b/info/control/protocol/krobot.obus @@ -15,6 +15,10 @@ interface have changed. *) +interface "fr.krobot.Device.Power" { + method SetBuzzerState : (state : boolean) -> () +} + interface "fr.krobot.Device.Gate" { method Enable : () -> () (** Enable the motor of the gate *) hooks/post-receive -- krobot |
From: Olivier B. <Ba...@us...> - 2010-05-04 17:09:26
|
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "krobot". The branch, master has been updated via c136e6eb26e07f884568bca2368d6bd6c48f7e38 (commit) from b5c40b1b124716d69e2c65260f34e70c76b3921f (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit c136e6eb26e07f884568bca2368d6bd6c48f7e38 Author: unknown <Olivier@.(none)> Date: Tue May 4 19:08:52 2010 +0200 Added enable/disable buzzer flag stored in EEPROM ----------------------------------------------------------------------- Changes: diff --git a/elec/boards/Controller_Motor/Firmware/PcInterface.h b/elec/boards/Controller_Motor/Firmware/PcInterface.h index a90e90a..31eeb55 100644 --- a/elec/boards/Controller_Motor/Firmware/PcInterface.h +++ b/elec/boards/Controller_Motor/Firmware/PcInterface.h @@ -102,8 +102,9 @@ typedef struct _UP { #define SET_PORTS_CONFIG_OUTPUTS 0x01 ///< Dnir les sorties du PIC #define SET_PORTS_STATE_LOW 0x02 ///< Dnir les sorties 't bas du PIC #define SET_PORTS_STATE_HIGH 0x03 ///< Dnir les sorties 't haut du PIC -#define SET_SERVO_CONFIG 0x04 ///< Dnir la config des servomoteurs -#define SET_SERVO_STATE 0x05 ///< Dnir l't des servomoteurs +#define SET_SERVO_CONFIG 0x04 ///< Dnir la config des servomoteurs [Robot Interface] +#define SET_SERVO_STATE 0x05 ///< Dnir l't des servomoteurs [Robot Interface] +#define SET_BUZZER_STATE 0x06 ///< Activer le buzzer [Battery Monitoring] // CMD_CALIBRATE arguments #define CAL_START 0x00 diff --git a/elec/boards/Interface_Robot/Firmware/PcInterface.h b/elec/boards/Interface_Robot/Firmware/PcInterface.h index a90e90a..31eeb55 100644 --- a/elec/boards/Interface_Robot/Firmware/PcInterface.h +++ b/elec/boards/Interface_Robot/Firmware/PcInterface.h @@ -102,8 +102,9 @@ typedef struct _UP { #define SET_PORTS_CONFIG_OUTPUTS 0x01 ///< Dnir les sorties du PIC #define SET_PORTS_STATE_LOW 0x02 ///< Dnir les sorties 't bas du PIC #define SET_PORTS_STATE_HIGH 0x03 ///< Dnir les sorties 't haut du PIC -#define SET_SERVO_CONFIG 0x04 ///< Dnir la config des servomoteurs -#define SET_SERVO_STATE 0x05 ///< Dnir l't des servomoteurs +#define SET_SERVO_CONFIG 0x04 ///< Dnir la config des servomoteurs [Robot Interface] +#define SET_SERVO_STATE 0x05 ///< Dnir l't des servomoteurs [Robot Interface] +#define SET_BUZZER_STATE 0x06 ///< Activer le buzzer [Battery Monitoring] // CMD_CALIBRATE arguments #define CAL_START 0x00 diff --git a/elec/boards/Interface_Sensor/Firmware/PcInterface.h b/elec/boards/Interface_Sensor/Firmware/PcInterface.h index a90e90a..31eeb55 100644 --- a/elec/boards/Interface_Sensor/Firmware/PcInterface.h +++ b/elec/boards/Interface_Sensor/Firmware/PcInterface.h @@ -102,8 +102,9 @@ typedef struct _UP { #define SET_PORTS_CONFIG_OUTPUTS 0x01 ///< Dnir les sorties du PIC #define SET_PORTS_STATE_LOW 0x02 ///< Dnir les sorties 't bas du PIC #define SET_PORTS_STATE_HIGH 0x03 ///< Dnir les sorties 't haut du PIC -#define SET_SERVO_CONFIG 0x04 ///< Dnir la config des servomoteurs -#define SET_SERVO_STATE 0x05 ///< Dnir l't des servomoteurs +#define SET_SERVO_CONFIG 0x04 ///< Dnir la config des servomoteurs [Robot Interface] +#define SET_SERVO_STATE 0x05 ///< Dnir l't des servomoteurs [Robot Interface] +#define SET_BUZZER_STATE 0x06 ///< Activer le buzzer [Battery Monitoring] // CMD_CALIBRATE arguments #define CAL_START 0x00 diff --git a/elec/boards/Monitoring_Battery/Firmware/PcInterface.h b/elec/boards/Monitoring_Battery/Firmware/PcInterface.h index a90e90a..31eeb55 100644 --- a/elec/boards/Monitoring_Battery/Firmware/PcInterface.h +++ b/elec/boards/Monitoring_Battery/Firmware/PcInterface.h @@ -102,8 +102,9 @@ typedef struct _UP { #define SET_PORTS_CONFIG_OUTPUTS 0x01 ///< Dnir les sorties du PIC #define SET_PORTS_STATE_LOW 0x02 ///< Dnir les sorties 't bas du PIC #define SET_PORTS_STATE_HIGH 0x03 ///< Dnir les sorties 't haut du PIC -#define SET_SERVO_CONFIG 0x04 ///< Dnir la config des servomoteurs -#define SET_SERVO_STATE 0x05 ///< Dnir l't des servomoteurs +#define SET_SERVO_CONFIG 0x04 ///< Dnir la config des servomoteurs [Robot Interface] +#define SET_SERVO_STATE 0x05 ///< Dnir l't des servomoteurs [Robot Interface] +#define SET_BUZZER_STATE 0x06 ///< Activer le buzzer [Battery Monitoring] // CMD_CALIBRATE arguments #define CAL_START 0x00 diff --git a/elec/boards/Monitoring_Battery/Firmware/main.c b/elec/boards/Monitoring_Battery/Firmware/main.c index a143751..e4e5270 100644 --- a/elec/boards/Monitoring_Battery/Firmware/main.c +++ b/elec/boards/Monitoring_Battery/Firmware/main.c @@ -101,6 +101,7 @@ char resetSource; volatile unsigned int ms = 0; volatile unsigned int s = 0; +volatile BOOL buzzer_on = TRUE; extern volatile BYTE err[32]; extern volatile BYTE errno; @@ -235,7 +236,9 @@ char ResetSource(void); } interruptMonitor(); - //interruptBuzzer(); + + if (buzzer_on) + interruptBuzzer(); // On rtorise l'interruption PIR1bits.TMR1IF = 0; @@ -556,10 +559,17 @@ void UserInit(void) initMonitor(); // Il faut le faire avant d'utiliser BUZZER (pin en sortie) - BUZZER = 1; // On allume le buzzer pendant la phase d'initialisation, - // ce qui permet de vfier que celui-ci fonctionne. - Delay10KTCYx(0); + // BUZZER + buzzer_on = (ReadEEPROM(0x01) & 0b1); + + if (buzzer_on) { + BUZZER = 1; // On allume le buzzer pendant la phase d'initialisation, + // ce qui permet de vfier que celui-ci fonctionne. + Delay10KTCYx(0); + } + BUZZER = 0; // Fin de la phase d'initialisation + }//end UserInit /** @@ -717,6 +727,18 @@ void ProcessIO(void) { LATE|= ReceivedDataBuffer.DATA[5]; break; + case SET_BUZZER_STATE: + eeprom = ReadEEPROM(0x01); + + if (ReceivedDataBuffer.DATA[1]) + eeprom|= 0b1; + else + eeprom^= 0b1; + + WriteEEPROM(0x01, eeprom); + buzzer_on = (eeprom & 0b1); + break; + default: error(ERR_UNKNOWN_SET); } diff --git a/elec/boards/Monitoring_Battery/Firmware/output/Battery_Monitoring.cof b/elec/boards/Monitoring_Battery/Firmware/output/Battery_Monitoring.cof index d9f18e5..137a5dd 100644 Binary files a/elec/boards/Monitoring_Battery/Firmware/output/Battery_Monitoring.cof and b/elec/boards/Monitoring_Battery/Firmware/output/Battery_Monitoring.cof differ diff --git a/elec/boards/Monitoring_Battery/Firmware/output/Battery_Monitoring.hex b/elec/boards/Monitoring_Battery/Firmware/output/Battery_Monitoring.hex index 63a3419..1b99fe8 100644 --- a/elec/boards/Monitoring_Battery/Firmware/output/Battery_Monitoring.hex +++ b/elec/boards/Monitoring_Battery/Firmware/output/Battery_Monitoring.hex @@ -1,13 +1,13 @@ :020000040000FA -:06000000A8EF14F012004D +:06000000D6EF14F012001F :0600080004EF04F01200F9 :060018000CEF04F01200E1 -:06080000A8EF14F0120045 +:06080000D6EF14F0120017 :06080800D5EF09F012001B -:060818003EEF0AF01200A1 -:06082A000300D4290000C8 -:100830008600000021000000C4290000BD00000067 -:1008400010000000AE290000A70000001600000004 +:0608180042EF0AF012009D +:06082A000300312A00006A +:100830008600000021000000202A0000BD0000000A +:10084000110000000A2A0000A700000016000000A6 :1008500027EC09F06A6A686A5AEC09F06D8C6E6AD6 :100860000AEC09F06D9CDF6A3BEC09F010E2DF5006 :10087000040DF3CFE9FFF4CFEAFF000EE926040EE2 @@ -86,11 +86,11 @@ :100D00005BDA880EEF6EDF7457DAC80EEF6E040EF2 :100D1000E15C02E2E16AE552E16E57D2800E040125 :100D2000205D3CE10001C00E736F04012351030AF2 -:100D30001EE0010A09E0030A2FE100016A0E716F4B -:100D4000250E726F120E22D0C3DA180EF626260E6A +:100D30001EE0010A09E0030A2FE10001C60E716FEF +:100D4000250E726F120E22D0C3DA740EF626260E0E :100D5000A2DA020E0001F76A7125F66E7251F722CF :100D60000900F5CF74F00A00F5CF75F01200030EFC -:100D7000225D0FE2ADDA1A0EF626260E8CDA71C06D +:100D7000225D0FE2ADDA760EF626260E8CDA71C011 :100D8000F6FF72C0F7FF0800F5500001746F756B35 :100D900012000001736B12000001736B120011DA74 :100DA0000401286B296B20511F0B020A11E0030A72 @@ -185,8 +185,8 @@ :101330001200680EE66E0F0EE66E16DFE552E552FD :10134000E552120049DF670EE926000E120044DF65 :101350006B0EE926000E1200D9CFE6FFE1CFD9FFD0 -:101360001200E66E96EC13F0146E050EE15E14505A -:101370001200BDEC0DF0146E060EE15E145012006A +:101360001200E66EC4EC13F0146E050EE15E14502C +:101370001200EBEC0DF0146E060EE15E145012003C :10138000200EEE6E040EED6E120065C0E9FF66C021 :10139000EAFF120028DFC4DFC0EF09F004DFC0DF7E :0A13A0002AEF09F0F6DEE9EF08F08D @@ -195,378 +195,382 @@ :1013C000E4FFF5CFE4FFF3CFE4FFF4CFE4FFFACF7F :1013D000E4FF00EE00F0140EE80403E3EECFE4FFB8 :1013E000FBD700EE14F0140EE80403E3EECFE4FFA5 -:1013F000FBD731EC0EF09EA014D03BEC0EF00A0EA1 +:1013F000FBD75FEC0EF09EA018D069EC0EF00A0E41 :101400000001C327000EC423E80EC35D030EC459B8 -:1014100005E3C36BC46BC52B000EC623DEEC10F0D6 -:101420009E9044EC0EF002E2E16AE552E16EE55274 -:10143000E7CFD9FFE55200EE27F0140EE80403E3EE -:10144000E5CFEDFFFBD700EE13F0140EE80403E345 -:10145000E5CFEDFFFBD7E5CFFAFFE5CFF4FFE5CF12 -:10146000F3FFE5CFF5FFE5CFF7FFE5CFF6FFE5CFDB -:10147000EAFFE5CFE9FFE5CFDAFF1100D8CFE4FFBF -:10148000E0CFE4FFE46EDACFE4FFE2CFDAFFF3CFA0 -:10149000E4FFF4CFE4FFE5DB44EC0EF002E2E16AA6 -:1014A000E552E16EE552E7CFD9FFE552E5CFF4FF13 -:1014B000E5CFF3FFE5CFDAFFE550E5CFE0FFE5CF7D -:1014C000D8FF100004D85EEC04F03ED8FCD70F0E15 -:1014D000C112958602D828EF04F0E6DBE65298DBCD -:1014E0000001D76F070ED75D0EE1E66AECEC13F052 -:1014F000E552DF6E000EDF80CFDBE66A91EC14F080 -:10150000E552DF70C9DBD08EF28EF28C9D80F50E35 -:10151000E66E02EC14F0E552AEDBFC0E8B16941670 -:101520000001BD6BBE6BBF6BC06B010EC16F33ECB6 -:1015300011F08284E66A91EC14F0E5528294E5524F -:10154000E552E7CFD9FF1200D9CFE6FFE1CFD9FFAF -:10155000090EE1260001C15101E09FDA200E0001D1 -:10156000605D03E36D50020B01E076D20001BF51D4 -:10157000C01102E1000E08D0BFC0E9FFC0C0EAFF01 -:10158000EF50800B01E0010E000947E10001A65178 -:10159000EA6A860FE96E000EEA22EF5000083DE28B -:1015A0000501406B0001C251C22B0501416F0501CD -:1015B000040E426F0001A651EA6A860FE96E000E22 -:1015C000EA22EFCF43F5400EE66E400EE66E050EC2 -:1015D000E66E010EE66E010EE66E80EC08F0146E0B -:1015E000050EE15E1450F3CFBFF0F4CFC0F0000160 -:1015F000A651EA6A860FE96E000EEA22EF6A000140 -:10160000A651000803E20001A60707D00001A5517A -:10161000000803E200011F0EA66F0001BD51BE11BC -:1016200002E1000E08D0BDC0E9FFBEC0EAFFEF50E6 -:10163000800B01E0010E000901E00ED2050102510C -:10164000060A01E164D1040A17E0030A05E0010A71 -:1016500001E0C1D1FF0000D2E66AECEC13F0E552E4 -:10166000DF6E000EDB80DFCFE6FFE66ACCEC13F026 -:10167000E552E552FF00F0D10001BF51C01102E177 -:10168000000E08D0BFC0E9FFC0C0EAFFEF50800BDA -:1016900001E0010E000901E039D100C540F5050166 -:1016A000416B0501030E426F0501436B05010851B3 -:1016B0000E0A01E1FCD0030A01E1F4D0010A01E1C4 -:1016C000D6D0070A01E17ED00F0A71E0070A64E074 -:1016D000010A20E0030A06E0010A01E0EDD0D7C0CC -:1016E00048F5EDD00501486B5D0E146E280E156EA1 -:1016F000166A14C0E6FF15C0E6FF16C0E6FF480EE6 -:10170000E66E050EE66EB0EC13F0176E050EE15EA8 -:101710001750D5D00501486B510E146E280E156E6A -:10172000166A14C0E6FF15C0E6FF16C0E6FF480EB5 -:10173000E66E050EE66EB0EC13F0176E050EE15E78 -:1017400017504F0E146E280E156E166A14C0E6FF61 -:1017500015C0E6FF16C0E6FF480EE66E050EE66E03 -:10176000B0EC13F0176E050EE15E1750460E146EC6 -:10177000280E156E166A14C0E6FF15C0E6FF16C0E7 -:10178000E6FF480EE66E050EE66EB0EC13F0176E3F -:10179000050EE15E175093D092CF48F593CF49F5EF -:1017A00094CF4AF595CF4BF596CF4CF588D080CFA6 -:1017B00048F581CF49F582CF4AF583CF4BF584CFE9 -:1017C0004CF57DD0070EDB6A080EDB6A070EDBCF17 -:1017D00014F0080EDBCF15F0D890155004E6080E73 -:1017E000145C000E155842E2070EDBCFE6FF41EC19 -:1017F00011F0E552DE52F3CFDEFFF4CFDDFFDD5214 -:10180000020E086E096A070EDBCF0DF0080EDBCF63 -:101810000EF0C5EC0FF006C0E9FF07C0EAFF480E66 -:10182000E926050EEA22020EDBCFEFFF020E086E5C -:10183000096A070EDBCF0DF0080EDBCF0EF0C5EC0A -:101840000FF006C0E9FF07C0EAFF010EE926000E0F -:10185000EA22480EE926050EEA22010EDBCFEFFF51 -:10186000070EDB2A080E01E3DB2AB0D728D07BEC79 -:1018700011F0030E06C0DBFF040E07C0DBFF050EF0 -:1018800008C0DBFF060E09C0DBFF060EDBCF48F504 -:10189000050EDBCF49F5040EDBCF4AF5030EDBCF97 -:1018A0004BF50DD0BEEC11F00501486F08D0C8EC27 -:1018B00011F00501486F03D00501020E436F400E81 -:1018C000E66E400EE66E050EE66E010EE66E010E49 -:1018D000E66E80EC08F0146E050EE15E1450F3CF56 -:1018E000BFF0F4CFC0F0400EE66E000EE66E050EBF -:1018F000E66EE66A010EE66E80EC08F0146E050EE8 -:10190000E15E1450F3CFBDF0F4CFBEF0A5D00501D9 -:101910000851030A37E0010A25E0030A13E0010A2F -:1019200001E040D005010951921205010A519312BC -:1019300005010B51941205010C51951205010D5131 -:10194000961235D00501091D921605010A1D931640 -:1019500005010B1D941605010C1D951605010D1DA5 -:10196000961625D00501091D891605010A1D8A163E -:1019700005010B1D8B1605010C1D8C1605010D1D97 -:101980008D1615D005010951891205010A518A12D7 -:1019900005010B518B1205010C518C1205010D51E3 -:1019A0008D1205D0030EE66E5EEC14F0E552400E8B -:1019B000E66E000EE66E050EE66EE66A010EE66E57 -:1019C00080EC08F0146E050EE15E1450F3CFBDF00C -:1019D000F4CFBEF041D00001BF51C01102E1000EB2 -:1019E00008D0BFC0E9FFC0C0EAFFEF50800B01E0A4 -:1019F000010E000931E100C540F50501416B05010B -:101A0000030E426F0501010E436F400EE66E400E5D -:101A1000E66E050EE66E010EE66E010EE66E80ECD9 -:101A200008F0146E050EE15E1450F3CFBFF0F4CF52 -:101A3000C0F0400EE66E000EE66E050EE66EE66A3B -:101A4000010EE66E80EC08F0146E050EE15E145097 -:101A5000F3CFBDF0F4CFBEF0090EE15C02E2E16A23 -:101A6000E552E16EE552E7CFD9FF12000001C951FE -:101A7000CA110FE1C8EC11F0010A04E0010A04E107 -:101A8000827403D0828401D08294320E0001C96F27 -:101A9000CA6BC907000ECA5B12000001CB51CC1102 -:101AA00004E1100ECB6F270ECC6FCB07000ECC5B82 -:101AB0006DA207D0CB51CC112EE18B728BB213D01B -:101AC00027D00001605102E18B9222D0600502E133 -:101AD0008B8209D0020E605D02E18B8219D0040E68 -:101AE000605D03E18B928B801200100E605D06E159 -:101AF0000001CB51CC110FE18B720AD0200E605D3A -:101B00000AE10001CB51CC1106E18B728BA202D00D -:101B10008B9012008B801200120012001200120033 -:101B20004EEF12F012001E0EE66E010EE66E4EEC47 -:101B300008F0E552E552400EE66E000EE66E050E28 -:101B4000E66EE66A010EE66E80EC08F0146E050E95 -:101B5000E15E1450F3CFBDF0F4CFBEF012006D84FF -:101B60000001080ED86F070ED96FD807000ED95B99 -:101B7000D851D911FAE16D941200D9CFE6FFE1CF27 -:101B8000D9FFFD0EDBCF08F0FE0EDBCF09F0010E12 -:101B9000081801E1095033E0E868081802E1E86834 -:101BA00009182BE0030E081801E1095024E0040E87 -:101BB000081801E109501DE0020E081801E1095062 -:101BC00016E0170E081801E109500FE0160E08186C -:101BD00001E1095008E0150E081801E1095001E083 -:101BE00010D0A1DF0FD09EDF0DD09ADF0BD096DF93 -:101BF00009D092DF07D091DF05D091DF03D000003C -:101C000001D000D0010E00D0E552E7CFD9FF12007D -:101C10004BD8E652D0B202D0010E15D0D0B802D0C7 -:101C2000020E11D0D0B002D0030E0DD0D0B602D02B -:101C3000040E09D0FCAE02D0050E05D0FCAC02D0DB -:101C4000060E01D0070EDF6ED088D086D084D082F9 -:101C5000D080FC9EFC9CDF50E552E552E7CFD9FFD7 -:101C60001200E65221D8020EE126F350DF6E010E7B -:101C7000F4CFDBFF1200F00EE66ED80EE66E42ECFB -:101C800014F0E552E5521200DF50F36E010EDB5006 -:101C9000F46E020EE15C1200DFCFE6FFE66ACCECE8 -:101CA00013F0E552E5521200D9CFE6FFE1CFD9FF9C -:021CB000120020 -:0E1CB200019E08D0019E09AE05D0086C091EE7 -:101CC000E86A0922018E09C003F008C002F0136A15 -:101CD000126A8E0E046E056A74EF10F0016AB0ECA1 -:101CE00010F0C8EC10F001B658EF10F001A205D0CA -:101CF00001BA58EF10F05FEF10F001BA6BEF10F07F -:101D000001A005D001B858EF10F06BEF10F001B84A -:101D10005FEF10F0056A7F0E0A24046EE86A052260 -:101D20000F50045EE86A055A1A0E106E0A6A126AAB -:101D3000136A026A036A0C50075E0D50085A0E506F -:101D4000095A000E0A5A09E70C5007260D500822BE -:101D50000E500922000E0A2201D0128AD8900736AE -:101D6000083609360A36D89012361336023603364C -:101D7000102EE1D7095008100710D8A4128A74EF6A -:101D800010F0016AB0EC10F0C8EC10F001B658EF9A -:101D900010F001A205D001B858EF10F05FEF10F07D -:101DA00001AA05D001B058EF10F05FEF10F001B0BC -:101DB00002D001A802D06BEF10F0056A0F500A2480 -:101DC000046EE86A05227E0E045EE86A055A126A0D -:101DD000136A026A036A0E500902F4CF03F0F3CFCC -:101DE00002F00D500902F3501326F4500222000EA7 -:101DF00003220E500802F3501326F4500222000E64 -:101E000003220C500902F3501226F4501322000E44 -:101E1000022203220D500802F3501226F45013221E -:101E2000000E022203220E500702F3501226F45035 -:101E30001322000E022203220C500802F450122634 -:101E4000000E1322022203220D500702F450122624 -:101E5000000E13220222032274EF10F00F7E016A9B -:101E6000B0EC10F0C8EC10F001B658EF10F001A281 -:101E70000AD001AA03D001BE58EF10F001A464EF0C -:101E800010F061EF10F001AA05D001AC64EF10F082 -:101E900061EF10F001A00AD001A808D001BE04D063 -:101EA00001A402D06DEF10F071EF10F0126A056A14 -:101EB0000F500A5C116E10E307C013F008C002F067 -:101EC00009C003F00AC010F00CC007F00DC008F004 -:101ED0000EC009F0013A09D00CC013F00DC002F099 -:101EE0000EC003F00FC010F0116C019E01BC018EFA -:101EF00010C004F001B0A0EF10F01A0E1160A0EFB6 -:101F000010F0046A0A6A01A408D0076C081E091EB2 -:101F10000A1EE86A082209220A2201AC08D0136CC2 -:101F2000021E031E041EE86A022203220422066A1D -:101F3000115207E00A340932083207320632112EF4 -:101F4000F9D70750132608500222095003220A50DD -:101F5000042206C012F0019E04AE0BD0126C131EB8 -:101F6000021E031E041EE86A132202220322042218 -:101F7000018E04A006D0D88003320232133212320E -:101F8000102A10C004F074EF10F009C013F008C05C -:101F900012F008500D02F4CF07F0F3CF06F009500D -:101FA0000E02F4CF09F0F3CF08F00D02F35007262C -:101FB000F4500822E86A092212500E02F350072654 -:101FC000F4500822E86A09220EAEEBEF0FF012502F -:101FD000085E1350095A13AE000C0D50085E0E50E7 -:101FE000095A000C016AB0EC10F001B6FCEF0FF0DA -:101FF00001A20ED001B405D07F0E096EFF0E086E4F -:102000001FD0800E096E086A1BD0096A086A18D0B2 -:1020100001B0FBD78F0E0A60EDD77E0E0A64F5D7AC -:102020008E0E0A5C05E0D890093208320A2AF8D7E9 -:1020300001A406D0086C091EE86A092209AEE5D79A -:102040001200016AB0EC10F001B62BEF10F001A203 -:102050000FD001B407D07F0E096EFF0E086E076E19 -:10206000066E25D0800E096E01D0096A000EF6D7E3 -:1020700001B0FBD7066A9F0E0A60EBD77E0E0A649A -:10208000F4D79E0E0A5C07E0D89009320832073276 -:1020900006320A2AF6D701A40AD0066C071E081ECB -:1020A000091EE86A07220822092209AEDED71200BB -:1020B0007F0E0A6EFF0E096E086E076E12007F0E0D -:1020C00001BEFF0E0A6E02D07F0E0A6E800E096EF0 -:1020D000086A076AF3D701AE04D0800E0A6E096A57 -:1020E000F7D70A6A096AF4D70350021013101210C6 -:1020F000F8E005BEF0D703BE0CD004500510EBE0AD -:10210000D89012361336023603360406D8A00506D8 -:10211000F2D70550D4E10428D2E012AE11D07F0EE0 -:10212000121402E113A00CD0132AE86A022203223F -:1021300007E3D880033202321332042A0428BFE0B6 -:102140000450C9E013C007F002C008F00334096E60 -:1021500004300A6E09320A9E01BE0A8E5EEF10F04C -:1021600009360A3602E30184017E06E101800A6A2B -:10217000096A086A076A12000A2803E0D88009324F -:102180001200D890093202E1018212000186120089 -:102190000E360F3602E3018C017E06E101880F6ADC -:1021A0000E6A0D6A0C6A12000F2803E0D8800E3206 -:0C21B0001200D8900E32EAE1018A120001 -:0421BC000001BB5112 -:1021C000010A32E0010A4DE1BC51090A24E0010A8A -:1021D00020E00F0A1CE0010A18E0030A14E0010ADB -:1021E00010E0070A0CE0010A08E0030A04E0010A13 -:1021F00017E1870E11D08F0E0FD0970E0DD09F0EC6 -:102200000BD0A70E09D0AF0E07D0B70E05D0BF0E6A -:1022100003D0C70E01D0CF0EE66E79EC14F0E55274 -:102220000001010EBB6F1200D1EC14F000091AE19D -:10223000C1EC14F0F3CF14F0F4CF15F0BCC0E9FFFB -:10224000EA6AE9BEEA681DD914C0EEFF15C0EDFFC9 -:10225000090E0001BC5D02E1BC6B01D0BC2BBB6B65 -:102260001200BB6B120094948294050EE66E7C0EF5 -:10227000E66EEF0EE66E5FEC13F0E552E552E552C6 -:102280001200D9CFE6FFE1CFD9FFFE0EDBCFE9FF89 -:10229000EA6AE9BEEA68F5D8EECF22F0EFCF23F084 -:1022A00022C008F023C009F05BEC0EF007C01EF05E -:1022B00008C01FF009C020F00AC021F0D2D807C022 -:1022C0001AF008C01BF009C01CF00AC01DF0C0D8ED -:1022D00007C016F008C017F009C018F00AC019F0BE -:1022E000C8D8F2EC0FF008C0F3FF09C0F4FFE552C4 -:1022F000E7CFD9FF1200B7C008F0B8C009F05BEC17 -:102300000EF007C024F008C025F009C026F00AC06E -:1023100027F0A7D807C020F008C021F009C022F09C -:102320000AC023F095D807C01CF008C01DF009C0F2 -:102330001EF00AC01FF00C6A0D6A200E0E6E400ED1 -:102340000F6E2EEC0FF007C018F008C019F009C08E -:102350001AF00AC01BF08DD807C014F008C015F0A1 -:1023600009C016F00AC017F0550E0C6E0D6E0E6EF9 -:10237000410E0F6EC1EC0EF021EF10F00001BA35E6 -:1023800004E2B9519008010EBA5501E3000C010CAA -:10239000D9CFE6FFE1CFD9FF050EE126030E79D8AC -:1023A000DE6ADD6ADECF14F0DDCF15F0D89015506F -:1023B00004E6080E145C000E155833E2DFCFE6FF8A -:1023C00060DFE552020EF3CFDBFF030EF4CFDBFF3D -:1023D00036D804E6E40E145C0C0E155806E2040E22 -:1023E000DB50020802E2020E54D829D804E6F00EAF -:1023F000145C0A0E155806E2040EDB50010802E2D6 -:10240000010E47D81CD804E6640E145C000E155863 -:1024100003E2040EDB6A05D0DF2A010EC3E3DB2AE8 -:10242000C1D7040EDB50146E050EE15C02E2E16AD6 -:10243000E552E16E1450E552E7CFD9FF1200020ECB -:10244000DBCF14F0030EDBCF15F0D890155012003F -:102450000C6AC00E0D6E7F0E0E6E440E0F6E6EEF88 -:102460000EF00C6A0D6AA00E0E6E400E0F6EC1EFDC -:102470000EF00C6A0D6A7A0E0E6E440E0F6EC1EFEE -:102480000EF0D890E936EA36A70EE926000EEA22C9 -:0C2490001200F36E040EF3CFDBFF12000D -:04249C0004012051C6 -:1024A0001F0B010801E01200245101E01200060E8A -:1024B000215D21E12351230A1BE0010A0CE0030AFC -:1024C0001AE10001610517E100018E0E716F250E02 -:1024D000726F090E09D0000161050DE10001FB0ECC -:1024E000716F250E726F1D0E746F756BC00E02D06A -:1024F0000001800E736F04012051600BE842E84236 -:10250000E842E842E842010801E0120021510B0ACA -:1025100026E0080A19E0090A11E0080A05E00B0A9A -:1025200023E0080A21E012000001DA0E716F000EAC -:10253000726F010E746F756BC10E0FD00001800EAB -:10254000736F23C4DAF012000001DB0E716F000E0E -:10255000726F010E746F756B810E736F1200000144 -:0A256000800E736F22C4DBF012003E -:06256A0012010002000056 -:102570000008D80405000200010200010902290038 -:10258000010100C03209040000020300000009211B -:1025900011010001221D000705810340000107050C -:1025A0000103400001040309042C034D006F006285 -:1025B0000069006C006500200052006F0062006F2F -:1025C000007400200050006C006100740066006F11 -:1025D0000072006D00260342006100740074006503 -:1025E000007200790020004D006F006E00690074D9 -:1025F000006F00720069006E0067000600FF0901AD -:10260000A10119012940150026FF00750895408198 -:1026100000190129409100C07C25A525A925D525B3 -:102620002A0EF66E080EF76E000EF86E0001090015 -:10263000F550D26F0900F550D36F03E1D26701D096 -:102640003DD00900F550CD6F0900F550CE6F09005F -:10265000F550CF6F09000900F550E96E0900F550FB -:10266000EA6E090009000900F550D06F0900F55025 -:10267000D16F09000900F6CFD4F0F7CFD5F0F8CF2D -:10268000D6F0CDC0F6FFCEC0F7FFCFC0F8FF0001F7 -:10269000D05302E1D15307E00900F550EE6ED007A8 -:1026A000F8E2D107F9D7D4C0F6FFD5C0F7FFD6C0FE -:0E26B000F8FF0001D207000ED35BBFD7120067 -:0226BE00D9CF72 -:1026C000E6FFDACFE6FFE1CFD9FFE2CFDAFFC26A59 -:1026D000C06AFC0EDB407F0B3C0BC26EFB0EDBCFF7 -:1026E000E6FFFC0EDB38F00B300BE552E710C16E55 -:1026F000FD0EDB50040DF350380B156EFD0EDB386C -:102700000F0B070B146EFD0EDB50800B1410151011 -:10271000C06EFC0EDBAE03D09E9C9D8CF28CC28002 -:0C272000E552E5CFDAFFE7CFD9FF120049 -:04272C00FE0EE3CFEB -:10273000E9FFFF0EE3CFEAFFE9CFF3FFEACFF4FFB3 -:10274000FB0EE35003E1FC0EE35009E0FB0EE30651 -:1027500002E2FC0EE306FD0EE350EE6EF1D712002E -:10276000FB0EE3CFF6FFFC0EE3CFF7FFFD0EE3CF4A -:10277000F8FFFE0EE3CFE9FFFF0EE3CFEAFFE9CF5C -:10278000F3FFEACFF4FFEE66FED7ED520900F5CF76 -:08279000EFFFEE66FBD712001B -:082798002DD8FD0EDB50A86EE8 -:1027A000A69EA69CA684F250800B01E0010E0001BB -:1027B000DC6FF29E550EA76EAA0EA76EA682DC51A4 -:1027C000E8B0F28EE8A0F29EA6B2FED7A198A69439 -:1027D000E552E7CFD9FF12000DD8A69EA69CA68091 -:1027E000020EE66EB6EC14F0E552A850E552E7CFC3 -:1027F000D9FF1200D9CFE6FFE1CFD9FFFE0EDB50A3 -:04280000A96E1200AB -:0C280400D9CFE6FFDACFE6FFE1CFD9FF25 -:10281000E2CFDAFFFD0EDB507E0BCD6EFD0EDBACA2 -:1028200002D0CD8E01D0CD9ECF6ACE6A9E90DBAE17 -:1028300002D09D8001D09D90CD80E552E5CFDAFF9A -:06284000E7CFD9FF1200F2 -:0A28460032313A35353A35380020BA -:10285000004D6172203130203230313000426174DD -:1028600074657279204D6F6E69746F72696E67203E -:10287000312E300A4F6C69766965722042494348AF -:042880004C45520071 -:0C288400D9CFE6FFDACFE6FFE1CFD9FFA5 -:10289000E2CFDAFFE652E652FC0EDBCFDEFFDBCF03 -:1028A000DDFF010EDB50CF6EDF50CE6EE552E552FC -:0C28B000E552E5CFDAFFE7CFD9FF1200B8 -:0428BC00D9CFE6FF8B -:1028C000E1CFD9FF00010ED8EF50000803E2A6299E -:1028D0001F0BA66F07D8FE0EDBCFEFFFE552E7CF49 -:1028E000D9FF1200A651EA6A860FE96E000EEA22AD -:0228F0001200D4 -:0E28F200D9CFE6FFDACFE6FFE1CFD9FFE2CF84 -:10290000DAFFFD0EDB407F0B3C0B146EC30EC214CE -:102910001410C26EC282E552E5CFDAFFE7CFD9FFCD -:022920001200A3 -:0E292200FF0EE350296EEF0E01D0F30EE76EAC -:10293000E72E98EF14F00C0E286EE76AE72E9EEF54 -:1029400014F0282E9DEF14F0292E96EF14F01200AB -:1029500013EE00F023EE00F0F86A019C10EC13F087 -:0C296000D6EC14F062EC0AF0FBD7120079 -:04296C00FF0EE35027 -:10297000E84E1200000000D000D000D0E82EFAD7B8 -:02298000120043 -:0E298200C450176E166AC3501610F36E17C0BD -:04299000F4FF12003E -:0C29940000EE00F00F0EEE6AEA62FDD7C4 -:0229A000120023 -:0A29A200C250020B01E0010E12000A -:0229AC00120017 -:0229AE00000027 -:1029B0000000000000000000000000000000000017 -:0429C0000000000013 -:0C29C40000000000010000000000000006 -:0429D0000000000003 -:0C29D400000000000000000000000000F7 -:1029E00000000000000000000000000000000000E7 -:0529F0000000000000E2 +:1014100005E3C36BC46BC52B000EC6230CEC11F0A7 +:101420000001C75101E050DB9E9072EC0EF002E229 +:10143000E16AE552E16EE552E7CFD9FFE55200EEF1 +:1014400027F0140EE80403E3E5CFEDFFFBD700EE31 +:1014500013F0140EE80403E3E5CFEDFFFBD7E5CF6F +:10146000FAFFE5CFF4FFE5CFF3FFE5CFF5FFE5CFDA +:10147000F7FFE5CFF6FFE5CFEAFFE5CFE9FFE5CFE0 +:10148000DAFF1100D8CFE4FFE0CFE4FFE46EDACF5B +:10149000E4FFE2CFDAFFF3CFE4FFF4CFE4FF5FEC49 +:1014A0000EF072EC0EF002E2E16AE552E16EE552F6 +:1014B000E7CFD9FFE552E5CFF4FFE5CFF3FFE5CF66 +:1014C000DAFFE550E5CFE0FFE5CFD8FF100004D804 +:1014D0005EEC04F04BD8FCD70F0EC112958602D8F3 +:1014E00028EF04F082EC0EF0E652C0DB0001D86F6A +:1014F000070ED85D10E1E66A1AEC14F0E552DF6ED3 +:10150000000EDF807AEC0EF0E66ABFEC14F0E552D4 +:10151000DF707AEC0EF0D08EF28EF28C9D80F50E9C +:10152000E66E30EC14F0E552D4DBFC0E8B1694160C +:101530000001BD6BBE6BBF6BC06B010EC16F61EC78 +:1015400011F0010EE66E1AEC14F0E552010B0001E9 +:10155000C76FC75105E08284E66ABFEC14F0E5521C +:101560008294E552E552E7CFD9FF1200D9CFE6FFCA +:10157000E1CFD9FF090EE1260001C15101E0BBDA3C +:10158000200E0001605D03E36D50020B01E092D27A +:101590000001BF51C01102E1000E08D0BFC0E9FF39 +:1015A000C0C0EAFFEF50800B01E0010E000947E1E7 +:1015B0000001A651EA6A860FE96E000EEA22EF509A +:1015C00000083DE20501406B0001C251C22B05013C +:1015D000416F0501040E426F0001A651EA6A860FB1 +:1015E000E96E000EEA22EFCF43F5400EE66E400EA4 +:1015F000E66E050EE66E010EE66E010EE66E80ECFE +:1016000008F0146E050EE15E1450F3CFBFF0F4CF76 +:10161000C0F00001A651EA6A860FE96E000EEA22C8 +:10162000EF6A0001A651000803E20001A60707D0F7 +:101630000001A551000803E200011F0EA66F000182 +:10164000BD51BE1102E1000E08D0BDC0E9FFBEC011 +:10165000EAFFEF50800B01E0010E000901E02AD201 +:1016600005010251060A01E164D1040A17E0030AE8 +:1016700005E0010A01E0DDD1FF001CD2E66A1AECA8 +:1016800014F0E552DF6E000EDB80DFCFE6FFE66A86 +:10169000FAEC13F0E552E552FF000CD20001BF5105 +:1016A000C01102E1000E08D0BFC0E9FFC0C0EAFFD0 +:1016B000EF50800B01E0010E000901E039D100C5B7 +:1016C00040F50501416B0501030E426F0501436BB7 +:1016D000050108510E0A01E1FCD0030A01E1F4D032 +:1016E000010A01E1D6D0070A01E17ED00F0A71E0BC +:1016F000070A64E0010A20E0030A06E0010A01E0AB +:10170000EDD0D8C048F5EDD00501486BB90E146E88 +:10171000280E156E166A14C0E6FF15C0E6FF16C047 +:10172000E6FF480EE66E050EE66EDEEC13F0176E71 +:10173000050EE15E1750D5D00501486BAD0E146E55 +:10174000280E156E166A14C0E6FF15C0E6FF16C017 +:10175000E6FF480EE66E050EE66EDEEC13F0176E41 +:10176000050EE15E1750AB0E146E280E156E166A4C +:1017700014C0E6FF15C0E6FF16C0E6FF480EE66E91 +:10178000050EE66EDEEC13F0176E050EE15E1750E7 +:10179000A20E146E280E156E166A14C0E6FF15C050 +:1017A000E6FF16C0E6FF480EE66E050EE66EDEECBE +:1017B00013F0176E050EE15E175093D092CF48F5E7 +:1017C00093CF49F594CF4AF595CF4BF596CF4CF58D +:1017D00088D080CF48F581CF49F582CF4AF583CFB5 +:1017E0004BF584CF4CF57DD0070EDB6A080EDB6A23 +:1017F000070EDBCF14F0080EDBCF15F0D890155094 +:1018000004E6080E145C000E155842E2070EDBCF0A +:10181000E6FF6FEC11F0E552DE52F3CFDEFFF4CFBE +:10182000DDFFDD52020E086E096A070EDBCF0DF0F8 +:10183000080EDBCF0EF0F3EC0FF006C0E9FF07C097 +:10184000EAFF480EE926050EEA22020EDBCFEFFF83 +:10185000020E086E096A070EDBCF0DF0080EDBCF13 +:101860000EF0F3EC0FF006C0E9FF07C0EAFF010E2F +:10187000E926000EEA22480EE926050EEA22010EAC +:10188000DBCFEFFF070EDB2A080E01E3DB2AB0D720 +:1018900028D0A9EC11F0030E06C0DBFF040E07C030 +:1018A000DBFF050E08C0DBFF060E09C0DBFF060EDE +:1018B000DBCF48F5050EDBCF49F5040EDBCF4AF54B +:1018C000030EDBCF4BF50DD0ECEC11F00501486FAA +:1018D00008D0F6EC11F00501486F03D00501020EA7 +:1018E000436F400EE66E400EE66E050EE66E010E8C +:1018F000E66E010EE66E80EC08F0146E050EE15EF9 +:101900001450F3CFBFF0F4CFC0F0400EE66E000EDF +:10191000E66E050EE66EE66A010EE66E80EC08F0F5 +:10192000146E050EE15E1450F3CFBDF0F4CFBEF09F +:10193000C1D005010851060A49E0050A37E0010A4D +:1019400025E0030A13E0010A01E05AD0050109511C +:10195000921205010A51931205010B5194120501CF +:101960000C51951205010D5196124FD00501091D1C +:10197000921605010A1D931605010B1D941605010B +:101980000C1D951605010D1D96163FD00501091D6C +:10199000891605010A1D8A1605010B1D8B16050106 +:1019A0000C1D8C1605010D1D8D162FD0050109513A +:1019B000891205010A518A1205010B518B1205018A +:1019C0000C518C1205010D518D121FD0010EE66EC7 +:1019D0001AEC14F0E552DF6E0501095103E0000E28 +:1019E000DB8001D0DF70DFCFE6FF010EE66EFAECA0 +:1019F00013F0E552E552010EDF140001C76F05D068 +:101A0000030EE66E8CEC14F0E552400EE66E000E0E +:101A1000E66E050EE66EE66A010EE66E80EC08F0F4 +:101A2000146E050EE15E1450F3CFBDF0F4CFBEF09E +:101A300041D00001BF51C01102E1000E08D0BFC06B +:101A4000E9FFC0C0EAFFEF50800B01E0010E000982 +:101A500031E100C540F50501416B0501030E426F00 +:101A60000501010E436F400EE66E400EE66E050E58 +:101A7000E66E010EE66E010EE66E80EC08F0146E66 +:101A8000050EE15E1450F3CFBFF0F4CFC0F0400E6E +:101A9000E66E000EE66E050EE66EE66A010EE66E76 +:101AA00080EC08F0146E050EE15E1450F3CFBDF02B +:101AB000F4CFBEF0090EE15C02E2E16AE552E16EAC +:101AC000E552E7CFD9FF12000001CA51CB110FE157 +:101AD000F6EC11F0010A04E0010A04E1827403D07B +:101AE000828401D08294320E0001CA6FCB6BCA0788 +:101AF000000ECB5B12000001CC51CD1104E1100EA1 +:101B0000CC6F270ECD6FCC07000ECD5B6DA207D03A +:101B1000CC51CD112EE18B728BB213D027D00001A6 +:101B2000605102E18B9222D0600502E18B8209D0E4 +:101B3000020E605D02E18B8219D0040E605D03E14C +:101B40008B928B801200100E605D06E10001CC517B +:101B5000CD110FE18B720AD0200E605D0AE1000109 +:101B6000CC51CD1106E18B728BA202D08B9012006A +:101B70008B80120012001200120012007CEF12F093 +:101B800012001E0EE66E010EE66E4EEC08F0E552F7 +:101B9000E552400EE66E000EE66E050EE66EE66A53 +:101BA000010EE66E80EC08F0146E050EE15E145036 +:101BB000F3CFBDF0F4CFBEF012006D840001080E2B +:101BC000D96F070EDA6FD907000EDA5BD951DA1137 +:101BD000FAE16D941200D9CFE6FFE1CFD9FFFD0EF7 +:101BE000DBCF08F0FE0EDBCF09F0010E081801E193 +:101BF000095033E0E868081802E1E86809182BE0AA +:101C0000030E081801E1095024E0040E081801E150 +:101C100009501DE0020E081801E1095016E0170EE8 +:101C2000081801E109500FE0160E081801E10950EB +:101C300008E0150E081801E1095001E010D0A1DFFD +:101C40000FD09EDF0DD09ADF0BD096DF09D092DF48 +:101C500007D091DF05D091DF03D0000001D000D084 +:101C6000010E00D0E552E7CFD9FF12004BD8E65263 +:101C7000D0B202D0010E15D0D0B802D0020E11D0D1 +:101C8000D0B002D0030E0DD0D0B602D0040E09D0D1 +:101C9000FCAE02D0050E05D0FCAC02D0060E01D081 +:101CA000070EDF6ED088D086D084D082D080FC9E94 +:101CB000FC9CDF50E552E552E7CFD9FF1200E65217 +:101CC00021D8020EE126F350DF6E010EF4CFDBFFC8 +:101CD0001200F00EE66ED80EE66E70EC14F0E552CF +:101CE000E5521200DF50F36E010EDB50F46E020E6F +:101CF000E15C1200DFCFE6FFE66AFAEC13F0E55292 +:0E1D0000E5521200D9CFE6FFE1CFD9FF120065 +:021D0E00019E34 +:101D100008D0019E09AE05D0086C091EE86A0922A8 +:101D2000018E09C003F008C002F0136A126A8E0E19 +:101D3000046E056AA2EF10F0016ADEEC10F0F6EC1A +:101D400010F001B686EF10F001A205D001BA86EFBF +:101D500010F08DEF10F001BA99EF10F001A005D04E +:101D600001B886EF10F099EF10F001B88DEF10F088 +:101D7000056A7F0E0A24046EE86A05220F50045E8D +:101D8000E86A055A1A0E106E0A6A126A136A026A23 +:101D9000036A0C50075E0D50085A0E50095A000E87 +:101DA0000A5A09E70C5007260D5008220E50092246 +:101DB000000E0A2201D0128AD8900736083609365A +:101DC0000A36D8901236133602360336102EE1D773 +:101DD000095008100710D8A4128AA2EF10F0016A67 +:101DE000DEEC10F0F6EC10F001B686EF10F001A278 +:101DF00005D001B886EF10F08DEF10F001AA05D0E4 +:101E000001B086EF10F08DEF10F001B002D001A804 +:101E100002D099EF10F0056A0F500A24046EE86AA8 +:101E200005227E0E045EE86A055A126A136A026A87 +:101E3000036A0E500902F4CF03F0F3CF02F00D5005 +:101E40000902F3501326F4500222000E03220E5012 +:101E50000802F3501326F4500222000E03220C5005 +:101E60000902F3501226F4501322000E022203221C +:101E70000D500802F3501226F4501322000E0222D5 +:101E800003220E500702F3501226F4501322000EC4 +:101E9000022203220C500802F4501226000E1322D4 +:101EA000022203220D500702F4501226000E1322C4 +:101EB00002220322A2EF10F00F7E016ADEEC10F086 +:101EC000F6EC10F001B686EF10F001A20AD001AADC +:101ED00003D001BE86EF10F001A492EF10F08FEF57 +:101EE00010F001AA05D001AC92EF10F08FEF10F0C6 +:101EF00001A00AD001A808D001BE04D001A402D0DC +:101F00009BEF10F09FEF10F0126A056A0F500A5C09 +:101F1000116E10E307C013F008C002F009C003F00F +:101F20000AC010F00CC007F00DC008F00EC009F098 +:101F3000013A09D00CC013F00DC002F00EC003F03E +:101F40000FC010F0116C019E01BC018E10C004F096 +:101F500001B0CEEF10F01A0E1160CEEF10F0046A4F +:101F60000A6A01A408D0076C081E091E0A1EE86A46 +:101F7000082209220A2201AC08D0136C021E031E9B +:101F8000041EE86A022203220422066A115207E0B4 +:101F90000A340932083207320632112EF9D70750B7 +:101FA000132608500222095003220A50042206C0B8 +:101FB00012F0019E04AE0BD0126C131E021E031E03 +:101FC000041EE86A1322022203220422018E04A0C6 +:101FD00006D0D8800332023213321232102A10C0D7 +:101FE00004F0A2EF10F009C013F008C012F008507E +:101FF0000D02F4CF07F0F3CF06F009500E02F4CF34 +:1020000009F0F3CF08F00D02F3500726F450082230 +:10201000E86A092212500E02F3500726F4500822F3 +:10202000E86A09220EAE19EF10F01250085E135044 +:10203000095A13AE000C0D50085E0E50095A000CE0 +:10204000016ADEEC10F001B62AEF10F001A20ED00A +:1020500001B405D07F0E096EFF0E086E1FD0800EF2 +:10206000096E086A1BD0096A086A18D001B0FBD74C +:102070008F0E0A60EDD77E0E0A64F5D78E0E0A5CCD +:1020800005E0D890093208320A2AF8D701A406D010 +:10209000086C091EE86A092209AEE5D71200016A38 +:1020A000DEEC10F001B659EF10F001A20FD001B430 +:1020B00007D07F0E096EFF0E086E076E066E25D0E4 +:1020C000800E096E01D0096A000EF6D701B0FBD769 +:1020D000066A9F0E0A60EBD77E0E0A64F4D79E0E46 +:1020E0000A5C07E0D89009320832073206320A2A21 +:1020F000F6D701A40AD0066C071E081E091EE86A5E +:1021000007220822092209AEDED712007F0E0A6ECE +:10211000FF0E096E086E076E12007F0E01BEFF0EE5 +:102120000A6E02D07F0E0A6E800E096E086A076A78 +:10213000F3D701AE04D0800E0A6E096AF7D70A6A97 +:10214000096AF4D70350021013101210F8E005BE0C +:10215000F0D703BE0CD004500510EBE0D890123637 +:102160001336023603360406D8A00506F2D705500A +:10217000D4E10428D2E012AE11D07F0E121402E195 +:1021800013A00CD0132AE86A0222032207E3D880A6 +:10219000033202321332042A0428BFE00450C9E09B +:1021A00013C007F002C008F00334096E04300A6E51 +:1021B00009320A9E01BE0A8E8CEF10F009360A36EB +:1021C00002E30184017E06E101800A6A096A086A65 +:1021D000076A12000A2803E0D88009321200D8905A +:1021E000093202E101821200018612000E360F361A +:1021F00002E3018C017E06E101880F6A0E6A0D6A16 +:102200000C6A12000F2803E0D8800E321200D8901A +:082210000E32EAE1018A12001E +:082218000001BB51010A32E094 +:10222000010A4DE1BC51090A24E0010A20E00F0A2D +:102230001CE0010A18E0030A14E0010A10E0070A92 +:102240000CE0010A08E0030A04E0010A17E1870E26 +:1022500011D08F0E0FD0970E0DD09F0E0BD0A70E62 +:1022600009D0AF0E07D0B70E05D0BF0E03D0C70EF2 +:1022700001D0CF0EE66EA7EC14F0E5520001010E7E +:10228000BB6F1200FFEC14F000091AE1EFEC14F040 +:10229000F3CF14F0F4CF15F0BCC0E9FFEA6AE9BE51 +:1022A000EA681DD914C0EEFF15C0EDFF090E00014C +:1022B000BC5D02E1BC6B01D0BC2BBB6B1200BB6BE5 +:1022C000120094948294050EE66E7C0EE66EEF0E7C +:1022D000E66E8DEC13F0E552E552E5521200D9CFCF +:1022E000E6FFE1CFD9FFFE0EDBCFE9FFEA6AE9BEE8 +:1022F000EA68F5D8EECF22F0EFCF23F022C008F045 +:1023000023C009F089EC0EF007C01EF008C01FF0D2 +:1023100009C020F00AC021F0D2D807C01AF008C0C6 +:102320001BF009C01CF00AC01DF0C0D807C016F091 +:1023300008C017F009C018F00AC019F0C8D820EC7E +:1023400010F008C0F3FF09C0F4FFE552E7CFD9FF52 +:102350001200B7C008F0B8C009F089EC0EF007C051 +:1023600024F008C025F009C026F00AC027F0A7D83D +:1023700007C020F008C021F009C022F00AC023F0F5 +:1023800095D807C01CF008C01DF009C01EF00AC097 +:102390001FF00C6A0D6A200E0E6E400E0F6E5CEC84 +:1023A0000FF007C018F008C019F009C01AF00AC0F1 +:1023B0001BF08DD807C014F008C015F009C016F046 +:1023C0000AC017F0550E0C6E0D6E0E6E410E0F6E9C +:1023D000EFEC0EF04FEF10F00001BA3504E2B95106 +:1023E0009008010EBA5501E3000C010CD9CFE6FFAD +:1023F000E1CFD9FF050EE126030E79D8DE6ADD6A4A +:10240000DECF14F0DDCF15F0D890155004E6080E9D +:10241000145C000E155833E2DFCFE6FF60DFE552B3 +:10242000020EF3CFDBFF030EF4CFDBFF36D804E65A +:10243000E40E145C0C0E155806E2040EDB50020884 +:1024400002E2020E54D829D804E6F00E145C0A0EFB +:10245000155806E2040EDB50010802E2010E47D8CF +:102460001CD804E6640E145C000E155803E2040E3A +:10247000DB6A05D0DF2A010EC3E3DB2AC1D7040ED5 +:10248000DB50146E050EE15C02E2E16AE552E16E9A +:102490001450E552E7CFD9FF1200020EDBCF14F043 +:1024A000030EDBCF15F0D890155012000C6AC00E49 +:1024B0000D6E7F0E0E6E440E0F6E9CEF0EF00C6ACA +:1024C0000D6AA00E0E6E400E0F6EEFEF0EF00C6A4E +:1024D0000D6A7A0E0E6E440E0F6EEFEF0EF0D8906E +:1024E000E936EA36A70EE926000EEA221200F36E5C +:0824F000040EF3CFDBFF120024 +:0824F800040120511F0B010833 +:1025000001E01200245101E01200060E215D21E1DC +:102510002351230A1BE0010A0CE0030A1AE100011F +:10252000610517E10001EA0E716F250E726F090E49 +:1025300009D0000161050DE10001570E716F260EF3 +:10254000726F1D0E746F756BC00E02D00001800E8D +:10255000736F04012051600BE842E842E842E84210 +:10256000E842010801E0120021510B0A26E0080AA6 +:1025700019E0090A11E0080A05E00B0A23E0080A3D +:1025800021E012000001DB0E716F000E726F010E70 +:10259000746F756BC10E0FD00001800E736F23C472 +:1025A000DBF012000001DC0E716F000E726F010E85 +:1025B000746F756B810E736F12000001800E736F64 +:0625C00022C4DCF0120051 +:0A25C6001201000200000008D80412 +:1025D000050002000102000109022900010100C0FA +:1025E000320904000002030000000921110100016A +:1025F000221D00070581034000010705010340007B +:1026000001040309042C034D006F00620069006C93 +:10261000006500200052006F0062006F007400200F +:102620000050006C006100740066006F0072006D65 +:102630000026034200610074007400650072007996 +:102640000020004D006F006E00690074006F007282 +:102650000069006E0067000600FF0901A101190171 +:102660002940150026FF00750895408100190129B1 +:0C267000409100C0D82501260526312627 +:04267C002A0EF66EBE +:10268000080EF76E000EF86E00010900F550D36FCA +:102690000900F550D46F03E1D36701D03DD00900A4 +:1026A000F550CE6F0900F550CF6F0900F550D06F8F +:1026B00009000900F550E96E0900F550EA6E0900BD +:1026C00009000900F550D16F0900F550D26F0900DB +:1026D0000900F6CFD5F0F7CFD6F0F8CFD7F0CEC0BF +:1026E000F6FFCFC0F7FFD0C0F8FF0001D15302E1E1 +:1026F000D25307E00900F550EE6ED107F8E2D20799 +:10270000F9D7D5C0F6FFD6C0F7FFD7C0F8FF000154 +:0A271000D307000ED45BBFD7120000 +:06271A00D9CFE6FFDACF83 +:10272000E6FFE1CFD9FFE2CFDAFFC26AC06AFC0E52 +:10273000DB407F0B3C0BC26EFB0EDBCFE6FFFC0EDB +:10274000DB38F00B300BE552E710C16EFD0EDB50AD +:10275000040DF350380B156EFD0EDB380F0B070B15 +:10276000146EFD0EDB50800B14101510C06EFC0EA5 +:10277000DBAE03D09E9C9D8CF28CC280E552E5CFEF +:08278000DAFFE7CFD9FF1200D8 +:08278800FE0EE3CFE9FFFF0E96 +:10279000E3CFEAFFE9CFF3FFEACFF4FFFB0EE3500C +:1027A00003E1FC0EE35009E0FB0EE30602E2FC0E3F +:1027B000E306FD0EE350EE6EF1D71200FB0EE3CF01 +:1027C000F6FFFC0EE3CFF7FFFD0EE3CFF8FFFE0EA2 +:1027D000E3CFE9FFFF0EE3CFEAFFE9CFF3FFEACF54 +:1027E000F4FFEE66FED7ED520900F5CFEFFFEE667F +:0427F000FBD7120001 +:0C27F4002DD8FD0EDB50A86EA69EA69C02 +:10280000A684F250800B01E0010E0001DD6FF29E04 +:10281000550EA76EAA0EA76EA682DD51E8B0F28E05 +:10282000E8A0F29EA6B2FED7A198A694E552E7CF03 +:10283000D9FF12000DD8A69EA69CA680020EE66EB9 +:10284000E4EC14F0E552A850E552E7CFD9FF1200AE +:10285000D9CFE6FFE1CFD9FFFE0EDB50A96E120003 +:10286000D9CFE6FFDACFE6FFE1CFD9FFE2CFDAFF3B +:10287000FD0EDB507E0BCD6EFD0EDBAC02D0CD8E9F +:1028800001D0CD9ECF6ACE6A9E90DBAE02D09D80F5 +:1028900001D09D90CD80E552E5CFDAFFE7CFD9FF9B +:0228A000120024 +:0E28A20031393A30363A34310020004D617938 +:1028B00020303420323031300042617474657279D6 +:1028C000204D6F6E69746F72696E6720312E300A09 +:1028D0004F6C697669657220424943484C45520005 +:1028E000D9CFE6FFDACFE6FFE1CFD9FFE2CFDAFFBB +:1028F000E652E652FC0EDBCFDEFFDBCFDDFF010E42 +:10290000DB50CF6EDF50CE6EE552E552E552E5CF9B +:08291000DAFFE7CFD9FF120046 +:08291800D9CFE6FFE1CFD9FFA2 +:1029200000010ED8EF50000803E2A6291F0BA66F86 +:1029300007D8FE0EDBCFEFFFE552E7CFD9FF12003D +:0E294000A651EA6A860FE96E000EEA22120026 +:02294E00D9CFDF +:10295000E6FFDACFE6FFE1CFD9FFE2CFDAFFFD0EE7 +:10296000DB407F0B3C0B146EC30EC2141410C26EFE +:0E297000C282E552E5CFDAFFE7CFD9FF1200B1 +:02297E00FF0E4A +:10298000E350296EEF0E01D0F30EE76EE72EC6EF8F +:1029900014F00C0E286EE76AE72ECCEF14F0282E08 +:0C29A000CBEF14F0292EC4EF14F012004D +:0429AC0013EE00F036 +:1029B00023EE00F0F86A019C3EEC13F004EC15F0F5 +:0829C00067EC0AF0FBD71200DE +:0829C800FF0EE350E84E12007F +:0E29D000000000D000D000D0E82EFAD7120090 +:0229DE00C450E3 +:1029E000176E166AC3501610F36E17C0F4FF12006C +:0E29F00000EE00F00F0EEE6AEA62FDD7120054 +:0229FE00C250C5 +:082A0000020B01E0010E1200BF +:022A08001200BA +:062A0A00000000000000C6 +:102A100000000000000000000000000000000000B6 +:102A200000000000010000000000010000000000A4 +:012A300000A5 +:0F2A310000000000000000000000000000000096 +:102A40000000000000000000000000000000000086 +:022A5000000084 :00000001FF diff --git a/elec/boards/Monitoring_Battery/Firmware/output/Battery_Monitoring.map b/elec/boards/Monitoring_Battery/Firmware/output/Battery_Monitoring.map index 83510bc..6cec904 100644 --- a/elec/boards/Monitoring_Battery/Firmware/output/Battery_Monitoring.map +++ b/elec/boards/Monitoring_Battery/Firmware/output/Battery_Monitoring.map @@ -1,5 +1,5 @@ MPLINK 4.21, Linker -Linker Map File - Created Wed Mar 10 21:56:01 2010 +Linker Map File - Created Tue May 04 19:06:44 2010 Section Info Section Type Address Location Size(Bytes) @@ -12,58 +12,58 @@ REMAPPED_HIGH_INTERRUPT_VECTOR code 0x000808 program 0x000006 REMAPPED_LOW_INTERRUPT_VECTOR code 0x000818 program 0x000006 .cinit romdata 0x00082a program 0x000026 .code_usb_device.o code 0x000850 program 0x000b5a - .code_main.o code 0x0013aa program 0x000908 - PROG code 0x001cb2 program 0x00050a - .code_monitor.o code 0x0021bc program 0x0002e0 - .code_usb_function_hid.o code 0x00249c program 0x0000ce -.romdata_usb_descriptors.o romdata 0x00256a program 0x0000b6 - _cinit_scn code 0x002620 program 0x00009e - .code_adcopen.o code 0x0026be program 0x00006e - STRING code 0x00272c program 0x00006c - .code_eeprom.o code 0x002798 program 0x00006c - .code_t1open.o code 0x002804 program 0x000042 - .stringtable romdata 0x002846 program 0x00003e - .code_t1write.o code 0x002884 program 0x000038 - .code_error.o code 0x0028bc program 0x000036 - .code_adcselchconv.o code 0x0028f2 program 0x000030 - D10KTCYXCODE code 0x002922 program 0x00002e - _startup_scn code 0x002950 program 0x00001c - D10TCYXCODE code 0x00296c program 0x000016 - .code_adcread.o code 0x002982 program 0x000012 - .code code 0x002994 program 0x00000e - .code_adcbusy.o code 0x0029a2 program 0x00000a - .code___init.o code 0x0029ac program 0x000002 - .romdata_adcread.o romdata 0x0029ae program 0x000000 - .romdata_adcselchconv.o romdata 0x0029ae program 0x000000 - .romdata_t1open.o romdata 0x0029ae program 0x000000 - .idata_t1write.o_i romdata 0x0029ae program 0x000000 - .idata_t1open.o_i romdata 0x0029ae program 0x000000 - .romdata_t1write.o romdata 0x0029ae program 0x000000 - .romdata___init.o romdata 0x0029ae program 0x000000 - .romdata_adcopen.o romdata 0x0029ae program 0x000000 - .romdata_c018i.o romdata 0x0029ae program 0x000000 -.idata_usb_descriptors.o_i romdata 0x0029ae program 0x000000 - .romdata_main.o romdata 0x0029ae program 0x000000 - .romdata_eeprom.o romdata 0x0029ae program 0x000000 - .idata_usb_device.o_i romdata 0x0029ae program 0x000000 - .romdata_usb_device.o romdata 0x0029ae program 0x000000 -.idata_usb_function_hid.o_i romdata 0x0029ae program 0x000000 -.romdata_usb_function_hid.o romdata 0x0029ae program 0x000000 - .romdata_error.o romdata 0x0029ae program 0x000000 - .idata_monitor.o_i romdata 0x0029ae program 0x000016 - .romdata_monitor.o romdata 0x0029ae program 0x000000 - .romdata_adcbusy.o romdata 0x0029ae program 0x000000 - .idata_main.o_i romdata 0x0029c4 program 0x000010 - .idata_error.o_i romdata 0x0029d4 program 0x000021 - .idata_adcread.o_i romdata 0x0029f5 program 0x000000 - .idata_adcselchconv.o_i romdata 0x0029f5 program 0x000000 - .idata_adcopen.o_i romdata 0x0029f5 program 0x000000 - .idata_eeprom.o_i romdata 0x0029f5 program 0x000000 - .idata___init.o_i romdata 0x0029f5 program 0x000000 - .idata_adcbusy.o_i romdata 0x0029f5 program 0x000000 - .idata_c018i.o_i romdata 0x0029f5 program 0x000000 - .code_usb_descriptors.o code 0x0029f6 program 0x000000 - .code_c018i.o code 0x0029f6 program 0x000000 + .code_main.o code 0x0013aa program 0x000964 + PROG code 0x001d0e program 0x00050a + .code_monitor.o code 0x002218 program 0x0002e0 + .code_usb_function_hid.o code 0x0024f8 program 0x0000ce +.romdata_usb_descriptors.o romdata 0x0025c6 program 0x0000b6 + _cinit_scn code 0x00267c program 0x00009e + .code_adcopen.o code 0x00271a program 0x00006e + STRING code 0x002788 program 0x00006c + .code_eeprom.o code 0x0027f4 program 0x00006c + .code_t1open.o code 0x002860 program 0x000042 + .stringtable romdata 0x0028a2 program 0x00003e + .code_t1write.o code 0x0028e0 program 0x000038 + .code_error.o code 0x002918 program 0x000036 + .code_adcselchconv.o code 0x00294e program 0x000030 + D10KTCYXCODE code 0x00297e program 0x00002e + _startup_scn code 0x0029ac program 0x00001c + D10TCYXCODE code 0x0029c8 program 0x000016 + .code_adcread.o code 0x0029de program 0x000012 + .code code 0x0029f0 program 0x00000e + .code_adcbusy.o code 0x0029fe program 0x00000a + .code___init.o code 0x002a08 program 0x000002 + .romdata_adcread.o romdata 0x002a0a program 0x000000 + .romdata_adcselchconv.o romdata 0x002a0a program 0x000000 + .romdata_t1open.o romdata 0x002a0a program 0x000000 + .idata_t1write.o_i romdata 0x002a0a program 0x000000 + .idata_t1open.o_i romdata 0x002a0a program 0x000000 + .romdata_t1write.o romdata 0x002a0a program 0x000000 + .romdata___init.o romdata 0x002a0a program 0x000000 + .romdata_adcopen.o romdata 0x002a0a program 0x000000 + .romdata_c018i.o romdata 0x002a0a program 0x000000 +.idata_usb_descriptors.o_i romdata 0x002a0a program 0x000000 + .romdata_main.o romdata 0x002a0a program 0x000000 + .romdata_eeprom.o romdata 0x002a0a program 0x000000 + .idata_usb_device.o_i romdata 0x002a0a program 0x000000 + .romdata_usb_device.o romdata 0x002a0a program 0x000000 +.idata_usb_function_hid.o_i romdata 0x002a0a program 0x000000 +.romdata_usb_function_hid.o romdata 0x002a0a program 0x000000 + .romdata_error.o romdata 0x002a0a program 0x000000 + .idata_monitor.o_i romdata 0x002a0a program 0x000016 + .romdata_monitor.o romdata 0x002a0a program 0x000000 + .romdata_adcbusy.o romdata 0x002a0a program 0x000000 + .idata_main.o_i romdata 0x002a20 program 0x000011 + .idata_error.o_i romdata 0x002a31 program 0x000021 + .idata_adcread.o_i romdata 0x002a52 program 0x000000 + .idata_adcselchconv.o_i romdata 0x002a52 program 0x000000 + .idata_adcopen.o_i romdata 0x002a52 program 0x000000 + .idata_eeprom.o_i romdata 0x002a52 program 0x000000 + .code_usb_descriptors.o code 0x002a52 program 0x000000 + .idata___init.o_i romdata 0x002a52 program 0x000000 + .idata_adcbusy.o_i romdata 0x002a52 program 0x000000 + .code_c018i.o code 0x002a52 program 0x000000 + .idata_c018i.o_i romdata 0x002a52 program 0x000000 MATH_DATA udata 0x000000 data 0x000014 .tmpdata udata 0x000014 data 0x000014 DELAYDAT2 udata 0x000028 data 0x000001 @@ -71,33 +71,33 @@ REMAPPED_LOW_INTERRUPT_VECTOR code 0x000818 program 0x000006 .udata_usb_device.o udata 0x000060 data 0x000026 .idata_error.o idata 0x000086 data 0x000021 .idata_monitor.o idata 0x0000a7 data 0x000016 - .idata_main.o idata 0x0000bd data 0x000010 - .udata_c018i.o udata 0x0000cd data 0x00000a - .udata_main.o udata 0x0000d7 data 0x000003 -.udata_usb_function_hid.o udata 0x0000da data 0x000002 - .udata_eeprom.o udata 0x0000dc data 0x000001 - .udata___init.o udata 0x0000dd data 0x000000 - .idata_t1write.o idata 0x0000dd data 0x000000 - .udata_t1write.o udata 0x0000dd data 0x000000 - .idata_adcselchconv.o idata 0x0000dd data 0x000000 - .udata_adcselchconv.o udata 0x0000dd data 0x000000 - .idata_adcread.o idata 0x0000dd data 0x000000 - .udata_adcread.o udata 0x0000dd data 0x000000 - .idata_t1open.o idata 0x0000dd data 0x000000 - .udata_t1open.o udata 0x0000dd data 0x000000 - .idata_adcopen.o idata 0x0000dd data 0x000000 - .udata_adcopen.o udata 0x0000dd data 0x000000 - .idata___init.o idata 0x0000dd data 0x000000 - .idata_c018i.o idata 0x0000dd data 0x000000 - .idata_adcbusy.o idata 0x0000dd data 0x000000 - .udata_adcbusy.o udata 0x0000dd data 0x000000 - .udata_usb_descriptors.o udata 0x0000dd data 0x000000 - .udata_monitor.o udata 0x0000dd data 0x000000 - .idata_usb_descriptors.o idata 0x0000dd data 0x000000 - .udata_error.o udata 0x0000dd data 0x000000 -.idata_usb_function_hid.o idata 0x0000dd data 0x000000 - .idata_usb_device.o idata 0x0000dd data 0x000000 - .idata_eeprom.o idata 0x0000dd data 0x000000 + .idata_main.o idata 0x0000bd data 0x000011 + .udata_c018i.o udata 0x0000ce data 0x00000a + .udata_main.o udata 0x0000d8 data 0x000003 +.udata_usb_function_hid.o udata 0x0000db data 0x000002 + .udata_eeprom.o udata 0x0000dd data 0x000001 + .udata___init.o udata 0x0000de data 0x000000 + .idata_t1write.o idata 0x0000de data 0x000000 + .udata_t1write.o udata 0x0000de data 0x000000 + .idata_adcselchconv.o idata 0x0000de data 0x000000 + .udata_adcselchconv.o udata 0x0000de data 0x000000 + .idata_adcread.o idata 0x0000de data 0x000000 + .udata_adcread.o udata 0x0000de data 0x000000 + .idata_t1open.o idata 0x0000de data 0x000000 + .udata_t1open.o udata 0x0000de data 0x000000 + .idata_adcopen.o idata 0x0000de data 0x000000 + .udata_adcopen.o udata 0x0000de data 0x000000 + .idata___init.o idata 0x0000de data 0x000000 + .idata_c018i.o idata 0x0000de data 0x000000 + .idata_adcbusy.o idata 0x0000de data 0x000000 + .udata_adcbusy.o udata 0x0000de data 0x000000 + .udata_usb_descriptors.o udata 0x0000de data 0x000000 + .udata_monitor.o udata 0x0000de data 0x000000 + .idata_usb_descriptors.o idata 0x0000de data 0x000000 + .udata_error.o udata 0x0000de data 0x000000 +.idata_usb_function_hid.o idata 0x0000de data 0x000000 + .idata_usb_device.o idata 0x0000de data 0x000000 + .idata_eeprom.o idata 0x0000de data 0x000000 .stack udata 0x000300 data 0x000100 USB_BDT udata 0x000400 data 0x000036 USB_VARIABLES udata 0x000500 data 0x000080 @@ -114,330 +114,333 @@ REMAPPED_LOW_INTERRUPT_VECTOR code 0x000818 program 0x000006 0x000800 0x000805 0x000808 0x00080d 0x000818 0x00081d - 0x00082a 0x0029f4 - 8687 out of 33048 program addresses used, program memory utilization is 26% + 0x00082a 0x002a51 + 8780 out of 33048 program addresses used, program memory utilization is 26% Symbols - Sorted by Name Name Address Location Storage File --------- --------- --------- --------- --------- - BlinkUSBStatus 0x001a9a program extern C:\krobot\USB_Module\Battery_Monitoring\Firmware\main.c - BusyADC 0x0029a2 program extern C:\MCC18\src\pmc_common\ADC\adcbusy.c - D10K_1 0x00292e program static C:\MCC18\src\traditional\delays\d10ktcyx.asm - D10Kl 0x00293a program static C:\MCC18\src\traditional\delays\d10ktcyx.asm - D10Kx 0x00292c program static C:\MCC18\src\traditional\delays\d10ktcyx.asm - D10_1 0x00297c program static C:\MCC18\src\traditional\delays\d10tcyx.asm - D10x 0x002974 program static C:\MCC18\src\traditional\delays\d10tcyx.asm - Delay10KTCYx 0x002922 program extern C:\MCC18\src\traditional\delays\d10ktcyx.asm - Delay10TCYx 0x00296c program extern C:\MCC18\src\traditional\delays\d10tcyx.asm - FLO1632S 0x001cb6 program extern C:\MCC18\src\traditional\math\cast16FP.asm - FLO1632U 0x001cb2 program extern C:\MCC18\src\traditional\math\cast16FP.asm - FPA32 0x001e5e program extern C:\MCC18\src\traditional\math\addFP.asm - FPD32 0x001cdc program extern C:\MCC18\src\traditional\math\divFP.asm - FPM32 0x001d82 program extern C:\MCC18\src\traditional\math\mulFP.asm - FPS32 0x001e5c program extern C:\MCC18\src\traditional\math\addFP.asm - FXM1616S 0x001f8a program extern C:\MCC18\src\traditional\math\fxm1616s.asm - High_ISR 0x000008 program extern C:\krobot\USB_Module\Battery_Monitoring\Firmware\main.c - INT3216 0x001fe4 program extern C:\MCC18\src\traditional\math\castFP16.asm - INT3232 0x002042 program extern C:\MCC18\src\traditional\math\castFP32.asm - InitializeSystem 0x0014ce program static C:\krobot\USB_Module\Battery_Monitoring\Firmware\main.c - Low_ISR 0x000018 program extern C:\krobot\USB_Module\Battery_Monitoring\Firmware\main.c - OpenADC 0x0026be program extern C:\MCC18\src\pmc_common\ADC\adcopen.c - OpenTimer1 0x002804 program extern C:\MCC18\src\pmc_common\Timers\t1open.c - ProcessIO 0x001548 program extern C:\krobot\USB_Module\Battery_Monitoring\Firmware\main.c - ReadADC 0x002982 program extern C:\MCC18\src\pmc_common\ADC\adcread.c - ReadEEPROM 0x0027d8 program extern C:\krobot\USB_Module\Battery_Monitoring\Firmware\eeprom.c - Remapped_High_ISR 0x000808 program extern C:\krobot\USB_Module\Battery_Monitoring\Firmware\main.c - Remapped_Low_ISR 0x000818 program extern C:\krobot\USB_Module\Battery_Monitoring\Firmware\main.c - ResetSource 0x001c10 program extern C:\krobot\USB_Module\Battery_Monitoring\Firmware\main.c - SelChanConvADC 0x0028f2 program extern C:\MCC18\src\pmc_common\ADC\adcselchconv.c - TSIGN1616A 0x001fd6 program static C:\MCC18\src\traditional\math\fxm1616s.asm - USBCBCheckOtherReq 0x001b20 program extern C:\krobot\USB_Module\Battery_Monitoring\Firmware\main.c - USBCBErrorHandler 0x001b1e program extern C:\krobot\USB_Module\Battery_Monitoring\Firmware\main.c - USBCBInitEP 0x001b26 program ... [truncated message content] |
From: Olivier B. <Ba...@us...> - 2010-05-04 16:07:37
|
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "krobot". The branch, master has been updated via b5c40b1b124716d69e2c65260f34e70c76b3921f (commit) from b168cb7e33cd61c7c26dcc832c47868fec702b92 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit b5c40b1b124716d69e2c65260f34e70c76b3921f Author: unknown <Olivier@.(none)> Date: Tue May 4 18:04:13 2010 +0200 Added firmware for Sensor Interface ----------------------------------------------------------------------- Changes: diff --git a/elec/boards/Controller_Motor/Firmware/PcInterface.h b/elec/boards/Controller_Motor/Firmware/PcInterface.h index d681bb5..a90e90a 100644 --- a/elec/boards/Controller_Motor/Firmware/PcInterface.h +++ b/elec/boards/Controller_Motor/Firmware/PcInterface.h @@ -14,6 +14,7 @@ #define USB_PID_MOTOR_CONTROLLER 0x0003 ///< Product ID de la Carte d'asservissement #define USB_PID_ROBOT_INTERFACE 0x0004 ///< Product ID de la Carte d'actionneur #define USB_PID_BATTERY_MONITORING 0x0005 ///< Product ID de la carte Battery Monitoring +#define USB_PID_SENSOR_INTERFACE 0x0006 ///< Product ID de la carte Sensor Interface #define USB_PID_BOOTLOADER 0x000b ///< Product ID d'une carte en mode bootloader // Protocole USB diff --git a/elec/boards/Interface_Robot/Firmware/PcInterface.h b/elec/boards/Interface_Robot/Firmware/PcInterface.h index d681bb5..a90e90a 100644 --- a/elec/boards/Interface_Robot/Firmware/PcInterface.h +++ b/elec/boards/Interface_Robot/Firmware/PcInterface.h @@ -14,6 +14,7 @@ #define USB_PID_MOTOR_CONTROLLER 0x0003 ///< Product ID de la Carte d'asservissement #define USB_PID_ROBOT_INTERFACE 0x0004 ///< Product ID de la Carte d'actionneur #define USB_PID_BATTERY_MONITORING 0x0005 ///< Product ID de la carte Battery Monitoring +#define USB_PID_SENSOR_INTERFACE 0x0006 ///< Product ID de la carte Sensor Interface #define USB_PID_BOOTLOADER 0x000b ///< Product ID d'une carte en mode bootloader // Protocole USB diff --git a/elec/boards/Interface_Sensor/Firmware/.gitignore b/elec/boards/Interface_Sensor/Firmware/.gitignore new file mode 100644 index 0000000..b81d6fd --- /dev/null +++ b/elec/boards/Interface_Sensor/Firmware/.gitignore @@ -0,0 +1,2 @@ + +*.err \ No newline at end of file diff --git a/elec/boards/Interface_Sensor/Firmware/Bootloader/18f4550.lkr b/elec/boards/Interface_Sensor/Firmware/Bootloader/18f4550.lkr new file mode 100644 index 0000000..d1673d9 --- /dev/null +++ b/elec/boards/Interface_Sensor/Firmware/Bootloader/18f4550.lkr @@ -0,0 +1,31 @@ +// $Id: 18f4550.lkr,v 1.1.2.2 2004/04/28 00:41:31 curtiss Exp $ +// File: 18f4550.lkr +// Sample linker script for the PIC18F4550 processor + +LIBPATH . + +FILES c018i.o +FILES clib.lib +FILES p18f4550.lib + +CODEPAGE NAME=vectors START=0x0 END=0x29 PROTECTED +CODEPAGE NAME=page START=0x2A END=0x7FFF +CODEPAGE NAME=idlocs START=0x200000 END=0x200007 PROTECTED +CODEPAGE NAME=config START=0x300000 END=0x30000D PROTECTED +CODEPAGE NAME=devid START=0x3FFFFE END=0x3FFFFF PROTECTED +CODEPAGE NAME=eedata START=0xF00000 END=0xF000FF PROTECTED + +ACCESSBANK NAME=accessram START=0x0 END=0x5F +DATABANK NAME=gpr0 START=0x60 END=0xFF +DATABANK NAME=gpr1 START=0x100 END=0x1FF +DATABANK NAME=gpr2 START=0x200 END=0x2FF +DATABANK NAME=gpr3 START=0x300 END=0x3FF +DATABANK NAME=usb4 START=0x400 END=0x4FF PROTECTED +DATABANK NAME=usb5 START=0x500 END=0x5FF PROTECTED +DATABANK NAME=usb6 START=0x600 END=0x6FF PROTECTED +DATABANK NAME=usb7 START=0x700 END=0x7FF PROTECTED +ACCESSBANK NAME=accesssfr START=0xF60 END=0xFFF PROTECTED + +SECTION NAME=CONFIG ROM=config + +STACK SIZE=0x100 RAM=gpr3 diff --git a/elec/boards/Interface_Sensor/Firmware/Bootloader/CleanUp.bat b/elec/boards/Interface_Sensor/Firmware/Bootloader/CleanUp.bat new file mode 100644 index 0000000..cd0752b --- /dev/null +++ b/elec/boards/Interface_Sensor/Firmware/Bootloader/CleanUp.bat @@ -0,0 +1,85 @@ +@echo off +REM Remove files generated by compiler in this directory +REM and all subdirectories. + +echo Removing *.$$$ files... +del *.$$$ /f /q /s +echo. + +echo Removing *.bkx files... +del *.bkx /f /q /s +echo. + +echo Removing *.cce files... +del *.cce /f /q /s +echo. + +echo Removing *.cod files... +del *.cod /f /q /s +echo. + +echo Removing *.cof files... +del *.cof /f /q /s +echo. + +echo Removing *.err files... +del *.err /f /q /s +echo. + +echo Removing *.hex files... +del *.hex /f /q /s +echo. + +echo Removing *.i files... +del *.i /f /q /s +echo. + +echo Removing *.lde files... +del *.lde /f /q /s +echo. + +echo Removing *.lst files... +del *.lst /f /q /s +echo. + +echo Removing *.obj files... +del *.obj /f /q /s +echo. + +echo Removing *.o files... +del *.o /f /q /s +echo. + +echo Removing *.rlf files... +del *.rlf /f /q /s +echo. + +echo Removing *.sym files... +del *.sym /f /q /s +echo. + +echo Removing *.sdb files... +del *.sdb /f /q /s +echo. + +echo Removing *.map files... +del *.map /f /q /s +echo. + +echo Removing *.mptags files... +del *.mptags /f /q /s +echo. + +echo Removing *.tagsrc files... +del *.tagsrc /f /q /s +echo. + +echo Removing *.mcs files... +del *.mcs /f /q /s +echo. + +echo Removing *.wat files... +del *.wat /f /q /s +echo. + +echo Done. \ No newline at end of file diff --git a/elec/boards/Interface_Sensor/Firmware/Bootloader/MCHPUSB.mcp b/elec/boards/Interface_Sensor/Firmware/Bootloader/MCHPUSB.mcp new file mode 100644 index 0000000..79aa973 --- /dev/null +++ b/elec/boards/Interface_Sensor/Firmware/Bootloader/MCHPUSB.mcp @@ -0,0 +1,134 @@ +[HEADER] +magic_cookie={66E99B07-E706-4689-9E80-9B2582898A13} +file_version=1.0 +device=PIC18F4550 +[PATH_INFO] +BuildDirPolicy=BuildDirIsSourceDir +dir_src= +dir_bin=output +dir_tmp=output +dir_sin= +dir_inc=C:\MCC18\h +dir_lib=C:\MCC18\lib +dir_lkr=C:\MCC18\lkr +[CAT_FILTERS] +filter_src=*.asm;*.c +filter_inc=*.h;*.inc +filter_obj=*.o +filter_lib=*.lib +filter_lkr=*.lkr +[CAT_SUBFOLDERS] +subfolder_src= +subfolder_inc= +subfolder_obj= +subfolder_lib= +subfolder_lkr= +[FILE_SUBFOLDERS] +file_000=. +file_001=. +file_002=. +file_003=. +file_004=. +file_005=. +file_006=. +file_007=. +file_008=. +file_009=. +file_010=. +file_011=. +file_012=. +file_013=. +file_014=. +file_015=. +file_016=. +file_017=. +file_018=. +file_019=. +file_020=. +file_021=. +[GENERATED_FILES] +file_000=no +file_001=no +file_002=no +file_003=no +file_004=no +file_005=no +file_006=no +file_007=no +file_008=no +file_009=no +file_010=no +file_011=no +file_012=no +file_013=no +file_014=no +file_015=no +file_016=no +file_017=no +file_018=no +file_019=no +file_020=no +file_021=no +[OTHER_FILES] +file_000=no +file_001=no +file_002=no +file_003=no +file_004=no +file_005=no +file_006=no +file_007=no +file_008=no +file_009=no +file_010=no +file_011=no +file_012=no +file_013=no +file_014=no +file_015=no +file_016=no +file_017=no +file_018=no +file_019=no +file_020=no +file_021=no +[FILE_INFO] +file_000=main.c +file_001=boot.c +file_002=usb9.c +file_003=usbctrltrf.c +file_004=usbdrv.c +file_005=usbdsc.c +file_006=usbmmap.c +file_007=eeprom.c +file_008=io_cfg.h +file_009=boot.h +file_010=typedefs.h +file_011=usb.h +file_012=usb9.h +file_013=usbcfg.h +file_014=usbctrltrf.h +file_015=usbdefs_ep0_buff.h +file_016=usbdefs_std_dsc.h +file_017=usbdrv.h +file_018=usbdsc.h +file_019=usbmmap.h +file_020=eeprom.h +file_021=18f4550.lkr +[SUITE_INFO] +suite_guid={5B7D72DD-9861-47BD-9F60-2BE967BF8416} +suite_state= +[TOOL_SETTINGS] +TS{DD2213A8-6310-47B1-8376-9430CDFC013F}= +TS{BFD27FBA-4A02-4C0E-A5E5-B812F3E7707C}=/m"$(BINDIR_)$(TARGETBASE).map" /w /o"$(BINDIR_)$(TARGETBASE).cof" +TS{C2AF05E7-1416-4625-923D-E114DB6E2B96}=-scs +TS{ADE93A55-C7C7-4D4D-A4BA-59305F7D0391}= +[INSTRUMENTED_TRACE] +enable=0 +transport=0 +format=0 +[CUSTOM_BUILD] +Pre-Build= +Pre-BuildEnabled=1 +Post-Build= +Post-BuildEnabled=1 diff --git a/elec/boards/Interface_Sensor/Firmware/Bootloader/MCHPUSB.mcs b/elec/boards/Interface_Sensor/Firmware/Bootloader/MCHPUSB.mcs new file mode 100644 index 0000000..39033d2 --- /dev/null +++ b/elec/boards/Interface_Sensor/Firmware/Bootloader/MCHPUSB.mcs @@ -0,0 +1,149 @@ +[Header] +MagicCookie={0b13fe8c-dfe0-40eb-8900-6712719559a7} +Version=1.0 +[File000] +Location=C:\krobot\elec\boards\Interface_Sensor\Firmware\Bootloader\output\main.o +Folder=Intermediary +DeviceName=PIC18F4550 +LanguageToolSuiteID={5B7D72DD-9861-47BD-9F60-2BE967BF8416} +LanguageToolID={E56A1C86-9D32-4DF6-8C34-FE0388B1B644} +LanguageToolLocation=C:\MCC18\bin\mcc18.exe +PPAD=$(BINDIR)|output||$(TMPDIR)|output||$(AINDIR)||$(INCDIR)|C:\MCC18\h||$(LIBDIR)|C:\MCC18\lib||$(LKRDIR)|C:\MCC18\lkr|| +SOLK=<src>|main.c|boot.c|usb9.c|usbctrltrf.c|usbdrv.c|usbdsc.c|usbmmap.c|eeprom.c||<obj>||<lib>||<lkr>|18f4550.lkr|| +SuiteArgsString= +ToolArgsString=-scs +TraceCmdString= +DebugOptions= +[File001] +Location=C:\krobot\elec\boards\Interface_Sensor\Firmware\Bootloader\output\boot.o +Folder=Intermediary +DeviceName=PIC18F4550 +LanguageToolSuiteID={5B7D72DD-9861-47BD-9F60-2BE967BF8416} +LanguageToolID={E56A1C86-9D32-4DF6-8C34-FE0388B1B644} +LanguageToolLocation=C:\MCC18\bin\mcc18.exe +PPAD=$(BINDIR)|output||$(TMPDIR)|output||$(AINDIR)||$(INCDIR)|C:\MCC18\h||$(LIBDIR)|C:\MCC18\lib||$(LKRDIR)|C:\MCC18\lkr|| +SOLK=<src>|main.c|boot.c|usb9.c|usbctrltrf.c|usbdrv.c|usbdsc.c|usbmmap.c|eeprom.c||<obj>||<lib>||<lkr>|18f4550.lkr|| +SuiteArgsString= +ToolArgsString=-scs +TraceCmdString= +DebugOptions= +[File002] +Location=C:\krobot\elec\boards\Interface_Sensor\Firmware\Bootloader\output\usb9.o +Folder=Intermediary +DeviceName=PIC18F4550 +LanguageToolSuiteID={5B7D72DD-9861-47BD-9F60-2BE967BF8416} +LanguageToolID={E56A1C86-9D32-4DF6-8C34-FE0388B1B644} +LanguageToolLocation=C:\MCC18\bin\mcc18.exe +PPAD=$(BINDIR)|output||$(TMPDIR)|output||$(AINDIR)||$(INCDIR)|C:\MCC18\h||$(LIBDIR)|C:\MCC18\lib||$(LKRDIR)|C:\MCC18\lkr|| +SOLK=<src>|main.c|boot.c|usb9.c|usbctrltrf.c|usbdrv.c|usbdsc.c|usbmmap.c|eeprom.c||<obj>||<lib>||<lkr>|18f4550.lkr|| +SuiteArgsString= +ToolArgsString=-scs +TraceCmdString= +DebugOptions= +[File003] +Location=C:\krobot\elec\boards\Interface_Sensor\Firmware\Bootloader\output\usbctrltrf.o +Folder=Intermediary +DeviceName=PIC18F4550 +LanguageToolSuiteID={5B7D72DD-9861-47BD-9F60-2BE967BF8416} +LanguageToolID={E56A1C86-9D32-4DF6-8C34-FE0388B1B644} +LanguageToolLocation=C:\MCC18\bin\mcc18.exe +PPAD=$(BINDIR)|output||$(TMPDIR)|output||$(AINDIR)||$(INCDIR)|C:\MCC18\h||$(LIBDIR)|C:\MCC18\lib||$(LKRDIR)|C:\MCC18\lkr|| +SOLK=<src>|main.c|boot.c|usb9.c|usbctrltrf.c|usbdrv.c|usbdsc.c|usbmmap.c|eeprom.c||<obj>||<lib>||<lkr>|18f4550.lkr|| +SuiteArgsString= +ToolArgsString=-scs +TraceCmdString= +DebugOptions= +[File004] +Location=C:\krobot\elec\boards\Interface_Sensor\Firmware\Bootloader\output\usbdrv.o +Folder=Intermediary +DeviceName=PIC18F4550 +LanguageToolSuiteID={5B7D72DD-9861-47BD-9F60-2BE967BF8416} +LanguageToolID={E56A1C86-9D32-4DF6-8C34-FE0388B1B644} +LanguageToolLocation=C:\MCC18\bin\mcc18.exe +PPAD=$(BINDIR)|output||$(TMPDIR)|output||$(AINDIR)||$(INCDIR)|C:\MCC18\h||$(LIBDIR)|C:\MCC18\lib||$(LKRDIR)|C:\MCC18\lkr|| +SOLK=<src>|main.c|boot.c|usb9.c|usbctrltrf.c|usbdrv.c|usbdsc.c|usbmmap.c|eeprom.c||<obj>||<lib>||<lkr>|18f4550.lkr|| +SuiteArgsString= +ToolArgsString=-scs +TraceCmdString= +DebugOptions= +[File005] +Location=C:\krobot\elec\boards\Interface_Sensor\Firmware\Bootloader\output\usbdsc.o +Folder=Intermediary +DeviceName=PIC18F4550 +LanguageToolSuiteID={5B7D72DD-9861-47BD-9F60-2BE967BF8416} +LanguageToolID={E56A1C86-9D32-4DF6-8C34-FE0388B1B644} +LanguageToolLocation=C:\MCC18\bin\mcc18.exe +PPAD=$(BINDIR)|output||$(TMPDIR)|output||$(AINDIR)||$(INCDIR)|C:\MCC18\h||$(LIBDIR)|C:\MCC18\lib||$(LKRDIR)|C:\MCC18\lkr|| +SOLK=<src>|main.c|boot.c|usb9.c|usbctrltrf.c|usbdrv.c|usbdsc.c|usbmmap.c|eeprom.c||<obj>||<lib>||<lkr>|18f4550.lkr|| +SuiteArgsString= +ToolArgsString=-scs +TraceCmdString= +DebugOptions= +[File006] +Location=C:\krobot\elec\boards\Interface_Sensor\Firmware\Bootloader\output\usbmmap.o +Folder=Intermediary +DeviceName=PIC18F4550 +LanguageToolSuiteID={5B7D72DD-9861-47BD-9F60-2BE967BF8416} +LanguageToolID={E56A1C86-9D32-4DF6-8C34-FE0388B1B644} +LanguageToolLocation=C:\MCC18\bin\mcc18.exe +PPAD=$(BINDIR)|output||$(TMPDIR)|output||$(AINDIR)||$(INCDIR)|C:\MCC18\h||$(LIBDIR)|C:\MCC18\lib||$(LKRDIR)|C:\MCC18\lkr|| +SOLK=<src>|main.c|boot.c|usb9.c|usbctrltrf.c|usbdrv.c|usbdsc.c|usbmmap.c|eeprom.c||<obj>||<lib>||<lkr>|18f4550.lkr|| +SuiteArgsString= +ToolArgsString=-scs +TraceCmdString= +DebugOptions= +[File007] +Location=C:\krobot\elec\boards\Interface_Sensor\Firmware\Bootloader\output\eeprom.o +Folder=Intermediary +DeviceName=PIC18F4550 +LanguageToolSuiteID={5B7D72DD-9861-47BD-9F60-2BE967BF8416} +LanguageToolID={E56A1C86-9D32-4DF6-8C34-FE0388B1B644} +LanguageToolLocation=C:\MCC18\bin\mcc18.exe +PPAD=$(BINDIR)|output||$(TMPDIR)|output||$(AINDIR)||$(INCDIR)|C:\MCC18\h||$(LIBDIR)|C:\MCC18\lib||$(LKRDIR)|C:\MCC18\lkr|| +SOLK=<src>|main.c|boot.c|usb9.c|usbctrltrf.c|usbdrv.c|usbdsc.c|usbmmap.c|eeprom.c||<obj>||<lib>||<lkr>|18f4550.lkr|| +SuiteArgsString= +ToolArgsString=-scs +TraceCmdString= +DebugOptions= +[File008] +Location=C:\krobot\elec\boards\Interface_Sensor\Firmware\Bootloader\output\MCHPUSB.cof +Folder=Output +DeviceName=PIC18F4550 +LanguageToolSuiteID={5B7D72DD-9861-47BD-9F60-2BE967BF8416} +LanguageToolID={96C98149-AA1B-4CF9-B967-FAE79CAB663C} +LanguageToolLocation=C:\MCC18\bin\mplink.exe +PPAD=$(BINDIR)|output||$(TMPDIR)|output||$(AINDIR)||$(INCDIR)|C:\MCC18\h||$(LIBDIR)|C:\MCC18\lib||$(LKRDIR)|C:\MCC18\lkr|| +SOLK=<src>|main.c|boot.c|usb9.c|usbctrltrf.c|usbdrv.c|usbdsc.c|usbmmap.c|eeprom.c||<obj>||<lib>||<lkr>|18f4550.lkr|| +SuiteArgsString= +ToolArgsString=/m"$(BINDIR_)$(TARGETBASE).map" /w /o"$(BINDIR_)$(TARGETBASE).cof" +TraceCmdString= +DebugOptions= +[File009] +Location=C:\krobot\elec\boards\Interface_Sensor\Firmware\Bootloader\output\MCHPUSB.hex +Folder=Output +DeviceName=PIC18F4550 +LanguageToolSuiteID={5B7D72DD-9861-47BD-9F60-2BE967BF8416} +LanguageToolID={96C98149-AA1B-4CF9-B967-FAE79CAB663C} +LanguageToolLocation=C:\MCC18\bin\mplink.exe +PPAD=$(BINDIR)|output||$(TMPDIR)|output||$(AINDIR)||$(INCDIR)|C:\MCC18\h||$(LIBDIR)|C:\MCC18\lib||$(LKRDIR)|C:\MCC18\lkr|| +SOLK=<src>|main.c|boot.c|usb9.c|usbctrltrf.c|usbdrv.c|usbdsc.c|usbmmap.c|eeprom.c||<obj>||<lib>||<lkr>|18f4550.lkr|| +SuiteArgsString= +ToolArgsString=/m"$(BINDIR_)$(TARGETBASE).map" /w /o"$(BINDIR_)$(TARGETBASE).cof" +TraceCmdString= +DebugOptions= +[File010] +Location=C:\krobot\elec\boards\Interface_Sensor\Firmware\Bootloader\output\MCHPUSB.map +Folder=Output +DeviceName=PIC18F4550 +LanguageToolSuiteID={5B7D72DD-9861-47BD-9F60-2BE967BF8416} +LanguageToolID={96C98149-AA1B-4CF9-B967-FAE79CAB663C} +LanguageToolLocation=C:\MCC18\bin\mplink.exe +PPAD=$(BINDIR)|output||$(TMPDIR)|output||$(AINDIR)||$(INCDIR)|C:\MCC18\h||$(LIBDIR)|C:\MCC18\lib||$(LKRDIR)|C:\MCC18\lkr|| +SOLK=<src>|main.c|boot.c|usb9.c|usbctrltrf.c|usbdrv.c|usbdsc.c|usbmmap.c|eeprom.c||<obj>||<lib>||<lkr>|18f4550.lkr|| +SuiteArgsString= +ToolArgsString=/m"$(BINDIR_)$(TARGETBASE).map" /w /o"$(BINDIR_)$(TARGETBASE).cof" +TraceCmdString= +DebugOptions= +[TOOL_LOC_STAMPS] +tool_loc{96C98149-AA1B-4CF9-B967-FAE79CAB663C}=C:\MCC18\bin\mplink.exe +tool_loc{E56A1C86-9D32-4DF6-8C34-FE0388B1B644}=C:\MCC18\bin\mcc18.exe diff --git a/elec/boards/Interface_Sensor/Firmware/Bootloader/MCHPUSB.mcw b/elec/boards/Interface_Sensor/Firmware/Bootloader/MCHPUSB.mcw new file mode 100644 index 0000000..f0f27f2 Binary files /dev/null and b/elec/boards/Interface_Sensor/Firmware/Bootloader/MCHPUSB.mcw differ diff --git a/elec/boards/Interface_Sensor/Firmware/Bootloader/MCHPUSB.mptags b/elec/boards/Interface_Sensor/Firmware/Bootloader/MCHPUSB.mptags new file mode 100644 index 0000000..16cfbdc --- /dev/null +++ b/elec/boards/Interface_Sensor/Firmware/Bootloader/MCHPUSB.mptags @@ -0,0 +1,547 @@ +!_TAG_FILE_FORMAT 2 /extended format; --format=1 will not append ;" to lines/ +!_TAG_FILE_SORTED 1 /0=unsorted, 1=sorted, 2=foldcase/ +!_TAG_PROGRAM_AUTHOR Darren Hiebert /dhi...@us.../ +!_TAG_PROGRAM_NAME Exuberant Ctags // +!_TAG_PROGRAM_URL http://ctags.sourceforge.net /official site/ +!_TAG_PROGRAM_VERSION 5.5.4 // +!_TAG_REVISION_NAME MCHPTags // +!_TAG_REVISION_VERSION 6.0.1 // +ADDRESS_STATE::5 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbmmap.h 63;" d line:63 +ADR C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\boot.c 175;" p line:175 file: signature:((int)counter) << 6 +ADR C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\boot.h 194;" m line:194 struct:_BOOT_DATA_PACKET::<anonymous> +ADR C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbmmap.h 124;" m line:124 struct:_BDT::<anonymous> +ADRH C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbmmap.h 118;" m line:118 struct:_BDT::<anonymous> +ADRL C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbmmap.h 117;" m line:117 struct:_BDT::<anonymous> +ADR_PENDING_STATE::4 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbmmap.h 62;" d line:62 +ATTACHED_STATE::1 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbmmap.h 59;" d line:59 +BC8 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbmmap.h 85;" m line:85 struct:_BD_STAT::<anonymous> +BC8 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbmmap.h 95;" m line:95 struct:_BD_STAT::<anonymous> +BC9 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbmmap.h 86;" m line:86 struct:_BD_STAT::<anonymous> +BC9 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbmmap.h 96;" m line:96 struct:_BD_STAT::<anonymous> +BDT C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbmmap.h 126;" t line:126 +BD_STAT C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbmmap.h 109;" t line:109 +BOOL C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\typedefs.h 150;" t line:150 +BOOT_BD_IN::ep1Bi C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbcfg.h 71;" d line:71 +BOOT_BD_OUT::ep1Bo C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbcfg.h 70;" d line:70 +BOOT_DATA_PACKET C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\boot.h 203;" t line:203 +BOOT_EP_SIZE::64 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbcfg.h 72;" d line:72 +BOOT_H C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\boot.h 38;" d line:38 +BOOT_INTF_ID::0x00 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbcfg.h 68;" d line:68 +BOOT_UEP::UEP1 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbcfg.h 69;" d line:69 +BSTALL C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbmmap.h 87;" m line:87 struct:_BD_STAT::<anonymous> +BYTE C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\typedefs.h 58;" t line:58 +BlinkUSBStatus C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\boot.c 337;" f line:337 signature:(void) +BlinkUSBStatus C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\boot.c 59;" p line:59 file: signature:(void) +BootInitEP C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\boot.c 87;" f line:87 signature:(void) +BootInitEP C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\boot.h 208;" p line:208 signature:(void) +BootService C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\boot.c 223;" f line:223 signature:(void) +BootService C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\boot.h 209;" p line:209 signature:(void) +Byte0 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\typedefs.h 103;" m line:103 struct:_DWORD::<anonymous> +Byte0 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\typedefs.h 70;" m line:70 struct:_WORD::<anonymous> +Byte1 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\typedefs.h 104;" m line:104 struct:_DWORD::<anonymous> +Byte1 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\typedefs.h 71;" m line:71 struct:_WORD::<anonymous> +Byte2 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\typedefs.h 105;" m line:105 struct:_DWORD::<anonymous> +Byte3 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\typedefs.h 106;" m line:106 struct:_DWORD::<anonymous> +CFG01::romstruct C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdsc.h 54;" d line:54 +CLASS::0x01 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbctrltrf.h 59;" d line:59 +CLR_FEATURE::1 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usb9.h 49;" d line:49 +CMD C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\boot.h 183;" m line:183 struct:_BOOT_DATA_PACKET::<anonymous> +CONFIGURED_STATE::6 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbmmap.h 64;" d line:64 +CTRL_TRF_DATA C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdefs_ep0_buff.h 207;" t line:207 +CTRL_TRF_RX::2 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbctrltrf.h 47;" d line:47 +CTRL_TRF_SETUP C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdefs_ep0_buff.h 166;" t line:166 +CTRL_TRF_TX::1 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbctrltrf.h 46;" d line:46 +Cnt C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbmmap.h 116;" m line:116 struct:_BDT::<anonymous> +CtrlTrfData C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbmmap.c 269;" v line:269 +DATA_SIZE::(BOOT_EP_SIZE-OVER_HEAD) C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\boot.h 164;" d line:164 +DEFAULT_STATE::3 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbmmap.h 61;" d line:61 +DETACHED_STATE::0 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbmmap.h 58;" d line:58 +DEVICE_REMOTE_WAKEUP::0x01 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usb9.h 61;" d line:61 +DEV_TO_HOST::1 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbctrltrf.h 56;" d line:56 +DSC_CFG::0x02 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdefs_std_dsc.h 50;" d line:50 +DSC_DEV::0x01 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdefs_std_dsc.h 49;" d line:49 +DSC_EP::0x05 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdefs_std_dsc.h 53;" d line:53 +DSC_INTF::0x04 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdefs_std_dsc.h 52;" d line:52 +DSC_STR::0x03 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdefs_std_dsc.h 51;" d line:51 +DTS C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbmmap.h 91;" m line:91 struct:_BD_STAT::<anonymous> +DTSEN C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbmmap.h 88;" m line:88 struct:_BD_STAT::<anonymous> +DWORD C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\typedefs.h 117;" t line:117 +DataDir C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdefs_ep0_buff.h 88;" m line:88 struct:_CTRL_TRF_SETUP::<anonymous> +EECON1_RD::EECON1bits.RD C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\boot.h 61;" d line:61 +EECON1_WR::EECON1bits.WR C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\boot.h 62;" d line:62 +ENDPOINT_HALT::0x00 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usb9.h 62;" d line:62 +EP00_IN::((0x00<<3)|(IN<<2)) C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdrv.h 83;" d line:83 +EP00_OUT::((0x00<<3)|(OUT<<2)) C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdrv.h 82;" d line:82 +EP01_IN::((0x01<<3)|(IN<<2)) C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdrv.h 85;" d line:85 +EP01_OUT::((0x01<<3)|(OUT<<2)) C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdrv.h 84;" d line:84 +EP02_IN::((0x02<<3)|(IN<<2)) C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdrv.h 87;" d line:87 +EP02_OUT::((0x02<<3)|(OUT<<2)) C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdrv.h 86;" d line:86 +EP03_IN::((0x03<<3)|(IN<<2)) C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdrv.h 89;" d line:89 +EP03_OUT::((0x03<<3)|(OUT<<2)) C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdrv.h 88;" d line:88 +EP04_IN::((0x04<<3)|(IN<<2)) C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdrv.h 91;" d line:91 +EP04_OUT::((0x04<<3)|(OUT<<2)) C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdrv.h 90;" d line:90 +EP05_IN::((0x05<<3)|(IN<<2)) C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdrv.h 93;" d line:93 +EP05_OUT::((0x05<<3)|(OUT<<2)) C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdrv.h 92;" d line:92 +EP06_IN::((0x06<<3)|(IN<<2)) C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdrv.h 95;" d line:95 +EP06_OUT::((0x06<<3)|(OUT<<2)) C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdrv.h 94;" d line:94 +EP07_IN::((0x07<<3)|(IN<<2)) C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdrv.h 97;" d line:97 +EP07_OUT::((0x07<<3)|(OUT<<2)) C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdrv.h 96;" d line:96 +EP08_IN::((0x08<<3)|(IN<<2)) C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdrv.h 99;" d line:99 +EP08_OUT::((0x08<<3)|(OUT<<2)) C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdrv.h 98;" d line:98 +EP09_IN::((0x09<<3)|(IN<<2)) C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdrv.h 101;" d line:101 +EP09_OUT::((0x09<<3)|(OUT<<2)) C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdrv.h 100;" d line:100 +EP0_BUFF_SIZE::8 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbcfg.h 38;" d line:38 +EP10_IN::((0x0A<<3)|(IN<<2)) C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdrv.h 103;" d line:103 +EP10_OUT::((0x0A<<3)|(OUT<<2)) C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdrv.h 102;" d line:102 +EP11_IN::((0x0B<<3)|(IN<<2)) C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdrv.h 105;" d line:105 +EP11_OUT::((0x0B<<3)|(OUT<<2)) C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdrv.h 104;" d line:104 +EP12_IN::((0x0C<<3)|(IN<<2)) C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdrv.h 107;" d line:107 +EP12_OUT::((0x0C<<3)|(OUT<<2)) C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdrv.h 106;" d line:106 +EP13_IN::((0x0D<<3)|(IN<<2)) C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdrv.h 109;" d line:109 +EP13_OUT::((0x0D<<3)|(OUT<<2)) C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdrv.h 108;" d line:108 +EP14_IN::((0x0E<<3)|(IN<<2)) C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdrv.h 111;" d line:111 +EP14_OUT::((0x0E<<3)|(OUT<<2)) C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdrv.h 110;" d line:110 +EP15_IN::((0x0F<<3)|(IN<<2)) C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdrv.h 113;" d line:113 +EP15_OUT::((0x0F<<3)|(OUT<<2)) C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdrv.h 112;" d line:112 +EPDir C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdefs_ep0_buff.h 159;" m line:159 struct:_CTRL_TRF_SETUP::<anonymous> +EPNum C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdefs_ep0_buff.h 157;" m line:157 struct:_CTRL_TRF_SETUP::<anonymous> +EP_CTRL::0x06 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdrv.h 60;" d line:60 +EP_IN::0x0A C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdrv.h 62;" d line:62 +EP_OUT::0x0C C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdrv.h 61;" d line:61 +EP_OUT_IN::0x0E C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdrv.h 63;" d line:63 +ERASE_FLASH C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\boot.h 176;" e line:176 enum:_BOOT_DATA_PACKET::<anonymous>::<anonymous> +EraseProgMem C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\boot.c 166;" f line:166 signature:(void) +FAIL::FALSE C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\typedefs.h 153;" d line:153 +FALSE C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\typedefs.h 150;" e line:150 enum:_BOOL +GET_CFG::8 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usb9.h 54;" d line:54 +GET_DSC::6 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usb9.h 52;" d line:52 +GET_INTF::10 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usb9.h 56;" d line:56 +GET_STATUS::0 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usb9.h 48;" d line:48 +HITECH_C18 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\boot.h 47;" d line:47 +HOST_TO_DEV::0 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbctrltrf.h 55;" d line:55 +HSHK_EN::0x10 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdrv.h 64;" d line:64 +HighB C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\typedefs.h 76;" m line:76 struct:_WORD::<anonymous> +IN::1 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdrv.h 77;" d line:77 +INCDIS C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbmmap.h 89;" m line:89 struct:_BD_STAT::<anonymous> +INPUT_PIN::1 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\io_cfg.h 54;" d line:54 +IN_TOKEN::0b00001001 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbctrltrf.h 52;" d line:52 +IO_CFG_H C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\io_cfg.h 48;" d line:48 +KEN C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbmmap.h 90;" m line:90 struct:_BD_STAT::<anonymous> +LOWER_LSB::(a)((a).v[0]) C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\typedefs.h 118;" d line:118 +LOWER_MSB::(a)((a).v[1]) C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\typedefs.h 119;" d line:119 +LSB::(a)((a).v[0]) C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\typedefs.h 83;" d line:83 +LowB C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\typedefs.h 75;" m line:75 struct:_WORD::<anonymous> +MAJOR_VERSION::0x01 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\boot.h 99;" d line:99 +MAX_EP_NUMBER::1 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbcfg.h 74;" d line:74 +MAX_NUM_INT::1 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbcfg.h 39;" d line:39 +MCHP_C18 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\boot.h 49;" d line:49 +MINOR_VERSION::0x14 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\boot.h 98;" d line:98 +MODE_PP::_PPBM0 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbcfg.h 42;" d line:42 +MSB::(a)((a).v[1]) C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\typedefs.h 84;" d line:84 +MUID_NULL::0 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbcfg.h 59;" d line:59 +MUID_USB9::1 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbcfg.h 60;" d line:60 +OK::TRUE C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\typedefs.h 152;" d line:152 +OUT::0 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdrv.h 76;" d line:76 +OUTPUT_PIN::0 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\io_cfg.h 55;" d line:55 +OUT_TOKEN::0b00000001 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbctrltrf.h 51;" d line:51 +OVER_HEAD::5 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\boot.h 163;" d line:163 +PIC_EP_DIR_MASK::0b00000100 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdrv.h 80;" d line:80 +PIC_EP_NUM_MASK::0b01111000 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdrv.h 79;" d line:79 +PID C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbmmap.h 106;" m line:106 struct:_BD_STAT::<anonymous> +PID0 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbmmap.h 97;" m line:97 struct:_BD_STAT::<anonymous> +PID1 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbmmap.h 98;" m line:98 struct:_BD_STAT::<anonymous> +PID2 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbmmap.h 99;" m line:99 struct:_BD_STAT::<anonymous> +PID3 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbmmap.h 100;" m line:100 struct:_BD_STAT::<anonymous> +POINTER C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\typedefs.h 148;" t line:148 +POWERED_STATE::2 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbmmap.h 60;" d line:60 +RCPT_DEV::0 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbctrltrf.h 62;" d line:62 +RCPT_EP::2 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbctrltrf.h 64;" d line:64 +RCPT_INTF::1 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbctrltrf.h 63;" d line:63 +RCPT_OTH::3 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbctrltrf.h 65;" d line:65 +READ_CONFIG C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\boot.h 179;" e line:179 enum:_BOOT_DATA_PACKET::<anonymous>::<anonymous> +READ_EEDATA C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\boot.h 177;" e line:177 enum:_BOOT_DATA_PACKET::<anonymous>::<anonymous> +READ_FLASH C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\boot.h 174;" e line:174 enum:_BOOT_DATA_PACKET::<anonymous>::<anonymous> +READ_VERSION C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\boot.h 173;" e line:173 enum:_BOOT_DATA_PACKET::<anonymous>::<anonymous> +RESET C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\boot.h 182;" e line:182 enum:_BOOT_DATA_PACKET::<anonymous>::<anonymous> +RM_HIGH_INTERRUPT_VECTOR::0x000808 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\boot.h 91;" d line:91 +RM_LOW_INTERRUPT_VECTOR::0x000818 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\boot.h 92;" d line:92 +RM_RESET_VECTOR::0x000800 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\boot.h 90;" d line:90 +ReadEE C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\boot.c 183;" f line:183 signature:(void) +ReadEEPROM C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\eeprom.c 24;" f line:24 signature:(unsigned char addr) +ReadEEPROM C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\eeprom.h 1;" p line:1 signature:(unsigned char addr) +ReadProgMem C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\boot.c 128;" f line:128 signature:(void) +ReadVersion C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\boot.c 122;" f line:122 signature:(void) +Recipient C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdefs_ep0_buff.h 86;" m line:86 struct:_CTRL_TRF_SETUP::<anonymous> +RemoteWakeup C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbmmap.h 76;" m line:76 struct:_USB_DEVICE_STATUS::<anonymous> +RequestType C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdefs_ep0_buff.h 87;" m line:87 struct:_CTRL_TRF_SETUP::<anonymous> +SENDING_RESP::0x01 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\boot.h 103;" d line:103 +SETUP_TOKEN::0b00001101 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbctrltrf.h 50;" d line:50 +SET_ADR::5 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usb9.h 51;" d line:51 +SET_CFG::9 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usb9.h 55;" d line:55 +SET_DSC::7 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usb9.h 53;" d line:53 +SET_FEATURE::3 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usb9.h 50;" d line:50 +SET_INTF::11 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usb9.h 57;" d line:57 +STANDARD::0x00 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbctrltrf.h 58;" d line:58 +SYNCH_FRAME::12 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usb9.h 58;" d line:58 +SetupPkt C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbmmap.c 268;" v line:268 +StartWrite C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\boot.c 112;" f line:112 signature:(void) +Stat C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbmmap.h 115;" m line:115 struct:_BDT::<anonymous> +TRUE C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\typedefs.h 150;" e line:150 enum:_BOOL +TYPEDEFS_H C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\typedefs.h 38;" d line:38 +UCFG_VAL::_PUEN|_TRINT|_FS|MODE_PP C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbcfg.h 43;" d line:43 +UOWN C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbmmap.h 102;" m line:102 struct:_BD_STAT::<anonymous> +UOWN C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbmmap.h 92;" m line:92 struct:_BD_STAT::<anonymous> +UPDATE_LED C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\boot.h 181;" e line:181 enum:_BOOT_DATA_PACKET::<anonymous>::<anonymous> +UPPER_LSB::(a)((a).v[2]) C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\typedefs.h 120;" d line:120 +UPPER_MSB::(a)((a).v[3]) C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\typedefs.h 121;" d line:121 +USB9_H C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usb9.h 37;" d line:37 +USBCFG_H C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbcfg.h 35;" d line:35 +USBCTRLTRF_H C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbctrltrf.h 37;" d line:37 +USBCheckBusStatus C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdrv.c 88;" f line:88 signature:(void) +USBCheckBusStatus C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdrv.h 197;" p line:197 signature:(void) +USBCheckStdRequest C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usb9.c 79;" f line:79 signature:(void) +USBCheckStdRequest C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usb9.h 92;" p line:92 signature:(void) +USBCtrlEPService C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbctrltrf.c 104;" f line:104 signature:(void) +USBCtrlEPService C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbctrltrf.h 75;" p line:75 signature:(void) +USBCtrlEPServiceComplete C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbctrltrf.c 397;" f line:397 signature:(void) +USBCtrlEPServiceComplete C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbctrltrf.h 78;" p line:78 signature:(void) +USBCtrlTrfInHandler C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbctrltrf.c 247;" f line:247 signature:(void) +USBCtrlTrfInHandler C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbctrltrf.c 80;" p line:80 file: signature:(void) +USBCtrlTrfOutHandler C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbctrltrf.c 202;" f line:202 signature:(void) +USBCtrlTrfOutHandler C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbctrltrf.c 79;" p line:79 file: signature:(void) +USBCtrlTrfRxService C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbctrltrf.c 346;" f line:346 signature:(void) +USBCtrlTrfRxService C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbctrltrf.h 77;" p line:77 signature:(void) +USBCtrlTrfSetupHandler C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbctrltrf.c 159;" f line:159 signature:(void) +USBCtrlTrfSetupHandler C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbctrltrf.c 78;" p line:78 file: signature:(void) +USBCtrlTrfTxService C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbctrltrf.c 286;" f line:286 signature:(void) +USBCtrlTrfTxService C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbctrltrf.h 76;" p line:76 signature:(void) +USBDEFS_EP0_BUFF_H C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdefs_ep0_buff.h 41;" d line:41 +USBDEFS_STD_DSC_H C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdefs_std_dsc.h 41;" d line:41 +USBDRV_H C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdrv.h 39;" d line:39 +USBDSC_H C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdsc.h 40;" d line:40 +USBDriverService C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdrv.c 122;" f line:122 signature:(void) +USBDriverService C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdrv.h 198;" p line:198 signature:(void) +USBErrorHandler C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdrv.c 68;" p line:68 file: signature:(void) +USBMMAP_H C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbmmap.h 38;" d line:38 +USBModuleDisable C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdrv.c 60;" p line:60 file: signature:(void) +USBModuleEnable C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdrv.c 59;" p line:59 file: signature:(void) +USBPrepareForNextSetupTrf C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbctrltrf.c 512;" f line:512 signature:(void) +USBPrepareForNextSetupTrf C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbctrltrf.h 79;" p line:79 signature:(void) +USBProtocolResetHandler C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdrv.c 258;" f line:258 signature:(void) +USBProtocolResetHandler C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdrv.c 65;" p line:65 file: signature:(void) +USBRemoteWakeup C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdrv.h 199;" p line:199 signature:(void) +USBSoftDetach C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdrv.h 200;" p line:200 signature:(void) +USBStallHandler C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdrv.c 67;" p line:67 file: signature:(void) +USBStdFeatureReqHandler C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usb9.c 59;" p line:59 file: signature:(void) +USBStdGetDscHandler C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usb9.c 56;" p line:56 file: signature:(void) +USBStdGetStatusHandler C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usb9.c 58;" p line:58 file: signature:(void) +USBStdSetCfgHandler C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usb9.c 210;" f line:210 signature:(void) +USBStdSetCfgHandler C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usb9.c 57;" p line:57 file: signature:(void) +USBSuspend C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdrv.c 62;" p line:62 file: signature:(void) +USBWakeFromSuspend C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdrv.c 63;" p line:63 file: signature:(void) +USB_CFG_DSC C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdefs_std_dsc.h 139;" t line:139 +USB_DEVICE_STATUS C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbmmap.h 79;" t line:79 +USB_DEV_DSC C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdefs_std_dsc.h 129;" t line:129 +USB_EP_DSC C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdefs_std_dsc.h 158;" t line:158 +USB_H C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usb.h 37;" d line:37 +USB_INTF_DSC C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdefs_std_dsc.h 149;" t line:149 +USB_SOF_Handler C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdrv.c 66;" p line:66 file: signature:(void) +VENDOR::0x02 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbctrltrf.h 60;" d line:60 +WAIT_FOR_CMD::0x00 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\boot.h 102;" d line:102 +WAIT_SETUP::0 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbctrltrf.h 45;" d line:45 +WORD C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\typedefs.h 82;" t line:82 +WRITE_CONFIG C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\boot.h 180;" e line:180 enum:_BOOT_DATA_PACKET::<anonymous>::<anonymous> +WRITE_EEDATA C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\boot.h 178;" e line:178 enum:_BOOT_DATA_PACKET::<anonymous>::<anonymous> +WRITE_FLASH C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\boot.h 175;" e line:175 enum:_BOOT_DATA_PACKET::<anonymous>::<anonymous> +W_Index C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdefs_ep0_buff.h 81;" m line:81 struct:_CTRL_TRF_SETUP::<anonymous> +W_Length C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdefs_ep0_buff.h 82;" m line:82 struct:_CTRL_TRF_SETUP::<anonymous> +W_Value C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdefs_ep0_buff.h 80;" m line:80 struct:_CTRL_TRF_SETUP::<anonymous> +Word0 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\typedefs.h 110;" m line:110 struct:_DWORD::<anonymous> +Word1 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\typedefs.h 111;" m line:111 struct:_DWORD::<anonymous> +WriteConfig C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\boot.c 209;" f line:209 signature:(void) +WriteEE C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\boot.c 195;" f line:195 signature:(void) +WriteEEPROM C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\eeprom.c 6;" f line:6 signature:(unsigned char addr, unsigned char data) +WriteEEPROM C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\eeprom.h 2;" p line:2 signature:(unsigned char addr, unsigned char data) +WriteProgMem C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\boot.c 141;" f line:141 signature:(void) +_AD::0x02<<2 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdefs_std_dsc.h 108;" d line:108 +_AS::0x01<<2 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdefs_std_dsc.h 107;" d line:107 +_BDT C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbmmap.h 111;" u line:111 +_BD_STAT C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbmmap.h 81;" u line:81 +_BOOL C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\typedefs.h 150;" g line:150 +_BOOT_DATA_PACKET C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\boot.h 166;" u line:166 +_BSTALL::0x04 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbmmap.h 47;" d line:47 +_BULK::0x02 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdefs_std_dsc.h 102;" d line:102 +_BYTE C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\typedefs.h 44;" u line:44 +_CTRL::0x00 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdefs_std_dsc.h 100;" d line:100 +_CTRL_TRF_DATA C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdefs_ep0_buff.h 179;" u line:179 +_CTRL_TRF_SETUP C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdefs_ep0_buff.h 59;" u line:59 +_DAT0::0x00 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbmmap.h 51;" d line:51 +_DAT1::0x40 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbmmap.h 52;" d line:52 +_DE::0x00<<4 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdefs_std_dsc.h 112;" d line:112 +_DEFAULT::0x01<<7 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdefs_std_dsc.h 95;" d line:95 +_DTSEN::0x08 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbmmap.h 48;" d line:48 +_DTSMASK::0x40 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbmmap.h 53;" d line:53 +_DWORD C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\typedefs.h 86;" u line:86 +_EP01_IN::0x81 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdefs_std_dsc.h 64;" d line:64 +_EP01_OUT::0x01 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdefs_std_dsc.h 63;" d line:63 +_EP02_IN::0x82 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdefs_std_dsc.h 66;" d line:66 +_EP02_OUT::0x02 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdefs_std_dsc.h 65;" d line:65 +_EP03_IN::0x83 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdefs_std_dsc.h 68;" d line:68 +_EP03_OUT::0x03 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdefs_std_dsc.h 67;" d line:67 +_EP04_IN::0x84 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdefs_std_dsc.h 70;" d line:70 +_EP04_OUT::0x04 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdefs_std_dsc.h 69;" d line:69 +_EP05_IN::0x85 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdefs_std_dsc.h 72;" d line:72 +_EP05_OUT::0x05 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdefs_std_dsc.h 71;" d line:71 +_EP06_IN::0x86 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdefs_std_dsc.h 74;" d line:74 +_EP06_OUT::0x06 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdefs_std_dsc.h 73;" d line:73 +_EP07_IN::0x87 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdefs_std_dsc.h 76;" d line:76 +_EP07_OUT::0x07 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdefs_std_dsc.h 75;" d line:75 +_EP08_IN::0x88 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdefs_std_dsc.h 78;" d line:78 +_EP08_OUT::0x08 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdefs_std_dsc.h 77;" d line:77 +_EP09_IN::0x89 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdefs_std_dsc.h 80;" d line:80 +_EP09_OUT::0x09 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdefs_std_dsc.h 79;" d line:79 +_EP10_IN::0x8A C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdefs_std_dsc.h 82;" d line:82 +_EP10_OUT::0x0A C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdefs_std_dsc.h 81;" d line:81 +_EP11_IN::0x8B C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdefs_std_dsc.h 84;" d line:84 +_EP11_OUT::0x0B C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdefs_std_dsc.h 83;" d line:83 +_EP12_IN::0x8C C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdefs_std_dsc.h 86;" d line:86 +_EP12_OUT::0x0C C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdefs_std_dsc.h 85;" d line:85 +_EP13_IN::0x8D C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdefs_std_dsc.h 88;" d line:88 +_EP13_OUT::0x0D C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdefs_std_dsc.h 87;" d line:87 +_EP14_IN::0x8E C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdefs_std_dsc.h 90;" d line:90 +_EP14_OUT::0x0E C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdefs_std_dsc.h 89;" d line:89 +_EP15_IN::0x8F C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdefs_std_dsc.h 92;" d line:92 +_EP15_OUT::0x0F C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdefs_std_dsc.h 91;" d line:91 +_FE::0x01<<4 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdefs_std_dsc.h 113;" d line:113 +_FS::0x04 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdrv.h 52;" d line:52 +_IE::0x02<<4 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdefs_std_dsc.h 114;" d line:114 +_INCDIS::0x10 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbmmap.h 49;" d line:49 +_INT::0x03 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdefs_std_dsc.h 103;" d line:103 +_ISO::0x01 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdefs_std_dsc.h 101;" d line:101 +_KEN::0x20 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbmmap.h 50;" d line:50 +_LS::0x00 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdrv.h 51;" d line:51 +_NS::0x00<<2 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdefs_std_dsc.h 106;" d line:106 +_OEMON::0x40 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdrv.h 56;" d line:56 +_POINTER C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\typedefs.h 125;" u line:125 +_PPBM0::0x00 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdrv.h 48;" d line:48 +_PPBM1::0x01 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdrv.h 49;" d line:49 +_PPBM2::0x02 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdrv.h 50;" d line:50 +_PUEN::0x10 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdrv.h 55;" d line:55 +_RAM::0 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbmmap.h 67;" d line:67 +_ROM::1 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbmmap.h 68;" d line:68 +_RWU::0x01<<5 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdefs_std_dsc.h 97;" d line:97 +_SELF::0x01<<6 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdefs_std_dsc.h 96;" d line:96 +_SY::0x03<<2 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdefs_std_dsc.h 109;" d line:109 +_TREXT::0x08 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdrv.h 54;" d line:54 +_TRINT::0x00 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdrv.h 53;" d line:53 +_UCPU::0x00 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbmmap.h 55;" d line:55 +_USB_CFG_DSC C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdefs_std_dsc.h 134;" s line:134 +_USB_DEVICE_STATUS C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbmmap.h 71;" u line:71 +_USB_DEV_DSC C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdefs_std_dsc.h 122;" s line:122 +_USB_EP_DSC C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdefs_std_dsc.h 154;" s line:154 +_USB_INTF_DSC C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdefs_std_dsc.h 144;" s line:144 +_USIE::0x80 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbmmap.h 54;" d line:54 +_UTEYE::0x80 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdrv.h 57;" d line:57 +_WORD C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\typedefs.h 60;" u line:60 +_byte C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\boot.h 168;" m line:168 union:_BOOT_DATA_PACKET +_byte C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\typedefs.h 46;" m line:46 union:_BYTE +_byte C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdefs_ep0_buff.h 184;" m line:184 struct:_CTRL_TRF_DATA::<anonymous> +_byte C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdefs_ep0_buff.h 64;" m line:64 struct:_CTRL_TRF_SETUP::<anonymous> +_byte C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbmmap.h 73;" m line:73 union:_USB_DEVICE_STATUS +_byte C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbmmap.h 83;" m line:83 union:_BD_STAT +_byte0 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdefs_ep0_buff.h 190;" m line:190 struct:_CTRL_TRF_DATA::<anonymous> +_byte1 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdefs_ep0_buff.h 191;" m line:191 struct:_CTRL_TRF_DATA::<anonymous> +_byte2 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdefs_ep0_buff.h 192;" m line:192 struct:_CTRL_TRF_DATA::<anonymous> +_byte3 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdefs_ep0_buff.h 193;" m line:193 struct:_CTRL_TRF_DATA::<anonymous> +_byte4 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdefs_ep0_buff.h 194;" m line:194 struct:_CTRL_TRF_DATA::<anonymous> +_byte5 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdefs_ep0_buff.h 195;" m line:195 struct:_CTRL_TRF_DATA::<anonymous> +_byte6 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdefs_ep0_buff.h 196;" m line:196 struct:_CTRL_TRF_DATA::<anonymous> +_byte7 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdefs_ep0_buff.h 197;" m line:197 struct:_CTRL_TRF_DATA::<anonymous> +_dword C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\typedefs.h 88;" m line:88 union:_DWORD +_high_ISR C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\main.c 114;" f line:114 signature:(void) +_low_ISR C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\main.c 120;" f line:120 signature:(void) +_word C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\typedefs.h 133;" m line:133 union:_POINTER +_word C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\typedefs.h 62;" m line:62 union:_WORD +_word0 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdefs_ep0_buff.h 201;" m line:201 struct:_CTRL_TRF_DATA::<anonymous> +_word1 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdefs_ep0_buff.h 202;" m line:202 struct:_CTRL_TRF_DATA::<anonymous> +_word2 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdefs_ep0_buff.h 203;" m line:203 struct:_CTRL_TRF_DATA::<anonymous> +_word3 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdefs_ep0_buff.h 204;" m line:204 struct:_CTRL_TRF_DATA::<anonymous> +b0 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\typedefs.h 49;" m line:49 struct:_BYTE::<anonymous> +b1 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\typedefs.h 50;" m line:50 struct:_BYTE::<anonymous> +b2 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\typedefs.h 51;" m line:51 struct:_BYTE::<anonymous> +b3 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\typedefs.h 52;" m line:52 struct:_BYTE::<anonymous> +b4 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\typedefs.h 53;" m line:53 struct:_BYTE::<anonymous> +b5 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\typedefs.h 54;" m line:54 struct:_BYTE::<anonymous> +b6 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\typedefs.h 55;" m line:55 struct:_BYTE::<anonymous> +b7 C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\typedefs.h 56;" m line:56 struct:_BYTE::<anonymous> +bAltID C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdefs_ep0_buff.h 133;" m line:133 struct:_CTRL_TRF_SETUP::<anonymous> +bAltID_H C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdefs_ep0_buff.h 134;" m line:134 struct:_CTRL_TRF_SETUP::<anonymous> +bAltSetting C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdefs_std_dsc.h 147;" m line:147 struct:_USB_INTF_DSC +bCfgRSD C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdefs_ep0_buff.h 123;" m line:123 struct:_CTRL_TRF_SETUP::<anonymous> +bCfgValue C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdefs_ep0_buff.h 122;" m line:122 struct:_CTRL_TRF_SETUP::<anonymous> +bCfgValue C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdefs_std_dsc.h 137;" m line:137 struct:_USB_CFG_DSC +bDevADR C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdefs_ep0_buff.h 111;" m line:111 struct:_CTRL_TRF_SETUP::<anonymous> +bDevADRH C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdefs_ep0_buff.h 112;" m line:112 struct:_CTRL_TRF_SETUP::<anonymous> +bDevCls C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdefs_std_dsc.h 125;" m line:125 struct:_USB_DEV_DSC +bDevProtocol C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdefs_std_dsc.h 125;" m line:125 struct:_USB_DEV_DSC +bDevSubCls C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdefs_std_dsc.h 125;" m line:125 struct:_USB_DEV_DSC +bDscIndex C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdefs_ep0_buff.h 101;" m line:101 struct:_CTRL_TRF_SETUP::<anonymous> +bDscType C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdefs_ep0_buff.h 102;" m line:102 struct:_CTRL_TRF_SETUP::<anonymous> +bDscType C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdefs_std_dsc.h 124;" m line:124 struct:_USB_DEV_DSC +bDscType C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdefs_std_dsc.h 136;" m line:136 struct:_USB_CFG_DSC +bDscType C:\krobot\USB_Module\Motor_Controller\Firmware\Bootloader\usbdefs_std_dsc.h 146;" m line:146 struct:_USB_INTF_DSC +bDscType C:\krobot\USB_Module\Mo... [truncated message content] |
From: Jérémie D. <Ba...@us...> - 2010-05-04 08:10:56
|
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "krobot". The branch, master has been updated via b168cb7e33cd61c7c26dcc832c47868fec702b92 (commit) from 6d607ef2173098a9645852f26aa482198d97a183 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit b168cb7e33cd61c7c26dcc832c47868fec702b92 Author: Jérémie Dimino <je...@di...> Date: Tue May 4 10:09:53 2010 +0200 add soem missing notification mode ----------------------------------------------------------------------- Changes: diff --git a/info/control/driver/export_unsafe.ml b/info/control/driver/export_unsafe.ml index e05467e..b5b6a12 100644 --- a/info/control/driver/export_unsafe.ml +++ b/info/control/driver/export_unsafe.ml @@ -47,7 +47,7 @@ let make_method card cmd = card.card_name) let make_interface card name commands = - OBus_object.make_interface name (List.map (make_method card) commands) + OBus_object.make_interface name ~notify_mode:OBus_object.notify_none (List.map (make_method card) commands) let interface name card = let interface_commands = List.assoc name commands in hooks/post-receive -- krobot |
From: Jérémie D. <Ba...@us...> - 2010-05-04 07:46:19
|
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "krobot". The branch, master has been updated via 6d607ef2173098a9645852f26aa482198d97a183 (commit) from 457f54904b54d3701d6b948ec253c25e4acb9b06 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 6d607ef2173098a9645852f26aa482198d97a183 Author: Jérémie Dimino <je...@di...> Date: Tue May 4 09:45:42 2010 +0200 replace OBus_object.add_interface by OBus_object.add_interfaces ----------------------------------------------------------------------- Changes: diff --git a/info/control/driver/driver.ml b/info/control/driver/driver.ml index 2b3c3e2..3816b39 100644 --- a/info/control/driver/driver.ml +++ b/info/control/driver/driver.ml @@ -149,11 +149,11 @@ struct let value = poll ~update_delay:1.0 card 0 (fun card -> snd =|< USBCard.call Commands.Compass.get card ()) let () = - OBus_object.add_interface obus - (make ~notify_mode + OBus_object.add_interfaces obus + [make ~notify_mode { p_Value = (fun () -> React.S.map Int32.of_int value); - }) + }] end (* +-----------------------------------------------------------------+ @@ -186,8 +186,8 @@ struct let backlight_off () = USBCard.call Commands.LCD.backlight_off (get_card card) () let () = - OBus_object.add_interface obus - (make ~notify_mode + OBus_object.add_interfaces obus + [make ~notify_mode { m_SetLCD = ( fun ctx () lines -> @@ -204,7 +204,7 @@ struct lwt () = backlight_off () in OBus_method.return ctx () ); - }) + }] end (* +-----------------------------------------------------------------+ @@ -233,8 +233,8 @@ struct USBCard.call Commands.Servo.set_state (get_card card) (0b10100, 0, 0, -40, 0, -20) let () = - OBus_object.add_interface obus - (make ~notify_mode { + OBus_object.add_interfaces obus + [make ~notify_mode { m_ClawsEnable = ( fun ctx obj () -> lwt result = claws_enable obj in @@ -260,7 +260,7 @@ struct lwt result = claws_take obj in OBus_method.return ctx result ); - }) + }] end (* +-----------------------------------------------------------------+ @@ -336,8 +336,8 @@ struct USBCard.call Commands.AX12.goto (get_card card) (3, 200, 0, `Now) let () = - OBus_object.add_interface obus - (make ~notify_mode + OBus_object.add_interfaces obus + [make ~notify_mode { m_SetAX12 = ( fun ctx () positions -> @@ -377,7 +377,7 @@ struct lwt result = grip_release obj in OBus_method.return ctx result ); - }) + }] end (* +-----------------------------------------------------------------+ @@ -393,11 +393,11 @@ struct let value = poll card (Array.make 16 false) (fun card -> USBCard.call Commands.Logic_sensors.get_state card ()) let () = - OBus_object.add_interface obus - (make ~notify_mode + OBus_object.add_interfaces obus + [make ~notify_mode { p_Value = (fun () -> React.S.map Array.to_list value); - }) + }] end (* +-----------------------------------------------------------------+ @@ -425,8 +425,8 @@ struct let value = poll card (Array.make 8 0) (fun card -> USBCard.call Commands.Range_finders.get_state card ()) let () = - OBus_object.add_interface obus - (make ~notify_mode + OBus_object.add_interfaces obus + [make ~notify_mode { p_Value = (fun () -> React.S.map (fun x -> List.map Int32.of_int (Array.to_list x)) value); m_GetCalibration = ( @@ -455,7 +455,7 @@ struct lwt () = calibration_continue () in OBus_method.return ctx () ); - }) + }] end (* +-----------------------------------------------------------------+ @@ -487,8 +487,8 @@ struct USBCard.call Commands.Gate.move (get_card card) (`Both, true, 10, 10) let () = - OBus_object.add_interface obus - (make ~notify_mode + OBus_object.add_interfaces obus + [make ~notify_mode { m_Enable = ( fun ctx obj () -> @@ -520,7 +520,7 @@ struct lwt result = stop obj in OBus_method.return ctx result ); - }) + }] end (* +-----------------------------------------------------------------+ @@ -845,8 +845,8 @@ struct return () let () = - OBus_object.add_interface obus - (make ~notify_mode + OBus_object.add_interfaces obus + [make ~notify_mode { m_Turn = ( fun ctx () (angle, velocity, acceleration) -> @@ -905,7 +905,7 @@ struct (fun ctx () delay -> set_inhibit_backward_until delay)); p_State = (fun () -> state_info); - }) + }] end (* +-----------------------------------------------------------------+ @@ -948,8 +948,8 @@ struct let () = OBus_object.attach obus (); - OBus_object.add_interface obus - (make ~notify_mode + OBus_object.add_interfaces obus + [make ~notify_mode { p_DevicesStatus = (fun () -> devices_status); m_Shutdown = ( @@ -957,7 +957,7 @@ struct lwt () = shutdown ctx () in OBus_method.return ctx () ); - }) + }] end (* +-----------------------------------------------------------------+ hooks/post-receive -- krobot |
From: Jérémie D. <Ba...@us...> - 2010-05-03 22:39:14
|
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "krobot". The branch, master has been updated via 457f54904b54d3701d6b948ec253c25e4acb9b06 (commit) from 66dedfca5354b3f86c64a228aed599a524ab2ff4 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 457f54904b54d3701d6b948ec253c25e4acb9b06 Author: Kro[bot] <krobot@wally.(none)> Date: Mon May 3 22:37:56 2010 +0000 better parameters for openning the gate ----------------------------------------------------------------------- Changes: diff --git a/info/control/driver/driver.ml b/info/control/driver/driver.ml index 7c24272..2b3c3e2 100644 --- a/info/control/driver/driver.ml +++ b/info/control/driver/driver.ml @@ -478,7 +478,7 @@ struct USBCard.call Commands.Gate.move (get_card card) (`Both, true, 200, 80) let release () = - USBCard.call Commands.Gate.move (get_card card) (`Both, false, 200, 100) + USBCard.call Commands.Gate.move (get_card card) (`Both, false, 255, 100) let hold_closed () = USBCard.call Commands.Gate.move (get_card card) (`Both, true, 200, 1 lsl 29) hooks/post-receive -- krobot |
From: Jérémie D. <Ba...@us...> - 2010-05-03 22:29:26
|
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "krobot". The branch, master has been updated via 66dedfca5354b3f86c64a228aed599a524ab2ff4 (commit) via 20b5a26a977291905b9653372ab4f2ab6ae44619 (commit) from a6065f0298911af84185793f11f82ef31b3ce992 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 66dedfca5354b3f86c64a228aed599a524ab2ff4 Author: Jérémie Dimino <je...@di...> Date: Tue May 4 00:28:10 2010 +0200 high-level commands for the gate commit 20b5a26a977291905b9653372ab4f2ab6ae44619 Author: Kro[bot] <krobot@wally.(none)> Date: Mon May 3 21:33:54 2010 +0000 commands for the gate ----------------------------------------------------------------------- Changes: diff --git a/info/control/clients/script.ml b/info/control/clients/script.ml index f96ea83..a537b04 100644 --- a/info/control/clients/script.ml +++ b/info/control/clients/script.ml @@ -505,7 +505,30 @@ let () = Krobot.claws_disable krobot); register ~path:["claws"] "take" f0 (fun logger krobot -> - Krobot.claws_take krobot) + Krobot.claws_take krobot); + + (* +---------------------------------------------------------------+ + | Gate | + +---------------------------------------------------------------+ *) + + register ~path:["gate"] "enable" f0 + (fun logger krobot -> + Krobot.Gate.enable krobot); + register ~path:["gate"] "disable" f0 + (fun logger krobot -> + Krobot.Gate.disable krobot); + register ~path:["gate"] "close" f0 + (fun logger krobot -> + Krobot.Gate.close krobot); + register ~path:["gate"] "release" f0 + (fun logger krobot -> + Krobot.Gate.release krobot); + register ~path:["gate"] "hold-closed" f0 + (fun logger krobot -> + Krobot.Gate.hold_closed krobot); + register ~path:["gate"] "stop" f0 + (fun logger krobot -> + Krobot.Gate.stop krobot) (* +-----------------------------------------------------------------+ | Unsafe commands | @@ -577,8 +600,13 @@ let make_command cmd = { fun args logger krobot -> let args = List.map2 - (fun (name, str) typ -> arg_of_string typ str) - args + (fun name typ -> + match try Some(List.assoc name args) with Not_found -> None with + | Some value -> + arg_of_string typ value + | None -> + Printf.ksprintf failwith "missing %S argument" name) + (Value.arg_names cmd.Commands.send) (Value.C.type_sequence (Value.arg_types cmd.Commands.send)) in lwt result = Krobot.unsafe_call cmd krobot args in diff --git a/info/control/driver/driver.ml b/info/control/driver/driver.ml index 67cb2d7..7c24272 100644 --- a/info/control/driver/driver.ml +++ b/info/control/driver/driver.ml @@ -56,7 +56,7 @@ let get_card card = (* List of services, by cards *) let services = [ - card_interface, ["Servo"; "Compass"; "AX12"; "LCD"]; + card_interface, ["Servo"; "Compass"; "AX12"; "LCD"; "Gate"]; card_monitoring, ["Power"]; card_sensor, ["LogicSensors"; "RangeFinders"]; card_motor, ["Motors"]; @@ -459,6 +459,71 @@ struct end (* +-----------------------------------------------------------------+ + | Gate | + +-----------------------------------------------------------------+ *) + +module Gate = +struct + include Service(struct let name = "Gate" end) + + open Krobot_interfaces.Fr_krobot_Device_Gate + + let enable () = + USBCard.call Commands.Gate.enable (get_card card) (`Both) + + let disable () = + USBCard.call Commands.Gate.disable (get_card card) (`Both) + + let close () = + USBCard.call Commands.Gate.move (get_card card) (`Both, true, 200, 80) + + let release () = + USBCard.call Commands.Gate.move (get_card card) (`Both, false, 200, 100) + + let hold_closed () = + USBCard.call Commands.Gate.move (get_card card) (`Both, true, 200, 1 lsl 29) + + let stop () = + USBCard.call Commands.Gate.move (get_card card) (`Both, true, 10, 10) + + let () = + OBus_object.add_interface obus + (make ~notify_mode + { + m_Enable = ( + fun ctx obj () -> + lwt result = enable obj in + OBus_method.return ctx result + ); + m_Disable = ( + fun ctx obj () -> + lwt result = disable obj in + OBus_method.return ctx result + ); + m_Close = ( + fun ctx obj () -> + lwt result = close obj in + OBus_method.return ctx result + ); + m_Release = ( + fun ctx obj () -> + lwt result = release obj in + OBus_method.return ctx result + ); + m_HoldClosed = ( + fun ctx obj () -> + lwt result = hold_closed obj in + OBus_method.return ctx result + ); + m_Stop = ( + fun ctx obj () -> + lwt result = stop obj in + OBus_method.return ctx result + ); + }) +end + +(* +-----------------------------------------------------------------+ | Motors | +-----------------------------------------------------------------+ *) @@ -1129,6 +1194,7 @@ lwt () = OBus_object.export bus Logic_sensors.obus; OBus_object.export bus Range_finders.obus; OBus_object.export bus Motors.obus; + OBus_object.export bus Gate.obus; OBus_object.export bus (Card.make card_interface ["fr"; "krobot"; "Cards"; "Interface"]).Card.obus; OBus_object.export bus (Card.make card_sensor ["fr"; "krobot"; "Cards"; "Sensor"]).Card.obus; diff --git a/info/control/lib-krobot/krobot.ml b/info/control/lib-krobot/krobot.ml index 9f05c13..e41006e 100644 --- a/info/control/lib-krobot/krobot.ml +++ b/info/control/lib-krobot/krobot.ml @@ -72,6 +72,34 @@ let team krobot = let jack krobot = React.S.map (fun ls -> ls.(15)) krobot.logic_sensors *) + +(* +-----------------------------------------------------------------+ + | Gate | + +-----------------------------------------------------------------+ *) + +module Gate = +struct + open Krobot_interfaces.Fr_krobot_Device_Gate + + let enable krobot = + OBus_method.call m_Enable (device krobot "Gate") () + + let disable krobot = + OBus_method.call m_Disable (device krobot "Gate") () + + let close krobot = + OBus_method.call m_Close (device krobot "Gate") () + + let release krobot = + OBus_method.call m_Release (device krobot "Gate") () + + let hold_closed krobot = + OBus_method.call m_HoldClosed (device krobot "Gate") () + + let stop krobot = + OBus_method.call m_Stop (device krobot "Gate") () +end + (* +-----------------------------------------------------------------+ | Compass | +-----------------------------------------------------------------+ *) diff --git a/info/control/lib-krobot/krobot.mli b/info/control/lib-krobot/krobot.mli index 2c096b2..70157cd 100644 --- a/info/control/lib-krobot/krobot.mli +++ b/info/control/lib-krobot/krobot.mli @@ -47,6 +47,28 @@ type devices_status = { val devices_status : t -> devices_status OBus_property.r (** List of services with their status *) +(** {6 Gate} *) + +module Gate : sig + val enable : t -> unit Lwt.t + (** Enable the motor of the gate *) + + val disable : t -> unit Lwt.t + (** Disable the motor of the gate *) + + val close : t -> unit Lwt.t + (** Close the gate *) + + val release : t -> unit Lwt.t + (** Open the gate *) + + val hold_closed : t -> unit Lwt.t + (** Close the gate and keep it that way *) + + val stop : t -> unit Lwt.t + (** Stop holding the gate *) +end + (** {6 LCD} *) val set_lcd : t -> string list -> unit Lwt.t diff --git a/info/control/protocol/commands.ml b/info/control/protocol/commands.ml index 11438e8..cef550b 100644 --- a/info/control/protocol/commands.ml +++ b/info/control/protocol/commands.ml @@ -942,5 +942,55 @@ struct } end +module Gate = +struct + let () = make_interface "Gate" + + let motor : [ `Left | `Both | `Right ] single = + enum Uint8 + [("left", `Left, PcInterface.motor_left); + ("both", `Both, PcInterface.motor_both); + ("right", `Right, PcInterface.motor_right)] + + let enable = + register { + name = "Enable"; + response = false; + command = PcInterface.cmd_motor; + request = Some PcInterface.motor_enable; + send = (arg1 + ("motor", motor)); + recv = arg0; + section = ""; + } + + let disable = + register { + name = "Disable"; + response = false; + command = PcInterface.cmd_motor; + request = Some PcInterface.motor_disable; + send = (arg1 + ("motor", motor)); + recv = arg0; + section = ""; + } + + let move = + register { + name = "Move"; + response = false; + command = PcInterface.cmd_motor; + request = Some PcInterface.motor_move; + send = (arg4 + ("motor", motor) + ("sens", boolean) + ("velocity", uint8) + ("duration", uint32)); + recv = arg0; + section = ""; + } +end + (* Remove references *) let commands = List.map (fun (name, members) -> (name, !members)) !commands diff --git a/info/control/protocol/krobot.obus b/info/control/protocol/krobot.obus index 45b5e03..e10f3f3 100644 --- a/info/control/protocol/krobot.obus +++ b/info/control/protocol/krobot.obus @@ -15,6 +15,26 @@ interface have changed. *) +interface "fr.krobot.Device.Gate" { + method Enable : () -> () + (** Enable the motor of the gate *) + + method Disable : () -> () + (** Disable the motor of the gate *) + + method Close : () -> () + (** Close the gate *) + + method Release : () -> () + (** Open the gate *) + + method HoldClosed : () -> () + (** Close the gate and keep it that way *) + + method Stop : () -> () + (** Stop holding the gate *) +} + interface "fr.krobot.Device.Compass" { property.r Value : int32 (** Current value of the compass *) hooks/post-receive -- krobot |
From: Jérémie D. <Ba...@us...> - 2010-05-03 21:45:30
|
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "krobot". The branch, master has been updated via a6065f0298911af84185793f11f82ef31b3ce992 (commit) via 50da1c04d5b6576dbeb4ea03bf4046bdf35fe2bf (commit) from a6ceffa1e5ac7a21116ac9931788c8b425782a68 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit a6065f0298911af84185793f11f82ef31b3ce992 Merge: a6ceffa1e5ac7a21116ac9931788c8b425782a68 50da1c04d5b6576dbeb4ea03bf4046bdf35fe2bf Author: Jérémie Dimino <je...@di...> Date: Mon May 3 23:43:20 2010 +0200 Merge branch 'master' of ssh://wally/home/krobot/krobot into HEAD Conflicts: info/control/driver/driver.ml commit 50da1c04d5b6576dbeb4ea03bf4046bdf35fe2bf Author: Kro[bot] <krobot@wally.(none)> Date: Sat Apr 24 10:03:25 2010 +0000 fix exceptions handling ----------------------------------------------------------------------- Changes: hooks/post-receive -- krobot |
From: Jérémie D. <Ba...@us...> - 2010-05-03 20:53:27
|
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "krobot". The branch, master has been updated via a6ceffa1e5ac7a21116ac9931788c8b425782a68 (commit) from 571cf29bee323ec3af59dee4596c2bca363e119b (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit a6ceffa1e5ac7a21116ac9931788c8b425782a68 Author: Jérémie Dimino <je...@di...> Date: Mon May 3 22:52:29 2010 +0200 add the motor_move command ----------------------------------------------------------------------- Changes: diff --git a/info/control/protocol/commands.ml b/info/control/protocol/commands.ml index ebea00f..11438e8 100644 --- a/info/control/protocol/commands.ml +++ b/info/control/protocol/commands.ml @@ -667,6 +667,21 @@ struct section = ""; } + let move = + register { + name = "Move"; + response = false; + command = PcInterface.cmd_motor; + request = Some PcInterface.motor_move; + send = (arg4 + ("motor", motor) + ("sens", boolean) + ("velocity", uint8) + ("duration", uint32)); + recv = arg0; + section = ""; + } + let get_velocities = register { name = "GetVelocities"; hooks/post-receive -- krobot |
From: Olivier B. <Ba...@us...> - 2010-05-03 20:43:39
|
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "krobot". The branch, master has been updated via 571cf29bee323ec3af59dee4596c2bca363e119b (commit) from bd7d041911c2068e56439d09796d395a78a8c911 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 571cf29bee323ec3af59dee4596c2bca363e119b Author: unknown <Olivier@.(none)> Date: Mon May 3 22:43:14 2010 +0200 New firmware version to handle the door ----------------------------------------------------------------------- Changes: diff --git a/elec/boards/Interface_Robot/Firmware/main.c b/elec/boards/Interface_Robot/Firmware/main.c index 2addeb9..78620d2 100644 --- a/elec/boards/Interface_Robot/Firmware/main.c +++ b/elec/boards/Interface_Robot/Firmware/main.c @@ -245,22 +245,26 @@ char ResetSource(void); // On rtorise l'interruption PIR1bits.RCIF = 0; } -/* - // Interruption par le timer0 - if (INTCONbits.TMR0IF) { - interruptMotor1(); - - // On rtorise l'interruption - INTCONbits.TMR0IF = 0; - } -*/ - // Interruption par le timer1 - if (PIR1bits.TMR1IF) { - interruptMotor2(); - - // On rtorise l'interruption - PIR1bits.TMR1IF = 0; - } + + #ifdef MODE_INAB + // Interruption par le timer0 + if (INTCONbits.TMR0IF) { + interruptMotor1(); + + // On rtorise l'interruption + INTCONbits.TMR0IF = 0; + } + #endif + + #ifdef MODE_SENS + // Interruption par le timer1 + if (PIR1bits.TMR1IF) { + interruptMotor2(); + + // On rtorise l'interruption + PIR1bits.TMR1IF = 0; + } + #endif // restauration des registres de calcul PRODL = sProdL; @@ -276,13 +280,15 @@ char ResetSource(void); sProdL = PRODL; sProdH = PRODH; - // Interruption par le timer0 - if (INTCONbits.TMR0IF) { - interruptMotor1(); - - // On rtorise l'interruption - INTCONbits.TMR0IF = 0; - } + #ifdef MODE_SENS + // Interruption par le timer0 + if (INTCONbits.TMR0IF) { + interruptMotor1(); + + // On rtorise l'interruption + INTCONbits.TMR0IF = 0; + } + #endif // restauration des registres de calcul PRODL = sProdL; diff --git a/elec/boards/Interface_Robot/Firmware/mcc.c b/elec/boards/Interface_Robot/Firmware/mcc.c index ed902f8..2f8194b 100644 --- a/elec/boards/Interface_Robot/Firmware/mcc.c +++ b/elec/boards/Interface_Robot/Firmware/mcc.c @@ -15,9 +15,15 @@ volatile unsigned long durationMotor2 = 0; void initMCC(char withEncoder) { /* Initialisation des PINs */ - TRISA&= 0b11111110; /* M1_SENS */ - TRISB&= 0b11000011; /* M1_EN, M2_PWM, M2_SENS, M2_EN */ - TRISC&= 0b11111011; /* M1_PWM */ + #ifdef MODE_SENS + TRISA&= 0b11111110; /* M1_SENS */ + TRISB&= 0b11000011; /* M1_EN, M2_PWM, M2_SENS, M2_EN */ + TRISC&= 0b11111011; /* M1_PWM */ + #else + TRISA&= 0b11111110; /* M1_INA */ + TRISB&= 0b11101011; /* M1_EN, M1_INB */ + TRISC&= 0b11111011; /* M1_PWM */ + #endif /* Configuration du timer2 */ OpenTimer2(TIMER_INT_OFF /* pas d'interruption sur le timer2 */ @@ -45,37 +51,46 @@ void initMCC(char withEncoder) { ); } - INTCON2bits.TMR0IP = 0; // Low priority interrupt for timer0 - - // Configuration du timer1 - if (withEncoder & MOTOR_LEFT) { - OpenTimer1(TIMER_INT_ON // active le timer1 - & T1_16BIT_RW // compte sur 16 bits - & T1_SOURCE_EXT // utilise le signal de l'encodeur 2 comme horloge - & T1_PS_1_1 // incrnte le compteur haque cycle (1:1) - & T1_OSC1EN_OFF // pas d'oscillateur sur le timer1 - & T1_SYNC_EXT_OFF // ne pas se synchroniser sur une horloge externe - ); - - WriteTimer1(0); - } - else { - OpenTimer1(TIMER_INT_ON // active le timer - & T1_16BIT_RW // compte sur 16 bits - & T1_SOURCE_INT // utilise l'horloge interne - & T1_PS_1_8 // incrnte le compteur tout les 8 cycles (1:8) - & T1_OSC1EN_OFF // pas d'oscillateur sur le timer1 - & T1_SYNC_EXT_OFF // ne pas se synchroniser sur une horloge externe - ); - } + #ifdef MODE_SENS + INTCON2bits.TMR0IP = 0; // Low priority interrupt for timer0 + + // Configuration du timer1 + if (withEncoder & MOTOR_LEFT) { + OpenTimer1(TIMER_INT_ON // active le timer1 + & T1_16BIT_RW // compte sur 16 bits + & T1_SOURCE_EXT // utilise le signal de l'encodeur 2 comme horloge + & T1_PS_1_1 // incrnte le compteur haque cycle (1:1) + & T1_OSC1EN_OFF // pas d'oscillateur sur le timer1 + & T1_SYNC_EXT_OFF // ne pas se synchroniser sur une horloge externe + ); + + WriteTimer1(0); + } + else { + OpenTimer1(TIMER_INT_ON // active le timer + & T1_16BIT_RW // compte sur 16 bits + & T1_SOURCE_INT // utilise l'horloge interne + & T1_PS_1_8 // incrnte le compteur tout les 8 cycles (1:8) + & T1_OSC1EN_OFF // pas d'oscillateur sur le timer1 + & T1_SYNC_EXT_OFF // ne pas se synchroniser sur une horloge externe + ); + } + #endif /* Initialisation de l't des PINs */ - M1_EN = 0; - M2_EN = 0; - M1_SENS = 0; - M2_SENS = 0; - M1_PWM = 0; - M2_PWM = 0; + #ifdef MODE_SENS + M1_EN = 0; + M2_EN = 0; + M1_PWM = 0; + M2_PWM = 0; + M1_SENS = 0; + M2_SENS = 0; + #else + M1_EN = 0; + M1_PWM = 0; + M1_INA = 0; + M1_INB = 0; + #endif } void interruptMotor1() { @@ -88,23 +103,30 @@ void interruptMotor1() { //ClosePWM1(); CCP1CON = 0; M1_PWM = 0; + + #ifdef MODE_INAB + M1_INA = 0; + M1_INB = 0; + #endif } } } -void interruptMotor2() { - WriteTimer1(5536); // 2^16 - 60 000 : la prochaine interruption a lieu dans 60 000 cycles * 8 = 40 ms - - if (durationMotor2 > 0) { - durationMotor2--; - - if (durationMotor2 == 0) { - //ClosePWM2(); - CCP2CON = 0; - M2_PWM = 0; +#ifdef MODE_SENS + void interruptMotor2() { + WriteTimer1(5536); // 2^16 - 60 000 : la prochaine interruption a lieu dans 60 000 cycles * 8 = 40 ms + + if (durationMotor2 > 0) { + durationMotor2--; + + if (durationMotor2 == 0) { + //ClosePWM2(); + CCP2CON = 0; + M2_PWM = 0; + } } } -} +#endif /** * Active un ou plusieurs axe(s) moteur(s). @@ -118,11 +140,15 @@ void interruptMotor2() { * #MOTOR_BOTH les 2 moteurs */ void enableMotor(char axis) { - if (axis & MOTOR_RIGHT) + #ifdef MODE_SENS + if (axis & MOTOR_RIGHT) + M1_EN = 1; + + if (axis & MOTOR_LEFT) + M2_EN = 1; + #else M1_EN = 1; - - if (axis & MOTOR_LEFT) - M2_EN = 1; + #endif } /** @@ -136,11 +162,15 @@ void enableMotor(char axis) { * #MOTOR_BOTH les 2 moteurs */ void disableMotor(char axis) { - if (axis & MOTOR_RIGHT) + #ifdef MODE_SENS + if (axis & MOTOR_RIGHT) + M1_EN = 0; + + if (axis & MOTOR_LEFT) + M2_EN = 0; + #else M1_EN = 0; - - if (axis & MOTOR_LEFT) - M2_EN = 0; + #endif } /** @@ -155,11 +185,40 @@ void disableMotor(char axis) { * @param duration durd'activation, en ms (0 = rotation continue) */ void move(char axis, char sens, BYTE speed, unsigned long duration) { - if (axis & MOTOR_RIGHT) { + #ifdef MODE_SENS + if (axis & MOTOR_RIGHT) { + durationMotor1 = duration / 40; + WriteTimer0(5536); + + M1_SENS = sens; + + // PWM period =[(period ) + 1] x 4 x TOSC x TMR2 prescaler + // TMR2 prescaler = 1 + OpenPWM1((char) ((float) CLOCK_FREQ / (4.0 * (float) PWM_FREQ * 16.0) - 1.0)); + + // PWM x Duty cycle = (DCx<9:0>) x TOSC + SetDCPWM1((unsigned int) ((float) speed / 255.0 * (MOTOR1_VOLTAGE / H_BRIDGE_VOLTAGE) * (float) CLOCK_FREQ / (float) PWM_FREQ) / 16.0); + } + + if (axis & MOTOR_LEFT) { + durationMotor2 = duration / 40; + WriteTimer1(5536); + + M2_SENS = sens; + + // PWM period =[(period ) + 1] x 4 x TOSC x TMR2 prescaler + // TMR2 prescaler = 1 + OpenPWM2((char) ((float) CLOCK_FREQ / (4.0 * (float) PWM_FREQ * 16.0) - 1.0)); + + // PWM x Duty cycle = (DCx<9:0>) x TOSC + SetDCPWM2((unsigned int) ((float) speed / 255.0 * (MOTOR1_VOLTAGE / H_BRIDGE_VOLTAGE) * (float) CLOCK_FREQ / (float) PWM_FREQ) / 16.0); + } + #else durationMotor1 = duration / 40; WriteTimer0(5536); - M1_SENS = sens; + M1_INA = sens; + M1_INB = ~sens; // PWM period =[(period ) + 1] x 4 x TOSC x TMR2 prescaler // TMR2 prescaler = 1 @@ -167,34 +226,35 @@ void move(char axis, char sens, BYTE speed, unsigned long duration) { // PWM x Duty cycle = (DCx<9:0>) x TOSC SetDCPWM1((unsigned int) ((float) speed / 255.0 * (MOTOR1_VOLTAGE / H_BRIDGE_VOLTAGE) * (float) CLOCK_FREQ / (float) PWM_FREQ) / 16.0); - } - - if (axis & MOTOR_LEFT) { - durationMotor2 = duration / 40; - WriteTimer1(5536); - - M2_SENS = sens; - - // PWM period =[(period ) + 1] x 4 x TOSC x TMR2 prescaler - // TMR2 prescaler = 1 - OpenPWM2((char) ((float) CLOCK_FREQ / (4.0 * (float) PWM_FREQ * 16.0) - 1.0)); - - // PWM x Duty cycle = (DCx<9:0>) x TOSC - SetDCPWM2((unsigned int) ((float) speed / 255.0 * (MOTOR1_VOLTAGE / H_BRIDGE_VOLTAGE) * (float) CLOCK_FREQ / (float) PWM_FREQ) / 16.0); - } + #endif } BOOL checkTOR(void) { // M1_SENS == 0 : up (IN3 = RD7 = TOR2) // M1_SENS == 1 : down (IN2 = RD6 = TOR1) - if ((M1_SENS == 1 && !TOR1) || (M1_SENS == 0 && !TOR2)) { - //ClosePWM1(); - CCP1CON = 0; - M1_PWM = 0; - durationMotor1 = 0; - return TRUE; - } + #ifdef MODE_SENS + if ((M1_SENS == 1 && !TOR1) || (M1_SENS == 0 && !TOR2)) { + //ClosePWM1(); + CCP1CON = 0; + M1_PWM = 0; + durationMotor1 = 0; + return TRUE; + } + #else + if ((M1_INA == 1 && M1_INB == 0 && !TOR1) || (M1_INA == 0 && M1_INB == 1 && !TOR2)) { + CCP1CON = 0; + M1_PWM = 0; + + #ifdef MODE_INAB + M1_INA = 0; + M1_INB = 0; + #endif + + durationMotor1 = 0; + return TRUE; + } + #endif return FALSE; } diff --git a/elec/boards/Interface_Robot/Firmware/mcc.h b/elec/boards/Interface_Robot/Firmware/mcc.h index 814f33b..bb7c985 100644 --- a/elec/boards/Interface_Robot/Firmware/mcc.h +++ b/elec/boards/Interface_Robot/Firmware/mcc.h @@ -18,6 +18,8 @@ #define H_BRIDGE_VOLTAGE 24.0 #define MOTOR1_VOLTAGE 15.0 #define MOTOR2_VOLTAGE 15.0 +//#define MODE_SENS +#define MODE_INAB // Entr / sorties #define ENC1_A PORTAbits.RA4 @@ -26,6 +28,8 @@ #define M1_EN PORTBbits.RB2 #define M1_PWM PORTCbits.RC2 #define M1_SENS PORTAbits.RA0 +#define M1_INA PORTAbits.RA0 +#define M1_INB PORTBbits.RB4 // Only available if M2 is not used (mode MODE_INAB) #define ENC2_A PORTCbits.RC0 #define ENC2_B PORTAbits.RA2 diff --git a/elec/boards/Interface_Robot/Firmware/output/Robot_Interface.cof b/elec/boards/Interface_Robot/Firmware/output/Robot_Interface.cof index 0c2c36b..9685c05 100644 Binary files a/elec/boards/Interface_Robot/Firmware/output/Robot_Interface.cof and b/elec/boards/Interface_Robot/Firmware/output/Robot_Interface.cof differ diff --git a/elec/boards/Interface_Robot/Firmware/output/Robot_Interface.hex b/elec/boards/Interface_Robot/Firmware/output/Robot_Interface.hex index 7ec98f4..bae90d2 100644 --- a/elec/boards/Interface_Robot/Firmware/output/Robot_Interface.hex +++ b/elec/boards/Interface_Robot/Firmware/output/Robot_Interface.hex @@ -1,974 +1,933 @@ :020000040000FA -:0600000094EF20F0120055 +:0600000071EF1FF0120079 :0600080004EF04F01200F9 :060018000CEF04F01200E1 -:0608000094EF20F012004D +:0608000071EF1FF0120071 :0608080034EF04F01200C1 -:0608180072EF04F0120073 -:06082A000500BF410000C3 -:1008300086000000240000009E410000CB00000064 -:100840002100000095410000130100000900000094 -:1008500085410000EC000000100000007C41000019 +:0608180094EF04F0120051 +:06082A000500793F00000B +:100830008600000024000000583F0000CB000000AC +:10084000210000004F3F00001301000009000000DC +:100850003F3F0000EC00000010000000363F0000A9 :080860000A010000090000007C -:0808680017EC0DF000EE22F088 -:10087000140EE80403E3EECFE4FFFBD700EE00F034 -:10088000220EE80403E3EECFE4FFFBD73FEC0DF0CC -:10089000A1A203D02AEC1AF0A1929EAA03D05AEC8E -:1008A00013F09E9A9EA003D0FEEC18F09E9052EC9E -:1008B0000DF002E2E16AE55250EC0DF0E55200EE77 -:1008C00021F0220EE80403E3E5CFEDFFFBD700EEB5 -:1008D00035F0140EE80403E3E5CFEDFFFBD72CEC75 -:1008E0000DF01100D8CFE4FFE0CFE4FFE46E17EC89 -:1008F0000DF000EE22F0140EE80403E3EECFE4FF67 -:10090000FBD700EE00F0220EE80403E3EECFE4FF95 -:10091000FBD73FEC0DF0F2A403D0E5EC18F0F29415 -:1009200052EC0DF002E2E16AE55250EC0DF0E552B6 -:1009300000EE21F0220EE80403E3E5CFEDFFFBD744 -:1009400000EE35F0140EE80403E3E5CFEDFFFBD72E -:100950002CEC0DF0E550E5CFE0FFE5CFD8FF10001F -:1009600004D8E5EC0DF059D8FCD70F0EC11202D80F -:10097000AFEF0DF08AEC0DF0E6529EEC0CF00001AA -:10098000FC6F070EFC5D10E1E66A2AEC1EF0E552F2 -:10099000DF6E000EDF805AEC0DF0E66A66EC20F0A8 -:1009A000E552DF705AEC0DF093809382948C948E14 -:1009B000D08EF28EF28C770EC86E070EE66EDAECF1 -:1009C0001BF0E5523F0E8A1693160101136B146B50 -:1009D000156B166B010E176F55EC13F0E30E9516A1 -:1009E00092929492A082FD0EE66EEEEC1EF0E5521D -:1009F000000EE66EE66A8DEC1FF0E552E552839438 -:100A00008396839880928292E66AA8EC18F0E55269 -:100A100046EC1BF0E5529BEF0DF0D9CFE6FFE1CF9E -:100A2000D9FF170EE126160EDB6A0101175102E00D -:100A300092EC0BF0200E0001605D03E36D50020BA1 -:100A400002E088EF0BF0160EDB5036E090EC19F068 -:100A5000000932E001011551161102E1000E08D023 -:100A600015C1E9FF16C1EAFFEF50800B01E0010E4E -:100A7000000922E10501406B01011851182B050105 -:100A8000416F05010C0E426F0501436B400EE66E8F -:100A9000400EE66E050EE66E010EE66E010EE66E87 -:100AA00000EC12F0006E050EE15E0050F3CF15F180 -:100AB000F4CF16F1160EDB6A01011551161102E191 -:100AC000000E08D015C1E9FF16C1EAFFEF50800BF8 -:100AD00001E0010E00093DE101011951EA6ACB0F65 -:100AE000E96E000EEA22EF5034E00501406B01018F -:100AF0001851182B0501416F0501040E426F0101C9 -:100B00001951EA6ACB0FE96E000EEA22EFCF43F5E6 -:100B1000400EE66E400EE66E050EE66E010EE66EC7 -:100B2000010EE66E00EC12F0006E050EE15E005064 -:100B3000F3CF15F1F4CF16F101011951EA6ACB0F89 -:100B4000E96E000EEA22EF6A010119291F0B01016B -:100B5000196F01011351141102E1000E08D013C1E5 -:100B6000E9FF14C1EAFFEF50800B01E0010E00091C -:100B700002E088EF0BF005010251070A02E1EEEFF7 -:100B80000AF0020A02E1C0EF0AF00E0A02E167EF82 -:100B90000AF0060A02E1ECEF09F0040A01E110D2C2 -:100BA0000F0A01E165D1040A1AE0030A07E0010A0D -:100BB00002E047EF0BF0FF0088EF0BF0E66A2AEC4B -:100BC0001EF0E552DF6E000EDB80DFCFE6FFE66A47 -:100BD0000AEC1EF0E552E552FF0088EF0BF0010130 -:100BE0001551161102E1000E08D015C1E9FF16C11A -:100BF000EAFFEF50800B01E0010E000901E036D161 -:100C000000C540F50501416B0501030E426F05016A -:100C1000436B050108510A0A01E17ED00E0A71E01A -:100C2000070A64E0010A20E0030A06E0010A01E085 -:100C3000F3D0FCC048F5F3D00501486BF50E006E0B -:100C40003E0E016E026A00C0E6FF01C0E6FF02C070 -:100C5000E6FF480EE66E050EE66EEEEC1DF0036E46 -:100C6000050EE15E0350DBD00501486BE90E006E16 -:100C70003E0E016E026A00C0E6FF01C0E6FF02C040 -:100C8000E6FF480EE66E050EE66EEEEC1DF0036E16 -:100C9000050EE15E0350E70E006E3E0E016E026A25 -:100CA00000C0E6FF01C0E6FF02C0E6FF480EE66EA8 -:100CB000050EE66EEEEC1DF0036E050EE15E0350D0 -:100CC000DE0E006E3E0E016E026A00C0E6FF01C03D -:100CD000E6FF02C0E6FF480EE66E050EE66EEEEC9D -:100CE0001DF0036E050EE15E035099D092CF48F5DA -:100CF00093CF49F594CF4AF595CF4BF596CF4CF568 -:100D00008ED080CF48F581CF49F582CF4AF583CF89 -:100D10004BF584CF4CF583D0800EE66E080EE66E60 -:100D200018EC20F0E552E552C580ADEC20F0C00E85 -:100D3000E66E51EC1FF0E552E66A51EC1FF0E55209 -:100D4000C582ADEC20F0C10EE66E51EC1FF0E5520D -:100D5000010EDB6A020EDB6A010EDBCF00F0020E31 -:100D6000DBCF01F0040E005C000E01584FE2010ED3 -:100D7000F36E150EF3CFDBFFC586130EDB6A140E80 -:100D8000DB6A130EDBCF00F0140EDBCF01F0E80EB0 -:100D9000005C030E015817E2C7A00FD0010EDBCF95 -:100DA000E9FF020EDBCFEAFF480EE926050EEA2234 -:100DB000C9CFEFFF150EDB6A06D0130EDB2A140E27 -:100DC00001E3DB2ADED7150EDB5008E00501080E33 -:100DD000436FC58AC588ADEC20F018D0010EDBCF7B -:100DE00000F0020EDBCF01F0030E005C000E015894 -:100DF00003E2C59AC58802D0C58AC588ADEC20F04B -:100E0000010EDB2A020E01E3DB2AA6D7C584ADEC76 -:100E100020F0BBEC20F003D00501020E436F400E22 -:100E2000E66E400EE66E050EE66E010EE66E010EF3 -:100E3000E66E00EC12F0006E050EE15E0050F3CF9E -:100E400015F1F4CF16F1400EE66E000EE66E050EBB -:100E5000E66EE66A010EE66E00EC12F0006E050E1C -:100E6000E15E0050F3CF13F1F4CF14F188EF0BF0F3 -:100E700005010851050A54E0010A49E0070A37E074 -:100E8000010A25E0030A13E0010A01E080D0050110 -:100E90000951921205010A51931205010B51941246 -:100EA00005010C51951205010D51961275D00501E1 -:100EB000091D921605010A1D931605010B1D9416B6 -:100EC00005010C1D951605010D1D961665D0050131 -:100ED000091D891605010A1D8A1605010B1D8B16B1 -:100EE00005010C1D8C1605010D1D8D1655D0050133 -:100EF0000951891205010A518A1205010B518B1201 -:100F000005010C518C1205010D518D1245D00501C2 -:100F1000095101010F1B05010A5101010F133CD0BA -:100F2000050109A107D00AC5E6FFE66AC2EC1AF07E -:100F3000E552E552050109A308D00BC5E6FF010EF5 -:100F4000E66EC2EC1AF0E552E552050109A508D09B -:100F50000CC5E6FF020EE66EC2EC1AF0E552E55251 -:100F6000050109A708D00DC5E6FF030EE66EC2EC29 -:100F70001AF0E552E552050109A908D00EC5E6FFB1 -:100F8000040EE66EC2EC1AF0E552E55205D0030EEF -:100F9000E66E33EC20F0E552400EE66E000EE66E93 -:100FA000050EE66EE66A010EE66E00EC12F0006ECB -:100FB000050EE15E0050F3CF13F1F4CF14F1A8D386 -:100FC00001011551161102E1000E08D015C1E9FF0B -:100FD00016C1EAFFEF50800B01E0010E000901E0AD -:100FE000FAD100C540F50501416B0501030E426FC2 -:100FF0000501436B050108510F0A01E1BCD1010A4B -:1010000001E1B3D1030A01E1AAD1010A01E190D1C2 -:10101000070A01E181D1010A01E1E1D0030A01E1FE -:10102000C3D0010A01E1A8D00F0A01E18DD0010A65 -:1010300068E0030A4FE0010A41E0070A24E0010AE0 -:1010400011E0030A01E09DD105010A51E66EE66A4E -:1010500009C5E6FF6DEC14F0E552E552E5520501D5 -:10106000486F92D105010C51E66EE66A0AC5E6FFAB -:1010700009C5E6FFC7EC14F0E552E552E552E5522A -:101080000501486F81D105010C51E66EE66A0AC57B -:10109000E6FF09C5E6FF2AEC15F0E552E552E552F8 -:1010A000E5520F0EF3CFDBFF100EF4CFDBFF100E77 -:1010B000DBCF48F50F0EDBCF49F566D10CC5E6FF57 -:1010C0000AC5E6FF09C5E6FFBCEC14F0E552E5529F -:1010D000E5525AD1100E0CC5DBFF0F0E0DC5DBFF1C -:1010E0000F0EDBCFE6FF100EDBCFE6FF0AC5E6FFF3 -:1010F00009C5E6FFC0EC14F0E552E552E552E552B1 -:1011000043D1100E0AC5DBFF0F0E0BC5DBFF120E1D -:101110000CC5DBFF110E0DC5DBFF0EC5E6FF110E82 -:10112000DBCFE6FF120EDBCFE6FF0F0EDBCFE6FFD5 -:10113000100EDBCFE6FF09C5E6FFABEC15F0006E45 -:10114000060EE15E005020D105010A51E66EE66A06 -:1011500009C5E6FFCEEC15F0E552E552E5520F0E5B -:10116000F3CFDBFF100EF4CFDBFF100EDBCF48F523 -:101170000F0EDBCF49F508D105010A51E66EE66A8C -:1011800009C5E6FFD1EC15F0E552E552E5520F0E28 -:10119000F3CFDBFF100EF4CFDBFF100EDBCF48F5F3 -:1011A0000F0EDBCF49F5F0D005010A51E66EE66A75 -:1011B000280EE66E09C5E6FF2AEC15F0E552E55269 -:1011C000E552E5520F0EF3CFDBFF100EF4CFDBFF3D -:1011D000100EDBCF48F50F0EDBCF49F5D5D005015A -:1011E0000A51E66EE66A09C5E6FFCEEC15F0E55257 -:1011F000E552E5520F0EF3CFDBFF100EF4CFDBFF0D -:10120000100EDBCF48F50F0EDBCF49F505010A5173 -:10121000E66EE66A09C5E6FFD1EC15F0E552E55247 -:10122000E5520F0EF3CFDBFF100EF4CFDBFF100EF5 -:10123000DBCF4AF50F0EDBCF4BF505010A51E66E09 -:10124000E66A280EE66E09C5E6FF2AEC15F0E552BF -:10125000E552E552E5520F0EF3CFDBFF100EF4CF4F -:10126000DBFF100EDBCF4CF50F0EDBCF4DF505018C -:101270000A51E66EE66A2A0EE66E09C5E6FFC7EC7D -:1012800014F0E552E552E552E55205014E6F0501B5 -:101290000A51E66EE66A2B0EE66E09C5E6FFC7EC5C -:1012A00014F0E552E552E552E55205014F6F050194 -:1012B0000A51E66EE66A060EE66E09C5E6FF2AECFE -:1012C00015F0E552E552E552E5520F0EF3CFDBFF84 -:1012D000100EF4CFDBFF100EDBCF50F50F0EDBCF7F -:1012E00051F505010A51E66EE66A080EE66E09C57B -:1012F000E6FF2AEC15F0E552E552E552E5520F0EF5 -:10130000F3CFDBFF100EF4CFDBFF100EDBCF52F577 -:101310000F0EDBCF53F538D00CC5E6FF0AC5E6FF4C -:1013200009C5E6FF9AEC15F0E552E552E5522CD0DE -:10133000100E0CC5DBFF0F0E0DC5DBFF0F0EDBCF54 -:10134000E6FF100EDBCFE6FF0AC5E6FF09C5E6FFA4 -:101350009EEC15F0E552E552E552E55215D009C56F -:10136000E6FFA6EC15F0E5520FD009C5E6FFB7EC95 -:1013700014F0E55209D009C5E6FF5BEC14F0E55224 -:1013800003D00501010E436F400EE66E400EE66E7F -:10139000050EE66E010EE66E010EE66E00EC12F032 -:1013A000006E050EE15E0050F3CF15F1F4CF16F19B -:1013B000400EE66E000EE66E050EE66EE66A010E63 -:1013C000E66E00EC12F0006E050EE15E0050F3CF09 -:1013D00013F1F4CF14F19CD105010851070A4FE035 -:1013E000010A41E0030A33E0010A29E0070A1EE08E -:1013F000010A14E0030A09E0010A01E04FD0070ED8 -:10140000E66EE1EC1BF0E5524ED0010EE66E070EE3 -:10141000E66EE4EC1BF0E552E55245D0E66A070EB5 -:10142000E66EE4EC1BF0E552E5523DD0010EE66EAF -:10143000070EE66EECEC1BF0E552E55234D0E66A9E -:10144000070EE66EECEC1BF0E552E5522CD00AC517 -:10145000E6FF09C5E6FF070EE66EF7EC1BF0E55266 -:10146000E552E55220D0090EE66E050EE66E070E37 -:10147000E66E04EC1CF0E552E552E55214D00A0E7B -:10148000E66E050EE66E09C5E6FF070EE66E0AEC8F -:101490001CF0E552E552E552E55205D0010EE66E2C -:1014A00033EC20F0E552400EE66E000EE66E050EBF -:1014B000E66EE66A010EE66E00EC12F0006E050EB6 -:1014C000E15E0050F3CF13F1F4CF14F121D1050107 -:1014D0000851030A11E0010A09E0030A01E037D0CC -:1014E00009C5E6FF17EC19F0E55236D009C5E6FF4D -:1014F0001DEC19F0E55230D00E0E0CC5DBFF0D0EC1 -:101500000DC5DBFF0C0E0EC5DBFF0B0E0FC5DBFFA1 -:10151000D9500B0FE96EDACFEAFFEECFE6FFEECF40 -:10152000E6FFEECFE6FFEFCFE6FF0BC5E6FF0AC50D -:10153000E6FF09C5E6FF23EC19F0006E070EE15E39 -:101540000050010EF36E160EF3CFDBFF05D0010E37 -:10155000E66E33EC20F0E552400EE66E000EE66ECD -:10156000050EE66EE66A010EE66E00EC12F0006E05 -:10157000050EE15E0050F3CF13F1F4CF14F1C8D0A3 -:10158000800EE66E080EE66E18EC20F0E552E5528D -:10159000C580ADEC20F0E66A51EC1FF0E552080E74 -:1015A000E66E050EE66E99EC1DF0E552E552C58437 -:1015B000BBEC20F0400EE66E000EE66E050EE66E09 -:1015C000E66A010EE66E00EC12F0006E050EE15EBA -:1015D0000050F3CF13F1F4CF14F19AD04F0EAB16A5 -:1015E000AC9ACF0E9D16020EE66EE66A7C0EE66E93 -:1015F00054EC1DF0E552E552E552040EE66EE66A43 -:101600004FEC14F0E552E552100EE66E010EE66E58 -:101610004FEC14F0E552E552020EE66E030EE66E54 -:10162000010EE66ECAEC13F0E552E552E552040EE7 -:10163000E66EE66A4FEC14F0E552E552100EE66EE7 -:10164000010EE66E4FEC14F0E552E552020EE66E26 -:10165000030EE66E010EE66ECAEC13F0E552E5529B -:10166000E55255EC13F0400EE66E000EE66E050EE8 -:10167000E66EE66A010EE66E00EC12F0006E050EF4 -:10168000E15E0050F3CF13F1F4CF14F141D001012A -:101690001551161102E1000E08D015C1E9FF16C15F -:1016A000EAFFEF50800B01E0010E000931E100C5B7 -:1016B00040F50501416B0501030E426F0501010E66 -:1016C000436F400EE66E400EE66E050EE66E010EAE -:1016D000E66E010EE66E00EC12F0006E050EE15EA5 -:1016E0000050F3CF15F1F4CF16F1400EE66E000E68 -:1016F000E66E050EE66EE66A010EE66E00EC12F08E -:10170000006E050EE15E0050F3CF13F1F4CF14F13B -:10171000170EE15C02E2E16AE552E16EE552E7CFC5 -:10172000D9FF120001011A511B1104E1100E1A6FAA -:10173000270E1B6F1A07000E1B5B6DA207D01A51F4 -:101740001B112EE18A7C8ABC13D027D00001605186 -:1017500002E18A9C22D0600502E18A8C09D0020E47 -:10176000605D02E18A8C19D0040E605D03E18A9C01 -:101770008A8E1200100E605D06E101011A511B11E4 -:101780000FE18A7C0AD0200E605D0AE101011A5146 -:101790001B1106E18A7C8AAC02D08A9E12008A8ED6 -:1017A000120010D9210EC3D9500EAAD9D1D9630E77 -:1017B00070D9630EEE6E740EEE6E690EEE6E760EDE -:1017C000EE6E690EEE6E740E8CD9A9D924D926D985 -:1017D00079D9E66AD9D802E2E16AE55250EF0DF014 -:1017E000F1D82D0EA4D9430E54D9780EEE6E690EA1 -:1017F000EE6E6F0EEE6E6E0EEE6E200E81D9740ED2 -:10180000A3D9620EEE6E6C0EEE6E690E6AD9EE6EA4 -:1018100086D9EE6E99D9760E73D9630EEE6E200ED0 -:10182000EE6E6C0E91D9200EEE6EF8D8070EE66EB5 -:10183000E1EC1BF0E55246D9010EE66EA5D802E2B6 -:10184000E16AE55250EF0DF01200120046EF1CF075 -:1018500012001E0EE66E010EE66ECEEC11F0E552A1 -:10186000E552400EE66E000EE66E050EE66EE66A86 -:10187000010EE66E00EC12F0006E050EE15E005007 -:10188000F3CF13F1F4CF14F112006D840001080EB0 -:10189000FD6F070EFE6FFD07000EFE5BFD51FE1192 -:1018A000FAE16D941200D9CFE6FFE1CFD9FFFD0E2A -:1018B000DBCF2AF0FE0EDBCF2BF0010E2A1801E160 -:1018C0002B5033E0E8682A1802E1E8682B182BE077 -:1018D000030E2A1801E12B5024E0040E2A1801E11E -:1018E0002B501DE0020E2A1801E12B5016E0170EB6 -:1018F0002A1801E12B500FE0160E2A1801E12B5097 -:1019000008E0150E2A1801E12B5001E010D0A1DFEC -:101910000FD09EDF0DD09ADF0BD096DF09D041DFCC -:1019200007D05EDF05D091DF03D0000001D000D0EA -:10193000010E00D0E552E7CFD9FF1200EBD8E652F6 -:10194000D0B202D0010E15D0D0B802D0020E11D004 -:10195000D0B002D0030E0DD0D0B602D0040E09D004 -:10196000FCAE02D0050E05D0FCAC02D0060E01D0B4 -:10197000070EDF6ED088D086D084D082D080FC9EC7 -:10198000FC9CDF50E552D7D0070EE66EECEC1BF066 -:10199000E552E552D9CFE6FFDACFE6FF010EA6D831 -:1019A000D950150FCCD8020EA1D8D9502A0FC7D8BC -:1019B000030E9CD8D9503F0FC2D8040E97D8540EAE -:1019C000E15C1200A7D8540EE126D9CFE9FFDACFA7 -:1019D000EAFF5B0EEE6E4B0EEE6E720EEE6E6F0E4B -:1019E000EE6E5D0EEE6E620EEE6E6F0EEE6E740EAD -:1019F000EE6E200E89D8EE6EEE6E570EA5D86C0EE8 -:101A0000EE6EEE6E790EEE6EEE6AD950150FE96E3F -:101A1000DACFEAFF120078D884EF0DF0630E94D885 -:101A200097D86D0E6DD8720E6BD8EE6A1200DACFB1 -:101A3000E4FFE2CFDAFFE9CFE4FFEACFE4FFF6CF3D -:101A4000E4FFF7CFE4FFF5CFE4FFF3CFE4FFF4CFFB -:101A5000E4FFFACFE4FF1200E5CFFAFFE5CFF4FF91 -:101A6000E5CFF3FFE5CFF5FFE5CFF7FFE5CFF6FFD5 -:101A7000E5CFEAFFE5CFE9FFE5CFDAFF1200E65256 -:101A800049D8020EE126F350DF6E010EF4CFDBFFE2 -:101A90001200EE6E6F0EEE6E6E0EEE6E80EF0DF0BB -:101AA000E16E49D0DF50F36E010EDB50F46E020E92 -:101AB000E15C1200DFCFE6FFE66A0AEC1EF0E552B9 -:101AC000E5521200E66A070EE66EE4EC1BF0E55202 -:101AD000E5521200EE6AD9502A0FE96EDACFEAFF1A -:101AE00012000ED8200EEE6EEE6E1200E66E070E9D -:101AF000E66E0AEC1CF0E552E552E552E5521200A2 -:101B0000EE6E650EEE6E1200EE6EEE6EEE6EEE6E28 -:101B1000EE6E1200D9CFE6FFE1CFD9FF1200EE6AD8 -:101B2000D9503F0FE96EDACFEAFF200E120073DFC3 -:101B300072DF6AEF0DF0E552E7CFD9FF1200E66ED3 -:101B4000000EDA20E66E1200EE6E610EEE6E1200EE -:0E1B5000720EEE6E740ED4DF200EEE6E1200DA -:021B5E00A7ECF2 -:101B600012F06A6A686ADAEC12F06D8C6E6A8AECBE -:101B700012F06D9CDF6ABBEC12F010E2DF50040D36 -:101B8000F3CFE9FFF4CFEAFF000EE926040EEA22C4 -:101B9000EE6AEE6AEE6AEE6ADF2AEDD7160E706E16 -:101BA00068A604D0030E50EC12F0FAD70001736B54 -:101BB000786B796B7A6B6D98080E6B6F040E6C6F97 -:101BC000616B606BE55265EF12F0A7EC12F000015B -:101BD00060510BE16D6A696ADAEC12F06DB602D001 -:101BE0006D86FCD70001010E606F600508E16DBADB -:101BF00006D0686A696A69806988020E606F6850F9 -:101C0000040B07E06950040B04E0020E50EC12F0E4 -:101C100089D86DB247D06850010B14E06950010BB0 -:101C200011E09DDF0001040E606F0401200E026FC1 -:101C3000040E036F080E016F006B8C0E0013E66A32 -:101C400019EC13F06850100B07E06950100B04E01A -:101C500060D8040E50EC12F06850400B0BE0695055 -:101C6000400B08E0E1EC12F0020E58EC12F0060E08 -:101C700050EC12F06850200B04E06950200B01E09A -:101C800035D86850020B0AE06950020B07E0E1EC1E -:101C900012F0E668E66839EC13F06A6A040E000197 -:101CA000605D02E2A19A1FD069A61CD0DF6A040E13 -:101CB000DF5C18E268A616D06CCF80F0030E50EC03 -:101CC00012F0780E0001801502E138D809D0000E1C -:101CD000E66EE66A800EE66E000EE66E010EE8DB4A -:101CE000DF2AE5D7A19AE55265EF12F070A00ED079 -:101CF00073EC12F0EF50800808E1D5DBEF50840858 -:101D000004E173EC12F08C0EEF6E7090050E50EF44 -:101D100012F06984040EC4DB6D8293EC12F0040EA1 -:101D200058EF12F093EC12F0030EC2DB6D9269943F -:101D300068A403D0020EB4DBFBD71200A7EC12F0AC -:101D4000FD0E000180153DE17E0E8015E8407F0B01 -:101D5000040DF3CF63F0F4CF64F0000E6327040E9C -:101D6000642363C065F064C066F06575BCDBEF504A -:101D70003C0BE842E8420D0822E1B5DB10EC13F021 -:101D8000EECF00F0EFCF01F0280E001816E1040EA0 -:101D9000011813E14AEC13F0DF6AEDDB0EE2DF50CD -:101DA000C3EC12F0DF50EA6A200FE96E040EEA225B -:101DB000E552E750EF6EDF2AF0D70AD807D01AD8DD -:101DC00005D0FD0E8015040801E122D8E5527DD32F -:101DD0006ADBEF50800B02E066DBEF6A00016F6B9D -:101DE000706B746B756B736B64D89DDB170E60DB67 -:101DF0008EEF10F0020E0001705D02E11BEF11F09A -:101E000034D80001815102E115EF13F0816B12000B -:101E10009EDB49DBEF50400B01E0010EDF6E00015D -:101E20006B75080E605D09E122C46EFF6E500008FC -:101E300002E2100E01D0040E606F700513E14EEC4B -:101E400013F0A6D9020E00016F5D03E12CDB840EB6 -:101E500007D0DF5003E127DBC80E02D024DB880E59 -:101E6000EF6E01D002D8E55230D32BDB0001706B4E -:101E70001ADBEF6A040E6B19006E6CC001F0DE6EA7 -:101E80006CC0DDFF19DBEF6A78AF0CD07B517C11A1 -:101E900007E005D07CC0FAFF00017B51F96EFADF44 -:101EA0000001789F020EE15C02E2E16AE552E16E18 -:101EB0000CD304012051600BE842E842E842E842BA -:101EC000E842000901E0120021510C0A45E00B0A2A -:101ED0003FE00C0A31E0010A22E00B0A1EE0020A90 -:101EE0001CE0030A18E0080A10E0010A0CE00F0ADF -:101EF00008E0030A01E012000001738F080E606F12 -:101F000012000EEF10F077EF11F00001610E716F0B -:101F1000000E726F0CD04FEF10F0ADEF0FF02451A8 -:101F20000001716F726B620E7127000E7223738154 -:101F3000010E746F738F12000001738F040124511E -:101F4000EA6A620FE96E000EEA2222C4EFFF120075 -:101F5000EADA160E58EF12F012007EDB040EE126CC -:101F60000401220510E120511F0B00090CE10001C2 -:101F7000738F030E0401215D04E10001010E7F6FE8 -:101F800002D000017F6B0401225141E120511F0B5F -:101F900002083DE124510F0B000939E00001738F65 -:101FA000040124BF05D0A4DA670EE926000E04D090 -:101FB0009FDA6B0EE926000ED2DA030E215D03E1F3 -:101FC0007BDA840E23D024510F0B016A700F006E50 -:101FD0000F0E0122020E00C0DBFF030E01C0DBFF6B -:101FE000020EDBCFE9FF030EDBCFEAFFEE90ED52EE -:101FF00024AF06D061DAEF6ADF745EDA400E06D0F5 -:102000005BDA880EEF6EDF7457DAC80EEF6E040EDF -:10201000E15C02E2E16AE552E16E57D2800E040112 -:10202000205D3CE10001C00E736F04012351030ADF -:102030001EE0010A09E0030A2FE100015A0E716F48 -:10204000390E726F120E22D0C3DA020EF6263A0E45 -:10205000A2DA020E0001F76A7125F66E7251F722BC -:102060000900F5CF74F00A00F5CF75F01200030EE9 -:10207000225D0FE2ADDA040EF6263A0E8CDA71C05C -:10208000F6FF72C0F7FF0800F5500001746F756B22 -:1020900012000001736B12000001736B120011DA61 -:1020A0000401286B296B20511F0B020A11E0030A5F -:1020B0000CE0010A22E10001738F04012881000174 -:1020C0007F051BE10401288318D00001738F15D010 -:1020D0000001738F040124BF05D00ADA670EE926D8 -:1020E000000E04D005DA6B0EE926000E38DAE4D9CA -:1020F000EF50040B02E0010E286F000173AF07D010 -:10210000280E716F040E726F7381020E746F020ECF -:10211000E15C02E2E16AE552E16ED7D16D9800011F -:1021200073BF08D078AF02D061DA2AD07EDABBD98B -:10213000840E27D078BF2BD0040120AF24D000011B -:1021400074510401265D000175510401275904E210 -:1021500026C474F027C475F01BD80001010E706FFF -:10216000A1DA800EEF6E816BBED9EE52080EEF6ED3 -:1021700091DAB9D9840EEF6E010E816F8FDA93D99F -:10218000C80EEF6E1200000131DAC80EEF6E1200B9 -:1021900098D90001080E745D000E75590DE274C0E7 -:1021A000DEFF75C0DDFF6F5102E1010E03D06F0548 -:1021B00006E1020E6F6F03D0080EDE6EDD6A73D982 -:1021C000EF9271D9EF906FD9010EDB50EF126BD9FE -:1021D000EE52DFCFEFFF000EDB50745F010EDB50DD -:1021E000755B280E7D6F040E7E6F73B10FD0F7D92B -:1021F0001BE071C0F6FF72C0F7FF712B000E722357 -:102200000800F55096D9F3E2DB06F1D7E8D90CE0E7 -:1022100071C0E9FF72C0EAFF712B000E7223EF500C -:1022200088D9F4E2DB06F2D7020EE15C02E2E16A51 -:10223000E552E16E4AD145D956D9EE52EFCFDFFFD4 -:10224000DFCF00F000500001795D000E7A5903E203 -:1022500079C0DFFF09D0DF50006E016AE850795D78 -:10226000796F01507A597A6F010EDB6ADF50F36E95 -:10227000010EDBCFF4FFF350F45C10E2010EDB50F3 -:1022800082D976C0E9FF77C0EAFF762B000E77236C -:10229000E552E750EF6E010EDB2AE8D7000ED8803A -:1022A0007955000E7A550DE2F4D854D91CD9EF5067 -:1022B000400B03E1EAD9C80E02D0E7D9880EEF6ED1 -:1022C0000FD0F0D9840EEF6E7B517C1107E005D062 -:1022D0007CC0FAFF00017B51F96EFADF0001789FA4 -:1022E000020EE15C02E2E16AE552E16EEED000012D -:1022F000738F10D9010EE66EE66AE66A620EE66E2C -:10230000000EAFD922C461F00401225104E10001A2 -:10231000100E606F12000001200E606F04D9150EC0 -:1023200058EF12F0CED8000EDE6E040EDD6EE8D847 -:10233000040DF350006E016A020E0F0B05E0D890F9 -:1023400001320032E806FBE1D89000360136D89021 -:1023500000360136D9CFE9FFDACFEAFF0050EE268A -:102360000150ED22A9D8EF9EFD0EDB5002E16AD9A3 -:1023700001D06DD9EA22DECFEEFFDDCFEDFF9CD894 -:10238000EF9C9AD8040EE926000EEA22EF8C020E8A -:10239000E15C02E2E16AE552E16E97D092D8FE0E6E -:1023A000DB50016A700F006E0F0EDFD885D8FD0E6E -:1023B000DBCFEFFFDBA402D0E66AF5D8FD0EDBA28F -:1023C00003D0010EE66EEFD8020EE15C02E2E16A94 -:1023D000E552E16E7AD075D8FE0EDB5005E125D9C5 -:1023E00062D8840EEF6E05D08BD80CD989D8010F36 -:1023F00009D9020EE15C02E2E16AE552E16E65D0C4 -:1024000060D8FD0EDB5002E022D901D01BD9A7D83D -:1024100053D806D9FB0EDBCFEEFFFC0EDBCFEDFF72 -:102420004BD8EE52FA0EDBCFEFFF400E45D8E85006 -:10243000EF16880E41D8E850EF12FD0EDB5002E097 -:1024400006D901D0FFD8EA22EF74DECF00F0DDCF4D -:1024500001F000C0F3FF01C0F4FF020EE15C02E2F4 -:10246000E16AE552E16E31D0F7D8010EF36EFC0E51 -:10247000DB5004E0D890F336E806FCE1F31C006E74 -:10248000FD0EDBCFE9FFFE0EDBCFEAFF0050EF16BB -:102490001CD0FBD8EE52080EEF6EF7D810EF13F0F9 -:1024A000E66E19EF13F06BC0E9FF6CC0EAFF120093 -:1024B000E66EE66A39EF13F0DECFE9FFDDCFEAFF23 -:1024C0001200CAD8020EE1261200E552E7CFD9FF6A -:1024D0001200D6D845EF13F0FE0EEA6ADB34FE0B8D -:1024E000EA36E96E120063C0E9FF64C0EAFF120039 -:1024F00024510F0BE96EEA6AD890E936EA361200E9 -:10250000FD0EDB50E824026EFE0EDB50040DF3508E -:1025100002241200000EE66EE66AE66A710EE66EAE -:102520000F0E31EF13F0000EE66EE66AE66EE66A15 -:102530001200E66E7DC0E9FF7EC0EAFF7D2B000E33 -:102540007E23E552E750EF6EDF06010E120084D8BD -:10255000E6521200280EEE6E040EED6E1200EA2214 -:10256000EECFDEFFEDCFDDFF1200012200C0DEFF67 -:1025700001C0DDFF1200DF50006E016A080E005C32 -:10258000000E01581200EA6A280FE96E040EEA22D2 -:10259000EF50E66E1200F7220900F5CF71F00A0045 -:1025A000F5CF72F01200FE0EDBCFE6FFBBDEE55288 -:1025B000E5521200160E6F6E9F0E6B6E7B0E696EEB -:1025C0001200010EE66EE66A000EE66EE66A120082 -:1025D0002251F66EF76AD890F636F7361200D9CF48 -:1025E000E9FFDACFEAFFEE50ED101200020E706F35 -:1025F0005ADFEE52EF6A57DFC80EEF6E4ADFAADFEE -:1026000045EF13F0040DF3CF00F0F4CF01F0000E0E -:102610000026040EAADF840E4FDFE850EF121200EE -:10262000020EE926000EEA2212003CD88C0EEF6E54 -:102630001200680EE66E0F0EE66E16DFE552E552EA -:10264000E552120049DF670EE926000E120044DF52 -:102650006B0EE926000E1200D9CFE6FFE1CFD9FFBD -:102660001200E66ED4EC1DF0006E050EE15E005027 -:10267000120053EC0CF0006E060EE15E00501200EA -:10268000200EEE6E040EED6E120065C0E9FF66C00E -:10269000EAFF120028DFC4DF40EF13F004DFC0DFE1 -:0A26A000AAEF12F0F6DE69EF12F067 -:0626AA00959A838A190EC7 -:1026B000FCEF15F0CFDA030EE126ACA2FED732EC28 -:1026C0001FF0DF6E0001A85104E1865102E1010E06 -:1026D000A96FA90558E1A851A8DADFCFEFFF020ED4 -:1026E000A85D08E2FF0EDF5C05E0050EABDA000135 -:1026F000A96BA86B030EA85D04E1030EDF240001A3 -:10270000CA6F030E0001A85D3DE30001CA5100013C -:10271000A85D38E1010EDB6A020EDB6E0001CA51D2 -:10272000F36E020EDBCFF4FFF350F45C0EE2020E08 -:10273000DB507BDA010EDBCFE7FFEF50E726010E1F -:10274000E7CFDBFF020EDB2AE9D7CA516EDAEFCF03 -:1027500000F0010EDB1C005C05E0070E73DA0001DF -:10276000866B0DD000018B5102E0060E6BDA8BC038 -:10277000E6FF33EC20F0E5520001010E866FA96BF5 -:10278000A86B01D0A82B030EE15C02E2E16AE552DE -:10279000E16E24D25FDA220EE126010EDB68020E22 -:1027A000DB68FE0EDB50E76E030EE7CFDBFFFC0EAF -:1027B000DB50020FE76E040EE7CFDBFFFD0EDB50B0 -:1027C000E76E050EE7CFDBFFDF6AFC0EDB50DF5C58 -:1027D00013E2DF50EA6AAA0FE96E000EEA22EF5018 -:1027E000E66ED950010F006E050EDF2410DAE552B7 -:1027F000E750EF6EDF2AE9D7210EDB6A020EDF6EAB -:10280000FC0EDB50050FDF5C0FE2D950010F006EAC -:10281000DF50FDD9210EDBCFE7FFEF50E726210E79 -:10282000E7CFDBFFDF2AECD7210EDB1CE66ED950A9 -:10283000010F006EFC0EDB50050FE9D9E552E750A1 -:10284000EF6E839ADF6AFC0EDB50060FDF5C11E24D -:10285000ACA2FED7D950010F006EDACF01F0DF50E5 -:102860000F01D5D9EF50E66E7DEC20F0E552DF2A5E -:10287000EAD7ACA2FED7838A0001866B220EE15C08 -:1028800002E2E16AE552E16EA9D10001865112002F -:102890000001A751120000018651FDE01200DAD9B3 -:1028A000FE0EDB50EA6AAA0FE96E000EEA22FD0E68 -:1028B000DBCFEFFF93D1CED9020E9ED9A4D9A3D9F5 -:1028C00088D987D9190E98D984D983D987D100019D -:1028D000865102E08B511200000CD9CFE6FFE1CF08 -:1028E000D9FF020EE126E66A010EE66EFE0EDBCF90 -:1028F000E6FF50DFE552E552E552DE6ADD6ADECFE3 -:1029000000F0DDCF01F0FC0EDBCF02F0FD0EDBCFDF -:1029100003F00250005C0350015818E20001865198 -:1029200004E00001A76B010E16D0000000000000BB -:102930000000000000000000000000000000000097 -:102940000000DF2A010E01E3DB2AD9D70001010EC6 -:10295000A76F000E00D0006E020EE15C02E2E16A99 -:10296000E552E16E0050E552E7CFD9FF120072D96F -:10297000E66A060E19D932D135D9030E15D92ED1F2 -:1029800019D982D902E2E16AE552E16E27D1D9CFA5 -:10299000E6FFE1CFD9FF020EE126FD0EDBCFE6FF19 -:1029A000E66A7DDFE552E552010EE66E010EE66E47 -:1029B00076DFE552E552020EE66E020EE66EFE0E80 -:1029C000DBCFE6FFE7DEE552E552E552DE6ADD6A7F -:1029D000DECF00F0DDCF01F00A0E2A6E2B6AFB0E6F -:1029E000DBCF2FF0FC0EDBCF30F0D5EC17F028C09A -:1029F00002F029C003F00250005C0350015819E2B4 -:102A00000001865105E00001A76B00018C5116D032 -:102A100000000000000000000000000000000000B6 -:102A20000000000000000000DF2A010E01E3DB2AA5 -:102A3000CFD70001010EA76F000E00D0006E020E6E -:102A4000E15C02E2E16AE552E16E0050E552E7CF57 -:102A5000D9FF1200D9CFE6FFE1CFD9FF040EE1265E -:102A6000FD0EDBCFE6FFE66A1ADFE552E552020E05 -:102A7000E66E010EE66E13DFE552E552020EE66EDB -:102A8000020EE66EFE0EDBCFE6FF84DEE552E55277 -:102A9000E552DE6ADD6ADECF00F0DDCF01F00A0E1E -:102AA0002A6E2B6AFB0EDBCF2FF0FC0EDBCF30F053 -:102AB000D5EC17F028C002F029C003F00250005CEA -:102AC0000350015827E20001865113E00001A76B73 -:102AD000030E8DC0DBFF020E8CC0DBFF020EDBCFCE -:102AE00000F0030EDBCF01F000C0F3FF01C0F4FFE4 -:102AF00017D00000000000000000000000000000EF -:102B000000000000000000000000DF2A010E01E3C9 -:102B1000DB2AC1D70001010EA76FF36AF46A00D067 -:102B2000040EE15C02E2E16AE552E16EE552E7CFB4 -:102B3000D9FF120057D8040E37D850D03BD8040E16 -:102B4000A3D802E2E16AE552E16E48D083D8E66A92 -:102B5000050E2AD843D07ED8020EE1261E0EE66E60 -:102B6000E66A9ED8FC0E67D893D8FA0E64D8030E96 -:102B70006ED8010EDBCFE6FF040E69D8F90EDB50EC -:102B800004E1050EE66E030E03D0050EE66E040E9C -:102B90007BD802E2E16AE552E16E20D03ED8240EF5 -:102BA0005ED03BD8260E5BD0E66EFE0EDBCFE6FF96 -:102BB000F1DD7AD04FD8020EE126FB0EDBCFDEFF2F -:102BC000DBCFDDFF5BD8DFCFE6FF62D8030EE66E1A -:102BD0001200FE0EDBCFE6FF030E4BD0E552E7CF2F -:102BE000D9FF120037D84AD8FC0EDBCFE6FF010E22 -:102BF0002ED8020EE66E1200E66EE66A7C0EE66ED7 -:102C000054EC1DF051D0100EE66E040E32D00024AC -:102C1000E96E000EDA20EA6E12001CD8FC0EDBCF43 -:102C2000E6FFFD0EDBCFE6FF1200EA6A870FE96ED2 -:102C3000000EEA221200DBCFDEFFDBCFDDFFDFCFAD -:102C4000E6FF1200E66E33EC20F0E5521200E66E6D -:102C500050EF16F0D9CFE6FFE1CFD9FF1200E66EB4 -:102C6000FE0EDBCFE6FFF6DEE552E552E552E55219 -:102C7000B5D7E66EFE0EE66E7FDE16D0FD0EDBCF1C -:102C8000E6FFE66A50EF16F08FDF020EE15C1200FD -:102C9000010EDDDF010EDBCFE6FF020E27EF16F09F -:102CA000FEDDE552E5521200E552E552E552120012 -:102CB000239E05D0239E2BAE02D02B6C238E2BC0DF -:102CC00025F0246A356A346A860E266E276A3EEF3E -:102CD00018F0239E08D0239E2BAE05D02A6C2B1E05 -:102CE000E86A2B22238E2BC025F02AC024F0356AF7 -:102CF000346A8E0E266E276A3EEF18F0317E236A04 -:102D00007AEC18F092EC18F023B622EF18F023A218 -:102D10000AD023AA03D023BE22EF18F023A42EEF5B -:102D200018F02BEF18F023AA05D023AC2EEF18F0E3 -:102D30002BEF18F023A00AD023A808D023BE04D07C -:102D400023A402D037EF18F03BEF18F0346A276A5B -:102D500031502C5C336E10E329C035F02AC024F0CA -:102D60002BC025F02CC032F02EC029F02FC02AF045 -:102D700030C02BF0233A09D02EC035F02FC024F0FC -:102D800030C025F031C032F0336C239E23BC238E3B -:102D900032C026F023B06AEF18F01A0E33606AEFE3 -:102DA00018F0266A2C6A23A408D0296C2A1E2B1E30 -:102DB0002C1EE86A2A222B222C2223AC08D0356C48 -:102DC000241E251E261EE86A242225222622286A81 -:102DD000335207E02C342B322A3229322832332E58 -:102DE000F9D7295035262A5024222B5025222C5041 -:102DF000262228C034F0239E26AE0BD0346C351E1C -:102E0000241E251E261EE86A35222422252226227B -:102E1000238E26A006D0D880253224323532343293 -:102E2000322A32C026F03EEF18F0236A7AEC18F00E -:102E300092EC18F023B622EF18F023A205D023BAA3 -:102E400022EF18F029EF18F023BA35EF18F023A07D -:102E500005D023B822EF18F035EF18F023B829EF8A -:102E600018F0276A7F0E2C24266EE86A272231503C -:102E7000265EE86A275A1A0E326E2C6A346A356A60 -:102E8000246A256A2E50295E2F502A5A30502B5A18 -:102E9000000E2C5A09E72E5029262F502A22305096 -:102EA0002B22000E2C2201D0348AD89029362A36C3 -:102EB0002B362C36D8903436353624362536322EFD -:102EC000E1D72B502A102910D8A4348A3EEF18F0ED -:102ED000236A7AEC18F092EC18F023B622EF18F07F -:102EE00023A205D023B822EF18F029EF18F023AA67 -:102EF00005D023B022EF18F029EF18F023B002D04C -:102F000023A802D035EF18F0276A31502C24266E02 -:102F1000E86A27227E0E265EE86A275A346A356AF6 -:102F2000246A256A30502B02F4CF25F0F3CF24F029 -:102F30002F502B02F3503526F4502422000E252268 -:102F400030502A02F3503526F4502422000E252258 -:102F50002E502B02F3503426F4503522000E24223A -:102F600025222F502A02F3503426F4503522000E29 -:102F70002422252230502902F3503426F4503522E1 -:102F8000000E242225222E502A02F4503426000E50 -:102F90003522242225222F502902F4503426000EF7 -:102FA0003522242225223EEF18F02AC034F02A5080 -:102FB0002F02F4CF29F0F3CF28F02B503002F4CFBA -:102FC0002BF0F3CF2AF02F02F3502926F4502A22B7 -:102FD000E86A2B2234503002F3502926F4502A227A -:102FE000E86A2B22000C236A7AEC18F023B6FDEF76 -:102FF00017F023A20ED023B405D07F0E2B6EFF0E48 -:103000002A6E1FD0800E2B6E2A6A1BD02B6A2A6A6A -:1030100018D023B0FBD78F0E2C60EDD77E0E2C641A -:10302000F5D78E0E2C5C05E0D8902B322A322C2A54 -:10303000F8D723A406D02A6C2B1EE86A2B222BAECD -:10304000E5D712007F0E2C6EFF0E2B6E2A6E296EB6 -:1030500012007F0E23BEFF0E2C6E02D07F0E2C6E50 -:10306000800E2B6E2A6A296AF3D723AE04D0800E15 -:103070002C6E2B6AF7D72C6A2B6AF4D725502410B4 -:1030800035103410F8E027BEF0D725BE0CD02650FE -:103090002710EBE0D8903436353624362536260610 -:1030A000D8A02706F2D72750D4E12628D2E034AEA4 -:1030B00011D07F0E341402E135A00CD0352AE86A15 -:1030C0002422252207E3D880253224323532262ACD -:1030D0002628BFE02650C9E035C029F024C02AF0D8 -:1030E00025342B6E26302C6E2B322C9E23BE2C8E3C -:1030F00028EF18F02B362C3602E32384237E06E1DA -:1031000023802C6A2B6A2A6A296A12002C2803E081 -:10311000D8802B321200D8902B3202E12382120089 -:10312000238612003036313602E3238C237E06E1FB -:103130002388316A306A2F6A2E6A1200312803E030 -:10314000D88030321200D8903032EAE1238A12005F -:10315000D9CFE6FFE1CFD9FF9290C30E9316949496 -:10316000060EE66EFDEC1FF0E552FE0EDBA00CD065 -:10317000AF0EE66EE1EC1FF0E552000EE66EE66A79 -:10318000C5EC1FF0E55204D0820EE66EE1EC1FF0B4 -:10319000E552F194FE0EDBA20CD0C70EE66E11ECE8 -:1031A0001FF0E552000EE66EE66AA9EC1FF0E5524C -:1031B00004D0F50EE66E11EC1FF0E5528194819A71 -:1031C000809081988294819641D128D9D880000E30 -:1031D0000001F455000EF555000EF655000EF7559A -:1031E0000CE2F407000EF55BF65BF75BF451F511AA -:1031F000F611F71102E1BD6A8294120018D9D88045 -:10320000000E0001F855000EF955000EFA55000E9B -:10321000FB550CE2F807000EF95BFA5BFB5BF8511B -:10322000F911FA11FB1102E1BA6A8196120008D96C -:10323000DBB08184DBB2818A09D102D9DBB0819411 -:10324000DBB2819A03D1FCD8DBA033D0F80EDBCF00 -:10325000F4F0F90EDBCFF5F0FA0EDBCFF6F0FB0E53 -:10326000DBCFF7F0280E2D6E2E6A2F6A306AF4C07D -:1032700028F0F5C029F0F6C02AF0F7C02BF0CAEC10 -:103280001EF028C0F4F029C0F5F02AC0F6F02BC0DB -:10329000F7F0C4D8FD0EDB50E8B08080E8A0809045 -:1032A0004A0EE66E4EEC20F050D86FEC1EF0E55260 -:1032B000E552FE0EDBA233D0F80EDBCFF8F0F90EAC -:1032C000DBCFF9F0FA0EDBCFFAF0FB0EDBCFFBF031 -:1032D000280E2D6E2E6A2F6A306AF8C028F0F9C0C9 -:1032E00029F0FAC02AF0FBC02BF0CAEC1EF028C06F -:1032F000F8F029C0F9F02AC0FAF02BC0FBF097D8FB -:10330000FD0EDB50E8B08188E8A081984A0EE66E99 -:103310009EEC1EF01AD840EC1EF0E552E55296D015 -:103320008050010B03E08350400B06E08050010BFE -:103330000BE18350800B08E1BD6A82940001F46BBD -:10334000F56BF66BF76B010C000CE552FC0EDBCF56 -:1033500016F016C02BF058EC16F029C012F02AC057 -:1033600013F02BC014F02CC015F02E6A2F6A7F0EBC -:10337000306E430E316E15EC17F029C00EF02AC0E6 -:103380000FF02BC010F02CC011F02E6A2F6A200E07 -:10339000306E3F0E316E68EC17F029C00AF02AC07B -:1033A0000BF02BC00CF02CC00DF02E6A1B0E2F6EF4 -:1033B000370E306E4C0E316E68EC17F029C006F0F7 -:1033C0002AC007F02BC008F02CC009F02E6A400E6E -:1033D0002F6E1C0E306E460E316E15EC17F0F3ECAE -:1033E00017F069EC16F029C002F02AC003F02BC0D8 -:1033F00004F02CC005F02E6A2F6A800E306E410E4C -:10340000316E15EC17F0F3EC17F02AC000F02BC06A -:1034100001F02AC0E6FF2BC0E6FF1200A00EE66E08 -:10342000150EE66EC5EC1FF0E552E5521200A00E37 -:10343000E66E150EE66EA9EC1FF0E552E55212009D -:10344000D9CFE6FFE1CFD9FFFE0E1200E552E7CF5C -:04345000D9FF12008E -:0C34540083948396839880928292050EE8 -:103460000101105D0EE2010E10C1E7FFE75204E01A -:10347000E846FE0BE706FCE101010F1502E1102B07 -:10348000EED7050E105D60E21051040A10E0070A45 -:103490000CE0010A08E0030A04E0010A09E1838460 -:1034A00007D0838605D0838803D0808201D08282B2 -:1034B0001051D9D8EFCF02F0036A02BE03680A0E9A -:1034C0002A6E2B6A02C02FF003C030F0D5EC17F043 -:1034D00028C000F029C001F0DC0E0026050E0122F4 -:1034E00000500101112701501223A9D8800E126E3D -:1034F000BB0E136E440E146E196A1A6A200E1B6EF0 -:10350000410E1C6E1051AFD8EFCF21F021C02BF02F -:103510005AEC16F029C01DF02AC01EF02BC01FF077 -:103520002CC020F0AAD819C029F01AC02AF01BC05C -:103530002BF01CC02CF068EC17F06FD87FEC16F065 -:1035400040D80101102B1200106B200E115D4E0EA1 -:10355000125915E274D8400E126E9C0E136E460E70 -:10356000146E11C12AF012C12BF069EC16F055D877 -:103570007EEC16F026D80101116B126B1200116B54 -:10358000126B6DD7D9CFE6FFE1CFD9FFFE0EDB502E -:103590006AD8FD0EDBCFEFFF6CD05CD804E0D8908A -:1035A000F336E806FCE1F35001010F1362D052D864 -:1035B00004E0D890F336E806FCE1F35001010F1B5C -:1035C00058D029C00DF02AC00EF02BC00FF02CC02F -:1035D00010F053D809C029F00AC02AF00BC02BF014 -:1035E0000CC02CF068EC17F0F3EC17F02AC006F0D2 -:1035F0002BC007F0086A2A50035C006E2B50045859 -:10360000016E08500558026E00C0E6FF01C0E6FFDB -:103610008DEC1FF0E552E552120029C015F02AC0CA -:1036200016F02BC017F02CC018F027D811C029F0C5 -:1036300012C02AF013C02BF014C02CF01200036843 -:103640000468056A096A0A6AC00E0B6E3F0E0C6EAA -:10365000116A1200D9CFE6FFE1CFD9FF010EF36E58 -:10366000FE0EDB501200EA6A0A0FE96E010EEA2232 -:103670001200E552E7CFD9FF120029C02EF02AC070 -:0C3680002FF02BC030F02CC031F01200F5 -:04368C00050EE66ED3 -:10369000060E8CD8070E8AD8080E88D8090E7ED858 -:1036A0000A0E80D80B0E7AD80C0E7CD80D0E76D868 -:1036B0000E0E78D80F0E72D8100E74D8110EB2EF0D -:1036C0001BF0D9CFE6FFE1CFD9FF51D8FD0EDBCFFC -:1036D000E6FF51EC1FF0E552C584BBEC20F0E5524B -:1036E000E7CFD9FF1200D9CFE6FFE1CFD9FF030E14 -:1036F000E126020EDB6A3BD8C582ADEC20F0E90E74 -:10370000E66E51EC1FF0E552C586DE6ADD6ADECF5B -:1037100000F0DDCF01F0E80E005C030E01580BE273 -:10372000C7A004D0020EC9CFDBFF05D0DF2A010EEF -:10373000EEE3DB2AECD7C58AC588ADEC20F0C58462 -:10374000ADEC20F0BBEC20F0020EDB50006E030E5F -:10375000E15C02E2E16AE552E16E0050E552E7CF3A -:10376000D9FF1200E66EADDFE552E5521200800E81 -:10377000E66E080EE66E18EC20F0E552E552C580C4 -:10378000ADEC20F0E80EE66E51EC1FF0E552FE0EB7 -:10379000DBCFE6FF51EC1FF0E5521200E3DFC40E71 -:1037A000E66E1200DFDF090EE66E1200DBDF050EAB -:0437B000E66E1200AF -:0C37B40036D857D856D855D84DD8430EFB -:1037C00054D057D8430E51D054D8FD0EDB5002E0F0 -:1037D000530E01D0730E49D04CD8FD0EDB5002E0E1 -:1037E000420E01D0620E41D044D8480E3ED041D89E -:1037F0004C0EE66E51EC1FF0E55231D8FC0EDBCFDB -:10380000E6FF51EC1FF020D00CD8FC0EDBCFE6FF1A -:10381000FD0E36D006D823D8FB0EDBCFE6FFFC0E1C -:103820002FD0D9CFE6FFE1CFD9FF800EE66E080E8C -:10383000E66E18EC20F0E552E552C580ADEC20F0C4 -:10384000FE0EDBCFE6FF18D0E552C584BBEC20F0BE -:10385000E552E7CFD9FF12001B0EE66E0DD0FD0E2C -:10386000DBCFE6FF09D0E66A07D0E66E51EC1FF029 -:10387000EBD7D7DF2CEF1CF051EC1FF0E552120014 -:0C388000DBCFE6FF99EC1DF0E552DED72F -:04388C0004012051C2 -:103890001F0B010801E01200245101E01200060E86 -:1038A000215D21E12351230A1BE0010A0CE0030AF8 -:1038B0001AE10001610517E100017E0E716F390EFA -:1038C000726F090E09D0000161050DE10001E50EDE -:1038D000716F390E726F1D0E746F756BC00E02D052 -:1038E0000001800E736F04012051600BE842E84232 -:1038F000E842E842E842010801E0120021510B0AC7 -:1039000026E0080A19E0090A11E0080A05E00B0A96 -:1039100023E0080A21E0120000011C0E716F010E65 -:10392000726F010E746F756BC10E0FD00001800EA7 -:10393000736F23C41CF1120000011D0E716F010E84 -:10394000726F010E746F756B810E736F1200000140 -:0A395000800E736F22C41DF11200F7 -:06395A0012010002000052 -:103960000008D80404000200010200010902290035 -:10397000010100C032090400000203000000092117 -:1039800011010001221D0007058103400001070508 -:103990000103400001040309042C034D006F006281 -:1039A0000069006C006500200052006F0062006F2B -:1039B000007400200050006C006100740066006F0D -:1039C0000072006D00200352006F0062006F0074EF -:1039D00000200049006E00740065007200660061FE -:1039E00000630065000600FF0901A10119012940DB -:1039F000150026FF007508954081001901294091A6 -:0A3A000000C06C3995399939C539B9 -:063A0A002A0EF66E080E04 -:103A1000F76E000EF86E01010900F550056F090000 -:103A2000F550066F03E1056701D03DD00900F55060 -:103A3000006F0900F550016F0900F550026F090091 -:103A40000900F550E96E0900F550EA6E0900090019 -:103A50000900F550036F0900F550046F09000900D3 -:103A6000F6CF07F1F7CF08F1F8CF09F100C1F6FF63 -:103A700001C1F7FF02C1F8FF0101035302E1045342 -:103A800007E00900F550EE6E0307F8E20407F9D7E6 -:103A900007C1F6FF08C1F7FF09C1F8FF01010507DB -:083AA000000E065BBFD7120007 -:083AA800D9CFE6FFDACFE6FFFB -:103AB000E1CFD9FFE2CFDAFFAC6AAB6AFD0EDBB033 -:103AC000AC88DBA202D0AC8CAB8CDBB4AC8EDBA6BA -:103AD00002D0AB8801D0AB8ADBB8AC849E98DBBA4D -:103AE000AC86DBAC02D09D8A01D09D9A9E9ADBAE5B -:103AF00002D09D8801D09D98FB0EDB50AF6EFB0E6F -:103B0000FC0EDBCF01F001C000F0016A0050B06E86 -:103B1000AC8AAB8E949C948EAC50100B04E0AC50ED -:103B2000800B01E1948CE552E5CFDAFFE7CFD9FFB6 -:023B3000120081 -:0E3B3200D9CFE6FFDACFE6FFE1CFD9FFE2CF31 -:103B4000DAFFE65229D820E0C6A60AD025D8E66ECC -:103B500051EC1FF0E552DF6EDF5010E0DF5015D062 -:103B60009E961AD8C96EC6889EA6FED7C750040B6B -:103B700005E1C750010B02E1FE0E07D0FC0EDB2A67 -:103B8000FD0EE0E3DB2ADED7000EE552E552E5CF7D -:103B9000DAFFE7CFD9FF1200FC0EDBCFE9FFFD0E05 -:083BA000DBCFEAFFEF50120039 -:083BA800FE0EE3CFE9FFFF0E62 -:103BB000E3CFEAFFE9CFF3FFEACFF4FFFB0EE350D8 -:103BC00003E1FC0EE35009E0FB0EE30602E2FC0E0B -:103BD000E306FD0EE350EE6EF1D71200FB0EE3CFCD -:103BE000F6FFFC0EE3CFF7FFFD0EE3CFF8FFFE0E6E -:103BF000E3CFE9FFFF0EE3CFEAFFE9CFF3FFEACF20 -:103C0000F4FFEE66FED7ED520900F5CFEFFFEE664A -:043C1000FBD71200CC -:0C3C14002DD8FD0EDB50A86EA69EA69CCD -:103C2000A684F250800B01E0010E01011E6FF29E8E -:103C3000550EA76EAA0EA76EA6821E51E8B0F28E90 -:103C4000E8A0F29EA6B2FED7A198A694E552E7CFCF -:103C5000D9FF12000DD8A69EA69CA680020EE66E85 -:103C6000A2EC20F0E552A850E552E7CFD9FF1200B0 -:103C7000D9CFE6FFE1CFD9FFFE0EDB50A96E1200CF -:103C8000D9CFE6FFDACFE6FFE1CFD9FFE2CFDAFF07 -:103C9000E652E652FC0EDBCF00F0FD0EDBCF01F06A -:103CA000060ED89000360136E804FBE100C0DEFFC6 -:103CB00001C0DDFF010EDB50BB6EDF50E840E84085 -:103CC0003F0B300B006ECF0EBA140010BA6EE552E7 -:0E3CD000E552E552E5CFDAFFE7CFD9FF12004B -:023CDE00D9CF3C -:103CE000E6FFDACFE6FFE1CFD9FFE2CFDAFFE65217 -:103CF000E652FC0EDBCF00F0FD0EDBCF01F0060E2E -:103D0000D89000360136E804FBE100C0DEFF01C0B8 -:103D1000DDFF010EDB50BE6EDF50E840E8403F0B98 -:103D2000300B006ECF0EBD140010BD6EE552E55293 -:0C3D3000E552E5CFDAFFE7CFD9FF120023 -:043D3C00D9CFE6FFF6 -:103D4000DACFE6FFE1CFD9FFE2CFDAFFE652E65263 -:103D50000C0EBA6E050EF66EF76A300EF86E08009D -:103D6000F550010B03E0010EDB6802D0010EDB6AA7 -:103D7000DB5002E0949201D09396CA94FD0EDB5082 -:103D8000CB6ECA84E552E552E552E5CFDAFFE7CFC4 -:043D9000D9FF120045 -:0C3D9400276A266A256A246A200EE76E62 -:103DA000D890283629362A362B362436253626361C -:103DB00027362D50245C2E5025582F502658305031 -:103DC000275809E32D50245E2E50255A2F50265A8D -:0C3DD0003050275A282AE72EE4D71200B2 -:043DDC00D9CFE6FF56 -:103DE000DACFE6FFE1CFD9FFE2CFDAFFFD0EDB50FD -:103DF000360BB16EB36AB26AA192FD0EDBAE02D091 -:103E0000A08201D0A092DBB2CD86DBA002D0B18E21 -:103E100001D0B19EB180E552E5CFDAFFE7CFD9FFFF -:023E200012008E -:0E3E2200D9CFE6FFDACFE6FFE1CFD9FFE2CF3E -:103E3000DAFFFD0EDB507E0BCD6EFD0EDBAC02D04B -:103E4000CD8E01D0CD9ECF6ACE6A9E90DBAE02D0E1 -:103E50009D8001D09D90CD80E552E5CFDAFFE7CF80 -:043E6000D9FF120074 -:0C3E6400D9CFE6FFDACFE6FFE1CFD9FFAF -:103E7000E2CFDAFFE652F20E0001FF17ABAC03D03F -:103E8000FF91ABB0FF81ABB4FF85ABB2FF87AE5003 -:103E9000DF6EDF50E552E552E5CFDAFFE7CFD9FF1D -:023EA00012000E -:0E3EA200D9CFE6FFDACFE6FFE1CFD9FFE2CFBE -:103EB000DAFFFD0EDB50C96EC6AE02D0FF0E09D090 -:103EC000C7B0FED7ADEC20F0C5AC02D0FE0E01D0DD -:0E3ED000000EE552E5CFDAFFE7CFD9FF120072 -:023EDE0031377A -:103EE0003A34373A35360020004D6172203237209F -:103EF0003230313000526F626F7420496E746572D7 -:103F00006661636520312E300A4F6C69766965728F -:093F100020424943484C4552008F -:063F1A00D9CFE6FFDACF6B -:103F2000E6FFE1CFD9FFE2CFDAFFE652E652FC0E20 -:103F3000DBCFDEFFDBCFDDFF010EDB50B36EDF50EA -:103F4000B26EE552E552E552E5CFDAFFE7CFD9FF91 -:023F500012005D -:0E3F5200D9CFE6FFDACFE6FFE1CFD9FFE2CF0D -:103F6000DAFFE652E652FC0EDBCFDEFFDBCFDDFFF1 -:103F7000010EDB50CF6EDF50CE6EE552E552E552BA -:0A3F8000E5CFDAFFE7CFD9FF12000A -:063F8A00D9CFE6FFDACFFB -:103F9000E6FFE1CFD9FFE2CFDAFFE652E652FC0EB0 -:103FA000DBCFDEFFDBCFDDFF010EDB50D76EDF5056 -:103FB000D66EE552E552E552E5CFDAFFE7CFD9FFFD -:023FC0001200ED -:0E3FC200D9CFE6FFDACFE6FFE1CFD9FFE2CF9D -:103FD000DAFFFD0EDB507F0BD56ED76AD66AF294FE -:103FE000FD0EDBAE02D0F28A01D0F29AD58EE552F8 -:0A3FF000E5CFDAFFE7CFD9FF12009A -:063FFA00D9CFE6FFDACF8B -:10400000E6FFE1CFD9FFE2CFDAFFFD0EDB50FB0B7D -:10401000CA6ECC6A9E92FD0EDBAE02D09D8201D0AC -:104020009D92CA84E552E5CFDAFFE7CFD9FF1200AF -:10403000D9CFE6FFDACFE6FFE1CFD9FFE2CFDAFF53 -:104040003F0EC716C66AC56AFD0EDB50C612FC0ECF -:10405000DB50C71293829380C68AE552E5CFDAFF20 -:06406000E7CFD9FF1200BA -:0A406600D9CFE6FFE1CFD9FF00013A -:104070000ED8EF50000803E2EB291F0BEB6F07D8B7 -:10408000FE0EDBCFEFFFE552E7CFD9FF1200EB5179 -:0C409000EA6ACB0FE96E000EEA22120073 -:04409C00D9CFE6FF93 -:1040A000DACFE6FFE1CFD9FFE2CFDAFF0C0EBD1287 -:1040B0009494CA94FD0EDB50CB6ECA84E552E5CFD2 -:0C40C000DAFFE7CFD9FF12009494120041 -:0440CC00FF0EE350B0 -:1040D000376EEF0E01D0F30EE76EE72E6DEF20F096 -:1040E0000C0E366EE76AE72E73EF20F0362E72EF75 -:0A40F00020F0372E6BEF20F01200D5 -:0640FA00D9CFE6FFDACF8A -:10410000E6FFE1CFD9FFE2CFDAFFACAC04D0AC9050 -:104110000001FFB3AC80FD0EDB50AD6EE552E5CF84 -:08412000DAFFE7CFD9FF12001E -:0841280013EE00F023EE00F09D -:10413000F86A239C05EC1DF0BDEC20F0B0EC04F017 -:04414000FBD7120097 -:0C414400FF0EE350E84E1200000000D017 -:0A41500000D000D0E82EFAD71200CC -:06415A001F0EC514FDE17B -:08416000C750040BFAE1120044 -:0841680000EE00F00F0EEE6AFC -:06417000EA62FDD7120017 -:04417600C69A1200D3 -:02417A00120031 -:04417C00000000003F -:0541800000000000003A -:0B41850000000000000000000000002F -:0541900000000000002A -:0941950000000000010000000020 -:02419E0000001F -:1041A000000000000000000000000000000000000F -:0F41B00000000000000000000000000000000000 -:0141BF0000FF -:1041C00000000000000000000000000000000000EF -:1041D00000000000000000000000000000000000DF -:0341E000000000DC +:08086800DACFE4FFE2CFDAFF72 +:10087000E9CFE4FFEACFE4FFF6CFE4FFF7CFE4FFF0 +:10088000F5CFE4FFF3CFE4FFF4CFE4FFFACFE4FFCA +:1008900000EE22F0140EE80403E3EECFE4FFFBD7F2 +:1008A00000EE00F0220EE80403E3EECFE4FFFBD7F6 +:1008B0001EEC0DF0A1A203D087EC18F0A1929EAA25 +:1008C00003D039EC13F09E9AF2A403D0C9EC19F0CE +:1008D000F29431EC0DF002E2E16AE5522FEC0DF0FA +:1008E000E55200EE21F0220EE80403E3E5CFEDFF30 +:1008F000FBD700EE35F0140EE80403E3E5CFEDFF7F +:10090000FBD7E5CFFAFFE5CFF4FFE5CFF3FFE5CF67 +:10091000F5FFE5CFF7FFE5CFF6FFE5CFEAFFE5CF3F +:10092000E9FFE5CFDAFF1100D8CFE4FFE0CFE4FF25 +:10093000E46EDACFE4FFE2CFDAFFF3CFE4FFF4CFE7 +:10094000E4FF1EEC0DF031EC0DF002E2E16AE5523D +:100950002FEC0DF0E552E5CFF4FFE5CFF3FFE5CF47 +:10096000DAFFE550E5CFE0FFE5CFD8FF100004D86F +:10097000C4EC0DF059D8FCD70F0EC11202D88EEF7F +:100980000DF069EC0DF0E652A5EC0CF00001FC6FE7 +:10099000070EFC5D10E1E66A9FEC1DF0E552DF6E8C +:1009A000000EDF8039EC0DF0E66A43EC1FF0E552F3 +:1009B000DF7039EC0DF093809382948C948ED08EFE +:1009C000F28EF28C770EC86E070EE66E4FEC1BF0BF +:1009D000E5523F0E8A1693160101136B146B156BCB +:1009E000166B010E176F34EC13F0E30E951692920E +:1009F0009492A082FD0EE66E08EC1EF0E552000E09 +:100A0000E66EE66A86EC1EF0E552E5528394839624 +:100A1000839880928292E66AA3EC19F0E552BBECCF +:100A20001AF0E5527AEF0DF0D9CFE6FFE1CFD9FF0A +:100A3000170EE126160EDB6A0101175102E099EC50 +:100A40000BF0200E0001605D03E36D50020B02E02D +:100A50008FEF0BF0160EDB5036E091EC1AF0000928 +:100A600032E001011551161102E1000E08D015C146 +:100A7000E9FF16C1EAFFEF50800B01E0010E00090B +:100A800022E10501406B01011851182B0501416F4E +:100A900005010C0E426F0501436B400EE66E400EE1 +:100AA000E66E050EE66E010EE66E010EE66EDFECFA +:100AB00011F0006E050EE15E0050F3CF15F1F4CF9A +:100AC00016F1160EDB6A01011551161102E1000E36 +:100AD00008D015C1E9FF16C1EAFFEF50800B01E015 +:100AE000010E00093DE101011951EA6ACB0FE96EDF +:100AF000000EEA22EF5034E00501406B010118516D +:100B0000182B0501416F0501040E426F01011951B7 +:100B1000EA6ACB0FE96E000EEA22EFCF43F5400EF2 +:100B2000E66E400EE66E050EE66E010EE66E010EF6 +:100B3000E66EDFEC11F0006E050EE15E0050F3CFC3 +:100B400015F1F4CF16F101011951EA6ACB0FE96EE4 +:100B5000000EEA22EF6A010119291F0B0101196F2A +:100B600001011351141102E1000E08D013C1E9FF75 +:100B700014C1EAFFEF50800B01E0010E000902E012 +:100B80008FEF0BF005010251070A02E1F5EF0AF0C1 +:100B9000020A02E1C7EF0AF00E0A02E16EEF0AF064 +:100BA000060A02E1F3EF09F0040A01E110D20F0A8C +:100BB00001E165D1040A1AE0030A07E0010A02E034 +:100BC0004EEF0BF0FF008FEF0BF0E66A9FEC1DF08D +:100BD000E552DF6E000EDB80DFCFE6FFE66A7FECDA +:100BE0001DF0E552E552FF008FEF0BF001011551AA +:100BF000161102E1000E08D015C1E9FF16C1EAFF87 +:100C0000EF50800B01E0010E000901E036D100C574 +:100C100040F50501416B0501030E426F0501436B71 +:100C2000050108510A0A01E17ED00E0A71E0070AA7 +:100C300064E0010A20E0030A06E0010A01E0F3D0C3 +:100C4000FCC048F5F3D00501486BE70E006E3C0E82 +:100C5000016E026A00C0E6FF01C0E6FF02C0E6FFC7 +:100C6000480EE66E050EE66E63EC1DF0036E050E93 +:100C7000E15E0350DBD00501486BDB0E006E3C0EDD +:100C8000016E026A00C0E6FF01C0E6FF02C0E6FF97 +:100C9000480EE66E050EE66E63EC1DF0036E050E63 +:100CA000E15E0350D90E006E3C0E016E026A00C078 +:100CB000E6FF01C0E6FF02C0E6FF480EE66E050E45 +:100CC000E66E63EC1DF0036E050EE15E0350D00E80 +:100CD000006E3C0E016E026A00C0E6FF01C0E6FF36 +:100CE00002C0E6FF480EE66E050E... [truncated message content] |
From: Jérémie D. <Ba...@us...> - 2010-05-03 20:34:03
|
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "krobot". The branch, master has been updated via bd7d041911c2068e56439d09796d395a78a8c911 (commit) from efa5bb966764fda5d984977036c4d28344339410 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit bd7d041911c2068e56439d09796d395a78a8c911 Author: Jérémie Dimino <je...@di...> Date: Mon May 3 22:33:07 2010 +0200 add movement functions into Krobot_move ----------------------------------------------------------------------- Changes: diff --git a/info/control/lib-krobot/krobot_move.ml b/info/control/lib-krobot/krobot_move.ml index 8b03520..d25ab55 100644 --- a/info/control/lib-krobot/krobot_move.ml +++ b/info/control/lib-krobot/krobot_move.ml @@ -49,7 +49,7 @@ type vertex_search_info = { (* The vertex that was initially choosen for this path *) } -let move ~graph ~position ~destination = +let next ~graph ~position ~destination = (* [visited] is a mapping from already visited vertexs to the length of the smallest path to reach them, and the initial edge that was choosen. *) @@ -90,3 +90,23 @@ let move ~graph ~position ~destination = Vertex_set.empty) in (search visited newly_added).vsi_initial + +type robot = { + position : vertex; + orientation : int; +} + +let move ~robot ~destination = + let diff = (angle robot.position destination - robot.orientation) mod 360 in + let diff = + if diff < -180 then + diff + 360 + else if diff > 180 then + diff - 360 + else + diff + in + (diff mod 360, + distance robot.position destination, + { position = destination; + orientation = robot.orientation + diff }) diff --git a/info/control/lib-krobot/krobot_move.mli b/info/control/lib-krobot/krobot_move.mli index 415ce1e..f4bd9d5 100644 --- a/info/control/lib-krobot/krobot_move.mli +++ b/info/control/lib-krobot/krobot_move.mli @@ -19,9 +19,22 @@ type vertex = { val empty : graph val add_edge : vertex * vertex -> graph -> graph -val move : graph : graph -> position : vertex -> destination : vertex -> vertex - (** [move ~graph ~position ~destination] returns the next step to +val next : graph : graph -> position : vertex -> destination : vertex -> vertex + (** [next ~graph ~position ~destination] returns the next step to reach [destination] *) val distance : vertex -> vertex -> int val angle : vertex -> vertex -> int + +type robot = { + position : vertex; + orientation : int; +} + +val move : robot : robot -> destination : vertex -> int * int * robot + (** [move ~robot ~destination] returns: + + - the angle the robot must turn + - the distance the robot must advance to reach [destination] + - the new state of the robot after the move + *) diff --git a/info/control/tests/move.ml b/info/control/tests/move.ml index 28145e7..47b4563 100644 --- a/info/control/tests/move.ml +++ b/info/control/tests/move.ml @@ -24,38 +24,30 @@ let graph = List.fold_left (fun graph edge -> add_edge edge graph) empty [ (a, dest); ] -let rec loop krobot position angle = - if position = dest then +let rec loop krobot state = + if state.position = dest then return () else begin - let next = Krobot_move.move graph position dest in - printf "(%d, %d) -> (%d, %d)\n" position.vx position.vy next.vx next.vy; - let diff = (Krobot_move.angle position next - angle) mod 360 in - let diff = - if diff < -180 then - diff + 360 - else if diff > 180 then - diff - 360 - else - diff - in - printf " current; %d, diff: %d\n" angle diff; + let next = Krobot_move.next graph state.position dest in + printf "(%d, %d) -> (%d, %d)\n" state.position.vx state.position.vy next.vx next.vy; + let angle, distance, state' = Krobot_move.move state next in + printf " current; %d, diff: %d\n" state.orientation angle; lwt () = match krobot with | Some krobot -> lwt () = - if diff <> 0 then - lwt _ = Krobot.turn krobot ~angle:(diff mod 360) ~velocity ~acceleration in + if angle <> 0 then + lwt _ = Krobot.turn krobot ~angle ~velocity ~acceleration in return () else return () in - lwt _ = Krobot.move krobot ~distance:(Krobot_move.distance position next) ~velocity ~acceleration in + lwt _ = Krobot.move krobot ~distance ~velocity ~acceleration in return () | None -> return () in - loop krobot next (angle + diff) + loop krobot state' end lwt () = @@ -67,4 +59,4 @@ lwt () = | _ -> return None in - loop krobot init 0 + loop krobot { position = init; orientation = 0 } hooks/post-receive -- krobot |
From: Jérémie D. <Ba...@us...> - 2010-05-03 15:51:13
|
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "krobot". The branch, master has been updated via efa5bb966764fda5d984977036c4d28344339410 (commit) from 2c21e9cca0061774f03999f450733b338941d5ca (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit efa5bb966764fda5d984977036c4d28344339410 Author: Jérémie Dimino <je...@di...> Date: Mon May 3 17:50:38 2010 +0200 add missing notification modes ----------------------------------------------------------------------- Changes: diff --git a/info/control/lib-krobot/krobot.ml b/info/control/lib-krobot/krobot.ml index dac7b78..9f05c13 100644 --- a/info/control/lib-krobot/krobot.ml +++ b/info/control/lib-krobot/krobot.ml @@ -57,6 +57,7 @@ let devices_status krobot = dev_lcd = List.assoc "LCD" l; }) (OBus_property.make + ~notify_mode Krobot_interfaces.Fr_krobot_Manager.p_DevicesStatus (OBus_proxy.make krobot ["fr"; "krobot"; "Manager"])) @@ -306,7 +307,7 @@ struct let state krobot c = OBus_property.map_r card_state_of_int32 - (OBus_property.make p_State (card krobot c)) + (OBus_property.make ~notify_mode p_State (card krobot c)) let errors krobot c = OBus_signal.connect s_Error (card krobot c) hooks/post-receive -- krobot |
From: Jérémie D. <Ba...@us...> - 2010-05-03 12:00:22
|
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "krobot". The branch, master has been updated via 2c21e9cca0061774f03999f450733b338941d5ca (commit) from 9a8255e1fe73b38cb1a2bbe49fdb7c692f211d85 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 2c21e9cca0061774f03999f450733b338941d5ca Author: Jérémie Dimino <je...@di...> Date: Mon May 3 13:57:38 2010 +0200 updates ----------------------------------------------------------------------- Changes: diff --git a/info/control/driver/driver.ml b/info/control/driver/driver.ml index 9dca6b4..67cb2d7 100644 --- a/info/control/driver/driver.ml +++ b/info/control/driver/driver.ml @@ -189,9 +189,21 @@ struct OBus_object.add_interface obus (make ~notify_mode { - m_SetLCD = (fun ctx () lines -> set_lcd lines); - m_BacklightOn = (fun ctx () () -> backlight_on ()); - m_BacklightOff = (fun ctx () () -> backlight_off ()); + m_SetLCD = ( + fun ctx () lines -> + lwt () = set_lcd lines in + OBus_method.return ctx () + ); + m_BacklightOn = ( + fun ctx () () -> + lwt () = backlight_on () in + OBus_method.return ctx () + ); + m_BacklightOff = ( + fun ctx () () -> + lwt () = backlight_off () in + OBus_method.return ctx () + ); }) end @@ -222,14 +234,33 @@ struct let () = OBus_object.add_interface obus - (make ~notify_mode - { - m_ClawsEnable = (fun ctx () () -> claws_enable ()); - m_ClawsDisable = (fun ctx () () -> claws_disable ()); - m_ClawsOpen = (fun ctx () () -> claws_open ()); - m_ClawsClose = (fun ctx () () -> claws_close ()); - m_ClawsTake = (fun ctx () () -> claws_take ()); - }) + (make ~notify_mode { + m_ClawsEnable = ( + fun ctx obj () -> + lwt result = claws_enable obj in + OBus_method.return ctx result + ); + m_ClawsDisable = ( + fun ctx obj () -> + lwt result = claws_disable obj in + OBus_method.return ctx result + ); + m_ClawsOpen = ( + fun ctx obj () -> + lwt result = claws_open obj in + OBus_method.return ctx result + ); + m_ClawsClose = ( + fun ctx obj () -> + lwt result = claws_close obj in + OBus_method.return ctx result + ); + m_ClawsTake = ( + fun ctx obj () -> + lwt result = claws_take obj in + OBus_method.return ctx result + ); + }) end (* +-----------------------------------------------------------------+ @@ -308,21 +339,44 @@ struct OBus_object.add_interface obus (make ~notify_mode { - m_SetAX12 = (fun ctx () positions -> - let positions = - List.map - (fun (x1, x2, x3) -> - { aa_id = Int32.to_int x1; - aa_position = Int32.to_int x2; - aa_velocity = Int32.to_int x3 }) - positions - in - set_ax12 positions); - m_GripUp = (fun ctx () () -> grip_up ()); - m_GripDown = (fun ctx () () -> grip_down ()); - m_GripOpen = (fun ctx () () -> grip_open ()); - m_GripClose = (fun ctx () () -> grip_close ()); - m_GripRelease = (fun ctx () () -> grip_release ()); + m_SetAX12 = ( + fun ctx () positions -> + let positions = + List.map + (fun (x1, x2, x3) -> + { aa_id = Int32.to_int x1; + aa_position = Int32.to_int x2; + aa_velocity = Int32.to_int x3 }) + positions + in + lwt () = set_ax12 positions in + OBus_method.return ctx () + ); + m_GripUp = ( + fun ctx obj () -> + lwt result = grip_up obj in + OBus_method.return ctx result + ); + m_GripDown = ( + fun ctx obj () -> + lwt result = grip_down obj in + OBus_method.return ctx result + ); + m_GripOpen = ( + fun ctx obj () -> + lwt result = grip_open obj in + OBus_method.return ctx result + ); + m_GripClose = ( + fun ctx obj () -> + lwt result = grip_close obj in + OBus_method.return ctx result + ); + m_GripRelease = ( + fun ctx obj () -> + lwt result = grip_release obj in + OBus_method.return ctx result + ); }) end @@ -375,14 +429,32 @@ struct (make ~notify_mode { p_Value = (fun () -> React.S.map (fun x -> List.map Int32.of_int (Array.to_list x)) value); - m_GetCalibration = (fun ctx () id -> - lwt result = get_calibration (Int32.to_int id) in - return (List.map Int32.of_int (Array.to_list result))); - m_CalibrationStart = (fun ctx () (id, skip_measure) -> - let id = Int32.to_int id in - calibration_start id skip_measure); - m_CalibrationStop = (fun ctx () () -> calibration_stop ()); - m_CalibrationContinue = (fun ctx () () -> calibration_continue ()); + m_GetCalibration = ( + fun ctx () id -> + let ctx = + OBus_context.map + (fun x -> List.map Int32.of_int (Array.to_list x)) + ctx + in + lwt result = get_calibration (Int32.to_int id) in + OBus_method.return ctx result + ); + m_CalibrationStart = ( + fun ctx () (id, skip_measure) -> + let id = Int32.to_int id in + lwt () = calibration_start id skip_measure in + OBus_method.return ctx () + ); + m_CalibrationStop = ( + fun ctx () () -> + lwt () = calibration_stop () in + OBus_method.return ctx () + ); + m_CalibrationContinue = ( + fun ctx () () -> + lwt () = calibration_continue () in + OBus_method.return ctx () + ); }) end @@ -711,37 +783,62 @@ struct OBus_object.add_interface obus (make ~notify_mode { - m_Turn = (fun ctx () (angle, velocity, acceleration) -> - let angle = Int32.to_int angle in - let velocity = Int32.to_int velocity in - let acceleration = Int32.to_int acceleration in - turn angle velocity acceleration >|= int32_of_move_result); - m_Move = (fun ctx () (distance, velocity, acceleration) -> - let distance = Int32.to_int distance in - let velocity = Int32.to_int velocity in - let acceleration = Int32.to_int acceleration in - move distance velocity acceleration >|= int32_of_move_result); - m_Goto = (fun ctx () (x, y, velocity, acceleration, mode, bypass_distance) -> - let x = Int32.to_int x in - let y = Int32.to_int y in - let velocity = Int32.to_int velocity in - let acceleration = Int32.to_int acceleration in - let mode = goto_mode_of_int32 mode in - let bypass_distance = Int32.to_int bypass_distance in - goto x y velocity acceleration mode bypass_distance >|= int32_of_move_result); - m_StopMotors = (fun ctx () mode -> - let mode = stop_mode_of_int32 mode in - stop_motors mode); - m_SetVelocities = (fun ctx () (velocity_l, acceleration_l, velocity_r, acceleration_r, duration) -> - let velocity_l = Int32.to_int velocity_l in - let acceleration_l = Int32.to_int acceleration_l in - let velocity_r = Int32.to_int velocity_r in - let acceleration_r = Int32.to_int acceleration_r in - set_velocities (velocity_l, velocity_r) (acceleration_l, acceleration_r) duration); - p_InhibitForwardUntil = ((fun () -> Var.signal inhibit_forward_until), - (fun ctx () delay -> set_inhibit_forward_until delay)); - p_InhibitBackwardUntil = ((fun () -> Var.signal inhibit_backward_until), - (fun ctx () delay -> set_inhibit_backward_until delay)); + m_Turn = ( + fun ctx () (angle, velocity, acceleration) -> + let ctx = OBus_context.map int32_of_move_result ctx in + let angle = Int32.to_int angle in + let velocity = Int32.to_int velocity in + let acceleration = Int32.to_int acceleration in + lwt result = turn angle velocity acceleration in + OBus_method.return ctx result + ); + m_Move = ( + fun ctx () (distance, velocity, acceleration) -> + let ctx = OBus_context.map int32_of_move_result ctx in + let distance = Int32.to_int distance in + let velocity = Int32.to_int velocity in + let acceleration = Int32.to_int acceleration in + lwt result = move distance velocity acceleration in + OBus_method.return ctx result + ); + m_Goto = ( + fun ctx () (x, y, velocity, acceleration, mode, bypass_distance) -> + let ctx = OBus_context.map int32_of_move_result ctx in + let x = Int32.to_int x in + let y = Int32.to_int y in + let velocity = Int32.to_int velocity in + let acceleration = Int32.to_int acceleration in + let mode = goto_mode_of_int32 mode in + let bypass_distance = Int32.to_int bypass_distance in + lwt result = goto x y velocity acceleration mode bypass_distance in + OBus_method.return ctx result + ); + m_StopMotors = ( + fun ctx () mode -> + let mode = stop_mode_of_int32 mode in + lwt () = stop_motors mode in + OBus_method.return ctx () + ); + m_SetVelocities = ( + fun ctx () (velocity_l, acceleration_l, velocity_r, acceleration_r, duration) -> + let velocity_l = Int32.to_int velocity_l in + let acceleration_l = Int32.to_int acceleration_l in + let velocity_r = Int32.to_int velocity_r in + let acceleration_r = Int32.to_int acceleration_r in + lwt () = set_velocities (velocity_l, velocity_r) (acceleration_l, acceleration_r) duration in + OBus_method.return ctx () + ); + p_InhibitForwardUntil = ( + (fun () -> + Var.signal inhibit_forward_until), + (fun ctx () delay -> + set_inhibit_forward_until delay) + ); + p_InhibitBackwardUntil = ( + (fun () -> + Var.signal inhibit_backward_until), + (fun ctx () delay -> + set_inhibit_backward_until delay)); p_State = (fun () -> state_info); }) end @@ -790,7 +887,11 @@ struct (make ~notify_mode { p_DevicesStatus = (fun () -> devices_status); - m_Shutdown = (fun ctx () () -> shutdown ctx ()); + m_Shutdown = ( + fun ctx () () -> + lwt () = shutdown ctx () in + OBus_method.return ctx () + ); }) end @@ -837,11 +938,31 @@ struct { p_Name = (fun obj -> React.S.const card.card_name); p_State = (fun obj -> React.S.map int32_of_card_state obj.state); - m_GetFirmwareBuild = (fun ctx obj () -> get_firmware_build obj); - m_GetBoardInfo = (fun ctx obj () -> get_board_info obj); - m_Bootloader = (fun ctx obj () -> bootloader obj); - m_Reset = (fun ctx obj () -> reset obj); - m_Test = (fun ctx obj () -> test obj); + m_GetFirmwareBuild = ( + fun ctx obj () -> + lwt result = get_firmware_build obj in + OBus_method.return ctx result + ); + m_GetBoardInfo = ( + fun ctx obj () -> + lwt result = get_board_info obj in + OBus_method.return ctx result + ); + m_Bootloader = ( + fun ctx obj () -> + lwt () = bootloader obj in + OBus_method.return ctx () + ); + m_Reset = ( + fun ctx obj () -> + lwt () = reset obj in + OBus_method.return ctx () + ); + m_Test = ( + fun ctx obj () -> + lwt () = test obj in + OBus_method.return ctx () + ); }] path; card = card; diff --git a/info/control/driver/export_unsafe.ml b/info/control/driver/export_unsafe.ml index 743c6b2..e05467e 100644 --- a/info/control/driver/export_unsafe.ml +++ b/info/control/driver/export_unsafe.ml @@ -32,14 +32,17 @@ let make_method card cmd = (fun ctx obj args -> match React.S.value card.card_card with | Some card -> - USBCard.call cmd card - (List.map2 Value.V.of_dbus - (Value.C.type_sequence (Value.arg_types cmd.send)) - args) - >|= List.map2 Value.V.to_dbus (Value.C.type_sequence (Value.arg_types cmd.recv)) + lwt result = + USBCard.call cmd card + (List.map2 Value.V.of_dbus + (Value.C.type_sequence (Value.arg_types cmd.send)) + args) + in + OBus_method.return ctx + (List.map2 Value.V.to_dbus (Value.C.type_sequence (Value.arg_types cmd.recv)) result) | None -> Printf.ksprintf - (OBus_error.fail Error.Card_unavailable) + (OBus_method.fail ctx Error.Card_unavailable) "the %s card is currently unavailable" card.card_name) hooks/post-receive -- krobot |
From: Nicolas D. <Ba...@us...> - 2010-05-01 22:41:00
|
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "krobot". The branch, master has been updated via 9a8255e1fe73b38cb1a2bbe49fdb7c692f211d85 (commit) via 2ac834557e0eeb06838235bc2b3a6d8a05ffc23b (commit) from 5ce9aad76502ae4d2604f94af646dc29947269d4 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 9a8255e1fe73b38cb1a2bbe49fdb7c692f211d85 Author: Nicolas Dandrimont <Nic...@cr...> Date: Sun May 2 00:36:19 2010 +0200 Add a new AX12 Servo interface card for Krobot Jr comprising: - AX12 power management (10V-3A regulated adjustable output) - AX12 control interface (w/ 3.3V level adaptation) - Analog Servo power management (5V 10A regulated adjustable output) commit 2ac834557e0eeb06838235bc2b3a6d8a05ffc23b Author: Nicolas Dandrimont <Nic...@cr...> Date: Sun May 2 00:32:31 2010 +0200 Add PTR08100 component to the Krobot orcad library (w/ Footprint) http://focus.ti.com/docs/prod/folders/print/ptr08100w.html ----------------------------------------------------------------------- Changes: diff --git a/elec/boards/Interface_AX12_Jr/PCB/INTERFACE_AX12_JR-2.MAX b/elec/boards/Interface_AX12_Jr/PCB/INTERFACE_AX12_JR-2.MAX new file mode 100644 index 0000000..350b65c Binary files /dev/null and b/elec/boards/Interface_AX12_Jr/PCB/INTERFACE_AX12_JR-2.MAX differ diff --git a/elec/boards/Interface_AX12_Jr/PCB/interface_ax12_jr.mnl b/elec/boards/Interface_AX12_Jr/PCB/interface_ax12_jr.mnl new file mode 100644 index 0000000..cdb3505 Binary files /dev/null and b/elec/boards/Interface_AX12_Jr/PCB/interface_ax12_jr.mnl differ diff --git a/elec/boards/Interface_AX12_Jr/Schematic/INTERFACE_AX12_JR.DSN b/elec/boards/Interface_AX12_Jr/Schematic/INTERFACE_AX12_JR.DSN new file mode 100644 index 0000000..3335820 Binary files /dev/null and b/elec/boards/Interface_AX12_Jr/Schematic/INTERFACE_AX12_JR.DSN differ diff --git a/elec/boards/Interface_AX12_Jr/Schematic/INTERFACE_AX12_JR_0.DBK b/elec/boards/Interface_AX12_Jr/Schematic/INTERFACE_AX12_JR_0.DBK new file mode 100644 index 0000000..1cc1a85 Binary files /dev/null and b/elec/boards/Interface_AX12_Jr/Schematic/INTERFACE_AX12_JR_0.DBK differ diff --git a/elec/boards/Interface_AX12_Jr/Schematic/Interface_AX12_Jr.opj b/elec/boards/Interface_AX12_Jr/Schematic/Interface_AX12_Jr.opj new file mode 100644 index 0000000..d151542 --- /dev/null +++ b/elec/boards/Interface_AX12_Jr/Schematic/Interface_AX12_Jr.opj @@ -0,0 +1,102 @@ +(ExpressProject "Interface_AX12_Jr" + (ProjectVersion "19981106") + (ProjectType "Analog or A/D Mixed Mode") + (Folder "Design Resources" + (Folder "Library") + (NoModify) + (File ".\interface_ax12_jr.dsn" + (Type "Schematic Design")) + (BuildFileAddedOrDeleted "x") + (CompileFileAddedOrDeleted "x") + (DRC_Scope "0") + (DRC_Action "0") + (DRC_Create_Warnings "FALSE") + (DRC_Check_Ports "TRUE") + (DRC_Check_Off-Page_Connectors "TRUE") + (DRC_Identical_References "TRUE") + (DRC_Type_Mismatch "TRUE") + (DRC_Report_Ports_and_Off-page_Connectors "TRUE") + (DRC_SDT_Compatibility "FALSE") + (DRC_Report_Off-grid_Objects "FALSE") + (DRC_Check_Unconnected_Nets "TRUE") + (DRC_Check_for_Misleading_TAP "TRUE") + (DRC_Visible_Power_pins "FALSE") + (DRC_Report_Netnames "TRUE") + (DRC_View_Output "FALSE") + (DRC_Report_File + "Z:\CODE\KROBOT\KROBOT\ELEC\BOARDS\INTERFACE_AX12_JR\SCHEMATIC\INTERFACE_AX12_JR.DRC") + (Netlist_TAB "3") + (LAYOUT_Netlist_File + "Z:\code\krobot\krobot\elec\boards\Interface_AX12_Jr\PCB\interface_ax12_jr.mnl") + (LAYOUT_PCB_Footprint "{PCB Footprint}") + (TRUE) + (LAYOUT_Units "0") + ( "TRUE")) + (Folder "Outputs" + (File ".\interface_ax12_jr.drc" + (Type "Report")) + (File "..\pcb\interface_ax12_jr.mnl" + (Type "LAYOUT Netlist File"))) + (Folder "PSpice Resources" + (Folder "Simulation Profiles") + (Folder "Model Libraries" + (Sort User)) + (Folder "Stimulus Files" + (Sort User)) + (Folder "Include Files" + (Sort User))) + (DefaultLibraryBrowseDirectory "library\PSpice") + (PartMRUSelector + (VCC_WAVE + (LibraryName "C:\ORCAD\ORCAD_16.0\TOOLS\CAPTURE\LIBRARY\CAPSYM.OLB") + (DeviceIndex "0")) + (1N4148 + (FullPartName "1N4148.Normal") + (LibraryName + "C:\ORCAD\ORCAD_16.0\TOOLS\CAPTURE\LIBRARY\PSPICE\EDIODE.OLB") + (DeviceIndex "0")) + (JP2 + (FullPartName "JP2.Normal") + (LibraryName "Z:\CODE\KROBOT\KROBOT\ELEC\LIB\ORCAD\KROBOT.OLB") + (DeviceIndex "0")) + (VCC_CIRCLE + (LibraryName "C:\ORCAD\ORCAD_16.0\TOOLS\CAPTURE\LIBRARY\CAPSYM.OLB") + (DeviceIndex "0")) + (JP6 + (FullPartName "JP6.Normal") + (LibraryName "Z:\CODE\KROBOT\KROBOT\ELEC\LIB\ORCAD\CRANS.OLB") + (DeviceIndex "0")) + (PTR08100WVD + (FullPartName "PTR08100WVD.Normal") + (LibraryName "Z:\CODE\KROBOT\KROBOT\ELEC\LIB\ORCAD\KROBOT.OLB") + (DeviceIndex "0")) + (VCC_ARROW + (LibraryName "C:\ORCAD\ORCAD_16.0\TOOLS\CAPTURE\LIBRARY\CAPSYM.OLB") + (DeviceIndex "0"))) + (LastUsedLibraryBrowseDirectory "Z:\code\krobot\krobot\elec\lib\OrCAD") + (GlobalState + (FileView + (Path "Design Resources") + (Path "Design Resources" + "Z:\CODE\KROBOT\KROBOT\ELEC\BOARDS\INTERFACE_AX12_JR\SCHEMATIC\interface_ax12_jr.dsn") + (Path "Outputs") + (Select "Design Resources" + "Z:\CODE\KROBOT\KROBOT\ELEC\BOARDS\INTERFACE_AX12_JR\SCHEMATIC\interface_ax12_jr.dsn")) + (HierarchyView) + (Doc + (Type "COrCapturePMDoc") + (Frame + (Placement "44 0 1 -1 -1 -4 -23 0 200 0 380")) + (Tab 0)) + (Doc + (Type "COrSchematicDoc") + (Frame + (Placement "44 0 1 -1 -1 -4 -23 66 906 66 443") + (Scroll "0 2") + (Zoom "45") + (Occurrence "/")) + (Path + "Z:\CODE\KROBOT\KROBOT\ELEC\BOARDS\INTERFACE_AX12_JR\SCHEMATIC\INTERFACE_AX12_JR.DSN") + (Schematic "SCHEMATIC1") + (Page "PAGE1"))) + (MPSSessionName "Nicolas Dandrimont")) diff --git a/elec/lib/OrCAD/KROBOT.LLB b/elec/lib/OrCAD/KROBOT.LLB index 2c045c6..9b16704 100644 Binary files a/elec/lib/OrCAD/KROBOT.LLB and b/elec/lib/OrCAD/KROBOT.LLB differ diff --git a/elec/lib/OrCAD/KROBOT.OLB b/elec/lib/OrCAD/KROBOT.OLB index 61c2138..6382894 100644 Binary files a/elec/lib/OrCAD/KROBOT.OLB and b/elec/lib/OrCAD/KROBOT.OLB differ hooks/post-receive -- krobot |
From: Xavier L. <Ba...@us...> - 2010-05-01 15:52:40
|
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "krobot". The branch, master has been updated via 5ce9aad76502ae4d2604f94af646dc29947269d4 (commit) via 3ed92d77fa6b3090ff0b764175f926d46e14361a (commit) via 6969b498db452c434933f6026b1cedcbf3b5663a (commit) from 42199563c1632e7b522d74b53d16628b310d589f (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 5ce9aad76502ae4d2604f94af646dc29947269d4 Author: Xavier Lagorce <Xav...@cr...> Date: Sat May 1 17:45:31 2010 +0200 Added a Firmware for the Krobot Jr Motherboard. This firmware has a serial terminal to communcate with an operator. The commands are then sent via the CAN bus to the motor control board. Informations sent by the motor control board are read and available via the serial terminal. commit 3ed92d77fa6b3090ff0b764175f926d46e14361a Author: Xavier Lagorce <Xav...@cr...> Date: Sat May 1 17:42:37 2010 +0200 Added CAN support (because we can !) to the motor control card. The card can now receive commands on its CAN bus, and sends every 20 ms informations about motor positions and speeds. commit 6969b498db452c434933f6026b1cedcbf3b5663a Author: Xavier Lagorce <Xav...@cr...> Date: Sat May 1 17:40:04 2010 +0200 Modified chibios source to correct an error preventing the serial communication with another default baudrate than 38400 Serial communication is now at 115200 bauds ----------------------------------------------------------------------- Changes: diff --git a/elec/boards/Controller_HolonomicDrive/Firmware/Makefile b/elec/boards/Controller_HolonomicDrive/Firmware/Makefile index b736d43..d1c2055 100644 --- a/elec/boards/Controller_HolonomicDrive/Firmware/Makefile +++ b/elec/boards/Controller_HolonomicDrive/Firmware/Makefile @@ -83,6 +83,7 @@ CSRC += motor.c CSRC += cpu_load.c CSRC += speed_control.c CSRC += trajectory.c +CSRC += can_monitor.c CSRC += main.c # C++ sources that can be compiled in ARM or THUMB mode depending on the global diff --git a/elec/boards/Controller_HolonomicDrive/Firmware/can_monitor.c b/elec/boards/Controller_HolonomicDrive/Firmware/can_monitor.c new file mode 100644 index 0000000..0393e3e --- /dev/null +++ b/elec/boards/Controller_HolonomicDrive/Firmware/can_monitor.c @@ -0,0 +1,179 @@ +/* + * CAN monitor to receive/send informations + * Xavier Lagorce + */ + +#include "can_monitor.h" + +Thread *canrtp; +Thread *canttp; + + +// Thread function to receive CAN frames +static WORKING_AREA(can_rx_wa, 256); +static msg_t can_rx(void *p) { + EventListener el; + CANRxFrame rxmsg; + CANTxFrame txmsg; + uint8_t transmit; + speedMsg_t *speedMsg; + moveMsg_t *moveMsg; + + (void)p; + + txmsg.cf_IDE = CAN_IDE_EXT; + txmsg.cf_RTR = CAN_RTR_DATA; + + chEvtRegister(&CAND1.cd_rxfull_event, &el, 0); + while(!chThdShouldTerminate()) { + if (chEvtWaitAnyTimeout(ALL_EVENTS, MS2ST(100)) == 0) + continue; + while (canReceive(&CAND1, &rxmsg, TIME_IMMEDIATE) == RDY_OK) { + /* Process message.*/ + //palTogglePad(IOPORT3, GPIOC_LED); + + transmit = FALSE; + // Ask for info + if (rxmsg.cf_RTR == CAN_RTR_REMOTE && rxmsg.cf_IDE == CAN_IDE_EXT) { + switch (rxmsg.cf_EID) { + case 0x501: + // encoder positions + txmsg.cf_EID = 0x501; + txmsg.cf_DLC = 6; + txmsg.cf_data16[0] = getEncoderPosition(ENCODER1); + txmsg.cf_data16[1] = getEncoderPosition(ENCODER2); + txmsg.cf_data16[2] = getEncoderPosition(ENCODER3); + transmit = TRUE; + break; + case 0x401: + // Motor speeds + txmsg.cf_EID = 0x401; + txmsg.cf_DLC = 8; + speedMsg = (speedMsg_t*)(&(txmsg.cf_data8[0])); + speedMsg->speeds.motor1=sc_getRealSpeed(MOTOR1); + speedMsg->speeds.motor2=sc_getRealSpeed(MOTOR1); + speedMsg->speeds.motor3=sc_getRealSpeed(MOTOR1); + transmit = TRUE; + break; + default: + break; + } + } + // Command received + if (rxmsg.cf_RTR == CAN_RTR_DATA && rxmsg.cf_IDE == CAN_IDE_EXT) { + switch (rxmsg.cf_EID) { + case 0x400: + // Set all 3 speeds + speedMsg = (speedMsg_t*)(&(rxmsg.cf_data8[0])); + sc_setRefSpeed(MOTOR1, speedMsg->speeds.motor1); + sc_setRefSpeed(MOTOR2, speedMsg->speeds.motor2); + sc_setRefSpeed(MOTOR3, speedMsg->speeds.motor3); + txmsg.cf_EID = 0x401; + txmsg.cf_DLC = 8; + txmsg.cf_data32[0] = rxmsg.cf_data32[0]; + txmsg.cf_data32[1] = rxmsg.cf_data32[1]; + transmit = TRUE; + break; + case 0x300: + // Set speed screw + moveMsg = (moveMsg_t*)(&(rxmsg.cf_data8[0])); + setScrew(moveMsg->move.ptX, moveMsg->move.ptY, moveMsg->move.vX, moveMsg->move.vY, moveMsg->move.omega); + txmsg.cf_EID = 0x301; + txmsg.cf_DLC = 8; + txmsg.cf_data32[0] = rxmsg.cf_data32[0]; + txmsg.cf_data32[1] = rxmsg.cf_data32[1]; + transmit = TRUE; + break; + default: + break; + } + } + + if (transmit == TRUE) { + canTransmit(&CAND1, &txmsg, MS2ST(100)); + } + } + } + chEvtUnregister(&CAND1.cd_rxfull_event, &el); + return 0; +} + +// Thread function to send CAN frames +static WORKING_AREA(can_tx_wa, 256); +static msg_t can_tx(void * p) { + CANTxFrame txmsg; + speedMsg_t *speedMsg; + + (void)p; + txmsg.cf_IDE = CAN_IDE_EXT; + txmsg.cf_RTR = CAN_RTR_DATA; + txmsg.cf_DLC = 8; + + while (!chThdShouldTerminate()) { + + txmsg.cf_EID = 0x501; + txmsg.cf_DLC = 6; + txmsg.cf_data16[0] = getEncoderPosition(ENCODER1); + txmsg.cf_data16[1] = getEncoderPosition(ENCODER2); + txmsg.cf_data16[2] = getEncoderPosition(ENCODER3); + canTransmit(&CAND1, &txmsg, MS2ST(0)); + + chThdSleepMilliseconds(10); + + txmsg.cf_EID = 0x401; + txmsg.cf_DLC = 8; + speedMsg = (speedMsg_t*)(&(txmsg.cf_data8[0])); + speedMsg->speeds.motor1=sc_getRealSpeed(MOTOR1); + speedMsg->speeds.motor2=sc_getRealSpeed(MOTOR1); + speedMsg->speeds.motor3=sc_getRealSpeed(MOTOR1); + canTransmit(&CAND1, &txmsg, MS2ST(0)); + + chThdSleepMilliseconds(10); + } + return 0; +} + + +void canMonitorInit(void) { + + GPIO_InitTypeDef GPIO_InitStructure; + + // Low level inits + // GPIO clock enable + RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOB, ENABLE); + + // CAN1 Periph clock enable + RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE); + + //Configure CAN pin: RX + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; + GPIO_Init(GPIOB, &GPIO_InitStructure); + + // Configure CAN pin: TX + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; + GPIO_Init(GPIOB, &GPIO_InitStructure); + + // Remap the CAN controller to the correct pins + GPIO_PinRemapConfig(GPIO_Remap1_CAN1 , ENABLE); +} + +void canMonitorStart(void) { + + // ChibiOS CAN driver init + CANConfig cancfg = { + CAN_MCR_ABOM | CAN_MCR_AWUM | CAN_MCR_TXFP, + CAN_BTR_SJW(0) | CAN_BTR_TS2(1) | + CAN_BTR_TS1(8) | CAN_BTR_BRP(6), + 0, + NULL + }; + + canStart(&CAND1, &cancfg); + canrtp = chThdCreateStatic(can_rx_wa, sizeof(can_rx_wa), + NORMALPRIO + 7, can_rx, NULL); + canttp = chThdCreateStatic(can_tx_wa, sizeof(can_tx_wa), + NORMALPRIO + 7, can_tx, NULL); +} diff --git a/elec/boards/Controller_HolonomicDrive/Firmware/can_monitor.h b/elec/boards/Controller_HolonomicDrive/Firmware/can_monitor.h new file mode 100644 index 0000000..aa77bcb --- /dev/null +++ b/elec/boards/Controller_HolonomicDrive/Firmware/can_monitor.h @@ -0,0 +1,52 @@ +/* + * CAN monitor to receive/send informations + * Xavier Lagorce + */ + +#ifndef HEADER__CANMONITOR +#define HEADER__CANMONITOR + +#include "stm32f10x.h" +#include "stm32f10x_gpio.h" +#include "stm32f10x_rcc.h" +#include "ch.h" +#include "hal.h" +#include "can.h" +#include "encoder.h" +#include "speed_control.h" +#include "trajectory.h" + +extern Thread *canrtp; +extern Thread *canttp; + +// Data structures to group values in few bytes +struct speeds_t { + signed motor1 : 17 __attribute__((__packed__)); + signed motor2 : 17 __attribute__((__packed__)); + signed motor3 : 17 __attribute__((__packed__)); +} ; + +struct move_t { + signed ptX : 12 __attribute__((__packed__)); + signed ptY : 12 __attribute__((__packed__)); + signed vX : 12 __attribute__((__packed__)); + signed vY : 12 __attribute__((__packed__)); + signed omega : 12 __attribute__((__packed__)); +} ; + +// Data structures to express messages +typedef union { + struct speeds_t speeds; + uint8_t data[8]; +} speedMsg_t; + +typedef union { + struct move_t move; + uint8_t data[8]; +} moveMsg_t; + +// Prototypes +void canMonitorInit(void); +void canMonitorStart(void); + +#endif diff --git a/elec/boards/Controller_HolonomicDrive/Firmware/chibios/os/hal/include/serial.h b/elec/boards/Controller_HolonomicDrive/Firmware/chibios/os/hal/include/serial.h index e321d55..de2572f 100644 --- a/elec/boards/Controller_HolonomicDrive/Firmware/chibios/os/hal/include/serial.h +++ b/elec/boards/Controller_HolonomicDrive/Firmware/chibios/os/hal/include/serial.h @@ -60,7 +60,7 @@ * @details Configuration parameter, this is the baud rate selected for the * default configuration. */ -#if !defined(DEFAULT_USART_BITRATE) || defined(__DOXYGEN__) +#if !defined(SERIAL_DEFAULT_BITRATE) || defined(__DOXYGEN__) #define SERIAL_DEFAULT_BITRATE 38400 #endif diff --git a/elec/boards/Controller_HolonomicDrive/Firmware/halconf.h b/elec/boards/Controller_HolonomicDrive/Firmware/halconf.h index c2be534..40eceea 100644 --- a/elec/boards/Controller_HolonomicDrive/Firmware/halconf.h +++ b/elec/boards/Controller_HolonomicDrive/Firmware/halconf.h @@ -77,7 +77,7 @@ * @brief Enables the CAN subsystem. */ #if !defined(CH_HAL_USE_CAN) || defined(__DOXYGEN__) -#define CH_HAL_USE_CAN FALSE +#define CH_HAL_USE_CAN TRUE #endif /*===========================================================================*/ @@ -116,7 +116,7 @@ /* * Default SERIAL settings overrides (uncomment to override). */ -/*#define SERIAL_DEFAULT_BITRATE 38400*/ +#define SERIAL_DEFAULT_BITRATE 115200 /*#define SERIAL_BUFFERS_SIZE 64*/ /*===========================================================================*/ diff --git a/elec/boards/Controller_HolonomicDrive/Firmware/main.c b/elec/boards/Controller_HolonomicDrive/Firmware/main.c index c8336d6..7988cf8 100644 --- a/elec/boards/Controller_HolonomicDrive/Firmware/main.c +++ b/elec/boards/Controller_HolonomicDrive/Firmware/main.c @@ -16,6 +16,7 @@ #include "cpu_load.h" #include "speed_control.h" #include "trajectory.h" +#include "can_monitor.h" /* * Global variables @@ -129,13 +130,16 @@ int main(int argc, char **argv) { monitorInit(); /* + * Initialise the CAN monitor + */ + canMonitorInit(); + canMonitorStart(); + + /* * Initialise the speed controller */ speedControlInit(); - chThdSleepMilliseconds(2000); - - /* * Creates the blinker thread. */ diff --git a/elec/boards/Controller_HolonomicDrive/Firmware/mcuconf.h b/elec/boards/Controller_HolonomicDrive/Firmware/mcuconf.h index d024e38..2a72a33 100644 --- a/elec/boards/Controller_HolonomicDrive/Firmware/mcuconf.h +++ b/elec/boards/Controller_HolonomicDrive/Firmware/mcuconf.h @@ -57,7 +57,7 @@ /* * CAN driver system settings. */ -#define USE_STM32_CAN1 FALSE +#define USE_STM32_CAN1 TRUE #define STM32_CAN1_IRQ_PRIORITY 0xB0 /* diff --git a/elec/boards/MotherBoard_KrobotJr2010/Firmware/Makefile b/elec/boards/MotherBoard_KrobotJr2010/Firmware/Makefile new file mode 100644 index 0000000..eb14e9b --- /dev/null +++ b/elec/boards/MotherBoard_KrobotJr2010/Firmware/Makefile @@ -0,0 +1,221 @@ +############################################################################## +# Build global options +# NOTE: Can be overridden externally. +# + +# Compiler options here. +ifeq ($(USE_OPT),) + USE_OPT = -O2 -ggdb -fomit-frame-pointer -mabi=apcs-gnu -falign-functions=16 +endif + +# C++ specific options here (added to USE_OPT). +ifeq ($(USE_CPPOPT),) + USE_CPPOPT = -fno-rtti +endif + +# Enable this if you want the linker to remove unused code and data +ifeq ($(USE_LINK_GC),) + USE_LINK_GC = yes +endif + +# If enabled, this option allows to compile the application in THUMB mode. +ifeq ($(USE_THUMB),) + USE_THUMB = yes +endif + +# Enable register caching optimization (read documentation). +ifeq ($(USE_CURRP_CACHING),) + USE_CURRP_CACHING = no +endif + +# +# Build global options +############################################################################## + +############################################################################## +# Architecture or project specific options +# + +# Enable this if you really want to use the STM FWLib. +ifeq ($(USE_FWLIB),) + USE_FWLIB = yes +endif + +# +# Architecture or project specific options +############################################################################## + +############################################################################## +# Project, sources and paths +# + +# Define project name here +PROJECT = krobotJr-MB + +# Define linker script file here +LDSCRIPT= ch.ld + +# Imported source files +CHIBIOS = chibios +include $(CHIBIOS)/boards/OLIMEX_STM32_P103/board.mk +include $(CHIBIOS)/os/hal/platforms/STM32/platform.mk +include $(CHIBIOS)/os/hal/hal.mk +include $(CHIBIOS)/os/ports/GCC/ARMCMx/STM32F10x/port.mk +include $(CHIBIOS)/os/kernel/kernel.mk +include $(CHIBIOS)/test/test.mk +include $(CHIBIOS)/ext/fatfs/fatfs.mk + +# C sources that can be compiled in ARM or THUMB mode depending on the global +# setting. +CSRC = $(PORTSRC) +CSRC += $(KERNSRC) +#CSRC += $(TESTSRC) +CSRC += $(HALSRC) +CSRC += $(PLATFORMSRC) +CSRC += $(BOARDSRC) +#CSRC += $(FATFSSRC) +CSRC += $(CHIBIOS)/os/various/evtimer.c +CSRC += $(CHIBIOS)/os/various/syscalls.c +CSRC += $(CHIBIOS)/os/various/shell.c +CSRC += monitor.c +CSRC += can_monitor.c +CSRC += main.c + +# C++ sources that can be compiled in ARM or THUMB mode depending on the global +# setting. +CPPSRC = + +# C sources to be compiled in ARM mode regardless of the global setting. +# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler +# option that results in lower performance and larger code size. +ACSRC = + +# C++ sources to be compiled in ARM mode regardless of the global setting. +# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler +# option that results in lower performance and larger code size. +ACPPSRC = + +# C sources to be compiled in THUMB mode regardless of the global setting. +# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler +# option that results in lower performance and larger code size. +TCSRC = + +# C sources to be compiled in THUMB mode regardless of the global setting. +# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler +# option that results in lower performance and larger code size. +TCPPSRC = + +# List ASM source files here +ASMSRC = $(PORTASM) \ + $(CHIBIOS)/os/ports/GCC/ARMCMx/STM32F10x/vectors.s + +INCDIR = $(PORTINC) $(KERNINC) $(TESTINC) \ + $(HALINC) $(PLATFORMINC) $(BOARDINC) \ + $(FATFSINC) \ + $(CHIBIOS)/os/various + +# +# Project, sources and paths +############################################################################## + +############################################################################## +# Compiler settings +# + +MCU = cortex-m3 + +TRGT = arm-none-eabi- +CC = $(TRGT)gcc +CPPC = $(TRGT)g++ +# Enable loading with g++ only if you need C++ runtime support. +# NOTE: You can use C++ even without C++ support if you are careful. C++ +# runtime support makes code size explode. +LD = $(TRGT)gcc -Wl,--gc-sections +#LD = $(TRGT)g++ +CP = $(TRGT)objcopy +AS = $(TRGT)gcc -x assembler-with-cpp +OD = $(TRGT)objdump +SIZE = $(TRGT)size +HEX = $(CP) -O ihex +BIN = $(CP) -O binary + +# ARM-specific options here +AOPT = + +# THUMB-specific options here +TOPT = -mthumb -DTHUMB + +# Define C warning options here +CWARN = -Wall -Wextra -Wstrict-prototypes + +# Define C++ warning options here +CPPWARN = -Wall -Wextra + +# +# Compiler settings +############################################################################## + +############################################################################## +# Start of default section +# + +# List all default C defines here, like -D_DEBUG=1 +DDEFS = -DSTDOUT_SD=SD2 -DSTDIN_SD=SD2 + +# List all default ASM defines here, like -D_DEBUG=1 +DADEFS = + +# List all default directories to look for include files here +DINCDIR = + +# List the default directory to look for the libraries here +DLIBDIR = + +# List all default libraries here +DLIBS = + +# +# End of default section +############################################################################## + +############################################################################## +# Start of user section +# + +# List all user C define here, like -D_DEBUG=1 +UDEFS = -DCH_DBG_FILL_THREADS=1 +UDEFS = + +# Define ASM defines here +UADEFS = + +# List all user directories here +UINCDIR = + +# List the user directory to look for the libraries here +ULIBDIR = + +# List all user libraries here +ULIBS = -lm + +# +# End of user defines +############################################################################## + +ifeq ($(USE_FWLIB),yes) + include $(CHIBIOS)/ext/stm32lib/stm32lib.mk + CSRC += $(STM32SRC) + INCDIR += $(STM32INC) + USE_OPT += -DUSE_STDPERIPH_DRIVER +endif + +include $(CHIBIOS)/os/ports/GCC/ARM/rules.mk +include jtag/flash.mk + +# Display program size at end of compilation +.PHONY:size +size: all + $(SIZE) $(BUILDDIR)/$(PROJECT).elf + +# Prefer compilation with display of program size +.DEFAULT_GOAL := size diff --git a/elec/boards/MotherBoard_KrobotJr2010/Firmware/can_monitor.c b/elec/boards/MotherBoard_KrobotJr2010/Firmware/can_monitor.c new file mode 100644 index 0000000..928a08f --- /dev/null +++ b/elec/boards/MotherBoard_KrobotJr2010/Firmware/can_monitor.c @@ -0,0 +1,165 @@ +/* + * CAN monitor to receive/send informations + * Xavier Lagorce + */ + +#include "can_monitor.h" + +Thread *canrtp; + +volatile int32_t motorSpeeds[3]; +volatile uint16_t motorPositions[3]; + +// Thread function to receive CAN frames +static WORKING_AREA(can_rx_wa, 256); +static msg_t can_rx(void *p) { + EventListener el; + CANRxFrame rxmsg; + speedMsg_t *speedMsg; + + (void)p; + chEvtRegister(&CAND1.cd_rxfull_event, &el, 0); + while(!chThdShouldTerminate()) { + if (chEvtWaitAnyTimeout(ALL_EVENTS, MS2ST(100)) == 0) + continue; + while (canReceive(&CAND1, &rxmsg, TIME_IMMEDIATE) == RDY_OK) { + /* Process message.*/ + palTogglePad(IOPORT3, GPIOC_LED); + chThdSleepMilliseconds(10); + palTogglePad(IOPORT3, GPIOC_LED); + + // Informations + if (rxmsg.cf_RTR == CAN_RTR_DATA && rxmsg.cf_IDE == CAN_IDE_EXT) { + switch (rxmsg.cf_EID) { + case 0x501: + // encoder positions + motorPositions[0] = rxmsg.cf_data16[0]; + motorPositions[1] = rxmsg.cf_data16[1]; + motorPositions[2] = rxmsg.cf_data16[2]; + break; + case 0x401: + // Motor speeds + speedMsg = (speedMsg_t*)(&(rxmsg.cf_data8[0])); + motorSpeeds[0] = speedMsg->speeds.motor1; + motorSpeeds[1] = speedMsg->speeds.motor2; + motorSpeeds[2] = speedMsg->speeds.motor3; + break; + default: + break; + } + } + } + } + chEvtUnregister(&CAND1.cd_rxfull_event, &el); + return 0; +} + +void canMonitorInit(void) { + + GPIO_InitTypeDef GPIO_InitStructure; + + // Low level inits + // GPIO clock enable + RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOB, ENABLE); + + // CAN1 Periph clock enable + RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE); + + //Configure CAN pin: RX + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; + GPIO_Init(GPIOB, &GPIO_InitStructure); + + // Configure CAN pin: TX + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; + GPIO_Init(GPIOB, &GPIO_InitStructure); + + // Remap the CAN controller to the correct pins + GPIO_PinRemapConfig(GPIO_Remap1_CAN1 , ENABLE); +} + +void canMonitorStart(void) { + + // ChibiOS CAN driver init + CANConfig cancfg = { + CAN_MCR_ABOM | CAN_MCR_AWUM | CAN_MCR_TXFP, + CAN_BTR_SJW(0) | CAN_BTR_TS2(1) | + CAN_BTR_TS1(8) | CAN_BTR_BRP(6), + 0, + NULL + }; + + canStart(&CAND1, &cancfg); + canrtp = chThdCreateStatic(can_rx_wa, sizeof(can_rx_wa), + NORMALPRIO + 7, can_rx, NULL); +} + +int32_t canGetSpeed(uint8_t motor) { + switch(motor) { + case MOTOR1: + return motorSpeeds[0]; + break; + case MOTOR2: + return motorSpeeds[1]; + break; + case MOTOR3: + return motorSpeeds[2]; + break; + default: + return 0; + break; + } +} + +uint16_t canGetPosition(uint8_t motor) { + switch(motor) { + case MOTOR1: + return motorPositions[0]; + break; + case MOTOR2: + return motorPositions[1]; + break; + case MOTOR3: + return motorPositions[2]; + break; + default: + return 0; + break; + } +} + +void canSetSpeeds(int32_t motor1, int32_t motor2, int32_t motor3) { + CANTxFrame txmsg; + speedMsg_t *speedMsg; + + txmsg.cf_IDE = CAN_IDE_EXT; + txmsg.cf_EID = 0x300; + txmsg.cf_RTR = CAN_RTR_DATA; + txmsg.cf_DLC = 8; + speedMsg = (speedMsg_t*)(&(txmsg.cf_data8[0])); + speedMsg->speeds.motor1 = motor1; + speedMsg->speeds.motor2 = motor2; + speedMsg->speeds.motor3 = motor3; + + canTransmit(&CAND1, &txmsg, MS2ST(100)); +} + +void canSetScrew(int16_t ptX, int16_t ptY, int16_t vX, int16_t vY, int16_t omega) { + CANTxFrame txmsg; + moveMsg_t *moveMsg; + + txmsg.cf_IDE = CAN_IDE_EXT; + txmsg.cf_EID = 0x300; + txmsg.cf_RTR = CAN_RTR_DATA; + txmsg.cf_DLC = 8; + moveMsg = (moveMsg_t*)(&(txmsg.cf_data8[0])); + moveMsg->move.ptX = ptX; + moveMsg->move.ptY = ptY; + moveMsg->move.vX = vX; + moveMsg->move.vY = vY; + moveMsg->move.omega = omega; + + canTransmit(&CAND1, &txmsg, MS2ST(100)); +} diff --git a/elec/boards/MotherBoard_KrobotJr2010/Firmware/can_monitor.h b/elec/boards/MotherBoard_KrobotJr2010/Firmware/can_monitor.h new file mode 100644 index 0000000..5ef91eb --- /dev/null +++ b/elec/boards/MotherBoard_KrobotJr2010/Firmware/can_monitor.h @@ -0,0 +1,58 @@ +/* + * CAN monitor to receive/send informations + * Xavier Lagorce + */ + +#ifndef HEADER__CANMONITOR +#define HEADER__CANMONITOR + +#include "stm32f10x.h" +#include "stm32f10x_gpio.h" +#include "stm32f10x_rcc.h" +#include "ch.h" +#include "hal.h" +#include "can.h" +#include "monitor.h" + +#define MOTOR1 1 +#define MOTOR2 2 +#define MOTOR3 4 + +extern Thread *canrtp; + +// Data structures to group values in few bytes +struct speeds_t { + signed motor1 : 17 __attribute__((__packed__)); + signed motor2 : 17 __attribute__((__packed__)); + signed motor3 : 17 __attribute__((__packed__)); +} ; + +struct move_t { + signed ptX : 12 __attribute__((__packed__)); + signed ptY : 12 __attribute__((__packed__)); + signed vX : 12 __attribute__((__packed__)); + signed vY : 12 __attribute__((__packed__)); + signed omega : 12 __attribute__((__packed__)); +} ; + +// Data structures to express messages +typedef union { + struct speeds_t speeds; + uint8_t data[8]; +} speedMsg_t; + +typedef union { + struct move_t move; + uint8_t data[8]; +} moveMsg_t; + +// Prototypes +void canMonitorInit(void); +void canMonitorStart(void); + +int32_t canGetSpeed(uint8_t motor); +uint16_t canGetPosition(uint8_t motor); +void canSetSpeeds(int32_t motor1, int32_t motor2, int32_t motor3); +void canSetScrew(int16_t ptX, int16_t ptY, int16_t vX, int16_t vY, int16_t omega); + +#endif diff --git a/elec/boards/MotherBoard_KrobotJr2010/Firmware/ch.ld b/elec/boards/MotherBoard_KrobotJr2010/Firmware/ch.ld new file mode 100644 index 0000000..196da88 --- /dev/null +++ b/elec/boards/MotherBoard_KrobotJr2010/Firmware/ch.ld @@ -0,0 +1,101 @@ +/* + ChibiOS/RT - Copyright (C) 2010 Giovanni Di Sirio. + + This file is part of ChibiOS/RT. + + ChibiOS/RT is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + ChibiOS/RT is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + + --- + + A special exception to the GPL can be applied should you wish to distribute + a combined work that includes ChibiOS/RT, without being obliged to provide + the source code for any proprietary components. See the file exception.txt + for full details of how and when the exception can be applied. +*/ + +/* + * ST32F103 memory setup. + */ +__main_stack_size__ = 0x0400; +__process_stack_size__ = 0x0400; +__stacks_total_size__ = __main_stack_size__ + __process_stack_size__; + +MEMORY +{ + flash : org = 0x08000000, len = 128k + ram : org = 0x20000000, len = 20k +} + +__ram_start__ = ORIGIN(ram); +__ram_size__ = LENGTH(ram); +__ram_end__ = __ram_start__ + __ram_size__; + +SECTIONS +{ + . = 0; + + .text : ALIGN(16) SUBALIGN(16) + { + _text = .; + KEEP(*(vectors)); + *(.text) + *(.text.*); + *(.rodata); + *(.rodata.*); + *(.glue_7t); + *(.glue_7); + *(.gcc*); + *(.ctors); + *(.dtors); + . = ALIGN(4); + _etext = .; + } > flash + + _textdata = _etext; + + .data : + { + _data = .; + *(.data) + . = ALIGN(4); + *(.data.*) + . = ALIGN(4); + *(.ramtext) + . = ALIGN(4); + _edata = .; + } > ram AT > flash + + .bss : + { + _bss_start = .; + *(.bss) + . = ALIGN(4); + *(.bss.*) + . = ALIGN(4); + *(COMMON) + . = ALIGN(4); + _bss_end = .; + } > ram + + /DISCARD/ : + { + *(.eh_*) + } +} + +PROVIDE(end = .); +_end = .; + +__heap_base__ = _end; +__heap_end__ = __ram_end__ - __stacks_total_size__; diff --git a/elec/boards/MotherBoard_KrobotJr2010/Firmware/chconf.h b/elec/boards/MotherBoard_KrobotJr2010/Firmware/chconf.h new file mode 100644 index 0000000..c4f536c --- /dev/null +++ b/elec/boards/MotherBoard_KrobotJr2010/Firmware/chconf.h @@ -0,0 +1,471 @@ +/* + ChibiOS/RT - Copyright (C) 2010 Giovanni Di Sirio. + + This file is part of ChibiOS/RT. + + ChibiOS/RT is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + ChibiOS/RT is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + + --- + + A special exception to the GPL can be applied should you wish to distribute + a combined work that includes ChibiOS/RT, without being obliged to provide + the source code for any proprietary components. See the file exception.txt + for full details of how and when the exception can be applied. +*/ + +/** + * @file templates/chconf.h + * @brief Configuration file template. + * @addtogroup config + * @{ + */ + +#ifndef _CHCONF_H_ +#define _CHCONF_H_ + +/*===========================================================================*/ +/* Kernel parameters. */ +/*===========================================================================*/ + +/** + * @brief System tick frequency. + * @details Frequency of the system timer that drives the system ticks. This + * setting also defines the system tick time unit. + */ +#if !defined(CH_FREQUENCY) || defined(__DOXYGEN__) +#define CH_FREQUENCY 1000 +#endif + +/** + * @brief Round robin interval. + * @details This constant is the number of system ticks allowed for the + * threads before preemption occurs. Setting this value to zero + * disables the round robin mechanism. + * + * @note Disabling round robin makes the kernel more compact and generally + * faster but forbids multiple threads at the same priority level. + */ +#if !defined(CH_TIME_QUANTUM) || defined(__DOXYGEN__) +#define CH_TIME_QUANTUM 20 +#endif + +/** + * @brief Nested locks. + * @details If enabled then the use of nested @p chSysLock() / @p chSysUnlock() + * operations is allowed.<br> + * For performance and code size reasons the recommended setting + * is to leave this option disabled.<br> + * You may use this option if you need to merge ChibiOS/RT with + * external libraries that require nested lock/unlock operations. + * + * @note The default is @p FALSE. + */ +#if !defined(CH_USE_NESTED_LOCKS) || defined(__DOXYGEN__) +#define CH_USE_NESTED_LOCKS FALSE +#endif + +/** + * @brief Managed RAM size. + * @details Size of the RAM area to be managed by the OS. If set to zero + * then the whole available RAM is used. The core memory is made + * available to the heap allocator and/or can be used directly through + * the simplified core memory allocator. + * + * @note In order to let the OS manage the whole RAM the linker script must + * provide the @p __heap_base__ and @p __heap_end__ symbols. + * @note Requires @p CH_USE_COREMEM. + */ +#if !defined(CH_MEMCORE_SIZE) || defined(__DOXYGEN__) +#define CH_MEMCORE_SIZE 0 +#endif + +/*===========================================================================*/ +/* Performance options. */ +/*===========================================================================*/ + +/** + * @brief OS optimization. + * @details If enabled then time efficient rather than space efficient code + * is used when two possible implementations exist. + * + * @note This is not related to the compiler optimization options. + * @note The default is @p TRUE. + */ +#if !defined(CH_OPTIMIZE_SPEED) || defined(__DOXYGEN__) +#define CH_OPTIMIZE_SPEED TRUE +#endif + +/** + * @brief Exotic optimization. + * @details If defined then a CPU register is used as storage for the global + * @p currp variable. Caching this variable in a register greatly + * improves both space and time OS efficiency. A side effect is that + * one less register has to be saved during the context switch + * resulting in lower RAM usage and faster context switch. + * + * @note This option is only usable with the GCC compiler and is only useful + * on processors with many registers like ARM cores. + * @note If this option is enabled then ALL the libraries linked to the + * ChibiOS/RT code <b>must</b> be recompiled with the GCC option @p + * -ffixed-@<reg@>. + * @note This option must be enabled in the Makefile, it is listed here for + * documentation only. + */ +#if defined(__DOXYGEN__) +#define CH_CURRP_REGISTER_CACHE "reg" +#endif + +/*===========================================================================*/ +/* Subsystem options. */ +/*===========================================================================*/ + +/** + * @brief Threads synchronization APIs. + * @details If enabled then the @p chThdWait() function is included in + * the kernel. + * + * @note The default is @p TRUE. + */ +#if !defined(CH_USE_WAITEXIT) || defined(__DOXYGEN__) +#define CH_USE_WAITEXIT TRUE +#endif + +/** + * @brief Semaphores APIs. + * @details If enabled then the Semaphores APIs are included in the kernel. + * + * @note The default is @p TRUE. + */ +#if !defined(CH_USE_SEMAPHORES) || defined(__DOXYGEN__) +#define CH_USE_SEMAPHORES TRUE +#endif + +/** + * @brief Semaphores queuing mode. + * @details If enabled then the threads are enqueued on semaphores by + * priority rather than in FIFO order. + * + * @note The default is @p FALSE. Enable this if you have special requirements. + * @note Requires @p CH_USE_SEMAPHORES. + */ +#if !defined(CH_USE_SEMAPHORES_PRIORITY) || defined(__DOXYGEN__) +#define CH_USE_SEMAPHORES_PRIORITY FALSE +#endif + +/** + * @brief Atomic semaphore API. + * @details If enabled then the semaphores the @p chSemWaitSignal() API + * is included in the kernel. + * + * @note The default is @p TRUE. + * @note Requires @p CH_USE_SEMAPHORES. + */ +#if !defined(CH_USE_SEMSW) || defined(__DOXYGEN__) +#define CH_USE_SEMSW TRUE +#endif + +/** + * @brief Mutexes APIs. + * @details If enabled then the mutexes APIs are included in the kernel. + * + * @note The default is @p TRUE. + */ +#if !defined(CH_USE_MUTEXES) || defined(__DOXYGEN__) +#define CH_USE_MUTEXES TRUE +#endif + +/** + * @brief Conditional Variables APIs. + * @details If enabled then the conditional variables APIs are included + * in the kernel. + * + * @note The default is @p TRUE. + * @note Requires @p CH_USE_MUTEXES. + */ +#if !defined(CH_USE_CONDVARS) || defined(__DOXYGEN__) +#define CH_USE_CONDVARS TRUE +#endif + +/** + * @brief Conditional Variables APIs with timeout. + * @details If enabled then the conditional variables APIs with timeout + * specification are included in the kernel. + * + * @note The default is @p TRUE. + * @note Requires @p CH_USE_CONDVARS. + */ +#if !defined(CH_USE_CONDVARS_TIMEOUT) || defined(__DOXYGEN__) +#define CH_USE_CONDVARS_TIMEOUT TRUE +#endif + +/** + * @brief Events Flags APIs. + * @details If enabled then the event flags APIs are included in the kernel. + * + * @note The default is @p TRUE. + */ +#if !defined(CH_USE_EVENTS) || defined(__DOXYGEN__) +#define CH_USE_EVENTS TRUE +#endif + +/** + * @brief Events Flags APIs with timeout. + * @details If enabled then the events APIs with timeout specification + * are included in the kernel. + * + * @note The default is @p TRUE. + * @note Requires @p CH_USE_EVENTS. + */ +#if !defined(CH_USE_EVENTS_TIMEOUT) || defined(__DOXYGEN__) +#define CH_USE_EVENTS_TIMEOUT TRUE +#endif + +/** + * @brief Synchronous Messages APIs. + * @details If enabled then the synchronous messages APIs are included + * in the kernel. + * + * @note The default is @p TRUE. + */ +#if !defined(CH_USE_MESSAGES) || defined(__DOXYGEN__) +#define CH_USE_MESSAGES TRUE +#endif + +/** + * @brief Synchronous Messages queuing mode. + * @details If enabled then messages are served by priority rather than in + * FIFO order. + * + * @note The default is @p FALSE. Enable this if you have special requirements. + * @note Requires @p CH_USE_MESSAGES. + */ +#if !defined(CH_USE_MESSAGES_PRIORITY) || defined(__DOXYGEN__) +#define CH_USE_MESSAGES_PRIORITY FALSE +#endif + +/** + * @brief Mailboxes APIs. + * @details If enabled then the asynchronous messages (mailboxes) APIs are + * included in the kernel. + * + * @note The default is @p TRUE. + * @note Requires @p CH_USE_SEMAPHORES. + */ +#if !defined(CH_USE_MAILBOXES) || defined(__DOXYGEN__) +#define CH_USE_MAILBOXES TRUE +#endif + +/** + * @brief I/O Queues APIs. + * @details If enabled then the I/O queues APIs are included in the kernel. + * + * @note The default is @p TRUE. + * @note Requires @p CH_USE_SEMAPHORES. + */ +#if !defined(CH_USE_QUEUES) || defined(__DOXYGEN__) +#define CH_USE_QUEUES TRUE +#endif + +/** + * @brief Core Memory Manager APIs. + * @details If enabled then the core memory manager APIs are included + * in the kernel. + * + * @note The default is @p TRUE. + */ +#if !defined(CH_USE_MEMCORE) || defined(__DOXYGEN__) +#define CH_USE_MEMCORE TRUE +#endif + +/** + * @brief Heap Allocator APIs. + * @details If enabled then the memory heap allocator APIs are included + * in the kernel. + * + * @note The default is @p TRUE. + * @note Requires @p CH_USE_COREMEM and either @p CH_USE_MUTEXES or + * @p CH_USE_SEMAPHORES. + * @note Mutexes are recommended. + */ +#if !defined(CH_USE_HEAP) || defined(__DOXYGEN__) +#define CH_USE_HEAP TRUE +#endif + +/** + * @brief C-runtime allocator. + * @details If enabled the the heap allocator APIs just wrap the C-runtime + * @p malloc() and @p free() functions. + * + * @note The default is @p FALSE. + * @note Requires @p CH_USE_HEAP. + * @note The C-runtime may or may not require @p CH_USE_COREMEM, see the + * appropriate documentation. + */ +#if !defined(CH_USE_MALLOC_HEAP) || defined(__DOXYGEN__) +#define CH_USE_MALLOC_HEAP FALSE +#endif + +/** + * @brief Memory Pools Allocator APIs. + * @details If enabled then the memory pools allocator APIs are included + * in the kernel. + * + * @note The default is @p TRUE. + */ +#if !defined(CH_USE_MEMPOOLS) || defined(__DOXYGEN__) +#define CH_USE_MEMPOOLS TRUE +#endif + +/** + * @brief Dynamic Threads APIs. + * @details If enabled then the dynamic threads creation APIs are included + * in the kernel. + * + * @note The default is @p TRUE. + * @note Requires @p CH_USE_WAITEXIT. + */ +#if !defined(CH_USE_DYNAMIC) || defined(__DOXYGEN__) +#define CH_USE_DYNAMIC TRUE +#endif + +/*===========================================================================*/ +/* Debug options. */ +/*===========================================================================*/ + +/** + * @brief Debug option, parameters checks. + * @details If enabled then the checks on the API functions input + * parameters are activated. + * + * @note The default is @p FALSE. + */ +#if !defined(CH_DBG_ENABLE_CHECKS) || defined(__DOXYGEN__) +#define CH_DBG_ENABLE_CHECKS FALSE +#endif + +/** + * @brief Debug option, consistency checks. + * @details If enabled then all the assertions in the kernel code are + * activated. This includes consistency checks inside the kernel, + * runtime anomalies and port-defined checks. + * + * @note The default is @p FALSE. + */ +#if !defined(CH_DBG_ENABLE_ASSERTS) || defined(__DOXYGEN__) +#define CH_DBG_ENABLE_ASSERTS FALSE +#endif + +/** + * @brief Debug option, trace buffer. + * @details If enabled then the context switch circular trace buffer is + * activated. + * + * @note The default is @p FALSE. + */ +#if !defined(CH_DBG_ENABLE_TRACE) || defined(__DOXYGEN__) +#define CH_DBG_ENABLE_TRACE FALSE +#endif + +/** + * @brief Debug option, stack checks. + * @details If enabled then a runtime stack check is performed. + * + * @note The default is @p FALSE. + * @note The stack check is performed in a architecture/port dependent way. It + * may not be implemented or some ports. + */ +#if !defined(CH_DBG_ENABLE_STACK_CHECK) || defined(__DOXYGEN__) +#define CH_DBG_ENABLE_STACK_CHECK FALSE +#endif + +/** + * @brief Debug option, stacks initialization. + * @details If enabled then the threads working area is filled with a byte + * value when a thread is created. This can be useful for the + * runtime measurement of the used stack. + * + * @note The default is @p FALSE. + */ +#if !defined(CH_DBG_FILL_THREADS) || defined(__DOXYGEN__) +#define CH_DBG_FILL_THREADS FALSE +#endif + +/** + * @brief Debug option, threads profiling. + * @details If enabled then a field is added to the @p Thread structure that + * counts the system ticks occurred while executing the thread. + * + * @note The default is @p TRUE. + * @note This debug option is defaulted to TRUE because it is required by + * some test cases into the test suite. + */ +#if !defined(CH_DBG_THREADS_PROFILING) || defined(__DOXYGEN__) +#define CH_DBG_THREADS_PROFILING TRUE +#endif + +/*===========================================================================*/ +/* Kernel hooks. */ +/*===========================================================================*/ + +/** + * @brief Threads descriptor structure hook. + * @details User fields added to the end of the @p Thread structure. + */ +#if !defined(THREAD_EXT_FIELDS) || defined(__DOXYGEN__) +#define THREAD_EXT_FIELDS \ +struct { \ + /* Add threads custom fields here.*/ \ +}; +#endif + +/** + * @brief Threads initialization hook. + * @details User initialization code added to the @p chThdInit() API. + * + * @note It is invoked from within @p chThdInit() and implicitily from all + * the threads creation APIs. + */ +#if !defined(THREAD_EXT_INIT) || defined(__DOXYGEN__) +#define THREAD_EXT_INIT(tp) { \ + /* Add threads initialization code here.*/ \ +} +#endif + +/** + * @brief Threads finalization hook. + * @details User finalization code added to the @p chThdExit() API. + * + * @note It is inserted into lock zone. + * @note It is also invoked when the threads simply return in order to + * terminate. + */ +#if !defined(THREAD_EXT_EXIT) || defined(__DOXYGEN__) +#define THREAD_EXT_EXIT(tp) { \ + /* Add threads finalization code here.*/ \ +} +#endif + +/** + * @brief Idle Loop hook. + * @details This hook is continuously invoked by the idle thread loop. + */ +#if !defined(IDLE_LOOP_HOOK) || defined(__DOXYGEN__) +#define IDLE_LOOP_HOOK() { \ + /* Idle loop code here.*/ \ +} +#endif + +#endif /* _CHCONF_H_ */ + +/** @} */ diff --git a/elec/boards/MotherBoard_KrobotJr2010/Firmware/chibios/boards/EA_LPCXPRESSO_BB_1114/board.c b/elec/boards/MotherBoard_KrobotJr2010/Firmware/chibios/boards/EA_LPCXPRESSO_BB_1114/board.c new file mode 100644 index 0000000..79a2f79 --- /dev/null +++ b/elec/boards/MotherBoard_KrobotJr2010/Firmware/chibios/boards/EA_LPCXPRESSO_BB_1114/board.c @@ -0,0 +1,60 @@ +/* + ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. + + This file is part of ChibiOS/RT. + + ChibiOS/RT is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + ChibiOS/RT is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +#include "ch.h" +#include "hal.h" + +/* + * Early initialization code. + * This initialization is performed just after reset before BSS and DATA + * segments initialization. + */ +void hwinit0(void) { + + lpc111x_clock_init(); +} + +/* + * Late initialization code. + * This initialization is performed after BSS and DATA segments initialization + * and before invoking the main() function. + */ +void hwinit1(void) { + + /* + * HAL initialization. + */ + halInit(); + + /* + * Extra, board-specific, initializations. + * NOTE: PIO1_2 is associated also to the JTAG, if you need to use JTAG + * you must comment that line first. + */ + LPC_IOCON->PIO0_7 = 0xC0; /* Disables pull-up on LED2 output. */ + LPC_IOCON->JTAG_nTRST_PIO1_2 = 0xC1; /* Disables pull-up on LED3B output + and makes it GPIO1_2. */ + LPC_IOCON->PIO1_9 = 0xC0; /* Disables pull-up on LED3R output.*/ + LPC_IOCON->PIO1_10 = 0xC0; /* Disables pull-up on LED3G output.*/ + + /* + * ChibiOS/RT initialization. + */ + chSysInit(); +} diff --git a/elec/boards/MotherBoard_KrobotJr2010/Firmware/chibios/boards/EA_LPCXPRESSO_BB_1114/board.h b/elec/boards/MotherBoard_KrobotJr2010/Firmware/chibios/boards/EA_LPCXPRESSO_BB_1114/board.h new file mode 100644 index 0000000..9c0a616 --- /dev/null +++ b/elec/boards/MotherBoard_KrobotJr2010/Firmware/chibios/boards/EA_LPCXPRESSO_BB_1114/board.h @@ -0,0 +1,85 @@ +/* + ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. + + This file is part of ChibiOS/RT. + + ChibiOS/RT is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + ChibiOS/RT is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +#ifndef _BOARD_H_ +#define _BOARD_H_ + +/* + * Setup for Embedded Artists LPCXpresso Base Board with LPC1114 daughter + * board. + */ + +/* + * Board identifiers. + */ +#define BOARD_EA_BB_LPC1114 +#define BOARD_NAME "Embedded Artists LPCXpresso Base Board + LPC1114" + +/* + * Board frequencies. + */ +#define SYSOSCCLK 12000000 + +/* + * GPIO 0 initial setup. + * Bit7 - LPCxpresso LED, initially output at low level. + */ +#define VAL_GPIO0DIR PAL_PORT_BIT(GPIO0_LED2) +#define VAL_GPIO0DATA 0x00000000 + +/* + * GPIO 1 initial setup. + */ +#define VAL_GPIO1DIR PAL_PORT_BIT(GPIO1_LED3B) | \ + PAL_PORT_BIT(GPIO1_LED3R) | \ + PAL_PORT_BIT(GPIO1_LED3G) +#define VAL_GPIO1DATA 0x00000000 + +/* + * GPIO 2 initial setup. + */ +#define VAL_GPIO2DIR 0x00000000 +#define VAL_GPIO2DATA 0x00000000 + +/* + * GPIO 3 initial setup. + */ +#define VAL_GPIO3DIR 0x00000000 +#define VAL_GPIO3DATA 0x00000000 + +/* + * Pin definitions. + */ +#define GPIO0_SW3 1 +#define GPIO0_LED2 7 + +#define GPIO1_LED3B 2 +#define GPIO1_SW4 4 +#define GPIO1_LED3R 9 +#define GPIO1_LED3G 10 + +#ifdef __cplusplus +extern "C" { +#endif + void hwinit(void); +#ifdef __cplusplus +} +#endif + +#endif /* _BOARD_H_ */ diff --git a/elec/boards/MotherBoard_KrobotJr2010/Firmware/chibios/boards/EA_LPCXPRESSO_BB_1114/board.mk b/elec/boards/MotherBoard_KrobotJr2010/Firmware/chibios/boards/EA_LPCXPRESSO_BB_1114/board.mk new file mode 100644 index 0000000..affca2d --- /dev/null +++ b/elec/boards/MotherBoard_KrobotJr2010/Firmware/chibios/boards/EA_LPCXPRESSO_BB_1114/board.mk @@ -0,0 +1,5 @@ +# List of all the board related files. +BOARDSRC = ${CHIBIOS}/boards/EA_LPCXPRESSO_BB_1114/board.c + +# Required include directories +BOARDINC = ${CHIBIOS}/boards/EA_LPCXPRESSO_BB_1114 diff --git a/elec/boards/MotherBoard_KrobotJr2010/Firmware/chibios/boards/EA_LPCXPRESSO_BB_1343/board.c b/elec/boards/MotherBoard_KrobotJr2010/Firmware/chibios/boards/EA_LPCXPRESSO_BB_1343/board.c new file mode 100644 index 0000000..fa2ab83 --- /dev/null +++ b/elec/boards/MotherBoard_KrobotJr2010/Firmware/chibios/boards/EA_LPCXPRESSO_BB_1343/board.c @@ -0,0 +1,60 @@ +/* + ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. + + This file is part of ChibiOS/RT. + + ChibiOS/RT is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + ChibiOS/RT is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +#include "ch.h" +#include "hal.h" + +/* + * Early initialization code. + * This initialization is performed just after reset before BSS and DATA + * segments initialization. + */ +void hwinit0(void) { + + LPC13xx_clock_init(); +} + +/* + * Late initialization code. + * This initialization is performed after BSS and DATA segments initialization + * and before invoking the main() function. + */ +void hwinit1(void) { + + /* + * HAL initialization. + */ + halInit(); + + /* + * Extra, board-specific, initializations. + * NOTE: PIO1_2 is associated also to the JTAG, if you need to use JTAG + * you must comment that line first. + */ + LPC_IOCON->PIO0_7 = 0xC0; /* Disables pull-up on LED2 output. */ + LPC_IOCON->JTAG_nTRST_PIO1_2 = 0xC1; /* Disables pull-up on LED3B output + and makes it GPIO1_2. */ + LPC_IOCON->PIO1_9 = 0xC0; /* Disables pull-up on LED3R output.*/ + LPC_IOCON->PIO1_10 = 0xC0; /* Disables pull-up on LED3G output.*/ + + /* + * ChibiOS/RT initialization. + */ + chSysInit(); +} diff --git a/elec/boards/MotherBoard_KrobotJr2010/Firmware/chibios/boards/EA_LPCXPRESSO_BB_1343/board.h b/elec/boards/MotherBoard_KrobotJr2010/Firmware/chibios/boards/EA_LPCXPRESSO_BB_1343/board.h new file mode 100644 index 0000000..4516cbc --- /dev/null +++ b/elec/boards/MotherBoard_KrobotJr2010/Firmware/chibios/boards/EA_LPCXPRESSO_BB_1343/board.h @@ -0,0 +1,85 @@ +/* + ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. + + This file is part of ChibiOS/RT. + + ChibiOS/RT is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + ChibiOS/RT is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +#ifndef _BOARD_H_ +#define _BOARD_H_ + +/* + * Setup for Embedded Artists LPCXpresso Base Board with LPC1343 daughter + * board. + */ + +/* + * Board identifiers. + */ +#define BOARD_EA_BB_LPC1343 +#define BOARD_NAME "Embedded Artists LPCXpresso Base Board + LPC1343" + +/* + * Board frequencies. + */ +#define SYSOSCCLK 12000000 + +/* + * GPIO 0 initial setup. + * Bit7 - LPCxpresso LED, initially output at low level. + */ +#define VAL_GPIO0DIR PAL_PORT_BIT(GPIO0_LED2) +#define VAL_GPIO0DATA 0x00000000 + +/* + * GPIO 1 initial setup. + */ +#define VAL_GPIO1DIR PAL_PORT_BIT(GPIO1_LED3B) | \ + PAL_PORT_BIT(GPIO1_LED3R) | \ + PAL_PORT_BIT(GPIO1_LED3G) +#define VAL_GPIO1DATA 0x00000000 + +/* + * GPIO 2 initial setup. + */ +#define VAL_GPIO2DIR 0x00000000 +#define VAL_GPIO2DATA 0x00000000 + +/* + * GPIO 3 initial setup. + */ +#define VAL_GPIO3DIR 0x00000000 +#define VAL_GPIO3DATA 0x00000000 + +/* + * Pin definitions. + */ +#define GPIO0_SW3 1 +#define GPIO0_LED2 7 + +#define GPIO1_LED3B 2 +#define GPIO1_SW4 4 +#define GPIO1_LED3R 9 +#define GPIO1_LED3G 10 + +#ifdef __cplusplus +extern "C" { +#endif + void hwinit(void); +#ifdef __cplusplus +} +#endif + +#endif /* _BOARD_H_ */ diff --git a/elec/boards/MotherBoard_KrobotJr2010/Firmware/chibios/boards/EA_LPCXPRESSO_BB_1343/board.mk b/elec/boards/MotherBoard_KrobotJr2010/Firmware/chibios/boards/EA_LPCXPRESSO_BB_1343/board.mk new file mode 100644 index 0000000..da59e98 --- /dev/null +++ b/elec/boards/MotherBoard_KrobotJr2010/Firmware/chibios/boards/EA_LPCXPRESSO_BB_1343/board.mk @@ -0,0 +1,5 @@ +# List of all the board related files. +BOARDSRC = ${CHIBIOS}/boards/EA_LPCXPRESSO_BB_1343/board.c + +# Required include directories +BOARDINC = ${CHIBIOS}/boards/EA_LPCXPRESSO_BB_1343 diff --git a/elec/boards/MotherBoard_KrobotJr2010/Firmware/chibios/boards/GENERIC_SPC563/board.c b/elec/boards/MotherBoard_KrobotJr2010/Firmware/chibios/boards/GENERIC_SPC563/board.c new file mode 100644 index 0000000..63e8828 --- /dev/null +++ b/elec/boards/MotherBoard_KrobotJr2010/Firmware/chibios/boards/GENERIC_SPC563/board.c @@ -0,0 +1,63 @@ +/* + ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. + + This file is part of ChibiOS/RT. + + ChibiOS/RT is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + ChibiOS/RT is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +#include "ch.h" +#include "hal.h" + +/* + * Early initialization code. + * This initialization is performed just after reset before BSS and DATA + * segments initialization. + */ +void hwinit0(void) { + + spc563_clock_init(); +} + +/* + * Late initialization code. + * This initialization is performed after BSS and DATA segments initialization + * and before invoking the main() function. + */ +void hwinit1(void) { + + /* + * Various initialization (temporary code). + */ + SIU.PCR[GPIO_LED1].R = 0x0300; /* OBE | IBE. */ + SIU.PCR[GPIO_LED2].R = 0x0300; /* OBE | IBE. */ + SIU.PCR[GPIO_LED3].R = 0x0300; /* OBE | IBE. */ + SIU.PCR[GPIO_LED4].R = 0x0300; /* OBE | IBE. */ + SIU.PCR[GPIO_BUTTON1].R = 0x0100; /* IBE. */ + SIU.PCR[GPIO_BUTTON2].R = 0x0100; /* IBE. */ + SIU.PCR[GPIO_BUTTON3].R = 0x0100; /* IBE. */ + SIU.PCR[GPIO_BUTTON4].R = 0x0100; /* IBE. */ + SIU.PCR[GPIO_SCI_A_TX].R = 0x0500; /* Primary | IBE. */ + SIU.PCR[GPIO_SCI_A_RX].R = 0x0500; /* Primary | IBE. */ + + /* + * HAL initialization. + */ + halInit(); + + /* + * ChibiOS/RT initialization. + */ + chSysInit(); +} diff --git a/elec/boards/MotherBoard_KrobotJr2010/Firmware/chibios/boards/GENERIC_SPC563/board.h b/elec/boards/MotherBoard_KrobotJr2010/Firmware/chibios/boards/GENERIC_SPC563/board.h new file mode 100644 index 0000000..78213a1 --- /dev/null +++ b/elec/boards/MotherBoard_KrobotJr2010/Firmware/chibios/boards/GENERIC_SPC563/board.h @@ -0,0 +1,65 @@ +/* + ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. + + This file is part of ChibiOS/RT. + + ChibiOS/RT is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + ChibiOS/RT is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +#ifndef _BOARD_H_ +#define _BOARD_H_ + +/* + * Setup for a generic SPC563 proto board. + */ + +/* + * Board identifiers. + */ +#define BOARD_GENERIC_SPC563 +#define BOARD_NAME "Generic SPC563" + +/* + * Board frequencies. + */ +#if !defined(EXTCLK) +#define EXTCLK 8000000 +#endif + +/* + * I/O definitions. + */ +#define GPIO_SCI_A_TX 89 +#define GPIO_SCI_A_RX 90 + +#define GPIO_BUTTON1 179 +#define GPIO_BUTTON2 181 +#define GPIO_BUTTON3 183 +#define GPIO_BUTTON4 187 + +#define GPIO_LED1 188 +#define GPIO_LED2 189 +#define GPIO_LED3 190 +#define GPIO_LED4 191 + +#ifdef __cplusplus +extern "C" { +#endif + void hwinit0(void); + void hwinit1(void); +#ifdef __cplusplus +} +#endif + +#endif /* _BOARD_H_ */ diff --git a/elec/boards/MotherBoard_KrobotJr2010/Firmware/chibios/boards/GENERIC_SPC563/board.mk b/elec/boards/MotherBoard_KrobotJr2010/Firmware/chibios/boards/GENERIC_SPC563/board.mk new file mode 100644 index 0000000..78b2364 --- /dev/null +++ b/elec/boards/MotherBoard_KrobotJr2010/Firmware/chibios/boards/GENERIC_SPC563/board.mk @@ -0,0 +1,5 @@ +# List of all the board related files. +BOARDSRC = ${CHIBIOS}/boards/GENERIC_SPC563/board.c + +# Required include directories +BOARDINC = ${CHIBIOS}/boards/GENERIC_SPC563 diff --git a/elec/boards/MotherBoard_KrobotJr2010/Firmware/chibios/boards/OLIMEX_AVR_CAN/board... [truncated message content] |
From: Jérémie D. <Ba...@us...> - 2010-04-29 15:16:33
|
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "krobot". The branch, master has been updated via 42199563c1632e7b522d74b53d16628b310d589f (commit) via 4ca440465d8ca4535c5f698c59745333b3d02af6 (commit) from 36cc6e499035eb900b2b0ec85e4fc6cd59601fd7 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 42199563c1632e7b522d74b53d16628b310d589f Author: Jérémie Dimino <je...@di...> Date: Thu Apr 29 17:15:43 2010 +0200 various enhancement commit 4ca440465d8ca4535c5f698c59745333b3d02af6 Author: Jérémie Dimino <je...@di...> Date: Wed Apr 28 09:11:24 2010 +0200 replace speed 200 by speed 0 for ax12s ----------------------------------------------------------------------- Changes: diff --git a/info/control/clients/controller.ml b/info/control/clients/controller.ml index cf5792f..f038d41 100644 --- a/info/control/clients/controller.ml +++ b/info/control/clients/controller.ml @@ -7,8 +7,6 @@ * This file is a part of [kro]bot. *) -(* Prints status continuously *) - open Lwt open Lwt_term open Lwt_read_line @@ -135,15 +133,16 @@ let rec loop krobot history = | Service monitoring | +-----------------------------------------------------------------+ *) -let services, set_services = React.S.create ~eq:TextSet.equal TextSet.empty +let services, set_services = React.S.create [] +let set_services l = set_services (List.sort Pervasives.compare l) let check_services bus = lwt l = OBus_bus.list_names bus in - set_services (List.fold_left (fun set name -> + set_services (List.fold_left (fun acc name -> if Text.starts_with name "fr.krobot." then - TextSet.add (String.sub name 10 (String.length name - 10)) set + String.sub name 10 (String.length name - 10) :: acc else - set) TextSet.empty l); + acc) [] l); return () (* +-----------------------------------------------------------------+ @@ -151,7 +150,8 @@ let check_services bus = +-----------------------------------------------------------------+ *) (* Draw the whole screen *) -let rec draw krobot = +let draw krobot = + let size = React.S.value Lwt_term.size in let screen = Zone.make ~width:size.columns ~height:size.lines in @@ -161,6 +161,21 @@ let rec draw krobot = let line = { blank with style = { blank.style with foreground = line_color } } in let name_color = lwhite in + let driver = List.mem "Driver" (React.S.value services) in + lwt devices = + if driver then + OBus_property.get (Krobot.devices_status krobot) + else + return { + Krobot.dev_compass = false; + Krobot.dev_range_finders = false; + Krobot.dev_logic_sensors = false; + Krobot.dev_motor = false; + Krobot.dev_ax12 = false; + Krobot.dev_lcd = false; + } + in + (* ===== Borders ===== *) for i = 1 to size.columns - 2 do @@ -205,34 +220,36 @@ let rec draw krobot = let zone = Zone.inner screen in lwt () = - try_lwt + if driver && devices.Krobot.dev_range_finders then begin lwt range_finders = OBus_property.get (Krobot.range_finders krobot) in - for i = 0 to Array.length range_finders - 1 do + for i = 0 to 7 do Draw.textc zone 0 i [textf "%d : " i; text (Text.repeat (range_finders.(i) * 14 / 3146) "=")] done; return () - with exn -> + end else begin for i = 0 to 7 do - Draw.textc zone 0 i [fg red; text "error"] + Draw.textc zone 0 i [fg red; text "unavailable"] done; return () + end in lwt () = - try_lwt + if driver && devices.Krobot.dev_logic_sensors then begin lwt logic_sensors = OBus_property.get (Krobot.logic_sensors krobot) in - for i = 0 to Array.length logic_sensors / 2 - 1 do + for i = 0 to 7 do let j = i * 2 in Draw.textf zone 20 i "%02d : %s %02d : %s" (j + 0) (if logic_sensors.(j + 0) then "O" else ".") (j + 1) (if logic_sensors.(j + 1) then "O" else ".") done; return () - with exn -> + end else begin for i = 0 to 7 do - Draw.textc zone 20 i [fg red; text "error"] + Draw.textc zone 20 i [fg red; text "unavailable"] done; return () + end in let zone' = Zone.sub ~zone ~x:40 ~y:0 ~width:14 ~height:8 in @@ -243,7 +260,7 @@ let rec draw krobot = Draw.text ~zone:zone' ~x:0 ~y ~text:name; loop (y + 1) rest in - loop 0 (TextSet.elements (React.S.value services)); + loop 0 (React.S.value services); let x = 55 in let text_of_state name = function @@ -251,31 +268,34 @@ let rec draw krobot = | `Present -> [text name] in lwt () = - try_lwt - lwt interface_state = OBus_property.get (Krobot.Card.state krobot `Interface) - and sensor_state = OBus_property.get (Krobot.Card.state krobot `Sensor) - and motor_state = OBus_property.get (Krobot.Card.state krobot `Motor) - and monitoring_state = OBus_property.get (Krobot.Card.state krobot `Monitoring) in - Draw.textc zone x 0 (text_of_state "interface" interface_state); - Draw.textc zone x 1 (text_of_state "sensor" sensor_state); - Draw.textc zone x 2 (text_of_state "motor" motor_state); - Draw.textc zone x 3 (text_of_state "monitoring" monitoring_state); + if driver then begin + lwt card_interface = OBus_property.get (Krobot.Card.state krobot `Interface) + and card_sensor = OBus_property.get (Krobot.Card.state krobot `Sensor) + and card_motor = OBus_property.get (Krobot.Card.state krobot `Motor) + and card_monitoring = OBus_property.get (Krobot.Card.state krobot `Monitoring) in + Draw.textc zone x 0 (text_of_state "interface" card_interface); + Draw.textc zone x 1 (text_of_state "sensor" card_sensor); + Draw.textc zone x 2 (text_of_state "motor" card_motor); + Draw.textc zone x 3 (text_of_state "monitoring" card_monitoring); return () - with exn -> - for i = 0 to 3 do - Draw.textc zone x i [fg red; text "error"] - done; + end else begin + Draw.textc zone x 0 (text_of_state "interface" `Absent); + Draw.textc zone x 1 (text_of_state "sensor" `Absent); + Draw.textc zone x 2 (text_of_state "motor" `Absent); + Draw.textc zone x 3 (text_of_state "monitoring" `Absent); return () + end in let x = x + 12 in lwt () = - try_lwt + if driver && devices.Krobot.dev_compass then begin lwt compass = OBus_property.get (Krobot.compass krobot) in Draw.textf zone x 2 "compass = %d" compass; return () - with exn -> - Draw.textc zone x 2 [fg red; text "error"]; + end else begin + Draw.textc zone x 2 [fg red; text "unavailable"]; return () + end in let date = Unix.gettimeofday () in let text_of_motor_state mode until = @@ -285,17 +305,18 @@ let rec draw krobot = [text mode; text "OK"] in lwt () = - try_lwt + if driver && devices.Krobot.dev_motor then begin lwt forward = OBus_property.get (Krobot.inhibit_forward_until krobot) and backward = OBus_property.get (Krobot.inhibit_backward_until krobot) in Draw.textc zone x 3 (text_of_motor_state "move forward: " forward); Draw.textc zone x 4 (text_of_motor_state "move backward: " backward); return () - with exn -> + end else begin for i = 3 to 4 do - Draw.textc zone x i [fg red; text "error"] + Draw.textc zone x i [fg red; text "unavailable"] done; return () + end in (* ===== History ===== *) @@ -399,6 +420,8 @@ let rec draw krobot = (* Wether the screen need to be refreshed *) let refresh_needed = ref false +let draw_mutex = Lwt_mutex.create () + (* Program a refresh before the next main loop iteration *) let refresh krobot = if !refresh_needed then @@ -407,7 +430,7 @@ let refresh krobot = refresh_needed := true; lwt () = Lwt.pause () in refresh_needed := false; - draw krobot + Lwt_mutex.with_lock draw_mutex (fun () -> draw krobot) end (* +-----------------------------------------------------------------+ @@ -452,19 +475,35 @@ lwt () = notify box; notify logs; notify services; + let notifiers = ref [] in let notify_property property = - Lwt_event.always_notify - (fun _ -> push ()) - (OBus_property.updates property) + try_lwt + lwt signal = OBus_property.monitor property in + notifiers := Lwt_signal.notify (fun _ -> push ()) signal :: !notifiers; + return () + with exn -> + Lwt_log.error_f ~exn "cannot monitor property" in - notify_property (Krobot.compass krobot); - notify_property (Krobot.logic_sensors krobot); - notify_property (Krobot.range_finders krobot); - notify_property (Krobot.inhibit_forward_until krobot); - notify_property (Krobot.inhibit_backward_until krobot); - notify_property (Krobot.Card.state krobot `Interface); - notify_property (Krobot.Card.state krobot `Sensor); - notify_property (Krobot.Card.state krobot `Motor); + Lwt_signal.always_notify_s + (function + | true -> + join [ + notify_property (Krobot.compass krobot); + notify_property (Krobot.logic_sensors krobot); + notify_property (Krobot.range_finders krobot); + notify_property (Krobot.inhibit_forward_until krobot); + notify_property (Krobot.inhibit_backward_until krobot); + notify_property (Krobot.Card.state krobot `Interface); + notify_property (Krobot.Card.state krobot `Sensor); + notify_property (Krobot.Card.state krobot `Motor); + notify_property (Krobot.Card.state krobot `Monitoring); + notify_property (Krobot.devices_status krobot); + ] + | false -> + List.iter Lwt_signal.disable !notifiers; + notifiers := []; + return ()) + (React.S.map (fun services -> List.mem "Driver" services) services); List.iter (fun card -> diff --git a/info/control/clients/script.ml b/info/control/clients/script.ml index 4649704..f96ea83 100644 --- a/info/control/clients/script.ml +++ b/info/control/clients/script.ml @@ -562,14 +562,17 @@ let rec text_of_value typ value = match typ, value with | _ -> failwith "Script.text_of_value: types mismatch" +let convert_name name = + String.concat "-" (List.map String.lowercase (OBus_name.split name)) + let make_command cmd = { c_args = List.map2 (fun name typ -> (name, arg_type_of_type typ)) (Value.arg_names cmd.Commands.send) (Value.C.type_sequence (Value.arg_types cmd.Commands.send)); - c_name = cmd.Commands.name; - c_path = ["unsafe"; String.lowercase cmd.Commands.section]; + c_name = convert_name cmd.Commands.name; + c_path = ["unsafe"; convert_name cmd.Commands.section]; c_exec = fun args logger krobot -> let args = diff --git a/info/control/common/error.ml b/info/control/common/error.ml new file mode 100644 index 0000000..5bcb78c --- /dev/null +++ b/info/control/common/error.ml @@ -0,0 +1,15 @@ +(* + * error.ml + * -------- + * Copyright : (c) 2010, Jeremie Dimino <je...@di...> + * Licence : BSD3 + * + * This file is a part of [kro]bot. + *) + +exception Card_unavailable + +let () = + List.iter (fun (name, exn) -> OBus_error.register name exn) [ + "fr.krobot.CardUnavailable", Card_unavailable; + ] diff --git a/info/control/common/error.mli b/info/control/common/error.mli new file mode 100644 index 0000000..b04e2b1 --- /dev/null +++ b/info/control/common/error.mli @@ -0,0 +1,13 @@ +(* + * error.mli + * --------- + * Copyright : (c) 2010, Jeremie Dimino <je...@di...> + * Licence : BSD3 + * + * This file is a part of [kro]bot. + *) + +(** Errors that may be reported by the driver *) + +exception Card_unavailable + (** The card is currently not available *) diff --git a/info/control/driver/driver.ml b/info/control/driver/driver.ml index 170f447..9dca6b4 100644 --- a/info/control/driver/driver.ml +++ b/info/control/driver/driver.ml @@ -14,15 +14,118 @@ let section = Lwt_log.Section.make "driver" open Types open Lwt -let make_signal ?(update_delay=Config.update_delay) get card = - lwt value = get card in - return (React.S.hold value (Lwt_event.from - (fun () -> - lwt () = Lwt_unix.sleep update_delay in - get card))) +module String_map = Map.Make(String) (* THe notification mode for all interfaces: *) -let notify_mode () = OBus_object.notify_update "PropertiesChanged" +let notify_mode = OBus_object.notify_update "PropertiesChanged" + +(* +-----------------------------------------------------------------+ + | Cards | + +-----------------------------------------------------------------+ *) + +type card = Export_unsafe.card = { + card_card : USBCard.t option React.signal; + card_name : string; +} + +let card_interface, set_card_interface = + let signal, set = React.S.create ~eq:(==) None in + ({ card_card = signal; card_name = "interface" }, set) + +let card_monitoring, set_card_monitoring = + let signal, set = React.S.create ~eq:(==) None in + ({ card_card = signal; card_name = "monitoring" }, set) + +let card_sensor, set_card_sensor = + let signal, set = React.S.create ~eq:(==) None in + ({ card_card = signal; card_name = "sensor" }, set) + +let card_motor, set_card_motor = + let signal, set = React.S.create ~eq:(==) None in + ({ card_card = signal; card_name = "motor" }, set) + +let get_card card = + match React.S.value card.card_card with + | Some card -> + card + | None -> + Printf.ksprintf + (OBus_error.raise Error.Card_unavailable) + "the %s card is currently unavaiables" + card.card_name + +(* List of services, by cards *) +let services = [ + card_interface, ["Servo"; "Compass"; "AX12"; "LCD"]; + card_monitoring, ["Power"]; + card_sensor, ["LogicSensors"; "RangeFinders"]; + card_motor, ["Motors"]; +] + +let devices_status, set_devices_status = + React.S.create ~eq:(String_map.equal (=)) + (List.fold_left + (fun map service -> String_map.add service false map) + String_map.empty + (List.concat (List.map snd services))) + +let set_device_status device status = + set_devices_status (String_map.add device status (React.S.value devices_status)) + +(* +-----------------------------------------------------------------+ + | USB card polling | + +-----------------------------------------------------------------+ *) + +(* Poll a card forever *) +let poll card ?(update_delay=Config.update_delay) initial get = + let value, set_value = React.S.create initial in + let rec loop () = + lwt () = + match React.S.value card.card_card with + | Some usb_card -> begin + try_lwt + lwt x = get usb_card in + set_value x; + return () + with exn -> + lwt () = Lwt_log.error_f ~exn "reading from card %s failed with" card.card_name in + return () + end + | None -> + return () + in + lwt () = Lwt_unix.sleep update_delay in + loop () + in + ignore (loop ()); + value + +(* +-----------------------------------------------------------------+ + | Service template | + +-----------------------------------------------------------------+ *) + +module Service(Name : sig val name : string end) = +struct + let card = + fst (List.find (function (card, l) -> List.mem Name.name l) services) + + let obus = + OBus_object.make + ~interfaces:[Export_unsafe.interface Name.name card] + ["fr"; "krobot"; "Devices"; Name.name] + + let () = + OBus_object.attach obus () + + let () = + Lwt_signal.always_notify + (function + | Some _ -> + set_device_status Name.name true + | None -> + set_device_status Name.name false) + card.card_card +end (* +-----------------------------------------------------------------+ | Power | @@ -30,21 +133,7 @@ let notify_mode () = OBus_object.notify_update "PropertiesChanged" module Power = struct - type t = { - obus : t OBus_object.t; - card : USBCard.t; - } - - let make card path = - let dev = { - obus = - OBus_object.make - ~interfaces:[Export_unsafe.interface "power" (fun dev -> dev.card)] - path; - card = card; - } in - OBus_object.attach dev.obus dev; - return dev + include Service(struct let name = "Power" end) end (* +-----------------------------------------------------------------+ @@ -53,31 +142,18 @@ end module Compass = struct - type t = { - obus : t OBus_object.t; - card : USBCard.t; - value : int React.signal; - } + include Service(struct let name = "Compass" end) open Krobot_interfaces.Fr_krobot_Device_Compass - let make card path = - lwt value = make_signal ~update_delay:(Config.update_delay *. 2.) (fun card -> snd =|< USBCard.call Commands.Compass.get card ()) card in - let dev = { - obus = - OBus_object.make - ~interfaces:[Export_unsafe.interface "compass" (fun dev -> dev.card); - Krobot_interfaces.Fr_krobot_Device_Compass.make - ~notify_mode:(OBus_object.notify_update "PropertiesChanged") - { - p_Value = (fun dev -> React.S.map Int32.of_int dev.value); - }] - path; - card = card; - value = value; - } in - OBus_object.attach dev.obus dev; - return dev + let value = poll ~update_delay:1.0 card 0 (fun card -> snd =|< USBCard.call Commands.Compass.get card ()) + + let () = + OBus_object.add_interface obus + (make ~notify_mode + { + p_Value = (fun () -> React.S.map Int32.of_int value); + }) end (* +-----------------------------------------------------------------+ @@ -86,49 +162,37 @@ end module LCD = struct - type t = { - obus : t OBus_object.t; - card : USBCard.t; - } + include Service(struct let name = "LCD" end) open Krobot_interfaces.Fr_krobot_Device_LCD - let set_lcd dev lines = + let set_lcd lines = if List.length lines > 4 || List.exists (fun line -> String.length line > 20) lines then invalid_arg "SetLCD" else begin - lwt () = USBCard.call Commands.LCD.clear dev.card () in - lwt () = USBCard.call Commands.LCD.cursor_off dev.card () in + lwt () = USBCard.call Commands.LCD.clear (get_card card) () in + lwt () = USBCard.call Commands.LCD.cursor_off (get_card card) () in let rec loop i = function | [] -> return () | line :: lines -> - lwt () = USBCard.call Commands.LCD.write_line dev.card (i, line) in + lwt () = USBCard.call Commands.LCD.write_line (get_card card) (i, line) in loop (i + 1) lines in loop 1 lines end - let backlight_on dev = USBCard.call Commands.LCD.backlight_on dev.card () - let backlight_off dev = USBCard.call Commands.LCD.backlight_off dev.card () - - let make card path = - let dev = { - obus = - OBus_object.make - ~interfaces:[Export_unsafe.interface "LCD" (fun dev -> dev.card); - Krobot_interfaces.Fr_krobot_Device_LCD.make - ~notify_mode:(OBus_object.notify_update "PropertiesChanged") - { - m_SetLCD = (fun ctx -> set_lcd); - m_BacklightOn = (fun ctx obj () -> backlight_on obj); - m_BacklightOff = (fun ctx obj () -> backlight_off obj); - }] - path; - card = card; - } in - OBus_object.attach dev.obus dev; - return dev + let backlight_on () = USBCard.call Commands.LCD.backlight_on (get_card card) () + let backlight_off () = USBCard.call Commands.LCD.backlight_off (get_card card) () + + let () = + OBus_object.add_interface obus + (make ~notify_mode + { + m_SetLCD = (fun ctx () lines -> set_lcd lines); + m_BacklightOn = (fun ctx () () -> backlight_on ()); + m_BacklightOff = (fun ctx () () -> backlight_off ()); + }) end (* +-----------------------------------------------------------------+ @@ -137,47 +201,35 @@ end module Servo = struct - type t = { - obus : t OBus_object.t; - card : USBCard.t; - } + include Service(struct let name = "Servo" end) open Krobot_interfaces.Fr_krobot_Device_Servo - let claws_enable dev = - USBCard.call Commands.Servo.set_config dev.card (0b10100, 0) + let claws_enable () = + USBCard.call Commands.Servo.set_config (get_card card) (0b10100, 0) - let claws_disable dev = - USBCard.call Commands.Servo.set_config dev.card (0, 0xff) + let claws_disable () = + USBCard.call Commands.Servo.set_config (get_card card) (0, 0xff) - let claws_open dev = - USBCard.call Commands.Servo.set_state dev.card (0b10100, 0, 0, 18, 0, -69) + let claws_open () = + USBCard.call Commands.Servo.set_state (get_card card) (0b10100, 0, 0, 18, 0, -69) - let claws_close dev = - USBCard.call Commands.Servo.set_state dev.card (0b10100, 0, 0, -100, 0, 45) + let claws_close () = + USBCard.call Commands.Servo.set_state (get_card card) (0b10100, 0, 0, -100, 0, 45) - let claws_take dev = - USBCard.call Commands.Servo.set_state dev.card (0b10100, 0, 0, -40, 0, -20) + let claws_take () = + USBCard.call Commands.Servo.set_state (get_card card) (0b10100, 0, 0, -40, 0, -20) - let make card path = - let dev = { - obus = - OBus_object.make - ~interfaces:[Export_unsafe.interface "servo" (fun dev -> dev.card); - Krobot_interfaces.Fr_krobot_Device_Servo.make - ~notify_mode:(OBus_object.notify_update "PropertiesChanged") - { - m_ClawsEnable = (fun ctx obj () -> claws_enable obj); - m_ClawsDisable = (fun ctx obj () -> claws_disable obj); - m_ClawsOpen = (fun ctx obj () -> claws_open obj); - m_ClawsClose = (fun ctx obj () -> claws_close obj); - m_ClawsTake = (fun ctx obj () -> claws_take obj); - }] - path; - card = card; - } in - OBus_object.attach dev.obus dev; - return dev + let () = + OBus_object.add_interface obus + (make ~notify_mode + { + m_ClawsEnable = (fun ctx () () -> claws_enable ()); + m_ClawsDisable = (fun ctx () () -> claws_disable ()); + m_ClawsOpen = (fun ctx () () -> claws_open ()); + m_ClawsClose = (fun ctx () () -> claws_close ()); + m_ClawsTake = (fun ctx () () -> claws_take ()); + }) end (* +-----------------------------------------------------------------+ @@ -186,17 +238,10 @@ end module AX12 = struct - type t = { - obus : t OBus_object.t; - card : USBCard.t; - } + include Service(struct let name = "AX12" end) open Krobot_interfaces.Fr_krobot_Device_AX12 - let grip_up_position = 880 - let grip_down_position = 580 - let ax12_default_velocity = 50 - (* +---------------------------------------------------------------+ | High-level commands | +---------------------------------------------------------------+ *) @@ -207,88 +252,78 @@ struct aa_velocity : int; } - let set_ax12 dev actions = + let set_ax12 actions = lwt () = Lwt_list.iter_p (fun action -> USBCard.call Commands.AX12.goto - dev.card + (get_card card) (action.aa_id, action.aa_position, action.aa_velocity, `Action)) actions in - USBCard.call Commands.AX12.action dev.card 0xfe - - let grip_up dev = - set_ax12 dev [{ aa_id = 1; - aa_position = 190; - aa_velocity = 50 }; - { aa_id = 2; - aa_position = 180; - aa_velocity = 50 }] - - let grip_down dev = - set_ax12 dev [{ aa_id = 1; - aa_position = 490; - aa_velocity = 50 }; - { aa_id = 2; - aa_position = 510; - aa_velocity = 50 }; - { aa_id = 3; - aa_position = 390; - aa_velocity = 200 }] - - let grip_open dev = - set_ax12 dev [{ aa_id = 2; - aa_position = 650; - aa_velocity = 100 }; - { aa_id = 3; - aa_position = 0; - aa_velocity = 0 }] - - let grip_close dev = - set_ax12 dev [{ aa_id = 2; - aa_position = 510; - aa_velocity = 100 }; - { aa_id = 3; - aa_position = 390; - aa_velocity = 200 }] - - let grip_release dev = - USBCard.call Commands.AX12.goto dev.card (3, 200, 200, `Now) - - let make card path = - let dev = { - obus = - OBus_object.make - ~interfaces:[Export_unsafe.interface "AX12" (fun dev -> dev.card); - Krobot_interfaces.Fr_krobot_Device_AX12.make - ~notify_mode:(OBus_object.notify_update "PropertiesChanged") - { - m_SetAX12 = (fun ctx obj positions -> - let positions = - List.map - (fun (x1, x2, x3) -> - { aa_id = Int32.to_int x1; - aa_position = Int32.to_int x2; - aa_velocity = Int32.to_int x3 }) - positions - in - set_ax12 obj positions); - m_GripUp = (fun ctx obj () -> grip_up obj); - m_GripDown = (fun ctx obj () -> grip_down obj); - m_GripOpen = (fun ctx obj () -> grip_open obj); - m_GripClose = (fun ctx obj () -> grip_close obj); - m_GripRelease = (fun ctx obj () -> grip_release obj); - }] - path; - card = card; - } - in - OBus_object.attach dev.obus dev; - return dev + USBCard.call Commands.AX12.action (get_card card) 0xfe + + let grip_up () = + set_ax12 [{ aa_id = 1; + aa_position = 190; + aa_velocity = 50 }; + { aa_id = 2; + aa_position = 180; + aa_velocity = 50 }] + + let grip_down () = + set_ax12 [{ aa_id = 1; + aa_position = 490; + aa_velocity = 50 }; + { aa_id = 2; + aa_position = 510; + aa_velocity = 50 }; + { aa_id = 3; + aa_position = 390; + aa_velocity = 0 }] + + let grip_open () = + set_ax12 [{ aa_id = 2; + aa_position = 650; + aa_velocity = 100 }; + { aa_id = 3; + aa_position = 0; + aa_velocity = 0 }] + + let grip_close () = + set_ax12 [{ aa_id = 2; + aa_position = 510; + aa_velocity = 100 }; + { aa_id = 3; + aa_position = 390; + aa_velocity = 0 }] + + let grip_release () = + USBCard.call Commands.AX12.goto (get_card card) (3, 200, 0, `Now) + + let () = + OBus_object.add_interface obus + (make ~notify_mode + { + m_SetAX12 = (fun ctx () positions -> + let positions = + List.map + (fun (x1, x2, x3) -> + { aa_id = Int32.to_int x1; + aa_position = Int32.to_int x2; + aa_velocity = Int32.to_int x3 }) + positions + in + set_ax12 positions); + m_GripUp = (fun ctx () () -> grip_up ()); + m_GripDown = (fun ctx () () -> grip_down ()); + m_GripOpen = (fun ctx () () -> grip_open ()); + m_GripClose = (fun ctx () () -> grip_close ()); + m_GripRelease = (fun ctx () () -> grip_release ()); + }) end (* +-----------------------------------------------------------------+ @@ -297,31 +332,18 @@ end module Logic_sensors = struct - type t = { - obus : t OBus_object.t; - card : USBCard.t; - value : bool array React.signal; - } + include Service(struct let name = "LogicSensors" end) open Krobot_interfaces.Fr_krobot_Device_LogicSensors - let make card path = - lwt value = make_signal (fun card -> USBCard.call Commands.Logic_sensors.get_state card ()) card in - let dev = { - obus = - OBus_object.make - ~interfaces:[Export_unsafe.interface "logic-sensors" (fun dev -> dev.card); - Krobot_interfaces.Fr_krobot_Device_LogicSensors.make - ~notify_mode:(OBus_object.notify_update "PropertiesChanged") - { - p_Value = (fun dev -> React.S.map Array.to_list dev.value); - }] - path; - card = card; - value = value; - } in - OBus_object.attach dev.obus dev; - return dev + let value = poll card (Array.make 16 false) (fun card -> USBCard.call Commands.Logic_sensors.get_state card ()) + + let () = + OBus_object.add_interface obus + (make ~notify_mode + { + p_Value = (fun () -> React.S.map Array.to_list value); + }) end (* +-----------------------------------------------------------------+ @@ -330,51 +352,38 @@ end module Range_finders = struct - type t = { - obus : t OBus_object.t; - card : USBCard.t; - value : int array React.signal; - } + include Service(struct let name = "RangeFinders" end) open Krobot_interfaces.Fr_krobot_Device_RangeFinders - let get_calibration dev id = - USBCard.call Commands.Range_finders.get_calibration dev.card id - - let calibration_start dev id skip_meas = - USBCard.call Commands.Range_finders.calibration_start dev.card (id, skip_meas) - - let calibration_stop dev = - USBCard.call Commands.Range_finders.calibration_stop dev.card () - - let calibration_continue dev = - USBCard.call Commands.Range_finders.calibration_continue dev.card () - - let make card path = - lwt value = make_signal (fun card -> USBCard.call Commands.Range_finders.get_state card ()) card in - let dev = { - obus = - OBus_object.make - ~interfaces:[Export_unsafe.interface "range-finders" (fun dev -> dev.card); - Krobot_interfaces.Fr_krobot_Device_RangeFinders.make - ~notify_mode:(OBus_object.notify_update "PropertiesChanged") - { - p_Value = (fun dev -> React.S.map (fun a -> List.map Int32.of_int (Array.to_list a)) dev.value); - m_GetCalibration = (fun ctx obj id -> - lwt result = get_calibration obj (Int32.to_int id) in - return (List.map Int32.of_int (Array.to_list result))); - m_CalibrationStart = (fun ctx obj (id, skip_measure) -> - let id = Int32.to_int id in - calibration_start obj id skip_measure); - m_CalibrationStop = (fun ctx obj () -> calibration_stop obj); - m_CalibrationContinue = (fun ctx obj () -> calibration_continue obj); - }] - path; - card = card; - value = value; - } in - OBus_object.attach dev.obus dev; - return dev + let get_calibration id = + USBCard.call Commands.Range_finders.get_calibration (get_card card) id + + let calibration_start id skip_meas = + USBCard.call Commands.Range_finders.calibration_start (get_card card) (id, skip_meas) + + let calibration_stop () = + USBCard.call Commands.Range_finders.calibration_stop (get_card card) () + + let calibration_continue () = + USBCard.call Commands.Range_finders.calibration_continue (get_card card) () + + let value = poll card (Array.make 8 0) (fun card -> USBCard.call Commands.Range_finders.get_state card ()) + + let () = + OBus_object.add_interface obus + (make ~notify_mode + { + p_Value = (fun () -> React.S.map (fun x -> List.map Int32.of_int (Array.to_list x)) value); + m_GetCalibration = (fun ctx () id -> + lwt result = get_calibration (Int32.to_int id) in + return (List.map Int32.of_int (Array.to_list result))); + m_CalibrationStart = (fun ctx () (id, skip_measure) -> + let id = Int32.to_int id in + calibration_start id skip_measure); + m_CalibrationStop = (fun ctx () () -> calibration_stop ()); + m_CalibrationContinue = (fun ctx () () -> calibration_continue ()); + }) end (* +-----------------------------------------------------------------+ @@ -383,6 +392,8 @@ end module Motors = struct + include Service(struct let name = "Motors" end) + open Krobot_interfaces.Fr_krobot_Device_Motors type trajectory = { @@ -410,27 +421,45 @@ struct (* Manual settings. The first argument is a threads which suspend itself, then resume and stop the motors *) - type t = { - obus : t OBus_object.t; - card : USBCard.t; + let state = Var.create Static + (* The current state of the two motors *) - inhibit_forward_until : float Var.t; - inhibit_backward_until : float Var.t; - (* Date after which motor's inhibition should be stopped *) + let () = + (* Reset the state each the card goes down *) + Lwt_signal.always_notify + (fun _ -> Var.set state Static) + card.card_card - traj_completed : (int * string) React.event; - (* Event which occurs each time a TRAJ_COMPLETED command is - received *) + let inhibit_forward_until = Var.create 0.0 + let inhibit_backward_until = Var.create 0.0 + (* Date after which motor's inhibition should be stopped *) - state : state Var.t; - (* The current state of the two motors *) - } + (* Event which occurs each time a TRAJ_COMPLETED command is + received *) + let traj_completed = + let event_of_card card = + React.E.filter + (fun (cmd, data) -> + cmd = PcInterface.cmd_traj + && Char.code data.[0] = PcInterface.traj_completed) + (USBCard.commands card) + in + React.E.switch + (match React.S.value card.card_card with + | Some card -> event_of_card card + | None -> React.E.never) + (React.E.fmap + (function + | Some card -> Some(event_of_card card) + | None -> None) + (React.S.changes card.card_card)) let string_of_direction = function | `Forward -> "forward" | `Backward -> "backward" - let state dev = + (* String describing the current state *) + let state_info = React.S.map (function | Static -> @@ -448,18 +477,18 @@ struct Printf.sprintf "manual: left={ direction=%s; velocity=%d; acceleration=%d } right={ direction=%s; velocity=%d; acceleration=%d }" (string_of_direction settings_l.direction) settings_l.velocity settings_l.acceleration (string_of_direction settings_r.direction) settings_r.velocity settings_r.acceleration) - (Var.signal dev.state) + (Var.signal state) (* +---------------------------------------------------------------+ | High-level movement | +---------------------------------------------------------------+ *) - let move dev dist velocity acc = + let move dist velocity acc = lwt () = Lwt_log.info_f ~section "move: distance=%d velocity=%d acceleration=%d" dist velocity acc in - match Var.get dev.state with + match Var.get state with | Trajectory _ -> lwt () = Lwt_log.info ~section "move: state=trajectory" in fail (Failure "already in a trajectory") @@ -469,7 +498,7 @@ struct | Static -> lwt () = Lwt_log.info ~section "move: state=static" in let date = Unix.gettimeofday () in - if (dist > 0 && date < Var.get dev.inhibit_forward_until) || (dist < 0 && date < Var.get dev.inhibit_backward_until) then + if (dist > 0 && date < Var.get inhibit_forward_until) || (dist < 0 && date < Var.get inhibit_backward_until) then fail (Failure "inhibited move") else begin let waiter, wakener = Lwt.wait () in @@ -478,28 +507,28 @@ struct trajectory = if dist > 0 then `Forward else `Backward; stopped = false } in - Var.set dev.state (Trajectory trajectory); - let thread = Lwt_event.next dev.traj_completed >> return () in + Var.set state (Trajectory trajectory); + let thread = Lwt_event.next traj_completed >> return () in lwt () = pick [waiter; (lwt () = if dist > 0 then - USBCard.call Commands.Motors.forward dev.card (dist, velocity, acc) + USBCard.call Commands.Motors.forward (get_card card) (dist, velocity, acc) else - USBCard.call Commands.Motors.backward dev.card (-dist, velocity, acc) + USBCard.call Commands.Motors.backward (get_card card) (-dist, velocity, acc) in thread)] in - Var.set dev.state Static; + Var.set state Static; return (if trajectory.stopped then `Stopped else `OK) end - let turn dev angle velocity acc = + let turn angle velocity acc = lwt () = Lwt_log.info_f ~section "turn: angle=%d velocity=%d acceleration=%d" angle velocity acc in - match Var.get dev.state with + match Var.get state with | Trajectory _ -> lwt () = Lwt_log.info ~section "turn: state=trajectory" in fail (Failure "already in a trajectory") @@ -514,19 +543,19 @@ struct trajectory = if angle > 0 then `Left else `Right; stopped = false } in - Var.set dev.state (Trajectory trajectory); - let thread = Lwt_event.next dev.traj_completed >> return () in + Var.set state (Trajectory trajectory); + let thread = Lwt_event.next traj_completed >> return () in lwt () = pick [waiter; (lwt () = if angle > 0 then - USBCard.call Commands.Motors.left dev.card (angle, velocity, acc) + USBCard.call Commands.Motors.left (get_card card) (angle, velocity, acc) else - USBCard.call Commands.Motors.right dev.card (-angle, velocity, acc) + USBCard.call Commands.Motors.right (get_card card) (-angle, velocity, acc) in thread)] in - Var.set dev.state Static; + Var.set state Static; return (if trajectory.stopped then `Stopped else `OK) let string_of_goto_mode = function @@ -534,12 +563,12 @@ struct | `Curve_right -> "curve-right" | `Straight -> "straight" - let goto dev x y velocity acc mode bypass_distance = + let goto x y velocity acc mode bypass_distance = lwt () = Lwt_log.info_f ~section "goto: x=%d y=%d velocity=%d acceleration=%d mode=%s bypass_distance=%d" x y velocity acc (string_of_goto_mode mode) bypass_distance in - match Var.get dev.state with + match Var.get state with | Trajectory _ -> lwt () = Lwt_log.info ~section "goto: state=trajectory" in fail (Failure "already in a trajectory") @@ -549,7 +578,7 @@ struct | Static -> lwt () = Lwt_log.info ~section "goto: state=static" in let date = Unix.gettimeofday () in - if date < Var.get dev.inhibit_forward_until then + if date < Var.get inhibit_forward_until then fail (Failure "inhibited move") else begin let waiter, wakener = Lwt.wait () in @@ -558,17 +587,17 @@ struct trajectory = `Goto; stopped = false } in - Var.set dev.state (Trajectory trajectory); - let thread = Lwt_event.next dev.traj_completed >> return () in + Var.set state (Trajectory trajectory); + let thread = Lwt_event.next traj_completed >> return () in lwt () = pick [waiter; (lwt () = - USBCard.call Commands.Motors.goto dev.card + USBCard.call Commands.Motors.goto (get_card card) (x, y, velocity, acc, mode, bypass_distance) in thread)] in - Var.set dev.state Static; + Var.set state Static; return (if trajectory.stopped then `Stopped else `OK) end @@ -581,158 +610,140 @@ struct | `Smooth -> "smooth" | `Off -> "off" - let stop_motors dev mode = + let stop_motors mode = lwt () = Lwt_log.info_f ~section "stop-motors: mode=%s" (string_of_stop_mode mode) in - match Var.get dev.state with + match Var.get state with | Trajectory trajectory -> lwt () = Lwt_log.info ~section "stop-motors: state=trajectory" in trajectory.stopped <- true; - lwt () = USBCard.call Commands.Motors.traj_stop dev.card (`Both, mode) in + lwt () = USBCard.call Commands.Motors.traj_stop (get_card card) (`Both, mode) in wakeup trajectory.abort (); return () | Manual(stopper, left, right) -> lwt () = Lwt_log.info ~section "stop-motors: state=manual" in - lwt () = USBCard.call Commands.Motors.traj_stop dev.card (`Both, mode) in - Var.set dev.state Static; + lwt () = USBCard.call Commands.Motors.traj_stop (get_card card) (`Both, mode) in + Var.set state Static; cancel stopper; return () | Static -> lwt () = Lwt_log.info ~section "stop-motors: state=static" in - USBCard.call Commands.Motors.traj_stop dev.card (`Both, mode) + USBCard.call Commands.Motors.traj_stop (get_card card) (`Both, mode) - let _set_velocities dev stopper (settings_l, settings_r) (velocity_l, velocity_r) (acceleration_l, acceleration_r) duration = + let _set_velocities stopper (settings_l, settings_r) (velocity_l, velocity_r) (acceleration_l, acceleration_r) duration = let direction_l, velocity_l = if velocity_l < 0 then (`Backward, -velocity_l) else (`Forward, velocity_l) in let direction_r, velocity_r = if velocity_r < 0 then (`Backward, -velocity_r) else (`Forward, velocity_r) in let date = Unix.gettimeofday () in - if (((direction_l = `Forward && velocity_l > 0) || (direction_r = `Forward && velocity_r > 0)) && date < Var.get dev.inhibit_forward_until) - || (((direction_l = `Backward && velocity_l > 0) || (direction_r = `Backward && velocity_r > 0)) && date < Var.get dev.inhibit_backward_until) then + if (((direction_l = `Forward && velocity_l > 0) || (direction_r = `Forward && velocity_r > 0)) && date < Var.get inhibit_forward_until) + || (((direction_l = `Backward && velocity_l > 0) || (direction_r = `Backward && velocity_r > 0)) && date < Var.get inhibit_backward_until) then fail (Failure "inhibited move") else begin cancel stopper; if velocity_l <> 0 || velocity_r <> 0 then begin - Var.set dev.state (Manual(Lwt_unix.sleep duration >> stop_motors dev `Smooth, + Var.set state (Manual(Lwt_unix.sleep duration >> stop_motors `Smooth, { velocity = velocity_l; acceleration = acceleration_l; direction = direction_l }, { velocity = velocity_r; acceleration = acceleration_r; direction = direction_r })); lwt () = if acceleration_l <> settings_l.acceleration then - USBCard.call Commands.Motors.traj_new_velocity dev.card (`Left, velocity_l, acceleration_l, direction_l) + USBCard.call Commands.Motors.traj_new_velocity (get_card card) (`Left, velocity_l, acceleration_l, direction_l) else - USBCard.call Commands.Motors.traj_change_velocity dev.card (`Left, velocity_l, direction_l) + USBCard.call Commands.Motors.traj_change_velocity (get_card card) (`Left, velocity_l, direction_l) and () = if acceleration_r <> settings_r.acceleration then - USBCard.call Commands.Motors.traj_new_velocity dev.card (`Right, velocity_r, acceleration_r, direction_r) + USBCard.call Commands.Motors.traj_new_velocity (get_card card) (`Right, velocity_r, acceleration_r, direction_r) else - USBCard.call Commands.Motors.traj_change_velocity dev.card (`Right, velocity_r, direction_r) + USBCard.call Commands.Motors.traj_change_velocity (get_card card) (`Right, velocity_r, direction_r) in - USBCard.call Commands.Motors.traj_start dev.card `Both + USBCard.call Commands.Motors.traj_start (get_card card) `Both end else - stop_motors dev `Smooth + stop_motors `Smooth end - let set_velocities dev velocities accelerations duration = + let set_velocities velocities accelerations duration = lwt () = Lwt_log.info_f ~section "set-velocities: velocities=(%d, %d) accelerations=(%d, %d) duration=%f" (fst velocities) (snd velocities) (fst accelerations) (snd accelerations) duration in - match Var.get dev.state with + match Var.get state with | Trajectory _ -> lwt () = Lwt_log.info ~section "set-velocities: state=trajectory" in fail (Failure "currently in trajectory mode") | Manual(stopper, left, right) -> lwt () = Lwt_log.info ~section "set-velocities: state=manual" in - _set_velocities dev stopper (left, right) velocities accelerations duration + _set_velocities stopper (left, right) velocities accelerations duration | Static -> lwt () = Lwt_log.info ~section "set-velocities: state=static" in let static = { velocity = 0; acceleration = 0; direction = `Forward } in - _set_velocities dev (return ()) (static, static) velocities accelerations duration + _set_velocities (return ()) (static, static) velocities accelerations duration (* +---------------------------------------------------------------+ | Motors inhbition | +---------------------------------------------------------------+ *) - let set_inhibit_forward_until dev delay = + let set_inhibit_forward_until delay = let until = Unix.gettimeofday () +. delay in - Var.set dev.inhibit_forward_until until; - match Var.get dev.state with + Var.set inhibit_forward_until until; + match Var.get state with | Trajectory{ trajectory = (`Forward | `Goto) } -> - stop_motors dev `Abrupt + stop_motors `Abrupt | Manual(_, settings_l, settings_r) when (settings_l.direction = `Forward && settings_l.velocity > 0) || (settings_r.direction = `Forward && settings_r.velocity > 0) -> - stop_motors dev `Abrupt + stop_motors `Abrupt | _ -> return () - let set_inhibit_backward_until dev delay = + let set_inhibit_backward_until delay = let until = Unix.gettimeofday () +. delay in - Var.set dev.inhibit_backward_until until; - match Var.get dev.state with + Var.set inhibit_backward_until until; + match Var.get state with | Trajectory{ trajectory = `Backward } -> - stop_motors dev `Abrupt + stop_motors `Abrupt | Manual(_, settings_l, settings_r) when (settings_l.direction = `Backward && settings_l.velocity > 0) || (settings_r.direction = `Backward && settings_r.velocity > 0) -> - stop_motors dev `Abrupt + stop_motors `Abrupt | _ -> return () - let make card path = - let dev = { - obus = - OBus_object.make - ~interfaces:[Export_unsafe.interface "motors" (fun dev -> dev.card); - Krobot_interfaces.Fr_krobot_Device_Motors.make - ~notify_mode:(OBus_object.notify_update "PropertiesChanged") - { - m_Turn = (fun ctx obj (angle, velocity, acceleration) -> - let angle = Int32.to_int angle in - let velocity = Int32.to_int velocity in - let acceleration = Int32.to_int acceleration in - turn obj angle velocity acceleration >|= int32_of_move_result); - m_Move = (fun ctx obj (distance, velocity, acceleration) -> - let distance = Int32.to_int distance in - let velocity = Int32.to_int velocity in - let acceleration = Int32.to_int acceleration in - move obj distance velocity acceleration >|= int32_of_move_result); - m_Goto = (fun ctx obj (x, y, velocity, acceleration, mode, bypass_distance) -> - let x = Int32.to_int x in - let y = Int32.to_int y in - let velocity = Int32.to_int velocity in - let acceleration = Int32.to_int acceleration in - let mode = goto_mode_of_int32 mode in - let bypass_distance = Int32.to_int bypass_distance in - goto obj x y velocity acceleration mode bypass_distance >|= int32_of_move_result); - m_StopMotors = (fun ctx obj mode -> - let mode = stop_mode_of_int32 mode in - stop_motors obj mode); - m_SetVelocities = (fun ctx obj (velocity_l, acceleration_l, velocity_r, acceleration_r, duration) -> - let velocity_l = Int32.to_int velocity_l in - let acceleration_l = Int32.to_int acceleration_l in - let velocity_r = Int32.to_int velocity_r in - let acceleration_r = Int32.to_int acceleration_r in - set_velocities obj (velocity_l, velocity_r) (acceleration_l, acceleration_r) duration); - p_InhibitForwardUntil = ((fun obj -> Var.signal obj.inhibit_forward_until), - (fun ctx -> set_inhibit_forward_until)); - p_InhibitBackwardUntil = ((fun obj -> Var.signal obj.inhibit_backward_until), - (fun ctx -> set_inhibit_backward_until)); - p_State = (fun obj -> state obj); - }] - path; - card = card; - inhibit_forward_until = Var.create 0.0; - inhibit_backward_until = Var.create 0.0; - state = Var.create Static; - traj_completed = - React.E.filter - (fun (cmd, data) -> - cmd = PcInterface.cmd_traj - && Char.code data.[0] = PcInterface.traj_completed) - (USBCard.commands card); - } in - OBus_object.attach dev.obus dev; - return dev + let () = + OBus_object.add_interface obus + (make ~notify_mode + { + m_Turn = (fun ctx () (angle, velocity, acceleration) -> + let angle = Int32.to_int angle in + let velocity = Int32.to_int velocity in + let acceleration = Int32.to_int acceleration in + turn angle velocity acceleration >|= int32_of_move_result); + m_Move = (fun ctx () (distance, velocity, acceleration) -> + let distance = Int32.to_int distance in + let velocity = Int32.to_int velocity in + let acceleration = Int32.to_int acceleration in + move distance velocity acceleration >|= int32_of_move_result); + m_Goto = (fun ctx () (x, y, velocity, acceleration, mode, bypass_distance) -> + let x = Int32.to_int x in + let y = Int32.to_int y in + let velocity = Int32.to_int velocity in + let acceleration = Int32.to_int acceleration in + let mode = goto_mode_of_int32 mode in + let bypass_distance = Int32.to_int bypass_distance in + goto x y velocity acceleration mode bypass_distance >|= int32_of_move_result); + m_StopMotors = (fun ctx () mode -> + let mode = stop_mode_of_int32 mode in + stop_motors mode); + m_SetVelocities = (fun ctx () (velocity_l, acceleration_l, velocity_r, acceleration_r, duration) -> + let velocity_l = Int32.to_int velocity_l in + let acceleration_l = Int32.to_int acceleration_l in + let velocity_r = Int32.to_int velocity_r in + let acceleration_r = Int32.to_int acceleration_r in + set_velocities (velocity_l, velocity_r) (acceleration_l, acceleration_r) duration); + p_InhibitForwardUntil = ((fun () -> Var.signal inhibit_forward_until), + (fun ctx () delay -> set_inhibit_forward_until delay)); + p_InhibitBackwardUntil = ((fun () -> Var.signal inhibit_backward_until), + (fun ctx () delay -> set_inhibit_backward_until delay)); + p_State = (fun () -> state_info); + }) end (* +-----------------------------------------------------------------+ @@ -741,31 +752,19 @@ end let done_waiter, done_wakener = Lwt.wait () let quit = ref false -let card_interface, set_card_interface = React.S.create None -let card_monitoring, set_card_monitoring = React.S.create None -let card_sensor, set_card_sensor = React.S.create None -let card_motor, set_card_motor = React.S.create None module Manager = struct + let obus = OBus_object.make ["fr"; "krobot"; "Manager"] + open Krobot_interfaces.Fr_krobot_Manager - let close card = match React.S.value card with + let close card = match React.S.value card.card_card with | None -> return () | Some card -> USBCard.close card - let card_states manager = - let state card = match React.S.value card with - | Some _ -> `Present - | None -> `Absent - in - return (int32_of_card_state (state card_interface), - int32_of_card_state (state card_sensor), - int32_of_card_state (state card_motor), - int32_of_card_state (state card_monitoring)) - let shutdown ctx manager = lwt () = Lwt_log.info ~section "exiting" in quit := true; @@ -777,19 +776,22 @@ struct Lwt.wakeup done_wakener (); return () - let manager = - let manager = - OBus_object.make - ~interfaces:[Krobot_interfaces.Fr_krobot_Manager.make - ~notify_mode:(OBus_object.notify_update "PropertiesChanged") - { - m_CardStates = (fun ctx obj () -> card_states obj); - m_Shutdown = (fun ctx obj () -> shutdown ctx obj); - }] - ["fr"; "krobot"; "Manager"] - in - OBus_object.attach manager (); - manager + let devices_status = + React.S.map + (fun map -> + String_map.fold + (fun device status acc -> (device, status) :: acc) + map []) + devices_status + + let () = + OBus_object.attach obus (); + OBus_object.add_interface obus + (make ~notify_mode + { + p_DevicesStatus = (fun () -> devices_status); + m_Shutdown = (fun ctx () () -> shutdown ctx ()); + }) end (* +-----------------------------------------------------------------+ @@ -801,46 +803,39 @@ struct open Krobot_interfaces.Fr_krobot_Card type t = { - card : USBCard.t option React.signal; + card : card; obus : t OBus_object.t; - name : string; state : Types.card_state React.signal; mutable errors : unit React.event; } - let get_card dev = match React.S.value dev.card with - | None -> - Printf.ksprintf failwith "%s card is not available" dev.name - | Some card -> - card - let error dev msg = OBus_signal.emit Krobot_interfaces.Fr_krobot_Card.s_Error dev.obus msg let get_firmware_build dev = - USBCard.call Commands.Card.get_firmware_build (get_card dev) () + USBCard.call Commands.Card.get_firmware_build (get_card dev.card) () let get_board_info dev = - USBCard.call Commands.Card.get_board_info (get_card dev) () + USBCard.call Commands.Card.get_board_info (get_card dev.card) () let bootloader dev = - USBCard.call Commands.Card.bootloader (get_card dev) () + USBCard.call Commands.Card.bootloader (get_card dev.card) () let reset dev = - USBCard.call Commands.Card.reset (get_card dev) () + USBCard.call Commands.Card.reset (get_card dev.card) () let test dev = - USBCard.call Commands.Card.test (get_card dev) () + USBCard.call Commands.Card.test (get_card dev.card) () - let make name card path = + let make card path = let dev = { obus = OBus_object.make - ~interfaces:[Export_unsafe.interface "card" get_card; + ~interfaces:[Export_unsafe.interface "Card" card; Krobot_interfaces.Fr_krobot_Card.make ~notify_mode:(OBus_object.notify_update "PropertiesChanged") { - p_Name = (fun obj -> React.S.const name); + p_Name = (fun obj -> React.S.const card.card_name); p_State = (fun obj -> React.S.map int32_of_card_state obj.state); ... [truncated message content] |
From: Jérémie D. <Ba...@us...> - 2010-04-27 20:15:39
|
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "krobot". The branch, master has been updated via 36cc6e499035eb900b2b0ec85e4fc6cd59601fd7 (commit) from 7f938ce8a4ed8e52d7df05366b2a0ebe6124a09b (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 36cc6e499035eb900b2b0ec85e4fc6cd59601fd7 Author: Jérémie Dimino <je...@di...> Date: Tue Apr 27 22:14:36 2010 +0200 fix positions of the grip ----------------------------------------------------------------------- Changes: diff --git a/info/control/driver/driver.ml b/info/control/driver/driver.ml index d68935e..170f447 100644 --- a/info/control/driver/driver.ml +++ b/info/control/driver/driver.ml @@ -223,7 +223,7 @@ struct let grip_up dev = set_ax12 dev [{ aa_id = 1; - aa_position = 880; + aa_position = 190; aa_velocity = 50 }; { aa_id = 2; aa_position = 180; @@ -231,7 +231,7 @@ struct let grip_down dev = set_ax12 dev [{ aa_id = 1; - aa_position = 580; + aa_position = 490; aa_velocity = 50 }; { aa_id = 2; aa_position = 510; hooks/post-receive -- krobot |
From: Xavier L. <Ba...@us...> - 2010-04-27 19:30:56
|
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "krobot". The branch, master has been updated via 7f938ce8a4ed8e52d7df05366b2a0ebe6124a09b (commit) from fef32d7770612f6874cdb3e1a9a625b926922d13 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 7f938ce8a4ed8e52d7df05366b2a0ebe6124a09b Author: Xavier Lagorce <Xav...@cr...> Date: Tue Apr 27 21:30:24 2010 +0200 Renamed holomic drive controller project ----------------------------------------------------------------------- Changes: diff --git a/elec/boards/Controller_HolonomicDrive/Firmware/Makefile b/elec/boards/Controller_HolonomicDrive/Firmware/Makefile index 3e1e571..b736d43 100644 --- a/elec/boards/Controller_HolonomicDrive/Firmware/Makefile +++ b/elec/boards/Controller_HolonomicDrive/Firmware/Makefile @@ -50,7 +50,7 @@ endif # # Define project name here -PROJECT = krobotJr +PROJECT = holonomicDriveControl # Define linker script file here LDSCRIPT= ch.ld hooks/post-receive -- krobot |
From: Jérémie D. <Ba...@us...> - 2010-04-25 21:49:40
|
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "krobot". The branch, master has been updated via 2361d9833025e9db4b753ac074170f70d01292aa (commit) from a5872083e780a6cfd0a3da9600488d4eb2943c36 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 2361d9833025e9db4b753ac074170f70d01292aa Author: Jérémie Dimino <je...@di...> Date: Sun Apr 25 23:48:50 2010 +0200 fix handling of exceptions raised by shutdown ----------------------------------------------------------------------- Changes: diff --git a/info/control/driver/driver.ml b/info/control/driver/driver.ml index 04ec0f2..d68935e 100644 --- a/info/control/driver/driver.ml +++ b/info/control/driver/driver.ml @@ -941,7 +941,7 @@ lwt () = ~o_args:OBus_value.C.seq0 () with - | OBus_bus.Service_unknown _ | OBus_error.No_reply _ -> + | OBus_error.DBus((OBus_bus.Service_unknown | OBus_error.No_reply), _, _) -> return () in hooks/post-receive -- krobot |
From: Xavier L. <Ba...@us...> - 2010-04-24 22:42:54
|
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "krobot". The branch, master has been updated via a5872083e780a6cfd0a3da9600488d4eb2943c36 (commit) from e5f04dce9dd5717a6ad75f7d910d6f7fe51de45a (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit a5872083e780a6cfd0a3da9600488d4eb2943c36 Author: Xavier Lagorce <Xav...@cr...> Date: Sun Apr 25 00:40:57 2010 +0200 Added an homologation trajectory for Krobot Jr wich is triggered when the wake-up button is pressed. ----------------------------------------------------------------------- Changes: diff --git a/elec/boards/MotherBoard_KrobotJr2010/Firmware/main.c b/elec/boards/MotherBoard_KrobotJr2010/Firmware/main.c index efb0f38..c8336d6 100644 --- a/elec/boards/MotherBoard_KrobotJr2010/Firmware/main.c +++ b/elec/boards/MotherBoard_KrobotJr2010/Firmware/main.c @@ -29,59 +29,12 @@ static msg_t Thread1(void *arg) { (void)arg; while (TRUE) { - /*sc_setRefSpeed(MOTOR1, 0); - sc_setRefSpeed(MOTOR2, -360); - sc_setRefSpeed(MOTOR3, 360); - chThdSleepMilliseconds(2000); - - sc_setRefSpeed(MOTOR1, 360); - sc_setRefSpeed(MOTOR2, 0); - sc_setRefSpeed(MOTOR3, -360); - chThdSleepMilliseconds(2000); - - sc_setRefSpeed(MOTOR1, -360); - sc_setRefSpeed(MOTOR2, 360); - sc_setRefSpeed(MOTOR3, 0); - chThdSleepMilliseconds(2000); - - sc_setRefSpeed(MOTOR1, 0); - sc_setRefSpeed(MOTOR2, 0); - sc_setRefSpeed(MOTOR3, 0); palClearPad(IOPORT3, GPIOC_LED); chThdSleepMilliseconds(1000); palSetPad(IOPORT3, GPIOC_LED); chThdSleepMilliseconds(1000); - - sc_setRefSpeed(MOTOR1, 360); - sc_setRefSpeed(MOTOR2, 360); - sc_setRefSpeed(MOTOR3, 360); - chThdSleepMilliseconds(3000); - - sc_setRefSpeed(MOTOR1, 0); - sc_setRefSpeed(MOTOR2, 0); - sc_setRefSpeed(MOTOR3, 0); - chThdSleepMilliseconds(3000); - - sc_setRefSpeed(MOTOR1, -360); - sc_setRefSpeed(MOTOR2, -360); - sc_setRefSpeed(MOTOR3, -360); - chThdSleepMilliseconds(3000); - - sc_setRefSpeed(MOTOR1, 0); - sc_setRefSpeed(MOTOR2, 0); - sc_setRefSpeed(MOTOR3, 0);*/ - - palClearPad(IOPORT3, GPIOC_LED); - chThdSleepMilliseconds(1000); - - palSetPad(IOPORT3, GPIOC_LED); - chThdSleepMilliseconds(1000); - - /*setScrew(0, 200, 0, 0, 60); - chThdSleepMilliseconds(6000); - turn(0);*/ } return 0; } @@ -93,12 +46,55 @@ static void TimerHandler(eventid_t id) { (void)id; if (palReadPad(IOPORT1, GPIOA_BUTTON)) { - /*cputs("Coucou !\r"); - if (TIM_GetCounter(TIM3) == 0) - cputs("c'est nul !\r"); - else - cputs("ca marche (peut etre...)\r"); - fflush(stdout);*/ + + palClearPad(IOPORT3, GPIOC_LED); + chThdSleepMilliseconds(100); + palSetPad(IOPORT3, GPIOC_LED); + chThdSleepMilliseconds(100); + palClearPad(IOPORT3, GPIOC_LED); + chThdSleepMilliseconds(100); + palSetPad(IOPORT3, GPIOC_LED); + chThdSleepMilliseconds(100); + palClearPad(IOPORT3, GPIOC_LED); + chThdSleepMilliseconds(100); + palSetPad(IOPORT3, GPIOC_LED); + + + chThdSleepMilliseconds(5000); + + setScrew(0, 0, 141, 141, 0); + chThdSleepMilliseconds(5000); + + setScrew(0, 0, 0, 0, 0); + chThdSleepMilliseconds(200); + + setScrew(450, 200, 0, 0, 40); + chThdSleepMilliseconds(3000); + + setScrew(0, 0, 0, 0, 0); + chThdSleepMilliseconds(200); + + turn(-60); + chThdSleepMilliseconds(2000); + + setScrew(0, 0, 0, 0, 0); + chThdSleepMilliseconds(200); + + setScrew(0, 0, 200, 0, 0); + chThdSleepMilliseconds(1500); + + setScrew(0, 0, 0, 0, 0); + chThdSleepMilliseconds(200); + + setScrew(0, 0, 0, 200, 0); + chThdSleepMilliseconds(3500); + + setScrew(0, 0, 0, 0, 0); + chThdSleepMilliseconds(200); + + setScrew(0, 0, 282, 282, 0); + chThdSleepMilliseconds(1500); + turn(0); } } hooks/post-receive -- krobot |
From: Xavier L. <Ba...@us...> - 2010-04-24 18:10:22
|
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "krobot". The branch, master has been updated via e5f04dce9dd5717a6ad75f7d910d6f7fe51de45a (commit) from 574aa3475cf92173fd2d20d77a3443649e1d8d4a (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit e5f04dce9dd5717a6ad75f7d910d6f7fe51de45a Author: Xavier Lagorce <Xav...@cr...> Date: Sat Apr 24 20:09:11 2010 +0200 The shell now tell it is from KrobotJr and not ChibiOS/RT (mention of ChibiOS/RT added in the 'info' command) ----------------------------------------------------------------------- Changes: diff --git a/elec/boards/MotherBoard_KrobotJr2010/Firmware/chibios/os/various/shell.c b/elec/boards/MotherBoard_KrobotJr2010/Firmware/chibios/os/various/shell.c index 8a0fd4d..97d6b6d 100644 --- a/elec/boards/MotherBoard_KrobotJr2010/Firmware/chibios/os/various/shell.c +++ b/elec/boards/MotherBoard_KrobotJr2010/Firmware/chibios/os/various/shell.c @@ -84,7 +84,7 @@ static void cmd_info(BaseChannel *chp, int argc, char *argv[]) { usage(chp, "info"); return; } - + shellPrintLine(chp, "Krobot Jr, par ChibiOS/RT"); shellPrint(chp, "Kernel version: "); shellPrintLine(chp, CH_KERNEL_VERSION); #ifdef __GNUC__ @@ -158,9 +158,9 @@ static msg_t shell_thread(void *p) { char *args[SHELL_MAX_ARGUMENTS + 1]; shellPrintLine(chp, ""); - shellPrintLine(chp, "ChibiOS/RT Shell"); + shellPrintLine(chp, "[Kro]bot Jr Shell"); while (TRUE) { - shellPrint(chp, "ch> "); + shellPrint(chp, "KrobotJr> "); if (shellGetLine(chp, line, sizeof(line))) { shellPrint(chp, "\nlogout"); break; hooks/post-receive -- krobot |
From: Xavier L. <Ba...@us...> - 2010-04-24 14:06:09
|
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "krobot". The branch, master has been updated via 574aa3475cf92173fd2d20d77a3443649e1d8d4a (commit) via 23d313403576d39df483e0c4637867520ca9b0a4 (commit) from c30984ce77fc957c1886e457bf46d9f498e622dd (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 574aa3475cf92173fd2d20d77a3443649e1d8d4a Author: Xavier Lagorce <Xav...@cr...> Date: Sat Apr 24 15:56:23 2010 +0200 Added trajectory computation and integration into monitor. The trajectory computation is based on a screw that lets the user define the speed field of the robot with respect to the table. commit 23d313403576d39df483e0c4637867520ca9b0a4 Author: Xavier Lagorce <Xav...@cr...> Date: Sat Apr 24 15:26:56 2010 +0200 Modified the Makefile to display code size at end of compilation. To use it, use : "make size", "make flash" or "make" ----------------------------------------------------------------------- Changes: diff --git a/elec/boards/MotherBoard_KrobotJr2010/Firmware/Makefile b/elec/boards/MotherBoard_KrobotJr2010/Firmware/Makefile index 62b5e6c..3e1e571 100644 --- a/elec/boards/MotherBoard_KrobotJr2010/Firmware/Makefile +++ b/elec/boards/MotherBoard_KrobotJr2010/Firmware/Makefile @@ -82,6 +82,7 @@ CSRC += encoder.c CSRC += motor.c CSRC += cpu_load.c CSRC += speed_control.c +CSRC += trajectory.c CSRC += main.c # C++ sources that can be compiled in ARM or THUMB mode depending on the global @@ -133,11 +134,12 @@ CPPC = $(TRGT)g++ # Enable loading with g++ only if you need C++ runtime support. # NOTE: You can use C++ even without C++ support if you are careful. C++ # runtime support makes code size explode. -LD = $(TRGT)gcc +LD = $(TRGT)gcc -Wl,--gc-sections #LD = $(TRGT)g++ CP = $(TRGT)objcopy AS = $(TRGT)gcc -x assembler-with-cpp OD = $(TRGT)objdump +SIZE = $(TRGT)size HEX = $(CP) -O ihex BIN = $(CP) -O binary @@ -185,7 +187,7 @@ DLIBS = # # List all user C define here, like -D_DEBUG=1 -#UDEFS = -DCH_DBG_ENABLE_STACK_CHECK=1 -DCH_DBG_FILL_THREADS=1 +UDEFS = -DCH_DBG_FILL_THREADS=1 UDEFS = # Define ASM defines here @@ -198,7 +200,7 @@ UINCDIR = ULIBDIR = # List all user libraries here -ULIBS = +ULIBS = -lm # # End of user defines @@ -213,3 +215,11 @@ endif include $(CHIBIOS)/os/ports/GCC/ARM/rules.mk include jtag/flash.mk + +# Display program size at end of compilation +.PHONY:size +size: all + $(SIZE) $(BUILDDIR)/$(PROJECT).elf + +# Prefer compilation with display of program size +.DEFAULT_GOAL := size diff --git a/elec/boards/MotherBoard_KrobotJr2010/Firmware/jtag/flash.mk b/elec/boards/MotherBoard_KrobotJr2010/Firmware/jtag/flash.mk index c29c732..a2a35bb 100644 --- a/elec/boards/MotherBoard_KrobotJr2010/Firmware/jtag/flash.mk +++ b/elec/boards/MotherBoard_KrobotJr2010/Firmware/jtag/flash.mk @@ -1,6 +1,6 @@ # rule to flash the firmware -flash: $(ENSUREBUILDDIR) $(OBJS) $(OUTFILES) +flash: size @cp $(BUILDDIR)/$(PROJECT).bin jtag/fw.bin @cd jtag; openocd -f openocd.cfg -f flash.cfg @rm jtag/fw.bin diff --git a/elec/boards/MotherBoard_KrobotJr2010/Firmware/main.c b/elec/boards/MotherBoard_KrobotJr2010/Firmware/main.c index 46724fa..efb0f38 100644 --- a/elec/boards/MotherBoard_KrobotJr2010/Firmware/main.c +++ b/elec/boards/MotherBoard_KrobotJr2010/Firmware/main.c @@ -15,6 +15,7 @@ #include "encoder.h" #include "cpu_load.h" #include "speed_control.h" +#include "trajectory.h" /* * Global variables @@ -23,12 +24,12 @@ /* * Red LEDs blinker thread, times are in milliseconds. */ -static WORKING_AREA(waThread1, 256); +static WORKING_AREA(waThread1, 1024); static msg_t Thread1(void *arg) { (void)arg; while (TRUE) { - sc_setRefSpeed(MOTOR1, 0); + /*sc_setRefSpeed(MOTOR1, 0); sc_setRefSpeed(MOTOR2, -360); sc_setRefSpeed(MOTOR3, 360); chThdSleepMilliseconds(2000); @@ -70,13 +71,17 @@ static msg_t Thread1(void *arg) { sc_setRefSpeed(MOTOR1, 0); sc_setRefSpeed(MOTOR2, 0); - sc_setRefSpeed(MOTOR3, 0); + sc_setRefSpeed(MOTOR3, 0);*/ palClearPad(IOPORT3, GPIOC_LED); chThdSleepMilliseconds(1000); palSetPad(IOPORT3, GPIOC_LED); chThdSleepMilliseconds(1000); + + /*setScrew(0, 200, 0, 0, 60); + chThdSleepMilliseconds(6000); + turn(0);*/ } return 0; } @@ -88,13 +93,13 @@ static void TimerHandler(eventid_t id) { (void)id; if (palReadPad(IOPORT1, GPIOA_BUTTON)) { - cputs("Coucou !\r"); + /*cputs("Coucou !\r"); if (TIM_GetCounter(TIM3) == 0) cputs("c'est nul !\r"); else cputs("ca marche (peut etre...)\r"); - fflush(stdout); - } + fflush(stdout);*/ + } } /* diff --git a/elec/boards/MotherBoard_KrobotJr2010/Firmware/monitor.c b/elec/boards/MotherBoard_KrobotJr2010/Firmware/monitor.c index e3159f5..a3221cc 100644 --- a/elec/boards/MotherBoard_KrobotJr2010/Firmware/monitor.c +++ b/elec/boards/MotherBoard_KrobotJr2010/Firmware/monitor.c @@ -119,6 +119,43 @@ void setSpeedHandler(BaseChannel *chp, int argc, char* argv[]) { (speed)%10); } +void moveHandler(BaseChannel *chp, int argc, char* argv[]) { + + if (argc != 1) { + shellPrintLine(chp, "Usage : move mode."); + return; + } + switch (argv[0][0]) { + case '1': + setScrew(0, 0, 100, 0, 0); + chThdSleepMilliseconds(2000); + setScrew(0, 0, 0, 100, 0); + chThdSleepMilliseconds(2000); + setScrew(0, 0, -100, 0, 0); + chThdSleepMilliseconds(2000); + setScrew(0, 0, 0, -100, 0); + chThdSleepMilliseconds(2000); + setScrew(0, 0, 0, 0, 0); + break; + case '2': + turn(360); + chThdSleepMilliseconds(1000); + turn(-360); + chThdSleepMilliseconds(1000); + turn(0); + break; + case '3': + setScrew(0, 200, 0, 0, 60); + chThdSleepMilliseconds(6000); + turn(0); + break; + default: + shellPrintLine(chp, "Mode inconnu"); + return; + } +} + + void getSpeedHandler(BaseChannel *chp, int argc, char* argv[]) { int32_t speed; @@ -150,6 +187,7 @@ void getSpeedHandler(BaseChannel *chp, int argc, char* argv[]) { } + /* * Shell configuration variables */ @@ -158,6 +196,7 @@ static const ShellCommand commands[] = { {"load", loadHandler}, {"get", getHandler}, {"setSpeed", setSpeedHandler}, + {"move", moveHandler}, {"getSpeed", getSpeedHandler}, {NULL, NULL} }; diff --git a/elec/boards/MotherBoard_KrobotJr2010/Firmware/monitor.h b/elec/boards/MotherBoard_KrobotJr2010/Firmware/monitor.h index 7651066..7d3b13d 100644 --- a/elec/boards/MotherBoard_KrobotJr2010/Firmware/monitor.h +++ b/elec/boards/MotherBoard_KrobotJr2010/Firmware/monitor.h @@ -22,6 +22,7 @@ #include "motor.h" #include "cpu_load.h" #include "speed_control.h" +#include "trajectory.h" extern Thread *cdtp; diff --git a/elec/boards/MotherBoard_KrobotJr2010/Firmware/trajectory.c b/elec/boards/MotherBoard_KrobotJr2010/Firmware/trajectory.c new file mode 100644 index 0000000..f43aa58 --- /dev/null +++ b/elec/boards/MotherBoard_KrobotJr2010/Firmware/trajectory.c @@ -0,0 +1,33 @@ +/* + * Trajectory generation + * Xavier Lagorce + */ + +#include "trajectory.h" + +void setScrew(int16_t ptX, int16_t ptY, int16_t vX, int16_t vY, int16_t omega) { + + int32_t w1, w2, w3, om, tmp; + + // Real formulas, unusable because of floating point arithmetic... + /*om = (((float)omega)/180.0*M_PI); + + w1 = (int32_t)((-vX - (ptY-SRADIUS)*om)/WRADIUS*180.0/M_PI); + w2 = (int32_t)((vX/2.0+(ptY+SRADIUS/2.0)*om/2.0-(vY-(ptX+SQRT3_2*SRADIUS)*om)*SQRT3_2)/WRADIUS*180.0/M_PI); + w3 = (int32_t)((vX/2.0+(ptY+SRADIUS/2.0)*om/2.0+(vY-(ptX-SQRT3_2*SRADIUS)*om)*SQRT3_2)/WRADIUS*180.0/M_PI);*/ + + om = (((int32_t)omega)*314); + + w1 = (int32_t)((-(int32_t)vX*18000 - ((int32_t)ptY-SRADIUS)*om)/(314*WRADIUS)); + tmp = ((int32_t)vX*18000+((int32_t)ptY+SRADIUS/2)*om)/2; + w2 = (int32_t)((tmp-((int32_t)vY*18000-((int32_t)ptX*10+SQRT3_2*SRADIUS/10)*om/10)*SQRT3_2/100)/(WRADIUS*314)); + w3 = (int32_t)((tmp+((int32_t)vY*18000-((int32_t)ptX*10-SQRT3_2*SRADIUS/10)*om/10)*SQRT3_2/100)/(WRADIUS*314)); + + sc_setRefSpeed(MOTOR1, w1); + sc_setRefSpeed(MOTOR2, w2); + sc_setRefSpeed(MOTOR3, w3); +} + +void turn(int16_t omega) { + setScrew(0, 0, 0, 0, omega); +} diff --git a/elec/boards/MotherBoard_KrobotJr2010/Firmware/trajectory.h b/elec/boards/MotherBoard_KrobotJr2010/Firmware/trajectory.h new file mode 100644 index 0000000..aa13e4d --- /dev/null +++ b/elec/boards/MotherBoard_KrobotJr2010/Firmware/trajectory.h @@ -0,0 +1,23 @@ +/* + * Trajectory generation + * Xavier Lagorce + */ + +#ifndef HEADER__TRAJECTORY +#define HEADER__TRAJECTORY + +#include "ch.h" +#include <math.h> +#include "speed_control.h" + +// Mecanical characteristics +#define SRADIUS 150 // Structural radius (mm) +#define WRADIUS 25 // Wheel radius (mm) + +#define SQRT3_2 87//SQRT3_2 0.866025 // sqrt(3)/2 ... * 100 + +void setScrew(int16_t ptX, int16_t ptY, int16_t vX, int16_t vY, int16_t omega); + +void turn(int16_t omega); + +#endif hooks/post-receive -- krobot |