Commenting through most of the remaining files.
Fixing logic errors throughout as well
This commit is contained in:
@@ -10,3 +10,14 @@ This is implimented using a ram buffer for the disk.
|
||||
|
||||
|
||||
|
||||
|
||||
# Future improvements to be made
|
||||
These features are things I would like to add to the firmware
|
||||
|
||||
* Use hardware PWM for driving the heating element.
|
||||
* Use the sysTick hardware for timing of events
|
||||
* Move all the settings to an on device menu system instead of usb link
|
||||
* Move error codes into a unified struct
|
||||
* Rewrite most of the OLED stack to not require hardcoded values
|
||||
* Rework the modes of the unit to be neater
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
</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 "${BuildArtifactFileBaseName}.elf" "${BuildArtifactFileBaseName}.bin"; arm-none-eabi-size "${BuildArtifactFileName}" & arm-none-eabi-size --format=berkeley ${BuildArtifactFileName}">
|
||||
<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 "${BuildArtifactFileBaseName}.elf" "${BuildArtifactFileBaseName}.bin"; arm-none-eabi-size "${BuildArtifactFileName}" ">
|
||||
<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"/>
|
||||
@@ -22,7 +22,7 @@
|
||||
<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"/>
|
||||
<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="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.none" 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=""${ProjDirPath}/inc""/>
|
||||
|
||||
@@ -20,16 +20,22 @@ History:
|
||||
#ifdef TYPE_DS201
|
||||
#define PRODUCT_INFO "DS201"
|
||||
#define SCH_VER "1.7B"
|
||||
#elif TYPE_DS202
|
||||
#else
|
||||
#ifdef TYPE_DS202
|
||||
#include "DS202V1_6.h"
|
||||
#define FLASH_PAGE 0x0800
|
||||
#elif TYPE_DS203
|
||||
#else
|
||||
#ifdef TYPE_DS203
|
||||
#define PRODUCT_INFO "DS203"
|
||||
#define SCH_VER "2.70"
|
||||
#elif TYPE_S100
|
||||
#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}
|
||||
|
||||
@@ -5,12 +5,12 @@ 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"
|
||||
@@ -31,7 +31,6 @@ History:
|
||||
#define FILE_SECTOR &gDisk_buff[0x600]
|
||||
#define Root (u8*)ROOT_SECTOR
|
||||
|
||||
|
||||
//#define APP_BASE 0x0800C000
|
||||
|
||||
#define HEX 0
|
||||
@@ -53,9 +52,9 @@ History:
|
||||
//#define FAT_DATA 0x00FFFFF8
|
||||
#define VOLUME 0x40DD8D18 //0x3E645C29
|
||||
|
||||
#define BUFF 0 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݻ<EFBFBD><DDBB><EFBFBD><EFBFBD><EFBFBD>
|
||||
#define BUFF 0 //
|
||||
|
||||
#define V32_BASE SECTOR_SIZE // V32 <20>ܹ<EFBFBD> 8*4=32 <20>ֽ<EFBFBD>
|
||||
#define V32_BASE SECTOR_SIZE // V32 8*4=32
|
||||
#define W_ADDR 0
|
||||
#define ADDR 1
|
||||
#define H_ADDR 2
|
||||
@@ -65,7 +64,7 @@ History:
|
||||
#define RD_CNT 6
|
||||
#define WR_CNT 7
|
||||
|
||||
#define VAR_BASE V32_BASE + 32 // VAR <20>ܹ<EFBFBD> 9+17=26 <20>ֽ<EFBFBD>
|
||||
#define VAR_BASE V32_BASE + 32 // VAR 9+17=26
|
||||
#define USB_ST 0
|
||||
#define SEG_KIND 1
|
||||
#define SEG_LEN 2
|
||||
@@ -75,8 +74,7 @@ History:
|
||||
#define DATA_CNT 6
|
||||
#define F_TYPE 7
|
||||
#define F_FLAG 8
|
||||
#define SEG_DATA 9 // ͨ<>Ű<EFBFBD><C5B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 9~26 <20><>17<31>ֽ<EFBFBD>
|
||||
|
||||
#define SEG_DATA 9 //9~26
|
||||
|
||||
u8 Cal_Val(u8 str[], u8 k, u8 flag);
|
||||
void Disk_BuffInit(void);
|
||||
|
||||
@@ -13,9 +13,9 @@
|
||||
#define PP 0x02 // Write to Memory instruction
|
||||
#define PW 0x0A // Page write instruction
|
||||
|
||||
#define OK 0 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
#define SEC_ERR 1 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD>
|
||||
#define TMAX 100000 // <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
|
||||
#define OK 0 //
|
||||
#define SEC_ERR 1 //
|
||||
#define TMAX 100000 //
|
||||
|
||||
#define WIP_Flag 0x01 // Write In Progress (WIP) flag
|
||||
#define Dummy_Byte 0xA5
|
||||
|
||||
@@ -40,7 +40,7 @@ u32 Get_AvgAd(void);
|
||||
int Get_SensorTmp(void);
|
||||
u16 Get_ThermometerTemp(void);
|
||||
s16 Get_Temp(s16 wk_temp);
|
||||
u32 Clear_Watchdog(void);
|
||||
void Clear_Watchdog(void);
|
||||
u32 Start_Watchdog(u32 ms);
|
||||
u8 Get_AlarmType(void);
|
||||
void Set_AlarmType(u8 type);
|
||||
|
||||
@@ -5,15 +5,15 @@ Description:
|
||||
Author : Celery
|
||||
Data: 2015/07/07
|
||||
History:
|
||||
2015/07/07 ͳһ<CDB3><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
2015/07/07 ͳһ<CDB3><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*******************************************************************************/
|
||||
#ifndef __MMA8652FC__H
|
||||
#define __MMA8652FC__H
|
||||
|
||||
//--------------MMA8652 <EFBFBD><EFBFBD><EFBFBD>岿<EFBFBD><EFBFBD>----------------------------------------------//
|
||||
//--------------MMA8652 Device ID----------------------------------------------//
|
||||
|
||||
#define DEVICE_ADDR 0X1D
|
||||
//--------------MMA8652 <EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>-------------------------------------------//
|
||||
//--------------MMA8652 Registers-------------------------------------------//
|
||||
#define STATUS_REG 0x00
|
||||
#define X_MSB_REG 0X01
|
||||
#define X_LSB_REG 0X02
|
||||
|
||||
@@ -5,7 +5,8 @@
|
||||
Author : bure & Celery
|
||||
Data: 2015/08/03
|
||||
History:
|
||||
2015/08/03 ͳһ<CDB3><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
2016/09/13 Ben V. Brown -> English comments and cleaning up
|
||||
2015/08/03
|
||||
*******************************************************************************/
|
||||
#include <string.h>
|
||||
#include "FAT12.h"
|
||||
@@ -16,11 +17,11 @@
|
||||
#define FAT2_BASE 0x00002800 // FAT2
|
||||
#define ROOT_BASE 0x00004000 //
|
||||
#define FILE_BASE 0x00008000 //
|
||||
#define SEC_LEN 0x200 //
|
||||
#define FAT1_SEC 0x0C // FAT1
|
||||
#define FAT2_SEC 0x0C // FAT2
|
||||
#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 //
|
||||
#define OK 0 //Error codes
|
||||
#define SEC_ERR 1 //
|
||||
#define FAT_ERR 2 //
|
||||
#define OVER 3 //
|
||||
@@ -31,7 +32,7 @@
|
||||
#define RW 1 //
|
||||
|
||||
/*******************************************************************************
|
||||
Function:
|
||||
Function: NextCluster
|
||||
Description:
|
||||
Input:
|
||||
*******************************************************************************/
|
||||
@@ -49,25 +50,25 @@ u8 NextCluster(u16* pCluster) {
|
||||
return OK;
|
||||
}
|
||||
/*******************************************************************************
|
||||
Function:
|
||||
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; // <20><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
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; // ȡ<><C8A1>һ<EFBFBD><D2BB><EFBFBD>غ<EFBFBD>
|
||||
return FAT_ERR; //
|
||||
return OK;
|
||||
}
|
||||
/*******************************************************************************
|
||||
Function:
|
||||
Function: ProgFileSec
|
||||
Description:
|
||||
Input:
|
||||
*******************************************************************************/
|
||||
@@ -76,30 +77,30 @@ u8 ProgFileSec(u8* pBuffer, u16* pCluster) {
|
||||
u32 ProgAddr = FILE_BASE + SEC_LEN * (*pCluster - 2);
|
||||
|
||||
if (ProgDiskPage(pBuffer, ProgAddr) != OK)
|
||||
return SEC_ERR; // дǰ<D0B4><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
return SEC_ERR; //
|
||||
pBuffer += 256;
|
||||
ProgAddr += 256;
|
||||
if (ProgDiskPage(pBuffer, ProgAddr) != OK)
|
||||
return SEC_ERR; // д<><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
return SEC_ERR; //
|
||||
Tmp = *pCluster;
|
||||
switch (Tmp) {
|
||||
case 0: // <20><><EFBFBD>дغ<D0B4>
|
||||
case 1: // <20><><EFBFBD>дغ<D0B4>
|
||||
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: // <20><><EFBFBD>ӽ<EFBFBD><D3BD><EFBFBD>
|
||||
case END:
|
||||
default:
|
||||
if (NextCluster(pCluster) != OK)
|
||||
return FAT_ERR; // ȡ<><C8A1>һ<EFBFBD><D2BB><EFBFBD>غ<EFBFBD>
|
||||
return FAT_ERR;
|
||||
return OK;
|
||||
}
|
||||
}
|
||||
/*******************************************************************************
|
||||
Function:
|
||||
Function: SeekBlank
|
||||
Description:
|
||||
Input:
|
||||
*******************************************************************************/
|
||||
|
||||
@@ -52,10 +52,8 @@ u32 Get_HeatingTime(void) {
|
||||
return gHeat_cnt;
|
||||
}
|
||||
/*******************************************************************************
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: Init_GTIME
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:NULL
|
||||
<20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD>:NULL
|
||||
Function:
|
||||
Description: Init the global count down timers
|
||||
*******************************************************************************/
|
||||
void Init_Gtime(void) {
|
||||
u8 i;
|
||||
@@ -88,10 +86,9 @@ void Delay_HalfMs(u32 ms) {
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: USB_Port
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A><><EFBFBD><EFBFBD> USB <20>豸 IO <20>˿<EFBFBD>
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:State = ENABLE / DISABLE
|
||||
<20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD>:NULL
|
||||
Function: USB_Port
|
||||
Description: Enables or disables the usb pins
|
||||
Input: state == ENABLE or DISABLE
|
||||
*******************************************************************************/
|
||||
void USB_Port(u8 state) {
|
||||
USB_DN_LOW();
|
||||
@@ -279,10 +276,8 @@ void Adc_Init(void) {
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: Init_Timer2
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><>ʼ<EFBFBD><CABC> <20><>ʱ<EFBFBD><CAB1>2
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:NULL
|
||||
<20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD>:NULL
|
||||
Function:
|
||||
Description: Setup Timer2 to fire every 10ms
|
||||
*******************************************************************************/
|
||||
void Init_Timer2(void) {
|
||||
NVIC_InitTypeDef NVIC_InitStructure;
|
||||
@@ -306,10 +301,8 @@ void Init_Timer2(void) {
|
||||
NVIC_Init(&NVIC_InitStructure);
|
||||
}
|
||||
/*******************************************************************************
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: Init_Timer3
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><>ʼ<EFBFBD><CABC> <20><>ʱ<EFBFBD><CAB1>3
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:NULL
|
||||
<20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD>:NULL
|
||||
Function:
|
||||
Description: Init Timer3 to fire every 50us to be used to control the irons software PWM
|
||||
*******************************************************************************/
|
||||
void Init_Timer3(void) {
|
||||
NVIC_InitTypeDef NVIC_InitStructure;
|
||||
@@ -334,7 +327,7 @@ void Init_Timer3(void) {
|
||||
}
|
||||
/*******************************************************************************
|
||||
Function:TIM2_ISR
|
||||
Description:Handles Timer 2 tick.
|
||||
Description:Handles Timer 2 tick. (10mS)
|
||||
Automatically decrements all >0 values in gTime.
|
||||
Also reads the buttons every 4 ticks
|
||||
*******************************************************************************/
|
||||
|
||||
@@ -31,7 +31,7 @@ s16 gPrev_temp = 250; //
|
||||
u8 gIs_restartkey = 0; //
|
||||
u8 gPre_status = 1; //
|
||||
|
||||
const DEVICE_INFO_SYS info_def = { "2.12", //Ver
|
||||
const DEVICE_INFO_SYS info_def = { "2.13", //Ver
|
||||
2000, //T_Standby; // 200C=1800 2520
|
||||
3000, // T_Work; // 350C=3362,
|
||||
100, //T_Step;
|
||||
@@ -98,7 +98,7 @@ s16 Get_TempVal(void) {
|
||||
|
||||
/*******************************************************************************
|
||||
Function:System_Init
|
||||
Description:Zeros out the device info to be a known start value (blank)
|
||||
Description:Init the device info to be a known start value (as defined at top of CTRL.c)
|
||||
Input:Void
|
||||
Output:Void
|
||||
*******************************************************************************/
|
||||
|
||||
@@ -68,26 +68,28 @@ const uint8_t BOOT_SEC[512] = { 0xEB, 0x3C, 0x90, 0x4D, 0x53, 0x44, 0x4F, 0x53,
|
||||
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]; //Buffer used to implement the virtual disk
|
||||
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];
|
||||
#define CONFIG_CONT 8
|
||||
u8 gRewriteflag[16];
|
||||
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
|
||||
@@ -289,8 +291,8 @@ void Upper(u8* str, u16 len) {
|
||||
/*******************************************************************************
|
||||
Function: SearchFile
|
||||
Description:
|
||||
Inputs: (pfilename) filename to look for, (pfilelen) length of the filename,(root_addr) root folder to search from
|
||||
Outputs: NULL (failed) or
|
||||
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;
|
||||
@@ -314,30 +316,6 @@ u8* SearchFile(u8* pfilename, u16* pfilelen, u16* root_addr) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
const u8 LOGO[] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x00,
|
||||
|
||||
0x00, 0x00, 0x00, 0x01, 0xC0, 0xFF, 0xFF, 0xFF, 0x80, 0x1F, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFD, 0x80, 0xFF, 0xFF, 0xFF, 0x80, 0x1F, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFD, 0xFF, 0x00, 0x00, 0x00,
|
||||
|
||||
0x7F, 0x9F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xCF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xF7, 0xFF, 0xFF, 0xF0, 0x00, 0x03, 0xFD,
|
||||
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x07, 0xFF, 0xFC, 0x01,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x07, 0x81, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, 0xFF,
|
||||
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x07, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
|
||||
0xFF, 0xFF, 0x9F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0x9F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0x9F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF };
|
||||
|
||||
/*******************************************************************************
|
||||
Function:Config_Analysis
|
||||
Description:Reads the CONFIG.TXT if file is found and also the LOGIN.BMP file as well
|
||||
@@ -355,8 +333,8 @@ u8 Config_Analysis(void) {
|
||||
root_addr = 0;
|
||||
m = 0;
|
||||
j = 0;
|
||||
|
||||
if ((p_file = SearchFile("CONFIG TXT", &file_len, &root_addr))) {
|
||||
//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++) {
|
||||
@@ -373,11 +351,11 @@ u8 Config_Analysis(void) {
|
||||
t_p[k][j] = '\0';
|
||||
m = i + 2;
|
||||
}
|
||||
for (k = 0; k < CONFIG_CONT; k++) { //<2F><><EFBFBD><EFBFBD>CONFIG_CONT <20><>
|
||||
if (memcmp(t_p[k], gKey_words[k], strlen(gKey_words[k])) == 0) { //<2F>ҵ<EFBFBD><D2B5>ؼ<EFBFBD><D8BC><EFBFBD>
|
||||
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++) { //<2F><><EFBFBD><EFBFBD>ֵ<EFBFBD>Ƿ<EFBFBD>Ϸ<EFBFBD>
|
||||
i++) {
|
||||
if (t_p[k][i] >= '0' && t_p[k][i] <= '9') {
|
||||
if (t_p[k][i] == '0') {
|
||||
if (k == 6) {
|
||||
@@ -390,12 +368,12 @@ u8 Config_Analysis(void) {
|
||||
}
|
||||
flag = 1;
|
||||
break;
|
||||
} else if ((t_p[k][i] != 0x20) && (t_p[k][i] != 0x3d)) { //<2F>ո<EFBFBD>ϵȺ<CFB5>
|
||||
} 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)) { //<2F><><EFBFBD><EFBFBD>ֵ<EFBFBD>Ϸ<EFBFBD>
|
||||
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",
|
||||
@@ -404,28 +382,28 @@ u8 Config_Analysis(void) {
|
||||
sprintf((char *) t_p[k], "T_Work=%d",
|
||||
device_info.t_work / 10);
|
||||
else if (k == 2)
|
||||
sprintf((char *) t_p[k], "Wait_Time=%d",
|
||||
sprintf((char *) t_p[k], "Wait_Time=%ld",
|
||||
device_info.wait_time / 100);
|
||||
else if (k == 3)
|
||||
sprintf((char *) t_p[k], "Idle_Time=%d",
|
||||
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=%d",
|
||||
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=%d", gZerop_ad);
|
||||
} else { //<2F><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD>Ϸ<EFBFBD>
|
||||
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 { //ľ<><C4BE><EFBFBD>ҵ<EFBFBD><D2B5>ؼ<EFBFBD><D8BC><EFBFBD>
|
||||
} else {
|
||||
memcpy(t_p[k], gDef_set[k], strlen((char *) gDef_set[k]));
|
||||
is_illegality = 1;
|
||||
}
|
||||
@@ -441,7 +419,7 @@ u8 Config_Analysis(void) {
|
||||
m = strlen((char *) str);
|
||||
|
||||
if (m < 256) {
|
||||
gDisk_buff[0x400 + root_addr * 32 + 0x1C] = m; //strlen((char *)str);//<2F>ļ<EFBFBD><C4BC><EFBFBD>С
|
||||
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;
|
||||
@@ -453,7 +431,7 @@ u8 Config_Analysis(void) {
|
||||
ReWriteFlsash();
|
||||
}
|
||||
} else {
|
||||
if (p_file = SearchFile("LOGOIN BMP", &file_len, &root_addr)) {
|
||||
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);
|
||||
@@ -479,10 +457,10 @@ u8 Config_Analysis(void) {
|
||||
m += strlen((char *) gSet_range[k]);
|
||||
}
|
||||
|
||||
gDisk_buff[0x40B] = 0x0; //<2F><><EFBFBD><EFBFBD>
|
||||
gDisk_buff[0x40B] = 0x0;
|
||||
*(u32*) VOLUME_BASE = VOLUME;
|
||||
gDisk_buff[0x41A] = 0x02; //<2F>غ<EFBFBD>
|
||||
gDisk_buff[0x41C] = m; //<2F>ļ<EFBFBD><C4BC><EFBFBD>С
|
||||
gDisk_buff[0x41A] = 0x02;
|
||||
gDisk_buff[0x41C] = m;
|
||||
ReWrite_All();
|
||||
}
|
||||
|
||||
@@ -496,60 +474,52 @@ u8 Config_Analysis(void) {
|
||||
return 0;
|
||||
}
|
||||
/*******************************************************************************
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: Disk_SecWrite
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:PC <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>ʱд<CAB1><D0B4><EFBFBD><EFBFBD>
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:pbuffer <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> diskaddr <20><>ַ
|
||||
<20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD>:NULL
|
||||
Function: Disk_SecWrite
|
||||
Description:
|
||||
Inputs:
|
||||
*******************************************************************************/
|
||||
void Disk_SecWrite(u8* pbuffer, u32 diskaddr) //PC <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5><EFBFBD>
|
||||
{
|
||||
u8 is_illegality = 0;
|
||||
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;
|
||||
static u8 Conf_TxtFlag = 0;
|
||||
|
||||
if (diskaddr == 0x1000) { // Write FAT1 sector
|
||||
if (memcmp(pbuffer, (u8*) FAT1_SECTOR, 512)) {
|
||||
if (memcmp(pbuffer, (u8*) FAT1_SECTOR, 512)) { //check different
|
||||
memcpy((u8*) FAT1_SECTOR, pbuffer, 512);
|
||||
gRewriteflag[0] = 1;
|
||||
Conf_TxtFlag = 0;
|
||||
}
|
||||
} else if (diskaddr == 0x2800) { // Write FAT2 sector
|
||||
if (memcmp(pbuffer, (u8*) FAT2_SECTOR, 512)) {
|
||||
if (memcmp(pbuffer, (u8*) FAT2_SECTOR, 512)) { //check different
|
||||
memcpy((u8*) FAT2_SECTOR, pbuffer, 512);
|
||||
gRewriteflag[0] = 1;
|
||||
Conf_TxtFlag = 0;
|
||||
}
|
||||
} else if (diskaddr == 0x4000) { // Write DIR sector
|
||||
if (memcmp(pbuffer, (u8*) ROOT_SECTOR, 512)) {
|
||||
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);
|
||||
if (memcmp(ver, "CONFIG TXT", 11) == 0) {
|
||||
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];
|
||||
Conf_TxtFlag = 1;
|
||||
break;
|
||||
}
|
||||
pbuffer += 32;
|
||||
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)) {
|
||||
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++) { //ȡ<EFBFBD><EFBFBD>4 <20><>
|
||||
for (k = 0; k < CONFIG_CONT; k++) { //
|
||||
j = 0;
|
||||
for (i = m; i < strlen((char *) gFile_con); i++) { //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD>
|
||||
for (i = m; i < strlen((char *) gFile_con); i++) { //
|
||||
if (gFile_con[i] == 0x0D && gFile_con[i + 1] == 0x0A)
|
||||
break;
|
||||
else {
|
||||
@@ -562,11 +532,11 @@ void Disk_SecWrite(u8* pbuffer, u32 diskaddr) //PC <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5>
|
||||
m = i + 2;
|
||||
}
|
||||
|
||||
for (k = 0; k < CONFIG_CONT; k++) { //<2F><><EFBFBD><EFBFBD>k <20><>
|
||||
if (memcmp(t_p[k], gKey_words[k], strlen(gKey_words[k])) == 0) { //<2F>ҵ<EFBFBD><D2B5>ؼ<EFBFBD><D8BC><EFBFBD>
|
||||
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++) { //<2F><><EFBFBD><EFBFBD>ֵ<EFBFBD>Ƿ<EFBFBD>Ϸ<EFBFBD>
|
||||
i++) {
|
||||
if (t_p[k][i] >= '0' && t_p[k][i] <= '9') {
|
||||
if (t_p[k][i] == '0') {
|
||||
if (k == 6) {
|
||||
@@ -579,14 +549,12 @@ void Disk_SecWrite(u8* pbuffer, u32 diskaddr) //PC <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5>
|
||||
}
|
||||
flag = 1;
|
||||
break;
|
||||
} else if ((t_p[k][i] != 0x20) && (t_p[k][i] != 0x3d)) { //<2F>ո<EFBFBD>ϵȺ<CFB5>
|
||||
} 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))) {
|
||||
|
||||
is_illegality = 1; //<2F><><EFBFBD>Ϸ<EFBFBD>
|
||||
return;
|
||||
} else {
|
||||
Set_Ver(t_p[k] + i, k);
|
||||
@@ -599,56 +567,44 @@ void Disk_SecWrite(u8* pbuffer, u32 diskaddr) //PC <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5>
|
||||
sprintf((char *) t_p[k], "T_Work=%d",
|
||||
device_info.t_work / 10);
|
||||
else if (k == 2)
|
||||
sprintf((char *) t_p[k], "Wait_Time=%d",
|
||||
sprintf((char *) t_p[k], "Wait_Time=%ld",
|
||||
device_info.wait_time / 100);
|
||||
else if (k == 3)
|
||||
sprintf((char *) t_p[k], "Idle_Time=%d",
|
||||
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=%d",
|
||||
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=%d", gZerop_ad);
|
||||
sprintf((char *) t_p[k], "ZeroP_Ad=%ld", gZerop_ad);
|
||||
}
|
||||
} else { //ľ<><C4BE><EFBFBD>ҵ<EFBFBD><D2B5>ؼ<EFBFBD><D8BC><EFBFBD>
|
||||
} else {
|
||||
memcpy(t_p[k], gDef_set[k], strlen((char *) gDef_set[k]));
|
||||
is_illegality = 1;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (!is_illegality) {
|
||||
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);
|
||||
|
||||
if (m < 256) {
|
||||
gDisk_buff[0x400 + (Config_flag - 2) * 32 + 0x1C] = m; //strlen((char *)str);//<2F>ļ<EFBFBD><C4BC><EFBFBD>С
|
||||
gDisk_buff[0x400 + (Config_flag - 2) * 32 + 0x1D] = 0;
|
||||
} else {
|
||||
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();
|
||||
Conf_TxtFlag = 0;
|
||||
return;
|
||||
} else {
|
||||
Conf_TxtFlag = 1;
|
||||
return;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
gRewriteflag[1] = 1;
|
||||
@@ -659,10 +615,8 @@ void Disk_SecWrite(u8* pbuffer, u32 diskaddr) //PC <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5>
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: Disk_SecRead
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:PC <20><>ȡ<EFBFBD>ļ<EFBFBD>ʱд<CAB1><D0B4><EFBFBD><EFBFBD>
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:pbuffer <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD> diskaddr <20><>ַ
|
||||
<20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD>:NULL
|
||||
Function: Disk_SecRead
|
||||
Description: Reads a sector from the virtual disk
|
||||
*******************************************************************************/
|
||||
void Disk_SecRead(u8* pbuffer, u32 disk_addr) {
|
||||
Soft_Delay();
|
||||
@@ -677,14 +631,13 @@ void Disk_SecRead(u8* pbuffer, u32 disk_addr) {
|
||||
} 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); //
|
||||
memset(pbuffer, 0, 512); //unknown, return 0's
|
||||
}
|
||||
}
|
||||
/*******************************************************************************
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: ReWriteFlsash
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:дFlash
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:NULL
|
||||
<20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD>:<3A>Ƿ<EFBFBD>д<EFBFBD><D0B4><EFBFBD>־
|
||||
Function:ReWriteFlsash
|
||||
Description:
|
||||
Output:RDY(all good) or ERR (error)
|
||||
*******************************************************************************/
|
||||
u8 ReWriteFlsash(void) {
|
||||
u32 i, j;
|
||||
@@ -697,12 +650,12 @@ u8 ReWriteFlsash(void) {
|
||||
gRewriteflag[i] = 0;
|
||||
FLASH_Erase(APP_BASE + i * 0x400);
|
||||
f_buff = (u16*) &gDisk_buff[i * 0x400];
|
||||
for (j = 0; j < 0x400; j += 2) {
|
||||
result = FLASH_Prog((u32) (APP_BASE + i * 0x400 + j),
|
||||
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) {
|
||||
FLASH_Lock();
|
||||
return ERR;
|
||||
if (result != FLASH_COMPLETE) { //something went wrong
|
||||
FLASH_Lock(); //make sure the flash is locked again
|
||||
return ERR; //return ERR
|
||||
}
|
||||
}
|
||||
break;
|
||||
@@ -712,10 +665,9 @@ u8 ReWriteFlsash(void) {
|
||||
return RDY;
|
||||
}
|
||||
/*******************************************************************************
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: ReWrite_All
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>flash<73><68><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD>
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:NULL
|
||||
<20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD>:<3A>Ƿ<EFBFBD>д<EFBFBD><D0B4><EFBFBD>־
|
||||
Function: ReWrite_All
|
||||
Description:
|
||||
Output:
|
||||
*******************************************************************************/
|
||||
u8 ReWrite_All(void) {
|
||||
u16 i;
|
||||
@@ -734,24 +686,20 @@ u8 ReWrite_All(void) {
|
||||
return RDY;
|
||||
}
|
||||
/*******************************************************************************
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: Erase
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A><>ʽ<EFBFBD><CABD>Flash
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:NULL
|
||||
<20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD>:NULL
|
||||
Function:Erase
|
||||
Description: Erase the first 9k from APP_BASE
|
||||
*******************************************************************************/
|
||||
void Erase(void) {
|
||||
u16 i;
|
||||
FLASH_Unlock();
|
||||
FLASH_Unlock(); //unlock the mcu flash controller
|
||||
for (i = 0; i < 9; i++)
|
||||
FLASH_Erase(APP_BASE + i * 0x400);
|
||||
FLASH_Erase(APP_BASE + i * 0x400); //erase the flash
|
||||
|
||||
FLASH_Lock();
|
||||
}
|
||||
/*******************************************************************************
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: Read_Memory
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A><><EFBFBD><EFBFBD>microSD<53><44><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:r_offset ƫ<><C6AB> r_length<74><68><EFBFBD><EFBFBD>
|
||||
<20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD>:NULL
|
||||
Function: Read_Memory
|
||||
Description:
|
||||
*******************************************************************************/
|
||||
void Read_Memory(u32 r_offset, u32 r_length) {
|
||||
static u32 offset, length, block_offset;
|
||||
@@ -789,10 +737,8 @@ void Read_Memory(u32 r_offset, u32 r_length) {
|
||||
}
|
||||
}
|
||||
/*******************************************************************************
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: Write_Memory
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A><><EFBFBD><EFBFBD>microSD<53><44><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:r_offset ƫ<><C6AB> r_length<74><68><EFBFBD><EFBFBD>
|
||||
<20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD>:NULL
|
||||
Function: Write_Memory
|
||||
Description:
|
||||
*******************************************************************************/
|
||||
void Write_Memory(u32 w_offset, u32 w_length) {
|
||||
static u32 offset, length;
|
||||
|
||||
@@ -6,26 +6,27 @@
|
||||
#include "Flash.h"
|
||||
#include "Bios.h"
|
||||
|
||||
u8 ExtFlashSendByte(u8 byte);
|
||||
void ExtFlashWaitForWriteEnd(void);
|
||||
|
||||
/*******************************************************************************
|
||||
FLASH_Prog:
|
||||
Function: FLASH_Prog
|
||||
Description: Programs the data into the system flash at the specified address
|
||||
*******************************************************************************/
|
||||
u8 FLASH_Prog(u32 Address, u16 Data)
|
||||
{
|
||||
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);
|
||||
FLASH_ClearFlag(
|
||||
FLASH_FLAG_EOP | FLASH_FLAG_PGERR | FLASH_FLAG_WRPRTERR);
|
||||
return FLASH_ProgramHalfWord(Address, Data);
|
||||
}
|
||||
/*******************************************************************************
|
||||
FLASH_Erase:
|
||||
Function: FLASH_Erase
|
||||
Description: Erases a page of flash
|
||||
Inputs: Starting address for the page to erase
|
||||
*******************************************************************************/
|
||||
void FLASH_Erase(u32 Address)
|
||||
{
|
||||
void FLASH_Erase(u32 Address) {
|
||||
if (Address % FLASH_PAGE == 0) { // FLASH Page start (1K/Page)
|
||||
if(FLASH_WaitForLastOperation(WAIT_TIMES)!=FLASH_TIMEOUT)
|
||||
FLASH_ClearFlag(FLASH_FLAG_EOP|FLASH_FLAG_PGERR|FLASH_FLAG_WRPRTERR);
|
||||
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
|
||||
}
|
||||
}
|
||||
|
||||
@@ -274,7 +274,7 @@ int Get_SensorTmp(void) {
|
||||
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));
|
||||
ad_sum = 0;
|
||||
@@ -356,10 +356,8 @@ s16 Get_Temp(s16 wk_temp) {
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: Start_Watchdog
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD>Ź<EFBFBD>
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:ms <20><><EFBFBD>Ź<EFBFBD><C5B9><EFBFBD><EFBFBD><EFBFBD>
|
||||
<20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD>:<3A><><EFBFBD><EFBFBD>1
|
||||
Function:Start_Watchdog
|
||||
Description: Starts the system watchdog timer
|
||||
*******************************************************************************/
|
||||
u32 Start_Watchdog(u32 ms) {
|
||||
IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);
|
||||
@@ -378,13 +376,11 @@ u32 Start_Watchdog(u32 ms) {
|
||||
return 1;
|
||||
}
|
||||
/*******************************************************************************
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: Clear_Watchdog
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A><><EFBFBD>ÿ<EFBFBD><C3BF>Ź<EFBFBD><C5B9><EFBFBD><EFBFBD><EFBFBD>
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:NULL
|
||||
<20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD>:<3A><><EFBFBD><EFBFBD>1
|
||||
Function:Clear_Watchdog
|
||||
Description:Resets the watchdog timer
|
||||
*******************************************************************************/
|
||||
u32 Clear_Watchdog(void) {
|
||||
void Clear_Watchdog(void) {
|
||||
IWDG_ReloadCounter();
|
||||
return 1;
|
||||
|
||||
}
|
||||
/******************************** END OF FILE *********************************/
|
||||
|
||||
@@ -56,17 +56,6 @@ void SysTick_Handler(void) {
|
||||
void USB_LP_CAN1_RX0_IRQHandler(void) {
|
||||
USB_Istr();
|
||||
}
|
||||
/*
|
||||
void I2C1_EV_IRQHandler(void)
|
||||
{
|
||||
I2C1_EV_ISR();
|
||||
}
|
||||
|
||||
void I2C1_ER_IRQHandler(void)
|
||||
{
|
||||
I2C1_ER_ISR();
|
||||
}
|
||||
*/
|
||||
void TIM2_IRQHandler(void) {
|
||||
TIM2_ISR();
|
||||
}
|
||||
@@ -74,7 +63,7 @@ void TIM2_IRQHandler(void) {
|
||||
void TIM3_IRQHandler(void) {
|
||||
TIM3_ISR();
|
||||
}
|
||||
|
||||
/*This loop is used for un assigned IRQ's so that the debugger can catch them*/
|
||||
static void forever()
|
||||
|
||||
{
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
Author : Celery
|
||||
Data: 2015/07/07
|
||||
History:
|
||||
2016/09/13 Ben V. Brown - English comments and fixing a few errors
|
||||
2015/07/07 ͳһ<CDB3><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*******************************************************************************/
|
||||
#include <stdio.h>
|
||||
@@ -28,19 +29,15 @@ u8 gMmatxdata;
|
||||
typedef struct {
|
||||
u8 hi;
|
||||
u8 lo;
|
||||
} DRByte;
|
||||
typedef struct {
|
||||
DRByte Byte;
|
||||
|
||||
} DR_Value;
|
||||
|
||||
DR_Value gX_value, gY_value, gZ_value;
|
||||
|
||||
/*******************************************************************************
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: Get_MmaActive
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A><>ȡ<EFBFBD><C8A1><EFBFBD>ٶȴ<D9B6><C8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:NULL
|
||||
<20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD>:<3A><><EFBFBD>ٶȴ<D9B6><C8B4><EFBFBD><EFBFBD><EFBFBD>״̬
|
||||
Function:
|
||||
Description:Returns if the unit is actively being moved
|
||||
Output: if the unit is active or not.
|
||||
*******************************************************************************/
|
||||
u16 Get_MmaActive(void) {
|
||||
return gactive;
|
||||
@@ -53,20 +50,19 @@ u16 Get_MmaShift(void) {
|
||||
return gShift;
|
||||
}
|
||||
/*******************************************************************************
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: Get_MmaActive
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:XXXXXXXXXXXXXXXXXXXXXX
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:XXXXXXXXXXXXXXXXXXXXXX
|
||||
<20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD>:XXXXXXXXXXXXXXXXXXXXXX
|
||||
Function: Set_MmaShift
|
||||
Description: Set the Shift Value
|
||||
Input: shift value
|
||||
*******************************************************************************/
|
||||
void Set_MmaShift(u16 shift) {
|
||||
gShift = shift;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: IIC_RegWrite
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A><>Reg<65><67>ַд<D6B7><D0B4>Data
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:Reg <20><><EFBFBD><EFBFBD><EFBFBD>еĵ<D0B5>ַ<EFBFBD><D6B7>Data<74><61><EFBFBD><EFBFBD>
|
||||
<EFBFBD><EFBFBD><EFBFBD>ز<EFBFBD><EFBFBD><EFBFBD>: <20>ɹ<EFBFBD><C9B9><EFBFBD>
|
||||
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];
|
||||
@@ -77,10 +73,10 @@ int IIC_RegWrite(u8 reg, u8 data) {
|
||||
return 1;
|
||||
}
|
||||
/*******************************************************************************
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: IIC_RegRead
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Reg<65><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:Reg <20><><EFBFBD><EFBFBD><EFBFBD>еĵ<D0B5>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>gMmatxdata<74><61>
|
||||
<EFBFBD><EFBFBD><EFBFBD>ز<EFBFBD><EFBFBD><EFBFBD>: <20>ɹ<EFBFBD><C9B9><EFBFBD>
|
||||
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];
|
||||
@@ -91,10 +87,8 @@ int IIC_RegRead(u8 reg) {
|
||||
return 1;
|
||||
}
|
||||
/*******************************************************************************
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: MMA865x_Standby
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:NULL
|
||||
<20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD>:NULL
|
||||
Function: MMA865x_Standby
|
||||
Description: Put the MMA865 into standby mode
|
||||
*******************************************************************************/
|
||||
void MMA865x_Standby(void) {
|
||||
//Put the sensor into Standby Mode by clearing
|
||||
@@ -102,10 +96,8 @@ void MMA865x_Standby(void) {
|
||||
IIC_RegWrite(CTRL_REG1, 0); //(IIC_RegRead(CTRL_REG1) & ~ ACTIVE_MASK)
|
||||
}
|
||||
/*******************************************************************************
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: MMA865x_Active
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:NULL
|
||||
<20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD>:NULL
|
||||
Function: MMA865x_Active
|
||||
Description: Put the MMA865 into active mode
|
||||
*******************************************************************************/
|
||||
void MMA865x_Active(void) {
|
||||
// Put the sensor into Active Mode by setting the
|
||||
@@ -113,53 +105,50 @@ void MMA865x_Active(void) {
|
||||
IIC_RegWrite(CTRL_REG1, ACTIVE_MASK); //(IIC_RegRead(CTRL_REG1) | ACTIVE_MASK)
|
||||
}
|
||||
/*******************************************************************************
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: IIC_RegRead
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Reg<65><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:NULL
|
||||
<20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD>:NULL
|
||||
Function: IIC_RegRead
|
||||
Description:Setup the MMA865x IC settings
|
||||
*******************************************************************************/
|
||||
void StartUp_Accelerated(void) {
|
||||
//------<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬-----------------------//
|
||||
//Put the unit into standby state so we can edit its configuration registers
|
||||
MMA865x_Standby();
|
||||
//---- <20><><EFBFBD>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD>Χ4g----------------------//
|
||||
//Set the unit to full scale measurement
|
||||
IIC_RegWrite(XYZ_DATA_CFG_REG, FULL_SCALE_8G); //(IIC_RegRead(XYZ_DATA_CFG_REG) & ~FS_MASK)
|
||||
//--- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>100HZ------------------------------------//
|
||||
//Set the unit to the required update rate (eg 100Hz)
|
||||
IIC_RegWrite(CTRL_REG1, DataRateValue); //IIC_RegRead(CTRL_REG1)|
|
||||
//----<2D><><EFBFBD>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ------------------------------------------------------//
|
||||
IIC_RegWrite(CTRL_REG2, 0); //(IIC_RegRead(CTRL_REG2) & ~MODS_MASK)
|
||||
//---------<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ------------------------------------//
|
||||
|
||||
IIC_RegWrite(CTRL_REG2, 0); //Normal mode
|
||||
|
||||
//Change the unit back to active mode to exit setup and start the readings
|
||||
MMA865x_Active();
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: Read_ZYXDr
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A><>ȡXYZ<59><5A><EFBFBD><EFBFBD>
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:NULL
|
||||
<20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD>:x,y,z<>ķ<EFBFBD><C4B7><EFBFBD>
|
||||
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];
|
||||
|
||||
memset((u8*) &gX_value, 0, 6);
|
||||
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)) {
|
||||
if (IIC_RegRead(STATUS_REG)) { //check we can read the status
|
||||
reg_flag = gMmatxdata;
|
||||
if ((reg_flag & ZYXDR_BIT) != 0) {
|
||||
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.Byte.hi = value[0];
|
||||
gX_value.Byte.lo = value[1];
|
||||
gY_value.Byte.hi = value[2];
|
||||
gY_value.Byte.lo = value[3];
|
||||
gZ_value.Byte.hi = value[4];
|
||||
gZ_value.Byte.lo = value[5];
|
||||
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
|
||||
@@ -168,38 +157,37 @@ int Read_ZYXDr(void) {
|
||||
return 0;
|
||||
}
|
||||
/*******************************************************************************
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: Cheak_XYData
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A><><EFBFBD>x<EFBFBD><78>y<EFBFBD>ķ<EFBFBD><C4B7><EFBFBD>仯
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:ǰһxy<78><79><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>xy<78><79><EFBFBD><EFBFBD>Ա<EFBFBD>
|
||||
<EFBFBD><EFBFBD><EFBFBD>ز<EFBFBD><EFBFBD><EFBFBD>:<3A>Ƿ<EFBFBD><C7B7>ƶ<EFBFBD>
|
||||
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 + 16)) || (x1 < (x0 - 16)))
|
||||
active = 1;
|
||||
if ((y1 > (y0 + 16)) || (y1 < (y0 - 16)))
|
||||
active = 1;
|
||||
|
||||
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;
|
||||
}
|
||||
/*******************************************************************************
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: Update_X
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A><><EFBFBD><EFBFBD>x
|
||||
<20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD>:NULL
|
||||
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.Byte.hi << 8) | (gX_value.Byte.lo & 0xf0)) >> 4;
|
||||
if (gX_value.Byte.hi > 0x7f)
|
||||
value = ((gX_value.hi << 8) | (gX_value.lo & 0xf0)) >> 4;
|
||||
if (gX_value.hi > 0x7f)
|
||||
x = (~value + 1) & 0xfff;
|
||||
else
|
||||
x = value & 0xfff;
|
||||
@@ -207,16 +195,15 @@ u16 Update_X(void) {
|
||||
return x;
|
||||
}
|
||||
/*******************************************************************************
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: Update_Y
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:NULL
|
||||
<20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD>:<3A><><EFBFBD><EFBFBD>y
|
||||
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.Byte.hi << 8) | (gY_value.Byte.lo & 0xf0)) >> 4;
|
||||
if (gY_value.Byte.hi > 0x7f)
|
||||
value = ((gY_value.hi << 8) | (gY_value.lo & 0xf0)) >> 4;
|
||||
if (gY_value.hi > 0x7f)
|
||||
y = (~value + 1) & 0xfff;
|
||||
else
|
||||
y = value & 0xfff;
|
||||
@@ -224,16 +211,15 @@ u16 Update_Y(void) {
|
||||
return y;
|
||||
}
|
||||
/*******************************************************************************
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: Update_z
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:NULL
|
||||
<20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD>:<3A><><EFBFBD><EFBFBD>z
|
||||
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.Byte.hi << 8) | (gZ_value.Byte.lo & 0xf0)) >> 4;
|
||||
if (gZ_value.Byte.hi > 0x7f)
|
||||
value = ((gZ_value.hi << 8) | (gZ_value.lo & 0xf0)) >> 4;
|
||||
if (gZ_value.hi > 0x7f)
|
||||
z = (~value + 1) & 0xfff;
|
||||
else
|
||||
z = value & 0xfff;
|
||||
@@ -241,22 +227,24 @@ u16 Update_Z(void) {
|
||||
return z;
|
||||
}
|
||||
/*******************************************************************************
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: Check_Accelerated
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A><><EFBFBD><EFBFBD><EFBFBD>ٶȴ<D9B6><C8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7>ƶ<EFBFBD>
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:NULL
|
||||
<20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD>:NULL
|
||||
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()) { /*<2A><><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
||||
x1 = Update_X();
|
||||
if (Read_ZYXDr()) { //Read the new values from the accelerometer
|
||||
x1 = Update_X(); //convert the values into usable form
|
||||
y1 = Update_Y();
|
||||
} else
|
||||
} else {
|
||||
x1 = x0;
|
||||
y1 = y0;
|
||||
gactive = Cheak_XYData(x0, y0, x1, y1);/*<2A><><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7>ƶ<EFBFBD>*/
|
||||
y1 = y0; //use old values
|
||||
gactive = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
gactive = Cheak_XYData(x0, y0, x1, y1); //gactive == If the unit is moving or not
|
||||
|
||||
x0 = x1;
|
||||
y0 = y1;
|
||||
|
||||
@@ -24,38 +24,39 @@
|
||||
int main(void) {
|
||||
RCC_Config(); //setup system clock
|
||||
NVIC_Config(0x4000);
|
||||
Init_Timer2(); //init the timer
|
||||
Init_Timer2(); //init the timers
|
||||
Init_Timer3();
|
||||
GPIO_Config();
|
||||
USB_Port(DISABLE);
|
||||
Delay_Ms(200);
|
||||
USB_Port(ENABLE);
|
||||
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();
|
||||
StartUp_Accelerated();//start the accelerometer if not in config mode
|
||||
|
||||
System_Init();
|
||||
Init_Oled();
|
||||
Clear_Screen();
|
||||
Init_Gtime();
|
||||
APP_Init();
|
||||
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();
|
||||
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
|
||||
Start_Watchdog(3000);
|
||||
Set_gKey(NO_KEY); //reset keys to all off
|
||||
Start_Watchdog(3000);//start the system watchdog as 3 seconds
|
||||
|
||||
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;
|
||||
LEAVE_WAIT_TIMER = 50;//reset timer so we dont poll accelerometer for another 500ms
|
||||
}
|
||||
OLed_Display(); //Draw in the Oled display
|
||||
OLed_Display(); //Draw in the Oled display for this mode
|
||||
Status_Tran(); //Handle user input and mode changing
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,157 +0,0 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* @file system_stm32f10x.c
|
||||
* @author MCD Application Team
|
||||
* @version V3.6.1
|
||||
* @date 09-March-2012
|
||||
* @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Source File.
|
||||
*
|
||||
* 1. This file provides two functions and one global variable to be called from
|
||||
* user application:
|
||||
* - SystemInit(): Setups the system clock (System clock source, PLL Multiplier
|
||||
* factors, AHB/APBx prescalers and Flash settings).
|
||||
* This function is called at startup just after reset and
|
||||
* before branch to main program. This call is made inside
|
||||
* the "startup_stm32f10x_xx.s" file.
|
||||
*
|
||||
* - SystemCoreClock variable: Contains the core clock (HCLK), it can be used
|
||||
* by the user application to setup the SysTick
|
||||
* timer or configure other parameters.
|
||||
*
|
||||
* - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must
|
||||
* be called whenever the core clock is changed
|
||||
* during program execution.
|
||||
*
|
||||
* 2. After each device reset the HSI (8 MHz) is used as system clock source.
|
||||
* Then SystemInit() function is called, in "startup_stm32f10x_xx.s" file, to
|
||||
* configure the system clock before to branch to main program.
|
||||
*
|
||||
* 3. If the system clock source selected by user fails to startup, the SystemInit()
|
||||
* function will do nothing and HSI still used as system clock source. User can
|
||||
* add some code to deal with this issue inside the SetSysClock() function.
|
||||
*
|
||||
* 4. The default value of HSE crystal is set to 8 MHz (or 25 MHz, depedning on
|
||||
* the product used), refer to "HSE_VALUE" define in "stm32f10x.h" file.
|
||||
* When HSE is used as system clock source, directly or through PLL, and you
|
||||
* are using different crystal you have to adapt the HSE value to your own
|
||||
* configuration.
|
||||
*
|
||||
******************************************************************************
|
||||
* @attention
|
||||
*
|
||||
* <h2><center>© 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.
|
||||
*
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
|
||||
#include "stm32f10x.h"
|
||||
|
||||
|
||||
#define VECT_TAB_OFFSET 0x0 /*!< Vector Table base offset field.
|
||||
This value must be a multiple of 0x200. */
|
||||
|
||||
static void SetSysClockTo72MHz(void);
|
||||
|
||||
/*******************************************************************************
|
||||
* Clock Definitions
|
||||
*******************************************************************************/
|
||||
u32 SystemCoreClock = 72000000; // 72MHz System Clock Frequency
|
||||
u8 AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9};
|
||||
|
||||
void SystemInit (void)
|
||||
{
|
||||
RCC->CR |= 0x00000001;// Set HSION bit
|
||||
RCC->CFGR &= 0xF8FF0000;// Reset SW, HPRE, PPRE1, PPRE2, ADCPRE and MCO bits
|
||||
RCC->CR &= 0xFEF6FFFF;// Reset HSEON, CSSON and PLLON bits
|
||||
RCC->CR &= 0xFFFBFFFF;// Reset HSEBYP bit
|
||||
RCC->CFGR &= 0xFF80FFFF;// Reset PLLSRC, PLLXTPRE, PLLMUL and USBPRE/OTGFSPRE bits
|
||||
RCC->CIR = 0x009F0000;// Disable all interrupts and clear pending bits
|
||||
|
||||
/* Configure the System clock frequency, HCLK, PCLK2 and PCLK1 prescalers */
|
||||
/* Configure the Flash Latency cycles and enable prefetch buffer */
|
||||
SetSysClockTo72MHz();
|
||||
SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH. */
|
||||
}
|
||||
|
||||
void SystemCoreClockUpdate (void)
|
||||
{
|
||||
u32 tmp = 0, pllmull = 0, pllsource = 0;
|
||||
|
||||
/* Get SYSCLK source -------------------------------------------------------*/
|
||||
tmp = RCC->CFGR & RCC_CFGR_SWS;
|
||||
switch(tmp){
|
||||
case 0x00: // HSI used as system clock
|
||||
SystemCoreClock = 8000000; // HSI_VALUE;
|
||||
break;
|
||||
case 0x04: // HSE used as system clock
|
||||
SystemCoreClock = 8000000; // HSE_VALUE;
|
||||
break;
|
||||
case 0x08: // PLL used as system clock
|
||||
// Get PLL clock source and multiplication factor
|
||||
pllmull = RCC->CFGR & RCC_CFGR_PLLMULL;
|
||||
pllsource = RCC->CFGR & RCC_CFGR_PLLSRC;
|
||||
pllmull = ( pllmull >> 18) + 2;
|
||||
// HSI oscillator clock divided by 2 selected as PLL clock entry
|
||||
if (pllsource == 0x00) SystemCoreClock = (HSI_VALUE >> 1) * pllmull;
|
||||
break;
|
||||
default:
|
||||
SystemCoreClock = HSI_VALUE;
|
||||
break;
|
||||
}
|
||||
|
||||
// Compute HCLK clock frequency
|
||||
tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)];// Get HCLK prescaler
|
||||
SystemCoreClock >>= tmp; // HCLK clock frequency
|
||||
}
|
||||
|
||||
static void SetSysClockTo72MHz(void)
|
||||
{
|
||||
u32 StartUpCounter = 0, HSEStatus = 0;
|
||||
|
||||
// SYSCLK, HCLK, PCLK2 and PCLK1 configuration
|
||||
RCC->CR |= ((u32)RCC_CR_HSEON);/* Enable HSE */
|
||||
do { // Wait till HSE is ready and if Time out is reached exit
|
||||
HSEStatus = RCC->CR & RCC_CR_HSERDY;
|
||||
StartUpCounter++;
|
||||
} while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT));
|
||||
|
||||
if ((RCC->CR & RCC_CR_HSERDY) != RESET) HSEStatus = 0x01;
|
||||
else HSEStatus = 0x00;
|
||||
|
||||
if (HSEStatus == 0x01){
|
||||
FLASH->ACR |= FLASH_ACR_PRFTBE;/* Enable Prefetch Buffer */
|
||||
/* Flash 2 wait state */
|
||||
FLASH->ACR &= (u32)((u32)~FLASH_ACR_LATENCY);
|
||||
FLASH->ACR |= (u32)FLASH_ACR_LATENCY_2;
|
||||
RCC->CFGR |= RCC_CFGR_HPRE_DIV1;/* HCLK = SYSCLK */
|
||||
RCC->CFGR |= RCC_CFGR_PPRE2_DIV1;/* PCLK2 = HCLK */
|
||||
RCC->CFGR |= RCC_CFGR_PPRE1_DIV2;/* PCLK1 = HCLK */
|
||||
/* PLL configuration: PLLCLK = HSE * 9 = 72 MHz */
|
||||
RCC->CFGR &= ~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLMULL);
|
||||
RCC->CFGR |= (u32)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL9);
|
||||
RCC->CR |= RCC_CR_PLLON;/* Enable PLL */
|
||||
while((RCC->CR & RCC_CR_PLLRDY) == 0){}/* Wait till PLL is ready */
|
||||
/* Select PLL as system clock source */
|
||||
RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW));
|
||||
RCC->CFGR |= (uint32_t)RCC_CFGR_SW_PLL;
|
||||
|
||||
|
||||
while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS) != (uint32_t)0x08)
|
||||
{}/* Wait till PLL is used as system clock source */
|
||||
}
|
||||
}
|
||||
|
||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
||||
@@ -21,11 +21,11 @@
|
||||
#include "MMA8652FC.h"
|
||||
/******************************************************************************/
|
||||
u8 gTemp_array[16 * 16 + 16];
|
||||
u8 gTemperatureshowflag = 0; /* 0 <20><><EFBFBD><EFBFBD><EFBFBD>϶<EFBFBD>,1<>ǻ<EFBFBD><C7BB>϶<EFBFBD>*/
|
||||
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 }; /*<2A>¶<EFBFBD>ѡ<EFBFBD><D1A1>*/
|
||||
u32 gCont = 0; /*gCont <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬ת<CCAC><D7AA><EFBFBD><EFBFBD><EFBFBD>ˢ<EFBFBD><CBA2><EFBFBD><EFBFBD>ʶ*/
|
||||
u16 gSet_table[2] = { 4000, 1000 };
|
||||
u32 gCont = 0;
|
||||
|
||||
static u8 Ver_s[] = { /*12*16*/0x04, 0x0C, 0x74, 0x80, 0x00, 0x00, 0x00, 0x80,
|
||||
0x74, 0x0C, 0x04, 0x00, 0x00, 0x00, 0x00, 0x03, 0x1C, 0x60, 0x1C, 0x03,
|
||||
@@ -51,48 +51,37 @@ static u8 Ver_s[] = { /*12*16*/0x04, 0x0C, 0x74, 0x80, 0x00, 0x00, 0x00, 0x80,
|
||||
/******************************************************************************/
|
||||
|
||||
/*******************************************************************************
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: Get_UpdataFlag
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A><>ȡ<EFBFBD><C8A1>Ļˢ<C4BB>±<EFBFBD>־
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:NULL
|
||||
<20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD>:<3A><>Ļˢ<C4BB>±<EFBFBD>־
|
||||
Function:
|
||||
Description:
|
||||
*******************************************************************************/
|
||||
u32 Get_UpdataFlag(void) {
|
||||
return gCont;
|
||||
}
|
||||
/*******************************************************************************
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: Set_UpdataFlag
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļˢ<C4BB>±<EFBFBD>־
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:1 ˢ<>£<EFBFBD>0 <20><>ˢ<EFBFBD><CBA2>
|
||||
<20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD>:NULL
|
||||
Function:
|
||||
Description:
|
||||
*******************************************************************************/
|
||||
void Set_UpdataFlag(u32 cont) {
|
||||
gCont = cont;
|
||||
}
|
||||
/*******************************************************************************
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: Set_TemperatureShowFlag
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A><><EFBFBD><EFBFBD><EFBFBD>¶<EFBFBD><C2B6><EFBFBD>ʾ<EFBFBD><CABE>ʽ
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:flag <20><><EFBFBD>϶<EFBFBD>(0),<2C><><EFBFBD>϶<EFBFBD>(1)<29><>־
|
||||
<20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD>:NULL
|
||||
Function:
|
||||
Description:
|
||||
*******************************************************************************/
|
||||
void Set_TemperatureShowFlag(u8 flag) {
|
||||
gTemperatureshowflag = flag;
|
||||
}
|
||||
/*******************************************************************************
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: Get_TemperatureShowFlag
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A><>ȡ<EFBFBD>¶<EFBFBD><C2B6><EFBFBD>ʾ<EFBFBD><CABE>ʽ
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:NULL
|
||||
<20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD>:flag <20><><EFBFBD>϶<EFBFBD>(0),<2C><><EFBFBD>϶<EFBFBD>(1)<29><>־
|
||||
Function:
|
||||
Description:־
|
||||
*******************************************************************************/
|
||||
u8 Get_TemperatureShowFlag(void) {
|
||||
return gTemperatureshowflag;
|
||||
}
|
||||
/*******************************************************************************
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: TemperatureShow_Change
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A><><EFBFBD>϶Ȼ<CFB6><C8BB>϶<EFBFBD><CFB6>ת<E0BBA5><D7AA>
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: flag 0,<2C><><EFBFBD>϶<EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD>϶<EFBFBD>
|
||||
flag 1,<2C><><EFBFBD>϶<EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD>϶<EFBFBD>
|
||||
tmp Ҫת<D2AA><D7AA><EFBFBD><EFBFBD><EFBFBD>¶<EFBFBD>
|
||||
<20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD>:ת<><D7AA><EFBFBD><EFBFBD><EFBFBD>ֵ
|
||||
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) {
|
||||
@@ -102,10 +91,8 @@ s16 TemperatureShow_Change(u8 flag, s16 tmp) {
|
||||
}
|
||||
}
|
||||
/*******************************************************************************
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: APP_Init
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A><><EFBFBD>ݵ<EFBFBD>ѹ<EFBFBD><D1B9>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>ʼ״̬
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:NULL
|
||||
<20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD>:NULL
|
||||
Function:APP_Init
|
||||
Description:Init the operating mode by looking at input voltage to pick USB or normal
|
||||
*******************************************************************************/
|
||||
void APP_Init(void) {
|
||||
int rev;
|
||||
@@ -113,13 +100,13 @@ void APP_Init(void) {
|
||||
HEATING_TIMER= 0;
|
||||
UI_TIMER= 0;
|
||||
|
||||
rev = Read_Vb(0);
|
||||
if (rev == 0)
|
||||
rev = Read_Vb(0); //Read input voltage
|
||||
if (rev == 0) //no input volatage == error state
|
||||
Set_CtrlStatus(ALARM);
|
||||
else if (rev >= 4) {
|
||||
else if (rev >= 4) { //We are USB powered (5V approx at input)
|
||||
Set_LongKeyFlag(1);
|
||||
Set_CtrlStatus(CONFIG);
|
||||
} else {
|
||||
} else { //Normal mode > ~9V at input
|
||||
Set_CtrlStatus(IDLE);
|
||||
G6_TIMER= device_info.idle_time;
|
||||
}
|
||||
@@ -127,10 +114,8 @@ void APP_Init(void) {
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: Display_Temp
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A><>ʾ<EFBFBD>¶<EFBFBD>
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:x:<3A><>ʾλ<CABE><CEBB> Temp:<3A>¶<EFBFBD>
|
||||
<20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD>:NULL
|
||||
Function:
|
||||
Description:
|
||||
*******************************************************************************/
|
||||
void Display_Temp(u8 x, s16 temp) {
|
||||
char Str[8];
|
||||
@@ -179,23 +164,21 @@ void Display_Temp(u8 x, s16 temp) {
|
||||
TEMPSHOW_TIMER= 20; //200ms
|
||||
}
|
||||
/*******************************************************************************
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: Show_Notice
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE>Ϣ
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:NULL
|
||||
<20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD>:NULL
|
||||
Function:
|
||||
Description:
|
||||
*******************************************************************************/
|
||||
void Show_Notice(void) {
|
||||
int j, k;
|
||||
static u8* ptr0;
|
||||
static u8 posi = 0, i = 0;
|
||||
|
||||
if (i == 0) { //<EFBFBD><EFBFBD>1 <20><>
|
||||
if (i == 0) { //1
|
||||
ptr0 = Oled_DrawArea(0, 0, 96, 16, (u8*) Maplib);
|
||||
} else if (i == 1) { //<EFBFBD><EFBFBD>2 <20><>
|
||||
} else if (i == 1) { //2
|
||||
ptr0 = Oled_DrawArea(0, 0, 96, 16, ptr0);
|
||||
} else if (i == 2) { //<EFBFBD><EFBFBD>3 <20><>
|
||||
} else if (i == 2) { //3
|
||||
ptr0 = Oled_DrawArea(0, 0, 96, 16, (u8*) Maplib);
|
||||
} else if (i == 3) { //<EFBFBD><EFBFBD>4 <20><>
|
||||
} else if (i == 3) { //4
|
||||
for (j = 0; j < 6; j++) {
|
||||
k = 84;
|
||||
while (k >= posi) {
|
||||
@@ -214,18 +197,16 @@ void Show_Notice(void) {
|
||||
i = 0;
|
||||
}
|
||||
/*******************************************************************************
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: Show_Ver
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A><>ʾ<EFBFBD>汾
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:ver <20>汾<EFBFBD><E6B1BE>flag (0 :<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ )(1<><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
||||
<20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD>:NULL
|
||||
Function:
|
||||
Description:
|
||||
*******************************************************************************/
|
||||
void Show_Ver(u8 ver[], u8 flag) {
|
||||
u8 *ptr;
|
||||
int k, i;
|
||||
u8 temp0, temp1, temp2;
|
||||
u8 temp0 = 0, temp1 = 0, temp2 = 0;
|
||||
|
||||
if (ver[2] >= 0x30 && ver[2] < 0x3a)
|
||||
temp1 = ver[2] - 0x30;
|
||||
temp1 = ver[2] - 0x30; //shift from ascii to the raw value
|
||||
if (ver[3] >= 0x30 && ver[3] < 0x3a)
|
||||
temp2 = ver[3] - 0x30;
|
||||
if (ver[0] >= 0x30 && ver[0] < 0x3a)
|
||||
@@ -256,10 +237,8 @@ void Show_Ver(u8 ver[], u8 flag) {
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: Show_Config
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A><>ʾCONFIG
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:NULL
|
||||
<20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD>:NULL
|
||||
Function:
|
||||
Description: Draws the word CONFIG to the screen
|
||||
*******************************************************************************/
|
||||
void Show_Config(void) {
|
||||
u8* ptr;
|
||||
@@ -272,10 +251,8 @@ void Show_Config(void) {
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: Show_TempDown
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A><>ʾ<EFBFBD>¶<EFBFBD><C2B6>½<EFBFBD>: ʵ<><CAB5><EFBFBD>¶<EFBFBD>>>>Ŀ<><C4BF><EFBFBD>¶<EFBFBD>
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:temp ʵ<><CAB5><EFBFBD>¶<EFBFBD>,dst_temp Ŀ<><C4BF><EFBFBD>¶<EFBFBD>
|
||||
<20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD>:NULL
|
||||
Function:
|
||||
Description:
|
||||
*******************************************************************************/
|
||||
void Show_TempDown(s16 temp, s16 dst_temp) {
|
||||
static u8 guide_ui = 0;
|
||||
@@ -327,10 +304,8 @@ void Show_TempDown(s16 temp, s16 dst_temp) {
|
||||
Display_Str10(56, str);
|
||||
}
|
||||
/*******************************************************************************
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: Show_Cal
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A><>ʾУ<D0A3><D7BC><EFBFBD>
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:flag = 1 У<D0A3>ɹ<EFBFBD> flag = 2 Уʧ<D7BC><CAA7>
|
||||
<20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD>:NULL
|
||||
Function:
|
||||
Description:
|
||||
*******************************************************************************/
|
||||
void Show_Cal(u8 flag) {
|
||||
u8 i;
|
||||
@@ -349,10 +324,8 @@ void Show_Cal(u8 flag) {
|
||||
Clear_Watchdog();
|
||||
}
|
||||
/*******************************************************************************
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: Show_Warning
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:NULL
|
||||
<20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD>:NULL
|
||||
Function:
|
||||
Description:
|
||||
*******************************************************************************/
|
||||
void Show_Warning(void) {
|
||||
u8 i;
|
||||
|
||||
@@ -26,7 +26,7 @@ void Mass_Storage_In (void)
|
||||
case BOT_CSW_Send:
|
||||
case BOT_ERROR:
|
||||
Bot_State = BOT_IDLE;
|
||||
SetEPRxStatus(ENDP2, EP_RX_VALID);/* enable the Endpoint to recive the next cmd*/
|
||||
SetEPRxStatus(ENDP2, EP_RX_VALID);/* enable the Endpoint to receive the next cmd*/
|
||||
break;
|
||||
case BOT_DATA_IN:
|
||||
switch (CBW.CB[0])
|
||||
|
||||
Reference in New Issue
Block a user