aboutsummaryrefslogtreecommitdiffhomepage
path: root/workspace
diff options
context:
space:
mode:
authorBen V. Brown <[email protected]>2016-09-30 00:27:55 +1000
committerGitHub <[email protected]>2016-09-30 00:27:55 +1000
commit0b26e669af6d16fbdc5988558a702efdb35c116a (patch)
tree7261e77b4aab68a431c0d9eb3ea2d2056f8ca856 /workspace
parent278d29bf4c53587040c377045cd4e1c1868f5137 (diff)
downloadIronOS-0b26e669af6d16fbdc5988558a702efdb35c116a.tar.gz
IronOS-0b26e669af6d16fbdc5988558a702efdb35c116a.zip
Merge Dev into mainline (#1)v1.0
* Removing USB Need to refine the drive to the iron tip * Update README.md * * Rewrite all code from scratch * Only kept settings * New font * New PID * New Menus * Use Hardware I2C * Faster System * Better Heating Time * No USB * Full Menu System
Diffstat (limited to 'workspace')
-rw-r--r--workspace/ts100/.cproject33
-rw-r--r--workspace/ts100/.gitignore1
-rw-r--r--workspace/ts100/.settings/language.settings.xml27
-rw-r--r--workspace/ts100/LinkerScript.ld6
-rw-r--r--workspace/ts100/STM32_USB-FS-Device_Driver/inc/usb_core.h259
-rw-r--r--workspace/ts100/STM32_USB-FS-Device_Driver/inc/usb_def.h92
-rw-r--r--workspace/ts100/STM32_USB-FS-Device_Driver/inc/usb_init.h62
-rw-r--r--workspace/ts100/STM32_USB-FS-Device_Driver/inc/usb_int.h45
-rw-r--r--workspace/ts100/STM32_USB-FS-Device_Driver/inc/usb_lib.h51
-rw-r--r--workspace/ts100/STM32_USB-FS-Device_Driver/inc/usb_mem.h45
-rw-r--r--workspace/ts100/STM32_USB-FS-Device_Driver/inc/usb_mem1.h32
-rw-r--r--workspace/ts100/STM32_USB-FS-Device_Driver/inc/usb_regs.h685
-rw-r--r--workspace/ts100/STM32_USB-FS-Device_Driver/inc/usb_sil.h47
-rw-r--r--workspace/ts100/STM32_USB-FS-Device_Driver/inc/usb_type.h54
-rw-r--r--workspace/ts100/STM32_USB-FS-Device_Driver/src/usb_core.c1033
-rw-r--r--workspace/ts100/STM32_USB-FS-Device_Driver/src/usb_init.c76
-rw-r--r--workspace/ts100/STM32_USB-FS-Device_Driver/src/usb_int.c195
-rw-r--r--workspace/ts100/STM32_USB-FS-Device_Driver/src/usb_mem.c87
-rw-r--r--workspace/ts100/STM32_USB-FS-Device_Driver/src/usb_regs.c760
-rw-r--r--workspace/ts100/STM32_USB-FS-Device_Driver/src/usb_sil.c103
-rw-r--r--workspace/ts100/inc/APP_Version.h43
-rw-r--r--workspace/ts100/inc/Analog.h20
-rw-r--r--workspace/ts100/inc/Bios.h73
-rw-r--r--workspace/ts100/inc/CTRL.h70
-rw-r--r--workspace/ts100/inc/Disk.h95
-rw-r--r--workspace/ts100/inc/Ext_Flash.h53
-rw-r--r--workspace/ts100/inc/FAT12.h29
-rw-r--r--workspace/ts100/inc/Flash.h29
-rw-r--r--workspace/ts100/inc/Font.h95
-rw-r--r--workspace/ts100/inc/Hardware.h49
-rw-r--r--workspace/ts100/inc/I2C.h23
-rw-r--r--workspace/ts100/inc/Interrupt.h152
-rw-r--r--workspace/ts100/inc/MMA8652FC.h110
-rw-r--r--workspace/ts100/inc/Modes.h36
-rw-r--r--workspace/ts100/inc/Oled.h40
-rw-r--r--workspace/ts100/inc/PID.h21
-rw-r--r--workspace/ts100/inc/S100V0_1.h68
-rw-r--r--workspace/ts100/inc/Settings.h28
-rw-r--r--workspace/ts100/inc/UI.h46
-rw-r--r--workspace/ts100/inc/WordLib.h404
-rw-r--r--workspace/ts100/inc/stm32f10x_conf.h85
-rw-r--r--workspace/ts100/inc/usb_bot.h73
-rw-r--r--workspace/ts100/inc/usb_conf.h73
-rw-r--r--workspace/ts100/inc/usb_desc.h35
-rw-r--r--workspace/ts100/inc/usb_istr.h64
-rw-r--r--workspace/ts100/inc/usb_prop.h51
-rw-r--r--workspace/ts100/inc/usb_pwr.h42
-rw-r--r--workspace/ts100/inc/usb_scsi.h125
-rw-r--r--workspace/ts100/src/2FAT12.c284
-rw-r--r--workspace/ts100/src/Analog.c123
-rw-r--r--workspace/ts100/src/Bios.c334
-rw-r--r--workspace/ts100/src/CTRL.c450
-rw-r--r--workspace/ts100/src/Disk.c773
-rw-r--r--workspace/ts100/src/Ext_Flash.c198
-rw-r--r--workspace/ts100/src/Flash.c33
-rw-r--r--workspace/ts100/src/Hardware.c384
-rw-r--r--workspace/ts100/src/I2C.c359
-rw-r--r--workspace/ts100/src/Interrupt.c191
-rw-r--r--workspace/ts100/src/MMA8652FC.c265
-rw-r--r--workspace/ts100/src/Main.c88
-rw-r--r--workspace/ts100/src/Modes.c282
-rw-r--r--workspace/ts100/src/Oled.c154
-rw-r--r--workspace/ts100/src/PID.c41
-rw-r--r--workspace/ts100/src/Settings.c52
-rw-r--r--workspace/ts100/src/UI.c1036
-rw-r--r--workspace/ts100/src/usb_bot.c269
-rw-r--r--workspace/ts100/src/usb_desc.c109
-rw-r--r--workspace/ts100/src/usb_istr.c138
-rw-r--r--workspace/ts100/src/usb_prop.c262
-rw-r--r--workspace/ts100/src/usb_pwr.c152
-rw-r--r--workspace/ts100/src/usb_scsi.c230
-rw-r--r--workspace/ts100/ts100.cfg4
72 files changed, 1520 insertions, 10416 deletions
diff --git a/workspace/ts100/.cproject b/workspace/ts100/.cproject
index f9e92c1f..e6af6223 100644
--- a/workspace/ts100/.cproject
+++ b/workspace/ts100/.cproject
@@ -14,22 +14,26 @@
</extensions>
</storageModule>
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
- <configuration artifactExtension="elf" artifactName="${ProjName}" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe,org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.debug" cleanCommand="rm -rf" description="" id="fr.ac6.managedbuild.config.gnu.cross.exe.debug.1236130657" name="Debug" parent="fr.ac6.managedbuild.config.gnu.cross.exe.debug" postannouncebuildStep="Generating binary and Printing size information:" postbuildStep="arm-none-eabi-objcopy -O binary &quot;${BuildArtifactFileBaseName}.elf&quot; &quot;${BuildArtifactFileBaseName}.bin&quot;; arm-none-eabi-size &quot;${BuildArtifactFileName}&quot; ">
+ <configuration artifactExtension="elf" artifactName="${ProjName}" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe,org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.debug" cleanCommand="rm -rf" description="" id="fr.ac6.managedbuild.config.gnu.cross.exe.debug.1236130657" name="Debug" parent="fr.ac6.managedbuild.config.gnu.cross.exe.debug" postannouncebuildStep="Generating binary and Printing size information:" postbuildStep="arm-none-eabi-objcopy -O binary &quot;${BuildArtifactFileBaseName}.elf&quot; &quot;${BuildArtifactFileBaseName}.bin&quot;; arm-none-eabi-size &quot;${BuildArtifactFileName}&quot; ;arm-none-eabi-objcopy -O ihex &quot;${BuildArtifactFileBaseName}.elf&quot; &quot;${BuildArtifactFileBaseName}.hex&quot;">
<folderInfo id="fr.ac6.managedbuild.config.gnu.cross.exe.debug.1236130657." name="/" resourcePath="">
<toolChain id="fr.ac6.managedbuild.toolchain.gnu.cross.exe.debug.2123758208" name="Ac6 STM32 MCU GCC" superClass="fr.ac6.managedbuild.toolchain.gnu.cross.exe.debug">
<option id="fr.ac6.managedbuild.option.gnu.cross.mcu.1416828544" name="Mcu" superClass="fr.ac6.managedbuild.option.gnu.cross.mcu" value="STM32F103T8Ux" valueType="string"/>
<option id="fr.ac6.managedbuild.option.gnu.cross.board.1401196546" name="Board" superClass="fr.ac6.managedbuild.option.gnu.cross.board" value="ts100" valueType="string"/>
<targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF" id="fr.ac6.managedbuild.targetPlatform.gnu.cross.1811524023" isAbstract="false" osList="all" superClass="fr.ac6.managedbuild.targetPlatform.gnu.cross"/>
- <builder buildPath="${workspace_loc:/ts100}/Debug" id="fr.ac6.managedbuild.builder.gnu.cross.727350462" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Gnu Make Builder" superClass="fr.ac6.managedbuild.builder.gnu.cross"/>
+ <builder buildPath="${workspace_loc:/ts100}/Debug" id="fr.ac6.managedbuild.builder.gnu.cross.727350462" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Gnu Make Builder" superClass="fr.ac6.managedbuild.builder.gnu.cross">
+ <outputEntries>
+ <entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="outputPath" name="Debug"/>
+ <entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="outputPath" name="Release"/>
+ </outputEntries>
+ </builder>
<tool id="fr.ac6.managedbuild.tool.gnu.cross.c.compiler.1500724168" name="MCU GCC Compiler" superClass="fr.ac6.managedbuild.tool.gnu.cross.c.compiler">
- <option id="fr.ac6.managedbuild.gnu.c.compiler.option.optimization.level.963224364" name="Optimization Level" superClass="fr.ac6.managedbuild.gnu.c.compiler.option.optimization.level" useByScannerDiscovery="false" value="fr.ac6.managedbuild.gnu.c.optimization.level.size" valueType="enumerated"/>
- <option id="gnu.c.compiler.option.debugging.level.400507088" name="Debug Level" superClass="gnu.c.compiler.option.debugging.level" useByScannerDiscovery="false" value="gnu.c.debugging.level.none" valueType="enumerated"/>
+ <option id="fr.ac6.managedbuild.gnu.c.compiler.option.optimization.level.963224364" name="Optimization Level" superClass="fr.ac6.managedbuild.gnu.c.compiler.option.optimization.level" useByScannerDiscovery="false" value="fr.ac6.managedbuild.gnu.c.optimization.level.more" valueType="enumerated"/>
+ <option id="gnu.c.compiler.option.debugging.level.400507088" name="Debug Level" superClass="gnu.c.compiler.option.debugging.level" useByScannerDiscovery="false" value="gnu.c.debugging.level.max" valueType="enumerated"/>
<option id="gnu.c.compiler.option.include.paths.1436405353" name="Include paths (-I)" superClass="gnu.c.compiler.option.include.paths" useByScannerDiscovery="false" valueType="includePath">
- <listOptionValue builtIn="false" value="&quot;${ProjDirPath}/inc&quot;"/>
- <listOptionValue builtIn="false" value="&quot;${ProjDirPath}/STM32_USB-FS-Device_Driver/inc&quot;"/>
- <listOptionValue builtIn="false" value="&quot;${ProjDirPath}/StdPeriph_Driver/inc&quot;"/>
- <listOptionValue builtIn="false" value="&quot;${ProjDirPath}/CMSIS/core&quot;"/>
- <listOptionValue builtIn="false" value="&quot;${ProjDirPath}/CMSIS/device&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/inc}&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/StdPeriph_Driver/inc}&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/CMSIS/core}&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/CMSIS/device}&quot;"/>
</option>
<option id="gnu.c.compiler.option.preprocessor.def.symbols.1155214152" name="Defined symbols (-D)" superClass="gnu.c.compiler.option.preprocessor.def.symbols" useByScannerDiscovery="false" valueType="definedSymbols">
<listOptionValue builtIn="false" value="STM32F103T8Ux"/>
@@ -45,7 +49,7 @@
</option>
<option id="gnu.c.compiler.option.dialect.std.1983627145" name="Language standard" superClass="gnu.c.compiler.option.dialect.std" useByScannerDiscovery="true" value="gnu.c.compiler.dialect.c11" valueType="enumerated"/>
<option id="gnu.c.compiler.option.warnings.nowarn.1227270879" name="Inhibit all warnings (-w)" superClass="gnu.c.compiler.option.warnings.nowarn" useByScannerDiscovery="false" value="false" valueType="boolean"/>
- <option id="fr.ac6.managedbuild.tool.gnu.cross.c.compiler.fdata.1556802580" superClass="fr.ac6.managedbuild.tool.gnu.cross.c.compiler.fdata" value="true" valueType="boolean"/>
+ <option id="fr.ac6.managedbuild.tool.gnu.cross.c.compiler.fdata.1556802580" name="Place the data in their own section (-fdata-sections)" superClass="fr.ac6.managedbuild.tool.gnu.cross.c.compiler.fdata" useByScannerDiscovery="false" value="true" valueType="boolean"/>
<inputType id="fr.ac6.managedbuild.tool.gnu.cross.c.compiler.input.c.1635097739" superClass="fr.ac6.managedbuild.tool.gnu.cross.c.compiler.input.c"/>
<inputType id="fr.ac6.managedbuild.tool.gnu.cross.c.compiler.input.s.211510996" superClass="fr.ac6.managedbuild.tool.gnu.cross.c.compiler.input.s"/>
</tool>
@@ -65,10 +69,10 @@
<tool id="fr.ac6.managedbuild.tool.gnu.archiver.1926145385" name="MCU GCC Archiver" superClass="fr.ac6.managedbuild.tool.gnu.archiver"/>
<tool id="fr.ac6.managedbuild.tool.gnu.cross.assembler.104990963" name="MCU GCC Assembler" superClass="fr.ac6.managedbuild.tool.gnu.cross.assembler">
<option id="gnu.both.asm.option.include.paths.834243276" name="Include paths (-I)" superClass="gnu.both.asm.option.include.paths" valueType="includePath">
- <listOptionValue builtIn="false" value="&quot;${ProjDirPath}/inc&quot;"/>
- <listOptionValue builtIn="false" value="&quot;${ProjDirPath}/StdPeriph_Driver/inc&quot;"/>
- <listOptionValue builtIn="false" value="&quot;${ProjDirPath}/CMSIS/core&quot;"/>
- <listOptionValue builtIn="false" value="&quot;${ProjDirPath}/CMSIS/device&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/inc}&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/StdPeriph_Driver/inc}&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/CMSIS/core}&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/CMSIS/device}&quot;"/>
</option>
<inputType id="cdt.managedbuild.tool.gnu.assembler.input.1754789872" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
<inputType id="fr.ac6.managedbuild.tool.gnu.cross.assembler.input.610009869" superClass="fr.ac6.managedbuild.tool.gnu.cross.assembler.input"/>
@@ -77,7 +81,6 @@
</folderInfo>
<sourceEntries>
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="CMSIS"/>
- <entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="STM32_USB-FS-Device_Driver"/>
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="StdPeriph_Driver"/>
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="inc"/>
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="src"/>
diff --git a/workspace/ts100/.gitignore b/workspace/ts100/.gitignore
new file mode 100644
index 00000000..3df573fe
--- /dev/null
+++ b/workspace/ts100/.gitignore
@@ -0,0 +1 @@
+/Debug/
diff --git a/workspace/ts100/.settings/language.settings.xml b/workspace/ts100/.settings/language.settings.xml
deleted file mode 100644
index 9cc48e9a..00000000
--- a/workspace/ts100/.settings/language.settings.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<project>
- <configuration id="fr.ac6.managedbuild.config.gnu.cross.exe.debug.1236130657" name="Debug">
- <extension point="org.eclipse.cdt.core.LanguageSettingsProvider">
- <provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/>
- <provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/>
- <provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
- <provider copy-of="extension" id="org.eclipse.cdt.managedbuilder.core.GCCBuildCommandParser"/>
- <provider class="fr.ac6.mcu.ide.build.CrossBuiltinSpecsDetector" console="false" env-hash="-1108237618066810324" id="fr.ac6.mcu.ide.build.CrossBuiltinSpecsDetector" keep-relative-paths="false" name="Ac6 SW4 STM32 MCU Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
- <language-scope id="org.eclipse.cdt.core.gcc"/>
- <language-scope id="org.eclipse.cdt.core.g++"/>
- </provider>
- </extension>
- </configuration>
- <configuration id="fr.ac6.managedbuild.config.gnu.cross.exe.release.1113492345" name="Release">
- <extension point="org.eclipse.cdt.core.LanguageSettingsProvider">
- <provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/>
- <provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/>
- <provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
- <provider copy-of="extension" id="org.eclipse.cdt.managedbuilder.core.GCCBuildCommandParser"/>
- <provider class="fr.ac6.mcu.ide.build.CrossBuiltinSpecsDetector" console="false" env-hash="-1102374516241012504" id="fr.ac6.mcu.ide.build.CrossBuiltinSpecsDetector" keep-relative-paths="false" name="Ac6 SW4 STM32 MCU Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
- <language-scope id="org.eclipse.cdt.core.gcc"/>
- <language-scope id="org.eclipse.cdt.core.g++"/>
- </provider>
- </extension>
- </configuration>
-</project>
diff --git a/workspace/ts100/LinkerScript.ld b/workspace/ts100/LinkerScript.ld
index 80516a9f..cc040105 100644
--- a/workspace/ts100/LinkerScript.ld
+++ b/workspace/ts100/LinkerScript.ld
@@ -62,9 +62,11 @@ _Min_Stack_Size = 0x400; /* required amount of stack */
MEMORY
{
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 20K
- ROM (rx) : ORIGIN = 0x08004000, LENGTH = 36K
+ ROM (rx) : ORIGIN = 0x08004000, LENGTH = 47K
+
}
-/*^ The rom is shortened as the last ~10K is used for storing the virtual USB Disk, and the offset at the beginning in the bootloader*/
+/*ROM (rx) : ORIGIN = 0x08004000, LENGTH = 48K*/
+/*^ The offset at the beginning in the bootloader, 1K at the end for settings (actually 256 bytes, but leaving room for now)*/
/* Sections */
SECTIONS
{
diff --git a/workspace/ts100/STM32_USB-FS-Device_Driver/inc/usb_core.h b/workspace/ts100/STM32_USB-FS-Device_Driver/inc/usb_core.h
deleted file mode 100644
index ac95cc58..00000000
--- a/workspace/ts100/STM32_USB-FS-Device_Driver/inc/usb_core.h
+++ /dev/null
@@ -1,259 +0,0 @@
-/**
- ******************************************************************************
- * @file usb_core.h
- * @author MCD Application Team
- * @version V4.0.0
- * @date 28-August-2012
- * @brief Standard protocol processing functions prototypes
- ******************************************************************************
- * @attention
- *
- * <h2><center>&copy; COPYRIGHT 2012 STMicroelectronics</center></h2>
- *
- * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
- * You may not use this file except in compliance with the License.
- * You may obtain a copy of the License at:
- *
- * http://www.st.com/software_license_agreement_liberty_v2
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- ******************************************************************************
- */
-
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __USB_CORE_H
-#define __USB_CORE_H
-
-/* Includes ------------------------------------------------------------------*/
-/* Exported types ------------------------------------------------------------*/
-typedef enum _CONTROL_STATE
-{
- WAIT_SETUP, /* 0 */
- SETTING_UP, /* 1 */
- IN_DATA, /* 2 */
- OUT_DATA, /* 3 */
- LAST_IN_DATA, /* 4 */
- LAST_OUT_DATA, /* 5 */
- WAIT_STATUS_IN, /* 7 */
- WAIT_STATUS_OUT, /* 8 */
- STALLED, /* 9 */
- PAUSE /* 10 */
-} CONTROL_STATE; /* The state machine states of a control pipe */
-
-typedef struct OneDescriptor
-{
- uint8_t *Descriptor;
- uint16_t Descriptor_Size;
-}
-ONE_DESCRIPTOR, *PONE_DESCRIPTOR;
-/* All the request process routines return a value of this type
- If the return value is not SUCCESS or NOT_READY,
- the software will STALL the correspond endpoint */
-typedef enum _RESULT
-{
- USB_SUCCESS = 0, /* Process successfully */
- USB_ERROR,
- USB_UNSUPPORT,
- USB_NOT_READY /* The process has not been finished, endpoint will be
- NAK to further request */
-} RESULT;
-
-
-/*-*-*-*-*-*-*-*-*-*-* Definitions for endpoint level -*-*-*-*-*-*-*-*-*-*-*-*/
-typedef struct _ENDPOINT_INFO
-{
- /* When send data out of the device,
- CopyData() is used to get data buffer 'Length' bytes data
- if Length is 0,
- CopyData() returns the total length of the data
- if the request is not supported, returns 0
- (NEW Feature )
- if CopyData() returns -1, the calling routine should not proceed
- further and will resume the SETUP process by the class device
- if Length is not 0,
- CopyData() returns a pointer to indicate the data location
- Usb_wLength is the data remain to be sent,
- Usb_wOffset is the Offset of original data
- When receive data from the host,
- CopyData() is used to get user data buffer which is capable
- of Length bytes data to copy data from the endpoint buffer.
- if Length is 0,
- CopyData() returns the available data length,
- if Length is not 0,
- CopyData() returns user buffer address
- Usb_rLength is the data remain to be received,
- Usb_rPointer is the Offset of data buffer
- */
- uint16_t Usb_wLength;
- uint16_t Usb_wOffset;
- uint16_t PacketSize;
- uint8_t *(*CopyData)(uint16_t Length);
-}ENDPOINT_INFO;
-
-/*-*-*-*-*-*-*-*-*-*-*-* Definitions for device level -*-*-*-*-*-*-*-*-*-*-*-*/
-
-typedef struct _DEVICE
-{
- uint8_t Total_Endpoint; /* Number of endpoints that are used */
- uint8_t Total_Configuration;/* Number of configuration available */
-}
-DEVICE;
-
-typedef union
-{
- uint16_t w;
- struct BW
- {
- uint8_t bb1;
- uint8_t bb0;
- }
- bw;
-} uint16_t_uint8_t;
-
-typedef struct _DEVICE_INFO
-{
- uint8_t USBbmRequestType; /* bmRequestType */
- uint8_t USBbRequest; /* bRequest */
- uint16_t_uint8_t USBwValues; /* wValue */
- uint16_t_uint8_t USBwIndexs; /* wIndex */
- uint16_t_uint8_t USBwLengths; /* wLength */
-
- uint8_t ControlState; /* of type CONTROL_STATE */
- uint8_t Current_Feature;
- uint8_t Current_Configuration; /* Selected configuration */
- uint8_t Current_Interface; /* Selected interface of current configuration */
- uint8_t Current_AlternateSetting;/* Selected Alternate Setting of current
- interface*/
-
- ENDPOINT_INFO Ctrl_Info;
-}DEVICE_INFO;
-
-typedef struct _DEVICE_PROP
-{
- void (*Init)(void); /* Initialize the device */
- void (*Reset)(void); /* Reset routine of this device */
-
- /* Device dependent process after the status stage */
- void (*Process_Status_IN)(void);
- void (*Process_Status_OUT)(void);
-
- /* Procedure of process on setup stage of a class specified request with data stage */
- /* All class specified requests with data stage are processed in Class_Data_Setup
- Class_Data_Setup()
- responses to check all special requests and fills ENDPOINT_INFO
- according to the request
- If IN tokens are expected, then wLength & wOffset will be filled
- with the total transferring bytes and the starting position
- If OUT tokens are expected, then rLength & rOffset will be filled
- with the total expected bytes and the starting position in the buffer
-
- If the request is valid, Class_Data_Setup returns SUCCESS, else UNSUPPORT
-
- CAUTION:
- Since GET_CONFIGURATION & GET_INTERFACE are highly related to
- the individual classes, they will be checked and processed here.
- */
- RESULT (*Class_Data_Setup)(uint8_t RequestNo);
-
- /* Procedure of process on setup stage of a class specified request without data stage */
- /* All class specified requests without data stage are processed in Class_NoData_Setup
- Class_NoData_Setup
- responses to check all special requests and perform the request
-
- CAUTION:
- Since SET_CONFIGURATION & SET_INTERFACE are highly related to
- the individual classes, they will be checked and processed here.
- */
- RESULT (*Class_NoData_Setup)(uint8_t RequestNo);
-
- /*Class_Get_Interface_Setting
- This function is used by the file usb_core.c to test if the selected Interface
- and Alternate Setting (uint8_t Interface, uint8_t AlternateSetting) are supported by
- the application.
- This function is writing by user. It should return "SUCCESS" if the Interface
- and Alternate Setting are supported by the application or "UNSUPPORT" if they
- are not supported. */
-
- RESULT (*Class_Get_Interface_Setting)(uint8_t Interface, uint8_t AlternateSetting);
-
- uint8_t* (*GetDeviceDescriptor)(uint16_t Length);
- uint8_t* (*GetConfigDescriptor)(uint16_t Length);
- uint8_t* (*GetStringDescriptor)(uint16_t Length);
-
- /* This field is not used in current library version. It is kept only for
- compatibility with previous versions */
- void* RxEP_buffer;
-
- uint8_t MaxPacketSize;
-
-}DEVICE_PROP;
-
-typedef struct _USER_STANDARD_REQUESTS
-{
- void (*User_GetConfiguration)(void); /* Get Configuration */
- void (*User_SetConfiguration)(void); /* Set Configuration */
- void (*User_GetInterface)(void); /* Get Interface */
- void (*User_SetInterface)(void); /* Set Interface */
- void (*User_GetStatus)(void); /* Get Status */
- void (*User_ClearFeature)(void); /* Clear Feature */
- void (*User_SetEndPointFeature)(void); /* Set Endpoint Feature */
- void (*User_SetDeviceFeature)(void); /* Set Device Feature */
- void (*User_SetDeviceAddress)(void); /* Set Device Address */
-}
-USER_STANDARD_REQUESTS;
-
-/* Exported constants --------------------------------------------------------*/
-#define Type_Recipient (pInformation->USBbmRequestType & (REQUEST_TYPE | RECIPIENT))
-
-#define Usb_rLength Usb_wLength
-#define Usb_rOffset Usb_wOffset
-
-#define USBwValue USBwValues.w
-#define USBwValue0 USBwValues.bw.bb0
-#define USBwValue1 USBwValues.bw.bb1
-#define USBwIndex USBwIndexs.w
-#define USBwIndex0 USBwIndexs.bw.bb0
-#define USBwIndex1 USBwIndexs.bw.bb1
-#define USBwLength USBwLengths.w
-#define USBwLength0 USBwLengths.bw.bb0
-#define USBwLength1 USBwLengths.bw.bb1
-
-/* Exported macro ------------------------------------------------------------*/
-/* Exported functions ------------------------------------------------------- */
-uint8_t Setup0_Process(void);
-uint8_t Post0_Process(void);
-uint8_t Out0_Process(void);
-uint8_t In0_Process(void);
-
-RESULT Standard_SetEndPointFeature(void);
-RESULT Standard_SetDeviceFeature(void);
-
-uint8_t *Standard_GetConfiguration(uint16_t Length);
-RESULT Standard_SetConfiguration(void);
-uint8_t *Standard_GetInterface(uint16_t Length);
-RESULT Standard_SetInterface(void);
-uint8_t *Standard_GetDescriptorData(uint16_t Length, PONE_DESCRIPTOR pDesc);
-
-uint8_t *Standard_GetStatus(uint16_t Length);
-RESULT Standard_ClearFeature(void);
-void SetDeviceAddress(uint8_t);
-void NOP_Process(void);
-
-extern DEVICE_PROP Device_Property;
-extern USER_STANDARD_REQUESTS User_Standard_Requests;
-extern DEVICE Device_Table;
-extern DEVICE_INFO Device_Info;
-
-/* cells saving status during interrupt servicing */
-extern volatile uint16_t SaveRState;
-extern volatile uint16_t SaveTState;
-
-#endif /* __USB_CORE_H */
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/workspace/ts100/STM32_USB-FS-Device_Driver/inc/usb_def.h b/workspace/ts100/STM32_USB-FS-Device_Driver/inc/usb_def.h
deleted file mode 100644
index 9c5c53fa..00000000
--- a/workspace/ts100/STM32_USB-FS-Device_Driver/inc/usb_def.h
+++ /dev/null
@@ -1,92 +0,0 @@
-/**
- ******************************************************************************
- * @file usb_def.h
- * @author MCD Application Team
- * @version V4.0.0
- * @date 28-August-2012
- * @brief Definitions related to USB Core
- ******************************************************************************
- * @attention
- *
- * <h2><center>&copy; COPYRIGHT 2012 STMicroelectronics</center></h2>
- *
- * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
- * You may not use this file except in compliance with the License.
- * You may obtain a copy of the License at:
- *
- * http://www.st.com/software_license_agreement_liberty_v2
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- ******************************************************************************
- */
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __USB_DEF_H
-#define __USB_DEF_H
-
-/* Includes ------------------------------------------------------------------*/
-/* Exported types ------------------------------------------------------------*/
-typedef enum _RECIPIENT_TYPE
-{
- DEVICE_RECIPIENT, /* Recipient device */
- INTERFACE_RECIPIENT, /* Recipient interface */
- ENDPOINT_RECIPIENT, /* Recipient endpoint */
- OTHER_RECIPIENT
-} RECIPIENT_TYPE;
-
-
-typedef enum _STANDARD_REQUESTS
-{
- GET_STATUS = 0,
- CLEAR_FEATURE,
- RESERVED1,
- SET_FEATURE,
- RESERVED2,
- SET_ADDRESS,
- GET_DESCRIPTOR,
- SET_DESCRIPTOR,
- GET_CONFIGURATION,
- SET_CONFIGURATION,
- GET_INTERFACE,
- SET_INTERFACE,
- TOTAL_sREQUEST, /* Total number of Standard request */
- SYNCH_FRAME = 12
-} STANDARD_REQUESTS;
-
-/* Definition of "USBwValue" */
-typedef enum _DESCRIPTOR_TYPE
-{
- DEVICE_DESCRIPTOR = 1,
- CONFIG_DESCRIPTOR,
- STRING_DESCRIPTOR,
- INTERFACE_DESCRIPTOR,
- ENDPOINT_DESCRIPTOR
-} DESCRIPTOR_TYPE;
-
-/* Feature selector of a SET_FEATURE or CLEAR_FEATURE */
-typedef enum _FEATURE_SELECTOR
-{
- ENDPOINT_STALL,
- DEVICE_REMOTE_WAKEUP
-} FEATURE_SELECTOR;
-
-/* Exported constants --------------------------------------------------------*/
-/* Definition of "USBbmRequestType" */
-#define REQUEST_TYPE 0x60 /* Mask to get request type */
-#define STANDARD_REQUEST 0x00 /* Standard request */
-#define CLASS_REQUEST 0x20 /* Class request */
-#define VENDOR_REQUEST 0x40 /* Vendor request */
-
-#define RECIPIENT 0x1F /* Mask to get recipient */
-
-/* Exported macro ------------------------------------------------------------*/
-/* Exported functions ------------------------------------------------------- */
-
-#endif /* __USB_DEF_H */
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/workspace/ts100/STM32_USB-FS-Device_Driver/inc/usb_init.h b/workspace/ts100/STM32_USB-FS-Device_Driver/inc/usb_init.h
deleted file mode 100644
index 2c11fa60..00000000
--- a/workspace/ts100/STM32_USB-FS-Device_Driver/inc/usb_init.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/**
- ******************************************************************************
- * @file usb_init.h
- * @author MCD Application Team
- * @version V4.0.0
- * @date 28-August-2012
- * @brief Initialization routines & global variables
- ******************************************************************************
- * @attention
- *
- * <h2><center>&copy; COPYRIGHT 2012 STMicroelectronics</center></h2>
- *
- * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
- * You may not use this file except in compliance with the License.
- * You may obtain a copy of the License at:
- *
- * http://www.st.com/software_license_agreement_liberty_v2
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- ******************************************************************************
- */
-
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __USB_INIT_H
-#define __USB_INIT_H
-
-/* Includes ------------------------------------------------------------------*/
-/* Exported types ------------------------------------------------------------*/
-/* Exported constants --------------------------------------------------------*/
-/* Exported macro ------------------------------------------------------------*/
-/* Exported functions ------------------------------------------------------- */
-void USB_Init(void);
-
-/* External variables --------------------------------------------------------*/
-/* The number of current endpoint, it will be used to specify an endpoint */
-extern uint8_t EPindex;
-/* The number of current device, it is an index to the Device_Table */
-/*extern uint8_t Device_no; */
-/* Points to the DEVICE_INFO structure of current device */
-/* The purpose of this register is to speed up the execution */
-extern DEVICE_INFO* pInformation;
-/* Points to the DEVICE_PROP structure of current device */
-/* The purpose of this register is to speed up the execution */
-extern DEVICE_PROP* pProperty;
-/* Temporary save the state of Rx & Tx status. */
-/* Whenever the Rx or Tx state is changed, its value is saved */
-/* in this variable first and will be set to the EPRB or EPRA */
-/* at the end of interrupt process */
-extern USER_STANDARD_REQUESTS *pUser_Standard_Requests;
-
-extern uint16_t SaveState ;
-extern uint16_t wInterrupt_Mask;
-
-#endif /* __USB_INIT_H */
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/workspace/ts100/STM32_USB-FS-Device_Driver/inc/usb_int.h b/workspace/ts100/STM32_USB-FS-Device_Driver/inc/usb_int.h
deleted file mode 100644
index 5aea1231..00000000
--- a/workspace/ts100/STM32_USB-FS-Device_Driver/inc/usb_int.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/**
- ******************************************************************************
- * @file usb_int.h
- * @author MCD Application Team
- * @version V4.0.0
- * @date 28-August-2012
- * @brief Endpoint CTR (Low and High) interrupt's service routines prototypes
- ******************************************************************************
- * @attention
- *
- * <h2><center>&copy; COPYRIGHT 2012 STMicroelectronics</center></h2>
- *
- * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
- * You may not use this file except in compliance with the License.
- * You may obtain a copy of the License at:
- *
- * http://www.st.com/software_license_agreement_liberty_v2
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- ******************************************************************************
- */
-
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __USB_INT_H
-#define __USB_INT_H
-
-/* Includes ------------------------------------------------------------------*/
-/* Exported types ------------------------------------------------------------*/
-/* Exported constants --------------------------------------------------------*/
-/* Exported macro ------------------------------------------------------------*/
-/* Exported functions ------------------------------------------------------- */
-void CTR_LP(void);
-void CTR_HP(void);
-
-/* External variables --------------------------------------------------------*/
-
-#endif /* __USB_INT_H */
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/workspace/ts100/STM32_USB-FS-Device_Driver/inc/usb_lib.h b/workspace/ts100/STM32_USB-FS-Device_Driver/inc/usb_lib.h
deleted file mode 100644
index d8f79be5..00000000
--- a/workspace/ts100/STM32_USB-FS-Device_Driver/inc/usb_lib.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/**
- ******************************************************************************
- * @file usb_lib.h
- * @author MCD Application Team
- * @version V4.0.0
- * @date 28-August-2012
- * @brief USB library include files
- ******************************************************************************
- * @attention
- *
- * <h2><center>&copy; COPYRIGHT 2012 STMicroelectronics</center></h2>
- *
- * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
- * You may not use this file except in compliance with the License.
- * You may obtain a copy of the License at:
- *
- * http://www.st.com/software_license_agreement_liberty_v2
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- ******************************************************************************
- */
-
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __USB_LIB_H
-#define __USB_LIB_H
-
-/* Includes ------------------------------------------------------------------*/
-#include "usb_type.h"
-#include "usb_regs.h"
-#include "usb_def.h"
-#include "usb_core.h"
-#include "usb_init.h"
-#include "usb_sil.h"
-#include "usb_mem.h"
-#include "usb_int.h"
-
-/* Exported types ------------------------------------------------------------*/
-/* Exported constants --------------------------------------------------------*/
-/* Exported macro ------------------------------------------------------------*/
-/* Exported functions ------------------------------------------------------- */
-/* External variables --------------------------------------------------------*/
-
-#endif /* __USB_LIB_H */
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/workspace/ts100/STM32_USB-FS-Device_Driver/inc/usb_mem.h b/workspace/ts100/STM32_USB-FS-Device_Driver/inc/usb_mem.h
deleted file mode 100644
index aeb8635e..00000000
--- a/workspace/ts100/STM32_USB-FS-Device_Driver/inc/usb_mem.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/**
- ******************************************************************************
- * @file usb_mem.h
- * @author MCD Application Team
- * @version V4.0.0
- * @date 28-August-2012
- * @brief Utility prototypes functions for memory/PMA transfers
- ******************************************************************************
- * @attention
- *
- * <h2><center>&copy; COPYRIGHT 2012 STMicroelectronics</center></h2>
- *
- * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
- * You may not use this file except in compliance with the License.
- * You may obtain a copy of the License at:
- *
- * http://www.st.com/software_license_agreement_liberty_v2
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- ******************************************************************************
- */
-
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __USB_MEM_H
-#define __USB_MEM_H
-
-/* Includes ------------------------------------------------------------------*/
-/* Exported types ------------------------------------------------------------*/
-/* Exported constants --------------------------------------------------------*/
-/* Exported macro ------------------------------------------------------------*/
-/* Exported functions ------------------------------------------------------- */
-void UserToPMABufferCopy(uint8_t *pbUsrBuf, uint16_t wPMABufAddr, uint16_t wNBytes);
-void PMAToUserBufferCopy(uint8_t *pbUsrBuf, uint16_t wPMABufAddr, uint16_t wNBytes);
-
-/* External variables --------------------------------------------------------*/
-
-#endif /*__USB_MEM_H*/
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/workspace/ts100/STM32_USB-FS-Device_Driver/inc/usb_mem1.h b/workspace/ts100/STM32_USB-FS-Device_Driver/inc/usb_mem1.h
deleted file mode 100644
index cd489ed2..00000000
--- a/workspace/ts100/STM32_USB-FS-Device_Driver/inc/usb_mem1.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/******************** (C) COPYRIGHT 2007 STMicroelectronics ********************
-* File Name : usb_mem.h
-* Author : MCD Application Team
-* Version : V1.0
-* Date : 10/08/2007
-* Description : Utility prototypes functions for memory/PMA transfers
-********************************************************************************
-* THE PRESENT SOFTWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
-* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
-* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
-* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
-* CONTENT OF SUCH SOFTWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
-* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
-*******************************************************************************/
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __USB_MEM_H
-#define __USB_MEM_H
-
-/* Includes ------------------------------------------------------------------*/
-/* Exported types ------------------------------------------------------------*/
-/* Exported constants --------------------------------------------------------*/
-/* Exported macro ------------------------------------------------------------*/
-/* Exported functions ------------------------------------------------------- */
-void UserToPMABufferCopy(uint8_t *pbUsrBuf, uint16_t wPMABufAddr, uint16_t wNBytes);
-void PMAToUserBufferCopy(uint8_t *pbUsrBuf, uint16_t wPMABufAddr, uint16_t wNBytes);
-
-/* External variables --------------------------------------------------------*/
-
-#endif /*__USB_MEM_H*/
-
-/******************* (C) COPYRIGHT 2007 STMicroelectronics *****END OF FILE****/
diff --git a/workspace/ts100/STM32_USB-FS-Device_Driver/inc/usb_regs.h b/workspace/ts100/STM32_USB-FS-Device_Driver/inc/usb_regs.h
deleted file mode 100644
index c31c806e..00000000
--- a/workspace/ts100/STM32_USB-FS-Device_Driver/inc/usb_regs.h
+++ /dev/null
@@ -1,685 +0,0 @@
-/**
- ******************************************************************************
- * @file usb_regs.h
- * @author MCD Application Team
- * @version V4.0.0
- * @date 28-August-2012
- * @brief Interface prototype functions to USB cell registers
- ******************************************************************************
- * @attention
- *
- * <h2><center>&copy; COPYRIGHT 2012 STMicroelectronics</center></h2>
- *
- * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
- * You may not use this file except in compliance with the License.
- * You may obtain a copy of the License at:
- *
- * http://www.st.com/software_license_agreement_liberty_v2
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- ******************************************************************************
- */
-
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __USB_REGS_H
-#define __USB_REGS_H
-
-/* Includes ------------------------------------------------------------------*/
-#ifdef STM32F30X
- #include "stm32f30x.h"
-#else
- #include "stm32f10x.h"
-#endif
-/* Exported types ------------------------------------------------------------*/
-typedef enum _EP_DBUF_DIR
-{
- /* double buffered endpoint direction */
- EP_DBUF_ERR,
- EP_DBUF_OUT,
- EP_DBUF_IN
-}EP_DBUF_DIR;
-
-/* endpoint buffer number */
-enum EP_BUF_NUM
-{
- EP_NOBUF,
- EP_BUF0,
- EP_BUF1
-};
-
-/* Exported constants --------------------------------------------------------*/
-#define RegBase (0x40005C00L) /* USB_IP Peripheral Registers base address */
-#define PMAAddr (0x40006000L) /* USB_IP Packet Memory Area base address */
-
-/******************************************************************************/
-/* General registers */
-/******************************************************************************/
-
-/* Control register */
-#define CNTR ((__IO unsigned *)(RegBase + 0x40))
-/* Interrupt status register */
-#define ISTR ((__IO unsigned *)(RegBase + 0x44))
-/* Frame number register */
-#define FNR ((__IO unsigned *)(RegBase + 0x48))
-/* Device address register */
-#define DADDR ((__IO unsigned *)(RegBase + 0x4C))
-/* Buffer Table address register */
-#define BTABLE ((__IO unsigned *)(RegBase + 0x50))
-/******************************************************************************/
-/* Endpoint registers */
-/******************************************************************************/
-#define EP0REG ((__IO unsigned *)(RegBase)) /* endpoint 0 register address */
-
-/* Endpoint Addresses (w/direction) */
-#define EP0_OUT ((uint8_t)0x00)
-#define EP0_IN ((uint8_t)0x80)
-#define EP1_OUT ((uint8_t)0x01)
-#define EP1_IN ((uint8_t)0x81)
-#define EP2_OUT ((uint8_t)0x02)
-#define EP2_IN ((uint8_t)0x82)
-#define EP3_OUT ((uint8_t)0x03)
-#define EP3_IN ((uint8_t)0x83)
-#define EP4_OUT ((uint8_t)0x04)
-#define EP4_IN ((uint8_t)0x84)
-#define EP5_OUT ((uint8_t)0x05)
-#define EP5_IN ((uint8_t)0x85)
-#define EP6_OUT ((uint8_t)0x06)
-#define EP6_IN ((uint8_t)0x86)
-#define EP7_OUT ((uint8_t)0x07)
-#define EP7_IN ((uint8_t)0x87)
-
-/* endpoints enumeration */
-#define ENDP0 ((uint8_t)0)
-#define ENDP1 ((uint8_t)1)
-#define ENDP2 ((uint8_t)2)
-#define ENDP3 ((uint8_t)3)
-#define ENDP4 ((uint8_t)4)
-#define ENDP5 ((uint8_t)5)
-#define ENDP6 ((uint8_t)6)
-#define ENDP7 ((uint8_t)7)
-
-/******************************************************************************/
-/* ISTR interrupt events */
-/******************************************************************************/
-#define ISTR_CTR (0x8000) /* Correct TRansfer (clear-only bit) */
-#define ISTR_DOVR (0x4000) /* DMA OVeR/underrun (clear-only bit) */
-#define ISTR_ERR (0x2000) /* ERRor (clear-only bit) */
-#define ISTR_WKUP (0x1000) /* WaKe UP (clear-only bit) */
-#define ISTR_SUSP (0x0800) /* SUSPend (clear-only bit) */
-#define ISTR_RESET (0x0400) /* RESET (clear-only bit) */
-#define ISTR_SOF (0x0200) /* Start Of Frame (clear-only bit) */
-#define ISTR_ESOF (0x0100) /* Expected Start Of Frame (clear-only bit) */
-
-
-#define ISTR_DIR (0x0010) /* DIRection of transaction (read-only bit) */
-#define ISTR_EP_ID (0x000F) /* EndPoint IDentifier (read-only bit) */
-
-#define CLR_CTR (~ISTR_CTR) /* clear Correct TRansfer bit */
-#define CLR_DOVR (~ISTR_DOVR) /* clear DMA OVeR/underrun bit*/
-#define CLR_ERR (~ISTR_ERR) /* clear ERRor bit */
-#define CLR_WKUP (~ISTR_WKUP) /* clear WaKe UP bit */
-#define CLR_SUSP (~ISTR_SUSP) /* clear SUSPend bit */
-#define CLR_RESET (~ISTR_RESET) /* clear RESET bit */
-#define CLR_SOF (~ISTR_SOF) /* clear Start Of Frame bit */
-#define CLR_ESOF (~ISTR_ESOF) /* clear Expected Start Of Frame bit */
-
-/******************************************************************************/
-/* CNTR control register bits definitions */
-/******************************************************************************/
-#define CNTR_CTRM (0x8000) /* Correct TRansfer Mask */
-#define CNTR_DOVRM (0x4000) /* DMA OVeR/underrun Mask */
-#define CNTR_ERRM (0x2000) /* ERRor Mask */
-#define CNTR_WKUPM (0x1000) /* WaKe UP Mask */
-#define CNTR_SUSPM (0x0800) /* SUSPend Mask */
-#define CNTR_RESETM (0x0400) /* RESET Mask */
-#define CNTR_SOFM (0x0200) /* Start Of Frame Mask */
-#define CNTR_ESOFM (0x0100) /* Expected Start Of Frame Mask */
-
-
-#define CNTR_RESUME (0x0010) /* RESUME request */
-#define CNTR_FSUSP (0x0008) /* Force SUSPend */
-#define CNTR_LPMODE (0x0004) /* Low-power MODE */
-#define CNTR_PDWN (0x0002) /* Power DoWN */
-#define CNTR_FRES (0x0001) /* Force USB RESet */
-
-/******************************************************************************/
-/* FNR Frame Number Register bit definitions */
-/******************************************************************************/
-#define FNR_RXDP (0x8000) /* status of D+ data line */
-#define FNR_RXDM (0x4000) /* status of D- data line */
-#define FNR_LCK (0x2000) /* LoCKed */
-#define FNR_LSOF (0x1800) /* Lost SOF */
-#define FNR_FN (0x07FF) /* Frame Number */
-/******************************************************************************/
-/* DADDR Device ADDRess bit definitions */
-/******************************************************************************/
-#define DADDR_EF (0x80)
-#define DADDR_ADD (0x7F)
-/******************************************************************************/
-/* Endpoint register */
-/******************************************************************************/
-/* bit positions */
-#define EP_CTR_RX (0x8000) /* EndPoint Correct TRansfer RX */
-#define EP_DTOG_RX (0x4000) /* EndPoint Data TOGGLE RX */
-#define EPRX_STAT (0x3000) /* EndPoint RX STATus bit field */
-#define EP_SETUP (0x0800) /* EndPoint SETUP */
-#define EP_T_FIELD (0x0600) /* EndPoint TYPE */
-#define EP_KIND (0x0100) /* EndPoint KIND */
-#define EP_CTR_TX (0x0080) /* EndPoint Correct TRansfer TX */
-#define EP_DTOG_TX (0x0040) /* EndPoint Data TOGGLE TX */
-#define EPTX_STAT (0x0030) /* EndPoint TX STATus bit field */
-#define EPADDR_FIELD (0x000F) /* EndPoint ADDRess FIELD */
-
-/* EndPoint REGister MASK (no toggle fields) */
-#define EPREG_MASK (EP_CTR_RX|EP_SETUP|EP_T_FIELD|EP_KIND|EP_CTR_TX|EPADDR_FIELD)
-
-/* EP_TYPE[1:0] EndPoint TYPE */
-#define EP_TYPE_MASK (0x0600) /* EndPoint TYPE Mask */
-#define EP_BULK (0x0000) /* EndPoint BULK */
-#define EP_CONTROL (0x0200) /* EndPoint CONTROL */
-#define EP_ISOCHRONOUS (0x0400) /* EndPoint ISOCHRONOUS */
-#define EP_INTERRUPT (0x0600) /* EndPoint INTERRUPT */
-#define EP_T_MASK (~EP_T_FIELD & EPREG_MASK)
-
-
-/* EP_KIND EndPoint KIND */
-#define EPKIND_MASK (~EP_KIND & EPREG_MASK)
-
-/* STAT_TX[1:0] STATus for TX transfer */
-#define EP_TX_DIS (0x0000) /* EndPoint TX DISabled */
-#define EP_TX_STALL (0x0010) /* EndPoint TX STALLed */
-#define EP_TX_NAK (0x0020) /* EndPoint TX NAKed */
-#define EP_TX_VALID (0x0030) /* EndPoint TX VALID */
-#define EPTX_DTOG1 (0x0010) /* EndPoint TX Data TOGgle bit1 */
-#define EPTX_DTOG2 (0x0020) /* EndPoint TX Data TOGgle bit2 */
-#define EPTX_DTOGMASK (EPTX_STAT|EPREG_MASK)
-
-/* STAT_RX[1:0] STATus for RX transfer */
-#define EP_RX_DIS (0x0000) /* EndPoint RX DISabled */
-#define EP_RX_STALL (0x1000) /* EndPoint RX STALLed */
-#define EP_RX_NAK (0x2000) /* EndPoint RX NAKed */
-#define EP_RX_VALID (0x3000) /* EndPoint RX VALID */
-#define EPRX_DTOG1 (0x1000) /* EndPoint RX Data TOGgle bit1 */
-#define EPRX_DTOG2 (0x2000) /* EndPoint RX Data TOGgle bit1 */
-#define EPRX_DTOGMASK (EPRX_STAT|EPREG_MASK)
-/* Exported macro ------------------------------------------------------------*/
-/* SetCNTR */
-#define _SetCNTR(wRegValue) (*CNTR = (uint16_t)wRegValue)
-
-/* SetISTR */
-#define _SetISTR(wRegValue) (*ISTR = (uint16_t)wRegValue)
-
-/* SetDADDR */
-#define _SetDADDR(wRegValue) (*DADDR = (uint16_t)wRegValue)
-
-/* SetBTABLE */
-#define _SetBTABLE(wRegValue)(*BTABLE = (uint16_t)(wRegValue & 0xFFF8))
-
-/* GetCNTR */
-#define _GetCNTR() ((uint16_t) *CNTR)
-
-/* GetISTR */
-#define _GetISTR() ((uint16_t) *ISTR)
-
-/* GetFNR */
-#define _GetFNR() ((uint16_t) *FNR)
-
-/* GetDADDR */
-#define _GetDADDR() ((uint16_t) *DADDR)
-
-/* GetBTABLE */
-#define _GetBTABLE() ((uint16_t) *BTABLE)
-
-/* SetENDPOINT */
-#define _SetENDPOINT(bEpNum,wRegValue) (*(EP0REG + bEpNum)= \
- (uint16_t)wRegValue)
-
-/* GetENDPOINT */
-#define _GetENDPOINT(bEpNum) ((uint16_t)(*(EP0REG + bEpNum)))
-
-/*******************************************************************************
-* Macro Name : SetEPType
-* Description : sets the type in the endpoint register(bits EP_TYPE[1:0])
-* Input : bEpNum: Endpoint Number.
-* wType
-* Output : None.
-* Return : None.
-*******************************************************************************/
-#define _SetEPType(bEpNum,wType) (_SetENDPOINT(bEpNum,\
- ((_GetENDPOINT(bEpNum) & EP_T_MASK) | wType )))
-
-/*******************************************************************************
-* Macro Name : GetEPType
-* Description : gets the type in the endpoint register(bits EP_TYPE[1:0])
-* Input : bEpNum: Endpoint Number.
-* Output : None.
-* Return : Endpoint Type
-*******************************************************************************/
-#define _GetEPType(bEpNum) (_GetENDPOINT(bEpNum) & EP_T_FIELD)
-
-/*******************************************************************************
-* Macro Name : SetEPTxStatus
-* Description : sets the status for tx transfer (bits STAT_TX[1:0]).
-* Input : bEpNum: Endpoint Number.
-* wState: new state
-* Output : None.
-* Return : None.
-*******************************************************************************/
-#define _SetEPTxStatus(bEpNum,wState) {\
- register uint16_t _wRegVal; \
- _wRegVal = _GetENDPOINT(bEpNum) & EPTX_DTOGMASK;\
- /* toggle first bit ? */ \
- if((EPTX_DTOG1 & wState)!= 0) \
- _wRegVal ^= EPTX_DTOG1; \
- /* toggle second bit ? */ \
- if((EPTX_DTOG2 & wState)!= 0) \
- _wRegVal ^= EPTX_DTOG2; \
- _SetENDPOINT(bEpNum, (_wRegVal | EP_CTR_RX|EP_CTR_TX)); \
- } /* _SetEPTxStatus */
-
-/*******************************************************************************
-* Macro Name : SetEPRxStatus
-* Description : sets the status for rx transfer (bits STAT_TX[1:0])
-* Input : bEpNum: Endpoint Number.
-* wState: new state.
-* Output : None.
-* Return : None.
-*******************************************************************************/
-#define _SetEPRxStatus(bEpNum,wState) {\
- register uint16_t _wRegVal; \
- \
- _wRegVal = _GetENDPOINT(bEpNum) & EPRX_DTOGMASK;\
- /* toggle first bit ? */ \
- if((EPRX_DTOG1 & wState)!= 0) \
- _wRegVal ^= EPRX_DTOG1; \
- /* toggle second bit ? */ \
- if((EPRX_DTOG2 & wState)!= 0) \
- _wRegVal ^= EPRX_DTOG2; \
- _SetENDPOINT(bEpNum, (_wRegVal | EP_CTR_RX|EP_CTR_TX)); \
- } /* _SetEPRxStatus */
-
-/*******************************************************************************
-* Macro Name : SetEPRxTxStatus
-* Description : sets the status for rx & tx (bits STAT_TX[1:0] & STAT_RX[1:0])
-* Input : bEpNum: Endpoint Number.
-* wStaterx: new state.
-* wStatetx: new state.
-* Output : None.
-* Return : None.
-*******************************************************************************/
-#define _SetEPRxTxStatus(bEpNum,wStaterx,wStatetx) {\
- register uint32_t _wRegVal; \
- \
- _wRegVal = _GetENDPOINT(bEpNum) & (EPRX_DTOGMASK |EPTX_STAT) ;\
- /* toggle first bit ? */ \
- if((EPRX_DTOG1 & wStaterx)!= 0) \
- _wRegVal ^= EPRX_DTOG1; \
- /* toggle second bit ? */ \
- if((EPRX_DTOG2 & wStaterx)!= 0) \
- _wRegVal ^= EPRX_DTOG2; \
- /* toggle first bit ? */ \
- if((EPTX_DTOG1 & wStatetx)!= 0) \
- _wRegVal ^= EPTX_DTOG1; \
- /* toggle second bit ? */ \
- if((EPTX_DTOG2 & wStatetx)!= 0) \
- _wRegVal ^= EPTX_DTOG2; \
- _SetENDPOINT(bEpNum, _wRegVal | EP_CTR_RX|EP_CTR_TX); \
- } /* _SetEPRxTxStatus */
-/*******************************************************************************
-* Macro Name : GetEPTxStatus / GetEPRxStatus
-* Description : gets the status for tx/rx transfer (bits STAT_TX[1:0]
-* /STAT_RX[1:0])
-* Input : bEpNum: Endpoint Number.
-* Output : None.
-* Return : status .
-*******************************************************************************/
-#define _GetEPTxStatus(bEpNum) ((uint16_t)_GetENDPOINT(bEpNum) & EPTX_STAT)
-
-#define _GetEPRxStatus(bEpNum) ((uint16_t)_GetENDPOINT(bEpNum) & EPRX_STAT)
-
-/*******************************************************************************
-* Macro Name : SetEPTxValid / SetEPRxValid
-* Description : sets directly the VALID tx/rx-status into the enpoint register
-* Input : bEpNum: Endpoint Number.
-* Output : None.
-* Return : None.
-*******************************************************************************/
-#define _SetEPTxValid(bEpNum) (_SetEPTxStatus(bEpNum, EP_TX_VALID))
-
-#define _SetEPRxValid(bEpNum) (_SetEPRxStatus(bEpNum, EP_RX_VALID))
-
-/*******************************************************************************
-* Macro Name : GetTxStallStatus / GetRxStallStatus.
-* Description : checks stall condition in an endpoint.
-* Input : bEpNum: Endpoint Number.
-* Output : None.
-* Return : TRUE = endpoint in stall condition.
-*******************************************************************************/
-#define _GetTxStallStatus(bEpNum) (_GetEPTxStatus(bEpNum) \
- == EP_TX_STALL)
-#define _GetRxStallStatus(bEpNum) (_GetEPRxStatus(bEpNum) \
- == EP_RX_STALL)
-
-/*******************************************************************************
-* Macro Name : SetEP_KIND / ClearEP_KIND.
-* Description : set & clear EP_KIND bit.
-* Input : bEpNum: Endpoint Number.
-* Output : None.
-* Return : None.
-*******************************************************************************/
-#define _SetEP_KIND(bEpNum) (_SetENDPOINT(bEpNum, \
- (EP_CTR_RX|EP_CTR_TX|((_GetENDPOINT(bEpNum) | EP_KIND) & EPREG_MASK))))
-#define _ClearEP_KIND(bEpNum) (_SetENDPOINT(bEpNum, \
- (EP_CTR_RX|EP_CTR_TX|(_GetENDPOINT(bEpNum) & EPKIND_MASK))))
-
-/*******************************************************************************
-* Macro Name : Set_Status_Out / Clear_Status_Out.
-* Description : Sets/clears directly STATUS_OUT bit in the endpoint register.
-* Input : bEpNum: Endpoint Number.
-* Output : None.
-* Return : None.
-*******************************************************************************/
-#define _Set_Status_Out(bEpNum) _SetEP_KIND(bEpNum)
-#define _Clear_Status_Out(bEpNum) _ClearEP_KIND(bEpNum)
-
-/*******************************************************************************
-* Macro Name : SetEPDoubleBuff / ClearEPDoubleBuff.
-* Description : Sets/clears directly EP_KIND bit in the endpoint register.
-* Input : bEpNum: Endpoint Number.
-* Output : None.
-* Return : None.
-*******************************************************************************/
-#define _SetEPDoubleBuff(bEpNum) _SetEP_KIND(bEpNum)
-#define _ClearEPDoubleBuff(bEpNum) _ClearEP_KIND(bEpNum)
-
-/*******************************************************************************
-* Macro Name : ClearEP_CTR_RX / ClearEP_CTR_TX.
-* Description : Clears bit CTR_RX / CTR_TX in the endpoint register.
-* Input : bEpNum: Endpoint Number.
-* Output : None.
-* Return : None.
-*******************************************************************************/
-#define _ClearEP_CTR_RX(bEpNum) (_SetENDPOINT(bEpNum,\
- _GetENDPOINT(bEpNum) & 0x7FFF & EPREG_MASK))
-#define _ClearEP_CTR_TX(bEpNum) (_SetENDPOINT(bEpNum,\
- _GetENDPOINT(bEpNum) & 0xFF7F & EPREG_MASK))
-
-/*******************************************************************************
-* Macro Name : ToggleDTOG_RX / ToggleDTOG_TX .
-* Description : Toggles DTOG_RX / DTOG_TX bit in the endpoint register.
-* Input : bEpNum: Endpoint Number.
-* Output : None.
-* Return : None.
-*******************************************************************************/
-#define _ToggleDTOG_RX(bEpNum) (_SetENDPOINT(bEpNum, \
- EP_CTR_RX|EP_CTR_TX|EP_DTOG_RX | (_GetENDPOINT(bEpNum) & EPREG_MASK)))
-#define _ToggleDTOG_TX(bEpNum) (_SetENDPOINT(bEpNum, \
- EP_CTR_RX|EP_CTR_TX|EP_DTOG_TX | (_GetENDPOINT(bEpNum) & EPREG_MASK)))
-
-/*******************************************************************************
-* Macro Name : ClearDTOG_RX / ClearDTOG_TX.
-* Description : Clears DTOG_RX / DTOG_TX bit in the endpoint register.
-* Input : bEpNum: Endpoint Number.
-* Output : None.
-* Return : None.
-*******************************************************************************/
-#define _ClearDTOG_RX(bEpNum) if((_GetENDPOINT(bEpNum) & EP_DTOG_RX) != 0)\
- _ToggleDTOG_RX(bEpNum)
-#define _ClearDTOG_TX(bEpNum) if((_GetENDPOINT(bEpNum) & EP_DTOG_TX) != 0)\
- _ToggleDTOG_TX(bEpNum)
-/*******************************************************************************
-* Macro Name : SetEPAddress.
-* Description : Sets address in an endpoint register.
-* Input : bEpNum: Endpoint Number.
-* bAddr: Address.
-* Output : None.
-* Return : None.
-*******************************************************************************/
-#define _SetEPAddress(bEpNum,bAddr) _SetENDPOINT(bEpNum,\
- EP_CTR_RX|EP_CTR_TX|(_GetENDPOINT(bEpNum) & EPREG_MASK) | bAddr)
-
-/*******************************************************************************
-* Macro Name : GetEPAddress.
-* Description : Gets address in an endpoint register.
-* Input : bEpNum: Endpoint Number.
-* Output : None.
-* Return : None.
-*******************************************************************************/
-#define _GetEPAddress(bEpNum) ((uint8_t)(_GetENDPOINT(bEpNum) & EPADDR_FIELD))
-
-#define _pEPTxAddr(bEpNum) ((uint32_t *)((_GetBTABLE()+bEpNum*8 )*2 + PMAAddr))
-#define _pEPTxCount(bEpNum) ((uint32_t *)((_GetBTABLE()+bEpNum*8+2)*2 + PMAAddr))
-#define _pEPRxAddr(bEpNum) ((uint32_t *)((_GetBTABLE()+bEpNum*8+4)*2 + PMAAddr))
-#define _pEPRxCount(bEpNum) ((uint32_t *)((_GetBTABLE()+bEpNum*8+6)*2 + PMAAddr))
-
-/*******************************************************************************
-* Macro Name : SetEPTxAddr / SetEPRxAddr.
-* Description : sets address of the tx/rx buffer.
-* Input : bEpNum: Endpoint Number.
-* wAddr: address to be set (must be word aligned).
-* Output : None.
-* Return : None.
-*******************************************************************************/
-#define _SetEPTxAddr(bEpNum,wAddr) (*_pEPTxAddr(bEpNum) = ((wAddr >> 1) << 1))
-#define _SetEPRxAddr(bEpNum,wAddr) (*_pEPRxAddr(bEpNum) = ((wAddr >> 1) << 1))
-
-/*******************************************************************************
-* Macro Name : GetEPTxAddr / GetEPRxAddr.
-* Description : Gets address of the tx/rx buffer.
-* Input : bEpNum: Endpoint Number.
-* Output : None.
-* Return : address of the buffer.
-*******************************************************************************/
-#define _GetEPTxAddr(bEpNum) ((uint16_t)*_pEPTxAddr(bEpNum))
-#define _GetEPRxAddr(bEpNum) ((uint16_t)*_pEPRxAddr(bEpNum))
-
-/*******************************************************************************
-* Macro Name : SetEPCountRxReg.
-* Description : Sets counter of rx buffer with no. of blocks.
-* Input : pdwReg: pointer to counter.
-* wCount: Counter.
-* Output : None.
-* Return : None.
-*******************************************************************************/
-#define _BlocksOf32(dwReg,wCount,wNBlocks) {\
- wNBlocks = wCount >> 5;\
- if((wCount & 0x1f) == 0)\
- wNBlocks--;\
- *pdwReg = (uint32_t)((wNBlocks << 10) | 0x8000);\
- }/* _BlocksOf32 */
-
-#define _BlocksOf2(dwReg,wCount,wNBlocks) {\
- wNBlocks = wCount >> 1;\
- if((wCount & 0x1) != 0)\
- wNBlocks++;\
- *pdwReg = (uint32_t)(wNBlocks << 10);\
- }/* _BlocksOf2 */
-
-#define _SetEPCountRxReg(dwReg,wCount) {\
- uint16_t wNBlocks;\
- if(wCount > 62){_BlocksOf32(dwReg,wCount,wNBlocks);}\
- else {_BlocksOf2(dwReg,wCount,wNBlocks);}\
- }/* _SetEPCountRxReg */
-
-
-
-#define _SetEPRxDblBuf0Count(bEpNum,wCount) {\
- uint32_t *pdwReg = _pEPTxCount(bEpNum); \
- _SetEPCountRxReg(pdwReg, wCount);\
- }
-/*******************************************************************************
-* Macro Name : SetEPTxCount / SetEPRxCount.
-* Description : sets counter for the tx/rx buffer.
-* Input : bEpNum: endpoint number.
-* wCount: Counter value.
-* Output : None.
-* Return : None.
-*******************************************************************************/
-#define _SetEPTxCount(bEpNum,wCount) (*_pEPTxCount(bEpNum) = wCount)
-#define _SetEPRxCount(bEpNum,wCount) {\
- uint32_t *pdwReg = _pEPRxCount(bEpNum); \
- _SetEPCountRxReg(pdwReg, wCount);\
- }
-/*******************************************************************************
-* Macro Name : GetEPTxCount / GetEPRxCount.
-* Description : gets counter of the tx buffer.
-* Input : bEpNum: endpoint number.
-* Output : None.
-* Return : Counter value.
-*******************************************************************************/
-#define _GetEPTxCount(bEpNum)((uint16_t)(*_pEPTxCount(bEpNum)) & 0x3ff)
-#define _GetEPRxCount(bEpNum)((uint16_t)(*_pEPRxCount(bEpNum)) & 0x3ff)
-
-/*******************************************************************************
-* Macro Name : SetEPDblBuf0Addr / SetEPDblBuf1Addr.
-* Description : Sets buffer 0/1 address in a double buffer endpoint.
-* Input : bEpNum: endpoint number.
-* : wBuf0Addr: buffer 0 address.
-* Output : None.
-* Return : None.
-*******************************************************************************/
-#define _SetEPDblBuf0Addr(bEpNum,wBuf0Addr) {_SetEPTxAddr(bEpNum, wBuf0Addr);}
-#define _SetEPDblBuf1Addr(bEpNum,wBuf1Addr) {_SetEPRxAddr(bEpNum, wBuf1Addr);}
-
-/*******************************************************************************
-* Macro Name : SetEPDblBuffAddr.
-* Description : Sets addresses in a double buffer endpoint.
-* Input : bEpNum: endpoint number.
-* : wBuf0Addr: buffer 0 address.
-* : wBuf1Addr = buffer 1 address.
-* Output : None.
-* Return : None.
-*******************************************************************************/
-#define _SetEPDblBuffAddr(bEpNum,wBuf0Addr,wBuf1Addr) { \
- _SetEPDblBuf0Addr(bEpNum, wBuf0Addr);\
- _SetEPDblBuf1Addr(bEpNum, wBuf1Addr);\
- } /* _SetEPDblBuffAddr */
-
-/*******************************************************************************
-* Macro Name : GetEPDblBuf0Addr / GetEPDblBuf1Addr.
-* Description : Gets buffer 0/1 address of a double buffer endpoint.
-* Input : bEpNum: endpoint number.
-* Output : None.
-* Return : None.
-*******************************************************************************/
-#define _GetEPDblBuf0Addr(bEpNum) (_GetEPTxAddr(bEpNum))
-#define _GetEPDblBuf1Addr(bEpNum) (_GetEPRxAddr(bEpNum))
-
-/*******************************************************************************
-* Macro Name : SetEPDblBuffCount / SetEPDblBuf0Count / SetEPDblBuf1Count.
-* Description : Gets buffer 0/1 address of a double buffer endpoint.
-* Input : bEpNum: endpoint number.
-* : bDir: endpoint dir EP_DBUF_OUT = OUT
-* EP_DBUF_IN = IN
-* : wCount: Counter value
-* Output : None.
-* Return : None.
-*******************************************************************************/
-#define _SetEPDblBuf0Count(bEpNum, bDir, wCount) { \
- if(bDir == EP_DBUF_OUT)\
- /* OUT endpoint */ \
- {_SetEPRxDblBuf0Count(bEpNum,wCount);} \
- else if(bDir == EP_DBUF_IN)\
- /* IN endpoint */ \
- *_pEPTxCount(bEpNum) = (uint32_t)wCount; \
- } /* SetEPDblBuf0Count*/
-
-#define _SetEPDblBuf1Count(bEpNum, bDir, wCount) { \
- if(bDir == EP_DBUF_OUT)\
- /* OUT endpoint */ \
- {_SetEPRxCount(bEpNum,wCount);}\
- else if(bDir == EP_DBUF_IN)\
- /* IN endpoint */\
- *_pEPRxCount(bEpNum) = (uint32_t)wCount; \
- } /* SetEPDblBuf1Count */
-
-#define _SetEPDblBuffCount(bEpNum, bDir, wCount) {\
- _SetEPDblBuf0Count(bEpNum, bDir, wCount); \
- _SetEPDblBuf1Count(bEpNum, bDir, wCount); \
- } /* _SetEPDblBuffCount */
-
-/*******************************************************************************
-* Macro Name : GetEPDblBuf0Count / GetEPDblBuf1Count.
-* Description : Gets buffer 0/1 rx/tx counter for double buffering.
-* Input : bEpNum: endpoint number.
-* Output : None.
-* Return : None.
-*******************************************************************************/
-#define _GetEPDblBuf0Count(bEpNum) (_GetEPTxCount(bEpNum))
-#define _GetEPDblBuf1Count(bEpNum) (_GetEPRxCount(bEpNum))
-
-
-/* External variables --------------------------------------------------------*/
-extern volatile uint16_t wIstr; /* ISTR register last read value */
-
-/* Exported functions ------------------------------------------------------- */
-void SetCNTR(uint16_t /*wRegValue*/);
-void SetISTR(uint16_t /*wRegValue*/);
-void SetDADDR(uint16_t /*wRegValue*/);
-void SetBTABLE(uint16_t /*wRegValue*/);
-void SetBTABLE(uint16_t /*wRegValue*/);
-uint16_t GetCNTR(void);
-uint16_t GetISTR(void);
-uint16_t GetFNR(void);
-uint16_t GetDADDR(void);
-uint16_t GetBTABLE(void);
-void SetENDPOINT(uint8_t /*bEpNum*/, uint16_t /*wRegValue*/);
-uint16_t GetENDPOINT(uint8_t /*bEpNum*/);
-void SetEPType(uint8_t /*bEpNum*/, uint16_t /*wType*/);
-uint16_t GetEPType(uint8_t /*bEpNum*/);
-void SetEPTxStatus(uint8_t /*bEpNum*/, uint16_t /*wState*/);
-void SetEPRxStatus(uint8_t /*bEpNum*/, uint16_t /*wState*/);
-void SetDouBleBuffEPStall(uint8_t /*bEpNum*/, uint8_t bDir);
-uint16_t GetEPTxStatus(uint8_t /*bEpNum*/);
-uint16_t GetEPRxStatus(uint8_t /*bEpNum*/);
-void SetEPTxValid(uint8_t /*bEpNum*/);
-void SetEPRxValid(uint8_t /*bEpNum*/);
-uint16_t GetTxStallStatus(uint8_t /*bEpNum*/);
-uint16_t GetRxStallStatus(uint8_t /*bEpNum*/);
-void SetEP_KIND(uint8_t /*bEpNum*/);
-void ClearEP_KIND(uint8_t /*bEpNum*/);
-void Set_Status_Out(uint8_t /*bEpNum*/);
-void Clear_Status_Out(uint8_t /*bEpNum*/);
-void SetEPDoubleBuff(uint8_t /*bEpNum*/);
-void ClearEPDoubleBuff(uint8_t /*bEpNum*/);
-void ClearEP_CTR_RX(uint8_t /*bEpNum*/);
-void ClearEP_CTR_TX(uint8_t /*bEpNum*/);
-void ToggleDTOG_RX(uint8_t /*bEpNum*/);
-void ToggleDTOG_TX(uint8_t /*bEpNum*/);
-void ClearDTOG_RX(uint8_t /*bEpNum*/);
-void ClearDTOG_TX(uint8_t /*bEpNum*/);
-void SetEPAddress(uint8_t /*bEpNum*/, uint8_t /*bAddr*/);
-uint8_t GetEPAddress(uint8_t /*bEpNum*/);
-void SetEPTxAddr(uint8_t /*bEpNum*/, uint16_t /*wAddr*/);
-void SetEPRxAddr(uint8_t /*bEpNum*/, uint16_t /*wAddr*/);
-uint16_t GetEPTxAddr(uint8_t /*bEpNum*/);
-uint16_t GetEPRxAddr(uint8_t /*bEpNum*/);
-void SetEPCountRxReg(uint32_t * /*pdwReg*/, uint16_t /*wCount*/);
-void SetEPTxCount(uint8_t /*bEpNum*/, uint16_t /*wCount*/);
-void SetEPRxCount(uint8_t /*bEpNum*/, uint16_t /*wCount*/);
-uint16_t GetEPTxCount(uint8_t /*bEpNum*/);
-uint16_t GetEPRxCount(uint8_t /*bEpNum*/);
-void SetEPDblBuf0Addr(uint8_t /*bEpNum*/, uint16_t /*wBuf0Addr*/);
-void SetEPDblBuf1Addr(uint8_t /*bEpNum*/, uint16_t /*wBuf1Addr*/);
-void SetEPDblBuffAddr(uint8_t /*bEpNum*/, uint16_t /*wBuf0Addr*/, uint16_t /*wBuf1Addr*/);
-uint16_t GetEPDblBuf0Addr(uint8_t /*bEpNum*/);
-uint16_t GetEPDblBuf1Addr(uint8_t /*bEpNum*/);
-void SetEPDblBuffCount(uint8_t /*bEpNum*/, uint8_t /*bDir*/, uint16_t /*wCount*/);
-void SetEPDblBuf0Count(uint8_t /*bEpNum*/, uint8_t /*bDir*/, uint16_t /*wCount*/);
-void SetEPDblBuf1Count(uint8_t /*bEpNum*/, uint8_t /*bDir*/, uint16_t /*wCount*/);
-uint16_t GetEPDblBuf0Count(uint8_t /*bEpNum*/);
-uint16_t GetEPDblBuf1Count(uint8_t /*bEpNum*/);
-EP_DBUF_DIR GetEPDblBufDir(uint8_t /*bEpNum*/);
-void FreeUserBuffer(uint8_t bEpNum/*bEpNum*/, uint8_t bDir);
-uint16_t ToWord(uint8_t, uint8_t);
-uint16_t ByteSwap(uint16_t);
-
-#endif /* __USB_REGS_H */
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/workspace/ts100/STM32_USB-FS-Device_Driver/inc/usb_sil.h b/workspace/ts100/STM32_USB-FS-Device_Driver/inc/usb_sil.h
deleted file mode 100644
index 0e941ccd..00000000
--- a/workspace/ts100/STM32_USB-FS-Device_Driver/inc/usb_sil.h
+++ /dev/null
@@ -1,47 +0,0 @@
-/**
- ******************************************************************************
- * @file usb_sil.h
- * @author MCD Application Team
- * @version V4.0.0
- * @date 28-August-2012
- * @brief Simplified Interface Layer function prototypes.
- ******************************************************************************
- * @attention
- *
- * <h2><center>&copy; COPYRIGHT 2012 STMicroelectronics</center></h2>
- *
- * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
- * You may not use this file except in compliance with the License.
- * You may obtain a copy of the License at:
- *
- * http://www.st.com/software_license_agreement_liberty_v2
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- ******************************************************************************
- */
-
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __USB_SIL_H
-#define __USB_SIL_H
-
-/* Includes ------------------------------------------------------------------*/
-/* Exported types ------------------------------------------------------------*/
-/* Exported constants --------------------------------------------------------*/
-/* Exported macro ------------------------------------------------------------*/
-/* Exported functions ------------------------------------------------------- */
-
-uint32_t USB_SIL_Init(void);
-uint32_t USB_SIL_Write(uint8_t bEpAddr, uint8_t* pBufferPointer, uint32_t wBufferSize);
-uint32_t USB_SIL_Read(uint8_t bEpAddr, uint8_t* pBufferPointer);
-
-/* External variables --------------------------------------------------------*/
-
-#endif /* __USB_SIL_H */
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/workspace/ts100/STM32_USB-FS-Device_Driver/inc/usb_type.h b/workspace/ts100/STM32_USB-FS-Device_Driver/inc/usb_type.h
deleted file mode 100644
index 8930accf..00000000
--- a/workspace/ts100/STM32_USB-FS-Device_Driver/inc/usb_type.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/**
- ******************************************************************************
- * @file usb_type.h
- * @author MCD Application Team
- * @version V4.0.0
- * @date 28-August-2012
- * @brief Type definitions used by the USB Library
- ******************************************************************************
- * @attention
- *
- * <h2><center>&copy; COPYRIGHT 2012 STMicroelectronics</center></h2>
- *
- * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
- * You may not use this file except in compliance with the License.
- * You may obtain a copy of the License at:
- *
- * http://www.st.com/software_license_agreement_liberty_v2
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- ******************************************************************************
- */
-
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __USB_TYPE_H
-#define __USB_TYPE_H
-
-/* Includes ------------------------------------------------------------------*/
-#include <usb_conf.h>
-
-/* Exported types ------------------------------------------------------------*/
-/* Exported constants --------------------------------------------------------*/
-#ifndef NULL
-#define NULL ((void *)0)
-#endif
-
-typedef enum
-{
- FALSE = 0, TRUE = !FALSE
-}
-bool;
-
-/* Exported macro ------------------------------------------------------------*/
-/* Exported functions ------------------------------------------------------- */
-/* External variables --------------------------------------------------------*/
-
-#endif /* __USB_TYPE_H */
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/workspace/ts100/STM32_USB-FS-Device_Driver/src/usb_core.c b/workspace/ts100/STM32_USB-FS-Device_Driver/src/usb_core.c
deleted file mode 100644
index a0c68056..00000000
--- a/workspace/ts100/STM32_USB-FS-Device_Driver/src/usb_core.c
+++ /dev/null
@@ -1,1033 +0,0 @@
-/**
- ******************************************************************************
- * @file usb_core.c
- * @author MCD Application Team
- * @version V4.0.0
- * @date 28-August-2012
- * @brief Standard protocol processing (USB v2.0)
- ******************************************************************************
- * @attention
- *
- * <h2><center>&copy; COPYRIGHT 2012 STMicroelectronics</center></h2>
- *
- * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
- * You may not use this file except in compliance with the License.
- * You may obtain a copy of the License at:
- *
- * http://www.st.com/software_license_agreement_liberty_v2
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- ******************************************************************************
- */
-
-
-/* Includes ------------------------------------------------------------------*/
-#include "usb_lib.h"
-/* Private typedef -----------------------------------------------------------*/
-/* Private define ------------------------------------------------------------*/
-#define ValBit(VAR,Place) (VAR & (1 << Place))
-#define SetBit(VAR,Place) (VAR |= (1 << Place))
-#define ClrBit(VAR,Place) (VAR &= ((1 << Place) ^ 255))
-#define Send0LengthData() { _SetEPTxCount(ENDP0, 0); \
- vSetEPTxStatus(EP_TX_VALID); \
- }
-
-#define vSetEPRxStatus(st) (SaveRState = st)
-#define vSetEPTxStatus(st) (SaveTState = st)
-
-#define USB_StatusIn() Send0LengthData()
-#define USB_StatusOut() vSetEPRxStatus(EP_RX_VALID)
-
-#define StatusInfo0 StatusInfo.bw.bb1 /* Reverse bb0 & bb1 */
-#define StatusInfo1 StatusInfo.bw.bb0
-
-/* Private macro -------------------------------------------------------------*/
-/* Private variables ---------------------------------------------------------*/
-uint16_t_uint8_t StatusInfo;
-
-bool Data_Mul_MaxPacketSize = FALSE;
-/* Private function prototypes -----------------------------------------------*/
-static void DataStageOut(void);
-static void DataStageIn(void);
-static void NoData_Setup0(void);
-static void Data_Setup0(void);
-/* Private functions ---------------------------------------------------------*/
-
-/*******************************************************************************
-* Function Name : Standard_GetConfiguration.
-* Description : Return the current configuration variable address.
-* Input : Length - How many bytes are needed.
-* Output : None.
-* Return : Return 1 , if the request is invalid when "Length" is 0.
-* Return "Buffer" if the "Length" is not 0.
-*******************************************************************************/
-uint8_t *Standard_GetConfiguration(uint16_t Length)
-{
- if (Length == 0)
- {
- pInformation->Ctrl_Info.Usb_wLength =
- sizeof(pInformation->Current_Configuration);
- return 0;
- }
- pUser_Standard_Requests->User_GetConfiguration();
- return (uint8_t *)&pInformation->Current_Configuration;
-}
-
-/*******************************************************************************
-* Function Name : Standard_SetConfiguration.
-* Description : This routine is called to set the configuration value
-* Then each class should configure device itself.
-* Input : None.
-* Output : None.
-* Return : Return USB_SUCCESS, if the request is performed.
-* Return USB_UNSUPPORT, if the request is invalid.
-*******************************************************************************/
-RESULT Standard_SetConfiguration(void)
-{
-
- if ((pInformation->USBwValue0 <=
- Device_Table.Total_Configuration) && (pInformation->USBwValue1 == 0)
- && (pInformation->USBwIndex == 0)) /*call Back usb spec 2.0*/
- {
- pInformation->Current_Configuration = pInformation->USBwValue0;
- pUser_Standard_Requests->User_SetConfiguration();
- return USB_SUCCESS;
- }
- else
- {
- return USB_UNSUPPORT;
- }
-}
-
-/*******************************************************************************
-* Function Name : Standard_GetInterface.
-* Description : Return the Alternate Setting of the current interface.
-* Input : Length - How many bytes are needed.
-* Output : None.
-* Return : Return 0, if the request is invalid when "Length" is 0.
-* Return "Buffer" if the "Length" is not 0.
-*******************************************************************************/
-uint8_t *Standard_GetInterface(uint16_t Length)
-{
- if (Length == 0)
- {
- pInformation->Ctrl_Info.Usb_wLength =
- sizeof(pInformation->Current_AlternateSetting);
- return 0;
- }
- pUser_Standard_Requests->User_GetInterface();
- return (uint8_t *)&pInformation->Current_AlternateSetting;
-}
-
-/*******************************************************************************
-* Function Name : Standard_SetInterface.
-* Description : This routine is called to set the interface.
-* Then each class should configure the interface them self.
-* Input : None.
-* Output : None.
-* Return : - Return USB_SUCCESS, if the request is performed.
-* - Return USB_UNSUPPORT, if the request is invalid.
-*******************************************************************************/
-RESULT Standard_SetInterface(void)
-{
- RESULT Re;
- /*Test if the specified Interface and Alternate Setting are supported by
- the application Firmware*/
- Re = (*pProperty->Class_Get_Interface_Setting)(pInformation->USBwIndex0, pInformation->USBwValue0);
-
- if (pInformation->Current_Configuration != 0)
- {
- if ((Re != USB_SUCCESS) || (pInformation->USBwIndex1 != 0)
- || (pInformation->USBwValue1 != 0))
- {
- return USB_UNSUPPORT;
- }
- else if (Re == USB_SUCCESS)
- {
- pUser_Standard_Requests->User_SetInterface();
- pInformation->Current_Interface = pInformation->USBwIndex0;
- pInformation->Current_AlternateSetting = pInformation->USBwValue0;
- return USB_SUCCESS;
- }
-
- }
-
- return USB_UNSUPPORT;
-}
-
-/*******************************************************************************
-* Function Name : Standard_GetStatus.
-* Description : Copy the device request data to "StatusInfo buffer".
-* Input : - Length - How many bytes are needed.
-* Output : None.
-* Return : Return 0, if the request is at end of data block,
-* or is invalid when "Length" is 0.
-*******************************************************************************/
-uint8_t *Standard_GetStatus(uint16_t Length)
-{
- if (Length == 0)
- {
- pInformation->Ctrl_Info.Usb_wLength = 2;
- return 0;
- }
-
- /* Reset Status Information */
- StatusInfo.w = 0;
-
- if (Type_Recipient == (STANDARD_REQUEST | DEVICE_RECIPIENT))
- {
- /*Get Device Status */
- uint8_t Feature = pInformation->Current_Feature;
-
- /* Remote Wakeup enabled */
- if (ValBit(Feature, 5))
- {
- SetBit(StatusInfo0, 1);
- }
- else
- {
- ClrBit(StatusInfo0, 1);
- }
-
- /* Bus-powered */
- if (ValBit(Feature, 6))
- {
- SetBit(StatusInfo0, 0);
- }
- else /* Self-powered */
- {
- ClrBit(StatusInfo0, 0);
- }
- }
- /*Interface Status*/
- else if (Type_Recipient == (STANDARD_REQUEST | INTERFACE_RECIPIENT))
- {
- return (uint8_t *)&StatusInfo;
- }
- /*Get EndPoint Status*/
- else if (Type_Recipient == (STANDARD_REQUEST | ENDPOINT_RECIPIENT))
- {
- uint8_t Related_Endpoint;
- uint8_t wIndex0 = pInformation->USBwIndex0;
-
- Related_Endpoint = (wIndex0 & 0x0f);
- if (ValBit(wIndex0, 7))
- {
- /* IN endpoint */
- if (_GetTxStallStatus(Related_Endpoint))
- {
- SetBit(StatusInfo0, 0); /* IN Endpoint stalled */
- }
- }
- else
- {
- /* OUT endpoint */
- if (_GetRxStallStatus(Related_Endpoint))
- {
- SetBit(StatusInfo0, 0); /* OUT Endpoint stalled */
- }
- }
-
- }
- else
- {
- return NULL;
- }
- pUser_Standard_Requests->User_GetStatus();
- return (uint8_t *)&StatusInfo;
-}
-
-/*******************************************************************************
-* Function Name : Standard_ClearFeature.
-* Description : Clear or disable a specific feature.
-* Input : None.
-* Output : None.
-* Return : - Return USB_SUCCESS, if the request is performed.
-* - Return USB_UNSUPPORT, if the request is invalid.
-*******************************************************************************/
-RESULT Standard_ClearFeature(void)
-{
- uint32_t Type_Rec = Type_Recipient;
- uint32_t Status;
-
-
- if (Type_Rec == (STANDARD_REQUEST | DEVICE_RECIPIENT))
- {/*Device Clear Feature*/
- ClrBit(pInformation->Current_Feature, 5);
- return USB_SUCCESS;
- }
- else if (Type_Rec == (STANDARD_REQUEST | ENDPOINT_RECIPIENT))
- {/*EndPoint Clear Feature*/
- DEVICE* pDev;
- uint32_t Related_Endpoint;
- uint32_t wIndex0;
- uint32_t rEP;
-
- if ((pInformation->USBwValue != ENDPOINT_STALL)
- || (pInformation->USBwIndex1 != 0))
- {
- return USB_UNSUPPORT;
- }
-
- pDev = &Device_Table;
- wIndex0 = pInformation->USBwIndex0;
- rEP = wIndex0 & ~0x80;
- Related_Endpoint = ENDP0 + rEP;
-
- if (ValBit(pInformation->USBwIndex0, 7))
- {
- /*Get Status of endpoint & stall the request if the related_ENdpoint
- is Disabled*/
- Status = _GetEPTxStatus(Related_Endpoint);
- }
- else
- {
- Status = _GetEPRxStatus(Related_Endpoint);
- }
-
- if ((rEP >= pDev->Total_Endpoint) || (Status == 0)
- || (pInformation->Current_Configuration == 0))
- {
- return USB_UNSUPPORT;
- }
-
-
- if (wIndex0 & 0x80)
- {
- /* IN endpoint */
- if (_GetTxStallStatus(Related_Endpoint ))
- {
- ClearDTOG_TX(Related_Endpoint);
- SetEPTxStatus(Related_Endpoint, EP_TX_VALID);
- }
- }
- else
- {
- /* OUT endpoint */
- if (_GetRxStallStatus(Related_Endpoint))
- {
- if (Related_Endpoint == ENDP0)
- {
- /* After clear the STALL, enable the default endpoint receiver */
- SetEPRxCount(Related_Endpoint, Device_Property.MaxPacketSize);
- _SetEPRxStatus(Related_Endpoint, EP_RX_VALID);
- }
- else
- {
- ClearDTOG_RX(Related_Endpoint);
- _SetEPRxStatus(Related_Endpoint, EP_RX_VALID);
- }
- }
- }
- pUser_Standard_Requests->User_ClearFeature();
- return USB_SUCCESS;
- }
-
- return USB_UNSUPPORT;
-}
-
-/*******************************************************************************
-* Function Name : Standard_SetEndPointFeature
-* Description : Set or enable a specific feature of EndPoint
-* Input : None.
-* Output : None.
-* Return : - Return USB_SUCCESS, if the request is performed.
-* - Return USB_UNSUPPORT, if the request is invalid.
-*******************************************************************************/
-RESULT Standard_SetEndPointFeature(void)
-{
- uint32_t wIndex0;
- uint32_t Related_Endpoint;
- uint32_t rEP;
- uint32_t Status;
-
- wIndex0 = pInformation->USBwIndex0;
- rEP = wIndex0 & ~0x80;
- Related_Endpoint = ENDP0 + rEP;
-
- if (ValBit(pInformation->USBwIndex0, 7))
- {
- /* get Status of endpoint & stall the request if the related_ENdpoint
- is Disabled*/
- Status = _GetEPTxStatus(Related_Endpoint);
- }
- else
- {
- Status = _GetEPRxStatus(Related_Endpoint);
- }
-
- if (Related_Endpoint >= Device_Table.Total_Endpoint
- || pInformation->USBwValue != 0 || Status == 0
- || pInformation->Current_Configuration == 0)
- {
- return USB_UNSUPPORT;
- }
- else
- {
- if (wIndex0 & 0x80)
- {
- /* IN endpoint */
- _SetEPTxStatus(Related_Endpoint, EP_TX_STALL);
- }
-
- else
- {
- /* OUT endpoint */
- _SetEPRxStatus(Related_Endpoint, EP_RX_STALL);
- }
- }
- pUser_Standard_Requests->User_SetEndPointFeature();
- return USB_SUCCESS;
-}
-
-/*******************************************************************************
-* Function Name : Standard_SetDeviceFeature.
-* Description : Set or enable a specific feature of Device.
-* Input : None.
-* Output : None.
-* Return : - Return USB_SUCCESS, if the request is performed.
-* - Return USB_UNSUPPORT, if the request is invalid.
-*******************************************************************************/
-RESULT Standard_SetDeviceFeature(void)
-{
- SetBit(pInformation->Current_Feature, 5);
- pUser_Standard_Requests->User_SetDeviceFeature();
- return USB_SUCCESS;
-}
-
-/*******************************************************************************
-* Function Name : Standard_GetDescriptorData.
-* Description : Standard_GetDescriptorData is used for descriptors transfer.
-* : This routine is used for the descriptors resident in Flash
-* or RAM
-* pDesc can be in either Flash or RAM
-* The purpose of this routine is to have a versatile way to
-* response descriptors request. It allows user to generate
-* certain descriptors with software or read descriptors from
-* external storage part by part.
-* Input : - Length - Length of the data in this transfer.
-* - pDesc - A pointer points to descriptor struct.
-* The structure gives the initial address of the descriptor and
-* its original size.
-* Output : None.
-* Return : Address of a part of the descriptor pointed by the Usb_
-* wOffset The buffer pointed by this address contains at least
-* Length bytes.
-*******************************************************************************/
-uint8_t *Standard_GetDescriptorData(uint16_t Length, ONE_DESCRIPTOR *pDesc)
-{
- uint32_t wOffset;
-
- wOffset = pInformation->Ctrl_Info.Usb_wOffset;
- if (Length == 0)
- {
- pInformation->Ctrl_Info.Usb_wLength = pDesc->Descriptor_Size - wOffset;
- return 0;
- }
-
- return pDesc->Descriptor + wOffset;
-}
-
-/*******************************************************************************
-* Function Name : DataStageOut.
-* Description : Data stage of a Control Write Transfer.
-* Input : None.
-* Output : None.
-* Return : None.
-*******************************************************************************/
-void DataStageOut(void)
-{
- ENDPOINT_INFO *pEPinfo = &pInformation->Ctrl_Info;
- uint32_t save_rLength;
-
- save_rLength = pEPinfo->Usb_rLength;
-
- if (pEPinfo->CopyData && save_rLength)
- {
- uint8_t *Buffer;
- uint32_t Length;
-
- Length = pEPinfo->PacketSize;
- if (Length > save_rLength)
- {
- Length = save_rLength;
- }
-
- Buffer = (*pEPinfo->CopyData)(Length);
- pEPinfo->Usb_rLength -= Length;
- pEPinfo->Usb_rOffset += Length;
- PMAToUserBufferCopy(Buffer, GetEPRxAddr(ENDP0), Length);
-
- }
-
- if (pEPinfo->Usb_rLength != 0)
- {
- vSetEPRxStatus(EP_RX_VALID);/* re-enable for next data reception */
- SetEPTxCount(ENDP0, 0);
- vSetEPTxStatus(EP_TX_VALID);/* Expect the host to abort the data OUT stage */
- }
- /* Set the next State*/
- if (pEPinfo->Usb_rLength >= pEPinfo->PacketSize)
- {
- pInformation->ControlState = OUT_DATA;
- }
- else
- {
- if (pEPinfo->Usb_rLength > 0)
- {
- pInformation->ControlState = LAST_OUT_DATA;
- }
- else if (pEPinfo->Usb_rLength == 0)
- {
- pInformation->ControlState = WAIT_STATUS_IN;
- USB_StatusIn();
- }
- }
-}
-
-/*******************************************************************************
-* Function Name : DataStageIn.
-* Description : Data stage of a Control Read Transfer.
-* Input : None.
-* Output : None.
-* Return : None.
-*******************************************************************************/
-void DataStageIn(void)
-{
- ENDPOINT_INFO *pEPinfo = &pInformation->Ctrl_Info;
- uint32_t save_wLength = pEPinfo->Usb_wLength;
- uint32_t ControlState = pInformation->ControlState;
-
- uint8_t *DataBuffer;
- uint32_t Length;
-
- if ((save_wLength == 0) && (ControlState == LAST_IN_DATA))
- {
- if(Data_Mul_MaxPacketSize == TRUE)
- {
- /* No more data to send and empty packet */
- Send0LengthData();
- ControlState = LAST_IN_DATA;
- Data_Mul_MaxPacketSize = FALSE;
- }
- else
- {
- /* No more data to send so STALL the TX Status*/
- ControlState = WAIT_STATUS_OUT;
- vSetEPTxStatus(EP_TX_STALL);
-
- }
-
- goto Expect_Status_Out;
- }
-
- Length = pEPinfo->PacketSize;
- ControlState = (save_wLength <= Length) ? LAST_IN_DATA : IN_DATA;
-
- if (Length > save_wLength)
- {
- Length = save_wLength;
- }
-
- DataBuffer = (*pEPinfo->CopyData)(Length);
-
- UserToPMABufferCopy(DataBuffer, GetEPTxAddr(ENDP0), Length);
-
- SetEPTxCount(ENDP0, Length);
-
- pEPinfo->Usb_wLength -= Length;
- pEPinfo->Usb_wOffset += Length;
- vSetEPTxStatus(EP_TX_VALID);
-
- USB_StatusOut();/* Expect the host to abort the data IN stage */
-
-Expect_Status_Out:
- pInformation->ControlState = ControlState;
-}
-
-/*******************************************************************************
-* Function Name : NoData_Setup0.
-* Description : Proceed the processing of setup request without data stage.
-* Input : None.
-* Output : None.
-* Return : None.
-*******************************************************************************/
-void NoData_Setup0(void)
-{
- RESULT Result = USB_UNSUPPORT;
- uint32_t RequestNo = pInformation->USBbRequest;
- uint32_t ControlState;
-
- if (Type_Recipient == (STANDARD_REQUEST | DEVICE_RECIPIENT))
- {
- /* Device Request*/
- /* SET_CONFIGURATION*/
- if (RequestNo == SET_CONFIGURATION)
- {
- Result = Standard_SetConfiguration();
- }
-
- /*SET ADDRESS*/
- else if (RequestNo == SET_ADDRESS)
- {
- if ((pInformation->USBwValue0 > 127) || (pInformation->USBwValue1 != 0)
- || (pInformation->USBwIndex != 0)
- || (pInformation->Current_Configuration != 0))
- /* Device Address should be 127 or less*/
- {
- ControlState = STALLED;
- goto exit_NoData_Setup0;
- }
- else
- {
- Result = USB_SUCCESS;
- }
- }
- /*SET FEATURE for Device*/
- else if (RequestNo == SET_FEATURE)
- {
- if ((pInformation->USBwValue0 == DEVICE_REMOTE_WAKEUP) \
- && (pInformation->USBwIndex == 0))
- {
- Result = Standard_SetDeviceFeature();
- }
- else
- {
- Result = USB_UNSUPPORT;
- }
- }
- /*Clear FEATURE for Device */
- else if (RequestNo == CLEAR_FEATURE)
- {
- if (pInformation->USBwValue0 == DEVICE_REMOTE_WAKEUP
- && pInformation->USBwIndex == 0
- && ValBit(pInformation->Current_Feature, 5))
- {
- Result = Standard_ClearFeature();
- }
- else
- {
- Result = USB_UNSUPPORT;
- }
- }
-
- }
-
- /* Interface Request*/
- else if (Type_Recipient == (STANDARD_REQUEST | INTERFACE_RECIPIENT))
- {
- /*SET INTERFACE*/
- if (RequestNo == SET_INTERFACE)
- {
- Result = Standard_SetInterface();
- }
- }
-
- /* EndPoint Request*/
- else if (Type_Recipient == (STANDARD_REQUEST | ENDPOINT_RECIPIENT))
- {
- /*CLEAR FEATURE for EndPoint*/
- if (RequestNo == CLEAR_FEATURE)
- {
- Result = Standard_ClearFeature();
- }
- /* SET FEATURE for EndPoint*/
- else if (RequestNo == SET_FEATURE)
- {
- Result = Standard_SetEndPointFeature();
- }
- }
- else
- {
- Result = USB_UNSUPPORT;
- }
-
-
- if (Result != USB_SUCCESS)
- {
- Result = (*pProperty->Class_NoData_Setup)(RequestNo);
- if (Result == USB_NOT_READY)
- {
- ControlState = PAUSE;
- goto exit_NoData_Setup0;
- }
- }
-
- if (Result != USB_SUCCESS)
- {
- ControlState = STALLED;
- goto exit_NoData_Setup0;
- }
-
- ControlState = WAIT_STATUS_IN;/* After no data stage SETUP */
-
- USB_StatusIn();
-
-exit_NoData_Setup0:
- pInformation->ControlState = ControlState;
- return;
-}
-
-/*******************************************************************************
-* Function Name : Data_Setup0.
-* Description : Proceed the processing of setup request with data stage.
-* Input : None.
-* Output : None.
-* Return : None.
-*******************************************************************************/
-void Data_Setup0(void)
-{
- uint8_t *(*CopyRoutine)(uint16_t);
- RESULT Result;
- uint32_t Request_No = pInformation->USBbRequest;
-
- uint32_t Related_Endpoint, Reserved;
- uint32_t wOffset, Status;
-
-
-
- CopyRoutine = NULL;
- wOffset = 0;
-
- /*GET DESCRIPTOR*/
- if (Request_No == GET_DESCRIPTOR)
- {
- if (Type_Recipient == (STANDARD_REQUEST | DEVICE_RECIPIENT))
- {
- uint8_t wValue1 = pInformation->USBwValue1;
- if (wValue1 == DEVICE_DESCRIPTOR)
- {
- CopyRoutine = pProperty->GetDeviceDescriptor;
- }
- else if (wValue1 == CONFIG_DESCRIPTOR)
- {
- CopyRoutine = pProperty->GetConfigDescriptor;
- }
- else if (wValue1 == STRING_DESCRIPTOR)
- {
- CopyRoutine = pProperty->GetStringDescriptor;
- } /* End of GET_DESCRIPTOR */
- }
- }
-
- /*GET STATUS*/
- else if ((Request_No == GET_STATUS) && (pInformation->USBwValue == 0)
- && (pInformation->USBwLength == 0x0002)
- && (pInformation->USBwIndex1 == 0))
- {
- /* GET STATUS for Device*/
- if ((Type_Recipient == (STANDARD_REQUEST | DEVICE_RECIPIENT))
- && (pInformation->USBwIndex == 0))
- {
- CopyRoutine = Standard_GetStatus;
- }
-
- /* GET STATUS for Interface*/
- else if (Type_Recipient == (STANDARD_REQUEST | INTERFACE_RECIPIENT))
- {
- if (((*pProperty->Class_Get_Interface_Setting)(pInformation->USBwIndex0, 0) == USB_SUCCESS)
- && (pInformation->Current_Configuration != 0))
- {
- CopyRoutine = Standard_GetStatus;
- }
- }
-
- /* GET STATUS for EndPoint*/
- else if (Type_Recipient == (STANDARD_REQUEST | ENDPOINT_RECIPIENT))
- {
- Related_Endpoint = (pInformation->USBwIndex0 & 0x0f);
- Reserved = pInformation->USBwIndex0 & 0x70;
-
- if (ValBit(pInformation->USBwIndex0, 7))
- {
- /*Get Status of endpoint & stall the request if the related_ENdpoint
- is Disabled*/
- Status = _GetEPTxStatus(Related_Endpoint);
- }
- else
- {
- Status = _GetEPRxStatus(Related_Endpoint);
- }
-
- if ((Related_Endpoint < Device_Table.Total_Endpoint) && (Reserved == 0)
- && (Status != 0))
- {
- CopyRoutine = Standard_GetStatus;
- }
- }
-
- }
-
- /*GET CONFIGURATION*/
- else if (Request_No == GET_CONFIGURATION)
- {
- if (Type_Recipient == (STANDARD_REQUEST | DEVICE_RECIPIENT))
- {
- CopyRoutine = Standard_GetConfiguration;
- }
- }
- /*GET INTERFACE*/
- else if (Request_No == GET_INTERFACE)
- {
- if ((Type_Recipient == (STANDARD_REQUEST | INTERFACE_RECIPIENT))
- && (pInformation->Current_Configuration != 0) && (pInformation->USBwValue == 0)
- && (pInformation->USBwIndex1 == 0) && (pInformation->USBwLength == 0x0001)
- && ((*pProperty->Class_Get_Interface_Setting)(pInformation->USBwIndex0, 0) == USB_SUCCESS))
- {
- CopyRoutine = Standard_GetInterface;
- }
-
- }
-
- if (CopyRoutine)
- {
- pInformation->Ctrl_Info.Usb_wOffset = wOffset;
- pInformation->Ctrl_Info.CopyData = CopyRoutine;
- /* sb in the original the cast to word was directly */
- /* now the cast is made step by step */
- (*CopyRoutine)(0);
- Result = USB_SUCCESS;
- }
- else
- {
- Result = (*pProperty->Class_Data_Setup)(pInformation->USBbRequest);
- if (Result == USB_NOT_READY)
- {
- pInformation->ControlState = PAUSE;
- return;
- }
- }
-
- if (pInformation->Ctrl_Info.Usb_wLength == 0xFFFF)
- {
- /* Data is not ready, wait it */
- pInformation->ControlState = PAUSE;
- return;
- }
- if ((Result == USB_UNSUPPORT) || (pInformation->Ctrl_Info.Usb_wLength == 0))
- {
- /* Unsupported request */
- pInformation->ControlState = STALLED;
- return;
- }
-
-
- if (ValBit(pInformation->USBbmRequestType, 7))
- {
- /* Device ==> Host */
- __IO uint32_t wLength = pInformation->USBwLength;
-
- /* Restrict the data length to be the one host asks for */
- if (pInformation->Ctrl_Info.Usb_wLength > wLength)
- {
- pInformation->Ctrl_Info.Usb_wLength = wLength;
- }
-
- else if (pInformation->Ctrl_Info.Usb_wLength < pInformation->USBwLength)
- {
- if (pInformation->Ctrl_Info.Usb_wLength < pProperty->MaxPacketSize)
- {
- Data_Mul_MaxPacketSize = FALSE;
- }
- else if ((pInformation->Ctrl_Info.Usb_wLength % pProperty->MaxPacketSize) == 0)
- {
- Data_Mul_MaxPacketSize = TRUE;
- }
- }
-
- pInformation->Ctrl_Info.PacketSize = pProperty->MaxPacketSize;
- DataStageIn();
- }
- else
- {
- pInformation->ControlState = OUT_DATA;
- vSetEPRxStatus(EP_RX_VALID); /* enable for next data reception */
- }
-
- return;
-}
-
-/*******************************************************************************
-* Function Name : Setup0_Process
-* Description : Get the device request data and dispatch to individual process.
-* Input : None.
-* Output : None.
-* Return : Post0_Process.
-*******************************************************************************/
-uint8_t Setup0_Process(void)
-{
-
- union
- {
- uint8_t* b;
- uint16_t* w;
- } pBuf;
- uint16_t offset = 1;
-
- pBuf.b = PMAAddr + (uint8_t *)(_GetEPRxAddr(ENDP0) * 2); /* *2 for 32 bits addr */
-
- if (pInformation->ControlState != PAUSE)
- {
- pInformation->USBbmRequestType = *pBuf.b++; /* bmRequestType */
- pInformation->USBbRequest = *pBuf.b++; /* bRequest */
- pBuf.w += offset; /* word not accessed because of 32 bits addressing */
- pInformation->USBwValue = ByteSwap(*pBuf.w++); /* wValue */
- pBuf.w += offset; /* word not accessed because of 32 bits addressing */
- pInformation->USBwIndex = ByteSwap(*pBuf.w++); /* wIndex */
- pBuf.w += offset; /* word not accessed because of 32 bits addressing */
- pInformation->USBwLength = *pBuf.w; /* wLength */
- }
-
- pInformation->ControlState = SETTING_UP;
- if (pInformation->USBwLength == 0)
- {
- /* Setup with no data stage */
- NoData_Setup0();
- }
- else
- {
- /* Setup with data stage */
- Data_Setup0();
- }
- return Post0_Process();
-}
-
-/*******************************************************************************
-* Function Name : In0_Process
-* Description : Process the IN token on all default endpoint.
-* Input : None.
-* Output : None.
-* Return : Post0_Process.
-*******************************************************************************/
-uint8_t In0_Process(void)
-{
- uint32_t ControlState = pInformation->ControlState;
-
- if ((ControlState == IN_DATA) || (ControlState == LAST_IN_DATA))
- {
- DataStageIn();
- /* ControlState may be changed outside the function */
- ControlState = pInformation->ControlState;
- }
-
- else if (ControlState == WAIT_STATUS_IN)
- {
- if ((pInformation->USBbRequest == SET_ADDRESS) &&
- (Type_Recipient == (STANDARD_REQUEST | DEVICE_RECIPIENT)))
- {
- SetDeviceAddress(pInformation->USBwValue0);
- pUser_Standard_Requests->User_SetDeviceAddress();
- }
- (*pProperty->Process_Status_IN)();
- ControlState = STALLED;
- }
-
- else
- {
- ControlState = STALLED;
- }
-
- pInformation->ControlState = ControlState;
-
- return Post0_Process();
-}
-
-/*******************************************************************************
-* Function Name : Out0_Process
-* Description : Process the OUT token on all default endpoint.
-* Input : None.
-* Output : None.
-* Return : Post0_Process.
-*******************************************************************************/
-uint8_t Out0_Process(void)
-{
- uint32_t ControlState = pInformation->ControlState;
-
- if ((ControlState == IN_DATA) || (ControlState == LAST_IN_DATA))
- {
- /* host aborts the transfer before finish */
- ControlState = STALLED;
- }
- else if ((ControlState == OUT_DATA) || (ControlState == LAST_OUT_DATA))
- {
- DataStageOut();
- ControlState = pInformation->ControlState; /* may be changed outside the function */
- }
-
- else if (ControlState == WAIT_STATUS_OUT)
- {
- (*pProperty->Process_Status_OUT)();
- ControlState = STALLED;
- }
-
-
- /* Unexpect state, STALL the endpoint */
- else
- {
- ControlState = STALLED;
- }
-
- pInformation->ControlState = ControlState;
-
- return Post0_Process();
-}
-
-/*******************************************************************************
-* Function Name : Post0_Process
-* Description : Stall the Endpoint 0 in case of error.
-* Input : None.
-* Output : None.
-* Return : - 0 if the control State is in PAUSE
-* - 1 if not.
-*******************************************************************************/
-uint8_t Post0_Process(void)
-{
-
- SetEPRxCount(ENDP0, Device_Property.MaxPacketSize);
-
- if (pInformation->ControlState == STALLED)
- {
- vSetEPRxStatus(EP_RX_STALL);
- vSetEPTxStatus(EP_TX_STALL);
- }
-
- return (pInformation->ControlState == PAUSE);
-}
-
-/*******************************************************************************
-* Function Name : SetDeviceAddress.
-* Description : Set the device and all the used Endpoints addresses.
-* Input : - Val: device address.
-* Output : None.
-* Return : None.
-*******************************************************************************/
-void SetDeviceAddress(uint8_t Val)
-{
- uint32_t i;
- uint32_t nEP = Device_Table.Total_Endpoint;
-
- /* set address in every used endpoint */
- for (i = 0; i < nEP; i++)
- {
- _SetEPAddress((uint8_t)i, (uint8_t)i);
- } /* for */
- _SetDADDR(Val | DADDR_EF); /* set device address and enable function */
-}
-
-/*******************************************************************************
-* Function Name : NOP_Process
-* Description : No operation function.
-* Input : None.
-* Output : None.
-* Return : None.
-*******************************************************************************/
-void NOP_Process(void)
-{
-}
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/workspace/ts100/STM32_USB-FS-Device_Driver/src/usb_init.c b/workspace/ts100/STM32_USB-FS-Device_Driver/src/usb_init.c
deleted file mode 100644
index f9af7988..00000000
--- a/workspace/ts100/STM32_USB-FS-Device_Driver/src/usb_init.c
+++ /dev/null
@@ -1,76 +0,0 @@
-/**
- ******************************************************************************
- * @file usb_init.c
- * @author MCD Application Team
- * @version V4.0.0
- * @date 28-August-2012
- * @brief Initialization routines & global variables
- ******************************************************************************
- * @attention
- *
- * <h2><center>&copy; COPYRIGHT 2012 STMicroelectronics</center></h2>
- *
- * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
- * You may not use this file except in compliance with the License.
- * You may obtain a copy of the License at:
- *
- * http://www.st.com/software_license_agreement_liberty_v2
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- ******************************************************************************
- */
-
-
-/* Includes ------------------------------------------------------------------*/
-#include "usb_lib.h"
-
-/* Private typedef -----------------------------------------------------------*/
-/* Private define ------------------------------------------------------------*/
-/* Private macro -------------------------------------------------------------*/
-/* Private variables ---------------------------------------------------------*/
-/* The number of current endpoint, it will be used to specify an endpoint */
- uint8_t EPindex;
-/* The number of current device, it is an index to the Device_Table */
-/* uint8_t Device_no; */
-/* Points to the DEVICE_INFO structure of current device */
-/* The purpose of this register is to speed up the execution */
-DEVICE_INFO *pInformation;
-/* Points to the DEVICE_PROP structure of current device */
-/* The purpose of this register is to speed up the execution */
-DEVICE_PROP *pProperty;
-/* Temporary save the state of Rx & Tx status. */
-/* Whenever the Rx or Tx state is changed, its value is saved */
-/* in this variable first and will be set to the EPRB or EPRA */
-/* at the end of interrupt process */
-uint16_t SaveState ;
-uint16_t wInterrupt_Mask;
-DEVICE_INFO Device_Info;
-USER_STANDARD_REQUESTS *pUser_Standard_Requests;
-
-/* Extern variables ----------------------------------------------------------*/
-/* Private function prototypes -----------------------------------------------*/
-/* Private functions ---------------------------------------------------------*/
-
-/*******************************************************************************
-* Function Name : USB_Init
-* Description : USB system initialization
-* Input : None.
-* Output : None.
-* Return : None.
-*******************************************************************************/
-void USB_Init(void)
-{
- pInformation = &Device_Info;
- pInformation->ControlState = 2;
- pProperty = &Device_Property;
- pUser_Standard_Requests = &User_Standard_Requests;
- /* Initialize devices one by one */
- pProperty->Init();
-}
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/workspace/ts100/STM32_USB-FS-Device_Driver/src/usb_int.c b/workspace/ts100/STM32_USB-FS-Device_Driver/src/usb_int.c
deleted file mode 100644
index 1c4065dc..00000000
--- a/workspace/ts100/STM32_USB-FS-Device_Driver/src/usb_int.c
+++ /dev/null
@@ -1,195 +0,0 @@
-/**
- ******************************************************************************
- * @file usb_int.c
- * @author MCD Application Team
- * @version V4.0.0
- * @date 28-August-2012
- * @brief Endpoint CTR (Low and High) interrupt's service routines
- ******************************************************************************
- * @attention
- *
- * <h2><center>&copy; COPYRIGHT 2012 STMicroelectronics</center></h2>
- *
- * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
- * You may not use this file except in compliance with the License.
- * You may obtain a copy of the License at:
- *
- * http://www.st.com/software_license_agreement_liberty_v2
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- ******************************************************************************
- */
-
-/* Includes ------------------------------------------------------------------*/
-#include "usb_lib.h"
-
-/* Private typedef -----------------------------------------------------------*/
-/* Private define ------------------------------------------------------------*/
-/* Private macro -------------------------------------------------------------*/
-/* Private variables ---------------------------------------------------------*/
-__IO uint16_t SaveRState;
-__IO uint16_t SaveTState;
-
-/* Extern variables ----------------------------------------------------------*/
-extern void (*pEpInt_IN[7])(void); /* Handles IN interrupts */
-extern void (*pEpInt_OUT[7])(void); /* Handles OUT interrupts */
-
-/* Private function prototypes -----------------------------------------------*/
-/* Private functions ---------------------------------------------------------*/
-
-/*******************************************************************************
-* Function Name : CTR_LP.
-* Description : Low priority Endpoint Correct Transfer interrupt's service
-* routine.
-* Input : None.
-* Output : None.
-* Return : None.
-*******************************************************************************/
-void CTR_LP(void)
-{
- __IO uint16_t wEPVal = 0;
- /* stay in loop while pending interrupts */
- while (((wIstr = _GetISTR()) & ISTR_CTR) != 0)
- {
- /* extract highest priority endpoint number */
- EPindex = (uint8_t)(wIstr & ISTR_EP_ID);
- if (EPindex == 0)
- {
- /* Decode and service control endpoint interrupt */
- /* calling related service routine */
- /* (Setup0_Process, In0_Process, Out0_Process) */
-
- /* save RX & TX status */
- /* and set both to NAK */
-
- SaveRState = _GetENDPOINT(ENDP0);
- SaveTState = SaveRState & EPTX_STAT;
- SaveRState &= EPRX_STAT;
-
- _SetEPRxTxStatus(ENDP0,EP_RX_NAK,EP_TX_NAK);
-
- /* DIR bit = origin of the interrupt */
-
- if ((wIstr & ISTR_DIR) == 0)
- {
- /* DIR = 0 */
-
- /* DIR = 0 => IN int */
- /* DIR = 0 implies that (EP_CTR_TX = 1) always */
-
- _ClearEP_CTR_TX(ENDP0);
- In0_Process();
-
- /* before terminate set Tx & Rx status */
-
- _SetEPRxTxStatus(ENDP0,SaveRState,SaveTState);
- return;
- }
- else
- {
- /* DIR = 1 */
-
- /* DIR = 1 & CTR_RX => SETUP or OUT int */
- /* DIR = 1 & (CTR_TX | CTR_RX) => 2 int pending */
-
- wEPVal = _GetENDPOINT(ENDP0);
-
- if ((wEPVal &EP_SETUP) != 0)
- {
- _ClearEP_CTR_RX(ENDP0); /* SETUP bit kept frozen while CTR_RX = 1 */
- Setup0_Process();
- /* before terminate set Tx & Rx status */
-
- _SetEPRxTxStatus(ENDP0,SaveRState,SaveTState);
- return;
- }
-
- else if ((wEPVal & EP_CTR_RX) != 0)
- {
- _ClearEP_CTR_RX(ENDP0);
- Out0_Process();
- /* before terminate set Tx & Rx status */
-
- _SetEPRxTxStatus(ENDP0,SaveRState,SaveTState);
- return;
- }
- }
- }/* if(EPindex == 0) */
- else
- {
- /* Decode and service non control endpoints interrupt */
-
- /* process related endpoint register */
- wEPVal = _GetENDPOINT(EPindex);
- if ((wEPVal & EP_CTR_RX) != 0)
- {
- /* clear int flag */
- _ClearEP_CTR_RX(EPindex);
-
- /* call OUT service function */
- (*pEpInt_OUT[EPindex-1])();
-
- } /* if((wEPVal & EP_CTR_RX) */
-
- if ((wEPVal & EP_CTR_TX) != 0)
- {
- /* clear int flag */
- _ClearEP_CTR_TX(EPindex);
-
- /* call IN service function */
- (*pEpInt_IN[EPindex-1])();
- } /* if((wEPVal & EP_CTR_TX) != 0) */
-
- }/* if(EPindex == 0) else */
-
- }/* while(...) */
-}
-
-/*******************************************************************************
-* Function Name : CTR_HP.
-* Description : High Priority Endpoint Correct Transfer interrupt's service
-* routine.
-* Input : None.
-* Output : None.
-* Return : None.
-*******************************************************************************/
-void CTR_HP(void)
-{
- uint32_t wEPVal = 0;
-
- while (((wIstr = _GetISTR()) & ISTR_CTR) != 0)
- {
- _SetISTR((uint16_t)CLR_CTR); /* clear CTR flag */
- /* extract highest priority endpoint number */
- EPindex = (uint8_t)(wIstr & ISTR_EP_ID);
- /* process related endpoint register */
- wEPVal = _GetENDPOINT(EPindex);
- if ((wEPVal & EP_CTR_RX) != 0)
- {
- /* clear int flag */
- _ClearEP_CTR_RX(EPindex);
-
- /* call OUT service function */
- (*pEpInt_OUT[EPindex-1])();
-
- } /* if((wEPVal & EP_CTR_RX) */
- else if ((wEPVal & EP_CTR_TX) != 0)
- {
- /* clear int flag */
- _ClearEP_CTR_TX(EPindex);
-
- /* call IN service function */
- (*pEpInt_IN[EPindex-1])();
-
-
- } /* if((wEPVal & EP_CTR_TX) != 0) */
-
- }/* while(...) */
-}
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/workspace/ts100/STM32_USB-FS-Device_Driver/src/usb_mem.c b/workspace/ts100/STM32_USB-FS-Device_Driver/src/usb_mem.c
deleted file mode 100644
index 1e34961c..00000000
--- a/workspace/ts100/STM32_USB-FS-Device_Driver/src/usb_mem.c
+++ /dev/null
@@ -1,87 +0,0 @@
-/**
- ******************************************************************************
- * @file usb_mem.c
- * @author MCD Application Team
- * @version V4.0.0
- * @date 28-August-2012
- * @brief Utility functions for memory transfers to/from PMA
- ******************************************************************************
- * @attention
- *
- * <h2><center>&copy; COPYRIGHT 2012 STMicroelectronics</center></h2>
- *
- * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
- * You may not use this file except in compliance with the License.
- * You may obtain a copy of the License at:
- *
- * http://www.st.com/software_license_agreement_liberty_v2
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- ******************************************************************************
- */
-
-/* Includes ------------------------------------------------------------------*/
-#include "usb_lib.h"
-
-/* Private typedef -----------------------------------------------------------*/
-/* Private define ------------------------------------------------------------*/
-/* Private macro -------------------------------------------------------------*/
-/* Private variables ---------------------------------------------------------*/
-/* Extern variables ----------------------------------------------------------*/
-/* Private function prototypes -----------------------------------------------*/
-/* Private functions ---------------------------------------------------------*/
-
-/*******************************************************************************
-* Function Name : UserToPMABufferCopy
-* Description : Copy a buffer from user memory area to packet memory area (PMA)
-* Input : - pbUsrBuf: pointer to user memory area.
-* - wPMABufAddr: address into PMA.
-* - wNBytes: no. of bytes to be copied.
-* Output : None.
-* Return : None .
-*******************************************************************************/
-void UserToPMABufferCopy(uint8_t *pbUsrBuf, uint16_t wPMABufAddr, uint16_t wNBytes)
-{
- uint32_t n = (wNBytes + 1) >> 1; /* n = (wNBytes + 1) / 2 */
- uint32_t i, temp1, temp2;
- uint16_t *pdwVal;
- pdwVal = (uint16_t *)(wPMABufAddr * 2 + PMAAddr);
- for (i = n; i != 0; i--)
- {
- temp1 = (uint16_t) * pbUsrBuf;
- pbUsrBuf++;
- temp2 = temp1 | (uint16_t) * pbUsrBuf << 8;
- *pdwVal++ = temp2;
- pdwVal++;
- pbUsrBuf++;
- }
-}
-
-/*******************************************************************************
-* Function Name : PMAToUserBufferCopy
-* Description : Copy a buffer from user memory area to packet memory area (PMA)
-* Input : - pbUsrBuf = pointer to user memory area.
-* - wPMABufAddr = address into PMA.
-* - wNBytes = no. of bytes to be copied.
-* Output : None.
-* Return : None.
-*******************************************************************************/
-void PMAToUserBufferCopy(uint8_t *pbUsrBuf, uint16_t wPMABufAddr, uint16_t wNBytes)
-{
- uint32_t n = (wNBytes + 1) >> 1;/* /2*/
- uint32_t i;
- uint32_t *pdwVal;
- pdwVal = (uint32_t *)(wPMABufAddr * 2 + PMAAddr);
- for (i = n; i != 0; i--)
- {
- *(uint16_t*)pbUsrBuf++ = *pdwVal++;
- pbUsrBuf++;
- }
-}
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/workspace/ts100/STM32_USB-FS-Device_Driver/src/usb_regs.c b/workspace/ts100/STM32_USB-FS-Device_Driver/src/usb_regs.c
deleted file mode 100644
index b1dabdab..00000000
--- a/workspace/ts100/STM32_USB-FS-Device_Driver/src/usb_regs.c
+++ /dev/null
@@ -1,760 +0,0 @@
-/**
- ******************************************************************************
- * @file usb_regs.c
- * @author MCD Application Team
- * @version V4.0.0
- * @date 28-August-2012
- * @brief Interface functions to USB cell registers
- ******************************************************************************
- * @attention
- *
- * <h2><center>&copy; COPYRIGHT 2012 STMicroelectronics</center></h2>
- *
- * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
- * You may not use this file except in compliance with the License.
- * You may obtain a copy of the License at:
- *
- * http://www.st.com/software_license_agreement_liberty_v2
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- ******************************************************************************
- */
-
-/* Includes ------------------------------------------------------------------*/
-#include "usb_lib.h"
-
-/* Private typedef -----------------------------------------------------------*/
-/* Private define ------------------------------------------------------------*/
-/* Private macro -------------------------------------------------------------*/
-/* Private variables ---------------------------------------------------------*/
-/* Extern variables ----------------------------------------------------------*/
-/* Private function prototypes -----------------------------------------------*/
-/* Private functions ---------------------------------------------------------*/
-
-/*******************************************************************************
-* Function Name : SetCNTR.
-* Description : Set the CNTR register value.
-* Input : wRegValue: new register value.
-* Output : None.
-* Return : None.
-*******************************************************************************/
-void SetCNTR(uint16_t wRegValue)
-{
- _SetCNTR(wRegValue);
-}
-
-/*******************************************************************************
-* Function Name : GetCNTR.
-* Description : returns the CNTR register value.
-* Input : None.
-* Output : None.
-* Return : CNTR register Value.
-*******************************************************************************/
-uint16_t GetCNTR(void)
-{
- return(_GetCNTR());
-}
-
-/*******************************************************************************
-* Function Name : SetISTR.
-* Description : Set the ISTR register value.
-* Input : wRegValue: new register value.
-* Output : None.
-* Return : None.
-*******************************************************************************/
-void SetISTR(uint16_t wRegValue)
-{
- _SetISTR(wRegValue);
-}
-
-/*******************************************************************************
-* Function Name : GetISTR
-* Description : Returns the ISTR register value.
-* Input : None.
-* Output : None.
-* Return : ISTR register Value
-*******************************************************************************/
-uint16_t GetISTR(void)
-{
- return(_GetISTR());
-}
-
-/*******************************************************************************
-* Function Name : GetFNR
-* Description : Returns the FNR register value.
-* Input : None.
-* Output : None.
-* Return : FNR register Value
-*******************************************************************************/
-uint16_t GetFNR(void)
-{
- return(_GetFNR());
-}
-
-/*******************************************************************************
-* Function Name : SetDADDR
-* Description : Set the DADDR register value.
-* Input : wRegValue: new register value.
-* Output : None.
-* Return : None.
-*******************************************************************************/
-void SetDADDR(uint16_t wRegValue)
-{
- _SetDADDR(wRegValue);
-}
-
-/*******************************************************************************
-* Function Name : GetDADDR
-* Description : Returns the DADDR register value.
-* Input : None.
-* Output : None.
-* Return : DADDR register Value
-*******************************************************************************/
-uint16_t GetDADDR(void)
-{
- return(_GetDADDR());
-}
-
-/*******************************************************************************
-* Function Name : SetBTABLE
-* Description : Set the BTABLE.
-* Input : wRegValue: New register value.
-* Output : None.
-* Return : None.
-*******************************************************************************/
-void SetBTABLE(uint16_t wRegValue)
-{
- _SetBTABLE(wRegValue);
-}
-
-/*******************************************************************************
-* Function Name : GetBTABLE.
-* Description : Returns the BTABLE register value.
-* Input : None.
-* Output : None.
-* Return : BTABLE address.
-*******************************************************************************/
-uint16_t GetBTABLE(void)
-{
- return(_GetBTABLE());
-}
-
-/*******************************************************************************
-* Function Name : SetENDPOINT
-* Description : Set the Endpoint register value.
-* Input : bEpNum: Endpoint Number.
-* wRegValue.
-* Output : None.
-* Return : None.
-*******************************************************************************/
-void SetENDPOINT(uint8_t bEpNum, uint16_t wRegValue)
-{
- _SetENDPOINT(bEpNum, wRegValue);
-}
-
-/*******************************************************************************
-* Function Name : GetENDPOINT
-* Description : Return the Endpoint register value.
-* Input : bEpNum: Endpoint Number.
-* Output : None.
-* Return : Endpoint register value.
-*******************************************************************************/
-uint16_t GetENDPOINT(uint8_t bEpNum)
-{
- return(_GetENDPOINT(bEpNum));
-}
-
-/*******************************************************************************
-* Function Name : SetEPType
-* Description : sets the type in the endpoint register.
-* Input : bEpNum: Endpoint Number.
-* wType: type definition.
-* Output : None.
-* Return : None.
-*******************************************************************************/
-void SetEPType(uint8_t bEpNum, uint16_t wType)
-{
- _SetEPType(bEpNum, wType);
-}
-
-/*******************************************************************************
-* Function Name : GetEPType
-* Description : Returns the endpoint type.
-* Input : bEpNum: Endpoint Number.
-* Output : None.
-* Return : Endpoint Type
-*******************************************************************************/
-uint16_t GetEPType(uint8_t bEpNum)
-{
- return(_GetEPType(bEpNum));
-}
-
-/*******************************************************************************
-* Function Name : SetEPTxStatus
-* Description : Set the status of Tx endpoint.
-* Input : bEpNum: Endpoint Number.
-* wState: new state.
-* Output : None.
-* Return : None.
-*******************************************************************************/
-void SetEPTxStatus(uint8_t bEpNum, uint16_t wState)
-{
- _SetEPTxStatus(bEpNum, wState);
-}
-
-/*******************************************************************************
-* Function Name : SetEPRxStatus
-* Description : Set the status of Rx endpoint.
-* Input : bEpNum: Endpoint Number.
-* wState: new state.
-* Output : None.
-* Return : None.
-*******************************************************************************/
-void SetEPRxStatus(uint8_t bEpNum, uint16_t wState)
-{
- _SetEPRxStatus(bEpNum, wState);
-}
-
-/*******************************************************************************
-* Function Name : SetDouBleBuffEPStall
-* Description : sets the status for Double Buffer Endpoint to STALL
-* Input : bEpNum: Endpoint Number.
-* bDir: Endpoint direction.
-* Output : None.
-* Return : None.
-*******************************************************************************/
-void SetDouBleBuffEPStall(uint8_t bEpNum, uint8_t bDir)
-{
- uint16_t Endpoint_DTOG_Status;
- Endpoint_DTOG_Status = GetENDPOINT(bEpNum);
- if (bDir == EP_DBUF_OUT)
- { /* OUT double buffered endpoint */
- _SetENDPOINT(bEpNum, Endpoint_DTOG_Status & ~EPRX_DTOG1);
- }
- else if (bDir == EP_DBUF_IN)
- { /* IN double buffered endpoint */
- _SetENDPOINT(bEpNum, Endpoint_DTOG_Status & ~EPTX_DTOG1);
- }
-}
-
-/*******************************************************************************
-* Function Name : GetEPTxStatus
-* Description : Returns the endpoint Tx status.
-* Input : bEpNum: Endpoint Number.
-* Output : None.
-* Return : Endpoint TX Status
-*******************************************************************************/
-uint16_t GetEPTxStatus(uint8_t bEpNum)
-{
- return(_GetEPTxStatus(bEpNum));
-}
-
-/*******************************************************************************
-* Function Name : GetEPRxStatus
-* Description : Returns the endpoint Rx status.
-* Input : bEpNum: Endpoint Number.
-* Output : None.
-* Return : Endpoint RX Status
-*******************************************************************************/
-uint16_t GetEPRxStatus(uint8_t bEpNum)
-{
- return(_GetEPRxStatus(bEpNum));
-}
-
-/*******************************************************************************
-* Function Name : SetEPTxValid
-* Description : Valid the endpoint Tx Status.
-* Input : bEpNum: Endpoint Number.
-* Output : None.
-* Return : None.
-*******************************************************************************/
-void SetEPTxValid(uint8_t bEpNum)
-{
- _SetEPTxStatus(bEpNum, EP_TX_VALID);
-}
-
-/*******************************************************************************
-* Function Name : SetEPRxValid
-* Description : Valid the endpoint Rx Status.
-* Input : bEpNum: Endpoint Number.
-* Output : None.
-* Return : None.
-*******************************************************************************/
-void SetEPRxValid(uint8_t bEpNum)
-{
- _SetEPRxStatus(bEpNum, EP_RX_VALID);
-}
-
-/*******************************************************************************
-* Function Name : SetEP_KIND
-* Description : Clear the EP_KIND bit.
-* Input : bEpNum: Endpoint Number.
-* Output : None.
-* Return : None.
-*******************************************************************************/
-void SetEP_KIND(uint8_t bEpNum)
-{
- _SetEP_KIND(bEpNum);
-}
-
-/*******************************************************************************
-* Function Name : ClearEP_KIND
-* Description : set the EP_KIND bit.
-* Input : bEpNum: Endpoint Number.
-* Output : None.
-* Return : None.
-*******************************************************************************/
-void ClearEP_KIND(uint8_t bEpNum)
-{
- _ClearEP_KIND(bEpNum);
-}
-/*******************************************************************************
-* Function Name : Clear_Status_Out
-* Description : Clear the Status Out of the related Endpoint
-* Input : bEpNum: Endpoint Number.
-* Output : None.
-* Return : None.
-*******************************************************************************/
-void Clear_Status_Out(uint8_t bEpNum)
-{
- _ClearEP_KIND(bEpNum);
-}
-/*******************************************************************************
-* Function Name : Set_Status_Out
-* Description : Set the Status Out of the related Endpoint
-* Input : bEpNum: Endpoint Number.
-* Output : None.
-* Return : None.
-*******************************************************************************/
-void Set_Status_Out(uint8_t bEpNum)
-{
- _SetEP_KIND(bEpNum);
-}
-/*******************************************************************************
-* Function Name : SetEPDoubleBuff
-* Description : Enable the double buffer feature for the endpoint.
-* Input : bEpNum: Endpoint Number.
-* Output : None.
-* Return : None.
-*******************************************************************************/
-void SetEPDoubleBuff(uint8_t bEpNum)
-{
- _SetEP_KIND(bEpNum);
-}
-/*******************************************************************************
-* Function Name : ClearEPDoubleBuff
-* Description : Disable the double buffer feature for the endpoint.
-* Input : bEpNum: Endpoint Number.
-* Output : None.
-* Return : None.
-*******************************************************************************/
-void ClearEPDoubleBuff(uint8_t bEpNum)
-{
- _ClearEP_KIND(bEpNum);
-}
-/*******************************************************************************
-* Function Name : GetTxStallStatus
-* Description : Returns the Stall status of the Tx endpoint.
-* Input : bEpNum: Endpoint Number.
-* Output : None.
-* Return : Tx Stall status.
-*******************************************************************************/
-uint16_t GetTxStallStatus(uint8_t bEpNum)
-{
- return(_GetTxStallStatus(bEpNum));
-}
-/*******************************************************************************
-* Function Name : GetRxStallStatus
-* Description : Returns the Stall status of the Rx endpoint.
-* Input : bEpNum: Endpoint Number.
-* Output : None.
-* Return : Rx Stall status.
-*******************************************************************************/
-uint16_t GetRxStallStatus(uint8_t bEpNum)
-{
- return(_GetRxStallStatus(bEpNum));
-}
-/*******************************************************************************
-* Function Name : ClearEP_CTR_RX
-* Description : Clear the CTR_RX bit.
-* Input : bEpNum: Endpoint Number.
-* Output : None.
-* Return : None.
-*******************************************************************************/
-void ClearEP_CTR_RX(uint8_t bEpNum)
-{
- _ClearEP_CTR_RX(bEpNum);
-}
-/*******************************************************************************
-* Function Name : ClearEP_CTR_TX
-* Description : Clear the CTR_TX bit.
-* Input : bEpNum: Endpoint Number.
-* Output : None.
-* Return : None.
-*******************************************************************************/
-void ClearEP_CTR_TX(uint8_t bEpNum)
-{
- _ClearEP_CTR_TX(bEpNum);
-}
-/*******************************************************************************
-* Function Name : ToggleDTOG_RX
-* Description : Toggle the DTOG_RX bit.
-* Input : bEpNum: Endpoint Number.
-* Output : None.
-* Return : None.
-*******************************************************************************/
-void ToggleDTOG_RX(uint8_t bEpNum)
-{
- _ToggleDTOG_RX(bEpNum);
-}
-/*******************************************************************************
-* Function Name : ToggleDTOG_TX
-* Description : Toggle the DTOG_TX bit.
-* Input : bEpNum: Endpoint Number.
-* Output : None.
-* Return : None.
-*******************************************************************************/
-void ToggleDTOG_TX(uint8_t bEpNum)
-{
- _ToggleDTOG_TX(bEpNum);
-}
-/*******************************************************************************
-* Function Name : ClearDTOG_RX.
-* Description : Clear the DTOG_RX bit.
-* Input : bEpNum: Endpoint Number.
-* Output : None.
-* Return : None.
-*******************************************************************************/
-void ClearDTOG_RX(uint8_t bEpNum)
-{
- _ClearDTOG_RX(bEpNum);
-}
-/*******************************************************************************
-* Function Name : ClearDTOG_TX.
-* Description : Clear the DTOG_TX bit.
-* Input : bEpNum: Endpoint Number.
-* Output : None.
-* Return : None.
-*******************************************************************************/
-void ClearDTOG_TX(uint8_t bEpNum)
-{
- _ClearDTOG_TX(bEpNum);
-}
-/*******************************************************************************
-* Function Name : SetEPAddress
-* Description : Set the endpoint address.
-* Input : bEpNum: Endpoint Number.
-* bAddr: New endpoint address.
-* Output : None.
-* Return : None.
-*******************************************************************************/
-void SetEPAddress(uint8_t bEpNum, uint8_t bAddr)
-{
- _SetEPAddress(bEpNum, bAddr);
-}
-/*******************************************************************************
-* Function Name : GetEPAddress
-* Description : Get the endpoint address.
-* Input : bEpNum: Endpoint Number.
-* Output : None.
-* Return : Endpoint address.
-*******************************************************************************/
-uint8_t GetEPAddress(uint8_t bEpNum)
-{
- return(_GetEPAddress(bEpNum));
-}
-/*******************************************************************************
-* Function Name : SetEPTxAddr
-* Description : Set the endpoint Tx buffer address.
-* Input : bEpNum: Endpoint Number.
-* wAddr: new address.
-* Output : None.
-* Return : None.
-*******************************************************************************/
-void SetEPTxAddr(uint8_t bEpNum, uint16_t wAddr)
-{
- _SetEPTxAddr(bEpNum, wAddr);
-}
-/*******************************************************************************
-* Function Name : SetEPRxAddr
-* Description : Set the endpoint Rx buffer address.
-* Input : bEpNum: Endpoint Number.
-* wAddr: new address.
-* Output : None.
-* Return : None.
-*******************************************************************************/
-void SetEPRxAddr(uint8_t bEpNum, uint16_t wAddr)
-{
- _SetEPRxAddr(bEpNum, wAddr);
-}
-/*******************************************************************************
-* Function Name : GetEPTxAddr
-* Description : Returns the endpoint Tx buffer address.
-* Input : bEpNum: Endpoint Number.
-* Output : None.
-* Return : Rx buffer address.
-*******************************************************************************/
-uint16_t GetEPTxAddr(uint8_t bEpNum)
-{
- return(_GetEPTxAddr(bEpNum));
-}
-/*******************************************************************************
-* Function Name : GetEPRxAddr.
-* Description : Returns the endpoint Rx buffer address.
-* Input : bEpNum: Endpoint Number.
-* Output : None.
-* Return : Rx buffer address.
-*******************************************************************************/
-uint16_t GetEPRxAddr(uint8_t bEpNum)
-{
- return(_GetEPRxAddr(bEpNum));
-}
-/*******************************************************************************
-* Function Name : SetEPTxCount.
-* Description : Set the Tx count.
-* Input : bEpNum: Endpoint Number.
-* wCount: new count value.
-* Output : None.
-* Return : None.
-*******************************************************************************/
-void SetEPTxCount(uint8_t bEpNum, uint16_t wCount)
-{
- _SetEPTxCount(bEpNum, wCount);
-}
-/*******************************************************************************
-* Function Name : SetEPCountRxReg.
-* Description : Set the Count Rx Register value.
-* Input : *pdwReg: point to the register.
-* wCount: the new register value.
-* Output : None.
-* Return : None.
-*******************************************************************************/
-void SetEPCountRxReg(uint32_t *pdwReg, uint16_t wCount)
-{
- _SetEPCountRxReg(dwReg, wCount);
-}
-/*******************************************************************************
-* Function Name : SetEPRxCount
-* Description : Set the Rx count.
-* Input : bEpNum: Endpoint Number.
-* wCount: the new count value.
-* Output : None.
-* Return : None.
-*******************************************************************************/
-void SetEPRxCount(uint8_t bEpNum, uint16_t wCount)
-{
- _SetEPRxCount(bEpNum, wCount);
-}
-/*******************************************************************************
-* Function Name : GetEPTxCount
-* Description : Get the Tx count.
-* Input : bEpNum: Endpoint Number.
-* Output : None
-* Return : Tx count value.
-*******************************************************************************/
-uint16_t GetEPTxCount(uint8_t bEpNum)
-{
- return(_GetEPTxCount(bEpNum));
-}
-/*******************************************************************************
-* Function Name : GetEPRxCount
-* Description : Get the Rx count.
-* Input : bEpNum: Endpoint Number.
-* Output : None.
-* Return : Rx count value.
-*******************************************************************************/
-uint16_t GetEPRxCount(uint8_t bEpNum)
-{
- return(_GetEPRxCount(bEpNum));
-}
-/*******************************************************************************
-* Function Name : SetEPDblBuffAddr
-* Description : Set the addresses of the buffer 0 and 1.
-* Input : bEpNum: Endpoint Number.
-* wBuf0Addr: new address of buffer 0.
-* wBuf1Addr: new address of buffer 1.
-* Output : None.
-* Return : None.
-*******************************************************************************/
-void SetEPDblBuffAddr(uint8_t bEpNum, uint16_t wBuf0Addr, uint16_t wBuf1Addr)
-{
- _SetEPDblBuffAddr(bEpNum, wBuf0Addr, wBuf1Addr);
-}
-/*******************************************************************************
-* Function Name : SetEPDblBuf0Addr
-* Description : Set the Buffer 1 address.
-* Input : bEpNum: Endpoint Number
-* wBuf0Addr: new address.
-* Output : None.
-* Return : None.
-*******************************************************************************/
-void SetEPDblBuf0Addr(uint8_t bEpNum, uint16_t wBuf0Addr)
-{
- _SetEPDblBuf0Addr(bEpNum, wBuf0Addr);
-}
-/*******************************************************************************
-* Function Name : SetEPDblBuf1Addr
-* Description : Set the Buffer 1 address.
-* Input : bEpNum: Endpoint Number
-* wBuf1Addr: new address.
-* Output : None.
-* Return : None.
-*******************************************************************************/
-void SetEPDblBuf1Addr(uint8_t bEpNum, uint16_t wBuf1Addr)
-{
- _SetEPDblBuf1Addr(bEpNum, wBuf1Addr);
-}
-/*******************************************************************************
-* Function Name : GetEPDblBuf0Addr
-* Description : Returns the address of the Buffer 0.
-* Input : bEpNum: Endpoint Number.
-* Output : None.
-* Return : None.
-*******************************************************************************/
-uint16_t GetEPDblBuf0Addr(uint8_t bEpNum)
-{
- return(_GetEPDblBuf0Addr(bEpNum));
-}
-/*******************************************************************************
-* Function Name : GetEPDblBuf1Addr
-* Description : Returns the address of the Buffer 1.
-* Input : bEpNum: Endpoint Number.
-* Output : None.
-* Return : Address of the Buffer 1.
-*******************************************************************************/
-uint16_t GetEPDblBuf1Addr(uint8_t bEpNum)
-{
- return(_GetEPDblBuf1Addr(bEpNum));
-}
-/*******************************************************************************
-* Function Name : SetEPDblBuffCount
-* Description : Set the number of bytes for a double Buffer
-* endpoint.
-* Input : bEpNum,bDir, wCount
-* Output : None.
-* Return : None.
-*******************************************************************************/
-void SetEPDblBuffCount(uint8_t bEpNum, uint8_t bDir, uint16_t wCount)
-{
- _SetEPDblBuffCount(bEpNum, bDir, wCount);
-}
-/*******************************************************************************
-* Function Name : SetEPDblBuf0Count
-* Description : Set the number of bytes in the buffer 0 of a double Buffer
-* endpoint.
-* Input : bEpNum, bDir, wCount
-* Output : None.
-* Return : None.
-*******************************************************************************/
-void SetEPDblBuf0Count(uint8_t bEpNum, uint8_t bDir, uint16_t wCount)
-{
- _SetEPDblBuf0Count(bEpNum, bDir, wCount);
-}
-/*******************************************************************************
-* Function Name : SetEPDblBuf1Count
-* Description : Set the number of bytes in the buffer 0 of a double Buffer
-* endpoint.
-* Input : bEpNum, bDir, wCount
-* Output : None.
-* Return : None.
-*******************************************************************************/
-void SetEPDblBuf1Count(uint8_t bEpNum, uint8_t bDir, uint16_t wCount)
-{
- _SetEPDblBuf1Count(bEpNum, bDir, wCount);
-}
-/*******************************************************************************
-* Function Name : GetEPDblBuf0Count
-* Description : Returns the number of byte received in the buffer 0 of a double
-* Buffer endpoint.
-* Input : bEpNum: Endpoint Number.
-* Output : None.
-* Return : Endpoint Buffer 0 count
-*******************************************************************************/
-uint16_t GetEPDblBuf0Count(uint8_t bEpNum)
-{
- return(_GetEPDblBuf0Count(bEpNum));
-}
-/*******************************************************************************
-* Function Name : GetEPDblBuf1Count
-* Description : Returns the number of data received in the buffer 1 of a double
-* Buffer endpoint.
-* Input : bEpNum: Endpoint Number.
-* Output : None.
-* Return : Endpoint Buffer 1 count.
-*******************************************************************************/
-uint16_t GetEPDblBuf1Count(uint8_t bEpNum)
-{
- return(_GetEPDblBuf1Count(bEpNum));
-}
-/*******************************************************************************
-* Function Name : GetEPDblBufDir
-* Description : gets direction of the double buffered endpoint
-* Input : bEpNum: Endpoint Number.
-* Output : None.
-* Return : EP_DBUF_OUT, EP_DBUF_IN,
-* EP_DBUF_ERR if the endpoint counter not yet programmed.
-*******************************************************************************/
-EP_DBUF_DIR GetEPDblBufDir(uint8_t bEpNum)
-{
- if ((uint16_t)(*_pEPRxCount(bEpNum) & 0xFC00) != 0)
- return(EP_DBUF_OUT);
- else if (((uint16_t)(*_pEPTxCount(bEpNum)) & 0x03FF) != 0)
- return(EP_DBUF_IN);
- else
- return(EP_DBUF_ERR);
-}
-/*******************************************************************************
-* Function Name : FreeUserBuffer
-* Description : free buffer used from the application realizing it to the line
- toggles bit SW_BUF in the double buffered endpoint register
-* Input : bEpNum, bDir
-* Output : None.
-* Return : None.
-*******************************************************************************/
-void FreeUserBuffer(uint8_t bEpNum, uint8_t bDir)
-{
- if (bDir == EP_DBUF_OUT)
- { /* OUT double buffered endpoint */
- _ToggleDTOG_TX(bEpNum);
- }
- else if (bDir == EP_DBUF_IN)
- { /* IN double buffered endpoint */
- _ToggleDTOG_RX(bEpNum);
- }
-}
-
-/*******************************************************************************
-* Function Name : ToWord
-* Description : merge two byte in a word.
-* Input : bh: byte high, bl: bytes low.
-* Output : None.
-* Return : resulted word.
-*******************************************************************************/
-uint16_t ToWord(uint8_t bh, uint8_t bl)
-{
- uint16_t wRet;
- wRet = (uint16_t)bl | ((uint16_t)bh << 8);
- return(wRet);
-}
-/*******************************************************************************
-* Function Name : ByteSwap
-* Description : Swap two byte in a word.
-* Input : wSwW: word to Swap.
-* Output : None.
-* Return : resulted word.
-*******************************************************************************/
-uint16_t ByteSwap(uint16_t wSwW)
-{
- uint8_t bTemp;
- uint16_t wRet;
- bTemp = (uint8_t)(wSwW & 0xff);
- wRet = (wSwW >> 8) | ((uint16_t)bTemp << 8);
- return(wRet);
-}
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/workspace/ts100/STM32_USB-FS-Device_Driver/src/usb_sil.c b/workspace/ts100/STM32_USB-FS-Device_Driver/src/usb_sil.c
deleted file mode 100644
index 24199049..00000000
--- a/workspace/ts100/STM32_USB-FS-Device_Driver/src/usb_sil.c
+++ /dev/null
@@ -1,103 +0,0 @@
-/**
- ******************************************************************************
- * @file usb_sil.c
- * @author MCD Application Team
- * @version V4.0.0
- * @date 28-August-2012
- * @brief Simplified Interface Layer for Global Initialization and Endpoint
- * Rea/Write operations.
- ******************************************************************************
- * @attention
- *
- * <h2><center>&copy; COPYRIGHT 2012 STMicroelectronics</center></h2>
- *
- * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
- * You may not use this file except in compliance with the License.
- * You may obtain a copy of the License at:
- *
- * http://www.st.com/software_license_agreement_liberty_v2
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- ******************************************************************************
- */
-
-
-/* Includes ------------------------------------------------------------------*/
-#include "usb_lib.h"
-
-/* Private typedef -----------------------------------------------------------*/
-/* Private define ------------------------------------------------------------*/
-/* Private macro -------------------------------------------------------------*/
-/* Private variables ---------------------------------------------------------*/
-/* Extern variables ----------------------------------------------------------*/
-/* Private function prototypes -----------------------------------------------*/
-/* Private functions ---------------------------------------------------------*/
-
-/*******************************************************************************
-* Function Name : USB_SIL_Init
-* Description : Initialize the USB Device IP and the Endpoint 0.
-* Input : None.
-* Output : None.
-* Return : Status.
-*******************************************************************************/
-uint32_t USB_SIL_Init(void)
-{
- /* USB interrupts initialization */
- /* clear pending interrupts */
- _SetISTR(0);
- wInterrupt_Mask = IMR_MSK;
- /* set interrupts mask */
- _SetCNTR(wInterrupt_Mask);
- return 0;
-}
-
-/*******************************************************************************
-* Function Name : USB_SIL_Write
-* Description : Write a buffer of data to a selected endpoint.
-* Input : - bEpAddr: The address of the non control endpoint.
-* - pBufferPointer: The pointer to the buffer of data to be written
-* to the endpoint.
-* - wBufferSize: Number of data to be written (in bytes).
-* Output : None.
-* Return : Status.
-*******************************************************************************/
-uint32_t USB_SIL_Write(uint8_t bEpAddr, uint8_t* pBufferPointer, uint32_t wBufferSize)
-{
- /* Use the memory interface function to write to the selected endpoint */
- UserToPMABufferCopy(pBufferPointer, GetEPTxAddr(bEpAddr & 0x7F), wBufferSize);
-
- /* Update the data length in the control register */
- SetEPTxCount((bEpAddr & 0x7F), wBufferSize);
-
- return 0;
-}
-
-/*******************************************************************************
-* Function Name : USB_SIL_Read
-* Description : Write a buffer of data to a selected endpoint.
-* Input : - bEpAddr: The address of the non control endpoint.
-* - pBufferPointer: The pointer to which will be saved the
-* received data buffer.
-* Output : None.
-* Return : Number of received data (in Bytes).
-*******************************************************************************/
-uint32_t USB_SIL_Read(uint8_t bEpAddr, uint8_t* pBufferPointer)
-{
- uint32_t DataLength = 0;
-
- /* Get the number of received data on the selected Endpoint */
- DataLength = GetEPRxCount(bEpAddr & 0x7F);
-
- /* Use the memory interface function to write to the selected endpoint */
- PMAToUserBufferCopy(pBufferPointer, GetEPRxAddr(bEpAddr & 0x7F), DataLength);
-
- /* Return the number of received data */
- return DataLength;
-}
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/workspace/ts100/inc/APP_Version.h b/workspace/ts100/inc/APP_Version.h
deleted file mode 100644
index e3ad3308..00000000
--- a/workspace/ts100/inc/APP_Version.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/********************* (C) COPYRIGHT 2015 e-Design Co.,Ltd. ********************
- File Name : APP_Version.h
- Version : S100 APP Ver 2.11
- Description:
- Author : bure & Celery
- Data: 2015/08/03
- History:
- 2015/08/03 ͳһ������
- *******************************************************************************/
-
-#ifndef __VERSION_H
-#define __VERSION_H
-
-#define M_VER 'V','0'
-#define S_VER '0','1'
-#define OEM_TYPE "0"
-#define APP_BASE 0x0800C000/*Start address of the virtual disk*/
-
-/*----------------------------------------------------------------------------*/
-#ifdef TYPE_DS201
-#define PRODUCT_INFO "DS201"
-#define SCH_VER "1.7B"
-#else
- #ifdef TYPE_DS202
- #include "DS202V1_6.h"
- #define FLASH_PAGE 0x0800
- #else
- #ifdef TYPE_DS203
- #define PRODUCT_INFO "DS203"
- #define SCH_VER "2.70"
- #else
- #ifdef TYPE_S100
- #define PRODUCT_INFO "TS100"
- #include "S100V0_1.h"
- #endif
- #endif
- #endif
-#endif
-
-/*----------------------------------------------------------------------------*/
-#define DFU_VER {M_VER,'.',S_VER,LCD_M, 0}
-#endif /* VERSION_H */
-/********************************* END OF FILE ******************************/
diff --git a/workspace/ts100/inc/Analog.h b/workspace/ts100/inc/Analog.h
new file mode 100644
index 00000000..d4bae0d8
--- /dev/null
+++ b/workspace/ts100/inc/Analog.h
@@ -0,0 +1,20 @@
+/*
+ * Analog.h
+ *
+ * Created on: 20 Sep 2016
+ * Author: ralim
+ *
+ * Interface to the ADC's basically
+ */
+
+#ifndef ANALOG_H_
+#define ANALOG_H_
+#include "stm32f10x.h"
+#include "Bios.h"
+#include "Interrupt.h"
+extern volatile uint16_t ADC1ConvertedValue[2];
+
+uint16_t Get_ADC1Value(uint8_t i);
+uint16_t readIronTemp(uint16_t calibration,uint8_t read);//read the iron temp in C X10
+uint16_t readDCVoltage();/*Get the system voltage X10*/
+#endif /* ANALOG_H_ */
diff --git a/workspace/ts100/inc/Bios.h b/workspace/ts100/inc/Bios.h
index aa3e5bef..84faab60 100644
--- a/workspace/ts100/inc/Bios.h
+++ b/workspace/ts100/inc/Bios.h
@@ -1,59 +1,44 @@
-/********************* (C) COPYRIGHT 2015 e-Design Co.,Ltd. ********************
-File Name : Bios.h
-Version : S100 APP Ver 2.11
-Description:
-Author : bure & Celery
-Data: 2015/08/03
-History:
-2015/08/03 ͳһ������
-*******************************************************************************/
-
+/*
+ * Setup functions for the basic hardware present in the system
+ */
#ifndef __BIOS_H
#define __BIOS_H
#include "stm32f10x.h"
-#include "S100V0_1.h"
-extern volatile u32 gTime[];
-
-#define USB_DN_OUT() GPIOA->CRH = (GPIOA->CRH & 0xFFFF3FFF) | 0x00003000
-#define USB_DP_OUT() GPIOA->CRH = (GPIOA->CRH & 0xFFF3FFFF) | 0x00030000
-
-#define USB_DN_EN() GPIOA->CRH = (GPIOA->CRH & 0xFFFFBFFF) | 0x0000B000
-#define USB_DP_EN() GPIOA->CRH = (GPIOA->CRH & 0xFFFBFFFF) | 0x000B0000
-
-#define USB_DP_PD() GPIOA->CRH = (GPIOA->CRH & 0xFFF3FFFF) | 0x00030000
-
-#define USB_DN_HIGH() GPIOA->BSRR = GPIO_Pin_11
-#define USB_DP_HIGH() GPIOA->BSRR = GPIO_Pin_12
-
-#define USB_DN_LOW() GPIOA->BRR = GPIO_Pin_11
-#define USB_DP_LOW() GPIOA->BRR = GPIO_Pin_12
-
-#define LOW 0
-#define HIGH 1
-
-#define BLINK 1 // Bit0 : 0/1 ��ʾ/��˸״̬��־
-#define WAIT_TIMES 100000
-
-
-#define SECTOR_SIZE 512
-#define SECTOR_CNT 4096
-#define HEAT_T 200
-
+#include "S100V0_1.h"/*For pin definitions*/
+#include "Analog.h"/*So that we can attach the DMA to the output array*/
+#include "stm32f10x_flash.h"
+#include "stm32f10x_rcc.h"
+#include "stm32f10x_dma.h"
+#include "stm32f10x_adc.h"
+#include "stm32f10x_tim.h"
+#include "stm32f10x_exti.h"
+#include "stm32f10x_iwdg.h"
+#include "misc.h"
+extern volatile uint32_t gHeat_cnt;
+
+inline void setIronTimer(uint32_t time) {
+ gHeat_cnt = time;
+}
+inline uint32_t getIronTimer() {
+ return gHeat_cnt;
+}
+/*Get set the remaining toggles of the heater output*/
u32 Get_HeatingTime(void);
void Set_HeatingTime(u32 heating_time);
-u16 Get_AdcValue(u8 i);
+
void Init_Gtime(void);
-void Delay_Ms(u32 ms);
-void Delay_HalfMs(u32 ms);
void USB_Port(u8 state);
void NVIC_Config(u16 tab_offset);
void RCC_Config(void);
void GPIO_Config(void);
void Adc_Init(void);
-void Init_Timer2(void);
void Init_Timer3(void);
-void TIM2_ISR(void);
+/*Interrupts*/
void TIM3_ISR(void);
+void Init_EXTI(void);
+/*Watchdog*/
+void Start_Watchdog(uint32_t ms);
+void Clear_Watchdog(void);
#endif
-/********************************* END OF FILE ********************************/
+
diff --git a/workspace/ts100/inc/CTRL.h b/workspace/ts100/inc/CTRL.h
deleted file mode 100644
index 58745dfe..00000000
--- a/workspace/ts100/inc/CTRL.h
+++ /dev/null
@@ -1,70 +0,0 @@
-/********************* (C) COPYRIGHT 2015 e-Design Co.,Ltd. **********************
- File Name : CTRL.h
- Version : S100 APP Ver 2.11
- Description:
- Author : Celery
- Data: 2015/07/07
- History:
- 2015/07/07 ͳһ������
- *******************************************************************************/
-#ifndef _CTRL_H
-#define _CTRL_H
-
-#include "stm32f10x.h"
-#include "Bios.h"
-
-#define TEMPSHOW_TIMER gTime[0]/*TEMPSHOW_TIMER*/
-#define HEATING_TIMER gTime[1]/*HEATING_TIMER*/
-#define ENTER_WAIT_TIMER gTime[2]/*ENTER_WAIT_TIMER*/
-#define EFFECTIVE_KEY_TIMER gTime[3]/*EFFECTIVE_KEY_TIMER*/
-#define LEAVE_WAIT_TIMER gTime[4]/*LEAVE_WAIT_TIMER*/
-#define G6_TIMER gTime[5]/*SWITCH_SHOW_TIMER*/
-#define UI_TIMER gTime[6]/*UI_TIMER ͼ���������ʱ�����*/
-#define KD_TIMER gTime[7]/*������ʱ*/
-
-///^^-- All the times in gTime are decremented by 1 if >0 by timer2 tick <bottom of bios.c>
-//------------------------------ ��������------------------------------------//
-#define KEY_ST(KEY_PIN) GPIO_ReadInputDataBit(GPIOA, KEY_PIN)
-#define NO_KEY 0x0 /*NO Keys pressed*/
-#define KEY_V1 0x0100/*V1 key pressed*/
-#define KEY_V2 0x0040/*V2 Key pressed*/
-#define KEY_CN 0X8000/*(Long key press i think)*/
-#define KEY_V3 (KEY_V1|KEY_V2)/*Both Keys pressed*/
-
-typedef enum WORK_STATUS {
- IDLE = 1, //System is idle
- THERMOMETER, //Thermometer mode, basically reads sensor and shows temp
- TEMP_CTR, //Soldering Mode (Temp Controlled)
- WAIT, //System in wait state
- TEMP_SET, //Setting the soldering temp
- CONFIG, //system config mode
- MODE_CNG, //DFU mode i think??
- ALARM, //An alarm has been fired
-} WORK_STATUS;
-
-typedef enum WARNING_STATUS {
- NORMAL_TEMP = 1, HIGH_TEMP, SEN_ERR, HIGH_VOLTAGE, LOW_VOLTAGE,
-} WARNING_STATUS;
-
-typedef struct {
- u8 ver[16];
- s16 t_standby; // 200��C=1800 2520,�����¶�
- s16 t_work; // 350��C=3362, �����¶�
- s16 t_step; //����
- u32 wait_time; //3*60*100 3 mintute
- u32 idle_time; //6*60*100 6 minute
-} DEVICE_INFO_SYS;
-
-extern DEVICE_INFO_SYS device_info;
-void Set_PrevTemp(s16 Temp);
-u8 Get_CtrlStatus(void);
-void Set_CtrlStatus(u8 status);
-s16 Get_TempVal(void);
-u16 Get_HtFlag(void);
-void System_Init(void);
-void Pid_Init(void);
-u16 Pid_Realize(s16 temp);
-u32 Heating_Time(s16 temp, s16 wk_temp);
-void Status_Tran(void);
-#endif
-/******************************** END OF FILE *********************************/
diff --git a/workspace/ts100/inc/Disk.h b/workspace/ts100/inc/Disk.h
deleted file mode 100644
index 6bc1aacd..00000000
--- a/workspace/ts100/inc/Disk.h
+++ /dev/null
@@ -1,95 +0,0 @@
-/********************* (C) COPYRIGHT 2015 e-Design Co.,Ltd. **********************
- File Name : Disk.h
- Version : S100 APP Ver 2.11
- Description:
- Author : Celery
- Data: 2015/08/03
- History:
- 2016/09/13 : Ben V. Brown - english comments
- 2015/08/03 :
- *******************************************************************************/
-#ifndef __DISK_H
-#define __DISK_H
-
-#include "stm32f10x_flash.h"
-#include "usb_scsi.h"
-#include "usb_regs.h"
-#include "usb_conf.h"
-#include "usb_bot.h"
-#include "usb_mem.h"
-#include "usb_lib.h"
-#include "usb_pwr.h"
-
-#define SECTOR_SIZE 512
-#define SECTOR_CNT 4096
-
-#define FAT1_SECTOR &gDisk_buff[0x000]
-#define FAT2_SECTOR &gDisk_buff[0x200]
-#define ROOT_SECTOR &gDisk_buff[0x400]
-#define VOLUME_BASE &gDisk_buff[0x416]
-#define OTHER_FILES &gDisk_buff[0x420]
-#define FILE_SECTOR &gDisk_buff[0x600]
-#define Root (u8*)ROOT_SECTOR
-
-//#define APP_BASE 0x0800C000
-
-#define HEX 0
-#define BIN 2
-#define SET 1
-
-#define RDY 0
-#define NOT 2
-#define END 3
-#define ERR 4
-
-#define DATA_SEG 0x00
-#define DATA_END 0x01
-#define EXT_ADDR 0x04
-
-#define TXFR_IDLE 0
-#define TXFR_ONGOING 1
-
-//#define FAT_DATA 0x00FFFFF8
-#define VOLUME 0x40DD8D18 //0x3E645C29
-
-#define BUFF 0 //
-
-#define V32_BASE SECTOR_SIZE // V32 8*4=32
-#define W_ADDR 0
-#define ADDR 1
-#define H_ADDR 2
-#define OFFSET 3
-#define SEC_CNT 4
-#define COUNT 5
-#define RD_CNT 6
-#define WR_CNT 7
-
-#define VAR_BASE V32_BASE + 32 // VAR 9+17=26
-#define USB_ST 0
-#define SEG_KIND 1
-#define SEG_LEN 2
-#define SEG_SUM 3
-#define SEG_TMP 4
-#define SEG_ST 5
-#define DATA_CNT 6
-#define F_TYPE 7
-#define F_FLAG 8
-#define SEG_DATA 9 //9~26
-
-u8 Cal_Val(u8 str[], u8 k, u8 flag);
-void Disk_BuffInit(void);
-u8 ReWrite_All(void);
-u8 Config_Analysis(void);
-void Disk_BuffInit(void);
-void Disk_SecWrite(u8* pbuffer, u32 disk_addr);
-void Close_File(void);
-void Write_Memory(u32 w_offset, u32 w_length);
-void Read_Memory(u32 r_offset, u32 r_length);
-void Set_Ver(u8 str[], u8 i);
-void Erase(void);
-char * Get_Line(char *dst, char *src, int n, int m);
-void Upper(u8* str, u16 len);
-u8* SearchFile(u8* pfilename, u16* pfilelen, u16* root_addr);
-u8 ReWriteFlsash(void);
-#endif
-/********************************* END OF FILE ******************************/
diff --git a/workspace/ts100/inc/Ext_Flash.h b/workspace/ts100/inc/Ext_Flash.h
deleted file mode 100644
index 4e61a773..00000000
--- a/workspace/ts100/inc/Ext_Flash.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/********************* (C) COPYRIGHT 2015 e-Design Co.,Ltd. ********************
-File Name : EXT_Flash.h
-Version : S100 APP Ver 2.11
-Description:
-Author : bure
-Data:
-History:
-*******************************************************************************/
-
-#ifndef __EXT_FLASH_H
-#define __EXT_FLASH_H
-//#include "stm32f10x_lib.h"
-#include "stm32f10x.h"
-
-extern u8 flash_mode;
-#define FLASH_2M 1
-#define FLASH_8M 2
-//#define W25Q64BV
-
-#define WREN 0x06 // Write enable instruction
-#define READ 0x03 // Read from Memory instruction
-#define RDSR 0x05 // Read Status Register instruction
-#define PP 0x02 // Write to Memory instruction
-#define PE 0xDB // Page Erase instruction
-#define PW 0x0A // Page write instruction
-#define DP 0xB9 // Deep power-down instruction
-#define RDP 0xAB // Release from deep power-down instruction
-//----W25Q64BV----------------------------------------------------------------//
-#define CHIPE 0xC7 // Chip All Erase instruction
-#define BE64 0xD8 // Block 32k Erase instruction
-#define BE32 0x52 // Block 64k Erase instruction
-#define SE 0x20 // Sector 4K Erase instruction
-#define Dummy_Byte 0xA5
-#define EXT_FLASH_PageSize 256
-
-//----------------------------------------------------------------------------//
-#define WIP_Flag 0x01 // Write In Progress (WIP) flag
-
-
-#define ExtFlash_CS_LOW() GPIO_ResetBits(GPIOB, GPIO_Pin_7)
-#define ExtFlash_CS_HIGH() GPIO_SetBits(GPIOB, GPIO_Pin_7)
-
-void ExtFlash_PageWR(u8* pBuffer, u32 WriteAddr);
-void ExtFlash_PageRD(u8* pBuffer, u32 ReadAddr, u16 Lenght);
-void MAL_GetStatus (void);
-u8 ExtFlash_ReadByte(void);
-u8 ExtFlash_SendByte(u8 byte);
-void ExtFlash_WriteEnable(void);
-void ExtFlash_WaitForWriteEnd(void);
-void ExtFlash_PageProg(u8* pBuffer, u32 WriteAddr,u8 CMD);
-#endif
-
-/********************************* END OF FILE ******************************/
diff --git a/workspace/ts100/inc/FAT12.h b/workspace/ts100/inc/FAT12.h
deleted file mode 100644
index 85c64951..00000000
--- a/workspace/ts100/inc/FAT12.h
+++ /dev/null
@@ -1,29 +0,0 @@
-/********************* (C) COPYRIGHT 2015 e-Design Co.,Ltd. ********************
-File Name : FAT12.h
-Version : S100 APP Ver 2.11
-Description:
-Author : bure
-Data:
-History:
-*******************************************************************************/
-#ifndef __FAT12_H
-#define __FAT12_H
-
-#include "stm32f10x.h"
-
-
-u8 ReadFileSec(u8* Buffer, u16* Cluster);
-u8 ReadDiskData(u8* pBuffer, u32 ReadAddr, u16 Lenght);
-u8 NextCluster(u16* Cluster);
-u8 ProgFileSec(u8* Buffer, u16* Cluster);
-u8 ProgDiskPage(u8* Buffer, u32 ProgAddr);
-u8 SeekBlank(u8* Buffer, u16* Cluster);
-u8 SetCluster(u8* Buffer, u16* Cluster);
-u8 OpenFileRd(u8* Buffer, u8* FileName, u16* Cluster, u32* pDirAddr);
-u8 OpenFileWr(u8* Buffer, u8* FileName, u16* Cluster, u32* pDirAddr);
-u8 CloseFile(u8* Buffer, u32 Lenght, u16* Cluster, u32* pDirAddr);
-u8 FAT_SearchFile(u8* pBuffer, u8* pFileName, u16* pCluster, u32* pDirAddr,u32* flag);
-void ExtFlash_PageWrite(u8* pBuffer, u32 WriteAddr, u8 Mode);
-
-#endif
-/********************************* END OF FILE ********************************/
diff --git a/workspace/ts100/inc/Flash.h b/workspace/ts100/inc/Flash.h
deleted file mode 100644
index fc5a9271..00000000
--- a/workspace/ts100/inc/Flash.h
+++ /dev/null
@@ -1,29 +0,0 @@
-/********************* (C) COPYRIGHT 2015 e-Design Co.,Ltd. ********************
- File Name : Flash.h
- Version : Author : bure
-*******************************************************************************/
-#ifndef __EXT_FLASH_H
-#define __EXT_FLASH_H
-#include "stm32f10x.h"
-#define PAGESIZE 256
-
-#define WREN 0x06 // Write enable instruction
-#define READ 0x03 // Read from Memory instruction
-#define RDSR 0x05 // Read Status Register instruction
-#define PP 0x02 // Write to Memory instruction
-#define PW 0x0A // Page write instruction
-
-#define OK 0 //
-#define SEC_ERR 1 //
-#define TMAX 100000 //
-
-#define WIP_Flag 0x01 // Write In Progress (WIP) flag
-#define Dummy_Byte 0xA5
-
-u8 FLASH_Prog(u32 Address, u16 Data);
-void FLASH_Erase(u32 Address);
-void ExtFlashPageWR(u8* pBuffer, u32 WriteAddr);
-void ExtFlashDataRD(u8* pBuffer, u32 ReadAddr, u16 Lenght);
-#endif
-
-/********************************* END OF FILE ******************************/
diff --git a/workspace/ts100/inc/Font.h b/workspace/ts100/inc/Font.h
new file mode 100644
index 00000000..791feca4
--- /dev/null
+++ b/workspace/ts100/inc/Font.h
@@ -0,0 +1,95 @@
+/*
+ * Font.h
+ *
+ * Created on: 17 Sep 2016
+ * Author: Ralim
+ *
+ * ... This file contains the font...
+ */
+
+#ifndef FONT_H_
+#define FONT_H_
+
+const u8 FONT[]={
+ 0x00,0xF0,0xFC,0x0E,0x82,0xC2,0x62,0x1E,0xFC,0xF0,0x00,0x00,0x00,0x00,
+ 0x00,0x03,0x0F,0x1F,0x11,0x10,0x10,0x1C,0x0F,0x03,0x00,0x00,0x00,0x00,/*0*/
+ 0x00,0x08,0x04,0x02,0xFE,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x10,0x10,0x10,0x1F,0x1F,0x10,0x10,0x10,0x00,0x00,0x00,0x00,0x00,/*1*/
+ 0x00,0x04,0x02,0x02,0x02,0xC6,0xFC,0x78,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x18,0x1C,0x16,0x13,0x11,0x10,0x10,0x10,0x00,0x00,0x00,0x00,0x00,/*2*/
+ 0x00,0x02,0x02,0x42,0x42,0x66,0xFE,0x9C,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x10,0x10,0x10,0x10,0x10,0x08,0x0F,0x07,0x00,0x00,0x00,0x00,0x00,/*3*/
+ 0x00,0x00,0x80,0xE0,0x30,0x1C,0x06,0xFE,0xFE,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x03,0x03,0x02,0x02,0x02,0x02,0x1F,0x1F,0x02,0x02,0x00,0x00,0x00,/*4*/
+ 0x00,0x7E,0x7E,0x42,0x42,0x42,0xC2,0x82,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x10,0x10,0x10,0x10,0x10,0x08,0x0F,0x07,0x00,0x00,0x00,0x00,0x00,/*5*/
+ 0x00,0xE0,0xF8,0x8C,0x44,0x42,0x42,0xC2,0x82,0x80,0x00,0x00,0x00,0x00,
+ 0x00,0x07,0x0F,0x18,0x10,0x10,0x10,0x18,0x0F,0x07,0x00,0x00,0x00,0x00,/*6*/
+ 0x00,0x02,0x02,0x02,0x02,0xC2,0xF2,0x1E,0x06,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x10,0x1C,0x0F,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*7*/
+ 0x00,0x38,0x7C,0x66,0xC2,0x82,0xC2,0x66,0x7C,0x3C,0x00,0x00,0x00,0x00,
+ 0x00,0x0E,0x0F,0x19,0x10,0x10,0x10,0x19,0x0F,0x0E,0x00,0x00,0x00,0x00,/*8*/
+ 0x00,0x78,0x7C,0xC6,0x82,0x82,0x82,0x46,0xFC,0xF8,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x10,0x10,0x10,0x10,0x08,0x0C,0x07,0x03,0x00,0x00,0x00,0x00,/*9*/
+ 0x00,0x00,0x80,0xF0,0x1E,0x02,0x1E,0xF0,0x80,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x1C,0x0F,0x03,0x02,0x02,0x02,0x03,0x0F,0x1C,0x00,0x00,0x00,0x00,/*A*/
+ 0x00,0xFE,0xFE,0x42,0x42,0x42,0xE6,0xBE,0x9C,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x1F,0x1F,0x10,0x10,0x10,0x18,0x0F,0x07,0x00,0x00,0x00,0x00,0x00,/*B*/
+ 0x00,0xF0,0xF8,0x0C,0x06,0x02,0x02,0x02,0x04,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x03,0x0F,0x0C,0x18,0x10,0x10,0x10,0x08,0x00,0x00,0x00,0x00,0x00,/*C*/
+ 0x00,0xFE,0xFE,0x02,0x02,0x02,0x06,0x0C,0xFC,0xF0,0x00,0x00,0x00,0x00,
+ 0x00,0x1F,0x1F,0x10,0x10,0x10,0x18,0x0C,0x07,0x03,0x00,0x00,0x00,0x00,/*D*/
+ 0x00,0xFE,0xFE,0x42,0x42,0x42,0x42,0x42,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x1F,0x1F,0x10,0x10,0x10,0x10,0x10,0x00,0x00,0x00,0x00,0x00,0x00,/*E*/
+ 0x00,0xFE,0xFE,0x82,0x82,0x82,0x82,0x82,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x1F,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*F*/
+ 0x00,0xF0,0xF8,0x0C,0x06,0x02,0x82,0x82,0x82,0x84,0x00,0x00,0x00,0x00,
+ 0x00,0x03,0x0F,0x0C,0x18,0x10,0x10,0x10,0x1F,0x1F,0x00,0x00,0x00,0x00,/*G*/
+ 0x00,0xFE,0xFE,0x40,0x40,0x40,0x40,0xFE,0xFE,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x1F,0x1F,0x00,0x00,0x00,0x00,0x1F,0x1F,0x00,0x00,0x00,0x00,0x00,/*H*/
+ 0x00,0x02,0x02,0x02,0xFE,0xFE,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x10,0x10,0x10,0x1F,0x1F,0x10,0x10,0x10,0x00,0x00,0x00,0x00,0x00,/*I*/
+ 0x00,0x02,0x02,0x02,0x02,0x02,0xFE,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x08,0x10,0x10,0x10,0x18,0x0F,0x07,0x00,0x00,0x00,0x00,0x00,0x00,/*J*/
+ 0x00,0xFE,0xFE,0xC0,0xE0,0x30,0x18,0x0C,0x06,0x02,0x00,0x00,0x00,0x00,
+ 0x00,0x1F,0x1F,0x00,0x01,0x03,0x06,0x0C,0x18,0x10,0x00,0x00,0x00,0x00,/*K*/
+ 0x00,0xFE,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x1F,0x1F,0x10,0x10,0x10,0x10,0x10,0x00,0x00,0x00,0x00,0x00,0x00,/*L*/
+ 0x00,0x00,0xFE,0x06,0x3C,0xC0,0xC0,0x3C,0x06,0xFE,0x00,0x00,0x00,0x00,
+ 0x00,0x10,0x1F,0x00,0x00,0x01,0x01,0x00,0x00,0x1F,0x18,0x00,0x00,0x00,/*M*/
+ 0x00,0xFE,0xFE,0x1E,0x70,0x80,0x00,0xFE,0xFE,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x1F,0x1F,0x00,0x00,0x03,0x1C,0x1F,0x1F,0x00,0x00,0x00,0x00,0x00,/*N*/
+ 0x00,0xF0,0xFC,0x0C,0x02,0x02,0x02,0x0E,0xFC,0xF0,0x00,0x00,0x00,0x00,
+ 0x00,0x03,0x0F,0x1C,0x10,0x10,0x10,0x0C,0x0F,0x03,0x00,0x00,0x00,0x00,/*O*/
+ 0x00,0xFE,0xFE,0x02,0x02,0x02,0x86,0xFC,0x78,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x1F,0x1F,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*P*/
+ 0x00,0xF0,0xF8,0x0C,0x02,0x02,0x02,0x02,0x0C,0xFC,0xF0,0x00,0x00,0x00,
+ 0x00,0x03,0x0F,0x1C,0x10,0x30,0x70,0xD8,0x8C,0x8F,0x83,0x40,0x00,0x00,/*Q*/
+ 0x00,0xFE,0xFE,0x42,0x42,0xC2,0xE6,0x3C,0x1C,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x1F,0x1F,0x00,0x00,0x00,0x01,0x0F,0x1C,0x10,0x00,0x00,0x00,0x00,/*R*/
+ 0x00,0x38,0x7C,0x66,0xC2,0xC2,0x82,0x84,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x08,0x10,0x10,0x10,0x10,0x19,0x0F,0x07,0x00,0x00,0x00,0x00,0x00,/*S*/
+ 0x00,0x02,0x02,0x02,0x02,0xFE,0xFE,0x02,0x02,0x02,0x02,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x1F,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*T*/
+ 0x00,0xFE,0xFE,0x00,0x00,0x00,0x00,0x00,0xFE,0xFE,0x00,0x00,0x00,0x00,
+ 0x00,0x07,0x0F,0x18,0x10,0x10,0x10,0x18,0x0F,0x07,0x00,0x00,0x00,0x00,/*U*/
+ 0x00,0x0E,0x7E,0xE0,0x00,0x00,0x00,0xE0,0x7C,0x0E,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x03,0x1F,0x18,0x1F,0x03,0x00,0x00,0x00,0x00,0x00,0x00,/*V*/
+ 0x00,0x7E,0xFE,0x00,0x00,0xE0,0xE0,0x00,0x00,0xFE,0x7E,0x00,0x00,0x00,
+ 0x00,0x00,0x1F,0x18,0x0F,0x01,0x01,0x0F,0x18,0x1F,0x00,0x00,0x00,0x00,/*W*/
+ 0x00,0x02,0x06,0x1C,0x38,0xE0,0xE0,0x38,0x1C,0x06,0x02,0x00,0x00,0x00,
+ 0x00,0x10,0x18,0x0E,0x07,0x01,0x01,0x07,0x0E,0x18,0x10,0x00,0x00,0x00,/*X*/
+ 0x00,0x02,0x0E,0x3C,0xF0,0xC0,0xC0,0xF0,0x3C,0x0E,0x02,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x1F,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*Y*/
+ 0x00,0x02,0x02,0x02,0xC2,0xE2,0x3A,0x0E,0x02,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x10,0x1C,0x17,0x11,0x10,0x10,0x10,0x10,0x00,0x00,0x00,0x00,0x00,/*Z*/
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/* */
+
+ 0x00,0x60,0xF0,0x98,0x0C,0x06,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x01,0x03,0x06,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*<*/
+ 0x00,0x02,0x06,0x0C,0x98,0xF0,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x04,0x06,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*>*/
+};
+
+#endif /* FONT_H_ */
diff --git a/workspace/ts100/inc/Hardware.h b/workspace/ts100/inc/Hardware.h
deleted file mode 100644
index 62ae094b..00000000
--- a/workspace/ts100/inc/Hardware.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/********************* (C) COPYRIGHT 2015 e-Design Co.,Ltd. **********************
-File Name : CTRL.h
-Version : S100 APP Ver 2.11
-Description:
-Author : Celery
-Data: 2015/07/07
-History:
-2015/07/07 ͳһ������
-*******************************************************************************/
-#ifndef _HARDWARE_H
-#define _HARDWARE_H
-
-#include "stm32f10x.h"
-
-#define SI_COE 8//56
-#define SI_THRESHOLD 60
-
-typedef enum VOL_CLASS {
- H_ALARM = 0,
- VOL_24,
- VOL_19,
- VOL_12,
- VOL_5,
- L_ALARM,
-} VOL_CLASS;
-
-extern s32 gZerop_ad;
-extern u8 gCalib_flag;
-extern u32 gTurn_offv;
-
-u32 Get_gKey(void);
-void Set_gKey(u32 key);
-void Set_LongKeyFlag(u32 flag);
-void Zero_Calibration(void);
-int Read_Vb(u8 flag);
-void Scan_Key(void);
-u32 Get_SlAvg(u32 avg_data);
-int Get_TempSlAvg(int avg_data);
-u32 Get_AvgAd(void);
-int Get_SensorTmp(void);
-u16 Get_ThermometerTemp(void);
-s16 Get_Temp(s16 wk_temp);
-void Clear_Watchdog(void);
-u32 Start_Watchdog(u32 ms);
-u8 Get_AlarmType(void);
-void Set_AlarmType(u8 type);
-u32 Get_CalFlag(void);
-#endif
-/******************************** END OF FILE *********************************/
diff --git a/workspace/ts100/inc/I2C.h b/workspace/ts100/inc/I2C.h
index 3a29b595..b20378b2 100644
--- a/workspace/ts100/inc/I2C.h
+++ b/workspace/ts100/inc/I2C.h
@@ -1,21 +1,16 @@
-/********************* (C) COPYRIGHT 2015 e-Design Co.,Ltd. **********************
-File Name : I2C.h
-Version : S100 APP Ver 2.11
-Description:
-Author : Celery
-Data: 2015/08/03
-History:
-2015/08/03 :
-*******************************************************************************/
+/*
+ * I2C.h
+ * I2C wrapper for the stm32 hardware I2C port
+ */
#ifndef __I2C_H
#define __I2C_H
-#define I2C_TX 1
-#define I2C_RX 2
+#include "stm32f10x_i2c.h"
+#include "stm32f10x.h"
+#include "stm32f10x_gpio.h"
void I2C_Configuration(void);
-void Delay_uS(u32 us);
-void I2C_PageWrite(u8* pbuf, u8 numbyte,u8 deviceaddr );
-void I2C_PageRead(u8* pbuf, u8 numbyte,u8 deviceaddr, u8 readaddr);
+void I2C_PageWrite(u8* pbuf, u8 numbyte, u8 deviceaddr);
+void I2C_PageRead(u8* pbuf, u8 numbyte, u8 deviceaddr, u8 readaddr);
#endif
/******************************** END OF FILE *********************************/
diff --git a/workspace/ts100/inc/Interrupt.h b/workspace/ts100/inc/Interrupt.h
index 43badb3b..90551684 100644
--- a/workspace/ts100/inc/Interrupt.h
+++ b/workspace/ts100/inc/Interrupt.h
@@ -1,70 +1,41 @@
-/********************* (C) COPYRIGHT 2015 e-Design Co.,Ltd. *******************/
-/* Brief : Interrupt Service Routines Author : bure */
-/******************************************************************************/
+/*
+ * Interrupt Service Routines
+ * This file manages all the IRQ events that can be generated
+ */
#ifndef __INTERRUPT_H
#define __INTERRUPT_H
-//See here for refernce to this block http://embedded.kleier.selfhost.me/vector.php
-static void forever (void);
-void __attribute__ ((weak, alias ("forever"))) WWDG_IRQHandler (void);
-void __attribute__ ((weak, alias ("forever"))) PVD_IRQHandler (void);
-void __attribute__ ((weak, alias ("forever"))) TAMPER_IRQHandler (void);
-void __attribute__ ((weak, alias ("forever"))) RTC_IRQHandler (void);
-void __attribute__ ((weak, alias ("forever"))) FLASH_IRQHandler (void);
-void __attribute__ ((weak, alias ("forever"))) RCC_IRQHandler (void);
-void __attribute__ ((weak, alias ("forever"))) EXTI0_IRQHandler (void);
-void __attribute__ ((weak, alias ("forever"))) EXTI1_IRQHandler (void);
-void __attribute__ ((weak, alias ("forever"))) EXTI2_IRQHandler (void);
-void __attribute__ ((weak, alias ("forever"))) EXTI3_IRQHandler (void);
-void __attribute__ ((weak, alias ("forever"))) EXTI4_IRQHandler (void);
-void __attribute__ ((weak, alias ("forever"))) DMA1_Channel1_IRQHandler (void);
-void __attribute__ ((weak, alias ("forever"))) DMA1_Channel2_IRQHandler (void);
-void __attribute__ ((weak, alias ("forever"))) DMA1_Channel3_IRQHandler (void);
-void __attribute__ ((weak, alias ("forever"))) DMA1_Channel4_IRQHandler (void);
-void __attribute__ ((weak, alias ("forever"))) DMA1_Channel5_IRQHandler (void);
-void __attribute__ ((weak, alias ("forever"))) DMA1_Channel6_IRQHandler (void);
-void __attribute__ ((weak, alias ("forever"))) DMA1_Channel7_IRQHandler (void);
-void __attribute__ ((weak, alias ("forever"))) ADC1_2_IRQHandler (void);
-void __attribute__ ((weak, alias ("forever"))) USB_HP_CAN1_TX_IRQHandler (void);
-void __attribute__ ((weak, alias ("forever"))) CAN1_RX1_IRQHandler (void);
-void __attribute__ ((weak, alias ("forever"))) CAN1_SCE_IRQHandler (void);
-void __attribute__ ((weak, alias ("forever"))) EXTI9_5_IRQHandler (void);
-void __attribute__ ((weak, alias ("forever"))) TIM1_BRK_IRQHandler (void);
-void __attribute__ ((weak, alias ("forever"))) TIM1_UP_IRQHandler (void);
-void __attribute__ ((weak, alias ("forever"))) TIM1_TRG_COM_IRQHandler (void);
-void __attribute__ ((weak, alias ("forever"))) TIM1_CC_IRQHandler (void);
-void __attribute__ ((weak, alias ("forever"))) TIM4_IRQHandler (void);
-void __attribute__ ((weak, alias ("forever"))) I2C1_EV_IRQHandler (void);
-void __attribute__ ((weak, alias ("forever"))) I2C1_ER_IRQHandler (void);
-void __attribute__ ((weak, alias ("forever"))) I2C2_EV_IRQHandler (void);
-void __attribute__ ((weak, alias ("forever"))) I2C2_ER_IRQHandler (void);
-void __attribute__ ((weak, alias ("forever"))) SPI1_IRQHandler (void);
-void __attribute__ ((weak, alias ("forever"))) SPI2_IRQHandler (void);
-void __attribute__ ((weak, alias ("forever"))) USART1_IRQHandler (void);
-void __attribute__ ((weak, alias ("forever"))) USART2_IRQHandler (void);
-void __attribute__ ((weak, alias ("forever"))) USART3_IRQHandler (void);
-void __attribute__ ((weak, alias ("forever"))) EXTI15_10_IRQHandler (void);
-void __attribute__ ((weak, alias ("forever"))) RTCAlarm_IRQHandler (void);
-void __attribute__ ((weak, alias ("forever"))) USBWakeUp_IRQHandler (void);
-void __attribute__ ((weak, alias ("forever"))) TIM8_BRK_IRQHandler (void);
-void __attribute__ ((weak, alias ("forever"))) TIM8_UP_IRQHandler (void);
-void __attribute__ ((weak, alias ("forever"))) TIM8_TRG_COM_IRQHandler (void);
-void __attribute__ ((weak, alias ("forever"))) TIM8_CC_IRQHandler (void);
-void __attribute__ ((weak, alias ("forever"))) ADC3_IRQHandler (void);
-void __attribute__ ((weak, alias ("forever"))) FSMC_IRQHandler (void);
-void __attribute__ ((weak, alias ("forever"))) SDIO_IRQHandler (void);
-void __attribute__ ((weak, alias ("forever"))) TIM5_IRQHandler (void);
-void __attribute__ ((weak, alias ("forever"))) SPI3_IRQHandler (void);
-void __attribute__ ((weak, alias ("forever"))) UART4_IRQHandler (void);
-void __attribute__ ((weak, alias ("forever"))) UART5_IRQHandler (void);
-void __attribute__ ((weak, alias ("forever"))) TIM6_IRQHandler (void);
-void __attribute__ ((weak, alias ("forever"))) TIM7_IRQHandler (void);
-void __attribute__ ((weak, alias ("forever"))) DMA2_Channel1_IRQHandler (void);
-void __attribute__ ((weak, alias ("forever"))) DMA2_Channel2_IRQHandler (void);
-void __attribute__ ((weak, alias ("forever"))) DMA2_Channel3_IRQHandler (void);
-void __attribute__ ((weak, alias ("forever"))) DMA2_Channel4_5_IRQHandler (void);
+#include <stdint.h>
+/* Functions for access to data */
+extern volatile uint32_t system_Ticks;
+void delayMs(uint32_t ticks);
+volatile extern uint32_t lastKeyPress;
+volatile extern uint32_t lastMovement;
+volatile extern uint16_t keyState;
+inline uint32_t millis() {
+ return system_Ticks;
+}
+inline uint32_t getLastButtonPress() {
+ return lastKeyPress;
+}
+inline void resetLastButtonPress() {
+ lastKeyPress = millis();
+}
+inline void resetButtons() {
+ lastKeyPress = millis();
+ keyState = 0;
+}
+inline uint32_t getLastMovement() {
+ return lastMovement;
+}
+
+inline uint16_t getButtons() {
+ return keyState;
+}
+
+/*IRQ prototypes*/
void NMI_Handler(void);
void HardFault_Handler(void);
void MemManage_Handler(void);
@@ -87,7 +58,64 @@ void I2C1_ER_IRQHandler(void);
void TIM2_IRQHandler(void);
void TIM3_IRQHandler(void);
+void WWDG_IRQHandler(void);
+void PVD_IRQHandler(void);
+void TAMPER_IRQHandler(void);
+void RTC_IRQHandler(void);
+void FLASH_IRQHandler(void);
+void RCC_IRQHandler(void);
+void EXTI0_IRQHandler(void);
+void EXTI1_IRQHandler(void);
+void EXTI2_IRQHandler(void);
+void EXTI3_IRQHandler(void);
+void EXTI4_IRQHandler(void);
+void DMA1_Channel1_IRQHandler(void);
+void DMA1_Channel2_IRQHandler(void);
+void DMA1_Channel3_IRQHandler(void);
+void DMA1_Channel4_IRQHandler(void);
+void DMA1_Channel5_IRQHandler(void);
+void DMA1_Channel6_IRQHandler(void);
+void DMA1_Channel7_IRQHandler(void);
+void ADC1_2_IRQHandler(void);
+void USB_HP_CAN1_TX_IRQHandler(void);
+void CAN1_RX1_IRQHandler(void);
+void CAN1_SCE_IRQHandler(void);
+void EXTI9_5_IRQHandler(void);
+void TIM1_BRK_IRQHandler(void);
+void TIM1_UP_IRQHandler(void);
+void TIM1_TRG_COM_IRQHandler(void);
+void TIM1_CC_IRQHandler(void);
+void TIM4_IRQHandler(void);
+void I2C1_EV_IRQHandler(void);
+void I2C1_ER_IRQHandler(void);
+void I2C2_EV_IRQHandler(void);
+void I2C2_ER_IRQHandler(void);
+void SPI1_IRQHandler(void);
+void SPI2_IRQHandler(void);
+void USART1_IRQHandler(void);
+void USART2_IRQHandler(void);
+void USART3_IRQHandler(void);
+void EXTI15_10_IRQHandler(void);
+void RTCAlarm_IRQHandler(void);
+void USBWakeUp_IRQHandler(void);
+void TIM8_BRK_IRQHandler(void);
+void TIM8_UP_IRQHandler(void);
+void TIM8_TRG_COM_IRQHandler(void);
+void TIM8_CC_IRQHandler(void);
+void ADC3_IRQHandler(void);
+void FSMC_IRQHandler(void);
+void SDIO_IRQHandler(void);
+void TIM5_IRQHandler(void);
+void SPI3_IRQHandler(void);
+void UART4_IRQHandler(void);
+void UART5_IRQHandler(void);
+void TIM6_IRQHandler(void);
+void TIM7_IRQHandler(void);
+void DMA2_Channel1_IRQHandler(void);
+void DMA2_Channel2_IRQHandler(void);
+void DMA2_Channel3_IRQHandler(void);
+void DMA2_Channel4_5_IRQHandler(void);
#endif /* __INTERRUPT_H */
diff --git a/workspace/ts100/inc/MMA8652FC.h b/workspace/ts100/inc/MMA8652FC.h
index dddb6bdc..d5113287 100644
--- a/workspace/ts100/inc/MMA8652FC.h
+++ b/workspace/ts100/inc/MMA8652FC.h
@@ -1,19 +1,91 @@
-/********************* (C) COPYRIGHT 2015 e-Design Co.,Ltd. **********************
-File Name : MMA8652FC.h
-Version : S100 APP Ver 2.11
-Description:
-Author : Celery
-Data: 2015/07/07
-History:
-2015/07/07 ͳһ������
-*******************************************************************************/
+/*
+ * MMA8652FC.*
+ * Files for the built in accelerometer from NXP.
+ * This sets the unit up in motion detection mode with an interrupt on movement
+ * This interrupt is fed to PB5 which catches it via EXTI5
+ *
+ * http://cache.freescale.com/files/sensors/doc/data_sheet/MMA8652FC.pdf
+ *
+ * EXTI Motion config setup values lifted from AN4070 from NXP
+ * #defines also taken from ^
+ *
+ * Ben V. Brown - <[email protected]>
+ */
#ifndef __MMA8652FC__H
#define __MMA8652FC__H
+
+void StartUp_Accelerometer(void);//This is the only function we expose
+
//--------------MMA8652 Device ID----------------------------------------------//
#define DEVICE_ADDR 0X1D
//--------------MMA8652 Registers-------------------------------------------//
+
+#define STATUS_REG 0x00 // STATUS Register
+
+#define OUT_X_MSB_REG 0x01 // [7:0] are 8 MSBs of the 14-bit X-axis sample
+#define OUT_X_LSB_REG 0x02 // [7:2] are the 6 LSB of 14-bit X-axis sample
+#define OUT_Y_MSB_REG 0x03 // [7:0] are 8 MSBs of the 14-bit Y-axis sample
+#define OUT_Y_LSB_REG 0x04 // [7:2] are the 6 LSB of 14-bit Y-axis sample
+#define OUT_Z_MSB_REG 0x05 // [7:0] are 8 MSBs of the 14-bit Z-axis sample
+#define OUT_Z_LSB_REG 0x06 // [7:2] are the 6 LSB of 14-bit Z-axis sample
+
+#define F_SETUP_REG 0x09 // F_SETUP FIFO Setup Register
+#define TRIG_CFG_REG 0x0A // TRIG_CFG Map of FIFO data capture events
+#define SYSMOD_REG 0x0B // SYSMOD System Mode Register
+#define INT_SOURCE_REG 0x0C // INT_SOURCE System Interrupt Status Register
+#define WHO_AM_I_REG 0x0D // WHO_AM_I Device ID Register
+#define XYZ_DATA_CFG_REG 0x0E // XYZ_DATA_CFG Sensor Data Configuration Register
+#define HP_FILTER_CUTOFF_REG 0x0F // HP_FILTER_CUTOFF High Pass Filter Register
+
+#define PL_STATUS_REG 0x10 // PL_STATUS Portrait/Landscape Status Register
+#define PL_CFG_REG 0x11 // PL_CFG Portrait/Landscape Configuration Register
+#define PL_COUNT_REG 0x12 // PL_COUNT Portrait/Landscape Debounce Register
+#define PL_BF_ZCOMP_REG 0x13 // PL_BF_ZCOMP Back/Front and Z Compensation Register
+#define P_L_THS_REG 0x14 // P_L_THS Portrait to Landscape Threshold Register
+
+#define FF_MT_CFG_REG 0x15 // FF_MT_CFG Freefall and Motion Configuration Register
+#define FF_MT_SRC_REG 0x16 // FF_MT_SRC Freefall and Motion Source Register
+#define FF_MT_THS_REG 0x17 // FF_MT_THS Freefall and Motion Threshold Register
+#define FF_MT_COUNT_REG 0x18 // FF_MT_COUNT Freefall Motion Count Register
+
+#define TRANSIENT_CFG_REG 0x1D // TRANSIENT_CFG Transient Configuration Register
+#define TRANSIENT_SRC_REG 0x1E // TRANSIENT_SRC Transient Source Register
+#define TRANSIENT_THS_REG 0x1F // TRANSIENT_THS Transient Threshold Register
+#define TRANSIENT_COUNT_REG 0x20 // TRANSIENT_COUNT Transient Debounce Counter Register
+
+#define PULSE_CFG_REG 0x21 // PULSE_CFG Pulse Configuration Register
+#define PULSE_SRC_REG 0x22 // PULSE_SRC Pulse Source Register
+#define PULSE_THSX_REG 0x23 // PULSE_THS XYZ Pulse Threshold Registers
+#define PULSE_THSY_REG 0x24
+#define PULSE_THSZ_REG 0x25
+#define PULSE_TMLT_REG 0x26 // PULSE_TMLT Pulse Time Window Register
+#define PULSE_LTCY_REG 0x27 // PULSE_LTCY Pulse Latency Timer Register
+#define PULSE_WIND_REG 0x28 // PULSE_WIND Second Pulse Time Window Register
+
+#define ASLP_COUNT_REG 0x29 // ASLP_COUNT Auto Sleep Inactivity Timer Register
+
+#define CTRL_REG1 0x2A // CTRL_REG1 System Control 1 Register
+#define CTRL_REG2 0x2B // CTRL_REG2 System Control 2 Register
+#define CTRL_REG3 0x2C // CTRL_REG3 Interrupt Control Register
+#define CTRL_REG4 0x2D // CTRL_REG4 Interrupt Enable Register
+#define CTRL_REG5 0x2E // CTRL_REG5 Interrupt Configuration Register
+
+#define OFF_X_REG 0x2F // XYZ Offset Correction Registers
+#define OFF_Y_REG 0x30
+#define OFF_Z_REG 0x31
+
+//MMA8652FC 7-bit I2C address
+
+#define MMA8652FC_I2C_ADDRESS 0x1D // MMA865xFC 7-bit I2C address is fixed
+
+//MMA8652FC Sensitivity
+
+#define SENSITIVITY_2G 1024
+#define SENSITIVITY_4G 512
+#define SENSITIVITY_8G 256
+
#define STATUS_REG 0x00
#define X_MSB_REG 0X01
#define X_LSB_REG 0X02
@@ -27,15 +99,8 @@ History:
#define INT_SOURCE 0X0C
#define DEVICE_ID 0X0D
-#define XYZ_DATA_CFG_REG 0X0E
-#define CTRL_REG1 0X2A //
-#define CTRL_REG2 0X2B //System Control 2 register
-#define CTRL_REG3 0X2C //
-#define CTRL_REG4 0X2D //Interrupt Enable register
-#define CTRL_REG5 0X2E //
-
//-----STATUS_REG(0X00)-----Bit Define----------------------------------------//
#define ZYXDR_BIT 0X08
//----XYZ_DATA_CFG_REG(0xE)-Bit Define----------------------------------------//
@@ -54,7 +119,7 @@ History:
#define FHZ2 0x5 //12.5hz
#define FHZ1 0x6 //6.25hz
#define FHZ0 0x7 //1.563hz
-#define DataRateValue FHZ100
+
//---------CTRL_REG2(0X2B)Bit Define------------------------------------------//
#define MODS_MASK 0x03 //Oversampling Mode 4
#define Normal_Mode 0x0 //Normal=0,Low Noise Low Power MODS=1,
@@ -70,16 +135,5 @@ History:
#define INT_EN_FF_MT 1<<2 //Freefall/Motion Interrupt Enable
#define INT_EN_DRDY 1<<0 //Data Ready Interrupt Enable
-u16 Get_MmaShift(void);
-void Set_MmaShift(u16 shift);
-u16 Get_MmaActive(void);
-void MMA865x_Standby(void);
-void MMA865x_Active(void);
-u16 Cheak_XYData(u16 x0,u16 y0,u16 x1,u16 y1);
-u16 Update_X(void);
-u16 Update_Y(void);
-u16 Update_Z(void);
-void Check_Accelerated(void);
-void StartUp_Accelerated(void);
#endif
/******************************** END OF FILE *********************************/
diff --git a/workspace/ts100/inc/Modes.h b/workspace/ts100/inc/Modes.h
new file mode 100644
index 00000000..aa00fca8
--- /dev/null
+++ b/workspace/ts100/inc/Modes.h
@@ -0,0 +1,36 @@
+/*
+ * Modes.h
+ *
+ * Created on: 17 Sep 2016
+ * Author: Ralim
+ *
+ * Modes.h -> Main function for driving the application
+ * This processes the buttons then does the gui
+ */
+
+#ifndef MODES_H_
+#define MODES_H_
+#include "Interrupt.h"
+#include "S100V0_1.h"
+#include "Oled.h"
+#include "PID.h"
+#include "Settings.h"
+#include "Analog.h"
+enum {
+ STARTUP, //we are sitting on the prompt to push a button
+ SOLDERING,
+ TEMP_ADJ,
+ SETTINGS,
+ SLEEP,
+ COOLING,
+ UVLOWARN,
+} operatingMode;
+
+enum {
+ UVLO = 0, SLEEP_TEMP, SLEEP_TIME,MOTIONDETECT,
+
+} settingsPage;
+
+void ProcessUI();
+void DrawUI();
+#endif /* MODES_H_ */
diff --git a/workspace/ts100/inc/Oled.h b/workspace/ts100/inc/Oled.h
index 4ceff112..303fa320 100644
--- a/workspace/ts100/inc/Oled.h
+++ b/workspace/ts100/inc/Oled.h
@@ -1,33 +1,31 @@
-/********************* (C) COPYRIGHT 2015 e-Design Co.,Ltd. **********************
-File Name : Oled.h
-Version : S100 APP Ver 2.11
-Description:
-Author : Celery
-Data: 2015/07/07
-History:
-2015/07/07 ͳһ������
-*******************************************************************************/
+/*
+ * Oled.h
+ * Functions for writing to the OLED screen
+ * Basically wraps drawing text and numbers to the OLED
+ * Uses font.h -> 14 pixel wide fixed width
+ */
#ifndef _OLED_SSD1306_H
#define _OLED_SSD1306_H
#define DEVICEADDR_OLED 0x3c
#include "stm32f10x.h"
-void Sc_Pt(u8 Co);
+#include "Interrupt.h"
+
void Oled_DisplayOn(void);
void Oled_DisplayOff(void);
-u8* Oled_DrawArea(u8 x0,u8 y0,u8 wide, u8 high,u8* ptr);
-void Set_ShowPos(u8 x,u8 y);
-u8* Show_posi(u8 posi,u8* ptr,u8 word_width);
-void Clean_Char(int k,u8 wide);
-void Write_Command(u8 Data);
-void Write_Data(u8 Data);
+u8* Oled_DrawArea(u8 x0, u8 y0, u8 wide, u8 high, u8* ptr);
+void Set_ShowPos(u8 x, u8 y);
+
void GPIO_Init_OLED(void);
void Init_Oled(void);
-u8* Data_Command(u8 len,u8* ptr);
-void Reg_Command(u8 posi,u8 flag);
-void Clear_Screen(void);
-void Write_InitCommand_data(u32 Com_len,u8* data);
-void Display_BG(void);
+u8* Data_Command(u8 len, u8* ptr);
+void Clear_Screen(void);//Clear the screen
+/*Functions for writing to the screen*/
+void OLED_DrawString(char* string, uint8_t length);
+void OLED_DrawChar(char c, uint8_t x);
+void OLED_DrawTwoNumber(uint8_t in, uint8_t x);
+void OLED_DrawThreeNumber(uint16_t in, uint8_t x);
+
#endif
/******************************** END OF FILE *********************************/
diff --git a/workspace/ts100/inc/PID.h b/workspace/ts100/inc/PID.h
new file mode 100644
index 00000000..3527c6d8
--- /dev/null
+++ b/workspace/ts100/inc/PID.h
@@ -0,0 +1,21 @@
+/*
+ * PID.h
+ *
+ * Created on: 20 Sep 2016
+ * Author: ralim
+ *
+ * Functions for computing the PID for the iron temp
+ */
+
+#ifndef PID_H_
+#define PID_H_
+#include "Analog.h"
+#include "Interrupt.h"
+
+struct {
+ uint32_t kp, ki, kd; //PID values
+} pidSettings;
+
+int32_t computePID(uint16_t setpoint);
+void setupPID(void);
+#endif /* PID_H_ */
diff --git a/workspace/ts100/inc/S100V0_1.h b/workspace/ts100/inc/S100V0_1.h
index 38f49a3d..8a6374d8 100644
--- a/workspace/ts100/inc/S100V0_1.h
+++ b/workspace/ts100/inc/S100V0_1.h
@@ -1,68 +1,37 @@
-/********************* (C) COPYRIGHT 2015 e-Design Co.,Ltd. ********************
- Brief : �ײ�Ӳ������ Author : bure
- Modified by Ben V. Brown into English
- *******************************************************************************/
+/*
+ * Defines for the device
+ * These houses the settings for the device hardware
+ */
#include "stm32f10x.h"
-
-#define PRODUCT_INFO "TS100"
-#define MCU_TYPE "STM32F103T8"
-#define ADC_TYPE "MCU's ADC"
-#define FPGA_TYPE "None"
-#define SCH_VER "2.46"
-// #define SSD1316 1
-// #define MFTSEEED "Manufacturer"
-// #define MFTMINI "Manufacturer"
-
-#define SPIx SPI1
-#define FLASH_PAGE 0x0400
+#include "stm32f10x_gpio.h"
//--------------------------- key Definitions ------------------------------//
#define KEY1_PIN GPIO_Pin_9 //PA8
#define KEY2_PIN GPIO_Pin_6 //PA6
-#define KEY_1 !(GPIOA->IDR & KEY1_PIN)
-#define KEY_2 !(GPIOA->IDR & KEY2_PIN)
-#define KEY_DFU KEY_1
-#define KEY_ON 0
-
-#define I2C1_DMA_CHANNEL_TX DMA1_Channel6
-#define I2C1_DMA_CHANNEL_RX DMA1_Channel7
-
-#define I2C2_DMA_CHANNEL_TX DMA1_Channel4
-#define I2C2_DMA_CHANNEL_RX DMA1_Channel5
-#define I2C1_DR_Address 0x40005410
-#define I2C2_DR_Address 0x40005810
+#define KEY_A KEY1_PIN
+#define KEY_B KEY2_PIN
+#define BUT_A 0x01
+#define BUT_B 0x02
-#define SERIAL_NO1 (*(u32*)0x1FFFF7E8)
-#define SERIAL_NO2 (*(u32*)0x1FFFF7EC)
-#define SERIAL_NO3 (*(u32*)0x1FFFF7F0)
-//--------------------------- OLED ��ؿ����ź� ------------------------------//
+//--------------------------- OLED ------------------------------//
#define OLED_RST_PIN GPIO_Pin_8 //PA9
#define OLED_RST() GPIO_ResetBits(GPIOA, OLED_RST_PIN)
#define OLED_ACT() GPIO_SetBits (GPIOA, OLED_RST_PIN)
-//------------------------------ ���ȿ����ź� --------------------------------//
-#define HEAT_PIN GPIO_Pin_4 //PA15(JTDI)
+//------------------------------ Iron Heater --------------------------------//
+#define HEAT_PIN GPIO_Pin_4
+#define HEAT_OFF() GPIOB->BRR = HEAT_PIN
+#define HEAT_ON() GPIOB->BSRR = HEAT_PIN
-#define HEAT_OFF() GPIOB->BRR = HEAT_PIN//GPIO_ResetBits(GPIOB, HEAT_PIN)
-#define HEAT_ON() GPIOB->BSRR = HEAT_PIN//GPIO_SetBits (GPIOB, HEAT_PIN)
-
-//---------------------�����ѹ���--VB---------------------------------------//
+//-----------------------Battery voltage measurement---------------------------------------//
#define VB_PIN GPIO_Pin_1 //PB1(Ai9)
-//----------------------------ADX345 INT1,INT2--------------------------------//
+
+//----------------------------Accelerometer INT1,INT2--------------------------------//
#define INT1_PIN GPIO_Pin_5 //PB5
#define INT2_PIN GPIO_Pin_3 //PB3
-//------------------------------ GPIO �˿����� -------------------------------//
-
-#define GPIOA_OUTPUT() GPIOA->ODR = 0xFFFF;
-#define GPIOA_L_DEF() GPIOA->CRL = 0x08888888; /* Ai7 K2 xxx xxx xxx xxx xxx xxx */
-#define GPIOA_H_DEF() GPIOA->CRH = 0x8BBBB883; /* xxx SWC SWD D+ D- xxx K1 nCR */
-
-#define GPIOB_OUTPUT() GPIOB->ODR = 0xFFFF;
-#define GPIOB_L_DEF() GPIOB->CRL = 0x44838800; /* SDA SCL It1 Po It2 xxx Ai9 Ai8 */
-#define GPIOB_H_DEF() GPIOB->CRH = 0x88888888; /* xxx xxx xxx xxx xxx xxx xxx xxx */
-//--------------------------------- RCC ���� ---------------------------------//
+//--------------------------------- RCC Clock Config ---------------------------------//
#define RCC_PLL_EN() RCC->CR |= 0x01000000;// PLL En
@@ -77,4 +46,3 @@
||+-------Bit22 = 1 USB prescaler is PLL clock
++--------Bits31~27 Reserved*/
-/******************************** END OF FILE *********************************/
diff --git a/workspace/ts100/inc/Settings.h b/workspace/ts100/inc/Settings.h
new file mode 100644
index 00000000..a1ed28f7
--- /dev/null
+++ b/workspace/ts100/inc/Settings.h
@@ -0,0 +1,28 @@
+/*
+ * Settings.h
+ *
+ * Created on: 29 Sep 2016
+ * Author: Ralim
+ *
+ * Houses the system settings and allows saving / restoring from flash
+ */
+
+#ifndef SETTINGS_H_
+#define SETTINGS_H_
+#include <stdint.h>
+#include "stm32f10x_flash.h"
+#define SETTINGSVERSION 0x01 /*Change this if you change the struct below to prevent people getting out of sync*/
+struct {
+ uint32_t SolderingTemp; //current setpoint for the iron
+ uint32_t SleepTemp; //temp to drop to in sleep
+ uint8_t SleepTime; //minutes to sleep
+ uint8_t cutoutVoltage; //X10 the voltage we cutout at for undervoltage
+ uint8_t movementEnabled;
+ uint8_t version;
+} systemSettings;
+//Settings struct used for user settings
+
+void saveSettings();
+void restoreSettings();
+void resetSettings();
+#endif /* SETTINGS_H_ */
diff --git a/workspace/ts100/inc/UI.h b/workspace/ts100/inc/UI.h
deleted file mode 100644
index 400eb42d..00000000
--- a/workspace/ts100/inc/UI.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/********************* (C) COPYRIGHT 2015 e-Design Co.,Ltd. **********************
- File Name : UI.h
- Version : S100 APP Ver 2.11
- Description:
- Author : Celery
- Data: 2015/07/07
- History:
- 2015/07/07 ͳһ������
- *******************************************************************************/
-#ifndef _UI_H
-#define _UI_H
-
-#include "stm32f10x.h"
-
-u32 Get_UpdataFlag(void);
-void Set_UpdataFlag(u32 Cont);
-void APP_Init(void);
-u32 Calculation_TWork(u8 Flag);
-void Temp_SetProc(void);
-void Display_Temp(u8 x, s16 Temp);
-void Show_Notice(void);
-void Show_Warning(void);
-void Show_MiniTS(void);
-void Show_TempDown(s16 Temp, s16 Dst_Temp);
-void Set_TemperatureShowFlag(u8 flag);
-s16 TemperatureShow_Change(u8 flag, s16 Tmp);
-u8 Get_TemperatureShowFlag(void);
-
-void Show_Triangle(u8 empty, u8 fill);
-void Shift_Char(u8* ptr, u8 pos);
-void Show_Set(void);
-void Show_OrderChar(u8* ptr, u8 num, u8 width);
-u8 Reverse_Bin8(u8 data);
-void Show_ReverseChar(u8* ptr, u8 num, u8 width, u8 direction);
-u8 Show_TempReverse(u8 num, u8 width, u8 direction);
-void Show_HeatingIcon(u32 ht_flag, u16 active);
-void Display_Str(u8 x, char* str);
-void Display_Str10(u8 x, char* str);
-void Clear_Pervious(u16 data);
-void Print_Integer(s32 data, u8 posi);
-u8 Roll_Num(u16 Step, u8 Flag);
-void OLed_Display(void);
-void Show_Cal(u8 flag);
-void Show_Config(void);
-#endif
-/******************************** END OF FILE *********************************/
diff --git a/workspace/ts100/inc/WordLib.h b/workspace/ts100/inc/WordLib.h
deleted file mode 100644
index 11ff17cd..00000000
--- a/workspace/ts100/inc/WordLib.h
+++ /dev/null
@@ -1,404 +0,0 @@
-#ifndef _WORDLIB_H
-#define _WORDLIB_H
-
-const u8 wordlib[] = { //16*16 ����ʽ�����룬����
- 0x00,0x00,0x00,0xF8,0xFE,0x03,0x01,0x01,0x01,0x03,0xFE,0xFC,0xF0,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x3F,0x7F,0xE0,0x80,0x80,0x80,0xC0,0x7F,0x3F,0x07,0x00,0x00,0x00,/*"0",0*/
- 0x00,0x00,0x00,0x08,0x04,0x04,0x06,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x80,0x80,0x80,0xFF,0xFF,0x80,0x80,0x80,0x00,0x00,0x00,0x00,/*"1",1*/
- 0x00,0x00,0x00,0x06,0x07,0x01,0x01,0x01,0x81,0xC3,0x7F,0x3E,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0xE0,0xF0,0xD8,0xCC,0xC6,0xC3,0xC0,0xC0,0xE0,0x00,0x00,0x00,0x00,/*"2",2*/
- 0x00,0x00,0x00,0x06,0x07,0x81,0x81,0x81,0xC1,0x63,0x3F,0x1E,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0xE0,0xC0,0x80,0x80,0x81,0x81,0xC3,0x7F,0x3E,0x00,0x00,0x00,0x00,/*"3",3*/
- 0x00,0x00,0x00,0x00,0xC0,0x60,0x38,0x0C,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x06,0x07,0x05,0x04,0x04,0x84,0xFF,0xFF,0xC4,0x84,0x06,0x00,0x00,0x00,/*"4",4*/
- 0x00,0x00,0x00,0xFF,0xFF,0x83,0x83,0x83,0x83,0x83,0x83,0x03,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0xE0,0xC0,0x80,0x80,0x80,0x80,0xC1,0x7F,0x3F,0x08,0x00,0x00,0x00,/*"5",5*/
- 0x00,0x00,0x00,0xE0,0xF8,0x9C,0x8E,0xC2,0xC3,0xC1,0x81,0x81,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x3F,0x7F,0xC0,0x80,0x80,0x80,0x80,0xC1,0x7F,0x3F,0x00,0x00,0x00,/*"6",6*/
- 0x00,0x00,0x00,0x0F,0x03,0x03,0x03,0x03,0x83,0xE3,0x3B,0x0F,0x03,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x80,0xE0,0x78,0x1E,0x07,0x01,0x00,0x00,0x00,0x00,0x00,0x00,/*"7",7*/
- 0x00,0x00,0x18,0x7E,0x7E,0xC3,0x81,0x81,0x81,0x81,0x67,0x7E,0x3C,0x00,0x00,0x00,
- 0x00,0x00,0x1C,0x7E,0xFF,0xC1,0x80,0x80,0x80,0x81,0xE3,0x7F,0x3C,0x00,0x00,0x00,/*"8",8*/
- 0x00,0x00,0x78,0xFE,0xC6,0x03,0x01,0x01,0x01,0x03,0x9E,0xFC,0xF0,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x01,0x01,0x83,0x83,0xC3,0x61,0x71,0x3F,0x0F,0x01,0x00,0x00,0x00,/*"9",9*/
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*" ",10*/
-
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x1F,0x01,0x01,0x01,0x01,0x01,0x01,0x00,//"+",11
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,//"-",12
-
- 0x0E,0x11,0x11,0x0E,0xE0,0xF8,0x0C,0x06,0x03,0x01,0x01,0x01,0x01,0x02,0x1E,0x00,
- 0x00,0x00,0x00,0x00,0x0F,0x3F,0x70,0xC0,0x80,0x80,0x80,0x80,0x80,0x40,0x20,0x00,/*"��",13*/
-
- 0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x30,0x30,0x00,0x00,0x00,0x00,0x00,0x00,//":",14
-
- 0x08,0x14,0x22,0x14,0x08,0x02,0x02,0xFE,0x06,0x02,0x02,0x02,0xC2,0x02,0x06,0x1E,
- 0x00,0x00,0x00,0x00,0x00,0x80,0x80,0xFF,0x81,0x81,0x01,0x01,0x03,0x00,0x00,0x00,/*"�H",15*/
-
- 0xC0,0x30,0x08,0x04,0x04,0x02,0xFA,0xAA,0xFA,0x02,0x04,0x04,0x08,0x30,0xC0,0x00,
- 0x07,0x18,0x20,0x40,0x58,0xA4,0xDB,0xDE,0xDB,0xA4,0x58,0x40,0x20,0x18,0x07,0x00,/*"�¶ȼ�",16*/
-};
-
-const u8 Maplib[] = {
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x88,
- 0x98,0xBF,0xBF,0x98,0x88,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x20,0x60,0x60,0x60,0x60,0x60,0x60,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,
- 0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,
- 0x90,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x70,0xF8,0x88,0x84,0x82,0x82,0x83,
- 0x83,0x83,0x83,0x83,0x83,0x82,0x82,0x82,0x82,0x83,0x83,0x83,0x83,0x83,0x83,0x82,
- 0x82,0x82,0x82,0x82,0x86,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,
- 0x84,0x84,0x84,0x84,0x84,0x84,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0xFE,0x00,/*"C:\Users\888\Desktop\������.BMP",0*/
-
-
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x90,
- 0xB0,0xFE,0xFE,0xB0,0x90,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x20,0x60,0x60,0x60,0x60,0x60,0x60,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,
- 0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,
- 0x90,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x70,0xF8,0x88,0x84,0x82,0x82,0x83,
- 0x83,0x83,0x83,0x83,0x83,0x82,0x82,0x82,0x82,0x83,0x83,0x83,0x83,0x83,0x83,0x82,
- 0x82,0x82,0x82,0x82,0x86,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,
- 0x84,0x84,0x84,0x84,0x84,0x84,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0xFE,0x00,/*"C:\Users\888\Desktop\������.BMP",0*/
-
- // 0x80,0xC0,0xE0,0xF0,0xF8,0xFC,0x00,0x00,0xF0,0xF0,0xF0,0x00,0x00,0xF0,0xF0,0x00,//"��ͷ"2//
- // 0x01,0x03,0x07,0x0F,0x1F,0x3F,0x00,0x00,0x0F,0x0F,0x0F,0x00,0x00,0x0F,0x0F,0x00,
- 0x00,0xF0,0xF0,0x00,0x00,0xF0,0xF0,0xF0,0x00,0x00,0xFC,0xF8,0xF0,0xE0,0xC0,0x80, ///"��ͷ"7///
- 0x00,0x0F,0x0F,0x00,0x00,0x0F,0x0F,0x0F,0x00,0x00,0x3F,0x1F,0x0F,0x07,0x03,0x01,
- // 0x00,0xF8,0xF8,0x00,0x00,0xF8,0xF8,0xF8,0xF8,0x00,0x00,0xFE,0xFE,0xF8,0xE0,0x80,
- // 0x00,0x1F,0x1F,0x00,0x00,0x1F,0x1F,0x1F,0x1F,0x00,0x00,0x7F,0x7F,0x1F,0x07,0x01 //"��ͷ8"//
-};
-
-const u8 Maplib1[] = {/* 14 * 16*/
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*" ",15*/
- 0x00,0x01,0xFF,0xFF,0x01,0x01,0x01,0x01,0x01,0x01,0x81,0xC6,0x7E,0x38,
- 0x00,0x80,0xFF,0xFF,0x81,0x81,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,/*"P",0*/
- 0x00,0x20,0x20,0x20,0xE0,0xE0,0x00,0x80,0x40,0x40,0x20,0x60,0xC0,0x40,
- 0x00,0x80,0x80,0x80,0xFF,0xFF,0x81,0x80,0x80,0x80,0x00,0x00,0x00,0x00,/*"r",1*/
- 0x00,0x00,0x00,0x80,0x40,0x40,0x20,0x20,0x20,0x40,0x40,0x80,0x00,0x00,
- 0x00,0x00,0x3F,0x7F,0x44,0x84,0x84,0x84,0x84,0x84,0x84,0x47,0x27,0x00,/*"e",2*/
- 0x00,0x00,0x00,0x80,0x40,0x40,0x20,0x20,0x20,0x40,0x40,0xC0,0x00,0x00,
- 0x00,0x00,0x20,0xC3,0x82,0x86,0x84,0x84,0x8C,0x8C,0x88,0x78,0x30,0x00,/*"s",3*/
- 0x00,0x00,0x00,0x80,0x40,0x40,0x20,0x20,0x20,0x40,0x40,0xC0,0x00,0x00,
- 0x00,0x00,0x20,0xC3,0x82,0x86,0x84,0x84,0x8C,0x8C,0x88,0x78,0x30,0x00,/*"s",4*/
-
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0xC0,0x60,0x20,0x10,0x18,0x0C,0x86,
- 0xE0,0xE0,0xE0,0xEC,0xFC,0xF2,0xF3,0xF1,0xF0,0xF8,0xEC,0xE4,0xE4,0xE2,0xE3,0x01,/*"C:\Users\888\Desktop\sssss.BMP",0*/
-
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0x40,0x20,0x30,0x18,0x0C,
- 0xC0,0xC0,0xC0,0xD8,0xF8,0xE4,0xE6,0xE3,0xE1,0xF1,0xD8,0xC8,0xC8,0xC4,0xC6,0x03,/*"C:\Users\888\Desktop\sssss.BMP",0*/
-
- 0xFC,0xFC,0xFC,0x00,0x00,0x00,0x00,0xC0,0x38,0x26,0x25,0x01,0x01,0x01,0x01,0x01,
- 0x01,0x01,0x01,0x02,0x7F,0x7F,0x7F,0x06,0x09,0x09,0x09,0x09,0x09,0x09,0x39,0x48,
- 0x48,0x48,0x48,0x30,0x10,0x08,0x08,0x04,/*"C:\Users\888\Desktop\����.BMP",0*/
-
- 0xFC,0xFC,0x00,0x00,0x00,0x00,0xC0,0x38,0x26,0x25,0x01,0x01,0x01,0x01,0x01,0x01,
- 0x01,0x01,0x02,0x02,0x7F,0x7F,0x06,0x09,0x09,0x09,0x09,0x09,0x09,0x39,0x48,0x48,
- 0x48,0x48,0x30,0x10,0x08,0x08,0x04,0x04,/*"C:\Users\888\Desktop\����.BMP",0*/
-
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0xC0,0x60,0x30,0x18,0x0C,0x86,
- 0x00,0xE0,0xE0,0xEC,0xF4,0xF6,0xF6,0xFB,0xF5,0xE8,0xE8,0xE4,0xE2,0xE2,0xE1,0x00,/*"δ�����ļ�",0*/
-
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0x60,0x30,0x18,0x0C,
- 0x00,0xC0,0xC0,0xD8,0xE8,0xEC,0xEC,0xF6,0xEB,0xD1,0xD1,0xC8,0xC4,0xC4,0xC2,0x01,/*"δ�����ļ�",0*/
-
- 0xFE,0xFE,0xFE,0x80,0x40,0x40,0x60,0x58,0x54,0x02,0x02,0x02,0x02,0x02,0x02,0x84,
- 0x3F,0x3F,0x3F,0x00,0x01,0x01,0x01,0x01,0x01,0x07,0x05,0x05,0x06,0x02,0x01,0x00,/*"δ�����ļ�",0*/
-
- 0xFE,0xFE,0x80,0x40,0x40,0x60,0x58,0x54,0x02,0x02,0x02,0x02,0x02,0x02,0x84,0x84,
- 0x3F,0x3F,0x00,0x01,0x01,0x01,0x01,0x01,0x07,0x05,0x05,0x06,0x02,0x01,0x00,0x00,/*"δ�����ļ�",0*/
-};
-
-const u8 MiniTS[] = {/*16*16*/
- 0x01,0xF9,0xFF,0x3F,0xFF,0xF0,0x80,0x00,0x80,0xF0,0x7E,0xFF,0xFF,0xFF,0x01,0x01,
- 0x80,0xFF,0xFF,0x80,0x83,0x1F,0xFF,0xF8,0x3F,0x87,0x80,0xFF,0xFF,0xFF,0x80,0x80,/*"M",0*/
- 0x00,0x00,0x00,0x20,0x20,0x20,0x63,0xE3,0xE3,0x03,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x80,0x80,0x80,0x80,0xFF,0xFF,0x80,0x80,0x80,0x80,0x00,0x00,0x00,/*"i",1*/
- 0x00,0x20,0xE0,0xE0,0xE0,0xC0,0x40,0x60,0x20,0x20,0x60,0xC0,0xC0,0x00,0x00,0x00,
- 0x00,0x80,0xFF,0xFF,0xFF,0x80,0x80,0x00,0x00,0x80,0x80,0xFF,0xFF,0x80,0x80,0x00,/*"n",2*/
- 0x00,0x00,0x00,0x20,0x20,0x20,0x63,0xE3,0xE3,0x03,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x80,0x80,0x80,0x80,0xFF,0xFF,0x80,0x80,0x80,0x80,0x00,0x00,0x00,/*"i",3*/
- 0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"-",4*/
- 0x00,0x06,0x07,0x03,0x01,0x01,0xFF,0xFF,0xFF,0x01,0x01,0x01,0x03,0x0F,0x0C,0x00,
- 0x00,0x00,0x00,0x00,0x80,0x80,0xFF,0xFF,0xFF,0x80,0x80,0x00,0x00,0x00,0x00,0x00,/*"T",5*/
- 0x00,0x00,0x00,0x80,0xC0,0x40,0x60,0x20,0x20,0x60,0x40,0xC0,0x80,0x00,0x00,0x00,
- 0x00,0x0E,0x3F,0x7F,0xE1,0x80,0x80,0x80,0x80,0x80,0xC0,0x71,0x7F,0x3F,0x00,0x00,/*"o",6*/
- 0x00,0x00,0x00,0x80,0xC0,0x40,0x60,0x20,0x20,0x60,0x40,0xC0,0x80,0x00,0x00,0x00,
- 0x00,0x0E,0x3F,0x7F,0xE1,0x80,0x80,0x80,0x80,0x80,0xC0,0x71,0x7F,0x3F,0x00,0x00,/*"o",7*/
- 0x00,0x00,0x00,0x01,0x01,0x01,0x01,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x80,0x80,0x80,0x80,0xFF,0xFF,0x80,0x80,0x80,0x80,0x00,0x00,0x00,/*"l",8*/
- 0x00,0x00,0x00,0x80,0xC0,0x40,0x60,0x20,0x20,0x60,0x40,0xC0,0xC0,0x00,0x00,0x00,
- 0x00,0x00,0x20,0xE3,0xC3,0x86,0x86,0x84,0x8C,0x8C,0x8C,0xF8,0x78,0x30,0x00,0x00,/*"s",9*/
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*" ",10*/
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*" ",11*/
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*" ",12*/
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*" ",13*/
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*" ",14*/
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*" ",15*/
-};
-//const u8 Arrow[] = {/*16*16*/
-// 0x00,0x03,0x0E,0x18,0x60,0xC3,0x06,0x18,0x70,0xC0,0x00,0x00,0x00,0x80,0x60,0x38,
-// 0x0C,0x83,0xC1,0x30,0x0C,0x07,0x01,0x00,/*"��",0*/
-
-// 0x00,0x00,0xC0,0x60,0x18,0x0C,0xC3,0x71,0x18,0x06,0x03,0x00,0x00,0x01,0x03,0x0C,
-// 0x30,0x61,0x87,0x0C,0x30,0xE0,0x80,0x00,/*"��",0*/
-
-// 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-// 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*" ",0*/
-//};
-const u8 Triangle[] = {/*16*16*/
- 0x80,0x80,0x40,0x40,0x20,0x20,0x10,0x10,0x08,0x08,0x04,0x04,0xFE,0x00,0x00,0x00,
- 0x00,0x00,0x01,0x01,0x02,0x02,0x04,0x04,0x08,0x08,0x10,0x10,0x3F,0x00,0x00,0x00,/*"���",0*/
-
- 0x00,0x00,0xFE,0x04,0x04,0x08,0x08,0x10,0x10,0x20,0x20,0x40,0x40,0x80,0x80,0x00,
- 0x00,0x00,0x3F,0x10,0x10,0x08,0x08,0x04,0x04,0x02,0x02,0x01,0x01,0x00,0x00,0x00,/*"�ҡ�",0*/
-
- 0x00,0x80,0x80,0xC0,0xC0,0x60,0x60,0x30,0x30,0x18,0x18,0x0C,0x0C,0xFE,0x00,0x00,
- 0x00,0x01,0x01,0x03,0x03,0x06,0x06,0x0C,0x0C,0x18,0x18,0x30,0x30,0x7F,0x00,0x00,/*"�Ӵ����",0*/
-
- 0x00,0x00,0xFE,0x0C,0x0C,0x18,0x18,0x30,0x30,0x60,0x60,0xC0,0xC0,0x80,0x80,0x00,
- 0x00,0x00,0x7F,0x30,0x30,0x18,0x18,0x0C,0x0C,0x06,0x06,0x03,0x03,0x01,0x01,0x00,/*"�Ӵ��ҡ�",0*/
-
- 0x80,0x80,0xC0,0xC0,0xE0,0xE0,0xF0,0xF0,0xF8,0xF8,0xFC,0xFC,0xFE,0x00,0x00,0x00,
- 0x00,0x00,0x01,0x01,0x03,0x03,0x07,0x07,0x0F,0x0F,0x1F,0x1F,0x3F,0x00,0x00,0x00,/*"���",1*/
-
- 0x00,0x00,0xFE,0xFC,0xFC,0xF8,0xF8,0xF0,0xF0,0xE0,0xE0,0xC0,0xC0,0x80,0x80,0x00,
- 0x00,0x00,0x3F,0x1F,0x1F,0x0F,0x0F,0x07,0x07,0x03,0x03,0x01,0x01,0x00,0x00,0x00,/*"�ҡ�",1*/
-};
-
-const u8 IhIcon[] = {
- 0x00,0xF0,0xFE,0xFF,0xF0,0x00,
- 0x00,0x7F,0x7F,0x7F,0x7F,0x00,/*"����",0*/
-
- 0xFF,0x0F,0xE1,0xE0,0x0F,0xFF,
- 0xFF,0x80,0xBF,0xBF,0x80,0xFF,/*"����",0*/
-};
-const u8 TempIcon[] = {/*16*16*/
- 0x10,0x18,0x8C,0xC6,0x63,0x63,0xC6,0x8C,0x18,0x10,
- 0x42,0x63,0x31,0x18,0x0C,0x0C,0x18,0x31,0x63,0x42,/*"10*16",0*/
-
- 0x00,0xF0,0x1E,0x1F,0xF0,0x00,
- 0x00,0xFF,0x80,0x80,0xFF,0x00,/*"6*16",0*/
-
- 0x42,0xC6,0x8C,0x18,0x30,0x30,0x18,0x8C,0xC6,0x42,
- 0x08,0x18,0x31,0x63,0xC6,0xC6,0x63,0x31,0x18,0x08,/*"10*16",1*/
-
- 0x8C,0x8C,0xC6,0xC6,0x8C,0x8C,0xC6,0xC6,0x8C,0x8C,
- 0x31,0x31,0x18,0x18,0x31,0x31,0x18,0x18,0x31,0x31,/*"10*16",2*/
-
-
- 0x00,0x8C,0x8C,0x8C,0x8C,0x8C,0x8C,0x8C,0x8C,0x8C,0x8C,0x8C,0x8C,0x8C,0x8C,0x00,
- 0x00,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x00,/*"�¶�ƽ��",0*/
-
- 0x80,0xC0,0x60,0x30,0x98,0xCC,0x66,0x33,0x33,0x66,0xCC,0x98,0x30,0x60,0xC0,0x80,
- 0x88,0xCC,0x66,0x33,0x19,0x0C,0x06,0x03,0x03,0x06,0x0C,0x19,0x33,0x66,0xCC,0x88,/*"����",0*/
-
- 0x11,0x33,0x66,0xCC,0x98,0x30,0x60,0xC0,0xC0,0x60,0x30,0x98,0xCC,0x66,0x33,0x11,
- 0x01,0x03,0x06,0x0C,0x19,0x33,0x66,0xCC,0xCC,0x66,0x33,0x19,0x0C,0x06,0x03,0x01,/*"����",0*/
-};
-
-const u8 Warning[] = {/*10*16*/
- 0x01,0xFF,0x00,0xE1,0x1F,0xE0,0x00,0xFF,0x01,0x00,0x00,0x01,0x1E,0x01,0x00,0x01,
- 0x1E,0x01,0x00,0x00,/*"W",0*/
- 0x00,0x60,0x10,0x10,0x90,0x90,0xE0,0x00,0x00,0x00,0x00,0x0E,0x11,0x11,0x10,0x08,
- 0x1F,0x18,0x00,0x00,/*"a",1*/
- 0x10,0x10,0xF0,0x40,0x20,0x10,0x10,0x30,0x00,0x00,0x10,0x10,0x1F,0x10,0x10,0x00,
- 0x00,0x00,0x00,0x00,/*"r",2*/
- 0x10,0xF0,0x20,0x10,0x10,0x10,0x10,0xE0,0x00,0x00,0x10,0x1F,0x10,0x00,0x00,0x00,
- 0x10,0x1F,0x10,0x00,/*"n",3*/
- 0x00,0x00,0x10,0x13,0xF3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x1F,0x10,
- 0x10,0x00,0x00,0x00,/*"i",4*/
- 0x10,0xF0,0x20,0x10,0x10,0x10,0x10,0xE0,0x00,0x00,0x10,0x1F,0x10,0x00,0x00,0x00,
- 0x10,0x1F,0x10,0x00,/*"n",5*/
- 0x00,0xE0,0x10,0x10,0x10,0x10,0xF0,0x10,0x00,0x00,0x00,0x7D,0x8A,0x8A,0x8A,0x8A,
- 0x91,0x70,0x00,0x00,/*"g",6*/
-
- 0x00,0x00,0x00,0x80,0xE0,0xF8,0xFE,0x07,0x07,0xFE,0xF8,0xE0,0x80,0x00,0x00,0x00,
- 0x10,0x1C,0x1F,0x1F,0x1F,0x1F,0x1F,0x12,0x12,0x1F,0x1F,0x1F,0x1F,0x1F,0x1C,0x10,/*"C:\Users\888\Desktop\attention.bmp",0*/
-};
-const u8 SenErr[] = {/*10*16*/
- 0x00,0x1C,0x22,0x21,0x41,0x41,0x41,0x82,0x07,0x00,0x00,0x1E,0x08,0x10,0x10,0x10,
- 0x10,0x08,0x07,0x00,/*"S",0*/
- 0x00,0xC0,0xA0,0x90,0x90,0x90,0x90,0xA0,0xC0,0x00,0x00,0x07,0x08,0x10,0x10,0x10,
- 0x10,0x08,0x04,0x00,/*"e",1*/
- 0x10,0xF0,0x20,0x10,0x10,0x10,0x10,0xE0,0x00,0x00,0x10,0x1F,0x10,0x00,0x00,0x00,
- 0x10,0x1F,0x10,0x00,/*"n",2*/
- 0x00,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,/*"-",3*/
- 0x01,0xFF,0x21,0x21,0x21,0x21,0xF9,0x03,0x04,0x00,0x10,0x1F,0x10,0x10,0x10,0x10,
- 0x10,0x18,0x04,0x00,/*"E",4*/
- 0x00,0x10,0x10,0xF0,0x40,0x20,0x10,0x10,0x30,0x00,0x00,0x10,0x10,0x1F,0x10,0x10,
- 0x00,0x00,0x00,0x00,/*"r",5*/
- 0x00,0x10,0x10,0xF0,0x40,0x20,0x10,0x10,0x30,0x00,0x00,0x10,0x10,0x1F,0x10,0x10,
- 0x00,0x00,0x00,0x00,/*"r",6*/
-
-};
-const u8 HighVt[] = {/*10*16*/
- 0x01,0xFF,0x41,0x40,0x40,0x40,0x41,0xFF,0x01,0x00,0x10,0x1F,0x10,0x00,0x00,0x00,
- 0x10,0x1F,0x10,0x00,/*"H",0*/
- 0x00,0x00,0x10,0x13,0xF3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x1F,0x10,
- 0x10,0x00,0x00,0x00,/*"i",1*/
- 0x00,0x00,0xE0,0x10,0x10,0x10,0x10,0xF0,0x10,0x00,0x00,0x60,0x9D,0x8A,0x8A,0x8A,
- 0x8A,0x91,0x70,0x00,/*"g",2*/
- 0x01,0xFF,0x20,0x10,0x10,0x10,0x10,0xE0,0x00,0x00,0x10,0x1F,0x10,0x00,0x00,0x00,
- 0x10,0x1F,0x10,0x00,/*"h",3*/
- 0x00,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,/*"-",3*/
- 0x01,0x07,0x79,0x80,0x00,0x80,0x79,0x07,0x01,0x00,0x00,0x00,0x00,0x07,0x1C,0x07,
- 0x00,0x00,0x00,0x00,/*"V",5*/
- 0x00,0x00,0x10,0x10,0xFE,0x10,0x10,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x10,
- 0x10,0x08,0x00,0x00,/*"t",6*/
-};
-const u8 LowVot[] = {/*10*16*/
- 0x01,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x1F,0x10,0x10,0x10,0x10,
- 0x10,0x18,0x04,0x00,/*"L",0*/
- 0x00,0xC0,0x20,0x10,0x10,0x10,0x10,0x20,0xC0,0x00,0x00,0x07,0x08,0x10,0x10,0x10,
- 0x10,0x08,0x07,0x00,/*"o",1*/
- 0x10,0xF0,0x00,0x10,0xF0,0x10,0x00,0xF0,0x10,0x00,0x00,0x03,0x1C,0x03,0x00,0x03,
- 0x1C,0x03,0x00,0x00,/*"w",2*/
- 0x00,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,/*"-",3*/
- 0x01,0x07,0x79,0x80,0x00,0x80,0x79,0x07,0x01,0x00,0x00,0x00,0x00,0x07,0x1C,0x07,
- 0x00,0x00,0x00,0x00,/*"V",4*/
- 0x00,0xC0,0x20,0x10,0x10,0x10,0x10,0x20,0xC0,0x00,0x00,0x07,0x08,0x10,0x10,0x10,
- 0x10,0x08,0x07,0x00,/*"o",5*/
- 0x00,0x00,0x10,0x10,0xFE,0x10,0x10,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x10,
- 0x10,0x08,0x00,0x00,/*"t",6*/
-};
-
-const u8 Cal_UnDone[] = { /*16*16 Cal_Ud*/
- 0xE0,0x18,0x04,0x02,0x12,0x21,0x41,0x81,0x81,0x41,0x22,0x12,0x04,0x18,0xE0,0x00,
- 0x03,0x0C,0x10,0x20,0x28,0x44,0x42,0x41,0x41,0x42,0x24,0x28,0x10,0x0C,0x03,0x00,/*"У׼ʧ��.BMP",0*/
-
- 0xF0,0x0C,0x02,0x01,0x01,0x01,0x01,0x02,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x03,0x0C,0x08,0x10,0x10,0x10,0x10,0x08,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"C",0*/
- 0x00,0x60,0x10,0x10,0x90,0x90,0x90,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x0E,0x11,0x11,0x10,0x10,0x08,0x1F,0x10,0x18,0x00,0x00,0x00,0x00,0x00,0x00,/*"a",1*/
- 0x00,0x01,0x01,0x01,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x10,0x10,0x10,0x1F,0x10,0x10,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"l",2*/
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,/*"_",3*/
- 0x00,0x01,0x07,0x19,0xE0,0xB0,0x0D,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x10,0x18,0x17,0x00,0x01,0x16,0x18,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"X",4*/
-
-};
-
-const u8 Cal_Done[] = {/*16*16 Cal_Dn*/
- 0xE0,0x18,0x64,0xE2,0x82,0x01,0x01,0x01,0x01,0x01,0x82,0xE2,0x64,0x18,0xE0,0x00,
- 0x03,0x0C,0x10,0x21,0x27,0x4E,0x58,0x50,0x58,0x4E,0x27,0x21,0x10,0x0C,0x03,0x00,/*"У׼�ɹ�.BMP",0*/
-
- 0xF0,0x0C,0x02,0x01,0x01,0x01,0x01,0x02,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x03,0x0C,0x08,0x10,0x10,0x10,0x10,0x08,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"C",0*/
- 0x00,0x60,0x10,0x10,0x90,0x90,0x90,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x0E,0x11,0x11,0x10,0x10,0x08,0x1F,0x10,0x18,0x00,0x00,0x00,0x00,0x00,0x00,/*"a",1*/
- 0x00,0x01,0x01,0x01,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x10,0x10,0x10,0x1F,0x10,0x10,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"l",2*/
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,/*"_",3*/
- 0x01,0x07,0x79,0x80,0x00,0x80,0x79,0x07,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x07,0x1C,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"V",4*/
-
-};
-
-const u8 Number12[] = {/*12*16*/
- 0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x10,0x20,
- 0x20,0x10,0x0F,0x00,0x00,0x00,0x00,0x00,/*"0",0*/
- 0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,
- 0x20,0x20,0x00,0x00,0x00,0x00,0x00,0x00,/*"1",1*/
- 0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x28,0x24,
- 0x22,0x21,0x30,0x00,0x00,0x00,0x00,0x00,/*"2",2*/
- 0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x20,0x20,
- 0x20,0x11,0x0E,0x00,0x00,0x00,0x00,0x00,/*"3",3*/
- 0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x04,0x24,
- 0x24,0x3F,0x24,0x00,0x00,0x00,0x00,0x00,/*"4",4*/
- 0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x21,0x20,
- 0x20,0x11,0x0E,0x00,0x00,0x00,0x00,0x00,/*"5",5*/
- 0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x11,0x20,
- 0x20,0x11,0x0E,0x00,0x00,0x00,0x00,0x00,/*"6",6*/
- 0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"7",7*/
- 0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x22,0x21,
- 0x21,0x22,0x1C,0x00,0x00,0x00,0x00,0x00,/*"8",8*/
- 0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x31,0x22,
- 0x22,0x11,0x0F,0x00,0x00,0x00,0x00,0x00,/*"9",9*/
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*".",10*/
-};
-
-const u8 Number10[] = { /*10*16*/
- 0x00,0xE0,0x18,0x04,0x04,0x04,0x04,0x18,0xE0,0x00,0x00,0x0F,0x30,0x40,0x40,0x40,
- 0x40,0x30,0x0F,0x00,/*"0",0*/
- 0x00,0x00,0x08,0x08,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x40,0x7F,0x40,
- 0x40,0x00,0x00,0x00,/*"1",1*/
- 0x00,0x78,0x04,0x04,0x04,0x04,0x04,0x88,0x70,0x00,0x00,0x60,0x50,0x48,0x44,0x42,
- 0x41,0x40,0x70,0x00,/*"2",2*/
- 0x00,0x38,0x04,0x04,0x84,0x84,0xC8,0x30,0x00,0x00,0x00,0x38,0x40,0x40,0x40,0x40,
- 0x40,0x21,0x1E,0x00,/*"3",3*/
- 0x00,0x00,0x80,0x60,0x10,0x08,0xFE,0x00,0x00,0x00,0x00,0x07,0x04,0x04,0x44,0x44,
- 0x7F,0x44,0x44,0x00,/*"4",4*/
- 0x00,0x00,0xFC,0x04,0x84,0x84,0x84,0x04,0x04,0x00,0x00,0x38,0x41,0x41,0x40,0x40,
- 0x40,0x21,0x1E,0x00,/*"5",5*/
- 0x00,0xC0,0x30,0x88,0x84,0x84,0x84,0x04,0x18,0x00,0x00,0x0F,0x31,0x40,0x40,0x40,
- 0x40,0x21,0x1E,0x00,/*"6",6*/
- 0x00,0x1C,0x04,0x04,0x84,0x44,0x34,0x0C,0x04,0x00,0x00,0x00,0x00,0x7E,0x01,0x00,
- 0x00,0x00,0x00,0x00,/*"7",7*/
- 0x00,0x70,0x88,0x04,0x04,0x04,0x04,0x88,0x70,0x00,0x00,0x1C,0x22,0x41,0x41,0x41,
- 0x41,0x22,0x1C,0x00,/*"8",8*/
- 0x00,0xF0,0x08,0x04,0x04,0x04,0x04,0x18,0xE0,0x00,0x00,0x30,0x41,0x42,0x42,0x42,
- 0x22,0x19,0x07,0x00,/*"9",9*/
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,/*" ",10*/
- 0x1C,0x1C,0xC0,0x30,0x08,0x04,0x04,0x04,0x08,0x30,0x00,0x00,0x07,0x18,0x20,0x40,
- 0x40,0x40,0x20,0x10,/*"��",11*/
- 0x1C,0x12,0x0C,0x02,0x02,0xFE,0x82,0x82,0xE2,0x02,0x00,0x00,0x00,0x00,0x40,0x7F,
- 0x40,0x00,0x03,0x00,/*"�H",12*/
-
-};
-
-const u8 Guide[] = { /*16*16*/
- 0x00,0x00,0x30,0x60,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x18,0x0C,0x06,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"D:\yinyongqin\��������\����.BMP",0*/
- 0x00,0x00,0x30,0x60,0xC0,0x80,0x30,0x60,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x18,0x0C,0x06,0x03,0x19,0x0C,0x06,0x03,0x01,0x00,0x00,0x00,0x00,0x00,/*"D:\yinyongqin\��������\����.BMP",0*/
- 0x00,0x00,0x30,0x60,0xC0,0x80,0x30,0x60,0xC0,0x80,0x30,0x60,0xC0,0x80,0x00,0x00,
- 0x00,0x00,0x18,0x0C,0x06,0x03,0x19,0x0C,0x06,0x03,0x19,0x0C,0x06,0x03,0x01,0x00,/*"D:\yinyongqin\��������\����.BMP",0*/
- 0x00,0x00,0x18,0x30,0x60,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x0C,0x06,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*">",0*/
- 0x00,0x00,0x18,0x30,0x60,0xC0,0x98,0x30,0x60,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x0C,0x06,0x03,0x01,0x0C,0x06,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,/*">>",0*/
- 0x00,0x00,0x18,0x30,0x60,0xC0,0x98,0x30,0x60,0xC0,0x98,0x30,0x60,0xC0,0x80,0x00,
- 0x00,0x00,0x0C,0x06,0x03,0x01,0x0C,0x06,0x03,0x01,0x0C,0x06,0x03,0x01,0x00,0x00,/*">>>",0*/
-};
-const u8 Config[] = { /*16*16*/
- 0x00,0x00,0x00,0xC0,0xF0,0x38,0x08,0x04,0x04,0x04,0x04,0x08,0x08,0x1C,0x00,0x00,
- 0x00,0x00,0x00,0x0F,0x1F,0x30,0x60,0x40,0x40,0x40,0x40,0x20,0x30,0x08,0x00,0x00,/*"C",0*/
- 0x00,0x00,0x00,0xC0,0xF0,0x18,0x0C,0x04,0x04,0x04,0x0C,0x18,0xF0,0xC0,0x00,0x00,
- 0x00,0x00,0x00,0x07,0x1F,0x30,0x60,0x40,0x40,0x40,0x60,0x30,0x1F,0x07,0x00,0x00,/*"O",1*/
- 0x00,0x00,0x00,0x04,0xFC,0x1C,0x38,0xE0,0xC0,0x00,0x00,0x04,0xFC,0x04,0x00,0x00,
- 0x00,0x00,0x00,0x40,0x7F,0x40,0x00,0x00,0x01,0x07,0x1E,0x38,0x7F,0x00,0x00,0x00,/*"N",2*/
- 0x00,0x00,0x00,0x04,0xFC,0xFC,0x84,0x84,0x84,0x84,0xE4,0x04,0x0C,0x10,0x00,0x00,
- 0x00,0x00,0x00,0x40,0x7F,0x7F,0x40,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,/*"F",3*/
- 0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0xFC,0xFC,0x04,0x04,0x04,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x40,0x40,0x40,0x7F,0x7F,0x40,0x40,0x40,0x00,0x00,0x00,/*"I",4*/
- 0x00,0x00,0x00,0xC0,0xF0,0x38,0x08,0x04,0x04,0x04,0x04,0x0C,0x1C,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x07,0x1F,0x38,0x60,0x40,0x40,0x42,0x42,0x3E,0x3E,0x02,0x02,0x00,/*"G",5*/
-};
-#endif
diff --git a/workspace/ts100/inc/stm32f10x_conf.h b/workspace/ts100/inc/stm32f10x_conf.h
deleted file mode 100644
index cfda2db6..00000000
--- a/workspace/ts100/inc/stm32f10x_conf.h
+++ /dev/null
@@ -1,85 +0,0 @@
-/**
- ******************************************************************************
- * @file stm32f10x_conf.h
- * @author MCD Application Team
- * @version V4.0.0
- * @date 21-January-2013
- * @brief Library configuration file.
- ******************************************************************************
- * @attention
- *
- * <h2><center>&copy; COPYRIGHT 2013 STMicroelectronics</center></h2>
- *
- * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
- * You may not use this file except in compliance with the License.
- * You may obtain a copy of the License at:
- *
- * http://www.st.com/software_license_agreement_liberty_v2
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- ******************************************************************************
- */
-
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __STM32F10x_CONF_H
-#define __STM32F10x_CONF_H
-
-/* Includes ------------------------------------------------------------------*/
-/* Uncomment the line below to enable peripheral header file inclusion */
-#include "stm32f10x_adc.h"
-#include "stm32f10x_bkp.h"
-#include "stm32f10x_can.h"
-#include "stm32f10x_crc.h"
-#include "stm32f10x_dac.h"
-#include "stm32f10x_dbgmcu.h"
-#include "stm32f10x_dma.h"
-#include "stm32f10x_exti.h"
-#include "stm32f10x_flash.h"
-#include "stm32f10x_fsmc.h"
-#include "stm32f10x_gpio.h"
-#include "stm32f10x_i2c.h"
-#include "stm32f10x_iwdg.h"
-#include "stm32f10x_pwr.h"
-#include "stm32f10x_rcc.h"
-#include "stm32f10x_rtc.h"
-#include "stm32f10x_sdio.h"
-#include "stm32f10x_spi.h"
-#include "stm32f10x_tim.h"
-#include "stm32f10x_usart.h"
-#include "stm32f10x_wwdg.h"
-#include "misc.h" /* High level functions for NVIC and SysTick (add-on to CMSIS functions) */
-
-/* Exported types ------------------------------------------------------------*/
-/* Exported constants --------------------------------------------------------*/
-/* Uncomment the line below to expanse the "assert_param" macro in the
- Standard Peripheral Library drivers code */
-/* #define USE_FULL_ASSERT 1 */
-
-/* Exported macro ------------------------------------------------------------*/
-#ifdef USE_FULL_ASSERT
-
-/*******************************************************************************
-* Macro Name : assert_param
-* Description : The assert_param macro is used for function's parameters check.
-* Input : - expr: If expr is false, it calls assert_failed function
-* which reports the name of the source file and the source
-* line number of the call that failed.
-* If expr is true, it returns no value.
-* Return : None
-*******************************************************************************/
- #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__))
-/* Exported functions ------------------------------------------------------- */
- void assert_failed(uint8_t* file, uint32_t line);
-#else
- #define assert_param(expr) ((void)0)
-#endif /* USE_FULL_ASSERT */
-
-#endif /* __STM32F10x_CONF_H */
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/workspace/ts100/inc/usb_bot.h b/workspace/ts100/inc/usb_bot.h
deleted file mode 100644
index 88b8977f..00000000
--- a/workspace/ts100/inc/usb_bot.h
+++ /dev/null
@@ -1,73 +0,0 @@
-/******************** (C) COPYRIGHT 2013 e-Design Co., Ltd. ********************
- File Name : USB_bot.h
- Version : STM32 USB Disk Ver 3.4 Author : MCD Application Team & bure
-*******************************************************************************/
-#ifndef __USB_BOT_H
-#define __USB_BOT_H
-
-typedef struct _Bulk_Only_CBW
-{
- u32 dSignature;
- u32 dTag;
- u32 dDataLength;
- u8 bmFlags;
- u8 bLUN;
- u8 bCBLength;
- u8 CB[16];
-}
-Bulk_Only_CBW;
-
-/* Bulk-only Command Status Wrapper */
-typedef struct _Bulk_Only_CSW
-{
- u32 dSignature;
- u32 dTag;
- u32 dDataResidue;
- u8 bStatus;
-}
-Bulk_Only_CSW;
-
-#define BOT_IDLE 0 /* Idle state */
-#define BOT_DATA_OUT 1 /* Data Out state */
-#define BOT_DATA_IN 2 /* Data In state */
-#define BOT_DATA_IN_LAST 3 /* Last Data In Last */
-#define BOT_CSW_Send 4 /* Command Status Wrapper */
-#define BOT_ERROR 5 /* error state */
-
-#define BOT_CBW_SIGNATURE 0x43425355
-#define BOT_CSW_SIGNATURE 0x53425355
-#define BOT_CBW_PACKET_LENGTH 31
-
-#define CSW_DATA_LENGTH 0x000D
-
-/* CSW Status Definitions */
-#define CSW_CMD_PASSED 0x00
-#define CSW_CMD_FAILED 0x01
-#define CSW_PHASE_ERROR 0x02
-
-#define SEND_CSW_DISABLE 0
-#define SEND_CSW_ENABLE 1
-
-#define DIR_IN 0
-#define DIR_OUT 1
-#define BOTH_DIR 2
-
-#define BULK_MAX_PACKET_SIZE 0x00000040
-
-extern u8 Bot_State;
-extern u16 Data_Len;
-extern u8 Bot_State;
-extern Bulk_Only_CBW CBW;
-extern Bulk_Only_CSW CSW;
-extern u8 Bulk_Buff[];
-
-void Mass_Storage_In (void);
-void Mass_Storage_Out (void);
-void CBW_Decode(void);
-void Transfer_Data_Request(u8* Data_Pointer, u16 Data_Len);
-void Set_CSW (u8 CSW_Status, u8 Send_Permission);
-void Bot_Abort(u8 Direction);
-
-#endif
-/********************************* END OF FILE ******************************/
-
diff --git a/workspace/ts100/inc/usb_conf.h b/workspace/ts100/inc/usb_conf.h
deleted file mode 100644
index cdcf68e7..00000000
--- a/workspace/ts100/inc/usb_conf.h
+++ /dev/null
@@ -1,73 +0,0 @@
-/******************** (C) COPYRIGHT 2008 STMicroelectronics ********************
-* File Name : usb_conf.h
-* Author : MCD Application Team
-* Version : V2.2.1
-* Date : 09/22/2008
-* Description : Mass Storage Demo configuration header
-********************************************************************************
-* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
-* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
-* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
-* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
-* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
-* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
-*******************************************************************************/
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __USB_CONF_H
-#define __USB_CONF_H
-
-/*-------------------------------------------------------------*/
-/* EP_NUM */
-/* defines how many endpoints are used by the device */
-/*-------------------------------------------------------------*/
-#define EP_NUM (3)
-
-/*-------------------------------------------------------------*/
-/* -------------- Buffer Description Table -----------------*/
-/*-------------------------------------------------------------*/
-/* buffer table base address */
-
-#define BTABLE_ADDRESS (0x00)
-
-/* EP0 */
-/* rx/tx buffer base address */
-#define ENDP0_RXADDR (0x18)
-#define ENDP0_TXADDR (0x58)
-
-/* EP1 */
-/* tx buffer base address */
-#define ENDP1_TXADDR (0x98)
-
-/* EP2 */
-/* Rx buffer base address */
-#define ENDP2_RXADDR (0xD8)
-
-
-/* ISTR events */
-/* IMR_MSK */
-/* mask defining which events has to be handled */
-/* by the device application software */
-#define IMR_MSK (CNTR_CTRM | CNTR_RESETM)
-
-/* CTR service routines */
-/* associated to defined endpoints */
-//#define EP1_IN_Callback NOP_Process
-#define EP2_IN_Callback NOP_Process
-#define EP3_IN_Callback NOP_Process
-#define EP4_IN_Callback NOP_Process
-#define EP5_IN_Callback NOP_Process
-#define EP6_IN_Callback NOP_Process
-#define EP7_IN_Callback NOP_Process
-
-
-#define EP1_OUT_Callback NOP_Process
-//#define EP2_OUT_Callback NOP_Process
-#define EP3_OUT_Callback NOP_Process
-#define EP4_OUT_Callback NOP_Process
-#define EP5_OUT_Callback NOP_Process
-#define EP6_OUT_Callback NOP_Process
-#define EP7_OUT_Callback NOP_Process
-
-#endif /* __USB_CONF_H */
-
-/******************* (C) COPYRIGHT 2008 STMicroelectronics *****END OF FILE****/
diff --git a/workspace/ts100/inc/usb_desc.h b/workspace/ts100/inc/usb_desc.h
deleted file mode 100644
index c6546763..00000000
--- a/workspace/ts100/inc/usb_desc.h
+++ /dev/null
@@ -1,35 +0,0 @@
-/******************** (C) COPYRIGHT 2015 e-Design Co., Ltd. ********************
- File Name : USB_desc.h
- Version : STM32 USB Disk Ver 3.4 Author : MCD Application Team & bure
-*******************************************************************************/
-#ifndef __USB_DESC_H
-#define __USB_DESC_H
-
-#ifdef STM32F30X
- #include "stm32f30x.h"
-#else
- #include "stm32f10x.h"
-#endif
-
-#define MASS_SIZ_DEVICE_DESC 18
-#define MASS_SIZ_CONFIG_DESC 32
-
-#define MASS_SIZ_STRING_LANGID 4
-#define MASS_SIZ_STRING_VENDOR 38
-#define MASS_SIZ_STRING_PRODUCT 38
-#define MASS_SIZ_STRING_SERIAL 26
-#define MASS_SIZ_STRING_INTERFACE 16
-
-extern const u8 MASS_DeviceDescriptor[MASS_SIZ_DEVICE_DESC];
-extern const u8 MASS_ConfigDescriptor[MASS_SIZ_CONFIG_DESC];
-
-extern const u8 MASS_StringLangID[MASS_SIZ_STRING_LANGID];
-extern const u8 MASS_StringVendor[MASS_SIZ_STRING_VENDOR];
-extern const u8 MASS_StringProduct[MASS_SIZ_STRING_PRODUCT];
-extern u8 MASS_StringSerial[MASS_SIZ_STRING_SERIAL];
-extern const u8 MASS_StringInterface[MASS_SIZ_STRING_INTERFACE];
-
-#endif
-/********************************* END OF FILE ******************************/
-
-
diff --git a/workspace/ts100/inc/usb_istr.h b/workspace/ts100/inc/usb_istr.h
deleted file mode 100644
index ff56a5e8..00000000
--- a/workspace/ts100/inc/usb_istr.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/******************** (C) COPYRIGHT 2015 e-Design Co., Ltd. ********************
- File Name : USB_istr.h
- Version : STM32 USB Disk Ver 3.4 Author : MCD Application Team & bure
-*******************************************************************************/
-#ifndef __USB_ISTR_H
-#define __USB_ISTR_H
-
-#include "usb_conf.h"
-
-void CTR_HP(void);
-void USB_Istr(void);
-
-/* function prototypes Automatically built defining related macros */
-
-#ifdef CTR_CALLBACK
-void CTR_Callback(void);
-#endif
-
-#ifdef DOVR_CALLBACK
-void DOVR_Callback(void);
-#endif
-
-#ifdef ERR_CALLBACK
-void ERR_Callback(void);
-#endif
-
-#ifdef WKUP_CALLBACK
-void WKUP_Callback(void);
-#endif
-
-#ifdef SUSP_CALLBACK
-void SUSP_Callback(void);
-#endif
-
-#ifdef RESET_CALLBACK
-void RESET_Callback(void);
-#endif
-
-#ifdef SOF_CALLBACK
-void SOF_Callback(void);
-#endif
-
-#ifdef ESOF_CALLBACK
-void ESOF_Callback(void);
-#endif
-
-void EP1_IN_Callback(void);
-void EP2_IN_Callback(void);
-void EP3_IN_Callback(void);
-void EP4_IN_Callback(void);
-void EP5_IN_Callback(void);
-void EP6_IN_Callback(void);
-void EP7_IN_Callback(void);
-
-void EP1_OUT_Callback(void);
-void EP2_OUT_Callback(void);
-void EP3_OUT_Callback(void);
-void EP4_OUT_Callback(void);
-void EP5_OUT_Callback(void);
-void EP6_OUT_Callback(void);
-void EP7_OUT_Callback(void);
-
-#endif
-/********************************* END OF FILE ******************************/
diff --git a/workspace/ts100/inc/usb_prop.h b/workspace/ts100/inc/usb_prop.h
deleted file mode 100644
index 8b6e0f68..00000000
--- a/workspace/ts100/inc/usb_prop.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/******************** (C) COPYRIGHT 2015 e-Design Co., Ltd. ********************
- File Name : USB_prop.h
- Version : STM32 USB Disk Ver 3.4 Author : MCD Application Team & bure
-*******************************************************************************/
-#ifndef __usb_prop_H
-#define __usb_prop_H
-
-#include "usb_core.h"
-
-#ifdef STM32F30X
- #include "stm32f30x.h"
-#elif STM32F10X_HD
- #include "stm32f10x.h"
-#endif
-
-#define Mass_Storage_GetConfiguration NOP_Process
-/* #define Mass_Storage_SetConfiguration NOP_Process*/
-#define Mass_Storage_GetInterface NOP_Process
-#define Mass_Storage_SetInterface NOP_Process
-#define Mass_Storage_GetStatus NOP_Process
-/* #define Mass_Storage_ClearFeature NOP_Process*/
-#define Mass_Storage_SetEndPointFeature NOP_Process
-#define Mass_Storage_SetDeviceFeature NOP_Process
-/*#define Mass_Storage_SetDeviceAddress NOP_Process*/
-
-/* MASS Storage Requests*/
-#define GET_MAX_LUN 0xFE
-#define MASS_STORAGE_RESET 0xFF
-#define LUN_DATA_LENGTH 1
-
-extern u32 Max_Lun;
-
-void MASS_init(void);
-void MASS_Reset(void);
-void Mass_Storage_SetConfiguration(void);
-void Mass_Storage_ClearFeature(void);
-void Mass_Storage_SetDeviceAddress (void);
-void MASS_Status_In (void);
-void MASS_Status_Out (void);
-RESULT MASS_Data_Setup(u8);
-RESULT MASS_NoData_Setup(u8);
-RESULT MASS_Get_Interface_Setting(u8 Interface, u8 AlternateSetting);
-u8 *MASS_GetDeviceDescriptor(u16 );
-u8 *MASS_GetConfigDescriptor(u16);
-u8 *MASS_GetStringDescriptor(u16);
-u8 *Get_Max_Lun(u16 Length);
-void Get_SerialNum(void);
-
-#endif
-/********************************* END OF FILE ******************************/
-
diff --git a/workspace/ts100/inc/usb_pwr.h b/workspace/ts100/inc/usb_pwr.h
deleted file mode 100644
index d1c167d6..00000000
--- a/workspace/ts100/inc/usb_pwr.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/******************** (C) COPYRIGHT 2015 e-Design Co., Ltd. ********************
- File Name : USB_pwr.h
- Version : STM32 USB Disk Ver 3.4 Author : MCD Application Team & bure
-*******************************************************************************/
-#ifndef __USB_PWR_H
-#define __USB_PWR_H
-
-#include "usb_core.h"
-
-typedef enum _RESUME_STATE
-{
- RESUME_EXTERNAL,
- RESUME_INTERNAL,
- RESUME_LATER,
- RESUME_WAIT,
- RESUME_START,
- RESUME_ON,
- RESUME_OFF,
- RESUME_ESOF
-} RESUME_STATE;
-
-typedef enum _DEVICE_STATE
-{
- UNCONNECTED,
- ATTACHED,
- POWERED,
- SUSPENDED,
- ADDRESSED,
- CONFIGURED
-} DEVICE_STATE;
-
-void Suspend(void);
-void Resume_Init(void);
-void Resume(RESUME_STATE eResumeSetVal);
-RESULT PowerOn(void);
-RESULT PowerOff(void);
-
-extern vu32 bDeviceState; /* USB device status */
-extern vu8 fSuspendEnabled; /* true when suspend is possible */
-
-#endif
-/********************************* END OF FILE ******************************/
diff --git a/workspace/ts100/inc/usb_scsi.h b/workspace/ts100/inc/usb_scsi.h
deleted file mode 100644
index 1e9a9ccd..00000000
--- a/workspace/ts100/inc/usb_scsi.h
+++ /dev/null
@@ -1,125 +0,0 @@
-/******************** (C) COPYRIGHT 2015 e-Design Co., Ltd. ********************
- File Name : USB_scsi.h
- Version : STM32 USB Disk Ver 3.4 Author : MCD Application Team & bure
-*******************************************************************************/
-#ifndef __USB_SCSI_H
-#define __USB_SCSI_H
-
-#ifdef STM32F30X
- #include "stm32f30x.h"
-#else
- #include "stm32f10x.h"
-#endif
-
-/* SCSI Commands */
-#define SCSI_FORMAT_UNIT 0x04
-#define SCSI_INQUIRY 0x12
-#define SCSI_MODE_SELECT6 0x15
-#define SCSI_MODE_SELECT10 0x55
-#define SCSI_MODE_SENSE6 0x1A
-#define SCSI_MODE_SENSE10 0x5A
-#define SCSI_ALLOW_MEDIUM_REMOVAL 0x1E
-#define SCSI_READ6 0x08
-#define SCSI_READ10 0x28
-#define SCSI_READ12 0xA8
-#define SCSI_READ16 0x88
-
-#define SCSI_READ_CAPACITY10 0x25
-#define SCSI_READ_CAPACITY16 0x9E
-
-#define SCSI_REQUEST_SENSE 0x03
-#define SCSI_START_STOP_UNIT 0x1B
-#define SCSI_TEST_UNIT_READY 0x00
-#define SCSI_WRITE6 0x0A
-#define SCSI_WRITE10 0x2A
-#define SCSI_WRITE12 0xAA
-#define SCSI_WRITE16 0x8A
-
-#define SCSI_VERIFY10 0x2F
-#define SCSI_VERIFY12 0xAF
-#define SCSI_VERIFY16 0x8F
-
-#define SCSI_SEND_DIAGNOSTIC 0x1D
-#define SCSI_READ_FORMAT_CAPACITIES 0x23
-
-#define NO_SENSE 0
-#define RECOVERED_ERROR 1
-#define NOT_READY 2
-#define MEDIUM_ERROR 3
-#define HARDWARE_ERROR 4
-#define ILLEGAL_REQUEST 5
-#define UNIT_ATTENTION 6
-#define DATA_PROTECT 7
-#define BLANK_CHECK 8
-#define VENDOR_SPECIFIC 9
-#define COPY_ABORTED 10
-#define ABORTED_COMMAND 11
-#define VOLUME_OVERFLOW 13
-#define MISCOMPARE 14
-
-
-#define INVALID_COMMAND 0x20
-#define INVALID_FIELED_IN_COMMAND 0x24
-#define PARAMETER_LIST_LENGTH_ERROR 0x1A
-#define INVALID_FIELD_IN_PARAMETER_LIST 0x26
-#define ADDRESS_OUT_OF_RANGE 0x21
-#define MEDIUM_NOT_PRESENT 0x3A
-#define MEDIUM_HAVE_CHANGED 0x28
-
-#define READ_FORMAT_CAPACITY_DATA_LEN 0x0C
-#define READ_CAPACITY10_DATA_LEN 0x08
-#define MODE_SENSE10_DATA_LEN 0x08
-#define MODE_SENSE6_DATA_LEN 0x04
-#define REQUEST_SENSE_DATA_LEN 0x12
-#define STANDARD_INQUIRY_DATA_LEN 0x24 // 0x24
-#define BLKVFY 0x04
-
-extern u8 Page00_Inquiry_Data[];
-extern u8 Standard_Inquiry_Data[];
-extern u8 Mode_Sense6_data[];
-extern u8 Mode_Sense10_data[];
-extern u8 Scsi_Sense_Data[];
-extern u8 ReadCapacity10_Data[];
-
-extern u8 Bot_State;
-
-void SCSI_Inquiry_Cmd(void);
-void SCSI_ReadFormatCapacity_Cmd(void);
-void SCSI_ReadCapacity10_Cmd(void);
-void SCSI_RequestSense_Cmd (void);
-void SCSI_Start_Stop_Unit_Cmd(void);
-void SCSI_ModeSense6_Cmd (void);
-void SCSI_ModeSense10_Cmd (void);
-void SCSI_Write10_Cmd(u32 LBA , u32 BlockNbr);
-void SCSI_Read10_Cmd(u32 LBA , u32 BlockNbr);
-void SCSI_Verify10_Cmd(void);
-
-void SCSI_Invalid_Cmd(void);
-void SCSI_Valid_Cmd(void);
-u8 SCSI_Address_Management(u8 Cmd , u32 LBA , u32 BlockNbr);
-
-void Set_Scsi_Sense_Data(u8 Sens_Key, u8 Asc);
-void SCSI_TestUnitReady_Cmd (void);
-void SCSI_Format_Cmd (void);
-
-#define SCSI_Prevent_Removal_Cmd SCSI_Valid_Cmd
-
-// Invalid (Unsupported) commands
-#define SCSI_READ_CAPACITY16_Cmd SCSI_Invalid_Cmd
-
-//#define SCSI_FormatUnit_Cmd SCSI_Invalid_Cmd
-#define SCSI_Write6_Cmd SCSI_Invalid_Cmd
-#define SCSI_Write16_Cmd SCSI_Invalid_Cmd
-#define SCSI_Write12_Cmd SCSI_Invalid_Cmd
-#define SCSI_Read6_Cmd SCSI_Invalid_Cmd
-#define SCSI_Read12_Cmd SCSI_Invalid_Cmd
-#define SCSI_Read16_Cmd SCSI_Invalid_Cmd
-#define SCSI_Send_Diagnostic_Cmd SCSI_Invalid_Cmd
-#define SCSI_Mode_Select6_Cmd SCSI_Invalid_Cmd
-#define SCSI_Mode_Select10_Cmd SCSI_Invalid_Cmd
-#define SCSI_Verify12_Cmd SCSI_Invalid_Cmd
-#define SCSI_Verify16_Cmd SCSI_Invalid_Cmd
-
-#endif
-/********************************* END OF FILE ******************************/
-
diff --git a/workspace/ts100/src/2FAT12.c b/workspace/ts100/src/2FAT12.c
deleted file mode 100644
index 424abf82..00000000
--- a/workspace/ts100/src/2FAT12.c
+++ /dev/null
@@ -1,284 +0,0 @@
-/********************* (C) COPYRIGHT 2015 e-Design Co.,Ltd. ********************
- File Name : 2FAT12.c
- Version : S100 APP Ver 2.11
- Description:
- Author : bure & Celery
- Data: 2015/08/03
- History:
- 2016/09/13 Ben V. Brown -> English comments and cleaning up
- 2015/08/03
- *******************************************************************************/
-#include <string.h>
-#include "FAT12.h"
-#include "Bios.h"
-
-#define FAT_LEN 0x1800
-#define FAT1_BASE 0x00001000 // FAT1
-#define FAT2_BASE 0x00002800 // FAT2
-#define ROOT_BASE 0x00004000 //
-#define FILE_BASE 0x00008000 //
-#define SEC_LEN 512 //length of a sector -> 512 Bytes
-#define FAT1_SEC 0x0C // FAT1 Sector
-#define FAT2_SEC 0x0C // FAT2 Sector
-
-#define OK 0 //Error codes
-#define SEC_ERR 1 //
-#define FAT_ERR 2 //
-#define OVER 3 //
-#define NEW 4 //
-#define END 0xFFF //
-
-#define OW 0 //
-#define RW 1 //
-
-/*******************************************************************************
- Function: NextCluster
- Description:
- Input:
- *******************************************************************************/
-u8 NextCluster(u16* pCluster) {
- u16 FatNum;
- u32 Addr = FAT1_BASE + (*pCluster + *pCluster / 2);
-
- *(pCluster + 1) = *pCluster; // ����ǰһ���غ�
-// *(pCluster+1)= 0;
- if ((*pCluster >= END) || (*pCluster < 2))
- return OK;
- if (ReadDiskData((u8*) &FatNum, Addr, 2) != OK)
- return SEC_ERR;
- *pCluster = (*pCluster & 1) ? (FatNum >> 4) : (FatNum & 0x0FFF); // ָ����һ���غ�
- return OK;
-}
-/*******************************************************************************
- Function: ReadFileSec
- Description:
- Input:
- *******************************************************************************/
-u8 ReadFileSec(u8* pBuffer, u16* pCluster) {
- u32 ReadAddr = FILE_BASE + SEC_LEN * (*pCluster - 2);
- //This code appears to read the data in two chunks of 256 bytes...
- if (ReadDiskData(pBuffer, ReadAddr, 256) != OK)
- return SEC_ERR; //
- pBuffer += 256;
- ReadAddr += 256;
- if (ReadDiskData(pBuffer, ReadAddr, 256) != OK)
- return SEC_ERR; // Failed to read the sector
- if (NextCluster(pCluster) != 0)
- return FAT_ERR; //
- return OK;
-}
-/*******************************************************************************
- Function: ProgFileSec
- Description:
- Input:
- *******************************************************************************/
-u8 ProgFileSec(u8* pBuffer, u16* pCluster) {
- u16 Tmp;
- u32 ProgAddr = FILE_BASE + SEC_LEN * (*pCluster - 2);
-
- if (ProgDiskPage(pBuffer, ProgAddr) != OK)
- return SEC_ERR; //
- pBuffer += 256;
- ProgAddr += 256;
- if (ProgDiskPage(pBuffer, ProgAddr) != OK)
- return SEC_ERR; //
- Tmp = *pCluster;
- switch (Tmp) {
- case 0:
- case 1:
- if (SeekBlank(pBuffer, pCluster) != OK)
- return OVER;
- if (SetCluster(pBuffer, pCluster) != OK)
- return SEC_ERR;
- *(pCluster + 1) = Tmp;
- return OK;
- case END:
- default:
- if (NextCluster(pCluster) != OK)
- return FAT_ERR;
- return OK;
- }
-}
-/*******************************************************************************
- Function: SeekBlank
- Description:
- Input:
- *******************************************************************************/
-u8 SeekBlank(u8* pBuffer, u16* pCluster) {
- u16 Offset, Tmp, i, n = 0;
- u32 SecAddr;
-
- for (i = 0; i < 4096; i++) {
- Offset = i + i / 2;
- if ((Offset % 256) == 0) {
- SecAddr = FAT1_BASE + (Offset & (~0xFF));
- if (ReadDiskData(pBuffer, SecAddr, 258) != 0)
- return SEC_ERR;
- }
- Offset %= 256;
- Tmp = pBuffer[Offset] + (pBuffer[Offset + 1] << 8);
- Tmp = (i & 1) ? (Tmp >> 4) : (Tmp & 0xFFF);
- if (Tmp == 0) {
- *pCluster++ = i;
- n++;
- if (n > 1)
- return OK;
- }
- }
- *(pCluster + 1) = 0xFFF;
- return OK;
-}
-/*******************************************************************************
- Function:
- Description:
- Input:
- *******************************************************************************/
-u8 SetCluster(u8* pBuffer, u16* pCluster) {
- u16 Offset, Tmp, i, k;
- u32 SecAddr;
-
- i = *pCluster; // ��ȡԭ��ǰ�غ�
- k = *(pCluster + 1); // ��ȡ��һ�غ�
- *pCluster = k;
- Offset = i + i / 2;
- SecAddr = FAT1_BASE + (Offset & (~0xFF));
- Tmp = Offset & 0xFF;
- if (ReadDiskData(pBuffer, SecAddr, 256) != 0)
- return SEC_ERR;
- if (i & 1)
- pBuffer[Tmp] = ((k << 4) & 0xF0) + (pBuffer[Tmp] & 0x0F);
- else
- pBuffer[Tmp] = k;
- if (Tmp++ < 256) {
- if (i & 1)
- pBuffer[Tmp] = k >> 4;
- else
- pBuffer[Tmp] = ((k >> 8) & 0x0F) + (pBuffer[Tmp] & 0xF0);
- if (ProgDiskPage(pBuffer, SecAddr) != 0)
- return SEC_ERR;
- } else {
- if (ProgDiskPage(pBuffer, SecAddr) != 0)
- return SEC_ERR;
- SecAddr += 256;
- if (ReadDiskData(pBuffer, SecAddr, 256) != 0)
- return SEC_ERR;
- if (i & 1)
- pBuffer[0] = k >> 4;
- else
- pBuffer[0] = ((k >> 8) & 0x0F) + (pBuffer[0] & 0xF0);
- if (ProgDiskPage(pBuffer, SecAddr) != 0)
- return SEC_ERR;
- }
- return OK;
-}
-/*******************************************************************************
- Function:
- Description:
- Input:
- *******************************************************************************/
-u8 FAT_SearchFile(u8* pBuffer, u8* pFileName, u16* pCluster, u32* pDirAddr,
- u32* flag) {
- u16 i, n;
-
- *pCluster = 0;
- for (*pDirAddr = ROOT_BASE; *pDirAddr < FILE_BASE;) {
- if (ReadDiskData(pBuffer, *pDirAddr, 256) != OK)
- return SEC_ERR;
- for (n = 0; n < 256; n += 32) {
- for (i = 0; i < 4; i++) {
- if (pBuffer[n + i] != 0) {
- if (pBuffer[n + i] != pFileName[i])
- break;
- if (i == 3) { // �ҵ��ļ���
- *pCluster = *(u16*) (pBuffer + n + 0x1A); // �ļ���һ���غ�
- return OK;
- }
- } else
- return NEW; // ������һ���հ�Ŀ¼��󷵻�
- }
- *pDirAddr += 32;
- }
- }
- return OVER;
-}
-
-/*******************************************************************************
- Function:OpenFileRd
- Description: Opens a file for reading from
- Input:
- *******************************************************************************/
-u8 OpenFileRd(u8* pBuffer, u8* pFileName, u16* pCluster, u32* pDirAddr) {
- u16 i, n;
-
- *pCluster = 0;
- for (*pDirAddr = ROOT_BASE; *pDirAddr < FILE_BASE;) {
- if (ReadDiskData(pBuffer, *pDirAddr, 256) != OK)
- return SEC_ERR;
- for (n = 0; n < 256; n += 32) {
- for (i = 0; i < 11; i++) {
- if (pBuffer[n + i] != 0) {
- if (pBuffer[n + i] != pFileName[i])
- break;
- if (i == 10) { // �ҵ��ļ���
- *pCluster = *(u16*) (pBuffer + n + 0x1A); // �ļ���һ���غ�
- return OK;
- }
- } else
- return NEW; // ������һ���հ�Ŀ¼��󷵻�
- }
- *pDirAddr += 32;
- }
- }
- return OVER;
-}
-/*******************************************************************************
- Function: OpenFileWr
- Description: Opens a file for writing to
- Input:
- *******************************************************************************/
-u8 OpenFileWr(u8* pBuffer, u8* pFileName, u16* pCluster, u32* pDirAddr) {
- u16 i, n;
-
- i = OpenFileRd(pBuffer, pFileName, pCluster, pDirAddr);
- if (i != NEW)
- return i;
- else { // ��ǰ��Ϊ�հ�Ŀ¼��
- if (SeekBlank(pBuffer, pCluster) != OK)
- return OVER; // ��FAT��������
- n = *pDirAddr & 0xFF; // nΪ��ǰҳĿ¼��
- if (ReadDiskData(pBuffer, (*pDirAddr) - n, 256) != OK)
- return SEC_ERR;
- for (i = 0; i < 11; i++)
- pBuffer[n + i] = pFileName[i]; // ������Ŀ¼��
- *(u16*) (pBuffer + n + 0x1A) = *pCluster;
- if (ProgDiskPage(pBuffer, (*pDirAddr) - n) != OK)
- return SEC_ERR;
- return OK;
- }
-}
-/*******************************************************************************
- Function: CloseFile
- Description: Closes a file that was previously opened
- Input:
- *******************************************************************************/
-u8 CloseFile(u8* pBuffer, u32 Lenght, u16* pCluster, u32* pDirAddr) {
- u16 n;
-
-// *pCluster = *(pCluster+1); // ��ȡǰһ���غ�
- *(pCluster + 1) = 0xFFF;
- SetCluster(pBuffer, pCluster);
- if (ReadDiskData(pBuffer, (*pDirAddr & (~0xFF)), 256) != OK)
- return SEC_ERR;
- *(u8*) (pBuffer + (*pDirAddr & 0xFF) + 0x0B) = 0x20;
- *(u32*) (pBuffer + (*pDirAddr & 0xFF) + 0x1C) = Lenght;
- if (ProgDiskPage(pBuffer, (*pDirAddr & (~0xFF))) != OK)
- return SEC_ERR;
- for (n = 0; n < FAT1_SEC; n++) {
- if (ReadDiskData(pBuffer, FAT1_BASE + n * 256, 256) != OK)
- return SEC_ERR;
- if (ProgDiskPage(pBuffer, FAT2_BASE + n * 256) != OK)
- return SEC_ERR;
- }
- return OK;
-}
-/******************************** END OF FILE *********************************/
diff --git a/workspace/ts100/src/Analog.c b/workspace/ts100/src/Analog.c
new file mode 100644
index 00000000..591d3e96
--- /dev/null
+++ b/workspace/ts100/src/Analog.c
@@ -0,0 +1,123 @@
+/*
+ * Analog.c
+ *
+ * Created on: 20 Sep 2016
+ * Author: ralim
+ * Contains the functions related to reading and scaling the adc pins
+ * This is used for temperature and battery voltage sense
+ */
+#include "Analog.h"
+
+//Reads the dc input and returns it as X10 voltage (ie 236 = 23.6V)
+//Seems unstable below 9.5V input
+uint16_t readDCVoltage() {
+ uint16_t reading = 0;
+ for (u8 i = 0; i < 10; i++) {
+ reading += ADC_GetConversionValue(ADC2);
+ }
+ reading /= 144; //take the average and convert to X10 voltage
+ return reading; //return the read voltage
+}
+
+//This reads the thermocouple in the tip
+//This allows us to read it in X10 mode
+//Returns temperature in C X10 mode
+int16_t readTipTemp() {
+ static uint32_t rollingAverage[4];
+ static uint8_t rIndex = 0;
+
+ /*The head has a thermocouple inline with the heater
+ This is read by turning off the heater
+ Then read the output of the op-amp that is connected across the connections
+ */
+ uint32_t ad_sum = 0;
+ uint32_t max = 0, min;
+ uint32_t ad_value, avg_data;
+ uint32_t timer = getIronTimer();
+ setIronTimer(0); //set the remaining time to zero
+ HEAT_OFF(); //heater must be off
+ delayMs(5); //wait for the heater to time out
+ uint8_t gMeas_cnt = 9; //how many measurements to make
+ max = ad_sum = min = Get_ADC1Value(0);
+
+ while (gMeas_cnt > 0) {
+ ad_value = Get_ADC1Value(0);
+ ad_sum += ad_value;
+ if (ad_value > max)
+ max = ad_value;
+ if (ad_value < min)
+ min = ad_value;
+
+ gMeas_cnt--;
+ }
+ setIronTimer(timer);
+ ad_sum = ad_sum - max - min; //remove the two outliers
+ avg_data = ad_sum / 8; //take the average
+ rollingAverage[rIndex] = avg_data;
+ rIndex = (rIndex + 1) % 4;
+ return (rollingAverage[0] + rollingAverage[1] + rollingAverage[2]
+ + rollingAverage[3]) / 4; //get the average
+
+}
+
+/*******************************************************************************
+ Function:
+ Description:Reads the temperature of the on board temp sensor for calibration
+ http://www.analog.com/media/en/technical-documentation/data-sheets/TMP35_36_37.pdf
+ Output: The onboardTemp in C X 10
+ *******************************************************************************/
+int readSensorTemp(void) {
+ static uint32_t rollingAverage[4];
+ static uint8_t rIndex = 0;
+ u32 ad_sum = 0;
+ u32 max, min;
+ u32 ad_value, avg_data, slide_data;
+
+ u8 gMeas_cnt = 9;
+ ad_sum = min = max = Get_ADC1Value(1);
+ while (gMeas_cnt > 0) {
+ ad_value = Get_ADC1Value(1);
+ ad_sum += ad_value;
+ if (ad_value > max)
+ max = ad_value;
+ if (ad_value < min)
+ min = ad_value;
+ gMeas_cnt--;
+ }
+ ad_sum = ad_sum - max - min;
+ avg_data = ad_sum / 8;
+ //^ Removes the two outliers from the data spread
+
+ rollingAverage[rIndex] = avg_data; //store this result
+ rIndex = (rIndex + 1) % 4; //move the index
+ slide_data = (rollingAverage[0] + rollingAverage[1] + rollingAverage[2]
+ + rollingAverage[3]) / 4; //get the average
+ return (250 + (3300 * slide_data / 4096) - 750);
+ //(25 + ((10*(33*gSlide_data)/4096)-75));
+ //^ Convert the reading to C
+
+}
+
+volatile uint16_t ADC1ConvertedValue[2];
+//returns the latest reading from ADC1 that was buffered using DMA
+uint16_t Get_ADC1Value(uint8_t i) {
+ return ADC1ConvertedValue[i];
+}
+//This returns the calibrated temperature reading of the iron temp
+//inputs : calibration value / wether to take a new reading or not
+uint16_t readIronTemp(uint16_t calibration_temp, uint8_t read) {
+ static uint16_t calTemp = 0;
+ static uint16_t lastVal = 0;
+
+ if (calibration_temp != 0)
+ calTemp = calibration_temp;
+
+ if (read) {
+ lastVal = (readTipTemp() * 1000 + 806 * readSensorTemp()
+ - calTemp * 1000) / 806;
+
+ }
+
+ return lastVal;
+
+}
diff --git a/workspace/ts100/src/Bios.c b/workspace/ts100/src/Bios.c
index 8539a4f0..c81fc5a6 100644
--- a/workspace/ts100/src/Bios.c
+++ b/workspace/ts100/src/Bios.c
@@ -1,110 +1,17 @@
-/********************* (C) COPYRIGHT 2015 e-Design Co.,Ltd. **********************
- File Name : Bios.c
- Version : S100 APP Ver 2.11
- Description:
- Author : Celery
- Data: 2015/07/07
- History:
- 2015/07/07 ͳһ������
- *******************************************************************************/
-
-#include <Hardware.h>
-#include <usb_lib.h>
-#include "APP_Version.h"
+/*
+ * Setup all the basic hardware in the system and handle timer3 tick
+ */
+
#include "Bios.h"
#include "I2C.h"
-#include "CTRL.h"
-
-/******************************************************************************/
-#define ADC1_DR_Address ((u32)0x4001244C)
-vu32 gTimeOut, gMs_timeout;
-volatile u32 gTime[8]; //times for timer storage
-//^-- gTime is automatically decremented on each firing of timer 2 if >0
-vu16 ADC1ConvertedValue[2];
-vu32 gHeat_cnt = 0;
-
-/*******************************************************************************
- ������: Get_AdcValue
- ��������:��ȡADC ת����Ķ���
- �������:ת�����AD
- ���ز���:NULL
- *******************************************************************************/
-u16 Get_AdcValue(u8 i) {
- return ADC1ConvertedValue[i];
-}
-/*******************************************************************************
- ������: Set_HeatingTime
- ��������:���ü���ʱ��
- �������:heating_time ����ʱ��
- ���ز���:NULL
- *******************************************************************************/
-void Set_HeatingTime(u32 heating_time) {
- gHeat_cnt = heating_time;
-}
-/*******************************************************************************
- ������: Get_HeatingTime
- ��������:��ȡ����ʱ��
- �������:NULL
- ���ز���:����ʱ��
- *******************************************************************************/
-u32 Get_HeatingTime(void) {
- return gHeat_cnt;
-}
-/*******************************************************************************
-Function:
-Description: Init the global count down timers
- *******************************************************************************/
-void Init_Gtime(void) {
- u8 i;
-
- for (i = 0; i < 8; i++)
- gTime[i] = 0;
-}
-/*******************************************************************************
- ������: Delay_Ms
- ��������:��ʱ����
- �������:��ʱ�ȴ��ĺ�����ֵ
- ���ز���:NULL
- *******************************************************************************/
-void Delay_Ms(u32 ms) {
- gMs_timeout = ms * 20;
- while (gMs_timeout)
- ; // {if(Scan_key()!=0)break;}
-}
-/*******************************************************************************
- ������: Delay_HalfMs
- ��������:ÿ��λΪ0.5�������ʱ����
- �������:��ʱ�ȴ���0.5������
- ���ز���:NULL
- *******************************************************************************/
-void Delay_HalfMs(u32 ms) {
- gMs_timeout = ms * 10;
- while (gMs_timeout)
- ; // {if(Scan_key()!=0)break;}
-}
+#define ADC1_DR_Address ((u32)0x4001244C)
+volatile uint32_t gHeat_cnt = 0;
-/*******************************************************************************
- Function: USB_Port
- Description: Enables or disables the usb pins
- Input: state == ENABLE or DISABLE
- *******************************************************************************/
-void USB_Port(u8 state) {
- USB_DN_LOW();
- USB_DP_LOW();
- if (state == DISABLE) {
- USB_DN_OUT();
- USB_DP_OUT();
- } else {
- USB_DN_EN();
- USB_DP_EN();
- }
-}
-/*******************************************************************************
- Function:RCC_Config
- Description:Setup the system clocks to use internal HSE to run the system at 48Mhz
- *******************************************************************************/
+/*
+ * Setup system clocks to run off internal oscillator at 48Mhz
+ */
void RCC_Config(void) {
RCC_DeInit();
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
@@ -123,90 +30,77 @@ void RCC_Config(void) {
RCC_AHBPeriphClockCmd(
RCC_AHBPeriph_SRAM | RCC_AHBPeriph_DMA1 | RCC_AHBPeriph_DMA2 |
- RCC_AHBPeriph_FLITF, // Enable DMA1 clock ???
- ENABLE);
+ RCC_AHBPeriph_FLITF, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB |
- RCC_APB2Periph_ADC1 | RCC_APB2Periph_ADC2, //| RCC_APB2Periph_ADC3, //RCC_APB2Periph_TIM1,
- ENABLE);
+ RCC_APB2Periph_ADC1 | RCC_APB2Periph_ADC2, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2 | RCC_APB1Periph_TIM3, ENABLE);
RCC_USBCLKConfig(RCC_USBCLKSource_PLLCLK_Div1); // USBCLK = 48MHz
+
+ RCC_ClocksTypeDef RCC_Clocks;
+ RCC_GetClocksFreq(&RCC_Clocks);
+ SysTick_Config(RCC_Clocks.HCLK_Frequency / 1000); //Enable the systick timer at 1ms
}
-/*******************************************************************************
- Function: NVIC_Config
- Description: Configures the NVIC table in the hardware
- Input: (tab_offset) the table offset for the NVIC
- *******************************************************************************/
+/*
+ * Shift the NVIC (Interrupt table) location relative to flash start
+ */
void NVIC_Config(u16 tab_offset) {
- NVIC_InitTypeDef NVIC_InitStructure;
-
NVIC_SetVectorTable(NVIC_VectTab_FLASH, tab_offset);
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
- NVIC_InitStructure.NVIC_IRQChannel = USB_LP_CAN1_RX0_IRQn;
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
- NVIC_Init(&NVIC_InitStructure);
}
-/*******************************************************************************
- Function:GPIO_Config
- Description: Configures all the GPIO into required states
- *******************************************************************************/
+/*
+ * Setup the GPIO
+ */
void GPIO_Config(void) {
GPIO_InitTypeDef GPIO_InitStructure;
+ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE); // GPIOB & AFIO
- GPIOA_OUTPUT()
- ;
- GPIOA_L_DEF()
- ;
- GPIOA_H_DEF()
- ;
-
- GPIOB_OUTPUT()
- ;
- GPIOB_L_DEF()
- ;
- GPIOB_H_DEF()
- ;
+ GPIO_PinRemapConfig(GPIO_Remap_SWJ_NoJTRST, ENABLE);
+ GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);
-//------ PA7 TMP36 Analog input ----------------------------------------//
+ //------ PA7 TMP36 Analog input ----------------------------------------//
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
GPIO_Init(GPIOA, &GPIO_InitStructure);
-//------ OLED_RST_PIN(PB9) ------------------------------------------------------------//
+ //------ OLED_RST_PIN(PB9) ---------------------------------------------//
GPIO_InitStructure.GPIO_Pin = OLED_RST_PIN;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
- GPIO_Init(GPIOB, &GPIO_InitStructure);
+ GPIO_Init(GPIOA, &GPIO_InitStructure);
-//------- Heat_Pin - Iron enable output PB4--------------------------------------------------------//
- GPIO_PinRemapConfig(GPIO_Remap_SWJ_NoJTRST, ENABLE); //Disable PB4=JNTRST
+ //------- Heat_Pin - Iron enable output PB4-----------------------------//
GPIO_InitStructure.GPIO_Pin = HEAT_PIN;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOB, &GPIO_InitStructure);
-//------ PB0 Iron temp input---------------------------------------//
+ //----------- PB0 Iron temp input---------------------------------------//
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
GPIO_Init(GPIOB, &GPIO_InitStructure);
-//---------- INPUT Voltage Detection Pin VB PB1(Ai9) ---------------------------------------//
+ //---------- INPUT Voltage Detection Pin VB PB1(Ai9) -------------------//
GPIO_InitStructure.GPIO_Pin = VB_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
GPIO_Init(GPIOB, &GPIO_InitStructure);
-//-------- K1 = PA9, K2 = PA6 ----------------------------------------------------------//
+ //-------- K1 = PA9, K2 = PA6 ------------------------------------------//
GPIO_InitStructure.GPIO_Pin = KEY1_PIN | KEY2_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOA, &GPIO_InitStructure);
+
+ //--------INT 1 == PB5 -------------------------------------------------//
+ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
+ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//pullup just in case something resets the accel
+ GPIO_Init(GPIOB, &GPIO_InitStructure);
+
}
-/*******************************************************************************
- Function: Adc_Init
- Description:Enable the ADC's and setup the DMA as well to automatically read them to system ram.
- *******************************************************************************/
+/*
+ * Init the ADC's
+ * Setup ADC1 to read via DMA to device ram automatically
+ */
void Adc_Init(void) {
u32 timeout = 10 * 0x1000;
ADC_InitTypeDef ADC_InitStructure;
@@ -220,7 +114,8 @@ void Adc_Init(void) {
DMA_InitStructure.DMA_BufferSize = 2;
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
- DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
+ DMA_InitStructure.DMA_PeripheralDataSize =
+ DMA_PeripheralDataSize_HalfWord;
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
DMA_InitStructure.DMA_Priority = DMA_Priority_High;
@@ -250,9 +145,12 @@ void Adc_Init(void) {
ADC_Init(ADC2, &ADC_InitStructure);
// ADC1,2 regular channel7 channel9 and channel8 configuration ----------//
- ADC_RegularChannelConfig(ADC1, ADC_Channel_7, 2, ADC_SampleTime_239Cycles5); //28 or 55
- ADC_RegularChannelConfig(ADC1, ADC_Channel_8, 1, ADC_SampleTime_239Cycles5); //28 or 55
- ADC_RegularChannelConfig(ADC2, ADC_Channel_9, 1, ADC_SampleTime_55Cycles5); //28 or 55
+ ADC_RegularChannelConfig(ADC1, ADC_Channel_7, 2,
+ ADC_SampleTime_239Cycles5); //28 or 55
+ ADC_RegularChannelConfig(ADC1, ADC_Channel_8, 1,
+ ADC_SampleTime_239Cycles5); //28 or 55
+ ADC_RegularChannelConfig(ADC2, ADC_Channel_9, 1,
+ ADC_SampleTime_55Cycles5); //28 or 55
/* Enable ADC1 DMA */
ADC_DMACmd(ADC1, ENABLE);
@@ -275,43 +173,19 @@ void Adc_Init(void) {
ADC_SoftwareStartConvCmd(ADC2, ENABLE);
}
-/*******************************************************************************
- Function:
- Description: Setup Timer2 to fire every 10ms
- *******************************************************************************/
-void Init_Timer2(void) {
- NVIC_InitTypeDef NVIC_InitStructure;
- TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
-
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
-
- TIM_TimeBaseStructure.TIM_Prescaler = 48 - 1; // (48MHz)/48 = 1MHz
- TIM_TimeBaseStructure.TIM_Period = 10000 - 1; // Interrupt per 10mS
- TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
- TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
- TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
- TIM_ARRPreloadConfig(TIM2, ENABLE);
- TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);
- TIM_Cmd(TIM2, ENABLE);
-
- NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
- NVIC_Init(&NVIC_InitStructure);
-}
-/*******************************************************************************
-Function:
-Description: Init Timer3 to fire every 50us to be used to control the irons software PWM
- *******************************************************************************/
+/*
+ * Init Timer3 to fire every 50us to be used to control the irons software PWM
+ * This needs to be really fast as there is a cap used between this and the driver circuitry
+ * That prevents a stuck mcu heating the tip
+ */
void Init_Timer3(void) {
NVIC_InitTypeDef NVIC_InitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
- TIM_TimeBaseStructure.TIM_Prescaler = 48 - 1; //(48MHz)/48 = 1MHz
- TIM_TimeBaseStructure.TIM_Period = 50 - 1; // Interrupt per 50us
+ TIM_TimeBaseStructure.TIM_Prescaler = 48 - 1; //(48MHz)/48 = 1MHz
+ TIM_TimeBaseStructure.TIM_Period = 50 - 1; // Interrupt per 50us
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV2;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
@@ -325,50 +199,74 @@ void Init_Timer3(void) {
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
-/*******************************************************************************
- Function:TIM2_ISR
- Description:Handles Timer 2 tick. (10mS)
- Automatically decrements all >0 values in gTime.
- Also reads the buttons every 4 ticks
- *******************************************************************************/
-void TIM2_ISR(void) {
- static u8 buttonReadDivider;
-
- TIM_ClearITPendingBit(TIM2, TIM_IT_Update); // Clear interrupt flag
- for (u8 i = 0; i < 8; i++)
- if (gTime[i] > 0)
- gTime[i]--;
-
- if (++buttonReadDivider % 4 == 0)
- Scan_Key();
+//We want to enable the EXTI IRQ for the two buttons on PA6 and PA9
+void Init_EXTI(void) {
+ EXTI_InitTypeDef EXTI_InitStructure;
+ NVIC_InitTypeDef NVIC_InitStructure;
+
+ GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,
+ GPIO_PinSource6 | GPIO_PinSource9);
+
+ GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,
+ GPIO_PinSource5); //PB5 == accelerometer
+
+ /* Configure EXTI5/6/9 line */
+ EXTI_InitStructure.EXTI_Line = EXTI_Line5 | EXTI_Line6 | EXTI_Line9;
+ EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
+ EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising_Falling; //trigger on up and down
+ EXTI_InitStructure.EXTI_LineCmd = ENABLE;
+ EXTI_Init(&EXTI_InitStructure);
+
+ /* Enable and set EXTI9_5 Interrupt to the lowest priority */
+ NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn;
+ NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0F;
+ NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0F;
+ NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
+ NVIC_Init(&NVIC_InitStructure);
+
+}
+//Start the system watchdog with a timeout specified
+//Note you cannot turn this off once you turn it on
+void Start_Watchdog(uint32_t ms) {
+ IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);
+
+ /* IWDG counter clock: 40KHz(LSI) / 32 = 1.25 KHz (min:0.8ms -- max:3276.8ms */
+ IWDG_SetPrescaler(IWDG_Prescaler_32);
+
+ /* Set counter reload value to XXms */
+ IWDG_SetReload(ms * 10 / 8);
+
+ /* Reload IWDG counter */
+ IWDG_ReloadCounter();
+
+ /* Enable IWDG (the LSI oscillator will be enabled by hardware) */
+ IWDG_Enable();
}
-/*******************************************************************************
- Function: TIM3_ISR
- Description:Sets the output pin as appropriate
- If the Heat_cnt >0 then heater on, otherwise off.
- *******************************************************************************/
+
+//Reset the system watchdog
+void Clear_Watchdog(void) {
+ IWDG_ReloadCounter();
+}
+
+//TIM3_ISR handles the tick of the timer 3 IRQ
void TIM3_ISR(void) {
volatile static u8 heat_flag = 0;
+ //heat flag == used to make the pin toggle
+ //As the output is passed through a cap, the iron is on whilever we provide a square wave drive output
- TIM_ClearITPendingBit(TIM3, TIM_IT_Update); // Clear interrupt flag
-
- if (gTimeOut > 0)
- gTimeOut--;
- if (gMs_timeout > 0)
- gMs_timeout--;
+ TIM_ClearITPendingBit(TIM3, TIM_IT_Update);
+ // Clear interrupt flag
if (gHeat_cnt > 0) {
- gHeat_cnt--;
+ --gHeat_cnt;
if (heat_flag)
- HEAT_OFF();
+ HEAT_OFF(); //write the pin off
else
- HEAT_ON();
-
- heat_flag = ~heat_flag;
- }
- if (gHeat_cnt == 0) {
- HEAT_OFF();
+ HEAT_ON(); //write the pin on
+ heat_flag = !heat_flag;
+ } else {
+ HEAT_OFF(); //set the pin low for measurements
heat_flag = 0;
}
+
}
-/******************************** END OF FILE *********************************/
diff --git a/workspace/ts100/src/CTRL.c b/workspace/ts100/src/CTRL.c
deleted file mode 100644
index 9714b789..00000000
--- a/workspace/ts100/src/CTRL.c
+++ /dev/null
@@ -1,450 +0,0 @@
-/********************* (C) COPYRIGHT 2015 e-Design Co.,Ltd. **********************
- File Name : CTRL.c
- Version : S100 APP Ver 2.11
- Description:
- Author : Celery
- Data: 2015/08/03
- History:
- 2015/07/07 ͳһ������
- 2015/08/03 �Ż��ƶ��ж�
- *******************************************************************************/
-#include <stdio.h>
-#include <string.h>
-#include "CTRL.h"
-#include "Bios.h"
-#include "UI.h"
-#include "Hardware.h"
-#include "S100V0_1.h"
-#include "Disk.h"
-#include "MMA8652FC.h"
-
-#define HEATINGCYCLE 30
-/******************************************************************************/
-DEVICE_INFO_SYS device_info;
-/******************************************************************************/
-
-u8 gCtrl_status = 1;
-//^ System current status / operating mode.
-u16 gHt_flag = 0;
-vs16 gTemp_data = 250; //
-s16 gPrev_temp = 250; //
-u8 gIs_restartkey = 0; //
-u8 gPre_status = 1; //
-
-const DEVICE_INFO_SYS info_def = { "2.13", //Ver
- 2000, //T_Standby; // 200C=1800 2520
- 3000, // T_Work; // 350C=3362,
- 100, //T_Step;
- 3 * 60 * 100, //Wait_Time; //3*60*100 3 minutes
- 6 * 60 * 100 // Idle_Time; //6*60*100 6 minutes
-};
-struct _pid {
- s16 settemp; //Current ideal setpoint for the temp
- s16 actualtemp; //Actual current temp of the tip
- s16 err; //Error term
- s16 err_last; //last error term
- s32 ht_time; //
- u16 kp, ki, kd; //Constants for the PID Controller
- s32 integral; //
-} pid;
-
-/*******************************************************************************
- Function: Get_Ctrl_Status
- Description: Returns the current operating Mode
- Input:Void
- Output:Current System Status
- *******************************************************************************/
-u8 Get_CtrlStatus(void) {
- return gCtrl_status;
-}
-/*******************************************************************************
- Function: Set_CtrlStatus
- Description: Set the current operating Mode
- Input:status uint8_t
- Output:Void
- *******************************************************************************/
-void Set_CtrlStatus(u8 status) {
- gCtrl_status = status;
-}
-/*******************************************************************************
- Function: Set_PrevTemp
- Description:Set the previous temp record for the PID
- Input:Previous Temp (int16_t)
- Output:Void
- *******************************************************************************/
-void Set_PrevTemp(s16 temp) {
- gPrev_temp = temp;
-}
-
-/*******************************************************************************
- Function: Get_HtFlag
- Description:
- Input:Void
- Output:Void
-
- *******************************************************************************/
-u16 Get_HtFlag(void) {
- return gHt_flag;
-}
-/*******************************************************************************
- Function:Get_TempVal
- Description:
- Input:Void
- Output:Void
- *******************************************************************************/
-s16 Get_TempVal(void) {
- return gTemp_data;
-}
-
-/*******************************************************************************
- Function:System_Init
- Description:Init the device info to be a known start value (as defined at top of CTRL.c)
- Input:Void
- Output:Void
- *******************************************************************************/
-void System_Init(void) {
- memcpy((void*) &device_info, (void*) &info_def, sizeof(device_info));
-}
-/*******************************************************************************
- Function:Pid_Init
- Description:Inits the PID values to defaults (0 usually)
- Input:Void
- Output:Void
- *******************************************************************************/
-void Pid_Init(void) {
- pid.settemp = 0;
- pid.actualtemp = 0;
- pid.err = 0;
- pid.err_last = 0;
- pid.integral = 0;
- pid.ht_time = 0;
- pid.kp = 15;
- pid.ki = 2;
- pid.kd = 1;
-}
-
-/*******************************************************************************
- Function:Pid_Realize
- Description: Calculates the next heating value using the PID algorithum
- Input:Current temp from the tip
- Output:
- *******************************************************************************/
-u16 Pid_Realize(s16 temp) {
- u8 index = 0, index1 = 1;
- s16 d_err = 0;
-
- pid.actualtemp = temp;
- pid.err = pid.settemp - pid.actualtemp; //
-
- if (pid.err >= 500)
- index = 0;
- else {
- index = 1;
- pid.integral += pid.err; //
- }
-////////////////////////////////////////////////////////////////////////////////
-//
- if (pid.settemp < pid.actualtemp) {
- d_err = pid.actualtemp - pid.settemp;
- if (d_err > 20) {
- pid.integral = 0; //
- index1 = 0;
- index = 0;
- }
- }
-////////////////////////////////////////////////////////////////////////////////
- if (pid.err <= 30)
- index1 = 0;
- else
- index1 = 1;
- pid.ht_time = pid.kp * pid.err + pid.ki * index * pid.integral
- + pid.kd * (pid.err - pid.err_last) * index1;
- pid.err_last = pid.err;
-
- if (pid.ht_time <= 0)
- pid.ht_time = 0;
- else if (pid.ht_time > 30 * 200)
- pid.ht_time = 30 * 200;
-
- return pid.ht_time;
-
-}
-
-/*******************************************************************************
- Function:Heating_Time
- Description:Calcuates the on time for the heating element
- Input: (temp) current Tip Temp, (wk_temp) current ideal setpoint temp
- Output: The ON time for the heater element
- *******************************************************************************/
-u32 Heating_Time(s16 temp, s16 wk_temp) {
- u32 heat_timecnt;
-
- pid.settemp = wk_temp;
- if (wk_temp > temp) {
- if (wk_temp - temp >= 18)
- gHt_flag = 0; //����
- else
- gHt_flag = 2; //����
- } else {
- if (temp - wk_temp <= 18)
- gHt_flag = 2; //����
- else
- gHt_flag = 1; //����
- }
-
- heat_timecnt = Pid_Realize(temp); //Sub_data * 1000;
-
- return heat_timecnt;
-}
-/*******************************************************************************
- Function:Status_Tran
- Description: Handles the current status of the unit, and task selection
- Basically this is called in main() repeatedly
- Input:Void
- Output:Void
- *******************************************************************************/
-void Status_Tran(void) //
-{
- static u16 init_waitingtime = 0; //��ʼ����ʱ���־λ: 0=> δ��ʼ��,1=>�ѳ�ʼ��
- static u8 back_prestatus = 0;
- s16 heat_timecnt = 0, wk_temp;
- u16 mma_active;
-
- switch (Get_CtrlStatus()) {
- case IDLE:
- switch (Get_gKey()) { //Read current switch positions
- case KEY_V1: //If V1 key is pressed
- if (gIs_restartkey != 1) { //check we are not in a soft restart situation
- if (Read_Vb(1) < 4) { //Read that the input voltage is acceptable??
- Set_CtrlStatus(TEMP_CTR); //Set to temperature controlled mode (Aka soldering mode)
- init_waitingtime = 0; //Initialize the wait count to 0
- TEMPSHOW_TIMER= 0; //Initialize the timer to 0
- UI_TIMER= 0;
- G6_TIMER= 0;
- }
- }
- break;
- case KEY_V2: //check if V2 key is pressed
- if(gIs_restartkey != 1) { //check this is not a soft restart situation
- Set_CtrlStatus(THERMOMETER);//Change system to Thermometer mode instead (ie reading temp only, no drive)
- UI_TIMER = 0;
- Set_LongKeyFlag(1);//Set the long key pressed flag??
- }
- break;
- case KEY_CN|KEY_V3: //If A&B pressed at the same time, no action
- break;
- }
- if(gIs_restartkey && (KD_TIMER == 0)) { //This is a soft restart situation instead
- gIs_restartkey = 0;//reset the flag for soft restart
- Set_gKey(NO_KEY);//reset keys pressed
- }
- if(Read_Vb(1) == 0) { //Invalid voltage, I think this means no input power detected
- if(Get_UpdataFlag() == 1) Set_UpdataFlag(0);
- Set_CtrlStatus(ALARM);
- }
- if(gPre_status != WAIT && gPre_status != IDLE) { //System has been left alone, turn off screen to stop burn in
- G6_TIMER = device_info.idle_time;
- Set_gKey(NO_KEY);
- gPre_status = IDLE;
- }
- break;
- case TEMP_CTR: //We are in soldering mode
- switch(Get_gKey()) { //switch on the pressed key
- case KEY_CN|KEY_V1:
- case KEY_CN|KEY_V2://if either key long pressed
- Set_HeatingTime(0);//turn off heater
- Set_CtrlStatus(TEMP_SET);//Goto temperature set mode
- HEATING_TIMER = 0;//reset heating timer
- EFFECTIVE_KEY_TIMER = 500;
- break;
- case KEY_CN|KEY_V3://Both keys pressed
- Set_HeatingTime(0);//Stop the heater
- Set_LongKeyFlag(0);//Reset the long key press flag
- Set_CtrlStatus(IDLE);//Change the system back to IDLE state (stop soldering)
- gPre_status = TEMP_CTR;//Set previous status
- gIs_restartkey = 1;
- KD_TIMER = 50;//
- break;
- }
-
- if(Read_Vb(1) >= 4) { //Check input voltage is in the acceptable range
- Set_HeatingTime(0);//Turn of heater as we are out of range
- Set_LongKeyFlag(0);//reset key flag
- Set_CtrlStatus(IDLE);//reset to IDLE state
- gPre_status = TEMP_CTR;//set previous state
- gIs_restartkey = 1;
- KD_TIMER = 50;//
- }
-
- wk_temp = device_info.t_work; //update setpoint temp from the struct
- if(HEATING_TIMER == 0) {
- gTemp_data = Get_Temp(wk_temp);
- heat_timecnt = Heating_Time(gTemp_data,wk_temp); //Calculate the on time for the heating cycle
- Set_HeatingTime(heat_timecnt);//set the on time for the heating cycle
- HEATING_TIMER = HEATINGCYCLE;
- }
-
- if(Get_HeatingTime() == 0) { //If calcuated heater time is 0 stop the timer ?
- HEATING_TIMER = 0;
- }
-
- /*
- * The logic here is :
- * If the device is moving then disarm the timer and mark it as needed a re-init
- * else check if the timer needs init, if it does set it up and exit
- * if the timer does not need init, then check if the timer has expired (its a count down)
- * If the timer has expired goto wait state instead and shutdown iron
- */
- mma_active = Get_MmaShift(); //check the accelerometer for movement
- if(mma_active == 0) { //MMA_active = 0 ==> static ,MMA_active = 1 ==>move
- if(init_waitingtime == 0) { //If the waiting countdown timer is not initialized
- init_waitingtime = 1;//we initialize it and set this <- flag.
- ENTER_WAIT_TIMER = device_info.wait_time;
- }
- if((init_waitingtime != 0) && (ENTER_WAIT_TIMER == 0)) { //if timeout has been initalized and enter_wait_timer has reached 0
- gHt_flag = 0;//reset heating flags
- UI_TIMER = 0;//reset ui timers
- Set_HeatingTime(0);//turn off the soldering iron
- Set_gKey(0);//clear keys
- G6_TIMER = device_info.idle_time;//set the device to idle timer move
- Set_CtrlStatus(WAIT);//Set system mode to waiting for movement
- }
- } else { //The iron is moving
- init_waitingtime = 0;//mark the waiting timer for needing reset if movement stops again
- }
-
- if(Get_AlarmType() > NORMAL_TEMP) { //
- if(Get_UpdataFlag() == 1) Set_UpdataFlag(0);
- Set_CtrlStatus(ALARM);//Change to alarm state
- }
- break;
-
- case WAIT:
- //This mode (WAIT) occures when the iron has been idling on a desk for too long (ie someone forgot it was left on)
- //In this state we drop to a lower, safer temp and wait for movement or button push to wake up to operating temp again
- wk_temp = device_info.t_standby;
- if(device_info.t_standby > device_info.t_work) {
- //Check if the set temp was greater than the idle temp, if it was we set the idle temp to the set temp
- //This is done to avoid standby going to a higher temp
- wk_temp = device_info.t_work;
- }
- //if the heating timer has expired, update the readings
- if(HEATING_TIMER == 0) {
- gTemp_data = Get_Temp(wk_temp); //read the tip temp
- heat_timecnt = Heating_Time(gTemp_data,wk_temp);//calculate the new heating timer value from temps
- Set_HeatingTime(heat_timecnt);//apply the new heating timer
- HEATING_TIMER = 30;//set update rate for heating_timer
- }
-
- if(Read_Vb(1) >= 4) { //If the input voltage is not valid
- Set_HeatingTime(0);//turn off heater
- Set_LongKeyFlag(0);//reset key press flag
- Set_CtrlStatus(IDLE);//goto IDLE state
- G6_TIMER = device_info.idle_time;
- gPre_status = WAIT;//set previous state
- gIs_restartkey = 1;
- KD_TIMER = 50;//
- }
-
- if(G6_TIMER == 0) { //
- Set_HeatingTime(0);
- Set_LongKeyFlag(0);
- gIs_restartkey = 1;
- KD_TIMER = 200;//
- gPre_status = WAIT;
- Set_CtrlStatus(IDLE);
- }
-
- //If movement has occurred OR a key has been pressed -> Wakeup back to soldering
- mma_active = Get_MmaShift();//read accelerometer
- if(mma_active == 1 || Get_gKey() != 0) {
- UI_TIMER = 0; //reset the un-needed timers
- G6_TIMER = 0;
- init_waitingtime = 0;
- Set_CtrlStatus(TEMP_CTR);//Go back to soldering iron mode
- }
-
- if(Get_AlarmType() > NORMAL_TEMP) { //If an alarm has occurred??
- if(Get_UpdataFlag() == 1) Set_UpdataFlag(0);
- Set_CtrlStatus(ALARM);//goto alarm error state
- }
- break;
-
- case TEMP_SET: //We are in the setting soldering iron temp mode
- if(EFFECTIVE_KEY_TIMER == 0) {
- gCalib_flag = 1;
- Disk_BuffInit();
- Config_Analysis(); //
- gCalib_flag = 0;
- Set_CtrlStatus(TEMP_CTR);//return to soldering mode
- TEMPSHOW_TIMER = 0;//turn off the timer
- }
- break;
-
- case THERMOMETER: //we are measuring the tip temp without applying any power
- if(KD_TIMER > 0) {
- Set_gKey(NO_KEY);
- break;
- }
-
- switch(Get_gKey()) {
- case KEY_CN|KEY_V1:
- case KEY_CN|KEY_V2:
- back_prestatus = 1;
- break;
- case KEY_CN|KEY_V3:
- Zero_Calibration(); //Calibrate the temperature (i think??)
- if(Get_CalFlag() == 1) {
- Disk_BuffInit();
- Config_Analysis(); // ��������U��
- }
- KD_TIMER = 200; //20150717 �޸�
- break;
- default:
- break;
- }
- if(back_prestatus == 1) { //we are exiting
- back_prestatus = 0;//clear flag
- Set_HeatingTime(0);//turn off heater? (not sure why this is done again)
- Set_CtrlStatus(IDLE);//Goto IDLE state
- gPre_status = THERMOMETER;//set previous state
- gIs_restartkey = 1;//signal soft restart required as we may have done a calibration
- Set_LongKeyFlag(0);//reset long key hold flag
- KD_TIMER = 50;//
- }
- break;
- case ALARM: //An error has occured so we are in alarm state
- switch(Get_AlarmType()) {
- case HIGH_TEMP: //over temp condition
- case SEN_ERR://sensor reading error
- wk_temp = device_info.t_work;
- gTemp_data = Get_Temp(wk_temp);
- if(Get_AlarmType() == NORMAL_TEMP) {
- Set_CtrlStatus(TEMP_CTR);
- Set_UpdataFlag(0);
- }
- break;
- case HIGH_VOLTAGE: //over voltage
- case LOW_VOLTAGE://under voltage
- if(Read_Vb(1) >= 1 && Read_Vb(1) <= 3) {
- Set_HeatingTime(0); //turn off heater
- Set_LongKeyFlag(0);//reset key flag
- gIs_restartkey = 1;
- UI_TIMER = 2;// 2��
- gPre_status = THERMOMETER;
- Set_CtrlStatus(IDLE);
- }
- break;
- }
-//V-- No idea what this does yet.. At all.. since it will always be skipped..
- if(Get_HeatingTime != 0) {
- Set_HeatingTime(0); //����ֹͣ����
- HEAT_OFF();
- }
- break;
- default:
- break;
- }
-}
-
-/******************************** END OF FILE *********************************/
diff --git a/workspace/ts100/src/Disk.c b/workspace/ts100/src/Disk.c
deleted file mode 100644
index 7154226f..00000000
--- a/workspace/ts100/src/Disk.c
+++ /dev/null
@@ -1,773 +0,0 @@
-/********************* (C) COPYRIGHT 2015 e-Design Co.,Ltd. **********************
- File Name : Disk.c
- Version : S100 APP Ver 2.11
- Description:
- Author : Celery
- Data: 2015/07/07
- History:
- 2016/09/13 Ben V. Brown English notation/comments
- 2015/07/07
- *******************************************************************************/
-#include <string.h>
-#include <stdio.h>
-#include "APP_Version.h"
-#include "Disk.h"
-#include "Bios.h"
-#include "Flash.h"
-#include "Oled.h"
-#include "UI.h"
-#include "CTRL.h"
-#include "Hardware.h"
-
-#define Delay_mS Delay_Ms
-void Disk_SecWrite(u8* pBuffer, u32 DiskAddr);
-void Disk_SecRead(u8* pBuffer, u32 DiskAddr);
-void Soft_Delay(void);
-//Hard coded boot sector for the virtual device
-const uint8_t BOOT_SEC[512] = { 0xEB, 0x3C, 0x90, 0x4D, 0x53, 0x44, 0x4F, 0x53,
- 0x35, 0x2E, 0x30, 0x00, 0x02, 0x01, 0x08, 0x00, 0x02, 0x00, 0x02, 0x50,
- 0x00, 0xF8, 0x0c, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x29, 0xA2, 0x98, 0xE4, 0x6C, 0x4E,
- 0x4F, 0x20, 0x4E, 0x41, 0x4D, 0x45, 0x20, 0x20, 0x20, 0x20, 0x46, 0x41,
- 0x54, 0x31, 0x32, 0x20, 0x20, 0x20, 0x33, 0xC9, 0x8E, 0xD1, 0xBC, 0xF0,
- 0x7B, 0x8E, 0xD9, 0xB8, 0x00, 0x20, 0x8E, 0xC0, 0xFC, 0xBD, 0x00, 0x7C,
- 0x38, 0x4E, 0x24, 0x7D, 0x24, 0x8B, 0xC1, 0x99, 0xE8, 0x3C, 0x01, 0x72,
- 0x1C, 0x83, 0xEB, 0x3A, 0x66, 0xA1, 0x1C, 0x7C, 0x26, 0x66, 0x3B, 0x07,
- 0x26, 0x8A, 0x57, 0xFC, 0x75, 0x06, 0x80, 0xCA, 0x02, 0x88, 0x56, 0x02,
- 0x80, 0xC3, 0x10, 0x73, 0xEB, 0x33, 0xC9, 0x8A, 0x46, 0x10, 0x98, 0xF7,
- 0x66, 0x16, 0x03, 0x46, 0x1C, 0x13, 0x56, 0x1E, 0x03, 0x46, 0x0E, 0x13,
- 0xD1, 0x8B, 0x76, 0x11, 0x60, 0x89, 0x46, 0xFC, 0x89, 0x56, 0xFE, 0xB8,
- 0x20, 0x00, 0xF7, 0xE6, 0x8B, 0x5E, 0x0B, 0x03, 0xC3, 0x48, 0xF7, 0xF3,
- 0x01, 0x46, 0xFC, 0x11, 0x4E, 0xFE, 0x61, 0xBF, 0x00, 0x00, 0xE8, 0xE6,
- 0x00, 0x72, 0x39, 0x26, 0x38, 0x2D, 0x74, 0x17, 0x60, 0xB1, 0x0B, 0xBE,
- 0xA1, 0x7D, 0xF3, 0xA6, 0x61, 0x74, 0x32, 0x4E, 0x74, 0x09, 0x83, 0xC7,
- 0x20, 0x3B, 0xFB, 0x72, 0xE6, 0xEB, 0xDC, 0xA0, 0xFB, 0x7D, 0xB4, 0x7D,
- 0x8B, 0xF0, 0xAC, 0x98, 0x40, 0x74, 0x0C, 0x48, 0x74, 0x13, 0xB4, 0x0E,
- 0xBB, 0x07, 0x00, 0xCD, 0x10, 0xEB, 0xEF, 0xA0, 0xFD, 0x7D, 0xEB, 0xE6,
- 0xA0, 0xFC, 0x7D, 0xEB, 0xE1, 0xCD, 0x16, 0xCD, 0x19, 0x26, 0x8B, 0x55,
- 0x1A, 0x52, 0xB0, 0x01, 0xBB, 0x00, 0x00, 0xE8, 0x3B, 0x00, 0x72, 0xE8,
- 0x5B, 0x8A, 0x56, 0x24, 0xBE, 0x0B, 0x7C, 0x8B, 0xFC, 0xC7, 0x46, 0xF0,
- 0x3D, 0x7D, 0xC7, 0x46, 0xF4, 0x29, 0x7D, 0x8C, 0xD9, 0x89, 0x4E, 0xF2,
- 0x89, 0x4E, 0xF6, 0xC6, 0x06, 0x96, 0x7D, 0xCB, 0xEA, 0x03, 0x00, 0x00,
- 0x20, 0x0F, 0xB6, 0xC8, 0x66, 0x8B, 0x46, 0xF8, 0x66, 0x03, 0x46, 0x1C,
- 0x66, 0x8B, 0xD0, 0x66, 0xC1, 0xEA, 0x10, 0xEB, 0x5E, 0x0F, 0xB6, 0xC8,
- 0x4A, 0x4A, 0x8A, 0x46, 0x0D, 0x32, 0xE4, 0xF7, 0xE2, 0x03, 0x46, 0xFC,
- 0x13, 0x56, 0xFE, 0xEB, 0x4A, 0x52, 0x50, 0x06, 0x53, 0x6A, 0x01, 0x6A,
- 0x10, 0x91, 0x8B, 0x46, 0x18, 0x96, 0x92, 0x33, 0xD2, 0xF7, 0xF6, 0x91,
- 0xF7, 0xF6, 0x42, 0x87, 0xCA, 0xF7, 0x76, 0x1A, 0x8A, 0xF2, 0x8A, 0xE8,
- 0xC0, 0xCC, 0x02, 0x0A, 0xCC, 0xB8, 0x01, 0x02, 0x80, 0x7E, 0x02, 0x0E,
- 0x75, 0x04, 0xB4, 0x42, 0x8B, 0xF4, 0x8A, 0x56, 0x24, 0xCD, 0x13, 0x61,
- 0x61, 0x72, 0x0B, 0x40, 0x75, 0x01, 0x42, 0x03, 0x5E, 0x0B, 0x49, 0x75,
- 0x06, 0xF8, 0xC3, 0x41, 0xBB, 0x00, 0x00, 0x60, 0x66, 0x6A, 0x00, 0xEB,
- 0xB0, 0x4E, 0x54, 0x4C, 0x44, 0x52, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- 0x0D, 0x0A, 0x52, 0x65, 0x6D, 0x6F, 0x76, 0x65, 0x20, 0x64, 0x69, 0x73,
- 0x6B, 0x73, 0x20, 0x6F, 0x72, 0x20, 0x6F, 0x74, 0x68, 0x65, 0x72, 0x20,
- 0x6D, 0x65, 0x64, 0x69, 0x61, 0x2E, 0xFF, 0x0D, 0x0A, 0x44, 0x69, 0x73,
- 0x6B, 0x20, 0x65, 0x72, 0x72, 0x6F, 0x72, 0xFF, 0x0D, 0x0A, 0x50, 0x72,
- 0x65, 0x73, 0x73, 0x20, 0x61, 0x6E, 0x79, 0x20, 0x6B, 0x65, 0x79, 0x20,
- 0x74, 0x6F, 0x20, 0x72, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x0D, 0x0A,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xAC, 0xCB, 0xD8, 0x55, 0xAA };
-
-static u8 gDisk_buff[0x2600]; //RAM Buffer used to implement the virtual disk
-static u32 gDisk_var[(512 + 32 + 28) / 4]; //
-static u32 *gV32 = (u32*) &gDisk_var[512 / 4];
-static u8 *gVar = (u8*) &gDisk_var[512 / 4 + 8];
-
-static u8 *gBuff = (u8*) &gDisk_var[0];
-const u8 gFat_data[] = { 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }; //{0xF8,0XFF,0XFF,0xff,0X0f};//
-//The options
-const char *gKey_words[] = { "T_Standby", "T_Work", "Wait_Time", "Idle_Time",
- "T_Step", "Turn_Off_v", "TempShowFlag", "ZeroP_Ad" };
-//default settings
-const char *gDef_set[] = { "T_Standby=200", "T_Work=300", "Wait_Time=180",
- "Idle_Time=360", "T_Step=10", "Turn_Off_v=10", "TempShowFlag=0",
- "ZeroP_Ad=239" };
-//comments for accepted range
-const char *gSet_range[] = { " #(100~400)\r\n", " #(100~400)\r\n",
- " #(60~9999)\r\n", " #(300~9999)\r\n", " #(5~25)\r\n",
- " #(9~12)\r\n", " #(0,1)\r\n", " #ReadOnly\r\n" };
-
-static u8 gFile_con[512]; //file contents buffer
-#define CONFIG_CONT 8 /*Number of variables in config.txt*/
-u8 gRewriteflag[16]; //This flags if this sector has changed and needs to be written to flash
-
-#define ROW_CONT 35
-#define FILE_CONT 254
-/*******************************************************************************
- Function: Soft_Delay()
- Description: Small software delay.
- *******************************************************************************/
-void Soft_Delay() {
- int i, j;
- for (i = 0; i < 1000; i++)
- for (j = 0; j < 100; j++)
- ;
-}
-/*******************************************************************************
- Function: Set_Ver
- Description:
- Input:
- *******************************************************************************/
-void Set_Ver(u8 str[], u8 k) {
- s16 set_ver = 0;
-
- switch (k) {
- case 0:
- set_ver = (str[0] - 48) * 100 + (str[1] - 48) * 10 + (str[2] - 48);
- device_info.t_standby = set_ver * 10;
- break;
- case 1:
- set_ver = (str[0] - 48) * 100 + (str[1] - 48) * 10 + (str[2] - 48);
- if (!gCalib_flag)
- device_info.t_work = set_ver * 10;
- break;
- case 2:
- if (str[3] <= '9' && str[3] >= '0') { //4
- set_ver = (str[0] - 48) * 1000 + (str[1] - 48) * 100
- + (str[2] - 48) * 10 + (str[3] - 48);
- } else if (str[2] <= '9' && str[2] >= '0') { //3
- set_ver = (str[0] - 48) * 100 + (str[1] - 48) * 10 + (str[2] - 48);
- } else if (str[1] <= '9' && str[1] >= '0') { //2
- set_ver = (str[0] - 48) * 10 + (str[1] - 48);
- }
- device_info.wait_time = set_ver * 100;
- break;
- case 3:
- if (str[3] <= '9' && str[3] >= '0') { //4
- set_ver = (str[0] - 48) * 1000 + (str[1] - 48) * 100
- + (str[2] - 48) * 10 + (str[3] - 48);
- } else if (str[2] <= '9' && str[2] >= '0') { //3
- set_ver = (str[0] - 48) * 100 + (str[1] - 48) * 10 + (str[2] - 48);
- }
- device_info.idle_time = set_ver * 100;
- break;
- case 4:
- if (str[1] <= '9' && str[1] >= '0') { //2
- set_ver = (str[0] - 48) * 10 + (str[1] - 48);
- } else {
- set_ver = str[0] - 48;
- }
- device_info.t_step = set_ver * 10;
- break;
- case 5:
- if (str[3] <= '9' && str[3] >= '0') { //4
- set_ver = (str[0] - 48) * 1000 + (str[1] - 48) * 100
- + (str[2] - 48) * 10 + (str[3] - 48);
- } else if (str[2] <= '9' && str[2] >= '0') { //3
- set_ver = (str[0] - 48) * 100 + (str[1] - 48) * 10 + (str[2] - 48);
- } else if (str[1] <= '9' && str[1] >= '0') { //2
- set_ver = (str[0] - 48) * 10 + (str[1] - 48);
- } else {
- set_ver = str[0] - 48;
- }
- gTurn_offv = set_ver * 10;
- break;
- case 6:
- set_ver = str[0] - 48;
- Set_TemperatureShowFlag(set_ver);
- break;
- case 7:
- if (str[2] <= '9' && str[2] >= '0') { //3
- set_ver = (str[0] - 48) * 100 + (str[1] - 48) * 10 + (str[2] - 48);
- } else if (str[1] <= '9' && str[1] >= '0') { //2
- set_ver = (str[0] - 48) * 10 + (str[1] - 48);
- } else {
- set_ver = str[0] - 48;
- }
- if (!gCalib_flag)
- gZerop_ad = set_ver;
-
- break;
- default:
- break;
- }
-}
-/*******************************************************************************
- Function: Cal_Val
- Description:
- Inputs:
- Output:
- *******************************************************************************/
-u8 Cal_Val(u8 str[], u8 k, u8 flag) {
- u16 set_ver;
-
- switch (k) {
- case 0:
- case 1:
- if (str[2] > '9' || str[2] < '0' || //
- str[1] > '9' || str[1] < '0' || //
- str[0] > '4' || str[0] <= '0' || //
- (str[0] == '4' && (str[1] != '0' || str[2] != '0')))
- return 0;
- break;
- case 2:
- if (str[3] <= '9' && str[3] >= '0') { //
- if ((str[2] > '9' && str[2] < '0')
- || (str[1] > '9' && str[1] < '0')) //
- return 0;
- } else if (str[2] <= '9' && str[2] >= '0') { //
- if (str[1] > '9' && str[1] < '0') //
- return 0;
- } else if (str[1] <= '9' && str[1] >= '0') { //
- if (str[0] > '9' || str[0] < '6') //
- return 0;
- } else {
- return 0;
- }
- break;
- case 3:
- if (str[3] <= '9' && str[3] >= '0') { //4
- if ((str[2] > '9' && str[2] < '0')
- || (str[1] > '9' && str[1] < '0')) //
- return 0;
- } else if (str[2] <= '9' && str[2] >= '0') { //3
- if (str[0] > '9' || str[0] < '3') //
- return 0;
- } else { //
- return 0;
- }
- break;
- case 4: //T_Step=10 #(5~25)
- if (str[1] <= '5' && str[1] >= '0') { //
- if (str[0] > '2' || str[0] < '0') //
- return 0;
- } else {
- if (str[0] < '5' && (str[0] != '1')) {
- return 0;
- }
- }
- break;
- case 5: //Turn_Off_v=10 #(9~12)
- if (str[1] <= '2' && str[1] >= '0') { //
- if (str[0] > '9' || str[0] < '0') //
- return 0;
- } else {
- if (str[0] < '9') {
- return 0;
- }
- }
- break;
- case 6: //TempShowFlag=0 #(0,1)
- if (str[0] != '1' && str[0] != '0')
- return 0;
- break;
- case 7:
- if (str[2] <= '9' && str[2] >= '0') { //3
- set_ver = (str[0] - 48) * 100 + (str[1] - 48) * 10 + (str[2] - 48);
- } else if (str[1] <= '9' && str[1] >= '0') { //2
- set_ver = (str[0] - 48) * 10 + (str[1] - 48);
- } else {
- set_ver = str[0] - 48;
- }
- if (flag == 1) {
- if (set_ver != gZerop_ad)
- return 0;
- }
- break;
- default:
- break;
- }
- return 1;
-}
-/*******************************************************************************
- Function:Disk_BuffInit
- Description: Initializes the buffer for the virtual disk. By loading from the chips flash
- *******************************************************************************/
-void Disk_BuffInit(void) {
- memcpy(gDisk_buff, (u8*) APP_BASE, 0x2600);
- memset(gRewriteflag, 0, 16);
-}
-/*******************************************************************************
- Function: Upper
- Description: Converts the string passed in to upper case
- Inputs: (str) buffer to change, (len) length of the buffer
- *******************************************************************************/
-void Upper(u8* str, u16 len) {
- u16 i;
- for (i = 0; i < len; i++) //Loop through the string
- if (str[i] >= 'a' && str[i] <= 'z') //if char is lower case
- str[i] -= 32; //shift to upper case
-}
-/*******************************************************************************
- Function: SearchFile
- Description:
- Inputs: (pfilename) filename to look for, (pfilelen) length of the file,(root_addr) root folder to search from
- Outputs: NULL (failed) or pointer to file start
- *******************************************************************************/
-u8* SearchFile(u8* pfilename, u16* pfilelen, u16* root_addr) {
- u16 n, sector;
- u8 str_name[11];
- u8* pdiraddr;
-
- pdiraddr = ROOT_SECTOR;
-
- for (n = 0; n < 16; n++) {
- memcpy(str_name, pdiraddr, 11);
- Upper(str_name, 11); //ensure path is upper case
- if (memcmp(str_name, pfilename, 11) == 0) {
- memcpy((u8*) pfilelen, pdiraddr + 0x1C, 2);
- memcpy((u8*) &sector, pdiraddr + 0x1A, 2);
- return (u8*) FILE_SECTOR + (sector - 2) * 512;
- }
-
- pdiraddr += 32;
- root_addr++;
- }
- return NULL;
-}
-
-/*******************************************************************************
- Function:Config_Analysis
- Description:Reads the CONFIG.TXT if file is found and also the LOGIN.BMP file as well
-
- *******************************************************************************/
-u8 Config_Analysis(void) {
- u32 i, j, k, m, flag;
- u16 file_len;
- u8 t_p[CONFIG_CONT][ROW_CONT];
- u8 str[FILE_CONT];
- u8 is_illegality = 0;
- u8* p_file;
- u16 root_addr;
-
- root_addr = 0;
- m = 0;
- j = 0;
- //read in the config.txt if it exists
- if ((p_file = SearchFile((u8*) ("CONFIG TXT"), &file_len, &root_addr))) {
- memset(t_p, 0x00, CONFIG_CONT * ROW_CONT);
- memcpy((u8*) gFile_con, p_file, 512);
- for (k = 0; k < CONFIG_CONT; k++) {
- j = 0;
- for (i = m; i < strlen((char *) gFile_con); i++) {
- if (gFile_con[i] == 0x0D && gFile_con[i + 1] == 0x0A)
- break;
- else {
- if (j < ROW_CONT)
- t_p[k][j++] = gFile_con[i];
- m++;
- }
- }
- t_p[k][j] = '\0';
- m = i + 2;
- }
- for (k = 0; k < CONFIG_CONT; k++) {
- if (memcmp(t_p[k], gKey_words[k], strlen(gKey_words[k])) == 0) {
- flag = 0;
- for (i = strlen(gKey_words[k]); i < strlen((char *) t_p[k]);
- i++) {
- if (t_p[k][i] >= '0' && t_p[k][i] <= '9') {
- if (t_p[k][i] == '0') {
- if (k == 6) {
- flag = 1;
- break;
- } else {
- flag = 0;
- break;
- }
- }
- flag = 1;
- break;
- } else if ((t_p[k][i] != 0x20) && (t_p[k][i] != 0x3d)) {
- flag = 0;
- break;
- }
- }
- if (flag && Cal_Val(t_p[k] + i, k, 0)) {
- Set_Ver(t_p[k] + i, k);
- if (k == 0)
- sprintf((char *) t_p[k], "T_Standby=%d",
- device_info.t_standby / 10);
- else if (k == 1)
- sprintf((char *) t_p[k], "T_Work=%d",
- device_info.t_work / 10);
- else if (k == 2)
- sprintf((char *) t_p[k], "Wait_Time=%ld",
- device_info.wait_time / 100);
- else if (k == 3)
- sprintf((char *) t_p[k], "Idle_Time=%ld",
- device_info.idle_time / 100);
- else if (k == 4)
- sprintf((char *) t_p[k], "T_Step=%d",
- device_info.t_step / 10);
- else if (k == 5)
- sprintf((char *) t_p[k], "Turn_Off_v=%ld",
- gTurn_offv / 10);
- else if (k == 6)
- sprintf((char *) t_p[k], "TempShowFlag=%d",
- Get_TemperatureShowFlag());
- else if (k == 7)
- sprintf((char *) t_p[k], "ZeroP_Ad=%ld", gZerop_ad);
- } else {
- memset(t_p[k], 0, strlen((char *) t_p[k]));
- memcpy(t_p[k], gDef_set[k], strlen((char *) gDef_set[k]));
- is_illegality = 1;
- }
- } else {
- memcpy(t_p[k], gDef_set[k], strlen((char *) gDef_set[k]));
- is_illegality = 1;
- }
- }
-
- if (is_illegality || gCalib_flag) {
- memset(str, 0x00, FILE_CONT);
- m = 0;
- for (k = 0; k < CONFIG_CONT; k++) {
- strcat((char *) str, (char *) t_p[k]);
- strcat((char *) str, (char *) gSet_range[k]);
- }
- m = strlen((char *) str);
-
- if (m < 256) {
- gDisk_buff[0x400 + root_addr * 32 + 0x1C] = m; //strlen((char *)str);
- gDisk_buff[0x400 + root_addr * 32 + 0x1D] = 0;
- } else {
- gDisk_buff[0x400 + root_addr * 32 + 0x1C] = m % 256;
- gDisk_buff[0x400 + root_addr * 32 + 0x1D] = m / 256;
- }
-
- gRewriteflag[(p_file - ROOT_SECTOR + 0x200) / 0x400] = 1;
- memcpy(p_file, str, strlen((char *) str));
- ReWriteFlsash();
- }
- } else {
- if ((p_file = SearchFile("LOGOIN BMP", &file_len, &root_addr))) {
- memcpy(str, p_file, 254);
- memset(gDisk_buff, 0x00, 0x2600);
- memcpy(ROOT_SECTOR + 32, "LOGOIN BMP", 0xC);
- memcpy(FILE_SECTOR + 512, str, 254);
- gDisk_buff[0x40B + 32] = 0x0; //����
- *(u32*) (VOLUME_BASE + 32) = VOLUME;
- gDisk_buff[0x41A + 32] = 0x03; //�غ�
- gDisk_buff[0x41C + 32] = 254; //�ļ���С
- } else {
- memset(gDisk_buff, 0x00, 0x2600);
- }
-
- memcpy(ROOT_SECTOR, "CONFIG TXT", 0xC);
- memcpy(FAT1_SECTOR, gFat_data, 6);
- memcpy(FAT2_SECTOR, gFat_data, 6);
-
- m = 0;
- for (k = 0; k < CONFIG_CONT; k++) {
- memcpy(FILE_SECTOR + m, gDef_set[k], strlen((char *) gDef_set[k]));
- m += strlen((char *) gDef_set[k]);
- memcpy(FILE_SECTOR + m, gSet_range[k],
- strlen((char *) gSet_range[k]));
- m += strlen((char *) gSet_range[k]);
- }
-
- gDisk_buff[0x40B] = 0x0;
- *(u32*) VOLUME_BASE = VOLUME;
- gDisk_buff[0x41A] = 0x02;
- gDisk_buff[0x41C] = m;
- ReWrite_All();
- }
-
- gVar[F_TYPE] = HEX;
- gVar[F_FLAG] = RDY;
- gVar[SEG_ST] = 0;
- gV32[OFFSET] = 0;
- gV32[COUNT] = 0;
- gV32[WR_CNT] = 0;
- gV32[RD_CNT] = 0;
- return 0;
-}
-/*******************************************************************************
- Function: Disk_SecWrite
- Description:
- Inputs:
- *******************************************************************************/
-void Disk_SecWrite(u8* pbuffer, u32 diskaddr) {
- u32 i, j, k, m, flag;
- u8 t_p[CONFIG_CONT][ROW_CONT];
- u8 str[FILE_CONT];
- u8 ver[20];
- static u16 Config_flag = 0;
-
- if (diskaddr == 0x1000) { // Write FAT1 sector
- if (memcmp(pbuffer, (u8*) FAT1_SECTOR, 512)) { //check different
- memcpy((u8*) FAT1_SECTOR, pbuffer, 512);
- gRewriteflag[0] = 1;
- }
- } else if (diskaddr == 0x2800) { // Write FAT2 sector
- if (memcmp(pbuffer, (u8*) FAT2_SECTOR, 512)) { //check different
- memcpy((u8*) FAT2_SECTOR, pbuffer, 512);
- gRewriteflag[0] = 1;
- }
- } else if (diskaddr == 0x4000) { // Write DIR sector
- if (memcmp(pbuffer, (u8*) ROOT_SECTOR, 512)) { //check different
- memcpy((u8*) ROOT_SECTOR, pbuffer, 512);
- gRewriteflag[1] = 1;
- for (i = 0; i < 16; i++) {
- memcpy((u8*) ver, (u8*) (pbuffer), 12); //copy the filename out for comparison
- if (memcmp(ver, "CONFIG TXT", 11) == 0) { //if file name matches
- Config_flag = pbuffer[0x1A];
- break;
- }
- pbuffer += 32; //move to the next chunk of the pbuffer
- }
- }
- } else if (diskaddr >= 0x8000 && diskaddr <= 0xA000) { // Write FILE sector
- if (memcmp(pbuffer, (u8*) (FILE_SECTOR + (diskaddr - 0x8000)), 512)) { //check if different
- memcpy((u8*) (FILE_SECTOR + (diskaddr - 0x8000)), pbuffer, 512);
- }
- if ((((diskaddr - 0x8000) / 0x200) + 2) == Config_flag) {
- m = 0;
- memset(t_p, 0x00, CONFIG_CONT * ROW_CONT);
- memcpy((u8*) (gFile_con), pbuffer, 512);
-
- for (k = 0; k < CONFIG_CONT; k++) { //
- j = 0;
- for (i = m; i < strlen((char *) gFile_con); i++) { //
- if (gFile_con[i] == 0x0D && gFile_con[i + 1] == 0x0A)
- break;
- else {
- if (j < ROW_CONT)
- t_p[k][j++] = gFile_con[i];
- m++;
- }
- }
- t_p[k][j] = '\0';
- m = i + 2;
- }
-
- for (k = 0; k < CONFIG_CONT; k++) {
- if (memcmp(t_p[k], gKey_words[k], strlen(gKey_words[k])) == 0) {
- flag = 0;
- for (i = strlen(gKey_words[k]); i < strlen((char *) t_p[k]);
- i++) {
- if (t_p[k][i] >= '0' && t_p[k][i] <= '9') {
- if (t_p[k][i] == '0') {
- if (k == 6) {
- flag = 1;
- break;
- } else {
- flag = 0;
- break;
- }
- }
- flag = 1;
- break;
- } else if ((t_p[k][i] != 0x20) && (t_p[k][i] != 0x3d)) {
- flag = 0;
- break;
- }
- }
- if ((!flag) || (!Cal_Val(t_p[k] + i, k, 1))) {
- return;
- } else {
- Set_Ver(t_p[k] + i, k);
-
- memset(t_p[k], 0, strlen((char *) t_p[k]));
- if (k == 0)
- sprintf((char *) t_p[k], "T_Standby=%d",
- device_info.t_standby / 10);
- else if (k == 1)
- sprintf((char *) t_p[k], "T_Work=%d",
- device_info.t_work / 10);
- else if (k == 2)
- sprintf((char *) t_p[k], "Wait_Time=%ld",
- device_info.wait_time / 100);
- else if (k == 3)
- sprintf((char *) t_p[k], "Idle_Time=%ld",
- device_info.idle_time / 100);
- else if (k == 4)
- sprintf((char *) t_p[k], "T_Step=%d",
- device_info.t_step / 10);
- else if (k == 5)
- sprintf((char *) t_p[k], "Turn_Off_v=%ld",
- gTurn_offv / 10);
- else if (k == 6)
- sprintf((char *) t_p[k], "TempShowFlag=%d",
- Get_TemperatureShowFlag());
- else if (k == 7)
- sprintf((char *) t_p[k], "ZeroP_Ad=%ld", gZerop_ad);
- }
- } else {
- memcpy(t_p[k], gDef_set[k], strlen((char *) gDef_set[k]));
- return;
- }
- }
-
- memset(str, 0, FILE_CONT);
- for (k = 0; k < CONFIG_CONT; k++) {
- strcat((char *) str, (char *) t_p[k]);
- strcat((char *) str, (char *) gSet_range[k]);
- }
- m = strlen((char *) str);
- gDisk_buff[0x400 + (Config_flag - 2) * 32 + 0x1C] = m % 256;
- gDisk_buff[0x400 + (Config_flag - 2) * 32 + 0x1D] = m / 256;
-
- memcpy((u8*) (FILE_SECTOR), (u8*) str, 512);
- gRewriteflag[1] = 1;
- gRewriteflag[((diskaddr - 0x8000 + 0x200) / 0x400) + 1] = 1;
- ReWriteFlsash();
- return;
-
- }
-
- gRewriteflag[1] = 1;
- gRewriteflag[((diskaddr - 0x8000 + 0x200) / 0x400) + 1] = 1;
- ReWriteFlsash();
- }
- ReWriteFlsash();
-}
-
-/*******************************************************************************
- Function: Disk_SecRead
- Description: Reads a sector from the virtual disk
- *******************************************************************************/
-void Disk_SecRead(u8* pbuffer, u32 disk_addr) {
- Soft_Delay();
- if (disk_addr == 0x0000) { // Read BOOT sector
- memcpy(pbuffer, BOOT_SEC, 512);
- } else if (disk_addr == 0x1000) { // Read FAT1 sector
- memcpy(pbuffer, FAT1_SECTOR, 512);
- } else if (disk_addr == 0x2800) { // Read FAT2 sector
- memcpy(pbuffer, FAT2_SECTOR, 512);
- } else if (disk_addr == 0x4000) { // Read DIR sector
- memcpy(pbuffer, (u8*) (ROOT_SECTOR), 512);
- } else if (disk_addr >= 0x8000 && disk_addr <= 0xA000) { // Read FILE sector
- memcpy(pbuffer, (u8*) (APP_BASE + 0x600 + (disk_addr - 0x8000)), 512);
- } else {
- memset(pbuffer, 0, 512); //unknown, return 0's
- }
-}
-/*******************************************************************************
- Function:ReWriteFlsash
- Description:
- Output:RDY(all good) or ERR (error)
- *******************************************************************************/
-u8 ReWriteFlsash(void) {
- u32 i, j;
- u8 result;
- u16 *f_buff;
-
- FLASH_Unlock();
- for (i = 0; i < 16; i++) {
- if (gRewriteflag[i]) {
- gRewriteflag[i] = 0;
- FLASH_Erase(APP_BASE + i * 0x400);
- f_buff = (u16*) &gDisk_buff[i * 0x400];
- for (j = 0; j < 0x400; j += 2) { //Loop through the 1k block
- result = FLASH_Prog((u32) (APP_BASE + i * 0x400 + j), //program each 16 bit block
- *f_buff++);
- if (result != FLASH_COMPLETE) { //something went wrong
- FLASH_Lock(); //make sure the flash is locked again
- return ERR; //return ERR
- }
- }
- break;
- }
- }
- FLASH_Lock();
- return RDY;
-}
-/*******************************************************************************
- Function: ReWrite_All
- Description:
- Output:
- *******************************************************************************/
-u8 ReWrite_All(void) {
- u16 i;
- u8 result;
- u16 *f_buff = (u16*) gDisk_buff;
-
- FLASH_Unlock();
- for (i = 0; i < 9; i++)
- FLASH_Erase(APP_BASE + i * 0x400);
- for (i = 0; i < 0X2600; i += 2) {
- result = FLASH_Prog((u32) (APP_BASE + i), *f_buff++);
- if (result != FLASH_COMPLETE)
- return ERR;
- }
- FLASH_Lock();
- return RDY;
-}
-/*******************************************************************************
- Function:Erase
- Description: Erase the first 9k from APP_BASE
- *******************************************************************************/
-void Erase(void) {
- u16 i;
- FLASH_Unlock(); //unlock the mcu flash controller
- for (i = 0; i < 9; i++)
- FLASH_Erase(APP_BASE + i * 0x400); //erase the flash
-
- FLASH_Lock();
-}
-/*******************************************************************************
- Function: Read_Memory
- Description:
- *******************************************************************************/
-void Read_Memory(u32 r_offset, u32 r_length) {
- static u32 offset, length, block_offset;
-
- if (gVar[USB_ST] == TXFR_IDLE) {
- offset = r_offset * SECTOR_SIZE;
- length = r_length * SECTOR_SIZE;
- gVar[USB_ST] = TXFR_ONGOING;
- }
- if (gVar[USB_ST] == TXFR_ONGOING) {
- if (!gV32[RD_CNT]) {
- Disk_SecRead(gBuff, offset);
- UserToPMABufferCopy(gBuff, ENDP1_TXADDR, BULK_MAX_PACKET_SIZE);
- gV32[RD_CNT] = SECTOR_SIZE - BULK_MAX_PACKET_SIZE;
- block_offset = BULK_MAX_PACKET_SIZE;
- } else {
- UserToPMABufferCopy(gBuff + block_offset, ENDP1_TXADDR,
- BULK_MAX_PACKET_SIZE);
- gV32[RD_CNT] -= BULK_MAX_PACKET_SIZE;
- block_offset += BULK_MAX_PACKET_SIZE;
- }
- SetEPTxCount(ENDP1, BULK_MAX_PACKET_SIZE);
- SetEPTxStatus(ENDP1, EP_TX_VALID);
- offset += BULK_MAX_PACKET_SIZE;
- length -= BULK_MAX_PACKET_SIZE;
-
- CSW.dDataResidue -= BULK_MAX_PACKET_SIZE;
- }
- if (length == 0) {
- gV32[RD_CNT] = 0;
- block_offset = 0;
- offset = 0;
- Bot_State = BOT_DATA_IN_LAST;
- gVar[USB_ST] = TXFR_IDLE;
- }
-}
-/*******************************************************************************
- Function: Write_Memory
- Description:
- *******************************************************************************/
-void Write_Memory(u32 w_offset, u32 w_length) {
- static u32 offset, length;
- u32 idx, temp = gV32[WR_CNT] + 64;
-
- if (gVar[USB_ST] == TXFR_IDLE) {
- offset = w_offset * SECTOR_SIZE;
- length = w_length * SECTOR_SIZE;
- gVar[USB_ST] = TXFR_ONGOING;
- }
- if (gVar[USB_ST] == TXFR_ONGOING) {
- for (idx = 0; gV32[WR_CNT] < temp; gV32[WR_CNT]++)
- *(u8 *) (gBuff + gV32[WR_CNT]) = Bulk_Buff[idx++];
-
- offset += Data_Len;
- length -= Data_Len;
-
- if (!(length % SECTOR_SIZE)) {
- gV32[WR_CNT] = 0;
- Disk_SecWrite(gBuff, offset - SECTOR_SIZE);
- }
-
- CSW.dDataResidue -= Data_Len;
- SetEPRxStatus(ENDP2, EP_RX_VALID); /* enable the next transaction*/
- }
- if ((length == 0) || (Bot_State == BOT_CSW_Send)) {
- gV32[WR_CNT] = 0;
- Set_CSW(CSW_CMD_PASSED, SEND_CSW_ENABLE);
- gVar[USB_ST] = TXFR_IDLE;
- }
-}
-/********************************* END OF FILE ******************************/
diff --git a/workspace/ts100/src/Ext_Flash.c b/workspace/ts100/src/Ext_Flash.c
deleted file mode 100644
index a0093dbc..00000000
--- a/workspace/ts100/src/Ext_Flash.c
+++ /dev/null
@@ -1,198 +0,0 @@
-/********************* (C) COPYRIGHT 2015 e-Design Co.,Ltd. ********************
-File Name : EXT_Flash.c
-Version : S100 APP Ver 2.11
-Description:
-Author : bure
-Data:
-History:
-*******************************************************************************/
-
-#include <string.h>
-#include <stdio.h>
-#include "Ext_Flash.h"
-#include "Bios.h"
-
-
-#define OK 0 // �������
-#define SEC_ERR 1 // ���������
-#define TMAX 100000 // ��ʱ����
-
-u32 Mass_Memory_Size;
-u32 Mass_Block_Size;
-u32 Mass_Block_Count;
-u32 Tout;
-
-
-u8 flash_mode;
-
-void ExtFLASH_SectorErase(u32 SectorAddr);
-
-/*******************************************************************************
- SPI_FLASH_SectorErase : Sector Erases the specified FLASH Page.(4k/sector)
-*******************************************************************************/
-void ExtFLASH_SectorErase(u32 SectorAddr)
-{
- ExtFlash_WriteEnable();
- ExtFlash_CS_LOW();
- ExtFlash_SendByte(SE);
- ExtFlash_SendByte((SectorAddr & 0xFF0000) >> 16); //Send high address byte
- ExtFlash_SendByte((SectorAddr & 0xFF00) >> 8); //Send medium address byte
- ExtFlash_SendByte(SectorAddr & 0xFF); //Send low address byte
- ExtFlash_CS_HIGH();
- ExtFlash_WaitForWriteEnd(); // Wait the end of Flash writing
-}
-
-
-void ExtFlash_PageWR(u8* pBuffer, u32 WriteAddr)
-{
- u32 addr,i,j;
- u8* ptr;
- u8 page=0,flag=0,write_mode;
- u8 buffer[256];
-
- flag=0;
- if(flash_mode==FLASH_8M) {
- addr=WriteAddr & 0xFFF000;
- page=16;
- } else {
- page=1;
- addr=WriteAddr & 0xFFFF00;
- }
- while(page>0) {
- ExtFlash_PageRD((u8*)&buffer,addr, 256);
- for(j=0; j<255; j++) {
- if(buffer[j++]!=0xff) {
- flag=1;
- break;
- }
- }
- addr+=256;
- page--;
- }
- if(flash_mode==FLASH_8M) {
- page=16;
- addr=WriteAddr & 0xFFF000;
- if(flag==1)ExtFLASH_SectorErase(addr);
- write_mode=PP;
- } else {
- page=1;
- addr=WriteAddr & 0xFFFF00;
- if(flag==1)write_mode=PW;
- else write_mode=PP;
- }
- ptr=pBuffer;
- for(i=0; i<page; i++) {
- ExtFlash_PageProg(ptr, addr,write_mode);
- addr+=256;
- ptr+=256;
- }
-}
-
-/*******************************************************************************
- дFLASHҳ(256 Bytes)�� Mode=0: ��0��1���ݸ�д Mode=1: ������д
-*******************************************************************************/
-void ExtFlash_PageProg(u8* pBuffer, u32 WriteAddr,u8 CMD)
-{
- u16 Lenght = 256;
-
- ExtFlash_CS_HIGH();
- ExtFlash_WaitForWriteEnd();
- ExtFlash_WriteEnable();
- ExtFlash_CS_LOW();
- ExtFlash_SendByte(CMD);
- ExtFlash_SendByte((WriteAddr & 0xFF0000) >> 16);
- ExtFlash_SendByte((WriteAddr & 0xFF00) >> 8);
- ExtFlash_SendByte(WriteAddr & 0xFF);
- while(Lenght--) { // while there is data to be written on the FLASH
- ExtFlash_SendByte((*pBuffer));
- pBuffer++;
- }
- ExtFlash_CS_HIGH();
- ExtFlash_WaitForWriteEnd();
-}
-
-/*******************************************************************************
- SPI_FLASH_BufferRead
-*******************************************************************************/
-void ExtFlash_PageRD(u8* pBuffer, u32 ReadAddr, u16 Lenght)
-{
- ExtFlash_CS_HIGH();
- ExtFlash_WaitForWriteEnd();
- ExtFlash_CS_LOW();
- ExtFlash_SendByte(READ);
- ExtFlash_SendByte((ReadAddr & 0xFF0000) >> 16);
- ExtFlash_SendByte((ReadAddr& 0xFF00) >> 8);
- ExtFlash_SendByte(ReadAddr & 0xFF);
-
- while(Lenght--) { // while there is data to be read
- *pBuffer = (ExtFlash_SendByte(Dummy_Byte));
- pBuffer++;
- }
- ExtFlash_CS_HIGH();
-}
-/*******************************************************************************
- SPI_FLASH_ReadByte
-*******************************************************************************/
-u8 ExtFlash_ReadByte(void)
-{
- return (ExtFlash_SendByte(Dummy_Byte));
-}
-
-/*******************************************************************************
- SPI_FLASH_SendByte
-*******************************************************************************/
-u8 ExtFlash_SendByte(u8 byte)
-{
- Tout = 0;
- while(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_TXE) == RESET) {
- if(Tout++ > TMAX) return 255;
- }
- SPI_I2S_SendData(SPI3, byte);
- Tout = 0;
- while(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_RXNE) == RESET) {
- if(Tout++ > TMAX) return 255;
- }
- return SPI_I2S_ReceiveData(SPI3);
-}
-/*******************************************************************************
- SPI_FLASH_WriteEnable
-*******************************************************************************/
-void ExtFlash_WriteEnable(void)
-{
- ExtFlash_CS_LOW();
- ExtFlash_SendByte(WREN);
- ExtFlash_CS_HIGH();
-}
-/*******************************************************************************
- SPI_FLASH_WaitForWriteEnd
-*******************************************************************************/
-void ExtFlash_WaitForWriteEnd(void)
-{
- u8 FLASH_Status = 0;
-
- ExtFlash_CS_LOW();
- ExtFlash_SendByte(RDSR);
- Tout = 0;
- do {
- FLASH_Status = ExtFlash_SendByte(Dummy_Byte);
- if(Tout++ > TMAX) return;
- } while((FLASH_Status & WIP_Flag) == SET); // Write in progress
- ExtFlash_CS_HIGH();
-}
-/*******************************************************************************
- MAL_GetStatus
-*******************************************************************************/
-void MAL_GetStatus (void)
-{
- if(flash_mode==FLASH_8M) {
- Mass_Block_Count = 2048; //FLASH_SIZE/FLASH_PAGE_SIZE;
- Mass_Block_Size = 512*8; //FLASH_PAGE_SIZE; 4096
- Mass_Memory_Size = 512*4096*4 ; //FLASH_SIZE; 0x800000;
- } else {
- Mass_Block_Count = 4096; //FLASH_SIZE/FLASH_PAGE_SIZE; 4096
- Mass_Block_Size = 512; //FLASH_PAGE_SIZE;
- Mass_Memory_Size = 512*4096 ; //FLASH_SIZE; 0x200000;
- }
-}
-
-/********************************* END OF FILE ******************************/
diff --git a/workspace/ts100/src/Flash.c b/workspace/ts100/src/Flash.c
deleted file mode 100644
index ee5b4f73..00000000
--- a/workspace/ts100/src/Flash.c
+++ /dev/null
@@ -1,33 +0,0 @@
-/********************* (C) COPYRIGHT 2015 e-Design Co.,Ltd. ********************
- File Name : Flash.c
- Version : Author : bure
- *******************************************************************************/
-#include "APP_Version.h"
-#include "Flash.h"
-#include "Bios.h"
-
-
-/*******************************************************************************
- Function: FLASH_Prog
- Description: Programs the data into the system flash at the specified address
- *******************************************************************************/
-u8 FLASH_Prog(u32 Address, u16 Data) {
- if (FLASH_WaitForLastOperation(WAIT_TIMES) != FLASH_TIMEOUT)
- FLASH_ClearFlag(
- FLASH_FLAG_EOP | FLASH_FLAG_PGERR | FLASH_FLAG_WRPRTERR);
- return FLASH_ProgramHalfWord(Address, Data);
-}
-/*******************************************************************************
- Function: FLASH_Erase
- Description: Erases a page of flash
- Inputs: Starting address for the page to erase
- *******************************************************************************/
-void FLASH_Erase(u32 Address) {
- if (Address % FLASH_PAGE == 0) { // FLASH Page start (1K/Page)
- if (FLASH_WaitForLastOperation(WAIT_TIMES) != FLASH_TIMEOUT) //wait for last op to finish
- FLASH_ClearFlag(
- FLASH_FLAG_EOP | FLASH_FLAG_PGERR | FLASH_FLAG_WRPRTERR);
- FLASH_ErasePage(Address); // FLASH Page erase
- }
-}
-/********************************* END OF FILE ******************************/
diff --git a/workspace/ts100/src/Hardware.c b/workspace/ts100/src/Hardware.c
deleted file mode 100644
index 0a0294df..00000000
--- a/workspace/ts100/src/Hardware.c
+++ /dev/null
@@ -1,384 +0,0 @@
-/********************* (C) COPYRIGHT 2015 e-Design Co.,Ltd. **********************
- File Name : CTRL.c
- Version : S100 APP Ver 2.11
- Description:
- Author : Celery
- Data: 2015/07/07
- History:
- 2015/07/07 ͳһ������
- 2015/07/20 �Ӵ��¶ȱ�������
- *******************************************************************************/
-#include <stdio.h>
-#include <string.h>
-#include "APP_Version.h"
-#include "Hardware.h"
-#include "CTRL.h"
-#include "Bios.h"
-#include "UI.h"
-/******************************************************************************/
-#define CAL_AD 250
-const u32 gVol[] = { 3900, 2760, 1720, 584 };
-const u16 gRate[] = { 300, 150, 90, 40 };
-s32 gZerop_ad = 239;
-u32 gTurn_offv = 100;
-u8 gCalib_flag = 0;
-vu16 gMeas_cnt = 0;/* Measure*/
-u32 gKey_in;
-u8 gLongkey_flag = 0;
-u8 gAlarm_type = 1;
-/*******************************************************************************
- ������: Get_CalFlag
- ��������:��ȡУ׼״̬
- �������:NULL
- ���ز���:У׼״̬��־
- *******************************************************************************/
-u32 Get_CalFlag(void) {
- return gCalib_flag;
-}
-
-/*******************************************************************************
- ������: Get_gKey
- ��������:��ȡ����״̬
- �������:NULL
- ���ز���:����״̬
- *******************************************************************************/
-u32 Get_gKey(void) {
- return gKey_in;
-}
-/*******************************************************************************
- ������: Set_gKey
- ��������:���ð���״̬
- �������:Ҫ���õİ���״̬
- ���ز���:NULL
- *******************************************************************************/
-void Set_gKey(u32 key) {
- gKey_in = key;
-}
-/*******************************************************************************
- ������: Set_LongKeyFlag
- ��������:���ó�������־
- �������:0 :�����Գ����� 1: ���Գ���
- ���ز���:NULL
- *******************************************************************************/
-void Set_LongKeyFlag(u32 flag) {
- gLongkey_flag = flag;
-}
-/*******************************************************************************
- ������: Get_AlarmType
- ��������:��ȡ��������
- �������:NULL
- ���ز���: ��������
- 0:����
- 1:sensor - err
- 2:����
- 3:��ѹ
- *******************************************************************************/
-u8 Get_AlarmType(void) {
- return gAlarm_type;
-}
-/*******************************************************************************
- ������: Set_AlarmType
- ��������:��������
- �������: ��������
- 0:����
- 1:sen - err
- 2:����
- 3:��ѹ
- ���ز���:NULL
- *******************************************************************************/
-void Set_AlarmType(u8 type) {
- gAlarm_type = type;
-}
-/*******************************************************************************
- Function: Read_Vb
- Description:Reads the input voltage and compares it to the thresholds??
- Input:Selects which threshold we are comparing to
- Output:Returns a key for if the voltage is in spec (I think)
- *******************************************************************************/
-int Read_Vb(u8 flag) {
- u32 tmp, i, sum = 0;
-
- for (i = 0; i < 10; i++) {
- tmp = ADC_GetConversionValue(ADC2);
- sum += tmp;
- }
- tmp = sum / 10;
- if (tmp >= (gVol[0] + gVol[0] / 100)) {
- gAlarm_type = HIGH_VOLTAGE;
- return H_ALARM; //����3500
- }
- tmp = (tmp * 10 / 144); //��ѹvb = 3.3 * 85 *ad / 40950
-
- for (i = 0; i < 4; i++) {
- if (i == 2) {
- if (flag == 0) {
- if (tmp >= gRate[i])
- break;
- } else {
- if (tmp >= gTurn_offv)
- break;
- }
- } else {
- if (tmp >= gRate[i])
- break;
- }
- }
- return (i + 1);
-}
-/*******************************************************************************
- ������: Scan_Key
- ��������:ɨ�����(50msÿ��)
- �������:NULL
- ���ز���:NULL
- *******************************************************************************/
-void Scan_Key(void) {
- static u32 p_cnt = 0, key_statuslast = 0;
- u32 key_state = 0;
-
- if ((~GPIOA->IDR) & 0x0200)
- key_state |= KEY_V1; //KEY_V1
- if ((~GPIOA->IDR) & 0x0040)
- key_state |= KEY_V2; //KEY_V2
-
- if (key_state == 0)
- return;
-
- if (gLongkey_flag == 1) { //LongKey_flag :���Ƴ�������־
- if (key_statuslast == key_state) {
- p_cnt++;
- if (p_cnt > 21)
- Set_gKey(KEY_CN | key_state); //������
- } else {
- p_cnt = 0;
- key_statuslast = key_state;
- Set_gKey(key_state);
- }
- } else {
- p_cnt = 0;
- key_statuslast = key_state;
- Set_gKey(key_state);
- }
-
-}
-
-/*******************************************************************************
- ������: Get_SlAvg
- ��������:����ƽ��ֵ
- �������:avg_data ƽ����ADֵ
- ���ز���:����ƽ��ֵ
- *******************************************************************************/
-u32 Get_SlAvg(u32 avg_data) {
- static u32 sum_avg = 0;
- static u8 init_flag = 0;
- u16 si_avg = sum_avg / SI_COE, abs;
-
- if (init_flag == 0) { /*��һ���ϵ�*/
- sum_avg = SI_COE * avg_data;
- init_flag = 1;
- return sum_avg / SI_COE;
- }
- if (avg_data > si_avg)
- abs = avg_data - si_avg;
- else
- abs = si_avg - avg_data;
-
- if (abs > SI_THRESHOLD)
- sum_avg = SI_COE * avg_data;
- else
- sum_avg += avg_data - sum_avg / SI_COE;
-
- return sum_avg / SI_COE;
-}
-
-/*******************************************************************************
- Function:
- Description: Read the thermocouple in the soldering iron head
- Output:Soldering Iron temperature
- *******************************************************************************/
-u32 Get_AvgAd(void) {
- /*The head has a thermocouple inline with the heater
- This is read by turning off the heater
- Then read the output of the op-amp that is connected across the connections
- */
- static u32 ad_sum = 0;
- static u32 max = 0, min = 5000;
- u32 ad_value, avg_data, slide_data = 0;
-
- Set_HeatingTime(0); //set the remaining time to zero
- HEAT_OFF(); //heater must be off
- Delay_HalfMs(25); //wait for the heater to time out
- gMeas_cnt = 10; //how many measurements to make
-
- while (gMeas_cnt > 0) {
- ad_value = Get_AdcValue(0); //Read_Tmp();
- ad_sum += ad_value;
- if (ad_value > max)
- max = ad_value;
- if (ad_value < min)
- min = ad_value;
-
- if (gMeas_cnt == 1) { //We have just taken the last reading
- ad_sum = ad_sum - max - min; //remove the two outliers
- avg_data = ad_sum / 8; //take the average
-
- slide_data = Get_SlAvg(avg_data);
- ad_sum = 0;
- min = 5000;
- max = 0;
- }
- gMeas_cnt--;
- }
- return slide_data; //gSlide_data;
-}
-
-/*******************************************************************************
- Function:
- Description:
- *******************************************************************************/
-int Get_TempSlAvg(int avg_data) {
- static int sum_avg = 0;
- static u8 init_flag = 0;
-
- if (init_flag == 0) {
- sum_avg = 8 * avg_data;
- init_flag = 1;
- return sum_avg / 8;
- }
-
- sum_avg += avg_data - sum_avg / 8;
-
- return sum_avg / 8;
-}
-
-/*******************************************************************************
- Function:
- Description:Reads the temperature of the on board temp sensor for calibration
- http://www.analog.com/media/en/technical-documentation/data-sheets/TMP35_36_37.pdf
- Output: The onboardTemp in C
- *******************************************************************************/
-int Get_SensorTmp(void) {
- u32 ad_sum = 0;
- u32 max = 0, min = 5000;
- u32 ad_value, avg_data, slide_data;
- int sensor_temp = 0;
-
- gMeas_cnt = 10;
-
- while (gMeas_cnt > 0) {
- ad_value = Get_AdcValue(1);
- ad_sum += ad_value;
- if (ad_value > max)
- max = ad_value;
- if (ad_value < min)
- min = ad_value;
-
- if (gMeas_cnt == 1) {
- ad_sum = ad_sum - max - min;
- avg_data = ad_sum / 8;
- //^ Removes the two outliers from the data spread
- slide_data = Get_TempSlAvg(avg_data);
- sensor_temp = (250 + (3300 * slide_data / 4096) - 750); //(25 + ((10*(33*gSlide_data)/4096)-75));
- //^ Convert the reading to C
- ad_sum = 0;
- min = 5000;
- max = 0;
- }
- gMeas_cnt--;
- }
- return sensor_temp;
-}
-
-/*******************************************************************************
- Function:
- Description: Reads the Zero Temp.. And does something..
- *******************************************************************************/
-void Zero_Calibration(void) {
- u32 zerop;
- int cool_tmp;
-
- zerop = Get_AvgAd(); //get the current
- cool_tmp = Get_SensorTmp(); //get the temp of the onboard sensor
-
- if (zerop >= 400) { //If the tip is too hot abort
- gCalib_flag = 2;
- } else {
- if (cool_tmp < 300) { //If cool temp is cool enough continue
- gZerop_ad = zerop; //store the zero point
- gCalib_flag = 1;
- } else { //abort if too warm
- gCalib_flag = 2;
- }
- }
-}
-/*******************************************************************************
- ������: Get_Temp
- ��������:�������,�ȶ��¶�,����AD�����¶�
- �������:wk_temp �����¶�
- ���ز���:ʵ���¶�
- *******************************************************************************/
-s16 Get_Temp(s16 wk_temp) {
- int ad_value, cool_tmp, compensation = 0;
- static u16 cnt = 0, h_cnt = 0;
-
- ad_value = Get_AvgAd();
- cool_tmp = Get_SensorTmp();
-
- if (ad_value == 4095)
- h_cnt++;
- else {
- h_cnt = 0;
- if (ad_value > 3800 && ad_value < 4095)
- cnt++;
- else
- cnt = 0;
- }
- if (h_cnt >= 60 && cnt == 0)
- gAlarm_type = SEN_ERR; //Sensor error -- too many invalid readings
- if (h_cnt == 0 && cnt >= 10)
- gAlarm_type = HIGH_TEMP; //Stuck at a really high temp -> Has mosfet failed
- if (h_cnt < 60 && cnt < 10)
- gAlarm_type = NORMAL_TEMP; //No errors so far
-
- compensation = 80 + 150 * (wk_temp - 1000) / 3000;
- if (wk_temp == 1000)
- compensation -= 10;
-
- if (wk_temp != 0) {
- if (ad_value > (compensation + gZerop_ad))
- ad_value -= compensation;
- }
- if (cool_tmp > 400)
- cool_tmp = 400; //cap cool temp at 40C
-
- return (ad_value * 1000 + 806 * cool_tmp - gZerop_ad * 1000) / 806;
-}
-
-/*******************************************************************************
- Function:Start_Watchdog
- Description: Starts the system watchdog timer
- *******************************************************************************/
-u32 Start_Watchdog(u32 ms) {
- IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);
-
- /* IWDG counter clock: 40KHz(LSI) / 32 = 1.25 KHz (min:0.8ms -- max:3276.8ms */
- IWDG_SetPrescaler(IWDG_Prescaler_32);
-
- /* Set counter reload value to XXms */
- IWDG_SetReload(ms * 10 / 8);
-
- /* Reload IWDG counter */
- IWDG_ReloadCounter();
-
- /* Enable IWDG (the LSI oscillator will be enabled by hardware) */
- IWDG_Enable();
- return 1;
-}
-/*******************************************************************************
- Function:Clear_Watchdog
- Description:Resets the watchdog timer
- *******************************************************************************/
-void Clear_Watchdog(void) {
- IWDG_ReloadCounter();
-
-}
-/******************************** END OF FILE *********************************/
diff --git a/workspace/ts100/src/I2C.c b/workspace/ts100/src/I2C.c
index 51d626ad..bed47bf3 100644
--- a/workspace/ts100/src/I2C.c
+++ b/workspace/ts100/src/I2C.c
@@ -1,229 +1,148 @@
-/********************* (C) COPYRIGHT 2015 e-Design Co.,Ltd. **********************
-File Name : I2C.c
-Version : S100 APP Ver 2.11
-Description:
-Author : Celery
-Data: 2015/07/20
-History:
-2015/07/07 ͳһ������
-2015/07/21 I2C_DELAYTIME = 2;
-*******************************************************************************/
-
-#include "stm32f10x.h"
+/*
+ * I2C.h hardware interface class
+ * Based on the STM32 app note AN2824
+ */
#include "I2C.h"
-#include "Bios.h"
-#include "Oled.h"
-#include "S100V0_1.h"
-
-// --------- ����I2C�ӿ���ض���-------- //
-#define SDA GPIO_Pin_7
-#define SCL GPIO_Pin_6
-
-#define HIGH 1
-#define LOW 0
-
-#define SDA_VAL GPIO_ReadInputDataBit(GPIOB, SDA)
-#define SCL_VAL GPIO_ReadInputDataBit(GPIOB, SCL)
-
-#define I2C_MORE 1
-#define I2C_LAST 0
-#define I2C_TIMEOUT 255
-#define FAILURE 0
-#define SUCCEED 1
-#define I2C_DELAYTIME 2
-
-static void Sim_I2C_Set(u8 pin, u8 status);
-static void Sim_I2C_Stop(void);
-static void Sim_I2C_Start(void);
-static u8 Sim_I2C_RD_Byte(u8 more);
-static u8 Sim_I2C_WR_Byte(u8 data);
-
-/*******************************************************************************
-������: Delay_uS
-��������: �����ʱ
-�������:us
-���ز���:NULL
-*******************************************************************************/
-void Delay_uS(u32 us)
-{
- while(us) us--;
+/*
+ * Configure the I2C port hardware
+ */
+void I2C_Configuration(void) {
+ GPIO_InitTypeDef GPIO_InitStructure;
+ I2C_InitTypeDef I2C_InitStructure;
+
+ /* PB6,7 SCL and SDA */
+ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;
+ GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
+ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD;
+ GPIO_Init(GPIOB, &GPIO_InitStructure);
+
+ /* I2C1 configuration ------------------------------------------------------*/
+ I2C_InitStructure.I2C_Mode = I2C_Mode_I2C;
+ I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2;
+ I2C_InitStructure.I2C_Ack = I2C_Ack_Enable;
+ I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;
+ I2C_InitStructure.I2C_ClockSpeed = 100000; //100k
+ I2C_Init(I2C1, &I2C_InitStructure);
+ I2C_Cmd(I2C1, ENABLE);
}
-/*******************************************************************************
-������: I2C_Configuration
-��������: ����I2C
-�������:NULL
-���ز���:NULL
-*******************************************************************************/
-void I2C_Configuration(void)
-{
- GPIO_InitTypeDef GPIO_InitStructure;
- I2C_InitTypeDef I2C_InitStructure;
- GPIO_Init_OLED();
- /* PB6,7 SCL and SDA */
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD;
- GPIO_Init(GPIOB, &GPIO_InitStructure);
+/*
+ * Writes a page of data over I2C using the I2C1 peripheral in the stm32
+ *
+ */
+void I2C_PageWrite(u8* buf, u8 nbyte, u8 deviceaddr) {
+
+ while (I2C_GetFlagStatus(I2C1, I2C_FLAG_BUSY)) {
+ }
+ // Intiate Start Sequence
+ I2C_GenerateSTART(I2C1, ENABLE);
+ while (!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT)) {
+ }
+ // Send Address
+ I2C_Send7bitAddress(I2C1, deviceaddr << 1, I2C_Direction_Transmitter);
+ while (!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED)) {
+ }
+ // Write first byte EV8_1
+ I2C_SendData(I2C1, *buf++);
+
+ while (--nbyte) {
+ // wait on BTF
+ while (!I2C_GetFlagStatus(I2C1, I2C_FLAG_BTF)) {
+ }
+ I2C_SendData(I2C1, *buf++);
+ }
+
+ while (!I2C_GetFlagStatus(I2C1, I2C_FLAG_BTF)) {
+ }
+ I2C_GenerateSTOP(I2C1, ENABLE);
+ while (I2C_GetFlagStatus(I2C1, I2C_FLAG_STOPF)) {
+ }
- /* I2C1 configuration ------------------------------------------------------*/
- I2C_InitStructure.I2C_Mode = I2C_Mode_I2C;
- I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2;
- I2C_InitStructure.I2C_OwnAddress1 = DEVICEADDR_OLED;
- I2C_InitStructure.I2C_Ack = I2C_Ack_Enable;
- I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;
- I2C_InitStructure.I2C_ClockSpeed = 100000;//100k
- I2C_Init(I2C1, &I2C_InitStructure);
- I2C_Cmd(I2C1, ENABLE);
}
-/*******************************************************************************
-������: I2C_Configuration
-��������: ����I2C
-�������:NULL
-���ز���:NULL
-*******************************************************************************/
-void Sim_I2C_Set(u8 pin, u8 status)
-{
- if(status == HIGH) GPIO_SetBits (GPIOB, pin);
- if(status == LOW) GPIO_ResetBits(GPIOB, pin);
+/*
+ * Read Page of data using I2C1 peripheral
+ */
+
+void I2C_PageRead(u8* buf, u8 nbyte, u8 deviceaddr, u8 readaddr) {
+ I2C_GenerateSTART(I2C1, ENABLE);
+ while (I2C_GetFlagStatus(I2C1, I2C_FLAG_SB) == RESET)
+ ;
+ I2C_Send7bitAddress(I2C1, deviceaddr << 1, I2C_Direction_Transmitter);
+ while (I2C_GetFlagStatus(I2C1, I2C_FLAG_ADDR) == RESET)
+ ;
+ I2C_GetFlagStatus(I2C1, I2C_FLAG_MSL);
+ while (I2C_GetFlagStatus(I2C1, I2C_FLAG_TXE) == RESET)
+ ;
+ // Send an 8bit byte address
+ I2C_SendData(I2C1, readaddr);
+ while (I2C_GetFlagStatus(I2C1, I2C_FLAG_BUSY)) {
+ }
+ I2C_AcknowledgeConfig(I2C1, DISABLE);
+ I2C_NACKPositionConfig(I2C1, I2C_NACKPosition_Current);
+ I2C_GenerateSTART(I2C1, ENABLE);
+ while (!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT)) {
+ }
+ I2C_Send7bitAddress(I2C1, deviceaddr << 1, I2C_Direction_Receiver);
+ while (!I2C_GetFlagStatus(I2C1, I2C_FLAG_ADDR)) {
+ }
+ if (nbyte == 1) {
+ // Clear Ack bit
+ I2C_AcknowledgeConfig(I2C1, DISABLE);
+ // EV6_1 -- must be atomic -- Clear ADDR, generate STOP
+ __disable_irq();
+ (void) I2C1->SR2;
+ I2C_GenerateSTOP(I2C1, ENABLE);
+ __enable_irq();
+ // Receive data EV7
+ while (!I2C_GetFlagStatus(I2C1, I2C_FLAG_RXNE)) {
+ }
+ *buf++ = I2C_ReceiveData(I2C1);
+ } else if (nbyte == 2) {
+ // Set POS flag
+ I2C_NACKPositionConfig(I2C1, I2C_NACKPosition_Next);
+ // EV6_1 -- must be atomic and in this order
+ __disable_irq();
+ (void) I2C1->SR2; // Clear ADDR flag
+ I2C_AcknowledgeConfig(I2C1, DISABLE); // Clear Ack bit
+ __enable_irq();
+ // EV7_3 -- Wait for BTF, program stop, read data twice
+ while (!I2C_GetFlagStatus(I2C1, I2C_FLAG_BTF)) {
+ }
+ __disable_irq();
+ I2C_GenerateSTOP(I2C1, ENABLE);
+ *buf++ = I2C1->DR;
+ __enable_irq();
+ *buf++ = I2C1->DR;
+ } else {
+ (void) I2C1->SR2; // Clear ADDR flag
+ while (nbyte-- != 3) {
+ // EV7 -- cannot guarantee 1 transfer completion time, wait for BTF
+ // instead of RXNE
+ while (!I2C_GetFlagStatus(I2C1, I2C_FLAG_BTF)) {
+ }
+ *buf++ = I2C_ReceiveData(I2C1);
+ }
+
+ while (!I2C_GetFlagStatus(I2C1, I2C_FLAG_BTF)) {
+ }
+ // EV7_2 -- Figure 1 has an error, doesn't read N-2 !
+ I2C_AcknowledgeConfig(I2C1, DISABLE); // clear ack bit
+ __disable_irq();
+ *buf++ = I2C_ReceiveData(I2C1); // receive byte N-2
+ I2C_GenerateSTOP(I2C1, ENABLE); // program stop
+ __enable_irq();
+ *buf++ = I2C_ReceiveData(I2C1); // receive byte N-1
+ // wait for byte N
+ while (!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_RECEIVED)) {
+ }
+ *buf++ = I2C_ReceiveData(I2C1);
+ nbyte = 0;
+ }
+ // Wait for stop
+ while (I2C_GetFlagStatus(I2C1, I2C_FLAG_STOPF)) {
+ }
+ return;
}
-/*******************************************************************************
-������: Sim_I2C_Start
-��������: ��ʼ
-�������:NULL
-���ز���:NULL
-*******************************************************************************/
-void Sim_I2C_Start(void)
-{
- GPIO_InitTypeDef GPIO_InitStructure;
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); // I2C_PIN_EN();
- GPIO_InitStructure.GPIO_Pin = SCL | SDA;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init (GPIOB, &GPIO_InitStructure);
-
- Sim_I2C_Set(SCL, LOW); // SCL low
- Sim_I2C_Set(SDA, HIGH); // SDA float, set as output high
- Sim_I2C_Set(SCL, HIGH); // SCL high
- Delay_uS(I2C_DELAYTIME);
- Sim_I2C_Set(SDA, LOW); // SDA high->low while sclk high, S state occur...
- Delay_uS(I2C_DELAYTIME);
- Sim_I2C_Set(SCL, LOW); // SCL low
-}
-/*******************************************************************************
-������: Sim_I2C_Stop
-��������: ֹͣ
-�������:NULL
-���ز���:NULL
-*******************************************************************************/
-void Sim_I2C_Stop(void)
-{
- Sim_I2C_Set(SCL, LOW); // SCL low
- Sim_I2C_Set(SDA, LOW); // SDA low
- Delay_uS(I2C_DELAYTIME);
- Sim_I2C_Set(SCL, HIGH); // SCL high
- Delay_uS(I2C_DELAYTIME);
- Sim_I2C_Set(SDA, HIGH); // SDA low->high while sclk high, P state occur
- Delay_uS(I2C_DELAYTIME);
- Sim_I2C_Set(SCL, LOW); // SCL low
- Delay_uS(I2C_DELAYTIME);
-}
-/*******************************************************************************
-������: Sim_I2C_WR_Byte
-��������:��I2Cд��λ����
-�������:dataҪд�������
-���ز���:NULL
-*******************************************************************************/
-u8 Sim_I2C_WR_Byte(u8 data)
-{
- u8 i = 8;
-
- while(i--) { //send out a bit by sda line.
- Sim_I2C_Set(SCL, LOW); // sclk low
- if(data & 0x80) Sim_I2C_Set(SDA, HIGH); // send bit is 1
- else Sim_I2C_Set(SDA, LOW); // send bit is 0
- Delay_uS(I2C_DELAYTIME);
- Sim_I2C_Set(SCL, HIGH); // SCL high
- Delay_uS(I2C_DELAYTIME);
- data <<=1; // left shift 1 bit, MSB send first.
- }
- Sim_I2C_Set(SCL, LOW); // SCL low
- Sim_I2C_Set(SDA, HIGH); // SDA set as input
- for(i=I2C_TIMEOUT; i!=0; i--) { // wait for sda low to receive ack
- Delay_uS(I2C_DELAYTIME);
- if (!SDA_VAL) {
- Sim_I2C_Set(SCL, HIGH); // SCL high
- Delay_uS(I2C_DELAYTIME);
- Sim_I2C_Set(SCL, LOW); // SCL_LOW();
- Delay_uS(I2C_DELAYTIME);
- return SUCCEED;
- }
- }
- return FAILURE;
-}
-/*******************************************************************************
-������: Sim_I2C_RD_Byte
-��������:��I2C�������
-�������:more
-���ز���:�����İ�λ����
-*******************************************************************************/
-u8 Sim_I2C_RD_Byte(u8 more)
-{
- u8 i = 8, byte = 0;
-
- Sim_I2C_Set(SDA, HIGH); // SDA set as input
- while(i--) {
- Sim_I2C_Set(SCL, LOW); // SCL low
- Delay_uS(I2C_DELAYTIME);
- Sim_I2C_Set(SCL, HIGH); // SCL high
- Delay_uS(I2C_DELAYTIME);
- byte <<=1; //recv a bit
- if (SDA_VAL) byte |= 0x01;
- }
- Sim_I2C_Set(SCL, LOW);
- if(!more) Sim_I2C_Set(SDA, HIGH); //last byte, send nack.
- else Sim_I2C_Set(SDA, LOW); //send ack
- Delay_uS(I2C_DELAYTIME);
- Sim_I2C_Set(SCL, HIGH); // SCL_HIGH();
- Delay_uS(I2C_DELAYTIME);
- Sim_I2C_Set(SCL, LOW);
- return byte;
-}
-/*******************************************************************************
-������: I2C_PageWrite
-��������:�� ��ַ deviceaddr д��numbyte���ֽڵ����ݣ�д���������pbuf
-�������:pbuf д������ݣ�numbyte Ϊд����ֽ�����deviceaddrΪд��ĵ�ַ
-���ز���:NULL
-*******************************************************************************/
-void I2C_PageWrite(u8* pbuf, u8 numbyte,u8 deviceaddr )
-{
- Sim_I2C_Start();
- Sim_I2C_WR_Byte(deviceaddr<<1);
- while(numbyte--) Sim_I2C_WR_Byte(*pbuf++);
- Sim_I2C_Stop();
-}
-/*******************************************************************************
-������: I2C_PageRead
-��������:��I2C�������
-�������: pbuf �������Ĵ�ŵ�ַ numbyteΪ���������ֽ���
- deviceaddr�豸��ַ readaddr��ȡ�����ݵ�ַ
-���ز���:�����İ�λ����
-*******************************************************************************/
-void I2C_PageRead(u8* pbuf, u8 numbyte,u8 deviceaddr, u8 readaddr)
-{
- Sim_I2C_Start();
- Sim_I2C_WR_Byte(deviceaddr<<1);
- Sim_I2C_WR_Byte(readaddr);
- Sim_I2C_Start();
- Sim_I2C_WR_Byte((deviceaddr<<1)|1);
-
- while(numbyte--) {
- if(numbyte) *pbuf++ = Sim_I2C_RD_Byte(I2C_MORE);
- else *pbuf++ = Sim_I2C_RD_Byte(I2C_LAST);
- }
- Sim_I2C_Stop();
-}
-/******************************** END OF FILE *********************************/
diff --git a/workspace/ts100/src/Interrupt.c b/workspace/ts100/src/Interrupt.c
index c99d7373..43dbb4a3 100644
--- a/workspace/ts100/src/Interrupt.c
+++ b/workspace/ts100/src/Interrupt.c
@@ -1,14 +1,18 @@
-/********************* (C) COPYRIGHT 2015 e-Design Co.,Ltd. *******************/
-/* Brief : Interrupt Service Routines Author : bure */
-/******************************************************************************/
#include "Interrupt.h"
-#include "usb_istr.h"
#include "Bios.h"
#include "I2C.h"
-/******************************************************************************/
-/* Processor Exceptions Handlers */
-/******************************************************************************/
+volatile uint32_t system_Ticks;
+volatile uint32_t lastKeyPress; //millis() at the last button event
+volatile uint16_t keyState; //tracks the button status
+volatile uint32_t lastMovement; //millis() at last movement event
+
+//Delay in milliseconds using systemTick
+void delayMs(uint32_t ticks) {
+ uint32_t endtime = ticks + millis();
+ while (millis() < endtime)
+ ;
+}
void NMI_Handler(void) {
;
@@ -34,42 +38,171 @@ void UsageFault_Handler(void) {
;
}
-void SVC_Handler(void) {
+//Handles the tick of the sysTick events
+void SysTick_Handler(void) {
+ ++system_Ticks;
}
-void DebugMon_Handler(void) {
-}
+/*Peripheral Interrupts */
-void PendSV_Handler(void) {
+void TIM3_IRQHandler(void) {
+ TIM3_ISR();
}
-void SysTick_Handler(void) {
+//EXTI IRQ handler
+//used for buttons and movement
+void EXTI9_5_IRQHandler(void) {
+//we are interested in line 9 and line 6 for buttons
+ //Lien 5 == movement
+ if (EXTI_GetITStatus(EXTI_Line9) != RESET) {
+ if (GPIO_ReadInputDataBit(GPIOA, KEY_A) == SET)
+ keyState &= ~(BUT_A);
+ else
+ keyState |= BUT_A;
+ lastKeyPress = millis();
+ EXTI_ClearITPendingBit(EXTI_Line9);
+ } else if (EXTI_GetITStatus(EXTI_Line6) != RESET) {
+ if (GPIO_ReadInputDataBit(GPIOA, KEY_B) == SET)
+ keyState &= ~(BUT_B);
+ else
+ keyState |= BUT_B;
+ lastKeyPress = millis();
+ EXTI_ClearITPendingBit(EXTI_Line6);
+ } else if (EXTI_GetITStatus(EXTI_Line5) != RESET) { //Movement Event
+ lastMovement = millis();
+ EXTI_ClearITPendingBit(EXTI_Line5);
+ }
+
}
-/******************************************************************************/
-/* Peripherals Interrupt Handlers */
-/* Add here the Interrupt Handler for the used peripheral(s) (PPP), for the */
-/* available peripheral interrupt handler's name please refer to the startup */
-/* file (startup_stm32f30x.s). */
-/******************************************************************************/
+/*********************** UNUSED IRQ *****************************************/
+void WWDG_IRQHandler(void) {
+}
+void PVD_IRQHandler(void) {
+}
+void TAMPER_IRQHandler(void) {
+}
+void RTC_IRQHandler(void) {
+}
+void FLASH_IRQHandler(void) {
+}
+void RCC_IRQHandler(void) {
+}
+void EXTI0_IRQHandler(void) {
+}
+void EXTI1_IRQHandler(void) {
+}
+void EXTI2_IRQHandler(void) {
+}
+void EXTI3_IRQHandler(void) {
+}
+void EXTI4_IRQHandler(void) {
+}
+void DMA1_Channel1_IRQHandler(void) {
+}
+void DMA1_Channel2_IRQHandler(void) {
+}
+void DMA1_Channel3_IRQHandler(void) {
+}
+void DMA1_Channel4_IRQHandler(void) {
+}
+void DMA1_Channel5_IRQHandler(void) {
+}
+void DMA1_Channel6_IRQHandler(void) {
+}
+void DMA1_Channel7_IRQHandler(void) {
+}
+void ADC1_2_IRQHandler(void) {
+}
+void USB_HP_CAN1_TX_IRQHandler(void) {
+}
+void CAN1_RX1_IRQHandler(void) {
+}
+void CAN1_SCE_IRQHandler(void) {
+}
-void USB_LP_CAN1_RX0_IRQHandler(void) {
- USB_Istr();
+void TIM1_BRK_IRQHandler(void) {
+}
+void TIM1_UP_IRQHandler(void) {
+}
+void TIM1_TRG_COM_IRQHandler(void) {
+}
+void TIM1_CC_IRQHandler(void) {
+}
+void TIM4_IRQHandler(void) {
+}
+void I2C1_EV_IRQHandler(void) {
+}
+void I2C1_ER_IRQHandler(void) {
+}
+void I2C2_EV_IRQHandler(void) {
+}
+void I2C2_ER_IRQHandler(void) {
+}
+void SPI1_IRQHandler(void) {
+}
+void SPI2_IRQHandler(void) {
+}
+void USART1_IRQHandler(void) {
+}
+void USART2_IRQHandler(void) {
+}
+void USART3_IRQHandler(void) {
+}
+void EXTI15_10_IRQHandler(void) {
+}
+void RTCAlarm_IRQHandler(void) {
+}
+void USBWakeUp_IRQHandler(void) {
+}
+void TIM8_BRK_IRQHandler(void) {
+}
+void TIM8_UP_IRQHandler(void) {
+}
+void TIM8_TRG_COM_IRQHandler(void) {
+}
+void TIM8_CC_IRQHandler(void) {
+}
+void ADC3_IRQHandler(void) {
+}
+void FSMC_IRQHandler(void) {
+}
+void SDIO_IRQHandler(void) {
+}
+void TIM5_IRQHandler(void) {
+}
+void SPI3_IRQHandler(void) {
+}
+void UART4_IRQHandler(void) {
+}
+void UART5_IRQHandler(void) {
+}
+void TIM6_IRQHandler(void) {
+}
+void TIM7_IRQHandler(void) {
+}
+void DMA2_Channel1_IRQHandler(void) {
+}
+void DMA2_Channel2_IRQHandler(void) {
+}
+void DMA2_Channel3_IRQHandler(void) {
+}
+void DMA2_Channel4_5_IRQHandler(void) {
}
void TIM2_IRQHandler(void) {
- TIM2_ISR();
+
+}
+void SVC_Handler(void) {
}
-void TIM3_IRQHandler(void) {
- TIM3_ISR();
+void DebugMon_Handler(void) {
}
-/*This loop is used for un assigned IRQ's so that the debugger can catch them*/
-static void forever()
-{
- for (;;)
- ;
+void PendSV_Handler(void) {
+}
+
+void USB_LP_CAN1_RX0_IRQHandler(void) {
+
}
-/********************************* END OF FILE ******************************/
diff --git a/workspace/ts100/src/MMA8652FC.c b/workspace/ts100/src/MMA8652FC.c
index d8488e99..8d473261 100644
--- a/workspace/ts100/src/MMA8652FC.c
+++ b/workspace/ts100/src/MMA8652FC.c
@@ -1,252 +1,43 @@
-/********************* (C) COPYRIGHT 2015 e-Design Co.,Ltd. **********************
- File Name : MMA8652FC.c
- Version : S100 APP Ver 2.11
- Description:
- Author : Celery
- Data: 2015/07/07
- History:
- 2016/09/13 Ben V. Brown - English comments and fixing a few errors
- 2015/07/07 ͳһ������
- *******************************************************************************/
+/*
+ * MMA8652FC.*
+ * Files for the built in accelerometer from NXP.
+ * This sets the unit up in motion detection mode with an interrupt on movement
+ * This interrupt is fed to PB5 which catches it via EXTI5
+ *
+ * http://cache.freescale.com/files/sensors/doc/data_sheet/MMA8652FC.pdf
+ *
+ * EXTI Motion config setup values lifted from AN4070from NXP
+ *
+ * Ben V. Brown - <[email protected]>
+ */
#include <stdio.h>
-#include <string.h>
-#include "APP_Version.h"
#include "Bios.h"
-#include "Oled.h"
#include "MMA8652FC.h"
#include "I2C.h"
-#include "CTRL.h"
-#include "UI.h"
-//------------------------------------------------------------------//
-
-static int IIC_RegWrite(u8 reg, u8 data);
-static int IIC_RegRead(u8 reg);
-static int Read_ZYXDr(void);
-
-u16 gactive = 0, gShift = 0;
-u8 gMmatxdata;
-
-typedef struct {
- u8 hi;
- u8 lo;
-
-} DR_Value;
-
-DR_Value gX_value, gY_value, gZ_value;
-
-/*******************************************************************************
- Function:
- Description:Returns if the unit is actively being moved
- Output: if the unit is active or not.
- *******************************************************************************/
-u16 Get_MmaActive(void) {
- return gactive;
-}
-/*******************************************************************************
- Function: Get_MmaActive
- Description:Returns if movement has occured (0==still,1==movement)
- *******************************************************************************/
-u16 Get_MmaShift(void) {
- return gShift;
-}
-/*******************************************************************************
- Function: Set_MmaShift
- Description: Set the Shift Value
- Input: shift value
- *******************************************************************************/
-void Set_MmaShift(u16 shift) {
- gShift = shift;
-}
-
-/*******************************************************************************
- Function:IIC_RegWrite
- Description:Writes a value to a register
- Input:the register, the data
- Output: 1 if the write succeeded
- *******************************************************************************/
-int IIC_RegWrite(u8 reg, u8 data) {
- u8 tx_data[20];
+void I2C_RegisterWrite(uint8_t reg, uint8_t data) {
+ u8 tx_data[2];
tx_data[0] = reg;
tx_data[1] = data;
I2C_PageWrite(tx_data, 2, DEVICE_ADDR);
- return 1;
}
-/*******************************************************************************
- Function:IIC_RegRead
- Description: Reads a register from I2C, using a single byte addressing scheme
- Inputs: uint8_t register to read
- Output: 1 if the read worked.
- *******************************************************************************/
-int IIC_RegRead(u8 reg) {
- u8 tx_data[20];
- tx_data[0] = reg;
+uint8_t I2C_RegisterRead(uint8_t reg) {
+ u8 tx_data[3];
+ tx_data[0] = reg;
I2C_PageRead(tx_data, 1, DEVICE_ADDR, reg);
- gMmatxdata = tx_data[0];
- return 1;
-}
-/*******************************************************************************
- Function: MMA865x_Standby
- Description: Put the MMA865 into standby mode
- *******************************************************************************/
-void MMA865x_Standby(void) {
- //Put the sensor into Standby Mode by clearing
- // the Active bit of the System Control 1 Register
- IIC_RegWrite(CTRL_REG1, 0); //(IIC_RegRead(CTRL_REG1) & ~ ACTIVE_MASK)
-}
-/*******************************************************************************
- Function: MMA865x_Active
- Description: Put the MMA865 into active mode
- *******************************************************************************/
-void MMA865x_Active(void) {
- // Put the sensor into Active Mode by setting the
- // Active bit of the System Control 1 Register
- IIC_RegWrite(CTRL_REG1, ACTIVE_MASK); //(IIC_RegRead(CTRL_REG1) | ACTIVE_MASK)
-}
-/*******************************************************************************
- Function: IIC_RegRead
- Description:Setup the MMA865x IC settings
- *******************************************************************************/
-void StartUp_Accelerated(void) {
- //Put the unit into standby state so we can edit its configuration registers
- MMA865x_Standby();
- //Set the unit to full scale measurement
- IIC_RegWrite(XYZ_DATA_CFG_REG, FULL_SCALE_8G); //(IIC_RegRead(XYZ_DATA_CFG_REG) & ~FS_MASK)
- //Set the unit to the required update rate (eg 100Hz)
- IIC_RegWrite(CTRL_REG1, DataRateValue); //IIC_RegRead(CTRL_REG1)|
-
- IIC_RegWrite(CTRL_REG2, 0); //Normal mode
-
- //Change the unit back to active mode to exit setup and start the readings
- MMA865x_Active();
+ return tx_data[0];
}
-/*******************************************************************************
- Function: Read_ZYXDr
- Description:
- Output: 1 if new data, 0 if not
- *******************************************************************************/
-int Read_ZYXDr(void) {
- u8 reg_flag;
- u8 ptr, i;
- u8 value[6] = { 0, 0, 0, 0, 0, 0 };
- //Poll the ZYXDR status bit and wait for it to set
- if (IIC_RegRead(STATUS_REG)) { //check we can read the status
- reg_flag = gMmatxdata;
- if ((reg_flag & ZYXDR_BIT) != 0) { //if new measurement
- //Read 12/10-bit XYZ results using a 6 byte IIC access
- ptr = X_MSB_REG;
- for (i = 0; i < 6; i++) {
- if (IIC_RegRead(ptr++) == 0)
- break;
-
- value[i] = gMmatxdata;
- //Copy and save each result as a 16-bit left-justified value
- gX_value.hi = value[0];
- gX_value.lo = value[1];
- gY_value.hi = value[2];
- gY_value.lo = value[3];
- gZ_value.hi = value[4];
- gZ_value.lo = value[5];
- return 1;
- }
- } else
- return 0;
- }
- return 0;
-}
-/*******************************************************************************
- Function: Cheak_XYData
- Description: Check the input X,Y for a large enough acceleration to wake the unit
- Inputs:x0,y0,x1,y1 to check
- Output: if the unit is active
- *******************************************************************************/
-u16 Cheak_XYData(u16 x0, u16 y0, u16 x1, u16 y1) {
- u16 active = 0;
- gShift = 0;
-
- if ((x1 > (x0 + 32)) || (x1 < (x0 - 32)))
- gShift = 1;
- if ((y1 > (y0 + 32)) || (y1 < (y0 - 32)))
- gShift = 1;
-
- if ((x1 > (x0 + 16)) || (x1 < (x0 - 16)))
- active = 1;
- if ((y1 > (y0 + 16)) || (y1 < (y0 - 16)))
- active = 1;
-
- return active;
-}
-/*******************************************************************************
- Function: Update_X
- Description: Converts the read value for x into an actual properly located value
- Output: X
- *******************************************************************************/
-u16 Update_X(void) {
- u16 value, x;
-
- value = ((gX_value.hi << 8) | (gX_value.lo & 0xf0)) >> 4;
- if (gX_value.hi > 0x7f)
- x = (~value + 1) & 0xfff;
- else
- x = value & 0xfff;
-
- return x;
-}
-/*******************************************************************************
- Function: Update_Y
- Description: Converts the read value for y into an actual properly located value
- Output: Y
- *******************************************************************************/
-u16 Update_Y(void) {
- u16 value, y;
-
- value = ((gY_value.hi << 8) | (gY_value.lo & 0xf0)) >> 4;
- if (gY_value.hi > 0x7f)
- y = (~value + 1) & 0xfff;
- else
- y = value & 0xfff;
-
- return y;
-}
-/*******************************************************************************
- Function: Update_Z
- Description: Converts the read value for z into an actual properly located value
- Output: Z
- *******************************************************************************/
-u16 Update_Z(void) {
- u16 value, z;
-
- value = ((gZ_value.hi << 8) | (gZ_value.lo & 0xf0)) >> 4;
- if (gZ_value.hi > 0x7f)
- z = (~value + 1) & 0xfff;
- else
- z = value & 0xfff;
-
- return z;
-}
-/*******************************************************************************
- Function: Check_Accelerated
- Description:Check if the unit has moved
- *******************************************************************************/
-void Check_Accelerated(void) {
- static u16 x0 = 0, y0 = 0;
- u16 x1, y1;
-
- if (Read_ZYXDr()) { //Read the new values from the accelerometer
- x1 = Update_X(); //convert the values into usable form
- y1 = Update_Y();
- } else {
- x1 = x0;
- y1 = y0; //use old values
- gactive = 0;
- return;
- }
-
- gactive = Cheak_XYData(x0, y0, x1, y1); //gactive == If the unit is moving or not
+void StartUp_Accelerometer(void) {
+ I2C_RegisterWrite(CTRL_REG2, 0); //Normal mode
+ I2C_RegisterWrite( CTRL_REG2, 0x40); // Reset all registers to POR values
+ delayMs(2); // ~1ms delay
+ I2C_RegisterWrite(FF_MT_CFG_REG, 0x78); // Enable motion detection for X and Y axis, latch enabled
+ I2C_RegisterWrite(FF_MT_THS_REG, 0x0F); // Set threshold
+ I2C_RegisterWrite(FF_MT_COUNT_REG, 0x01); // Set debounce to 100ms
- x0 = x1;
- y0 = y1;
+ I2C_RegisterWrite( CTRL_REG4, 0x04); // Enable motion interrupt
+ I2C_RegisterWrite( CTRL_REG5, 0x04);// Route motion interrupts to INT1 ->PB5 ->EXTI
+ I2C_RegisterWrite( CTRL_REG1, 0x19); // ODR=100 Hz, Active mode
}
-/******************************** END OF FILE *********************************/
diff --git a/workspace/ts100/src/Main.c b/workspace/ts100/src/Main.c
index 1762b02c..8d4c9c85 100644
--- a/workspace/ts100/src/Main.c
+++ b/workspace/ts100/src/Main.c
@@ -1,63 +1,41 @@
-/********************* (C) COPYRIGHT 2015 e-Design Co.,Ltd. **********************
- File Name : main.c
- Version : S100 APP Ver 2.11
- Description:
- Author : Celery
- Data: 2015/07/07
- History:
- 2016/8/11 Updates by Ben V. Brown <[email protected]> - Cleanup and english comments
- 2015/07/07 ͳһ������
- *******************************************************************************/
-#include <string.h>
-#include <stdio.h>
-#include "APP_Version.h"
-#include "Disk.h"
+/*
+ * Created by Ben V. Brown
+ */
+
+#include "Modes.h"
#include "Bios.h"
-#include "usb_lib.h"
-#include "I2C.h"
-#include "Flash.h"
#include "MMA8652FC.h"
-#include "UI.h"
+#include "PID.h"
#include "Oled.h"
-#include "CTRL.h"
-#include "Hardware.h"
-int main(void) {
- RCC_Config(); //setup system clock
- NVIC_Config(0x4000);
- Init_Timer2(); //init the timers
- Init_Timer3();
- GPIO_Config();//setup all the GPIO pins
-
- USB_Port(DISABLE);//disable the USB hardware
- Delay_Ms(200);//pause to let hardware stabilize
- USB_Port(ENABLE);//enable the USB hardware
- USB_Init();
- I2C_Configuration(); //init the i2c bus
-
- Adc_Init(); //init adc and dma
- if (Get_CtrlStatus() != CONFIG)
- StartUp_Accelerated();//start the accelerometer if not in config mode
-
- System_Init();//load known safe values
- Init_Oled();//init the OLED display
- Clear_Screen();//clear the display buffer to black
- Init_Gtime();//init the count down timers
- APP_Init();//pick operating mode via input voltage
-
- Disk_BuffInit();//fill the buffer for the virtual disk
- Config_Analysis(); //read in config from virtual disk
- Pid_Init(); //init the pid to starting values
- Set_gKey(NO_KEY); //reset keys to all off
- Start_Watchdog(3000);//start the system watchdog as 3 seconds
+#include "Settings.h"
+#include "I2C.h"
+void setup();
+int main(void) {
+ setup();
while (1) {
Clear_Watchdog(); //reset the Watchdog
- if (Get_CtrlStatus() != CONFIG && LEAVE_WAIT_TIMER== 0) {
- Check_Accelerated(); //update readings from the accelerometer
- LEAVE_WAIT_TIMER = 50;//reset timer so we dont poll accelerometer for another 500ms
- }
- OLed_Display(); //Draw in the Oled display for this mode
- Status_Tran(); //Handle user input and mode changing
+ ProcessUI();
+ DrawUI();
+ delayMs(50);
}
}
-/******************************** END OF FILE *********************************/
+void setup()
+{
+ RCC_Config(); //setup system clock
+ NVIC_Config(0x4000); //this shifts the NVIC table to be offset, for the usb bootloader's size
+ GPIO_Config(); //setup all the GPIO pins
+ Init_EXTI(); //init the EXTI inputs
+ Init_Timer3(); //Used for the soldering iron tip
+ Adc_Init(); //init adc and dma
+ I2C_Configuration(); //Start the I2C hardware
+ GPIO_Init_OLED(); //Init the GPIO ports for the OLED
+ StartUp_Accelerometer(); //start the accelerometer
+ Init_Oled(); //init the OLED display
+ Clear_Screen(); //clear the display buffer to black
+ setupPID(); //init the PID values
+ readIronTemp(239, 0); //load the default calibration value
+ restoreSettings(); //Load settings
+
+ Start_Watchdog(1000); //start the system watchdog as 1 seconds timeout
+}
diff --git a/workspace/ts100/src/Modes.c b/workspace/ts100/src/Modes.c
new file mode 100644
index 00000000..9936fb56
--- /dev/null
+++ b/workspace/ts100/src/Modes.c
@@ -0,0 +1,282 @@
+/*
+ * Modes.c
+ *
+ * Created on: 17 Sep 2016
+ * Author: Ralim <[email protected]>
+ */
+#include "Modes.h"
+//This does the required processing and state changes
+void ProcessUI() {
+ uint8_t Buttons = getButtons(); //read the buttons status
+ static uint32_t lastModeChange = 0;
+ if (millis() - getLastButtonPress() < 200)
+ Buttons = 0;
+ //rough prevention for de-bouncing and allocates settling time
+
+ switch (operatingMode) {
+ case STARTUP:
+ if ((millis() - getLastButtonPress() > 1000)) {
+ if (Buttons & BUT_A) {
+ //A key pressed so we are moving to soldering mode
+ operatingMode = SOLDERING;
+ resetLastButtonPress();
+ resetButtons();
+ } else if (Buttons & BUT_B) {
+ //B Button was pressed so we are moving to the Settings menu
+ operatingMode = SETTINGS;
+ resetLastButtonPress();
+ resetButtons();
+ }
+ }
+ //Nothing else to check here
+ break;
+ case SOLDERING:
+ //We need to check the buttons if we need to jump out
+ if (Buttons & BUT_A) {
+ //A key pressed so we are moving to temp set
+ operatingMode = TEMP_ADJ;
+ resetLastButtonPress();
+ resetButtons();
+ } else if (Buttons & BUT_B) {
+ //B Button was pressed so we are moving back to idle
+ operatingMode = COOLING;
+ resetLastButtonPress();
+ resetButtons();
+ } else {
+ //We need to check the timer for movement in case we need to goto idle
+ if (systemSettings.movementEnabled)
+ if (millis() - getLastMovement()
+ > (systemSettings.SleepTime * 60000)) {
+ if (millis() - getLastButtonPress()
+ > (systemSettings.SleepTime * 60000)) {
+ operatingMode = SLEEP;
+ return;
+ }
+ }
+ uint16_t voltage = readDCVoltage(); //get X10 voltage
+ if ((voltage / 10) < systemSettings.cutoutVoltage) {
+ operatingMode = UVLOWARN;
+ resetLastButtonPress();
+ resetButtons();
+ lastModeChange = millis();
+ }
+ //If no buttons pushed we need to perform the PID loop for the iron temp
+ int32_t newOutput = computePID(systemSettings.SolderingTemp);
+
+ setIronTimer(newOutput);
+
+ }
+ break;
+ case TEMP_ADJ:
+ if (Buttons & BUT_A) {
+ //A key pressed so we are moving down in temp
+ resetLastButtonPress();
+ if (systemSettings.SolderingTemp > 1000)
+ systemSettings.SolderingTemp -= 100;
+ } else if (Buttons & BUT_B) {
+ //B key pressed so we are moving up in temp
+ resetLastButtonPress();
+ if (systemSettings.SolderingTemp < 4500)
+ systemSettings.SolderingTemp += 100;
+ } else {
+ //we check the timeout for how long the buttons have not been pushed
+ //if idle for > 3 seconds then we return to soldering
+ if (millis() - getLastButtonPress() > 3000)
+ operatingMode = SOLDERING;
+ }
+ break;
+ case SETTINGS:
+ //Settings is the mode with the most logic
+ //Here we are in the menu so we need to increment through the sub menus / increase the value
+ if (millis() - getLastButtonPress() < 400)
+ return;
+
+ if (Buttons & BUT_A) {
+ resetLastButtonPress();
+ //A key iterates through the menu
+ if (settingsPage == 3) {
+ //Roll off the end
+ settingsPage = 0; //reset
+ operatingMode = STARTUP;
+ saveSettings(); //Save the settings
+ } else
+ ++settingsPage; //move to the next option
+ } else if (Buttons & BUT_B) {
+ resetLastButtonPress();
+ //B changes the value selected
+ switch (settingsPage) {
+ case UVLO:
+ //we are incrementing the cutout voltage
+ systemSettings.cutoutVoltage += 1; //Go up 1V at a jump
+ if (systemSettings.cutoutVoltage > 24)
+ systemSettings.cutoutVoltage = 9;
+ else if (systemSettings.cutoutVoltage < 9)
+ systemSettings.cutoutVoltage = 9; //cant set UVLO below 9V
+ break;
+ case SLEEP_TEMP:
+ systemSettings.SleepTemp += 100; //Go up 10c at a time
+ if (systemSettings.SleepTemp > 3000)
+ systemSettings.SleepTemp = 1000;//cant sleep higher than 300
+ break;
+ case SLEEP_TIME:
+ ++systemSettings.SleepTime; //Go up 1 minute at a time
+ if (systemSettings.SleepTime > 60)
+ systemSettings.SleepTime = 2; //cant set time over an hour
+ //Remember that ^ is the time of no movement
+ break;
+ case MOTIONDETECT:
+ systemSettings.movementEnabled =
+ !systemSettings.movementEnabled;
+ break;
+ default:
+ break;
+ }
+ }
+ break;
+ case SLEEP:
+ //The iron is sleeping at a lower temperature due to lack of movement
+ if (Buttons & BUT_A) {
+ //A Button was pressed so we are moving back to soldering
+ operatingMode = SOLDERING;
+ resetLastButtonPress();
+ resetButtons();
+ return;
+ } else if (Buttons & BUT_B) {
+ //B Button was pressed so we are moving back to soldering
+ operatingMode = SOLDERING;
+ resetLastButtonPress();
+ resetButtons();
+ return;
+ } else if (systemSettings.movementEnabled)
+ if (millis() - getLastMovement() < 1000) {//moved in the last second
+ operatingMode = SOLDERING; //Goto active mode again
+ return;
+ }
+ //else if nothing has been pushed we need to compute the PID to keep the iron at the sleep temp
+ int32_t newOutput = computePID(systemSettings.SleepTemp);
+
+ setIronTimer(newOutput);
+
+ break;
+ case COOLING: {
+ setIronTimer(0); //turn off heating
+ //This mode warns the user the iron is still cooling down
+ uint16_t temp = readIronTemp(0, 1); //take a new reading as the heater code is not taking new readings
+ if (temp < 500) { //if the temp is < 50C then we can go back to IDLE
+ operatingMode = STARTUP;
+ resetLastButtonPress();
+ resetButtons();
+ } else { //we check if the user has pushed a button to ack
+ if ((millis() - getLastButtonPress() > 200)
+ && (millis() - getLastButtonPress() < 2000)) {
+ if (getButtons() && (BUT_A | BUT_B)) {
+ //A button was pushed
+ operatingMode = STARTUP;
+ resetLastButtonPress();
+ resetButtons();
+ }
+ }
+ }
+ }
+ break;
+ case UVLOWARN:
+ //We are here if the DC voltage went too low
+ //We want to jump back to IDLE after a bit
+ if (millis() - lastModeChange > 3000) { //its been 3 seconds
+ operatingMode = STARTUP; //jump back to idle mode
+ }
+ break;
+ default:
+ break;
+ }
+}
+
+void DrawUI() {
+ uint16_t temp = readIronTemp(0, 0) / 10;
+ switch (operatingMode) {
+ case STARTUP:
+ //We are chilling in the idle mode
+ //Check if movement in the last 5 minutes , if not sleep OLED
+ if (millis() - getLastMovement() > (5 * 60 * 1000)
+ && (millis() - getLastButtonPress() > (5 * 60 * 1000))) {
+ //OLED off
+ Oled_DisplayOff();
+ } else {
+ Oled_DisplayOn();
+ OLED_DrawString("IDLE ", 7); //write the word IDLE
+ }
+ break;
+ case SOLDERING:
+ //The user is soldering
+ {
+ if (getIronTimer() == 0) {
+ OLED_DrawChar('C', 14 * 4);
+ } else {
+ if (getIronTimer() < 500) {
+ OLED_DrawChar(' ', 14 * 4);
+ } else { //we are heating
+ OLED_DrawChar('H', 14 * 4);
+ }
+ }
+ OLED_DrawThreeNumber(temp, 0);
+ OLED_DrawChar(' ', 14 * 3);
+ OLED_DrawChar(' ', 14 * 5);
+ OLED_DrawChar(' ', 14 * 6);
+ }
+ break;
+ case TEMP_ADJ:
+ //We are prompting the user to change the temp so we draw the current setpoint temp
+ //With the nifty arrows
+ OLED_DrawChar('<', 0);
+ OLED_DrawThreeNumber(systemSettings.SolderingTemp / 10, 14 * 1);
+ OLED_DrawChar(' ', 14 * 4);
+ OLED_DrawChar('>', 14 * 5);
+ break;
+ case SETTINGS:
+ //We are prompting the user the setting name
+
+ switch (settingsPage) {
+ case UVLO:
+ OLED_DrawString("UVLO", 4);
+ OLED_DrawTwoNumber(systemSettings.cutoutVoltage, 14 * 4);
+ //OLED_DrawChar('V', 14 * 5);
+
+ break;
+ case SLEEP_TEMP:
+ OLED_DrawString("STMP", 4);
+ OLED_DrawThreeNumber(systemSettings.SleepTemp / 10, 14 * 4);
+ //OLED_DrawChar('V', 14 * 5);
+
+ break;
+ case SLEEP_TIME:
+ OLED_DrawString("STME ", 5);
+ OLED_DrawTwoNumber(systemSettings.SleepTime, 14 * 5);
+ break;
+ case MOTIONDETECT:/*Toggle the mode*/
+ if (systemSettings.movementEnabled)
+ OLED_DrawString("MOTN T", 7);
+ else
+ OLED_DrawString("MOTN F", 7);
+ break;
+ default:
+ break;
+ }
+ break;
+ case SLEEP:
+ //The iron is in sleep temp mode
+ //Draw in temp and sleep
+ OLED_DrawString("SLP", 3);
+ OLED_DrawThreeNumber(temp, 14 * 3);
+ break;
+ case COOLING:
+ //We are warning the user the tip is cooling
+ OLED_DrawString("COL", 3);
+ OLED_DrawThreeNumber(temp, 14 * 3);
+ break;
+ case UVLOWARN:
+ OLED_DrawString("UND VL", 6);
+ break;
+ default:
+ break;
+ }
+}
diff --git a/workspace/ts100/src/Oled.c b/workspace/ts100/src/Oled.c
index b4237131..c578a793 100644
--- a/workspace/ts100/src/Oled.c
+++ b/workspace/ts100/src/Oled.c
@@ -1,51 +1,25 @@
-/********************* (C) COPYRIGHT 2015 e-Design Co.,Ltd. **********************
- File Name : Oled.c
- Version : S100 APP Ver 2.11
- Description:
- Author : Celery
- Data: 2015/07/07
- History:
- 2015/07/07 ͳһ������
- *******************************************************************************/
+/*
+ *
+ * OLED.c
+ * Functions for working with the oled screen.
+ * Writes to the screen using I2C
+ */
#include <stdio.h>
#include <string.h>
-#include "APP_Version.h"
+
#include "Oled.h"
#include "Bios.h"
#include "I2C.h"
-#include "Hardware.h"
-#include "Disk.h"
-#include "UI.h"
-
-
-//Setup params depending on oled model
-#ifdef SSD1316
-u8 gOled_param[50] = {0x80,0xAE,0x80,0x00,0x80,0x10,0x80,0x40,0x80,0xB0,0x80,
- 0x81,0x80,0xFF,0x80,0xA0,0x80,0xA6,0x80,0xA8,0x80,0x1F,
- 0x80,0xC8,0x80,0xD3,0x80,0x00,0x80,0xD5,0x80,0x80,0x80,
- 0xD9,0x80,0x22,0x80,0xDA,0x80,0x12,0x80,0xDB,0x80,0x40,
- 0x80,0x8D,0x80,0x14,0x80,0xAF,
-};
-#else
-u8 gOled_param[46] = { 0x80, 0xAE, 0x80, 0xD5, 0x80, 0x52, 0x80, 0xA8, 0x80,
- 0x0f, 0x80, 0xC0, 0x80, 0xD3, 0x80, 0x00, 0x80, 0x40, 0x80, 0xA0, 0x80,
- 0x8D, 0x80, 0x14, 0x80, 0xDA, 0x80, 0x02, 0x80, 0x81, 0x80, 0x33, 0x80,
- 0xD9, 0x80, 0xF1, 0x80, 0xDB, 0x80, 0x30, 0x80, 0xA4, 0x80, 0XA6, 0x80,
- 0xAF };
-#endif
-/*******************************************************************************
- ������: Sc_Pt
- ��������:��Ļ�����ı���Ļ�Աȶ�
- �������:Co��Ļ�ԱȶȲ���
- ���ز���:NULL
- *******************************************************************************/
-void Sc_Pt(u8 Co) //��Ļ����
-{
- u8 pt[4] = { 0x80, 0x81, 0x80, Co };
- I2C_PageWrite(pt, 4, DEVICEADDR_OLED);
-}
+#include "Font.h"
+/*Setup params for the OLED screen*/
+u8 OLED_Setup_Array[46] = { 0x80, 0xAE, 0x80, 0xD5, 0x80, 0x52, 0x80, 0xA8,
+ 0x80, 0x0f, 0x80, 0xC0, 0x80, 0xD3, 0x80, 0x00, 0x80, 0x40, 0x80, 0xA0,
+ 0x80, 0x8D, 0x80, 0x14, 0x80, 0xDA, 0x80, 0x02, 0x80, 0x81, 0x80, 0x33,
+ 0x80, 0xD9, 0x80, 0xF1, 0x80, 0xDB, 0x80, 0x30, 0x80, 0xA4, 0x80, 0XA6,
+ 0x80, 0xAF };
+
/*******************************************************************************
Function: Oled_DisplayOn
Description:Turn on the Oled display
@@ -71,16 +45,16 @@ void Oled_DisplayOff(void) {
Input: number of bytes to write, array to write
Output:
*******************************************************************************/
-u8* Data_Command(u8 wide, u8* ptr) {
+u8* Data_Command(u8 length, u8* data) {
int i;
u8 tx_data[128];
//here are are inserting the data write command at the beginning
tx_data[0] = 0x40;
- wide += 1;
- for (i = 1; i < wide; i++) //Loop through the array of data
- tx_data[i] = *ptr++;
- I2C_PageWrite(tx_data, wide, DEVICEADDR_OLED); //write out the buffer
- return ptr;
+ length += 1;
+ for (i = 1; i < length; i++) //Loop through the array of data
+ tx_data[i] = *data++;
+ I2C_PageWrite(tx_data, length, DEVICEADDR_OLED); //write out the buffer
+ return data;
}
/*******************************************************************************
Function:Set_ShowPos
@@ -89,10 +63,8 @@ u8* Data_Command(u8 wide, u8* ptr) {
*******************************************************************************/
void Set_ShowPos(u8 x, u8 y) {
u8 pos_param[8] = { 0x80, 0xB0, 0x80, 0x21, 0x80, 0x20, 0x80, 0x7F };
-
pos_param[5] = x + 32;
pos_param[1] += y;
-
I2C_PageWrite(pos_param, 8, DEVICEADDR_OLED);
}
@@ -124,20 +96,6 @@ u8* Oled_DrawArea(u8 x0, u8 y0, u8 wide, u8 high, u8* ptr) {
}
/*******************************************************************************
- Function:Clean_Char
- Description:Overwries a square to off, used to overwrite a char
- Inputs:(k) input X position char starts at, (wide) how many pixels wide the char is
- *******************************************************************************/
-void Clean_Char(int k, u8 wide) {
- int i;
- u8 tx_data[128];
-
- memset(&tx_data[0], 0, wide);
- for (i = 0; i < 2; i++) {
- Oled_DrawArea(k, i * 8, wide, 8, tx_data);
- }
-}
-/*******************************************************************************
Function:GPIO_Init_OLED
Description:Init the outputs as needed for the OLED (in this case the RST line)
*******************************************************************************/
@@ -157,17 +115,11 @@ void Init_Oled(void) {
u8 param_len;
OLED_RST();
- Delay_Ms(2);
- OLED_ACT();
- Delay_Ms(2);
-
-#ifdef SSD1316
- param_len = 50;
-#else
+ delayMs(2);
+ OLED_ACT(); //Toggling reset to reset the oled
+ delayMs(2);
param_len = 46;
-#endif
-
- I2C_PageWrite((u8 *) gOled_param, param_len, DEVICEADDR_OLED);
+ I2C_PageWrite((u8 *) OLED_Setup_Array, param_len, DEVICEADDR_OLED);
}
/*******************************************************************************
@@ -176,20 +128,56 @@ void Init_Oled(void) {
*******************************************************************************/
void Clear_Screen(void) {
u8 tx_data[128];
- u8 i, wd;
-
-#ifdef SSD1316
- wd = 32;
-#else
- wd = 16;
-#endif
-
memset(&tx_data[0], 0, 128);
- for (i = 0; i < wd / 8; i++) {
+ for (u8 i = 0; i < 2; i++) {
Oled_DrawArea(0, i * 8, 128, 8, tx_data);
}
}
+void OLED_DrawString(char* string, uint8_t length) {
+ for (uint8_t i = 0; i < length; i++) {
+ OLED_DrawChar(string[i], i * 14);
+ }
+}
+void OLED_DrawChar(char c, uint8_t x) {
+ if ((x) > (128 - 14))
+ return; //Rudimentary clipping to not draw off screen
+ u8* ptr;
+ ptr = (u8*) FONT;
+ if (c >= 'A' && c <= 'Z') {
+ ptr += (c - 'A' + 10) * (14 * 2); //alpha is ofset 10 chars into the array
+ } else if (c >= '0' && c <= '9')
+ ptr += (c - '0') * (14 * 2);
+ else if (c < 10)
+ ptr += (c) * (14 * 2);
+ else if (c == ' ') {
+ //blank on space bar
+ ptr += (36) * (14 * 2);
+ } else if (c == '<') {
+ ptr += (37) * (14 * 2);
+ } else if (c == '>') {
+ ptr += (38) * (14 * 2);
+ }
+
+ Oled_DrawArea(x, 0, 14, 16, (u8*) ptr);
+}
+/*
+ * Draw a 2 digit number to the display
+ * */
+void OLED_DrawTwoNumber(uint8_t in, uint8_t x) {
+ OLED_DrawChar((in / 10) % 10, x);
+ OLED_DrawChar(in % 10, x + 14);
+}
+void OLED_DrawThreeNumber(uint16_t in, uint8_t x) {
-/******************************** END OF FILE *********************************/
+ OLED_DrawChar((in / 100) % 10, x);
+ OLED_DrawChar((in / 10) % 10, x + 14);
+ OLED_DrawChar(in % 10, x + 28);
+}
+void OLED_DrawFourNumber(uint16_t in, uint8_t x) {
+ OLED_DrawChar((in / 1000) % 10, x);
+ OLED_DrawChar((in / 100) % 10, x + 14);
+ OLED_DrawChar((in / 10) % 10, x + 28);
+ OLED_DrawChar(in % 10, x + 42);
+}
diff --git a/workspace/ts100/src/PID.c b/workspace/ts100/src/PID.c
new file mode 100644
index 00000000..b086f0ea
--- /dev/null
+++ b/workspace/ts100/src/PID.c
@@ -0,0 +1,41 @@
+/*
+ * PID.c
+ *
+ * Created on: 20 Sep 2016
+ * Author: ralim
+ */
+
+#include "PID.h"
+#define MAXPIDOUTPUT 50000
+//This function computes the new value for the ON time of the system
+//This is the return value from this function
+int32_t computePID(uint16_t setpoint) {
+ int32_t ITerm = 0;
+ static int16_t lastReading = 0;
+ uint16_t currentReading = readIronTemp(0, 1); //get the current temp of the iron
+ int16_t error = (int16_t) setpoint - (int16_t) currentReading; //calculate the error term
+ ITerm += (pidSettings.ki * error);
+ if (ITerm > MAXPIDOUTPUT)
+ ITerm = MAXPIDOUTPUT;
+ else if (ITerm < 0)
+ ITerm = 0; //cap at 0 since we cant force the iron to cool itself :)
+
+ int16_t DInput = (currentReading - lastReading); //compute the input to the D term
+ int32_t output = (pidSettings.kp * error) + (ITerm)
+ - (pidSettings.kd * DInput);
+ if (output > MAXPIDOUTPUT)
+ output = MAXPIDOUTPUT;
+ else if (output < 0)
+ output = 0;
+
+ lastReading = currentReading; //storing values for next iteration of the loop
+ return output;
+
+}
+/*Sets up the pid values*/
+void setupPID(void) {
+ pidSettings.kp = 22;
+ pidSettings.ki = 7;
+ pidSettings.kd = 2;
+
+}
diff --git a/workspace/ts100/src/Settings.c b/workspace/ts100/src/Settings.c
new file mode 100644
index 00000000..849a6dc9
--- /dev/null
+++ b/workspace/ts100/src/Settings.c
@@ -0,0 +1,52 @@
+/*
+ * Settings.c
+ *
+ * Created on: 29 Sep 2016
+ * Author: Ralim
+ *
+ * This file holds the users settings and saves / restores them to the devices flash
+ */
+
+#include "Settings.h"
+#define FLASH_ADDR (0x8000000|48896)
+void saveSettings() {
+//First we erase the flash
+ FLASH_Unlock(); //unlock flash writing
+ FLASH_ClearFlag(FLASH_FLAG_EOP | FLASH_FLAG_PGERR | FLASH_FLAG_WRPRTERR);
+ while (FLASH_ErasePage(FLASH_ADDR) != FLASH_COMPLETE)
+ ; //wait for it
+ //erased the chunk
+ //now we program it
+ uint16_t *data = (uint16_t*) &systemSettings;
+ for (uint8_t i = 0; i < (sizeof(systemSettings) / 2); i++) {
+ FLASH_ProgramHalfWord(FLASH_ADDR + (i * 2), data[i]);
+ }
+}
+
+void restoreSettings() {
+ //We read the flash
+ uint16_t *data = (uint16_t*) &systemSettings;
+ for(uint8_t i=0;i<(sizeof(systemSettings)/2);i++)
+ {
+ data[i] = *(uint16_t *)(FLASH_ADDR + (i*2));
+ }
+ //if the version is correct were done
+ //if not we reset and save
+ if (systemSettings.version != SETTINGSVERSION) {
+ //probably not setup
+ resetSettings();
+ saveSettings();
+ }
+
+}
+
+void resetSettings() {
+
+ systemSettings.SleepTemp = 900;
+ systemSettings.SleepTime = 1;
+ systemSettings.SolderingTemp = 3200;
+ systemSettings.movementEnabled = 1; //we use movement detection
+ systemSettings.cutoutVoltage = 9;
+ systemSettings.version=SETTINGSVERSION;
+}
+
diff --git a/workspace/ts100/src/UI.c b/workspace/ts100/src/UI.c
deleted file mode 100644
index 4f925517..00000000
--- a/workspace/ts100/src/UI.c
+++ /dev/null
@@ -1,1036 +0,0 @@
-/********************* (C) COPYRIGHT 2015 e-Design Co.,Ltd. **********************
- File Name : UI.c
- Version : S100 APP Ver 2.11
- Description:
- Author : Celery
- Data: 2015/08/03
- History:
- 2015/07/07 ͳһ������
- 2015/08/03 �Ż��ƶ��ж�
- *******************************************************************************/
-#include <stdio.h>
-#include <string.h>
-#include "APP_Version.h"
-#include "UI.h"
-#include "CTRL.h"
-#include "WordLib.h"
-#include "Bios.h"
-#include "Oled.h"
-#include "Hardware.h"
-#include "Disk.h"
-#include "MMA8652FC.h"
-/******************************************************************************/
-u8 gTemp_array[16 * 16 + 16];
-u8 gTemperatureshowflag = 0;
-u8 gUp_flag = 0, gDown_flag = 0, gLevel_flag = 0, gTempset_showctrl = 0;
-u16 gTemp_array_u16[208];
-u16 gSet_table[2] = { 4000, 1000 };
-u32 gCont = 0;
-/******************************************************************************/
-
-/*******************************************************************************
- Function:
- Description:
- *******************************************************************************/
-u32 Get_UpdataFlag(void) {
- return gCont;
-}
-/*******************************************************************************
- Function:
- Description:
- *******************************************************************************/
-void Set_UpdataFlag(u32 cont) {
- gCont = cont;
-}
-/*******************************************************************************
- Function:
- Description:
- *******************************************************************************/
-void Set_TemperatureShowFlag(u8 flag) {
- gTemperatureshowflag = flag;
-}
-/*******************************************************************************
- Function:
- Description:Ö¾
- *******************************************************************************/
-u8 Get_TemperatureShowFlag(void) {
- return gTemperatureshowflag;
-}
-/*******************************************************************************
- Function:
- Description: Converts F to C or C to F.
- Input: flag = if flag==0 converts C to F
- *******************************************************************************/
-s16 TemperatureShow_Change(u8 flag, s16 tmp) {
- if (flag == 0) {
- return (320 + tmp * 9 / 5);
- } else {
- return (5 * tmp - 1600) / 9;
- }
-}
-/*******************************************************************************
- Function:APP_Init
- Description:Init the operating mode by looking at input voltage to pick USB or normal
- *******************************************************************************/
-void APP_Init(void) {
- int rev;
-
- HEATING_TIMER= 0;
- UI_TIMER= 0;
-
- rev = Read_Vb(0); //Read input voltage
- if (rev == 0) //no input volatage == error state
- Set_CtrlStatus(ALARM);
- else if (rev >= 4) { //We are USB powered (5V approx at input)
- Set_LongKeyFlag(1);
- Set_CtrlStatus(CONFIG);
- } else { //Normal mode > ~9V at input
- Set_CtrlStatus(IDLE);
- G6_TIMER= device_info.idle_time;
- }
-
-}
-
-/*******************************************************************************
- Function:
- Description:
- *******************************************************************************/
-void Display_Temp(u8 x, s16 temp) {
- char Str[8];
-
- memset(Str, 0x0, 6);
- sprintf(Str, "%d", temp);
-
- if (gTemperatureshowflag == 0) {
- if (temp > 99)
- Str[3] = 'C';
- else if (temp > 9) {
- Str[2] = 'C';
- Str[3] = ' ';
- } else if (temp < 0) {
- if (temp + 9 >= 0) {
- Str[2] = 'C';
- Str[3] = ' ';
- } else {
- Str[3] = 'C';
- }
- } else {
- Str[1] = 'C';
- Str[2] = ' ';
- Str[3] = ' ';
- }
- } else {
- if (temp > 99)
- Str[3] = 'E';
- else if (temp > 9) {
- Str[2] = 'E';
- Str[3] = ' ';
- } else if (temp < 0) {
- if (temp + 9 >= 0) {
- Str[2] = 'E';
- Str[3] = ' ';
- } else {
- Str[3] = 'E';
- }
- } else {
- Str[1] = 'E';
- Str[2] = ' ';
- Str[3] = ' ';
- }
- }
- Display_Str(x, Str);
- TEMPSHOW_TIMER= 20; //200ms
-}
-/*******************************************************************************
- Function:
- Description:
- *******************************************************************************/
-void Show_Notice(void) {
- int j, k;
- static u8* ptr0;
- static u8 posi = 0, i = 0;
-
- if (i == 0) { //1
- ptr0 = Oled_DrawArea(0, 0, 96, 16, (u8*) Maplib);
- } else if (i == 1) { //2
- ptr0 = Oled_DrawArea(0, 0, 96, 16, ptr0);
- } else if (i == 2) { //3
- ptr0 = Oled_DrawArea(0, 0, 96, 16, (u8*) Maplib);
- } else if (i == 3) { //4
- for (j = 0; j < 6; j++) {
- k = 84;
- while (k >= posi) {
- ptr0 = (u8*) Maplib1 + j * 28;
- Clean_Char(k + 7, 14);
- ptr0 = Oled_DrawArea(k, 0, 14, 16, ptr0);
- k -= 7;
- Delay_Ms(10);
- }
- posi += 14;
- }
- posi = 0;
- }
- i++;
- if (i == 4)
- i = 0;
-}
-
-/*******************************************************************************
- Function:
- Description: Draws the word CONFIG to the screen
- *******************************************************************************/
-void Show_Config(void) {
- u8* ptr;
- u8 j;
-
- ptr = (u8*) Config;
- for (j = 0; j < 6; j++) {
- ptr = Oled_DrawArea(j * 16, 0, 16, 16, ptr);
- }
-}
-
-/*******************************************************************************
- Function:
- Description:
- *******************************************************************************/
-void Show_TempDown(s16 temp, s16 dst_temp) {
- static u8 guide_ui = 0;
- char str[8];
-
- memset(str, 0x0, 6);
- sprintf(str, "%d", temp);
- if (gTemperatureshowflag == 0) {
- if (temp > 99)
- str[3] = 'C';
- else {
- str[2] = 'C';
- str[3] = ' ';
- }
- } else {
- if (temp > 99)
- str[3] = 'E';
- else {
- str[2] = 'E';
- str[3] = ' ';
- }
- }
-
- Display_Str10(1, str);
-
- Oled_DrawArea(41, 0, 16, 16, (u8*) (Guide + (guide_ui++) * 32));
-
- if (guide_ui == 3)
- guide_ui = 0;
-
- memset(str, 0x0, 6);
- sprintf(str, "%d", dst_temp);
- if (gTemperatureshowflag == 0) {
- if (temp > 99)
- str[3] = 'C';
- else {
- str[2] = 'C';
- str[3] = ' ';
- }
- } else {
- if (temp > 99)
- str[3] = 'E';
- else {
- str[2] = 'E';
- str[3] = ' ';
- }
- }
-
- Display_Str10(56, str);
-}
-/*******************************************************************************
- Function:
- Description:
- *******************************************************************************/
-void Show_Cal(u8 flag) {
- u8 i;
- u8* ptr = 0;
-
- if (flag == 1)
- ptr = (u8*) Cal_Done;
- else if (flag == 2)
- ptr = (u8*) Cal_UnDone;
-
- ptr = Oled_DrawArea(0, 0, 16, 16, (u8*) ptr);
-
- for (i = 1; i < 6; i++)
- ptr = Oled_DrawArea(16 * i, 0, 16, 16, (u8*) ptr);
- Delay_Ms(1000);
- Clear_Watchdog();
-}
-/*******************************************************************************
- Function:
- Description:
- *******************************************************************************/
-void Show_Warning(void) {
- u8 i;
- u8* ptr = 0;
- static u8 flag = 0;
-
- switch (Get_AlarmType()) {
- case HIGH_TEMP:
- ptr = (u8*) Warning;
- break;
- case SEN_ERR:
- ptr = (u8*) SenErr;
- break;
- case HIGH_VOLTAGE:
- ptr = (u8*) HighVt;
- break;
- case LOW_VOLTAGE:
- ptr = (u8*) LowVot;
- break;
- }
-
- Oled_DrawArea(0, 0, 16, 16, (u8*) Warning + 20 * 7);
- if (flag == 0) {
- for (i = 2; i < 9; i++)
- Oled_DrawArea(10 * i, 0, 10, 16, (u8*) ptr + (i - 2) * 20);
- flag = 1;
- } else {
- Clean_Char(16, 80);
- flag = 0;
- }
-}
-
-/*****************************************************************
- Function: Show_Triangle
- Description:Draws in a triangle
- Input:(empty_trgl)
-
- empty_trgl: 0,1,2 ���Ӵ�,��Ӵ�,�ҼӴ�
- fill_trgl: 0,1,2 ��ʵ��,��ʵ��,��ʵ��
- *******************************************************************/
-void Show_Triangle(u8 empty_trgl, u8 fill_trgl) {
- u8* ptr;
- ptr = (u8*) Triangle; //Get pointer to the pre-computed triangle array
- if ((empty_trgl == 0) && (fill_trgl == 0)) {
- ptr = Oled_DrawArea(0, 0, 16, 16, (u8*) ptr);
- ptr = Oled_DrawArea(5 * 16, 0, 16, 16, (u8*) ptr);
- } else if ((empty_trgl != 0) && (fill_trgl == 0)) {
- if (empty_trgl == 1) {
- ptr += 32;
- Oled_DrawArea(5 * 16, 0, 16, 16, (u8*) ptr);
- ptr += 32;
- Oled_DrawArea(0, 0, 16, 16, (u8*) ptr);
- } else if (empty_trgl == 2) {
- Oled_DrawArea(0, 0, 16, 16, (u8*) ptr);
- ptr += 32 * 3;
- Oled_DrawArea(5 * 16, 0, 16, 16, (u8*) ptr);
- }
- } else if ((empty_trgl == 0) && (fill_trgl != 0)) {
- if (fill_trgl == 1) {
- ptr += 32;
- Oled_DrawArea(5 * 16, 0, 16, 16, (u8*) ptr);
- ptr += 32 * 3;
- Oled_DrawArea(0, 0, 16, 16, (u8*) ptr);
- } else if (fill_trgl == 2) {
- Oled_DrawArea(0, 0, 16, 16, (u8*) ptr);
- ptr += 32 * 5;
- Oled_DrawArea(5 * 16, 0, 16, 16, (u8*) ptr);
- }
- }
-}
-/*******************************************************************************
- ������: Shift_Char
- ��������:�ַ����������ƶ���ָ��λ��
- �������:ptr �ƶ����ַ� pos �ƶ�����ָ��λ��
- ���ز���:NULL
- *******************************************************************************/
-void Shift_Char(u8* ptr, u8 pos) {
- int k;
- u8* ptr0;
-
- k = 80;
- pos = pos * 16; //λ��* �ַ�= �ַ�����λ��
- while (k >= pos) {
- ptr0 = (u8*) ptr;
- Clean_Char(k + 16, 16);
- ptr0 = Oled_DrawArea(k, 0, 16, 16, (u8*) ptr0);
- k -= 16;
- Delay_Ms(25);
- }
-}
-
-/*******************************************************************************
- Function:Show_Set
- Description: Show the setpoint temp on the Oled
- *******************************************************************************/
-void Show_Set(void) {
- u8 m, k;
- s16 num_temp;
-
- if (Get_TemperatureShowFlag() == 1) {
- num_temp = TemperatureShow_Change(0, device_info.t_work);
- } else {
- num_temp = device_info.t_work;
- }
-
- Shift_Char((u8*) Triangle + 0 * 32, 0);
- m = num_temp / 1000; //��
- Shift_Char((u8*) wordlib + m * 32, 1);
- k = (num_temp - m * 1000) / 100; //Ê®
- Shift_Char((u8*) wordlib + k * 32, 2);
- m = (num_temp - m * 1000 - k * 100) / 10;
- Shift_Char((u8*) wordlib + m * 32, 3);
- Shift_Char((u8*) wordlib + 13 * 32, 4);
- Shift_Char((u8*) Triangle + 1 * 32, 5);
-}
-/*******************************************************************************
- ������: Show_OrderChar
- ��������:����̬��ʾ�ַ�
- �������: ptr:�ֽڿ�num:����width:���
- ���ز���:NULL
- *******************************************************************************/
-void Show_OrderChar(u8* ptr, u8 num, u8 width) {
- static u8 i = 1, j = 0, k = 0, m = 10;
- //i��Դ���鿪ʼλ
- //j��Ŀ�����鿪ʼλ
- //m�������ij���
-
- if (gLevel_flag == 0) { //ǰһ״̬���Ǻ���
- i = 1;
- j = 0;
- m = 8;
- gUp_flag = 0;
- gDown_flag = 0;
- gLevel_flag = 1;
- }
-
- if (i == 0) {
- for (k = 0; k <= m; k++) {
- gTemp_array[k] = *(ptr + 52 + j + k - 1);
- gTemp_array[k + width] = *(ptr + 52 + width + k + j - 1);
- }
- m++;
- j--;
- if (m == 11) {
- m--;
- j = 0;
- i = 1;
- return;
- }
- }
-
- if (j == 0) {
- for (k = 1; k < m; k++) {
- gTemp_array[k + i] = *(ptr + 52 + j + k - 1);
- gTemp_array[k + i + width] = *(ptr + 52 + width + k + j - 1);
- }
- m--;
- i++;
- if (m == 0) {
- m++;
- j = 9;
- i = 0;
- }
- }
-}
-
-/*******************************************************************************
- Function:Reverse_Bin8
- Description:Reverses the bit order of a uint8_t
- Input:Value to reverse
- Output:Reversed Value
- *******************************************************************************/
-u8 Reverse_Bin8(u8 data) {
- u8 i, cache, result = 0;
-
- for (i = 0; i < 8; i++) {
- cache = data & (1 << i);
- if (i < 4) {
- cache <<= 7 - 2 * i;
- } else {
- cache >>= 2 * i - 7;
- }
- result += cache;
- }
- return result;
-}
-/*******************************************************************************
- ������: Show_ReverseChar
- ��������:����̬��ʾ�ַ�
- �������: ptr:�ֽڿ� num:����
- width:��� direction :���� (0 up, 1 down)
- ���ز���:NULL
- *******************************************************************************/
-void Show_ReverseChar(u8* ptr, u8 num, u8 width, u8 direction) {
- static u32 j = 0, m = 0, po_j[3] = { 0, 0, 0 }, po_m[3] = { 0, 0, 16 };
- u32 i, k;
-
- if (direction == 0) { //up
- if (gUp_flag == 0) { //ǰһ״̬���Ǽ���
- j = 0;
- m = 0;
- gUp_flag = 1;
- gDown_flag = 0;
- gLevel_flag = 0;
- } else {
- j = po_j[0];
- m = po_m[0];
- }
- } else if (direction == 1) {
- if (gDown_flag == 0) { //ǰһ״̬���ǽ���
- j = 0;
- m = 0;
- gUp_flag = 0;
- gDown_flag = 1;
- gLevel_flag = 0;
- } else {
- j = po_j[1];
- m = po_m[1];
- }
- } else {
- j = po_j[2];
- m = po_m[2];
- }
- for (i = 0; i < width * 2 * num; i++)
- gTemp_array[i] = Reverse_Bin8(*(ptr + i)); //����8λ
-
- for (k = 0; k < width * 2 * num; k += width * 2)
- for (i = 0; i < width; i++) {
- gTemp_array_u16[i + k] = ((gTemp_array[i + k] & 0x00FF) << 8)
- | gTemp_array[i + k + width]; //�ϰ벿�°벿���u16 ������λ
- if (direction == 1) {
- if (j == 0)
- gTemp_array_u16[i + k] <<= m; //����գ�������ʾ
- else
- gTemp_array_u16[i + k] >>= j; //����գ�������ʾ
- } else { //��
- if (m == 0)
- gTemp_array_u16[i + k] <<= j; //����գ�������ʾ
- else
- gTemp_array_u16[i + k] >>= m; //����գ�������ʾ
- }
- gTemp_array[i + k] = (gTemp_array_u16[i + k] & 0xFF00) >> 8;
- gTemp_array[i + k + width] = gTemp_array_u16[i + k] & 0x00FF;
- }
-
- for (i = 0; i < width * 2 * num; i++)
- gTemp_array[i] = Reverse_Bin8(gTemp_array[i]); //���������
-
- if (m == 0 && j == 16) { //ȫ��ʾ������ʾ'ͷ��'
- j = 0;
- m = 16;
- }
- if (m == 0)
- j++;
- else
- m--;
-
- if (direction == 0) { //up
- po_j[0] = j;
- po_m[0] = m;
- } else if (direction == 1) {
- po_j[1] = j;
- po_m[1] = m;
- } else {
- po_j[2] = j;
- po_m[2] = m;
- }
-}
-
-/*******************************************************************************
- Show_TempReverse ����̬��ʾ�¶��ַ�
- word_num: ����
- word_width: ���
- direction : ���� (0 up, 1 down)
- *******************************************************************************/
-u8 Show_TempReverse(u8 num, u8 width, u8 direction) {
- static int i, j = 0, m = 16, k;
- u8 g, s, b;
- u8* ptr;
- s16 num_temp;
-
- if (Get_TemperatureShowFlag() == 1) {
- num_temp = TemperatureShow_Change(0, device_info.t_work);
- } else {
- num_temp = device_info.t_work;
- }
-
- num_temp = num_temp / 10;
- b = num_temp / 100;
- s = (num_temp - b * 100) / 10;
- g = (num_temp - b * 100 - s * 10);
-
- if (gTempset_showctrl == 1) {
- j = 1;
- m = 0;
- gTempset_showctrl = 0;
- } else if (gTempset_showctrl == 2) {
- j = 0;
- m = 16;
- gTempset_showctrl = 0;
- }
- for (i = 0; i < width * 2; i++) {
- gTemp_array[0 * 32 + i] = Reverse_Bin8(*(wordlib + b * 32 + i)); //����8λ
- gTemp_array[1 * 32 + i] = Reverse_Bin8(*(wordlib + s * 32 + i)); //����8λ
- gTemp_array[2 * 32 + i] = Reverse_Bin8(*(wordlib + g * 32 + i)); //����8λ
- if (Get_TemperatureShowFlag() == 1) {
- gTemp_array[3 * 32 + i] = Reverse_Bin8(*(wordlib + 15 * 32 + i)); //����8λ
- } else {
- gTemp_array[3 * 32 + i] = Reverse_Bin8(*(wordlib + 13 * 32 + i)); //����8λ
- }
- }
- //�޸�K �ij�ʼֵ�ܸı俪ʼ�������ַ�λ�ø�λ����ʮλ���ǰ�λ
- for (k = (3 - num) * width * 2; k < width * 2 * 3; k += width * 2)
- for (i = 0; i < width; i++) {
- gTemp_array_u16[i + k] = ((gTemp_array[i + k] & 0x00FF) << 8)
- | gTemp_array[i + k + width]; //�ϰ벿�°벿���u16 ������λ
- if (direction == 0) { //��
- if (m == 0)
- gTemp_array_u16[i + k] <<= j; //����գ�������ʾ
- else
- gTemp_array_u16[i + k] >>= m; //����գ�������ʾ
- } else {
- if (j == 0)
- gTemp_array_u16[i + k] <<= m; //����գ�������ʾ
- else
- gTemp_array_u16[i + k] >>= j; //����գ�������ʾ
- }
- gTemp_array[i + k] = (gTemp_array_u16[i + k] & 0xFF00) >> 8;
- gTemp_array[i + k + width] = gTemp_array_u16[i + k] & 0x00FF;
- }
- for (i = 0; i < width * 2; i++) {
- gTemp_array[0 * 32 + i] = Reverse_Bin8(gTemp_array[0 * 32 + i]);
- gTemp_array[1 * 32 + i] = Reverse_Bin8(gTemp_array[1 * 32 + i]);
- gTemp_array[2 * 32 + i] = Reverse_Bin8(gTemp_array[2 * 32 + i]);
- gTemp_array[3 * 32 + i] = Reverse_Bin8(gTemp_array[3 * 32 + i]);
- }
-
- ptr = (u8*) gTemp_array;
- for (i = 1; i <= 4; i++)
- ptr = Oled_DrawArea(16 * i, 0, 16, 16, (u8*) ptr);
- if ((m == 0 && j == 0) || (m == 0 && j == 16))
- return 0;
- if (m == 0)
- j++;
- else
- m--;
- return 1;
-}
-
-/*******************************************************************************
- ������: Show_HeatingIcon
- ��������:��̬ѡ����ȵ�״̬��ʶ
- �������: ht_flag ���±�ʾ active �ƶ���ʶ
- ���ز���:NULL
- *******************************************************************************/
-void Show_HeatingIcon(u32 ht_flag, u16 active) {
- u8* ptr;
-
- memset(gTemp_array, 0, 20);
- if (ht_flag == 0)
- Show_ReverseChar((u8*) TempIcon, 1, 10, 0); //(5,ptr,16);//����//
- else if (ht_flag == 1)
- Show_ReverseChar((u8*) TempIcon + 32, 1, 10, 1); //(5,ptr+32,16);//����//
- else if (ht_flag == 2)
- Show_OrderChar((u8*) TempIcon, 1, 10); //(5,ptr+64,16);//����//
-
- ptr = (u8*) gTemp_array;
- Oled_DrawArea(86, 0, 10, 16, (u8*) ptr);
-
- if (Get_CtrlStatus() == WAIT)
- Oled_DrawArea(80, 0, 6, 16, (u8*) IhIcon + 12);
- else {
- if (active == 0)
- Oled_DrawArea(80, 0, 6, 16, (u8*) TempIcon + 20);
- else
- Oled_DrawArea(80, 0, 6, 16, (u8*) IhIcon);
- }
-}
-/*******************************************************************************
- ������: Display_Str
- ��������:��ʾ16*16�ַ���
- �������:x: λ�� str :��ʾ�ַ���
- ���ز���:NULL
- *******************************************************************************/
-void Display_Str(u8 x, char* str) {
- u8* ptr;
- u8 temp;
-
- if ((x < 1) || (x > 8))
- x = 0;
- else
- x--;
- while (*str != 0) {
- temp = *str++;
- if (temp == ' ')
- temp = 10;
- else if (temp == '-')
- temp = 12;
- else {
- if ((temp >= 0x30) && (temp < 0x3a))
- temp = temp - 0x30; /* 0 --9 */
- else {
- if ((temp >= 0x41) && (temp <= 0x46))
- temp = temp - 0x41 + 11;/*ABD*/
- else
- return;
- }
- }
- ptr = (u8*) wordlib;
- ptr += temp * 32;
- Oled_DrawArea(x * 16, 0, 16, 16, (u8*) ptr);
- x++;
- }
-}
-/*******************************************************************************
- ������: Display_Str10
- ��������:��ʾ���Ϊ10���ַ���
- �������:x: λ�� str :��ʾ�ַ���
- ���ز���:NULL
- *******************************************************************************/
-void Display_Str10(u8 x, char* str) {
- u8* ptr;
- u8 temp;
- u8 position = 0;
-
- while (*str != 0) {
- temp = *str++;
- if (temp == 'C')
- temp = 11;
- else if (temp == 'E')
- temp = 12;
- else {
- if ((temp >= 0x30) && (temp < 0x3a))
- temp = temp - 0x30; /* 0 --9 */
- else {
- temp = 10;
- }
- }
- ptr = (u8*) Number10;
- ptr += temp * 20;
- Oled_DrawArea(x + position * 10, 0, 10, 16, (u8*) ptr);
- position++;
- }
-}
-
-/*******************************************************************************
- ������: Print_Integer
- ��������:�������ݴ�ӡ����
- �������:data ����,posi �
- ���ز���:NULL
- *******************************************************************************/
-void Print_Integer(s32 data, u8 posi) {
- char str[8];
-
- Clear_Screen();
- sprintf(str, "%d", data);
- Display_Str(posi, str);
-}
-/*******************************************************************************
- ������: Calculation_TWork
- ��������:���������¶ȵ�ֵ(�Ӽ����ò�����Ľ��)
- �������:Flag (0+ or 1-)
- ���ز���:�¶ȼӼ����ò�����Ľ��
- *******************************************************************************/
-u32 Calculation_TWork(u8 Flag) {
- s16 num_temp;
-
- if (Get_TemperatureShowFlag() == 1) {
- num_temp = TemperatureShow_Change(0, device_info.t_work);
- if (Flag == 0)
- num_temp += device_info.t_step;
- else
- num_temp -= device_info.t_step;
- return TemperatureShow_Change(1, num_temp);
- } else {
- if (Flag == 0)
- return (device_info.t_work + device_info.t_step);
- else
- return (device_info.t_work - device_info.t_step);
- }
-}
-/*******************************************************************************
- ������: Roll_Num
- ��������:�����У���Ҫ�������¶�ֵ��λ��
- �������:step ����,Flag (0+ or 1-)
- ���ز���:��Ҫ�����ĸ���
- *******************************************************************************/
-u8 Roll_Num(u16 step, u8 flag) {
- u16 b1, b2, g1, g2;
- s16 num_temp;
-
- if (Get_TemperatureShowFlag() == 1) {
- num_temp = TemperatureShow_Change(0, device_info.t_work);
- } else {
- num_temp = device_info.t_work;
- }
- b2 = (num_temp) / 1000;
- g2 = (num_temp) / 100;
-
- if (flag == 0) {
- b1 = (num_temp + step) / 1000;
- g1 = (num_temp + step) / 100;
- if (b1 != b2)
- return 3;
- else if (g1 != g2)
- return 2;
- else
- return 1;
- } else {
- b1 = (num_temp - step) / 1000;
- g1 = (num_temp - step) / 100;
-
- if (b1 != b2)
- return 3;
- else if (g1 != g2)
- return 2;
- else
- return 1;
- }
-}
-/*******************************************************************************
- ������: Temp_SetProc
- ��������:�����¶�
- �������:NULL
- ���ز���:NULL
- *******************************************************************************/
-void Temp_SetProc(void) {
- u8 theRoll_num = 3;
- static u16 cont = 0;
-
- if (device_info.t_step == 10)
- cont = 1;
-
- if (EFFECTIVE_KEY_TIMER> 0) {
- if(gCont != 0) {
- //���ý�������������
- gCont = 0;
- Set_LongKeyFlag(0);
- Clear_Screen();
-
- Show_Set();
- }
- switch(Get_gKey()) {
- case KEY_V1:
- //����,���·�,��ǰ����ʾ��ʧ
- //����ֵ����
- if(device_info.t_work > gSet_table[1]) {
- gTempset_showctrl = 1;
- theRoll_num = Roll_Num(device_info.t_step,1);
- while(Show_TempReverse(theRoll_num,16,1));
- device_info.t_work = Calculation_TWork(1);
- if(device_info.t_work < gSet_table[1]) device_info.t_work = gSet_table[1];
- gTempset_showctrl = 2;
- while(Show_TempReverse(theRoll_num,16,1));
- Show_Triangle(1,0);
- }
- if(device_info.t_work == gSet_table[1]) Show_Triangle(0,1);
- break;
- case KEY_V2:
- //����,���Ϸ�,��ǰ����ʾ��ʧ
- //����ֵ����
- if(device_info.t_work < gSet_table[0]) {
- gTempset_showctrl = 1;
- theRoll_num = Roll_Num(device_info.t_step,0);
- while(Show_TempReverse(theRoll_num,16,0));
- device_info.t_work = Calculation_TWork(0);
- if(device_info.t_work > gSet_table[0]) device_info.t_work = gSet_table[0];
- gTempset_showctrl = 2;
- while(Show_TempReverse(theRoll_num,16,0));
- Show_Triangle(2,0);
- }
-
- if(device_info.t_work == gSet_table[0]) Show_Triangle(0,2);
- break;
- default:
- break;
- }
- if(Get_gKey() > NO_KEY) {
- if(cont > 0 && EFFECTIVE_KEY_TIMER > 260) {
- device_info.t_step = 10 + cont * 50;
- cont++;
- }
- EFFECTIVE_KEY_TIMER = 300;
- Set_gKey(NO_KEY);
- }
- if(cont > 0 && EFFECTIVE_KEY_TIMER <= 260) {
- device_info.t_step = 10;
- cont = 1;
- }
- }
-}
-
-/*******************************************************************************
- Function:
- Description: This function draws in the appropriate content to the Oled as per the current program status
- *******************************************************************************/
-void OLed_Display(void) {
- u16 ht_flag;
- s16 temp_val, dst_temp;
- static u8 td_flag = 0, config_show = 0;
- static u16 td_cnt = 0;
- static u16 bk = 0x33, id_cnt = 0;
-
- switch (Get_CtrlStatus()) {
- case IDLE:
- if (gCont == 1) {
- gCont = 0;
- Clear_Screen();
- }
-
- if (UI_TIMER== 0 && G6_TIMER != 0) {
- Show_Notice();
- UI_TIMER = 50;
- }
- if(G6_TIMER == 0) { //����
- id_cnt++;
- if(id_cnt == 50)Sc_Pt(bk--);
- if(bk == 0) Oled_DisplayOff();
- }
- if((Get_MmaShift() == 1) || (Get_gKey() != NO_KEY)) {
- G6_TIMER = device_info.idle_time; //reset the idle timer
- bk = 0x33;
- Sc_Pt(bk);
- Oled_DisplayOn();
- }
- break;
- case TEMP_CTR:
- if(gCont == 0) {
- gCont = 1;
- Set_LongKeyFlag(1);
- Clear_Screen();
- }
- ht_flag = Get_HtFlag();
- if(ht_flag != 1) {
- if(td_flag == 1) Clear_Screen();
- td_cnt = 0;
- td_flag = 0;
- }
-
- if(td_cnt == 75 && td_flag == 0) {
- Clear_Screen();
- td_flag = 1;
- }
-
- if(td_flag && UI_TIMER == 0) {
- temp_val = Get_TempVal();
- dst_temp = device_info.t_work;
- if(Get_TemperatureShowFlag() == 1) {
- temp_val = TemperatureShow_Change(0,temp_val);
- dst_temp = TemperatureShow_Change(0,dst_temp);
- }
- Show_TempDown(temp_val,dst_temp);
- UI_TIMER = 50;
- }
- if((TEMPSHOW_TIMER == 0) && (!td_flag)) {
- temp_val = Get_TempVal();
- if((temp_val > device_info.t_work) && (temp_val - device_info.t_work < 18)) temp_val = device_info.t_work;
- else if((temp_val <= device_info.t_work) && (device_info.t_work - temp_val < 18)) temp_val = device_info.t_work;
- if(Get_TemperatureShowFlag() == 1) {
- temp_val = TemperatureShow_Change(0,temp_val);
- }
-
- Display_Temp(1,temp_val/10);
- Show_HeatingIcon(ht_flag,Get_MmaActive()); //0����1����2����
- td_cnt++;
- }
- break;
- case TEMP_SET:
- Temp_SetProc(); //����
- break;
- case CONFIG:
- if(gCont == 1) {
- gCont = 0;
- Clear_Screen();
- }
- switch(Get_gKey()) {
- case KEY_CN|KEY_V1:
- config_show = 1;
- break;
- case KEY_CN|KEY_V2:
- config_show = 2;
- break;
- case KEY_CN|KEY_V3:
- config_show = 0;
- break;
- default:
- break;
- }
- if(config_show == 0) {
- Show_Config();
- }
- if(config_show != 3) {
- Set_gKey(NO_KEY);
- config_show = 3;
- }
- break;
- case THERMOMETER:
- if(gCont == 0) {
- gCont = 1;
- Clear_Screen();
- }
- if(gCalib_flag != 0) {
- //��ʾУ׼���
- Show_Cal(gCalib_flag);
- gCalib_flag = 0;
- Clear_Screen();
- }
- if(UI_TIMER == 0) {
- temp_val = Get_Temp(0);
- if(Get_TemperatureShowFlag() == 1) {
- temp_val = TemperatureShow_Change(0,temp_val);
- }
- Display_Temp(1,temp_val/10);
- Display_Str(6,"F");
- UI_TIMER = 20;
- }
- break;
- case ALARM:
- if(gCont == 0) {
- gCont = 1;
- Clear_Screen();
- }
- if(gCont == 1 && UI_TIMER == 0) {
- Show_Warning();
- UI_TIMER = 50;
- }
- break;
- case WAIT:
- temp_val = Get_TempVal();
- if((temp_val > device_info.t_standby) && (temp_val - device_info.t_standby <= 18)) temp_val = device_info.t_standby;
- else if((temp_val <= device_info.t_standby) && (device_info.t_standby - temp_val <= 18)) temp_val = device_info.t_standby;
-
- ht_flag = Get_HtFlag();
-
- if(ht_flag != 1) {
- if(td_flag == 1) Clear_Screen();
- td_cnt = 0;
- td_flag = 0;
- }
-
- if(td_cnt == 50 && td_flag == 0) {
- Clear_Screen();
- td_flag = 1;
- }
-
- if(td_flag && UI_TIMER == 0) {
- dst_temp = device_info.t_standby;
- if(Get_TemperatureShowFlag() == 1) {
- temp_val = TemperatureShow_Change(0,temp_val);
- dst_temp = TemperatureShow_Change(0,dst_temp);
- }
- Show_TempDown(temp_val,dst_temp);
- UI_TIMER = 50;
- }
- if((TEMPSHOW_TIMER == 0) && (!td_flag)) {
- if(Get_TemperatureShowFlag() == 1) {
- temp_val = TemperatureShow_Change(0,temp_val);
- }
- Display_Temp(1,temp_val/10);
- Show_HeatingIcon(ht_flag,Get_MmaActive()); //0����1����2����
- td_cnt++;
- }
- break;
- default:
- break;
- }
-}
-
-/******************************** END OF FILE *********************************/
diff --git a/workspace/ts100/src/usb_bot.c b/workspace/ts100/src/usb_bot.c
deleted file mode 100644
index 055d5832..00000000
--- a/workspace/ts100/src/usb_bot.c
+++ /dev/null
@@ -1,269 +0,0 @@
-/******************** (C) COPYRIGHT 2015 e-Design Co., Ltd. ********************
- File Name : USB_bot.c
- Version : STM32_USB Disk Ver 3.4 Author : MCD Application Team & bure
-*******************************************************************************/
-#include "usb_scsi.h"
-#include "usb_regs.h"
-#include "usb_mem.h"
-#include "usb_conf.h"
-#include "usb_bot.h"
-#include "usb_prop.h"
-
-u8 Bot_State;
-u8 Bulk_Buff[BULK_MAX_PACKET_SIZE]; // Data_ data buffer
-u16 Data_Len;
-Bulk_Only_CBW CBW;
-Bulk_Only_CSW CSW;
-u32 SCSI_LBA , SCSI_BlkLen;
-
-/*******************************************************************************
- Mass_Storage_In: Mass Storage IN transfer.
-*******************************************************************************/
-void Mass_Storage_In (void)
-{
- switch (Bot_State)
- {
- case BOT_CSW_Send:
- case BOT_ERROR:
- Bot_State = BOT_IDLE;
- SetEPRxStatus(ENDP2, EP_RX_VALID);/* enable the Endpoint to receive the next cmd*/
- break;
- case BOT_DATA_IN:
- switch (CBW.CB[0])
- {
- case SCSI_READ10:
- SCSI_Read10_Cmd(SCSI_LBA , SCSI_BlkLen);
- break;
- }
- break;
- case BOT_DATA_IN_LAST:
- Set_CSW (CSW_CMD_PASSED, SEND_CSW_ENABLE);
- SetEPRxStatus(ENDP2, EP_RX_VALID);
- break;
-
- default:
- break;
- }
-}
-/*******************************************************************************
- Mass_Storage_Out: Mass Storage OUT transfer.
-*******************************************************************************/
-void Mass_Storage_Out (void)
-{
- u8 CMD;
- CMD = CBW.CB[0];
- Data_Len = GetEPRxCount(ENDP2);
-
- PMAToUserBufferCopy(Bulk_Buff, ENDP2_RXADDR, Data_Len);
-
- switch (Bot_State)
- {
- case BOT_IDLE:
- CBW_Decode();
- break;
- case BOT_DATA_OUT:
- if (CMD == SCSI_WRITE10)
- {
- SCSI_Write10_Cmd(SCSI_LBA , SCSI_BlkLen);
- break;
- }
- Bot_Abort(DIR_OUT);
- Set_Scsi_Sense_Data(ILLEGAL_REQUEST, INVALID_FIELED_IN_COMMAND);
- Set_CSW (CSW_PHASE_ERROR, SEND_CSW_DISABLE);
- break;
- default:
- Bot_Abort(BOTH_DIR);
- Set_Scsi_Sense_Data(ILLEGAL_REQUEST, INVALID_FIELED_IN_COMMAND);
- Set_CSW (CSW_PHASE_ERROR, SEND_CSW_DISABLE);
- break;
- }
-}
-/*******************************************************************************
- CBW_Decode: Decode the received CBW and call the related SCSI command
-*******************************************************************************/
-void CBW_Decode(void)
-{
- u32 Counter;
-
- for (Counter = 0; Counter < Data_Len; Counter++)
- {
- *((u8 *)&CBW + Counter) = Bulk_Buff[Counter];
- }
- CSW.dTag = CBW.dTag;
- CSW.dDataResidue = CBW.dDataLength;
- if (Data_Len != BOT_CBW_PACKET_LENGTH)
- {
- Bot_Abort(BOTH_DIR);
- // reset the CBW.dSignature to desible the clear feature until receiving a Mass storage reset
- CBW.dSignature = 0;
- Set_Scsi_Sense_Data(ILLEGAL_REQUEST, PARAMETER_LIST_LENGTH_ERROR);
- Set_CSW (CSW_CMD_FAILED, SEND_CSW_DISABLE);
- return;
- }
-
- if ((CBW.CB[0] == SCSI_READ10 ) || (CBW.CB[0] == SCSI_WRITE10 ))
- {
- // Calculate Logical Block Address
- SCSI_LBA = (CBW.CB[2] << 24) | (CBW.CB[3] << 16) | (CBW.CB[4] << 8) | CBW.CB[5];
- // Calculate the Number of Blocks to transfer
- SCSI_BlkLen = (CBW.CB[7] << 8) | CBW.CB[8];
- }
-
- if (CBW.dSignature == BOT_CBW_SIGNATURE)
- {
- // Valid CBW
- if ((CBW.bLUN > Max_Lun) || (CBW.bCBLength < 1) || (CBW.bCBLength > 16))
- {
- Bot_Abort(BOTH_DIR);
- Set_Scsi_Sense_Data(ILLEGAL_REQUEST, INVALID_FIELED_IN_COMMAND);
- Set_CSW (CSW_CMD_FAILED, SEND_CSW_DISABLE);
- }
- else
- {
- switch (CBW.CB[0])
- {
- case SCSI_REQUEST_SENSE:
- SCSI_RequestSense_Cmd ();
- break;
- case SCSI_INQUIRY:
- SCSI_Inquiry_Cmd();
- break;
- case SCSI_START_STOP_UNIT:
- SCSI_Start_Stop_Unit_Cmd();
- break;
- case SCSI_ALLOW_MEDIUM_REMOVAL:
- SCSI_Start_Stop_Unit_Cmd();
- break;
- case SCSI_MODE_SENSE6:
- SCSI_ModeSense6_Cmd ();
- break;
- case SCSI_MODE_SENSE10:
- SCSI_ModeSense10_Cmd ();
- break;
- case SCSI_READ_FORMAT_CAPACITIES:
- SCSI_ReadFormatCapacity_Cmd();
- break;
- case SCSI_READ_CAPACITY10:
- SCSI_ReadCapacity10_Cmd();
- break;
- case SCSI_TEST_UNIT_READY:
- SCSI_TestUnitReady_Cmd();
- break;
- case SCSI_READ10:
- SCSI_Read10_Cmd(SCSI_LBA , SCSI_BlkLen);
- break;
- case SCSI_WRITE10:
- SCSI_Write10_Cmd(SCSI_LBA , SCSI_BlkLen);
- break;
- case SCSI_VERIFY10:
- SCSI_Verify10_Cmd();
- break;
- //Unsupported command
- case SCSI_MODE_SELECT10:
- SCSI_Mode_Select10_Cmd();
- break;
- case SCSI_MODE_SELECT6:
- SCSI_Mode_Select6_Cmd();
- break;
-
- case SCSI_SEND_DIAGNOSTIC:
- SCSI_Send_Diagnostic_Cmd();
- break;
- case SCSI_READ6:
- SCSI_Read6_Cmd();
- break;
- case SCSI_READ12:
- SCSI_Read12_Cmd();
- break;
- case SCSI_READ16:
- SCSI_Read16_Cmd();
- break;
- case SCSI_READ_CAPACITY16:
- SCSI_READ_CAPACITY16_Cmd();
- break;
- case SCSI_WRITE6:
- SCSI_Write6_Cmd();
- break;
- case SCSI_WRITE12:
- SCSI_Write12_Cmd();
- break;
- case SCSI_WRITE16:
- SCSI_Write16_Cmd();
- break;
- case SCSI_VERIFY12:
- SCSI_Verify12_Cmd();
- break;
- case SCSI_VERIFY16:
- SCSI_Verify16_Cmd();
- break;
-
- default:
- {
- Bot_Abort(BOTH_DIR);
- Set_Scsi_Sense_Data(ILLEGAL_REQUEST, INVALID_COMMAND);
- Set_CSW (CSW_CMD_FAILED, SEND_CSW_DISABLE);
- }
- }
- }
- }
- else
- {
- // Invalid CBW
- Bot_Abort(BOTH_DIR);
- Set_Scsi_Sense_Data(ILLEGAL_REQUEST, INVALID_COMMAND);
- Set_CSW (CSW_CMD_FAILED, SEND_CSW_DISABLE);
- }
-}
-/*******************************************************************************
- Transfer_Data_Request: Send the request response to the PC HOST.
- Input : u8* Data_Address : point to the data to transfer.
- u16 Data_Length : the nember of Bytes to transfer.
-*******************************************************************************/
-void Transfer_Data_Request(u8* Data_Pointer, u16 Data_Len)
-{
- UserToPMABufferCopy(Data_Pointer, ENDP1_TXADDR, Data_Len);
- SetEPTxCount(ENDP1, Data_Len);
- SetEPTxStatus(ENDP1, EP_TX_VALID);
- Bot_State = BOT_DATA_IN_LAST;
- CSW.dDataResidue -= Data_Len;
- CSW.bStatus = CSW_CMD_PASSED;
-}
-/*******************************************************************************
- Set_CSW: Set the SCW with the needed fields.
- Input : u8 CSW_Status this filed can be CSW_CMD_PASSED,CSW_CMD_FAILED,
- or CSW_PHASE_ERROR.
-*******************************************************************************/
-void Set_CSW (u8 CSW_Status, u8 Send_Permission)
-{
- CSW.dSignature = BOT_CSW_SIGNATURE;
- CSW.bStatus = CSW_Status;
- UserToPMABufferCopy(((u8 *)& CSW), ENDP1_TXADDR, CSW_DATA_LENGTH);
- SetEPTxCount(ENDP1, CSW_DATA_LENGTH);
- Bot_State = BOT_ERROR;
- if (Send_Permission){
- Bot_State = BOT_CSW_Send;
- SetEPTxStatus(ENDP1, EP_TX_VALID);
- }
-}
-/*******************************************************************************
- Bot_Abort: Stall the needed Endpoint according to the selected direction.
- Input : Endpoint direction IN, OUT or both directions
-*******************************************************************************/
-void Bot_Abort(u8 Direction)
-{
- switch (Direction){
- case DIR_IN :
- SetEPTxStatus(ENDP1, EP_TX_STALL);
- break;
- case DIR_OUT :
- SetEPRxStatus(ENDP2, EP_RX_STALL);
- break;
- case BOTH_DIR :
- SetEPTxStatus(ENDP1, EP_TX_STALL);
- SetEPRxStatus(ENDP2, EP_RX_STALL);
- break;
- default:
- break;
- }
-}
-/********************************* END OF FILE ******************************/
diff --git a/workspace/ts100/src/usb_desc.c b/workspace/ts100/src/usb_desc.c
deleted file mode 100644
index e005e6f2..00000000
--- a/workspace/ts100/src/usb_desc.c
+++ /dev/null
@@ -1,109 +0,0 @@
-/******************** (C) COPYRIGHT 2015 e-Design Co., Ltd. ********************
- File Name : USB_desc.c
- Version : STM32_USB Disk Ver 3.4 Author : MCD Application Team & bure
-*******************************************************************************/
-#include "usb_desc.h"
-
-const u8 MASS_DeviceDescriptor[MASS_SIZ_DEVICE_DESC] ={
- 0x12, /* bLength */
- 0x01, /* bDescriptorType */
- 0x00, /* bcdUSB, version 2.00 */
- 0x02,
- 0x00, /* bDeviceClass : each interface define the device class */
- 0x00, /* bDeviceSubClass */
- 0x00, /* bDeviceProtocol */
- 0x40, /* bMaxPacketSize0 0x40 = 64 */
- 0x83, /* idVendor (0483) */
- 0x04,
- 0x20, /* idProduct */
- 0x57,
- 0x00, /* bcdDevice 2.00*/
- 0x02,
- 1, /* index of string Manufacturer */
- /**/
- 2, /* index of string descriptor of product*/
- /* */
- 3, /* */
- /* */
- /* */
- 0x01 /*bNumConfigurations */
- };
-const u8 MASS_ConfigDescriptor[MASS_SIZ_CONFIG_DESC] ={
- 0x09, /* bLength: Configuation Descriptor size */
- 0x02, /* bDescriptorType: Configuration */
- MASS_SIZ_CONFIG_DESC,
- 0x00,
- 0x01, /* bNumInterfaces: 1 interface */
- 0x01, /* bConfigurationValue: */
- /* Configuration value */
- 0x00, /* iConfiguration: */
- /* Index of string descriptor */
- /* describing the configuration */
- 0xC0, /* bmAttributes: */
- /* bus powered */
- 0x32, /* MaxPower 100 mA */
-
- /******************** Descriptor of Mass Storage interface ********************/
- /* 09 */
- 0x09, /* bLength: Interface Descriptor size */
- 0x04, /* bDescriptorType: */
- /* Interface descriptor type */
- 0x00, /* bInterfaceNumber: Number of Interface */
- 0x00, /* bAlternateSetting: Alternate setting */
- 0x02, /* bNumEndpoints*/
- 0x08, /* bInterfaceClass: MASS STORAGE Class */
- 0x06, /* bInterfaceSubClass : SCSI transparent*/
- 0x50, /* nInterfaceProtocol */
- 4, /* iInterface: */
- /* 18 */
- 0x07, /*Endpoint descriptor length = 7*/
- 0x05, /*Endpoint descriptor type */
- 0x81, /*Endpoint address (IN, address 1) */
- 0x02, /*Bulk endpoint type */
- 0x40, /*Maximum packet size (64 bytes) */
- 0x00,
- 0x00, /*Polling interval in milliseconds */
- /* 25 */
- 0x07, /*Endpoint descriptor length = 7 */
- 0x05, /*Endpoint descriptor type */
- 0x02, /*Endpoint address (OUT, address 2) */
- 0x02, /*Bulk endpoint type */
- 0x40, /*Maximum packet size (64 bytes) */
- 0x00,
- 0x00 /*Polling interval in milliseconds*/
- /*32*/
- };
-const u8 MASS_StringLangID[MASS_SIZ_STRING_LANGID] ={
- MASS_SIZ_STRING_LANGID,
- 0x03,
- 0x09,
- 0x04
- }; // LangID = 0x0409: U.S. English //
-const u8 MASS_StringVendor[MASS_SIZ_STRING_VENDOR] ={
- MASS_SIZ_STRING_VENDOR, // Size of manufaturer string //
- 0x03, // bDescriptorType = String descriptor //
- // Manufacturer: "STMicroelectronics" //
- 'S', 0, 'T', 0, 'M', 0, 'i', 0, 'c', 0, 'r', 0, 'o', 0, 'e', 0,
- 'l', 0, 'e', 0, 'c', 0, 't', 0, 'r', 0, 'o', 0, 'n', 0, 'i', 0,
- 'c', 0, 's', 0
- };
-const u8 MASS_StringProduct[MASS_SIZ_STRING_PRODUCT] ={
- MASS_SIZ_STRING_PRODUCT,
- 0x03,
- // Product name: "STM32F10x:USB Mass Storage" //
- 'S', 0, 'T', 0, 'M', 0, '3', 0, '2', 0, ' ', 0, 'M', 0, 'a', 0, 's', 0,
- 's', 0, ' ', 0, 'S', 0, 't', 0, 'o', 0, 'r', 0, 'a', 0, 'g', 0, 'e', 0
- };
-u8 MASS_StringSerial[MASS_SIZ_STRING_SERIAL] ={
- MASS_SIZ_STRING_SERIAL,
- 0x03,
- // Serial number//
- 'S', 0, 'T', 0, 'M', 0, '3', 0, '2', 0, '1', 0, '0', 0
- };
-const u8 MASS_StringInterface[MASS_SIZ_STRING_INTERFACE] ={
- MASS_SIZ_STRING_INTERFACE,
- 0x03,
- // Interface 0: "ST Mass" //
- 'S', 0, 'T', 0, ' ', 0, 'M', 0, 'a', 0, 's', 0, 's', 0
- };
-/********************************* END OF FILE ******************************/
diff --git a/workspace/ts100/src/usb_istr.c b/workspace/ts100/src/usb_istr.c
deleted file mode 100644
index 7d91c011..00000000
--- a/workspace/ts100/src/usb_istr.c
+++ /dev/null
@@ -1,138 +0,0 @@
-/******************** (C) COPYRIGHT 2015 e-Design Co., Ltd. ********************
- File Name : USB_istr.c
- Version : STM32 USB Disk Ver 3.4 Author : MCD Application Team & bure
-*******************************************************************************/
-#include "usb_type.h"
-#include "usb_regs.h"
-#include "usb_pwr.h"
-#include "usb_istr.h"
-#include "usb_init.h"
-#include "usb_int.h"
-#include "usb_bot.h"
-
-volatile u16 wIstr; /* ISTR register last read value */
-volatile u8 bIntPackSOF = 0; /* SOFs received between 2 consecutive packets */
-
-void (*pEpInt_IN[7])(void) ={
- EP1_IN_Callback,
- EP2_IN_Callback,
- EP3_IN_Callback,
- EP4_IN_Callback,
- EP5_IN_Callback,
- EP6_IN_Callback,
- EP7_IN_Callback,
- };
-void (*pEpInt_OUT[7])(void) ={
- EP1_OUT_Callback,
- EP2_OUT_Callback,
- EP3_OUT_Callback,
- EP4_OUT_Callback,
- EP5_OUT_Callback,
- EP6_OUT_Callback,
- EP7_OUT_Callback,
- };
-/*******************************************************************************
- USB_Istr: ISTR events interrupt service routine
-*******************************************************************************/
-void USB_Istr(void)
-{
- wIstr = _GetISTR();
-#if (IMR_MSK & ISTR_RESET)
- if (wIstr & ISTR_RESET & wInterrupt_Mask){
-// _SetISTR((u16)CLR_RESET);
- Device_Property.Reset();
- _SetISTR((u16)CLR_RESET);
-//#ifdef RESET_CALLBACK
-// RESET_Callback();
-//#endif
- }
-#endif
-//-----------------------------------------------------------------------------
-#if (IMR_MSK & ISTR_DOVR)
- if (wIstr & ISTR_DOVR & wInterrupt_Mask){
- _SetISTR((u16)CLR_DOVR);
-//#ifdef DOVR_CALLBACK
-// DOVR_Callback();
-//#endif
- }
-#endif
-//-----------------------------------------------------------------------------
-#if (IMR_MSK & ISTR_ERR)
- if (wIstr & ISTR_ERR & wInterrupt_Mask){
- _SetISTR((u16)CLR_ERR);
-//#ifdef ERR_CALLBACK
-// ERR_Callback();
-//#endif
- }
-#endif
-//-----------------------------------------------------------------------------
-#if (IMR_MSK & ISTR_WKUP)
- if (wIstr & ISTR_WKUP & wInterrupt_Mask){
-// _SetISTR((u16)CLR_WKUP);
- Resume(RESUME_EXTERNAL);
- _SetISTR((u16)CLR_WKUP);
-//#ifdef WKUP_CALLBACK
-// WKUP_Callback();
-//#endif
- }
-#endif
-//-----------------------------------------------------------------------------
-#if (IMR_MSK & ISTR_SUSP)
- if (wIstr & ISTR_SUSP & wInterrupt_Mask){ // check if SUSPEND is possible
- if (fSuspendEnabled) Suspend();
- else Resume(RESUME_LATER); // if not possible then resume after xx ms
- _SetISTR((u16)CLR_SUSP); // clear of the ISTR bit must be done after setting of CNTR_FSUSP
-//#ifdef SUSP_CALLBACK
-// SUSP_Callback();
-//#endif
- }
-#endif
-//-----------------------------------------------------------------------------
-#if (IMR_MSK & ISTR_SOF)
- if (wIstr & ISTR_SOF & wInterrupt_Mask){
- _SetISTR((u16)CLR_SOF);
- bIntPackSOF++;
-//#ifdef SOF_CALLBACK
-// SOF_Callback();
-//#endif
- }
-#endif
-//-----------------------------------------------------------------------------
-#if (IMR_MSK & ISTR_ESOF)
- if (wIstr & ISTR_ESOF & wInterrupt_Mask){
-// _SetISTR((u16)CLR_ESOF); // resume handling timing is made with ESOFs
- Resume(RESUME_ESOF); // request without change of the machine state
- _SetISTR((u16)CLR_ESOF); // resume handling timing is made with ESOFs
-//#ifdef ESOF_CALLBACK
-// ESOF_Callback();
-//#endif
- }
-#endif
-//-----------------------------------------------------------------------------
-#if (IMR_MSK & ISTR_CTR)
- if (wIstr & ISTR_CTR & wInterrupt_Mask){
- /* servicing of the endpoint correct transfer interrupt */
- /* clear of the CTR flag into the sub */
- CTR_LP();
-//#ifdef CTR_CALLBACK
-// CTR_Callback();
-//#endif
- }
-#endif
-} /* USB_Istr */
-/*******************************************************************************
- EP1_IN_Callback: EP1 IN Callback Routine
-*******************************************************************************/
-void EP1_IN_Callback(void)
-{
- Mass_Storage_In();
-}
-/*******************************************************************************
- EP2_OUT_Callback: EP2 OUT Callback Routine.
-*******************************************************************************/
-void EP2_OUT_Callback(void)
-{
- Mass_Storage_Out();
-}
-/********************************* END OF FILE ******************************/
-
diff --git a/workspace/ts100/src/usb_prop.c b/workspace/ts100/src/usb_prop.c
deleted file mode 100644
index cb2201eb..00000000
--- a/workspace/ts100/src/usb_prop.c
+++ /dev/null
@@ -1,262 +0,0 @@
-/******************** (C) COPYRIGHT 2015 e-Design Co., Ltd. ********************
- File Name : USB_prop.c
- Version : STM32 USB Disk Ver 3.4 Author : MCD Application Team & bure
-*******************************************************************************/
-#include "usb_desc.h"
-#include "usb_pwr.h"
-#include "usb_bot.h"
-#include "usb_prop.h"
-#include "usb_lib.h"
-#include "Bios.h"
-#include "APP_Version.h"
-
-u32 Max_Lun = 0;
-
-DEVICE Device_Table ={ EP_NUM, 1 };
-DEVICE_PROP Device_Property ={
- MASS_init,
- MASS_Reset,
- MASS_Status_In,
- MASS_Status_Out,
- MASS_Data_Setup,
- MASS_NoData_Setup,
- MASS_Get_Interface_Setting,
- MASS_GetDeviceDescriptor,
- MASS_GetConfigDescriptor,
- MASS_GetStringDescriptor,
- 0,
- 0x40 // MAX PACKET SIZE
- };
-USER_STANDARD_REQUESTS User_Standard_Requests ={
- Mass_Storage_GetConfiguration,
- Mass_Storage_SetConfiguration,
- Mass_Storage_GetInterface,
- Mass_Storage_SetInterface,
- Mass_Storage_GetStatus,
- Mass_Storage_ClearFeature,
- Mass_Storage_SetEndPointFeature,
- Mass_Storage_SetDeviceFeature,
- Mass_Storage_SetDeviceAddress
- };
-ONE_DESCRIPTOR Device_Descriptor ={
- (u8*)MASS_DeviceDescriptor,
- MASS_SIZ_DEVICE_DESC
- };
-ONE_DESCRIPTOR Config_Descriptor ={
- (u8*)MASS_ConfigDescriptor,
- MASS_SIZ_CONFIG_DESC
- };
-ONE_DESCRIPTOR String_Descriptor[5] ={
- {(u8*)MASS_StringLangID, MASS_SIZ_STRING_LANGID},
- {(u8*)MASS_StringVendor, MASS_SIZ_STRING_VENDOR},
- {(u8*)MASS_StringProduct, MASS_SIZ_STRING_PRODUCT},
- {(u8*)MASS_StringSerial, MASS_SIZ_STRING_SERIAL},
- {(u8*)MASS_StringInterface, MASS_SIZ_STRING_INTERFACE},
- };
-
-/*******************************************************************************
- MASS_init: Mass Storage init routine.
-*******************************************************************************/
-void MASS_init()
-{
- Get_SerialNum(); // Update the serial number string descriptor with the data from the unique ID
- pInformation->Current_Configuration = 0;
- PowerOn(); // Connect the device
- _SetISTR(0); // USB interrupts initialization. clear pending interrupts
- wInterrupt_Mask = IMR_MSK;
- _SetCNTR(wInterrupt_Mask); // set interrupts mask
- bDeviceState = UNCONNECTED;
-}
-/*******************************************************************************
- MASS_Reset: Mass Storage reset routine.
-*******************************************************************************/
-void MASS_Reset()
-{
- Device_Info.Current_Configuration = 0; // Set the device as not configured
- pInformation->Current_Feature = MASS_ConfigDescriptor[7]; // Current Feature initialization
- SetBTABLE(BTABLE_ADDRESS);
- // Initialize Endpoint 0
- SetEPType(ENDP0, EP_CONTROL);
- SetEPTxStatus(ENDP0, EP_TX_NAK);
- SetEPRxAddr(ENDP0, ENDP0_RXADDR);
- SetEPRxCount(ENDP0, Device_Property.MaxPacketSize);
- SetEPTxAddr(ENDP0, ENDP0_TXADDR);
- Clear_Status_Out(ENDP0);
- SetEPRxValid(ENDP0);
- //Initialize Endpoint 1
- SetEPType(ENDP1, EP_BULK);
- SetEPTxAddr(ENDP1, ENDP1_TXADDR);
- SetEPTxStatus(ENDP1, EP_TX_NAK);
- SetEPRxStatus(ENDP1, EP_RX_DIS);
- // Initialize Endpoint 2
- SetEPType(ENDP2, EP_BULK);
- SetEPRxAddr(ENDP2, ENDP2_RXADDR);
- SetEPRxCount(ENDP2, Device_Property.MaxPacketSize);
- SetEPRxStatus(ENDP2, EP_RX_VALID);
- SetEPTxStatus(ENDP2, EP_TX_DIS);
-
- SetEPRxCount(ENDP0, Device_Property.MaxPacketSize);
- SetEPRxValid(ENDP0);
- // Set the device to response on default address
- SetDeviceAddress(0);
-
- bDeviceState = ATTACHED;
-
- CBW.dSignature = BOT_CBW_SIGNATURE;
- Bot_State = BOT_IDLE;
-}
-
-/*******************************************************************************
- Mass_Storage_SetConfiguration: Handle the SetConfiguration request.
-*******************************************************************************/
-void Mass_Storage_SetConfiguration(void)
-{
- if (pInformation->Current_Configuration != 0){
- bDeviceState = CONFIGURED; // Device configured
- ClearDTOG_TX(ENDP1);
- ClearDTOG_RX(ENDP2);
- Bot_State = BOT_IDLE; // set the Bot state machine to the IDLE state
- }
-}
-/*******************************************************************************
- Mass_Storage_ClearFeature: Handle the ClearFeature request.
-*******************************************************************************/
-void Mass_Storage_ClearFeature(void)
-{
- /* when the host send a CBW with invalid signature or invalid length the two
- Endpoints (IN & OUT) shall stall until receiving a Mass Storage Reset */
- if (CBW.dSignature != BOT_CBW_SIGNATURE)
- Bot_Abort(BOTH_DIR);
-}
-/*******************************************************************************
- Mass_Storage_SetConfiguration: Udpade the device state to addressed.
-*******************************************************************************/
-void Mass_Storage_SetDeviceAddress (void)
-{
- bDeviceState = ADDRESSED;
-}
-/*******************************************************************************
- MASS_Status_In: Mass Storage Status IN routine.
-*******************************************************************************/
-void MASS_Status_In(void)
-{
- return;
-}
-/*******************************************************************************
- MASS_Status_Out: Mass Storage Status OUT routine.
-*******************************************************************************/
-void MASS_Status_Out(void)
-{
- return;
-}
-/*******************************************************************************
- MASS_Data_Setup: Handle the data class specific requests.
-*******************************************************************************/
-RESULT MASS_Data_Setup(u8 RequestNo)
-{
- u8* (*CopyRoutine)(u16);
-
- CopyRoutine = NULL;
- if ((Type_Recipient == (CLASS_REQUEST | INTERFACE_RECIPIENT))
- && (RequestNo == GET_MAX_LUN) && (pInformation->USBwValue == 0)
- && (pInformation->USBwIndex == 0) && (pInformation->USBwLength == 0x01))
- {
- CopyRoutine = Get_Max_Lun;
- } else return USB_UNSUPPORT;
- if (CopyRoutine == NULL) return USB_UNSUPPORT;
- pInformation->Ctrl_Info.CopyData = CopyRoutine;
- pInformation->Ctrl_Info.Usb_wOffset = 0;
- (*CopyRoutine)(0);
- return USB_SUCCESS;
-}
-/*******************************************************************************
- MASS_NoData_Setup: Handle the no data class specific requests.
-*******************************************************************************/
-RESULT MASS_NoData_Setup(u8 RequestNo)
-{
- if ((Type_Recipient == (CLASS_REQUEST | INTERFACE_RECIPIENT))
- && (RequestNo == MASS_STORAGE_RESET) && (pInformation->USBwValue == 0)
- && (pInformation->USBwIndex == 0) && (pInformation->USBwLength == 0x00))
- {
- ClearDTOG_TX(ENDP1); // Initialize Endpoint 1
- ClearDTOG_RX(ENDP2); // Initialize Endpoint 2
- CBW.dSignature = BOT_CBW_SIGNATURE; // intialise the CBW signature to enable the clear feature
- Bot_State = BOT_IDLE;
- return USB_SUCCESS;
- }
- return USB_UNSUPPORT;
-}
-/*******************************************************************************
- MASS_Get_Interface_Setting: Test the interface and the alternate setting
- according to the supported one.
-*******************************************************************************/
-RESULT MASS_Get_Interface_Setting(u8 Interface, u8 AlternateSetting)
-{
- if (AlternateSetting > 0) return USB_UNSUPPORT;// in this application we don't have AlternateSetting
- else if (Interface > 0) return USB_UNSUPPORT; // in this application we have only 1 interfaces
- return USB_SUCCESS;
-}
-/*******************************************************************************
- MASS_GetDeviceDescriptor: Get the device descriptor.
-*******************************************************************************/
-u8 *MASS_GetDeviceDescriptor(u16 Length)
-{
- return Standard_GetDescriptorData(Length, &Device_Descriptor );
-}
-/*******************************************************************************
- MASS_GetConfigDescriptor: Get the configuration descriptor.
-*******************************************************************************/
-u8 *MASS_GetConfigDescriptor(u16 Length)
-{
- return Standard_GetDescriptorData(Length, &Config_Descriptor );
-}
-
-/*******************************************************************************
- MASS_GetStringDescriptor: Get the string descriptors according to
- the needed index.
-*******************************************************************************/
-u8 *MASS_GetStringDescriptor(u16 Length)
-{
- u8 wValue0 = pInformation->USBwValue0;
- if (wValue0 > 5) return NULL;
- else return Standard_GetDescriptorData(Length, &String_Descriptor[wValue0]);
-}
-/*******************************************************************************
- Get_Max_Lun: Handle the Get Max Lun request.
-*******************************************************************************/
-u8 *Get_Max_Lun(u16 Length)
-{
- if (Length == 0){
- pInformation->Ctrl_Info.Usb_wLength = LUN_DATA_LENGTH;
- return 0;
- } else return((u8*)(&Max_Lun));
-}
-/*******************************************************************************
-Get_SerialNum : Create the serial number string descriptor.
-*******************************************************************************/
-void Get_SerialNum(void)
-{
- u32 Device_Serial0, Device_Serial1, Device_Serial2;
-
- Device_Serial0 = SERIAL_NO1;
- Device_Serial1 = SERIAL_NO2;
- Device_Serial2 = SERIAL_NO3;
-
- if (Device_Serial0 != 0){
- MASS_StringSerial[ 2] = (u8)( Device_Serial0 & 0x000000FF);
- MASS_StringSerial[ 4] = (u8)((Device_Serial0 & 0x0000FF00) >> 8);
- MASS_StringSerial[ 6] = (u8)((Device_Serial0 & 0x00FF0000) >> 16);
- MASS_StringSerial[ 8] = (u8)((Device_Serial0 & 0xFF000000) >> 24);
-
- MASS_StringSerial[10] = (u8)( Device_Serial1 & 0x000000FF);
- MASS_StringSerial[12] = (u8)((Device_Serial1 & 0x0000FF00) >> 8);
- MASS_StringSerial[14] = (u8)((Device_Serial1 & 0x00FF0000) >> 16);
- MASS_StringSerial[16] = (u8)((Device_Serial1 & 0xFF000000) >> 24);
-
- MASS_StringSerial[18] = (u8)( Device_Serial2 & 0x000000FF);
- MASS_StringSerial[20] = (u8)((Device_Serial2 & 0x0000FF00) >> 8);
- MASS_StringSerial[22] = (u8)((Device_Serial2 & 0x00FF0000) >> 16);
- MASS_StringSerial[24] = (u8)((Device_Serial2 & 0xFF000000) >> 24);
- }
-}
-/********************************* END OF FILE ******************************/
diff --git a/workspace/ts100/src/usb_pwr.c b/workspace/ts100/src/usb_pwr.c
deleted file mode 100644
index 459d1c20..00000000
--- a/workspace/ts100/src/usb_pwr.c
+++ /dev/null
@@ -1,152 +0,0 @@
-/******************** (C) COPYRIGHT 2015 e-Design Co., Ltd. ********************
- File Name : USB_pwr.c
- Version : STM32 USB Disk Ver 3.4 Author : MCD Application Team & bure
-*******************************************************************************/
-#include "usb_lib.h"
-#include "usb_conf.h"
-#include "usb_pwr.h"
-
-vu32 bDeviceState = UNCONNECTED; // USB device status
-vu8 fSuspendEnabled = TRUE; // true when suspend is possible
-
-struct{
- volatile RESUME_STATE eState;
- volatile u8 bESOFcnt;
-} ResumeS;
-
-/*******************************************************************************
- PowerOn Return : USB_SUCCESS
-
-*******************************************************************************/
-RESULT PowerOn(void)
-{
- u16 wRegVal;
-
- /*** CNTR_PWDN = 0 ***/
- wRegVal = CNTR_FRES;
- _SetCNTR(wRegVal);
- /*** CNTR_FRES = 0 ***/
- wInterrupt_Mask = 0;
- _SetCNTR(wInterrupt_Mask);
- /*** Clear pending interrupts ***/
- _SetISTR(0);
- /*** Set interrupt mask ***/
- wInterrupt_Mask = CNTR_RESETM | CNTR_SUSPM | CNTR_WKUPM;
- _SetCNTR(wInterrupt_Mask);
-
- return USB_SUCCESS;
-}
-/*******************************************************************************
- PowerOff: handles switch-off conditions Return : USB_SUCCESS
-*******************************************************************************/
-RESULT PowerOff()
-{
- /* disable all ints and force USB reset */
- _SetCNTR(CNTR_FRES);
- /* clear interrupt status register */
- _SetISTR(0);
- /* Disable the Pull-Up*/
-// USB_Cable_Config(DISABLE);
- /* switch-off device */
- _SetCNTR(CNTR_FRES + CNTR_PDWN);
- /* sw variables reset */
- /* ... */
-
- return USB_SUCCESS;
-}
-/*******************************************************************************
- Suspend: sets suspend mode operating conditions
- Return : USB_SUCCESS.
-*******************************************************************************/
-void Suspend(void)
-{
- u16 wCNTR;
- /* suspend preparation */
- /* macrocell enters suspend mode */
- wCNTR = _GetCNTR();
- wCNTR |= CNTR_FSUSP;
- _SetCNTR(wCNTR);
- /* ------------------ ONLY WITH BUS-POWERED DEVICES ---------------------- */
- /* power reduction */
- /* ... on connected devices */
- /* force low-power mode in the macrocell */
- wCNTR = _GetCNTR();
- wCNTR |= CNTR_LPMODE;
- _SetCNTR(wCNTR);
-}
-/*******************************************************************************
- Resume_Init: Handles wake-up restoring normal operations
-* Return : USB_SUCCESS.
-*******************************************************************************/
-void Resume_Init(void)
-{
- u16 wCNTR;
- /* ------------------ ONLY WITH BUS-POWERED DEVICES ---------------------- */
- /* restart the clocks */
- /* CNTR_LPMODE = 0 */
- wCNTR = _GetCNTR();
- wCNTR &= (~CNTR_LPMODE);
- _SetCNTR(wCNTR);
- /* restore full power */
- /* ... on connected devices */
- /* reset FSUSP bit */
- _SetCNTR(IMR_MSK);
- /* reverse suspend preparation */
- /* ... */
-}
-/*******************************************************************************
- Resume: This is the state machine handling resume operations and
- timing sequence. The control is based on the Resume structure
- variables and on the ESOF interrupt calling this subroutine
- without changing machine state.
- Input: a state machine value (RESUME_STATE)
- RESUME_ESOF doesn't change ResumeS.eState allowing
- decrementing of the ESOF counter in different states.
-*******************************************************************************/
-void Resume(RESUME_STATE eResumeSetVal)
-{
- u16 wCNTR;
-
- if (eResumeSetVal != RESUME_ESOF) ResumeS.eState = eResumeSetVal;
- switch (ResumeS.eState){
- case RESUME_EXTERNAL:
- Resume_Init();
- ResumeS.eState = RESUME_OFF;
- break;
- case RESUME_INTERNAL:
- Resume_Init();
- ResumeS.eState = RESUME_START;
- break;
- case RESUME_LATER:
- ResumeS.bESOFcnt = 2;
- ResumeS.eState = RESUME_WAIT;
- break;
- case RESUME_WAIT:
- ResumeS.bESOFcnt--;
- if (ResumeS.bESOFcnt == 0)
- ResumeS.eState = RESUME_START;
- break;
- case RESUME_START:
- wCNTR = _GetCNTR();
- wCNTR |= CNTR_RESUME;
- _SetCNTR(wCNTR);
- ResumeS.eState = RESUME_ON;
- ResumeS.bESOFcnt = 10;
- break;
- case RESUME_ON:
- ResumeS.bESOFcnt--;
- if (ResumeS.bESOFcnt == 0){
- wCNTR = _GetCNTR();
- wCNTR &= (~CNTR_RESUME);
- _SetCNTR(wCNTR);
- ResumeS.eState = RESUME_OFF;
- }
- break;
- case RESUME_OFF:
- case RESUME_ESOF:
- default:
- ResumeS.eState = RESUME_OFF;
- break;
- }
-}
-/********************************* END OF FILE ******************************/
diff --git a/workspace/ts100/src/usb_scsi.c b/workspace/ts100/src/usb_scsi.c
deleted file mode 100644
index 088b31cf..00000000
--- a/workspace/ts100/src/usb_scsi.c
+++ /dev/null
@@ -1,230 +0,0 @@
-/******************** (C) COPYRIGHT 2015 e-Design Co., Ltd. ********************
- File Name : USB_scsi.c
- Version : STM32 USB Disk Ver 3.4 Author : MCD Application Team & bure
-*******************************************************************************/
-#include "usb_scsi.h"
-#include "usb_bot.h"
-#include "usb_regs.h"
-#include "usb_lib.h"
-#include "Disk.h"
-
-u8 Page00_Inquiry_Data[] ={ 0, 0, 0, 0, 0};
-u8 Mode_Sense6_data[] ={0x03, 0x00, 0x00, 0x00};
-u8 Mode_Sense10_data[] ={0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
-u8 Scsi_Sense_Data[] ={0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
-u8 ReadCapacity10_Data[] ={ 0, 0, 0, 0, 0, 0, 0, 0};
-u8 ReadFormatCapacity[] ={ 0, 0, 0, 8, 0, 0, 0, 0, 2, 0, 0, 0};
-
-#ifdef DFU_MODE
- uc8 Disk_Inquiry_Str[] ={0x00, 0x80, 0x02, 0x02, 36-4, 0x00, 0x00, 0x00,
- 'V', 'i', 'r', 't', 'u', 'a', 'l', ' ',
- 'D', 'F', 'U', ' ', 'D', 'i', 's', 'k',
- ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
- ' ', ' ', ' ', ' ', };
-#else
- uc8 Disk_Inquiry_Str[] ={0x00, 0x80, 0x02, 0x02, 36-4, 0x00, 0x00, 0x00,
- 'M', 'i', 'n', 'i', ' ', 'D', 'S', 'O',
- 'D', 'i', 's', 'k', ' ', ' ', ' ', ' ',
- ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
- ' ', ' ', ' ', ' ', };
-#endif
-
-/*******************************************************************************
- SCSI_Inquiry_Cmd: SCSI Inquiry Command routine.
-*******************************************************************************/
-void SCSI_Inquiry_Cmd(void)
-{
- u8* Inquiry_Data;
- u16 Inquiry_Data_Length;
-
- if (CBW.CB[1] & 0x01){ // Evpd is set
- Inquiry_Data = Page00_Inquiry_Data;
- Inquiry_Data_Length = 5;
- } else {
- Inquiry_Data = (u8*)Disk_Inquiry_Str;
- if (CBW.CB[4] <= STANDARD_INQUIRY_DATA_LEN) Inquiry_Data_Length = CBW.CB[4];
- else Inquiry_Data_Length = STANDARD_INQUIRY_DATA_LEN;
- }
- Transfer_Data_Request(Inquiry_Data, Inquiry_Data_Length);
-}
-/*******************************************************************************
- SCSI_ReadFormatCapacity_Cmd: SCSI ReadFormatCapacity Command routine.
-*******************************************************************************/
-void SCSI_ReadFormatCapacity_Cmd(void)
-{
- ReadFormatCapacity[ 4] = (u8)(SECTOR_SIZE >> 24);
- ReadFormatCapacity[ 5] = (u8)(SECTOR_SIZE >> 16);
- ReadFormatCapacity[ 6] = (u8)(SECTOR_SIZE >> 8);
- ReadFormatCapacity[ 7] = (u8)(SECTOR_SIZE);
-
- ReadFormatCapacity[ 9] = (u8)(SECTOR_SIZE >> 16);
- ReadFormatCapacity[10] = (u8)(SECTOR_SIZE >> 8);
- ReadFormatCapacity[11] = (u8)(SECTOR_SIZE);
-
- Transfer_Data_Request(ReadFormatCapacity, READ_FORMAT_CAPACITY_DATA_LEN);
-}
-/*******************************************************************************
- SCSI_ReadCapacity10_Cmd: SCSI ReadCapacity10 Command routine.
-*******************************************************************************/
-void SCSI_ReadCapacity10_Cmd(void)
-{
- ReadCapacity10_Data[0] = (u8)(SECTOR_CNT - 1 >> 24);
- ReadCapacity10_Data[1] = (u8)(SECTOR_CNT - 1 >> 16);
- ReadCapacity10_Data[2] = (u8)(SECTOR_CNT - 1 >> 8);
- ReadCapacity10_Data[3] = (u8)(SECTOR_CNT - 1);
-
- ReadCapacity10_Data[4] = (u8)(SECTOR_SIZE >> 24);
- ReadCapacity10_Data[5] = (u8)(SECTOR_SIZE >> 16);
- ReadCapacity10_Data[6] = (u8)(SECTOR_SIZE >> 8);
- ReadCapacity10_Data[7] = (u8)(SECTOR_SIZE);
-
- Transfer_Data_Request(ReadCapacity10_Data, READ_CAPACITY10_DATA_LEN);
-}
-/*******************************************************************************
- SCSI_ModeSense6_Cmd: SCSI ModeSense6 Command routine.
-*******************************************************************************/
-void SCSI_ModeSense6_Cmd (void)
-{
- Transfer_Data_Request(Mode_Sense6_data, MODE_SENSE6_DATA_LEN);
-}
-/*******************************************************************************
- SCSI_ModeSense10_Cmd: SCSI ModeSense10 Command routine.
-*******************************************************************************/
-void SCSI_ModeSense10_Cmd (void)
-{
- Transfer_Data_Request(Mode_Sense10_data, MODE_SENSE10_DATA_LEN);
-}
-/*******************************************************************************
- SCSI_RequestSense_Cmd: SCSI RequestSense Command routine.
-*******************************************************************************/
-void SCSI_RequestSense_Cmd (void)
-{
- u8 Request_Sense_data_Length;
-
- if (CBW.CB[4] <= REQUEST_SENSE_DATA_LEN) Request_Sense_data_Length = CBW.CB[4];
- else Request_Sense_data_Length = REQUEST_SENSE_DATA_LEN;
-
- Transfer_Data_Request(Scsi_Sense_Data, Request_Sense_data_Length);
-}
-
-/*******************************************************************************
- Set_Scsi_Sense_Data: Set Scsi Sense Data routine.
-*******************************************************************************/
-void Set_Scsi_Sense_Data(u8 Sens_Key, u8 Asc)
-{
- Scsi_Sense_Data[2] = Sens_Key;
- Scsi_Sense_Data[12] = Asc;
-}
-/*******************************************************************************
- SCSI_Start_Stop_Unit_Cmd: SCSI Start_Stop_Unit Command routine.
-*******************************************************************************/
-void SCSI_Start_Stop_Unit_Cmd(void)
-{
- Set_CSW (CSW_CMD_PASSED, SEND_CSW_ENABLE);
-}
-/*******************************************************************************
- SCSI_Read10_Cmd: SCSI Read10 Command routine.
-*******************************************************************************/
-void SCSI_Read10_Cmd(u32 LBA , u32 BlockNbr)
-{
- if (Bot_State == BOT_IDLE){
- if (!(SCSI_Address_Management(SCSI_READ10, LBA, BlockNbr))) return;//address out of range
- if ((CBW.bmFlags & 0x80) != 0){
- Bot_State = BOT_DATA_IN;
- Read_Memory(LBA , BlockNbr);
- } else {
- Bot_Abort(BOTH_DIR);
- Set_Scsi_Sense_Data(ILLEGAL_REQUEST, INVALID_FIELED_IN_COMMAND);
- Set_CSW (CSW_CMD_FAILED, SEND_CSW_ENABLE);
- }
- return;
- } else if (Bot_State == BOT_DATA_IN) Read_Memory(LBA , BlockNbr);
-}
-/*******************************************************************************
- SCSI_Write10_Cmd: SCSI Write10 Command routine.
-*******************************************************************************/
-void SCSI_Write10_Cmd(u32 LBA , u32 BlockNbr)
-{
- if (Bot_State == BOT_IDLE){
- if (!(SCSI_Address_Management(SCSI_WRITE10 , LBA, BlockNbr))) return;//address out of range
- if ((CBW.bmFlags & 0x80) == 0){
- Bot_State = BOT_DATA_OUT;
- SetEPRxStatus(ENDP2, EP_RX_VALID);
- } else {
- Bot_Abort(DIR_IN);
- Set_Scsi_Sense_Data(ILLEGAL_REQUEST, INVALID_FIELED_IN_COMMAND);
- Set_CSW (CSW_CMD_FAILED, SEND_CSW_DISABLE);
- }
- return;
- } else if (Bot_State == BOT_DATA_OUT) Write_Memory(LBA , BlockNbr);
-}
-/*******************************************************************************
- SCSI_Verify10_Cmd: SCSI Verify10 Command routine.
-*******************************************************************************/
-void SCSI_Verify10_Cmd(void)
-{
- if ((CBW.dDataLength == 0) && !(CBW.CB[1] & BLKVFY)){ // BLKVFY not set
- Set_CSW (CSW_CMD_PASSED, SEND_CSW_ENABLE);
- } else {
- Bot_Abort(BOTH_DIR);
- Set_Scsi_Sense_Data(ILLEGAL_REQUEST, INVALID_FIELED_IN_COMMAND);
- Set_CSW (CSW_CMD_FAILED, SEND_CSW_DISABLE);
- }
-}
-/*******************************************************************************
- SCSI_Valid_Cmd: Valid Commands routine.
-*******************************************************************************/
-void SCSI_Valid_Cmd(void)
-{
- if (CBW.dDataLength != 0){
- Bot_Abort(BOTH_DIR);
- Set_Scsi_Sense_Data(ILLEGAL_REQUEST, INVALID_COMMAND);
- Set_CSW (CSW_CMD_FAILED, SEND_CSW_DISABLE);
- } else Set_CSW (CSW_CMD_PASSED, SEND_CSW_ENABLE);
-}
-/*******************************************************************************
- SCSI_Valid_Cmd: Valid Commands routine.
-*******************************************************************************/
-void SCSI_TestUnitReady_Cmd(void)
-{
- Set_CSW (CSW_CMD_PASSED, SEND_CSW_ENABLE);
-}
-/*******************************************************************************
- SCSI_Invalid_Cmd: Invalid Commands routine
-*******************************************************************************/
-void SCSI_Invalid_Cmd(void)
-{
- if (CBW.dDataLength == 0) Bot_Abort(DIR_IN);
- else{
- if ((CBW.bmFlags & 0x80) != 0) Bot_Abort(DIR_IN);
- else Bot_Abort(BOTH_DIR);
- }
- Set_Scsi_Sense_Data(ILLEGAL_REQUEST, INVALID_COMMAND);
- Set_CSW (CSW_CMD_FAILED, SEND_CSW_DISABLE);
-}
-/*******************************************************************************
- SCSI_Address_Management: Test the received address.
- Input: Cmd the command can be SCSI_READ10 or SCSI_WRITE10.
- Return: Read\Write status (bool).
-*******************************************************************************/
-u8 SCSI_Address_Management(u8 Cmd , u32 LBA , u32 BlockNbr)
-{
-
- if ((LBA + BlockNbr) > SECTOR_CNT){
- if (Cmd == SCSI_WRITE10) Bot_Abort(BOTH_DIR);
- Bot_Abort(DIR_IN);
- Set_Scsi_Sense_Data(ILLEGAL_REQUEST, ADDRESS_OUT_OF_RANGE);
- Set_CSW (CSW_CMD_FAILED, SEND_CSW_DISABLE);
- return (FALSE);
- }
- if (CBW.dDataLength != BlockNbr * SECTOR_SIZE){
- if (Cmd == SCSI_WRITE10) Bot_Abort(BOTH_DIR);
- else Bot_Abort(DIR_IN);
- Set_Scsi_Sense_Data(ILLEGAL_REQUEST, INVALID_FIELED_IN_COMMAND);
- Set_CSW (CSW_CMD_FAILED, SEND_CSW_DISABLE);
- return (FALSE);
- }
- return (TRUE);
-}
-/********************************* END OF FILE ******************************/
diff --git a/workspace/ts100/ts100.cfg b/workspace/ts100/ts100.cfg
index 628e83f1..ba0519ec 100644
--- a/workspace/ts100/ts100.cfg
+++ b/workspace/ts100/ts100.cfg
@@ -10,4 +10,6 @@ transport select "hla_swd"
source [find target/stm32f1x_stlink.cfg]
# use hardware reset, connect under reset
-reset_config srst_only srst_nogate
+#reset_config srst_only srst_nogate
+#software
+reset_config none separate \ No newline at end of file