mirror of
https://github.com/rvtr/ctr_mcu.git
synced 2025-10-31 13:51:10 -04:00
歩数計 ログ読み出し対応(未検証)
git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-05-23%20-%20ctr.7z%20+%20svn_v1.068.zip/ctr/svn/ctr_mcu@48 013db118-44a6-b54f-8bf7-843cb86687b1
This commit is contained in:
parent
1cac1b4ae6
commit
da40a5147c
146
trunk/accero.c
146
trunk/accero.c
@ -54,9 +54,8 @@ u16* hyst_pedometer;
|
||||
|
||||
// ========================================================
|
||||
task_interval tsk_soft_int( );
|
||||
static void pedo_increment();
|
||||
|
||||
|
||||
static void hosu_increment();
|
||||
u16 get_long_hour();
|
||||
|
||||
|
||||
|
||||
@ -122,7 +121,7 @@ task_status_immed tsk_cbk_accero( )
|
||||
{
|
||||
// 一歩増えました
|
||||
DBG_LED_WIFI_2_on;
|
||||
pedo_increment();
|
||||
hosu_increment();
|
||||
}
|
||||
}
|
||||
interval_hh = 0;
|
||||
@ -155,13 +154,14 @@ task_status_immed tsk_cbk_accero( )
|
||||
累積をインクリメント
|
||||
履歴を更新
|
||||
========================================================*/
|
||||
static void pedo_increment()
|
||||
#define MAGIC_PEDO_NODATA 65535
|
||||
#define MAGIC_PEDO_MAX 65534
|
||||
|
||||
u8 p_record;
|
||||
|
||||
static void hosu_increment()
|
||||
{
|
||||
static u8 last_hour; // 履歴の最新は何時?
|
||||
static u8 last_day;
|
||||
static u8 last_month;
|
||||
static u8 last_year;
|
||||
static u8 p_record;
|
||||
static u16 last_hour; // 履歴の最新は何時?
|
||||
|
||||
// 累積の更新 //
|
||||
// いろいろ失敗した...
|
||||
@ -178,30 +178,72 @@ static void pedo_increment()
|
||||
}
|
||||
|
||||
// 毎時履歴の更新
|
||||
DI();
|
||||
RWAIT = 1;
|
||||
while( !RWST ){;}
|
||||
|
||||
if(( last_hour != HOUR ) || ( last_day != DAY ) || ( last_month != MONTH ) || ( last_year != YEAR ))
|
||||
{
|
||||
last_hour = HOUR;
|
||||
last_day = DAY;
|
||||
last_month = MONTH;
|
||||
last_year = YEAR;
|
||||
p_record += 1;
|
||||
*(hyst_pedometer + p_record) = 0;
|
||||
}
|
||||
RWAIT = 0;
|
||||
EI();
|
||||
u16 temp_hour = get_long_hour();
|
||||
if( temp_hour > last_hour )
|
||||
{
|
||||
for( ; last_hour != temp_hour; last_hour += 1 )
|
||||
{
|
||||
p_record += 1;
|
||||
*(hyst_pedometer + p_record) = MAGIC_PEDO_NODATA;
|
||||
}
|
||||
*(hyst_pedometer + p_record) = 0;
|
||||
}
|
||||
|
||||
*(hyst_pedometer + p_record) += 1;
|
||||
if( *( hyst_pedometer + p_record ) == 65535 ) // 65535はマジックナンバーで
|
||||
{
|
||||
*hyst_pedometer = 65534;
|
||||
*(hyst_pedometer + p_record) += 1;
|
||||
if( *( hyst_pedometer + p_record ) == MAGIC_PEDO_MAX )
|
||||
{
|
||||
*hyst_pedometer = 65534;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
bit hosu_read_inited;
|
||||
bit record_read_msb_lsb;
|
||||
|
||||
/* ========================================================
|
||||
歩数計ヒストリ読み出しの後処理(初期化)
|
||||
読み出しポインタのクリア
|
||||
======================================================== */
|
||||
void hosu_read_end( )
|
||||
{
|
||||
record_read_msb_lsb = 0;
|
||||
hosu_read_inited = 0;
|
||||
}
|
||||
|
||||
/* ========================================================
|
||||
歩数計のヒストリを返す。
|
||||
1回呼ぶ度に、ヒストリの下位、上位、一時間遡って下位上位...
|
||||
======================================================== */
|
||||
u8 hosu_read( )
|
||||
{
|
||||
u16 temp;
|
||||
u8 rv;
|
||||
|
||||
static u8 p_record_buffer;
|
||||
|
||||
if( hosu_read_inited == 0 )
|
||||
{
|
||||
p_record_buffer = p_record;
|
||||
hosu_read_inited = 1;
|
||||
}
|
||||
|
||||
temp = *( hyst_pedometer + p_record_buffer );
|
||||
if( record_read_msb_lsb == 0 )
|
||||
{
|
||||
rv = (u8)( ( temp & 0xFF00 ) >> 8 );
|
||||
}
|
||||
else
|
||||
{
|
||||
rv = (u8)( temp & 0x00FF );
|
||||
p_record_buffer += 1;
|
||||
}
|
||||
record_read_msb_lsb += 1;
|
||||
|
||||
return( rv );
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*=========================================================
|
||||
@ -327,3 +369,51 @@ __interrupt void intp23_ACC_ready( )
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* ========================================================
|
||||
2000年1月1日0時からの現在時刻を返す
|
||||
|
||||
引数 無し
|
||||
返値 u16 long_hour
|
||||
======================================================== */
|
||||
static const u16 DAYS_FROM_HNY[] = {
|
||||
0,
|
||||
0, 31, 31+28, 59+31, 90+30,
|
||||
120+31, 151+30, 181+31, 212+31, 243+30,
|
||||
273+31, 304+30 };
|
||||
|
||||
|
||||
u16 get_long_hour()
|
||||
{
|
||||
u16 long_hour;
|
||||
|
||||
DI();
|
||||
|
||||
RWAIT = 1;
|
||||
while( !RWST ){;}
|
||||
|
||||
// まず日数の部分
|
||||
long_hour = YEAR * 365;
|
||||
long_hour += ( YEAR / 4 ) +1; // 閏日の分。修正ユリウスでは2000年も閏年
|
||||
long_hour += DAYS_FROM_HNY[ MONTH ];
|
||||
if(( 2 <= MONTH ) && ( DAY < 29 ))
|
||||
{
|
||||
// 2/29より前
|
||||
long_hour -= 1;
|
||||
}
|
||||
long_hour += DAY;
|
||||
|
||||
long_hour *= 24;
|
||||
long_hour += HOUR;
|
||||
|
||||
RWAIT = 0;
|
||||
|
||||
EI();
|
||||
|
||||
return( long_hour );
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@ -5,13 +5,18 @@
|
||||
#include "jhl_defs.h"
|
||||
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////
|
||||
extern u16* hyst_pedometer;
|
||||
extern u16* hyst_pedometer;
|
||||
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////
|
||||
task_status_immed tsk_cbk_accero( );
|
||||
task_status_immed acc_hosu_set( );
|
||||
|
||||
void hosu_read_end( );
|
||||
u8 hosu_read( );
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
@ -4,6 +4,8 @@
|
||||
'09 Apr
|
||||
======================================================== */
|
||||
#include "incs.h"
|
||||
#include "accero.h"
|
||||
|
||||
|
||||
#ifdef _MCU_BSR_
|
||||
// #ifdef _MODEL_TS0_ || _MODEL_WM0_
|
||||
@ -83,8 +85,6 @@ __interrupt void int_iic_ctr( )
|
||||
SPIE = 0;
|
||||
LREL = 1;
|
||||
|
||||
rtc_unlock( );
|
||||
|
||||
// レジスタリードで、割り込みピンをネゲート
|
||||
// まだ読まれてない割り込みがあれば、再度アサート
|
||||
if( irq_readed )
|
||||
@ -100,6 +100,9 @@ __interrupt void int_iic_ctr( )
|
||||
IRQ0_ast;
|
||||
}
|
||||
}
|
||||
|
||||
// 歩数計読み出し終了
|
||||
hosu_read_end( );
|
||||
return;
|
||||
}
|
||||
|
||||
@ -108,7 +111,6 @@ __interrupt void int_iic_ctr( )
|
||||
if( ( state == IIC_TX ) || ( state == IIC_RX ) )
|
||||
{
|
||||
state = IIC_IDLE;
|
||||
rtc_unlock( );
|
||||
}
|
||||
}
|
||||
|
||||
@ -131,7 +133,7 @@ __interrupt void int_iic_ctr( )
|
||||
break;
|
||||
|
||||
case ( IIC_TX_OR_RX ):
|
||||
// if( TRC ){ // 送信方向フラグ
|
||||
// if( TRC ){ // 送信方向フラグ で区別するのは、割り込み遅延時に不具合が起こりえる
|
||||
if( STD )
|
||||
{ // スタートコンディション検出フラグ
|
||||
// リードされる
|
||||
@ -168,7 +170,11 @@ __interrupt void int_iic_ctr( )
|
||||
vreg_ctr_write( reg_adrs, trx_buf );
|
||||
WREL = 1;
|
||||
}
|
||||
reg_adrs += 1;
|
||||
if( reg_adrs != VREG_C_ACC_HOSU_HIST )
|
||||
{
|
||||
reg_adrs += 1;
|
||||
}
|
||||
|
||||
if( state == IIC_TX )
|
||||
{
|
||||
trx_buf = vreg_ctr_read( reg_adrs );
|
||||
|
||||
@ -59,14 +59,14 @@ void main_loop( void )
|
||||
vreg_ctr_init( );
|
||||
vreg_twl_init( );
|
||||
|
||||
read_dipsw( );
|
||||
// 特定スイッチで何かするか?
|
||||
read_dipsw( ); // 特定スイッチで何かするか?
|
||||
|
||||
hyst_pedometer = (u16*)pool;
|
||||
|
||||
|
||||
renge_init( );
|
||||
renge_task_interval_run_force = 1;
|
||||
|
||||
hyst_pedometer = (u16*)pool;
|
||||
|
||||
EI( );
|
||||
|
||||
RTCIMK = 0; /* 割り込み(アラーム&インターバル)許可 */
|
||||
|
||||
@ -190,7 +190,7 @@ err firm_update( )
|
||||
if( comp == 0 )
|
||||
{
|
||||
FSL_InvertBootFlag( );
|
||||
FSL_SwapBootCluster( ); // リセットせずに頭から
|
||||
FSL_SwapBootCluster( ); // リセットせずに頭から。FSL_Closeは不要
|
||||
// FSL_ForceReset(); // リセット
|
||||
// FSL_SwapActiveBootCluster(); // ←スワップされてしまうので、続けられず暴走!
|
||||
// 戻ってこない //
|
||||
|
||||
@ -267,7 +267,13 @@ u8 vreg_ctr_read( u8 adrs )
|
||||
{
|
||||
return( vreg_ctr[ VREG_C_MCU_STATUS ] | ( ( vreg_twl[ REG_TWL_INT_ADRS_MODE ] & 0x03 ) << 6 ) );
|
||||
}
|
||||
#if 0
|
||||
|
||||
if( adrs == VREG_C_ACC_HOSU_HIST )
|
||||
{
|
||||
return( hosu_read() );
|
||||
}
|
||||
|
||||
#if 1
|
||||
if( adrs >= VREG_C_ENDMARK_ )
|
||||
{
|
||||
return( 0xEE );
|
||||
|
||||
Loading…
Reference in New Issue
Block a user